[
  {
    "path": ".editorconfig",
    "content": "# editorconfig.org\n\n# top-most EditorConfig file\nroot = true\n\n# Default settings:\n# A newline ending every file\n# Use 4 spaces as indentation\n[*]\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\n\n# Xml project files\n[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}]\nindent_size = 2\n\n# Xml files\n[*.{xml,stylecop,resx,ruleset}]\nindent_size = 2\n\n# Xml config files\n[*.{props,targets,config,nuspec}]\nindent_size = 2\n\n# Shell scripts\n[*.sh]\nend_of_line = lf\n[*.{cmd, bat}]\nend_of_line = crlf\n[*.cs]\n\n# IDE0067: Dispose objects before losing scope\ndotnet_diagnostic.IDE0067.severity = error\n\n# IDE0063: Use simple 'using' statement\ncsharp_prefer_simple_using_statement = true:error\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln    merge=union\n*.csproj merge=union\n*.vbproj merge=union\n*.fsproj merge=union\n*.dbproj merge=union\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [lextm]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/workflows/dotnetcore.yml",
    "content": "name: .NET Desktop CI\n\non: [push, pull_request]\n\njobs:\n  build:\n    runs-on: windows-2022\n\n    steps:\n    - uses: actions/checkout@v2\n      with:\n        submodules: recursive\n\n    - name: Set up .NET\n      uses: actions/setup-dotnet@v1\n      with:\n        dotnet-version: '7.0' # Specify the .NET version\n\n    - name: Run custom script\n      run: .\\dist.ci.bat\n\n    # Add additional steps as needed\n"
  },
  {
    "path": ".gitignore",
    "content": "build/\n*.suo\n*.user\n_ReSharper*\n*.csproj.user\n*.resharper.user\n*.userprefs\n*.suo\n*.cache\n*.trx\n*.pidb\nThumbs.db\n[Bb]in\n[Dd]ebug\n[Oo]bj\n[Rr]elease\n[Tt]est[Rr]esult*\n_UpgradeReport_Files\n*[Pp]ublish.xml\n*.project\n*.metadata\nlogs\n*.generated.cs\nT4MVC.cs\n/SharpSnmpLib/sharpsnmplib.snk\n/packages\n/lib/sharpsnmplib.snk\n/gendarme\n/lib/Activelock3.6.NET/ActiveLock3_6NET.xml\n/lib/Activelock3.6.NET/SharpSnmpLib.Optional.dll\n/lib/NBug.dll\n\n/SharpSnmpLib.Mib/Help\n\n/NDependOut\n.vs/\n/.idea\n/JexusManager.zip\n/*.msi\n/Setup/Files64.wxs\n/Setup/Files86.wxs\n/Setup/FilesARM64.wxs\nSetup/Components.wxi\nSetup/Paths.wxi\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"LanguageServer.Framework\"]\n\tpath = LanguageServer.Framework\n\turl = https://github.com/CppCXY/LanguageServer.Framework.git\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{    \n    \"dotnet.defaultSolution\": \"JexusManager.slnx\"\n}"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at support@lextudio.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "CertificateInstaller/CertificateInstaller.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>CertificateInstaller</RootNamespace>\n    <AssemblyName>CertificateInstaller</AssemblyName>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>..\\JexusManager\\JexusManager.snk</AssemblyOriginatorKeyFile>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"..\\Microsoft.Web.Administration\\NativeMethods.cs\" Link=\"NativeMethods.cs\" />\n    <Compile Include=\"..\\Microsoft.Web.Administration\\SOCKADDR_IN.cs\" Link=\"SOCKADDR_IN.cs\" />\n    <Compile Include=\"..\\Microsoft.Web.Administration\\SOCKADDR_STORAGE.cs\" Link=\"SOCKADDR_STORAGE.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Windows.CsWin32\" Version=\"0.3.183\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"Mono.Options\" Version=\"6.12.0.148\" />\n    <PackageReference Include=\"Serilog.Enrichers.Process\" Version=\"3.0.0\" />\n    <PackageReference Include=\"Serilog.Settings.Configuration\" Version=\"9.0.0\" />\n    <PackageReference Include=\"Serilog.Sinks.File\" Version=\"7.0.0\" />\n    <PackageReference Include=\"System.Management\" Version=\"9.0.5\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Reference Include=\"System.Management\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "CertificateInstaller/NativeMethods.json",
    "content": "{\n    \"$schema\": \"https://aka.ms/CsWin32.schema.json\",\n    \"emitSingleFile\": false\n}\n"
  },
  {
    "path": "CertificateInstaller/NativeMethods.txt",
    "content": "SHObjectProperties\nSHOW_WINDOW_CMD\nntohs\nhtons\nSOCKADDR_IN\nSOCKADDR_STORAGE\nADDRESS_FAMILY\nCreatePersistentTcpPortReservation\nDeletePersistentTcpPortReservation\nWIN32_ERROR\n"
  },
  {
    "path": "CertificateInstaller/ProcessExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Diagnostics;\nusing System.Management;\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class ProcessExtensions\n    {\n        public static string GetCommandLine(this Process process)\n        {\n            using (var searcher = new ManagementObjectSearcher(\"SELECT CommandLine FROM Win32_Process WHERE ProcessId = \" + process.Id))\n            {\n                foreach (var @object in searcher.Get())\n                {\n                    return @object[\"CommandLine\"] as string;\n                }\n            }\n\n            return string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "CertificateInstaller/Program.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Mono.Options;\nusing Serilog;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Security.Cryptography.X509Certificates;\n\nvar folder = Environment.ExpandEnvironmentVariables(@\"%APPDATA%\\JexusManager\");\nif (!Directory.Exists(folder))\n{\n    Directory.CreateDirectory(folder);\n}\n\nLog.Logger = new LoggerConfiguration()\n    .MinimumLevel.Information()\n    .Enrich.FromLogContext()\n    .Enrich.WithProcessId()\n    .Enrich.WithProcessName()\n    .WriteTo.File(\n        Path.Combine(folder, \"log.txt\"),\n        rollingInterval: RollingInterval.Day,\n        retainedFileCountLimit: 5,\n        shared: true)\n    .CreateLogger();\n\nLog.Information($\"Process {System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture} started.\");\n\nstring p12File = null;\nstring p12Pwd = null;\nstring friendlyName = null;\nstring store = null;\nstring hash = null;\nstring address = null;\nstring port = null;\nstring id = null;\nstring host = null;\nstring url = null;\nstring descriptor = null;\nstring config = null;\nstring siteId = null;\nstring launcher = null;\nstring resultFile = null;\nbool kill = false;\nbool restart = false;\nstring verb = null;\nstring input = null;\n\nOptionSet p =\n    new OptionSet()\n        .Add(\"verb:\", \"Verb\", delegate (string v) { if (v != null) verb = v; })\n        .Add(\"input:\", \"Appcmd input string\", delegate (string v) { if (v != null) input = v; })\n        .Add(\"f:\", \"File name\", delegate (string v) { if (v != null) p12File = v; })\n        .Add(\"p:\", \"Password\", delegate (string v) { if (v != null) p12Pwd = v; })\n        .Add(\"n:\", \"Friendly name\", delegate (string v) { if (v != null) friendlyName = v; })\n        .Add(\"s:\", \"Store name\", delegate (string v) { if (v != null) store = v; })\n        .Add(\"h:\", \"Certificate hash (not required when adding certificates)\", delegate (string v) { if (v != null) hash = v; })\n        .Add(\"a:\", \"IP address\", delegate (string v) { if (v != null) address = v; })\n        .Add(\"o:\", \"Port number\", delegate (string v) { if (v != null) port = v; })\n        .Add(\"i:\", \"Application ID\", delegate (string v) { if (v != null) id = v; })\n        .Add(\"x:\", \"SNI host name (not required when managing IP based bindings)\", delegate (string v) { if (v != null) host = v; })\n        .Add(\"u:\", \"Reserved URL\", delegate (string v) { if (v != null) url = v; })\n        .Add(\"d:\", \"Security descriptor\", delegate (string v) { if (v != null) descriptor = v; })\n        .Add(\"config:\", \"Config file path\", delegate (string v)\n        {\n            if (v != null) config = v;\n        })\n        .Add(\"siteId:\", \"Site ID\", delegate (string v)\n        {\n            if (v != null) siteId = v;\n        })\n        .Add(\"resultFile:\", \"Result File\", delegate (string v)\n        {\n            if (v != null) resultFile = v;\n        })\n        .Add(\"launcher:\", \"IIS Express path\", delegate (string v)\n        {\n            if (v != null)\n                launcher = v;\n        })\n        .Add(\"k\", \"Kill Process\", delegate (string v)\n        {\n            if (v != null) kill = true;\n        })\n        .Add(\"r\", \"Restart Site\", delegate (string v)\n        {\n            if (v != null) restart = true;\n        });\n\nif (args.Length == 0)\n{\n    ShowHelp(p);\n    Log.Information(\"No arguments.\");\n    return -1;\n}\n\nList<string> extra;\ntry\n{\n    extra = p.Parse(args);\n}\ncatch (OptionException ex)\n{\n    Log.Fatal(ex, \"Option exception.\");\n    return -2;\n}\n\nif (extra.Count > 0)\n{\n    ShowHelp(p);\n    Log.Fatal(\"Unknown arguments.\", extra);\n    return -3;\n}\n\ntry\n{\n    if (verb == \"appcmd\")\n    {\n        if (input == null || launcher == null)\n        {\n            ShowHelp(p);\n            Log.Fatal(\"Calling appcmd without arguments.\");\n            return -4;\n        }\n\n        return RunProcess(launcher, resultFile, input);\n    }\n\n    Log.Information($\"Arguments: {string.Join(' ', args)}\");\n    if (config != null)\n    {\n        return HandleSite(config, siteId, launcher, resultFile, kill, restart);\n    }\n\n    if (url != null)\n    {\n        return HandleReservedUrl(url, descriptor);\n    }\n\n    if (store == null)\n    {\n        return DeleteMapping(address, port, host);\n    }\n\n    using var personal = new X509Store(store, StoreLocation.LocalMachine);\n    try\n    {\n        personal.Open(OpenFlags.ReadWrite);\n    }\n    catch (Exception ex)\n    {\n        Console.WriteLine(ex);\n        Log.Fatal(ex, \"Certificate store open exception.\");\n        return -5;\n    }\n\n    if (hash == null)\n    {\n        return AddCertificate(p12File, p12Pwd, friendlyName, personal);\n    }\n\n    if (string.IsNullOrEmpty(hash))\n    {\n        if (address == null && host != null)\n        {\n            NativeMethods.DeleteSniBinding(new Tuple<string, int>(host, int.Parse(port)));\n            return 0;\n        }\n\n        ShowHelp(p);\n        Log.Fatal(\"Should never reach here\");\n        return -6;\n    }\n\n    var selectedItem = personal.Certificates.Find(X509FindType.FindByThumbprint, hash, false);\n    if (selectedItem.Count > 0)\n    {\n        X509Certificate2 cert = selectedItem[0];\n        if (address == null)\n        {\n            return RemoveCertificate(port, host, personal, cert);\n        }\n        else\n        {\n            return CreateMapping(store, address, port, id, host, cert);\n        }\n    }\n}\ncatch (Exception ex)\n{\n    Console.WriteLine(ex);\n    Log.Fatal(ex, \"Unknown exception.\");\n    return -7;\n}\n\nConsole.WriteLine(\"Not supported path\");\nLog.Fatal(\"Should never hit this\");\nreturn -8;\n\nint AddCertificate(string p12File, string p12Pwd, string friendlyName, X509Store personal)\n{\n    var x509 = X509CertificateLoader.LoadPkcs12FromFile(\n        p12File,\n        p12Pwd,\n        X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet\n    );\n    x509.FriendlyName = friendlyName;\n    personal.Add(x509);\n    return 0;\n}\n\nint HandleSite(string config, string siteId, string launcher, string resultFile, bool kill, bool restart)\n{\n    if (resultFile != null)\n    {\n        return StartSite(config, siteId, launcher, resultFile, restart);\n    }\n\n    if (kill)\n    {\n        return KillSite(config, siteId);\n    }\n\n    return QuerySite(config, siteId);\n}\n\nint RunProcess(string launcher, string resultFile, string input)\n{\n    var process = new Process\n    {\n        StartInfo =\n                            {\n                                FileName = launcher,\n                                Arguments = input,\n                                CreateNoWindow = true,\n                                WindowStyle = ProcessWindowStyle.Hidden,\n                                RedirectStandardError = true,\n                                RedirectStandardOutput = true,\n                                UseShellExecute = false\n                            }\n    };\n    process.Start();\n    process.WaitForExit();\n    var error = process.StandardError.ReadToEnd();\n    var output = process.StandardOutput.ReadToEnd();\n    if (process.ExitCode != 0)\n    {\n        File.AppendAllText(resultFile, error);\n        File.AppendAllText(resultFile, output);\n    }\n\n    return process.ExitCode;\n}\n\nint StartSite(string config, string siteId, string launcher, string resultFile, bool restart)\n{\n    if (restart)\n    {\n        var toKill = $\"/config:\\\"{config}\\\" /siteid:{siteId} /systray:false /trace:error\";\n        var items = Process.GetProcessesByName(\"iisexpress\");\n        var found = items.Where(item =>\n        {\n            var command = item.GetCommandLine();\n            return command != null && command.TrimEnd().EndsWith(toKill, StringComparison.Ordinal);\n        });\n        foreach (var item in found)\n        {\n            item.Kill();\n            item.WaitForExit();\n        }\n    }\n\n    // start a site.\n    var process = new Process\n    {\n        StartInfo =\n                            {\n                                FileName = launcher,\n                                Arguments = $\"/config:\\\"{config}\\\" /siteid:{siteId} /systray:false /trace:error\",\n                                CreateNoWindow = true,\n                                WindowStyle = ProcessWindowStyle.Hidden,\n                                RedirectStandardOutput = true,\n                                UseShellExecute = false\n                            }\n    };\n    process.Start();\n    process.WaitForExit(5000);\n    if (process.HasExited)\n    {\n        File.WriteAllText(resultFile, process.StandardOutput.ReadToEnd());\n        return 0;\n    }\n\n    return process.Id;\n}\n\nint QuerySite(string config, string siteId)\n{\n    var toQuery = $\"/config:\\\"{config}\\\" /siteid:{siteId} /systray:false /trace:error\";\n    var items = Process.GetProcessesByName(\"iisexpress\");\n    var found = items.FirstOrDefault(item =>\n    {\n        var command = item.GetCommandLine();\n        return command != null && command.TrimEnd().EndsWith(toQuery, StringComparison.Ordinal);\n    });\n    Log.Debug($\"Tried to find {toQuery} with result {found?.Id}\");\n    return found == null ? 0 : found.Id;\n}\n\nint KillSite(string config, string siteId)\n{\n    var toKill = $\"/config:\\\"{config}\\\" /siteid:{siteId} /systray:false /trace:error\";\n    var items = Process.GetProcessesByName(\"iisexpress\");\n    var found = items.Where(item =>\n    {\n        var command = item.GetCommandLine();\n        return command != null && command.TrimEnd().EndsWith(toKill, StringComparison.Ordinal);\n    });\n    foreach (var item in found)\n    {\n        item.Kill();\n        item.WaitForExit();\n    }\n\n    return 0;\n}\n\nint DeleteMapping(string address, string port, string host)\n{\n    if (host == null)\n    {\n        NativeMethods.DeleteCertificateBinding(\n            new IPEndPoint(IPAddress.Parse(address), int.Parse(port)));\n    }\n    else\n    {\n        NativeMethods.DeleteSniBinding(new Tuple<string, int>(host, int.Parse(port)));\n    }\n\n    return 0;\n}\n\nint HandleReservedUrl(string url, string descriptor)\n{\n    if (descriptor != null)\n    {\n        NativeMethods.DeleteHttpNamespaceAcl(url, descriptor);\n    }\n    else\n    {\n        NativeMethods.BindHttpNamespaceAcl(url, \"D:(A;;GX;;;WD)\");\n    }\n\n    return 0;\n}\n\nint CreateMapping(string store, string address, string port, string id, string host, X509Certificate2 selectedItem)\n{\n    if (host == null)\n    {\n        // register mapping\n        var endpoint = new IPEndPoint(IPAddress.Parse(address), int.Parse(port));\n        NativeMethods.BindCertificate(endpoint, selectedItem.GetCertHash(), store, Guid.Parse(id));\n    }\n    else\n    {\n        NativeMethods.BindSni(new Tuple<string, int>(host, int.Parse(port)), selectedItem.GetCertHash(), store, Guid.Parse(id));\n    }\n\n    return 0;\n}\n\nint RemoveCertificate(string port, string host, X509Store personal, X509Certificate2 cert)\n{\n    // remove IP based mapping\n    var mappings = NativeMethods.QuerySslCertificateInfo();\n    foreach (var mapping in mappings)\n    {\n        if (mapping.Hash.SequenceEqual(cert.GetCertHash()))\n        {\n            if (port != null && host == null)\n            {\n                NativeMethods.DeleteCertificateBinding(mapping.IpPort);\n            }\n        }\n    }\n\n    // remove SNI mapping.\n    var mappings1 = NativeMethods.QuerySslSniInfo();\n    foreach (var mapping in mappings1)\n    {\n        if (mapping.Hash.SequenceEqual(cert.GetCertHash()))\n        {\n            if (port != null && host != null)\n            {\n                NativeMethods.DeleteSniBinding(new Tuple<string, int>(mapping.Host, mapping.Port));\n            }\n        }\n    }\n\n    if (port == null)\n    {\n        // IMPORTANT: only delete the certificate if no port is binded.\n        personal.Remove(cert);\n    }\n\n    personal.Close();\n    return 0;\n}\n\nvoid ShowHelp(OptionSet optionSet)\n{\n    Console.WriteLine(\"Jexus Manager is available at https://www.jexusmanager.com\");\n    Console.WriteLine(\"CertificateInstaller.exe [Options]\");\n    Console.WriteLine(\"Options:\");\n    optionSet.WriteOptionDescriptions(Console.Out);\n}\n"
  },
  {
    "path": "CertificateInstaller/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9 Lex Li 2015-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"54bec09a-b32f-4a66-a871-749e0621d822\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "CertificateInstaller/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"MyApplication.app\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n             If you want to change the Windows User Account Control level replace the \n             requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel element will disable file and registry virtualization. \n            Remove this element if your application requires this virtualization for backwards\n            compatibility.\n        -->\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <!--<supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />-->\n\n      <!-- Windows 7 -->\n      <!--<supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />-->\n\n      <!-- Windows 8 -->\n      <!--<supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />-->\n\n      <!-- Windows 8.1 -->\n      <!--<supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />-->\n\n      <!-- Windows 10 -->\n      <!--<supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />-->\n\n    </application>\n  </compatibility>\n\n  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher\n       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need \n       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should \n       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->\n  <!--\n  <application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\n    </windowsSettings>\n  </application>\n  -->\n\n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  <!--\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity\n          type=\"win32\"\n          name=\"Microsoft.Windows.Common-Controls\"\n          version=\"6.0.0.0\"\n          processorArchitecture=\"*\"\n          publicKeyToken=\"6595b64144ccf1df\"\n          language=\"*\"\n        />\n    </dependentAssembly>\n  </dependency>\n  -->\n\n</assembly>\n"
  },
  {
    "path": "IIS.LanguageServer/Handlers/CompletionHandler.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing IIS.LanguageServer.Schema;\n\nnamespace IIS.LanguageServer.Handlers;\n\npublic class CompletionHandler\n{\n    private readonly SchemaCache _schemaCache;\n\n    public CompletionHandler(SchemaCache schemaCache)\n    {\n        _schemaCache = schemaCache;\n    }\n\n    public List<CompletionItem> GetCompletions(string elementPath, string currentAttributeName)\n    {\n        var items = new List<CompletionItem>();\n\n        // Suggest child elements\n        var childElements = _schemaCache.GetChildElementNames(elementPath);\n        foreach (var child in childElements)\n        {\n            items.Add(new CompletionItem\n            {\n                Label = child,\n                Kind = \"Struct\",\n                Detail = \"Element\",\n                InsertText = child\n            });\n        }\n\n        // Suggest attribute names\n        var attributes = _schemaCache.GetAttributeNames(elementPath);\n        foreach (var attr in attributes)\n        {\n            items.Add(new CompletionItem\n            {\n                Label = attr,\n                Kind = \"Property\",\n                Detail = $\"Type: {_schemaCache.GetAttributeType(elementPath, attr) ?? \"string\"}\",\n                InsertText = $\"{attr}=\\\"\\\"\"\n            });\n        }\n\n        return items;\n    }\n}\n\npublic class CompletionItem\n{\n    public string Label { get; set; } = string.Empty;\n    public string Kind { get; set; } = string.Empty;\n    public string Detail { get; set; } = string.Empty;\n    public string InsertText { get; set; } = string.Empty;\n}\n"
  },
  {
    "path": "IIS.LanguageServer/Handlers/DiagnosticsHandler.cs",
    "content": "using System;\nusing IIS.LanguageServer.Schema;\n\nnamespace IIS.LanguageServer.Handlers;\n\npublic class DiagnosticsHandler\n{\n    private readonly SchemaCache _schemaCache;\n\n    public DiagnosticsHandler(SchemaCache schemaCache)\n    {\n        _schemaCache = schemaCache;\n    }\n\n    public void ValidateDocument(string documentText, string uri)\n    {\n        try\n        {\n            // TODO: Parse XML and validate against schema\n            // This is a placeholder for future validation logic\n        }\n        catch (Exception ex)\n        {\n            Console.Error.WriteLine($\"Error validating document {uri}: {ex.Message}\");\n        }\n    }\n}\n"
  },
  {
    "path": "IIS.LanguageServer/Handlers/HoverHandler.cs",
    "content": "using IIS.LanguageServer.Schema;\n\nnamespace IIS.LanguageServer.Handlers;\n\npublic class HoverHandler\n{\n    private readonly SchemaCache _schemaCache;\n\n    public HoverHandler(SchemaCache schemaCache)\n    {\n        _schemaCache = schemaCache;\n    }\n\n    public string? GetHoverInfo(string elementPath, string? attributeName)\n    {\n        if (!string.IsNullOrEmpty(attributeName))\n        {\n            var attrType = _schemaCache.GetAttributeType(elementPath, attributeName);\n            if (!string.IsNullOrEmpty(attrType))\n            {\n                return $\"**{attributeName}** : `{attrType}`\";\n            }\n        }\n\n        if (!string.IsNullOrEmpty(elementPath))\n        {\n            return $\"**Element:** `{elementPath}`\";\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "IIS.LanguageServer/Handlers/TextDocumentSyncHandler.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing IIS.LanguageServer.Schema;\n\nnamespace IIS.LanguageServer.Handlers;\n\npublic class TextDocumentSyncHandler\n{\n    private readonly Dictionary<string, string> _openDocuments = new();\n    private readonly DiagnosticsHandler _diagnosticsHandler;\n\n    public TextDocumentSyncHandler(SchemaCache schemaCache)\n    {\n        _diagnosticsHandler = new DiagnosticsHandler(schemaCache);\n    }\n\n    public void HandleDidOpen(string uri, string text)\n    {\n        _openDocuments[uri] = text;\n        _diagnosticsHandler.ValidateDocument(text, uri);\n    }\n\n    public void HandleDidChange(string uri, string text)\n    {\n        _openDocuments[uri] = text;\n        _diagnosticsHandler.ValidateDocument(text, uri);\n    }\n\n    public void HandleDidClose(string uri)\n    {\n        _openDocuments.Remove(uri);\n    }\n\n    public string? GetDocumentContent(string uri)\n    {\n        _openDocuments.TryGetValue(uri, out var content);\n        return content;\n    }\n}\n"
  },
  {
    "path": "IIS.LanguageServer/IIS.LanguageServer.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <Nullable>enable</Nullable>\n    <SelfContained>true</SelfContained>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\LanguageServer.Framework\\LanguageServer.Framework\\LanguageServer.Framework.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Administration\\Microsoft.Web.Administration.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Configuration.AppHostFileProvider\\Microsoft.Web.Configuration.AppHostFileProvider.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "IIS.LanguageServer/Language/XmlPositionAnalyzer.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.RegularExpressions;\n\nnamespace IIS.LanguageServer.Language;\n\npublic record XmlContext(\n    string ElementPath,\n    string? CurrentElementName,\n    string? CurrentAttributeName,\n    string? CurrentAttributeValue,\n    ContextType Type\n);\n\npublic enum ContextType\n{\n    Unknown,\n    ElementTag,\n    AttributeName,\n    AttributeValue,\n    ElementContent\n}\n\npublic class XmlPositionAnalyzer\n{\n    public static XmlContext GetContext(string documentText, int position)\n    {\n        if (position < 0 || position > documentText.Length)\n        {\n            return new XmlContext(string.Empty, null, null, null, ContextType.Unknown);\n        }\n\n        var upToPosition = documentText[..position];\n        var elementPath = ExtractElementPath(upToPosition);\n        var currentElementName = ExtractCurrentElementName(upToPosition);\n\n        var attributeName = ExtractCurrentAttributeName(upToPosition);\n        var attributeValue = ExtractCurrentAttributeValue(upToPosition);\n\n        var contextType = DetermineContextType(upToPosition);\n\n        return new XmlContext(elementPath, currentElementName, attributeName, attributeValue, contextType);\n    }\n\n    private static string ExtractElementPath(string text)\n    {\n        var tags = new List<string>();\n        var pattern = @\"<(/?)(\\w+(?::\\w+)?)\";\n        var matches = Regex.Matches(text, pattern);\n\n        foreach (Match match in matches)\n        {\n            var isClosing = !string.IsNullOrEmpty(match.Groups[1].Value);\n            var tagName = match.Groups[2].Value;\n\n            if (isClosing)\n            {\n                if (tags.Count > 0 && tags[^1] == tagName)\n                {\n                    tags.RemoveAt(tags.Count - 1);\n                }\n            }\n            else\n            {\n                tags.Add(tagName);\n            }\n        }\n\n        return string.Join(\"/\", tags);\n    }\n\n    private static string? ExtractCurrentElementName(string text)\n    {\n        var match = Regex.Match(text, @\"<(\\w+(?::\\w+)?)(?:\\s|>|/)\");\n        return match.Success ? match.Groups[1].Value : null;\n    }\n\n    private static string? ExtractCurrentAttributeName(string text)\n    {\n        var lastOpenTag = text.LastIndexOf('<');\n        if (lastOpenTag == -1)\n        {\n            return null;\n        }\n\n        var tagContent = text[lastOpenTag..];\n\n        // Check if we're inside an attribute\n        if (tagContent.Contains('\"') || tagContent.Contains('\\''))\n        {\n            var match = Regex.Match(tagContent, @\"(\\w+)=\"\"[^\"\"]*$|(\\w+)='[^']*$\");\n            if (match.Success)\n            {\n                return match.Groups[1].Value ?? match.Groups[2].Value;\n            }\n        }\n\n        // Look for attribute name before cursor\n        var attrMatch = Regex.Match(tagContent, @\"(\\w+)\\s*=$\");\n        return attrMatch.Success ? attrMatch.Groups[1].Value : null;\n    }\n\n    private static string? ExtractCurrentAttributeValue(string text)\n    {\n        var lastOpenTag = text.LastIndexOf('<');\n        if (lastOpenTag == -1)\n        {\n            return null;\n        }\n\n        var tagContent = text[lastOpenTag..];\n\n        var match = Regex.Match(tagContent, @\"\"\"([^\"\"]*)$|'([^']*)$\");\n        if (match.Success)\n        {\n            return match.Groups[1].Value ?? match.Groups[2].Value;\n        }\n\n        return null;\n    }\n\n    private static ContextType DetermineContextType(string text)\n    {\n        var lastOpenTag = text.LastIndexOf('<');\n        if (lastOpenTag == -1)\n        {\n            return ContextType.ElementContent;\n        }\n\n        var lastClose = text.LastIndexOf('>');\n        if (lastClose < lastOpenTag)\n        {\n            // We're inside a tag\n            var tagContent = text[lastOpenTag..];\n\n            if (tagContent.Contains('\"') || tagContent.Contains('\\''))\n            {\n                return ContextType.AttributeValue;\n            }\n\n            if (tagContent.Contains('='))\n            {\n                return ContextType.AttributeName;\n            }\n\n            return ContextType.AttributeName;\n        }\n\n        return ContextType.ElementContent;\n    }\n}\n"
  },
  {
    "path": "IIS.LanguageServer/Program.cs",
    "content": "using EmmyLua.LanguageServer.Framework.Server;\nusing IIS.LanguageServer.Handlers;\nusing IIS.LanguageServer.Schema;\n\ntry\n{\n    Console.Error.WriteLine(\"IIS Language Server initializing...\");\n\n    // Initialize schema cache\n    var schemaCache = new SchemaCache();\n\n    // Create handlers (for future use)\n    var completionHandler = new CompletionHandler(schemaCache);\n    var hoverHandler = new HoverHandler(schemaCache);\n    var textSyncHandler = new TextDocumentSyncHandler(schemaCache);\n\n    // Create language server\n    var server = LanguageServer.From(Console.OpenStandardInput(), Console.OpenStandardOutput());\n\n    // Register initialization callbacks\n    server.OnInitialize((request, info) =>\n    {\n        info.Name = \"IIS Configuration Language Server\";\n        info.Version = \"1.0.0\";\n        return Task.CompletedTask;\n    });\n\n    server.OnInitialized(request =>\n    {\n        Console.Error.WriteLine(\"IIS Language Server initialized\");\n        return Task.CompletedTask;\n    });\n\n    Console.Error.WriteLine(\"IIS Language Server started\");\n    await server.Run();\n}\ncatch (Exception ex)\n{\n    Console.Error.WriteLine($\"LSP Server error: {ex}\");\n}\n"
  },
  {
    "path": "IIS.LanguageServer/Schema/SchemaCache.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Linq;\n\nnamespace IIS.LanguageServer.Schema;\n\npublic class SchemaCache\n{\n    private readonly Dictionary<string, XElement> _schemas;\n\n    public SchemaCache()\n    {\n        _schemas = SchemaLoader.LoadAllSchemas();\n        Console.Error.WriteLine($\"Loaded {_schemas.Count} schema definitions\");\n    }\n\n    public XElement? GetSectionSchema(string sectionName)\n    {\n        _schemas.TryGetValue(sectionName, out var schema);\n        return schema;\n    }\n\n    public List<string> GetAvailableSchemas()\n    {\n        return _schemas.Keys.ToList();\n    }\n\n    public List<string> GetChildElementNames(string elementPath)\n    {\n        var elements = new List<string>();\n        var parts = elementPath.Split('/', StringSplitOptions.RemoveEmptyEntries);\n\n        if (parts.Length == 0)\n        {\n            return elements;\n        }\n\n        var section = GetSectionSchema(parts[0]);\n        if (section == null)\n        {\n            return elements;\n        }\n\n        var currentElement = section;\n        for (int i = 1; i < parts.Length; i++)\n        {\n            var child = currentElement.Elements(\"element\").FirstOrDefault(e => e.Attribute(\"name\")?.Value == parts[i]);\n            if (child == null)\n            {\n                return elements;\n            }\n\n            currentElement = child;\n        }\n\n        var childElements = currentElement.Elements(\"element\")\n            .Select(e => e.Attribute(\"name\")?.Value)\n            .Where(n => !string.IsNullOrEmpty(n))\n            .Cast<string>()\n            .ToList();\n\n        return childElements;\n    }\n\n    public List<string> GetAttributeNames(string elementPath)\n    {\n        var attributes = new List<string>();\n        var parts = elementPath.Split('/', StringSplitOptions.RemoveEmptyEntries);\n\n        if (parts.Length == 0)\n        {\n            return attributes;\n        }\n\n        var section = GetSectionSchema(parts[0]);\n        if (section == null)\n        {\n            return attributes;\n        }\n\n        var currentElement = section;\n        for (int i = 1; i < parts.Length; i++)\n        {\n            var child = currentElement.Elements(\"element\").FirstOrDefault(e => e.Attribute(\"name\")?.Value == parts[i]);\n            if (child == null)\n            {\n                return attributes;\n            }\n\n            currentElement = child;\n        }\n\n        var attrs = currentElement.Elements(\"attribute\")\n            .Select(a => a.Attribute(\"name\")?.Value)\n            .Where(n => !string.IsNullOrEmpty(n))\n            .Cast<string>()\n            .ToList();\n\n        return attrs;\n    }\n\n    public string? GetAttributeType(string elementPath, string attributeName)\n    {\n        var parts = elementPath.Split('/', StringSplitOptions.RemoveEmptyEntries);\n        if (parts.Length == 0)\n        {\n            return null;\n        }\n\n        var section = GetSectionSchema(parts[0]);\n        if (section == null)\n        {\n            return null;\n        }\n\n        var currentElement = section;\n        for (int i = 1; i < parts.Length; i++)\n        {\n            var child = currentElement.Elements(\"element\").FirstOrDefault(e => e.Attribute(\"name\")?.Value == parts[i]);\n            if (child == null)\n            {\n                return null;\n            }\n\n            currentElement = child;\n        }\n\n        var attr = currentElement.Elements(\"attribute\").FirstOrDefault(a => a.Attribute(\"name\")?.Value == attributeName);\n        return attr?.Attribute(\"type\")?.Value;\n    }\n}\n"
  },
  {
    "path": "IIS.LanguageServer/Schema/SchemaLoader.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Xml.Linq;\n\nnamespace IIS.LanguageServer.Schema;\n\npublic class SchemaLoader\n{\n    public static List<string> FindSchemaFiles()\n    {\n        var files = new List<string>();\n\n        // Primary location: IIS Express\n        var iisExpressPath = Path.Combine(\n            Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),\n            \"IIS Express\",\n            \"config\",\n            \"schema\");\n\n        if (Directory.Exists(iisExpressPath))\n        {\n            files.AddRange(Directory.GetFiles(iisExpressPath, \"*_schema.xml\"));\n        }\n\n        // Fallback 1: IIS Express x86\n        var iisExpressX86Path = Path.Combine(\n            Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),\n            \"IIS Express\",\n            \"config\",\n            \"schema\");\n\n        if (Directory.Exists(iisExpressX86Path))\n        {\n            var x86Files = Directory.GetFiles(iisExpressX86Path, \"*_schema.xml\");\n            files.AddRange(x86Files.Where(f => !files.Contains(f)));\n        }\n\n        // Fallback 2: Full IIS (System32)\n        var iisPath = Path.Combine(\n            Environment.GetFolderPath(Environment.SpecialFolder.System),\n            \"inetsrv\",\n            \"config\",\n            \"schema\");\n\n        if (Directory.Exists(iisPath))\n        {\n            var iisFiles = Directory.GetFiles(iisPath, \"*_schema.xml\");\n            files.AddRange(iisFiles.Where(f => !files.Contains(f)));\n        }\n\n        return files;\n    }\n\n    public static Dictionary<string, XElement> LoadAllSchemas()\n    {\n        var schemas = new Dictionary<string, XElement>();\n        var schemaFiles = FindSchemaFiles();\n\n        foreach (var file in schemaFiles)\n        {\n            try\n            {\n                var doc = XDocument.Load(file);\n                if (doc.Root != null)\n                {\n                    foreach (var node in doc.Root.Nodes())\n                    {\n                        if (node is XElement element && element.Name.LocalName == \"sectionSchema\")\n                        {\n                            var name = element.Attribute(\"name\")?.Value;\n                            if (!string.IsNullOrEmpty(name) && !schemas.ContainsKey(name))\n                            {\n                                schemas[name] = element;\n                            }\n                        }\n                    }\n                }\n            }\n            catch (Exception ex)\n            {\n                Console.Error.WriteLine($\"Failed to load schema file {file}: {ex.Message}\");\n            }\n        }\n\n        return schemas;\n    }\n}\n"
  },
  {
    "path": "JexusManager/BindingExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Globalization;\nusing System.Windows.Forms;\n\nnamespace Microsoft.Web.Administration\n{\n    public static class BindingExtensions\n    {\n        public static string ToShortString(this Binding binding)\n        {\n            if (binding.Protocol != \"http\" && binding.Protocol != \"https\")\n            {\n                return $\"{binding.BindingInformation} ({binding.Protocol})\";\n            }\n\n            var value = binding.BindingInformation;\n            var last = value.LastIndexOf(':');\n            string host = null;\n            string address = null;\n            string port = null;\n            if (last > 0)\n            {\n                host = value.Substring(last + 1);\n                var next = value.LastIndexOf(':', last - 1);\n                port = value.Substring(next + 1, last - next - 1);\n                if (next > -1)\n                {\n                    address = value.Substring(0, next);\n                }\n            }\n\n            if (string.IsNullOrWhiteSpace(address))\n            {\n                address = \"*\";\n            }\n\n            return binding.EndPoint == null && string.IsNullOrWhiteSpace(port)\n                ? $\": ({binding.Protocol})\"\n                : string.IsNullOrEmpty(binding.Host)\n                    ? $\"{address}:{port} ({binding.Protocol})\"\n                    : $\"{host} on {address}:{port} ({binding.Protocol})\";\n        }\n#if !IIS\n        public static ListViewItem ToListViewItem(this Binding binding)\n        {\n            string host = binding.Host.HostToDisplay();\n            string port = binding.EndPoint?.Port.ToString(CultureInfo.InvariantCulture);\n            string address = binding.EndPoint?.Address.AddressToDisplay();\n            if (binding.EndPoint == null)\n            {\n                var value = binding.BindingInformation;\n                var last = value.LastIndexOf(':');\n                if (last > 0)\n                {\n                    host = value.Substring(last + 1);\n                    var next = value.LastIndexOf(':', last - 1);\n                    port = value.Substring(next + 1, last - next - 1);\n                    if (next > -1)\n                    {\n                        address = value.Substring(0, next);\n                    }\n                }\n            }\n\n            return new ListViewItem(new[]\n                {\n                        binding.Protocol,\n                        host,\n                        port,\n                        address,\n                        binding.CanBrowse ? string.Empty : binding.BindingInformation\n                })\n            { Tag = binding };\n        }\n#endif\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/CertificateErrorsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Dialogs\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CertificateErrorsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnConnect = new System.Windows.Forms.Button();\n            this.btnView = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.linkLabel1 = new System.Windows.Forms.LinkLabel();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(252, 181);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(85, 23);\n            this.btnCancel.TabIndex = 1;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnConnect\n            // \n            this.btnConnect.DialogResult = System.Windows.Forms.DialogResult.OK;\n            this.btnConnect.Location = new System.Drawing.Point(161, 181);\n            this.btnConnect.Name = \"btnConnect\";\n            this.btnConnect.Size = new System.Drawing.Size(85, 23);\n            this.btnConnect.TabIndex = 0;\n            this.btnConnect.Text = \"Connect\";\n            this.btnConnect.UseVisualStyleBackColor = true;\n            // \n            // btnView\n            // \n            this.btnView.Location = new System.Drawing.Point(12, 181);\n            this.btnView.Name = \"btnView\";\n            this.btnView.Size = new System.Drawing.Size(143, 23);\n            this.btnView.TabIndex = 2;\n            this.btnView.Text = \"View Certificate\";\n            this.btnView.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.label1.Location = new System.Drawing.Point(59, 19);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(278, 13);\n            this.label1.TabIndex = 3;\n            this.label1.Text = \"This certificate was issued to a different server.\";\n            // \n            // linkLabel1\n            // \n            this.linkLabel1.AutoSize = true;\n            this.linkLabel1.Location = new System.Drawing.Point(59, 44);\n            this.linkLabel1.Name = \"linkLabel1\";\n            this.linkLabel1.Size = new System.Drawing.Size(136, 13);\n            this.linkLabel1.TabIndex = 4;\n            this.linkLabel1.TabStop = true;\n            this.linkLabel1.Text = \"What else might be wrong?\";\n            this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);\n            // \n            // label2\n            // \n            this.label2.Location = new System.Drawing.Point(59, 70);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(278, 82);\n            this.label2.TabIndex = 5;\n            this.label2.Text = \"Security certificate problems may indicate an attempt to fool you or steal data y\" +\n    \"ou send to the server.\\r\\n\\r\\nIt is recommended that you not connect to this server.\" +\n    \"\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Image = global::JexusManager.Main.Properties.Resources.warning_32;\n            this.pictureBox1.Location = new System.Drawing.Point(12, 19);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 6;\n            this.pictureBox1.TabStop = false;\n            // \n            // CertificateErrorsDialog\n            // \n            this.AcceptButton = this.btnConnect;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 216);\n            this.Controls.Add(this.pictureBox1);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.linkLabel1);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnView);\n            this.Controls.Add(this.btnConnect);\n            this.Controls.Add(this.btnCancel);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.HelpButton = true;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"CertificateErrorsDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Server Certificate Alert\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.CertificateErrorsDialog_HelpButtonClicked);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnConnect;\n        private Button btnView;\n        private Label label1;\n        private LinkLabel linkLabel1;\n        private Label label2;\n        private PictureBox pictureBox1;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/CertificateErrorsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Dialogs\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    public partial class CertificateErrorsDialog : Form\n    {\n        public CertificateErrorsDialog(X509Certificate certificate)\n        {\n            InitializeComponent();\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnView, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.DisplayCertificate((X509Certificate2)certificate, Handle);\n                }));\n        }\n\n        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210463#CertificateNameMismatch\");\n        }\n\n        private void CertificateErrorsDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210463#CertificateVerificationHelp\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/CertificateErrorsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Dialogs/ConnectAsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Dialogs\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ConnectAsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.rbSpecific = new System.Windows.Forms.RadioButton();\n            this.rbPassThrough = new System.Windows.Forms.RadioButton();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnSet = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(5, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(86, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Path credentials:\";\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(215, 151);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 4;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(311, 151);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 5;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // rbSpecific\n            // \n            this.rbSpecific.AutoSize = true;\n            this.rbSpecific.Location = new System.Drawing.Point(5, 40);\n            this.rbSpecific.Name = \"rbSpecific\";\n            this.rbSpecific.Size = new System.Drawing.Size(86, 17);\n            this.rbSpecific.TabIndex = 6;\n            this.rbSpecific.TabStop = true;\n            this.rbSpecific.Text = \"Special user:\";\n            this.rbSpecific.UseVisualStyleBackColor = true;\n            // \n            // rbPassThrough\n            // \n            this.rbPassThrough.AutoSize = true;\n            this.rbPassThrough.Location = new System.Drawing.Point(5, 108);\n            this.rbPassThrough.Name = \"rbPassThrough\";\n            this.rbPassThrough.Size = new System.Drawing.Size(240, 17);\n            this.rbPassThrough.TabIndex = 7;\n            this.rbPassThrough.TabStop = true;\n            this.rbPassThrough.Text = \"Application user (pass-through authentication)\";\n            this.rbPassThrough.UseVisualStyleBackColor = true;\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(21, 73);\n            this.txtName.Name = \"txtName\";\n            this.txtName.ReadOnly = true;\n            this.txtName.Size = new System.Drawing.Size(284, 20);\n            this.txtName.TabIndex = 8;\n            // \n            // btnSet\n            // \n            this.btnSet.Location = new System.Drawing.Point(311, 71);\n            this.btnSet.Name = \"btnSet\";\n            this.btnSet.Size = new System.Drawing.Size(95, 23);\n            this.btnSet.TabIndex = 9;\n            this.btnSet.Text = \"Set...\";\n            this.btnSet.UseVisualStyleBackColor = true;\n            // \n            // ConnectAsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(418, 186);\n            this.Controls.Add(this.btnSet);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.rbPassThrough);\n            this.Controls.Add(this.rbSpecific);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.label1);\n            this.Name = \"ConnectAsDialog\";\n            this.Text = \"Connect As\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private Button btnOK;\n        private Button btnCancel;\n        private RadioButton rbSpecific;\n        private RadioButton rbPassThrough;\n        private TextBox txtName;\n        private Button btnSet;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/ConnectAsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Dialogs\n{\n    using System;\n    using System.Windows.Forms;\n\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class ConnectAsDialog : DialogForm\n    {\n#if DESIGN\n        public ConnectAsDialog()\n        {\n            InitializeComponent();\n        }\n#endif\n        public ConnectAsDialog(IServiceProvider serviceProvider, ConnectAsItem item)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    rbPassThrough.Checked = txtName.Text.Length == 0;\n                    RefreshButton();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnSet, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using (var dialog = new CredentialsDialog(ServiceProvider, item.UserName))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n\n                        txtName.Text = dialog.UserName;\n                        item.UserName = dialog.UserName;\n                        item.Password = dialog.Password;\n                    }\n                    RefreshButton();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(rbPassThrough, \"CheckedChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(rbSpecific, \"CheckedChanged\"))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtName.Enabled = btnSet.Enabled = rbSpecific.Checked;\n                    RefreshButton();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ProcessStart(\"https://go.microsoft.com/fwlink/?LinkId=210531#Edit_Site\");\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogResult = DialogResult.OK;\n                    if (rbPassThrough.Checked)\n                    {\n                        item.UserName = string.Empty;\n                        item.Password = string.Empty;\n                    }\n                }));\n\n            txtName.Text = \"test\";\n            txtName.Text = item.UserName;\n            var passThrough = string.IsNullOrEmpty(item.UserName);\n            rbPassThrough.Checked = passThrough;\n            rbSpecific.Checked = !passThrough;\n        }\n\n        private void RefreshButton()\n        {\n            btnOK.Enabled = rbPassThrough.Checked || !string.IsNullOrEmpty(txtName.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/ConnectAsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Dialogs/ConnectAsItem.cs",
    "content": "﻿using JexusManager.Features;\nusing Microsoft.Web.Administration;\n\nnamespace JexusManager.Dialogs\n{\n    public class ConnectAsItem : IItem<ConnectAsItem>\n    {\n        public string UserName { get; set; }\n        public string Password { get; set; }\n        public ConfigurationElement Element\n        {\n            get { return _virtualDirectory; }\n            set { _virtualDirectory = (VirtualDirectory)value; }\n        }\n\n        public string Flag { get; set; }\n\n        private VirtualDirectory _virtualDirectory;\n\n        public ConnectAsItem(VirtualDirectory virtualDirectory)\n        {\n            UserName = virtualDirectory?.UserName ?? string.Empty;\n            Password = virtualDirectory?.Password ?? string.Empty;\n            _virtualDirectory = virtualDirectory;\n        }\n\n        public void Apply()\n        {\n            if (Element == null)\n            {\n                return;\n            }\n\n            _virtualDirectory.UserName = UserName;\n            _virtualDirectory.Password = Password;\n        }\n\n        public bool Match(ConnectAsItem other)\n        {\n            return other != null && other.UserName == UserName && other.Password == Password;\n        }\n\n        public bool Equals(ConnectAsItem other)\n        {\n            return Match(other);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/CredentialsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Dialogs\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CredentialsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtPassword = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtConfirm = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(207, 176);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(111, 176);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(61, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"User name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(16, 29);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(286, 20);\n            this.txtName.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(13, 67);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(56, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Password:\";\n            // \n            // txtPassword\n            // \n            this.txtPassword.Location = new System.Drawing.Point(16, 83);\n            this.txtPassword.Name = \"txtPassword\";\n            this.txtPassword.PasswordChar = '*';\n            this.txtPassword.Size = new System.Drawing.Size(286, 20);\n            this.txtPassword.TabIndex = 5;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(13, 122);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(93, 13);\n            this.label3.TabIndex = 6;\n            this.label3.Text = \"Confirm password:\";\n            // \n            // txtConfirm\n            // \n            this.txtConfirm.Location = new System.Drawing.Point(16, 138);\n            this.txtConfirm.Name = \"txtConfirm\";\n            this.txtConfirm.PasswordChar = '*';\n            this.txtConfirm.Size = new System.Drawing.Size(286, 20);\n            this.txtConfirm.TabIndex = 7;\n            // \n            // CredentialsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(314, 211);\n            this.Controls.Add(this.txtConfirm);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtPassword);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"CredentialsDialog\";\n            this.Text = \"Set Credentials\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private TextBox txtName;\n        private Label label2;\n        private TextBox txtPassword;\n        private Label label3;\n        private TextBox txtConfirm;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/CredentialsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Dialogs\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Linq;\n    using System.Reactive.Disposables;\n\n    public partial class CredentialsDialog : DialogForm\n    {\n        public CredentialsDialog(IServiceProvider serviceProvider, string name)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            btnOK.Enabled = false;\n            txtName.Text = name;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPassword, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtConfirm, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                    && !string.IsNullOrWhiteSpace(txtPassword.Text)\n                    && txtConfirm.Text == txtPassword.Text;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    UserName = txtName.Text;\n                    Password = txtPassword.Text;\n                    // TODO: verify user\n                    // DialogResult = DialogResult.Cancel;\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    DialogHelper.ProcessStart(\"https://go.microsoft.com/fwlink/?LinkId=210531#Edit_Site\");\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string Password { get; set; }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string UserName { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/CredentialsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Dialogs/EditSiteDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Dialogs\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class EditSiteDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.btnTest = new System.Windows.Forms.Button();\n            this.btnConnect = new System.Windows.Forms.Button();\n            this.txtConnectAs = new System.Windows.Forms.Label();\n            this.txtPhysicalPath = new System.Windows.Forms.TextBox();\n            this.label6 = new System.Windows.Forms.Label();\n            this.btnSelect = new System.Windows.Forms.Button();\n            this.txtPool = new System.Windows.Forms.TextBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.txtAlias = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(407, 218);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 29;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(306, 218);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 28;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(345, 96);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(33, 23);\n            this.btnBrowse.TabIndex = 27;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Visible = false;\n            // \n            // btnTest\n            // \n            this.btnTest.Enabled = false;\n            this.btnTest.Location = new System.Drawing.Point(115, 153);\n            this.btnTest.Name = \"btnTest\";\n            this.btnTest.Size = new System.Drawing.Size(94, 23);\n            this.btnTest.TabIndex = 26;\n            this.btnTest.Text = \"Test Settings...\";\n            this.btnTest.UseVisualStyleBackColor = true;\n            // \n            // btnConnect\n            // \n            this.btnConnect.Location = new System.Drawing.Point(15, 153);\n            this.btnConnect.Name = \"btnConnect\";\n            this.btnConnect.Size = new System.Drawing.Size(94, 23);\n            this.btnConnect.TabIndex = 25;\n            this.btnConnect.Text = \"Connect as...\";\n            this.btnConnect.UseVisualStyleBackColor = true;\n            // \n            // txtConnectAs\n            // \n            this.txtConnectAs.AutoSize = true;\n            this.txtConnectAs.Location = new System.Drawing.Point(12, 121);\n            this.txtConnectAs.Name = \"txtConnectAs\";\n            this.txtConnectAs.Size = new System.Drawing.Size(139, 13);\n            this.txtConnectAs.TabIndex = 24;\n            this.txtConnectAs.Text = \"Pass-through authentication\";\n            // \n            // txtPhysicalPath\n            // \n            this.txtPhysicalPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPhysicalPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;\n            this.txtPhysicalPath.Location = new System.Drawing.Point(15, 98);\n            this.txtPhysicalPath.Name = \"txtPhysicalPath\";\n            this.txtPhysicalPath.Size = new System.Drawing.Size(324, 20);\n            this.txtPhysicalPath.TabIndex = 23;\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(12, 82);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(73, 13);\n            this.label6.TabIndex = 22;\n            this.label6.Text = \"Physical path:\";\n            // \n            // btnSelect\n            // \n            this.btnSelect.Enabled = false;\n            this.btnSelect.Location = new System.Drawing.Point(396, 27);\n            this.btnSelect.Name = \"btnSelect\";\n            this.btnSelect.Size = new System.Drawing.Size(95, 23);\n            this.btnSelect.TabIndex = 21;\n            this.btnSelect.Text = \"Select...\";\n            this.btnSelect.UseVisualStyleBackColor = true;\n            // \n            // txtPool\n            // \n            this.txtPool.Location = new System.Drawing.Point(206, 29);\n            this.txtPool.Name = \"txtPool\";\n            this.txtPool.ReadOnly = true;\n            this.txtPool.Size = new System.Drawing.Size(185, 20);\n            this.txtPool.TabIndex = 20;\n            this.txtPool.Text = \"DefaultAppPool\";\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(12, 52);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(82, 13);\n            this.label5.TabIndex = 19;\n            this.label5.Text = \"Examples: sales\";\n            // \n            // txtAlias\n            // \n            this.txtAlias.Location = new System.Drawing.Point(15, 29);\n            this.txtAlias.Name = \"txtAlias\";\n            this.txtAlias.ReadOnly = true;\n            this.txtAlias.Size = new System.Drawing.Size(185, 20);\n            this.txtAlias.TabIndex = 18;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(203, 9);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(86, 13);\n            this.label4.TabIndex = 17;\n            this.label4.Text = \"Application Pool:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 9);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(57, 13);\n            this.label2.TabIndex = 16;\n            this.label2.Text = \"Site name:\";\n            // \n            // EditSiteDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(514, 251);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.btnTest);\n            this.Controls.Add(this.btnConnect);\n            this.Controls.Add(this.txtConnectAs);\n            this.Controls.Add(this.txtPhysicalPath);\n            this.Controls.Add(this.label6);\n            this.Controls.Add(this.btnSelect);\n            this.Controls.Add(this.txtPool);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.txtAlias);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.label2);\n            this.Name = \"EditSiteDialog\";\n            this.Text = \"Edit Site\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.EditSiteDialog_HelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Button btnBrowse;\n        private Button btnTest;\n        private Button btnConnect;\n        private Label txtConnectAs;\n        private TextBox txtPhysicalPath;\n        private Label label6;\n        private Button btnSelect;\n        private TextBox txtPool;\n        private Label label5;\n        private TextBox txtAlias;\n        private Label label4;\n        private Label label2;\n    }\n}"
  },
  {
    "path": "JexusManager/Dialogs/EditSiteDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Dialogs\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Application = Microsoft.Web.Administration.Application;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    public partial class EditSiteDialog : DialogForm\n    {\n        private readonly Application _application;\n\n        public EditSiteDialog(IServiceProvider serviceProvider, Application application)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            _application = application;\n            txtPool.Text = application.ApplicationPoolName;\n            txtAlias.Text = application.Site.Name;\n            txtPhysicalPath.Text = application.PhysicalPath;\n            btnBrowse.Visible = application.Server.IsLocalhost;\n            btnSelect.Enabled = application.Server.Mode != WorkingMode.Jexus;\n            RefreshButton();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (!_application.Server.Verify(txtPhysicalPath.Text, _application.GetActualExecutable()))\n                    {\n                        MessageBox.Show(\"The specified directory does not exist on the server.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                        return;\n                    }\n\n                    _application.PhysicalPath = txtPhysicalPath.Text;\n                    _application.ApplicationPoolName = txtPool.Text;\n                    _application.Server.CommitChanges();\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtPhysicalPath, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPool, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    RefreshButton();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowBrowseDialog(txtPhysicalPath, _application.GetActualExecutable());\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnSelect, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using var dialog = new SelectPoolDialog(txtPool.Text, _application.Server);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n\n                    txtPool.Text = dialog.Selected.Name;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnConnect, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var item = new ConnectAsItem(_application.VirtualDirectories[0]);\n                    using (var dialog = new ConnectAsDialog(ServiceProvider, item))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n                    }\n\n                    item.Apply();\n                    txtConnectAs.Text = string.IsNullOrEmpty(application.VirtualDirectories[0].UserName)\n                        ? \"Pass-through authentication\"\n                        : $\"connect as '{application.VirtualDirectories[0].UserName}'\";\n                    RefreshButton();\n                }));\n\n            txtConnectAs.Text = string.IsNullOrEmpty(application.VirtualDirectories[0].UserName)\n                ? \"Pass-through authentication\"\n                : $\"connect as '{application.VirtualDirectories[0].UserName}'\";\n        }\n\n        private void RefreshButton()\n        {\n            btnOK.Enabled = !string.IsNullOrWhiteSpace(txtPhysicalPath.Text);\n        }\n\n        private void EditSiteDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210531#Edit_Site\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/EditSiteDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Dialogs/ExceptionDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Dialogs\n{\n    using System.ComponentModel;\n\n    partial class ExceptionDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnReport = new System.Windows.Forms.Button();\n            this.btnCopy = new System.Windows.Forms.Button();\n            this.txtInfo = new System.Windows.Forms.TextBox();\n            this.txtStep = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // btnReport\n            // \n            this.btnReport.Location = new System.Drawing.Point(265, 253);\n            this.btnReport.Name = \"btnReport\";\n            this.btnReport.Size = new System.Drawing.Size(100, 23);\n            this.btnReport.TabIndex = 7;\n            this.btnReport.Text = \"Report to GitHub\";\n            this.btnReport.UseVisualStyleBackColor = true;\n            this.btnReport.Click += new System.EventHandler(this.btnReport_Click);\n            // \n            // btnCopy\n            // \n            this.btnCopy.Location = new System.Drawing.Point(159, 253);\n            this.btnCopy.Name = \"btnCopy\";\n            this.btnCopy.Size = new System.Drawing.Size(100, 23);\n            this.btnCopy.TabIndex = 6;\n            this.btnCopy.Text = \"Copy to Clipboard\";\n            this.btnCopy.UseVisualStyleBackColor = true;\n            this.btnCopy.Click += new System.EventHandler(this.btnCopy_Click);\n            // \n            // txtInfo\n            // \n            this.txtInfo.Location = new System.Drawing.Point(12, 49);\n            this.txtInfo.Multiline = true;\n            this.txtInfo.Name = \"txtInfo\";\n            this.txtInfo.ScrollBars = System.Windows.Forms.ScrollBars.Both;\n            this.txtInfo.Size = new System.Drawing.Size(353, 198);\n            this.txtInfo.TabIndex = 5;\n            // \n            // txtStep\n            // \n            this.txtStep.Location = new System.Drawing.Point(12, 12);\n            this.txtStep.Name = \"txtStep\";\n            this.txtStep.Size = new System.Drawing.Size(353, 46);\n            this.txtStep.TabIndex = 4;\n            this.txtStep.Text = \"An unhandled exception is detected. Please copy the information to clipboard and \" +\n    \"then report to GitHub.\";\n            // \n            // ExceptionDialog\n            // \n            this.AcceptButton = this.btnReport;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(377, 288);\n            this.Controls.Add(this.btnReport);\n            this.Controls.Add(this.btnCopy);\n            this.Controls.Add(this.txtInfo);\n            this.Controls.Add(this.txtStep);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"ExceptionDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Unhandled Exception\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Button btnReport;\n        private System.Windows.Forms.Button btnCopy;\n        private System.Windows.Forms.TextBox txtInfo;\n        private System.Windows.Forms.Label txtStep;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/ExceptionDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Dialogs\n{\n    using System;\n    using System.Windows.Forms;\n\n    public partial class ExceptionDialog : Form\n    {\n        private ExceptionDialog()\n        {\n            InitializeComponent();\n        }\n\n        public static void Report(string userName, string exception)\n        {\n            using var dialog = new ExceptionDialog();\n            dialog.txtInfo.Text = $\"{userName}{Environment.NewLine}{Environment.NewLine}{exception}\";\n            dialog.ShowDialog();\n        }\n\n        private void btnReport_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://github.com/jexuswebserver/JexusManager/issues/new\");\n        }\n\n        private void btnCopy_Click(object sender, EventArgs e)\n        {\n            Clipboard.SetText(txtInfo.Text);\n            MessageBox.Show(\"Copied\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/ExceptionDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Dialogs/NewApplicationDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Dialogs\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewApplicationDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.txtPath = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtSite = new System.Windows.Forms.Label();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label4 = new System.Windows.Forms.Label();\n            this.txtAlias = new System.Windows.Forms.TextBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.txtPool = new System.Windows.Forms.TextBox();\n            this.btnSelect = new System.Windows.Forms.Button();\n            this.label6 = new System.Windows.Forms.Label();\n            this.txtPhysicalPath = new System.Windows.Forms.TextBox();\n            this.txtConnectAs = new System.Windows.Forms.Label();\n            this.btnConnect = new System.Windows.Forms.Button();\n            this.btnTest = new System.Windows.Forms.Button();\n            this.cbPreload = new System.Windows.Forms.CheckBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.txtPath);\n            this.groupBox1.Controls.Add(this.label3);\n            this.groupBox1.Controls.Add(this.txtSite);\n            this.groupBox1.Controls.Add(this.label1);\n            this.groupBox1.Location = new System.Drawing.Point(12, 12);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(489, 78);\n            this.groupBox1.TabIndex = 0;\n            this.groupBox1.TabStop = false;\n            // \n            // txtPath\n            // \n            this.txtPath.AutoSize = true;\n            this.txtPath.Location = new System.Drawing.Point(96, 49);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(0, 13);\n            this.txtPath.TabIndex = 3;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(20, 49);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(32, 13);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Path:\";\n            // \n            // txtSite\n            // \n            this.txtSite.AutoSize = true;\n            this.txtSite.Location = new System.Drawing.Point(96, 20);\n            this.txtSite.Name = \"txtSite\";\n            this.txtSite.Size = new System.Drawing.Size(0, 13);\n            this.txtSite.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(20, 20);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(57, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Site name:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 107);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(32, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Alias:\";\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(203, 107);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(86, 13);\n            this.label4.TabIndex = 2;\n            this.label4.Text = \"Application Pool:\";\n            // \n            // txtAlias\n            // \n            this.txtAlias.Location = new System.Drawing.Point(15, 127);\n            this.txtAlias.Name = \"txtAlias\";\n            this.txtAlias.Size = new System.Drawing.Size(185, 20);\n            this.txtAlias.TabIndex = 3;\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(12, 150);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(82, 13);\n            this.label5.TabIndex = 4;\n            this.label5.Text = \"Examples: sales\";\n            // \n            // txtPool\n            // \n            this.txtPool.Location = new System.Drawing.Point(206, 127);\n            this.txtPool.Name = \"txtPool\";\n            this.txtPool.ReadOnly = true;\n            this.txtPool.Size = new System.Drawing.Size(185, 20);\n            this.txtPool.TabIndex = 5;\n            this.txtPool.Text = \"DefaultAppPool\";\n            // \n            // btnSelect\n            // \n            this.btnSelect.Enabled = false;\n            this.btnSelect.Location = new System.Drawing.Point(396, 125);\n            this.btnSelect.Name = \"btnSelect\";\n            this.btnSelect.Size = new System.Drawing.Size(95, 23);\n            this.btnSelect.TabIndex = 6;\n            this.btnSelect.Text = \"Select...\";\n            this.btnSelect.UseVisualStyleBackColor = true;\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(12, 180);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(73, 13);\n            this.label6.TabIndex = 7;\n            this.label6.Text = \"Physical path:\";\n            // \n            // txtPhysicalPath\n            // \n            this.txtPhysicalPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPhysicalPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;\n            this.txtPhysicalPath.Location = new System.Drawing.Point(15, 196);\n            this.txtPhysicalPath.Name = \"txtPhysicalPath\";\n            this.txtPhysicalPath.Size = new System.Drawing.Size(324, 20);\n            this.txtPhysicalPath.TabIndex = 8;\n            // \n            // txtConnectAs\n            // \n            this.txtConnectAs.AutoSize = true;\n            this.txtConnectAs.Location = new System.Drawing.Point(12, 235);\n            this.txtConnectAs.Name = \"txtConnectAs\";\n            this.txtConnectAs.Size = new System.Drawing.Size(139, 13);\n            this.txtConnectAs.TabIndex = 9;\n            this.txtConnectAs.Text = \"Pass-through authentication\";\n            // \n            // btnConnect\n            // \n            this.btnConnect.Location = new System.Drawing.Point(15, 251);\n            this.btnConnect.Name = \"btnConnect\";\n            this.btnConnect.Size = new System.Drawing.Size(94, 23);\n            this.btnConnect.TabIndex = 10;\n            this.btnConnect.Text = \"Connect as...\";\n            this.btnConnect.UseVisualStyleBackColor = true;\n            // \n            // btnTest\n            // \n            this.btnTest.Enabled = false;\n            this.btnTest.Location = new System.Drawing.Point(115, 251);\n            this.btnTest.Name = \"btnTest\";\n            this.btnTest.Size = new System.Drawing.Size(94, 23);\n            this.btnTest.TabIndex = 11;\n            this.btnTest.Text = \"Test Settings...\";\n            this.btnTest.UseVisualStyleBackColor = true;\n            // \n            // cbPreload\n            // \n            this.cbPreload.AutoSize = true;\n            this.cbPreload.Enabled = false;\n            this.cbPreload.Location = new System.Drawing.Point(15, 280);\n            this.cbPreload.Name = \"cbPreload\";\n            this.cbPreload.Size = new System.Drawing.Size(98, 17);\n            this.cbPreload.TabIndex = 12;\n            this.cbPreload.Text = \"Enable Preload\";\n            this.cbPreload.UseVisualStyleBackColor = true;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(345, 194);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(33, 23);\n            this.btnBrowse.TabIndex = 13;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Visible = false;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(306, 316);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 14;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(407, 316);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 15;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // NewApplicationDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(514, 351);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.cbPreload);\n            this.Controls.Add(this.btnTest);\n            this.Controls.Add(this.btnConnect);\n            this.Controls.Add(this.txtConnectAs);\n            this.Controls.Add(this.txtPhysicalPath);\n            this.Controls.Add(this.label6);\n            this.Controls.Add(this.btnSelect);\n            this.Controls.Add(this.txtPool);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.txtAlias);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.groupBox1);\n            this.Name = \"NewApplicationDialog\";\n            this.Text = \"Add Application\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewApplicationDialog_HelpButtonClicked);\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private GroupBox groupBox1;\n        private Label txtPath;\n        private Label label3;\n        private Label txtSite;\n        private Label label1;\n        private Label label2;\n        private Label label4;\n        private TextBox txtAlias;\n        private Label label5;\n        private TextBox txtPool;\n        private Button btnSelect;\n        private Label label6;\n        private TextBox txtPhysicalPath;\n        private Label txtConnectAs;\n        private Button btnConnect;\n        private Button btnTest;\n        private CheckBox cbPreload;\n        private Button btnBrowse;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}"
  },
  {
    "path": "JexusManager/Dialogs/NewApplicationDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Dialogs\n{\n    using System;\n    using System.ComponentModel;\n    using System.Globalization;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Application = Microsoft.Web.Administration.Application;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    public sealed partial class NewApplicationDialog : DialogForm\n    {\n        private readonly Site _site;\n        private readonly string _parentPath;\n\n        public NewApplicationDialog(IServiceProvider serviceProvider, Site site, string parentPath, string pool, Application existing)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            txtSite.Text = site.Name;\n            txtPath.Text = parentPath;\n            btnBrowse.Visible = site.Server.IsLocalhost;\n            btnSelect.Enabled = site.Server.Mode != WorkingMode.Jexus;\n            _site = site;\n            _parentPath = parentPath;\n            Application = existing;\n            Text = Application == null ? \"Add Application\" : \"Edit Application\";\n            txtAlias.ReadOnly = Application != null;\n            if (Application == null)\n            {\n                // TODO: test if IIS does this\n                txtPool.Text = pool;\n            }\n            else\n            {\n                txtAlias.Text = Application.Name ?? Application.Path.PathToName();\n                txtPool.Text = Application.ApplicationPoolName;\n                foreach (VirtualDirectory directory in Application.VirtualDirectories)\n                {\n                    if (directory.Path == \"/\")\n                    {\n                        txtPhysicalPath.Text = directory.PhysicalPath;\n                    }\n                }\n\n                RefreshButton();\n            }\n\n            var item = new ConnectAsItem(Application?.VirtualDirectories[0]);\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowBrowseDialog(txtPhysicalPath, null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtAlias, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPhysicalPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    RefreshButton();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    foreach (var ch in ApplicationCollection.InvalidApplicationPathCharacters())\n                    {\n                        if (txtAlias.Text.Contains(ch.ToString(CultureInfo.InvariantCulture)))\n                        {\n                            MessageBox.Show(\"The application path cannot contain the following characters: \\\\, ?, ;, :, @, &, =, +, $, ,, |, \\\", <, >, *.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                            return;\n                        }\n                    }\n\n                    foreach (var ch in SiteCollection.InvalidSiteNameCharactersJexus())\n                    {\n                        if (txtAlias.Text.Contains(ch.ToString(CultureInfo.InvariantCulture)))\n                        {\n                            MessageBox.Show(\"The site name cannot contain the following characters: ' '.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                            return;\n                        }\n                    }\n\n                    if (!_site.Server.Verify(txtPhysicalPath.Text, site.Applications[0].GetActualExecutable()))\n                    {\n                        MessageBox.Show(\"The specified directory does not exist on the server.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                        return;\n                    }\n\n                    if (Application == null)\n                    {\n                        string path = string.Format(\"{0}/{1}\", _parentPath.TrimEnd('/'), txtAlias.Text);\n                        foreach (VirtualDirectory virtualDirectory in _site.Applications[0].VirtualDirectories)\n                        {\n                            if (string.Equals(virtualDirectory.Path, path, StringComparison.OrdinalIgnoreCase))\n                            {\n                                ShowMessage(\"This virtual directory already exists.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                                return;\n                            }\n                        }\n\n                        foreach (Application application in _site.Applications)\n                        {\n                            if (string.Equals(path, application.Path))\n                            {\n                                ShowMessage(\"An application with this virtual path already exists.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                                return;\n                            }\n                        }\n\n                        Application = _site.Applications.Add(path, txtPhysicalPath.Text);\n                        Application.Name = txtAlias.Text;\n                        Application.ApplicationPoolName = txtPool.Text;\n\n                        item.Element = Application.VirtualDirectories[0];\n                        item.Apply();\n                    }\n                    else\n                    {\n                        foreach (VirtualDirectory directory in Application.VirtualDirectories)\n                        {\n                            if (directory.Path == Application.Path)\n                            {\n                                directory.PhysicalPath = txtPhysicalPath.Text;\n                            }\n                        }\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnSelect, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using var dialog = new SelectPoolDialog(txtPool.Text, _site.Server);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n\n                    txtPool.Text = dialog.Selected.Name;\n                    if (Application != null)\n                    {\n                        Application.ApplicationPoolName = dialog.Selected.Name;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnConnect, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using (var dialog = new ConnectAsDialog(ServiceProvider, item))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n                    }\n\n                    item.Apply();\n                    txtConnectAs.Text = string.IsNullOrEmpty(item.UserName)\n                        ? \"Pass-through authentication\"\n                        : $\"connect as '{item.UserName}'\";\n                    RefreshButton();\n                }));\n\n            txtConnectAs.Text = string.IsNullOrEmpty(item.UserName)\n                ? \"Pass-through authentication\"\n                : $\"connect as '{item.UserName}'\";\n        }\n\n        private void RefreshButton()\n        {\n            btnOK.Enabled = !string.IsNullOrWhiteSpace(txtAlias.Text) && !string.IsNullOrWhiteSpace(txtPhysicalPath.Text);\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Application Application { get; private set; }\n\n        private void NewApplicationDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210458\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/NewApplicationDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Dialogs/NewSiteDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Dialogs\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class NewSiteDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtPool = new System.Windows.Forms.TextBox();\n            this.btnChoose = new System.Windows.Forms.Button();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.btnTest = new System.Windows.Forms.Button();\n            this.btnConnect = new System.Windows.Forms.Button();\n            this.txtConnectAs = new System.Windows.Forms.Label();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.groupBox2 = new System.Windows.Forms.GroupBox();\n            this.txtCertificates = new System.Windows.Forms.Label();\n            this.btnView = new System.Windows.Forms.Button();\n            this.btnSelect = new System.Windows.Forms.Button();\n            this.cbCertificates = new System.Windows.Forms.ComboBox();\n            this.cbSniRequired = new System.Windows.Forms.CheckBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.txtHost = new System.Windows.Forms.TextBox();\n            this.label6 = new System.Windows.Forms.Label();\n            this.txtPort = new System.Windows.Forms.TextBox();\n            this.cbAddress = new System.Windows.Forms.ComboBox();\n            this.cbType = new System.Windows.Forms.ComboBox();\n            this.label7 = new System.Windows.Forms.Label();\n            this.label8 = new System.Windows.Forms.Label();\n            this.label9 = new System.Windows.Forms.Label();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.cbStart = new System.Windows.Forms.CheckBox();\n            this.groupBox1.SuspendLayout();\n            this.groupBox2.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(22, 24);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(57, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Site name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(25, 40);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(210, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(250, 24);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(85, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Application pool:\";\n            // \n            // txtPool\n            // \n            this.txtPool.Location = new System.Drawing.Point(253, 40);\n            this.txtPool.Name = \"txtPool\";\n            this.txtPool.ReadOnly = true;\n            this.txtPool.Size = new System.Drawing.Size(185, 20);\n            this.txtPool.TabIndex = 3;\n            this.txtPool.Text = \"DefaultAppPool\";\n            // \n            // btnChoose\n            // \n            this.btnChoose.Enabled = false;\n            this.btnChoose.Location = new System.Drawing.Point(444, 38);\n            this.btnChoose.Name = \"btnChoose\";\n            this.btnChoose.Size = new System.Drawing.Size(95, 23);\n            this.btnChoose.TabIndex = 4;\n            this.btnChoose.Text = \"Select...\";\n            this.btnChoose.UseVisualStyleBackColor = true;\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.btnTest);\n            this.groupBox1.Controls.Add(this.btnConnect);\n            this.groupBox1.Controls.Add(this.txtConnectAs);\n            this.groupBox1.Controls.Add(this.btnBrowse);\n            this.groupBox1.Controls.Add(this.txtPath);\n            this.groupBox1.Controls.Add(this.label3);\n            this.groupBox1.Location = new System.Drawing.Point(25, 74);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(514, 134);\n            this.groupBox1.TabIndex = 5;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Content Directory\";\n            // \n            // btnTest\n            // \n            this.btnTest.Enabled = false;\n            this.btnTest.Location = new System.Drawing.Point(115, 98);\n            this.btnTest.Name = \"btnTest\";\n            this.btnTest.Size = new System.Drawing.Size(90, 23);\n            this.btnTest.TabIndex = 5;\n            this.btnTest.Text = \"Test Settings...\";\n            this.btnTest.UseVisualStyleBackColor = true;\n            // \n            // btnConnect\n            // \n            this.btnConnect.Location = new System.Drawing.Point(24, 98);\n            this.btnConnect.Name = \"btnConnect\";\n            this.btnConnect.Size = new System.Drawing.Size(85, 23);\n            this.btnConnect.TabIndex = 4;\n            this.btnConnect.Text = \"Connect as...\";\n            this.btnConnect.UseVisualStyleBackColor = true;\n            // \n            // txtConnectAs\n            // \n            this.txtConnectAs.AutoSize = true;\n            this.txtConnectAs.Location = new System.Drawing.Point(21, 69);\n            this.txtConnectAs.Name = \"txtConnectAs\";\n            this.txtConnectAs.Size = new System.Drawing.Size(139, 13);\n            this.txtConnectAs.TabIndex = 3;\n            this.txtConnectAs.Text = \"Pass-through authentication\";\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(346, 44);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(38, 23);\n            this.btnBrowse.TabIndex = 2;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Visible = false;\n            // \n            // txtPath\n            // \n            this.txtPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;\n            this.txtPath.Location = new System.Drawing.Point(24, 46);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(316, 20);\n            this.txtPath.TabIndex = 1;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(21, 30);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(73, 13);\n            this.label3.TabIndex = 0;\n            this.label3.Text = \"Physical path:\";\n            // \n            // groupBox2\n            // \n            this.groupBox2.Controls.Add(this.txtCertificates);\n            this.groupBox2.Controls.Add(this.btnView);\n            this.groupBox2.Controls.Add(this.btnSelect);\n            this.groupBox2.Controls.Add(this.cbCertificates);\n            this.groupBox2.Controls.Add(this.cbSniRequired);\n            this.groupBox2.Controls.Add(this.label5);\n            this.groupBox2.Controls.Add(this.txtHost);\n            this.groupBox2.Controls.Add(this.label6);\n            this.groupBox2.Controls.Add(this.txtPort);\n            this.groupBox2.Controls.Add(this.cbAddress);\n            this.groupBox2.Controls.Add(this.cbType);\n            this.groupBox2.Controls.Add(this.label7);\n            this.groupBox2.Controls.Add(this.label8);\n            this.groupBox2.Controls.Add(this.label9);\n            this.groupBox2.Location = new System.Drawing.Point(25, 214);\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.Size = new System.Drawing.Size(514, 254);\n            this.groupBox2.TabIndex = 6;\n            this.groupBox2.TabStop = false;\n            this.groupBox2.Text = \"Binding\";\n            // \n            // txtCertificates\n            // \n            this.txtCertificates.AutoSize = true;\n            this.txtCertificates.Location = new System.Drawing.Point(18, 189);\n            this.txtCertificates.Name = \"txtCertificates\";\n            this.txtCertificates.Size = new System.Drawing.Size(79, 13);\n            this.txtCertificates.TabIndex = 29;\n            this.txtCertificates.Text = \"SSL certificate:\";\n            this.txtCertificates.Visible = false;\n            // \n            // btnView\n            // \n            this.btnView.Location = new System.Drawing.Point(421, 203);\n            this.btnView.Name = \"btnView\";\n            this.btnView.Size = new System.Drawing.Size(85, 23);\n            this.btnView.TabIndex = 28;\n            this.btnView.Text = \"View...\";\n            this.btnView.UseVisualStyleBackColor = true;\n            // \n            // btnSelect\n            // \n            this.btnSelect.Enabled = false;\n            this.btnSelect.Location = new System.Drawing.Point(330, 203);\n            this.btnSelect.Name = \"btnSelect\";\n            this.btnSelect.Size = new System.Drawing.Size(85, 23);\n            this.btnSelect.TabIndex = 27;\n            this.btnSelect.Text = \"Select...\";\n            this.btnSelect.UseVisualStyleBackColor = true;\n            // \n            // cbCertificates\n            // \n            this.cbCertificates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbCertificates.FormattingEnabled = true;\n            this.cbCertificates.Location = new System.Drawing.Point(21, 205);\n            this.cbCertificates.Name = \"cbCertificates\";\n            this.cbCertificates.Size = new System.Drawing.Size(303, 21);\n            this.cbCertificates.TabIndex = 26;\n            // \n            // cbSniRequired\n            // \n            this.cbSniRequired.AutoSize = true;\n            this.cbSniRequired.Location = new System.Drawing.Point(24, 136);\n            this.cbSniRequired.Name = \"cbSniRequired\";\n            this.cbSniRequired.Size = new System.Drawing.Size(177, 17);\n            this.cbSniRequired.TabIndex = 25;\n            this.cbSniRequired.Text = \"Require Server Name Indication\";\n            this.cbSniRequired.UseVisualStyleBackColor = true;\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(21, 109);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(266, 13);\n            this.label5.TabIndex = 24;\n            this.label5.Text = \"Example: www.contoso.com or marketing.contoso.com\";\n            // \n            // txtHost\n            // \n            this.txtHost.Location = new System.Drawing.Point(21, 86);\n            this.txtHost.Name = \"txtHost\";\n            this.txtHost.Size = new System.Drawing.Size(303, 20);\n            this.txtHost.TabIndex = 23;\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(21, 70);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(61, 13);\n            this.label6.TabIndex = 22;\n            this.label6.Text = \"Host name:\";\n            // \n            // txtPort\n            // \n            this.txtPort.Location = new System.Drawing.Point(358, 33);\n            this.txtPort.Name = \"txtPort\";\n            this.txtPort.Size = new System.Drawing.Size(48, 20);\n            this.txtPort.TabIndex = 21;\n            this.txtPort.Text = \"80\";\n            // \n            // cbAddress\n            // \n            this.cbAddress.FormattingEnabled = true;\n            this.cbAddress.Location = new System.Drawing.Point(142, 33);\n            this.cbAddress.Name = \"cbAddress\";\n            this.cbAddress.Size = new System.Drawing.Size(210, 21);\n            this.cbAddress.TabIndex = 20;\n            this.cbAddress.Text = \"All Unassigned\";\n            // \n            // cbType\n            // \n            this.cbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbType.FormattingEnabled = true;\n            this.cbType.Items.AddRange(new object[] {\n            \"http\",\n            \"https\"});\n            this.cbType.Location = new System.Drawing.Point(21, 33);\n            this.cbType.Name = \"cbType\";\n            this.cbType.Size = new System.Drawing.Size(115, 21);\n            this.cbType.TabIndex = 19;\n            // \n            // label7\n            // \n            this.label7.AutoSize = true;\n            this.label7.Location = new System.Drawing.Point(355, 16);\n            this.label7.Name = \"label7\";\n            this.label7.Size = new System.Drawing.Size(29, 13);\n            this.label7.TabIndex = 18;\n            this.label7.Text = \"Port:\";\n            // \n            // label8\n            // \n            this.label8.AutoSize = true;\n            this.label8.Location = new System.Drawing.Point(139, 16);\n            this.label8.Name = \"label8\";\n            this.label8.Size = new System.Drawing.Size(60, 13);\n            this.label8.TabIndex = 17;\n            this.label8.Text = \"IP address:\";\n            // \n            // label9\n            // \n            this.label9.AutoSize = true;\n            this.label9.Location = new System.Drawing.Point(21, 16);\n            this.label9.Name = \"label9\";\n            this.label9.Size = new System.Drawing.Size(34, 13);\n            this.label9.TabIndex = 16;\n            this.label9.Text = \"Type:\";\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(477, 501);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 7;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(376, 501);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 8;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // cbStart\n            // \n            this.cbStart.AutoSize = true;\n            this.cbStart.Checked = true;\n            this.cbStart.CheckState = System.Windows.Forms.CheckState.Checked;\n            this.cbStart.Location = new System.Drawing.Point(25, 474);\n            this.cbStart.Name = \"cbStart\";\n            this.cbStart.Size = new System.Drawing.Size(147, 17);\n            this.cbStart.TabIndex = 9;\n            this.cbStart.Text = \"Start Website immediately\";\n            this.cbStart.UseVisualStyleBackColor = true;\n            // \n            // NewSiteDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(584, 536);\n            this.Controls.Add(this.cbStart);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.groupBox2);\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.btnChoose);\n            this.Controls.Add(this.txtPool);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Name = \"NewSiteDialog\";\n            this.Text = \"Add Website\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewSiteDialogHelpButtonClicked);\n            this.Load += new System.EventHandler(this.NewSiteDialogLoad);\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.groupBox2.ResumeLayout(false);\n            this.groupBox2.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private Label label2;\n        private TextBox txtPool;\n        private Button btnChoose;\n        private GroupBox groupBox1;\n        private Button btnTest;\n        private Button btnConnect;\n        private Label txtConnectAs;\n        private Button btnBrowse;\n        private TextBox txtPath;\n        private Label label3;\n        private GroupBox groupBox2;\n        private Button btnView;\n        private Button btnSelect;\n        private ComboBox cbCertificates;\n        private CheckBox cbSniRequired;\n        private Label label5;\n        private TextBox txtHost;\n        private Label label6;\n        private TextBox txtPort;\n        private ComboBox cbAddress;\n        private ComboBox cbType;\n        private Label label7;\n        private Label label8;\n        private Label label9;\n        private Button btnCancel;\n        private Button btnOK;\n        private CheckBox cbStart;\n        private Label txtCertificates;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/NewSiteDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\nusing System.Net;\nusing System.Windows.Forms;\n\nusing JexusManager.Services;\n\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Client.Win32;\n\nusing Application = Microsoft.Web.Administration.Application;\nusing Binding = Microsoft.Web.Administration.Binding;\nusing System.Reactive.Disposables;\nusing System.Reactive.Linq;\nusing JexusManager.Features.HttpApi;\nusing Microsoft.Web.Management.Client;\nusing System.Linq;\n\nnamespace JexusManager.Dialogs\n{\n    public partial class NewSiteDialog : DialogForm\n    {\n        public NewSiteDialog(IServiceProvider serviceProvider, SiteCollection collection)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbType.SelectedIndex = 0;\n            if (collection == null)\n            {\n                throw new InvalidOperationException(\"null collection\");\n            }\n\n            if (collection.Parent == null)\n            {\n                throw new InvalidOperationException(\"null server for site collection\");\n            }\n\n            btnBrowse.Visible = collection.Parent.IsLocalhost;\n            txtPool.Text = collection.Parent.ApplicationDefaults.ApplicationPoolName;\n            btnChoose.Enabled = collection.Parent.Mode != WorkingMode.Jexus;\n            txtHost.Text = collection.Parent.Mode == WorkingMode.IisExpress ? \"localhost\" : string.Empty;\n            DialogHelper.LoadAddresses(cbAddress);\n            if (!collection.Parent.SupportsSni)\n            {\n                cbSniRequired.Enabled = false;\n            }\n\n            var item = new ConnectAsItem(NewSite?.Applications[0].VirtualDirectories[0]);\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbType, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtPort.Text = cbType.Text == \"http\" ? \"80\" : \"443\";\n                    txtCertificates.Visible = cbType.SelectedIndex == 1;\n                    cbSniRequired.Visible = cbType.SelectedIndex == 1;\n                    cbCertificates.Visible = cbType.SelectedIndex == 1;\n                    btnSelect.Visible = cbType.SelectedIndex == 1;\n                    btnView.Visible = cbType.SelectedIndex == 1;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnConnect, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using (var dialog = new ConnectAsDialog(ServiceProvider, item))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n                    }\n\n                    item.Apply();\n                    txtConnectAs.Text = string.IsNullOrEmpty(item.UserName)\n                        ? \"Pass-through authentication\"\n                        : $\"connect as '{item.UserName}'\";\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowBrowseDialog(txtPath, null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    foreach (var ch in SiteCollection.InvalidSiteNameCharacters())\n                    {\n                        if (txtName.Text.Contains(ch))\n                        {\n                            ShowMessage(\"The site name cannot contain the following characters: '\\\\, /, ?, ;, :, @, &, =, +, $, ,, |, \\\", <, >'.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n                    }\n\n                    foreach (var ch in SiteCollection.InvalidSiteNameCharactersJexus())\n                    {\n                        if (txtName.Text.Contains(ch) || txtName.Text.StartsWith(\"~\"))\n                        {\n                            ShowMessage(\"The site name cannot contain the following characters: '~,  '.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n                    }\n\n                    if (!collection.Parent.Verify(txtPath.Text, null))\n                    {\n                        ShowMessage(\"The specified directory does not exist on the server.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    if (!IPEndPointIsValid(out IPAddress address, out int port))\n                    {\n                        return;\n                    }\n\n                    var invalid = \"\\\"/\\\\[]:|<>+=;,?*$%#@{}^`\".ToCharArray();\n                    foreach (var ch in invalid)\n                    {\n                        if (txtHost.Text.Contains(ch))\n                        {\n                            ShowMessage(\"The specified host name is incorrect. The host name must use a valid host name format and cannot contain the following characters: \\\"/\\\\[]:|<>+=;,?*$%#@{}^`. Example: www.contoso.com.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n                    }\n\n                    if (collection.Parent.Mode == WorkingMode.IisExpress)\n                    {\n                        if (txtHost.Text != \"localhost\")\n                        {\n                            ShowMessage(\n                                \"The specific host name is not recommended for IIS Express. The host name should be localhost.\",\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Warning,\n                                MessageBoxDefaultButton.Button1);\n                        }\n                    }\n\n                    long largestId = 0;\n                    foreach (Site site in collection)\n                    {\n                        if (site.Id > largestId)\n                        {\n                            largestId = site.Id;\n                        }\n                    }\n\n                    largestId++;\n\n                    NewSite = new Site(collection) { Name = txtName.Text, Id = largestId };\n                    var host = txtHost.Text.DisplayToHost();\n                    var info = cbType.Text == \"https\" ? (CertificateInfo)cbCertificates.SelectedItem : null;\n                    var binding = new Binding(\n                        cbType.Text,\n                        string.Format(\"{0}:{1}:{2}\", address.AddressToDisplay(), port, host.HostToDisplay()),\n                        info?.Certificate.GetCertHash() ?? new byte[0],\n                        info?.Store,\n                        cbSniRequired.Checked ? SslFlags.Sni : SslFlags.None,\n                        NewSite.Bindings);\n                    if (collection.FindDuplicate(binding, null, null) != false)\n                    {\n                        var result = ShowMessage(string.Format(\"The binding '{0}' is assigned to another site. If you assign the same binding to this site, you will only be able to start one of the sites. Are you sure that you want to add this duplicate binding?\", binding), MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);\n                        if (result != DialogResult.Yes)\n                        {\n                            collection.Remove(NewSite);\n                            return;\n                        }\n                    }\n\n                    if (collection.Parent.Mode == WorkingMode.IisExpress || collection.Parent.Mode == WorkingMode.Iis)\n                    {\n                        var (state, message) = binding.FixCertificateMapping(info?.Certificate);\n                        if (state != CertificateMappingState.RegistrationSucceeded)\n                        {\n                            if (state == CertificateMappingState.HostNameNotMatched)\n                            {\n                                var result = ShowMessage($\"{message}. Do you still want to use this certificate?\", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);\n                                if (result == DialogResult.Yes)\n                                {\n                                    // IMPORTANT: force using the certificate.\n                                    (state, message) = binding.FixCertificateMapping(info?.Certificate, true);\n                                }\n                            }\n\n                            if (state != CertificateMappingState.RegistrationSucceeded)\n                            {\n                                collection.Remove(NewSite);\n                                ShowMessage(string.Format(\"The binding '{0}' is invalid: {1}\", binding, message), MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                                return;\n                            }\n                        }\n                    }\n\n                    var app = NewSite.Applications.Add(Application.RootPath, txtPath.Text);\n                    app.Name = string.Empty;\n                    app.ApplicationPoolName = txtPool.Text;\n                    NewSite.Bindings.Add(binding);\n\n                    item.Element = NewSite.Applications[0].VirtualDirectories[0];\n                    item.Apply();\n\n                    if (collection.Parent.Mode == WorkingMode.IisExpress)\n                    {\n                        if (binding.Host != \"localhost\")\n                        {\n                            ShowMessage(\n                                \"The specific host name is not recommended for IIS Express. The host name should be localhost.\",\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Warning,\n                                MessageBoxDefaultButton.Button1);\n\n                            var reservation = binding.ToUrlPrefix();\n                            var feature = new ReservedUrlsFeature((Module)serviceProvider);\n                            feature.Load();\n                            if (feature.Items.All(item => item.UrlPrefix != reservation))\n                            {\n                                var message = BindingUtility.AddReservedUrl(reservation);\n                                if (!string.IsNullOrEmpty(message))\n                                {\n                                    ShowMessage($\"Reserved URL {reservation} cannot be added. {message}\", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                                    return;\n                                }\n                            }\n                        }\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            var certificatesSelected = Observable.FromEventPattern<EventArgs>(cbCertificates, \"SelectedIndexChanged\");\n            container.Add(\n                certificatesSelected\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnView.Enabled = cbCertificates.SelectedIndex > 0;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPort, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(cbAddress, \"TextChanged\"))\n                .Merge(certificatesSelected)\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (Helper.IsRunningOnMono())\n                    {\n                        return;\n                    }\n\n                    var toElevate = IPEndPointIsValid(out IPAddress address, out int port, false) ? BindingUtility.Verify(cbType.Text, cbAddress.Text, txtPort.Text, cbCertificates.SelectedItem as CertificateInfo) : false;\n                    btnOK.Enabled = toElevate != null && !string.IsNullOrWhiteSpace(txtName.Text)\n                                    && !string.IsNullOrWhiteSpace(txtPath.Text);\n                    if (!toElevate.HasValue || !toElevate.Value)\n                    {\n                        NativeMethods.RemoveShieldFromButton(btnOK);\n                    }\n                    else\n                    {\n                        NativeMethods.TryAddShieldToButton(btnOK);\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnView, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var info = (CertificateInfo)cbCertificates.SelectedItem;\n                    DialogHelper.DisplayCertificate(info.Certificate, this.Handle);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnChoose, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using var dialog = new SelectPoolDialog(txtPool.Text, collection.Parent);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n\n                    txtPool.Text = dialog.Selected.Name;\n                }));\n        }\n\n        private bool IPEndPointIsValid(out IPAddress address, out int port, bool showDialog = true)\n        {\n            try\n            {\n                address = cbAddress.Text.ComboToAddress();\n            }\n            catch (Exception)\n            {\n                if (showDialog)\n                {\n                    ShowMessage(\"The specified IP address is invalid. Specify a valid IP address.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                }\n\n                address = null;\n                port = 0;\n                return false;\n            }\n\n            return Binding.PortIsValid(txtPort.Text, out port, Text, showDialog);\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Site NewSite { get; set; }\n\n        private void NewSiteDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210531#Add_Site\");\n        }\n\n        private void NewSiteDialogLoad(object sender, EventArgs e)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            DialogHelper.LoadCertificates(cbCertificates, null, null, service);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/NewSiteDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Dialogs/NewVirtualDirectoryDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Dialogs\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewVirtualDirectoryDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.txtPath = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtSite = new System.Windows.Forms.Label();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtAlias = new System.Windows.Forms.TextBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.label6 = new System.Windows.Forms.Label();\n            this.txtPhysicalPath = new System.Windows.Forms.TextBox();\n            this.txtConnectAs = new System.Windows.Forms.Label();\n            this.btnConnect = new System.Windows.Forms.Button();\n            this.btnTest = new System.Windows.Forms.Button();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.txtPath);\n            this.groupBox1.Controls.Add(this.label3);\n            this.groupBox1.Controls.Add(this.txtSite);\n            this.groupBox1.Controls.Add(this.label1);\n            this.groupBox1.Location = new System.Drawing.Point(12, 12);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(489, 78);\n            this.groupBox1.TabIndex = 0;\n            this.groupBox1.TabStop = false;\n            // \n            // txtPath\n            // \n            this.txtPath.AutoSize = true;\n            this.txtPath.Location = new System.Drawing.Point(96, 49);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(0, 13);\n            this.txtPath.TabIndex = 3;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(20, 49);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(32, 13);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Path:\";\n            // \n            // txtSite\n            // \n            this.txtSite.AutoSize = true;\n            this.txtSite.Location = new System.Drawing.Point(96, 20);\n            this.txtSite.Name = \"txtSite\";\n            this.txtSite.Size = new System.Drawing.Size(0, 13);\n            this.txtSite.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(20, 20);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(57, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Site name:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 107);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(32, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Alias:\";\n            // \n            // txtAlias\n            // \n            this.txtAlias.Location = new System.Drawing.Point(15, 127);\n            this.txtAlias.Name = \"txtAlias\";\n            this.txtAlias.Size = new System.Drawing.Size(185, 20);\n            this.txtAlias.TabIndex = 3;\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(12, 150);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(82, 13);\n            this.label5.TabIndex = 4;\n            this.label5.Text = \"Examples: sales\";\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(12, 180);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(73, 13);\n            this.label6.TabIndex = 7;\n            this.label6.Text = \"Physical path:\";\n            // \n            // txtPhysicalPath\n            // \n            this.txtPhysicalPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPhysicalPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;\n            this.txtPhysicalPath.Location = new System.Drawing.Point(15, 196);\n            this.txtPhysicalPath.Name = \"txtPhysicalPath\";\n            this.txtPhysicalPath.Size = new System.Drawing.Size(324, 20);\n            this.txtPhysicalPath.TabIndex = 8;\n            // \n            // txtConnectAs\n            // \n            this.txtConnectAs.AutoSize = true;\n            this.txtConnectAs.Location = new System.Drawing.Point(12, 235);\n            this.txtConnectAs.Name = \"txtConnectAs\";\n            this.txtConnectAs.Size = new System.Drawing.Size(139, 13);\n            this.txtConnectAs.TabIndex = 9;\n            this.txtConnectAs.Text = \"Pass-through authentication\";\n            // \n            // btnConnect\n            // \n            this.btnConnect.Location = new System.Drawing.Point(15, 251);\n            this.btnConnect.Name = \"btnConnect\";\n            this.btnConnect.Size = new System.Drawing.Size(94, 23);\n            this.btnConnect.TabIndex = 10;\n            this.btnConnect.Text = \"Connect as...\";\n            this.btnConnect.UseVisualStyleBackColor = true;\n            // \n            // btnTest\n            // \n            this.btnTest.Enabled = false;\n            this.btnTest.Location = new System.Drawing.Point(115, 251);\n            this.btnTest.Name = \"btnTest\";\n            this.btnTest.Size = new System.Drawing.Size(94, 23);\n            this.btnTest.TabIndex = 11;\n            this.btnTest.Text = \"Test Settings...\";\n            this.btnTest.UseVisualStyleBackColor = true;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(345, 194);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(33, 23);\n            this.btnBrowse.TabIndex = 13;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Visible = false;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(306, 316);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 14;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(407, 316);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 15;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // NewVirtualDirectoryDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(514, 351);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.btnTest);\n            this.Controls.Add(this.btnConnect);\n            this.Controls.Add(this.txtConnectAs);\n            this.Controls.Add(this.txtPhysicalPath);\n            this.Controls.Add(this.label6);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.txtAlias);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.groupBox1);\n            this.Name = \"NewVirtualDirectoryDialog\";\n            this.Text = \"Add Application\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewVirtualDirectoryDialog_HelpButtonClicked);\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private GroupBox groupBox1;\n        private Label txtPath;\n        private Label label3;\n        private Label txtSite;\n        private Label label1;\n        private Label label2;\n        private TextBox txtAlias;\n        private Label label5;\n        private Label label6;\n        private TextBox txtPhysicalPath;\n        private Label txtConnectAs;\n        private Button btnConnect;\n        private Button btnTest;\n        private Button btnBrowse;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}"
  },
  {
    "path": "JexusManager/Dialogs/NewVirtualDirectoryDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Dialogs\n{\n    using System;\n    using System.ComponentModel;\n    using System.Globalization;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Application = Microsoft.Web.Administration.Application;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Runtime.InteropServices;\n\n    public sealed partial class NewVirtualDirectoryDialog : DialogForm\n    {\n        public NewVirtualDirectoryDialog(IServiceProvider serviceProvider, VirtualDirectory existing, string pathToSite, Application application)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            txtSite.Text = application.Site.Name;\n            txtPath.Text = pathToSite;\n            btnBrowse.Visible = application.Server.IsLocalhost;\n            VirtualDirectory = existing;\n            Text = VirtualDirectory == null ? \"Add Virtual Directory\" : \"Edit Virtual Directory\";\n            txtAlias.ReadOnly = VirtualDirectory != null;\n            if (VirtualDirectory == null)\n            {\n                // TODO: test if IIS does this\n            }\n            else\n            {\n                txtAlias.Text = VirtualDirectory.Path.PathToName();\n                txtPhysicalPath.Text = VirtualDirectory.PhysicalPath;\n                RefreshButton();\n            }\n\n            var item = new ConnectAsItem(VirtualDirectory);\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowBrowseDialog(txtPhysicalPath, application.GetActualExecutable());\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtAlias, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPhysicalPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    RefreshButton();\n                }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     foreach (var ch in ApplicationCollection.InvalidApplicationPathCharacters())\n                     {\n                         if (txtAlias.Text.Contains(ch.ToString(CultureInfo.InvariantCulture)))\n                         {\n                             ShowMessage(\"The application path cannot contain the following characters: \\\\, ?, ;, :, @, &, =, +, $, ,, |, \\\", <, >, *.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                             return;\n                         }\n                     }\n\n                     foreach (var ch in SiteCollection.InvalidSiteNameCharactersJexus())\n                     {\n                         if (txtAlias.Text.Contains(ch.ToString(CultureInfo.InvariantCulture)))\n                         {\n                             ShowMessage(\"The site name cannot contain the following characters: ' '.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                             return;\n                         }\n                     }\n\n                     if (!application.Server.Verify(txtPhysicalPath.Text, application.GetActualExecutable()))\n                     {\n                         ShowMessage(\"The specified directory does not exist on the server.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                         return;\n                     }\n\n                     if (VirtualDirectory == null)\n                     {\n                         string path = \"/\" + txtAlias.Text;\n                         foreach (VirtualDirectory virtualDirectory in application.VirtualDirectories)\n                         {\n                             if (string.Equals(virtualDirectory.Path, path, StringComparison.OrdinalIgnoreCase))\n                             {\n                                 ShowMessage(\"This virtual directory already exists.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                                 return;\n                             }\n                         }\n\n                         var fullPath = $\"{txtPath.Text}{path}\";\n                         foreach (Application app in application.Site.Applications)\n                         {\n                             if (string.Equals(fullPath, app.Path))\n                             {\n                                 ShowMessage(\"An application with this virtual path already exists.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                                 return;\n                             }\n                         }\n\n                         try\n                         {\n                             VirtualDirectory = new VirtualDirectory(null, application.VirtualDirectories)\n                             {\n                                 Path = path\n                             };\n                         }\n                         catch (COMException ex)\n                         {\n                             ShowError(ex, Text, false);\n                             return;\n                         }\n\n                         VirtualDirectory.PhysicalPath = txtPhysicalPath.Text;\n                         VirtualDirectory.Parent.Add(VirtualDirectory);\n\n                         item.Element = VirtualDirectory;\n                         item.Apply();\n                     }\n                     else\n                     {\n                         VirtualDirectory.PhysicalPath = txtPhysicalPath.Text;\n                     }\n\n                     DialogResult = DialogResult.OK;\n                 }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnConnect, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using (var dialog = new ConnectAsDialog(ServiceProvider, item))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n                    }\n\n                    item.Apply();\n                    RefreshButton();\n                    txtConnectAs.Text = string.IsNullOrEmpty(item.UserName)\n                        ? \"Pass-through authentication\"\n                        : $\"connect as '{item.UserName}'\";\n                }));\n\n            txtConnectAs.Text = string.IsNullOrEmpty(item.UserName)\n                ? \"Pass-through authentication\"\n                : $\"connect as '{item.UserName}'\";\n        }\n\n        private void RefreshButton()\n        {\n            btnOK.Enabled = !string.IsNullOrWhiteSpace(txtAlias.Text) && !string.IsNullOrWhiteSpace(txtPhysicalPath.Text);\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public VirtualDirectory VirtualDirectory { get; private set; }\n\n        private void NewVirtualDirectoryDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210458\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/NewVirtualDirectoryDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Dialogs/SelectPoolDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Dialogs\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class SelectPoolDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbPools = new System.Windows.Forms.ComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.txtMode = new System.Windows.Forms.Label();\n            this.txtVersion = new System.Windows.Forms.Label();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(5, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(85, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Application pool:\";\n            // \n            // cbPools\n            // \n            this.cbPools.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbPools.FormattingEnabled = true;\n            this.cbPools.Location = new System.Drawing.Point(8, 29);\n            this.cbPools.Name = \"cbPools\";\n            this.cbPools.Size = new System.Drawing.Size(295, 21);\n            this.cbPools.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(5, 57);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(57, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Properties:\";\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.txtMode);\n            this.groupBox1.Controls.Add(this.txtVersion);\n            this.groupBox1.Location = new System.Drawing.Point(8, 73);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(295, 70);\n            this.groupBox1.TabIndex = 3;\n            this.groupBox1.TabStop = false;\n            // \n            // txtMode\n            // \n            this.txtMode.AutoSize = true;\n            this.txtMode.Location = new System.Drawing.Point(6, 42);\n            this.txtMode.Name = \"txtMode\";\n            this.txtMode.Size = new System.Drawing.Size(156, 13);\n            this.txtMode.TabIndex = 1;\n            this.txtMode.Text = \"Specify a valid applicaiton pool.\";\n            // \n            // txtVersion\n            // \n            this.txtVersion.AutoSize = true;\n            this.txtVersion.Location = new System.Drawing.Point(6, 16);\n            this.txtVersion.Name = \"txtVersion\";\n            this.txtVersion.Size = new System.Drawing.Size(175, 13);\n            this.txtVersion.TabIndex = 0;\n            this.txtVersion.Text = \"This application pool does not exist.\";\n            // \n            // btnOK\n            // \n            this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;\n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(112, 151);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 4;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(208, 151);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 5;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // SelectPoolDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(309, 186);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.cbPools);\n            this.Controls.Add(this.label1);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.HelpButton = true;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"SelectPoolDialog\";\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Select Application Pool\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.SelectPoolDialog_HelpButtonClicked);\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private ComboBox cbPools;\n        private Label label2;\n        private GroupBox groupBox1;\n        private Label txtMode;\n        private Label txtVersion;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}"
  },
  {
    "path": "JexusManager/Dialogs/SelectPoolDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Dialogs\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    public partial class SelectPoolDialog : Form\n    {\n        public SelectPoolDialog(string name, ServerManager server)\n        {\n            InitializeComponent();\n\n            int selected = 0;\n            foreach (ApplicationPool pool in server.ApplicationPools)\n            {\n                int index = cbPools.Items.Add(pool);\n                if (pool.Name != name)\n                {\n                    continue;\n                }\n\n                selected = index;\n                btnOK.Enabled = true;\n            }\n\n            if (server.ApplicationPools.Count == 0)\n            {\n                cbPools.Items.Add(name);\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbPools, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (!(cbPools.SelectedItem is ApplicationPool item))\n                    {\n                        return;\n                    }\n\n                    Selected = item;\n                    txtVersion.Text = $\".Net CLR Version: {item.ManagedRuntimeVersion.RuntimeVersionToDisplay()}\";\n                    txtMode.Text = $\"Pipeline mode: {item.ManagedPipelineMode}\";\n                    btnOK.Enabled = true;\n                }));\n\n            cbPools.SelectedIndex = selected;\n        }\n\n        private void SelectPoolDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210458\");\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal ApplicationPool Selected { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Dialogs/SelectPoolDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Main\n{\n    using JexusManager.Dialogs;\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n    using Binding = Microsoft.Web.Administration.Binding;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class ApplicationFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly ApplicationFeature _owner;\n\n            public FeatureTaskList(ApplicationFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Explore\", \"Explore\", string.Empty, string.Empty, Resources.explore_16).SetUsage());\n                result.Add(new MethodTaskItem(\"Permissions\", \"Edit Permissions...\", string.Empty).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(\n                    new MethodTaskItem(\"Basic\", \"Basic Settings...\", string.Empty, string.Empty,\n                        Resources.basic_settings_16).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"VirtualDirectories\", \"View Virtual Directories\", string.Empty).SetUsage());\n\n                if (_owner.SiteBindings.Any(item => item.CanBrowse))\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    var manageGroup = new GroupTaskItem(string.Empty, \"Manage Application\", string.Empty, true);\n                    result.Add(manageGroup);\n                    manageGroup.Items.Add(new TextTaskItem(\"Browse Application\", string.Empty, true));\n                    foreach (Binding binding in _owner.SiteBindings)\n                    {\n                        if (binding.CanBrowse)\n                        {\n                            var uri = binding.ToUri();\n                            manageGroup.Items.Add(\n                                new MethodTaskItem(\"Browse\", $\"Browse {binding.ToShortString()}\",\n                                    string.Empty, string.Empty,\n                                    Resources.browse_16, uri).SetUsage());\n                        }\n                    }\n\n                    manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    manageGroup.Items.Add(new MethodTaskItem(\"Advanced\", \"Advanced Settings...\", string.Empty).SetUsage());\n                    manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    manageGroup.Items.Add(new TextTaskItem(\"Troubleshooting\", string.Empty, true));\n                    manageGroup.Items.Add(new MethodTaskItem(\"FixKestrel\", \"ASP.NET Core Diagnostics\", string.Empty).SetUsage());\n                    manageGroup.Items.Add(new MethodTaskItem(\"FixPhp\", \"PHP Diagnostics\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Explore()\n            {\n                _owner.Explore();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Permissions()\n            {\n                _owner.Permissions();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Basic()\n            {\n                _owner.Basic();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void VirtualDirectories()\n            {\n                _owner.VirtualDirectories();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Browse(object uri)\n            {\n                _owner.Browse(uri);\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Advanced()\n            {\n                _owner.Advanced();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void FixPhp()\n            {\n                _owner.FixPhp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void FixKestrel()\n            {\n                _owner.FixKestrel();\n            }\n        }\n\n        public ApplicationFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            OnApplicationSettingsSaved();\n        }\n\n        protected void OnApplicationSettingsSaved()\n        {\n            ApplicationSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210463\");\n            return false;\n        }\n\n        private void Advanced()\n        {\n        }\n\n        private void Browse(object uri)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n\n            // IMPORTANT: help users launch IIS Express instance.\n            var site = service.Application.Site;\n            if (site.Server.Mode == WorkingMode.IisExpress && site.State != ObjectState.Started)\n            {\n                var message = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result = message.ShowMessage(\n                    \"This website is not yet running. Do you want to start it now?\",\n                    \"Question\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n\n                try\n                {\n                    service.Form.BeginProgress();\n                    DialogHelper.SiteStart(site, service.Form);\n                }\n                catch (Exception ex)\n                {\n                    message.ShowMessage(ex.Message, Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                }\n                finally\n                {\n                    service.Form.EndProgress();\n                }\n            }\n\n            DialogHelper.ProcessStart(uri + service.Application.Path);\n        }\n\n        private void VirtualDirectories()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var application = service.Application;\n\n            IModulePage page = new VirtualDirectoriesPage();\n            page.Initialize(Module, null, application);\n            service.Form.LoadPage(page);\n        }\n\n        private void Basic()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using (var dialog = new NewApplicationDialog(Module, service.Application.Site,\n                service.Application.Path.GetParentPath(),\n                service.Application.ApplicationPoolName,\n                service.Application))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            service.Application.Save();\n        }\n\n        private void Permissions()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            NativeMethods.ShowFileProperties(service.Application.PhysicalPath.ExpandIisExpressEnvironmentVariables(service.Application.GetActualExecutable()));\n        }\n\n        private void Explore()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            DialogHelper.Explore(service.Application.PhysicalPath.ExpandIisExpressEnvironmentVariables(service.Application.GetActualExecutable()));\n        }\n\n        private void FixPhp()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using var dialog = new PhpDiagDialog(Module, service.Application.Server);\n            dialog.ShowDialog();\n        }\n\n        private void FixKestrel()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using var dialog = new KestrelDiagDialog(Module, service.Application);\n            dialog.ShowDialog();\n        }\n\n        public IEnumerable<Binding> SiteBindings\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                var site = service.Application.Site;\n                return site.Bindings;\n            }\n        }\n\n        public ApplicationSettingsSavedEventHandler ApplicationSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public string Name { get; }\n    }\n\n    public delegate void ApplicationSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ApplicationPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.txtTitle = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbFilter = new System.Windows.Forms.ToolStripComboBox();\n            this.btnGo = new System.Windows.Forms.ToolStripSplitButton();\n            this.protocolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.btnShowAll = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.btnView = new System.Windows.Forms.ToolStripSplitButton();\n            this.detailsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.iconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.tilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.listToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // listView1\n            // \n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.LargeImageList = this.imageList1;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.ShowItemToolTips = true;\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.Sorting = System.Windows.Forms.SortOrder.Ascending;\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseDoubleClick);\n            // \n            // imageList1\n            // \n            this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;\n            this.imageList1.ImageSize = new System.Drawing.Size(36, 36);\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.txtTitle);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 1;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // txtTitle\n            // \n            this.txtTitle.AutoSize = true;\n            this.txtTitle.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.txtTitle.Location = new System.Drawing.Point(48, 10);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(62, 24);\n            this.txtTitle.TabIndex = 8;\n            this.txtTitle.Text = \"Home\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 7;\n            this.pictureBox1.TabStop = false;\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbFilter,\n            this.btnGo,\n            this.btnShowAll,\n            this.toolStripSeparator4,\n            this.toolStripLabel3,\n            this.cbGroup,\n            this.btnView});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(36, 22);\n            this.toolStripLabel2.Text = \"Filter:\";\n            // \n            // cbFilter\n            // \n            this.cbFilter.Name = \"cbFilter\";\n            this.cbFilter.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnGo\n            // \n            this.btnGo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.protocolToolStripMenuItem});\n            this.btnGo.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGo.Name = \"btnGo\";\n            this.btnGo.Size = new System.Drawing.Size(54, 22);\n            this.btnGo.Text = \"Go\";\n            this.btnGo.ToolTipText = \"Go\";\n            // \n            // protocolToolStripMenuItem\n            // \n            this.protocolToolStripMenuItem.Name = \"protocolToolStripMenuItem\";\n            this.protocolToolStripMenuItem.Size = new System.Drawing.Size(88, 22);\n            this.protocolToolStripMenuItem.Text = \"All\";\n            // \n            // btnShowAll\n            // \n            this.btnShowAll.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnShowAll.Name = \"btnShowAll\";\n            this.btnShowAll.Size = new System.Drawing.Size(73, 22);\n            this.btnShowAll.Text = \"Show All\";\n            // \n            // toolStripSeparator4\n            // \n            this.toolStripSeparator4.Name = \"toolStripSeparator4\";\n            this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25);\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Category\",\n            \"Area\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnView\n            // \n            this.btnView.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnView.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.detailsToolStripMenuItem,\n            this.iconsToolStripMenuItem,\n            this.tilesToolStripMenuItem,\n            this.listToolStripMenuItem});\n            this.btnView.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnView.Name = \"btnView\";\n            this.btnView.Size = new System.Drawing.Size(32, 22);\n            this.btnView.Text = \"toolStripButton1\";\n            // \n            // detailsToolStripMenuItem\n            // \n            this.detailsToolStripMenuItem.Name = \"detailsToolStripMenuItem\";\n            this.detailsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.detailsToolStripMenuItem.Text = \"Details\";\n            // \n            // iconsToolStripMenuItem\n            // \n            this.iconsToolStripMenuItem.Name = \"iconsToolStripMenuItem\";\n            this.iconsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.iconsToolStripMenuItem.Text = \"Icons\";\n            // \n            // tilesToolStripMenuItem\n            // \n            this.tilesToolStripMenuItem.Name = \"tilesToolStripMenuItem\";\n            this.tilesToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.tilesToolStripMenuItem.Text = \"Tiles\";\n            // \n            // listToolStripMenuItem\n            // \n            this.listToolStripMenuItem.Name = \"listToolStripMenuItem\";\n            this.listToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.listToolStripMenuItem.Text = \"List\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 3;\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 3;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // ApplicationPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ApplicationPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private ListView listView1;\n        private ImageList imageList1;\n        private SplitContainer splitContainer1;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbFilter;\n        private ToolStripSplitButton btnGo;\n        private ToolStripMenuItem protocolToolStripMenuItem;\n        private ToolStripButton btnShowAll;\n        private ToolStripSeparator toolStripSeparator4;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private ToolStripSplitButton btnView;\n        private ToolStripMenuItem detailsToolStripMenuItem;\n        private ToolStripMenuItem iconsToolStripMenuItem;\n        private ToolStripMenuItem tilesToolStripMenuItem;\n        private ToolStripMenuItem listToolStripMenuItem;\n        private Label txtTitle;\n        private PictureBox pictureBox1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System.Collections;\n    using System.Drawing;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Application = Microsoft.Web.Administration.Application;\n\n    internal partial class ApplicationPage : ModuleListPage\n    {\n        private sealed class PageTaskList : TaskList\n        {\n            private readonly ApplicationPage _owner;\n\n            public PageTaskList(ApplicationPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage()\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private PageTaskList _taskList;\n        private Application _application;\n        private ApplicationFeature _feature;\n\n        public ApplicationPage(Application application)\n        {\n            InitializeComponent();\n            btnView.Image = DefaultTaskList.ViewImage;\n            btnGo.Image = DefaultTaskList.GoImage;\n            btnShowAll.Image = DefaultTaskList.ShowAllImage;\n\n            _application = application;\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            txtTitle.Text = string.Format(\"{0} Home\", _application.Path);\n            InitializeListPage();\n\n            _feature = new ApplicationFeature(Module);\n            _feature.ApplicationSettingsUpdated = Refresh;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            var iis = new ListViewGroup(\"IIS\");\n            listView1.Groups.Add(iis);\n            var service = (IControlPanel)GetService(typeof(IControlPanel));\n            for (int index = 0; index < service.Pages.Count; index++)\n            {\n                var pageInfo = service.Pages[index];\n                imageList1.Images.Add((Image)pageInfo.LargeImage);\n                listView1.Items.Add(new ModulePageInfoListViewItem(pageInfo) { ImageIndex = index, Group = iis });\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            if (listView1.SelectedItems.Count == 0)\n            {\n                return;\n            }\n\n            var item = (ModulePageInfoListViewItem)listView1.SelectedItems[0];\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.Form.LoadPage(item.Page);\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>127, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>265, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>370, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>265, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>370, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolAdvancedSettings.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.ComponentModel;\n    using System.Drawing.Design;\n    using System.Reflection;\n\n    using Microsoft.Web.Administration;\n    using JexusManager.Main.Features.Main;\n\n    internal class ApplicationPoolAdvancedSettings\n    {\n        public ApplicationPoolAdvancedSettings(ApplicationPool pool)\n        {\n            if (pool.ManagedRuntimeVersion == ApplicationPool.ManagedRuntimeVersion40)\n            {\n                CLRVersion = CLRVersion.V40;\n            }\n            else if (pool.ManagedRuntimeVersion == ApplicationPool.ManagedRuntimeVersion20)\n            {\n                CLRVersion = CLRVersion.V20;\n            }\n            else\n            {\n                CLRVersion = CLRVersion.NoManagedCode;\n            }\n\n            Enable32Bit = pool.Enable32BitAppOnWin64;\n#if DEBUG || ARM64\n            EnableEmulation = pool.EnableEmulationOnWinArm64;\n#endif\n            Mode = pool.ManagedPipelineMode;\n            Name = pool.Name;\n            QueueLength = pool.QueueLength;\n            Start = pool.StartMode;\n\n            Limit = pool.Cpu.Limit;\n            Action = pool.Cpu.Action;\n            Interval = pool.Cpu.ResetInterval.GetTotalMinutes();\n            Affinitized = pool.Cpu.SmpAffinitized;\n            Mask = pool.Cpu.SmpProcessorAffinityMask;\n            Mask2 = pool.Cpu.SmpProcessorAffinityMask2;\n\n            LogEntry = new LogEntrySettings();\n            ConfigurationAttributeSchema enumLog = pool.ProcessModel.Schema.AttributeSchemas[\"logEventOnProcessModel\"];\n            if (enumLog != null)\n            {\n                if (enumLog.GetEnumValues().Count > 1)\n                {\n                    LogEntry.IdleTimeout = pool.ProcessModel.LogEventOnProcessModel\n                                                == ProcessModelLogEventOnProcessModel.IdleTimeout;\n                }\n                else\n                {\n                    // IMPORTANT: workaround for IIS 8 Express.\n                    HideProperty(GetType(), nameof(LogEntry));\n                }\n            }\n            else\n            {\n                HideProperty(GetType(), nameof(LogEntry));\n                LogEntry.IdleTimeout = true;\n            }\n\n            Identity = pool.ProcessModel;\n            IdleTimeout = pool.ProcessModel.IdleTimeout.GetTotalMinutes();\n            if (pool.ProcessModel.Schema.AttributeSchemas[\"idleTimeoutAction\"] != null)\n            {\n                IdleAction = pool.ProcessModel.IdleTimeoutAction;\n            }\n            else\n            {\n                HideProperty(GetType(), nameof(IdleAction));\n            }\n\n            LoadUserProfile = pool.ProcessModel.LoadUserProfile;\n            MaxProcesses = pool.ProcessModel.MaxProcesses;\n            PingingEnabled = pool.ProcessModel.PingingEnabled;\n            PingResponseTime = pool.ProcessModel.PingResponseTime.GetTotalSeconds();\n            PingInterval = pool.ProcessModel.PingInterval.GetTotalSeconds();\n            ShutdownTimeLimit = pool.ProcessModel.ShutdownTimeLimit.GetTotalSeconds();\n            StartupTimeLimit = pool.ProcessModel.StartupTimeLimit.GetTotalSeconds();\n\n            OrphanWorkerProcess = pool.Failure.OrphanWorkerProcess;\n            OrphanActionExe = pool.Failure.OrphanActionExe;\n            OrphanActionParams = pool.Failure.OrphanActionParams;\n\n            LoadBalancerCapabilities = pool.Failure.LoadBalancerCapabilities;\n            RapidFailProtection = pool.Failure.RapidFailProtection;\n            RapidFailProtectionInterval = pool.Failure.RapidFailProtectionInterval.GetTotalMinutes();\n            RapidFailProtectionMaxCrashes = pool.Failure.RapidFailProtectionMaxCrashes;\n            AutoShutdownExe = pool.Failure.AutoShutdownExe;\n            AutoShutdownParams = pool.Failure.AutoShutdownParams;\n\n            DisallowOverlappingRotation = pool.Recycling.DisallowOverlappingRotation;\n            DisallowRotationOnConfigChange = pool.Recycling.DisallowRotationOnConfigChange;\n            var flags = pool.Recycling.LogEventOnRecycle;\n            GenerateRecycleEventLogEntry = new GenerateRecycleEventLogEntry();\n            GenerateRecycleEventLogEntry.ConfigChange = (flags & RecyclingLogEventOnRecycle.ConfigChange) == RecyclingLogEventOnRecycle.ConfigChange;\n            GenerateRecycleEventLogEntry.IsapiUnhealthy = (flags & RecyclingLogEventOnRecycle.IsapiUnhealthy) == RecyclingLogEventOnRecycle.IsapiUnhealthy;\n            GenerateRecycleEventLogEntry.OnDemand = (flags & RecyclingLogEventOnRecycle.OnDemand) == RecyclingLogEventOnRecycle.OnDemand;\n            GenerateRecycleEventLogEntry.PrivateMemory = (flags & RecyclingLogEventOnRecycle.PrivateMemory) == RecyclingLogEventOnRecycle.PrivateMemory;\n            GenerateRecycleEventLogEntry.Time = (flags & RecyclingLogEventOnRecycle.Time) == RecyclingLogEventOnRecycle.Time;\n            GenerateRecycleEventLogEntry.Requests = (flags & RecyclingLogEventOnRecycle.Requests) == RecyclingLogEventOnRecycle.Requests;\n            GenerateRecycleEventLogEntry.Schedule = (flags & RecyclingLogEventOnRecycle.Schedule) == RecyclingLogEventOnRecycle.Schedule;\n            GenerateRecycleEventLogEntry.Memory = (flags & RecyclingLogEventOnRecycle.Memory) == RecyclingLogEventOnRecycle.Memory;\n\n            PrivateMemory = pool.Recycling.PeriodicRestart.PrivateMemory;\n            Time = pool.Recycling.PeriodicRestart.Time.GetTotalMinutes();\n            Requests = pool.Recycling.PeriodicRestart.Requests;\n            Schedule = pool.Recycling.PeriodicRestart.Schedule;\n            Memory = pool.Recycling.PeriodicRestart.Memory;\n        }\n\n        internal void Apply(ApplicationPool pool)\n        {\n            if (CLRVersion == CLRVersion.V40)\n            {\n                pool.ManagedRuntimeVersion = ApplicationPool.ManagedRuntimeVersion40;\n            }\n            else if (CLRVersion == CLRVersion.V20)\n            {\n                pool.ManagedRuntimeVersion = ApplicationPool.ManagedRuntimeVersion20;\n            }\n            else if (CLRVersion == CLRVersion.NoManagedCode)\n            {\n                pool.ManagedRuntimeVersion = ApplicationPool.ManagedRuntimeVersionNone;\n            }\n\n            pool.Enable32BitAppOnWin64 = Enable32Bit;\n#if DEBUG || ARM64\n            pool.EnableEmulationOnWinArm64 = EnableEmulation;\n#endif\n            pool.ManagedPipelineMode = Mode;\n            pool.QueueLength = QueueLength;\n            pool.StartMode = Start;\n\n            pool.ProcessModel.MaxProcesses = MaxProcesses;\n\n            pool.Cpu.Limit = Limit;\n            pool.Cpu.Action = pool.Cpu.Schema.AttributeSchemas[\"action\"].GetEnumValues().GetName((long)Action)\n                              != null\n                                  ? Action\n                                  : ProcessorAction.NoAction;\n            pool.Cpu.ResetInterval = new TimeSpan(0, Interval, 0);\n            pool.Cpu.SmpAffinitized = Affinitized;\n            pool.Cpu.SmpProcessorAffinityMask = Mask;\n            pool.Cpu.SmpProcessorAffinityMask2 = Mask2;\n\n            var enumIdle = pool.ProcessModel.Schema.AttributeSchemas[\"logEventOnProcessModel\"];\n            if (enumIdle != null)\n            {\n                if (enumIdle.GetEnumValues().Count > 1)\n                {\n                    pool.ProcessModel.LogEventOnProcessModel = LogEntry.IdleTimeout\n                                                                   ? ProcessModelLogEventOnProcessModel.IdleTimeout\n                                                                   : ProcessModelLogEventOnProcessModel.None;\n                }\n                else\n                {\n                    pool.ProcessModel.LogEventOnProcessModel = ProcessModelLogEventOnProcessModel.IdleTimeout;\n                }\n            }\n\n            pool.ProcessModel.IdleTimeout = new TimeSpan(0, IdleTimeout, 0);\n            if (pool.ProcessModel.Schema.AttributeSchemas[\"idleTimeoutAction\"] != null)\n            {\n                pool.ProcessModel.IdleTimeoutAction = IdleAction;\n            }\n\n            pool.ProcessModel.LoadUserProfile = LoadUserProfile;\n            pool.ProcessModel.MaxProcesses = MaxProcesses;\n            pool.ProcessModel.PingingEnabled = PingingEnabled;\n            pool.ProcessModel.PingResponseTime = TimeSpan.FromSeconds(PingResponseTime);\n            pool.ProcessModel.PingInterval = TimeSpan.FromSeconds(PingInterval);\n            pool.ProcessModel.ShutdownTimeLimit = TimeSpan.FromSeconds(ShutdownTimeLimit);\n            pool.ProcessModel.StartupTimeLimit = TimeSpan.FromSeconds(StartupTimeLimit);\n\n            pool.Failure.OrphanWorkerProcess = OrphanWorkerProcess;\n            pool.Failure.OrphanActionExe = OrphanActionExe;\n            pool.Failure.OrphanActionParams = OrphanActionParams;\n\n            pool.Failure.LoadBalancerCapabilities = LoadBalancerCapabilities;\n            pool.Failure.RapidFailProtection = RapidFailProtection;\n            pool.Failure.RapidFailProtectionInterval = new TimeSpan(0, RapidFailProtectionInterval, 0);\n            pool.Failure.RapidFailProtectionMaxCrashes = RapidFailProtectionMaxCrashes;\n            pool.Failure.AutoShutdownExe = AutoShutdownExe;\n            pool.Failure.AutoShutdownParams = AutoShutdownParams;\n\n            pool.Recycling.DisallowOverlappingRotation = DisallowOverlappingRotation;\n            pool.Recycling.DisallowRotationOnConfigChange = DisallowRotationOnConfigChange;\n            var flags = RecyclingLogEventOnRecycle.None;\n            if (GenerateRecycleEventLogEntry.ConfigChange)\n            {\n                flags &= RecyclingLogEventOnRecycle.ConfigChange;\n            }\n\n            if (GenerateRecycleEventLogEntry.IsapiUnhealthy)\n            {\n                flags &= RecyclingLogEventOnRecycle.IsapiUnhealthy;\n            }\n\n            if (GenerateRecycleEventLogEntry.OnDemand)\n            {\n                flags &= RecyclingLogEventOnRecycle.OnDemand;\n            }\n\n            if (GenerateRecycleEventLogEntry.PrivateMemory)\n            {\n                flags &= RecyclingLogEventOnRecycle.PrivateMemory;\n            }\n\n            if (GenerateRecycleEventLogEntry.Time)\n            {\n                flags &= RecyclingLogEventOnRecycle.Time;\n            }\n\n            if (GenerateRecycleEventLogEntry.Requests)\n            {\n                flags &= RecyclingLogEventOnRecycle.Requests;\n            }\n\n            if (GenerateRecycleEventLogEntry.Schedule)\n            {\n                flags &= RecyclingLogEventOnRecycle.Schedule;\n            }\n\n            if (GenerateRecycleEventLogEntry.Memory)\n            {\n                flags &= RecyclingLogEventOnRecycle.Memory;\n            }\n\n            pool.Recycling.PeriodicRestart.PrivateMemory = PrivateMemory;\n            pool.Recycling.PeriodicRestart.Time = new TimeSpan(0, Time, 0);\n            pool.Recycling.PeriodicRestart.Requests = Requests;\n            pool.Recycling.PeriodicRestart.Schedule.Clear();\n            foreach (Schedule item in Schedule)\n            {\n                pool.Recycling.PeriodicRestart.Schedule.Add(item);\n            }\n\n            pool.Recycling.PeriodicRestart.Memory = Memory;\n        }\n\n        private static void HideProperty(Type type, string name)\n        {\n            PropertyDescriptor descriptor = TypeDescriptor.GetProperties(type)[name];\n            BrowsableAttribute attrib = (BrowsableAttribute)descriptor.Attributes[typeof(BrowsableAttribute)];\n            FieldInfo isBrow = attrib.GetType().GetField(\"browsable\", BindingFlags.NonPublic | BindingFlags.Instance);\n            isBrow?.SetValue(attrib, false);\n        }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[managedRuntimeVersion] Configures the application pool to load a specific .NET CLR Version. The CLR version chosen should correspond to the appropriate version of the .NET Framework being used by your application. Select \\\"No Managed Code\\\" will cause all ASP.NET requests to fail.\")]\n        [DisplayName(\".NET CLR Version\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        [DefaultValue(CLRVersion.V20)]\n        // ReSharper disable once InconsistentNaming\n        public CLRVersion CLRVersion { get; set; }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[enable32BitAppOnWin64] If set to true for an application pool on 64-bit operating system, the worker process(es) serving the application pool will be in WOW64 (Windows on Windows64) mode. Processes in WOW64 mode are 32-bit processes that load only 32-bit applications.\")]\n        [DisplayName(\"Enable 32-Bit Applications\")]\n        [DefaultValue(false)]\n        public bool Enable32Bit { get; set; }\n#if DEBUG || ARM64\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[enableEmulationOnWinArm64] If set to true for an application pool on an ARM64 operating system, the worker process(es) serving the application pool will be in x86 or x64 emulation mode depending on property [enable32BitAppOnWin64].\")]\n        [DisplayName(\"Enable Emulation on ARM64\")]\n        [DefaultValue(false)]\n        public bool EnableEmulation { get; set; }\n#endif\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[managedPipelineMode] Configures ASP.NET to run in Classic Mode as an ISAPI extension, or in Integrated Mode where managed code is integrated into the request processing pipeline.\")]\n        [DisplayName(\"Managed Pipeline Mode\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        [DefaultValue(ManagedPipelineMode.Integrated)]\n        public ManagedPipelineMode Mode { get; set; }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[name] The application pool name is the unique identifier for the application pool.\")]\n        [DisplayName(\"Name\")]\n        [ReadOnly(true)]\n        public string Name { get; set; }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[queueLength] Maximum number of requests that HTTP.sys will queue for the application pool. When the queue is full, new requests receive a 503 \\\"Service Unavailable\\\" response.\")]\n        [DisplayName(\"Queue Length\")]\n        [DefaultValue((long)1000)]\n        public long QueueLength { get; set; }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[startMode] Configures application pool to run in On Demand Mode or Always Running Mode\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        [DisplayName(\"Start Mode\")]\n        [DefaultValue(StartMode.OnDemand)]\n        public StartMode Start { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[limit] Configures the maximum percentage of CPU time that the worker processes in an application pool are allowed to consume over a period of time as indicated by the CPU Limit Interval property. If the limit set by the CPU Limit property is exceeded, an event is written to the event log and an optional set of events can be triggered as determined by the CPU Limit Action property. Setting the value of this property to 0 disables limiting the worker processes to a percentage of CPU time.\")]\n        [DisplayName(\"Limit (percent)\")]\n        [DefaultValue((long)0)]\n        public long Limit { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[action] If set to \\\"NoAction\\\", an event log entry is generated. If set to \\\"KillW3WP\\\", the application pool is shut down for the duration of the reset interval and an event log entry is generated. If set to \\\"Throttle\\\", the CPU consumption is limited to the value set in Limit. Limit interval is not used and an event log entry is generated. If set to \\\"ThrottleUnderLoad\\\", the CPU consumption is limited only when there is contention on CPU. Limit Interval is not used and an event log entry is generated.\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        [DisplayName(\"Limit Action\")]\n        [DefaultValue(ProcessorAction.NoAction)]\n        public ProcessorAction Action { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[resetInterval] Specifies the reset period (in minutes) for CPU monitoring and throttling limits on the application pool. When the number of minutes elapsed since the last process accounting reset equals the number specified by this property, IIS will reset the CPU timers for both the logging and limit intervals. Setting the value of this property to 0 disables CPU monitoring.\")]\n        [DisplayName(\"Limit Interval (minutes)\")]\n        [DefaultValue(5)]\n        public int Interval { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[smpAffinitized] If true, the Processor Affinity Mask property forces the worker process(es) serving this application pool to run on specific CPUs. This enables efficient use of CPU caches on multiprocessor servers.\")]\n        [DisplayName(\"Processor Affinity Enabled\")]\n        [DefaultValue(false)]\n        public bool Affinitized { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[smpProcessorAffinityMask] Hexadecimal mask that forces the worker process(es) for this application pool to run on a specific CPU. If processor affinity is enabled, a value of 0 will cause an error condition.\")]\n        [DisplayName(\"Processor Affinity Mask\")]\n        [DefaultValue(4294967295)]\n        public long Mask { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[smpProcessorAffinityMask2] Specifies the high-order DWORD hexadecimal mask for 64-bit machine, that forces the worker process(es) for this application pool to run on a specific CPU.\\r\\n On 64-bit computer, the smpProcessorAffinityMask attribute contains the low-order DWORD for the processor mask, and the smpProcessorAffinityMask2 attribute contains the high-order DWORD for the processor mask.\")]\n        [DisplayName(\"Processor Affinity Mask (64-bit option)\")]\n        [DefaultValue(4294967295)]\n        public long Mask2 { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [DisplayName(\"Generate Process Model Event Log Entry\")]\n        public LogEntrySettings LogEntry { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[identityType, username, password] Configures the application pool to run as built-in account, i.e. Application Pool Identity (recommended), Network Service, Local System, Local Service, or as a specific user identity.\")]\n        [DisplayName(\"Identity\")]\n        [Editor(typeof(IdentityEditor), typeof(UITypeEditor))]\n        public ApplicationPoolProcessModel Identity { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[idleTimeout] Amount of time (in minutes) a worker process will remain idle before it shuts down. A worker process is idle if it is not processing requests and no new requests are received.\")]\n        [DisplayName(\"Idle Time-out (minutes)\")]\n        [DefaultValue(20)]\n        public int IdleTimeout { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[idleTimeoutAction] What action to perform when the Idle Time-out duration has been reached.\")]\n        [DisplayName(\"Idle Time-out Action\")]\n        [DefaultValue(IdleTimeoutAction.Terminate)]\n        public IdleTimeoutAction IdleAction { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[loadUserProfile] This setting specifies whether IIS loads the user profile for an application pool identity. When this value is true, IIS loads the user profile for the application poool identity. Set this value to false when you require the IIS 6.0 behavior of not loading the user profile for the application pool identity.\")]\n        [DisplayName(\"Load User Profile\")]\n        [DefaultValue(false)]\n        public bool LoadUserProfile { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[maxProcesses] Maximum number of worker processes permitted to service requests for the application pool. If this number is greater than 1, the application pool is a \\\"Web Garden\\\". On a NUMA aware system, if this number is 0, IIS will start as many worker processes as there are NUMA nodes for optimal performance.\")]\n        [DisplayName(\"Maximum Worker Processes\")]\n        [DefaultValue(1L)]\n        public long MaxProcesses { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[pingingEnabled] If true, the worker process(es) serving this application pool are pinged periodically to ensure that they are still responsive. This process is called health monitoring.\")]\n        [DisplayName(\"Ping Enabled\")]\n        [DefaultValue(true)]\n        public bool PingingEnabled { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[pingResponseTime] Maximum time (in seconds) that a worker process is given to respond to a health monitoring ping. If the worker process does not respond, it is terminated.\")]\n        [DisplayName(\"Ping Maximum Response Time (seconds)\")]\n        [DefaultValue(90)]\n        public long PingResponseTime { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[pingInterval] Period of time (in seconds) between health monitoring pings sent to the worker process(es) serving this application pool.\")]\n        [DisplayName(\"Ping Period (seconds)\")]\n        [DefaultValue(30)]\n        public long PingInterval { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[shutdownTimeLimit] Period of time (in seconds) a worker process is given to finish processing requests and shut down. If the worker process exceeds the shutdown time limit, it is terminated.\")]\n        [DisplayName(\"Shutdown Time Limit (seconds)\")]\n        [DefaultValue(90)]\n        public long ShutdownTimeLimit { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[startupTimeLimit] Period of time (in seconds) a worker process is given to start up and initialize. If the worker process initialization exceeds the startup time limit,  it is terminated.\")]\n        [DisplayName(\"Startup Time Limit (seconds)\")]\n        [DefaultValue(30)]\n        public long StartupTimeLimit { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Orphaning\")]\n        [Description(\"[orphanWorkerProcess] if true, an unresponsive worker process will be abandoned (orphaned) instead of terminated. This feature can be used to debug a worker process failure.\")]\n        [DisplayName(\"Enabled\")]\n        [DefaultValue(false)]\n        public bool OrphanWorkerProcess { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Orphaning\")]\n        [Description(\"[orphanActionExe] Executable to run when a worker process is abandoned (orphaned). For example, \\\"C:\\\\dbgtools\\\\ntsd.exe\\\" would invoke NTSD to debug a worker process failure.\")]\n        [DisplayName(\"Executable\")]\n        [DefaultValue(\"\")]\n        public string OrphanActionExe { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Orphaning\")]\n        [Description(\"[orphanActionParams] Parameters for the executable that is run when a worker process is abandoned (orphaned). For example, \\\"-g -p %1%\\\" is appropriate if NTSD is the executable invoked for debugging worker process failure.\")]\n        [DisplayName(\"Executable Parameters\")]\n        [DefaultValue(\"\")]\n        public string OrphanActionParams { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Rapid-Fail Protection\")]\n        [Description(\"[loadBalancerCapabilities] If set to HttpLevel and the application pool is stopped, HTTP.sys will return an HTTP 503 error. If set to TcpLevel, HTTP.sys will reset the connection. This is useful if a load balancer recognizes one of the response types and subsequently redirects it.\")]\n        [DisplayName(\"\\\"Service Unavailable\\\" Response Type\")]\n        [DefaultValue(typeof(LoadBalancerCapabilities), \"HttpLevel\")]\n        public LoadBalancerCapabilities LoadBalancerCapabilities { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Rapid-Fail Protection\")]\n        [Description(\"[rapidFailProtection] If true, the application pool is shut down if there are a specified number of worker process crashes (Maximum Failures) within a specified time period (Failure Interval). By default, an application pool is shut down if there are 5 crashes within a 5 minute interval.\")]\n        [DisplayName(\"Enabled\")]\n        [DefaultValue(true)]\n        public bool RapidFailProtection { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Rapid-Fail Protection\")]\n        [Description(\"[rapidFailProtectionInterval] The time interval (in minutes) during which the specified number of worker process crashes (Maximum Failures) must occur before the application pool is shut down by Rapid Fail Protection.\")]\n        [DisplayName(\"Failure Interval (minutes)\")]\n        [DefaultValue(5)]\n        public int RapidFailProtectionInterval { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Rapid-Fail Protection\")]\n        [Description(\"[rapidFailProtectionMaxCrashes] Maximum number of worker process crashes permitted before the application pool is shut down by Rapid Fail Protection.\")]\n        [DisplayName(\"Maximum Failures\")]\n        [DefaultValue(5L)]\n        public long RapidFailProtectionMaxCrashes { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Rapid-Fail Protection\")]\n        [Description(\"[autoShutdownExe] Executable to run when a worker process is shut down by Rapid Fail Protection. This could be used to configure a load balancer to redirect traffic for this application pool to another server.\")]\n        [DisplayName(\"Shutdown Executable\")]\n        [DefaultValue(\"\")]\n        public string AutoShutdownExe { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Rapid-Fail Protection\")]\n        [Description(\"[autoShutdownParams] Parameters for the executable that is run when a worker process is abandoned (orphaned). For example, \\\"-g -p %1%\\\" is appropriate if NTSD is the executable invoked for debugging worker process failure.\")]\n        [DisplayName(\"Shutdown Executable Parameters\")]\n        [DefaultValue(\"\")]\n        public string AutoShutdownParams { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Recycling\")]\n        [Description(\"[disallowOverlappingRotation] If true, the application pool recycle will happen such that the existing worker process exits before another worker process is created. Set to true if the worker process loads an application that does not support multiple instances.\")]\n        [DisplayName(\"Disable Overlapped Recycle\")]\n        [DefaultValue(false)]\n        public bool DisallowOverlappingRotation { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Recycling\")]\n        [Description(\"[disallowRotationOnConfigChange] If true, the application pool will not recycle when its configuration is changed.\")]\n        [DisplayName(\"Disable Recycling for Configuration Changes\")]\n        [DefaultValue(false)]\n        public bool DisallowRotationOnConfigChange { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Recycling\")]\n        [Description(\"[logEventOnRecycle] Generates an event log entry for each occurrence of the specified recycling events.\")]\n        [DisplayName(\"Generate Recycle Event Log Entry\")]\n        public GenerateRecycleEventLogEntry GenerateRecycleEventLogEntry { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Recycling\")]\n        [Description(\"[privateMemory] Maximum amount of private memory (in KB) a worker process can consume before causing the application pool to recycle. A value of 0 means there is no limit.\")]\n        [DisplayName(\"Private Memory Limit (KB)\")]\n        [DefaultValue(0)]\n        public long PrivateMemory { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Recycling\")]\n        [Description(\"[time] Period of time (in minutes) after which an application pool will recycle. A value of 0 means the application pool does not recycle on a regular interval.\")]\n        [DisplayName(\"Regular Time Interval (minutes)\")]\n        [DefaultValue(1740)]\n        public int Time { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Recycling\")]\n        [Description(\"[requests] Maximum number of requests an application pool can process before it is recycled. A value of 0 means the application pool can process an unlimited number of requests.\")]\n        [DisplayName(\"Request Limit\")]\n        [DefaultValue(0)]\n        public long Requests { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Recycling\")]\n        [Description(\"[schedule] A set of specific local times, in 24 hour format, when the application pool is recycled.\")]\n        [DisplayName(\"Specific Times\")]\n        [Editor(typeof(ScheduleCollectionEditor),\n            typeof(UITypeEditor))]\n        public ScheduleCollection Schedule { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Recycling\")]\n        [Description(\"[memory] Maximum amount of virtual memory (in KB) a worker process can consume before causing the application pool to recycle. A value of 0 means there is no limit.\")]\n        [DisplayName(\"Virtual Memory Limit (KB)\")]\n        [DefaultValue(0)]\n        public long Memory { get; set; }\n    }\n\n    [TypeConverter(typeof(ExpandableObjectConverter))]\n    public class GenerateRecycleEventLogEntry\n    {\n        [Browsable(true)]\n        [Description(\"[ConfigChange] If true, an event log entry is generated when an application pool recycles due to a change in its configuration.\")]\n        [DisplayName(\"Application Pool Configuration Changed\")]\n        [DefaultValue(false)]\n        public bool ConfigChange { get; set; }\n\n        [Browsable(true)]\n        [Description(\"[IsapiUnhealthy] If true, an event log entry is generated when an application pool recycles because an ISAPI extension has reported itself as unhealthy.\")]\n        [DisplayName(\"Isapi Reported Unhealthy\")]\n        [DefaultValue(false)]\n        public bool IsapiUnhealthy { get; set; }\n\n        [Browsable(true)]\n        [Description(\"[OnDemand] If true, an event log entry is generated when the application pool has been manually recycled.\")]\n        [DisplayName(\"Manual Recycle\")]\n        [DefaultValue(false)]\n        public bool OnDemand { get; set; }\n\n        [Browsable(true)]\n        [Description(\"[PrivateMemory] If true, an event log entry is generated when the application pool recycles after exceeding its private memory limit.\")]\n        [DisplayName(\"Private Memory Limit Exceeded\")]\n        [DefaultValue(true)]\n        public bool PrivateMemory { get; set; }\n\n        [Browsable(true)]\n        [Description(\"[Time] If true, an event log entry is generated when the application pool recycles on its scheduled interval.\")]\n        [DisplayName(\"Regular Time Interval\")]\n        [DefaultValue(true)]\n        public bool Time { get; set; }\n\n        [Browsable(true)]\n        [Description(\"[Requests] If true, an event log entry is generated when the application pool recycles after exceeding its request limit.\")]\n        [DisplayName(\"Request Limit Exceeded\")]\n        [DefaultValue(false)]\n        public bool Requests { get; set; }\n\n        [Browsable(true)]\n        [Description(\"[Schedule] If true, an event log entry is generated when the application pool recycles at a scheduled time.\")]\n        [DisplayName(\"Specific Time\")]\n        [DefaultValue(false)]\n        public bool Schedule { get; set; }\n\n        [Browsable(true)]\n        [Description(\"[Memory] If true, an event log entry is generated when the application pool recycles after exceeding its virtual memory limit.\")]\n        [DisplayName(\"Virtual Memory Limit Exceeded\")]\n        [DefaultValue(true)]\n        public bool Memory { get; set; }\n\n        public override string ToString()\n        {\n            return string.Empty;\n        }\n    }\n\n    [TypeConverter(typeof(ExpandableObjectConverter))]\n    public class LogEntrySettings\n    {\n        [Browsable(true)]\n        [Description(\"[IdleTimeout] If true, an event log entry is generated when the application pool is shutdown after exceeding its idle time-out limit.\")]\n        [DisplayName(\"Idle Time-out Reached\")]\n        [DefaultValue(true)]\n        public bool IdleTimeout { get; set; }\n\n        public override string ToString()\n        {\n            return string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolAdvancedSettingsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ApplicationPoolAdvancedSettingsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            propertyGrid1 = new PropertyGrid();\n            tableLayoutPanel1 = new TableLayoutPanel();\n            panel1 = new Panel();\n            btnCancel = new Button();\n            btnOK = new Button();\n            tableLayoutPanel1.SuspendLayout();\n            panel1.SuspendLayout();\n            SuspendLayout();\n            // \n            // propertyGrid1\n            // \n            propertyGrid1.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;\n            propertyGrid1.Dock = DockStyle.Fill;\n            propertyGrid1.Location = new System.Drawing.Point(5, 6);\n            propertyGrid1.Margin = new Padding(5, 6, 5, 6);\n            propertyGrid1.Name = \"propertyGrid1\";\n            propertyGrid1.Size = new System.Drawing.Size(793, 725);\n            propertyGrid1.TabIndex = 0;\n            propertyGrid1.ToolbarVisible = false;\n            // \n            // tableLayoutPanel1\n            // \n            tableLayoutPanel1.AutoSize = true;\n            tableLayoutPanel1.ColumnCount = 1;\n            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));\n            tableLayoutPanel1.Controls.Add(propertyGrid1, 0, 0);\n            tableLayoutPanel1.Controls.Add(panel1, 0, 1);\n            tableLayoutPanel1.Dock = DockStyle.Fill;\n            tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            tableLayoutPanel1.Margin = new Padding(5, 6, 5, 6);\n            tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            tableLayoutPanel1.RowCount = 2;\n            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));\n            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 87F));\n            tableLayoutPanel1.Size = new System.Drawing.Size(803, 824);\n            tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            panel1.Controls.Add(btnCancel);\n            panel1.Controls.Add(btnOK);\n            panel1.Dock = DockStyle.Fill;\n            panel1.Location = new System.Drawing.Point(5, 743);\n            panel1.Margin = new Padding(5, 6, 5, 6);\n            panel1.Name = \"panel1\";\n            panel1.Size = new System.Drawing.Size(793, 75);\n            panel1.TabIndex = 1;\n            // \n            // btnCancel\n            // \n            btnCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;\n            btnCancel.DialogResult = DialogResult.Cancel;\n            btnCancel.Location = new System.Drawing.Point(620, 13);\n            btnCancel.Margin = new Padding(5, 6, 5, 6);\n            btnCancel.Name = \"btnCancel\";\n            btnCancel.Size = new System.Drawing.Size(158, 44);\n            btnCancel.TabIndex = 1;\n            btnCancel.Text = \"Cancel\";\n            btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            btnOK.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;\n            btnOK.Location = new System.Drawing.Point(461, 13);\n            btnOK.Margin = new Padding(5, 6, 5, 6);\n            btnOK.Name = \"btnOK\";\n            btnOK.Size = new System.Drawing.Size(150, 44);\n            btnOK.TabIndex = 0;\n            btnOK.Text = \"OK\";\n            btnOK.UseVisualStyleBackColor = true;\n            // \n            // ApplicationPoolAdvancedSettingsDialog\n            // \n            AcceptButton = btnOK;\n            AutoScaleDimensions = new System.Drawing.SizeF(10F, 25F);\n            AutoScaleMode = AutoScaleMode.Font;\n            CancelButton = btnCancel;\n            ClientSize = new System.Drawing.Size(803, 824);\n            Controls.Add(tableLayoutPanel1);\n            FormBorderStyle = FormBorderStyle.Sizable;\n            Margin = new Padding(5, 6, 5, 6);\n            Name = \"ApplicationPoolAdvancedSettingsDialog\";\n            Text = \"Advanced Settings\";\n            HelpButtonClicked += ApplicationPoolAdvancedSettingsDialog_HelpButtonClicked;\n            tableLayoutPanel1.ResumeLayout(false);\n            panel1.ResumeLayout(false);\n            ResumeLayout(false);\n            PerformLayout();\n        }\n\n        #endregion\n\n        private PropertyGrid propertyGrid1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolAdvancedSettingsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    public partial class ApplicationPoolAdvancedSettingsDialog : DialogForm\n    {\n        public ApplicationPoolAdvancedSettingsDialog(IServiceProvider serviceProvider, ApplicationPool pool)\n           : base(serviceProvider)\n        {\n            InitializeComponent();\n            var settings = new ApplicationPoolAdvancedSettings(pool);\n            propertyGrid1.SelectedObject = settings;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    ((ApplicationPoolAdvancedSettings)propertyGrid1.SelectedObject).Apply(pool);\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        private void ApplicationPoolAdvancedSettingsDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210456\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolAdvancedSettingsDialog.resx",
    "content": "﻿<root>\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolBasicSettingsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ApplicationPoolBasicSettingsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbVersion = new System.Windows.Forms.ComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbMode = new System.Windows.Forms.ComboBox();\n            this.cbStart = new System.Windows.Forms.CheckBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(38, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(16, 29);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(256, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(13, 52);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(97, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \".NET CLR Version:\";\n            // \n            // cbVersion\n            // \n            this.cbVersion.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbVersion.FormattingEnabled = true;\n            this.cbVersion.Items.AddRange(new object[] {\n            \".NET CLR Version v4.0.30319\",\n            \".NET CLR Version v2.0.50727\",\n            \"No Managed Code\"});\n            this.cbVersion.Location = new System.Drawing.Point(16, 68);\n            this.cbVersion.Name = \"cbVersion\";\n            this.cbVersion.Size = new System.Drawing.Size(256, 21);\n            this.cbVersion.TabIndex = 3;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(13, 92);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(123, 13);\n            this.label3.TabIndex = 4;\n            this.label3.Text = \"Managed pipeline mode:\";\n            // \n            // cbMode\n            // \n            this.cbMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbMode.FormattingEnabled = true;\n            this.cbMode.Items.AddRange(new object[] {\n            \"Integrated\",\n            \"Classic\"});\n            this.cbMode.Location = new System.Drawing.Point(16, 108);\n            this.cbMode.Name = \"cbMode\";\n            this.cbMode.Size = new System.Drawing.Size(168, 21);\n            this.cbMode.TabIndex = 5;\n            // \n            // cbStart\n            // \n            this.cbStart.AutoSize = true;\n            this.cbStart.Checked = true;\n            this.cbStart.CheckState = System.Windows.Forms.CheckState.Checked;\n            this.cbStart.Location = new System.Drawing.Point(16, 135);\n            this.cbStart.Name = \"cbStart\";\n            this.cbStart.Size = new System.Drawing.Size(182, 17);\n            this.cbStart.TabIndex = 6;\n            this.cbStart.Text = \"Start application pool immediately\";\n            this.cbStart.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(81, 191);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 7;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(177, 191);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 8;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // ApplicationPoolBasicSettingsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(284, 226);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.cbStart);\n            this.Controls.Add(this.cbMode);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.cbVersion);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Name = \"ApplicationPoolBasicSettingsDialog\";\n            this.Text = \"Edit Application Pool\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.ApplicationPoolBasicSettingsDialog_HelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private Label label2;\n        private ComboBox cbVersion;\n        private Label label3;\n        private ComboBox cbMode;\n        private CheckBox cbStart;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolBasicSettingsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Linq;\n\n    public sealed partial class ApplicationPoolBasicSettingsDialog : DialogForm\n    {\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ApplicationPool Pool { get; private set; }\n\n        public ApplicationPoolBasicSettingsDialog(IServiceProvider serviceProvider, ApplicationPool pool, ApplicationPoolDefaults defaults, ApplicationPoolCollection collection)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Pool = pool;\n            var add = pool == null;\n            if (pool == null)\n            {\n                Text = \"Add Application Pool\";\n                cbStart.Checked = defaults.AutoStart;\n                cbMode.SelectedIndex = (int)defaults.ManagedPipelineMode;\n                SetRuntimeVersion(defaults.ManagedRuntimeVersion);\n            }\n            else\n            {\n                Text = \"Edit Application Pool\";\n                txtName.Text = pool.Name;\n                txtName.Enabled = false;\n                cbStart.Checked = pool.AutoStart;\n                cbMode.SelectedIndex = (int)pool.ManagedPipelineMode;\n                SetRuntimeVersion(Pool.ManagedRuntimeVersion);\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (Pool == null)\n                    {\n                        if (collection.Any(item => item.Name == txtName.Text))\n                        {\n                            ShowMessage(\"An application pool with this name already exists.\", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                            txtName.Focus();\n                            txtName.SelectAll();\n                            return;\n                        }\n\n                        foreach (var ch in ApplicationPoolCollection.InvalidApplicationPoolNameCharacters())\n                        {\n                            if (txtName.Text.Contains(ch))\n                            {\n                                ShowMessage($\"The application pool name cannot contain the following characters: {ApplicationPoolCollection.InvalidApplicationPoolNameCharacters().Combine(\", \")}.\", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                                txtName.Focus();\n                                txtName.SelectAll();\n                                return;\n                            }\n                        }\n\n                        Pool = collection.Add(txtName.Text);\n                    }\n                    else\n                    {\n                        Pool.Name = txtName.Text;\n                    }\n\n                    if (cbVersion.SelectedIndex == 0)\n                    {\n                        Pool.ManagedRuntimeVersion = ApplicationPool.ManagedRuntimeVersion40;\n                    }\n                    else if (cbVersion.SelectedIndex == 1)\n                    {\n                        Pool.ManagedRuntimeVersion = ApplicationPool.ManagedRuntimeVersion20;\n                    }\n                    else\n                    {\n                        Pool.ManagedRuntimeVersion = ApplicationPool.ManagedRuntimeVersionNone;\n                    }\n\n                    if (add && collection.Parent.Mode == WorkingMode.IisExpress)\n                    {\n                        Pool[\"CLRConfigFile\"] = @\"%IIS_USER_HOME%\\config\\aspnet.config\";\n                    }\n\n                    Pool.AutoStart = cbStart.Checked;\n                    Pool.ManagedPipelineMode = (ManagedPipelineMode)cbMode.SelectedIndex;\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        private void SetRuntimeVersion(string managedRuntimeVersion)\n        {\n            if (managedRuntimeVersion == \"v4.0\")\n            {\n                cbVersion.SelectedIndex = 0;\n            }\n            else if (managedRuntimeVersion == \"v2.0\")\n            {\n                cbVersion.SelectedIndex = 1;\n            }\n            else\n            {\n                cbVersion.SelectedIndex = 2;\n            }\n        }\n\n        private void ApplicationPoolBasicSettingsDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210456\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolBasicSettingsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolDefaultsSettings.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.ComponentModel;\n\n    using Microsoft.Web.Administration;\n\n    internal class ApplicationPoolDefaultsSettings\n    {\n        public ApplicationPoolDefaultsSettings(ApplicationPoolDefaults pool)\n        {\n            if (pool.ManagedRuntimeVersion == \"v4.0\")\n            {\n                CLRVersion = CLRVersion.V40;\n            }\n            else if (pool.ManagedRuntimeVersion == \"v2.0\")\n            {\n                CLRVersion = CLRVersion.V20;\n            }\n            else\n            {\n                CLRVersion = CLRVersion.NoManagedCode;\n            }\n\n            Enable32Bit = pool.Enable32BitAppOnWin64;\n            Mode = pool.ManagedPipelineMode;\n            QueueLength = pool.QueueLength;\n            Start = pool.StartMode;\n\n            Limit = pool.Cpu.Limit;\n            Action = pool.Cpu.Action;\n            Interval = pool.Cpu.ResetInterval.GetTotalMinutes();\n            Affinitized = pool.Cpu.SmpAffinitized;\n            Mask = pool.Cpu.SmpProcessorAffinityMask;\n            Mask2 = pool.Cpu.SmpProcessorAffinityMask2;\n\n            MaxProcesses = pool.ProcessModel.MaxProcesses;\n            UserName = pool.ProcessModel.UserName;\n        }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[managedRuntimeVersion] Configures the application pool to load a specific .NET CLR Version. The CLR version chosen should correspond to the appropriate version of the .NET Framework being used by your application. Select \\\"No Managed Code\\\" will cause all ASP.NET requests to fail.\")]\n        [DisplayName(\".NET CLR Version\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        [DefaultValue(CLRVersion.V20)]\n        // ReSharper disable once InconsistentNaming\n        public CLRVersion CLRVersion { get; set; }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[enable32BitAppOnWin64] If set to true for an application pool on 64-bit operating system, the worker process(es) serving the application pool will be in WOW64 (Windows on Windows64) mode. Processes in WOW64 mode are 32-bit processes that load only 32-bit applications.\")]\n        [DisplayName(\"Enable 32-Bit Applications\")]\n        [DefaultValue(false)]\n        public bool Enable32Bit { get; set; }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[managedPipelineMode] Configures ASP.NET to run in Classic Mode as an ISAPI extension, or in Integrated Mode where managed code is integrated into the request processing pipeline.\")]\n        [DisplayName(\"Managed Pipeline Mode\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        [DefaultValue(ManagedPipelineMode.Integrated)]\n        public ManagedPipelineMode Mode { get; set; }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[queueLength] Maximum number of requests that HTTP.sys will queue for the application pool. When the queue is full, new requests receive a 503 \\\"Service Unavailable\\\" response.\")]\n        [DisplayName(\"Queue Length\")]\n        [DefaultValue((long)1000)]\n        public long QueueLength { get; set; }\n\n        [Browsable(true)]\n        [Category(\"(General)\")]\n        [Description(\"[startMode] Configures application pool to run in On Demand Mode or Always Running Mode\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        [DisplayName(\"Start Mode\")]\n        public StartMode Start { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[limit] Configures the maximum percentage of CPU time that the worker processes in an application pool are allowed to consume over a period of time as indicated by the CPU Limit Interval property. If the limit set by the CPU Limit property is exceeded, an event is written to the event log and an optional set of events can be triggered as determined by the CPU Limit Action property. Setting the value of this property to 0 disables limiting the worker processes to a percentage of CPU time.\")]\n        [DisplayName(\"Limit (percent)\")]\n        [DefaultValue((long)0)]\n        public long Limit { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[action] If set to \\\"NoAction\\\", an event log entry is generated. If set to \\\"KillW3WP\\\", the application pool is shut down for the duration of the reset interval and an event log entry is generated. If set to \\\"Throttle\\\", the CPU consumption is limited to the value set in Limit. Limit interval is not used and an event log entry is generated. If set to \\\"ThrottleUnderLoad\\\", the CPU consumption is limited only when there is contention on CPU. Limit Interval is not used and an event log entry is generated.\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        [DisplayName(\"Limit Action\")]\n        [DefaultValue(ProcessorAction.NoAction)]\n        public ProcessorAction Action { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[resetInterval] Specifies the reset period (in minutes) for CPU monitoring and throttling limits on the application pool. When the number of minutes elapsed since the last process accounting reset equals the number specified by this property, IIS will reset the CPU timers for both the logging and limit intervals. Setting the value of this property to 0 disables CPU monitoring.\")]\n        [DisplayName(\"Limit Interval (minutes)\")]\n        [DefaultValue(5)]\n        public int Interval { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[smpAffinitized] If true, the Processor Affinity Mask property forces the worker process(es) serving this application pool to run on specific CPUs. This enables efficient use of CPU caches on multiprocessor servers.\")]\n        [DisplayName(\"Processor Affinity Enabled\")]\n        [DefaultValue(false)]\n        public bool Affinitized { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[smpProcessorAffinityMask] Hexadecimal mask that forces the worker process(es) for this application pool to run on a specific CPU. If processor affinity is enabled, a value of 0 will cause an error condition.\")]\n        [DisplayName(\"Processor Affinity Mask\")]\n        [DefaultValue(4294967295)]\n        public long Mask { get; set; }\n\n        [Browsable(true)]\n        [Category(\"CPU\")]\n        [Description(\"[smpProcessorAffinityMask2] Specifies the high-order DWORD hexadecimal mask for 64-bit machine, that forces the worker process(es) for this application pool to run on a specific CPU.\\r\\n On 64-bit computer, the smpProcessorAffinityMask attribute contains the low-order DWORD for the processor mask, and the smpProcessorAffinityMask2 attribute contains the high-order DWORD for the processor mask.\")]\n        [DisplayName(\"Processor Affinity Mask (64-bit option)\")]\n        [DefaultValue(4294967295)]\n        public long Mask2 { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[maxProcesses] Maximum number of worker processes permitted to service requests for the application pool. If this number is greater than 1, the application pool is a \\\"Web Garden\\\". On a NUMA aware system, if this number is 0, IIS will start as many worker processes as there are NUMA nodes for optimal performance.\")]\n        [DisplayName(\"Maximum Worker Processes\")]\n        [DefaultValue((long)1)]\n        public long MaxProcesses { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"[identityType, username, password] Configures the application pool to run as built-in account, i.e. Application Pool Identity (recommended), Network Service, Local System, Local Service, or as a specific user identity.\")]\n        [DisplayName(\"Identity\")]\n        public string UserName { get; set; }\n\n        internal void Apply(ApplicationPoolDefaults pool)\n        {\n            if (CLRVersion == CLRVersion.V40)\n            {\n                pool.ManagedRuntimeVersion = \"v4.0\";\n            }\n            else if (CLRVersion == CLRVersion.V20)\n            {\n                pool.ManagedRuntimeVersion = \"v2.0\";\n            }\n            else if (CLRVersion == CLRVersion.NoManagedCode)\n            {\n                pool.ManagedRuntimeVersion = string.Empty;\n            }\n\n            pool.Enable32BitAppOnWin64 = Enable32Bit;\n            pool.ManagedPipelineMode = Mode;\n            pool.QueueLength = QueueLength;\n            pool.StartMode = Start;\n\n            pool.ProcessModel.MaxProcesses = MaxProcesses;\n            pool.ProcessModel.UserName = UserName;\n\n\n            pool.Cpu.Limit = Limit;\n            pool.Cpu.Action = Action;\n            pool.Cpu.ResetInterval = new TimeSpan(0, Interval, 0);\n            pool.Cpu.SmpAffinitized = Affinitized;\n            pool.Cpu.SmpProcessorAffinityMask = Mask;\n            pool.Cpu.SmpProcessorAffinityMask2 = Mask2;\n\n            MaxProcesses = pool.ProcessModel.MaxProcesses;\n            UserName = pool.ProcessModel.UserName;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolDefaultsSettingsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ApplicationPoolDefaultsSettingsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.propertyGrid1 = new System.Windows.Forms.PropertyGrid();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // propertyGrid1\n            // \n            this.propertyGrid1.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;\n            this.propertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.propertyGrid1.Location = new System.Drawing.Point(3, 3);\n            this.propertyGrid1.Name = \"propertyGrid1\";\n            this.propertyGrid1.Size = new System.Drawing.Size(477, 378);\n            this.propertyGrid1.TabIndex = 0;\n            this.propertyGrid1.ToolbarVisible = false;\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.AutoSize = true;\n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Controls.Add(this.propertyGrid1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(483, 429);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.Controls.Add(this.btnCancel);\n            this.panel1.Controls.Add(this.btnOK);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(3, 387);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(477, 39);\n            this.panel1.TabIndex = 1;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(373, 7);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 1;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(277, 7);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 0;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // ApplicationPoolDefaultsSettingsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(483, 429);\n            this.Controls.Add(this.tableLayoutPanel1);\n            this.HelpButton = true;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"ApplicationPoolDefaultsSettingsDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Application Pool Defaults\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.ApplicationPoolAdvancedSettingsDialog_HelpButtonClicked);\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.panel1.ResumeLayout(false);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private PropertyGrid propertyGrid1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolDefaultsSettingsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    public partial class ApplicationPoolDefaultsSettingsDialog : DialogForm\n    {\n        public ApplicationPoolDefaultsSettingsDialog(IServiceProvider serviceProvider, ApplicationPoolDefaults defaults)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            var settings = new ApplicationPoolDefaultsSettings(defaults);\n            propertyGrid1.SelectedObject = settings;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    ((ApplicationPoolDefaultsSettings)propertyGrid1.SelectedObject).Apply(defaults);\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        private void ApplicationPoolAdvancedSettingsDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210456\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolDefaultsSettingsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolsFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n    using System.Collections.Generic;\n\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n    using Application = Microsoft.Web.Administration.Application;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class ApplicationPoolsFeature : FeatureBase<ApplicationPool>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly ApplicationPoolsFeature _owner;\n\n            public FeatureTaskList(ApplicationPoolsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(\n                    new MethodTaskItem(\"Add\", \"Add Application Pool...\", string.Empty, string.Empty, Resources.application_pool_new_16)\n                        .SetUsage());\n                result.Add(new MethodTaskItem(\"Set\", \"Set Application Pool Defaults...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new TextTaskItem(\"Application Pool Tasks\", string.Empty, true));\n                    result.Add(\n                        new MethodTaskItem(\"Start\", \"Start\", string.Empty, string.Empty, Resources.start_16).SetUsage(\n                            !_owner.IsBusy && _owner.SelectedItem.State != ObjectState.Started));\n                    result.Add(\n                        new MethodTaskItem(\"Stop\", \"Stop\", string.Empty, string.Empty, Resources.stop_16).SetUsage(\n                            !_owner.IsBusy && _owner.SelectedItem.State == ObjectState.Started));\n                    result.Add(\n                        new MethodTaskItem(\"Recycle\", \"Recycle...\", string.Empty, string.Empty, Resources.restart_16)\n                            .SetUsage(!_owner.IsBusy && _owner.SelectedItem.State == ObjectState.Started));\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new TextTaskItem(\"Edit Application Pool\", string.Empty, true));\n                    result.Add(\n                        new MethodTaskItem(\"Basic\", \"Basic Settings...\", string.Empty, string.Empty,\n                            Resources.basic_settings_16).SetUsage());\n                    result.Add(new MethodTaskItem(\"Recycling\", \"Recycling...\", string.Empty).SetUsage());\n                    result.Add(new MethodTaskItem(\"Advanced\", \"Advanced Settings\", string.Empty).SetUsage());\n                    result.Add(new MethodTaskItem(\"Rename\", \"Rename\", string.Empty).SetUsage());\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(\n                        new MethodTaskItem(\"Applications\", \"View Applications\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.Rename();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Basic()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Applications()\n            {\n                _owner.Applications();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Recycle()\n            {\n                _owner.Recycle();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Start()\n            {\n                _owner.Start();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Stop()\n            {\n                _owner.Stop();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Recycling()\n            {\n                _owner.Recycling();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Advanced()\n            {\n                _owner.Advanced();\n            }\n        }\n\n        public ApplicationPoolsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n        private ServerManager _serverManager;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            Items = service.Server.ApplicationPools.ToList();\n            _serverManager = service.Server;\n            OnApplicationPoolsSettingsSaved();\n        }\n\n        protected void OnApplicationPoolsSettingsSaved()\n        {\n            ApplicationPoolsSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210456\");\n            return false;\n        }\n\n        private void Add()\n        {\n            using (var dialog = new ApplicationPoolBasicSettingsDialog(Module, null, _serverManager.ApplicationPoolDefaults, _serverManager.ApplicationPools))\n            {\n                if (dialog.ShowDialog() == DialogResult.OK)\n                {\n                    _serverManager.CommitChanges();\n                }\n\n                SelectedItem = dialog.Pool;\n                Items = _serverManager.ApplicationPools.ToList();\n            }\n            OnApplicationPoolsSettingsSaved();\n        }\n\n        private void Set()\n        {\n            using var dialog = new ApplicationPoolDefaultsSettingsDialog(Module, _serverManager.ApplicationPoolDefaults);\n            if (dialog.ShowDialog() == DialogResult.OK)\n            {\n                _serverManager.CommitChanges();\n            }\n        }\n\n        private void Recycling()\n        { }\n\n        internal void Remove()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result = service.ShowMessage(\"Are you sure that you want to remove the selected application pool?\", \"Confirm Remove\",\n                MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            var index = _serverManager.ApplicationPools.IndexOf(SelectedItem);\n            _serverManager.ApplicationPools.RemoveAt(index);\n            if (_serverManager.ApplicationPools.Count == 0)\n            {\n                SelectedItem = null;\n            }\n            else\n            {\n                SelectedItem = index > _serverManager.ApplicationPools.Count - 1 ? _serverManager.ApplicationPools[_serverManager.ApplicationPools.Count - 1] : _serverManager.ApplicationPools[index];\n            }\n\n            _serverManager.CommitChanges();\n            Items = _serverManager.ApplicationPools.ToList();\n            OnApplicationPoolsSettingsSaved();\n        }\n\n        private void Rename()\n        {\n            RenameInline(SelectedItem);\n        }\n\n        private void Advanced()\n        {\n            using var dialog = new ApplicationPoolAdvancedSettingsDialog(Module, SelectedItem);\n            if (dialog.ShowDialog() == DialogResult.OK)\n            {\n                _serverManager.CommitChanges();\n            }\n        }\n\n        private void Stop()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            IsBusy = true;\n            OnApplicationPoolsSettingsSaved();\n            SelectedItem.Stop();\n            IsBusy = false;\n            OnApplicationPoolsSettingsSaved();\n        }\n\n        private void Start()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            IsBusy = true;\n            OnApplicationPoolsSettingsSaved();\n            SelectedItem.Start();\n            IsBusy = false;\n            OnApplicationPoolsSettingsSaved();\n        }\n\n        private void Recycle()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            IsBusy = true;\n            OnApplicationPoolsSettingsSaved();\n            SelectedItem.Recycle();\n            IsBusy = false;\n            OnApplicationPoolsSettingsSaved();\n        }\n\n        private void Applications()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var mainForm = service.Form;\n\n            // Find all applications using this pool\n            var applications = new List<Application>();\n            foreach (Site container in _serverManager.Sites)\n            {\n                foreach (Application app in container.Applications)\n                {\n                    if (app.ApplicationPoolName == SelectedItem.Name)\n                    {\n                        applications.Add(app);\n                    }\n                }\n            }\n\n            if (applications.Count == 0)\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                dialog.ShowMessage(\"No applications are using this application pool.\", \"Applications\",\n                    MessageBoxButtons.OK, MessageBoxIcon.Information);\n                return;\n            }\n\n            var page = new ApplicationsPage();\n            ((IModulePage)page).Initialize(Module, null, new Tuple<List<Application>, Site>(applications, null));\n\n            mainForm.LoadPageAndSelectNode(page, service.Server);\n        }\n\n        internal void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(ApplicationPool item)\n        {\n            using (var dialog = new ApplicationPoolBasicSettingsDialog(Module, item, null, _serverManager.ApplicationPools))\n            {\n                if (dialog.ShowDialog() == DialogResult.OK)\n                {\n                    _serverManager.CommitChanges();\n                }\n            }\n\n            OnApplicationPoolsSettingsSaved();\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox groupBox)\n        {\n            groupBox.Items.AddRange([\"No Grouping\", \"Status\", \".NET CLR Version\", \"Managed Pipeline Mode\", \"Identity\"]);\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            // Determine the group key based on the selected grouping option\n            switch (selectedGroup)\n            {\n                case \"Status\":\n                    return item.SubItems[1].Text;\n                case \".NET CLR Version\":\n                    return item.SubItems[2].Text;\n                case \"Managed Pipeline Mode\":\n                    return item.SubItems[3].Text;\n                case \"Identity\":\n                    return item.SubItems[4].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            return null;\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnApplicationPoolsSettingsSaved();\n        }\n\n        public bool IsBusy { get; set; }\n\n        public ApplicationPoolsSettingsSavedEventHandler ApplicationPoolsSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolsPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ApplicationPoolsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] {\n            \"DefaultAppPool\",\n            \"Started\",\n            \"v4.0\",\n            \"Integrated\",\n            \"root\",\n            \"0\"}, -1);\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chClr = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chMode = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chIdentity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chApplications = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.txtTitle = new System.Windows.Forms.Label();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbFilter = new System.Windows.Forms.ToolStripComboBox();\n            this.btnGo = new System.Windows.Forms.ToolStripSplitButton();\n            this.protocolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.btnShowAll = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripLabel4 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // imageList1\n            // \n            this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;\n            this.imageList1.ImageSize = new System.Drawing.Size(16, 16);\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chStatus,\n            this.chClr,\n            this.chMode,\n            this.chIdentity,\n            this.chApplications});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {\n            listViewItem1});\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.SmallImageList = this.imageList1;\n            this.listView1.TabIndex = 1;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1_SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 120;\n            // \n            // chStatus\n            // \n            this.chStatus.Text = \"Status\";\n            // \n            // chClr\n            // \n            this.chClr.Text = \".NET CLR Version\";\n            this.chClr.Width = 160;\n            // \n            // chMode\n            // \n            this.chMode.Text = \"Managed Pipeline Mode\";\n            this.chMode.Width = 165;\n            // \n            // chIdentity\n            // \n            this.chIdentity.Text = \"Identity\";\n            this.chIdentity.Width = 120;\n            // \n            // chApplications\n            // \n            this.chApplications.Text = \"Applications\";\n            this.chApplications.Width = 105;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"contextMenuStrip1\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.txtTitle);\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 2;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // txtTitle\n            // \n            this.txtTitle.AutoSize = true;\n            this.txtTitle.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.txtTitle.Location = new System.Drawing.Point(48, 10);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(155, 24);\n            this.txtTitle.TabIndex = 7;\n            this.txtTitle.Text = \"Application Pools\";\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 8;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel3,\n            this.cbFilter,\n            this.btnGo,\n            this.btnShowAll,\n            this.toolStripSeparator6,\n            this.toolStripLabel4,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(36, 22);\n            this.toolStripLabel3.Text = \"Filter:\";\n            // \n            // cbFilter\n            // \n            this.cbFilter.Name = \"cbFilter\";\n            this.cbFilter.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnGo\n            // \n            this.btnGo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.protocolToolStripMenuItem});\n            this.btnGo.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGo.Name = \"btnGo\";\n            this.btnGo.Size = new System.Drawing.Size(54, 22);\n            this.btnGo.Text = \"Go\";\n            this.btnGo.ToolTipText = \"Go\";\n            // \n            // protocolToolStripMenuItem\n            // \n            this.protocolToolStripMenuItem.Name = \"protocolToolStripMenuItem\";\n            this.protocolToolStripMenuItem.Size = new System.Drawing.Size(88, 22);\n            this.protocolToolStripMenuItem.Text = \"All\";\n            // \n            // btnShowAll\n            // \n            this.btnShowAll.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnShowAll.Name = \"btnShowAll\";\n            this.btnShowAll.Size = new System.Drawing.Size(73, 22);\n            this.btnShowAll.Text = \"Show All\";\n            // \n            // toolStripSeparator6\n            // \n            this.toolStripSeparator6.Name = \"toolStripSeparator6\";\n            this.toolStripSeparator6.Size = new System.Drawing.Size(6, 25);\n            // \n            // toolStripLabel4\n            // \n            this.toolStripLabel4.Name = \"toolStripLabel4\";\n            this.toolStripLabel4.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel4.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 6;\n            this.pictureBox1.TabStop = false;\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 3;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(0, 0);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // ApplicationPoolsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ApplicationPoolsPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private ImageList imageList1;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chStatus;\n        private ColumnHeader chClr;\n        private ColumnHeader chMode;\n        private ColumnHeader chIdentity;\n        private ColumnHeader chApplications;\n        private ContextMenuStrip cmsActionPanel;\n        private SplitContainer splitContainer1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Label txtTitle;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbFilter;\n        private ToolStripSplitButton btnGo;\n        private ToolStripMenuItem protocolToolStripMenuItem;\n        private ToolStripButton btnShowAll;\n        private ToolStripSeparator toolStripSeparator6;\n        private ToolStripLabel toolStripLabel4;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolsPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class ApplicationPoolsPage : ModuleListPage\n    {\n        private sealed class PageTaskList : TaskList\n        {\n            private readonly ApplicationPoolsPage _owner;\n\n            public PageTaskList(ApplicationPoolsPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage()\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class ApplicationPoolsListViewItem : ListViewItem, IFeatureListViewItem<ApplicationPool>\n        {\n            public ApplicationPool Item { get; }\n            private readonly ApplicationPoolsPage _page;\n\n            public ApplicationPoolsListViewItem(ApplicationPool item, ApplicationPoolsPage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, CommonHelper.ToString(Item.State)));\n                SubItems.Add(new ListViewSubItem(this, Item.ManagedRuntimeVersion.RuntimeVersionToDisplay2()));\n                SubItems.Add(new ListViewSubItem(this, CommonHelper.ToString(Item.ManagedPipelineMode)));\n                SubItems.Add(new ListViewSubItem(this, Item.ProcessModel.UserName));\n                SubItems.Add(new ListViewSubItem(this, item.ApplicationCount.ToString()));\n                ImageIndex = item.State == ObjectState.Started ? 0 : 1;\n            }\n        }\n\n        private ApplicationPoolsFeature _feature;\n        private TaskList _taskList;\n\n        public ApplicationPoolsPage()\n        {\n            InitializeComponent();\n            btnGo.Image = DefaultTaskList.GoImage;\n            btnShowAll.Image = DefaultTaskList.ShowAllImage;\n\n            imageList1.Images.Add(Resources.application_pools_16);\n            imageList1.Images.Add(Resources.application_pools_stopped_16);\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new ApplicationPoolsFeature(Module);\n            _feature.ApplicationPoolsSettingsUpdated = InitializeListPage;\n            _feature.Load();\n\n            _feature.InitializeMouseClick(listView1, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n            },\n            text =>\n            {\n                var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                if (_feature.FindDuplicate(item => item.Name, text))\n                {\n                    service.ShowMessage(\"An application pool with this name already exists\",\n                        Text,\n                        MessageBoxButtons.OK,\n                        MessageBoxIcon.Exclamation);\n                    return false;\n                }\n\n                var forbidden = ApplicationPoolCollection.InvalidApplicationPoolNameCharacters();\n                foreach (var ch in forbidden)\n                {\n                    if (text.Contains(ch))\n                    {\n                        service.ShowMessage(\n                            $\"The application pool name cannot contain the following characters: '{string.Join(\", \", forbidden)}'.\",\n                            Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                        return false;\n                    }\n                }\n\n                return true;\n            });\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (ApplicationPool file in _feature.Items)\n            {\n                listView1.Items.Add(new ApplicationPoolsListViewItem(file, this));\n            }\n\n            _feature.InitializeGrouping(cbGroup);\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem != null)\n            {\n                foreach (ApplicationPoolsListViewItem item in listView1.Items)\n                {\n                    if (item.Item.Name == _feature.SelectedItem.Name)\n                    {\n                        item.Selected = true;\n                    }\n                }\n            }\n\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolsPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>127, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>391, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>265, 17</value>\n  </metadata>\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>74</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationPoolsSettingsSavedEventHandler.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Main\n{\n    public delegate void ApplicationPoolsSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationsFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Dialogs;\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Application = Microsoft.Web.Administration.Application;\n    using Binding = Microsoft.Web.Administration.Binding;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Feature for managing applications within a site.\n    /// </summary>\n    internal class ApplicationsFeature : FeatureBase<Application>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly ApplicationsFeature _owner;\n\n            public FeatureTaskList(ApplicationsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (_owner._site == null)\n                {\n                    if (_owner.SelectedItem != null)\n                    {\n                        result.Add(new MethodTaskItem(\"Change\", \"Change Application Pool...\", string.Empty).SetUsage());\n                    }\n                }\n                else\n                {\n                    result.Add(new MethodTaskItem(\"Add\", \"Add Application...\", string.Empty, string.Empty, Resources.application_new_16)\n                            .SetUsage());\n                    result.Add(new MethodTaskItem(\"Set\", \"Set Application Defaults...\", string.Empty).SetUsage());\n\n                    if (_owner.SelectedItem != null)\n                    {\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n\n                        result.Add(new TextTaskItem(\"Manage Application\", string.Empty, true));\n                        result.Add(\n                            new MethodTaskItem(\"Explore\", \"Explore\", string.Empty, string.Empty, Resources.explore_16)\n                                .SetUsage());\n                        result.Add(new MethodTaskItem(\"Permissions\", \"Edit Permissions...\", string.Empty).SetUsage());\n                        result.Add(RemoveTaskItem);\n\n                        var canBrowse = _owner.SelectedItem.Site.Bindings.Any(binding => binding.CanBrowse);\n                        if (canBrowse)\n                        {\n                            result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n\n                            result.Add(new TextTaskItem(\"Browse Application\", string.Empty, true));\n                            foreach (Binding binding in _owner.SelectedItem.Site.Bindings)\n                            {\n                                if (binding.CanBrowse)\n                                {\n                                    var uri = binding.ToUri();\n                                    result.Add(\n                                        new MethodTaskItem(\"Browse\", $\"Browse {uri}\", string.Empty, string.Empty,\n                                            Resources.browse_16, uri).SetUsage());\n                                }\n                            }\n                        }\n\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        result.Add(new TextTaskItem(\"Edit Application\", string.Empty, true));\n                        result.Add(\n                            new MethodTaskItem(\"Basic\", \"Basic Settings...\", string.Empty, string.Empty,\n                                Resources.basic_settings_16).SetUsage());\n                        result.Add(\n                            new MethodTaskItem(\"Advanced\", \"Advanced Settings...\", string.Empty).SetUsage());\n\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        result.Add(new MethodTaskItem(\"VirtualDirectories\", \"View Virtual Directories\", string.Empty).SetUsage());\n                    }\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Basic()\n            {\n                _owner.Basic();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Advanced()\n            {\n                _owner.Advanced();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Explore()\n            {\n                _owner.Explore();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Permissions()\n            {\n                _owner.Permissions();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Browse(object uri)\n            {\n                _owner.Browse(uri);\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void VirtualDirectories()\n            {\n                _owner.VirtualDirectories();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Change()\n            {\n                _owner.Change();\n            }\n        }\n\n        public ApplicationsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n        private Site _site;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load(List<Application> applications, Site site)\n        {\n            _site = site;\n            // Filter out the root application if needed\n            Items = site == null ? applications : site.Applications.Where(app => app.Path != \"/\").ToList();\n            OnApplicationsSettingsSaved();\n        }\n\n        protected void OnApplicationsSettingsSaved()\n        {\n            ApplicationsSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"https://go.microsoft.com/fwlink/?LinkId=210458\");\n            return false;\n        }\n\n        private void Change()\n        {\n            using var dialog = new NewApplicationDialog(Module, SelectedItem.Site, SelectedItem.Path, SelectedItem.ApplicationPoolName, SelectedItem);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            SelectedItem.Apply();\n            SelectedItem.Site.Server.CommitChanges();\n            OnApplicationsSettingsSaved();\n        }\n\n        private void Add()\n        {\n            using (var dialog = new NewApplicationDialog(Module, _site, string.Empty, string.Empty, null))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                Items.Add(dialog.Application);\n                SelectedItem = dialog.Application;\n                _site.Server.CommitChanges();\n                Items = _site.Applications.Where(app => app.Path != \"/\").ToList();\n            }\n\n            OnApplicationsSettingsSaved();\n        }\n\n        internal void Remove()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result = service.ShowMessage(\"Are you sure that you want to remove the selected application?\",\n                \"Confirm Remove\",\n                MessageBoxButtons.YesNoCancel,\n                MessageBoxIcon.Question);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            var index = _site.Applications.IndexOf(SelectedItem);\n            _site.Applications.Remove(SelectedItem);\n\n            if (_site.Applications.Count <= 1) // Count is 1 means only root application\n            {\n                SelectedItem = null;\n            }\n            else\n            {\n                SelectedItem = index > _site.Applications.Count - 1\n                    ? _site.Applications[_site.Applications.Count - 1]\n                    : _site.Applications[index];\n\n                // Ensure we don't select the root application\n                if (SelectedItem.Path == \"/\")\n                {\n                    SelectedItem = _site.Applications.FirstOrDefault(app => app.Path != \"/\");\n                }\n            }\n\n            _site.Server.CommitChanges();\n            Items = _site.Applications.Where(app => app.Path != \"/\").ToList();\n            OnApplicationsSettingsSaved();\n        }\n\n        private void Basic()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            using (var dialog = new NewApplicationDialog(Module, _site, SelectedItem.Path, SelectedItem.ApplicationPoolName, SelectedItem))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            _site.Server.CommitChanges();\n            OnApplicationsSettingsSaved();\n        }\n\n        private void Advanced()\n        {\n            // Implement Advanced Settings dialog if needed\n        }\n\n        private void VirtualDirectories()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var mainForm = service.Form;\n\n            // Create a new VirtualDirectoriesPage and initialize it with the application           \n            var page = new VirtualDirectoriesPage();\n            ((IModulePage)page).Initialize(Module, null, SelectedItem);\n\n            // Load the page in the main form\n            mainForm.LoadPage(page);\n        }\n\n        protected override void DoubleClick(Application item)\n        {\n            Basic();\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Site\",\n            \"Application Pool\"});\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Site\":\n                    return item.SubItems[1].Name;\n                case \"Application Pool\":\n                    return item.SubItems[2].Name;\n                default:\n                    return string.Empty;\n            }\n        }\n\n        private void Permissions()\n        {\n            var path = SelectedItem.PhysicalPath.ExpandIisExpressEnvironmentVariables(SelectedItem.GetActualExecutable());\n            if (!string.IsNullOrWhiteSpace(path))\n            {\n                NativeMethods.ShowFileProperties(path);\n            }\n        }\n\n        private void Explore()\n        {\n            var path = SelectedItem.PhysicalPath.ExpandIisExpressEnvironmentVariables(SelectedItem.GetActualExecutable());\n            if (!string.IsNullOrWhiteSpace(path))\n            {\n                DialogHelper.Explore(path);\n            }\n        }\n\n        private void Browse(object uri)\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var message = (IManagementUIService)GetService(typeof(IManagementUIService));\n            // Help users launch IIS Express instance if needed\n            var site = _site;\n            if (site.Server.Mode == WorkingMode.IisExpress && site.State != ObjectState.Started)\n            {\n                var result = message.ShowMessage(\n                    \"This website is not yet running. Do you want to start it now?\",\n                    \"Question\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n\n                try\n                {\n                    service.Form.BeginProgress();\n                    DialogHelper.SiteStart(site, service.Form);\n                }\n                catch (Exception ex)\n                {\n                    message.ShowMessage(ex.Message, \"Error\", MessageBoxButtons.OK, MessageBoxIcon.Error);\n                }\n                finally\n                {\n                    service.Form.EndProgress();\n                }\n            }\n\n            DialogHelper.ProcessStart(uri + SelectedItem.Path);\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            return null;\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnApplicationsSettingsSaved();\n        }\n\n        public ApplicationsSettingsSavedEventHandler ApplicationsSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name { get; }\n    }\n\n    public delegate void ApplicationsSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationsPage.Designer.cs",
    "content": "namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ApplicationsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chSite = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPool = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPhysicalPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();\n            this.cbFilter = new System.Windows.Forms.ToolStripComboBox();\n            this.btnGo = new System.Windows.Forms.ToolStripSplitButton();\n            this.pathToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.appPoolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.physicalPathToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.btnShowAll = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // imageList1\n            // \n            this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;\n            this.imageList1.ImageSize = new System.Drawing.Size(16, 16);\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.label2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 2;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"contextMenuStrip1\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 4;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chPath,\n            this.chPhysicalPath,\n            this.chSite,\n            this.chPool});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.LabelEdit = true;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.SmallImageList = this.imageList1;\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1_SelectedIndexChanged);\n            // \n            // chPath\n            // \n            this.chPath.Text = \"Virtual Path\";\n            this.chPath.Width = 200;\n            //\n            // chSite\n            //\n            this.chSite.Text = \"Site\";\n            this.chSite.Width = 200;\n            // \n            // chPool\n            // \n            this.chPool.Text = \"Application Pool\";\n            this.chPool.Width = 150;\n            // \n            // chPhysicalPath\n            // \n            this.chPhysicalPath.Text = \"Physical Path\";\n            this.chPhysicalPath.Width = 350;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel1,\n            this.cbFilter,\n            this.btnGo,\n            this.btnShowAll,\n            this.toolStripSeparator1,\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel1\n            // \n            this.toolStripLabel1.Name = \"toolStripLabel1\";\n            this.toolStripLabel1.Size = new System.Drawing.Size(36, 22);\n            this.toolStripLabel1.Text = \"Filter:\";\n            // \n            // cbFilter\n            // \n            this.cbFilter.Name = \"cbFilter\";\n            this.cbFilter.Size = new System.Drawing.Size(121, 25);\n            this.cbFilter.TextChanged += new System.EventHandler(this.cbFilter_TextChanged);\n            // \n            // btnGo\n            // \n            this.btnGo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.pathToolStripMenuItem,\n            this.appPoolToolStripMenuItem,\n            this.physicalPathToolStripMenuItem});\n            this.btnGo.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGo.Name = \"btnGo\";\n            this.btnGo.Size = new System.Drawing.Size(54, 22);\n            this.btnGo.Text = \"Go\";\n            this.btnGo.ToolTipText = \"Go\";\n            // \n            // pathToolStripMenuItem\n            // \n            this.pathToolStripMenuItem.Name = \"pathToolStripMenuItem\";\n            this.pathToolStripMenuItem.Size = new System.Drawing.Size(144, 22);\n            this.pathToolStripMenuItem.Text = \"Path\";\n            // \n            // appPoolToolStripMenuItem\n            // \n            this.appPoolToolStripMenuItem.Name = \"appPoolToolStripMenuItem\";\n            this.appPoolToolStripMenuItem.Size = new System.Drawing.Size(144, 22);\n            this.appPoolToolStripMenuItem.Text = \"App Pool\";\n            // \n            // physicalPathToolStripMenuItem\n            // \n            this.physicalPathToolStripMenuItem.Name = \"physicalPathToolStripMenuItem\";\n            this.physicalPathToolStripMenuItem.Size = new System.Drawing.Size(144, 22);\n            this.physicalPathToolStripMenuItem.Text = \"Physical Path\";\n            // \n            // btnShowAll\n            // \n            this.btnShowAll.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnShowAll.Name = \"btnShowAll\";\n            this.btnShowAll.Size = new System.Drawing.Size(73, 22);\n            this.btnShowAll.Text = \"Show All\";\n            this.btnShowAll.Click += new System.EventHandler(this.btnShowAll_Click);\n            // \n            // toolStripSeparator1\n            // \n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\n            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label2.Location = new System.Drawing.Point(48, 10);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(110, 24);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Applications\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 1;\n            this.pictureBox1.TabStop = false;\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 3;\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 3;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // ApplicationsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ApplicationsPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n        private ImageList imageList1;\n        private SplitContainer splitContainer1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private PictureBox pictureBox1;\n        private Panel panel2;\n        private Label label2;\n        private ToolStrip tsActionPanel;\n        private ListView listView1;\n        private ColumnHeader chPath;\n        private ColumnHeader chSite;\n        private ColumnHeader chPool;\n        private ColumnHeader chPhysicalPath;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel1;\n        private ToolStripComboBox cbFilter;\n        private ToolStripSplitButton btnGo;\n        private ToolStripMenuItem pathToolStripMenuItem;\n        private ToolStripMenuItem appPoolToolStripMenuItem;\n        private ToolStripMenuItem physicalPathToolStripMenuItem;\n        private ToolStripButton btnShowAll;\n        private ToolStripSeparator toolStripSeparator1;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationsPage.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Application = Microsoft.Web.Administration.Application;\n\n    public partial class ApplicationsPage : ModuleListPage\n    {\n        private sealed class PageTaskList : TaskList\n        {\n            private readonly ApplicationsPage _owner;\n\n            public PageTaskList(ApplicationsPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage()\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class ApplicationsListViewItem : ListViewItem, IFeatureListViewItem<Application>\n        {\n            public Application Item { get; }\n            private readonly ApplicationsPage _page;\n\n            public ApplicationsListViewItem(Application item, ApplicationsPage page)\n                : base(page._site == null && item.Path == \"/\" ? \"Root Application\" : item.Path)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, Item.PhysicalPath));\n                SubItems.Add(new ListViewSubItem(this, Item.Site.Name));\n                SubItems.Add(new ListViewSubItem(this, item.GetPoolName()));\n                ImageIndex = 0;\n            }\n        }\n\n        private ApplicationsFeature _feature;\n        private PageTaskList _taskList;\n        private List<Application> _applications;\n        private Site _site;\n\n        public ApplicationsPage()\n        {\n            InitializeComponent();\n            btnGo.Image = DefaultTaskList.GoImage;\n            btnShowAll.Image = DefaultTaskList.ShowAllImage;\n\n            imageList1.Images.Add(Resources.application_16);\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            var data = navigationData as Tuple<List<Application>, Site>;\n            _applications = data.Item1;\n            _site = data.Item2;\n            if (_applications == null && _site == null)\n            {\n                throw new InvalidOperationException(\"Site object required\");\n            }\n\n            _feature = new ApplicationsFeature(Module);\n            _feature.ApplicationsSettingsUpdated = InitializeListPage;\n            _feature.Load(_applications, _site);\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (Application app in _feature.Items)\n            {\n                listView1.Items.Add(new ApplicationsListViewItem(app, this));\n            }\n\n            _feature.InitializeGrouping(cbGroup);\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem != null)\n            {\n                foreach (ApplicationsListViewItem item in listView1.Items)\n                {\n                    if (item.Item.Path == _feature.SelectedItem.Path)\n                    {\n                        item.Selected = true;\n                    }\n                }\n            }\n\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        private void cbFilter_TextChanged(object sender, EventArgs e)\n        {\n            btnGo.Enabled = !string.IsNullOrWhiteSpace(cbFilter.Text);\n        }\n\n        private void btnShowAll_Click(object sender, EventArgs e)\n        {\n            cbFilter.Text = string.Empty;\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ApplicationsPage.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>127, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>391, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>265, 17</value>\n  </metadata>\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>74</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/BindingDiagDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    partial class BindingDiagDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.toolStrip1 = new System.Windows.Forms.ToolStrip();\n            this.btnSave = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnGenerate = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnHelp = new System.Windows.Forms.ToolStripButton();\n            this.txtResult = new System.Windows.Forms.RichTextBox();\n            this.toolStrip1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // toolStrip1\n            // \n            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.btnSave,\n            this.toolStripSeparator1,\n            this.btnGenerate,\n            this.toolStripSeparator2,\n            this.btnHelp});\n            this.toolStrip1.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip1.Name = \"toolStrip1\";\n            this.toolStrip1.Size = new System.Drawing.Size(590, 25);\n            this.toolStrip1.TabIndex = 0;\n            this.toolStrip1.Text = \"toolStrip1\";\n            // \n            // btnSave\n            // \n            this.btnSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnSave.Image = global::JexusManager.Main.Properties.Resources.save_16;\n            this.btnSave.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnSave.Name = \"btnSave\";\n            this.btnSave.Size = new System.Drawing.Size(23, 22);\n            this.btnSave.Text = \"Save\";\n            // \n            // toolStripSeparator1\n            // \n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\n            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnGenerate\n            // \n            this.btnGenerate.Image = global::JexusManager.Main.Properties.Resources.restart_16;\n            this.btnGenerate.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGenerate.Name = \"btnGenerate\";\n            this.btnGenerate.Size = new System.Drawing.Size(112, 22);\n            this.btnGenerate.Text = \"Generate Report\";\n            // \n            // toolStripSeparator2\n            // \n            this.toolStripSeparator2.Name = \"toolStripSeparator2\";\n            this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnHelp\n            // \n            this.btnHelp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnHelp.Image = global::JexusManager.Main.Properties.Resources.help_16;\n            this.btnHelp.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnHelp.Name = \"btnHelp\";\n            this.btnHelp.Size = new System.Drawing.Size(23, 22);\n            this.btnHelp.Text = \"Help\";\n            this.btnHelp.Click += new System.EventHandler(this.BtnHelpClick);\n            // \n            // txtResult\n            // \n            this.txtResult.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.txtResult.Location = new System.Drawing.Point(0, 25);\n            this.txtResult.Name = \"txtResult\";\n            this.txtResult.ReadOnly = true;\n            this.txtResult.Size = new System.Drawing.Size(590, 376);\n            this.txtResult.TabIndex = 1;\n            this.txtResult.Text = \"\";\n            // \n            // LinkDiagDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(590, 401);\n            this.Controls.Add(this.txtResult);\n            this.Controls.Add(this.toolStrip1);\n            this.Name = \"LinkDiagDialog\";\n            this.Text = \"Binding Diagnostics\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.BindingDiagDialogHelpButtonClicked);\n            this.toolStrip1.ResumeLayout(false);\n            this.toolStrip1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.ToolStrip toolStrip1;\n        private System.Windows.Forms.ToolStripButton btnSave;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\n        private System.Windows.Forms.ToolStripButton btnGenerate;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\n        private System.Windows.Forms.ToolStripButton btnHelp;\n        private System.Windows.Forms.RichTextBox txtResult;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/BindingDiagDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Client.Win32;\nusing System;\nusing System.Linq;\nusing System.Security.Cryptography;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\nusing System.Reactive.Disposables;\nusing System.Reactive.Linq;\nusing System.IO;\nusing System.Drawing;\nusing Microsoft.Win32;\nusing EnumsNET;\nusing System.Net;\nusing System.Net.Sockets;\nusing JexusManager.Features.HttpApi;\nusing Microsoft.Web.Management.Client;\n\nnamespace JexusManager.Features.Main\n{\n    public partial class BindingDiagDialog : DialogForm\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"BindingDiagDialog\");\n\n        public BindingDiagDialog(IServiceProvider provider, Site site)\n            : base(provider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnGenerate, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtResult.Clear();\n                    AnalyzeBinding(site, (Module)provider);\n                }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnSave, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     var fileName = DialogHelper.ShowSaveFileDialog(null, \"Text Files|*.txt|All Files|*.*\", null);\n                     if (string.IsNullOrEmpty(fileName))\n                     {\n                         return;\n                     }\n\n                     File.WriteAllText(fileName, txtResult.Text);\n                 }));\n        }\n\n        private void Debug(string text)\n        {\n            txtResult.AppendText(text);\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Error(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Red;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Warn(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Green;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Info(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Blue;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private int GetEventLogging()\n        {\n            if (Helper.IsRunningOnMono())\n            {\n                return -1;\n            }\n\n            // https://support.microsoft.com/kb/260729\n            var key = Registry.LocalMachine.OpenSubKey(@\"System\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\");\n            if (key == null)\n            {\n                return 1;\n            }\n\n            var value = (int)key.GetValue(\"EventLogging\", 1);\n            return value;\n        }\n\n        private static bool GetProtocol(string protocol)\n        {\n            if (Helper.IsRunningOnMono())\n            {\n                return false;\n            }\n\n            // https://support.microsoft.com/kb/187498\n            var key =\n                Registry.LocalMachine.OpenSubKey(\n                    $@\"SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\{protocol}\\Server\");\n            if (key == null)\n            {\n                return true;\n            }\n\n            var value = (int)key.GetValue(\"Enabled\", 1);\n            var enabled = value == 1;\n            return enabled;\n        }\n\n        private void BtnHelpClick(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://docs.jexusmanager.com/tutorials/binding-diagnostics.html\");\n        }\n\n        private void BindingDiagDialogHelpButtonClicked(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            BtnHelpClick(null, EventArgs.Empty);\n        }\n\n        private void AnalyzeBinding(Site site, Module provider)\n        {\n            try\n            {\n                Warn(\"IMPORTANT: This report might contain confidential information. Mask such before sharing with others.\");\n                Warn(\"-----\");\n                Debug($\"System Time: {DateTime.Now}\");\n                Debug($\"Processor Architecture: {Environment.GetEnvironmentVariable(\"PROCESSOR_ARCHITECTURE\")}\");\n                Debug($\"OS: {Environment.OSVersion}\");\n                Debug($\"Server Type: {site.Server.Mode.AsString(EnumFormat.Description)}\");\n                Debug(\"-----\");\n\n                var adapters = Dns.GetHostEntry(string.Empty).AddressList.Where(address => !address.IsIPv6LinkLocal).ToList();\n                if (adapters.Count == 0)\n                {\n                    Warn(\"This machine has no suitable IP address to accept external traffic.\");\n                }\n                else\n                {\n                    Info($\"This machine has {adapters.Count} IP addresses to take external traffic.\");\n                    foreach (IPAddress address in adapters)\n                    {\n                        Info(address.AddressFamily == AddressFamily.InterNetworkV6\n                            ? $\"* [{address}].\"\n                            : $\"* {address}.\");\n                    }\n                }\n\n                Debug(\"-----\");\n\n                Debug($\"[W3SVC/{site.Id}]\");\n                Debug($\"ServerComment  : {site.Name}\");\n                Debug($\"ServerAutoStart: {site.ServerAutoStart}\");\n                Debug($\"ServerState    : {site.State}\");\n                Debug(string.Empty);\n                var feature = new ReservedUrlsFeature(provider);\n                feature.Load();\n                foreach (Binding binding in site.Bindings)\n                {\n                    Debug($\"BINDING: {binding.Protocol} {binding}\");\n                    if (binding.Protocol != \"https\" && binding.Protocol != \"http\")\n                    {\n                        Warn(\"This prototol is not analyzed.\");\n                        Debug(string.Empty);\n                        continue;\n                    }\n\n                    if (PublicNativeMethods.IsProcessElevated)\n                    {\n                        var found = Microsoft.Web.Administration.NativeMethods.FoundReserved((ushort)binding.EndPoint.Port);\n                        if (found)\n                        {\n                            Error(\"Found a conflicting TCP reserved port range. Please run \\\"netsh int ipv4 show excludedportrange protocol=tcp\\\" at command prompt to troubleshoot.\");\n                        }\n                        else\n                        {\n                            Info(\"No conflicting TCP reserved port range is found.\");\n                        }\n                    }\n                    else\n                    {\n                        Warn(\"Jexus Manager is not running as administrator, so TCP reserved port range is not verified. Please run \\\"netsh int ipv4 show excludedportrange protocol=tcp\\\" at command prompt to see if any conflict exists.\");\n                    }\n\n                    if (binding.Host != \"localhost\")\n                    {\n                        if (site.Server.Mode == WorkingMode.IisExpress)\n                        {\n                            var reservation = binding.ToUrlPrefix();\n                            if (!feature.Items.Any(item => item.UrlPrefix == reservation))\n                            {\n                                Warn($\"URL reservation {reservation} is missing. So this binding only works if IIS Express runs as administrator.\");\n                            }\n                        }\n\n                        Info($\"This site can take external traffic if,\");\n                        Info($\" * TCP port {binding.EndPoint.Port} must be opened on Windows Firewall (or any other installed firewall products).\");\n                    }\n\n                    if (binding.EndPoint.Address.Equals(IPAddress.Any))\n                    {\n                        if (binding.Host != \"localhost\")\n                        {\n                            Info($\" * Requests from web browsers must be routed to following end points on this machine,\");\n                            foreach (IPAddress address in adapters)\n                            {\n                                Info(address.AddressFamily == AddressFamily.InterNetworkV6\n                                    ? $\"   * [{address}]:{binding.EndPoint.Port}.\"\n                                    : $\"   * {address}:{binding.EndPoint.Port}.\");\n                            }\n                        }\n\n                        if (Socket.OSSupportsIPv4)\n                        {\n                            Debug($\"This site can take local traffic at {IPAddress.Loopback}:{binding.EndPoint.Port}.\");\n                        }\n\n                        if (Socket.OSSupportsIPv6)\n                        {\n                            Debug($\"This site can take local traffic at [{IPAddress.IPv6Loopback}]:{binding.EndPoint.Port}.\");\n                        }\n                    }\n                    else\n                    {\n                        Info($\" * The networking must be properly set up to forward requests from web browsers to {binding.EndPoint} on this machine.\");\n                    }\n\n                    if (binding.Host == \"*\" || binding.Host == string.Empty)\n                    {\n                        if (binding.EndPoint.Address.Equals(IPAddress.Any))\n                        {\n                            Info($\" * Web browsers can use several URLs, such as\");\n                            foreach (IPAddress address in adapters)\n                            {\n                                Debug(address.AddressFamily == AddressFamily.InterNetworkV6\n                                    ? $\"   * {binding.Protocol}://[{address}]:{binding.EndPoint.Port}.\"\n                                    : $\"   * {binding.Protocol}://{address}:{binding.EndPoint.Port}.\");\n                            }\n\n                            Info($\"   * {binding.Protocol}://localhost:{binding.EndPoint.Port}.\");\n                            Info($\"   * {binding.Protocol}://{IPAddress.Loopback}:{binding.EndPoint.Port}.\");\n                            Info($\"   * {binding.Protocol}://[{IPAddress.IPv6Loopback}]:{binding.EndPoint.Port}.\");\n                        }\n                        else\n                        {\n                            Info($\" * Web browsers should use URL {binding.Protocol}://{binding.EndPoint.Address}:{binding.EndPoint.Port}.\");\n                        }\n                    }\n                    else\n                    {\n                        Info($\" * Web browsers should use URL {binding.Protocol}://{binding.Host}:{binding.EndPoint.Port}. Requests must have Host header of \\\"{binding.Host}\\\".\");\n                        if (!binding.Host.IsWildcard())\n                        {\n                            Info($\"   Start DNS query for {binding.Host}.\");\n                            // IMPORTANT: wildcard host is not supported.\n                            try\n                            {\n                                var entry = Dns.GetHostEntry(binding.Host);\n                                var list = entry.AddressList;\n                                Info($\"   DNS Query returns {list.Length} result(s).\");\n                                var found = false;\n                                foreach (var address in list)\n                                {\n                                    Info(address.AddressFamily == AddressFamily.InterNetworkV6\n                                        ? $\"    * [{address}]\"\n                                        : $\"    * {address}\");\n                                    if (adapters.Any(item => address.Equals(item)))\n                                    {\n                                        found = true;\n                                        break;\n                                    }\n\n                                    if (address.Equals(IPAddress.Loopback))\n                                    {\n                                        found = true;\n                                    }\n                                }\n\n                                if (!found)\n                                {\n                                    Warn($\"   DNS query of \\\"{binding.Host}\\\" does not return a known IP address for any network adapter of this machine.\");\n                                    Warn(\"   The server usually uses private IP addresses, and DNS query returns public IP addresses.\");\n                                    Warn(\"   If packets are forwarded from public IP to private IP properly, this warning can be ignored.\");\n                                    Warn(\"   Otherwise, please review DNS settings (or modify the hosts file to emulate DNS).\");\n                                }\n                            }\n                            catch (SocketException ex)\n                            {\n                                Error($\"DNS query failed: {ex.Message}.\");\n                                Error($\"Please review the host name {binding.Host}.\");\n                            }\n                        }\n                    }\n\n                    if (binding.Protocol == \"https\")\n                    {\n                        Warn(\"Binding Diagnostics does not verify certificates and other SSL/TLS related settings.\");\n                        Warn($\"Please run SSL Diagnostics at server level to analyze SSL/TLS configuration. More information can be found at https://docs.jexusmanager.com/tutorials/ssl-diagnostics.html.\");\n                    }\n\n                    Debug(string.Empty);\n                }\n            }\n            catch (CryptographicException ex)\n            {\n                _logger.LogError(ex, \"Cryptographic error in binding diagnostics. HResult: {HResult}\", ex.HResult);\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error analyzing binding\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/BindingDiagDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/BindingDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class BindingDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnClose = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbType = new System.Windows.Forms.ComboBox();\n            this.cbAddress = new System.Windows.Forms.ComboBox();\n            this.txtPort = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.txtHost = new System.Windows.Forms.TextBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.cbSniRequired = new System.Windows.Forms.CheckBox();\n            this.txtCertificates = new System.Windows.Forms.Label();\n            this.cbCertificates = new System.Windows.Forms.ComboBox();\n            this.btnSelect = new System.Windows.Forms.Button();\n            this.btnView = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // btnClose\n            // \n            this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnClose.Location = new System.Drawing.Point(417, 244);\n            this.btnClose.Name = \"btnClose\";\n            this.btnClose.Size = new System.Drawing.Size(95, 25);\n            this.btnClose.TabIndex = 0;\n            this.btnClose.Text = \"Close\";\n            this.btnClose.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(321, 244);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 25);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(34, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Type:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(130, 13);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(60, 13);\n            this.label2.TabIndex = 3;\n            this.label2.Text = \"IP address:\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(346, 13);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(29, 13);\n            this.label3.TabIndex = 4;\n            this.label3.Text = \"Port:\";\n            // \n            // cbType\n            // \n            this.cbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbType.FormattingEnabled = true;\n            this.cbType.Items.AddRange(new object[] {\n            \"http\",\n            \"https\"});\n            this.cbType.Location = new System.Drawing.Point(12, 30);\n            this.cbType.Name = \"cbType\";\n            this.cbType.Size = new System.Drawing.Size(115, 21);\n            this.cbType.TabIndex = 5;\n            // \n            // cbAddress\n            // \n            this.cbAddress.FormattingEnabled = true;\n            this.cbAddress.Location = new System.Drawing.Point(133, 30);\n            this.cbAddress.Name = \"cbAddress\";\n            this.cbAddress.Size = new System.Drawing.Size(210, 21);\n            this.cbAddress.TabIndex = 6;\n            this.cbAddress.Text = \"All Unassigned\";\n            // \n            // txtPort\n            // \n            this.txtPort.Location = new System.Drawing.Point(349, 30);\n            this.txtPort.Name = \"txtPort\";\n            this.txtPort.Size = new System.Drawing.Size(48, 20);\n            this.txtPort.TabIndex = 7;\n            this.txtPort.Text = \"80\";\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(12, 67);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(61, 13);\n            this.label4.TabIndex = 8;\n            this.label4.Text = \"Host name:\";\n            // \n            // txtHost\n            // \n            this.txtHost.Location = new System.Drawing.Point(12, 83);\n            this.txtHost.Name = \"txtHost\";\n            this.txtHost.Size = new System.Drawing.Size(303, 20);\n            this.txtHost.TabIndex = 9;\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(12, 106);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(266, 13);\n            this.label5.TabIndex = 10;\n            this.label5.Text = \"Example: www.contoso.com or marketing.contoso.com\";\n            // \n            // cbSniRequired\n            // \n            this.cbSniRequired.AutoSize = true;\n            this.cbSniRequired.Location = new System.Drawing.Point(15, 133);\n            this.cbSniRequired.Name = \"cbSniRequired\";\n            this.cbSniRequired.Size = new System.Drawing.Size(177, 17);\n            this.cbSniRequired.TabIndex = 11;\n            this.cbSniRequired.Text = \"Require Server Name Indication\";\n            this.cbSniRequired.UseVisualStyleBackColor = true;\n            // \n            // txtCertificates\n            // \n            this.txtCertificates.AutoSize = true;\n            this.txtCertificates.Location = new System.Drawing.Point(12, 186);\n            this.txtCertificates.Name = \"txtCertificates\";\n            this.txtCertificates.Size = new System.Drawing.Size(79, 13);\n            this.txtCertificates.TabIndex = 12;\n            this.txtCertificates.Text = \"SSL certificate:\";\n            // \n            // cbCertificates\n            // \n            this.cbCertificates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbCertificates.FormattingEnabled = true;\n            this.cbCertificates.Location = new System.Drawing.Point(12, 202);\n            this.cbCertificates.Name = \"cbCertificates\";\n            this.cbCertificates.Size = new System.Drawing.Size(303, 21);\n            this.cbCertificates.TabIndex = 13;\n            // \n            // btnSelect\n            // \n            this.btnSelect.Enabled = false;\n            this.btnSelect.Location = new System.Drawing.Point(321, 200);\n            this.btnSelect.Name = \"btnSelect\";\n            this.btnSelect.Size = new System.Drawing.Size(85, 23);\n            this.btnSelect.TabIndex = 14;\n            this.btnSelect.Text = \"Select...\";\n            this.btnSelect.UseVisualStyleBackColor = true;\n            // \n            // btnView\n            // \n            this.btnView.Location = new System.Drawing.Point(412, 200);\n            this.btnView.Name = \"btnView\";\n            this.btnView.Size = new System.Drawing.Size(85, 23);\n            this.btnView.TabIndex = 15;\n            this.btnView.Text = \"View...\";\n            this.btnView.UseVisualStyleBackColor = true;\n            // \n            // BindingDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnClose;\n            this.ClientSize = new System.Drawing.Size(524, 281);\n            this.Controls.Add(this.btnView);\n            this.Controls.Add(this.btnSelect);\n            this.Controls.Add(this.cbCertificates);\n            this.Controls.Add(this.txtCertificates);\n            this.Controls.Add(this.cbSniRequired);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.txtHost);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.txtPort);\n            this.Controls.Add(this.cbAddress);\n            this.Controls.Add(this.cbType);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnClose);\n            this.Name = \"BindingDialog\";\n            this.Text = \"Add Site Binding\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.BindingDialogHelpButtonClicked);\n            this.Load += new System.EventHandler(this.BindingDialogLoad);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnClose;\n        private Button btnOK;\n        private Label label1;\n        private Label label2;\n        private Label label3;\n        private ComboBox cbType;\n        private ComboBox cbAddress;\n        private TextBox txtPort;\n        private Label label4;\n        private TextBox txtHost;\n        private Label label5;\n        private CheckBox cbSniRequired;\n        private Label txtCertificates;\n        private ComboBox cbCertificates;\n        private Button btnSelect;\n        private Button btnView;\n    }\n}"
  },
  {
    "path": "JexusManager/Features/Main/BindingDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.ComponentModel;\n    using System.Linq;\n    using System.Net;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Binding = Microsoft.Web.Administration.Binding;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using JexusManager.Features.HttpApi;\n    using Microsoft.Web.Management.Client;\n\n    public sealed partial class BindingDialog : DialogForm\n    {\n        public BindingDialog(IServiceProvider serviceProvider, Binding binding1, Site site)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Binding = binding1;\n            Text = Binding == null ? \"Create Site Binding\" : \"Edit Site Binding\";\n            DialogHelper.LoadAddresses(cbAddress);\n            cbAddress.SelectedIndex = -1;\n            txtPort.Text = \"80\";\n            cbType.SelectedIndex = 0;\n            if (!site.Server.SupportsSni)\n            {\n                cbSniRequired.Enabled = false;\n            }\n\n            if (Binding == null)\n            {\n                txtHost.Text = site.Server.Mode == WorkingMode.IisExpress ? \"localhost\" : string.Empty;\n            }\n            else\n            {\n                cbType.Text = Binding.Protocol;\n                cbType.Enabled = false;\n                cbAddress.Text = Binding.EndPoint?.Address.AddressToCombo();\n                txtPort.Text = Binding.EndPoint?.Port.ToString();\n                txtHost.Text = Binding.Host.HostToDisplay();\n                if (Binding.EndPoint == null)\n                {\n                    var value = Binding.BindingInformation;\n                    var last = value.LastIndexOf(':');\n                    if (last > 0)\n                    {\n                        txtHost.Text = value.Substring(last + 1).HostToDisplay();\n                        var next = value.LastIndexOf(':', last - 1);\n                        txtPort.Text = value.Substring(next + 1, last - next - 1);\n                        if (next > -1)\n                        {\n                            cbAddress.Text = value.Substring(0, next);\n                        }\n                    }\n                }\n\n                if (site.Server.SupportsSni)\n                {\n                    cbSniRequired.Checked = Binding.GetIsSni();\n                }\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    IPAddress address;\n                    try\n                    {\n                        address = cbAddress.Text.ComboToAddress();\n                    }\n                    catch (Exception)\n                    {\n                        ShowMessage(\"The specified IP address is invalid. Specify a valid IP address.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    int port;\n                    try\n                    {\n                        port = int.Parse(txtPort.Text);\n                    }\n                    catch (Exception)\n                    {\n                        ShowMessage(\"The server port number must be a positive integer between 1 and 65535\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    if (port < 1 || port > 65535)\n                    {\n                        ShowMessage(\"The server port number must be a positive integer between 1 and 65535\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    if (!txtHost.Text.IsValidHost(site.Server.SupportsWildcard))\n                    {\n                        ShowMessage(\"The specified host name is incorrect. The host name must use a valid host name format and cannot contain the following characters: \\\"/\\\\[]:|<>+=;,?*$%#@{}^`. Example: www.contoso.com.\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    var certificate = cbCertificates.SelectedItem as CertificateInfo;\n                    var host = txtHost.Text.DisplayToHost();\n                    var hash = certificate?.Certificate.GetCertHash();\n                    var store = certificate?.Store;\n                    var binding = new Binding(\n                        cbType.Text,\n                        $\"{address.AddressToDisplay()}:{port}:{host.HostToDisplay()}\",\n                        cbType.Text == \"https\" ? hash : new byte[0],\n                        cbType.Text == \"https\" ? store : null,\n                        cbSniRequired.Checked ? SslFlags.Sni : SslFlags.None,\n                        site.Bindings);\n                    var matched = site.Parent.FindDuplicate(binding, site, Binding);\n                    if (matched == true)\n                    {\n                        var result = ShowMessage(\n                            $\"The binding '{binding}' is assigned to another site. If you assign the same binding to this site, you will only be able to start one of the sites. Are you sure that you want to add this duplicate binding?\",\n                            MessageBoxButtons.YesNo,\n                            MessageBoxIcon.Question,\n                            MessageBoxDefaultButton.Button1);\n                        if (result != DialogResult.Yes)\n                        {\n                            return;\n                        }\n                    }\n\n                    if (matched == null)\n                    {\n                        ShowMessage(\n                            \"The specific port is being used by a different binding.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Warning,\n                            MessageBoxDefaultButton.Button1);\n                        binding.Delete();\n                        return;\n                    }\n\n                    var conflicts = binding.DetectConflicts(hash, store);\n                    if (conflicts == Binding.SecureBindingDetectionResult.Conflicting)\n                    {\n                        var result = ShowMessage(\n                            $\"This binding is already being used. If you continue you might overwrite the existing certificate for this IP Address:Port or Host Name:Port combination. Do you want to use this binding anyway?\",\n                            MessageBoxButtons.YesNo,\n                            MessageBoxIcon.Question,\n                            MessageBoxDefaultButton.Button1);\n                        if (result != DialogResult.Yes)\n                        {\n                            return;\n                        }\n                    }\n\n                    if (Binding == null)\n                    {\n                        Binding = binding;\n                    }\n                    else\n                    {\n                        Binding.Reinitialize(binding);\n                    }\n\n                    if (site.Server.Mode == WorkingMode.IisExpress || site.Server.Mode == WorkingMode.Iis)\n                    {\n                        if (conflicts == Binding.SecureBindingDetectionResult.Conflicting || conflicts == Binding.SecureBindingDetectionResult.None)\n                        {\n                            var (state, message) = binding.FixCertificateMapping(certificate?.Certificate);\n                            if (state != CertificateMappingState.RegistrationSucceeded)\n                            {\n                                if (state == CertificateMappingState.HostNameNotMatched)\n                                {\n                                    var result = ShowMessage($\"{message}. Do you still want to use this certificate?\", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);\n                                    if (result == DialogResult.Yes)\n                                    {\n                                        // IMPORTANT: force using the certificate.\n                                        (state, message) = binding.FixCertificateMapping(certificate?.Certificate, true);\n                                    }\n                                }\n\n                                if (state != CertificateMappingState.RegistrationSucceeded)\n                                {\n                                    ShowMessage(string.Format(\"The binding '{0}' is invalid: {1}\", binding, message), MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                                    return;\n                                }\n                            }\n                        }\n                    }\n\n                    if (site.Server.Mode == WorkingMode.IisExpress)\n                    {\n                        if (Binding.Host != \"localhost\")\n                        {\n                            ShowMessage(\n                                \"The specific host name is not recommended for IIS Express. The host name should be localhost.\",\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Warning,\n                                MessageBoxDefaultButton.Button1);\n\n                            var reservation = binding.ToUrlPrefix();\n                            var feature = new ReservedUrlsFeature((Module)serviceProvider);\n                            feature.Load();\n                            if (feature.Items.All(item => item.UrlPrefix != reservation))\n                            {\n                                var message = BindingUtility.AddReservedUrl(reservation);\n                                if (!string.IsNullOrEmpty(message))\n                                {\n                                    ShowMessage($\"Reserved URL {reservation} cannot be added. {message}\", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                                    return;\n                                }\n                            }\n                        }\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbType, \"SelectedIndexChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(this, \"Load\"))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (Binding == null)\n                    {\n                        txtPort.Text = cbType.Text == \"http\" ? \"80\" : \"443\";\n                        cbAddress.SelectedIndex = 0;\n                    }\n\n                    txtCertificates.Visible = cbType.SelectedIndex == 1;\n                    cbSniRequired.Visible = cbType.SelectedIndex == 1;\n                    cbCertificates.Visible = cbType.SelectedIndex == 1;\n                    btnSelect.Visible = cbType.SelectedIndex == 1;\n                    btnView.Visible = cbType.SelectedIndex == 1;\n                }));\n\n            var certificatesSelected = Observable.FromEventPattern<EventArgs>(cbCertificates, \"SelectedIndexChanged\");\n            container.Add(\n                certificatesSelected\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnView.Enabled = cbCertificates.SelectedIndex > 0;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbAddress, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPort, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtHost, \"TextChanged\"))\n                .Merge(certificatesSelected)\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (Helper.IsRunningOnMono())\n                    {\n                        return;\n                    }\n\n                    var toElevate = BindingUtility.Verify(cbType.Text, cbAddress.Text, txtPort.Text, cbCertificates.SelectedItem as CertificateInfo);\n                    btnOK.Enabled = toElevate != null;\n                    if (!toElevate.HasValue || !toElevate.Value)\n                    {\n                        JexusManager.NativeMethods.RemoveShieldFromButton(btnOK);\n                    }\n                    else\n                    {\n                        JexusManager.NativeMethods.TryAddShieldToButton(btnOK);\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnView, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.DisplayCertificate(((CertificateInfo)cbCertificates.SelectedItem).Certificate, Handle);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnSelect, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    // TODO:\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        internal Binding Binding { get; private set; }\n\n        private void BindingDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210531#Site_Bindings\");\n        }\n\n        private void BindingDialogLoad(object sender, EventArgs e)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            Binding?.RefreshCertificate();\n            DialogHelper.LoadCertificates(cbCertificates, Binding?.CertificateHash, Binding?.CertificateStoreName, service);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/BindingDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/BindingsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class BindingsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chHostName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPort = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chAddress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chInfo = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.btnRemove = new System.Windows.Forms.Button();\n            this.btnEdit = new System.Windows.Forms.Button();\n            this.btnAdd = new System.Windows.Forms.Button();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.btnClose = new System.Windows.Forms.Button();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chType,\n            this.chHostName,\n            this.chPort,\n            this.chAddress,\n            this.chInfo});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(3, 3);\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(373, 200);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            // \n            // chType\n            // \n            this.chType.Text = \"Type\";\n            this.chType.Width = 50;\n            // \n            // chHostName\n            // \n            this.chHostName.Text = \"Host Name\";\n            this.chHostName.Width = 110;\n            // \n            // chPort\n            // \n            this.chPort.Text = \"Port\";\n            this.chPort.Width = 50;\n            // \n            // chAddress\n            // \n            this.chAddress.Text = \"IP Address\";\n            this.chAddress.Width = 100;\n            // \n            // chInfo\n            // \n            this.chInfo.Text = \"Binding Information\";\n            this.chInfo.Width = 100;\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 2;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F));\n            this.tableLayoutPanel1.Controls.Add(this.listView1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 0);\n            this.tableLayoutPanel1.Controls.Add(this.panel2, 1, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 55F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(509, 261);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.Controls.Add(this.btnBrowse);\n            this.panel1.Controls.Add(this.btnRemove);\n            this.panel1.Controls.Add(this.btnEdit);\n            this.panel1.Controls.Add(this.btnAdd);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(382, 3);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(124, 200);\n            this.panel1.TabIndex = 2;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Enabled = false;\n            this.btnBrowse.Location = new System.Drawing.Point(13, 102);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(100, 25);\n            this.btnBrowse.TabIndex = 5;\n            this.btnBrowse.Text = \"Browse\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // btnRemove\n            // \n            this.btnRemove.Enabled = false;\n            this.btnRemove.Location = new System.Drawing.Point(13, 71);\n            this.btnRemove.Name = \"btnRemove\";\n            this.btnRemove.Size = new System.Drawing.Size(100, 25);\n            this.btnRemove.TabIndex = 4;\n            this.btnRemove.Text = \"Remove\";\n            this.btnRemove.UseVisualStyleBackColor = true;\n            // \n            // btnEdit\n            // \n            this.btnEdit.Enabled = false;\n            this.btnEdit.Location = new System.Drawing.Point(13, 40);\n            this.btnEdit.Name = \"btnEdit\";\n            this.btnEdit.Size = new System.Drawing.Size(100, 25);\n            this.btnEdit.TabIndex = 3;\n            this.btnEdit.Text = \"Edit...\";\n            this.btnEdit.UseVisualStyleBackColor = true;\n            // \n            // btnAdd\n            // \n            this.btnAdd.Location = new System.Drawing.Point(13, 9);\n            this.btnAdd.Name = \"btnAdd\";\n            this.btnAdd.Size = new System.Drawing.Size(100, 25);\n            this.btnAdd.TabIndex = 2;\n            this.btnAdd.Text = \"Add...\";\n            this.btnAdd.UseVisualStyleBackColor = true;\n            // \n            // panel2\n            // \n            this.panel2.Controls.Add(this.btnClose);\n            this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel2.Location = new System.Drawing.Point(382, 209);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(124, 49);\n            this.panel2.TabIndex = 3;\n            // \n            // btnClose\n            // \n            this.btnClose.Location = new System.Drawing.Point(13, 11);\n            this.btnClose.Name = \"btnClose\";\n            this.btnClose.Size = new System.Drawing.Size(100, 25);\n            this.btnClose.TabIndex = 1;\n            this.btnClose.Text = \"Close\";\n            this.btnClose.UseVisualStyleBackColor = true;\n            // \n            // BindingsDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(509, 261);\n            this.Controls.Add(this.tableLayoutPanel1);\n            this.MinimumSize = new System.Drawing.Size(525, 240);\n            this.Name = \"BindingsDialog\";\n            this.Text = \"Site Bindings\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.BindingsDialogHelpButtonClicked);\n            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BindingsDialogFormClosing);\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.panel1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private ListView listView1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Button btnClose;\n        private Panel panel1;\n        private Panel panel2;\n        private ColumnHeader chType;\n        private ColumnHeader chHostName;\n        private ColumnHeader chPort;\n        private ColumnHeader chAddress;\n        private ColumnHeader chInfo;\n        private Button btnBrowse;\n        private Button btnRemove;\n        private Button btnEdit;\n        private Button btnAdd;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/BindingsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.ComponentModel;\n    using System.Globalization;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Binding = Microsoft.Web.Administration.Binding;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    internal partial class BindingsDialog : DialogForm\n    {\n        private readonly Site _site;\n\n        public BindingsDialog(IServiceProvider serviceProvider, Site site)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            _site = site;\n            foreach (Binding binding in site.Bindings)\n            {\n                listView1.Items.Add(binding.ToListViewItem());\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnClose, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Close();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(listView1, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var selected = listView1.SelectedItems.Count > 0;\n                    bool matched = ProtocolMatched(listView1.SelectedItems);\n                    btnEdit.Enabled = selected && matched;\n                    btnRemove.Enabled = selected && listView1.Items.Count > 1;\n                    btnBrowse.Enabled = selected && matched;\n                    if (!btnRemove.Enabled)\n                    {\n                        return;\n                    }\n\n                    if (Helper.IsRunningOnMono())\n                    {\n                        return;\n                    }\n\n                    var binding = (Binding)listView1.SelectedItems[0].Tag;\n                    var supportsSni = binding.Parent.Parent.Server.SupportsSni;\n                    var toElevate = selected && (!supportsSni || (supportsSni && binding.GetIsSni()));\n                    if (toElevate)\n                    {\n                        JexusManager.NativeMethods.TryAddShieldToButton(btnRemove);\n                    }\n                    else\n                    {\n                        JexusManager.NativeMethods.RemoveShieldFromButton(btnRemove);\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRemove, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var result = MessageBox.Show(\"Are you sure you want to remove the selected binding?\", Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);\n                    if (result != DialogResult.Yes)\n                    {\n                        return;\n                    }\n\n                    var binding = (Binding)listView1.SelectedItems[0].Tag;\n                    binding.CleanUpMapping();\n                    listView1.SelectedItems[0].Remove();\n                    _site.Bindings.Remove(binding);\n                    _site.Server.CommitChanges();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnEdit, \"Click\")\n                .Merge(Observable.FromEventPattern<EventArgs>(listView1, \"MouseDoubleClick\"))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (!btnEdit.Enabled)\n                    {\n                        return;\n                    }\n\n                    if (listView1.SelectedItems.Count == 0)\n                    {\n                        return;\n                    }\n\n                    var item = listView1.SelectedItems[0];\n                    var binding = (Binding)item.Tag;\n                    using (var dialog = new BindingDialog(ServiceProvider, binding, _site))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n                    }\n\n                    item.SubItems[1].Text = binding.Host.HostToDisplay();\n                    item.SubItems[2].Text = binding.EndPoint.Port.ToString(CultureInfo.InvariantCulture);\n                    item.SubItems[3].Text = binding.EndPoint.Address.AddressToDisplay();\n                    _site.Server.CommitChanges();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnAdd, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using (var dialog = new BindingDialog(ServiceProvider, null, _site))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n\n                        var binding = dialog.Binding;\n                        if (binding == null)\n                        {\n                            return;\n                        }\n\n                        var node = new ListViewItem(new[]\n                            {\n                    binding.Protocol,\n                    binding.Host.HostToDisplay(),\n                    binding.EndPoint.Port.ToString(CultureInfo.InvariantCulture),\n                    binding.EndPoint.Address.AddressToDisplay(),\n                    string.Empty\n                })\n                        { Tag = binding };\n                        listView1.Items.Add(node);\n                        _site.Bindings.Add(binding);\n                    }\n                    _site.Server.CommitChanges();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var binding = (Binding)listView1.SelectedItems[0].Tag;\n                    DialogHelper.ProcessStart(binding.ToUri());\n                }));\n        }\n\n        private static bool ProtocolMatched(ListView.SelectedListViewItemCollection collection)\n        {\n            return collection.Count != 0 && ((Binding)collection[0].Tag).CanBrowse;\n        }\n\n        private void BindingsDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210531#Site_Bingings\");\n        }\n\n        private void BindingsDialogFormClosing(object sender, FormClosingEventArgs e)\n        {\n            if (listView1.Items.Count > 1 && _site.Server.Mode == WorkingMode.Jexus)\n            {\n                MessageBox.Show(\"Only one binding is supported by Jexus.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                e.Cancel = true;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/BindingsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/CLRVersion.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager\n{\n    using System.ComponentModel;\n\n    internal enum CLRVersion\n    {\n        [Description(\"v4.0\")]\n        V40,\n        [Description(\"v2.0\")]\n        V20,\n        [Description(\"No Managed Code\")]\n        NoManagedCode\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/CredentialsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CredentialsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtPassword = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtConfirm = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(207, 176);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(111, 176);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(61, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"User name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(16, 29);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(286, 20);\n            this.txtName.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(13, 67);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(56, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Password:\";\n            // \n            // txtPassword\n            // \n            this.txtPassword.Location = new System.Drawing.Point(16, 83);\n            this.txtPassword.Name = \"txtPassword\";\n            this.txtPassword.PasswordChar = '*';\n            this.txtPassword.Size = new System.Drawing.Size(286, 20);\n            this.txtPassword.TabIndex = 5;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(13, 122);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(93, 13);\n            this.label3.TabIndex = 6;\n            this.label3.Text = \"Confirm password:\";\n            // \n            // txtConfirm\n            // \n            this.txtConfirm.Location = new System.Drawing.Point(16, 138);\n            this.txtConfirm.Name = \"txtConfirm\";\n            this.txtConfirm.PasswordChar = '*';\n            this.txtConfirm.Size = new System.Drawing.Size(286, 20);\n            this.txtConfirm.TabIndex = 7;\n            // \n            // CredentialsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(314, 211);\n            this.Controls.Add(this.txtConfirm);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtPassword);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"CredentialsDialog\";\n            this.Text = \"Set Credentials\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.CredentialsDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private TextBox txtName;\n        private Label label2;\n        private TextBox txtPassword;\n        private Label label3;\n        private TextBox txtConfirm;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/CredentialsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    public partial class CredentialsDialog : DialogForm\n    {\n        public CredentialsDialog(IServiceProvider serviceProvider, string name)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            txtName.Text = name;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPassword, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtConfirm, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                            && !string.IsNullOrWhiteSpace(txtPassword.Text)\n                            && txtConfirm.Text == txtPassword.Text;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    UserName = txtName.Text;\n                    Password = txtPassword.Text;\n                    // TODO: verify user\n                    // DialogResult = DialogResult.Cancel;\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        private void CredentialsDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210456#ApplicationPoolIdentity\");\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string Password { get; set; }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string UserName { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/CredentialsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/HomePage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class HomePage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            panel1 = new Panel();\n            label2 = new Label();\n            label1 = new Label();\n            panel2 = new Panel();\n            tableLayoutPanel = new TableLayoutPanel();\n            groupBox1 = new GroupBox();\n            btnSponsor = new Button();\n            txtStudio = new LinkLabel();\n            txtHome = new LinkLabel();\n            groupBox2 = new GroupBox();\n            lblManualUpdate = new LinkLabel();\n            btnRetry = new Button();\n            lblCurrentVersion = new Label();\n            lblUpdateStatus = new Label();\n            btnDownloadUpdate = new Button();\n            label3 = new Label();\n            panel3 = new Panel();\n            panel1.SuspendLayout();\n            panel2.SuspendLayout();\n            tableLayoutPanel.SuspendLayout();\n            groupBox1.SuspendLayout();\n            groupBox2.SuspendLayout();\n            SuspendLayout();\n            // \n            // panel1\n            // \n            panel1.BackColor = System.Drawing.Color.White;\n            panel1.Controls.Add(label2);\n            panel1.Controls.Add(label1);\n            panel1.Dock = DockStyle.Top;\n            panel1.Location = new System.Drawing.Point(0, 0);\n            panel1.Margin = new Padding(4, 3, 4, 3);\n            panel1.Name = \"panel1\";\n            panel1.Size = new System.Drawing.Size(862, 69);\n            panel1.TabIndex = 0;\n            // \n            // label2\n            // \n            label2.AutoSize = true;\n            label2.Location = new System.Drawing.Point(244, 33);\n            label2.Margin = new Padding(4, 0, 4, 0);\n            label2.Name = \"label2\";\n            label2.Size = new System.Drawing.Size(70, 15);\n            label2.TabIndex = 0;\n            label2.Text = \"by LeXtudio\";\n            // \n            // label1\n            // \n            label1.AutoSize = true;\n            label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 18F, System.Drawing.FontStyle.Bold);\n            label1.Location = new System.Drawing.Point(16, 20);\n            label1.Margin = new Padding(4, 0, 4, 0);\n            label1.Name = \"label1\";\n            label1.Size = new System.Drawing.Size(189, 29);\n            label1.TabIndex = 0;\n            label1.Text = \"Jexus Manager\";\n            // \n            // panel2\n            // \n            panel2.BackColor = System.Drawing.Color.White;\n            panel2.Controls.Add(tableLayoutPanel);\n            panel2.Controls.Add(label3);\n            panel2.Controls.Add(panel3);\n            panel2.Dock = DockStyle.Fill;\n            panel2.Location = new System.Drawing.Point(0, 69);\n            panel2.Margin = new Padding(4, 3, 4, 3);\n            panel2.Name = \"panel2\";\n            panel2.Size = new System.Drawing.Size(862, 489);\n            panel2.TabIndex = 1;\n            // \n            // tableLayoutPanel\n            // \n            tableLayoutPanel.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;\n            tableLayoutPanel.ColumnCount = 2;\n            tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));\n            tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));\n            tableLayoutPanel.Controls.Add(groupBox1, 0, 0);\n            tableLayoutPanel.Controls.Add(groupBox2, 1, 0);\n            tableLayoutPanel.Location = new System.Drawing.Point(20, 32);\n            tableLayoutPanel.Name = \"tableLayoutPanel\";\n            tableLayoutPanel.Padding = new Padding(12);\n            tableLayoutPanel.RowCount = 1;\n            tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));\n            tableLayoutPanel.Size = new System.Drawing.Size(820, 442);\n            tableLayoutPanel.TabIndex = 4;\n            // \n            // groupBox1\n            // \n            groupBox1.Controls.Add(btnSponsor);\n            groupBox1.Controls.Add(txtStudio);\n            groupBox1.Controls.Add(txtHome);\n            groupBox1.Dock = DockStyle.Fill;\n            groupBox1.Location = new System.Drawing.Point(26, 26);\n            groupBox1.Margin = new Padding(14);\n            groupBox1.Name = \"groupBox1\";\n            groupBox1.Padding = new Padding(4, 3, 4, 3);\n            groupBox1.Size = new System.Drawing.Size(370, 390);\n            groupBox1.TabIndex = 0;\n            groupBox1.TabStop = false;\n            groupBox1.Text = \"Online Resources\";\n            // \n            // btnSponsor\n            // \n            btnSponsor.Image = JexusManager.Main.Properties.Resources.iis_16;\n            btnSponsor.Location = new System.Drawing.Point(24, 120);\n            btnSponsor.Name = \"btnSponsor\";\n            btnSponsor.Size = new System.Drawing.Size(200, 60);\n            btnSponsor.TabIndex = 3;\n            btnSponsor.Text = \"Support This Project\";\n            btnSponsor.TextImageRelation = TextImageRelation.TextAboveImage;\n            btnSponsor.UseVisualStyleBackColor = true;\n            btnSponsor.Click += btnSponsor_Click;\n            // \n            // txtStudio\n            // \n            txtStudio.AutoSize = true;\n            txtStudio.Location = new System.Drawing.Point(24, 76);\n            txtStudio.Margin = new Padding(4, 0, 4, 0);\n            txtStudio.Name = \"txtStudio\";\n            txtStudio.Size = new System.Drawing.Size(116, 15);\n            txtStudio.TabIndex = 4;\n            txtStudio.TabStop = true;\n            txtStudio.Text = \"LeXtudio Homepage\";\n            txtStudio.LinkClicked += txtStudio_LinkClicked;\n            // \n            // txtHome\n            // \n            txtHome.AutoSize = true;\n            txtHome.Location = new System.Drawing.Point(24, 33);\n            txtHome.Margin = new Padding(4, 0, 4, 0);\n            txtHome.Name = \"txtHome\";\n            txtHome.Size = new System.Drawing.Size(146, 15);\n            txtHome.TabIndex = 3;\n            txtHome.TabStop = true;\n            txtHome.Text = \"Jexus Manager Homepage\";\n            txtHome.LinkClicked += txtHome_LinkClicked;\n            // \n            // groupBox2\n            // \n            groupBox2.Controls.Add(lblManualUpdate);\n            groupBox2.Controls.Add(btnRetry);\n            groupBox2.Controls.Add(lblCurrentVersion);\n            groupBox2.Controls.Add(lblUpdateStatus);\n            groupBox2.Controls.Add(btnDownloadUpdate);\n            groupBox2.Dock = DockStyle.Fill;\n            groupBox2.Location = new System.Drawing.Point(424, 26);\n            groupBox2.Margin = new Padding(14);\n            groupBox2.Name = \"groupBox2\";\n            groupBox2.Padding = new Padding(4, 3, 4, 3);\n            groupBox2.Size = new System.Drawing.Size(370, 390);\n            groupBox2.TabIndex = 3;\n            groupBox2.TabStop = false;\n            groupBox2.Text = \"Updates\";\n            // \n            // lblManualUpdate\n            // \n            lblManualUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;\n            lblManualUpdate.Location = new System.Drawing.Point(24, 96);\n            lblManualUpdate.Name = \"lblManualUpdate\";\n            lblManualUpdate.Size = new System.Drawing.Size(328, 15);\n            lblManualUpdate.TabIndex = 4;\n            lblManualUpdate.TabStop = true;\n            lblManualUpdate.Text = \"https://github.com/jexuswebserver/JexusManager/releases\";\n            lblManualUpdate.Visible = false;\n            lblManualUpdate.LinkClicked += lblManualUpdate_LinkClicked;\n            // \n            // btnRetry\n            // \n            btnRetry.Anchor = AnchorStyles.Top | AnchorStyles.Right;\n            btnRetry.Location = new System.Drawing.Point(152, 135);\n            btnRetry.Name = \"btnRetry\";\n            btnRetry.Size = new System.Drawing.Size(200, 30);\n            btnRetry.TabIndex = 3;\n            btnRetry.Text = \"Retry\";\n            btnRetry.UseVisualStyleBackColor = true;\n            btnRetry.Visible = false;\n            btnRetry.Click += btnRetry_Click;\n            // \n            // lblCurrentVersion\n            // \n            lblCurrentVersion.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;\n            lblCurrentVersion.Location = new System.Drawing.Point(24, 33);\n            lblCurrentVersion.Name = \"lblCurrentVersion\";\n            lblCurrentVersion.Size = new System.Drawing.Size(328, 20);\n            lblCurrentVersion.TabIndex = 0;\n            lblCurrentVersion.Text = \"Current Version:\";\n            // \n            // lblUpdateStatus\n            // \n            lblUpdateStatus.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;\n            lblUpdateStatus.Location = new System.Drawing.Point(24, 63);\n            lblUpdateStatus.Name = \"lblUpdateStatus\";\n            lblUpdateStatus.Size = new System.Drawing.Size(328, 30);\n            lblUpdateStatus.TabIndex = 1;\n            lblUpdateStatus.Text = \"Checking for updates...\";\n            // \n            // btnDownloadUpdate\n            // \n            btnDownloadUpdate.Location = new System.Drawing.Point(24, 135);\n            btnDownloadUpdate.Name = \"btnDownloadUpdate\";\n            btnDownloadUpdate.Size = new System.Drawing.Size(140, 30);\n            btnDownloadUpdate.TabIndex = 2;\n            btnDownloadUpdate.Text = \"Download Update\";\n            btnDownloadUpdate.UseVisualStyleBackColor = true;\n            btnDownloadUpdate.Visible = false;\n            btnDownloadUpdate.Click += btnDownloadUpdate_Click;\n            // \n            // label3\n            // \n            label3.AutoSize = true;\n            label3.Location = new System.Drawing.Point(19, 32);\n            label3.Margin = new Padding(4, 0, 4, 0);\n            label3.Name = \"label3\";\n            label3.Size = new System.Drawing.Size(0, 15);\n            label3.TabIndex = 2;\n            // \n            // panel3\n            // \n            panel3.BackColor = System.Drawing.SystemColors.MenuHighlight;\n            panel3.Dock = DockStyle.Top;\n            panel3.Location = new System.Drawing.Point(0, 0);\n            panel3.Margin = new Padding(4, 3, 4, 3);\n            panel3.Name = \"panel3\";\n            panel3.Size = new System.Drawing.Size(862, 6);\n            panel3.TabIndex = 1;\n            // \n            // HomePage\n            // \n            AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);\n            AutoScaleMode = AutoScaleMode.Font;\n            Controls.Add(panel2);\n            Controls.Add(panel1);\n            Name = \"HomePage\";\n            Size = new System.Drawing.Size(862, 558);\n            panel1.ResumeLayout(false);\n            panel1.PerformLayout();\n            panel2.ResumeLayout(false);\n            panel2.PerformLayout();\n            tableLayoutPanel.ResumeLayout(false);\n            groupBox1.ResumeLayout(false);\n            groupBox1.PerformLayout();\n            groupBox2.ResumeLayout(false);\n            ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private Panel panel1;\n        private Label label2;\n        private Label label1;\n        private Panel panel2;\n        private GroupBox groupBox1;\n        private LinkLabel txtHome;\n        private Panel panel3;\n        private Label label3;\n        private LinkLabel txtStudio;\n        private Button btnSponsor;\n        private GroupBox groupBox2;\n        private Label lblCurrentVersion;\n        private Label lblUpdateStatus;\n        private Button btnDownloadUpdate;\n        private Button btnRetry;\n        private LinkLabel lblManualUpdate;\n        private TableLayoutPanel tableLayoutPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/HomePage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Diagnostics;\n    using System.Drawing;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class HomePage : ModulePage\n    {\n        private UpdateHelper.UpdateInfo _updateInfo;\n\n        public HomePage()\n        {\n            InitializeComponent();\n            LoadUpdateInfo();\n            // Configure ManualUpdate link label text wrapping\n            ConfigureManualUpdateLink();\n        }\n\n        private async void LoadUpdateInfo()\n        {\n            try\n            {\n                // Update UI to show checking state\n                lblUpdateStatus.Text = \"Checking for updates...\";\n                lblUpdateStatus.ForeColor = Color.Black;\n                btnDownloadUpdate.Visible = false;\n                btnRetry.Visible = false;\n\n                _updateInfo = await UpdateHelper.CheckForUpdate();\n                UpdateVersionDisplay();\n            }\n            catch (Exception ex)\n            {\n                lblUpdateStatus.Text = $\"Error checking for updates: {ex.Message}\";\n                lblUpdateStatus.ForeColor = Color.Red;\n                btnRetry.Visible = true;\n            }\n        }\n\n        private void UpdateVersionDisplay()\n        {\n            if (_updateInfo == null)\n                return;\n\n            // Always show current version\n            lblCurrentVersion.Text = $\"Current Version: {_updateInfo.CurrentVersion}\";\n\n            if (!string.IsNullOrEmpty(_updateInfo.ErrorMessage))\n            {\n                if (_updateInfo.ErrorType == UpdateHelper.UpdateErrorType.ConnectionError)\n                {\n                    // Create a more helpful message for connectivity issues\n                    lblUpdateStatus.Text = \"Cannot connect to GitHub. You can check for updates manually at:\";\n                    lblUpdateStatus.ForeColor = Color.Red;\n\n                    // Show link label for manual update check\n                    lblManualUpdate.Text = _updateInfo.ReleaseUrl;\n                    lblManualUpdate.Visible = true;\n                }\n                else\n                {\n                    lblUpdateStatus.Text = _updateInfo.ErrorMessage;\n                    lblUpdateStatus.ForeColor = Color.Red;\n                    lblManualUpdate.Visible = false;\n                }\n\n                btnDownloadUpdate.Visible = false;\n                btnRetry.Visible = true;\n                return;\n            }\n\n            // Reset manual update link visibility\n            lblManualUpdate.Visible = false;\n\n            if (_updateInfo.UpdateAvailable)\n            {\n                lblUpdateStatus.Text = $\"An update is available: {_updateInfo.LatestVersion}\";\n                lblUpdateStatus.ForeColor = Color.Green;\n                btnDownloadUpdate.Visible = true;\n                btnRetry.Visible = false;\n            }\n            else\n            {\n                lblUpdateStatus.Text = \"You are using the latest version.\";\n                lblUpdateStatus.ForeColor = Color.Green;\n                btnDownloadUpdate.Visible = false;\n                btnRetry.Visible = false;\n            }\n        }\n\n        private void txtHome_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://www.jexusmanager.com\");\n        }\n\n        protected override bool ShowTaskList => false;\n\n        private void txtStudio_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://halfblood.pro\");\n        }\n\n        private void btnSponsor_Click(object sender, System.EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://github.com/sponsors/lextm\");\n        }\n\n        private void btnDownloadUpdate_Click(object sender, EventArgs e)\n        {\n            if (_updateInfo != null && !string.IsNullOrEmpty(_updateInfo.ReleaseUrl))\n            {\n                DialogHelper.ProcessStart(_updateInfo.ReleaseUrl);\n            }\n        }\n\n        private void btnRetry_Click(object sender, EventArgs e)\n        {\n            // Hide the manual update link when retrying\n            lblManualUpdate.Visible = false;\n\n            // Reload update info\n            LoadUpdateInfo();\n        }\n\n        private void lblManualUpdate_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\n        {\n            if (!string.IsNullOrEmpty(_updateInfo?.ReleaseUrl))\n            {\n                DialogHelper.ProcessStart(_updateInfo.ReleaseUrl);\n            }\n        }\n\n        private void ConfigureManualUpdateLink()\n        {\n            // Enable text wrapping for the manual update link\n            lblManualUpdate.MaximumSize = new System.Drawing.Size(\n                groupBox2.Width - lblManualUpdate.Left - 30, 0);\n            lblManualUpdate.AutoSize = true;\n\n            // Ensure the link resizes when the container resizes\n            groupBox2.SizeChanged += (sender, e) =>\n            {\n                lblManualUpdate.MaximumSize = new System.Drawing.Size(\n                    groupBox2.Width - lblManualUpdate.Left - 30, 0);\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/HomePage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/IdentityDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    partial class IdentityDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.rbBuiltin = new System.Windows.Forms.RadioButton();\n            this.rbCustom = new System.Windows.Forms.RadioButton();\n            this.txtCustom = new System.Windows.Forms.TextBox();\n            this.cbBuiltin = new System.Windows.Forms.ComboBox();\n            this.btnSet = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // rbBuiltin\n            // \n            this.rbBuiltin.AutoSize = true;\n            this.rbBuiltin.Location = new System.Drawing.Point(12, 12);\n            this.rbBuiltin.Name = \"rbBuiltin\";\n            this.rbBuiltin.Size = new System.Drawing.Size(101, 17);\n            this.rbBuiltin.TabIndex = 0;\n            this.rbBuiltin.TabStop = true;\n            this.rbBuiltin.Text = \"Built-in account:\";\n            this.rbBuiltin.UseVisualStyleBackColor = true;\n            // \n            // rbCustom\n            // \n            this.rbCustom.AutoSize = true;\n            this.rbCustom.Location = new System.Drawing.Point(12, 74);\n            this.rbCustom.Name = \"rbCustom\";\n            this.rbCustom.Size = new System.Drawing.Size(105, 17);\n            this.rbCustom.TabIndex = 2;\n            this.rbCustom.TabStop = true;\n            this.rbCustom.Text = \"Custom account:\";\n            this.rbCustom.UseVisualStyleBackColor = true;\n            // \n            // txtCustom\n            // \n            this.txtCustom.Location = new System.Drawing.Point(26, 97);\n            this.txtCustom.Name = \"txtCustom\";\n            this.txtCustom.ReadOnly = true;\n            this.txtCustom.Size = new System.Drawing.Size(275, 20);\n            this.txtCustom.TabIndex = 3;\n            // \n            // cbBuiltin\n            // \n            this.cbBuiltin.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbBuiltin.FormattingEnabled = true;\n            this.cbBuiltin.Items.AddRange(new object[] {\n            \"LocalService\",\n            \"LocalSystem\",\n            \"NetworkService\",\n            \"ApplicationPoolIdentity\"});\n            this.cbBuiltin.Location = new System.Drawing.Point(26, 35);\n            this.cbBuiltin.Name = \"cbBuiltin\";\n            this.cbBuiltin.Size = new System.Drawing.Size(290, 21);\n            this.cbBuiltin.TabIndex = 4;\n            // \n            // btnSet\n            // \n            this.btnSet.Location = new System.Drawing.Point(307, 95);\n            this.btnSet.Name = \"btnSet\";\n            this.btnSet.Size = new System.Drawing.Size(95, 23);\n            this.btnSet.TabIndex = 5;\n            this.btnSet.Text = \"Set...\";\n            this.btnSet.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(307, 176);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 6;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(211, 176);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 7;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // IdentityDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(414, 211);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnSet);\n            this.Controls.Add(this.cbBuiltin);\n            this.Controls.Add(this.txtCustom);\n            this.Controls.Add(this.rbCustom);\n            this.Controls.Add(this.rbBuiltin);\n            this.Name = \"IdentityDialog\";\n            this.Text = \"Application Pool Identity\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.IdentityDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.RadioButton rbBuiltin;\n        private System.Windows.Forms.RadioButton rbCustom;\n        private System.Windows.Forms.TextBox txtCustom;\n        private System.Windows.Forms.ComboBox cbBuiltin;\n        private System.Windows.Forms.Button btnSet;\n        private System.Windows.Forms.Button btnCancel;\n        private System.Windows.Forms.Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/IdentityDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    public partial class IdentityDialog : DialogForm\n    {\n        public IdentityDialog(IServiceProvider serviceProvider, ApplicationPoolProcessModel element)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n            var password = string.Empty;\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (rbCustom.Checked)\n                    {\n                        element.IdentityType = ProcessModelIdentityType.SpecificUser;\n                        element.UserName = txtCustom.Text;\n                        element.Password = password;\n                    }\n\n                    if (rbBuiltin.Checked)\n                    {\n                        element.UserName = string.Empty;\n                        switch (cbBuiltin.SelectedIndex)\n                        {\n                            case 0:\n                                element.IdentityType = ProcessModelIdentityType.LocalService;\n                                break;\n                            case 1:\n                                element.IdentityType = ProcessModelIdentityType.LocalSystem;\n                                break;\n                            case 2:\n                                element.IdentityType = ProcessModelIdentityType.NetworkService;\n                                break;\n                            case 3:\n                                element.IdentityType = ProcessModelIdentityType.ApplicationPoolIdentity;\n                                break;\n                        }\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(rbBuiltin, \"CheckedChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(rbCustom, \"CheckedChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtCustom.Enabled = rbCustom.Checked;\n                    btnSet.Enabled = rbCustom.Checked;\n                    cbBuiltin.Enabled = rbBuiltin.Checked;\n                    btnOK.Enabled = (rbBuiltin.Checked && cbBuiltin.SelectedIndex > -1) || (rbCustom.Checked && txtCustom.Text.Length > 0);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnSet, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using var dialog = new CredentialsDialog(null, txtCustom.Text);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n\n                    txtCustom.Text = dialog.UserName;\n                    password = dialog.Password;\n                }));\n\n            rbBuiltin.Checked = element.IdentityType != ProcessModelIdentityType.SpecificUser;\n            rbCustom.Checked = !rbBuiltin.Checked;\n            if (element.IdentityType == ProcessModelIdentityType.SpecificUser)\n            {\n                txtCustom.Text = element.UserName;\n            }\n            else\n            {\n                switch (element.IdentityType)\n                {\n                    case ProcessModelIdentityType.LocalSystem:\n                        cbBuiltin.SelectedIndex = 1;\n                        break;\n                    case ProcessModelIdentityType.LocalService:\n                        cbBuiltin.SelectedIndex = 0;\n                        break;\n                    case ProcessModelIdentityType.NetworkService:\n                        cbBuiltin.SelectedIndex = 2;\n                        break;\n                    case ProcessModelIdentityType.ApplicationPoolIdentity:\n                        cbBuiltin.SelectedIndex = 3;\n                        break;\n                    default:\n                        throw new ArgumentOutOfRangeException();\n                }\n            }\n        }\n\n        private void IdentityDialogHelpButtonClicked(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210456#ApplicationPoolIdentity\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/IdentityDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/IdentityEditor.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.ComponentModel;\n    using System.Drawing.Design;\n    using System.Windows.Forms.Design;\n\n    using Microsoft.Web.Administration;\n\n    internal class IdentityEditor : UITypeEditor\n    {\n        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)\n        {\n            return UITypeEditorEditStyle.Modal;\n        }\n\n        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)\n        {\n            var editorService = provider?.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;\n            if (editorService != null)\n            {\n                ApplicationPoolProcessModel element = (ApplicationPoolProcessModel)value;\n                using IdentityDialog dialog = new IdentityDialog(provider, element);\n                editorService.ShowDialog(dialog);\n            }\n\n            return value;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/KestrelDiagDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    partial class KestrelDiagDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.toolStrip1 = new System.Windows.Forms.ToolStrip();\n            this.btnSave = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnGenerate = new System.Windows.Forms.ToolStripButton();\n            this.btnVerify = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnHelp = new System.Windows.Forms.ToolStripButton();\n            this.txtResult = new System.Windows.Forms.RichTextBox();\n            this.toolStrip1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // toolStrip1\n            // \n            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.btnSave,\n            this.toolStripSeparator1,\n            this.btnGenerate,\n            this.btnVerify,\n            this.toolStripSeparator2,\n            this.btnHelp});\n            this.toolStrip1.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip1.Name = \"toolStrip1\";\n            this.toolStrip1.Size = new System.Drawing.Size(590, 25);\n            this.toolStrip1.TabIndex = 0;\n            this.toolStrip1.Text = \"toolStrip1\";\n            // \n            // btnSave\n            // \n            this.btnSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnSave.Image = global::JexusManager.Main.Properties.Resources.save_16;\n            this.btnSave.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnSave.Name = \"btnSave\";\n            this.btnSave.Size = new System.Drawing.Size(23, 22);\n            this.btnSave.Text = \"Save\";\n            // \n            // toolStripSeparator1\n            // \n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\n            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnGenerate\n            // \n            this.btnGenerate.Image = global::JexusManager.Main.Properties.Resources.restart_16;\n            this.btnGenerate.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGenerate.Name = \"btnGenerate\";\n            this.btnGenerate.Size = new System.Drawing.Size(112, 22);\n            this.btnGenerate.Text = \"Generate Report\";\n            // \n            // btnVerify\n            // \n            this.btnVerify.Image = global::JexusManager.Main.Properties.Resources.certificates_16;\n            this.btnVerify.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnVerify.Name = \"btnVerify\";\n            this.btnVerify.Size = new System.Drawing.Size(86, 22);\n            this.btnVerify.Text = \"Verify Store\";\n            this.btnVerify.Visible = false;\n            // \n            // toolStripSeparator2\n            // \n            this.toolStripSeparator2.Name = \"toolStripSeparator2\";\n            this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnHelp\n            // \n            this.btnHelp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnHelp.Image = global::JexusManager.Main.Properties.Resources.help_16;\n            this.btnHelp.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnHelp.Name = \"btnHelp\";\n            this.btnHelp.Size = new System.Drawing.Size(23, 22);\n            this.btnHelp.Text = \"Help\";\n            this.btnHelp.Click += new System.EventHandler(this.BtnHelpClick);\n            // \n            // txtResult\n            // \n            this.txtResult.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.txtResult.Location = new System.Drawing.Point(0, 25);\n            this.txtResult.Name = \"txtResult\";\n            this.txtResult.ReadOnly = true;\n            this.txtResult.Size = new System.Drawing.Size(590, 376);\n            this.txtResult.TabIndex = 1;\n            this.txtResult.Text = \"\";\n            // \n            // KestrelDiagDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(590, 401);\n            this.Controls.Add(this.txtResult);\n            this.Controls.Add(this.toolStrip1);\n            this.Name = \"KestrelDiagDialog\";\n            this.Text = \"ASP.NET Core Diagnostics\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.SslDiagDialogHelpButtonClicked);\n            this.toolStrip1.ResumeLayout(false);\n            this.toolStrip1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.ToolStrip toolStrip1;\n        private System.Windows.Forms.ToolStripButton btnSave;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\n        private System.Windows.Forms.ToolStripButton btnGenerate;\n        private System.Windows.Forms.ToolStripButton btnVerify;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\n        private System.Windows.Forms.ToolStripButton btnHelp;\n        private System.Windows.Forms.RichTextBox txtResult;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/KestrelDiagDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Client.Win32;\nusing System;\n\nnamespace JexusManager.Features.Main\n{\n    using System.Drawing;\n    using System.IO;\n\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using Newtonsoft.Json.Linq;\n    using System.Linq;\n    using System.Diagnostics;\n    using JexusManager.Features.Modules;\n    using Microsoft.Web.Management.Client;\n    using JexusManager.Features.Handlers;\n    using System.Collections.Generic;\n    using EnumsNET;\n    using System.Runtime.InteropServices;\n    using JexusManager.Main.Properties;\n    using Newtonsoft.Json;\n    using System.Net;\n    using NuGet.Versioning;\n    using Microsoft.Extensions.Logging;\n\n    public partial class KestrelDiagDialog : DialogForm\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"KestrelDiagDialog\");\n        private static IDictionary<SemanticVersion, Tuple<Version, bool>> mappings = new Dictionary<SemanticVersion, Tuple<Version, bool>>();\n        private static IDictionary<string, string> fileCaches = new Dictionary<string, string>();\n\n        public KestrelDiagDialog(IServiceProvider provider, Application application)\n            : base(provider)\n        {\n            InitializeComponent();\n\n            using (var client = new WebClient())\n            {\n                string latest = null;\n                var hasException = false;\n                try\n                {\n                    var entry = \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/releases-index.json\";\n                    if (fileCaches.ContainsKey(entry))\n                    {\n                        latest = fileCaches[entry];\n                    }\n                    else\n                    {\n                        latest = client.DownloadString(entry);\n                        fileCaches.Add(entry, latest);\n                    }\n                }\n                catch (Exception)\n                {\n                    hasException = true;\n                }\n\n                JObject content;\n                if (string.IsNullOrWhiteSpace(latest) || hasException)\n                {\n                    // fallback to resources.\n                    using var bytes = new MemoryStream(Resources.releases_index);\n                    using var stream = new StreamReader(bytes);\n                    using var json = new JsonTextReader(stream);\n                    content = (JObject)JToken.ReadFrom(json);\n                }\n                else\n                {\n                    content = JObject.Parse(latest);\n                }\n\n                var releases = content[\"releases-index\"];\n                foreach (var release in releases)\n                {\n                    var link = release[\"releases.json\"].Value<string>();\n                    string info = null;\n                    hasException = false;\n                    try\n                    {\n                        if (fileCaches.ContainsKey(link))\n                        {\n                            info = fileCaches[link];\n                        }\n                        else\n                        {\n                            info = client.DownloadString(link);\n                            fileCaches.Add(link, info);\n                        }\n                    }\n                    catch (Exception)\n                    {\n                        hasException = true;\n                    }\n\n                    JObject details;\n                    if (string.IsNullOrWhiteSpace(info) || hasException)\n                    {\n                        // fallback to resources.\n                        var number = new Version(release.Value<string>(\"channel-version\"));\n                        var name = $\"{number.Major}.{number.Minor}-release\";\n                        var stored = Resources.ResourceManager.GetObject(name);\n                        if (stored == null)\n                        {\n                            // IMPORTANT: didn't have this version in resource.\n                            continue;\n                        }\n\n                        using var bytes = new MemoryStream((byte[])stored);\n                        using var stream = new StreamReader(bytes);\n                        using var json = new JsonTextReader(stream);\n                        details = (JObject)JToken.ReadFrom(json);\n                    }\n                    else\n                    {\n                        details = JObject.Parse(info);\n                    }\n\n                    foreach (var actual in details[\"releases\"])\n                    {\n                        var runtimeObject = actual[\"runtime\"];\n                        if (runtimeObject == null)\n                        {\n                            // skip no runtime release.\n                            continue;\n                        }\n\n                        try\n                        {\n                            if (!runtimeObject.HasValues)\n                            {\n                                continue;\n                            }\n\n                            var longVersion = runtimeObject.Value<string>(\"version\");\n                            if (longVersion == null)\n                            {\n                                continue;\n                            }\n\n                            var aspNetRuntime = actual[\"aspnetcore-runtime\"];\n                            if (aspNetRuntime == null || !aspNetRuntime.HasValues)\n                            {\n                                continue;\n                            }\n\n                            var aspNetCoreModuleObject = aspNetRuntime[\"version-aspnetcoremodule\"];\n                            if (aspNetCoreModuleObject == null || !aspNetCoreModuleObject.HasValues)\n                            {\n                                // skip no ASP.NET Core module release.\n                                continue;\n                            }\n\n                            var aspNetCoreModule = aspNetCoreModuleObject.Values<string>().First();\n                            var phase = release.Value<string>(\"support-phase\");\n                            var expired = phase == \"eol\";\n                            var runtime = SemanticVersion.Parse(longVersion);\n                            if (mappings.ContainsKey(runtime))\n                            {\n                                Console.WriteLine($\"{runtime}: new {aspNetCoreModule}: old {mappings[runtime].Item1}\");\n                            }\n                            else\n                            {\n                                mappings.Add(runtime,\n                                    new Tuple<Version, bool>(Version.Parse(aspNetCoreModule), expired));\n                            }\n                        }\n                        catch (Exception ex)\n                        {\n                            Console.WriteLine($\"JSON parsing failed. {ex}\");\n                        }\n                    }\n                }\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnGenerate, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtResult.Clear();\n                    try\n                    {\n                        Warn(\"IMPORTANT: This report might contain confidential information. Mask such before sharing with others.\");\n                        Warn(\"-----\");\n                        Debug($\"System Time: {DateTime.Now}\");\n                        Debug($\"Processor Architecture: {Environment.GetEnvironmentVariable(\"PROCESSOR_ARCHITECTURE\")}\");\n                        Debug($\"OS: {Environment.OSVersion}\");\n                        Debug($\"Server Type: {application.Server.Mode.AsString(EnumFormat.Description)}\");\n\n                        var root = application.VirtualDirectories[0].PhysicalPath.ExpandIisExpressEnvironmentVariables(application.GetActualExecutable());\n                        if (string.IsNullOrWhiteSpace(root))\n                        {\n                            Error(\"Invalid site root directory is detected.\");\n                            return;\n                        }\n\n                        // check ANCM.\n                        var appHost = application.Server.GetApplicationHostConfiguration();\n                        var definitions = new List<SectionDefinition>();\n                        appHost.RootSectionGroup.GetAllDefinitions(definitions);\n                        if (!definitions.Any(item => item.Path == \"system.webServer/aspNetCore\"))\n                        {\n                            Error($\"ASP.NET Core module is not installed as part of IIS. Please refer to https://docs.microsoft.com/aspnet/core/host-and-deploy/iis/index#install-the-net-core-hosting-bundle for more details.\");\n                            return;\n                        }\n\n                        var modules = new ModulesFeature((Module)provider);\n                        modules.Load();\n                        Debug($\"Scan {modules.Items.Count} installed module(s).\");\n                        var hasV1 = modules.Items.FirstOrDefault(item => item.Name == \"AspNetCoreModule\");\n                        var hasV2 = modules.Items.FirstOrDefault(item => item.Name == \"AspNetCoreModuleV2\");\n\n                        if (hasV1 == null && hasV2 == null)\n                        {\n                            Error($\"ASP.NET Core module is not installed as part of IIS. Please refer to https://docs.microsoft.com/aspnet/core/host-and-deploy/iis/index#install-the-net-core-hosting-bundle for more details.\");\n                            return;\n                        }\n\n                        Version ancmVersion = null;\n                        if (hasV2 != null)\n                        {\n                            var file = hasV2.GlobalModule.Image.ExpandIisExpressEnvironmentVariables(application.GetActualExecutable());\n                            if (File.Exists(file))\n                            {\n                                var info = FileVersionInfo.GetVersionInfo(file);\n                                ancmVersion = new Version(info.FileMajorPart, info.FileMinorPart, info.FileBuildPart, info.FilePrivatePart);\n                                Info($\"ASP.NET Core module version 2 is installed for .NET Core 3.1 and above: {file} ({info.FileVersion}).\");\n                            }\n                            else\n                            {\n                                Error(\"ASP.NET Core module version 2 is not installed properly.\");\n                            }\n                        }\n                        else\n                        {\n                            var file = hasV1.GlobalModule.Image.ExpandIisExpressEnvironmentVariables(application.GetActualExecutable());\n                            if (File.Exists(hasV1.GlobalModule.Image.ExpandIisExpressEnvironmentVariables(application.GetActualExecutable())))\n                            {\n                                var info = FileVersionInfo.GetVersionInfo(file);\n                                ancmVersion = new Version(info.FileMajorPart, info.FileMinorPart, info.FileBuildPart, info.FilePrivatePart);\n                                Info($\"ASP.NET Core module version 1 is installed for .NET Core 1.0-2.1: {file} ({info.FileVersion})\");\n                            }\n                            else\n                            {\n                                Error(\"ASP.NET Core module version 2 is not installed properly.\");\n                            }\n                        }\n\n                        // check handler.\n                        Debug(string.Empty);\n                        var handlers = new HandlersFeature((Module)provider);\n                        handlers.Load();\n                        var foundHandlers = new List<HandlersItem>();\n                        Debug($\"Scan {handlers.Items.Count} registered handler(s).\");\n                        foreach (var item in handlers.Items)\n                        {\n                            if (item.Modules == \"AspNetCoreModule\")\n                            {\n                                if (hasV1 != null)\n                                {\n                                    Info($\"* Found a valid ASP.NET Core handler as {{ Name: {item.Name}, Path: {item.Path}, State: {item.GetState(handlers.AccessPolicy)}, Module: {item.TypeString}, Entry Type: {item.Flag} }}.\");\n                                    foundHandlers.Add(item);\n                                }\n                                else\n                                {\n                                    Error($\"* Found an invalid ASP.NET Core handler as {{ Name: {item.Name}, Path: {item.Path}, State: {item.GetState(handlers.AccessPolicy)}, Module: {item.TypeString}, Entry Type: {item.Flag} }} because ASP.NET Core module version 1 is missing.\");\n                                }\n                            }\n                            else if (item.Modules == \"AspNetCoreModuleV2\")\n                            {\n                                if (hasV2 != null)\n                                {\n                                    Info($\"* Found a valid ASP.NET Core handler as {{ Name: {item.Name}, Path: {item.Path}, State: {item.GetState(handlers.AccessPolicy)}, Module: {item.TypeString}, Entry Type: {item.Flag} }}.\");\n                                    foundHandlers.Add(item);\n                                }\n                                else\n                                {\n                                    Error($\"* Found an invalid ASP.NET Core handler as {{ Name: {item.Name}, Path: {item.Path}, State: {item.GetState(handlers.AccessPolicy)}, Module: {item.TypeString}, Entry Type: {item.Flag} }} because ASP.NET Core module version 2 is missing.\");\n                                }\n                            }\n                        }\n\n                        if (foundHandlers.Count == 0)\n                        {\n                            Error($\"No valid ASP.NET Core handler is registered for this web site.\");\n                            Error($\"To run ASP.NET Core on IIS, please refer to https://docs.microsoft.com/aspnet/core/host-and-deploy/iis/index for more details.\");\n                            return;\n                        }\n\n                        var pool = application.GetPool();\n                        if (pool == null)\n                        {\n                            Error($\"The application pool '{application.ApplicationPoolName}' cannot be found.\");\n                            return;\n                        }\n\n                        var x86 = pool.Enable32BitAppOnWin64;\n\n                        // check VC++ 2015.\n                        var cppFile = Path.Combine(\n                            Environment.GetFolderPath(x86 ? Environment.SpecialFolder.SystemX86 : Environment.SpecialFolder.System),\n                            $\"msvcp140.dll\");\n                        if (File.Exists(cppFile))\n                        {\n                            var cpp = FileVersionInfo.GetVersionInfo(cppFile);\n                            if (cpp.FileMinorPart >= 0)\n                            {\n                                Info($\"  Visual C++ runtime is detected (expected: 14.0, detected: {cpp.FileVersion}): {cppFile}.\");\n                            }\n                            else\n                            {\n                                Error($\"  Visual C++ runtime 14.0 is not detected. Please install it following the tips on https://docs.microsoft.com/aspnet/core/host-and-deploy/iis/index#install-the-net-core-hosting-bundle.\");\n                            }\n                        }\n                        else\n                        {\n                            Error($\"  Visual C++ 14.0 runtime is not detected. Please install it following the tips on https://docs.microsoft.com/aspnet/core/host-and-deploy/iis/index#install-the-net-core-hosting-bundle.\");\n                        }\n\n                        Info($\"The application pool '{pool.Name}' is used.\");\n                        // check ASP.NET version.\n                        if (pool.ManagedRuntimeVersion != ApplicationPool.ManagedRuntimeVersionNone)\n                        {\n                            Error($\"The application pool '{pool.Name}' is using .NET CLR {pool.ManagedRuntimeVersion}. Please set it to 'No Managed Code'.\");\n                        }\n\n                        Info($\"Pool identity is {pool.ProcessModel}\");\n                        var user = application.Server.Mode == WorkingMode.IisExpress ? $\"{Environment.UserDomainName}\\\\{Environment.UserName}\" : pool.ProcessModel.ToString();\n                        Warn($\"Please ensure pool identity has read access to the content folder {application.PhysicalPath}.\");\n\n                        var poolBitness = x86 ? \"32\" : \"64\";\n                        Info($\"Pool bitness is {poolBitness} bit\");\n\n                        var config = application.GetWebConfiguration();\n                        var section = config.GetSection(\"system.webServer/aspNetCore\");\n                      \n                        // Check environment variables from ASP.NET Core configuration\n                        Debug(string.Empty);\n                        Debug(\"Checking ASP.NET Core environment variables from configuration:\");\n                        var envVars = section.GetCollection(\"environmentVariables\");\n                        if (envVars != null && envVars.Count > 0)\n                        {\n                            Debug($\"Found {envVars.Count} environment variable(s):\");\n                            Warn(\"If you experience 500.30 errors, please review the environment variables carefully as they might be a source.\");\n                            var warnings = new[]\n                            {\n                                \"DOTNET_ADDITIONAL_DEPS\",\n                                \"DOTNET_ROOT\",\n                                \"DOTNET_SHARED_STORE\",\n                                \"DOTNET_START_HOOKS\",\n                                \"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES\"\n                            };\n\n                            foreach (ConfigurationElement envVar in envVars)\n                            {\n                                var name = envVar[\"name\"] as string;\n                                var value = envVar[\"value\"] as string;\n\n                                if (warnings.Contains(name))\n                                {\n                                    Info($\"{name} is set in configuration to: {value}\");\n                                    Warn(\"This setting often causes ASP.NET Core startup crash in production (500.30), so please be careful when using it.\");\n                                }\n                            }\n                        }\n\n                        Debug(string.Empty);\n\n                        var processPath = (string)section[\"processPath\"];\n                        var arguments = (string)section[\"arguments\"];\n                        var hostingModel = (string)section[\"hostingModel\"];\n\n                        Debug($\"Scan aspNetCore section.\");\n                        Debug($\"    \\\"processPath\\\": {processPath}.\");\n                        Debug($\"    \\\"arguments\\\": {arguments}.\");\n                        Debug($\"    \\\"hostingModel\\\": {hostingModel}.\");\n\n                        if (string.Equals(\"InProcess\", hostingModel, StringComparison.OrdinalIgnoreCase))\n                        {\n                            Warn(\"In-process hosting model is detected. To avoid 500.xx errors, make sure that the bitness of published artifacts matches the application pool bitness\");\n\n                            if (string.Equals(\"dotnet\", processPath, StringComparison.OrdinalIgnoreCase))\n                            {\n                                Info(\"Framework dependent deployment is detected. Skip bitness check.\");\n                            }\n                            else\n                            {\n                                Info(\"Self-contained deployment is detected. Check bitness.\");\n                                var path = processPath;\n                                if (!File.Exists(path))\n                                {\n                                    path = Path.Combine(application.PhysicalPath, path);\n                                }\n\n                                if (!File.Exists(path))\n                                {\n                                    Error($\"Cannot locate executable: {path}\");\n                                }\n                                else\n                                {\n                                    var bit32 = DialogHelper.GetImageArchitecture(path);\n                                    if (bit32 == x86)\n                                    {\n                                        Info($\"Published artifacts bitness matches.\");\n                                    }\n                                    else\n                                    {\n                                        var artifactBitness = bit32 ? \"32\" : \"64\";\n                                        Error($\"Published artifacts bitness is {artifactBitness} bit. Mismatch detected.\");\n                                    }\n                                }\n                            }\n                        }\n\n                        if (string.IsNullOrWhiteSpace(processPath) && string.IsNullOrWhiteSpace(arguments))\n                        {\n                            Warn(\"There is no ASP.NET Core web app to analyze.\");\n                        }\n                        else if (string.Equals(processPath, \"%LAUNCHER_PATH%\", StringComparison.OrdinalIgnoreCase)\n                            || string.Equals(arguments, \"%LAUNCHER_ARGS%\", StringComparison.OrdinalIgnoreCase))\n                        {\n                            Warn(\"Value of processPath or arguments is placeholder used by Visual Studio. This site can only be run from within Visual Studio.\");\n                        }\n                        else\n                        {\n                            try\n                            {\n                                var fileName = Path.GetFileName(processPath);\n                                string executable;\n                                if (string.Equals(fileName, \"dotnet.exe\", StringComparison.OrdinalIgnoreCase) || string.Equals(fileName, \"dotnet\", StringComparison.OrdinalIgnoreCase))\n                                {\n                                    if (arguments.StartsWith(\"exec \", StringComparison.OrdinalIgnoreCase))\n                                    {\n                                        arguments = arguments.Substring(\"exec \".Length).Replace(\"\\\"\", null);\n                                    }\n\n                                    executable = Path.GetFileNameWithoutExtension(arguments);\n                                }\n                                else\n                                {\n                                    executable = Path.GetFileNameWithoutExtension(processPath);\n                                }\n\n                                var runtime = Path.Combine(root, executable + \".runtimeconfig.json\");\n                                if (File.Exists(runtime))\n                                {\n                                    Debug($\"Found runtime config file {runtime}.\");\n                                    var reader = JObject.Parse(File.ReadAllText(runtime));\n                                    string actual = null;\n                                    var framework = reader[\"runtimeOptions\"][\"framework\"];\n                                    if (framework != null)\n                                    {\n                                        actual = framework[\"version\"].Value<string>();\n                                        Info($\"Runtime is {actual}\");\n                                    }\n                                    else\n                                    {\n                                        var frameworks = reader[\"runtimeOptions\"][\"includedFrameworks\"];\n                                        if (frameworks == null)\n                                        {\n                                            frameworks = reader[\"runtimeOptions\"][\"frameworks\"]; // .NET 6\n                                        }\n\n                                        if (frameworks != null)\n                                        {\n                                            foreach (var item in frameworks.Children())\n                                            {\n                                                if (item[\"name\"].Value<string>() == \"Microsoft.AspNetCore.App\")\n                                                {\n                                                    actual = item[\"version\"].Value<string>();\n                                                    Info($\"Runtime is {actual}.\");\n                                                }\n                                            }\n                                        }\n                                    }\n                                    if (actual != null && SemanticVersion.TryParse(actual, out SemanticVersion aspNetCoreVersion) && aspNetCoreVersion >= SemanticVersion.Parse(\"3.1.0\"))\n                                    {\n                                        if (aspNetCoreVersion.IsPrerelease)\n                                        {\n                                            Warn(\"This is a prerelease runtime version.\");\n                                        }\n\n                                        if (mappings.ContainsKey(aspNetCoreVersion))\n                                        {\n                                            var expired = mappings[aspNetCoreVersion].Item2;\n                                            if (expired)\n                                            {\n                                                Error($\".NET Core version {aspNetCoreVersion} is end-of-life. Please upgrade to a supported version.\");\n                                            }\n\n                                            var minimal = mappings[aspNetCoreVersion].Item1;\n                                            if (ancmVersion == null || ancmVersion < minimal)\n                                            {\n                                                Error($\"Runtime {aspNetCoreVersion} does not work with ASP.NET Core module version {ancmVersion}. Minimal version is {minimal}.\");\n                                            }\n\n                                            if (ancmVersion > minimal && (ancmVersion.Major != minimal.Major || ancmVersion.Minor != minimal.Minor))\n                                            {\n                                                Warn($\"Runtime {aspNetCoreVersion} requires ASP.NET Core module version {minimal}. Installed version {ancmVersion} might not be compatible.\");\n                                            }\n                                        }\n                                    }\n                                    else\n                                    {\n                                        Warn($\"Couldn't detect runtime version {actual}. Please refer to pages such as https://dotnet.microsoft.com/download/dotnet-core/3.1 to verify that ASP.NET Core version {ancmVersion} matches the runtime of the web app.\");\n                                    }\n                                }\n                                else\n                                {\n                                    Error($\"Cannot locate runtime config file {runtime}.\");\n                                }\n                            }\n                            catch (Exception ex)\n                            {\n                                Error(\"Cannot analyze ASP.NET Core web app successfully.\");\n                                _logger.LogError(ex, \"Error loading web.config of source web app\");\n                            }\n                        }\n                    }\n                    catch (COMException ex)\n                    {\n                        Error(\"A generic exception occurred.\");\n                        Error($\"To run ASP.NET Core on IIS, please refer to https://docs.microsoft.com/aspnet/core/host-and-deploy/iis/index for more details.\");\n                        Debug(ex.ToString());\n                        _logger.LogDebug(ex.ToString());\n                    }\n                    catch (Exception ex)\n                    {\n                        Debug(ex.ToString());\n                        _logger.LogDebug(ex.ToString());\n                    }\n                }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnSave, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     var fileName = DialogHelper.ShowSaveFileDialog(null, \"Text Files|*.txt|All Files|*.*\", application.GetActualExecutable());\n                     if (string.IsNullOrEmpty(fileName))\n                     {\n                         return;\n                     }\n\n                     File.WriteAllText(fileName, txtResult.Text);\n                 }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnVerify, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     txtResult.Clear();\n                 }));\n        }\n\n        private void Debug(string text)\n        {\n            txtResult.AppendText(text);\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Error(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Red;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Warn(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Green;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Info(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Blue;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void BtnHelpClick(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://docs.lextudio.com/jexusmanager/tutorials/ancm-diagnostics.html\");\n        }\n\n        private void SslDiagDialogHelpButtonClicked(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            BtnHelpClick(null, EventArgs.Empty);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/KestrelDiagDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/MainModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using Microsoft.Web.Management.Client;\n\n    internal class MainModule : Module\n    {\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ModulePageInfoListViewItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager\n{\n    using System;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client;\n\n    public class ModulePageInfoListViewItem : ListViewItem\n    {\n        private readonly ModulePageInfo _info;\n\n        public ModulePageInfoListViewItem(ModulePageInfo info)\n        {\n            _info = info;\n            Text = info.Title;\n            ToolTipText = info.Description;\n        }\n\n        public IModulePage Page\n        {\n            get\n            {\n                var page = (IModulePage)Activator.CreateInstance(_info.PageType);\n                page.Initialize(_info.AssociatedModule, _info, null);\n                return page;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/PhpDiagDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    partial class PhpDiagDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.toolStrip1 = new System.Windows.Forms.ToolStrip();\n            this.btnSave = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnGenerate = new System.Windows.Forms.ToolStripButton();\n            this.btnVerify = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnHelp = new System.Windows.Forms.ToolStripButton();\n            this.txtResult = new System.Windows.Forms.RichTextBox();\n            this.toolStrip1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // toolStrip1\n            // \n            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.btnSave,\n            this.toolStripSeparator1,\n            this.btnGenerate,\n            this.btnVerify,\n            this.toolStripSeparator2,\n            this.btnHelp});\n            this.toolStrip1.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip1.Name = \"toolStrip1\";\n            this.toolStrip1.Size = new System.Drawing.Size(590, 25);\n            this.toolStrip1.TabIndex = 0;\n            this.toolStrip1.Text = \"toolStrip1\";\n            // \n            // btnSave\n            // \n            this.btnSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnSave.Image = global::JexusManager.Main.Properties.Resources.save_16;\n            this.btnSave.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnSave.Name = \"btnSave\";\n            this.btnSave.Size = new System.Drawing.Size(23, 22);\n            this.btnSave.Text = \"Save\";\n            // \n            // toolStripSeparator1\n            // \n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\n            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnGenerate\n            // \n            this.btnGenerate.Image = global::JexusManager.Main.Properties.Resources.restart_16;\n            this.btnGenerate.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGenerate.Name = \"btnGenerate\";\n            this.btnGenerate.Size = new System.Drawing.Size(112, 22);\n            this.btnGenerate.Text = \"Generate Report\";\n            // \n            // btnVerify\n            // \n            this.btnVerify.Image = global::JexusManager.Main.Properties.Resources.certificates_16;\n            this.btnVerify.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnVerify.Name = \"btnVerify\";\n            this.btnVerify.Size = new System.Drawing.Size(86, 22);\n            this.btnVerify.Text = \"Verify Store\";\n            this.btnVerify.Visible = false;\n            // \n            // toolStripSeparator2\n            // \n            this.toolStripSeparator2.Name = \"toolStripSeparator2\";\n            this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnHelp\n            // \n            this.btnHelp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnHelp.Image = global::JexusManager.Main.Properties.Resources.help_16;\n            this.btnHelp.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnHelp.Name = \"btnHelp\";\n            this.btnHelp.Size = new System.Drawing.Size(23, 22);\n            this.btnHelp.Text = \"Help\";\n            this.btnHelp.Click += new System.EventHandler(this.BtnHelpClick);\n            // \n            // txtResult\n            // \n            this.txtResult.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.txtResult.Location = new System.Drawing.Point(0, 25);\n            this.txtResult.Name = \"txtResult\";\n            this.txtResult.ReadOnly = true;\n            this.txtResult.Size = new System.Drawing.Size(590, 376);\n            this.txtResult.TabIndex = 1;\n            this.txtResult.Text = \"\";\n            // \n            // PhpDiagDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(590, 401);\n            this.Controls.Add(this.txtResult);\n            this.Controls.Add(this.toolStrip1);\n            this.Name = \"PhpDiagDialog\";\n            this.Text = \"PHP Diagnostics\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.PhpDiagDialogHelpButtonClicked);\n            this.toolStrip1.ResumeLayout(false);\n            this.toolStrip1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.ToolStrip toolStrip1;\n        private System.Windows.Forms.ToolStripButton btnSave;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\n        private System.Windows.Forms.ToolStripButton btnGenerate;\n        private System.Windows.Forms.ToolStripButton btnVerify;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\n        private System.Windows.Forms.ToolStripButton btnHelp;\n        private System.Windows.Forms.RichTextBox txtResult;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/PhpDiagDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Client.Win32;\nusing System;\nusing System.Linq;\n\nnamespace JexusManager.Features.Main\n{\n    using System.Drawing;\n    using System.IO;\n\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Collections.Generic;\n    using Microsoft.Web.Management.Client;\n    using JexusManager.Features.FastCgi;\n    using JexusManager.Features.Handlers;\n    using System.Diagnostics;\n    using IniParser.Parser;\n    using EnumsNET;\n    using JexusManager.Features.Modules;\n    using System.Windows.Forms;\n    using Microsoft.Extensions.Logging;\n    using JexusManager;\n\n    public partial class PhpDiagDialog : DialogForm\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"PhpDiagDialog\");\n\n        private struct PhpVersion\n        {\n            public PhpVersion(string version, DateTime expiringDate, Version cppVersion)\n            {\n                Version = version;\n                ExpiringDate = expiringDate;\n                CppVersion = cppVersion;\n            }\n\n            public string Version { get; set; }\n            public DateTime ExpiringDate { get; set; }\n            public Version CppVersion { get; set; }\n        }\n\n        public PhpDiagDialog(IServiceProvider provider, ServerManager server)\n            : base(provider)\n        {\n            InitializeComponent();\n\n            var knownPhpVersions = new Dictionary<string, PhpVersion>\n            {\n                { \"5.6\", new PhpVersion(\"5.6\", new DateTime(2018, 12, 31), new Version(11, 0)) },\n                { \"7.0\", new PhpVersion(\"7.0\", new DateTime(2018, 12, 3), new Version(14, 0)) },\n                { \"7.1\", new PhpVersion(\"7.1\", new DateTime(2019, 12, 1), new Version(14, 0)) },\n                { \"7.2\", new PhpVersion(\"7.2\", new DateTime(2020, 11, 30), new Version(14, 11)) },\n                { \"7.3\", new PhpVersion(\"7.3\", new DateTime(2021, 12, 6), new Version(14, 11)) },\n                { \"7.4\", new PhpVersion(\"7.4\", new DateTime(2022, 11, 28), new Version(14, 21)) },\n                { \"8.0\", new PhpVersion(\"8.0\", new DateTime(2023, 11, 26), new Version(14, 21)) },\n                { \"8.1\", new PhpVersion(\"8.1\", new DateTime(2024, 11, 25), new Version(14, 21)) }\n            };\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnGenerate, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtResult.Clear();\n                    AnalyzePhpConfig(server, (Module)provider, knownPhpVersions);\n                }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnSave, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     var fileName = DialogHelper.ShowSaveFileDialog(null, \"Text Files|*.txt|All Files|*.*\", null);\n                     if (string.IsNullOrEmpty(fileName))\n                     {\n                         return;\n                     }\n\n                     File.WriteAllText(fileName, txtResult.Text);\n                 }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnVerify, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     txtResult.Clear();\n                 }));\n        }\n\n        private void Debug(string text)\n        {\n            txtResult.AppendText(text);\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Error(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Red;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Warn(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Green;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Info(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Blue;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void BtnHelpClick(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://docs.jexusmanager.com/tutorials/php-diagnostics.html\");\n        }\n\n        private void PhpDiagDialogHelpButtonClicked(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            BtnHelpClick(null, EventArgs.Empty);\n        }\n\n        private void AnalyzePhpConfig(ServerManager server, Module module, Dictionary<string, PhpVersion> knownPhpVersions)\n        {\n            try\n            {\n                Warn(\"IMPORTANT: This report might contain confidential information. Mask such before sharing with others.\");\n                Warn(\"-----\");\n                Debug($\"System Time: {DateTime.Now}\");\n                Debug($\"Processor Architecture: {Environment.GetEnvironmentVariable(\"PROCESSOR_ARCHITECTURE\")}\");\n                Debug($\"OS: {Environment.OSVersion}\");\n                Debug($\"Server Type: {server.Mode.AsString(EnumFormat.Description)}\");\n                Debug(string.Empty);\n\n                var modules = new ModulesFeature(module);\n                modules.Load();\n                Debug($\"Scan {modules.Items.Count} installed module(s).\");\n                if (modules.Items.All(item => item.Name != \"FastCgiModule\"))\n                {\n                    Error($\"FastCGI module is not installed as part of IIS. Please refer to https://learn.microsoft.com/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh994590(v=ws.11) for more details.\");\n                    return;\n                }\n                else\n                {\n                    Debug(\"FastCGI module is installed.\");\n                }\n\n                Debug(string.Empty);\n                var handlers = new HandlersFeature(module);\n                handlers.Load();\n                var foundPhpHandler = new List<HandlersItem>();\n                Debug($\"Scan {handlers.Items.Count} registered handler(s).\");\n                foreach (var item in handlers.Items)\n                {\n                    if (item.Modules == \"FastCgiModule\")\n                    {\n                        if (File.Exists(item.ScriptProcessor))\n                        {\n                            Debug($\"* Found a valid FastCGI handler as {{ Name: {item.Name}, Path: {item.Path}, State: {item.GetState(handlers.AccessPolicy)}, Module: {item.TypeString}, Entry Type: {item.Flag} }}. File path: {item.ScriptProcessor}.\");\n                            foundPhpHandler.Add(item);\n                        }\n                        else\n                        {\n                            Error($\"* Found an invalid FastCGI handler as {{Name: {item.Name}, Path: {item.Path}, State: {item.GetState(handlers.AccessPolicy)}, Module: {item.TypeString}, Entry Type: {item.Flag} }} because file path does not exist: {item.ScriptProcessor}.\");\n                        }\n                    }\n                }\n\n                if (foundPhpHandler.Count == 0)\n                {\n                    Error($\"No valid FastCGI handler is registered for this web site.\");\n                    Error($\"To run PHP on IIS, please refer to https://learn.microsoft.com/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh994590(v=ws.11) for more details.\");\n                    return;\n                }\n\n                Debug(string.Empty);\n                var fastCgiFeature = new FastCgiFeature(module);\n                fastCgiFeature.Load();\n                Debug($\"Scan {fastCgiFeature.Items.Count} registered FastCGI application(s).\");\n                var foundPhp = new List<FastCgiItem>();\n                foreach (var item in fastCgiFeature.Items)\n                {\n                    var combination = string.IsNullOrWhiteSpace(item.Arguments) ? item.Path : item.Path + '|' + item.Arguments;\n                    foreach (var handler in foundPhpHandler)\n                    {\n                        if (string.Equals(combination, handler.ScriptProcessor, StringComparison.OrdinalIgnoreCase))\n                        {\n                            Debug($\"* Found FastCGI application registered as {{ Full path: {item.Path}, Arguments: {item.Arguments} }}.\");\n                            foundPhp.Add(item);\n                            break;\n                        }\n                    }\n                }\n\n                if (foundPhp.Count == 0)\n                {\n                    Error($\"No suitable FastCGI appilcation is registered on this server.\");\n                    Error($\"To run PHP on IIS, please refer to https://learn.microsoft.com/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh994590(v=ws.11) for more details.\");\n                    return;\n                }\n\n                Debug(Environment.NewLine);\n                Debug($\"Verify web stack installation versions.\");\n                foreach (var item in foundPhp)\n                {\n                    var path = item.Path;\n                    if (path.TrimEnd('\"').EndsWith(\"php-cgi.exe\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        // PHP\n                        var info = FileVersionInfo.GetVersionInfo(path);\n                        var version = $\"{info.FileMajorPart}.{info.FileMinorPart}\";\n                        if (knownPhpVersions.ContainsKey(version))\n                        {\n                            var matched = knownPhpVersions[version];\n                            if (matched.ExpiringDate <= DateTime.Now)\n                            {\n                                Error($\"* PHP {info.FileVersion} ({path}) is unknown or obsolete. Please refer to http://php.net/supported-versions.php for more details.\");\n                            }\n                            else if (matched.ExpiringDate > DateTime.Now && (matched.ExpiringDate - DateTime.Now).TotalDays < 180)\n                            {\n                                Warn($\"* PHP {version} ({path}) will soon be obsolete. Please refer to http://php.net/supported-versions.php for more details.\");\n                            }\n                            else\n                            {\n                                Debug($\"* PHP {version} ({path}) is supported.\");\n                            }\n\n                            var x86 = DialogHelper.GetImageArchitecture(path);\n                            var cppFile = Path.Combine(\n                                Environment.GetFolderPath(x86 ? Environment.SpecialFolder.SystemX86 : Environment.SpecialFolder.System),\n                                $\"msvcp{matched.CppVersion.Major}0.dll\");\n                            if (File.Exists(cppFile))\n                            {\n                                var cpp = FileVersionInfo.GetVersionInfo(cppFile);\n                                if (cpp.FileMinorPart >= matched.CppVersion.Minor)\n                                {\n                                    Debug($\"  Visual C++ runtime is detected (expected: {matched.CppVersion}, detected: {cpp.FileVersion}): {cppFile}.\");\n                                }\n                                else\n                                {\n                                    Error($\"  Visual C++ runtime {matched.CppVersion} is not detected. Please install it following the tips on https://windows.php.net/download/.\");\n                                }\n                            }\n                            else\n                            {\n                                Error($\"  Visual C++ {matched.CppVersion} runtime is not detected. Please install it following the tips on https://windows.php.net/download/.\");\n                            }\n                        }\n                        else\n                        {\n                            Error($\"* PHP {info.FileVersion} ({path}) is unknown or obsolete. Please refer to http://php.net/supported-versions.php for more details.\");\n                        }\n                    }\n                }\n\n                Debug(string.Empty);\n                var systemPath = Environment.GetEnvironmentVariable(\"Path\");\n                Debug($\"Windows Path environment variable: {systemPath}.\");\n                Debug(string.Empty);\n                string[] paths = systemPath.Split(new char[1] { Path.PathSeparator });\n                foreach (var item in foundPhp)\n                {\n                    var path = item.Path;\n                    if (path.TrimEnd('\"').EndsWith(\"php-cgi.exe\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        var rootFolder = Path.GetDirectoryName(path);\n                        Debug($\"[{rootFolder}]\");\n                        if (!Directory.Exists(rootFolder))\n                        {\n                            Error(\"Invalid root folder is found. Skip.\");\n                            continue;\n                        }\n\n                        var config = Path.Combine(rootFolder, \"php.ini\");\n                        if (File.Exists(config))\n                        {\n                            Info($\"Found PHP config file {config}.\");\n                            var parser = new ConcatenateDuplicatedKeysIniDataParser();\n                            parser.Configuration.ConcatenateSeparator = \" \";\n                            var data = parser.Parse(File.ReadAllText(config));\n                            var extensionFolder = data[\"PHP\"][\"extension_dir\"];\n                            if (extensionFolder == null)\n                            {\n                                extensionFolder = \"\\\"ext\\\"\";\n                            }\n\n                            extensionFolder = extensionFolder.Trim('\"');\n\n                            var fullPath = Path.Combine(rootFolder, extensionFolder);\n                            Info($\"PHP loadable extension folder: {fullPath}\");\n                            var extesionNames = data[\"PHP\"][\"extension\"];\n                            if (extesionNames == null)\n                            {\n                                Info(\"No extension to verify.\");\n                            }\n                            else\n                            {\n                                var extensions = extesionNames.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);\n                                Info($\"Found {extensions.Length} extension(s) to verify.\");\n                                var noError = true;\n                                foreach (var name in extensions)\n                                {\n                                    var fileName = Path.Combine(fullPath, $\"php_{name}.dll\");\n                                    if (!File.Exists(fileName))\n                                    {\n                                        Error($\"* Extension {name} is listed, but on disk the file cannot be found {fileName}\");\n                                        noError = false;\n                                    }\n                                }\n\n                                if (noError)\n                                {\n                                    Info(\"All extension(s) listed can be found on disk.\");\n                                }\n                            }\n                        }\n                        else\n                        {\n                            Warn($\"Cannot find PHP config file {config}. Default settings are used.\");\n                        }\n\n                        var matched = false;\n                        foreach (var system in paths)\n                        {\n                            if (string.Equals(rootFolder, system, StringComparison.OrdinalIgnoreCase))\n                            {\n                                matched = true;\n                                break;\n                            }\n                        }\n\n                        if (matched)\n                        {\n                            Debug($\"PHP installation has been added to Windows Path environment variable.\");\n                        }\n                        else\n                        {\n                            Error($\"PHP installation is not yet added to Windows Path environment variable. Please refer to https://learn.microsoft.com/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh994590(v=ws.11) for more details.\");\n                            Warn($\"Restart Jexus Manager and rerun PHP Diagnostics after changing Windows Path environment variable.\");\n                        }\n\n                        Debug(string.Empty);\n\n                        // TODO: verify other configuration in php.info.\n                    }\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error analyzing PHP configuration\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/PhpDiagDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/PhysicalDirectoryFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Binding = Microsoft.Web.Administration.Binding;\n    using Module = Microsoft.Web.Management.Client.Module;\n    using System.Linq;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class PhysicalDirectoryFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly PhysicalDirectoryFeature _owner;\n\n            public FeatureTaskList(PhysicalDirectoryFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Explore\", \"Explore\", string.Empty, string.Empty, Resources.explore_16).SetUsage());\n                result.Add(new MethodTaskItem(\"Permissions\", \"Edit Permissions...\", string.Empty).SetUsage());\n\n                if (_owner.SiteBindings.Any(item => item.CanBrowse))\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    var manageGroup = new GroupTaskItem(string.Empty, \"Manage Folder\", string.Empty, true);\n                    result.Add(manageGroup);\n                    manageGroup.Items.Add(new TextTaskItem(\"Browse Folder\", string.Empty, true));\n                    foreach (Binding binding in _owner.SiteBindings)\n                    {\n                        if (binding.CanBrowse)\n                        {\n                            var uri = binding.ToUri();\n                            manageGroup.Items.Add(\n                                new MethodTaskItem(\"Browse\", $\"Browse {binding.ToShortString()}\",\n                                    string.Empty, string.Empty,\n                                    Resources.browse_16, uri).SetUsage());\n                        }\n                    }\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Explore()\n            {\n                _owner.Explore();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Permissions()\n            {\n                _owner.Permissions();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Browse(object uri)\n            {\n                _owner.Browse(uri);\n            }\n        }\n\n        public PhysicalDirectoryFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            OnPhysicalDirectorySettingsSaved();\n        }\n\n        protected void OnPhysicalDirectorySettingsSaved()\n        {\n            if (PhysicalDirectorySettingsUpdated != null)\n            {\n                PhysicalDirectorySettingsUpdated.Invoke();\n            }\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210463\");\n            return false;\n        }\n\n        private void Browse(object uri)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n\n            // IMPORTANT: help users launch IIS Express instance.\n            var site = service.PhysicalDirectory.Application.Site;\n            if (site.Server.Mode == WorkingMode.IisExpress && site.State != ObjectState.Started)\n            {\n                var message = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result = message.ShowMessage(\n                    \"This website is not yet running. Do you want to start it now?\",\n                    \"Question\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n\n                try\n                {\n                    service.Form.BeginProgress();\n                    DialogHelper.SiteStart(site, service.Form);\n                }\n                catch (Exception ex)\n                {\n                    message.ShowMessage(ex.Message, Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                }\n                finally\n                {\n                    service.Form.EndProgress();\n                }\n            }\n\n            DialogHelper.ProcessStart(uri + service.PhysicalDirectory.PathToSite);\n        }\n\n        private void Permissions()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            NativeMethods.ShowFileProperties(service.PhysicalDirectory.FullName);\n        }\n\n        private void Explore()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            DialogHelper.Explore(service.PhysicalDirectory.FullName.ExpandIisExpressEnvironmentVariables(service.PhysicalDirectory.Application.GetActualExecutable()));\n        }\n\n        public IEnumerable<Binding> SiteBindings\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                var site = service.PhysicalDirectory.Application.Site;\n                return site.Bindings;\n            }\n        }\n\n        public PhysicalDirectorySettingsSavedEventHandler PhysicalDirectorySettingsUpdated { get; set; }\n        public string Description { get; private set; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public string Name { get; private set; }\n    }\n\n    public delegate void PhysicalDirectorySettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/PhysicalDirectoryPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class PhysicalDirectoryPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.txtTitle = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbFilter = new System.Windows.Forms.ToolStripComboBox();\n            this.btnGo = new System.Windows.Forms.ToolStripSplitButton();\n            this.protocolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.btnShowAll = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.btnView = new System.Windows.Forms.ToolStripSplitButton();\n            this.detailsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.iconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.tilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.listToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // listView1\n            // \n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.LargeImageList = this.imageList1;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.ShowItemToolTips = true;\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.Sorting = System.Windows.Forms.SortOrder.Ascending;\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseDoubleClick);\n            // \n            // imageList1\n            // \n            this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;\n            this.imageList1.ImageSize = new System.Drawing.Size(36, 36);\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.txtTitle);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 1;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // txtTitle\n            // \n            this.txtTitle.AutoSize = true;\n            this.txtTitle.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.txtTitle.Location = new System.Drawing.Point(48, 10);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(62, 24);\n            this.txtTitle.TabIndex = 8;\n            this.txtTitle.Text = \"Home\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 7;\n            this.pictureBox1.TabStop = false;\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbFilter,\n            this.btnGo,\n            this.btnShowAll,\n            this.toolStripSeparator4,\n            this.toolStripLabel3,\n            this.cbGroup,\n            this.btnView});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(36, 22);\n            this.toolStripLabel2.Text = \"Filter:\";\n            // \n            // cbFilter\n            // \n            this.cbFilter.Name = \"cbFilter\";\n            this.cbFilter.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnGo\n            // \n            this.btnGo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.protocolToolStripMenuItem});\n            this.btnGo.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGo.Name = \"btnGo\";\n            this.btnGo.Size = new System.Drawing.Size(54, 22);\n            this.btnGo.Text = \"Go\";\n            this.btnGo.ToolTipText = \"Go\";\n            // \n            // protocolToolStripMenuItem\n            // \n            this.protocolToolStripMenuItem.Name = \"protocolToolStripMenuItem\";\n            this.protocolToolStripMenuItem.Size = new System.Drawing.Size(88, 22);\n            this.protocolToolStripMenuItem.Text = \"All\";\n            // \n            // btnShowAll\n            // \n            this.btnShowAll.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnShowAll.Name = \"btnShowAll\";\n            this.btnShowAll.Size = new System.Drawing.Size(73, 22);\n            this.btnShowAll.Text = \"Show All\";\n            // \n            // toolStripSeparator4\n            // \n            this.toolStripSeparator4.Name = \"toolStripSeparator4\";\n            this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25);\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Category\",\n            \"Area\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnView\n            // \n            this.btnView.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnView.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.detailsToolStripMenuItem,\n            this.iconsToolStripMenuItem,\n            this.tilesToolStripMenuItem,\n            this.listToolStripMenuItem});\n            this.btnView.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnView.Name = \"btnView\";\n            this.btnView.Size = new System.Drawing.Size(32, 22);\n            this.btnView.Text = \"toolStripButton1\";\n            // \n            // detailsToolStripMenuItem\n            // \n            this.detailsToolStripMenuItem.Name = \"detailsToolStripMenuItem\";\n            this.detailsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.detailsToolStripMenuItem.Text = \"Details\";\n            // \n            // iconsToolStripMenuItem\n            // \n            this.iconsToolStripMenuItem.Name = \"iconsToolStripMenuItem\";\n            this.iconsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.iconsToolStripMenuItem.Text = \"Icons\";\n            // \n            // tilesToolStripMenuItem\n            // \n            this.tilesToolStripMenuItem.Name = \"tilesToolStripMenuItem\";\n            this.tilesToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.tilesToolStripMenuItem.Text = \"Tiles\";\n            // \n            // listToolStripMenuItem\n            // \n            this.listToolStripMenuItem.Name = \"listToolStripMenuItem\";\n            this.listToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.listToolStripMenuItem.Text = \"List\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 3;\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 3;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // ApplicationPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ApplicationPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private ListView listView1;\n        private ImageList imageList1;\n        private SplitContainer splitContainer1;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbFilter;\n        private ToolStripSplitButton btnGo;\n        private ToolStripMenuItem protocolToolStripMenuItem;\n        private ToolStripButton btnShowAll;\n        private ToolStripSeparator toolStripSeparator4;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private ToolStripSplitButton btnView;\n        private ToolStripMenuItem detailsToolStripMenuItem;\n        private ToolStripMenuItem iconsToolStripMenuItem;\n        private ToolStripMenuItem tilesToolStripMenuItem;\n        private ToolStripMenuItem listToolStripMenuItem;\n        private Label txtTitle;\n        private PictureBox pictureBox1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/PhysicalDirectoryPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System.Collections;\n    using System.Drawing;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class PhysicalDirectoryPage : ModuleListPage\n    {\n        private sealed class PageTaskList : TaskList\n        {\n            private readonly PhysicalDirectoryPage _owner;\n\n            public PageTaskList(PhysicalDirectoryPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage()\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private PageTaskList _taskList;\n        private readonly PhysicalDirectory _physicalDirectory;\n        private PhysicalDirectoryFeature _feature;\n\n        public PhysicalDirectoryPage(PhysicalDirectory physicalDirectory)\n        {\n            InitializeComponent();\n            btnView.Image = DefaultTaskList.ViewImage;\n            btnGo.Image = DefaultTaskList.GoImage;\n            btnShowAll.Image = DefaultTaskList.ShowAllImage;\n\n            _physicalDirectory = physicalDirectory;\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            txtTitle.Text = string.Format(\"{0} Home\", _physicalDirectory.Name);\n            InitializeListPage();\n\n            _feature = new PhysicalDirectoryFeature(Module);\n            _feature.PhysicalDirectorySettingsUpdated = Refresh;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            var iis = new ListViewGroup(\"IIS\");\n            listView1.Groups.Add(iis);\n\n            var service = (IControlPanel)GetService(typeof(IControlPanel));\n            for (int index = 0; index < service.Pages.Count; index++)\n            {\n                var pageInfo = service.Pages[index];\n                imageList1.Images.Add((Image)pageInfo.LargeImage);\n                listView1.Items.Add(new ModulePageInfoListViewItem(pageInfo) { ImageIndex = index, Group = iis });\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            if (listView1.SelectedItems.Count == 0)\n            {\n                return;\n            }\n\n            var item = (ModulePageInfoListViewItem)listView1.SelectedItems[0];\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.Form.LoadPage(item.Page);\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/PhysicalDirectoryPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>127, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>265, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>370, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>265, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>370, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/ScheduleCollectionEditor.cs",
    "content": "﻿using Microsoft.Web.Administration;\nusing System;\nusing System.ComponentModel.Design;\n\nnamespace JexusManager.Main.Features.Main\n{\n    internal class ScheduleCollectionEditor : CollectionEditor\n    {\n        public ScheduleCollectionEditor(Type type)\n            : base(type)\n        {\n        }\n\n        protected override string GetDisplayText(object value)\n        {\n            Schedule time = (Schedule)value;\n            return time.Time.ToString(\"c\");\n        }\n\n        protected override bool CanSelectMultipleInstances()\n        {\n            return false;\n        }\n\n        protected override Type CreateCollectionItemType()\n        {\n            return typeof(Schedule);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ServerFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Resources;\n\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class ServerFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly ServerFeature _owner;\n\n            public FeatureTaskList(ServerFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new TextTaskItem(\"Manage Server\", string.Empty, true));\n                result.Add(\n                    new MethodTaskItem(\"Restart\", \"Restart\", string.Empty, string.Empty, Resources.restart_16).SetUsage(\n                        !_owner.IsBusy));\n                result.Add(\n                    new MethodTaskItem(\"Start\", \"Start\", string.Empty, string.Empty, Resources.start_16).SetUsage(\n                        !_owner.IsBusy && !_owner.IsStarted));\n                result.Add(\n                    new MethodTaskItem(\"Stop\", \"Stop\", string.Empty, string.Empty, Resources.stop_16).SetUsage(\n                        !_owner.IsBusy && _owner.IsStarted));\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"ApplicationPools\", \"View Application Pools\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"Sites\", \"View Sites\", string.Empty).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"FxVersion\", \"Change .NET CLR Version\", string.Empty).SetUsage());\n                result.Add(new TextTaskItem(\"Troubleshooting\", string.Empty, true));\n                result.Add(\n                    new MethodTaskItem(\"SslDiag\", \"SSL Diagnostics\", string.Empty).SetUsage(_owner.SupportSslDiag));\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ApplicationPools()\n            {\n                _owner.ApplicationPools();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Sites()\n            {\n                _owner.Sites();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Restart()\n            {\n                _owner.Restart();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Start()\n            {\n                _owner.Start();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Stop()\n            {\n                _owner.Stop();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void FxVersion()\n            {\n                _owner.FxVersion();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void SslDiag()\n            {\n                _owner.SslDiag();\n            }\n        }\n\n        public ServerFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            if (service.ServerManager.Mode == WorkingMode.Jexus)\n            {\n                var server = (JexusServerManager)service.ServerManager;\n                this.IsStarted = AsyncHelper.RunSync(() => server.GetStatusAsync());\n            }\n\n            SupportSslDiag = service.ServerManager.Mode != WorkingMode.Jexus;\n            IsBusy = service.ServerManager.Mode != WorkingMode.Jexus; // TODO: how to start/stop IIS?\n            OnServerSettingsSaved();\n        }\n\n        protected void OnServerSettingsSaved()\n        {\n            ServerSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210463\");\n            return false;\n        }\n\n        private void FxVersion()\n        {\n        }\n\n        private void SslDiag()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using var dialog = new SslDiagDialog(Module, service.ServerManager);\n            dialog.ShowDialog();\n        }\n\n        private void Stop()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            IsBusy = true;\n            OnServerSettingsSaved();\n            if (service.ServerManager.Mode == WorkingMode.Jexus)\n            {\n                var server = (JexusServerManager)service.ServerManager;\n                AsyncHelper.RunSync(() => server.StopAsync());\n                this.IsStarted = AsyncHelper.RunSync(() => server.GetStatusAsync());\n            }\n            else\n            {\n                IsStarted = false;\n            }\n\n            IsBusy = false;\n            OnServerSettingsSaved();\n        }\n\n        private void Start()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            IsBusy = true;\n            OnServerSettingsSaved();\n            if (service.ServerManager.Mode == WorkingMode.Jexus)\n            {\n                var server = (JexusServerManager)service.ServerManager;\n                AsyncHelper.RunSync(() => server.StartAsync());\n                this.IsStarted = AsyncHelper.RunSync(() => server.GetStatusAsync());\n            }\n            else\n            {\n                IsStarted = true;\n            }\n\n            IsBusy = false;\n            OnServerSettingsSaved();\n        }\n\n        private void Restart()\n        {\n            IsBusy = true;\n            OnServerSettingsSaved();\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            if (service.ServerManager.Mode == WorkingMode.Jexus)\n            {\n                var server = (JexusServerManager)service.ServerManager;\n                AsyncHelper.RunSync(() => server.StopAsync());\n                AsyncHelper.RunSync(() => server.StartAsync());\n                this.IsStarted = AsyncHelper.RunSync(() => server.GetStatusAsync());\n            }\n            else\n            {\n                IsStarted = true;\n            }\n\n            IsBusy = false;\n            OnServerSettingsSaved();\n        }\n\n        private void Sites()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.Form.LoadSites();\n        }\n\n        private void ApplicationPools()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.Form.LoadPools();\n        }\n\n        public bool IsStarted { get; set; }\n\n        public bool SupportSslDiag { get; set; }\n\n        public bool IsBusy { get; set; }\n\n        public ServerSettingsSavedEventHandler ServerSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ServerPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ServerPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.txtTitle = new System.Windows.Forms.Label();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbFilter = new System.Windows.Forms.ToolStripComboBox();\n            this.btnGo = new System.Windows.Forms.ToolStripSplitButton();\n            this.protocolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.btnShowAll = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.btnView = new System.Windows.Forms.ToolStripSplitButton();\n            this.detailsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.iconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.tilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.listToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // listView1\n            // \n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.LargeImageList = this.imageList1;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseDoubleClick);\n            // \n            // imageList1\n            // \n            this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;\n            this.imageList1.ImageSize = new System.Drawing.Size(36, 36);\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.txtTitle);\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 2;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // txtTitle\n            // \n            this.txtTitle.AutoSize = true;\n            this.txtTitle.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.txtTitle.Location = new System.Drawing.Point(48, 10);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(62, 24);\n            this.txtTitle.TabIndex = 4;\n            this.txtTitle.Text = \"Home\";\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 5;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbFilter,\n            this.btnGo,\n            this.btnShowAll,\n            this.toolStripSeparator4,\n            this.toolStripLabel3,\n            this.cbGroup,\n            this.btnView});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(36, 22);\n            this.toolStripLabel2.Text = \"Filter:\";\n            // \n            // cbFilter\n            // \n            this.cbFilter.Name = \"cbFilter\";\n            this.cbFilter.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnGo\n            // \n            this.btnGo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.protocolToolStripMenuItem});\n            this.btnGo.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGo.Name = \"btnGo\";\n            this.btnGo.Size = new System.Drawing.Size(54, 22);\n            this.btnGo.Text = \"Go\";\n            this.btnGo.ToolTipText = \"Go\";\n            // \n            // protocolToolStripMenuItem\n            // \n            this.protocolToolStripMenuItem.Name = \"protocolToolStripMenuItem\";\n            this.protocolToolStripMenuItem.Size = new System.Drawing.Size(88, 22);\n            this.protocolToolStripMenuItem.Text = \"All\";\n            // \n            // btnShowAll\n            // \n            this.btnShowAll.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnShowAll.Name = \"btnShowAll\";\n            this.btnShowAll.Size = new System.Drawing.Size(73, 22);\n            this.btnShowAll.Text = \"Show All\";\n            // \n            // toolStripSeparator4\n            // \n            this.toolStripSeparator4.Name = \"toolStripSeparator4\";\n            this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25);\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Category\",\n            \"Area\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnView\n            // \n            this.btnView.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnView.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.detailsToolStripMenuItem,\n            this.iconsToolStripMenuItem,\n            this.tilesToolStripMenuItem,\n            this.listToolStripMenuItem});\n            this.btnView.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnView.Name = \"btnView\";\n            this.btnView.Size = new System.Drawing.Size(32, 22);\n            this.btnView.Text = \"toolStripButton1\";\n            // \n            // detailsToolStripMenuItem\n            // \n            this.detailsToolStripMenuItem.Name = \"detailsToolStripMenuItem\";\n            this.detailsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.detailsToolStripMenuItem.Text = \"Details\";\n            // \n            // iconsToolStripMenuItem\n            // \n            this.iconsToolStripMenuItem.Name = \"iconsToolStripMenuItem\";\n            this.iconsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.iconsToolStripMenuItem.Text = \"Icons\";\n            // \n            // tilesToolStripMenuItem\n            // \n            this.tilesToolStripMenuItem.Name = \"tilesToolStripMenuItem\";\n            this.tilesToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.tilesToolStripMenuItem.Text = \"Tiles\";\n            // \n            // listToolStripMenuItem\n            // \n            this.listToolStripMenuItem.Name = \"listToolStripMenuItem\";\n            this.listToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.listToolStripMenuItem.Text = \"List\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 3;\n            this.pictureBox1.TabStop = false;\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 2;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // ServerPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ServerPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private ListView listView1;\n        private SplitContainer splitContainer1;\n        private ImageList imageList1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbFilter;\n        private ToolStripSplitButton btnGo;\n        private ToolStripMenuItem protocolToolStripMenuItem;\n        private ToolStripButton btnShowAll;\n        private ToolStripSeparator toolStripSeparator4;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private Label txtTitle;\n        private PictureBox pictureBox1;\n        private ToolStripSplitButton btnView;\n        private ToolStripMenuItem detailsToolStripMenuItem;\n        private ToolStripMenuItem iconsToolStripMenuItem;\n        private ToolStripMenuItem tilesToolStripMenuItem;\n        private ToolStripMenuItem listToolStripMenuItem;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ServerPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System.Collections;\n    using System.Drawing;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class ServerPage : ModuleListPage\n    {\n        private sealed class PageTaskList : TaskList\n        {\n            private readonly ServerPage _owner;\n\n            public PageTaskList(ServerPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage()\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private ServerFeature _feature;\n        private TaskList _taskList;\n\n        public ServerPage(ServerManager manager)\n        {\n            InitializeComponent();\n            btnView.Image = DefaultTaskList.ViewImage;\n            btnGo.Image = DefaultTaskList.GoImage;\n            btnShowAll.Image = DefaultTaskList.ShowAllImage;\n\n            txtTitle.Text = string.Format(\"{0} Home\", manager.Title);\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            InitializeListPage();\n\n            _feature = new ServerFeature(Module);\n            _feature.ServerSettingsUpdated = Refresh;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            var iis = new ListViewGroup(\"IIS\");\n            listView1.Groups.Add(iis);\n\n            var service = (IControlPanel)GetService(typeof(IControlPanel));\n            for (int index = 0; index < service.Pages.Count; index++)\n            {\n                var pageInfo = service.Pages[index];\n                imageList1.Images.Add((Image)pageInfo.LargeImage);\n                listView1.Items.Add(new ModulePageInfoListViewItem(pageInfo) { ImageIndex = index, Group = iis });\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            if (listView1.SelectedItems.Count == 0)\n            {\n                return;\n            }\n\n            var item = (ModulePageInfoListViewItem)listView1.SelectedItems[0];\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.Form.LoadPage(item.Page);\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/ServerPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>269, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>492, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>122, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/ServerSettingsSavedEventHandler.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Main\n{\n    public delegate void ServerSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/SiteFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Dialogs;\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Binding = Microsoft.Web.Administration.Binding;\n    using Module = Microsoft.Web.Management.Client.Module;\n    using System.Linq;\n    using JexusManager.Features.TraceFailedRequests;\n    using Application = Microsoft.Web.Administration.Application;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class SiteFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly SiteFeature _owner;\n\n            public FeatureTaskList(SiteFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Explore\", \"Explore\", string.Empty, string.Empty, Resources.explore_16).SetUsage());\n                result.Add(new MethodTaskItem(\"Permissions\", \"Edit Permissions...\", string.Empty).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new TextTaskItem(\"Edit Site\", string.Empty, true));\n                result.Add(new MethodTaskItem(\"Bindings\", \"Bindings...\", string.Empty).SetUsage());\n                result.Add(\n                    new MethodTaskItem(\"Basic\", \"Basic Settings...\", string.Empty, string.Empty,\n                        Resources.basic_settings_16).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"Applications\", \"View Applications\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"VirtualDirectories\", \"View Virtual Directories\", string.Empty).SetUsage());\n\n                if (_owner.SiteBindings.Any(item => item.CanBrowse))\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    var manageGroup = new GroupTaskItem(string.Empty, \"Manage Website\", string.Empty, true);\n                    result.Add(manageGroup);\n                    manageGroup.Items.Add(\n                        new MethodTaskItem(\"Restart\", \"Restart\", string.Empty, string.Empty, Resources.restart_16).SetUsage(!_owner.IsBusy));\n                    manageGroup.Items.Add(\n                        new MethodTaskItem(\"Start\", \"Start\", string.Empty, string.Empty, Resources.start_16).SetUsage(\n                            !_owner.IsBusy && !_owner.IsStarted));\n                    manageGroup.Items.Add(new MethodTaskItem(\"Stop\", \"Stop\", string.Empty, string.Empty, Resources.stop_16)\n                        .SetUsage(\n                            !_owner.IsBusy && _owner.IsStarted));\n                    manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    manageGroup.Items.Add(new TextTaskItem(\"Browse Website\", string.Empty, true));\n                    foreach (Binding binding in _owner.SiteBindings)\n                    {\n                        if (binding.CanBrowse)\n                        {\n                            manageGroup.Items.Add(\n                                new MethodTaskItem(\"Browse\", string.Format(\"Browse {0}\", binding.ToShortString()),\n                                    string.Empty, string.Empty,\n                                    Resources.browse_16, binding.ToUri()).SetUsage());\n                        }\n                    }\n\n                    manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    manageGroup.Items.Add(new MethodTaskItem(\"Advanced\", \"Advanced Settings...\", string.Empty).SetUsage());\n                    manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    manageGroup.Items.Add(new TextTaskItem(\"Configure\", string.Empty, true));\n                    manageGroup.Items.Add(new MethodTaskItem(\"Tracing\", \"Failed Request Tracing...\", string.Empty).SetUsage());\n                    manageGroup.Items.Add(new MethodTaskItem(\"Limits\", \"Limits...\", string.Empty).SetUsage());\n                    manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    manageGroup.Items.Add(new TextTaskItem(\"Troubleshooting\", string.Empty, true));\n                    manageGroup.Items.Add(new MethodTaskItem(\"FixBinding\", \"Binding Diagnostics\", string.Empty).SetUsage());\n                    manageGroup.Items.Add(new MethodTaskItem(\"FixKestrel\", \"ASP.NET Core Diagnostics\", string.Empty).SetUsage());\n                    manageGroup.Items.Add(new MethodTaskItem(\"FixProject\", \"Project Diagnostics\", string.Empty).SetUsage());\n                    manageGroup.Items.Add(new MethodTaskItem(\"FixPhp\", \"PHP Diagnostics\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Explore()\n            {\n                _owner.Explore();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Permissions()\n            {\n                _owner.Permissions();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Bindings()\n            {\n                _owner.Bindings();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Basic()\n            {\n                _owner.Basic();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Applications()\n            {\n                _owner.Applications();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void VirtualDirectories()\n            {\n                _owner.VirtualDirectories();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Restart()\n            {\n                _owner.Restart();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Start()\n            {\n                _owner.Start();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Stop()\n            {\n                _owner.Stop();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Browse(object uri)\n            {\n                _owner.Browse(uri);\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Advanced()\n            {\n                _owner.Advanced();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Tracing()\n            {\n                _owner.Tracing();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Limits()\n            {\n                _owner.Limits();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void FixProject()\n            {\n                _owner.FixProject();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void FixBinding()\n            {\n                _owner.FixBinding();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void FixPhp()\n            {\n                _owner.FixPhp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void FixKestrel()\n            {\n                _owner.FixKestrel();\n            }\n        }\n\n        public SiteFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var site = service.Site;\n            try\n            {\n                service.Form.BeginProgress();\n                IsStarted = site.GetState();\n            }\n            finally\n            {\n                service.Form.EndProgress();\n            }\n\n            OnSiteSettingsSaved();\n        }\n\n        protected void OnSiteSettingsSaved()\n        {\n            SiteSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210463\");\n            return false;\n        }\n\n        private void Limits()\n        {\n        }\n\n        private void Tracing()\n        {\n            var feature = new TraceFailedRequestsFeature(Module);\n            feature.Set();\n        }\n\n        private void Advanced()\n        {\n        }\n\n        private void Browse(object uri)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n\n            // IMPORTANT: help users launch IIS Express instance.\n            var site = service.Site;\n            if (site.Server.Mode == WorkingMode.IisExpress && site.State != ObjectState.Started)\n            {\n                var message = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result = message.ShowMessage(\n                    \"This website is not yet running. Do you want to start it now?\",\n                    \"Question\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n\n                Start();\n            }\n\n            DialogHelper.ProcessStart(uri.ToString());\n        }\n\n        private void Stop()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var site = service.Site;\n            IsBusy = true;\n            OnSiteSettingsSaved();\n            try\n            {\n                service.Form.BeginProgress();\n                site.Stop();\n            }\n            finally\n            {\n                service.Form.EndProgress();\n                IsStarted = false;\n                IsBusy = false;\n            }\n\n            OnSiteSettingsSaved();\n        }\n\n        private void Start()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var site = service.Site;\n            IsBusy = true;\n            OnSiteSettingsSaved();\n            try\n            {\n                service.Form.BeginProgress();\n                DialogHelper.SiteStart(site, service.Form);\n            }\n            catch (Exception ex)\n            {\n                dialog.ShowMessage(ex.Message, Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n            finally\n            {\n                service.Form.EndProgress();\n                IsStarted = site.State == ObjectState.Started;\n                IsBusy = false;\n            }\n\n            OnSiteSettingsSaved();\n        }\n\n        private void Restart()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var site = service.Site;\n            IsBusy = true;\n            OnSiteSettingsSaved();\n            try\n            {\n                service.Form.BeginProgress();\n                site.Restart();\n            }\n            catch (Exception ex)\n            {\n                dialog.ShowMessage(ex.Message, Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n            finally\n            {\n                IsStarted = site.State == ObjectState.Started;\n                service.Form.EndProgress();\n                IsBusy = false;\n            }\n\n            OnSiteSettingsSaved();\n        }\n\n        private void VirtualDirectories()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var application = service.Site.Applications[0];\n\n            IModulePage page = new VirtualDirectoriesPage();\n            page.Initialize(Module, null, application);\n            service.Form.LoadPage(page);\n        }\n\n        private void Applications()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var site = service.Site;\n\n            IModulePage page = new ApplicationsPage();\n            page.Initialize(Module, null, new Tuple<List<Application>, Site>(null, site));\n            service.Form.LoadPage(page);\n        }\n\n        private void Basic()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var site = service.Site;\n            using (var dialog = new EditSiteDialog(Module, site.Applications[0]))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            site.Applications[0].Save();\n            site.Server.CommitChanges();\n        }\n\n        private void Permissions()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var site = service.Site;\n            var path = site.PhysicalPath.ExpandIisExpressEnvironmentVariables(site.Applications[0].GetActualExecutable());\n            if (!string.IsNullOrWhiteSpace(path))\n            {\n                NativeMethods.ShowFileProperties(path);\n            }\n        }\n\n        private void Explore()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var site = service.Site;\n            var path = site.PhysicalPath.ExpandIisExpressEnvironmentVariables(site.Applications[0].GetActualExecutable());\n            if (!string.IsNullOrWhiteSpace(path))\n            {\n                DialogHelper.Explore(path);\n            }\n        }\n\n        private void Bindings()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var site = service.Site;\n            using (var dialog = new BindingsDialog(Module, site))\n            {\n                dialog.ShowDialog();\n            }\n            OnSiteSettingsSaved();\n        }\n\n        private void FixProject()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using var dialog = new VsDiagDialog(Module, service.Site);\n            dialog.ShowDialog();\n        }\n\n        private void FixBinding()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using var dialog = new BindingDiagDialog(Module, service.Site);\n            dialog.ShowDialog();\n        }\n\n        private void FixPhp()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using var dialog = new PhpDiagDialog(Module, service.Site.Server);\n            dialog.ShowDialog();\n        }\n\n        private void FixKestrel()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using var dialog = new KestrelDiagDialog(Module, service.Site.Applications[0]);\n            dialog.ShowDialog();\n        }\n\n        public IEnumerable<Binding> SiteBindings\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                var site = service.Site;\n                return site.Bindings;\n            }\n        }\n\n        public bool IsStarted { get; set; }\n\n        public bool IsBusy { get; set; }\n\n        public SiteSettingsSavedEventHandler SiteSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public string Name { get; }\n    }\n\n    public delegate void SiteSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/SitePage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class SitePage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.txtTitle = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbFilter = new System.Windows.Forms.ToolStripComboBox();\n            this.btnGo = new System.Windows.Forms.ToolStripSplitButton();\n            this.protocolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.btnShowAll = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.btnView = new System.Windows.Forms.ToolStripSplitButton();\n            this.detailsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.iconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.tilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.listToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // listView1\n            // \n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.LargeImageList = this.imageList1;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.ShowItemToolTips = true;\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.Sorting = System.Windows.Forms.SortOrder.Ascending;\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseDoubleClick);\n            // \n            // imageList1\n            // \n            this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;\n            this.imageList1.ImageSize = new System.Drawing.Size(36, 36);\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.txtTitle);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 1;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // txtTitle\n            // \n            this.txtTitle.AutoSize = true;\n            this.txtTitle.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.txtTitle.Location = new System.Drawing.Point(48, 10);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(62, 24);\n            this.txtTitle.TabIndex = 8;\n            this.txtTitle.Text = \"Home\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 7;\n            this.pictureBox1.TabStop = false;\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbFilter,\n            this.btnGo,\n            this.btnShowAll,\n            this.toolStripSeparator4,\n            this.toolStripLabel3,\n            this.cbGroup,\n            this.btnView});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(36, 22);\n            this.toolStripLabel2.Text = \"Filter:\";\n            // \n            // cbFilter\n            // \n            this.cbFilter.Name = \"cbFilter\";\n            this.cbFilter.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnGo\n            // \n            this.btnGo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.protocolToolStripMenuItem});\n            this.btnGo.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGo.Name = \"btnGo\";\n            this.btnGo.Size = new System.Drawing.Size(54, 22);\n            this.btnGo.Text = \"Go\";\n            this.btnGo.ToolTipText = \"Go\";\n            // \n            // protocolToolStripMenuItem\n            // \n            this.protocolToolStripMenuItem.Name = \"protocolToolStripMenuItem\";\n            this.protocolToolStripMenuItem.Size = new System.Drawing.Size(88, 22);\n            this.protocolToolStripMenuItem.Text = \"All\";\n            // \n            // btnShowAll\n            // \n            this.btnShowAll.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnShowAll.Name = \"btnShowAll\";\n            this.btnShowAll.Size = new System.Drawing.Size(73, 22);\n            this.btnShowAll.Text = \"Show All\";\n            // \n            // toolStripSeparator4\n            // \n            this.toolStripSeparator4.Name = \"toolStripSeparator4\";\n            this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25);\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Category\",\n            \"Area\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnView\n            // \n            this.btnView.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnView.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.detailsToolStripMenuItem,\n            this.iconsToolStripMenuItem,\n            this.tilesToolStripMenuItem,\n            this.listToolStripMenuItem});\n            this.btnView.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnView.Name = \"btnView\";\n            this.btnView.Size = new System.Drawing.Size(32, 22);\n            this.btnView.Text = \"toolStripButton1\";\n            // \n            // detailsToolStripMenuItem\n            // \n            this.detailsToolStripMenuItem.Name = \"detailsToolStripMenuItem\";\n            this.detailsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.detailsToolStripMenuItem.Text = \"Details\";\n            // \n            // iconsToolStripMenuItem\n            // \n            this.iconsToolStripMenuItem.Name = \"iconsToolStripMenuItem\";\n            this.iconsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.iconsToolStripMenuItem.Text = \"Icons\";\n            // \n            // tilesToolStripMenuItem\n            // \n            this.tilesToolStripMenuItem.Name = \"tilesToolStripMenuItem\";\n            this.tilesToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.tilesToolStripMenuItem.Text = \"Tiles\";\n            // \n            // listToolStripMenuItem\n            // \n            this.listToolStripMenuItem.Name = \"listToolStripMenuItem\";\n            this.listToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.listToolStripMenuItem.Text = \"List\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 3;\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 3;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // SitePage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"SitePage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private ListView listView1;\n        private ImageList imageList1;\n        private SplitContainer splitContainer1;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbFilter;\n        private ToolStripSplitButton btnGo;\n        private ToolStripMenuItem protocolToolStripMenuItem;\n        private ToolStripButton btnShowAll;\n        private ToolStripSeparator toolStripSeparator4;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private ToolStripSplitButton btnView;\n        private ToolStripMenuItem detailsToolStripMenuItem;\n        private ToolStripMenuItem iconsToolStripMenuItem;\n        private ToolStripMenuItem tilesToolStripMenuItem;\n        private ToolStripMenuItem listToolStripMenuItem;\n        private Label txtTitle;\n        private PictureBox pictureBox1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/SitePage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System.Collections;\n    using System.Drawing;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class SitePage : ModuleListPage\n    {\n        private sealed class PageTaskList : TaskList\n        {\n            private readonly SitePage _owner;\n\n            public PageTaskList(SitePage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage()\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private PageTaskList _taskList;\n\n        private readonly Site _site;\n        private SiteFeature _feature;\n\n        public SitePage(Site site)\n        {\n            InitializeComponent();\n            btnView.Image = DefaultTaskList.ViewImage;\n            btnGo.Image = DefaultTaskList.GoImage;\n            btnShowAll.Image = DefaultTaskList.ShowAllImage;\n\n            _site = site;\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            txtTitle.Text = string.Format(\"{0} Home\", _site.Name);\n            InitializeListPage();\n\n            _feature = new SiteFeature(Module);\n            _feature.SiteSettingsUpdated = Refresh;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            var iis = new ListViewGroup(\"IIS\");\n            listView1.Groups.Add(iis);\n\n            var service = (IControlPanel)GetService(typeof(IControlPanel));\n            for (int index = 0; index < service.Pages.Count; index++)\n            {\n                var pageInfo = service.Pages[index];\n                imageList1.Images.Add((Image)pageInfo.LargeImage);\n                listView1.Items.Add(new ModulePageInfoListViewItem(pageInfo) { ImageIndex = index, Group = iis });\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            if (listView1.SelectedItems.Count == 0)\n            {\n                return;\n            }\n\n            var item = (ModulePageInfoListViewItem)listView1.SelectedItems[0];\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.Form.LoadPage(item.Page);\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/SitePage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>933, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>597, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>807, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/SitesFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Dialogs;\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Binding = Microsoft.Web.Administration.Binding;\n    using Module = Microsoft.Web.Management.Client.Module;\n    using System.Linq;\n    using System.Collections.Generic;\n    using Application = Microsoft.Web.Administration.Application;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class SitesFeature : FeatureBase<Site>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly SitesFeature _owner;\n\n            public FeatureTaskList(SitesFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(\n                    new MethodTaskItem(\"Add\", \"Add Website...\", string.Empty, string.Empty, Resources.site_new_16)\n                        .SetUsage());\n                result.Add(new MethodTaskItem(\"Set\", \"Set Website Defaults\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new TextTaskItem(\"Edit Site\", string.Empty, true));\n                    result.Add(new MethodTaskItem(\"Bindings\", \"Bindings...\", string.Empty).SetUsage());\n                    result.Add(\n                        new MethodTaskItem(\"Basic\", \"Basic Settings...\", string.Empty, string.Empty,\n                            Resources.basic_settings_16).SetUsage());\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(\n                        new MethodTaskItem(\"Explore\", \"Explore\", string.Empty, string.Empty, Resources.explore_16)\n                            .SetUsage());\n                    result.Add(new MethodTaskItem(\"Permissions\", \"Edit Permissions...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                    result.Add(new MethodTaskItem(\"Rename\", \"Rename\", string.Empty).SetUsage());\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Applications\", \"View Applications\", string.Empty).SetUsage());\n                    result.Add(\n                        new MethodTaskItem(\"VirtualDirectories\", \"View Virtual Directories\", string.Empty).SetUsage());\n\n                    if (_owner.SelectedItem.Bindings.Any(item => item.CanBrowse))\n                    {\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        var manageGroup = new GroupTaskItem(string.Empty, \"Manage Website\", string.Empty, true);\n                        result.Add(manageGroup);\n                        manageGroup.Items.Add(\n                            new MethodTaskItem(\"Restart\", \"Restart\", string.Empty, string.Empty, Resources.restart_16)\n                                .SetUsage(!_owner.IsBusy));\n                        manageGroup.Items.Add(\n                            new MethodTaskItem(\"Start\", \"Start\", string.Empty, string.Empty, Resources.start_16).SetUsage(\n                                !_owner.IsBusy && _owner.SelectedItem.State != ObjectState.Started));\n                        manageGroup.Items.Add(new MethodTaskItem(\"Stop\", \"Stop\", string.Empty, string.Empty,\n                            Resources.stop_16)\n                            .SetUsage(\n                                !_owner.IsBusy && _owner.SelectedItem.State == ObjectState.Started));\n                        manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        manageGroup.Items.Add(new TextTaskItem(\"Browse Website\", string.Empty, true));\n                        foreach (Binding binding in _owner.SelectedItem.Bindings)\n                        {\n                            if (binding.CanBrowse)\n                            {\n                                var uri = binding.ToUri();\n                                manageGroup.Items.Add(\n                                    new MethodTaskItem(\"Browse\", $\"Browse {uri}\", string.Empty,\n                                        string.Empty,\n                                        Resources.browse_16, uri).SetUsage());\n                            }\n                        }\n\n                        manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        manageGroup.Items.Add(\n                            new MethodTaskItem(\"Advanced\", \"Advanced Settings...\", string.Empty).SetUsage());\n                        manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        manageGroup.Items.Add(new TextTaskItem(\"Configure\", string.Empty, true));\n                        manageGroup.Items.Add(\n                            new MethodTaskItem(\"Tracing\", \"Failed Request Tracing...\", string.Empty).SetUsage());\n                        manageGroup.Items.Add(new MethodTaskItem(\"Limits\", \"Limits...\", string.Empty).SetUsage());\n                    }\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.Rename();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Explore()\n            {\n                _owner.Explore();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Permissions()\n            {\n                _owner.Permissions();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Bindings()\n            {\n                _owner.Bindings();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Basic()\n            {\n                _owner.Basic();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Applications()\n            {\n                _owner.Applications();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void VirtualDirectories()\n            {\n                _owner.VirtualDirectories();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Restart()\n            {\n                _owner.Restart();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Start()\n            {\n                _owner.Start();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Stop()\n            {\n                _owner.Stop();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Browse(object uri)\n            {\n                _owner.Browse(uri);\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Advanced()\n            {\n                _owner.Advanced();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Tracing()\n            {\n                _owner.Tracing();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Limits()\n            {\n                _owner.Limits();\n            }\n        }\n\n        public SitesFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n        private ServerManager _serverManager;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            _serverManager = service.ServerManager;\n            Items = service.Server.Sites.ToList();\n            OnSitesSettingsSaved();\n        }\n\n        protected void OnSitesSettingsSaved()\n        {\n            SitesSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210531\");\n            return false;\n        }\n\n        private void Add()\n        {\n            using var dialog = new NewSiteDialog(Module, _serverManager.Sites);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            Items.Add(dialog.NewSite);\n            dialog.NewSite.Applications[0].Save();\n            SelectedItem = dialog.NewSite;\n            SelectedItem.Server.CommitChanges();\n            Items = _serverManager.Sites.ToList();\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.Form.AddSiteNode(dialog.NewSite);\n        }\n\n        private void Set()\n        {\n        }\n\n        internal void Remove()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result = dialog.ShowMessage(\"Are you sure that you want to remove the selected site?\", \"Confirm Remove\",\n                MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            var index = _serverManager.Sites.IndexOf(SelectedItem);\n            Items.Remove(SelectedItem);\n            SelectedItem.Server.CommitChanges();\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.Form.RemoveSiteNode(SelectedItem);\n            if (Items.Count == 0)\n            {\n                SelectedItem = null;\n            }\n            else\n            {\n                SelectedItem = index > Items.Count - 1 ? Items[Items.Count - 1] : Items[index];\n            }\n\n            OnSitesSettingsSaved();\n        }\n\n        private void Rename()\n        {\n            RenameInline(SelectedItem);\n        }\n\n        private void Limits()\n        {\n        }\n\n        private void Tracing()\n        {\n        }\n\n        private void Advanced()\n        {\n        }\n\n        private void Browse(object uri)\n        {\n            // IMPORTANT: help users launch IIS Express instance.\n            var site = SelectedItem;\n            if (site.Server.Mode == WorkingMode.IisExpress && site.State != ObjectState.Started)\n            {\n                var message = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result = message.ShowMessage(\n                    \"This website is not yet running. Do you want to start it now?\",\n                    \"Question\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n\n                Start();\n            }\n\n            DialogHelper.ProcessStart(uri.ToString());\n        }\n\n        private void Stop()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            if (SelectedItem.Bindings.ElevationRequired && !PublicNativeMethods.IsProcessElevated)\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                dialog.ShowMessage(\"This site cannot be stopped. Please run Jexus Manager as administrator.\", Name);\n                return;\n            }\n\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            IsBusy = true;\n            OnSitesSettingsSaved();\n            try\n            {\n                service.Form.BeginProgress();\n                SelectedItem.Stop();\n            }\n            finally\n            {\n                service.Form.EndProgress();\n                IsBusy = false;\n            }\n\n            OnSitesSettingsSaved();\n        }\n\n        private void Start()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (SelectedItem.Bindings.ElevationRequired && !PublicNativeMethods.IsProcessElevated)\n            {\n                dialog.ShowMessage(\"This site cannot be started. Please run Jexus Manager as administrator.\", Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                return;\n            }\n\n            IsBusy = true;\n            OnSitesSettingsSaved();\n            try\n            {\n                service.Form.BeginProgress();\n                DialogHelper.SiteStart(SelectedItem, service.Form);\n            }\n            catch (Exception ex)\n            {\n                dialog.ShowMessage(ex.Message, Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n            finally\n            {\n                service.Form.EndProgress();\n                IsBusy = false;\n            }\n\n            OnSitesSettingsSaved();\n        }\n\n        private void Restart()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (SelectedItem.Bindings.ElevationRequired && !PublicNativeMethods.IsProcessElevated)\n            {\n                dialog.ShowMessage(\"This site cannot be restarted. Please run Jexus Manager as administrator.\", Name);\n                return;\n            }\n\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            IsBusy = true;\n            OnSitesSettingsSaved();\n            try\n            {\n                service.Form.BeginProgress();\n                DialogHelper.SiteRestart(SelectedItem, service.Form);\n            }\n            catch (Exception ex)\n            {\n                dialog.ShowMessage(ex.Message, Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n            finally\n            {\n                service.Form.EndProgress();\n                IsBusy = false;\n            }\n\n            OnSitesSettingsSaved();\n        }\n\n        [Obfuscation(Exclude = true)]\n        private void VirtualDirectories()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var mainForm = service.Form;\n\n            // Create a new VirtualDirectoriesPage and initialize it with the application\n            var application = SelectedItem.Applications[0];\n\n            var page = new VirtualDirectoriesPage();\n            ((IModulePage)page).Initialize(Module, null, application);\n\n            // Load the page in the main form and synchronize tree selection\n            mainForm.LoadPageAndSelectNode(page, application);\n        }\n\n        [Obfuscation(Exclude = true)]\n        private void Applications()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var mainForm = service.Form;\n\n            // Create a new ApplicationsPage and initialize it with the site         \n            var page = new ApplicationsPage();\n            ((IModulePage)page).Initialize(Module, null, new Tuple<List<Application>, Site>(null, SelectedItem));\n\n            // Load the page in the main form and synchronize tree selection\n            mainForm.LoadPageAndSelectNode(page, SelectedItem);\n        }\n\n        private void Basic()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            using (var dialog = new EditSiteDialog(Module, SelectedItem.Applications[0]))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            SelectedItem.Applications[0].Save();\n            OnSitesSettingsSaved();\n        }\n\n        protected override void DoubleClick(Site item)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var mainForm = service.Form as MainForm;\n            mainForm?.ShowSite(item);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Status\",\n            //\"IP Address\",\n            //\"Protocol\",\n            //\"Port\"\n            });\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            Site site = item.Tag as Site;\n            switch (selectedGroup)\n            {\n                case \"Status\":\n                    return item.SubItems[2].Text;\n                // TODO:\n                //case \"IP Address\":\n                //    return site.Bindings;\n                //case \"Protocol\":\n                //    return item.SubItems[3].Text;\n                //case \"Port\":\n                //    return item.SubItems[4].Text;\n                default:\n                    return string.Empty;\n            }\n        }\n\n        private void Permissions()\n        {\n            var path = SelectedItem.PhysicalPath.ExpandIisExpressEnvironmentVariables(SelectedItem.Applications[0].GetActualExecutable());\n            if (!string.IsNullOrWhiteSpace(path))\n            {\n                NativeMethods.ShowFileProperties(path);\n            }\n        }\n\n        private void Explore()\n        {\n            var path = SelectedItem.PhysicalPath.ExpandIisExpressEnvironmentVariables(SelectedItem.Applications[0].GetActualExecutable());\n            if (!string.IsNullOrWhiteSpace(path))\n            {\n                DialogHelper.Explore(path);\n            }\n        }\n\n        private void Bindings()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            using (var dialog = new BindingsDialog(Module, SelectedItem))\n            {\n                dialog.ShowDialog();\n            }\n            OnSitesSettingsSaved();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            return null;\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnSitesSettingsSaved();\n        }\n\n        public bool IsBusy { get; set; }\n\n        public SitesSettingsSavedEventHandler SitesSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name { get; }\n    }\n\n    public delegate void SitesSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/SitesPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class SitesPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chBinding = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();\n            this.cbFilter = new System.Windows.Forms.ToolStripComboBox();\n            this.btnGo = new System.Windows.Forms.ToolStripSplitButton();\n            this.siteNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.hostNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.iPAddressToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.portToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.physicalAddressToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.protocolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.btnShowAll = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // imageList1\n            // \n            this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;\n            this.imageList1.ImageSize = new System.Drawing.Size(16, 16);\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.label2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 2;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"contextMenuStrip1\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 4;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chId,\n            this.chStatus,\n            this.chBinding,\n            this.chPath});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.LabelEdit = true;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.SmallImageList = this.imageList1;\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1_SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 120;\n            // \n            // chId\n            // \n            this.chId.Text = \"ID\";\n            this.chId.Width = 80;\n            // \n            // chStatus\n            // \n            this.chStatus.Text = \"Status\";\n            this.chStatus.Width = 80;\n            // \n            // chBinding\n            // \n            this.chBinding.Text = \"Binding\";\n            this.chBinding.Width = 200;\n            // \n            // chPath\n            // \n            this.chPath.Text = \"Path\";\n            this.chPath.Width = 225;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel1,\n            this.cbFilter,\n            this.btnGo,\n            this.btnShowAll,\n            this.toolStripSeparator1,\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel1\n            // \n            this.toolStripLabel1.Name = \"toolStripLabel1\";\n            this.toolStripLabel1.Size = new System.Drawing.Size(36, 22);\n            this.toolStripLabel1.Text = \"Filter:\";\n            // \n            // cbFilter\n            // \n            this.cbFilter.Name = \"cbFilter\";\n            this.cbFilter.Size = new System.Drawing.Size(121, 25);\n            this.cbFilter.TextChanged += new System.EventHandler(this.cbFilter_TextChanged);\n            // \n            // btnGo\n            // \n            this.btnGo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.siteNameToolStripMenuItem,\n            this.hostNameToolStripMenuItem,\n            this.iPAddressToolStripMenuItem,\n            this.portToolStripMenuItem,\n            this.physicalAddressToolStripMenuItem,\n            this.protocolToolStripMenuItem});\n            this.btnGo.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGo.Name = \"btnGo\";\n            this.btnGo.Size = new System.Drawing.Size(54, 22);\n            this.btnGo.Text = \"Go\";\n            this.btnGo.ToolTipText = \"Go\";\n            // \n            // siteNameToolStripMenuItem\n            // \n            this.siteNameToolStripMenuItem.Name = \"siteNameToolStripMenuItem\";\n            this.siteNameToolStripMenuItem.Size = new System.Drawing.Size(144, 22);\n            this.siteNameToolStripMenuItem.Text = \"Site Name\";\n            // \n            // hostNameToolStripMenuItem\n            // \n            this.hostNameToolStripMenuItem.Name = \"hostNameToolStripMenuItem\";\n            this.hostNameToolStripMenuItem.Size = new System.Drawing.Size(144, 22);\n            this.hostNameToolStripMenuItem.Text = \"Host Name\";\n            // \n            // iPAddressToolStripMenuItem\n            // \n            this.iPAddressToolStripMenuItem.Name = \"iPAddressToolStripMenuItem\";\n            this.iPAddressToolStripMenuItem.Size = new System.Drawing.Size(144, 22);\n            this.iPAddressToolStripMenuItem.Text = \"IP Address\";\n            // \n            // portToolStripMenuItem\n            // \n            this.portToolStripMenuItem.Name = \"portToolStripMenuItem\";\n            this.portToolStripMenuItem.Size = new System.Drawing.Size(144, 22);\n            this.portToolStripMenuItem.Text = \"Port\";\n            // \n            // physicalAddressToolStripMenuItem\n            // \n            this.physicalAddressToolStripMenuItem.Name = \"physicalAddressToolStripMenuItem\";\n            this.physicalAddressToolStripMenuItem.Size = new System.Drawing.Size(144, 22);\n            this.physicalAddressToolStripMenuItem.Text = \"Physical Path\";\n            // \n            // protocolToolStripMenuItem\n            // \n            this.protocolToolStripMenuItem.Name = \"protocolToolStripMenuItem\";\n            this.protocolToolStripMenuItem.Size = new System.Drawing.Size(144, 22);\n            this.protocolToolStripMenuItem.Text = \"Protocol\";\n            // \n            // btnShowAll\n            // \n            this.btnShowAll.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnShowAll.Name = \"btnShowAll\";\n            this.btnShowAll.Size = new System.Drawing.Size(73, 22);\n            this.btnShowAll.Text = \"Show All\";\n            this.btnShowAll.Click += new System.EventHandler(this.btnShowAll_Click);\n            // \n            // toolStripSeparator1\n            // \n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\n            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label2.Location = new System.Drawing.Point(48, 10);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(50, 24);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Sites\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 1;\n            this.pictureBox1.TabStop = false;\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 3;\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 3;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // SitesPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"SitesPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n        private ImageList imageList1;\n        private SplitContainer splitContainer1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private PictureBox pictureBox1;\n        private Panel panel2;\n        private Label label2;\n        private ToolStrip tsActionPanel;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chId;\n        private ColumnHeader chStatus;\n        private ColumnHeader chBinding;\n        private ColumnHeader chPath;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel1;\n        private ToolStripComboBox cbFilter;\n        private ToolStripSplitButton btnGo;\n        private ToolStripMenuItem siteNameToolStripMenuItem;\n        private ToolStripMenuItem hostNameToolStripMenuItem;\n        private ToolStripMenuItem iPAddressToolStripMenuItem;\n        private ToolStripMenuItem portToolStripMenuItem;\n        private ToolStripMenuItem physicalAddressToolStripMenuItem;\n        private ToolStripMenuItem protocolToolStripMenuItem;\n        private ToolStripButton btnShowAll;\n        private ToolStripSeparator toolStripSeparator1;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/SitesPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Globalization;\n    using System.Linq;\n    using System.Reflection;\n    using System.Text;\n    using System.Windows.Forms;\n\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Binding = Microsoft.Web.Administration.Binding;\n\n    internal partial class SitesPage : ModuleListPage\n    {\n        private sealed class PageTaskList : TaskList\n        {\n            private readonly SitesPage _owner;\n\n            public PageTaskList(SitesPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage()\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class SitesListViewItem : ListViewItem, IFeatureListViewItem<Site>\n        {\n            public Site Item { get; }\n            private readonly SitesPage _page;\n\n            public SitesListViewItem(Site item, SitesPage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, Item.Id.ToString(CultureInfo.InvariantCulture)));\n                SubItems.Add(new ListViewSubItem(this, CommonHelper.ToString(Item.State)));\n                SubItems.Add(new ListViewSubItem(this, ToString(Item.Bindings)));\n                SubItems.Add(new ListViewSubItem(this, Item.PhysicalPath));\n                ImageIndex = item.State == ObjectState.Started ? 0 : 1;\n                Tag = item;\n            }\n\n            private static string ToString(BindingCollection bindings)\n            {\n                return bindings.Select(binding => binding.ToShortString()).Combine(\",\");\n            }\n        }\n\n        private readonly MainForm _form;\n        private SitesFeature _feature;\n        private PageTaskList _taskList;\n\n        public SitesPage(MainForm form)\n        {\n            InitializeComponent();\n            btnGo.Image = DefaultTaskList.GoImage;\n            btnShowAll.Image = DefaultTaskList.ShowAllImage;\n\n            imageList1.Images.Add(Resources.site_16);\n            imageList1.Images.Add(Resources.site_stopped_16);\n            _form = form;\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new SitesFeature(Module);\n            _feature.SitesSettingsUpdated = InitializeListPage;\n            _feature.Load();\n\n            _feature.InitializeMouseClick(listView1, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n                _form.UpdateSiteNode(item);\n                item.Server.CommitChanges();\n            },\n            text =>\n            {\n                var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                Debug.Assert(service != null, \"service != null\");\n                if (_feature.FindDuplicate(item => item.Name, text))\n                {\n                    service.ShowMessage(\n                        \"A site with this name already exists.\",\n                        Text,\n                        MessageBoxButtons.OK,\n                        MessageBoxIcon.Exclamation);\n                    return false;\n                }\n\n                var forbidden = SiteCollection.InvalidSiteNameCharacters();\n                foreach (var ch in forbidden)\n                {\n                    if (text.Contains(ch))\n                    {\n                        service.ShowMessage(\n                            $\"The site name cannot contain the following characters: '{string.Join(\", \", forbidden)}'.\",\n                            \"Sites\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                        return false;\n                    }\n                }\n\n                if (_feature.SelectedItem.Server.Mode == WorkingMode.Jexus)\n                {\n                    foreach (var ch in SiteCollection.InvalidSiteNameCharactersJexus())\n                    {\n                        if (text.Contains(ch) || text.StartsWith(\"~\"))\n                        {\n                            service.ShowMessage(\"The site name cannot contain the following characters: '~,  '.\", Text,\n                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                            return false;\n                        }\n                    }\n                }\n\n                return true;\n            });\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (Site file in _feature.Items)\n            {\n                listView1.Items.Add(new SitesListViewItem(file, this));\n            }\n\n            _feature.InitializeGrouping(cbGroup);\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem != null)\n            {\n                foreach (SitesListViewItem item in listView1.Items)\n                {\n                    if (item.Item.Id == _feature.SelectedItem.Id)\n                    {\n                        item.Selected = true;\n                    }\n                }\n            }\n\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        private void cbFilter_TextChanged(object sender, EventArgs e)\n        {\n            btnGo.Enabled = string.IsNullOrWhiteSpace(cbFilter.Text);\n        }\n\n        private void btnShowAll_Click(object sender, EventArgs e)\n        {\n            cbFilter.Text = string.Empty;\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/SitesPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>127, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>392, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>497, 17</value>\n  </metadata>\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>161</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/SslDiagDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    partial class SslDiagDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.toolStrip1 = new System.Windows.Forms.ToolStrip();\n            this.btnSave = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnGenerate = new System.Windows.Forms.ToolStripButton();\n            this.btnVerify = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnHelp = new System.Windows.Forms.ToolStripButton();\n            this.txtResult = new System.Windows.Forms.RichTextBox();\n            this.toolStrip1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // toolStrip1\n            // \n            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.btnSave,\n            this.toolStripSeparator1,\n            this.btnGenerate,\n            this.btnVerify,\n            this.toolStripSeparator2,\n            this.btnHelp});\n            this.toolStrip1.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip1.Name = \"toolStrip1\";\n            this.toolStrip1.Size = new System.Drawing.Size(590, 25);\n            this.toolStrip1.TabIndex = 0;\n            this.toolStrip1.Text = \"toolStrip1\";\n            // \n            // btnSave\n            // \n            this.btnSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnSave.Image = global::JexusManager.Main.Properties.Resources.save_16;\n            this.btnSave.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnSave.Name = \"btnSave\";\n            this.btnSave.Size = new System.Drawing.Size(23, 22);\n            this.btnSave.Text = \"Save\";\n            // \n            // toolStripSeparator1\n            // \n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\n            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnGenerate\n            // \n            this.btnGenerate.Image = global::JexusManager.Main.Properties.Resources.restart_16;\n            this.btnGenerate.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGenerate.Name = \"btnGenerate\";\n            this.btnGenerate.Size = new System.Drawing.Size(112, 22);\n            this.btnGenerate.Text = \"Generate Report\";\n            // \n            // btnVerify\n            // \n            this.btnVerify.Image = global::JexusManager.Main.Properties.Resources.certificates_16;\n            this.btnVerify.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnVerify.Name = \"btnVerify\";\n            this.btnVerify.Size = new System.Drawing.Size(86, 22);\n            this.btnVerify.Text = \"Verify Store\";\n            this.btnVerify.Visible = false;\n            // \n            // toolStripSeparator2\n            // \n            this.toolStripSeparator2.Name = \"toolStripSeparator2\";\n            this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnHelp\n            // \n            this.btnHelp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnHelp.Image = global::JexusManager.Main.Properties.Resources.help_16;\n            this.btnHelp.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnHelp.Name = \"btnHelp\";\n            this.btnHelp.Size = new System.Drawing.Size(23, 22);\n            this.btnHelp.Text = \"Help\";\n            this.btnHelp.Click += new System.EventHandler(this.BtnHelpClick);\n            // \n            // txtResult\n            // \n            this.txtResult.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.txtResult.Location = new System.Drawing.Point(0, 25);\n            this.txtResult.Name = \"txtResult\";\n            this.txtResult.ReadOnly = true;\n            this.txtResult.Size = new System.Drawing.Size(590, 376);\n            this.txtResult.TabIndex = 1;\n            this.txtResult.Text = \"\";\n            // \n            // SslDiagDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(590, 401);\n            this.Controls.Add(this.txtResult);\n            this.Controls.Add(this.toolStrip1);\n            this.Name = \"SslDiagDialog\";\n            this.Text = \"SSL Diagnostics\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.SslDiagDialogHelpButtonClicked);\n            this.toolStrip1.ResumeLayout(false);\n            this.toolStrip1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.ToolStrip toolStrip1;\n        private System.Windows.Forms.ToolStripButton btnSave;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\n        private System.Windows.Forms.ToolStripButton btnGenerate;\n        private System.Windows.Forms.ToolStripButton btnVerify;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\n        private System.Windows.Forms.ToolStripButton btnHelp;\n        private System.Windows.Forms.RichTextBox txtResult;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/SslDiagDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Client.Win32;\nusing System;\nusing System.Linq;\nusing System.Security.Cryptography;\n\nnamespace JexusManager.Features.Main\n{\n    using System.Drawing;\n    using System.IO;\n    using System.Security.Cryptography.X509Certificates;\n    using Microsoft.Win32;\n\n    using Org.BouncyCastle.Utilities.Encoders;\n\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Collections.Generic;\n    using EnumsNET;\n    using Microsoft.Extensions.Logging;\n\n    public partial class SslDiagDialog : DialogForm\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"SslDiagDialog\");\n\n        public SslDiagDialog(IServiceProvider provider, ServerManager server)\n            : base(provider)\n        {\n            InitializeComponent();\n\n            // from https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.ikya100/sigalg.htm\n            var wellKnownSignatureAlgorithms = new Dictionary<string, bool>\n            {\n                { \"1.2.840.113549.1.1.5\", false }, // sha1RSA, not secure\n                { \"1.2.840.113549.1.1.14\", true }, // sha224RSA, secure\n                { \"1.2.840.113549.1.1.11\", true }, // sha256RSA, secure\n                { \"1.2.840.113549.1.1.12\", true }, // sha384RSA, secure\n                { \"1.2.840.113549.1.1.13\", true }, // sha512RSA, secure\n                { \"1.2.840.10040.4.3\", false }, // sha1DSA, not secure\n                { \"1.2.840.10045.4.1\", false }, // sha1ECDSA, not secure\n                { \"1.2.840.10045.4.3.1\", true }, // sha224ECDSA, secure\n                { \"1.2.840.10045.4.3.2\", true }, // sha256ECDSA, secure\n                { \"1.2.840.10045.4.3.3\", true }, // sha384ECDSA, secure\n                { \"1.2.840.10045.4.3.4\", true }, // sha512ECDSA, secure\n            };\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnGenerate, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtResult.Clear();\n                    try\n                    {\n                        Warn(\"IMPORTANT: This report might contain confidential information. Mask such before sharing with others.\");\n                        Warn(\"-----\");\n\n                        Debug($\"System Time: {DateTime.Now}\");\n                        Debug($\"Processor Architecture: {Environment.GetEnvironmentVariable(\"PROCESSOR_ARCHITECTURE\")}\");\n                        Debug($\"OS: {Environment.OSVersion}\");\n                        Debug($\"Server Type: {server.Mode.AsString(EnumFormat.Description)}\");\n                        Debug(string.Empty);\n                        Debug($\"SERVER SSL PROTOCOLS{Environment.NewLine}\");\n\n                        bool? ssl10Enabled = GetProtocol(\"PCT 1.0\");\n                        Debug($\"PCT 1.0: {ssl10Enabled}\");\n                        if (ssl10Enabled == true)\n                        {\n                            Warn(\"PCT 1.0 is not secure. Please disable it.\");\n                        }\n                        else if (ssl10Enabled == null)\n                        {\n                            Warn(\"PCT 1.0 is not secure. OS default is used. You might explicitly disable it via registry.\");\n                        }\n\n                        bool? ssl20Enabled = GetProtocol(\"SSL 2.0\");\n                        Debug($\"SSL 2.0: {ssl20Enabled}\");\n                        if (ssl20Enabled == true)\n                        {\n                            Warn(\"SSL 2.0 is not secure. Please disable it.\");\n                        }\n                        else if (ssl20Enabled == null)\n                        {\n                            Warn(\"SSL 2.0 is not secure. OS default is used. You might explicitly disable it via registry.\");\n                        }\n\n                        bool? ssl30Enabled = GetProtocol(\"SSL 3.0\");\n                        Debug($\"SSL 3.0: {ssl30Enabled}\");\n                        if (ssl30Enabled == true)\n                        {\n                            Warn(\"SSL 3.0 is not secure. Please disable it.\");\n                        }\n                        else if (ssl30Enabled == null)\n                        {\n                            Warn(\"SSL 3.0 is not secure. OS default is used. You might explicitly disable it via registry.\");\n                        }\n\n                        bool? tls10Enabled = GetProtocol(\"TLS 1.0\");\n                        Debug($\"TLS 1.0: {tls10Enabled}\");\n                        if (tls10Enabled == true)\n                        {\n                            Warn(\"TLS 1.0 is not secure. Please disable it.\");\n                        }\n                        else if (tls10Enabled == null)\n                        {\n                            Warn(\"TLS 1.0 is not secure. OS default is used. You might explicitly disable it via registry.\");\n                        }\n\n                        bool? tls11Enabled = GetProtocol(\"TLS 1.1\");\n                        Debug($\"TLS 1.1: {tls11Enabled}\");\n                        if (tls11Enabled == true)\n                        {\n                            Warn(\"TLS 1.1 is not secure. Please disable it.\");\n                        }\n                        else if (tls11Enabled == null)\n                        {\n                            Warn(\"TLS 1.1 is not secure. OS default is used. You might explicitly disable it via registry.\");\n                        }\n\n                        bool? tls12Enabled = GetProtocol(\"TLS 1.2\");\n                        Debug($\"TLS 1.2: {tls12Enabled}\");\n\n                        Debug($\"SChannel EventLogging: {GetEventLogging()} (hex)\");\n                        Warn($\"To tune TLS related settings, please follow https://support.microsoft.com/kb/187498 or try out IIS Crypto from https://www.nartac.com/Products/IISCrypto/.\");\n                        Warn(\"Microsoft documentation on cipher suites can be found at https://docs.microsoft.com/windows/desktop/secauthn/cipher-suites-in-schannel.\");\n                        Debug(\"-----\");\n\n                        foreach (Site site in server.Sites)\n                        {\n                            Debug($\"[W3SVC/{site.Id}]\");\n                            Debug($\"ServerComment  : {site.Name}\");\n                            Debug($\"ServerAutoStart: {site.ServerAutoStart}\");\n                            Debug($\"ServerState    : {site.State}\");\n                            Debug(string.Empty);\n                            foreach (Binding binding in site.Bindings)\n                            {\n                                Info($\"BINDING: {binding.Protocol} {binding}\");\n                                if (binding.Protocol == \"https\")\n                                {\n                                    if (binding.CertificateHash == null)\n                                    {\n                                        // SNI mapping missing.\n                                        Debug($\"SSL Flags: {binding.SslFlags}\");\n                                        if (binding.SslFlags == SslFlags.Sni)\n                                        {\n                                            Error(\n                                                $\"Cannot find {binding.Host}:{binding.EndPoint.Port} combination for this SNI binding.\");\n                                        }\n                                        else\n                                        {\n                                            var querySslCertificateInfo = Microsoft.Web.Administration.NativeMethods.QuerySslCertificateInfo(\n                                                binding.EndPoint);\n                                            Error(\n                                                querySslCertificateInfo == null\n                                                    ? $\"Cannot find {binding.EndPoint} combination for this IP based binding.\"\n                                                    : $\"Cannot find certificate with thumpprint {querySslCertificateInfo.Hash} in store {querySslCertificateInfo.StoreName}.\");\n                                        }\n\n                                        Debug(string.Empty);\n                                        continue;\n                                    }\n\n                                    var hashString = Hex.ToHexString(binding.CertificateHash);\n                                    Debug($\"SSLCertHash: {hashString}\");\n                                    if (site.Server.SupportsSni)\n                                    {\n                                        Debug($\"SSL Flags: {binding.SslFlags}\");\n                                    }\n\n                                    Debug(\"Testing EndPoint: 127.0.0.1\");\n\n                                    var personal = new X509Store(binding.CertificateStoreName, StoreLocation.LocalMachine);\n                                    try\n                                    {\n                                        personal.Open(OpenFlags.MaxAllowed);\n                                        var selectedItem = personal.Certificates.Find(X509FindType.FindByThumbprint, hashString, false);\n                                        if (selectedItem.Count == 0)\n                                        {\n                                            Error($\"Cannot find certificate with thumbprint {hashString} in store {binding.CertificateStoreName}.\");\n                                        }\n                                        else\n                                        {\n                                            var cert = selectedItem[0];\n                                            Debug($\"#CertName: {cert.FriendlyName}\");\n                                            Debug($\"#Version: {cert.Version}\");\n                                            if (cert.HasPrivateKey)\n                                            {\n                                                if (PublicNativeMethods.IsProcessElevated)\n                                                {\n                                                    var newHandle = IntPtr.Zero;\n                                                    int newCount = 0;\n                                                    var shouldRelease = false;\n                                                    if (NativeMethods.CryptAcquireCertificatePrivateKey(\n                                                        cert.Handle, 0, IntPtr.Zero, ref newHandle, ref newCount,\n                                                        ref shouldRelease))\n                                                    {\n                                                        Debug(\n                                                            \"#You have a private key that corresponds to this certificate.\");\n                                                    }\n                                                    else\n                                                    {\n                                                        Error(\"#You have a private key that corresponds to this certificate but CryptAcquireCertificatePrivateKey failed.\");\n                                                        _logger.LogWarning(\"CryptAcquireCertificatePrivateKey failed\");\n                                                    }\n\n                                                    if (shouldRelease)\n                                                    {\n                                                        NativeMethods.CloseHandle(newHandle);\n                                                    }\n                                                }\n                                                else\n                                                {\n                                                    Warn(\"It seems that you have a private key that corresponds to this certificate. Please run Jexus Manager as administrator and SSL Diag can report in more details.\");\n                                                }\n                                            }\n                                            else\n                                            {\n                                                Error(\n                                                    \"#You don't have a private key that corresponds to this certificate.\");\n                                            }\n\n                                            var signatureAlgorithm = cert.SignatureAlgorithm;\n                                            Debug($\"#Signature Algorithm: {signatureAlgorithm.FriendlyName}\");\n                                            if (wellKnownSignatureAlgorithms.ContainsKey(signatureAlgorithm.Value))\n                                            {\n                                                if (!wellKnownSignatureAlgorithms[signatureAlgorithm.Value])\n                                                {\n                                                    Warn(\"Modern web browsers require signature algorithm to be secure. This signature algorithm is not secure, and might trigger warnings and/or errors.\");\n                                                }\n                                            }\n                                            else\n                                            {\n                                                Warn(\"This certificate uses a not-well-known signature algorithm, which might not be supported by all web browsers and servers.\");\n                                            }\n\n                                            AsymmetricAlgorithm key = cert.GetECDsaPublicKey();\n                                            if (key == null)\n                                            {\n                                                key = cert.GetRSAPublicKey();\n                                            }\n\n                                            Debug($\"#Key Exchange Algorithm: {key.KeyExchangeAlgorithm} Key Size: {key.KeySize}\");\n                                            if (key.SignatureAlgorithm.Equals(\"ECDSA\", StringComparison.OrdinalIgnoreCase))\n                                            {\n                                                Warn(\"This is an ECC certificate, so certain (old) web browsers/clients might not be able to support it.\");\n                                            }\n                                            else\n                                            {\n                                                Warn(\"This is not an ECC certificate, so *_ECDSA_* cipher suites cannot be used.\");\n                                            }\n\n                                            Debug($\"#Subject: {cert.Subject}\");\n                                            Debug($\"#Issuer: {cert.Issuer}\");\n                                            Debug($\"#Validity: From {cert.NotBefore:G} To {cert.NotAfter:G}\");\n                                            var now = DateTime.UtcNow;\n                                            if (now < cert.NotBefore)\n                                            {\n                                                Warn(\"This certificate is not yet valid.\");\n                                            }\n\n                                            if (cert.NotAfter < now)\n                                            {\n                                                Error(\"This certificate is already expired.\");\n                                            }\n\n                                            Debug($\"#Serial Number: {cert.SerialNumber}\");\n                                            Debug($\"DS Mapper Usage: {(binding.UseDsMapper ? \"Enabled\" : \"Disabled\")}\");\n                                            Debug($\"Archived: {cert.Archived}\");\n\n                                            string hasSAN = null;\n                                            foreach (var extension in cert.Extensions)\n                                            {\n                                                if (extension.Oid.Value == \"2.5.29.15\")\n                                                {\n                                                    Debug($\"#Key Usage: {((X509KeyUsageExtension)extension).KeyUsages}\");\n                                                    continue;\n                                                }\n\n                                                if (extension.Oid.Value == \"2.5.29.37\")\n                                                {\n                                                    var usages = ((X509EnhancedKeyUsageExtension)extension).EnhancedKeyUsages;\n                                                    var enhancedKeyUsage = usages.Cast<Oid>().Select(usage => $\"{usage.FriendlyName} ({usage.Value})\")\n                                                        .Combine(\",\");\n\n                                                    Debug($\"#Enhanced Key Usage: {enhancedKeyUsage}\");\n                                                    continue;\n                                                }\n\n                                                if (extension.Oid.Value == \"2.5.29.17\")\n                                                {\n                                                    var name = extension.Format(true).TrimEnd();\n                                                    Debug($\"#Subject Alternative Name: {name}\");\n                                                    hasSAN = name;\n                                                    continue;\n                                                }\n\n                                                if (extension.Oid.FriendlyName == \"Basic Constraints\")\n                                                {\n                                                    var ext = (X509BasicConstraintsExtension)extension;\n                                                    Debug(\n                                                        $\"#Basic Constraints: Subject Type={(ext.CertificateAuthority ? \"CA\" : \"End Entity\")}, Path Length Constraint={(ext.HasPathLengthConstraint ? ext.PathLengthConstraint.ToString() : \"None\")}\");\n                                                }\n                                            }\n\n                                            if (hasSAN == null)\n                                            {\n                                                Warn(\"Modern web browsers require Subject Alternative Name extension to present. This certificate does not have SAN extension, so might trigger warnings and/or errors.\");\n                                            }\n\n                                            var matched = BindingUtility.MatchHostName(cert, binding.Host);\n                                            if (matched)\n                                            {\n                                                Debug(\"The host name matches the certificate.\");\n                                            }\n                                            else\n                                            {\n                                                Warn(\"The host name does not match the certificate.\");\n                                            }\n\n                                            X509Chain chain = X509Chain.Create();\n                                            chain.ChainPolicy = new X509ChainPolicy\n                                            {\n                                                RevocationMode = X509RevocationMode.Online\n                                            };\n                                            bool valid = chain.Build(cert);\n                                            if (valid)\n                                            {\n                                                Debug(\"Certificate verified.\");\n                                            }\n                                            else\n                                            {\n                                                Error(\"Certificate validation failed.\");\n                                            }\n\n                                            foreach (var item in chain.ChainStatus)\n                                            {\n                                                Warn(item.StatusInformation);\n                                            }\n                                        }\n\n                                        personal.Close();\n                                    }\n                                    catch (CryptographicException ex)\n                                    {\n                                        Error($\"Problems detected on certificate store {binding.CertificateStoreName}.\");\n                                        if (ex.HResult != Microsoft.Web.Administration.NativeMethods.NonExistingStore)\n                                        {\n                                            _logger.LogError(ex, \"CryptographicException {HResult} from SslDiag\", ex.HResult);\n                                            throw;\n                                        }\n\n                                        Error($\"Invalid certificate store {binding.CertificateStoreName}.\");\n                                    }\n                                }\n\n                                Debug(string.Empty);\n                            }\n                        }\n                    }\n                    catch (CryptographicException ex)\n                    {\n                        Debug(ex.ToString());\n                        _logger.LogError(ex, \"CryptographicException {HResult} from SslDiag\", ex.HResult);\n                    }\n                    catch (Exception ex)\n                    {\n                        Debug(ex.ToString());\n                        _logger.LogError(ex, \"Error analyzing certificate. HResult: {HResult}\", ex.HResult);\n                    }\n                }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnSave, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     var fileName = DialogHelper.ShowSaveFileDialog(null, \"Text Files|*.txt|All Files|*.*\", null);\n                     if (string.IsNullOrEmpty(fileName))\n                     {\n                         return;\n                     }\n\n                     File.WriteAllText(fileName, txtResult.Text);\n                 }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnVerify, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     txtResult.Clear();\n                 }));\n        }\n\n        private void Debug(string text)\n        {\n            txtResult.AppendText(text);\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Error(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Red;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Warn(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Green;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Info(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Blue;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private int GetEventLogging()\n        {\n            if (Helper.IsRunningOnMono())\n            {\n                return -1;\n            }\n\n            // https://support.microsoft.com/kb/260729\n            var key = Registry.LocalMachine.OpenSubKey(@\"System\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\");\n            if (key == null)\n            {\n                return 1;\n            }\n\n            var value = (int)key.GetValue(\"EventLogging\", 1);\n            return value;\n        }\n\n        private bool? GetProtocol(string protocol)\n        {\n            if (Helper.IsRunningOnMono())\n            {\n                return null;\n            }\n\n            // https://support.microsoft.com/kb/187498\n            var key =\n                Registry.LocalMachine.OpenSubKey(\n                    $@\"SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\{protocol}\\Server\");\n            if (key == null)\n            {\n                return null;\n            }\n\n            var value = key.GetValue(\"Enabled\", 1);\n            if (value is int flag)\n            {\n                var enabled = flag == 1;\n                return enabled;\n            }\n\n            Error($\"Invalid registry key value is detected for {protocol}. Please read https://support.microsoft.com/kb/187498 to resolve the issue.\");\n            return null;\n        }\n\n        private void BtnHelpClick(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://docs.lextudio.com/jexusmanager/tutorials/ssl-diagnostics.html\");\n        }\n\n        private void SslDiagDialogHelpButtonClicked(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            BtnHelpClick(null, EventArgs.Empty);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/SslDiagDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/VirtualDirectoriesFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reflection;\n    using System.Runtime.CompilerServices;\n    using System.Windows.Forms;\n    using JexusManager.Dialogs;\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Binding = Microsoft.Web.Administration.Binding;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Feature for managing virtual directories.\n    /// </summary>\n    internal class VirtualDirectoriesFeature : FeatureBase<VirtualDirectory>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly VirtualDirectoriesFeature _owner;\n\n            public FeatureTaskList(VirtualDirectoriesFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList\n                {\n                    new MethodTaskItem(\"Add\", \"Add Virtual Directory...\", string.Empty, string.Empty, Resources.virtual_directory_new_16)\n                        .SetUsage(),\n                    new MethodTaskItem(\"Set\", \"Set Virtual Directory Defauls...\", string.Empty).SetUsage(),\n                };\n\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new TextTaskItem(\"Manage Virtual Directory\", string.Empty, true));\n\n                    result.Add(\n                        new MethodTaskItem(\"Explore\", \"Explore\", string.Empty, string.Empty, Resources.explore_16)\n                            .SetUsage());\n                    result.Add(new MethodTaskItem(\"Permissions\", \"Edit Permissions...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n\n                    if (_owner.SiteBindings.Any(item => item.CanBrowse))\n                    {\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        result.Add(new TextTaskItem(\"Browse Virtual Directory\", string.Empty, true));\n                        foreach (Binding binding in _owner.SiteBindings)\n                        {\n                            if (binding.CanBrowse)\n                            {\n                                var uri = binding.ToUri();\n                                result.Add(\n                                    new MethodTaskItem(\"Browse\", $\"Browse {binding.ToShortString()}\",\n                                        string.Empty, string.Empty,\n                                        Resources.browse_16, uri).SetUsage());\n                            }\n                        }\n                    }\n\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new TextTaskItem(\"Edit Virtual Directory\", string.Empty, true));\n                    result.Add(\n                        new MethodTaskItem(\"Basic\", \"Basic Settings...\", string.Empty, string.Empty,\n                            Resources.basic_settings_16).SetUsage());\n                    result.Add(\n                        new MethodTaskItem(\"Advanced\", \"Advanced Settings...\", string.Empty).SetUsage());\n\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Basic()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Explore()\n            {\n                _owner.Explore();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Permissions()\n            {\n                _owner.Permissions();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Browse(object uri)\n            {\n                _owner.Browse(uri);\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Advanced()\n            {\n                _owner.Advanced();\n            }\n        }\n\n        public VirtualDirectoriesFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n        private Microsoft.Web.Administration.Application _application;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load(Microsoft.Web.Administration.Application application)\n        {\n            _application = application;\n            Items = GetFiltered(application.VirtualDirectories);\n            OnVirtualDirectoriesSettingsSaved();\n        }\n\n        private List<VirtualDirectory> GetFiltered(VirtualDirectoryCollection collection)\n        {\n            return collection.Where(item => item.Path != \"/\").ToList();\n        }\n\n        public IEnumerable<Binding> SiteBindings\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                var site = service.Application.Site;\n                return site.Bindings;\n            }\n        }\n\n        protected void OnVirtualDirectoriesSettingsSaved()\n        {\n            VirtualDirectoriesSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"https://go.microsoft.com/fwlink/?LinkId=210537\");\n            return false;\n        }\n\n        private void Add()\n        {\n            // Create and show dialog for adding a new virtual directory\n            // This would use a dialog similar to the ones for Sites and Application Pools\n            using (var dialog = new NewVirtualDirectoryDialog(Module, null, _application.Path, _application))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                Items.Add(dialog.VirtualDirectory);\n                SelectedItem = dialog.VirtualDirectory;\n                _application.Server.CommitChanges();\n                Items = GetFiltered(_application.VirtualDirectories);\n            }\n            OnVirtualDirectoriesSettingsSaved();\n        }\n\n        internal void Remove()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result = service.ShowMessage(\"Are you sure that you want to remove the selected virtual directory?\",\n                \"Confirm Remove\",\n                MessageBoxButtons.YesNoCancel,\n                MessageBoxIcon.Question);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            var index = _application.VirtualDirectories.IndexOf(SelectedItem);\n            _application.VirtualDirectories.Remove(SelectedItem);\n\n            if (_application.VirtualDirectories.Count == 0)\n            {\n                SelectedItem = null;\n            }\n            else\n            {\n                SelectedItem = index > _application.VirtualDirectories.Count - 1\n                    ? _application.VirtualDirectories[_application.VirtualDirectories.Count - 1]\n                    : _application.VirtualDirectories[index];\n            }\n\n            _application.Server.CommitChanges();\n            Items = _application.VirtualDirectories.ToList();\n            OnVirtualDirectoriesSettingsSaved();\n        }\n\n        internal void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(VirtualDirectory item)\n        {\n            // Edit the selected virtual directory\n            using (var dialog = new NewVirtualDirectoryDialog(Module, item, _application.Path, _application))\n            {\n                if (dialog.ShowDialog() == DialogResult.OK)\n                {\n                    _application.Server.CommitChanges();\n                }\n            }\n\n            OnVirtualDirectoriesSettingsSaved();\n        }\n\n        private void Permissions()\n        {\n            var path = SelectedItem.PhysicalPath.ExpandIisExpressEnvironmentVariables(SelectedItem.Application.GetActualExecutable());\n            if (!string.IsNullOrWhiteSpace(path))\n            {\n                NativeMethods.ShowFileProperties(path);\n            }\n        }\n\n        private void Explore()\n        {\n            var path = SelectedItem.PhysicalPath.ExpandIisExpressEnvironmentVariables(SelectedItem.Application.GetActualExecutable());\n            if (!string.IsNullOrWhiteSpace(path))\n            {\n                DialogHelper.Explore(path);\n            }\n        }\n\n        private void Browse(object uri)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n\n            // IMPORTANT: help users launch IIS Express instance.\n            var site = service.Application.Site;\n            if (site.Server.Mode == WorkingMode.IisExpress && site.State != ObjectState.Started)\n            {\n                var message = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result = message.ShowMessage(\n                    \"This website is not yet running. Do you want to start it now?\",\n                    \"Question\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n\n                try\n                {\n                    service.Form.BeginProgress();\n                    DialogHelper.SiteStart(site, service.Form);\n                }\n                catch (Exception ex)\n                {\n                    message.ShowMessage(ex.Message, Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                }\n                finally\n                {\n                    service.Form.EndProgress();\n                }\n            }\n\n            DialogHelper.ProcessStart(uri + SelectedItem.PathToSite());\n        }\n\n        private void Advanced()\n        {\n            // Show advanced settings dialog\n            // This would be implemented similar to the other features\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            return null;\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnVirtualDirectoriesSettingsSaved();\n        }\n\n        public VirtualDirectoriesSettingsSavedEventHandler VirtualDirectoriesSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name { get; }\n    }\n\n    public delegate void VirtualDirectoriesSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/VirtualDirectoriesPage.Designer.cs",
    "content": "namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class VirtualDirectoriesPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chAppPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPhysicalPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chIdentity = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // imageList1\n            // \n            this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;\n            this.imageList1.ImageSize = new System.Drawing.Size(16, 16);\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.label2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 2;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"contextMenuStrip1\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 4;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chAppPath,\n            this.chPath,\n            this.chPhysicalPath,\n            this.chIdentity});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.LabelEdit = true;\n            this.listView1.Location = new System.Drawing.Point(0, 0);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 540);\n            this.listView1.SmallImageList = this.imageList1;\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1_SelectedIndexChanged);\n            // \n            // chAppPath\n            // \n            this.chAppPath.Text = \"Application Path\";\n            this.chAppPath.Width = 150;\n            // \n            // chPath\n            // \n            this.chPath.Text = \"Virtual Path\";\n            this.chPath.Width = 150;\n            // \n            // chPhysicalPath\n            // \n            this.chPhysicalPath.Text = \"Physical Path\";\n            this.chPhysicalPath.Width = 250;\n            // \n            // chIdentity\n            // \n            this.chIdentity.Text = \"Identity\";\n            this.chIdentity.Width = 150;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label2.Location = new System.Drawing.Point(48, 10);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(153, 24);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Virtual Directories\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 1;\n            this.pictureBox1.TabStop = false;\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 3;\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 3;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // VirtualDirectoriesPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"VirtualDirectoriesPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n        private ImageList imageList1;\n        private SplitContainer splitContainer1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private PictureBox pictureBox1;\n        private Panel panel2;\n        private Label label2;\n        private ToolStrip tsActionPanel;\n        private ListView listView1;\n        private ColumnHeader chAppPath;\n        private ColumnHeader chPath;\n        private ColumnHeader chPhysicalPath;\n        private ColumnHeader chIdentity;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/VirtualDirectoriesPage.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Application = Microsoft.Web.Administration.Application;\n\n    public partial class VirtualDirectoriesPage : ModuleListPage\n    {\n        private sealed class PageTaskList : TaskList\n        {\n            private readonly VirtualDirectoriesPage _owner;\n\n            public PageTaskList(VirtualDirectoriesPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage()\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class VirtualDirectoriesListViewItem : ListViewItem, IFeatureListViewItem<VirtualDirectory>\n        {\n            public VirtualDirectory Item { get; }\n            private readonly VirtualDirectoriesPage _page;\n\n            public VirtualDirectoriesListViewItem(VirtualDirectory item, VirtualDirectoriesPage page)\n                : base(item.Application.IsRoot() ? \"Root Application\" : item.Application.Path) // TODO: miss the icon in this column.\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, Item.Path));\n                SubItems.Add(new ListViewSubItem(this, Item.PhysicalPath));\n                SubItems.Add(new ListViewSubItem(this, Item.UserName ?? string.Empty));\n                ImageIndex = 0;\n            }\n        }\n\n        private VirtualDirectoriesFeature _feature;\n        private PageTaskList _taskList;\n        private Application _application;\n\n        public VirtualDirectoriesPage()\n        {\n            InitializeComponent();\n            imageList1.Images.Add(Resources.virtual_directory_16);\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _application = navigationData as Application;\n            if (_application == null)\n            {\n                throw new InvalidOperationException(\"Application object required\");\n            }\n\n            _feature = new VirtualDirectoriesFeature(Module);\n            _feature.VirtualDirectoriesSettingsUpdated = InitializeListPage;\n            _feature.Load(_application);\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (VirtualDirectory vdir in _feature.Items)\n            {\n                listView1.Items.Add(new VirtualDirectoriesListViewItem(vdir, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem != null)\n            {\n                foreach (VirtualDirectoriesListViewItem item in listView1.Items)\n                {\n                    if (item.Item.Path == _feature.SelectedItem.Path)\n                    {\n                        item.Selected = true;\n                    }\n                }\n            }\n\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/VirtualDirectoriesPage.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>127, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>391, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>265, 17</value>\n  </metadata>\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>74</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/VirtualDirectoryFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Main\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Dialogs;\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Binding = Microsoft.Web.Administration.Binding;\n    using Module = Microsoft.Web.Management.Client.Module;\n    using System.Linq;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class VirtualDirectoryFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly VirtualDirectoryFeature _owner;\n\n            public FeatureTaskList(VirtualDirectoryFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Explore\", \"Explore\", string.Empty, string.Empty, Resources.explore_16).SetUsage());\n                result.Add(new MethodTaskItem(\"Permissions\", \"Edit Permissions...\", string.Empty).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(\n                    new MethodTaskItem(\"Basic\", \"Basic Settings...\", string.Empty, string.Empty,\n                        Resources.basic_settings_16).SetUsage());\n\n                if (_owner.SiteBindings.Any(item => item.CanBrowse))\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    var manageGroup = new GroupTaskItem(string.Empty, \"Manage Virtual Directory\", string.Empty, true);\n                    result.Add(manageGroup);\n                    manageGroup.Items.Add(new TextTaskItem(\"Browse Virtual Directory\", string.Empty, true));\n                    foreach (Binding binding in _owner.SiteBindings)\n                    {\n                        if (binding.CanBrowse)\n                        {\n                            var uri = binding.ToUri();\n                            manageGroup.Items.Add(\n                                new MethodTaskItem(\"Browse\", $\"Browse {binding.ToShortString()}\", string.Empty,\n                                    string.Empty,\n                                    Resources.browse_16, uri).SetUsage());\n                        }\n                    }\n\n                    manageGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    manageGroup.Items.Add(new TextTaskItem(\"Edit Virtual Directory\", string.Empty, true));\n                    manageGroup.Items.Add(new MethodTaskItem(\"Advanced\", \"Advanced Settings...\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Explore()\n            {\n                _owner.Explore();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Permissions()\n            {\n                _owner.Permissions();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Basic()\n            {\n                _owner.Basic();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Browse(object uri)\n            {\n                _owner.Browse(uri);\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Advanced()\n            {\n                _owner.Advanced();\n            }\n        }\n\n        public VirtualDirectoryFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            OnVirtualDirectorySettingsSaved();\n        }\n\n        protected void OnVirtualDirectorySettingsSaved()\n        {\n            VirtualDirectorySettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210463\");\n            return false;\n        }\n\n        private void Advanced()\n        {\n        }\n\n        private void Browse(object uri)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var application = service.VirtualDirectory.Application;\n\n            // IMPORTANT: help users launch IIS Express instance.\n            var site = application.Site;\n            if (site.Server.Mode == WorkingMode.IisExpress && site.State != ObjectState.Started)\n            {\n                var message = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result = message.ShowMessage(\n                    \"This website is not yet running. Do you want to start it now?\",\n                    \"Question\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n\n                try\n                {\n                    service.Form.BeginProgress();\n                    DialogHelper.SiteStart(site, service.Form);\n                }\n                catch (Exception ex)\n                {\n                    message.ShowMessage(ex.Message, Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                }\n                finally\n                {\n                    service.Form.EndProgress();\n                }\n            }\n\n            // TODO: virtual directory path?\n            DialogHelper.ProcessStart(uri + application.Path);\n        }\n\n        private void Basic()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var virtualDirectory = service.VirtualDirectory;\n            using (var dialog = new NewVirtualDirectoryDialog(Module, virtualDirectory, virtualDirectory.PathToSite().GetParentPath(),\n                virtualDirectory.Application))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            //await service.Application.SaveAsync();\n            service.ServerManager.CommitChanges();\n        }\n\n        private void Permissions()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            NativeMethods.ShowFileProperties(service.VirtualDirectory.PhysicalPath.ExpandIisExpressEnvironmentVariables(service.VirtualDirectory.Application.GetActualExecutable()));\n        }\n\n        private void Explore()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            DialogHelper.Explore(service.VirtualDirectory.PhysicalPath.ExpandIisExpressEnvironmentVariables(service.VirtualDirectory.Application.GetActualExecutable()));\n        }\n\n        public IEnumerable<Binding> SiteBindings\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                var site = service.VirtualDirectory.Application.Site;\n                return site.Bindings;\n            }\n        }\n\n        public VirtualDirectorySettingsSavedEventHandler VirtualDirectorySettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public string Name { get; }\n    }\n\n    public delegate void VirtualDirectorySettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/VirtualDirectoryPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class VirtualDirectoryPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.txtTitle = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbFilter = new System.Windows.Forms.ToolStripComboBox();\n            this.btnGo = new System.Windows.Forms.ToolStripSplitButton();\n            this.protocolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.btnShowAll = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.btnView = new System.Windows.Forms.ToolStripSplitButton();\n            this.detailsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.iconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.tilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.listToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // listView1\n            // \n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.LargeImageList = this.imageList1;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.ShowItemToolTips = true;\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.Sorting = System.Windows.Forms.SortOrder.Ascending;\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseDoubleClick);\n            // \n            // imageList1\n            // \n            this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;\n            this.imageList1.ImageSize = new System.Drawing.Size(36, 36);\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.txtTitle);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 1;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // txtTitle\n            // \n            this.txtTitle.AutoSize = true;\n            this.txtTitle.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.txtTitle.Location = new System.Drawing.Point(48, 10);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(62, 24);\n            this.txtTitle.TabIndex = 8;\n            this.txtTitle.Text = \"Home\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 7;\n            this.pictureBox1.TabStop = false;\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbFilter,\n            this.btnGo,\n            this.btnShowAll,\n            this.toolStripSeparator4,\n            this.toolStripLabel3,\n            this.cbGroup,\n            this.btnView});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(36, 22);\n            this.toolStripLabel2.Text = \"Filter:\";\n            // \n            // cbFilter\n            // \n            this.cbFilter.Name = \"cbFilter\";\n            this.cbFilter.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnGo\n            // \n            this.btnGo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.protocolToolStripMenuItem});\n            this.btnGo.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGo.Name = \"btnGo\";\n            this.btnGo.Size = new System.Drawing.Size(54, 22);\n            this.btnGo.Text = \"Go\";\n            this.btnGo.ToolTipText = \"Go\";\n            // \n            // protocolToolStripMenuItem\n            // \n            this.protocolToolStripMenuItem.Name = \"protocolToolStripMenuItem\";\n            this.protocolToolStripMenuItem.Size = new System.Drawing.Size(88, 22);\n            this.protocolToolStripMenuItem.Text = \"All\";\n            // \n            // btnShowAll\n            // \n            this.btnShowAll.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnShowAll.Name = \"btnShowAll\";\n            this.btnShowAll.Size = new System.Drawing.Size(73, 22);\n            this.btnShowAll.Text = \"Show All\";\n            // \n            // toolStripSeparator4\n            // \n            this.toolStripSeparator4.Name = \"toolStripSeparator4\";\n            this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25);\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Category\",\n            \"Area\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnView\n            // \n            this.btnView.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnView.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.detailsToolStripMenuItem,\n            this.iconsToolStripMenuItem,\n            this.tilesToolStripMenuItem,\n            this.listToolStripMenuItem});\n            this.btnView.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnView.Name = \"btnView\";\n            this.btnView.Size = new System.Drawing.Size(32, 22);\n            this.btnView.Text = \"toolStripButton1\";\n            // \n            // detailsToolStripMenuItem\n            // \n            this.detailsToolStripMenuItem.Name = \"detailsToolStripMenuItem\";\n            this.detailsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.detailsToolStripMenuItem.Text = \"Details\";\n            // \n            // iconsToolStripMenuItem\n            // \n            this.iconsToolStripMenuItem.Name = \"iconsToolStripMenuItem\";\n            this.iconsToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.iconsToolStripMenuItem.Text = \"Icons\";\n            // \n            // tilesToolStripMenuItem\n            // \n            this.tilesToolStripMenuItem.Name = \"tilesToolStripMenuItem\";\n            this.tilesToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.tilesToolStripMenuItem.Text = \"Tiles\";\n            // \n            // listToolStripMenuItem\n            // \n            this.listToolStripMenuItem.Name = \"listToolStripMenuItem\";\n            this.listToolStripMenuItem.Size = new System.Drawing.Size(109, 22);\n            this.listToolStripMenuItem.Text = \"List\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 3;\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 3;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // ApplicationPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ApplicationPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private ListView listView1;\n        private ImageList imageList1;\n        private SplitContainer splitContainer1;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbFilter;\n        private ToolStripSplitButton btnGo;\n        private ToolStripMenuItem protocolToolStripMenuItem;\n        private ToolStripButton btnShowAll;\n        private ToolStripSeparator toolStripSeparator4;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private ToolStripSplitButton btnView;\n        private ToolStripMenuItem detailsToolStripMenuItem;\n        private ToolStripMenuItem iconsToolStripMenuItem;\n        private ToolStripMenuItem tilesToolStripMenuItem;\n        private ToolStripMenuItem listToolStripMenuItem;\n        private Label txtTitle;\n        private PictureBox pictureBox1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/VirtualDirectoryPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Main\n{\n    using System.Collections;\n    using System.Drawing;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class VirtualDirectoryPage : ModuleListPage\n    {\n        private sealed class PageTaskList : TaskList\n        {\n            private readonly VirtualDirectoryPage _owner;\n\n            public PageTaskList(VirtualDirectoryPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage()\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private PageTaskList _taskList;\n        private readonly VirtualDirectory _virtualDirectory;\n        private VirtualDirectoryFeature _feature;\n\n        public VirtualDirectoryPage(VirtualDirectory virtualDirectory)\n        {\n            InitializeComponent();\n            btnView.Image = DefaultTaskList.ViewImage;\n            btnGo.Image = DefaultTaskList.GoImage;\n            btnShowAll.Image = DefaultTaskList.ShowAllImage;\n\n            _virtualDirectory = virtualDirectory;\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            txtTitle.Text = string.Format(\"{0} Home\", _virtualDirectory.Path);\n            InitializeListPage();\n\n            _feature = new VirtualDirectoryFeature(Module);\n            _feature.VirtualDirectorySettingsUpdated = Refresh;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            var iis = new ListViewGroup(\"IIS\");\n            listView1.Groups.Add(iis);\n\n            var service = (IControlPanel)GetService(typeof(IControlPanel));\n            for (int index = 0; index < service.Pages.Count; index++)\n            {\n                var pageInfo = service.Pages[index];\n                imageList1.Images.Add((Image)pageInfo.LargeImage);\n                listView1.Items.Add(new ModulePageInfoListViewItem(pageInfo) { ImageIndex = index, Group = iis });\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            if (listView1.SelectedItems.Count == 0)\n            {\n                return;\n            }\n\n            var item = (ModulePageInfoListViewItem)listView1.SelectedItems[0];\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.Form.LoadPage(item.Page);\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/VirtualDirectoryPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>127, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>265, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>370, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>265, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>370, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Features/Main/VsDiagDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Main\n{\n    partial class VsDiagDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.toolStrip1 = new System.Windows.Forms.ToolStrip();\n            this.btnSave = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnGenerate = new System.Windows.Forms.ToolStripButton();\n            this.btnVerify = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n            this.btnHelp = new System.Windows.Forms.ToolStripButton();\n            this.txtResult = new System.Windows.Forms.RichTextBox();\n            this.toolStrip1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // toolStrip1\n            // \n            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.btnSave,\n            this.toolStripSeparator1,\n            this.btnGenerate,\n            this.btnVerify,\n            this.toolStripSeparator2,\n            this.btnHelp});\n            this.toolStrip1.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip1.Name = \"toolStrip1\";\n            this.toolStrip1.Size = new System.Drawing.Size(590, 25);\n            this.toolStrip1.TabIndex = 0;\n            this.toolStrip1.Text = \"toolStrip1\";\n            // \n            // btnSave\n            // \n            this.btnSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnSave.Image = global::JexusManager.Main.Properties.Resources.save_16;\n            this.btnSave.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnSave.Name = \"btnSave\";\n            this.btnSave.Size = new System.Drawing.Size(23, 22);\n            this.btnSave.Text = \"Save\";\n            // \n            // toolStripSeparator1\n            // \n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\n            this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnGenerate\n            // \n            this.btnGenerate.Image = global::JexusManager.Main.Properties.Resources.restart_16;\n            this.btnGenerate.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGenerate.Name = \"btnGenerate\";\n            this.btnGenerate.Size = new System.Drawing.Size(112, 22);\n            this.btnGenerate.Text = \"Generate Report\";\n            // \n            // btnVerify\n            // \n            this.btnVerify.Image = global::JexusManager.Main.Properties.Resources.certificates_16;\n            this.btnVerify.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnVerify.Name = \"btnVerify\";\n            this.btnVerify.Size = new System.Drawing.Size(86, 22);\n            this.btnVerify.Text = \"Verify Store\";\n            this.btnVerify.Visible = false;\n            // \n            // toolStripSeparator2\n            // \n            this.toolStripSeparator2.Name = \"toolStripSeparator2\";\n            this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnHelp\n            // \n            this.btnHelp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnHelp.Image = global::JexusManager.Main.Properties.Resources.help_16;\n            this.btnHelp.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnHelp.Name = \"btnHelp\";\n            this.btnHelp.Size = new System.Drawing.Size(23, 22);\n            this.btnHelp.Text = \"Help\";\n            this.btnHelp.Click += new System.EventHandler(this.BtnHelpClick);\n            // \n            // txtResult\n            // \n            this.txtResult.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.txtResult.Location = new System.Drawing.Point(0, 25);\n            this.txtResult.Name = \"txtResult\";\n            this.txtResult.ReadOnly = true;\n            this.txtResult.Size = new System.Drawing.Size(590, 376);\n            this.txtResult.TabIndex = 1;\n            this.txtResult.Text = \"\";\n            // \n            // VsDiagDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(590, 401);\n            this.Controls.Add(this.txtResult);\n            this.Controls.Add(this.toolStrip1);\n            this.Name = \"VsDiagDialog\";\n            this.Text = \"Visual Studio Project Diagnostics\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.SslDiagDialogHelpButtonClicked);\n            this.toolStrip1.ResumeLayout(false);\n            this.toolStrip1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.ToolStrip toolStrip1;\n        private System.Windows.Forms.ToolStripButton btnSave;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\n        private System.Windows.Forms.ToolStripButton btnGenerate;\n        private System.Windows.Forms.ToolStripButton btnVerify;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\n        private System.Windows.Forms.ToolStripButton btnHelp;\n        private System.Windows.Forms.RichTextBox txtResult;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/VsDiagDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Client.Win32;\nusing System;\n\nnamespace JexusManager.Features.Main\n{\n    using System.Drawing;\n    using System.IO;\n    using Microsoft.Win32;\n\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Xml;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using Newtonsoft.Json.Linq;\n    using System.Linq;\n    using System.Windows.Forms;\n    using Microsoft.Extensions.Logging;\n    using JexusManager;\n\n    public partial class VsDiagDialog : DialogForm\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"VsDiagDialog\");\n\n        public VsDiagDialog(IServiceProvider provider, Site site)\n            : base(provider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnGenerate, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtResult.Clear();\n                    try\n                    {\n                        Warn(\"IMPORTANT: This report might contain confidential information. Mask such before sharing with others.\");\n                        Warn(\"-----\");\n\n                        var root = site.PhysicalPath.ExpandIisExpressEnvironmentVariables(site.Applications[0].GetActualExecutable());\n                        if (string.IsNullOrWhiteSpace(root))\n                        {\n                            Error(\"Invalid site root directory is detected.\");\n                            return;\n                        }\n\n                        Debug($\"Scan the folder {root} for project files.\");\n\n                        string[] projects = null;\n                        try\n                        {\n                            projects = Directory.GetFiles(root, \"*.csproj\");\n                            Info($\"{projects.Length} project(s) are detected.\");\n                        }\n                        catch (IOException ex)\n                        {\n                            Error($\"Query project files failed: {ex.Message}\");\n                            return;\n                        }\n\n                        foreach (var proj in projects)\n                        {\n                            Info($\"* {Path.GetFileName(proj)}\");\n                        }\n\n                        if (projects.Length != 1)\n                        {\n                            Warn(\"Zero or multiple C# project files are detected. Currently VSDiag only supports a single C# project.\");\n                            return;\n                        }\n\n                        Debug(Environment.NewLine);\n                        var project = projects[0];\n\n                        Info($\"Project file: {project}.\");\n                        Info($\"IIS Express configuration file: {site.Server.FileName}.\");\n                        // TODO: free the resources.\n                        var xmlReader = XmlReader.Create(new StringReader(File.ReadAllText(project))); // Or whatever your source is, of course.\n                        var xml = XDocument.Load(xmlReader);\n                        var namespaceManager = new XmlNamespaceManager(xmlReader.NameTable); // We now have a namespace manager that knows of the namespaces used in your document.\n                        var name = xml.Root.GetDefaultNamespace();\n                        namespaceManager.AddNamespace(\"x\", name.NamespaceName); // We add an explicit prefix mapping for our query.\n\n                        if (IsWebProject(xml.Root.XPathSelectElement(\"/x:Project/x:PropertyGroup/x:ProjectTypeGuids\", namespaceManager)?.Value))\n                        {\n                            AnalyzeWebProject(xml, namespaceManager, name, site);\n                        }\n                        else if (IsAspNetCoreProject(xml))\n                        {\n                            AnalyzeAspNetCoreProject(project, site);\n                        }\n                        else\n                        {\n                            Error(\"The .csproj file does not seem to be a web project.\");\n                            return;\n                        }\n                    }\n                    catch (Exception ex)\n                    {\n                        Debug(ex.ToString());\n                        _logger.LogError(ex, \"Error analyzing VS configuration\");\n                    }\n                }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnSave, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     var fileName = DialogHelper.ShowSaveFileDialog(null, \"Text Files|*.txt|All Files|*.*\", site.Applications[0].GetActualExecutable());\n                     if (string.IsNullOrEmpty(fileName))\n                     {\n                         return;\n                     }\n\n                     File.WriteAllText(fileName, txtResult.Text);\n                 }));\n\n            container.Add(\n                 Observable.FromEventPattern<EventArgs>(btnVerify, \"Click\")\n                 .ObserveOn(System.Threading.SynchronizationContext.Current)\n                 .Subscribe(evt =>\n                 {\n                     txtResult.Clear();\n                 }));\n        }\n\n        private void AnalyzeAspNetCoreProject(string project, Site site)\n        {\n            Debug($\"Analyze ASP.NET Core project.\");\n            var folder = Path.GetDirectoryName(project);\n            var settingsFile = Path.Combine(folder, \"Properties\", \"launchSettings.json\");\n            if (!File.Exists(settingsFile))\n            {\n                Error($\"Cannot find {settingsFile}.\");\n                return;\n            }\n\n            Info($\"Visual Studio launchSettings.json: {settingsFile}.\");\n            Debug($\"Extract debugging profiles.\");\n            JObject o1 = JObject.Parse(File.ReadAllText(settingsFile));\n            var profiles = o1[\"profiles\"].Children<JProperty>().ToList();\n            if (profiles.Count == 0)\n            {\n                Error($\"Cannot find mandate profiles.\");\n                Error($\"Please fix launchSettings.json.\");\n                return;\n            }\n\n            Info($\"Found {profiles.Count} profile(s).\");\n            foreach (var profile in profiles)\n            {\n                Info($\"* {profile.Name}\");\n            }\n\n            Debug(Environment.NewLine);\n            Debug(\"Extract IIS settings.\");\n            var iisSettings = o1[\"iisSettings\"]?.Children<JProperty>().ToList();\n            if (iisSettings == null)\n            {\n                Error($\"Cannot find 'iisSettings' section.\");\n                Error($\"Please fix launchSettings.json.\");\n                return;\n            }\n\n            var hasExpress = false;\n            foreach (var item in iisSettings)\n            {\n                if (item.Name == \"iisExpress\")\n                {\n                    hasExpress = true;\n                    var sslPort = o1[\"iisSettings\"][\"iisExpress\"][\"sslPort\"]?.Value<int>();\n                    if (sslPort == null)\n                    {\n                        sslPort = 0; // the default value is 0.\n                    }\n\n                    Info($\"sslPort is {sslPort}.\");\n                    var rawUrl = o1[\"iisSettings\"][\"iisExpress\"][\"applicationUrl\"]?.Value<string>();\n                    if (rawUrl == null)\n                    {\n                        Error($\"Cannot find applicationUrl.\");\n                        Error($\"Please fix launchSettings.json.\");\n                        return;\n                    }\n\n                    Info($\"applicationUrl is {rawUrl}.\");\n                    var iisUrl = sslPort == 0 ? rawUrl : $\"https://localhost:{sslPort}/\";\n                    var matched = false;\n                    foreach (Microsoft.Web.Administration.Binding binding in site.Bindings)\n                    {\n                        Info($\"Binding {binding.ToShortString()}.\");\n                        if (string.Equals(binding.ToIisUrl(), iisUrl, StringComparison.OrdinalIgnoreCase))\n                        {\n                            Info($\"A matching binding is found for {iisUrl}.\");\n                            matched = true;\n                        }\n                    }\n\n                    if (!matched)\n                    {\n                        Error($\"No matching binding is found for {iisUrl}\");\n                        Error($\"Please edit launchSettings.json and IIS Express configuration file to match each other.\");\n                    }\n                }\n            }\n\n            if (!hasExpress)\n            {\n                Error(\"Cannot find 'iisSettings/iisExpress' section.\");\n                Error($\"Please fix launchSettings.json.\");\n            }\n        }\n\n        private static bool IsAspNetCoreProject(XDocument xml)\n        {\n            if (xml.Root.Name == \"Project\" && xml.Root.Attribute(\"Sdk\").Value == \"Microsoft.NET.Sdk.Web\")\n            {\n                // TODO: use a more accurate way to detect SDK.\n                return true;\n            }\n\n            return false;\n        }\n\n        private void AnalyzeWebProject(XDocument xml, XmlNamespaceManager namespaceManager, XNamespace name, Site site)\n        {\n            try\n            {\n                Debug($\"Analyze ASP.NET project.\");\n                Debug($\"Extract web project settings.\");\n                var webSettings = xml.Root.XPathSelectElement(\"/x:Project/x:ProjectExtensions/x:VisualStudio/x:FlavorProperties/x:WebProjectProperties\", namespaceManager);\n                var useIIS = webSettings.Element(name + \"UseIIS\")?.Value;\n                Info($\"UseIIS: {useIIS}\");\n                var autoAssignPort = webSettings.Element(name + \"AutoAssignPort\")?.Value;\n                Info($\"AutoAssignPort: {autoAssignPort}\");\n                var developmentServerPort = webSettings.Element(name + \"DevelopmentServerPort\")?.Value;\n                Info($\"DevelopmentServerPort: {developmentServerPort}\");\n                var developmentServerVPath = webSettings.Element(name + \"DevelopmentServerVPath\")?.Value;\n                Info($\"DevelopmentServerVPath: {developmentServerVPath}\");\n                var iisUrl = webSettings.Element(name + \"IISUrl\")?.Value;\n                Info($\"IISUrl: {iisUrl}\");\n                var ntlmAuthentication = webSettings.Element(name + \"NTLMAuthentication\")?.Value;\n                Info($\"NTLMAuthentication: {ntlmAuthentication}\");\n                var useCustomServer = webSettings.Element(name + \"UseCustomServer\")?.Value;\n                Info($\"UseCustomServer: {useCustomServer}\");\n                var customServerUrl = webSettings.Element(name + \"CustomServerUrl\")?.Value;\n                Info($\"CustomServerUrl: {customServerUrl}\");\n                var saveServerSettingsInUserFile = webSettings.Element(name + \"SaveServerSettingsInUserFile\")?.Value;\n                Info($\"SaveServerSettingsInUserFile: {saveServerSettingsInUserFile}\");\n\n                var useIISExpress = xml.Root.XPathSelectElement(\"/x:Project/x:PropertyGroup/x:UseIISExpress\", namespaceManager)?.Value;\n                Info($\"UseIISExpress: {useIISExpress}\");\n                var iisExpressSSLPort = xml.Root.XPathSelectElement(\"/x:Project/x:PropertyGroup/x:IISExpressSSLPort\", namespaceManager)?.Value;\n                Info($\"IISExpressSSLPort: {iisExpressSSLPort}\");\n                var iisExpressAnonymousAuthentication = xml.Root.XPathSelectElement(\"/x:Project/x:PropertyGroup/x:IISExpressAnonymousAuthentication\", namespaceManager)?.Value;\n                Info($\"IISExpressAnonymousAuthentication: {iisExpressAnonymousAuthentication}\");\n                var iisExpressWindowsAuthentication = xml.Root.XPathSelectElement(\"/x:Project/x:PropertyGroup/x:IISExpressWindowsAuthentication\", namespaceManager)?.Value;\n                Info($\"IISExpressWindowsAuthentication: {iisExpressWindowsAuthentication}\");\n                var iisExpressUseClassicPipelineMode = xml.Root.XPathSelectElement(\"/x:Project/x:PropertyGroup/x:IISExpressUseClassicPipelineMode\", namespaceManager)?.Value;\n                Info($\"IISExpressUseClassicPipelineMode: {iisExpressUseClassicPipelineMode}\");\n                var useGlobalApplicationHostFile = xml.Root.XPathSelectElement(\"/x:Project/x:PropertyGroup/x:UseGlobalApplicationHostFile\", namespaceManager)?.Value;\n                Info($\"UseGlobalApplicationHostFile: {useGlobalApplicationHostFile}\");\n\n                Info($\"Scan all bindings.\");\n                bool matched = false;\n                if (string.Equals(useIIS, \"true\", StringComparison.OrdinalIgnoreCase))\n                {\n                    if (string.Equals(useIISExpress, \"true\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        // IIS Express\n                        Info($\"IIS Express is used for this project.\");\n                        foreach (Microsoft.Web.Administration.Binding binding in site.Bindings)\n                        {\n                            Info($\"Binding {binding.ToShortString()}.\");\n                            if (string.Equals(binding.ToIisUrl(), iisUrl, StringComparison.OrdinalIgnoreCase))\n                            {\n                                Info($\"A matching binding is found for {iisUrl}.\");\n                                matched = true;\n                            }\n                        }\n                    }\n                    else if (string.Equals(useIISExpress, \"false\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        // IIS\n                        Info($\"Full IIS is used for this project.\");\n                        foreach (Microsoft.Web.Administration.Binding binding in site.Bindings)\n                        {\n                            Info($\"Binding {binding.ToShortString()}.\");\n                            if (string.Equals(binding.ToIisUrl(), iisUrl, StringComparison.OrdinalIgnoreCase))\n                            {\n                                Info($\"A matching binding is found for {iisUrl}.\");\n                                matched = true;\n                            }\n                        }\n                    }\n                    else\n                    {\n                        Warn($\"An unexpected condition hit.\");\n                        _logger.LogWarning(\"Unexpected condition hit\");\n                        return;\n                    }\n                }\n                else\n                {\n                    // External server\n                    Warn($\"External server is used.\");\n                    return;\n                }\n\n                if (!matched)\n                {\n                    Error($\"No matching binding is found for {iisUrl}.\");\n                    Error($\"Please edit project file and IIS Express configuration file to match each other.\");\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error analyzing web project\");\n            }\n        }\n\n        //*\n        private static readonly string[] mvc = {\"{603C0E0B-DB56-11DC-BE95-000D561079B0}\", // ASP.NET MVC 1\t\n        \"{F85E285D-A4E0-4152-9332-AB1D724D3325}\", // ASP.NET MVC 2\t\n        \"{E53F8FEA-EAE0-44A6-8774-FFD645390401}\", // ASP.NET MVC 3\t\n        \"{E3E379DF-F4C6-4180-9B81-6769533ABE47}\", // ASP.NET MVC 4\t\n        \"{349C5851-65DF-11DA-9384-00065B846F21}\" // ASP.NET MVC 5\n        };\n        // */\n\n        private static bool IsWebProject(string value)\n        {\n            if (value == null)\n                return false;\n\n            foreach (var name in mvc)\n            {\n                if (value.IndexOf(name, StringComparison.OrdinalIgnoreCase) > -1)\n                {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        private void Debug(string text)\n        {\n            txtResult.AppendText(text);\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Error(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Red;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Warn(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Green;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void Info(string text)\n        {\n            var defaultColor = txtResult.SelectionColor;\n            txtResult.SelectionColor = Color.Blue;\n            txtResult.AppendText(text);\n            txtResult.SelectionColor = defaultColor;\n            txtResult.AppendText(Environment.NewLine);\n        }\n\n        private void BtnHelpClick(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://docs.lextudio.com/jexusmanager/tutorials/vs-diagnostics.html\");\n        }\n\n        private void SslDiagDialogHelpButtonClicked(object sender, System.ComponentModel.CancelEventArgs e)\n        {\n            BtnHelpClick(null, EventArgs.Empty);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Features/Main/VsDiagDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/JexusManager.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager</RootNamespace>\n    <ApplicationIcon>iis.ico</ApplicationIcon>\n    <OutputType>WinExe</OutputType>\n    <StartupObject />\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\"'$(RuntimeIdentifier)' == 'win-arm64'\">\n    <DefineConstants>$(DefineConstants);ARM64</DefineConstants>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'\">\n    <DefineConstants>$(DefineConstants)TRACE;DESIGN</DefineConstants>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Update=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <CustomToolNamespace>JexusManager.Main.Properties</CustomToolNamespace>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n      <DesignTime>True</DesignTime>\n    </Compile>\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <Compile Update=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"ActionListWinForms\" Version=\"2.0.0\" />\n    <PackageReference Include=\"Enums.NET\" Version=\"5.0.0\" />\n    <PackageReference Include=\"GitVersion.MsBuild\" Version=\"5.12.0\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n    <PackageReference Include=\"ini-parser\" Version=\"2.5.2\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging\" Version=\"9.0.5\" />\n    <PackageReference Include=\"Mono.Options\" Version=\"6.12.0.148\" />\n    <PackageReference Include=\"NuGet.Versioning\" Version=\"6.14.0\" />\n    <PackageReference Include=\"Octokit\" Version=\"14.0.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Breadcrumb\\JexusManager.Breadcrumb.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Access\\JexusManager.Features.Access.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Asp\\JexusManager.Features.Asp.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Authentication\\JexusManager.Features.Authentication.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Authorization\\JexusManager.Features.Authorization.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Caching\\JexusManager.Features.Caching.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Certificates\\JexusManager.Features.Certificates.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Cgi\\JexusManager.Features.Cgi.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Compression\\JexusManager.Features.Compression.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.DefaultDocument\\JexusManager.Features.DefaultDocument.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.DirectoryBrowse\\JexusManager.Features.DirectoryBrowse.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.FastCgi\\JexusManager.Features.FastCgi.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Handlers\\JexusManager.Features.Handlers.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.HttpApi\\JexusManager.Features.HttpApi.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.HttpErrors\\JexusManager.Features.HttpErrors.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.HttpRedirect\\JexusManager.Features.HttpRedirect.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.IpSecurity\\JexusManager.Features.IpSecurity.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.IsapiCgiRestriction\\JexusManager.Features.IsapiCgiRestriction.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.IsapiFilters\\JexusManager.Features.IsapiFilters.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Jexus\\JexusManager.Features.Jexus.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Logging\\JexusManager.Features.Logging.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.MimeMap\\JexusManager.Features.MimeMap.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Modules\\JexusManager.Features.Modules.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.RequestFiltering\\JexusManager.Features.RequestFiltering.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.ResponseHeaders\\JexusManager.Features.ResponseHeaders.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Rewrite\\JexusManager.Features.Rewrite.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.TraceFailedRequests\\JexusManager.Features.TraceFailedRequests.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Administration\\Microsoft.Web.Administration.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager/LoggingService.cs",
    "content": "using System;\nusing System.Collections.Concurrent;\nusing System.Drawing;\nusing System.Windows.Forms;\nusing Microsoft.Extensions.Logging;\n\nnamespace JexusManager\n{\n    public class TextBoxLoggerProvider : ILoggerProvider\n    {\n        private readonly RichTextBox _textBox;\n        private readonly ConcurrentQueue<(string text, Color color)> _pendingMessages = new ConcurrentQueue<(string, Color)>();\n        private readonly object _lock = new object();\n        private bool _isInitialized;\n\n        public TextBoxLoggerProvider(RichTextBox textBox)\n        {\n            _textBox = textBox;\n            _textBox.HandleCreated += (s, e) => Initialize();\n        }\n\n        public ILogger CreateLogger(string categoryName)\n        {\n            return new TextBoxLogger(this, categoryName);\n        }\n\n        public void Dispose()\n        {\n            // No resources to dispose\n        }\n\n        internal void LogMessage(string message, Color color)\n        {\n            if (!_isInitialized)\n            {\n                _pendingMessages.Enqueue((message + Environment.NewLine, color));\n                return;\n            }\n\n            AppendTextSafe(message + Environment.NewLine, color);\n        }\n\n        private void Initialize()\n        {\n            lock (_lock)\n            {\n                if (!_isInitialized)\n                {\n                    _isInitialized = true;\n                    // Process any pending messages\n                    while (_pendingMessages.TryDequeue(out var message))\n                    {\n                        AppendTextSafe(message.text, message.color);\n                    }\n                }\n            }\n        }\n\n        private void AppendTextSafe(string text, Color color)\n        {\n            if (_textBox.IsDisposed)\n                return;\n\n            if (_textBox.InvokeRequired)\n            {\n                try\n                {\n                    _textBox.Invoke(new Action(() => AppendTextSafe(text, color)));\n                }\n                catch (ObjectDisposedException)\n                {\n                    // Form might be closing\n                }\n                return;\n            }\n\n            int start = _textBox.TextLength;\n            _textBox.AppendText(text);\n            int end = _textBox.TextLength;\n\n            // Color the new text\n            _textBox.Select(start, end - start);\n            _textBox.SelectionColor = color;\n            _textBox.SelectionLength = 0; // Clear selection\n\n            // Keep last 1000 lines\n            while (_textBox.Lines.Length > 1000)\n            {\n                var index = _textBox.GetFirstCharIndexFromLine(0);\n                var length = _textBox.GetFirstCharIndexFromLine(1) - index;\n                if (length > 0)\n                    _textBox.Text = _textBox.Text.Remove(index, length);\n            }\n\n            _textBox.SelectionStart = _textBox.TextLength;\n            _textBox.ScrollToCaret();\n        }\n    }\n\n    public class TextBoxLogger : ILogger\n    {\n        private readonly TextBoxLoggerProvider _provider;\n\n        public TextBoxLogger(TextBoxLoggerProvider provider, string categoryName)\n        {\n            _provider = provider;\n        }\n\n        public IDisposable BeginScope<TState>(TState state)\n        {\n            return null;\n        }\n\n        public bool IsEnabled(LogLevel logLevel)\n        {\n            return true;\n        }\n\n        public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)\n        {\n            if (!IsEnabled(logLevel))\n                return;\n\n            // Convert log levels to short names and get appropriate colors\n            var (levelText, color) = logLevel switch\n            {\n                LogLevel.Trace => (\"trc\", Color.Gray),\n                LogLevel.Debug => (\"dbg\", Color.LightGray),\n                LogLevel.Information => (\"inf\", Color.White),\n                LogLevel.Warning => (\"wrn\", Color.Yellow),\n                LogLevel.Error => (\"err\", Color.Red),\n                LogLevel.Critical => (\"crt\", Color.Magenta),\n                _ => (\"unk\", Color.DarkGray)\n            };\n\n            var message = $\"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] [{levelText}] {formatter(state, exception)}\";\n            if (exception != null)\n                message += Environment.NewLine + exception;\n\n            _provider.LogMessage(message, color);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/MainForm.Designer.cs",
    "content": "﻿namespace JexusManager\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using Crad.Windows.Forms.Actions;\n    using JexusManager.Breadcrumb;\n\n    public sealed partial class MainForm\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            components = new Container();\n            scMain = new SplitContainer();\n            tableLayoutPanel1 = new TableLayoutPanel();\n            panel2 = new Panel();\n            treeView1 = new TreeView();\n            imageList1 = new ImageList(components);\n            toolStrip2 = new ToolStrip();\n            toolStripButton3 = new ToolStripSplitButton();\n            btnServer = new ToolStripMenuItem();\n            connectToWebsiteToolStripMenuItem = new ToolStripMenuItem();\n            connectToApplicationToolStripMenuItem = new ToolStripMenuItem();\n            btnSave = new ToolStripButton();\n            toolStripSeparator2 = new ToolStripSeparator();\n            btnUp = new ToolStripButton();\n            toolStripSeparator1 = new ToolStripSeparator();\n            btnDisconnect = new ToolStripButton();\n            panel1 = new Panel();\n            label1 = new Label();\n            cmsServer = new ContextMenuStrip(components);\n            refreshToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem1 = new ToolStripSeparator();\n            removeConnectionToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem4 = new ToolStripSeparator();\n            addWebsiteToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem2 = new ToolStripSeparator();\n            btnStartServer = new ToolStripMenuItem();\n            btnStopServer = new ToolStripMenuItem();\n            toolStripMenuItem3 = new ToolStripSeparator();\n            btnRenameServer = new ToolStripMenuItem();\n            toolStripMenuItem5 = new ToolStripSeparator();\n            btnOpenConfig = new ToolStripMenuItem();\n            toolStripMenuItem40 = new ToolStripSeparator();\n            switchToContentViewToolStripMenuItem = new ToolStripMenuItem();\n            cmsApplicationPools = new ContextMenuStrip(components);\n            addApplicationPoolToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem6 = new ToolStripSeparator();\n            refreshToolStripMenuItem1 = new ToolStripMenuItem();\n            cmsSites = new ContextMenuStrip(components);\n            addWebsiteToolStripMenuItem1 = new ToolStripMenuItem();\n            toolStripMenuItem7 = new ToolStripSeparator();\n            refreshToolStripMenuItem2 = new ToolStripMenuItem();\n            toolStripMenuItem8 = new ToolStripSeparator();\n            switchToContentViewToolStripMenuItem1 = new ToolStripMenuItem();\n            cmsSite = new ContextMenuStrip(components);\n            exploreToolStripMenuItem = new ToolStripMenuItem();\n            editPermissionsToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem10 = new ToolStripSeparator();\n            btnApplication = new ToolStripMenuItem();\n            addVirtualDirectoryToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem11 = new ToolStripSeparator();\n            editBindingsToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem12 = new ToolStripSeparator();\n            manageWebsiteToolStripMenuItem = new ToolStripMenuItem();\n            btnRestartSite = new ToolStripMenuItem();\n            startToolStripMenuItem1 = new ToolStripMenuItem();\n            stopToolStripMenuItem2 = new ToolStripMenuItem();\n            toolStripMenuItem26 = new ToolStripSeparator();\n            btnBrowseSite = new ToolStripMenuItem();\n            toolStripMenuItem27 = new ToolStripSeparator();\n            advancedSettingsToolStripMenuItem1 = new ToolStripMenuItem();\n            toolStripMenuItem13 = new ToolStripSeparator();\n            refreshToolStripMenuItem3 = new ToolStripMenuItem();\n            removeToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem14 = new ToolStripSeparator();\n            renameToolStripMenuItem1 = new ToolStripMenuItem();\n            toolStripMenuItem17 = new ToolStripSeparator();\n            switchToContentViewToolStripMenuItem2 = new ToolStripMenuItem();\n            statusStrip1 = new StatusStrip();\n            txtInfo = new ToolStripStatusLabel();\n            pbStatus = new ToolStripProgressBar();\n            menuStrip1 = new MenuStrip();\n            fileToolStripMenuItem = new ToolStripMenuItem();\n            connectToAServerToolStripMenuItem = new ToolStripMenuItem();\n            connectToAWebsiteToolStripMenuItem = new ToolStripMenuItem();\n            connectToAnApplicationToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem22 = new ToolStripSeparator();\n            saveConnectionsToolStripMenuItem = new ToolStripMenuItem();\n            disconnectToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem21 = new ToolStripSeparator();\n            runAsAdministratorToolStripMenuItem = new ToolStripMenuItem();\n            exitToolStripMenuItem = new ToolStripMenuItem();\n            viewToolStripMenuItem = new ToolStripMenuItem();\n            backToolStripMenuItem = new ToolStripMenuItem();\n            forwardToolStripMenuItem = new ToolStripMenuItem();\n            upOneLevelToolStripMenuItem = new ToolStripMenuItem();\n            homeToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem19 = new ToolStripSeparator();\n            stopToolStripMenuItem1 = new ToolStripMenuItem();\n            refreshToolStripMenuItem4 = new ToolStripMenuItem();\n            toolStripMenuItem20 = new ToolStripSeparator();\n            groupByToolStripMenuItem = new ToolStripMenuItem();\n            sortByToolStripMenuItem = new ToolStripMenuItem();\n            viewToolStripMenuItem1 = new ToolStripMenuItem();\n            helpToolStripMenuItem = new ToolStripMenuItem();\n            iISHelpToolStripMenuItem = new ToolStripMenuItem();\n            iISOnMSDNOnlineToolStripMenuItem = new ToolStripMenuItem();\n            iISNETOnlineToolStripMenuItem = new ToolStripMenuItem();\n            iISKBsOnlineToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem28 = new ToolStripSeparator();\n            btnUpdate = new ToolStripMenuItem();\n            toolStripMenuItem18 = new ToolStripSeparator();\n            btnAbout = new ToolStripMenuItem();\n            actionList1 = new ActionList();\n            actConnectServer = new Action();\n            actSave = new Action();\n            actUp = new Action();\n            actDisconnect = new Action();\n            actCreateSite = new Action();\n            actExplore = new Action();\n            actEditPermissions = new Action();\n            actCreateApplication = new Action();\n            actCreateVirtualDirectory = new Action();\n            actBrowse = new Action();\n            actConnectSite = new Action();\n            actConnectionApplication = new Action();\n            actRunAsAdmin = new Action();\n            actBack = new Action();\n            actForward = new Action();\n            connectToAServerToolStripMenuItem1 = new ToolStripMenuItem();\n            connectToAWebsiteToolStripMenuItem1 = new ToolStripMenuItem();\n            connectToAnApplicationToolStripMenuItem1 = new ToolStripMenuItem();\n            addApplicationToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem38 = new ToolStripMenuItem();\n            toolStripMenuItem49 = new ToolStripMenuItem();\n            exploreToolStripMenuItem1 = new ToolStripMenuItem();\n            editPermissionsToolStripMenuItem1 = new ToolStripMenuItem();\n            addVirtualDirectoryToolStripMenuItem1 = new ToolStripMenuItem();\n            btnBrowseApplication = new ToolStripMenuItem();\n            toolStripMenuItem36 = new ToolStripMenuItem();\n            toolStripMenuItem37 = new ToolStripMenuItem();\n            toolStripMenuItem39 = new ToolStripMenuItem();\n            toolStripMenuItem41 = new ToolStripMenuItem();\n            toolStripMenuItem46 = new ToolStripMenuItem();\n            toolStripMenuItem47 = new ToolStripMenuItem();\n            toolStripMenuItem50 = new ToolStripMenuItem();\n            toolStripMenuItem52 = new ToolStripMenuItem();\n            toolStripButton1 = new ToolStripButton();\n            toolStripButton2 = new ToolStripButton();\n            tsbPath = new ToolStripBreadcrumbItem();\n            cmsIis = new ContextMenuStrip(components);\n            refreshToolStripMenuItem5 = new ToolStripMenuItem();\n            toolStripMenuItem23 = new ToolStripSeparator();\n            cmsApplication = new ContextMenuStrip(components);\n            toolStripMenuItem9 = new ToolStripSeparator();\n            toolStripMenuItem15 = new ToolStripSeparator();\n            manageApplicationToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem25 = new ToolStripSeparator();\n            advancedSettingsToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem16 = new ToolStripSeparator();\n            refreshToolStripMenuItem6 = new ToolStripMenuItem();\n            removeToolStripMenuItem1 = new ToolStripMenuItem();\n            toolStripMenuItem24 = new ToolStripSeparator();\n            switchToContentViewToolStripMenuItem3 = new ToolStripMenuItem();\n            cmsServers = new ContextMenuStrip(components);\n            refreshToolStripMenuItem9 = new ToolStripMenuItem();\n            toolStripMenuItem34 = new ToolStripSeparator();\n            addServerToolStripMenuItem = new ToolStripMenuItem();\n            toolStripMenuItem35 = new ToolStripSeparator();\n            switchToContentViewToolStripMenuItem6 = new ToolStripMenuItem();\n            cmsVirtualDirectory = new ContextMenuStrip(components);\n            toolStripSeparator3 = new ToolStripSeparator();\n            convertToApplicationToolStripMenuItem = new ToolStripMenuItem();\n            toolStripSeparator4 = new ToolStripSeparator();\n            manageVirtualDirectoryToolStripMenuItem = new ToolStripMenuItem();\n            toolStripSeparator5 = new ToolStripSeparator();\n            toolStripMenuItem42 = new ToolStripMenuItem();\n            toolStripSeparator6 = new ToolStripSeparator();\n            toolStripMenuItem43 = new ToolStripMenuItem();\n            toolStripMenuItem44 = new ToolStripMenuItem();\n            toolStripSeparator7 = new ToolStripSeparator();\n            toolStripMenuItem45 = new ToolStripMenuItem();\n            cmsPhysicalDirectory = new ContextMenuStrip(components);\n            toolStripSeparator8 = new ToolStripSeparator();\n            toolStripMenuItem48 = new ToolStripMenuItem();\n            toolStripSeparator9 = new ToolStripSeparator();\n            manageFolderToolStripMenuItem = new ToolStripMenuItem();\n            toolStripSeparator11 = new ToolStripSeparator();\n            toolStripMenuItem54 = new ToolStripMenuItem();\n            toolStripSeparator12 = new ToolStripSeparator();\n            toolStripMenuItem56 = new ToolStripMenuItem();\n            _logSplitter = new SplitContainer();\n            _logPanel = new Panel();\n            tsTop = new ToolStrip();\n            ((ISupportInitialize)scMain).BeginInit();\n            scMain.Panel1.SuspendLayout();\n            scMain.SuspendLayout();\n            tableLayoutPanel1.SuspendLayout();\n            panel2.SuspendLayout();\n            toolStrip2.SuspendLayout();\n            panel1.SuspendLayout();\n            cmsServer.SuspendLayout();\n            cmsApplicationPools.SuspendLayout();\n            cmsSites.SuspendLayout();\n            cmsSite.SuspendLayout();\n            statusStrip1.SuspendLayout();\n            menuStrip1.SuspendLayout();\n            ((ISupportInitialize)actionList1).BeginInit();\n            cmsIis.SuspendLayout();\n            cmsApplication.SuspendLayout();\n            cmsServers.SuspendLayout();\n            cmsVirtualDirectory.SuspendLayout();\n            cmsPhysicalDirectory.SuspendLayout();\n            ((ISupportInitialize)_logSplitter).BeginInit();\n            _logSplitter.Panel1.SuspendLayout();\n            _logSplitter.Panel2.SuspendLayout();\n            _logSplitter.SuspendLayout();\n            tsTop.SuspendLayout();\n            SuspendLayout();\n            // \n            // scMain\n            // \n            scMain.Dock = DockStyle.Fill;\n            scMain.Location = new System.Drawing.Point(0, 0);\n            scMain.Name = \"scMain\";\n            // \n            // scMain.Panel1\n            // \n            scMain.Panel1.Controls.Add(tableLayoutPanel1);\n            scMain.Panel1MinSize = 150;\n            scMain.Size = new System.Drawing.Size(915, 426);\n            scMain.SplitterDistance = 175;\n            scMain.SplitterWidth = 5;\n            scMain.TabIndex = 0;\n            scMain.SplitterMoved += scMain_SplitterMoved;\n            // \n            // tableLayoutPanel1\n            // \n            tableLayoutPanel1.ColumnCount = 1;\n            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));\n            tableLayoutPanel1.Controls.Add(panel2, 0, 1);\n            tableLayoutPanel1.Controls.Add(panel1, 0, 0);\n            tableLayoutPanel1.Dock = DockStyle.Fill;\n            tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            tableLayoutPanel1.RowCount = 2;\n            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 27F));\n            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));\n            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 23F));\n            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 23F));\n            tableLayoutPanel1.Size = new System.Drawing.Size(175, 426);\n            tableLayoutPanel1.TabIndex = 3;\n            // \n            // panel2\n            // \n            panel2.Controls.Add(treeView1);\n            panel2.Controls.Add(toolStrip2);\n            panel2.Dock = DockStyle.Fill;\n            panel2.Location = new System.Drawing.Point(3, 30);\n            panel2.Name = \"panel2\";\n            panel2.Size = new System.Drawing.Size(169, 393);\n            panel2.TabIndex = 0;\n            // \n            // treeView1\n            // \n            treeView1.Dock = DockStyle.Fill;\n            treeView1.HideSelection = false;\n            treeView1.ImageIndex = 0;\n            treeView1.ImageList = imageList1;\n            treeView1.LabelEdit = true;\n            treeView1.Location = new System.Drawing.Point(0, 25);\n            treeView1.Name = \"treeView1\";\n            treeView1.SelectedImageIndex = 0;\n            treeView1.Size = new System.Drawing.Size(169, 368);\n            treeView1.TabIndex = 0;\n            treeView1.BeforeLabelEdit += treeView1_BeforeLabelEdit;\n            treeView1.AfterLabelEdit += treeView1_AfterLabelEdit;\n            treeView1.BeforeExpand += treeView1_BeforeExpand;\n            treeView1.AfterSelect += treeView1_AfterSelect;\n            treeView1.NodeMouseClick += treeView1_NodeMouseClick;\n            treeView1.NodeMouseDoubleClick += treeView1_NodeMouseDoubleClick;\n            // \n            // imageList1\n            // \n            imageList1.ColorDepth = ColorDepth.Depth32Bit;\n            imageList1.ImageSize = new System.Drawing.Size(16, 16);\n            imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // toolStrip2\n            // \n            toolStrip2.GripStyle = ToolStripGripStyle.Hidden;\n            toolStrip2.Items.AddRange(new ToolStripItem[] { toolStripButton3, btnSave, toolStripSeparator2, btnUp, toolStripSeparator1, btnDisconnect });\n            toolStrip2.Location = new System.Drawing.Point(0, 0);\n            toolStrip2.Name = \"toolStrip2\";\n            toolStrip2.Padding = new Padding(0, 0, 2, 0);\n            toolStrip2.Size = new System.Drawing.Size(169, 25);\n            toolStrip2.TabIndex = 6;\n            toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripButton3\n            // \n            toolStripButton3.DisplayStyle = ToolStripItemDisplayStyle.Image;\n            toolStripButton3.DropDownItems.AddRange(new ToolStripItem[] { btnServer, connectToWebsiteToolStripMenuItem, connectToApplicationToolStripMenuItem });\n            toolStripButton3.Image = Main.Properties.Resources.connect_16;\n            toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta;\n            toolStripButton3.Name = \"toolStripButton3\";\n            toolStripButton3.Size = new System.Drawing.Size(32, 22);\n            toolStripButton3.Text = \"Create New Connection\";\n            // \n            // btnServer\n            // \n            actionList1.SetAction(btnServer, actConnectServer);\n            btnServer.Name = \"btnServer\";\n            btnServer.Size = new System.Drawing.Size(222, 22);\n            btnServer.Text = \"Connect to a Server...\";\n            btnServer.ToolTipText = \"Connect to a Server...\";\n            // \n            // connectToWebsiteToolStripMenuItem\n            // \n            connectToWebsiteToolStripMenuItem.Enabled = false;\n            connectToWebsiteToolStripMenuItem.Image = Main.Properties.Resources.site_16;\n            connectToWebsiteToolStripMenuItem.Name = \"connectToWebsiteToolStripMenuItem\";\n            connectToWebsiteToolStripMenuItem.Size = new System.Drawing.Size(222, 22);\n            connectToWebsiteToolStripMenuItem.Text = \"Connect to a Website...\";\n            // \n            // connectToApplicationToolStripMenuItem\n            // \n            connectToApplicationToolStripMenuItem.Enabled = false;\n            connectToApplicationToolStripMenuItem.Image = Main.Properties.Resources.application_16;\n            connectToApplicationToolStripMenuItem.Name = \"connectToApplicationToolStripMenuItem\";\n            connectToApplicationToolStripMenuItem.Size = new System.Drawing.Size(222, 22);\n            connectToApplicationToolStripMenuItem.Text = \"Connect to an Application...\";\n            // \n            // btnSave\n            // \n            actionList1.SetAction(btnSave, actSave);\n            btnSave.AutoToolTip = false;\n            btnSave.DisplayStyle = ToolStripItemDisplayStyle.Image;\n            btnSave.Enabled = false;\n            btnSave.Name = \"btnSave\";\n            btnSave.Size = new System.Drawing.Size(23, 22);\n            btnSave.Text = \"Save Connections\";\n            btnSave.ToolTipText = \"Save Connections\";\n            // \n            // toolStripSeparator2\n            // \n            toolStripSeparator2.Name = \"toolStripSeparator2\";\n            toolStripSeparator2.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnUp\n            // \n            actionList1.SetAction(btnUp, actUp);\n            btnUp.AutoToolTip = false;\n            btnUp.DisplayStyle = ToolStripItemDisplayStyle.Image;\n            btnUp.Enabled = false;\n            btnUp.Name = \"btnUp\";\n            btnUp.Size = new System.Drawing.Size(23, 22);\n            btnUp.Text = \"Up One Level\";\n            btnUp.ToolTipText = \"Up One Level\";\n            // \n            // toolStripSeparator1\n            // \n            toolStripSeparator1.Name = \"toolStripSeparator1\";\n            toolStripSeparator1.Size = new System.Drawing.Size(6, 25);\n            // \n            // btnDisconnect\n            // \n            actionList1.SetAction(btnDisconnect, actDisconnect);\n            btnDisconnect.AutoToolTip = false;\n            btnDisconnect.DisplayStyle = ToolStripItemDisplayStyle.Image;\n            btnDisconnect.Enabled = false;\n            btnDisconnect.Name = \"btnDisconnect\";\n            btnDisconnect.Size = new System.Drawing.Size(23, 22);\n            btnDisconnect.Text = \"Disconnect\";\n            btnDisconnect.ToolTipText = \"Disconnect\";\n            // \n            // panel1\n            // \n            panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            panel1.Controls.Add(label1);\n            panel1.Dock = DockStyle.Fill;\n            panel1.Location = new System.Drawing.Point(0, 0);\n            panel1.Margin = new Padding(0);\n            panel1.Name = \"panel1\";\n            panel1.Size = new System.Drawing.Size(175, 27);\n            panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            label1.AutoSize = true;\n            label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold);\n            label1.Location = new System.Drawing.Point(3, 6);\n            label1.Name = \"label1\";\n            label1.Size = new System.Drawing.Size(77, 13);\n            label1.TabIndex = 0;\n            label1.Text = \"Connections\";\n            // \n            // cmsServer\n            // \n            cmsServer.Items.AddRange(new ToolStripItem[] { refreshToolStripMenuItem, toolStripMenuItem1, removeConnectionToolStripMenuItem, toolStripMenuItem4, addWebsiteToolStripMenuItem, toolStripMenuItem2, btnStartServer, btnStopServer, toolStripMenuItem3, btnRenameServer, toolStripMenuItem5, btnOpenConfig, toolStripMenuItem40, switchToContentViewToolStripMenuItem });\n            cmsServer.Name = \"cmsServer\";\n            cmsServer.Size = new System.Drawing.Size(202, 216);\n            // \n            // refreshToolStripMenuItem\n            // \n            refreshToolStripMenuItem.Enabled = false;\n            refreshToolStripMenuItem.Image = Main.Properties.Resources.refresh_16;\n            refreshToolStripMenuItem.Name = \"refreshToolStripMenuItem\";\n            refreshToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\n            refreshToolStripMenuItem.Text = \"Refresh\";\n            // \n            // toolStripMenuItem1\n            // \n            toolStripMenuItem1.Name = \"toolStripMenuItem1\";\n            toolStripMenuItem1.Size = new System.Drawing.Size(198, 6);\n            // \n            // removeConnectionToolStripMenuItem\n            // \n            actionList1.SetAction(removeConnectionToolStripMenuItem, actDisconnect);\n            removeConnectionToolStripMenuItem.Enabled = false;\n            removeConnectionToolStripMenuItem.Name = \"removeConnectionToolStripMenuItem\";\n            removeConnectionToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\n            removeConnectionToolStripMenuItem.Text = \"Disconnect\";\n            removeConnectionToolStripMenuItem.ToolTipText = \"Disconnect\";\n            // \n            // toolStripMenuItem4\n            // \n            toolStripMenuItem4.Name = \"toolStripMenuItem4\";\n            toolStripMenuItem4.Size = new System.Drawing.Size(198, 6);\n            // \n            // addWebsiteToolStripMenuItem\n            // \n            actionList1.SetAction(addWebsiteToolStripMenuItem, actCreateSite);\n            addWebsiteToolStripMenuItem.AutoToolTip = true;\n            addWebsiteToolStripMenuItem.Name = \"addWebsiteToolStripMenuItem\";\n            addWebsiteToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\n            addWebsiteToolStripMenuItem.Text = \"Add Website...\";\n            // \n            // toolStripMenuItem2\n            // \n            toolStripMenuItem2.Name = \"toolStripMenuItem2\";\n            toolStripMenuItem2.Size = new System.Drawing.Size(198, 6);\n            // \n            // btnStartServer\n            // \n            btnStartServer.Enabled = false;\n            btnStartServer.Image = Main.Properties.Resources.start_16;\n            btnStartServer.Name = \"btnStartServer\";\n            btnStartServer.Size = new System.Drawing.Size(201, 22);\n            btnStartServer.Text = \"Start\";\n            // \n            // btnStopServer\n            // \n            btnStopServer.Enabled = false;\n            btnStopServer.Image = Main.Properties.Resources.stop_16;\n            btnStopServer.Name = \"btnStopServer\";\n            btnStopServer.Size = new System.Drawing.Size(201, 22);\n            btnStopServer.Text = \"Stop\";\n            // \n            // toolStripMenuItem3\n            // \n            toolStripMenuItem3.Name = \"toolStripMenuItem3\";\n            toolStripMenuItem3.Size = new System.Drawing.Size(198, 6);\n            // \n            // btnRenameServer\n            // \n            btnRenameServer.Enabled = false;\n            btnRenameServer.Name = \"btnRenameServer\";\n            btnRenameServer.Size = new System.Drawing.Size(201, 22);\n            btnRenameServer.Text = \"Rename\";\n            // \n            // toolStripMenuItem5\n            // \n            toolStripMenuItem5.Name = \"toolStripMenuItem5\";\n            toolStripMenuItem5.Size = new System.Drawing.Size(198, 6);\n            // \n            // btnOpenConfig\n            // \n            btnOpenConfig.Name = \"btnOpenConfig\";\n            btnOpenConfig.Size = new System.Drawing.Size(201, 22);\n            btnOpenConfig.Text = \"Open Configuration File\";\n            btnOpenConfig.Click += btnOpenConfig_Click;\n            // \n            // toolStripMenuItem40\n            // \n            toolStripMenuItem40.Name = \"toolStripMenuItem40\";\n            toolStripMenuItem40.Size = new System.Drawing.Size(198, 6);\n            // \n            // switchToContentViewToolStripMenuItem\n            // \n            switchToContentViewToolStripMenuItem.Enabled = false;\n            switchToContentViewToolStripMenuItem.Image = Main.Properties.Resources.switch_16;\n            switchToContentViewToolStripMenuItem.Name = \"switchToContentViewToolStripMenuItem\";\n            switchToContentViewToolStripMenuItem.Size = new System.Drawing.Size(201, 22);\n            switchToContentViewToolStripMenuItem.Text = \"Switch to Content View\";\n            // \n            // cmsApplicationPools\n            // \n            cmsApplicationPools.Items.AddRange(new ToolStripItem[] { addApplicationPoolToolStripMenuItem, toolStripMenuItem6, refreshToolStripMenuItem1 });\n            cmsApplicationPools.Name = \"cmsApplicationPools\";\n            cmsApplicationPools.Size = new System.Drawing.Size(197, 54);\n            // \n            // addApplicationPoolToolStripMenuItem\n            // \n            addApplicationPoolToolStripMenuItem.Enabled = false;\n            addApplicationPoolToolStripMenuItem.Name = \"addApplicationPoolToolStripMenuItem\";\n            addApplicationPoolToolStripMenuItem.Size = new System.Drawing.Size(196, 22);\n            addApplicationPoolToolStripMenuItem.Text = \"Add Application Pool...\";\n            // \n            // toolStripMenuItem6\n            // \n            toolStripMenuItem6.Name = \"toolStripMenuItem6\";\n            toolStripMenuItem6.Size = new System.Drawing.Size(193, 6);\n            // \n            // refreshToolStripMenuItem1\n            // \n            refreshToolStripMenuItem1.Enabled = false;\n            refreshToolStripMenuItem1.Image = Main.Properties.Resources.refresh_16;\n            refreshToolStripMenuItem1.Name = \"refreshToolStripMenuItem1\";\n            refreshToolStripMenuItem1.Size = new System.Drawing.Size(196, 22);\n            refreshToolStripMenuItem1.Text = \"Refresh\";\n            // \n            // cmsSites\n            // \n            cmsSites.Items.AddRange(new ToolStripItem[] { addWebsiteToolStripMenuItem1, toolStripMenuItem7, refreshToolStripMenuItem2, toolStripMenuItem8, switchToContentViewToolStripMenuItem1 });\n            cmsSites.Name = \"cmsSites\";\n            cmsSites.Size = new System.Drawing.Size(198, 82);\n            // \n            // addWebsiteToolStripMenuItem1\n            // \n            actionList1.SetAction(addWebsiteToolStripMenuItem1, actCreateSite);\n            addWebsiteToolStripMenuItem1.AutoToolTip = true;\n            addWebsiteToolStripMenuItem1.Name = \"addWebsiteToolStripMenuItem1\";\n            addWebsiteToolStripMenuItem1.Size = new System.Drawing.Size(197, 22);\n            addWebsiteToolStripMenuItem1.Text = \"Add Website...\";\n            // \n            // toolStripMenuItem7\n            // \n            toolStripMenuItem7.Name = \"toolStripMenuItem7\";\n            toolStripMenuItem7.Size = new System.Drawing.Size(194, 6);\n            // \n            // refreshToolStripMenuItem2\n            // \n            refreshToolStripMenuItem2.Enabled = false;\n            refreshToolStripMenuItem2.Name = \"refreshToolStripMenuItem2\";\n            refreshToolStripMenuItem2.Size = new System.Drawing.Size(197, 22);\n            refreshToolStripMenuItem2.Text = \"Refresh\";\n            // \n            // toolStripMenuItem8\n            // \n            toolStripMenuItem8.Name = \"toolStripMenuItem8\";\n            toolStripMenuItem8.Size = new System.Drawing.Size(194, 6);\n            // \n            // switchToContentViewToolStripMenuItem1\n            // \n            switchToContentViewToolStripMenuItem1.Enabled = false;\n            switchToContentViewToolStripMenuItem1.Name = \"switchToContentViewToolStripMenuItem1\";\n            switchToContentViewToolStripMenuItem1.Size = new System.Drawing.Size(197, 22);\n            switchToContentViewToolStripMenuItem1.Text = \"Switch to Content View\";\n            // \n            // cmsSite\n            // \n            cmsSite.Items.AddRange(new ToolStripItem[] { exploreToolStripMenuItem, editPermissionsToolStripMenuItem, toolStripMenuItem10, btnApplication, addVirtualDirectoryToolStripMenuItem, toolStripMenuItem11, editBindingsToolStripMenuItem, toolStripMenuItem12, manageWebsiteToolStripMenuItem, toolStripMenuItem13, refreshToolStripMenuItem3, removeToolStripMenuItem, toolStripMenuItem14, renameToolStripMenuItem1, toolStripMenuItem17, switchToContentViewToolStripMenuItem2 });\n            cmsSite.Name = \"cmsSite\";\n            cmsSite.Size = new System.Drawing.Size(198, 260);\n            // \n            // exploreToolStripMenuItem\n            // \n            actionList1.SetAction(exploreToolStripMenuItem, actExplore);\n            exploreToolStripMenuItem.AutoToolTip = true;\n            exploreToolStripMenuItem.Name = \"exploreToolStripMenuItem\";\n            exploreToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            exploreToolStripMenuItem.Text = \"Explore\";\n            // \n            // editPermissionsToolStripMenuItem\n            // \n            actionList1.SetAction(editPermissionsToolStripMenuItem, actEditPermissions);\n            editPermissionsToolStripMenuItem.AutoToolTip = true;\n            editPermissionsToolStripMenuItem.Name = \"editPermissionsToolStripMenuItem\";\n            editPermissionsToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            editPermissionsToolStripMenuItem.Text = \"Edit Permissions...\";\n            // \n            // toolStripMenuItem10\n            // \n            toolStripMenuItem10.Name = \"toolStripMenuItem10\";\n            toolStripMenuItem10.Size = new System.Drawing.Size(194, 6);\n            // \n            // btnApplication\n            // \n            actionList1.SetAction(btnApplication, actCreateApplication);\n            btnApplication.AutoToolTip = true;\n            btnApplication.Name = \"btnApplication\";\n            btnApplication.Size = new System.Drawing.Size(197, 22);\n            btnApplication.Text = \"Add Application...\";\n            // \n            // addVirtualDirectoryToolStripMenuItem\n            // \n            actionList1.SetAction(addVirtualDirectoryToolStripMenuItem, actCreateVirtualDirectory);\n            addVirtualDirectoryToolStripMenuItem.AutoToolTip = true;\n            addVirtualDirectoryToolStripMenuItem.Name = \"addVirtualDirectoryToolStripMenuItem\";\n            addVirtualDirectoryToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            addVirtualDirectoryToolStripMenuItem.Text = \"Add Virtual Directory...\";\n            // \n            // toolStripMenuItem11\n            // \n            toolStripMenuItem11.Name = \"toolStripMenuItem11\";\n            toolStripMenuItem11.Size = new System.Drawing.Size(194, 6);\n            // \n            // editBindingsToolStripMenuItem\n            // \n            editBindingsToolStripMenuItem.Name = \"editBindingsToolStripMenuItem\";\n            editBindingsToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            editBindingsToolStripMenuItem.Text = \"Edit Bindings...\";\n            editBindingsToolStripMenuItem.Click += editBindingsToolStripMenuItem_Click;\n            // \n            // toolStripMenuItem12\n            // \n            toolStripMenuItem12.Name = \"toolStripMenuItem12\";\n            toolStripMenuItem12.Size = new System.Drawing.Size(194, 6);\n            // \n            // manageWebsiteToolStripMenuItem\n            // \n            manageWebsiteToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { btnRestartSite, startToolStripMenuItem1, stopToolStripMenuItem2, toolStripMenuItem26, btnBrowseSite, toolStripMenuItem27, advancedSettingsToolStripMenuItem1 });\n            manageWebsiteToolStripMenuItem.Name = \"manageWebsiteToolStripMenuItem\";\n            manageWebsiteToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            manageWebsiteToolStripMenuItem.Text = \"Manage Website\";\n            // \n            // btnRestartSite\n            // \n            btnRestartSite.Image = Main.Properties.Resources.restart_16;\n            btnRestartSite.Name = \"btnRestartSite\";\n            btnRestartSite.Size = new System.Drawing.Size(181, 22);\n            btnRestartSite.Text = \"Restart\";\n            btnRestartSite.Click += btnRestartSite_Click;\n            // \n            // startToolStripMenuItem1\n            // \n            startToolStripMenuItem1.Enabled = false;\n            startToolStripMenuItem1.Image = Main.Properties.Resources.start_16;\n            startToolStripMenuItem1.Name = \"startToolStripMenuItem1\";\n            startToolStripMenuItem1.Size = new System.Drawing.Size(181, 22);\n            startToolStripMenuItem1.Text = \"Start\";\n            // \n            // stopToolStripMenuItem2\n            // \n            stopToolStripMenuItem2.Enabled = false;\n            stopToolStripMenuItem2.Image = Main.Properties.Resources.stop_16;\n            stopToolStripMenuItem2.Name = \"stopToolStripMenuItem2\";\n            stopToolStripMenuItem2.Size = new System.Drawing.Size(181, 22);\n            stopToolStripMenuItem2.Text = \"Stop\";\n            // \n            // toolStripMenuItem26\n            // \n            toolStripMenuItem26.Name = \"toolStripMenuItem26\";\n            toolStripMenuItem26.Size = new System.Drawing.Size(178, 6);\n            // \n            // btnBrowseSite\n            // \n            actionList1.SetAction(btnBrowseSite, actBrowse);\n            btnBrowseSite.AutoToolTip = true;\n            btnBrowseSite.Name = \"btnBrowseSite\";\n            btnBrowseSite.Size = new System.Drawing.Size(181, 22);\n            btnBrowseSite.Text = \"Browse\";\n            // \n            // toolStripMenuItem27\n            // \n            toolStripMenuItem27.Name = \"toolStripMenuItem27\";\n            toolStripMenuItem27.Size = new System.Drawing.Size(178, 6);\n            // \n            // advancedSettingsToolStripMenuItem1\n            // \n            advancedSettingsToolStripMenuItem1.Enabled = false;\n            advancedSettingsToolStripMenuItem1.Name = \"advancedSettingsToolStripMenuItem1\";\n            advancedSettingsToolStripMenuItem1.Size = new System.Drawing.Size(181, 22);\n            advancedSettingsToolStripMenuItem1.Text = \"Advanced Settings...\";\n            // \n            // toolStripMenuItem13\n            // \n            toolStripMenuItem13.Name = \"toolStripMenuItem13\";\n            toolStripMenuItem13.Size = new System.Drawing.Size(194, 6);\n            // \n            // refreshToolStripMenuItem3\n            // \n            refreshToolStripMenuItem3.Enabled = false;\n            refreshToolStripMenuItem3.Image = Main.Properties.Resources.refresh_16;\n            refreshToolStripMenuItem3.Name = \"refreshToolStripMenuItem3\";\n            refreshToolStripMenuItem3.Size = new System.Drawing.Size(197, 22);\n            refreshToolStripMenuItem3.Text = \"Refresh\";\n            // \n            // removeToolStripMenuItem\n            // \n            removeToolStripMenuItem.Name = \"removeToolStripMenuItem\";\n            removeToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            removeToolStripMenuItem.Text = \"Remove\";\n            removeToolStripMenuItem.Click += btnRemoveSite_Click;\n            // \n            // toolStripMenuItem14\n            // \n            toolStripMenuItem14.Name = \"toolStripMenuItem14\";\n            toolStripMenuItem14.Size = new System.Drawing.Size(194, 6);\n            // \n            // renameToolStripMenuItem1\n            // \n            renameToolStripMenuItem1.Name = \"renameToolStripMenuItem1\";\n            renameToolStripMenuItem1.Size = new System.Drawing.Size(197, 22);\n            renameToolStripMenuItem1.Text = \"Rename\";\n            renameToolStripMenuItem1.Click += renameToolStripMenuItem1_Click;\n            // \n            // toolStripMenuItem17\n            // \n            toolStripMenuItem17.Name = \"toolStripMenuItem17\";\n            toolStripMenuItem17.Size = new System.Drawing.Size(194, 6);\n            // \n            // switchToContentViewToolStripMenuItem2\n            // \n            switchToContentViewToolStripMenuItem2.Enabled = false;\n            switchToContentViewToolStripMenuItem2.Image = Main.Properties.Resources.switch_16;\n            switchToContentViewToolStripMenuItem2.Name = \"switchToContentViewToolStripMenuItem2\";\n            switchToContentViewToolStripMenuItem2.Size = new System.Drawing.Size(197, 22);\n            switchToContentViewToolStripMenuItem2.Text = \"Switch to Content View\";\n            // \n            // statusStrip1\n            // \n            statusStrip1.Items.AddRange(new ToolStripItem[] { txtInfo, pbStatus });\n            statusStrip1.Location = new System.Drawing.Point(0, 475);\n            statusStrip1.Name = \"statusStrip1\";\n            statusStrip1.Padding = new Padding(1, 0, 16, 0);\n            statusStrip1.Size = new System.Drawing.Size(915, 22);\n            statusStrip1.TabIndex = 0;\n            statusStrip1.Text = \"statusStrip1\";\n            // \n            // txtInfo\n            // \n            txtInfo.Image = Main.Properties.Resources.info_16;\n            txtInfo.Name = \"txtInfo\";\n            txtInfo.Size = new System.Drawing.Size(16, 17);\n            txtInfo.Visible = false;\n            // \n            // pbStatus\n            // \n            pbStatus.Name = \"pbStatus\";\n            pbStatus.Size = new System.Drawing.Size(100, 16);\n            pbStatus.Style = ProgressBarStyle.Marquee;\n            pbStatus.Visible = false;\n            // \n            // menuStrip1\n            // \n            menuStrip1.Items.AddRange(new ToolStripItem[] { fileToolStripMenuItem, viewToolStripMenuItem, helpToolStripMenuItem });\n            menuStrip1.Location = new System.Drawing.Point(0, 25);\n            menuStrip1.Name = \"menuStrip1\";\n            menuStrip1.Padding = new Padding(7, 2, 0, 2);\n            menuStrip1.Size = new System.Drawing.Size(915, 24);\n            menuStrip1.TabIndex = 5;\n            menuStrip1.Text = \"menuStrip1\";\n            // \n            // fileToolStripMenuItem\n            // \n            fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { connectToAServerToolStripMenuItem, connectToAWebsiteToolStripMenuItem, connectToAnApplicationToolStripMenuItem, toolStripMenuItem22, saveConnectionsToolStripMenuItem, disconnectToolStripMenuItem, toolStripMenuItem21, runAsAdministratorToolStripMenuItem, exitToolStripMenuItem });\n            fileToolStripMenuItem.Name = \"fileToolStripMenuItem\";\n            fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);\n            fileToolStripMenuItem.Text = \"File\";\n            // \n            // connectToAServerToolStripMenuItem\n            // \n            actionList1.SetAction(connectToAServerToolStripMenuItem, actConnectServer);\n            connectToAServerToolStripMenuItem.Name = \"connectToAServerToolStripMenuItem\";\n            connectToAServerToolStripMenuItem.Size = new System.Drawing.Size(222, 22);\n            connectToAServerToolStripMenuItem.Text = \"Connect to a Server...\";\n            connectToAServerToolStripMenuItem.ToolTipText = \"Connect to a Server...\";\n            // \n            // connectToAWebsiteToolStripMenuItem\n            // \n            actionList1.SetAction(connectToAWebsiteToolStripMenuItem, actConnectSite);\n            connectToAWebsiteToolStripMenuItem.Enabled = false;\n            connectToAWebsiteToolStripMenuItem.Name = \"connectToAWebsiteToolStripMenuItem\";\n            connectToAWebsiteToolStripMenuItem.Size = new System.Drawing.Size(222, 22);\n            connectToAWebsiteToolStripMenuItem.Text = \"Connect to a Website...\";\n            connectToAWebsiteToolStripMenuItem.ToolTipText = \"Connect to a Website...\";\n            // \n            // connectToAnApplicationToolStripMenuItem\n            // \n            actionList1.SetAction(connectToAnApplicationToolStripMenuItem, actConnectionApplication);\n            connectToAnApplicationToolStripMenuItem.Enabled = false;\n            connectToAnApplicationToolStripMenuItem.Name = \"connectToAnApplicationToolStripMenuItem\";\n            connectToAnApplicationToolStripMenuItem.Size = new System.Drawing.Size(222, 22);\n            connectToAnApplicationToolStripMenuItem.Text = \"Connect to an Application...\";\n            connectToAnApplicationToolStripMenuItem.ToolTipText = \"Connect to an Application...\";\n            // \n            // toolStripMenuItem22\n            // \n            toolStripMenuItem22.Name = \"toolStripMenuItem22\";\n            toolStripMenuItem22.Size = new System.Drawing.Size(219, 6);\n            // \n            // saveConnectionsToolStripMenuItem\n            // \n            actionList1.SetAction(saveConnectionsToolStripMenuItem, actSave);\n            saveConnectionsToolStripMenuItem.Enabled = false;\n            saveConnectionsToolStripMenuItem.Name = \"saveConnectionsToolStripMenuItem\";\n            saveConnectionsToolStripMenuItem.Size = new System.Drawing.Size(222, 22);\n            saveConnectionsToolStripMenuItem.Text = \"Save Connections\";\n            saveConnectionsToolStripMenuItem.ToolTipText = \"Save Connections\";\n            // \n            // disconnectToolStripMenuItem\n            // \n            actionList1.SetAction(disconnectToolStripMenuItem, actDisconnect);\n            disconnectToolStripMenuItem.Enabled = false;\n            disconnectToolStripMenuItem.Name = \"disconnectToolStripMenuItem\";\n            disconnectToolStripMenuItem.Size = new System.Drawing.Size(222, 22);\n            disconnectToolStripMenuItem.Text = \"Disconnect\";\n            disconnectToolStripMenuItem.ToolTipText = \"Disconnect\";\n            // \n            // toolStripMenuItem21\n            // \n            toolStripMenuItem21.Name = \"toolStripMenuItem21\";\n            toolStripMenuItem21.Size = new System.Drawing.Size(219, 6);\n            // \n            // runAsAdministratorToolStripMenuItem\n            // \n            actionList1.SetAction(runAsAdministratorToolStripMenuItem, actRunAsAdmin);\n            runAsAdministratorToolStripMenuItem.AutoToolTip = true;\n            runAsAdministratorToolStripMenuItem.Name = \"runAsAdministratorToolStripMenuItem\";\n            runAsAdministratorToolStripMenuItem.Size = new System.Drawing.Size(222, 22);\n            runAsAdministratorToolStripMenuItem.Text = \"Run as Administrator\";\n            // \n            // exitToolStripMenuItem\n            // \n            exitToolStripMenuItem.Name = \"exitToolStripMenuItem\";\n            exitToolStripMenuItem.Size = new System.Drawing.Size(222, 22);\n            exitToolStripMenuItem.Text = \"Exit\";\n            exitToolStripMenuItem.Click += exitToolStripMenuItem_Click;\n            // \n            // viewToolStripMenuItem\n            // \n            viewToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { backToolStripMenuItem, forwardToolStripMenuItem, upOneLevelToolStripMenuItem, homeToolStripMenuItem, toolStripMenuItem19, stopToolStripMenuItem1, refreshToolStripMenuItem4, toolStripMenuItem20, groupByToolStripMenuItem, sortByToolStripMenuItem, viewToolStripMenuItem1 });\n            viewToolStripMenuItem.Name = \"viewToolStripMenuItem\";\n            viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);\n            viewToolStripMenuItem.Text = \"View\";\n            // \n            // backToolStripMenuItem\n            // \n            actionList1.SetAction(backToolStripMenuItem, actBack);\n            backToolStripMenuItem.Enabled = false;\n            backToolStripMenuItem.Name = \"backToolStripMenuItem\";\n            backToolStripMenuItem.Size = new System.Drawing.Size(170, 22);\n            backToolStripMenuItem.Text = \"Back\";\n            // \n            // forwardToolStripMenuItem\n            // \n            actionList1.SetAction(forwardToolStripMenuItem, actForward);\n            forwardToolStripMenuItem.Enabled = false;\n            forwardToolStripMenuItem.Name = \"forwardToolStripMenuItem\";\n            forwardToolStripMenuItem.Size = new System.Drawing.Size(170, 22);\n            forwardToolStripMenuItem.Text = \"Forward\";\n            // \n            // upOneLevelToolStripMenuItem\n            // \n            actionList1.SetAction(upOneLevelToolStripMenuItem, actUp);\n            upOneLevelToolStripMenuItem.Enabled = false;\n            upOneLevelToolStripMenuItem.Name = \"upOneLevelToolStripMenuItem\";\n            upOneLevelToolStripMenuItem.Size = new System.Drawing.Size(170, 22);\n            upOneLevelToolStripMenuItem.Text = \"Up One Level\";\n            upOneLevelToolStripMenuItem.ToolTipText = \"Up One Level\";\n            // \n            // homeToolStripMenuItem\n            // \n            homeToolStripMenuItem.Enabled = false;\n            homeToolStripMenuItem.Name = \"homeToolStripMenuItem\";\n            homeToolStripMenuItem.ShortcutKeys = Keys.Alt | Keys.Home;\n            homeToolStripMenuItem.Size = new System.Drawing.Size(170, 22);\n            homeToolStripMenuItem.Text = \"Home\";\n            // \n            // toolStripMenuItem19\n            // \n            toolStripMenuItem19.Name = \"toolStripMenuItem19\";\n            toolStripMenuItem19.Size = new System.Drawing.Size(167, 6);\n            // \n            // stopToolStripMenuItem1\n            // \n            stopToolStripMenuItem1.Enabled = false;\n            stopToolStripMenuItem1.Name = \"stopToolStripMenuItem1\";\n            stopToolStripMenuItem1.Size = new System.Drawing.Size(170, 22);\n            stopToolStripMenuItem1.Text = \"Stop\";\n            // \n            // refreshToolStripMenuItem4\n            // \n            refreshToolStripMenuItem4.Enabled = false;\n            refreshToolStripMenuItem4.Image = Main.Properties.Resources.refresh_16;\n            refreshToolStripMenuItem4.Name = \"refreshToolStripMenuItem4\";\n            refreshToolStripMenuItem4.Size = new System.Drawing.Size(170, 22);\n            refreshToolStripMenuItem4.Text = \"Refresh\";\n            // \n            // toolStripMenuItem20\n            // \n            toolStripMenuItem20.Name = \"toolStripMenuItem20\";\n            toolStripMenuItem20.Size = new System.Drawing.Size(167, 6);\n            // \n            // groupByToolStripMenuItem\n            // \n            groupByToolStripMenuItem.Enabled = false;\n            groupByToolStripMenuItem.Name = \"groupByToolStripMenuItem\";\n            groupByToolStripMenuItem.Size = new System.Drawing.Size(170, 22);\n            groupByToolStripMenuItem.Text = \"Group By\";\n            // \n            // sortByToolStripMenuItem\n            // \n            sortByToolStripMenuItem.Enabled = false;\n            sortByToolStripMenuItem.Name = \"sortByToolStripMenuItem\";\n            sortByToolStripMenuItem.Size = new System.Drawing.Size(170, 22);\n            sortByToolStripMenuItem.Text = \"Sort By\";\n            // \n            // viewToolStripMenuItem1\n            // \n            viewToolStripMenuItem1.Enabled = false;\n            viewToolStripMenuItem1.Name = \"viewToolStripMenuItem1\";\n            viewToolStripMenuItem1.Size = new System.Drawing.Size(170, 22);\n            viewToolStripMenuItem1.Text = \"View\";\n            // \n            // helpToolStripMenuItem\n            // \n            helpToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { iISHelpToolStripMenuItem, iISOnMSDNOnlineToolStripMenuItem, iISNETOnlineToolStripMenuItem, iISKBsOnlineToolStripMenuItem, toolStripMenuItem28, btnUpdate, toolStripMenuItem18, btnAbout });\n            helpToolStripMenuItem.Name = \"helpToolStripMenuItem\";\n            helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20);\n            helpToolStripMenuItem.Text = \"Help\";\n            // \n            // iISHelpToolStripMenuItem\n            // \n            iISHelpToolStripMenuItem.Image = Main.Properties.Resources.help_16;\n            iISHelpToolStripMenuItem.Name = \"iISHelpToolStripMenuItem\";\n            iISHelpToolStripMenuItem.ShortcutKeys = Keys.F1;\n            iISHelpToolStripMenuItem.Size = new System.Drawing.Size(187, 22);\n            iISHelpToolStripMenuItem.Text = \"IIS Help\";\n            // \n            // iISOnMSDNOnlineToolStripMenuItem\n            // \n            iISOnMSDNOnlineToolStripMenuItem.Name = \"iISOnMSDNOnlineToolStripMenuItem\";\n            iISOnMSDNOnlineToolStripMenuItem.Size = new System.Drawing.Size(187, 22);\n            iISOnMSDNOnlineToolStripMenuItem.Text = \"IIS on MSDN Online\";\n            iISOnMSDNOnlineToolStripMenuItem.Click += iISOnMSDNOnlineToolStripMenuItem_Click;\n            // \n            // iISNETOnlineToolStripMenuItem\n            // \n            iISNETOnlineToolStripMenuItem.Name = \"iISNETOnlineToolStripMenuItem\";\n            iISNETOnlineToolStripMenuItem.Size = new System.Drawing.Size(187, 22);\n            iISNETOnlineToolStripMenuItem.Text = \"IIS.NET Online\";\n            iISNETOnlineToolStripMenuItem.Click += iISNETOnlineToolStripMenuItem_Click;\n            // \n            // iISKBsOnlineToolStripMenuItem\n            // \n            iISKBsOnlineToolStripMenuItem.Name = \"iISKBsOnlineToolStripMenuItem\";\n            iISKBsOnlineToolStripMenuItem.Size = new System.Drawing.Size(187, 22);\n            iISKBsOnlineToolStripMenuItem.Text = \"IIS KBs Online\";\n            iISKBsOnlineToolStripMenuItem.Click += iISKBsOnlineToolStripMenuItem_Click;\n            // \n            // toolStripMenuItem28\n            // \n            toolStripMenuItem28.Name = \"toolStripMenuItem28\";\n            toolStripMenuItem28.Size = new System.Drawing.Size(184, 6);\n            // \n            // btnUpdate\n            // \n            btnUpdate.Image = Main.Properties.Resources.update_16;\n            btnUpdate.Name = \"btnUpdate\";\n            btnUpdate.Size = new System.Drawing.Size(187, 22);\n            btnUpdate.Text = \"Check Update\";\n            btnUpdate.Click += btnUpdate_Click;\n            // \n            // toolStripMenuItem18\n            // \n            toolStripMenuItem18.Name = \"toolStripMenuItem18\";\n            toolStripMenuItem18.Size = new System.Drawing.Size(184, 6);\n            // \n            // btnAbout\n            // \n            btnAbout.Name = \"btnAbout\";\n            btnAbout.Size = new System.Drawing.Size(187, 22);\n            btnAbout.Text = \"About Jexus Manager\";\n            btnAbout.Click += btnAbout_Click;\n            // \n            // actionList1\n            // \n            actionList1.Actions.Add(actDisconnect);\n            actionList1.Actions.Add(actUp);\n            actionList1.Actions.Add(actConnectServer);\n            actionList1.Actions.Add(actConnectSite);\n            actionList1.Actions.Add(actConnectionApplication);\n            actionList1.Actions.Add(actSave);\n            actionList1.Actions.Add(actCreateSite);\n            actionList1.Actions.Add(actCreateApplication);\n            actionList1.Actions.Add(actCreateVirtualDirectory);\n            actionList1.Actions.Add(actExplore);\n            actionList1.Actions.Add(actEditPermissions);\n            actionList1.Actions.Add(actBrowse);\n            actionList1.Actions.Add(actRunAsAdmin);\n            actionList1.Actions.Add(actBack);\n            actionList1.Actions.Add(actForward);\n            actionList1.ContainerControl = this;\n            // \n            // actConnectServer\n            // \n            actConnectServer.Image = Main.Properties.Resources.server_16;\n            actConnectServer.Text = \"Connect to a Server...\";\n            actConnectServer.ToolTipText = \"Connect to a Server...\";\n            actConnectServer.Execute += actConnectServer_Execute;\n            // \n            // actSave\n            // \n            actSave.Enabled = false;\n            actSave.Image = Main.Properties.Resources.save_16;\n            actSave.Text = \"Save Connections\";\n            actSave.ToolTipText = \"Save Connections\";\n            actSave.Execute += actSave_Execute;\n            // \n            // actUp\n            // \n            actUp.Enabled = false;\n            actUp.Image = Main.Properties.Resources.up_16;\n            actUp.ShortcutKeys = Keys.Alt | Keys.Up;\n            actUp.Text = \"Up One Level\";\n            actUp.ToolTipText = \"Up One Level\";\n            actUp.Execute += actUp_Execute;\n            // \n            // actDisconnect\n            // \n            actDisconnect.Enabled = false;\n            actDisconnect.Image = Main.Properties.Resources.disconnected_16;\n            actDisconnect.Text = \"Disconnect\";\n            actDisconnect.ToolTipText = \"Disconnect\";\n            actDisconnect.Execute += actDisconnect_Execute;\n            // \n            // actCreateSite\n            // \n            actCreateSite.Image = Main.Properties.Resources.site_new_16;\n            actCreateSite.Text = \"Add Website...\";\n            actCreateSite.Execute += actCreateSite_Execute;\n            // \n            // actExplore\n            // \n            actExplore.Image = Main.Properties.Resources.explore_16;\n            actExplore.Text = \"Explore\";\n            actExplore.Execute += actExplore_Execute;\n            // \n            // actEditPermissions\n            // \n            actEditPermissions.Text = \"Edit Permissions...\";\n            actEditPermissions.Execute += actEditPermissions_Execute;\n            // \n            // actCreateApplication\n            // \n            actCreateApplication.Image = Main.Properties.Resources.application_new_16;\n            actCreateApplication.Text = \"Add Application...\";\n            actCreateApplication.Execute += actCreateApplication_Execute;\n            // \n            // actCreateVirtualDirectory\n            // \n            actCreateVirtualDirectory.Image = Main.Properties.Resources.virtual_directory_new_16;\n            actCreateVirtualDirectory.Text = \"Add Virtual Directory...\";\n            actCreateVirtualDirectory.Execute += actCreateVirtualDirectory_Execute;\n            // \n            // actBrowse\n            // \n            actBrowse.Image = Main.Properties.Resources.browse_16;\n            actBrowse.Text = \"Browse\";\n            actBrowse.Execute += actBrowse_Execute;\n            // \n            // actConnectSite\n            // \n            actConnectSite.Enabled = false;\n            actConnectSite.Image = Main.Properties.Resources.site_16;\n            actConnectSite.Text = \"Connect to a Website...\";\n            actConnectSite.ToolTipText = \"Connect to a Website...\";\n            actConnectSite.Execute += actConnectSite_Execute;\n            // \n            // actConnectionApplication\n            // \n            actConnectionApplication.Enabled = false;\n            actConnectionApplication.Image = Main.Properties.Resources.application_16;\n            actConnectionApplication.Text = \"Connect to an Application...\";\n            actConnectionApplication.ToolTipText = \"Connect to an Application...\";\n            // \n            // actRunAsAdmin\n            // \n            actRunAsAdmin.Text = \"Run as Administrator\";\n            actRunAsAdmin.Execute += actRunAsAdmin_Execute;\n            // \n            // actBack\n            // \n            actBack.Enabled = false;\n            actBack.Image = Main.Properties.Resources.back_16;\n            actBack.ShortcutKeys = Keys.Alt | Keys.Left;\n            actBack.Text = \"Back\";\n            actBack.Execute += actBack_Execute;\n            // \n            // actForward\n            // \n            actForward.Enabled = false;\n            actForward.Image = Main.Properties.Resources.forward_16;\n            actForward.ShortcutKeys = Keys.Alt | Keys.Right;\n            actForward.Text = \"Forward\";\n            actForward.Execute += actForward_Execute;\n            // \n            // connectToAServerToolStripMenuItem1\n            // \n            actionList1.SetAction(connectToAServerToolStripMenuItem1, actConnectServer);\n            connectToAServerToolStripMenuItem1.Image = Main.Properties.Resources.server_16;\n            connectToAServerToolStripMenuItem1.Name = \"connectToAServerToolStripMenuItem1\";\n            connectToAServerToolStripMenuItem1.Size = new System.Drawing.Size(222, 22);\n            connectToAServerToolStripMenuItem1.Text = \"Connect to a Server...\";\n            connectToAServerToolStripMenuItem1.ToolTipText = \"Connect to a Server...\";\n            // \n            // connectToAWebsiteToolStripMenuItem1\n            // \n            actionList1.SetAction(connectToAWebsiteToolStripMenuItem1, actConnectSite);\n            connectToAWebsiteToolStripMenuItem1.Enabled = false;\n            connectToAWebsiteToolStripMenuItem1.Image = Main.Properties.Resources.site_16;\n            connectToAWebsiteToolStripMenuItem1.Name = \"connectToAWebsiteToolStripMenuItem1\";\n            connectToAWebsiteToolStripMenuItem1.Size = new System.Drawing.Size(222, 22);\n            connectToAWebsiteToolStripMenuItem1.Text = \"Connect to a Website...\";\n            connectToAWebsiteToolStripMenuItem1.ToolTipText = \"Connect to a Website...\";\n            // \n            // connectToAnApplicationToolStripMenuItem1\n            // \n            actionList1.SetAction(connectToAnApplicationToolStripMenuItem1, actConnectionApplication);\n            connectToAnApplicationToolStripMenuItem1.Enabled = false;\n            connectToAnApplicationToolStripMenuItem1.Image = Main.Properties.Resources.application_16;\n            connectToAnApplicationToolStripMenuItem1.Name = \"connectToAnApplicationToolStripMenuItem1\";\n            connectToAnApplicationToolStripMenuItem1.Size = new System.Drawing.Size(222, 22);\n            connectToAnApplicationToolStripMenuItem1.Text = \"Connect to an Application...\";\n            connectToAnApplicationToolStripMenuItem1.ToolTipText = \"Connect to an Application...\";\n            // \n            // addApplicationToolStripMenuItem\n            // \n            actionList1.SetAction(addApplicationToolStripMenuItem, actCreateApplication);\n            addApplicationToolStripMenuItem.Image = Main.Properties.Resources.application_new_16;\n            addApplicationToolStripMenuItem.Name = \"addApplicationToolStripMenuItem\";\n            addApplicationToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            addApplicationToolStripMenuItem.Text = \"Add Application...\";\n            // \n            // toolStripMenuItem38\n            // \n            actionList1.SetAction(toolStripMenuItem38, actCreateApplication);\n            toolStripMenuItem38.Image = Main.Properties.Resources.application_new_16;\n            toolStripMenuItem38.Name = \"toolStripMenuItem38\";\n            toolStripMenuItem38.Size = new System.Drawing.Size(205, 22);\n            toolStripMenuItem38.Text = \"Add Application...\";\n            // \n            // toolStripMenuItem49\n            // \n            actionList1.SetAction(toolStripMenuItem49, actCreateApplication);\n            toolStripMenuItem49.Image = Main.Properties.Resources.application_new_16;\n            toolStripMenuItem49.Name = \"toolStripMenuItem49\";\n            toolStripMenuItem49.Size = new System.Drawing.Size(197, 22);\n            toolStripMenuItem49.Text = \"Add Application...\";\n            // \n            // exploreToolStripMenuItem1\n            // \n            actionList1.SetAction(exploreToolStripMenuItem1, actExplore);\n            exploreToolStripMenuItem1.Image = Main.Properties.Resources.explore_16;\n            exploreToolStripMenuItem1.Name = \"exploreToolStripMenuItem1\";\n            exploreToolStripMenuItem1.Size = new System.Drawing.Size(197, 22);\n            exploreToolStripMenuItem1.Text = \"Explore\";\n            // \n            // editPermissionsToolStripMenuItem1\n            // \n            actionList1.SetAction(editPermissionsToolStripMenuItem1, actEditPermissions);\n            editPermissionsToolStripMenuItem1.Name = \"editPermissionsToolStripMenuItem1\";\n            editPermissionsToolStripMenuItem1.Size = new System.Drawing.Size(197, 22);\n            editPermissionsToolStripMenuItem1.Text = \"Edit Permissions...\";\n            // \n            // addVirtualDirectoryToolStripMenuItem1\n            // \n            actionList1.SetAction(addVirtualDirectoryToolStripMenuItem1, actCreateVirtualDirectory);\n            addVirtualDirectoryToolStripMenuItem1.Image = Main.Properties.Resources.virtual_directory_new_16;\n            addVirtualDirectoryToolStripMenuItem1.Name = \"addVirtualDirectoryToolStripMenuItem1\";\n            addVirtualDirectoryToolStripMenuItem1.Size = new System.Drawing.Size(197, 22);\n            addVirtualDirectoryToolStripMenuItem1.Text = \"Add Virtual Directory...\";\n            // \n            // btnBrowseApplication\n            // \n            actionList1.SetAction(btnBrowseApplication, actBrowse);\n            btnBrowseApplication.Image = Main.Properties.Resources.browse_16;\n            btnBrowseApplication.Name = \"btnBrowseApplication\";\n            btnBrowseApplication.Size = new System.Drawing.Size(181, 22);\n            btnBrowseApplication.Text = \"Browse\";\n            // \n            // toolStripMenuItem36\n            // \n            actionList1.SetAction(toolStripMenuItem36, actExplore);\n            toolStripMenuItem36.Image = Main.Properties.Resources.explore_16;\n            toolStripMenuItem36.Name = \"toolStripMenuItem36\";\n            toolStripMenuItem36.Size = new System.Drawing.Size(205, 22);\n            toolStripMenuItem36.Text = \"Explore\";\n            // \n            // toolStripMenuItem37\n            // \n            actionList1.SetAction(toolStripMenuItem37, actEditPermissions);\n            toolStripMenuItem37.Name = \"toolStripMenuItem37\";\n            toolStripMenuItem37.Size = new System.Drawing.Size(205, 22);\n            toolStripMenuItem37.Text = \"Edit Permissions...\";\n            // \n            // toolStripMenuItem39\n            // \n            actionList1.SetAction(toolStripMenuItem39, actCreateVirtualDirectory);\n            toolStripMenuItem39.Image = Main.Properties.Resources.virtual_directory_new_16;\n            toolStripMenuItem39.Name = \"toolStripMenuItem39\";\n            toolStripMenuItem39.Size = new System.Drawing.Size(205, 22);\n            toolStripMenuItem39.Text = \"Add Virtual Directory...\";\n            // \n            // toolStripMenuItem41\n            // \n            actionList1.SetAction(toolStripMenuItem41, actBrowse);\n            toolStripMenuItem41.Image = Main.Properties.Resources.browse_16;\n            toolStripMenuItem41.Name = \"toolStripMenuItem41\";\n            toolStripMenuItem41.Size = new System.Drawing.Size(181, 22);\n            toolStripMenuItem41.Text = \"Browse\";\n            // \n            // toolStripMenuItem46\n            // \n            actionList1.SetAction(toolStripMenuItem46, actExplore);\n            toolStripMenuItem46.Image = Main.Properties.Resources.explore_16;\n            toolStripMenuItem46.Name = \"toolStripMenuItem46\";\n            toolStripMenuItem46.Size = new System.Drawing.Size(197, 22);\n            toolStripMenuItem46.Text = \"Explore\";\n            // \n            // toolStripMenuItem47\n            // \n            actionList1.SetAction(toolStripMenuItem47, actEditPermissions);\n            toolStripMenuItem47.Name = \"toolStripMenuItem47\";\n            toolStripMenuItem47.Size = new System.Drawing.Size(197, 22);\n            toolStripMenuItem47.Text = \"Edit Permissions...\";\n            // \n            // toolStripMenuItem50\n            // \n            actionList1.SetAction(toolStripMenuItem50, actCreateVirtualDirectory);\n            toolStripMenuItem50.Image = Main.Properties.Resources.virtual_directory_new_16;\n            toolStripMenuItem50.Name = \"toolStripMenuItem50\";\n            toolStripMenuItem50.Size = new System.Drawing.Size(197, 22);\n            toolStripMenuItem50.Text = \"Add Virtual Directory...\";\n            // \n            // toolStripMenuItem52\n            // \n            actionList1.SetAction(toolStripMenuItem52, actBrowse);\n            toolStripMenuItem52.Image = Main.Properties.Resources.browse_16;\n            toolStripMenuItem52.Name = \"toolStripMenuItem52\";\n            toolStripMenuItem52.Size = new System.Drawing.Size(112, 22);\n            toolStripMenuItem52.Text = \"Browse\";\n            // \n            // toolStripButton1\n            // \n            actionList1.SetAction(toolStripButton1, actBack);\n            toolStripButton1.AutoToolTip = false;\n            toolStripButton1.DisplayStyle = ToolStripItemDisplayStyle.Image;\n            toolStripButton1.Enabled = false;\n            toolStripButton1.Image = Main.Properties.Resources.back_16;\n            toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;\n            toolStripButton1.Name = \"toolStripButton1\";\n            toolStripButton1.Size = new System.Drawing.Size(23, 22);\n            toolStripButton1.Text = \"Back\";\n            // \n            // toolStripButton2\n            // \n            actionList1.SetAction(toolStripButton2, actForward);\n            toolStripButton2.AutoToolTip = false;\n            toolStripButton2.DisplayStyle = ToolStripItemDisplayStyle.Image;\n            toolStripButton2.Enabled = false;\n            toolStripButton2.Image = Main.Properties.Resources.forward_16;\n            toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;\n            toolStripButton2.Name = \"toolStripButton2\";\n            toolStripButton2.Size = new System.Drawing.Size(23, 22);\n            toolStripButton2.Text = \"Forward\";\n            // \n            // tsbPath\n            // \n            tsbPath.AutoSize = false;\n            tsbPath.BackColor = System.Drawing.SystemColors.Window;\n            tsbPath.ForeColor = System.Drawing.SystemColors.WindowText;\n            tsbPath.HighlightColor = System.Drawing.SystemColors.Highlight;\n            tsbPath.Name = \"tsbPath\";\n            tsbPath.Padding = new Padding(2);\n            tsbPath.Size = new System.Drawing.Size(800, 22);\n            tsbPath.ItemClicked += TsbPath_ItemClicked;\n            // \n            // cmsIis\n            // \n            cmsIis.Items.AddRange(new ToolStripItem[] { refreshToolStripMenuItem5, toolStripMenuItem23, connectToAServerToolStripMenuItem1, connectToAWebsiteToolStripMenuItem1, connectToAnApplicationToolStripMenuItem1 });\n            cmsIis.Name = \"cmsIis\";\n            cmsIis.Size = new System.Drawing.Size(223, 98);\n            // \n            // refreshToolStripMenuItem5\n            // \n            refreshToolStripMenuItem5.Enabled = false;\n            refreshToolStripMenuItem5.Image = Main.Properties.Resources.refresh_16;\n            refreshToolStripMenuItem5.Name = \"refreshToolStripMenuItem5\";\n            refreshToolStripMenuItem5.Size = new System.Drawing.Size(222, 22);\n            refreshToolStripMenuItem5.Text = \"Refresh\";\n            // \n            // toolStripMenuItem23\n            // \n            toolStripMenuItem23.Name = \"toolStripMenuItem23\";\n            toolStripMenuItem23.Size = new System.Drawing.Size(219, 6);\n            // \n            // cmsApplication\n            // \n            cmsApplication.Items.AddRange(new ToolStripItem[] { exploreToolStripMenuItem1, editPermissionsToolStripMenuItem1, toolStripMenuItem9, addApplicationToolStripMenuItem, addVirtualDirectoryToolStripMenuItem1, toolStripMenuItem15, manageApplicationToolStripMenuItem, toolStripMenuItem16, refreshToolStripMenuItem6, removeToolStripMenuItem1, toolStripMenuItem24, switchToContentViewToolStripMenuItem3 });\n            cmsApplication.Name = \"cmsApplication\";\n            cmsApplication.Size = new System.Drawing.Size(198, 204);\n            // \n            // toolStripMenuItem9\n            // \n            toolStripMenuItem9.Name = \"toolStripMenuItem9\";\n            toolStripMenuItem9.Size = new System.Drawing.Size(194, 6);\n            // \n            // toolStripMenuItem15\n            // \n            toolStripMenuItem15.Name = \"toolStripMenuItem15\";\n            toolStripMenuItem15.Size = new System.Drawing.Size(194, 6);\n            // \n            // manageApplicationToolStripMenuItem\n            // \n            manageApplicationToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { btnBrowseApplication, toolStripMenuItem25, advancedSettingsToolStripMenuItem });\n            manageApplicationToolStripMenuItem.Name = \"manageApplicationToolStripMenuItem\";\n            manageApplicationToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            manageApplicationToolStripMenuItem.Text = \"Manage Application\";\n            // \n            // toolStripMenuItem25\n            // \n            toolStripMenuItem25.Name = \"toolStripMenuItem25\";\n            toolStripMenuItem25.Size = new System.Drawing.Size(178, 6);\n            // \n            // advancedSettingsToolStripMenuItem\n            // \n            advancedSettingsToolStripMenuItem.Enabled = false;\n            advancedSettingsToolStripMenuItem.Name = \"advancedSettingsToolStripMenuItem\";\n            advancedSettingsToolStripMenuItem.Size = new System.Drawing.Size(181, 22);\n            advancedSettingsToolStripMenuItem.Text = \"Advanced Settings...\";\n            // \n            // toolStripMenuItem16\n            // \n            toolStripMenuItem16.Name = \"toolStripMenuItem16\";\n            toolStripMenuItem16.Size = new System.Drawing.Size(194, 6);\n            // \n            // refreshToolStripMenuItem6\n            // \n            refreshToolStripMenuItem6.Enabled = false;\n            refreshToolStripMenuItem6.Image = Main.Properties.Resources.refresh_16;\n            refreshToolStripMenuItem6.Name = \"refreshToolStripMenuItem6\";\n            refreshToolStripMenuItem6.Size = new System.Drawing.Size(197, 22);\n            refreshToolStripMenuItem6.Text = \"Refresh\";\n            // \n            // removeToolStripMenuItem1\n            // \n            removeToolStripMenuItem1.Name = \"removeToolStripMenuItem1\";\n            removeToolStripMenuItem1.Size = new System.Drawing.Size(197, 22);\n            removeToolStripMenuItem1.Text = \"Remove\";\n            removeToolStripMenuItem1.Click += btnRemoveApplication_Click;\n            // \n            // toolStripMenuItem24\n            // \n            toolStripMenuItem24.Name = \"toolStripMenuItem24\";\n            toolStripMenuItem24.Size = new System.Drawing.Size(194, 6);\n            // \n            // switchToContentViewToolStripMenuItem3\n            // \n            switchToContentViewToolStripMenuItem3.Enabled = false;\n            switchToContentViewToolStripMenuItem3.Image = Main.Properties.Resources.switch_16;\n            switchToContentViewToolStripMenuItem3.Name = \"switchToContentViewToolStripMenuItem3\";\n            switchToContentViewToolStripMenuItem3.Size = new System.Drawing.Size(197, 22);\n            switchToContentViewToolStripMenuItem3.Text = \"Switch to Content View\";\n            // \n            // cmsServers\n            // \n            cmsServers.Items.AddRange(new ToolStripItem[] { refreshToolStripMenuItem9, toolStripMenuItem34, addServerToolStripMenuItem, toolStripMenuItem35, switchToContentViewToolStripMenuItem6 });\n            cmsServers.Name = \"cmsServers\";\n            cmsServers.Size = new System.Drawing.Size(198, 82);\n            // \n            // refreshToolStripMenuItem9\n            // \n            refreshToolStripMenuItem9.Image = Main.Properties.Resources.refresh_16;\n            refreshToolStripMenuItem9.Name = \"refreshToolStripMenuItem9\";\n            refreshToolStripMenuItem9.Size = new System.Drawing.Size(197, 22);\n            refreshToolStripMenuItem9.Text = \"Refresh\";\n            // \n            // toolStripMenuItem34\n            // \n            toolStripMenuItem34.Name = \"toolStripMenuItem34\";\n            toolStripMenuItem34.Size = new System.Drawing.Size(194, 6);\n            // \n            // addServerToolStripMenuItem\n            // \n            addServerToolStripMenuItem.Name = \"addServerToolStripMenuItem\";\n            addServerToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            addServerToolStripMenuItem.Text = \"Add Server...\";\n            // \n            // toolStripMenuItem35\n            // \n            toolStripMenuItem35.Name = \"toolStripMenuItem35\";\n            toolStripMenuItem35.Size = new System.Drawing.Size(194, 6);\n            // \n            // switchToContentViewToolStripMenuItem6\n            // \n            switchToContentViewToolStripMenuItem6.Image = Main.Properties.Resources.switch_16;\n            switchToContentViewToolStripMenuItem6.Name = \"switchToContentViewToolStripMenuItem6\";\n            switchToContentViewToolStripMenuItem6.Size = new System.Drawing.Size(197, 22);\n            switchToContentViewToolStripMenuItem6.Text = \"Switch to Content View\";\n            // \n            // cmsVirtualDirectory\n            // \n            cmsVirtualDirectory.Items.AddRange(new ToolStripItem[] { toolStripMenuItem36, toolStripMenuItem37, toolStripSeparator3, convertToApplicationToolStripMenuItem, toolStripMenuItem38, toolStripMenuItem39, toolStripSeparator4, manageVirtualDirectoryToolStripMenuItem, toolStripSeparator6, toolStripMenuItem43, toolStripMenuItem44, toolStripSeparator7, toolStripMenuItem45 });\n            cmsVirtualDirectory.Name = \"cmsApplication\";\n            cmsVirtualDirectory.Size = new System.Drawing.Size(206, 226);\n            // \n            // toolStripSeparator3\n            // \n            toolStripSeparator3.Name = \"toolStripSeparator3\";\n            toolStripSeparator3.Size = new System.Drawing.Size(202, 6);\n            // \n            // convertToApplicationToolStripMenuItem\n            // \n            convertToApplicationToolStripMenuItem.Image = Main.Properties.Resources.application_new_16;\n            convertToApplicationToolStripMenuItem.Name = \"convertToApplicationToolStripMenuItem\";\n            convertToApplicationToolStripMenuItem.Size = new System.Drawing.Size(205, 22);\n            convertToApplicationToolStripMenuItem.Text = \"Convert to Application\";\n            // \n            // toolStripSeparator4\n            // \n            toolStripSeparator4.Name = \"toolStripSeparator4\";\n            toolStripSeparator4.Size = new System.Drawing.Size(202, 6);\n            // \n            // manageVirtualDirectoryToolStripMenuItem\n            // \n            manageVirtualDirectoryToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem41, toolStripSeparator5, toolStripMenuItem42 });\n            manageVirtualDirectoryToolStripMenuItem.Name = \"manageVirtualDirectoryToolStripMenuItem\";\n            manageVirtualDirectoryToolStripMenuItem.Size = new System.Drawing.Size(205, 22);\n            manageVirtualDirectoryToolStripMenuItem.Text = \"Manage Virtual Directory\";\n            // \n            // toolStripSeparator5\n            // \n            toolStripSeparator5.Name = \"toolStripSeparator5\";\n            toolStripSeparator5.Size = new System.Drawing.Size(178, 6);\n            // \n            // toolStripMenuItem42\n            // \n            toolStripMenuItem42.Enabled = false;\n            toolStripMenuItem42.Name = \"toolStripMenuItem42\";\n            toolStripMenuItem42.Size = new System.Drawing.Size(181, 22);\n            toolStripMenuItem42.Text = \"Advanced Settings...\";\n            // \n            // toolStripSeparator6\n            // \n            toolStripSeparator6.Name = \"toolStripSeparator6\";\n            toolStripSeparator6.Size = new System.Drawing.Size(202, 6);\n            // \n            // toolStripMenuItem43\n            // \n            toolStripMenuItem43.Enabled = false;\n            toolStripMenuItem43.Image = Main.Properties.Resources.refresh_16;\n            toolStripMenuItem43.Name = \"toolStripMenuItem43\";\n            toolStripMenuItem43.Size = new System.Drawing.Size(205, 22);\n            toolStripMenuItem43.Text = \"Refresh\";\n            // \n            // toolStripMenuItem44\n            // \n            toolStripMenuItem44.Name = \"toolStripMenuItem44\";\n            toolStripMenuItem44.Size = new System.Drawing.Size(205, 22);\n            toolStripMenuItem44.Text = \"Remove\";\n            toolStripMenuItem44.Click += btnRemoveVirtualDirectory_Click;\n            // \n            // toolStripSeparator7\n            // \n            toolStripSeparator7.Name = \"toolStripSeparator7\";\n            toolStripSeparator7.Size = new System.Drawing.Size(202, 6);\n            // \n            // toolStripMenuItem45\n            // \n            toolStripMenuItem45.Enabled = false;\n            toolStripMenuItem45.Image = Main.Properties.Resources.switch_16;\n            toolStripMenuItem45.Name = \"toolStripMenuItem45\";\n            toolStripMenuItem45.Size = new System.Drawing.Size(205, 22);\n            toolStripMenuItem45.Text = \"Switch to Content View\";\n            // \n            // cmsPhysicalDirectory\n            // \n            cmsPhysicalDirectory.Items.AddRange(new ToolStripItem[] { toolStripMenuItem46, toolStripMenuItem47, toolStripSeparator8, toolStripMenuItem48, toolStripMenuItem49, toolStripMenuItem50, toolStripSeparator9, manageFolderToolStripMenuItem, toolStripSeparator11, toolStripMenuItem54, toolStripSeparator12, toolStripMenuItem56 });\n            cmsPhysicalDirectory.Name = \"cmsPhysicalDirectory\";\n            cmsPhysicalDirectory.Size = new System.Drawing.Size(198, 204);\n            // \n            // toolStripSeparator8\n            // \n            toolStripSeparator8.Name = \"toolStripSeparator8\";\n            toolStripSeparator8.Size = new System.Drawing.Size(194, 6);\n            // \n            // toolStripMenuItem48\n            // \n            toolStripMenuItem48.Image = Main.Properties.Resources.application_new_16;\n            toolStripMenuItem48.Name = \"toolStripMenuItem48\";\n            toolStripMenuItem48.Size = new System.Drawing.Size(197, 22);\n            toolStripMenuItem48.Text = \"Convert to Application\";\n            // \n            // toolStripSeparator9\n            // \n            toolStripSeparator9.Name = \"toolStripSeparator9\";\n            toolStripSeparator9.Size = new System.Drawing.Size(194, 6);\n            // \n            // manageFolderToolStripMenuItem\n            // \n            manageFolderToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem52 });\n            manageFolderToolStripMenuItem.Name = \"manageFolderToolStripMenuItem\";\n            manageFolderToolStripMenuItem.Size = new System.Drawing.Size(197, 22);\n            manageFolderToolStripMenuItem.Text = \"Manage Folder\";\n            // \n            // toolStripSeparator11\n            // \n            toolStripSeparator11.Name = \"toolStripSeparator11\";\n            toolStripSeparator11.Size = new System.Drawing.Size(194, 6);\n            // \n            // toolStripMenuItem54\n            // \n            toolStripMenuItem54.Enabled = false;\n            toolStripMenuItem54.Image = Main.Properties.Resources.refresh_16;\n            toolStripMenuItem54.Name = \"toolStripMenuItem54\";\n            toolStripMenuItem54.Size = new System.Drawing.Size(197, 22);\n            toolStripMenuItem54.Text = \"Refresh\";\n            // \n            // toolStripSeparator12\n            // \n            toolStripSeparator12.Name = \"toolStripSeparator12\";\n            toolStripSeparator12.Size = new System.Drawing.Size(194, 6);\n            // \n            // toolStripMenuItem56\n            // \n            toolStripMenuItem56.Enabled = false;\n            toolStripMenuItem56.Image = Main.Properties.Resources.switch_16;\n            toolStripMenuItem56.Name = \"toolStripMenuItem56\";\n            toolStripMenuItem56.Size = new System.Drawing.Size(197, 22);\n            toolStripMenuItem56.Text = \"Switch to Content View\";\n            // \n            // _logSplitter\n            // \n            _logSplitter.Dock = DockStyle.Fill;\n            _logSplitter.Location = new System.Drawing.Point(0, 49);\n            _logSplitter.Name = \"_logSplitter\";\n            _logSplitter.Orientation = Orientation.Horizontal;\n            // \n            // _logSplitter.Panel1\n            // \n            _logSplitter.Panel1.Controls.Add(scMain);\n            _logSplitter.Panel1MinSize = 100;\n            // \n            // _logSplitter.Panel2\n            // \n            _logSplitter.Panel2.Controls.Add(_logPanel);\n            _logSplitter.Panel2Collapsed = true;\n            _logSplitter.Panel2MinSize = 50;\n            _logSplitter.Size = new System.Drawing.Size(915, 160);\n            _logSplitter.SplitterDistance = 100;\n            _logSplitter.SplitterWidth = 5;\n            _logSplitter.TabIndex = 6;\n            // \n            // _logPanel\n            // \n            _logPanel.Dock = DockStyle.Fill;\n            _logPanel.Location = new System.Drawing.Point(0, 0);\n            _logPanel.Name = \"_logPanel\";\n            _logPanel.Size = new System.Drawing.Size(150, 46);\n            _logPanel.TabIndex = 0;\n            // \n            // tsTop\n            // \n            tsTop.AllowMerge = false;\n            tsTop.GripStyle = ToolStripGripStyle.Hidden;\n            tsTop.Items.AddRange(new ToolStripItem[] { toolStripButton1, toolStripButton2, tsbPath });\n            tsTop.Location = new System.Drawing.Point(0, 0);\n            tsTop.Name = \"tsTop\";\n            tsTop.Size = new System.Drawing.Size(915, 25);\n            tsTop.TabIndex = 9;\n            tsTop.Text = \"toolStrip1\";\n            // \n            // MainForm\n            // \n            AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);\n            AutoScaleMode = AutoScaleMode.Dpi;\n            ClientSize = new System.Drawing.Size(915, 497);\n            Controls.Add(_logSplitter);\n            Controls.Add(statusStrip1);\n            Controls.Add(menuStrip1);\n            Controls.Add(tsTop);\n            KeyPreview = true;\n            MainMenuStrip = menuStrip1;\n            MinimumSize = new System.Drawing.Size(738, 504);\n            Name = \"MainForm\";\n            Text = \"Jexus Manager\";\n            FormClosing += Form1FormClosing;\n            Load += MainForm_Load;\n            scMain.Panel1.ResumeLayout(false);\n            ((ISupportInitialize)scMain).EndInit();\n            scMain.ResumeLayout(false);\n            tableLayoutPanel1.ResumeLayout(false);\n            panel2.ResumeLayout(false);\n            panel2.PerformLayout();\n            toolStrip2.ResumeLayout(false);\n            toolStrip2.PerformLayout();\n            panel1.ResumeLayout(false);\n            panel1.PerformLayout();\n            cmsServer.ResumeLayout(false);\n            cmsApplicationPools.ResumeLayout(false);\n            cmsSites.ResumeLayout(false);\n            cmsSite.ResumeLayout(false);\n            statusStrip1.ResumeLayout(false);\n            statusStrip1.PerformLayout();\n            menuStrip1.ResumeLayout(false);\n            menuStrip1.PerformLayout();\n            ((ISupportInitialize)actionList1).EndInit();\n            cmsIis.ResumeLayout(false);\n            cmsApplication.ResumeLayout(false);\n            cmsServers.ResumeLayout(false);\n            cmsVirtualDirectory.ResumeLayout(false);\n            cmsPhysicalDirectory.ResumeLayout(false);\n            _logSplitter.Panel1.ResumeLayout(false);\n            _logSplitter.Panel2.ResumeLayout(false);\n            ((ISupportInitialize)_logSplitter).EndInit();\n            _logSplitter.ResumeLayout(false);\n            tsTop.ResumeLayout(false);\n            tsTop.PerformLayout();\n            ResumeLayout(false);\n            PerformLayout();\n        }\n\n        #endregion\n\n        private SplitContainer scMain;\n        private TreeView treeView1;\n        private ContextMenuStrip cmsServer;\n        private ToolStripMenuItem refreshToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem1;\n        private ToolStripMenuItem addWebsiteToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem2;\n        private ToolStripMenuItem btnStartServer;\n        private ToolStripMenuItem btnStopServer;\n        private ToolStripSeparator toolStripMenuItem3;\n        private ToolStripMenuItem btnRenameServer;\n        private ToolStripSeparator toolStripMenuItem5;\n        private ToolStripMenuItem switchToContentViewToolStripMenuItem;\n        private ContextMenuStrip cmsApplicationPools;\n        private ToolStripMenuItem addApplicationPoolToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem6;\n        private ToolStripMenuItem refreshToolStripMenuItem1;\n        private ContextMenuStrip cmsSites;\n        private ToolStripMenuItem addWebsiteToolStripMenuItem1;\n        private ToolStripSeparator toolStripMenuItem7;\n        private ToolStripMenuItem refreshToolStripMenuItem2;\n        private ToolStripSeparator toolStripMenuItem8;\n        private ToolStripMenuItem switchToContentViewToolStripMenuItem1;\n        private ContextMenuStrip cmsSite;\n        private ToolStripMenuItem exploreToolStripMenuItem;\n        private ToolStripMenuItem editPermissionsToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem10;\n        private ToolStripMenuItem btnApplication;\n        private ToolStripMenuItem addVirtualDirectoryToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem11;\n        private ToolStripMenuItem editBindingsToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem12;\n        private ToolStripMenuItem manageWebsiteToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem13;\n        private ToolStripMenuItem refreshToolStripMenuItem3;\n        private ToolStripMenuItem removeToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem14;\n        private ToolStripMenuItem renameToolStripMenuItem1;\n        private ToolStripSeparator toolStripMenuItem17;\n        private ToolStripMenuItem switchToContentViewToolStripMenuItem2;\n        private ImageList imageList1;\n        private StatusStrip statusStrip1;\n        private MenuStrip menuStrip1;\n        private ToolStripMenuItem fileToolStripMenuItem;\n        private ToolStripMenuItem viewToolStripMenuItem;\n        private ToolStripMenuItem helpToolStripMenuItem;\n        private ToolStripMenuItem iISHelpToolStripMenuItem;\n        private ToolStripMenuItem iISOnMSDNOnlineToolStripMenuItem;\n        private ToolStripMenuItem iISNETOnlineToolStripMenuItem;\n        private ToolStripMenuItem iISKBsOnlineToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem18;\n        private ToolStripMenuItem btnAbout;\n        private ToolStripMenuItem backToolStripMenuItem;\n        private ToolStripMenuItem forwardToolStripMenuItem;\n        private ToolStripMenuItem upOneLevelToolStripMenuItem;\n        private ToolStripMenuItem homeToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem19;\n        private ToolStripMenuItem stopToolStripMenuItem1;\n        private ToolStripMenuItem refreshToolStripMenuItem4;\n        private ToolStripSeparator toolStripMenuItem20;\n        private ToolStripMenuItem groupByToolStripMenuItem;\n        private ToolStripMenuItem sortByToolStripMenuItem;\n        private ToolStripMenuItem viewToolStripMenuItem1;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripButton btnUp;\n        private Panel panel1;\n        private Label label1;\n        private ToolStripSeparator toolStripSeparator1;\n        private ToolStripMenuItem saveConnectionsToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem21;\n        private ToolStripMenuItem exitToolStripMenuItem;\n        private ToolStripSplitButton toolStripButton3;\n        private ToolStripMenuItem btnServer;\n        private ToolStripMenuItem connectToWebsiteToolStripMenuItem;\n        private ToolStripMenuItem connectToApplicationToolStripMenuItem;\n        private ToolStripButton btnSave;\n        private ToolStripSeparator toolStripSeparator2;\n        private ToolStripButton btnDisconnect;\n        private ToolStripMenuItem connectToAServerToolStripMenuItem;\n        private ToolStripMenuItem connectToAWebsiteToolStripMenuItem;\n        private ToolStripMenuItem connectToAnApplicationToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem22;\n        private ToolStripMenuItem disconnectToolStripMenuItem;\n        private ActionList actionList1;\n        private Action actDisconnect;\n        private Action actUp;\n        private Action actConnectServer;\n        private Action actConnectSite;\n        private Action actConnectionApplication;\n        private Action actSave;\n        private ContextMenuStrip cmsIis;\n        private ToolStripMenuItem refreshToolStripMenuItem5;\n        private ToolStripSeparator toolStripMenuItem23;\n        private ToolStripMenuItem connectToAServerToolStripMenuItem1;\n        private ToolStripMenuItem connectToAWebsiteToolStripMenuItem1;\n        private ToolStripMenuItem connectToAnApplicationToolStripMenuItem1;\n        private ContextMenuStrip cmsApplication;\n        private ToolStripMenuItem removeConnectionToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem4;\n        private Action actCreateSite;\n        private Action actCreateApplication;\n        private ToolStripMenuItem exploreToolStripMenuItem1;\n        private ToolStripMenuItem editPermissionsToolStripMenuItem1;\n        private ToolStripSeparator toolStripMenuItem9;\n        private ToolStripMenuItem addApplicationToolStripMenuItem;\n        private ToolStripMenuItem addVirtualDirectoryToolStripMenuItem1;\n        private ToolStripSeparator toolStripMenuItem15;\n        private ToolStripMenuItem manageApplicationToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem16;\n        private ToolStripMenuItem refreshToolStripMenuItem6;\n        private ToolStripMenuItem removeToolStripMenuItem1;\n        private ToolStripSeparator toolStripMenuItem24;\n        private ToolStripMenuItem switchToContentViewToolStripMenuItem3;\n        private ToolStripMenuItem btnBrowseApplication;\n        private ToolStripSeparator toolStripMenuItem25;\n        private ToolStripMenuItem advancedSettingsToolStripMenuItem;\n        private ToolStripMenuItem btnRestartSite;\n        private ToolStripMenuItem startToolStripMenuItem1;\n        private ToolStripMenuItem stopToolStripMenuItem2;\n        private ToolStripSeparator toolStripMenuItem26;\n        private ToolStripMenuItem btnBrowseSite;\n        private ToolStripSeparator toolStripMenuItem27;\n        private ToolStripMenuItem advancedSettingsToolStripMenuItem1;\n        private ToolStripStatusLabel txtInfo;\n        private ToolStripSeparator toolStripMenuItem28;\n        private ToolStripMenuItem btnUpdate;\n        private ContextMenuStrip cmsServers;\n        private ToolStripMenuItem refreshToolStripMenuItem9;\n        private ToolStripSeparator toolStripMenuItem34;\n        private ToolStripMenuItem addServerToolStripMenuItem;\n        private ToolStripSeparator toolStripMenuItem35;\n        private ToolStripMenuItem switchToContentViewToolStripMenuItem6;\n        private ContextMenuStrip cmsVirtualDirectory;\n        private ToolStripMenuItem toolStripMenuItem36;\n        private ToolStripMenuItem toolStripMenuItem37;\n        private ToolStripSeparator toolStripSeparator3;\n        private ToolStripMenuItem convertToApplicationToolStripMenuItem;\n        private ToolStripMenuItem toolStripMenuItem38;\n        private ToolStripMenuItem toolStripMenuItem39;\n        private ToolStripSeparator toolStripSeparator4;\n        private ToolStripMenuItem manageVirtualDirectoryToolStripMenuItem;\n        private ToolStripMenuItem toolStripMenuItem41;\n        private ToolStripSeparator toolStripSeparator5;\n        private ToolStripMenuItem toolStripMenuItem42;\n        private ToolStripSeparator toolStripSeparator6;\n        private ToolStripMenuItem toolStripMenuItem43;\n        private ToolStripMenuItem toolStripMenuItem44;\n        private ToolStripSeparator toolStripSeparator7;\n        private ToolStripMenuItem toolStripMenuItem45;\n        private ContextMenuStrip cmsPhysicalDirectory;\n        private ToolStripMenuItem toolStripMenuItem46;\n        private ToolStripMenuItem toolStripMenuItem47;\n        private ToolStripSeparator toolStripSeparator8;\n        private ToolStripMenuItem toolStripMenuItem48;\n        private ToolStripMenuItem toolStripMenuItem49;\n        private ToolStripMenuItem toolStripMenuItem50;\n        private ToolStripSeparator toolStripSeparator9;\n        private ToolStripMenuItem manageFolderToolStripMenuItem;\n        private ToolStripMenuItem toolStripMenuItem52;\n        private ToolStripSeparator toolStripSeparator11;\n        private ToolStripMenuItem toolStripMenuItem54;\n        private ToolStripSeparator toolStripSeparator12;\n        private ToolStripMenuItem toolStripMenuItem56;\n        private Action actCreateVirtualDirectory;\n        private Action actExplore;\n        private Action actEditPermissions;\n        private Action actBrowse;\n        private ToolStripMenuItem btnOpenConfig;\n        private ToolStripSeparator toolStripMenuItem40;\n        private Action actRunAsAdmin;\n        private ToolStripMenuItem runAsAdministratorToolStripMenuItem;\n        private Action actBack;\n        private Action actForward;\n        private SplitContainer _logSplitter;\n        private Panel _logPanel;\n        private ToolStripStatusLabel txtPathToSite;\n        private ToolStrip tsTop;\n        private ToolStripButton toolStripButton1;\n        private ToolStripButton toolStripButton2;\n        private ToolStripBreadcrumbItem tsbPath;\n        private ToolStripProgressBar pbStatus;\n    }\n}\n"
  },
  {
    "path": "JexusManager/MainForm.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Globalization;\nusing Microsoft.Win32;\n\nnamespace JexusManager\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Linq;\n    using System.Reflection;\n    using System.Text;\n    using System.Windows.Forms;\n\n    using JexusManager.Dialogs;\n    using JexusManager.Features.Access;\n    using JexusManager.Features.Authentication;\n    using JexusManager.Features.Authorization;\n    using JexusManager.Features.Caching;\n    using JexusManager.Features.Certificates;\n    using JexusManager.Features.Cgi;\n    using JexusManager.Features.Compression;\n    using JexusManager.Features.DefaultDocument;\n    using JexusManager.Features.DirectoryBrowse;\n    using JexusManager.Features.FastCgi;\n    using JexusManager.Features.Handlers;\n    using JexusManager.Features.HttpApi;\n    using JexusManager.Features.HttpErrors;\n    using JexusManager.Features.HttpRedirect;\n    using JexusManager.Features.IpSecurity;\n    using JexusManager.Features.IsapiCgiRestriction;\n    using JexusManager.Features.IsapiFilters;\n    using JexusManager.Features.Jexus;\n    using JexusManager.Features.Logging;\n    using JexusManager.Features.Main;\n    using JexusManager.Features.MimeMap;\n    using JexusManager.Features.Modules;\n    using JexusManager.Features.RequestFiltering;\n    using JexusManager.Features.ResponseHeaders;\n    using JexusManager.Features.Rewrite;\n    using JexusManager.Main.Properties;\n    using JexusManager.Services;\n    using JexusManager.Tree;\n    using JexusManager.Wizards.ConnectionWizard;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Action = Crad.Windows.Forms.Actions.Action;\n    using Application = Microsoft.Web.Administration.Application;\n    using Features;\n    using JexusManager.Features.Asp;\n    using JexusManager.Features.TraceFailedRequests;\n    using System.Diagnostics;\n    using Microsoft.Extensions.Logging;\n    using JexusManager.Breadcrumb;\n\n    public sealed partial class MainForm : Form, IMainForm\n    {\n        private bool _handleEvents = true;\n        private const string expressGlobalInstanceName = \"Global\";\n        private readonly List<ModuleProvider> _providers;\n        private readonly ServiceContainer _serviceContainer;\n        private readonly NavigationService _navigationService;\n        private bool _fromBreadcrumb;\n        private TreeNode IisExpressRoot { get; }\n        private TreeNode IisRoot { get; }\n        private TreeNode JexusRoot { get; }\n        private TreeNode StartPage { get; set; }\n\n        public IManagementUIService UIService { get; }\n\n        public MainForm(List<string> files, RichTextBox textBox)\n        {\n            InitializeComponent();\n\n            _logPanel.Controls.Add(textBox);\n\n            LogHelper.GetLogger<MainForm>().LogInformation(\"Jexus Manager starting up. Version: {Version}\",\n                Assembly.GetExecutingAssembly().GetName().Version);\n\n            // Add toggle logging menu item\n            helpToolStripMenuItem.DropDownItems.Add(new ToolStripSeparator());\n            var toggleLogItem = new ToolStripMenuItem(\"Show &Logs\", null, (s, e) =>\n            {\n                _logSplitter.Panel2Collapsed = !_logSplitter.Panel2Collapsed;\n                ((ToolStripMenuItem)s).Text = _logSplitter.Panel2Collapsed ? \"Show &Logs\" : \"Hide &Logs\";\n            });\n            helpToolStripMenuItem.DropDownItems.Add(toggleLogItem);\n\n            removeToolStripMenuItem.Image = DefaultTaskList.RemoveImage;\n            removeToolStripMenuItem1.Image = DefaultTaskList.RemoveImage;\n            toolStripMenuItem44.Image = DefaultTaskList.RemoveImage;\n\n            Icon = Resources.iis;\n            imageList1.Images.Add(Resources.iis_16); // 0\n            imageList1.Images.Add(Resources.server_16); // 1\n            imageList1.Images.Add(Resources.application_pools_16); // 2\n            imageList1.Images.Add(Resources.sites_16); // 3\n            imageList1.Images.Add(Resources.site_16); // 4\n            imageList1.Images.Add(Resources.application_16); // 5\n            imageList1.Images.Add(Resources.physical_directory_16); // 6\n            imageList1.Images.Add(Resources.virtual_directory_16); // 7\n            imageList1.Images.Add(Resources.farm_16); // 8\n            imageList1.Images.Add(Resources.farm_server_16); // 9\n            imageList1.Images.Add(Resources.servers_16); // 10\n            imageList1.Images.Add(Resources.server_disabled_16); // 11\n            imageList1.Images.Add(Resources.farm_disabled_16); // 12\n\n            actRunAsAdmin.Image = NativeMethods.GetShieldIcon();\n            btnAbout.Text = string.Format(\"About Jexus Manager {0}\", Assembly.GetExecutingAssembly().GetName().Version);\n            StartPage = new PlaceholderTreeNode(\"Start Page\", 0) { ContextMenuStrip = cmsIis };\n            treeView1.Nodes.Add(StartPage);\n            if (!Helper.IsRunningOnMono())\n            {\n                IisExpressRoot = new PlaceholderTreeNode(\"IIS Express\", 10) { ContextMenuStrip = cmsIis };\n                treeView1.Nodes.Add(IisExpressRoot);\n                IisRoot = new PlaceholderTreeNode(\"IIS\", 10) { ContextMenuStrip = cmsIis };\n                treeView1.Nodes.Add(IisRoot);\n            }\n\n            JexusRoot = new PlaceholderTreeNode(\"Jexus\", 10) { ContextMenuStrip = cmsIis };\n            treeView1.Nodes.Add(JexusRoot);\n\n            _providers = new List<ModuleProvider>\n            {\n                new AspModuleProvider(),\n                new AuthenticationModuleProvider(),\n                new AuthorizationModuleProvider(),\n                new CgiModuleProvider(),\n                new CompressionModuleProvider(),\n                new DefaultDocumentModuleProvider(),\n                new DirectoryBrowseModuleProvider(),\n                new HttpErrorsModuleProvider(),\n                new TraceFailedRequestsModuleProvider(),\n                new FastCgiModuleProvider(),\n                new HandlersModuleProvider(),\n                new HttpRedirectModuleProvider(),\n                new ResponseHeadersModuleProvider(),\n                new IpSecurityModuleProvider(),\n                new IsapiCgiRestrictionModuleProvider(),\n                new IsapiFiltersModuleProvider(),\n                new LoggingModuleProvider(),\n                new MimeMapModuleProvider(),\n                new ModulesModuleProvider(),\n                new CachingModuleProvider(),\n                new RequestFilteringModuleProvider(),\n                new AccessModuleProvider(),\n                new CertificatesModuleProvider(),\n                new RewriteModuleProvider(),\n                new HttpApiModuleProvider(),\n                new JexusModuleProvider()\n            };\n\n            _navigationService = new NavigationService(this);\n            _navigationService.NavigationPerformed += OnNavigationPerformed;\n\n            UIService = new ManagementUIService(this);\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.AddService(typeof(INavigationService), _navigationService);\n            _serviceContainer.AddService(typeof(IManagementUIService), UIService);\n\n            if (files.Count == 0)\n            {\n                LoadIisExpress();\n                LoadIis();\n                LoadJexus();\n            }\n            else\n            {\n                LoadIisExpressQuick(files);\n            }\n\n            if (PublicNativeMethods.IsProcessElevated)\n            {\n                Text = string.Format(\"{0} (Administrator)\", Text);\n                actRunAsAdmin.Visible = false;\n            }\n            else\n            {\n                IisRoot.ToolTipText = \"This program must run administrator to manage IIS\";\n                IisRoot.Text = \"IIS (Disabled)\";\n            }\n        }\n\n        internal ToolStripButton DisconnectButton\n        {\n            get { return btnDisconnect; }\n        }\n\n        internal ContextMenuStrip ApplicationPoolsMenu\n        {\n            get { return cmsApplicationPools; }\n        }\n\n        internal ContextMenuStrip SitesMenu\n        {\n            get { return cmsSites; }\n        }\n\n        internal ContextMenuStrip SiteMenu\n        {\n            get { return cmsSite; }\n        }\n\n        internal ContextMenuStrip VirtualDirectoryMenu\n        {\n            get { return cmsVirtualDirectory; }\n        }\n\n        internal ContextMenuStrip PhysicalDirectoryMenu\n        {\n            get { return cmsPhysicalDirectory; }\n        }\n\n        internal ContextMenuStrip ApplicationMenu\n        {\n            get { return cmsApplication; }\n        }\n\n        internal Action SaveMenuItem\n        {\n            get\n            {\n                return actSave;\n            }\n        }\n\n        private void LoadIisExpress()\n        {\n            LogHelper.GetLogger<MainForm>().LogInformation(\"Loading IIS Express servers\");\n            if (!IisExpressServerManager.ServerInstalled)\n            {\n                LogHelper.GetLogger<MainForm>().LogWarning(\"IIS Express is not installed on this machine\");\n                return;\n            }\n\n            // TODO: load if only on Windows.\n            var globalFile = Path.Combine(\n                Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),\n                \"IISExpress\",\n                \"config\",\n                \"applicationhost.config\");\n            if (File.Exists(globalFile))\n            {\n                var global = ServerTreeNode.CreateIisExpressNode(\n                    this,\n                    _serviceContainer,\n                    expressGlobalInstanceName,\n                    globalFile,\n                    server: null,\n                    ignoreInCache: true);\n                RegisterServer(global);\n            }\n\n            if (!File.Exists(DialogHelper.ListIisExpress))\n            {\n                return;\n            }\n\n            var lines = File.ReadAllLines(DialogHelper.ListIisExpress);\n            foreach (var item in lines)\n            {\n                var parts = item.Split('|');\n                if (parts.Length != 2)\n                {\n                    continue;\n                }\n\n                var data = ServerTreeNode.CreateIisExpressNode(\n                    this,\n                    _serviceContainer,\n                    name: parts[0],\n                    fileName: parts[1],\n                    server: null,\n                    ignoreInCache: false);\n                RegisterServer(data);\n            }\n        }\n\n        private void LoadIisExpressQuick(List<string> files)\n        {\n            if (!IisExpressServerManager.ServerInstalled)\n            {\n                var result = UIService.ShowMessage(\n                    \"Didn't find IIS Express on this machine. Do you want to go and download it now?\",\n                    \"IIS Express not found\",\n                    MessageBoxButtons.YesNo,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n                if (result == DialogResult.Yes)\n                {\n                    DialogHelper.ProcessStart(\"https://www.microsoft.com/download/details.aspx?id=48264\");\n                }\n\n                IisExpressRoot.Text = \"IIS Express (Disabled)\";\n                return;\n            }\n\n            if (files.Count == 0 && !File.Exists(DialogHelper.ListIisExpress))\n            {\n                return;\n            }\n\n            var number = 1;\n            foreach (var file in files)\n            {\n                AspNetCoreHelper.FixConfigFile(file);\n                var data = ServerTreeNode.CreateIisExpressNode(\n                    this,\n                    _serviceContainer,\n                    name: $\"IIS Express {number++}\",\n                    fileName: file,\n                    server: null,\n                    ignoreInCache: true);\n                RegisterServer(data);\n                IisExpressRoot.Expand();\n                data.HandleDoubleClick();\n            }\n        }\n\n        private void LoadIis()\n        {\n            // TODO: load if only on Windows.\n            var config = Path.Combine(\n                Environment.GetFolderPath(Environment.SpecialFolder.System),\n                \"inetsrv\",\n                \"config\",\n                \"applicationhost.config\");\n            if (File.Exists(config))\n            {\n                var data = ServerTreeNode.CreateIisNode(\n                    this,\n                    _serviceContainer,\n                    Environment.MachineName,\n                    config);\n                RegisterServer(data);\n            }\n        }\n\n        private void RegisterServer(ServerTreeNode data)\n        {\n            LogHelper.GetLogger<MainForm>().LogInformation(\"Registering server {Name} ({Mode})\", data.DisplayName, data.Mode);\n            data.ContextMenuStrip = cmsServer;\n            if (data.Mode == WorkingMode.IisExpress)\n            {\n                IisExpressRoot.Nodes.Add(data);\n            }\n            else if (data.Mode == WorkingMode.Iis)\n            {\n                IisRoot.Nodes.Add(data);\n            }\n            else if (data.Mode == WorkingMode.Jexus)\n            {\n                JexusRoot.Nodes.Add(data);\n            }\n        }\n\n        private void LoadJexus()\n        {\n            if (!File.Exists(DialogHelper.ListJexus))\n            {\n                return;\n            }\n\n            var lines = File.ReadAllLines(DialogHelper.ListJexus);\n            foreach (var item in lines)\n            {\n                var parts = item.Split(',');\n                var data = ServerTreeNode.CreateJexusNode(\n                    this,\n                    _serviceContainer,\n                    name: parts[0],\n                    hostName: parts[1],\n                    credentials: parts[4],\n                    hash: parts[2],\n                    server: null,\n                    isLocalhost: bool.Parse(parts[3]));\n                RegisterServer(data);\n            }\n        }\n\n        private ServerTreeNode GetCurrentData(TreeNode node)\n        {\n            if (node == null)\n                throw new InvalidOperationException(\"no selected node\");\n\n            var managerNode = node as ManagerTreeNode;\n            if (managerNode?.ServerNode == null)\n                throw new InvalidOperationException($\"no server node {node.GetType().FullName}\");\n\n            return managerNode.ServerNode;\n        }\n\n        private void actCreateSite_Execute(object sender, EventArgs e)\n        {\n            var selected = treeView1.SelectedNode;\n            if (selected == null)\n            {\n                LogHelper.GetLogger<MainForm>().LogWarning(\"Cannot create site: no node selected\");\n                return;\n            }\n\n            var data = GetCurrentData(selected);\n            if (data.IsBusy)\n            {\n                LogHelper.GetLogger<MainForm>().LogWarning(\"Cannot create site: server {Name} is busy\", data.DisplayName);\n                return;\n            }\n\n            if (data.ServerManager == null)\n            {\n                LogHelper.GetLogger<MainForm>().LogWarning(\"Null server: {DisplayName} : {Mode} : {Text} : {Type}\",\n                    data.DisplayName, data.Mode, selected.Text, selected.GetType().FullName);\n                return;\n            }\n\n            if (data.ServerManager.Sites == null)\n            {\n                LogHelper.GetLogger<MainForm>().LogWarning(\"Null sites collection: {DisplayName} : {Mode} : {Text} : {Type} : {FileName}\",\n                    data.DisplayName, data.Mode, selected.Text, selected.GetType().FullName, data.ServerManager.FileName);\n                return;\n            }\n\n            var module = new MainModule();\n            module.Initialize(_serviceContainer, null);\n            var dialog = new NewSiteDialog(module, data.ServerManager.Sites);\n            if (dialog.ShowDialog(this) != DialogResult.OK)\n            {\n                return;\n            }\n\n            LogHelper.GetLogger<MainForm>().LogInformation(\"Creating new site on server {Server}\", data.DisplayName);\n            data.ServerManager.Sites.Add(dialog.NewSite);\n            dialog.NewSite.Applications[0].Save();\n            data.ServerManager.CommitChanges();\n            LogHelper.GetLogger<MainForm>().LogInformation(\"Site {SiteName} created successfully\", dialog.NewSite.Name);\n            AddSiteNode(dialog.NewSite);\n        }\n\n        public void LoadPage(IModulePage page)\n        {\n            var item = new NavigationItem(null, null, page.GetType(), null);\n            item.Page = page;\n            var info = page.PageInfo;\n            _navigationService.NavigateToItem(item, true);\n        }\n\n        public void LoadInner(IModulePage page)\n        {\n            var panel = page as ContainerControl;\n            if (panel == null)\n            {\n                return;\n            }\n\n            panel.Dock = DockStyle.Fill;\n            scMain.Panel2.Controls.Clear();\n            scMain.Panel2.Controls.Add(panel);\n        }\n\n        private void scMain_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (scMain.Panel1.Width > 500)\n            {\n                scMain.SplitterDistance = 500;\n            }\n        }\n\n        private void editBindingsToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            var node = treeView1.SelectedNode.Tag as Site;\n            if (node == null)\n            {\n                return;\n            }\n\n            var module = new MainModule();\n            module.Initialize(_serviceContainer, null);\n            var dialog = new BindingsDialog(module, node);\n            dialog.ShowDialog(this);\n        }\n\n        private void btnRemoveSite_Click(object sender, EventArgs e)\n        {\n            TreeNode selectedNode = treeView1.SelectedNode;\n            if (selectedNode == null)\n            {\n                return;\n            }\n\n            if (!(selectedNode.Tag is Site node))\n            {\n                return;\n            }\n\n            var result = UIService.ShowMessage(\n                \"Are you sure that you want to remove the selected site?\",\n                \"Confirm Remove\",\n                MessageBoxButtons.YesNoCancel,\n                MessageBoxIcon.Question,\n                MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            node.Parent.Remove(node);\n            node.Server.CommitChanges();\n            selectedNode.Remove();\n        }\n\n        private void Form1FormClosing(object sender, FormClosingEventArgs e)\n        {\n            LogHelper.GetLogger<MainForm>().LogInformation(\"Application shutting down\");\n            if (actSave.Enabled)\n            {\n                var result = UIService.ShowMessage(\"The connection list has changed. Do you want to save changes?\", Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);\n                if (result == DialogResult.Yes)\n                {\n                    actSave.DoExecute();\n                }\n            }\n\n            foreach (var item in JexusRoot.Nodes)\n            {\n                var serverNode = item as ServerTreeNode;\n                try\n                {\n                    serverNode.ServerManager.CommitChanges();\n                    var conflict = AsyncHelper.RunSync(() => ((JexusServerManager)serverNode.ServerManager).ByeAsync());\n                    if (Environment.MachineName != conflict)\n                    {\n                        UIService.ShowMessage(string.Format(\"The server is also connected to {0}. Making changes on multiple clients might corrupt server configuration.\", conflict), Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);\n                    }\n                }\n                catch (Exception ex)\n                {\n                    LogHelper.GetLogger<MainForm>().LogError(ex, \"Error during server shutdown\");\n                    var last = ex;\n                    Exception previous = null;\n                    while (last.InnerException != null)\n                    {\n                        previous = last;\n                        last = last.InnerException;\n                    }\n\n                    var message = new StringBuilder();\n                    message.AppendLine(\"Could not connect to the specified computer.\")\n                        .AppendLine()\n                        .AppendFormat(\"Details: {0}\", previous?.Message ?? last.Message);\n                    UIService.ShowMessage(message.ToString(), Text, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                }\n            }\n\n            foreach (var item in IisExpressRoot.Nodes)\n            {\n                var serverNode = item as ServerTreeNode;\n                var serverManager = serverNode?.ServerManager;\n                if (serverManager == null)\n                {\n                    continue;\n                }\n\n                if (serverManager.Sites.Count == 0)\n                {\n                    continue;\n                }\n\n                try\n                {\n                    BeginProgress();\n                    foreach (Site site in serverManager.Sites)\n                    {\n                        if (site.State == ObjectState.Started)\n                        {\n                            var result = UIService.ShowMessage($\"Site {site.Name} is still running. Do you want to stop it?\", Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);\n                            if (result == DialogResult.Yes)\n                            {\n                                site.Stop();\n                            }\n                        }\n                    }\n                }\n                finally\n                {\n                    EndProgress();\n                }\n            }\n        }\n\n        private void renameToolStripMenuItem1_Click(object sender, EventArgs e)\n        {\n            treeView1.SelectedNode.BeginEdit();\n        }\n\n        private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)\n        {\n            var site = (Site)e.Node.Tag;\n            if (string.IsNullOrEmpty(e.Label))\n            {\n                e.CancelEdit = true;\n                return;\n            }\n\n            foreach (var ch in SiteCollection.InvalidSiteNameCharacters())\n            {\n                if (e.Label.Contains(ch))\n                {\n                    UIService.ShowMessage(\"The site name cannot contain the following characters: '\\\\, /, ?, ;, :, @, &, =, +, $, ,, |, \\\", <, >'.\", \"Sites\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    e.CancelEdit = true;\n                    return;\n                }\n            }\n\n            foreach (var ch in SiteCollection.InvalidSiteNameCharactersJexus())\n            {\n                if (e.Label.Contains(ch) || e.Label.StartsWith(\"~\"))\n                {\n                    UIService.ShowMessage(\"The site name cannot contain the following characters: '~,  '.\", \"Sites\", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    e.CancelEdit = true;\n                    return;\n                }\n            }\n\n            // TODO: is this required by Jexus?\n            // await site.RemoveApplicationsAsync();\n            site.Name = e.Label;\n            site.Server.CommitChanges();\n\n            treeView1.SelectedNode = null;\n            treeView1.SelectedNode = e.Node;\n        }\n\n        private void treeView1_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e)\n        {\n            if (!(e.Node is SiteTreeNode))\n            {\n                e.CancelEdit = true;\n            }\n        }\n\n        public void RemoveSiteNode(Site site)\n        {\n            var selected = treeView1.SelectedNode;\n            if (selected == null)\n            {\n                return;\n            }\n\n            var data = GetCurrentData(selected);\n            if (data.IsBusy)\n            {\n                return;\n            }\n\n            foreach (TreeNode node in data.SitesNode.Nodes)\n            {\n                if (node.Tag == site)\n                {\n                    node.Remove();\n                    break;\n                }\n            }\n        }\n\n        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)\n        {\n            if (IsDisposed)\n            {\n                return;\n            }\n\n            if (!_handleEvents)\n            {\n                return;\n            }\n\n            if (e.Node == null)\n            {\n                return;\n            }\n\n            var node = e.Node as ManagerTreeNode;\n            if (node == null)\n            {\n                if (e.Node.Text != ManagerTreeNode.TempNodeName)\n                {\n                    LogHelper.GetLogger<MainForm>().LogWarning(\"Wrong node type: {Type} Name: {Text}\", e.Node.GetType().FullName, e.Node.Text);\n                }\n\n                // Clear breadcrumb if node is not a ManagerTreeNode\n                tsbPath.Clear();\n                return;\n            }\n\n            // Update the breadcrumb navigation\n            UpdateBreadcrumbPath(node);\n\n            var serverNode = node as ServerTreeNode;\n            actUp.Enabled = !(serverNode != null || node is PlaceholderTreeNode);\n            if (serverNode != null)\n            {\n                if (serverNode.IsBusy)\n                {\n                    return;\n                }\n\n                actDisconnect.Enabled = !serverNode.IsBusy && !serverNode.IgnoreInCache;\n                EnableServerMenuItems(serverNode.ServerManager != null);\n                serverNode.LoadPanels(this, _serviceContainer, _providers);\n                ShowInfo($\"Ready.\");\n                return;\n            }\n\n            if (node is SiteTreeNode siteNode)\n            {\n                var canBrowse = siteNode.Site.Bindings.Any(binding => binding.CanBrowse);\n                toolStripMenuItem12.Visible = canBrowse;\n                manageWebsiteToolStripMenuItem.Visible = canBrowse;\n                siteNode.LoadPanels(this, _serviceContainer, _providers);\n                ShowInfo($\"Ready.\");\n                return;\n            }\n\n            if (node is ApplicationTreeNode appNode)\n            {\n                var canBrowse = appNode.Application.Site.Bindings.Any(binding => binding.CanBrowse);\n                toolStripMenuItem15.Visible = canBrowse;\n                manageApplicationToolStripMenuItem.Visible = canBrowse;\n                appNode.LoadPanels(this, _serviceContainer, _providers);\n                ShowInfo($\"Ready.\");\n                return;\n            }\n\n            if (node is VirtualDirectoryTreeNode vdirNode)\n            {\n                var canBrowse = vdirNode.VirtualDirectory.Application.Site.Bindings.Any(binding => binding.CanBrowse);\n                toolStripSeparator4.Visible = canBrowse;\n                manageVirtualDirectoryToolStripMenuItem.Visible = canBrowse;\n                vdirNode.LoadPanels(this, _serviceContainer, _providers);\n                ShowInfo($\"Ready.\");\n                return;\n            }\n\n            if (node is PhysicalDirectoryTreeNode physNode)\n            {\n                var canBrowse = physNode.PhysicalDirectory.Application.Site.Bindings.Any(binding => binding.CanBrowse);\n                toolStripSeparator9.Visible = canBrowse;\n                manageFolderToolStripMenuItem.Visible = canBrowse;\n                physNode.LoadPanels(this, _serviceContainer, _providers);\n                ShowInfo($\"Ready.\");\n                return;\n            }\n\n            node.LoadPanels(this, _serviceContainer, _providers);\n            ShowInfo($\"Ready.\");\n        }\n\n        /// <summary>\n        /// Updates the breadcrumb path based on the selected node.\n        /// </summary>\n        /// <param name=\"node\">The selected node</param>\n        private void UpdateBreadcrumbPath(ManagerTreeNode node)\n        {\n            if (_fromBreadcrumb)\n            {\n                _fromBreadcrumb = false;\n                return;\n            }\n\n            // Clear existing breadcrumb items\n            tsbPath.Clear();\n\n            // If no node selected, return\n            if (node == null)\n                return;\n\n            // Build a list of nodes from root to the current node\n            var nodePath = new List<ManagerTreeNode>();\n            ManagerTreeNode current = node;\n\n            // Traverse up the tree to the root\n            while (current != null)\n            {\n                nodePath.Insert(0, current);\n                current = current.Parent as ManagerTreeNode;\n            }\n\n            // Add each node to the breadcrumb\n            foreach (var pathNode in nodePath)\n            {\n                tsbPath.AddItem(pathNode.Text, pathNode);\n            }\n\n            // Set the selected index to the last item\n            if (tsbPath.Items.Count > 0)\n            {\n                tsbPath.SelectedIndex = tsbPath.Items.Count - 1;\n            }\n        }\n\n        internal void EnableServerMenuItems(bool enabled)\n        {\n            toolStripMenuItem2.Visible = enabled;\n            toolStripMenuItem3.Visible = enabled;\n            toolStripMenuItem4.Visible = enabled;\n            btnRenameServer.Visible = enabled;\n            btnStartServer.Visible = enabled;\n            btnStopServer.Visible = enabled;\n            btnOpenConfig.Enabled = enabled;\n            //actConnectServer.Visible = enabled;\n        }\n\n        internal void ShowInfo(string text)\n        {\n            txtInfo.Text = text;\n            txtInfo.Visible = true;\n        }\n\n        internal void HideInfo()\n        {\n            txtInfo.Visible = false;\n        }\n\n        internal void UpdateSiteNode(Site site)\n        {\n            var selected = treeView1.SelectedNode;\n            if (selected == null)\n            {\n                return;\n            }\n\n            var data = GetCurrentData(selected);\n            if (data.IsBusy)\n            {\n                return;\n            }\n\n            foreach (TreeNode node in data.SitesNode.Nodes)\n            {\n                if (node.Tag == site)\n                {\n                    node.Text = site.Name;\n                    break;\n                }\n            }\n        }\n\n        internal void ShowSite(Site site)\n        {\n            var selected = treeView1.SelectedNode;\n            if (selected == null)\n            {\n                return;\n            }\n\n            var data = GetCurrentData(selected);\n            if (data.IsBusy)\n            {\n                return;\n            }\n\n            foreach (TreeNode node in data.SitesNode.Nodes)\n            {\n                if (node.Tag == site)\n                {\n                    treeView1.SelectedNode = node;\n                    break;\n                }\n            }\n        }\n\n        public void AddSiteNode(Site site)\n        {\n            var selected = treeView1.SelectedNode;\n            if (selected == null)\n            {\n                return;\n            }\n\n            var server = GetCurrentData(selected);\n            if (server.IsBusy)\n            {\n                return;\n            }\n\n            if (server.SitesNode == null)\n            {\n                return;\n            }\n\n            ManagerTreeNode.AddToParent(server.SitesNode, new SiteTreeNode(_serviceContainer, site, server) { ContextMenuStrip = cmsSite });\n        }\n\n        public void LoadSites()\n        {\n            var selected = treeView1.SelectedNode;\n            if (selected == null)\n            {\n                return;\n            }\n\n            var server = GetCurrentData(selected);\n            if (server.IsBusy)\n            {\n                return;\n            }\n\n            treeView1.SelectedNode = server.SitesNode;\n        }\n\n        public void LoadPools()\n        {\n            var selected = treeView1.SelectedNode;\n            if (selected == null)\n            {\n                return;\n            }\n\n            var server = GetCurrentData(selected);\n            if (server.IsBusy)\n            {\n                return;\n            }\n\n            treeView1.SelectedNode = server.PoolsNode;\n        }\n\n        private void actUp_Execute(object sender, EventArgs e)\n        {\n            treeView1.SelectedNode = treeView1.SelectedNode.Parent;\n        }\n\n        private void exitToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            Close();\n        }\n\n        private void iISOnMSDNOnlineToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=213860\");\n        }\n\n        private void iISNETOnlineToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=213859\");\n        }\n\n        private void iISKBsOnlineToolStripMenuItem_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210477\");\n        }\n\n        private void actConnectServer_Execute(object sender, EventArgs e)\n        {\n            ConnectToServer();\n        }\n\n        internal void ConnectToServer()\n        {\n            var names = new List<string>();\n            GetAllServers(names, treeView1.Nodes);\n            var dialog = new ConnectionWizard(_serviceContainer, names.ToArray());\n            if (dialog.ShowDialog(this) != DialogResult.OK)\n            {\n                return;\n            }\n\n            var data = (ConnectionWizardData)dialog.WizardData;\n            ServerTreeNode node;\n            if (data.Mode == WorkingMode.Jexus)\n            {\n                node = ServerTreeNode.CreateJexusNode(\n                    this,\n                    _serviceContainer,\n                    data.Name,\n                    data.HostName,\n                    data.UserName + \"|\" + data.Password,\n                    data.CertificateHash,\n                    data.Server,\n                    isLocalhost: true);\n                var path = Path.GetTempFileName();\n                var random = Guid.NewGuid().ToString();\n                File.WriteAllText(path, random);\n                node.IsLocalhost = AsyncHelper.RunSync(() => ((JexusServerManager)node.ServerManager).LocalhostTestAsync(path, random));\n                data.Server.IsLocalhost = node.IsLocalhost;\n            }\n            else\n            {\n                node = ServerTreeNode.CreateIisExpressNode(\n                    this,\n                    _serviceContainer,\n                    data.Name,\n                    data.FileName,\n                    data.Server,\n                    ignoreInCache: false);\n            }\n\n            try\n            {\n                RegisterServer(node);\n                // TODO: trigger the load in connection wizard to throw exception earlier.\n                var succeeded = node.LoadServer(cmsApplicationPools, cmsSites, cmsSite);\n                if (succeeded)\n                {\n                    actSave.Enabled = true;\n                }\n            }\n            catch (Exception ex)\n            {\n                LogHelper.GetLogger<MainForm>().LogError(ex, \"Error during server shutdown\");\n                File.WriteAllText(DialogHelper.DebugLog, ex.ToString());\n                var last = ex;\n                while (last is AggregateException)\n                {\n                    last = last.InnerException;\n                }\n\n                var message = new StringBuilder();\n                message.AppendLine(\"Could not connect to the specified computer.\")\n                    .AppendLine()\n                    .AppendFormat(\"Details: {0}\", last?.Message);\n                UIService.ShowMessage(message.ToString(), Text, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n        }\n\n        private void GetAllServers(List<string> names, TreeNodeCollection nodes)\n        {\n            foreach (TreeNode item in nodes)\n            {\n                if (item is ServerTreeNode serverNode)\n                {\n                    names.Add(serverNode.DisplayName);\n                    continue;\n                }\n\n                GetAllServers(names, item.Nodes);\n            }\n        }\n\n        private void actSave_Execute(object sender, EventArgs e)\n        {\n            var jexusServers = new List<string>();\n            var iisExpressFiles = new List<string>();\n            foreach (TreeNode node in treeView1.Nodes)\n            {\n                foreach (var item in node.Nodes)\n                {\n                    var serverNode = item as ServerTreeNode;\n                    if (serverNode == null || serverNode.IgnoreInCache)\n                    {\n                        continue;\n                    }\n\n                    if (serverNode.Mode == WorkingMode.Jexus)\n                    {\n                        jexusServers.Add(\n                            string.Format(\n                                \"{0},{1},{2},{3},{4}\",\n                                serverNode.DisplayName,\n                                serverNode.HostName,\n                                serverNode.CertificateHash,\n                                serverNode.IsLocalhost,\n                                serverNode.Credentials));\n                        continue;\n                    }\n\n                    if (serverNode.Mode == WorkingMode.IisExpress)\n                    {\n                        if (!string.IsNullOrWhiteSpace(serverNode.HostName))\n                        {\n                            iisExpressFiles.Add(\n                                string.Format(\n                                    \"{0}|{1}\",\n                                    serverNode.DisplayName,\n                                    serverNode.HostName));\n                        }\n                    }\n                }\n            }\n\n            File.WriteAllLines(DialogHelper.ListIisExpress, iisExpressFiles);\n            File.WriteAllLines(DialogHelper.ListJexus, jexusServers);\n            actSave.Enabled = false;\n        }\n\n        private void actDisconnect_Execute(object sender, EventArgs e)\n        {\n            var result = UIService.ShowMessage(\"Are you sure that you want to remove this connection?\", \"Confirm Remove\", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            treeView1.SelectedNode.Remove();\n            actDisconnect.Enabled = false;\n            actSave.Enabled = true;\n        }\n\n        private void actCreateApplication_Execute(object sender, EventArgs e)\n        {\n            var treeNode = ((ManagerTreeNode)treeView1.SelectedNode);\n            treeNode.AddApplication(cmsApplication);\n            treeNode.ServerManager.CommitChanges();\n        }\n\n        private void btnAbout_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ProcessStart(\"https://jexusmanager.com\");\n        }\n\n        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)\n        {\n            treeView1.SelectedNode = null;\n            treeView1.SelectedNode = e.Node;\n\n            if (e.Node is PlaceholderTreeNode)\n            {\n                return;\n            }\n\n            var server = GetCurrentData(e.Node);\n            if (server.IsBusy)\n            {\n                return;\n            }\n\n            // TODO: disable this so that config file errors can be investigated.\n            if (server.ServerManager == null && e.Button == MouseButtons.Right)\n            {\n                treeView1_NodeMouseDoubleClick(sender, e);\n                treeView1_AfterSelect(sender, new TreeViewEventArgs(e.Node));\n            }\n        }\n\n        private void btnRemoveApplication_Click(object sender, EventArgs e)\n        {\n            var node = (Application)treeView1.SelectedNode.Tag;\n            node.Site.Applications = node.Remove();\n            node.Server.CommitChanges();\n            treeView1.SelectedNode.Remove();\n        }\n\n        private void actConnectSite_Execute(object sender, EventArgs e)\n        {\n        }\n\n        private void btnRestartSite_Click(object sender, EventArgs e)\n        {\n            btnRestartSite.Enabled = false;\n            var node = (Site)treeView1.SelectedNode.Tag;\n            try\n            {\n                BeginProgress();\n                node.Restart();\n            }\n            catch (Exception ex)\n            {\n                UIService.ShowError(ex, string.Empty, Name, false);\n            }\n            finally\n            {\n                EndProgress();\n                btnRestartSite.Enabled = true;\n            }\n        }\n\n        private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)\n        {\n            ((ManagerTreeNode)e.Node).HandleDoubleClick();\n            treeView1_AfterSelect(sender, new TreeViewEventArgs(e.Node));\n        }\n\n        private async void btnUpdate_Click(object sender, EventArgs e)\n        {\n            // Navigate to the Start Page which will display update information\n            treeView1.SelectedNode = StartPage;\n        }\n\n        private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)\n        {\n            ((ManagerTreeNode)e.Node).Expand(this);\n        }\n\n        private void actBrowse_Execute(object sender, EventArgs e)\n        {\n            ((ManagerTreeNode)treeView1.SelectedNode).Browse();\n        }\n\n        private void actEditPermissions_Execute(object sender, EventArgs e)\n        {\n            ((ManagerTreeNode)treeView1.SelectedNode).EditPermissions();\n        }\n\n        private void actExplore_Execute(object sender, EventArgs e)\n        {\n            ((ManagerTreeNode)treeView1.SelectedNode).Explore();\n        }\n\n        private void actCreateVirtualDirectory_Execute(object sender, EventArgs e)\n        {\n            var treeNode = (ManagerTreeNode)treeView1.SelectedNode;\n            treeNode.AddVirtualDirectory(cmsVirtualDirectory);\n            treeNode.ServerManager.CommitChanges();\n        }\n\n        private void btnRemoveVirtualDirectory_Click(object sender, EventArgs e)\n        {\n            var treeNode = (VirtualDirectoryTreeNode)treeView1.SelectedNode;\n            treeNode.VirtualDirectory.Application.VirtualDirectories.Remove(treeNode.VirtualDirectory);\n            treeNode.ServerManager.CommitChanges();\n            treeNode.Parent.Nodes.Remove(treeNode);\n        }\n\n        private void MainForm_Load(object sender, EventArgs e)\n        {\n            var key = Registry.CurrentUser.CreateSubKey(@\"Software\\LeXtudio\\JexusManager\");\n            if (key == null)\n            {\n                return;\n            }\n\n            var last = (string)key.GetValue(\"LastUpdateCheck\", string.Empty);\n            DateTime lastDate;\n            var valid = DateTime.TryParseExact(last, \"D\", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out lastDate);\n            if (!valid)\n            {\n                lastDate = DateTime.UtcNow.Date.Subtract(TimeSpan.FromDays(1));\n            }\n\n            var span = DateTime.UtcNow.Date.Subtract(lastDate);\n            if (span.TotalHours < 24)\n            {\n                return;\n            }\n\n            key.SetValue(\"LastUpdateCheck\", DateTime.UtcNow.Date.ToString(\"D\", CultureInfo.InvariantCulture));\n            btnUpdate.PerformClick();\n        }\n\n        private void btnOpenConfig_Click(object sender, EventArgs e)\n        {\n            var server = GetCurrentData(treeView1.SelectedNode);\n            if (server.IsBusy)\n            {\n                return;\n            }\n\n            if (server.Mode == WorkingMode.Iis || server.Mode == WorkingMode.IisExpress)\n            {\n                DialogHelper.BrowseFile(server.ServerManager.FileName);\n                return;\n            }\n        }\n\n        private void actRunAsAdmin_Execute(object sender, EventArgs e)\n        {\n            var info = new ProcessStartInfo\n            {\n                FileName = Path.ChangeExtension(Environment.CommandLine.Trim('\"'), \".exe\"),\n                Verb = \"runas\",\n                UseShellExecute = true\n            };\n            using var process = new Process\n            {\n                StartInfo = info\n            };\n            try\n            {\n                process.Start();\n                if (process.Id != 0)\n                {\n                    Close();\n                }\n            }\n            catch (Exception)\n            {\n\n            }\n        }\n\n        private void actBack_Execute(object sender, EventArgs e)\n        {\n            _navigationService.NavigateBack(1);\n        }\n\n        private void actForward_Execute(object sender, EventArgs e)\n        {\n            _navigationService.NavigateForward();\n        }\n\n        private void OnNavigationPerformed(object sender, NavigationEventArgs e)\n        {\n            actBack.Enabled = _navigationService.CanNavigateBack;\n            actForward.Enabled = _navigationService.CanNavigateForward;\n        }\n\n        /// <summary>\n        /// Selects the corresponding tree node for a given page, synchronizing the tree view with program navigation.\n        /// </summary>\n        /// <param name=\"page\">The page that is being displayed</param>\n        /// <param name=\"navigationData\">The data associated with the page (e.g., Application, Site, etc.)</param>\n        public void SelectNodeForPage(IModulePage page, object navigationData)\n        {\n            // TODO: doesn't really work. for Application Pools | View Applications, where the server node should be selected.\n            // Temporarily suspend the AfterSelect event to prevent duplicate loading\n            bool wasHandlingEvents = _handleEvents;\n            _handleEvents = false;\n\n            try\n            {\n                // Find the appropriate node based on page type and navigation data\n                TreeNode targetNode = FindNodeForPage(page, navigationData);\n                if (targetNode != null)\n                {\n                    // Expand parent nodes to make the target node visible\n                    EnsureNodeVisible(targetNode);\n\n                    // Select the node\n                    treeView1.SelectedNode = targetNode;\n                }\n            }\n            finally\n            {\n                // Restore event handling\n                _handleEvents = wasHandlingEvents;\n            }\n        }\n\n        /// <summary>\n        /// Makes sure a node is visible by expanding all its parent nodes.\n        /// </summary>\n        /// <param name=\"node\">The node to make visible</param>\n        private void EnsureNodeVisible(TreeNode node)\n        {\n            if (node == null)\n                return;\n\n            TreeNode parent = node.Parent;\n            while (parent != null)\n            {\n                parent.Expand();\n                parent = parent.Parent;\n            }\n        }\n\n        /// <summary>\n        /// Finds the tree node that corresponds to a specific page and navigation data.\n        /// </summary>\n        /// <param name=\"page\">The page being displayed</param>\n        /// <param name=\"navigationData\">The data associated with the page</returns>\n        private TreeNode FindNodeForPage(IModulePage page, object navigationData)\n        {\n            if (page == null || navigationData == null)\n                return null;\n\n            // Handle ApplicationsPage\n            if (page is ApplicationsPage && navigationData is Site site)\n            {\n                return FindSiteNode(site);\n            }\n            // Handle ApplicationPoolsPage\n            else if (page is ApplicationPoolsPage)\n            {\n                return FindAppPoolsNode();\n            }\n            // Handle VirtualDirectoriesPage\n            else if (page is VirtualDirectoriesPage && navigationData is Application application)\n            {\n                // First find the application node\n                TreeNode appNode = FindApplicationNode(application);\n                if (appNode != null)\n                {\n                    // Then find the virtual directories node under it\n                    foreach (TreeNode node in appNode.Nodes)\n                    {\n                        if (node.Text == \"Virtual Directories\")\n                        {\n                            return node;\n                        }\n                    }\n                }\n                return appNode; // Fall back to application node if virtual directories node not found\n            }\n            // Handle SitesPage\n            else if (page is SitesPage)\n            {\n                return FindSitesNode();\n            }\n\n            return null;\n        }\n\n        /// <summary>\n        /// Finds the \"Sites\" node under the active server.\n        /// </summary>\n        private TreeNode FindSitesNode()\n        {\n            // Look for the currently selected server node\n            foreach (TreeNode serverNode in treeView1.Nodes)\n            {\n                if (serverNode is ServerTreeNode)\n                {\n                    // Find the Sites node under the server\n                    foreach (TreeNode node in serverNode.Nodes)\n                    {\n                        if (node is SitesTreeNode)\n                        {\n                            return node;\n                        }\n                    }\n                }\n            }\n            return null;\n        }\n\n        /// <summary>\n        /// Finds the \"Application Pools\" node under the active server.\n        /// </summary>\n        private TreeNode FindAppPoolsNode()\n        {\n            // Look for the currently selected server node\n            foreach (TreeNode serverNode in treeView1.Nodes)\n            {\n                if (serverNode is ServerTreeNode)\n                {\n                    // Find the Application Pools node under the server\n                    foreach (TreeNode node in serverNode.Nodes)\n                    {\n                        if (node is ApplicationPoolsTreeNode)\n                        {\n                            return node;\n                        }\n                    }\n                }\n            }\n            return null;\n        }\n\n        /// <summary>\n        /// Finds the node for a specific site.\n        /// </summary>\n        /// <param name=\"site\">The site to find in the tree</param>\n        private TreeNode FindSiteNode(Site site)\n        {\n            if (site == null)\n                return null;\n\n            // Look through all server nodes\n            foreach (TreeNode serverNode in treeView1.Nodes)\n            {\n                if (serverNode is ServerTreeNode)\n                {\n                    // Find the sites node\n                    foreach (TreeNode sitesNode in serverNode.Nodes)\n                    {\n                        if (sitesNode is SitesTreeNode)\n                        {\n                            // Look through all site nodes\n                            foreach (TreeNode siteNode in sitesNode.Nodes)\n                            {\n                                if (siteNode is SiteTreeNode && ((SiteTreeNode)siteNode).Site.Id == site.Id)\n                                {\n                                    return siteNode;\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            return null;\n        }\n\n        /// <summary>\n        /// Finds the node for a specific application.\n        /// </summary>\n        /// <param name=\"application\">The application to find in the tree</param>\n        private TreeNode FindApplicationNode(Application application)\n        {\n            if (application == null)\n                return null;\n\n            // First find the site node\n            TreeNode siteNode = FindSiteNode(application.Site);\n            if (siteNode == null)\n                return null;\n\n            // Expand to make sure the application nodes are loaded\n            siteNode.Expand();\n\n            // Look for the application node by path\n            foreach (TreeNode node in siteNode.Nodes)\n            {\n                if (node is ApplicationTreeNode applicationNode &&\n                    applicationNode.Application.Path == application.Path)\n                {\n                    return node;\n                }\n            }\n\n            return null;\n        }\n\n        /// <summary>\n        /// Enhanced LoadPage method that also synchronizes the tree view selection.\n        /// </summary>\n        /// <param name=\"page\">The page to load</param>\n        public void LoadPageAndSelectNode(IModulePage page, object navigationData)\n        {\n            // First load the page\n            LoadPage(page);\n\n            // Then select the corresponding node in the tree view\n            SelectNodeForPage(page, navigationData);\n        }\n\n        private void TsbPath_ItemClicked(object sender, BreadcrumbItemClickedEventArgs e)\n        {\n            var item = e.Item;\n            var node = item.Tag as ManagerTreeNode;\n            if (node == null)\n            {\n                return;\n            }\n\n            _fromBreadcrumb = true;\n            treeView1.SelectedNode = node;\n        }\n\n        public void EndProgress()\n        {\n            pbStatus.Visible = false;\n        }\n\n        public void BeginProgress()\n        {\n            pbStatus.Visible = true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/MainForm.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>686, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1027, 17</value>\n  </metadata>\n  <metadata name=\"actionList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1132, 17</value>\n  </metadata>\n  <metadata name=\"actDisconnect.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1243, 17</value>\n  </metadata>\n  <metadata name=\"actUp.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1372, 17</value>\n  </metadata>\n  <metadata name=\"actConnectServer.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1457, 17</value>\n  </metadata>\n  <metadata name=\"actConnectSite.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1604, 17</value>\n  </metadata>\n  <metadata name=\"actConnectionApplication.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1738, 17</value>\n  </metadata>\n  <metadata name=\"actSave.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1931, 17</value>\n  </metadata>\n  <metadata name=\"actCreateSite.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>2025, 17</value>\n  </metadata>\n  <metadata name=\"actCreateApplication.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 54</value>\n  </metadata>\n  <metadata name=\"actCreateVirtualDirectory.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>858, 54</value>\n  </metadata>\n  <metadata name=\"actExplore.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1044, 54</value>\n  </metadata>\n  <metadata name=\"actEditPermissions.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1152, 54</value>\n  </metadata>\n  <metadata name=\"actBrowse.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1537, 54</value>\n  </metadata>\n  <metadata name=\"actRunAsAdmin.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1645, 54</value>\n  </metadata>\n  <metadata name=\"actBack.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"actForward.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>112, 17</value>\n  </metadata>\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>240</value>\n  </metadata>\n  <metadata name=\"statusStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>797, 17</value>\n  </metadata>\n  <metadata name=\"menuStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>912, 17</value>\n  </metadata>\n  <metadata name=\"tsTop.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1785, 54</value>\n  </metadata>\n  <metadata name=\"cmsServer.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>225, 17</value>\n  </metadata>\n  <metadata name=\"cmsApplicationPools.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>333, 17</value>\n  </metadata>\n  <metadata name=\"cmsSites.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>499, 17</value>\n  </metadata>\n  <metadata name=\"cmsSite.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1305, 54</value>\n  </metadata>\n  <metadata name=\"cmsIis.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>599, 17</value>\n  </metadata>\n  <metadata name=\"cmsApplication.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>1400, 54</value>\n  </metadata>\n  <metadata name=\"cmsServers.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>420, 54</value>\n  </metadata>\n  <metadata name=\"cmsVirtualDirectory.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>533, 54</value>\n  </metadata>\n  <metadata name=\"cmsPhysicalDirectory.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>691, 54</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Program.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Microsoft.Win32;\n\nnamespace JexusManager\n{\n    using JexusManager.Dialogs;\n    using Microsoft.Extensions.DependencyInjection;\n    using Microsoft.Extensions.Logging;\n    using Mono.Options;\n    using System;\n    using System.Collections.Generic;\n    using System.Drawing;\n    using System.IO;\n    using System.Runtime.InteropServices;\n    using System.Windows.Forms;\n\n    internal static class Program\n    {\n        public static IServiceProvider ServiceProvider { get; private set; }\n\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        private static void Main(string[] args)\n        {\n            var help = false;\n            var jexus = false;\n            OptionSet p =\n                new OptionSet()\n                    .Add(\"h|help|?\", \"Display help\", delegate (string v) { if (v != null) help = true; })\n                    .Add(\"j|jexus\", \"Enable Jexus web server support\", delegate (string v) { if (v != null) jexus = true; });\n\n            List<string> extra;\n            try\n            {\n                extra = p.Parse(args);\n            }\n            catch (OptionException)\n            {\n                ShowHelp(p);\n                return;\n            }\n\n            if (help)\n            {\n                ShowHelp(p);\n                return;\n            }\n\n            Microsoft.Web.Administration.JexusServerManager.Enabled = jexus;\n\n            // UI initialization\n            ApplicationConfiguration.Initialize();\n            var textBox = new RichTextBox\n            {\n                Multiline = true,\n                ReadOnly = true,\n                Dock = DockStyle.Fill,\n                ScrollBars = RichTextBoxScrollBars.Vertical,\n                Font = new Font(\"Consolas\", 9),\n                BackColor = Color.Black,\n                ForeColor = Color.LightGray\n            };\n\n            var provider = new TextBoxLoggerProvider(textBox);\n            var services = new ServiceCollection();\n            services.AddLogging(builder =>\n            {\n                builder.AddProvider(provider);\n                builder.SetMinimumLevel(LogLevel.Trace); // Set minimum logging level to Trace\n            });\n\n            ServiceProvider = services.BuildServiceProvider();\n\n            var loggerFactory = ServiceProvider.GetRequiredService<ILoggerFactory>();\n            LogHelper.Initialize(loggerFactory);\n\n            Application.Run(new MainForm(extra, textBox));\n        }\n\n        private static void ShowHelp(OptionSet optionSet)\n        {\n            var textWriter = new StringWriter();\n            textWriter.WriteLine(\"Jexus Manager is available at https://www.jexusmanager.com\");\n            textWriter.WriteLine(\"JexusManager.exe [Options] [file name] [file name]\");\n            textWriter.WriteLine(\"Options:\");\n            optionSet.WriteOptionDescriptions(textWriter);\n\n            MessageBox.Show(textWriter.ToString(), \"Jexus Manager\", MessageBoxButtons.OK, MessageBoxIcon.Information);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"Management Console for Jexus web server/IIS Express/IIS.\")]\n[assembly: AssemblyCopyright(\"Copyright (C) Lex Li 2014-2022. All rights reserved.\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"3ea9b8b4-3e15-4f86-a4b2-1108084000c9\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Main.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _1_0_release {\n            get {\n                object obj = ResourceManager.GetObject(\"1.0-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _1_1_release {\n            get {\n                object obj = ResourceManager.GetObject(\"1.1-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _2_0_release {\n            get {\n                object obj = ResourceManager.GetObject(\"2.0-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _2_1_release {\n            get {\n                object obj = ResourceManager.GetObject(\"2.1-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _2_2_release {\n            get {\n                object obj = ResourceManager.GetObject(\"2.2-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _3_0_release {\n            get {\n                object obj = ResourceManager.GetObject(\"3.0-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _3_1_release {\n            get {\n                object obj = ResourceManager.GetObject(\"3.1-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _5_0_release {\n            get {\n                object obj = ResourceManager.GetObject(\"5.0-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _6_0_release {\n            get {\n                object obj = ResourceManager.GetObject(\"6.0-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] _7_0_release {\n            get {\n                object obj = ResourceManager.GetObject(\"7.0-release\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap application_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"application_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap application_new_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"application_new_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap application_pool_new_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"application_pool_new_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap application_pools_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"application_pools_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap application_pools_stopped_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"application_pools_stopped_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap back_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"back_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap basic_settings_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"basic_settings_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap browse_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"browse_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap certificates_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"certificates_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap connect_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"connect_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap disconnected_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"disconnected_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap explore_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"explore_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap farm_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"farm_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap farm_disabled_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"farm_disabled_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap farm_server_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"farm_server_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap forward_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"forward_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap help_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"help_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Icon similar to (Icon).\n        /// </summary>\n        internal static System.Drawing.Icon iis {\n            get {\n                object obj = ResourceManager.GetObject(\"iis\", resourceCulture);\n                return ((System.Drawing.Icon)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap iis_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"iis_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap info_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"info_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap physical_directory_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"physical_directory_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap refresh_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"refresh_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Byte[].\n        /// </summary>\n        internal static byte[] releases_index {\n            get {\n                object obj = ResourceManager.GetObject(\"releases_index\", resourceCulture);\n                return ((byte[])(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap restart_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"restart_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap save_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"save_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap server_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"server_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap server_disabled_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"server_disabled_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap servers_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"servers_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap site_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"site_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap site_new_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"site_new_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap site_stopped_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"site_stopped_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap sites_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"sites_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap start_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"start_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap stop_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"stop_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap switch_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"switch_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap title_48 {\n            get {\n                object obj = ResourceManager.GetObject(\"title_48\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap up_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"up_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap update_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"update_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap virtual_directory_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"virtual_directory_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap virtual_directory_new_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"virtual_directory_new_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap warning_32 {\n            get {\n                object obj = ResourceManager.GetObject(\"warning_32\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"back_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\back_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"forward_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\forward_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"save_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\save_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"explore_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\explore_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"basic_settings_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\basic_settings_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"servers_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\servers_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"iis_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\iis_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"info_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\info_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"virtual_directory_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\virtual_directory_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"start_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\start_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"application_new_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\application_new_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"help_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\help_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"application_pools_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\application_pools_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"site_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\site_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"connect_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\connect_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"refresh_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\refresh_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"up_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\up_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"virtual_directory_new_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\virtual_directory_new_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"site_new_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\site_new_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"site_stopped_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\site_stopped_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"switch_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\switch_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"stop_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\stop_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"browse_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\browse_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"farm_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\farm_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"application_pools_stopped_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\application_pools_stopped_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"restart_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\restart_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"warning_32\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\warning_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"disconnected_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\disconnected_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"iis\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\iis.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"update_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\update_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"application_pool_new_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\application_pool_new_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"farm_server_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\farm_server_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"sites_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\sites_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"physical_directory_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\physical_directory_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"title_48\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\title_48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"application_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\application_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"server_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\server_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"certificates_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\certificates_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"farm_disabled_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\farm_disabled_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"server_disabled_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\server_disabled_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"releases_index\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\releases-index.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"1.0-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\1.0-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"1.1-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\1.1-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"2.0-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\2.0-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"2.1-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\2.1-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"2.2-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\2.2-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"3.0-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\3.0-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"3.1-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\3.1-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"5.0-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\5.0-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"6.0-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\6.0-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"7.0-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\7.0-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"8.0-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\8.0-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"9.0-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\9.0-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n  <data name=\"10.0-release\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\10.0-release.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </data>\n</root>\n"
  },
  {
    "path": "JexusManager/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Main.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"16.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "JexusManager/Resources/1.0-release.json",
    "content": "{\n  \"channel-version\": \"1.0\",\n  \"latest-release\": \"1.0.16\",\n  \"latest-release-date\": \"2019-05-14\",\n  \"latest-runtime\": \"1.0.16\",\n  \"latest-sdk\": \"1.1.14\",\n  \"release-type\": \"lts\",\n  \"support-phase\": \"eol\",\n  \"eol-date\": \"2019-06-27\",\n  \"lifecycle-policy\": \"https://dotnet.microsoft.com/platform/support/policy/\",\n  \"releases\": [\n    {\n      \"release-date\": \"2019-05-14\",\n      \"release-version\": \"1.0.16\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0820\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0820\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0980\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0980\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0981\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0981\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.16/1.0.16.md\",\n      \"runtime\": {\n        \"version\": \"1.0.16\",\n        \"version-display\": \"1.0.16\",\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-centos-x64.1.0.16.tar.gz\",\n            \"hash\": \"7B10D3194BBD1B390079D82DEC3117D0F0BFBA409257561CE0B10649C8153D70E0512B5A1982A459A2D0194B57056F139D5B839595EBAB7EDE873E69943151CE\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-osx-x64.1.0.16.pkg\",\n            \"hash\": \"9A8122AA3841567F33F7B779006FE20BA5F55FAD9FE1783255EC478B924FA51461A7E9B4A75617B598889676A0A7A8AEF4693366C3194AC609BADA0206231CFC\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-osx-x64.1.0.16.tar.gz\",\n            \"hash\": \"D20FA12F57049857F238BCA72A934F0BF016A8C09ABE4B7180F3FC832AFF5FB37FEE3D6556F279701AFCC2A81B855A5B52B1A1F2B9B711CEE3A3C5FC88B780A2\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-rhel-x64.1.0.16.tar.gz\",\n            \"hash\": \"5881EC7AA1C330DF97A30F9529E328AA1D1469D9CA100C57A8AF4CF921D19FA1067DF8D01DF1C6A194883E3F2C558A09D39AEF8553C5053CEB6BF7413BE72C0E\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-ubuntu-x64.1.0.16.tar.gz\",\n            \"hash\": \"366E08B5CBC6A3B4EE692244F23C3240A5FFF1B8CA9F560F2FAED0B0720DDD14002D29796D12FBD7E6059880DFA602DC268F97968206837A5A233C85C308F408\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-ubuntu.16.04-x64.1.0.16.tar.gz\",\n            \"hash\": \"35C2692009B44E66CBE45160303F42E6EF99C847A8509224E2FF3831562919C4FCAFEF812482CED119DBFBCA2714239D182F49349607EB15B0A0DAB2CDF8D0BE\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-win-x64.1.0.16.exe\",\n            \"hash\": \"52ED2BEE70861566E1D088D477578E0A0E00AD891D18B0480266D8C07BA9CFEFCDE3971FE5921047F0A788410B5AC33AE98CD345459C2ABD1A02BB49CE8D0D78\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-win-x64.1.0.16.zip\",\n            \"hash\": \"41A3B13835DA8847C68B5FC6F4A66048E21DD89C62CDF0570F3B71B2FDC823C6CC49AAF44F0877063AF536A5D9FFE3B8DCC68B355F28BBEB0989A9EE12D69A31\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-win-x86.1.0.16.exe\",\n            \"hash\": \"BF3BDDAB42470A09C577BB2C789648F6CFF7EBC6A6D2CC9DA1C4C799A00CA58F9FCD2817AE46978191DC7CB399D313F9F82DC056AC3F0A5C344283B1E8023DDE\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.16/dotnet-win-x86.1.0.16.zip\",\n            \"hash\": \"79FE2F0FA166B4B53EAB4A108099A7EBC25A62546B5F698FA6BD5BAF126804B2E2E5FD4A6EBDE7C9589D489381C8F38CB7AEAE0E8835B4ADD58BCC2C07FD222E\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.14\",\n        \"version-display\": \"1.1.14\",\n        \"runtime-version\": \"1.0.16\",\n        \"vs-version\": \"15.0\",\n        \"vs-support\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-centos-x64.1.1.14.tar.gz\",\n            \"hash\": \"B78EF84B282BC9CF1F66745943A3B9D45C4E0DA84259FEDE386A1991343B9BE7B1B5BD2A4FB1018C84AE1A2037F21A0BA0FDDF6E5AFFF9F02CC0AE179557FEEC\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian.9-x64.tar.gz\",\n            \"rid\": \"debian.9-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-debian.9-x64.1.1.14.tar.gz\",\n            \"hash\": \"E36AA4B278B936E1E2989B5E556F4EC3AEF2CB1EBB5ABD1BD6011D511873FC3E72101D035CF4DAF1563C7A3C43C193863D38CBF24288D375DD143AB42AFAE524\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-fedora.27-x64.1.1.14.tar.gz\",\n            \"hash\": \"D97E6B90613739D35A7BF65E24131EACE18E128A39086BAC8B584A7A136666E7B438BE8B0DDD3E556E03493ACD7C30C767FB266D5D0DE6ADAB47DC3F72BA39EC\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-fedora.28-x64.1.1.14.tar.gz\",\n            \"hash\": \"A21D21DEC80E6466E5759D2F99F980819D080C14D0D3689A30120BC4B1A1B7742F501BCEBEAE4BBF37F3FB8ED106E7EC432C266E12151624F5308D8E01DEE7EB\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-opensuse.42.3-x64.1.1.14.tar.gz\",\n            \"hash\": \"AD14E5F34558E2D115D04A34DBC40993235B1AE2B12CD9920699E7A2C99E055E8C1034FC59C61F854F854E1E9E9FD8C34D607F83950D958E64DA7598B6E63304\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-osx-x64.1.1.14.pkg\",\n            \"hash\": \"E480147757671032D0BDA34C749B98173818C90CA9DA5E2CA7078F5DD9F28194518C7E7209FB1144EF934E3B18BEAD31A3E16830FB70BE9DE4FB292F81842BE0\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-osx-x64.1.1.14.tar.gz\",\n            \"hash\": \"460D8188CD4C5825904A0B3EAC5E326C115E43829D9912A118102D02708712E3F83820E9BEA9FFEA997FD7680A40DA570894729F0D3828723FF054043047878B\"\n          },\n          {\n            \"name\": \"dotnet-dev-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-rhel-x64.1.1.14.tar.gz\",\n            \"hash\": \"9CC8A8020DCEFB5270CC1A69C340CAB70D7699489BCB87DE27A917A391C6EAFFB2DF27BE827E028EB8F980022643969E0839789F5C8DDF404F37E951264E95CD\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-ubuntu-x64.1.1.14.tar.gz\",\n            \"hash\": \"49A5C90AFE895C2929078E9D57E1ECDFB66629EA59555B44804AC4FE4130672EDDF776395FA6039BFB9D6B009CA625A5A695496C569EFBF441EBFC9B422F1CA4\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-ubuntu.16.04-x64.1.1.14.tar.gz\",\n            \"hash\": \"9B993DD05952C2DE38420293C4376C9A2D8430D5DEB37283344E3B0B807DA588C45AC48FC6AC3A0A8110DCD175CD5344C696644B94CABBCC55849E553887F170\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-ubuntu.18.04-x64.1.1.14.tar.gz\",\n            \"hash\": \"70A6B710366079C654CE0B82BEF93743D0271D4739D0B1547D110BA079A3F2E2FBDDBB6EC5345DF593F6B1E6485F1D5A6CFA3064BF312245B67507434E8D5D0B\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-win-x64.1.1.14.exe\",\n            \"hash\": \"1E98A41FA12E511F8AE0A6AD7712203E985836F9C3A835F9508616EEBD8F87BE21667543010761F64B4B81A68B55B63A6449EB855BF1053C4821997EF801BFE4\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-win-x64.1.1.14.zip\",\n            \"hash\": \"5578EA5C81C678D703309192423AF4824EBF896D781E0B6295327C9234ED1AD482EAE1C586EDE8924EA67C86B6E701E7F94FED51ED4C79E28E0FE5D43E8C4CE7\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-win-x86.1.1.14.exe\",\n            \"hash\": \"65907FBA96322EF1091DA6C4FEC5541E1BF4709499B87EC4DA9489EDB9D1FFC463EC43D7551879D3FF0B2D98CE8959EC4C018CF06B91D465F9A5A10D2CEF5F0B\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-win-x86.1.1.14.zip\",\n            \"hash\": \"BBD9506FF8361C82DB64955DFD21E206C02C46966F89D7232B25818E1961EE6FC3696F76945523CB243AB175D1CBF6EA82986CDBFD88D86A0D495396CD231449\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.0.16\",\n        \"version-display\": \"1.0.16\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"DotNetCore_1.1.13-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/aa5a90a5-4fc3-4198-8bcf-881c6d7e500d/c0d3855628d650f67ad1131c2e43fa9f/dotnetcore.1.0.16_1.1.13-windowshosting.exe\",\n            \"hash\": \"65D4C438D99419B5661D759536645EF7F81AB5F21820658DD13E201CB74F12044DC888C0AC5B90A5BB7D1C8A9AB6AD7D13A5DB210D6AC7D18C53BDB3D7C05E5E\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"1.0.16\",\n        \"files\": [\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/de24857a-e53c-403b-891d-66ab513496e9/dc7a06c174966c71ab93c2595fa84890/core-setup-1.0.16-symbols.zip\",\n            \"hash\": \"0D61A32845715BCF13A9CF55794DC055E28B1D198A6ED55F1297B25BEEB44EE5C342E3C00A518DDBC3ED26A29A9B68CE9BABC0549CC2745E0BD61671B0C13EBB\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d01ea2b6-2b9a-42d8-9eb9-4659e6849d53/d832ab4eb94a6c2f596c44d4c1e78a6d/coreclr-1.0.16-symbols.zip\",\n            \"hash\": \"4B56FFCB3AB5933AB61BCE4FDF491EF432683CFAFF8EA58043D8CE14AC3A90B86F41E8CA9D2B3F1090D56BD649BBD8BAECD16DFCE47B9F9BBE88B36334C27400\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/79a3d837-f7dd-467f-a745-338ba0eaf5da/5e22bd1609af3e37f59ccd41d324260c/corefx-1.0.16-symbols.zip\",\n            \"hash\": \"429364AD1A93AAEE1A647DFA9CDE3352D8670361B7615FEB57137D55F656E7DDEACB9FF9B9988A0FBB8891052ABB2A5FB7BAA70D5E455BB2FBEF83CBAB5A2BC8\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-03-12\",\n      \"release-version\": \"1.0.15\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0757\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0757\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.15/1.0.15.md\",\n      \"runtime\": {\n        \"version\": \"1.0.15\",\n        \"version-display\": \"1.0.15\",\n        \"vs-version\": \"15.0.22\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-centos-x64.1.0.15.tar.gz\",\n            \"hash\": \"0A00EC0016DEF34B66183A55D6000A2639703A3493B34CFE230AA922278E648657E62C4FBC3851A43A9662A720A57E5BD43C2A19FE103B5A58083AE8FB4025CA\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-osx-x64.1.0.15.pkg\",\n            \"hash\": \"4C8BDD17074EF3896482A2466F6471DBCF40BD268B6EACD2F22DD33C0C888FCEA217EAEA575B7DD3CEFE8B3550E034DAD9AA34928E2CB56BA4089E5244E472A9\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-osx-x64.1.0.15.tar.gz\",\n            \"hash\": \"9D5B8E4D3AE7D51D38C99777548463677B5C7B1D0DD37405822EE0F868584FD0B8AA1E2FD1AC6AAF68238B123DFFB2FFDD4987995A4EABCBFEE743996A905485\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-rhel-x64.1.0.15.tar.gz\",\n            \"hash\": \"1165DB441F1A0F272246DFCE92147543C106454C274C91BEF5C961FB80488E14405AE6D23E925876316867001E821A17B38C298D35FD206537E4E1DB14CA0C37\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-ubuntu-x64.1.0.15.tar.gz\",\n            \"hash\": \"561F4B47EE509BA4E2A2483E33F0A765846DC5982062D81608B2D6756F99E8401157A276EDD610DA746183AF819D7321C1B1C1ECC8189284F542703EED82EB53\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-ubuntu.16.04-x64.1.0.15.tar.gz\",\n            \"hash\": \"0E0675C30FE0C4A5D9AB4291EB8508C6A9F887E1E21EEC35E3A78730B98F4B237E08A8319D464CA456241B514FF9D0CC30DB096178973910976F4DA6892B6E99\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-win-x64.1.0.15.exe\",\n            \"hash\": \"214A9912B1BA267315714DA9DB2C88E622907E72CEE8557AA9388FE43E2744B96B31ECB98088100F029EF12C2AF3D867CECDE08CFB84F555AFAA84334DCDAFDC\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-win-x64.1.0.15.zip\",\n            \"hash\": \"A523635F2DDCDE559ADB9096A28EF5723E8B61C83EFC28883D290CA0F188A8870EE2255CFFF8EEAD1A4E9DC9DEF0BC8A90100C3B8DA926E5AAEF7A8BA3BEF678\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-win-x86.1.0.15.exe\",\n            \"hash\": \"4ABC485EF5623524036D1F42504804BA89A2C5E7A3CD2CCCB134B4956971F23BDAAD5C0C2156420E171B273195E290FAB300B3D89C43B2137EA121D0AF6619FA\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.15/dotnet-win-x86.1.0.15.zip\",\n            \"hash\": \"39E278BE3724463E76DB7919168B9A6E991EA8D3C6D37276E656625A1EE08658658B9C5447D274D53A04D8D48ADAE457CEF784738A3D57D6C2902DC9707332B4\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.13\",\n        \"version-display\": \"1.1.13\",\n        \"runtime-version\": \"1.0.15\",\n        \"vs-version\": \"15.0.22\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-centos-x64.1.1.13.tar.gz\",\n            \"hash\": \"222B86C1A162EBF400042A36D6F7D72B934FD61170A8FB1D20016D5B9252CAD6FA0A97F5036060A5A5CDB6138F043239753904D2A8BB395AA94A4A9430EE45B0\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-fedora.27-x64.1.1.13.tar.gz\",\n            \"hash\": \"83A6E71F446C22B5A1238A1F45C51E95AC746079F5B933F2A12891470733D9DE9298D001186705902D3A6C13FA8AD6497E372CDCF8F7A927F693977E25E721CF\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-fedora.28-x64.1.1.13.tar.gz\",\n            \"hash\": \"083008FD1828CFFC32CE47F0D0310F06C8A0B2564B4C4C28CF01A2AC3BE98E874E33F5E337A2DFCD0460D991F7F99F7D5173DB612B909F0D3F364D2B69BC09BB\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-opensuse.42.3-x64.1.1.13.tar.gz\",\n            \"hash\": \"659095919C5013D8491CDEBC6704F5851EC4276E9C6FE90CB657F1C212546D8B93F25DC012660B0FC46C3C82C28CFD60C1FBA53E4F9A5DFA68663F66D820D1E8\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-osx-x64.1.1.13.pkg\",\n            \"hash\": \"7C66AA51D95195D1095259EA66A568D1D318B44E850120A8F0883795790DBFF1ED8A621B3262019697FF55779F8897590034A968956885ABB5224A04C7561326\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-osx-x64.1.1.13.tar.gz\",\n            \"hash\": \"5D0564E3B6E98C0FB394F6C0D1792B73F2E18C47ECFBB8E799DBBB18693695F763772A197447B41934627E909D4C3ABBEFA7C6DEB0E7BEE2BFE43BA6AFBB852A\"\n          },\n          {\n            \"name\": \"dotnet-dev-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-rhel-x64.1.1.13.tar.gz\",\n            \"hash\": \"9FE0323C059621BB98678031B4E49AB439A7B220EAF31D13C1B67ADAD195A597A4283BF0A08AA60231AAC16C44A9A6918350969E427FBAEBAA5C31526FF218A2\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-ubuntu-x64.1.1.13.tar.gz\",\n            \"hash\": \"FD1B77682713298299CF7EADF400FA315AB0E3DEE297E94DB942377D44275681B1906CA3D87651E76D15B6ADDC176E9CAD8C023A627F366EFF06265D5BEE8A2D\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-ubuntu.16.04-x64.1.1.13.tar.gz\",\n            \"hash\": \"E7A44F4A328289ADFB171F3F3CE47914661669023D86865FC0BA41FF707644C5504CB378D4E5E758CF89134404A56359FB06DD5C966CBF0EBCE50FB41D950099\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-ubuntu.18.04-x64.1.1.13.tar.gz\",\n            \"hash\": \"DD6548EA7E6E390B264EA3DF17BB201CEF4CAC53A5E24B20823DC20B775CEE3EE642153B482FEBE8F8B33CDEF3F53B52AC19B58208E343D1F8912ADB00031A5D\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-win-x64.1.1.13.exe\",\n            \"hash\": \"130A2DC3815696CD94542EBB4EBE2504EA9DBF6E03AF0416E8855B7C436396ED25E630C6FA8E2B688397A6203BF883E8AF5215E0200445C6D8346E6313397357\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-win-x64.1.1.13.zip\",\n            \"hash\": \"360887A17C657C21F93D65FECAC6E19C6294C285C8199A29BAC1DE1C22AD42427B0B557FA19E175B2E5289F8C0AFC7A68A0771ADADBE9EDE6F941B093B056458\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-win-x86.1.1.13.exe\",\n            \"hash\": \"163367B5B3289ABF63A99C549509FAA016C10DEDF2F3DB4FB6534879B4489BB8041BDDDD6CABE6FEF04C7D424A4F83149639C0602B4A0DC93008C5CE60B1D92B\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-win-x86.1.1.13.zip\",\n            \"hash\": \"C51BE9D28965BD7BFC3125F35AB84BB7653807327A1ECBA522C9967ABC8CFE8126B7DCF60C59D8FA5951752411F2346EA9DF6D855ACF19D1ABD037C37E7A36C0\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.0.15\",\n        \"version-display\": \"1.0.15\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"DotNetCore_1.1.12-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b3978c43-8056-41f9-b567-4c8a450c71d7/d8f94aab409f0ae6f9d2a6519fe14343/dotnetcore.1.0.15_1.1.12-windowshosting.exe\",\n            \"hash\": \"8E8353B4BA51F62AF7866D166E6A1BD1C3B99B0FE71EEC79B4F10CC3EFFC1B78EB0341F431CE4D5A9F0BD87DD9A94EAEFFC0BDD8D78C700473A7FC111C12013B\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"1.0.15\",\n        \"files\": [\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/04de3bc1-f47a-44fd-a169-9fad4800a953/b450e3b38fbbbbd81baf90bc4cce1653/core-setup-1.0.15-symbols.zip\",\n            \"hash\": \"08FD2CEC569749EB468636EEE240A69B3FFB7D8FAA69683E79B0F7B42638E31E3D6BCF346A2968EB42D66DDE9617DD057F5D4CD3E7ABCDD5E3A205851CA7E60A\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b9586cd9-3158-4451-948c-1ab7388eacc4/5ce90f836e672be5afe27544c767ee48/coreclr-1.0.15-symbols.zip\",\n            \"hash\": \"CEDFABC6C8BBB23ABC843E9CA12F6DD25D43721BCF6BE28C91C87CCD0A4F5923100F2902E07242C89DD8999BAE7C347B5A3BDE428F1ECFEA0532AE8066FDD4E3\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4e2a655f-b467-4c7b-8357-81efba877c99/3c9175fff6edf9d6e6c0334bcd42fee2/corefx-1.0.15-symbols.zip\",\n            \"hash\": \"D9CC1D25B6E35A020A9B95A0282C2829368CB7BF686ED978C76503014B1422A02C3CB11BC5A15C803011FA0395517AAAC93A2DDDF3C6552EC7CD6C3AFA6F9C99\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-02-12\",\n      \"release-version\": \"1.0.14\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0657\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0657\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.14/1.0.14.md\",\n      \"runtime\": {\n        \"version\": \"1.0.14\",\n        \"version-display\": \"1.0.14\",\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-centos-x64.1.0.14.tar.gz\",\n            \"hash\": \"74D3CFE9087358648C542E9F3E187803AF49864BC976B372550417B7B491430C3E1FDF3373D1EF916E786473E75B3083462B6ED31BA0918B85EBEC7A848649D2\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-debian-x64.1.0.14.tar.gz\",\n            \"hash\": \"697853421EA93FFCF497FDA649FDFC1C1BA82F657FDB84D5A17AE66E92CD5DABFF3C0B2B17FD411B829F8B4138418CD1E49836C0E07E2A9CAE7641AB86F60B4F\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-osx-x64.1.0.14.pkg\",\n            \"hash\": \"F1E36183D5BF963D32265D43440E7A0EA8DF5431F7C66AE1E05C1F08A0C50101C4AB8AC0B1038E8A92CB3F2BF375091F1BD6CA516099F3B61473A79A7F2437C5\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-osx-x64.1.0.14.tar.gz\",\n            \"hash\": \"9FA7DD826320C77A7B1CA115BCE11EAA82B41F2A7AF0148B0C882C4F239577F142A4C3BB6CA1153E48146BFF4A6921008F47F764E52DDB0CD0C9288A773E6952\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-rhel-x64.1.0.14.tar.gz\",\n            \"hash\": \"9F4D43C665632873D92255C2845E3BFC70B5B27511004ED9741A47DA3DBD8BD650E155E5AF3C5380A6CCCC8A565698770F1075B5513CB1D58C2E66BEF87C900C\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-ubuntu-x64.1.0.14.tar.gz\",\n            \"hash\": \"35BFF3E8C545F61B8C62E77853CEB8458AB70DFECE033DCE9AB7488887A6DD3A68F2DDE05A0EC9EBFE87C165AE2C630D3708D6DE068C2DD828F5014E8BD70EE9\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-ubuntu.16.04-x64.1.0.14.tar.gz\",\n            \"hash\": \"0F237D495B500C230FF79F9E950AA5CFE88A00C8B0722F78A7BB710AC149EBA9D2B60214C2DCD7CF583AAEBE3104FFF06BB1CD60F8AD8F99BC2685EBA4108BCE\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-win-x64.1.0.14.exe\",\n            \"hash\": \"AC5E91500FE119213CA7998821B925C55232A8F435AF3A44B05C681BCF95D3E782CB1D79F931065E5FD0B3E82273353A13FFE2BEEFA6AE871DC7DF7CDD832063\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-win-x64.1.0.14.zip\",\n            \"hash\": \"481D89B3BC26205F18D8797950474D72AD9841E4D7E2595277500A32943F58A7E18D839B20294091B7F0F7C5824CB850514626D67647F94A25D173FB49759EE0\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-win-x86.1.0.14.exe\",\n            \"hash\": \"5F00CB1FE2D2CC04CAFADE6975819D9C4B572B7549DFBAE1745FDE86DA061656B3430FEB786DCEDE0E02600E963793A669D2847A004FD408F011CDE2A45315D4\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.14/dotnet-win-x86.1.0.14.zip\",\n            \"hash\": \"77F09E9D5232E4D36D5B2A416E2477A853AAF2A0236C45C3274BEA885189D1862D95E5F3F759E9738F03BBECE65D8C6B82D1DB889FE87FC30E544E29470112DA\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.12\",\n        \"version-display\": \"1.1.12\",\n        \"runtime-version\": \"1.0.14\",\n        \"vs-version\": \"15.0\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-centos-x64.1.1.12.tar.gz\",\n            \"hash\": \"3D390AF23218B8FA2B8487BDDF7C0BF8C2F89E110BA09B44B05A31EA269FEB2B56AA17686B3367134F85CFB453CBB9B053741CADB88AB65BFE0BA52A51DD596F\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-debian-x64.1.1.12.tar.gz\",\n            \"hash\": \"C74A4DE40F6B5CFFF5D30E4348C08CDCAAAF5D374804C20BC8572070F362755A030E79029A7B034AA795486220AA76BE6BA7F46BE4B4973ED54D62E9F01DCB41\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-fedora.27-x64.1.1.12.tar.gz\",\n            \"hash\": \"4372FBEB8382F3C28B743A9D663095CF794B1E6914825D4089C8862C2CC754E254BB509E46BF8AC8F73792D4282BBBC8FA187F53A2FFEC6C2B1BA2012AA3AAAC\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-fedora.28-x64.1.1.12.tar.gz\",\n            \"hash\": \"F2DF863F70B6B1D0A4450BED01C21378A37D0EC26569960801412E2C5B610C1E64F08C504E2574C1F8E295A83310F342CB818D1166555A3FAF655F83E89A8751\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-opensuse.42.3-x64.1.1.12.tar.gz\",\n            \"hash\": \"C63DB877056455AC8429B7BBE0B33C98883EFDFF874F883B4ECAC17BA5AAEF2602D008A44DA7DAA54F0E6B33E152B9F9C7A51CB6D082F7F6A7CFEB41652DA149\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-osx-x64.1.1.12.pkg\",\n            \"hash\": \"49461341BDAED7BA64566D6A7293CA41E6443AF23DF47A0C5AEE529A79DEB1D0F8332B24E3AF01905AC2011DFC739B572CDFC2DA077FA8CE39A6CC9FAC3BBEA3\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-osx-x64.1.1.12.tar.gz\",\n            \"hash\": \"108940FB4DF12334F0DC834D5D2D81C9871825A72462547073C0B87BB402E6DD30112B6CCF2BB6D4444B9FC58B848244C69542A923D8F5B0F9C1C00603B98D09\"\n          },\n          {\n            \"name\": \"dotnet-dev-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-rhel-x64.1.1.12.tar.gz\",\n            \"hash\": \"7632F688B3C7AA807E4342881A1CF9425852CED6159EF9F7FF4B1FB284150D1EB4AC8E28439F557BEFA48E9DFCA8BB090204590F4C7F171D3AAB756EF2879918\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-ubuntu-x64.1.1.12.tar.gz\",\n            \"hash\": \"A8F9988E405B7C3479A278B0B61A0BBD9091089591642B986B323709DCB7F4ED94EF0F547CB5EEF6344715A534E1E2A94088655EE8C29AB4762D2541F652F58B\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-ubuntu.16.04-x64.1.1.12.tar.gz\",\n            \"hash\": \"43FF269A3E44B6E418FC691358AADC2E633E949767F10BE247EB0976AC1398E1698C81A667784EB37951ABB53FB02802651BE008CA7CBDBA9FDDF8731ED427F7\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-ubuntu.18.04-x64.1.1.12.tar.gz\",\n            \"hash\": \"2B83CA327A023E93B5D58B83369AF8BBCD088F5DBB9A75354E93E0E18DD3CB849C0DD90EC74BFFC07CFBA52F1A96BC3B9F154F4B7F472CAACB7E2F3E76F3F74F\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-win-x64.1.1.12.exe\",\n            \"hash\": \"654DA8D87058D45EEDC0B44789181BD761A272F3FDFDC8F39E3E0A79946B4B5DC9B6A8F30ED4B127243C216EAA44E1C70174E2111405BA5135AEB19B986B1AF3\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-win-x64.1.1.12.zip\",\n            \"hash\": \"C7C864655014A8E10F8C466C035E766E19E929EFB9F08E95DEA95AB8D995D012687DFE760681F945985CE6B1FB5AF4407E6A122990AE1595DAFF25EED30486AC\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-win-x86.1.1.12.exe\",\n            \"hash\": \"C01B481AE6CC5D681429AA472DD37B2D2F799BF60F84922437806DCE4CDEDBB7DCA7C61063B08B0205DDA893CA1FF141CBD43A5BF753B15124ECC051F73260E0\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-win-x86.1.1.12.zip\",\n            \"hash\": \"0C8504EF64ACB64F8F24D825228B66EA566D2C98F86E66D3EF60314C1FA34DD1DFF21B4780AA6648CF43C012A15340E64144146A47B583328F7B1F605A21A80D\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.0.14\",\n        \"version-display\": \"1.0.14\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0cb4f123-a55d-4263-afe2-e54e5fdc1f0e/b9df261ef59d400872dd54107478f2b0/dotnetcore.1.0.14_1.1.11-windowshosting.exe\",\n            \"hash\": \"5E031624CB5B33200F07E2656FAC62DE8B2A398D2ED9B52B23EAEE663C84A9014E2F7DD32955CE044DF03271E6BA593B96EE4721F3F1C89291149A1A3B5774E8\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"1.0.14\",\n        \"files\": [\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2d88de27-d102-41d7-aa7f-fb69bb6a078a/b91dfcdac292fb8104e454ca4e378699/core-setup-1.0.14-symbols.zip\",\n            \"hash\": \"6DF845CFC44F40F6F8C219028C1780D798DB81C1C9A0ABBB16C209FFE7188A8A942C8E6E2074F1B10DAD5E7B5062C13A278ABCB9CBB060F81F5F15660DB25648\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/00d621df-0419-492c-bdf1-93942c76e756/d67f977b90c4ae4963f58b2feeee77c6/coreclr-1.0.14-symbols.zip\",\n            \"hash\": \"A3BD4419F895C196378855BB599349475C13B2C7B01E88810F9192AA3F6F52A8277CBDB1D42AD1E6ED36D2EC357E76CED9D97982B508BEA9DA08B449EB8F3CE4\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0f67d331-cfa9-4422-8a2a-a0ae18a521e4/ae9bdb6e9a0c8248d8aa2cae2269972c/corefx-1.0.14-symbols.zip\",\n            \"hash\": \"BE31CA7D41F49541A2BD812BBA689E77B2B4697B2AF5CD07583D9E970E3B6B417E01B8F87BAC1CF805E75D303A5A90DCC0082D988C2E06F9928D1C0D7A066894\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-10-09\",\n      \"release-version\": \"1.0.13\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-8292\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8292\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.13.md\",\n      \"runtime\": {\n        \"version\": \"1.0.13\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-win-x86.1.0.13.zip\",\n            \"hash\": \"8def96db00781c198a15302ac7bb3d81808f79c0656f24ecb40408989735aee1579e9761a4969011f554faa42180d85fd609b132e8a7bf9293bc2b5c833988d3\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-win-x86.1.0.13.exe\",\n            \"hash\": \"0b9b3819f42605d6a4d8f6125456b8c14a861af242d4fce93675731adff0df7487875247558b6aa12df89f3907b8855434ee964976f70766df86bf1eeff9e4d3\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-win-x64.1.0.13.zip\",\n            \"hash\": \"2959a7fd9e5a3d043721eade277e3d7172782776e7988323d1b3e072cbb2283f3b0c75c2971d13c5139e3b90d0c5de06aa1e3f48aeb325f3eabab8568d14d5dc\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-win-x64.1.0.13.exe\",\n            \"hash\": \"ec36957a4c2b9b5afad5a47c8d8e2c49091515f40e79f74b9dd63e9933943256f4d4af773e00e6d69a6dcd5a9512941867b0bb93c854595237f7fd9f58e29a31\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-osx-x64.1.0.13.tar.gz\",\n            \"hash\": \"aa3d13c821ae29488cd528cdeec8e4758c1213c9cf412305b3d78c2a884aa25f1bf831f99a431f68a5b6127845f6195c9379bc2198bbabbfe053ff2c011ca4f0\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-osx-x64.1.0.13.pkg\",\n            \"hash\": \"f8a44b733740b6fd041f3fbfd96e47b9aa164c0a5b6cf3e02d9bdbaa1624669a7f4a7a0c50aab32cb6c3c001c368e968b7df0f68977e7766f47a5cb5f2ffcbf0\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-centos-x64.1.0.13.tar.gz\",\n            \"hash\": \"3a04df57beda49ab7da450a59658f43d7289edcb4810c041e9b1d5f366b7fe7b499a259452d59b42180cde005ad4caa7e039aaa997bf098cbaca2035288a91f8\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-debian-x64.1.0.13.tar.gz\",\n            \"hash\": \"2e1b823f9e4af9d3da1741ab21cc9f5eaf5b9267690d63528a1fde53a2d841490dc8c83ade0ac365acb3383b1ef435d2c7213d0e320a461d77596fb9858722b5\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-ubuntu-x64.1.0.13.tar.gz\",\n            \"hash\": \"e4df72a4e8a3d78a12cae60e1cec37c52f18640276e720bb6da83b44931f172066c0b9716cb2871b3d1a29537b635e9348b8c2f0601a38f532f071626af2d01b\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-ubuntu.16.04-x64.1.0.13.tar.gz\",\n            \"hash\": \"28415fb271d62dc5a889884149e9a03ed845644b1b7f4fcaf264d3bc53b790821dbff861de3df02bd1160a7969a8321b62816ddc4987efd3e014b1012e545199\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.13/dotnet-rhel-x64.1.0.13.tar.gz\",\n            \"hash\": \"1e39bfc22254ec7660dae50fdcf0cd1eaf9be58797732107b5ce4fa3c035a8fa66d55f3acf0af27193176480bd94829c152621eccbb906672a6fd1397376b269\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8b10e003-60e0-43de-80c8-1a1c93b0c9f8/fd1f4c730b2b2a808521686a470cd17b/core-setup-1.0.13-symbols.zip\",\n            \"hash\": \"aadb261a541b0994079c571ae776819197fb18a9518d61fc0b891cdc7e40e0592a2e3a72efc4944a2f70b4cfd7e281852a53dc4ea254346c2cee29c17f3ec25f\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c8437415-67ab-4a52-b9e2-cb2d873818cb/756c1aec8815d1d23852ee91a769739e/corefx-1.0.13-symbols.zip\",\n            \"hash\": \"5227344287216e0c86e2b8d18a6fabef049abc831e52664a653ea5a55e6ab9717d53c43f6e400b869b8a6557356937d85f443c09adb7ab371a2789f3242ca58e\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/94463197-e5ce-4780-a3e3-824b593984a4/6c8ccf14c6d7c48f2abe97f35e3349a4/coreclr-1.0.13-symbols.zip\",\n            \"hash\": \"30eb24a28de0a5bf28983570eb52568728ec432405a3b73ca4e7f968068336f81ec24d717587c6ecc4a2195b949f4e212d5a84913388beb55c28ccf59260042d\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.11\",\n        \"version-display\": \"1.1.11\",\n        \"runtime-version\": \"1.0.13\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-osx-x64.1.1.11.tar.gz\",\n            \"hash\": \"b827b192398af01bf917a5fc0255616a82f04a95dac8154e681398e7e3ef549d701376bb1c9018dea37269e0406f065fb8e2958e652dfabaf86d5e0bb68b0840\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-osx-x64.1.1.11.pkg\",\n            \"hash\": \"1b8ba4f003fda6725c6c27787f6b750064fa7522d0adb0bbbb1717286b2083550da68a242b840dc9505ca68775785935b0428933eb8b0e89f31e698e41618989\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-win-x86.1.1.11.zip\",\n            \"hash\": \"29a97f3e5e2e8465e4b0c7628a9a02baa0148bfe1a960f58dcdb08b3ad65702cf5367c3f776f47b4df5ce2487955831ed5ab330d4eeabea28ab4f25edb051be8\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-win-x86.1.1.11.exe\",\n            \"hash\": \"88778c12aa4e3bdb696da31d5ae1a03441fc6d0d1860bada75bc604692e3f8c240941a10b8a99eaace2b5a6957bcdafa158f2cfb533d122bffcb2c55b25f351d\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-win-x64.1.1.11.zip\",\n            \"hash\": \"cbf96efd9f6119cad96041e3c55099b98f82252a60a93bbba5f93289bf600c5146402046c3ac79c6e927291e40cb5222171c3ee8cfbc086e635968dfed6e269e\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-win-x64.1.1.11.exe\",\n            \"hash\": \"6e15fa8c9d5b10cc3edb353c5e1ece01a29f7d00ff853cc12f84e33a776df8062c07febbd9659ca46c2adeb005036c231fd7a7592591b6e28c643bdc45084778\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-centos-x64.1.1.11.tar.gz\",\n            \"hash\": \"8665733eba5af02f8af5420bc858ffc4ef73281fb518c0736458f9f1f666f65e57c6a8e2efac5d3e6aca56ac8942a25d1d805ce392fd6f751fb3f0ce821b20c4\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-debian-x64.1.1.11.tar.gz\",\n            \"hash\": \"14f48469ebbc171d111369ea0dbe88ee9aeb74193aabd6e123c97e54ad81fd6352e86c446f8fe68e2db93793de86fbf89a9c682dd7d1d226169e788cd1f3f6a2\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian.9-x64.tar.gz\",\n            \"rid\": \"debian.9-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-debian.9-x64.1.1.11.tar.gz\",\n            \"hash\": \"23e1d3d1863ae8f6bfd450ff238ad7d5929722df6a0492597089c992aa1b223af294386718a711040a4e5f77bd3af97e7924d344e1535d4bc36c640dc6b73869\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-fedora.27-x64.1.1.11.tar.gz\",\n            \"hash\": \"ed2cad6ef471dd787086a249b932569840cabc7d48aa6920ce2d85e2d364a880f1d4c63e1014016a0fd19f8e8f1f93526fa2d710a587fcb27616bfd27844dc57\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-fedora.28-x64.1.1.11.tar.gz\",\n            \"hash\": \"50ba2fa6a319de00857f847c6dbaf49bb4b93a0e7f73824ff47bdabc6862b45f0349c9c95b11dd2caec6fd4ef5ba3e89ad1c5a44e6a66cf600bc906327805a7f\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-opensuse.42.3-x64.1.1.11.tar.gz\",\n            \"hash\": \"13163a1573c1f95ed45a5b445488080cd619693ac7ce8705e13ccfb605ae89d959a82bf42d633a6e65d5242eb508840e9f521bcfb6f30623a6575bfa701e6532\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-ubuntu-x64.1.1.11.tar.gz\",\n            \"hash\": \"a7743d00fad50ec1c9f27ac5b09d1b9d787ac9d4d600179d1d4a5ebb636438dda45ecc85b1a246fd2eed6455dfdcf764165428af38f83a524b4ea0aee82a3366\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-ubuntu.16.04-x64.1.1.11.tar.gz\",\n            \"hash\": \"60906a50e01420c0603127041b5fc628cb064169ed03b6c9727857695021d2713d92cdec322d97340d9e525a1f2f3c727b7125ca07c0d04057196e0e7cf791b2\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-ubuntu.18.04-x64.1.1.11.tar.gz\",\n            \"hash\": \"d96adb429e00052e331215438d0f1f244c830f633f9bd0dcf817f02a2211028ee4ac02e585be440863bdc6afc54fabe3539188c6f5f7086d8a0ced624fb05697\"\n          },\n          {\n            \"name\": \"dotnet-dev-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-rhel-x64.1.1.11.tar.gz\",\n            \"hash\": \"c79e40710dbf5e0f22d54ebeef4e08ce459a83dd58a9d7a2e56ebb480c780e912d4c8ee643df7f7717bb8544955bb154ca9aa88ec610eccd0d2f712b74668be3\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-07-10\",\n      \"release-version\": \"1.0.12\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-8171\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8171\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-8356\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8356\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.12.md\",\n      \"runtime\": {\n        \"version\": \"1.0.12\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.12/dotnet-osx-x64.1.0.12.tar.gz\",\n            \"hash\": \"6d69022219c117f2db307884daf225fc01c09b9e8f0b2a4f72c10a4ee6fedf54060643f0221857279687a0c417507a53b142b64f691d425cd94576852513be91\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.12/dotnet-win-x86.1.0.12.zip\",\n            \"hash\": \"26debb4b4a75be877e55ebde22badec0e6acd8aa83800056132c83d3492bf92f0e5fcac98e947a685a744aef1b3ef843f4109404b97061b532cc411c19dd2f3d\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.12/dotnet-win-x86.1.0.12.exe\",\n            \"hash\": \"b2a55df7716677c5b9ac33b33686b07617fa9a97f0629b23e9869cb2db4ff9004b472aff09857921290853d56672e4c6da4eda7c4dcfe55c734ba5de3fe22ab3\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.12/dotnet-win-x64.1.0.12.zip\",\n            \"hash\": \"43c22c1273c1055cda580e7bcec4274c8f40a40bacab07107899679afb12ddb6cdbaa544d778c65c593e3e65395d50c42a2f1d71dc10a60436437c709a126ef3\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.12/dotnet-win-x64.1.0.12.exe\",\n            \"hash\": \"0eedfca647ef551b19243eaec5417393562f5b1c9bbc920d91db8cc0a192543c59237980f0b2c5d388ffc89c4cb121b2acd75c1e21c2bdf9daafeeb9780b28f4\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.12/dotnet-centos-x64.1.0.12.tar.gz\",\n            \"hash\": \"3758c4a1b3e853864ef955ad9cee5f852e484f896d7a05c3994bb6f9b2b487c248577c3fd30c35eed674de649c1c8d0de709e432b0b2a7ccda9b81ed1f1c4f22\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.12/dotnet-debian-x64.1.0.12.tar.gz\",\n            \"hash\": \"a69bfa909454b5de50cb177f00528a7f05641f823e1aa30569fc9357d50cc3cc22a2dae6ca806fb8300345765cb4873b9884fd42807d922a4a2476f1b8cc72ea\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.12/dotnet-ubuntu-x64.1.0.12.tar.gz\",\n            \"hash\": \"338c1dbd127205d6e10dccf51ca4ac00685a3062aaf2297bac6b78771a0dad37bd7da0d9991e14c09ca90ff6066c00584d90848eeaf816ab6cb5a871956410e9\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.12/dotnet-ubuntu.16.04-x64.1.0.12.tar.gz\",\n            \"hash\": \"e0122f97adfde7a30ce1c251e7ec62700e7e02083ac94b445d5708b924bec99304f280068c345f9352f0ed20ceb83f77fee05553264e2768d669dc63c6872b76\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.10\",\n        \"version-display\": \"1.1.10\",\n        \"runtime-version\": \"1.0.12\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-osx-x64.1.1.10.tar.gz\",\n            \"hash\": \"bf3bf5f22c70c944a9459565626ef935cd15465a189ef9dd65d18560f7e71e44e2ac93552999774eb9a6672530a99baa30347bf3ea1cc7f4ac4d583e1f0e60b9\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-osx-x64.1.1.10.pkg\",\n            \"hash\": \"990d54a53702f5314ad06aab3fa7b6ad0944f2d8863d5ba99f9e86a660fc542378e0fa2cf9aebbd44bdee71bdd37d287409ded40f98d4a43f77e613a3d84fee3\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-win-x86.1.1.10.zip\",\n            \"hash\": \"f46778149a785c0ffed4611966c07668061bd07dcf0c4ebb42e68461aa9dc5a8fe5bcd0d99f1ebb279a7f8269d84dd7f34e34b6c953d63ce1acbc85c4c88b743\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-win-x86.1.1.10.exe\",\n            \"hash\": \"871baf6e9e7ca12a222ad0c9eb6060b933448c58f289defe1723934c66c07b2da6bd6f3495878afb280f188e64fd6200ed18b59ea5659e62be538956cb502a5a\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-win-x64.1.1.10.zip\",\n            \"hash\": \"d0b01871251265b9a07c24e94e2e33f4a5d96ec6165ec0f60b032ce5c35895985e37cc01f73134fc8802a442eeb243b1d1403ebe898d6455907095e5b6b854c1\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-win-x64.1.1.10.exe\",\n            \"hash\": \"d686d2514f45df597791d4fb60ccc272f5d42239e21803dbbf050891f79dbc7c0c8a72623606f312fd0aed0eef7ec5270c4adcfba105e3ec635d27729ff5c4af\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-centos-x64.1.1.10.tar.gz\",\n            \"hash\": \"30af1b4c9d8bd46bc48a52c9a9bee9e3a9a750ffd2308236458acd4cc3b313b8a4ca6259b34422caabd47540e30f5467b8f9237595e49be963d29abbdbfbd0e9\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-debian-x64.1.1.10.tar.gz\",\n            \"hash\": \"f4ac12ff20db06a7c6232c2645f35486d5369201429e3aa9c89a65a3e5f53957cd6ab612c225cc1dd6afebd4dd28695ca5a1f9cbcc812d8fa08635d6cedb1dff\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-fedora.27-x64.1.1.10.tar.gz\",\n            \"hash\": \"89cb369e8205224db77e314b6e236570e94b1d351689dddab5c4fbd63f444389e9745b84c57f855ddef9d693866b1103af6b8d889d6626ccc5c08c6783185d6d\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-fedora.28-x64.1.1.10.tar.gz\",\n            \"hash\": \"91e3bd421cadaf3a3a3e65486a088d9d4b0aaab9f35757068f6f09736cacbe498fc9469aaab9a4d5c209074af253761a8325adf525e991e40c5ffc10acd8ba93\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-opensuse.42.3-x64.1.1.10.tar.gz\",\n            \"hash\": \"227928df186dbd0fcc152f602383efcb66c45e467e5b88e135c725a53f69fbba26debbcb0536629e53b15e0caac65ef3af8db9b242195f3bf517d2f629125439\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-ubuntu-x64.1.1.10.tar.gz\",\n            \"hash\": \"21bb88c12a094aced52d5161dee6d345698210ddc942a597e489c167fdeef4a1ebab90f7bd4bc0c23fba1c912d24e73b333635b70f7571b4ab5d8d8d1ce4b713\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-ubuntu.16.04-x64.1.1.10.tar.gz\",\n            \"hash\": \"89300ca6c519ba17eebe0e425f332bd457c0af49d9ba0cd00f4df14be471bb6d5a0207486e484b106a6b1071fb140b0738f752475dd88d8d7f833e8b8e26da58\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-ubuntu.18.04-x64.1.1.10.tar.gz\",\n            \"hash\": \"38a3cd266f3b1f680e878c981adca1cebe81fbfd161ce4ea083ea4c7809c0a92e03ac33d292e29f43b5ebae18622ea83360c6b07186a6fa35ca6b2ad8450d140\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-04-17\",\n      \"release-version\": \"1.0.11\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.11.md\",\n      \"runtime\": {\n        \"version\": \"1.0.11\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.11/dotnet-osx-x64.1.0.11.tar.gz\",\n            \"hash\": \"7299e31d2c9f57035d3d99338cd583a52c172a60a5e0d27bf3f75cc99ddbfa49d2b66627bd1ea8adffa9ece6e362bf022e12a170e6461569dff33977f5783a87\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.11/dotnet-win-x86.1.0.11.zip\",\n            \"hash\": \"8587478c682b06a6c447afc56610a1c07a6943f82c163be9db1d53fc360052f02546234a335d8f47a527048124ef4437f9dbad24060970b1ef0f82e6d2be2416\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.11/dotnet-win-x86.1.0.11.exe\",\n            \"hash\": \"7aeadfa40f095e9e284888f7169b0d030446435e37bd0645e8cc713d04985d703fe343ae35c45a50e501c79048e9a009d83eb649d11b1f5e1eaecc24bdd889fb\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.11/dotnet-win-x64.1.0.11.zip\",\n            \"hash\": \"51bcb135c1880db365c0c0fc3d2151736a6e3699c40148ce6f11e363e2184982bf71dbb61fe7011688eff6ede5e33126be32af139d516151ae7bab5574ec67ce\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.11/dotnet-win-x64.1.0.11.exe\",\n            \"hash\": \"b2cfd380baddeda278e0659e7a5e3706898ed2f8b0f8d4a58f5573815e634ba6910bf668fc9d8dbbd4a63422c6a44e801c63cc9cfed37c198e02f5978d89c305\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.11/dotnet-centos-x64.1.0.11.tar.gz\",\n            \"hash\": \"5f9de7f5a678a9211e4e956c11c0638f2cf582d64c3132cb1b73f48c4aad4846c01fa49b26e612d17090e7813449091a206a3abe946394aa6dab15697fca76aa\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.11/dotnet-debian-x64.1.0.11.tar.gz\",\n            \"hash\": \"42b3111e4a781ac35b3db33b0d109c653f0962ff70a3b7bc2452eafbe31690852faacd839fa9098117907c8de7663451d51028d201956ce7feb872b6906af513\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.11/dotnet-ubuntu-x64.1.0.11.tar.gz\",\n            \"hash\": \"4487d360c623953236f9577e48f644ced1bf293b32432fe857d43a62377b0ea22b557aef92eca14cda5a6b055d3697444de457bb7533c1f7dda20eb8554a2699\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.11/dotnet-ubuntu.16.04-x64.1.0.11.tar.gz\",\n            \"hash\": \"31dc1e9914df84b32b6641508c657bd9cb5882327af50549100e58d17c2b184dbc20ca1cbdd616bfd8894b1a6fad201a434df5ffc9fb376fbc88a42d7d8eb5c4\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.9\",\n        \"version-display\": \"1.1.9\",\n        \"runtime-version\": \"1.0.11\",\n        \"vs-version\": \"15.0\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-osx-x64.1.1.9.tar.gz\",\n            \"hash\": \"c6e74231bdfd9d02dee203e37eafa4bd3a99645fdd982aa319800136b3ee9f4d90769095d05337f80ef50722e16d6c66eac87d83154055bd085d84bed31d50aa\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-osx-x64.1.1.9.pkg\",\n            \"hash\": \"002eaebff614b5ce20472e1247cf980c6659ff03913cf1d7fadf675ada651e1fc35caa55fe8d2b0ede6b250adac85bc41378c331088d853f4decd009bf7ee2b0\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-win-x86.1.1.9.zip\",\n            \"hash\": \"3fc2052aaf1cc48b6510dc93fe80207be61eb2a3d86d4032135d00b2feee90999e741ce02367fedadbfc8d630809f32e36fbdf2423ce1b1efaca11f2deb98fc9\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-win-x64.1.1.9.zip\",\n            \"hash\": \"93c4d9113ab25e18428b46fea75573a876f258daa1fe432e167ffaa49ac33c87dde744820ea31c605c94af948787b019048076c6eb879b515b16f9cce9ee5fff\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-centos-x64.1.1.9.tar.gz\",\n            \"hash\": \"259a7dd766a70175634559d08805cbf6c82ee40038ab822ccd8262549591f5492d89467f1d7ac77bfb73dc848c7b68297935b6679aa0a662dd7d8d307631d88a\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-debian-x64.1.1.9.tar.gz\",\n            \"hash\": \"1a50849d5660f8e592ee2c1eadd9aaf1af20f98977edec9a200cb04c652b4f5931d42ce618546229ab67037937802f720d784a015a7658bc765300789843065c\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-fedora.24-x64.1.1.9.tar.gz\",\n            \"hash\": \"e63da30afacf314989fff957ad7fca196651464ec5d7f50c4df8fcce396d76194d949d19a3bb4158d88777ff356a9b3617d95fe4d3ed8455486f4cb2800aac19\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-ubuntu-x64.1.1.9.tar.gz\",\n            \"hash\": \"874295a7daff58ef0e7a06aa63a9f04a344b8588888b09c50ee25266e9092a87f618ef99c8d26defe1a44e1c883bd4debf7cb52e0a5fd361cb5a296da3fb688c\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-ubuntu.16.04-x64.1.1.9.tar.gz\",\n            \"hash\": \"5c1df91d95f23c1b9891f8f6c7e0a7745010287fdc3a4c18122f0d922261cc53f9040eac682b639f9267026490d522af33298d32519282e23ce59f9a7db2a25c\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-03-13\",\n      \"release-version\": \"1.0.10\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-0875\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0875\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0808\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0808\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.10.md\",\n      \"runtime\": {\n        \"version\": \"1.0.10\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.10/dotnet-osx-x64.1.0.10.tar.gz\",\n            \"hash\": \"326cdd0bad8529a954ff407b8387eb054b97af739b1203a559a9433220fb988b1ef120bbf0abcfc953d9bd5304b8fe0115c6e0d181e7518be948500c5e89d6c9\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.10/dotnet-win-x86.1.0.10.zip\",\n            \"hash\": \"5a0a281e4e65d4ae08eacbb8bb57f1431992e5de1be1028f9bd1b7dffd124d424b4d0521a0bb606f5bbf9e77dd658868ac9c7c848d591d14a2d5852cc1a8bb8f\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.10/dotnet-win-x64.1.0.10.zip\",\n            \"hash\": \"3e31fc8ee712184707c5a811944aad444019cb71b3feced22aa96ad0cf9a6e2bc31a36271414202b24d1039c5ea3058ef7e6274775df6dedc95fa249651e277b\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.10/dotnet-centos-x64.1.0.10.tar.gz\",\n            \"hash\": \"ea6ca96aeb2940937ea88815f061f3721cc04a1335228984476d5f2e46037136b07abf1241a7ffaff69b0ae5dab6627f9c22ab778c92361687d330fe0da786a3\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.10/dotnet-debian-x64.1.0.10.tar.gz\",\n            \"hash\": \"21e57ed1934a12c44cc0de17cf212dadc07654e398df85ef9a79e233e1095c086eff2d28a9e3129c4f93a979237be72fa5a7934f04217fad2d0a487470dc167b\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.10/dotnet-ubuntu-x64.1.0.10.tar.gz\",\n            \"hash\": \"87e0df0cac7a3700fc80801b8220f77fedae464b925ebeb83e8059c61258ca8a0ac0b46463b1e0fa0727a75c371b0f1a0dfe30ad7fe164cc4f06e9e38c349781\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.10/dotnet-ubuntu.16.04-x64.1.0.10.tar.gz\",\n            \"hash\": \"979e24f6b1416157290e7fe983d28325a9d1954366625ebaffb167901ba68bd68ce5d2e76ba5c8e147a2c6a303e5bd922ac9f2175a452e0c2a190d28eb3040e3\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.8\",\n        \"version-display\": \"1.1.8\",\n        \"runtime-version\": \"1.0.10\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-osx-x64.1.1.8.tar.gz\",\n            \"hash\": \"99ab5361d7f082e269c4262acf56e851932cf45ad2dd7077a4759817c627392917900d15455dd4c51d44c341e40a3cf5e9e52b0f8e7736e58345d5a6fcda3d41\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-osx-x64.1.1.8.pkg\",\n            \"hash\": \"f1d438376839cb9343b2a893608a482d91134e4fa4aa1bc015b50ca58e9aea419043da134102496f13c9a90302abeaf9cb7b07df4e2dfaf528b3614f84847ea2\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-win-x86.1.1.8.zip\",\n            \"hash\": \"d1acec19ef873b1b11c19412396e6f9b6388a072f3639091629966b1b28622558498786a547ca8ecf262f61868ce1f028e8308f0b18cdca20d174942c317c1e9\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-win-x64.1.1.8.zip\",\n            \"hash\": \"151ade63c624d2c34b095ea19c382b20cc746efa5f41fc0feca2239896ca877b7fd8b1677ebf49aca750a07d5d0a4a5091649a70851d03657590c6f6f110434c\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-centos-x64.1.1.8.tar.gz\",\n            \"hash\": \"2c81764aa67f29c7eb9577f38b2dce4fbf356805a6b652bbc45e7f869b9fce63a474c0f5d806df229b9d77525b0b4709ced67a3a9b88b9e985490f25ea49caee\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-debian-x64.1.1.8.tar.gz\",\n            \"hash\": \"c669b96f35082df356673bd602e71eacd95282dd036755be9682be3b3ef96b4ef69026d16c981122d6b382c517ed7739a339eac040064a7d4dd3403306faedbe\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-fedora.24-x64.1.1.8.tar.gz\",\n            \"hash\": \"961b48edb6fed6fd8fa9eb8cb4a384c6549c896316bbbd38911a50fdbe4bfa98b53c4a107e7eee1712b556f51d60bd4844d314bab31c3cf70760b4ce83a71a26\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-ubuntu-x64.1.1.8.tar.gz\",\n            \"hash\": \"640165e75f1f042e5f5ec9d13a7a28464703bcabe4e46683d5909eebeb2bc8cd4227f652ca66d6e7b3d8287718f1a1f6dcfdd5b94c371114817ea481f4aa4b3f\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-ubuntu.16.04-x64.1.1.8.tar.gz\",\n            \"hash\": \"b80c9298366f01e2472de8d11094c52e5c2a197aa4b50e1ead83e6a60e58aafda652ff5afbd0178b8c57e98c2e27c2dba432ec41ba115b61be3e9a43bdfbc6e6\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-01-09\",\n      \"release-version\": \"1.0.9\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-0786\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0786\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0764\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0764\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0785\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0785\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0784\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0784\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.9.md\",\n      \"runtime\": {\n        \"version\": \"1.0.9\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.9/dotnet-osx-x64.1.0.9.tar.gz\",\n            \"hash\": \"f1f0210f9517e274b13d33c49ec3641b8d3248874f28b00d278faeb792ff88cee431d43af300ef7423122776aecdb63155d1a2f84d31deb7c9baa16237109d78\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.9/dotnet-win-x86.1.0.9.zip\",\n            \"hash\": \"f10a3d1ddb7b7302e73314c47bc9075a3ab2a8c3072f4bbd95a5340b7a1798a1964e798cec0f528ec64ce3ae947563b46b145f5da8b2a3f50d30cf0770c84a2a\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.9/dotnet-win-x64.1.0.9.zip\",\n            \"hash\": \"1d632c7392c35677c9e549e3559bd31e1c203d0523d502109429cb89512a6dc755030ded4f30964a48a59ac636ef1fda3617ea62b34204b586309b18f0109ecd\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.9/dotnet-centos-x64.1.0.9.tar.gz\",\n            \"hash\": \"bbdc00f11b391e6e89818e74a32cb3a9ae13eb9e9acae5409a2a4b00986fe4968be9e325638adba4b119cc82cb33111fa36445c2beff07f098233b22b752bddc\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.9/dotnet-debian-x64.1.0.9.tar.gz\",\n            \"hash\": \"3d11fb2881fde022dba3453816192e10845f09fb6d5f7cb83d8f2691161e73cc3b459516cd0ba5e425c430844d733f4b61bdcd3f0a3b9ac4bdb5d0b06ce91438\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.9/dotnet-ubuntu-x64.1.0.9.tar.gz\",\n            \"hash\": \"9dd1de2f20b278bf9ad8b7204fee67e2597ba03afd20a16e667430b1c89ac69101df54ef04b7d4dc9600eca558f868ad3b8189ea8f0e2ef359b05a8c2ef4e9d1\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.9/dotnet-ubuntu.16.04-x64.1.0.9.tar.gz\",\n            \"hash\": \"65e85314ed2085f1e5a4ba641174c7120002cdedc5abab673e87606beffa842a5ab9f378992a9a7358ffea2104d084b7f90a822d80990a8e492fa24563b4fa5d\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.7\",\n        \"version-display\": \"1.1.7\",\n        \"runtime-version\": \"1.0.9\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-osx-x64.1.1.7.tar.gz\",\n            \"hash\": \"9f5430391f664c942d49d7d1371bdeedad1bf41a21fb9d9afeb5557ce518a494634b750631dbe019e8128296e6d0ffa438853561919566451f42744a53e0b6b7\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-win-x86.1.1.7.zip\",\n            \"hash\": \"f465d15d914fd2daa30f5a5fd9725d94c664f5bac47779151ae54e5f9d9b61f49fa95dbb16317b137a06e80b42bf766f89051fe9ca332567bc94c08a1868d381\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-win-x64.1.1.7.zip\",\n            \"hash\": \"c79605ced9c80e21609faf9622766b31a49462b06a43dde9907ca56bc1aa7e37ee5cf48cd8bafc561cb3edff5ff6be97af2fb0f138cf22c94f97e587e8f94c7d\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-centos-x64.1.1.7.tar.gz\",\n            \"hash\": \"1b42158cfb4555f271e5fed62d62678cfea56c32604c8bbb8b7841723c6a5d48100bab27328d38ec6c92bb779099cc4ed5b05294c00830a95037be9a628e3ba2\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-debian-x64.1.1.7.tar.gz\",\n            \"hash\": \"5cb00f5bfc4175533956faf7bfebc08917466ec8912c23d6a57a23634b1a950df1f82587daf9a9859f6fb6f3273614990f499e81be117f460dd60b297d628c52\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-fedora.24-x64.1.1.7.tar.gz\",\n            \"hash\": \"f667a5b377d94a00020fdc547ec6cdce62cddeb4ecd1134bddc34ee10acbead588862a7c4ba25deecbde7cb7bf8daaa90a9d2891213a862cd011f68579fca6b7\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-ubuntu-x64.1.1.7.tar.gz\",\n            \"hash\": \"73b59f2d247ca7960360fdc5c849dfd641ae8c8a5314d18c0a972fe9480e64bc2faf9051deee7d8568bc4cf073ea9e48cff88ca3fb2d76a8c7a10f9fb5ccf5bd\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-ubuntu.16.04-x64.1.1.7.tar.gz\",\n            \"hash\": \"743b6fcca6a5831ea31710ef75136188385b5780b6e5eded24ad48c424ec13070713831c32c9b451174bacc27f012d7c90f8492c745894c0b3fda3aff5c11396\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-11-14\",\n      \"release-version\": \"1.0.8\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2017-8700\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8700\"\n        },\n        {\n          \"cve-id\": \"CVE-2017-11770\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11770\"\n        },\n        {\n          \"cve-id\": \"CVE-2017-11883\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11883\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.8.md\",\n      \"runtime\": {\n        \"version\": \"1.0.8\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.8/dotnet-osx-x64.1.0.8.tar.gz\",\n            \"hash\": \"1e513f3f41518aa6f37ad138d711d32dd1031ec37f2e8c98835c7aa65425af9a95e153eecd18600a8fa4207c898d23721cca36c16006d538f3eb3e5b3872242e\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.8/dotnet-win-x86.1.0.8.zip\",\n            \"hash\": \"2761942eebc13152d79fd697e361bdea711c04668b7587d89360972fadedefa55eba2fbeffc580d10d191cd3b3fde7a4fa6a99522af5278b1dace16d57967298\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.8/dotnet-win-x64.1.0.8.zip\",\n            \"hash\": \"63af1fb406ba14b75fb9386036ed129a96bdba8f4bf3d7e3410c33e723163116c63062130113441fac4aeb7c343f24b20eb785a2c82d0d1b162dbf516f287ad1\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.8/dotnet-centos-x64.1.0.8.tar.gz\",\n            \"hash\": \"f3cf87b89f5daa364268e4ec3000dc20d7aac4d0b056cceb65ea1faed5ab55d9df1b3bc23fe01b32cb67cbb407e1056ffb664eb3b5b7dc30a907e9057cad3c44\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.8/dotnet-debian-x64.1.0.8.tar.gz\",\n            \"hash\": \"e663014f763efccadf5b5868a286bc56a432e6349042e4ab3816e3cc0a05d9e67b05113d6dfe55260cfb1c3e1a554c235813bafe2cbc2debb75c638e0c77d02d\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.8/dotnet-ubuntu-x64.1.0.8.tar.gz\",\n            \"hash\": \"c639b2a21337dc5120a9d7d768057ab38eda5bf7c7cc6a307821096e7b09c136786be13278bbcdc3fa30acf0d21cd28201b6e25a1cd001ddb20709020517bef9\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.8/dotnet-ubuntu.16.04-x64.1.0.8.tar.gz\",\n            \"hash\": \"43ef03e5598d5ed080331f91bfe543795635e15fc19060f954d8b4ad4c8ebd1a50c92527c30d73d14ea3dda332cbb8fa8ec89210beb152d5de9be2120d1892d7\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.5\",\n        \"version-display\": \"1.1.5\",\n        \"runtime-version\": \"1.0.8\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-osx-x64.1.1.5.tar.gz\",\n            \"hash\": \"075daf8361e6d7dbbf079b71b2b2a804a96dbde9fe63a665afd02a5e4f1fc67dc7d37e8edd83766535f8f34ec5bb2ad82ef96effb3568d24d25ea3074068bf5c\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-win-x86.1.1.5.zip\",\n            \"hash\": \"88d69079274fbd88fdc9b6bbc7042d0be06f225370d42ed82ec73cf97521515a18631cc4b4b9dc8283a4d3e886de5dc438966e23a22ffead175815541a638f91\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-win-x64.1.1.5.zip\",\n            \"hash\": \"c8df85c9c073aaa1e7a57ad6d56c190869466587991e1620cefb203482de09a298ca0bee34446dfc42fd51c6f1990173aa280b57cad2ee40db03c71ea199dc75\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-centos-x64.1.1.5.tar.gz\",\n            \"hash\": \"083a326668530e7f380246314b33d4a08df6921b9e8e5251d26f97c073f86f6128ad6f0b56b8e7ae3f0677e4aa2c4fdafc6a68a5ef6fea5c5fcff1f20982f788\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-debian-x64.1.1.5.tar.gz\",\n            \"hash\": \"15b177092aa44584e2ffed9a5650c4bddf5938ac958f25d156689eeb1927745d52aafaec79d3a2ace9bf9fb85d9295dd59fe81beab1b787acfa5a7c380ef8016\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://download.microsoft.com/download/C/5/5/C55807F5-601C-49B1-B9BB-1BE03EB83E0A/dotnet-dev-fedora.24-x64.1.1.5.tar.gz\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-ubuntu-x64.1.1.5.tar.gz\",\n            \"hash\": \"e0e3e3c54cbd81bd3b2e1d16776e1b597415307e06c2415438ad482c315191d87ba99b6c4981b0e077449dbb5f453bd3facf814b4818f14e3fd9b35fcd95de8f\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-ubuntu.16.04-x64.1.1.5.tar.gz\",\n            \"hash\": \"ef32e224fdffe7d4fced2b576fa94bb3738a19ed76d01d9cf3fa67a3bc0a74d80bdb6e35a554b8a89810e17a9a3d67ebc7e1b4f1a0ac3604510d62a4f363d90c\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-09-21\",\n      \"release-version\": \"1.0.7\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2017-8585\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8585\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.7.md\",\n      \"runtime\": {\n        \"version\": \"1.0.7\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.7/dotnet-osx-x64.1.0.7.tar.gz\",\n            \"hash\": \"b5ec0b5d86814989c21398084fc3ee4d64d334aa9ccc34cd9300a1527d5f173f\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.7/dotnet-win-x86.1.0.7.zip\",\n            \"hash\": \"a8bd2c4babda3ed2fe870f40e178e139cd75dd32489e76ecd4ed73295a117138\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.7/dotnet-win-x64.1.0.7.zip\",\n            \"hash\": \"c4d338c3382507e52641d9509b2fb44b287ac11ad2f3c33b94592a09723784d1\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.7/dotnet-centos-x64.1.0.7.tar.gz\",\n            \"hash\": \"dc7bc1b69729e801141daac7fd6a21b9ff46be6459a7acfb63b32544d566a036\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.7/dotnet-debian-x64.1.0.7.tar.gz\",\n            \"hash\": \"fe8da8515029e00415b3675903fde02dade148ba44540745de3ebc6f0e0c83c2\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.7/dotnet-ubuntu-x64.1.0.7.tar.gz\",\n            \"hash\": \"f4ffe75aa180bc609f573478e3e6a4be6ae4bd32ff1eb2aadca44141463c1f16\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.7/dotnet-ubuntu.16.04-x64.1.0.7.tar.gz\",\n            \"hash\": \"4b12c5c5317d68922af2e93a4771186b497f5c82f00498df9d8e685ef9757658\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.4\",\n        \"version-display\": \"1.1.4\",\n        \"runtime-version\": \"1.0.7\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-osx-x64.1.1.4.tar.gz\",\n            \"hash\": \"fee47d9c7d1b3674e61e586ba81f982c2b039f427b41852e11241ea1781c964e\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-win-x86.1.1.4.zip\",\n            \"hash\": \"a7512497ca34fa81c2c7049db3722b950ecf56fa224562cfcddcf53d4a6d84e5\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-win-x64.1.1.4.zip\",\n            \"hash\": \"c8227d50379eb8617dbd1a647a6c888e1e6674cd46b88e4d44997fecfaf671c7\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-centos-x64.1.1.4.tar.gz\",\n            \"hash\": \"3598ec336712b4265ccfa7574bed0d3966f0e747fafa6e5602d0ceb2dd587af8\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-debian-x64.1.1.4.tar.gz\",\n            \"hash\": \"fa05f30c5a95e2aadaf76e1a402c157b5ce4e8f102fb00a2f8652869a146379d\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-fedora.24-x64.1.1.4.tar.gz\",\n            \"hash\": \"682ca1f5d772adc93248c644019aa84f4baa9c7589ebf2dd07d5cbca8f708581\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-ubuntu-x64.1.1.4.tar.gz\",\n            \"hash\": \"9ac4b6d9f163c02d8ab4b3c1e86fd52b9cc01fb560f976cd61f0664a3c9fef3f\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-ubuntu.16.04-x64.1.1.4.tar.gz\",\n            \"hash\": \"e806a106ef671efdbc0d3fda3218560a72293e3160e4384523914219937301ed\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.0.7\",\n        \"version-display\": null,\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"hosting-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/6/F/B/6FB4F9D2-699B-4A40-A674-B7FF41E0E4D2/DotNetCore.1.0.7_1.1.4-WindowsHosting.exe\",\n            \"hash\": \"\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-05-09\",\n      \"release-version\": \"1.0.5\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2017-0247\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0247\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.5.md\",\n      \"runtime\": {\n        \"version\": \"1.0.5\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.5/dotnet-osx-x64.1.0.5.tar.gz\",\n            \"hash\": \"86228ed7ba5f4eb14565104e85f30a3ccc01c544865cdf573b3edfba1cd3bf80\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.5/dotnet-win-x86.1.0.5.zip\",\n            \"hash\": \"e34a62fa697f778c90732f552aefc161f425ae735a20dd66ea5e772cdef7496b\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.5/dotnet-win-x64.1.0.5.zip\",\n            \"hash\": \"c930b72b6510b916423ab93a6a4c19b334b9c2215ec2abbe446e4e2defc76177\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.5/dotnet-centos-x64.1.0.5.tar.gz\",\n            \"hash\": \"b4e8adebada8e140e0e5fbaaedd459bf090a2fd521dfb7c98adbb6b02daf13b9\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.5/dotnet-debian-x64.1.0.5.tar.gz\",\n            \"hash\": \"55481b0254a72d8c342ba6ccca3908ffb5c99d7eeb54f83dec6cc93c6b4cc3ae\"\n          },\n          {\n            \"name\": \"dotnet-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.5/dotnet-fedora.23-x64.1.0.5.tar.gz\",\n            \"hash\": \"aaa236d77d1ec4d8bef85761e578a59bbd5153d3af8744407605de940509ebce\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.5/dotnet-opensuse.13.2-x64.1.0.5.tar.gz\",\n            \"hash\": \"5d43aaab95262cd44a017b4dc95226b1249dcd95547721eb3565599a404af439\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.5/dotnet-ubuntu-x64.1.0.5.tar.gz\",\n            \"hash\": \"860a22f2adc783a1ab10cb373109682d32435c76b9045bc9966d097512bec937\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.5/dotnet-ubuntu.16.04-x64.1.0.5.tar.gz\",\n            \"hash\": \"cec3ed3464a0982b92d92d46088039f302c5b861c8dd13db90d2d99eb9e7fa96\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.0.4\",\n        \"version-display\": \"1.0.4\",\n        \"runtime-version\": \"1.0.5\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-osx-x64.1.0.4.tar.gz\",\n            \"hash\": \"79ad510280c3e6bdf67c3164c9cf6cdc7536d809d584e471688400b1fb3bea2e\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-win-x86.1.0.4.zip\",\n            \"hash\": \"648f74ec818f5969035afec3cd4c2a0d9579539710dd4ccdfec806727cf0f8a4\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-win-x64.1.0.4.zip\",\n            \"hash\": \"82869baef9e010415583174b0b0be95a2cb326dfd36bb32ec270803a9c8196ec\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-centos-x64.1.0.4.tar.gz\",\n            \"hash\": \"8e952982414e192cff5980a6190cfdcfef543b59c0be65e5c9d86dc7d4a8ea4b\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-debian-x64.1.0.4.tar.gz\",\n            \"hash\": \"eeb1baff3999e48e725ad22d7fac800363acec56b122369c37979f87730961a5\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-fedora.23-x64.1.0.4.tar.gz\",\n            \"hash\": \"46fca05c426e0d13cb2ad5eb5cbe268c2a469cf574e6731d9cc8dacac9c02b79\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-opensuse.13.2-x64.1.0.4.tar.gz\",\n            \"hash\": \"49d599df1f2b6b173e4943a3aafb0456c95086ad2bca143c346fa28fe87d30bb\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-ubuntu-x64.1.0.4.tar.gz\",\n            \"hash\": \"e3823b9f964d27d1434f0e52b93fb1b6a65e83fb275e01f65ecbe63a4242fbe5\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-ubuntu.16.04-x64.1.0.4.tar.gz\",\n            \"hash\": \"6fb4ec609b00bd65881f864249741d6486ba19da5b76cfcb60d03df8799b6ab7\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-03-07\",\n      \"release-version\": \"1.0.4\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.4.md\",\n      \"runtime\": {\n        \"version\": \"1.0.4\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.4/dotnet-osx-x64.1.0.4.tar.gz\",\n            \"hash\": \"7f999ad206b9da7f2e41e0657d4c4827e8863628a97036efa34ff74914338c2b\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.4/dotnet-win-x86.1.0.4.zip\",\n            \"hash\": \"caa47a54f25145c680f0da1dad54f39443bf3db3b561ba84754f411cfdf874ce\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.4/dotnet-win-x64.1.0.4.zip\",\n            \"hash\": \"35eaf27e9643679ad53b3db94bee1b7fe56d35eb4a09afbf22b64ef63381bc9f\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.4/dotnet-centos-x64.1.0.4.tar.gz\",\n            \"hash\": \"c73de2a339508ee5ddcd3ac2fe524c3ab012b872ac5ad8b27d8c396d8d41925f\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.4/dotnet-debian-x64.1.0.4.tar.gz\",\n            \"hash\": \"1223e8456789125b0fb4113ab87c46ae58f214dec59b1c28fd2a851bfbf6762a\"\n          },\n          {\n            \"name\": \"dotnet-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.4/dotnet-fedora.23-x64.1.0.4.tar.gz\",\n            \"hash\": \"70b17dc13cf87f9c51f772a7c85c03f1530e608389a7c0e090d8a8534c14a6c2\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.4/dotnet-opensuse.13.2-x64.1.0.4.tar.gz\",\n            \"hash\": \"a23c49d83b83d797b1fc9da0ab9d6be8026fcee26896afddbedb088a66424f30\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.4/dotnet-ubuntu-x64.1.0.4.tar.gz\",\n            \"hash\": \"309296da11b302c48a035fadc1e6cade3aa68b2263af69f4038053db8be56526\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.4/dotnet-ubuntu.16.04-x64.1.0.4.tar.gz\",\n            \"hash\": \"d9af9252e5987e7fa4acdc1cdd13c7a22e09336389a3429015737dca0124bc70\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.0.1\",\n        \"version-display\": \"1.0.1\",\n        \"runtime-version\": \"1.0.4\",\n        \"vs-version\": \"15.0\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-osx-x64.1.0.1.tar.gz\",\n            \"hash\": \"f030188673ebb71fc3bb3a089504c2079cd8176e669575b5992664b405194366\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-win-x86.1.0.1.zip\",\n            \"hash\": \"3a8d7316dd774d54e27a332c5d1e73d7813fecd10b670249f480ae917226e444\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-win-x64.1.0.1.zip\",\n            \"hash\": \"e729afcf3cc69f17ec7968468b399c843b8b8327523e62c03450e4653115cf76\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-centos-x64.1.0.1.tar.gz\",\n            \"hash\": \"08759c53aaf335bab14f5bbca89836bd9d4350c1b6392d32e51b37d00dba9eeb\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-debian-x64.1.0.1.tar.gz\",\n            \"hash\": \"84601397f83adaf2028653b73f27093f66d4c763dae5c770743351975477ee1e\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-fedora.23-x64.1.0.1.tar.gz\",\n            \"hash\": \"dc6a70d11a574f9745b52a5392c384453ffdadd799ee59c417c308bdc63e86c3\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-fedora.24-x64.1.0.1.tar.gz\",\n            \"hash\": \"e98ffe4443bed058eaaeba7190b3f136128757799d28ffe8ad985aeae92970b5\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-opensuse.13.2-x64.1.0.1.tar.gz\",\n            \"hash\": \"2dff951b2db33145ba51e2310e85dd4ffad83a501eb6750365f77ddf7d3d8b5f\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.1-x64.tar.gz\",\n            \"rid\": \"opensuse.42.1-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-opensuse.42.1-x64.1.0.1.tar.gz\",\n            \"hash\": \"4c9d4eae74f04acf563da9ee3f1e846e9f2547ebd552ae874d90e897caf85e21\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-ubuntu-x64.1.0.1.tar.gz\",\n            \"hash\": \"d85dc4043049ff6ccf45282b6dda5484d8cd3b49554a8f18e2c45b7a0fdb24f5\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-ubuntu.16.04-x64.1.0.1.tar.gz\",\n            \"hash\": \"2f89e03968d44824278e62f8b8b1e720a2bd0ede4be32da095a748336528551a\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.10-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.10\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-ubuntu.16.10-x64.1.0.1.tar.gz\",\n            \"hash\": \"2450b62653ccc6d6c0b5f0c454a1563d659e20c19159d9e8b59a71c744adfa9f\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2016-12-13\",\n      \"release-version\": \"1.0.3\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.3.md\",\n      \"runtime\": {\n        \"version\": \"1.0.3\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-osx-x64.1.0.3.tar.gz\",\n            \"hash\": \"7355f4a6d2b07e373a6e86d196d134a9c4167e40915e9ae9515fd36af6376923\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-osx-x64.1.0.3.pkg\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-win-x86.1.0.3.zip\",\n            \"hash\": \"135cdad343d18343386f41163462ef8755568f2bfcc31809c5d5d0c58b9358fa\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-win-x86.1.0.3.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-win-x64.1.0.3.zip\",\n            \"hash\": \"4f984e8ca364f8524f00551f1cc7fc8caf8483b9165596538027f5112e066884\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-win-x64.1.0.3.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-centos-x64.1.0.3.tar.gz\",\n            \"hash\": \"df72591c1008e95629d8f86c30d2be69c6c33eacceb4722905bc97f13a6e3145\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-debian-x64.1.0.3.tar.gz\",\n            \"hash\": \"d61f2732930c050a1e2cc1270dc86829f496f3611dba4a5cb2409ceb1b821699\"\n          },\n          {\n            \"name\": \"dotnet-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-fedora.23-x64.1.0.3.tar.gz\",\n            \"hash\": \"cc36f1e6c39629a7e8d7c33becc286e4b5b111451b47819db909ab44391aa647\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-opensuse.13.2-x64.1.0.3.tar.gz\",\n            \"hash\": \"24b2aa95a32cf4162b592980bcb80c1b5abd5adb95e7f466091f59e2f4e79397\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-ubuntu-x64.1.0.3.tar.gz\",\n            \"hash\": \"d48aa0ffc135b89838777124844df06deb12b480fa0e6acb9b4a29804e91b0cf\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.3/dotnet-ubuntu.16.04-x64.1.0.3.tar.gz\",\n            \"hash\": \"7193d0f922208bca47ea4e43ace662774514624e377dbe034b59a061c9808afa\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.0.0-preview2-003156\",\n        \"version-display\": \"1.0.0-preview2\",\n        \"runtime-version\": \"1.0.3\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/F/AFF54A80-A370-4595-B22C-2575C10F5F4F/sdk/dotnet-dev-osx-x64.1.0.0-preview2-003156.pkg\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/F/AFF54A80-A370-4595-B22C-2575C10F5F4F/sdk/dotnet-dev-win-x64.1.0.0-preview2-003156.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/A/F/F/AFF54A80-A370-4595-B22C-2575C10F5F4F/sdk/dotnet-dev-win-x86.1.0.0-preview2-003156.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/3/0/030449F5-F093-44A6-9889-E19B50A59777/sdk/dotnet-dev-osx-x64.1.0.0-preview2-003156.tar.gz\",\n            \"hash\": \"8923307b4c17262dab995171733a05b2f6ec9c166b31f6971795e219a789fd24\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/0/3/0/030449F5-F093-44A6-9889-E19B50A59777/sdk/dotnet-dev-win-x86.1.0.0-preview2-003156.zip\",\n            \"hash\": \"7cf1891e6129a357cdaf0410b0f3de27ffd3b67473ac124d586d6df75cf8f235\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/3/0/030449F5-F093-44A6-9889-E19B50A59777/sdk/dotnet-dev-win-x64.1.0.0-preview2-003156.zip\",\n            \"hash\": \"ebef0a9b8055d70c5ab27d5a06b933f31650e43696740c8989b877145a158aa0\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/3/0/030449F5-F093-44A6-9889-E19B50A59777/sdk/dotnet-dev-centos-x64.1.0.0-preview2-003156.tar.gz\",\n            \"hash\": \"df72591c1008e95629d8f86c30d2be69c6c33eacceb4722905bc97f13a6e3145\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/3/0/030449F5-F093-44A6-9889-E19B50A59777/sdk/dotnet-dev-debian-x64.1.0.0-preview2-003156.tar.gz\",\n            \"hash\": \"d61f2732930c050a1e2cc1270dc86829f496f3611dba4a5cb2409ceb1b821699\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/3/0/030449F5-F093-44A6-9889-E19B50A59777/sdk/dotnet-dev-fedora.23-x64.1.0.0-preview2-003156.tar.gz\",\n            \"hash\": \"cc36f1e6c39629a7e8d7c33becc286e4b5b111451b47819db909ab44391aa647\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/3/0/030449F5-F093-44A6-9889-E19B50A59777/sdk/dotnet-dev-opensuse.13.2-x64.1.0.0-preview2-003156.tar.gz\",\n            \"hash\": \"24b2aa95a32cf4162b592980bcb80c1b5abd5adb95e7f466091f59e2f4e79397\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/3/0/030449F5-F093-44A6-9889-E19B50A59777/sdk/dotnet-dev-ubuntu-x64.1.0.0-preview2-003156.tar.gz\",\n            \"hash\": \"5566872fbe47910df57ec8a93b8b7a69ea904e4ba24d8ff05498657c4079df5b\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/3/0/030449F5-F093-44A6-9889-E19B50A59777/sdk/dotnet-dev-ubuntu.16.04-x64.1.0.0-preview2-003156.tar.gz\",\n            \"hash\": \"701173691ab79f85a071163e33309da89f7ede008804a73d36d2042487b7cc98\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2016-10-17\",\n      \"release-version\": \"1.0.2\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": null,\n      \"runtime\": {\n        \"version\": \"1.0.2\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.2/dotnet-osx-x64.1.0.2.pkg\",\n            \"hash\": \"c05310b26134fb0fcbcdc42b7b34d75a6b9185838bb27329e089bf3626c47bae33426c5840cc9ce2e47799a25d3f49414b6988a80d6b48528d4c0fe3c2c2eb8f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.0.0-preview2-003148\",\n        \"version-display\": \"1.0.0-preview2\",\n        \"runtime-version\": \"1.0.2\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/0/C/10C868F3-EF61-47A7-95CF-FF2AE042D65F/dotnet-dev-osx-x64.1.0.0-preview2-003148.pkg\",\n            \"hash\": \"8523e2249665b081d2a90de07f146d5dd3cba43c40ca65038b1095db4357cbc37425e424f652f3662cdebf2db090929a7e8677bf3b9bbd921af626bd72111627\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2016-09-13\",\n      \"release-version\": \"1.0.1\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.1-release-notes.md\",\n      \"runtime\": {\n        \"version\": \"1.0.1\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.1/dotnet-osx-x64.1.0.1.tar.gz\",\n            \"hash\": \"45a06f7eec05b32b511cd42074708bbb03a4c16d74b576b31ee282019f7a1149\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.1/dotnet-win-x86.1.0.1.zip\",\n            \"hash\": \"10d76abf6a5bebe57a9dd7bd6b112501d4bfee7eeb649e581c287713746814f9\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.1/dotnet-win-x64.1.0.1.zip\",\n            \"hash\": \"86b9a242e14296d266697c7a1004ef379ea7f3faed231fbe196561d6f9591868\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.1/dotnet-centos-x64.1.0.1.tar.gz\",\n            \"hash\": \"4e35226bcc6006c46c0ecbe6b16b8c879d9d30fd5e9250d238e025b7357bee0b\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.1/dotnet-debian-x64.1.0.1.tar.gz\",\n            \"hash\": \"aab094ab47d266b11194caa285c0adef3bf311ac48cdb17e4a6e0d1de0365543\"\n          },\n          {\n            \"name\": \"dotnet-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.1/dotnet-fedora.23-x64.1.0.1.tar.gz\",\n            \"hash\": \"a61fa03d5519e029f59addf9dd740a2e8fb834ff2cfab2856d7052fd9dbbb7ce\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.1/dotnet-opensuse.13.2-x64.1.0.1.tar.gz\",\n            \"hash\": \"8b50b6c920eb38e7e2b6e686d85f8d1ff56c357f630c6a3d26e943913134a9e3\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.1/dotnet-ubuntu-x64.1.0.1.tar.gz\",\n            \"hash\": \"d462661db3f8b9a8b4435b03114c90190b3f5bb30fa02617c5c6f99af5b3d458\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.1/dotnet-ubuntu.16.04-x64.1.0.1.tar.gz\",\n            \"hash\": \"ad4d4a8ebae995410667fa598a9afb0f5a273f08b7d57d7b7b2256c350943aed\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.0.0-preview2-003131\",\n        \"version-display\": \"1.0.0-preview2\",\n        \"runtime-version\": \"1.0.1\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/5/2/1523EBE1-3764-4328-8961-D1BD8ECA9295/dotnet-dev-osx-x64.1.0.0-preview2-003131.tar.gz\",\n            \"hash\": \"36629fbad1dc1609360482140de3e5c074fcab538c2f2ce67ff6e246375ecd2b\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/1/5/2/1523EBE1-3764-4328-8961-D1BD8ECA9295/dotnet-dev-win-x86.1.0.0-preview2-003131.zip\",\n            \"hash\": \"93a67a5b8cc8aaba5f33e297a524fdff3098442b84232b1a85160f455369ee68\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/5/2/1523EBE1-3764-4328-8961-D1BD8ECA9295/dotnet-dev-win-x64.1.0.0-preview2-003131.zip\",\n            \"hash\": \"392f494301427f4d1172f60efa61be6f25f016aa2ff6e6fa2ad4137fa184eb5c\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/5/2/1523EBE1-3764-4328-8961-D1BD8ECA9295/dotnet-dev-centos-x64.1.0.0-preview2-003131.tar.gz\",\n            \"hash\": \"c51797746b5ce338e74e85f6cc43a5201db1af50247d47c28c9cb25f6a37833d\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/5/2/1523EBE1-3764-4328-8961-D1BD8ECA9295/dotnet-dev-debian-x64.1.0.0-preview2-003131.tar.gz\",\n            \"hash\": \"bb3458b0e771182e1387ca5d9fa5946fc775b77ec55a2501fb3f75ddf29f8124\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/5/2/1523EBE1-3764-4328-8961-D1BD8ECA9295/dotnet-dev-fedora.23-x64.1.0.0-preview2-003131.tar.gz\",\n            \"hash\": \"8cd233fdf2d12eca47d558e70e90000aee34a75c718fc9f22d8680e6cb688047\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/5/2/1523EBE1-3764-4328-8961-D1BD8ECA9295/dotnet-dev-opensuse.13.2-x64.1.0.0-preview2-003131.tar.gz\",\n            \"hash\": \"d52077e0401a9cd39faaaa90e9003d32e765b0294d30eabc418ba76386766428\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/5/2/1523EBE1-3764-4328-8961-D1BD8ECA9295/dotnet-dev-ubuntu-x64.1.0.0-preview2-003131.tar.gz\",\n            \"hash\": \"5566872fbe47910df57ec8a93b8b7a69ea904e4ba24d8ff05498657c4079df5b\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/5/2/1523EBE1-3764-4328-8961-D1BD8ECA9295/dotnet-dev-ubuntu.16.04-x64.1.0.0-preview2-003131.tar.gz\",\n            \"hash\": \"ba36382d95307a6526d675bba4160f8035e9a5b9b1c2295fb1e6e752be337298\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2016-06-27\",\n      \"release-version\": \"1.0.0\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.0/1.0.0.md\",\n      \"runtime\": {\n        \"version\": \"1.0.0\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.0/dotnet-osx-x64.1.0.0.tar.gz\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.0/dotnet-win-x86.1.0.0.zip\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.0/dotnet-win-x64.1.0.0.zip\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.0/dotnet-centos-x64.1.0.0.tar.gz\",\n            \"hash\": \"c01e6a474e95a02c38f327dc5b7830b7a31109f87563d735a6e272008726f262\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.0/dotnet-debian-x64.1.0.0.tar.gz\",\n            \"hash\": \"df8b71809626960c26a632e8c1801973ff9f1b8fa4fdeaa51a27bc070ce3f03a\"\n          },\n          {\n            \"name\": \"dotnet-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.0/dotnet-fedora.23-x64.1.0.0.tar.gz\",\n            \"hash\": \"49b4f9037e2c75b0abc1c364dc67c15125fcb5d353c6935ff487e6aefec86353\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.0/dotnet-opensuse.13.2-x64.1.0.0.tar.gz\",\n            \"hash\": \"a4bc924aa0ebfc4d6123baad15e270bbcb99ce25fbe7ea8f0fd721cb8ad725ba\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.0.0/dotnet-ubuntu-x64.1.0.0.tar.gz\",\n            \"hash\": \"304165580cf2eeac1ba8db994ec9cd7c83084c9a4a094387d180400ce2fdd1aa\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.0.0-preview2-003121\",\n        \"version-display\": \"1.0.0-preview2\",\n        \"runtime-version\": \"1.0.0\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.0-preview2-003121/dotnet-dev-osx-x64.1.0.0-preview2-003121.tar.gz\",\n            \"hash\": \"1df92ad4eb117e717acbd68c46b06df4a677f590652099d0cc0982253bdf4534\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.0-preview2-003121/dotnet-dev-win-x86.1.0.0-preview2-003121.zip\",\n            \"hash\": \"107a27f5c1dec01932f26bcbd2640ae2d098266f05fafe1ab6c6ada7a5f43a27\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.0-preview2-003121/dotnet-dev-win-x64.1.0.0-preview2-003121.zip\",\n            \"hash\": \"a7ab3ad9c28c9952a9f6e1fee158c337b82aac3ba502e742a92d23bab258e621\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.0-preview2-003121/dotnet-dev-centos-x64.1.0.0-preview2-003121.tar.gz\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.0-preview2-003121/dotnet-dev-debian-x64.1.0.0-preview2-003121.tar.gz\",\n            \"hash\": \"204ceab7bc92c17d17691b0d5c1d54992fc78a969fc217a8423045875a4c63ed\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.0-preview2-003121/dotnet-dev-fedora.23-x64.1.0.0-preview2-003121.tar.gz\",\n            \"hash\": \"dde9f8326583f351a89e57095dc523ba92560896cd1d4b8e0ca5ac7fd8499138\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.0-preview2-003121/dotnet-dev-opensuse.13.2-x64.1.0.0-preview2-003121.tar.gz\",\n            \"hash\": \"293aa02e528d6c4621b4dda859caf14d670ab212a497945ef5ea17cca31f4ac8\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.0-preview2-003121/dotnet-dev-ubuntu-x64.1.0.0-preview2-003121.tar.gz\",\n            \"hash\": \"02aa1990cf130ea7d772baee6e066bfe249c914c881f5e2cb8e482f524cdb54d\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    }\n  ]\n}"
  },
  {
    "path": "JexusManager/Resources/1.1-release.json",
    "content": "{\n  \"channel-version\": \"1.1\",\n  \"latest-release\": \"1.1.13\",\n  \"latest-release-date\": \"2019-05-14\",\n  \"latest-runtime\": \"1.1.13\",\n  \"latest-sdk\": \"1.1.14\",\n  \"release-type\": \"lts\",\n  \"support-phase\": \"eol\",\n  \"eol-date\": \"2019-06-27\",\n  \"lifecycle-policy\": \"https://dotnet.microsoft.com/platform/support/policy/\",\n  \"releases\": [\n    {\n      \"release-date\": \"2019-05-14\",\n      \"release-version\": \"1.1.13\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0820\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0820\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0980\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0980\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0981\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0981\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.13/1.1.13.md\",\n      \"runtime\": {\n        \"version\": \"1.1.13\",\n        \"version-display\": \"1.1.13\",\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-centos-x64.1.1.13.tar.gz\",\n            \"hash\": \"AAFE524AB129EA7960FC60EC8911182E7BBB9BE18ED1886A1F79791ECF9FB7017E46A716CF045603F73A73ED535D325CAF03CC72F9415932D7D5D99BC2E5998E\"\n          },\n          {\n            \"name\": \"dotnet-debian.9-x64.tar.gz\",\n            \"rid\": \"debian.9-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-debian.9-x64.1.1.13.tar.gz\",\n            \"hash\": \"4F238A83D522E7D97A0E8DC575F78CDBE7B5B3759F0A01588A71CDD8BFC9D02A299A42C77288E1ABECED9C541B988378C3D300F959760FF85B5CFF9426AC46D3\"\n          },\n          {\n            \"name\": \"dotnet-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-fedora.27-x64.1.1.13.tar.gz\",\n            \"hash\": \"7B04F0A6A631D6687E46D6659502DABBD19F89EDFE893B6641D8E935A08BD7E132572E0038C7CD534224300CD92473084FBB9E0BF8D2328F9C08D38894EC97AF\"\n          },\n          {\n            \"name\": \"dotnet-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-fedora.28-x64.1.1.13.tar.gz\",\n            \"hash\": \"621CAC1839106421C1922499E1BD3F5BFF88B4AD5D3F6F7263230AA8C9F5E8096FA1ACE57840631F22B757F8D59C84E2F91BC819C1F9BC5FFF859A4CB65A3715\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-opensuse.42.3-x64.1.1.13.tar.gz\",\n            \"hash\": \"D53867D06B70970BBD1A80526B498A243C3179A8AE54A2DC75FD5B8C18180D9AEAD7EABC0252EDC2B96F107A4B2ADA0954928A75E670C28826ED7F8E901BF41A\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-osx-x64.1.1.13.pkg\",\n            \"hash\": \"3548831FCD00E17A449EE366F02C089C3A2722D082D75035DDF7D86ABCE7707B3BF17DF2C87B38617A522A32A8F59EF40DEE227D8D1EB628062AD03BC820581D\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-osx-x64.1.1.13.tar.gz\",\n            \"hash\": \"E38C8699B4368D3AF76B7688176F4186BDAE8A86582B1A6130803EEA208DA70F4C14FD3A039E5E0765747F81DD87DD7503FE5A79D358CE89EF8847346FB35834\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-rhel-x64.1.1.13.tar.gz\",\n            \"hash\": \"5200C3D96CFEC700534D119DF4F9505F2A17953828AB213F8614D3BF0F2A700E7096D8778C8843974361311BC9E58DAF44408A927A010A9D837EBC743D3A60FE\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-ubuntu-x64.1.1.13.tar.gz\",\n            \"hash\": \"76C283AE933556932D7891C4BC399CA3209319BA41DA1858797705F12E7B62233B00892956AE842A1FC3A75F5754EF30D0AC881631853433DEA3A6F181BC6782\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-ubuntu.16.04-x64.1.1.13.tar.gz\",\n            \"hash\": \"611812D5689F54DB1196F86AF512F762D86E5EC03893871F29C71D3343638CFC440BEFCD2EC44FDC8BE5643B8164E9863D87AF8806B4BABCCD05A01FEA3EC1C6\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-ubuntu.18.04-x64.1.1.13.tar.gz\",\n            \"hash\": \"FF3EE02D1D66C1B0920ED91DA3DBAA9A9D48983BCE210319ECD57CE41CCB16A92EFAD3C9B5C39F1D15BEB3BBA273BFD78E988B49C94F30A1E9D268D7141A90D7\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-win-x64.1.1.13.exe\",\n            \"hash\": \"041509C296DA2C995A77B97971D9B5E3CF029BA7C827199F1383A17100DEB5807BB0BD6658478C96D2811C5721B51A6752E0A74FF2773C0810EE8029C3195B82\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-win-x64.1.1.13.zip\",\n            \"hash\": \"AC56ECFCBF638E7F237CCD876DEF9AD17E881ABDBCD86D2BC40F65980146B8761E4294054CBF918BA33DF50EBB34FE5403DBE6393FA05067D3784EE874DB97D6\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-win-x86.1.1.13.exe\",\n            \"hash\": \"F9743CBC96CA9DA2486D71984B123359275C5FB958BADB682C1EF75AD20B8189E69274D2666BA32C198CDCA826B696A0ADDB6E3E73C3D555FE2B5341949B2975\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.13/dotnet-win-x86.1.1.13.zip\",\n            \"hash\": \"6EF25AE12B5C726B82B94821C69BF21640B9E44A5E4F863B31EC9CF2FD16D91D0F60F7E3FAE7CDF2563F7EDE82B7B531E066805798E8860A164AFE55E95449BA\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.14\",\n        \"version-display\": \"1.1.14\",\n        \"runtime-version\": \"1.1.13\",\n        \"vs-version\": \"15.0\",\n        \"vs-support\": null,\n        \"csharp-version\": \"\",\n        \"fsharp-version\": \"\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-centos-x64.1.1.14.tar.gz\",\n            \"hash\": \"B78EF84B282BC9CF1F66745943A3B9D45C4E0DA84259FEDE386A1991343B9BE7B1B5BD2A4FB1018C84AE1A2037F21A0BA0FDDF6E5AFFF9F02CC0AE179557FEEC\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian.9-x64.tar.gz\",\n            \"rid\": \"debian.9-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-debian.9-x64.1.1.14.tar.gz\",\n            \"hash\": \"E36AA4B278B936E1E2989B5E556F4EC3AEF2CB1EBB5ABD1BD6011D511873FC3E72101D035CF4DAF1563C7A3C43C193863D38CBF24288D375DD143AB42AFAE524\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-fedora.27-x64.1.1.14.tar.gz\",\n            \"hash\": \"D97E6B90613739D35A7BF65E24131EACE18E128A39086BAC8B584A7A136666E7B438BE8B0DDD3E556E03493ACD7C30C767FB266D5D0DE6ADAB47DC3F72BA39EC\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-fedora.28-x64.1.1.14.tar.gz\",\n            \"hash\": \"A21D21DEC80E6466E5759D2F99F980819D080C14D0D3689A30120BC4B1A1B7742F501BCEBEAE4BBF37F3FB8ED106E7EC432C266E12151624F5308D8E01DEE7EB\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-opensuse.42.3-x64.1.1.14.tar.gz\",\n            \"hash\": \"AD14E5F34558E2D115D04A34DBC40993235B1AE2B12CD9920699E7A2C99E055E8C1034FC59C61F854F854E1E9E9FD8C34D607F83950D958E64DA7598B6E63304\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-osx-x64.1.1.14.pkg\",\n            \"hash\": \"E480147757671032D0BDA34C749B98173818C90CA9DA5E2CA7078F5DD9F28194518C7E7209FB1144EF934E3B18BEAD31A3E16830FB70BE9DE4FB292F81842BE0\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-osx-x64.1.1.14.tar.gz\",\n            \"hash\": \"460D8188CD4C5825904A0B3EAC5E326C115E43829D9912A118102D02708712E3F83820E9BEA9FFEA997FD7680A40DA570894729F0D3828723FF054043047878B\"\n          },\n          {\n            \"name\": \"dotnet-dev-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-rhel-x64.1.1.14.tar.gz\",\n            \"hash\": \"9CC8A8020DCEFB5270CC1A69C340CAB70D7699489BCB87DE27A917A391C6EAFFB2DF27BE827E028EB8F980022643969E0839789F5C8DDF404F37E951264E95CD\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-ubuntu-x64.1.1.14.tar.gz\",\n            \"hash\": \"49A5C90AFE895C2929078E9D57E1ECDFB66629EA59555B44804AC4FE4130672EDDF776395FA6039BFB9D6B009CA625A5A695496C569EFBF441EBFC9B422F1CA4\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-ubuntu.16.04-x64.1.1.14.tar.gz\",\n            \"hash\": \"9B993DD05952C2DE38420293C4376C9A2D8430D5DEB37283344E3B0B807DA588C45AC48FC6AC3A0A8110DCD175CD5344C696644B94CABBCC55849E553887F170\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-ubuntu.18.04-x64.1.1.14.tar.gz\",\n            \"hash\": \"70A6B710366079C654CE0B82BEF93743D0271D4739D0B1547D110BA079A3F2E2FBDDBB6EC5345DF593F6B1E6485F1D5A6CFA3064BF312245B67507434E8D5D0B\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-win-x64.1.1.14.exe\",\n            \"hash\": \"1E98A41FA12E511F8AE0A6AD7712203E985836F9C3A835F9508616EEBD8F87BE21667543010761F64B4B81A68B55B63A6449EB855BF1053C4821997EF801BFE4\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-win-x64.1.1.14.zip\",\n            \"hash\": \"5578EA5C81C678D703309192423AF4824EBF896D781E0B6295327C9234ED1AD482EAE1C586EDE8924EA67C86B6E701E7F94FED51ED4C79E28E0FE5D43E8C4CE7\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-win-x86.1.1.14.exe\",\n            \"hash\": \"65907FBA96322EF1091DA6C4FEC5541E1BF4709499B87EC4DA9489EDB9D1FFC463EC43D7551879D3FF0B2D98CE8959EC4C018CF06B91D465F9A5A10D2CEF5F0B\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.14/dotnet-dev-win-x86.1.1.14.zip\",\n            \"hash\": \"BBD9506FF8361C82DB64955DFD21E206C02C46966F89D7232B25818E1961EE6FC3696F76945523CB243AB175D1CBF6EA82986CDBFD88D86A0D495396CD231449\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.1.13\",\n        \"version-display\": \"1.1.13\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"DotNetCore_1.1.13-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/85188c51-c71f-442e-ae3a-f46449564959/690b9e12e7da159576f67afd986b873d/dotnetcore.1.0.16_1.1.13-windowshosting.exe\",\n            \"hash\": \"65D4C438D99419B5661D759536645EF7F81AB5F21820658DD13E201CB74F12044DC888C0AC5B90A5BB7D1C8A9AB6AD7D13A5DB210D6AC7D18C53BDB3D7C05E5E\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"1.1.13\",\n        \"files\": [\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2ac118c3-8888-49c4-bba3-e3da160fd5f3/d4c01ebc88ce57151f06ac67d0039d5c/core-setup-1.1.13-symbols.zip\",\n            \"hash\": \"BE58BCC2061C36697CF9D8BB073999F4A9FD9C483D078A78D6B9E226AE31E6485D45DEDCDEBC489D2EFC2CB31EAF0B0022D7FB177A84B4C2455807F8EA093E77\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2dcbc7c0-4539-492e-b2eb-536dae166004/f7be22b57599e0a4b6a90bd5acd83e4a/coreclr-1.1.13-symbols.zip\",\n            \"hash\": \"3DDE4DC2DD94797D5956B55B9252DFBEC238E4760C4743740653AFF14CFCF4C650ACA1A434D2C1C603F512E13BBE0ADDFAB3EA4A0EDB0512836D36B35D00A519\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/dc222d9f-c2d9-4f41-86eb-0fb8b108a12e/6e9061639a322d4a4e650504d115ef19/corefx-1.1.13-symbols.zip\",\n            \"hash\": \"B77FAF7FF28276D0DC62C39322892059A4970470AC1EA129457FE0592BBCBB030DCFD5624874E1DD4E2CA67E623C1D1B910F7D8887EEB65968B5EB8736D8937C\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-03-12\",\n      \"release-version\": \"1.1.12\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0757\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0757\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.12/1.1.12.md\",\n      \"runtime\": {\n        \"version\": \"1.1.12\",\n        \"version-display\": \"1.1.12\",\n        \"vs-version\": \"15.0.22\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-centos-x64.1.1.12.tar.gz\",\n            \"hash\": \"F101DE0E33838801572DCC9A5626698C6F20C154D0938E761AFA41F861EE470E7824CC99F74852484E62B4776FC6F98D4E57DD503B84F7B74A4121A74698DBDA\"\n          },\n          {\n            \"name\": \"dotnet-debian.9-x64.tar.gz\",\n            \"rid\": \"debian.9-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-debian.9-x64.1.1.12.tar.gz\",\n            \"hash\": \"F556EC502C91A3B50576A2717A6E01BB60800AB1F671BB211BE5F1577BCB405A1BD02BC5C7D6BD4CC3D6B12B9785BE8308E22D1E22743E5AAA67A2C613C6558B\"\n          },\n          {\n            \"name\": \"dotnet-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-fedora.27-x64.1.1.12.tar.gz\",\n            \"hash\": \"F1489C659CD38D7CCF91394C04917E1E7A6975891BA59131AA16E7657C0543037275C6EFD7EBB880194E695FE7E943A87C808C6DCBAD7DD35E4154779FB75050\"\n          },\n          {\n            \"name\": \"dotnet-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-fedora.28-x64.1.1.12.tar.gz\",\n            \"hash\": \"EA5CECA6265C05B4EDD62893CA2125E533D2566074D4D98BE95686E8752EA3E2C8B36AAA8DFF75AAC5CA60ACD44893800221E38BEE4236C2B9E36F5FF9859325\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-opensuse.42.3-x64.1.1.12.tar.gz\",\n            \"hash\": \"38416155C3307870F58B464E5ECDD5575A2CDB9CB59DA800960E3C75E85BCB6BE253E42017F87BD9B6AF5F5FDF5EB7D8B3C39923432C5EB114CF8503914A2946\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-osx-x64.1.1.12.pkg\",\n            \"hash\": \"7A131AAE13827BA2785F501C544695166D85B8A831381C270A9C219E4FDC587A5490A7A3C3B4E38FB90BC1A5EE75FF7366E333619DEFF98409CB0E72A091CEAF\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-osx-x64.1.1.12.tar.gz\",\n            \"hash\": \"867E247EE13D2A59FC9E974225888E97FF59DDA6F747D784E86C75D1FD90E5D17EA1C6E1B8C2DC7BB889B8097361548345239F5A83E2B1908389907496D08D6F\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-rhel-x64.1.1.12.tar.gz\",\n            \"hash\": \"2292B6E2562F76A22063A06435B9215A11FDCDB20CC2DE1490D6BB32BBC590F9B6A308CE951AA13BDAFC3EE88ADC8A974BEB2691C9A4DDB43FBEB35E94ECCF8E\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-ubuntu-x64.1.1.12.tar.gz\",\n            \"hash\": \"429E18C6B885EB0C04E23794F39337F785FCA7A3E645869E26C7362FB545339D698C4CF5414195E0FF36B26E1170835D178BE243188C93CDAC6CF9401DFACEFC\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-ubuntu.16.04-x64.1.1.12.tar.gz\",\n            \"hash\": \"1A0FDB76B30672BAEB6BD1B1B5A407DCF8F0C4F0E3B2116534C9212CC18E14E152E34BD026CE8AC00379DC9DD3BDAA65589FCAB19268782AD329837B3A926280\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-ubuntu.18.04-x64.1.1.12.tar.gz\",\n            \"hash\": \"747EC1218A36F18BFF25834594AFBA2A79A46028A5D00CCB2AAE4E343886E4C6691BF4AD0DC9426D3D86635156E796E100DBC31F4E3159CAC774335742C7CAA1\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-win-x64.1.1.12.exe\",\n            \"hash\": \"FFC597AEF0AF1C09827DD935EAEBCFC485FEBABC03B65A2D5B2D185A8E2FA57364DC152B57FA88676804C4B26A28AC7D53BA1BD766E73118BB12D647475EEF08\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-win-x64.1.1.12.zip\",\n            \"hash\": \"C285DD9B8BD713D86D35EA03C60877045E0328AA4696462072A4E5B276D70686C1BA0A89DF0B9F8BA29CE16C4CC5A8A764D1B1E447A81872511E5CC63F71EFCB\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-win-x86.1.1.12.exe\",\n            \"hash\": \"7785BE9E9097C6F38C8AEE7A7A73543FBD2F2CD587FB2B98FC662351CDE07EEC6958CE93458890E1663706E733A873D88950151DDDA97A3B2D0B950E3A49464C\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.12/dotnet-win-x86.1.1.12.zip\",\n            \"hash\": \"9308293A3EFE49C0FAE11952F7140E73CE0F5C3FEDA13D228188CE8A02CD9C35053A6ECC35CE6CD22C1FD8D31EBF67F296CC1C6BF5D63FBE92344D169E1A8C51\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.13\",\n        \"version-display\": \"1.1.13\",\n        \"runtime-version\": \"1.1.12\",\n        \"vs-version\": \"15.0.22\",\n        \"csharp-version\": \"\",\n        \"fsharp-version\": \"\",\n        \"vb-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-centos-x64.1.1.13.tar.gz\",\n            \"hash\": \"222B86C1A162EBF400042A36D6F7D72B934FD61170A8FB1D20016D5B9252CAD6FA0A97F5036060A5A5CDB6138F043239753904D2A8BB395AA94A4A9430EE45B0\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian.9-x64.tar.gz\",\n            \"rid\": \"debian.9-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-debian.9-x64.1.1.13.tar.gz\",\n            \"hash\": \"FA6C3BD7924E43E349101F61805C4411FE1CB924ED1C918F13217FEA6624A4808B2CF149FBABB83E56A0F5E2B33BA4138E1AB76313C26D956587A36F14074823\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-fedora.27-x64.1.1.13.tar.gz\",\n            \"hash\": \"83A6E71F446C22B5A1238A1F45C51E95AC746079F5B933F2A12891470733D9DE9298D001186705902D3A6C13FA8AD6497E372CDCF8F7A927F693977E25E721CF\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-fedora.28-x64.1.1.13.tar.gz\",\n            \"hash\": \"083008FD1828CFFC32CE47F0D0310F06C8A0B2564B4C4C28CF01A2AC3BE98E874E33F5E337A2DFCD0460D991F7F99F7D5173DB612B909F0D3F364D2B69BC09BB\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-opensuse.42.3-x64.1.1.13.tar.gz\",\n            \"hash\": \"659095919C5013D8491CDEBC6704F5851EC4276E9C6FE90CB657F1C212546D8B93F25DC012660B0FC46C3C82C28CFD60C1FBA53E4F9A5DFA68663F66D820D1E8\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-osx-x64.1.1.13.pkg\",\n            \"hash\": \"7C66AA51D95195D1095259EA66A568D1D318B44E850120A8F0883795790DBFF1ED8A621B3262019697FF55779F8897590034A968956885ABB5224A04C7561326\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-osx-x64.1.1.13.tar.gz\",\n            \"hash\": \"5D0564E3B6E98C0FB394F6C0D1792B73F2E18C47ECFBB8E799DBBB18693695F763772A197447B41934627E909D4C3ABBEFA7C6DEB0E7BEE2BFE43BA6AFBB852A\"\n          },\n          {\n            \"name\": \"dotnet-dev-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-rhel-x64.1.1.13.tar.gz\",\n            \"hash\": \"9FE0323C059621BB98678031B4E49AB439A7B220EAF31D13C1B67ADAD195A597A4283BF0A08AA60231AAC16C44A9A6918350969E427FBAEBAA5C31526FF218A2\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-ubuntu-x64.1.1.13.tar.gz\",\n            \"hash\": \"FD1B77682713298299CF7EADF400FA315AB0E3DEE297E94DB942377D44275681B1906CA3D87651E76D15B6ADDC176E9CAD8C023A627F366EFF06265D5BEE8A2D\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-ubuntu.16.04-x64.1.1.13.tar.gz\",\n            \"hash\": \"E7A44F4A328289ADFB171F3F3CE47914661669023D86865FC0BA41FF707644C5504CB378D4E5E758CF89134404A56359FB06DD5C966CBF0EBCE50FB41D950099\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-ubuntu.18.04-x64.1.1.13.tar.gz\",\n            \"hash\": \"DD6548EA7E6E390B264EA3DF17BB201CEF4CAC53A5E24B20823DC20B775CEE3EE642153B482FEBE8F8B33CDEF3F53B52AC19B58208E343D1F8912ADB00031A5D\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-win-x64.1.1.13.exe\",\n            \"hash\": \"130A2DC3815696CD94542EBB4EBE2504EA9DBF6E03AF0416E8855B7C436396ED25E630C6FA8E2B688397A6203BF883E8AF5215E0200445C6D8346E6313397357\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-win-x64.1.1.13.zip\",\n            \"hash\": \"360887A17C657C21F93D65FECAC6E19C6294C285C8199A29BAC1DE1C22AD42427B0B557FA19E175B2E5289F8C0AFC7A68A0771ADADBE9EDE6F941B093B056458\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-win-x86.1.1.13.exe\",\n            \"hash\": \"163367B5B3289ABF63A99C549509FAA016C10DEDF2F3DB4FB6534879B4489BB8041BDDDD6CABE6FEF04C7D424A4F83149639C0602B4A0DC93008C5CE60B1D92B\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.13/dotnet-dev-win-x86.1.1.13.zip\",\n            \"hash\": \"C51BE9D28965BD7BFC3125F35AB84BB7653807327A1ECBA522C9967ABC8CFE8126B7DCF60C59D8FA5951752411F2346EA9DF6D855ACF19D1ABD037C37E7A36C0\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.1.12\",\n        \"version-display\": \"1.1.12\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1110274e-cd5c-4b82-8a3f-c71937d603b9/f507bbb5a47ca15cadf0d55efcdb5176/dotnetcore.1.0.15_1.1.12-windowshosting.exe\",\n            \"hash\": \"8E8353B4BA51F62AF7866D166E6A1BD1C3B99B0FE71EEC79B4F10CC3EFFC1B78EB0341F431CE4D5A9F0BD87DD9A94EAEFFC0BDD8D78C700473A7FC111C12013B\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"1.1.12\",\n        \"files\": [\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/83729897-e15b-4b9e-bfff-80d57675b3e9/55aa62a4467a1857f95d1b5b51fdab47/core-setup-1.1.12-symbols.zip\",\n            \"hash\": \"6DC6A817E1CDA44083A5D02B91655578827A6532201307FAD31C100956FCAACEF8BC9E999AEA6E4E4A45972B7B5F3668DDFE28DCEA190AD1091C6A3AB51E0590\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/314025be-f4b7-42bd-a7fe-7021d5d5949d/621672cdc23f62ec92849aec18887b2d/coreclr-1.1.12-symbols.zip\",\n            \"hash\": \"E56534AA917CA8ECAE25ED2E5377BE0DE1F19B0E70B66012EA8F55E4D6BF9FEF69DF1E7807B44283746CF8A017ECE30321D5D86BB34D517F360EA2C25B33FB60\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-02-12\",\n      \"release-version\": \"1.1.11\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0657\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0657\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.11/1.1.11.md\",\n      \"runtime\": {\n        \"version\": \"1.1.11\",\n        \"version-display\": \"1.1.11\",\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-centos-x64.1.1.11.tar.gz\",\n            \"hash\": \"53CD20F2F90A9689BE739C9E4A9C25724CA020703F039C5E2FDF66F7ADBBFABE86C4F5E931EABE92839C31C9FCB0C9851879CAF52BDC3159FB881B6EE52A12CF\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-debian-x64.1.1.11.tar.gz\",\n            \"hash\": \"19C5EC33FE202697A24E07BD67BA900E8480CDA07992D99364EF8A38D88597A19859600655AEC818D3578E87712F7F273317DF4178FE1C82AB91CA536AE549C3\"\n          },\n          {\n            \"name\": \"dotnet-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-fedora.27-x64.1.1.11.tar.gz\",\n            \"hash\": \"B8DBDA414764750405FB4DBBA48621E580ECB3113695DC848845F8752617D423382ABC7C5D89E7EA18F5D6F236104E0DB7F5DF26DBE8ED83AB044A752962534F\"\n          },\n          {\n            \"name\": \"dotnet-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-fedora.28-x64.1.1.11.tar.gz\",\n            \"hash\": \"687D4C942FE95DED2D40A46E8E056F4A8CD77AD63BE8821FD4FB6740BA5444EE84C82333B69EFDC108F43CFA09874DD29147F246BFB84A8C02C040EB9F0F35E5\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-opensuse.42.3-x64.1.1.11.tar.gz\",\n            \"hash\": \"AA6553D37C59F4ACDA97E6B34DCFE4BA5CAE69605BBFB2E2BEFC0E7A537BE8B0CD3DE68F4DCA47F1F911D060EEA1C25C89603CD76502FF0295197F73A7677D59\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-osx-x64.1.1.11.pkg\",\n            \"hash\": \"C5E1B1EBB3E4B4E7A545C0576639918EA0BEB04C8D44FC128AB76896C51E610EF5364B9DF4B48026975E1796C4A8C97DE479C7A802654819665DACD1EBDDDD4D\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-osx-x64.1.1.11.tar.gz\",\n            \"hash\": \"0E2B0623C103D6FE2EBAD9A2139BD34EFBCBF2359AAF885D13596909760B486F9E1D0A2459A686F45D412197DF2A0C2938CAF67F374AD38431AC32F4AA453154\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-rhel-x64.1.1.11.tar.gz\",\n            \"hash\": \"85045C996CAD2417FE870A8F6285FD37B52794305F98FFD2AA66FC0F1DA92F75014235F6D23C5A4F9EA3A0B346652789C808D4976230B2ACC75973BB75ACC4CA\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-ubuntu-x64.1.1.11.tar.gz\",\n            \"hash\": \"02F9C665682E64707EF3FDDFC93ED9A4D2B36544C850E6693B44408C128EF791588A891AC1FD6F2B57012250E5446082D20715833779760AAA74A72811FF4EDA\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-ubuntu.16.04-x64.1.1.11.tar.gz\",\n            \"hash\": \"3819736911F77D0EFB35B91260B29C247A05F26FB8E4BB9BE9E5BEAA4E2B54A8B874FDEACFBBEFC3FE3001E78242D12411AF322F0E647AA4A024BEBA7A342A28\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-win-x64.1.1.11.exe\",\n            \"hash\": \"F62E92C07A663449E96F86684D3018EB4E96DB0F24487DB41726DA079845F2D34B12C69D18FCDBFC2F56C27870FCF6742143C9DD12043F861BBAA9E4741184C7\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-win-x64.1.1.11.zip\",\n            \"hash\": \"F5D33877DBDC75D6F4E4C880C17F98C7427CF76E868ECAC40F65517E892D38A0302FBE5E72E72F566C6BF76021946120FDEF94C8679F7A459FB7FA86AB642F49\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-win-x86.1.1.11.exe\",\n            \"hash\": \"321A3D3941BF6CEE3BC9064BF155600D0541BB12E0AA24FF3E2A255CBDAE4FE6EE2605B5E21D71268E2DF0C1BA886B917D4E4B6E193B2144DBED2700913473BA\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.11/dotnet-win-x86.1.1.11.zip\",\n            \"hash\": \"23234A1E475C21C21B6316D630DEA652A7E5EBC1DE49FF13FA38EB56BCF4F80C53D86D703B3D2D223532689C54F9692F2A64A065355103F1B100D6816FB34338\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.12\",\n        \"version-display\": \"1.1.12\",\n        \"runtime-version\": \"1.1.11\",\n        \"vs-version\": \"15.0\",\n        \"csharp-version\": \"\",\n        \"fsharp-version\": \"\",\n        \"vb-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-centos-x64.1.1.12.tar.gz\",\n            \"hash\": \"3D390AF23218B8FA2B8487BDDF7C0BF8C2F89E110BA09B44B05A31EA269FEB2B56AA17686B3367134F85CFB453CBB9B053741CADB88AB65BFE0BA52A51DD596F\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-debian-x64.1.1.12.tar.gz\",\n            \"hash\": \"C74A4DE40F6B5CFFF5D30E4348C08CDCAAAF5D374804C20BC8572070F362755A030E79029A7B034AA795486220AA76BE6BA7F46BE4B4973ED54D62E9F01DCB41\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-fedora.27-x64.1.1.12.tar.gz\",\n            \"hash\": \"4372FBEB8382F3C28B743A9D663095CF794B1E6914825D4089C8862C2CC754E254BB509E46BF8AC8F73792D4282BBBC8FA187F53A2FFEC6C2B1BA2012AA3AAAC\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-fedora.28-x64.1.1.12.tar.gz\",\n            \"hash\": \"F2DF863F70B6B1D0A4450BED01C21378A37D0EC26569960801412E2C5B610C1E64F08C504E2574C1F8E295A83310F342CB818D1166555A3FAF655F83E89A8751\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-opensuse.42.3-x64.1.1.12.tar.gz\",\n            \"hash\": \"C63DB877056455AC8429B7BBE0B33C98883EFDFF874F883B4ECAC17BA5AAEF2602D008A44DA7DAA54F0E6B33E152B9F9C7A51CB6D082F7F6A7CFEB41652DA149\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-osx-x64.1.1.12.pkg\",\n            \"hash\": \"49461341BDAED7BA64566D6A7293CA41E6443AF23DF47A0C5AEE529A79DEB1D0F8332B24E3AF01905AC2011DFC739B572CDFC2DA077FA8CE39A6CC9FAC3BBEA3\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-osx-x64.1.1.12.tar.gz\",\n            \"hash\": \"108940FB4DF12334F0DC834D5D2D81C9871825A72462547073C0B87BB402E6DD30112B6CCF2BB6D4444B9FC58B848244C69542A923D8F5B0F9C1C00603B98D09\"\n          },\n          {\n            \"name\": \"dotnet-dev-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-rhel-x64.1.1.12.tar.gz\",\n            \"hash\": \"7632F688B3C7AA807E4342881A1CF9425852CED6159EF9F7FF4B1FB284150D1EB4AC8E28439F557BEFA48E9DFCA8BB090204590F4C7F171D3AAB756EF2879918\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-ubuntu-x64.1.1.12.tar.gz\",\n            \"hash\": \"A8F9988E405B7C3479A278B0B61A0BBD9091089591642B986B323709DCB7F4ED94EF0F547CB5EEF6344715A534E1E2A94088655EE8C29AB4762D2541F652F58B\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-ubuntu.16.04-x64.1.1.12.tar.gz\",\n            \"hash\": \"43FF269A3E44B6E418FC691358AADC2E633E949767F10BE247EB0976AC1398E1698C81A667784EB37951ABB53FB02802651BE008CA7CBDBA9FDDF8731ED427F7\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-ubuntu.18.04-x64.1.1.12.tar.gz\",\n            \"hash\": \"2B83CA327A023E93B5D58B83369AF8BBCD088F5DBB9A75354E93E0E18DD3CB849C0DD90EC74BFFC07CFBA52F1A96BC3B9F154F4B7F472CAACB7E2F3E76F3F74F\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-win-x64.1.1.12.exe\",\n            \"hash\": \"654DA8D87058D45EEDC0B44789181BD761A272F3FDFDC8F39E3E0A79946B4B5DC9B6A8F30ED4B127243C216EAA44E1C70174E2111405BA5135AEB19B986B1AF3\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-win-x64.1.1.12.zip\",\n            \"hash\": \"C7C864655014A8E10F8C466C035E766E19E929EFB9F08E95DEA95AB8D995D012687DFE760681F945985CE6B1FB5AF4407E6A122990AE1595DAFF25EED30486AC\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-win-x86.1.1.12.exe\",\n            \"hash\": \"C01B481AE6CC5D681429AA472DD37B2D2F799BF60F84922437806DCE4CDEDBB7DCA7C61063B08B0205DDA893CA1FF141CBD43A5BF753B15124ECC051F73260E0\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.12/dotnet-dev-win-x86.1.1.12.zip\",\n            \"hash\": \"0C8504EF64ACB64F8F24D825228B66EA566D2C98F86E66D3EF60314C1FA34DD1DFF21B4780AA6648CF43C012A15340E64144146A47B583328F7B1F605A21A80D\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.1.11\",\n        \"version-display\": \"1.1.11\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3c1eea43-d933-414e-97bd-3b382f57a78c/7bad96a7fbee33cd15e210090e5413cc/dotnetcore.1.0.14_1.1.11-windowshosting.exe\",\n            \"hash\": \"5E031624CB5B33200F07E2656FAC62DE8B2A398D2ED9B52B23EAEE663C84A9014E2F7DD32955CE044DF03271E6BA593B96EE4721F3F1C89291149A1A3B5774E8\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"1.1.11\",\n        \"files\": [\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9f240884-b588-40f6-831d-520ea6aa30f7/79fe8d1fad809d2f5279e8be29e99dad/core-setup-1.1.11-symbols.zip\",\n            \"hash\": \"B978204B37433C40909B5EDC232A418691DFD67039C4A2F13A94EE2E51B9420859EAFEF68D9798382817A2A339F3AA789C6F2C95A0884F0FC5690F8442D51145\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4b263964-eb05-47a0-b06d-a317f24b1761/666a816963eb785311a2d167526c106b/coreclr-1.1.11-symbols.zip\",\n            \"hash\": \"D4BE2F6B70BF434CD32B9C1F143CD833C6E2D86088C90B15E996DDF0CE8F8C0D763BDE5B5859118AB304AD9E9E085C1ABBF348EAA93E41B4365CFC630ED7A7DC\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fea552c2-723e-4214-afba-39c9416bbc22/d4b83089232f6d2e26b556d87ff2cc0b/corefx-1.1.11-symbols.zip\",\n            \"hash\": \"90825CB21C0E61DCDA68C3A7E36DC8041BDF5D4D1079C304A6D2DE722C571F5C719B62638DBCC35863A2B61BF3C2D416A1808A56A621A758746098244A165733\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-10-09\",\n      \"release-version\": \"1.1.10\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-8292\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8292\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.10.md\",\n      \"runtime\": {\n        \"version\": \"1.1.10\",\n        \"version-display\": \"1.1.10\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/373f14c7-c48f-4812-aacd-36d0a264679c/44e2497391796c22f2123e763e288c0b/coreclr-1.1.10-symbols.zip\",\n            \"hash\": \"930734cf9816d9996363bcc1811e05c626cac8875f9335e86a2d2bd2fc47af9c2880769cbf725ec5ec8641f7a9ac754d141d874298fc22fc5d933ed68060fcf2\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/aaddf89a-b6b9-425b-85f0-ca6777d82960/e8f560ab2700dc7a36e8ceaff71f0f1b/corefx-1.1.10-symbols.zip\",\n            \"hash\": \"1f6fdc3acaf68922a3c83618385341a81aa1c7c981a705f93371ac01ac2c08760c767b67a098900e5eccc403e8c503bf49f9a20203415767a5a45851b07b96e8\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f02b2b5c-35f9-4c7f-b1af-d701bceeb18a/adcd583ab241afac1aef59bf13a4a683/core-setup-1.1.10-symbols.zip\",\n            \"hash\": \"4051672a0d4fc98577896d30fbeae9b8d7ef7d9411c57e7c90d21b1a032ff69f53a89c6bbfc7cc84b3760cb2bab02efdead6e5baa6d37bece906b9d284c274a7\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-centos-x64.1.1.10.tar.gz\",\n            \"hash\": \"18f8fed7d7fa8d54cdceebac4f2528d7a90b32c66be1a98ebcafbbaa7b0c9f4aa412da6e66893bb21bdfedf37fce196b24eb76e5ba4405e5fd352aa80f25fcb0\"\n          },\n          {\n            \"name\": \"dotnet-debian.9-x64.tar.gz\",\n            \"rid\": \"debian.9-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-debian.9-x64.1.1.10.tar.gz\",\n            \"hash\": \"fe3ea31831444bcd4f77ae0b05e217c8f1efaf175605667a76615223b8efbc728a77411c67cc096168881030d7f3c4ab387a2d2633177cf635e9543ac837f01b\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-debian-x64.1.1.10.tar.gz\",\n            \"hash\": \"a89e1a06ac23a0fd51fa6ab8f35b792499af9601c67b6f5ed2334d357ffb1bb811ed94d9e8f297b351b0f1470fbbc0e15d8da87010c11cf9fcc0b91d7b0262e3\"\n          },\n          {\n            \"name\": \"dotnet-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-fedora.27-x64.1.1.10.tar.gz\",\n            \"hash\": \"84a47b8dbd8ab0c3badea337d8a0df22af1c9da7f65b3272488fcb6506eb29924573c4970606bc3df36cd45f4363ef1b4f518a6648a9fa559b1a49abaf460871\"\n          },\n          {\n            \"name\": \"dotnet-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-fedora.28-x64.1.1.10.tar.gz\",\n            \"hash\": \"47845a9a7985e916c0f8bc266c20f87b4cfaa2b61becfa7c9ecfaa5056bcfb147d057038797787ea3f612a520484bfc1131636375a6fd56088c05452acbfc3ed\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-opensuse.42.3-x64.1.1.10.tar.gz\",\n            \"hash\": \"99f1ada1b8ebfc9c5bb84c524235fa61fa421b4758adf46e70bfbf13c730f82eab4d934ea86e810392891d7d45d5caf43bfeb685410a380b4ea2b4719fea0659\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-osx-x64.1.1.10.pkg\",\n            \"hash\": \"035e86ba27bd094f419a8032af1608d1c756c7cb6df3f34b7be4423e9c0fcb5f1b35e823a184086e53fa1f1f1c0dc209acbe2ef1aa2cdd608e3a4cc0f423ff3f\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-osx-x64.1.1.10.tar.gz\",\n            \"hash\": \"fbb3dc3e35cf17e95ad54cf38339a9fc2dc11f650f6a22de52658e2f6dfdbad2b39bce42badd76a7a941d105a343d9c2232dcbbc0b64cef2e3656ff65a59a4f9\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-rhel-x64.1.1.10.tar.gz\",\n            \"hash\": \"40029e8f7c06fdb797683edf6e472f87a48c0d776bafbea3ac6ad03561d9cbf94d011999968a102135b87651a819b27af13ea1c8d05780c8cc3b577411cdc71b\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-ubuntu.16.04-x64.1.1.10.tar.gz\",\n            \"hash\": \"e39f0fe332d26d42a1f7517ceb2624e17cb825aa6c85ddb8b19d5ec79f885b1a343ce28a139a9e863cb6fdd103434e857914003e5716f5aeb3b7d05002daa3ee\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-ubuntu.18.04-x64.1.1.10.tar.gz\",\n            \"hash\": \"5008d2b2f4ad0c0c8dc7e109ebba4b83b897e8e35d7c925754b99879673de811e44deb77051f5f22eb0df016992c02c2c4c6c4bea14ca77cafcaae79fe0f4404\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-ubuntu-x64.1.1.10.tar.gz\",\n            \"hash\": \"0f75dcd87af64960ff154657f1afac7f4cb5d09b2eab472472dd320b01b5efdb2d7ff48b49cc0a933213647cd16392e13e71a3e9c82edc9d561d483a427814f8\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-win-x64.1.1.10.exe\",\n            \"hash\": \"0653d989fd88ec8d94e66825c70134476f405da4e00fa850b42a597fd8faeb72fd389f947444d7bdddf30e600a3d7398f607aaee2e63047c25d620f46f2d39db\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-win-x64.1.1.10.zip\",\n            \"hash\": \"92b2779f9b84b23f9f317c3f5bd2b4c6263b0b99683a696d2637718b79eea0d5468bb836d5b14b37a04f7f44fa2717f3d9e94c69dd969d4a70538f9ab595c9a8\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-win-x86.1.1.10.exe\",\n            \"hash\": \"67e07ddb58f26166633b1db45db2ad73a98cd68f3ac0cd48eff3823da0ae31883fea64e9b4aa39141c83c41fa70085e4d333402f6dbec1f6f794f972efbfb483\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.10/dotnet-win-x86.1.1.10.zip\",\n            \"hash\": \"56de3d4a6145defb859dad2e9623ca7f2fbd990c2a24fdbfc962a78c54df27003b459152d9b631f9330ece90c65e178e3792e80966031476b1f9449815a5fad8\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.11\",\n        \"version-display\": \"1.1.11\",\n        \"runtime-version\": \"1.1.10\",\n        \"vs-version\": \"\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-osx-x64.1.1.11.tar.gz\",\n            \"hash\": \"b827b192398af01bf917a5fc0255616a82f04a95dac8154e681398e7e3ef549d701376bb1c9018dea37269e0406f065fb8e2958e652dfabaf86d5e0bb68b0840\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-osx-x64.1.1.11.pkg\",\n            \"hash\": \"1b8ba4f003fda6725c6c27787f6b750064fa7522d0adb0bbbb1717286b2083550da68a242b840dc9505ca68775785935b0428933eb8b0e89f31e698e41618989\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-win-x86.1.1.11.zip\",\n            \"hash\": \"29a97f3e5e2e8465e4b0c7628a9a02baa0148bfe1a960f58dcdb08b3ad65702cf5367c3f776f47b4df5ce2487955831ed5ab330d4eeabea28ab4f25edb051be8\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-win-x86.1.1.11.exe\",\n            \"hash\": \"88778c12aa4e3bdb696da31d5ae1a03441fc6d0d1860bada75bc604692e3f8c240941a10b8a99eaace2b5a6957bcdafa158f2cfb533d122bffcb2c55b25f351d\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-win-x64.1.1.11.zip\",\n            \"hash\": \"cbf96efd9f6119cad96041e3c55099b98f82252a60a93bbba5f93289bf600c5146402046c3ac79c6e927291e40cb5222171c3ee8cfbc086e635968dfed6e269e\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-win-x64.1.1.11.exe\",\n            \"hash\": \"6e15fa8c9d5b10cc3edb353c5e1ece01a29f7d00ff853cc12f84e33a776df8062c07febbd9659ca46c2adeb005036c231fd7a7592591b6e28c643bdc45084778\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-centos-x64.1.1.11.tar.gz\",\n            \"hash\": \"8665733eba5af02f8af5420bc858ffc4ef73281fb518c0736458f9f1f666f65e57c6a8e2efac5d3e6aca56ac8942a25d1d805ce392fd6f751fb3f0ce821b20c4\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-debian-x64.1.1.11.tar.gz\",\n            \"hash\": \"14f48469ebbc171d111369ea0dbe88ee9aeb74193aabd6e123c97e54ad81fd6352e86c446f8fe68e2db93793de86fbf89a9c682dd7d1d226169e788cd1f3f6a2\"\n          },\n          {\n            \"name\": \"dotnet-debian.9-x64.tar.gz\",\n            \"rid\": \"debian.9-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-debian.9-x64.1.1.11.tar.gz\",\n            \"hash\": \"23e1d3d1863ae8f6bfd450ff238ad7d5929722df6a0492597089c992aa1b223af294386718a711040a4e5f77bd3af97e7924d344e1535d4bc36c640dc6b73869\"\n          },\n          {\n            \"name\": \"dotnet-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-fedora.27-x64.1.1.11.tar.gz\",\n            \"hash\": \"ed2cad6ef471dd787086a249b932569840cabc7d48aa6920ce2d85e2d364a880f1d4c63e1014016a0fd19f8e8f1f93526fa2d710a587fcb27616bfd27844dc57\"\n          },\n          {\n            \"name\": \"dotnet-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-fedora.28-x64.1.1.11.tar.gz\",\n            \"hash\": \"50ba2fa6a319de00857f847c6dbaf49bb4b93a0e7f73824ff47bdabc6862b45f0349c9c95b11dd2caec6fd4ef5ba3e89ad1c5a44e6a66cf600bc906327805a7f\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-opensuse.42.3-x64.1.1.11.tar.gz\",\n            \"hash\": \"13163a1573c1f95ed45a5b445488080cd619693ac7ce8705e13ccfb605ae89d959a82bf42d633a6e65d5242eb508840e9f521bcfb6f30623a6575bfa701e6532\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-ubuntu-x64.1.1.11.tar.gz\",\n            \"hash\": \"a7743d00fad50ec1c9f27ac5b09d1b9d787ac9d4d600179d1d4a5ebb636438dda45ecc85b1a246fd2eed6455dfdcf764165428af38f83a524b4ea0aee82a3366\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-ubuntu.16.04-x64.1.1.11.tar.gz\",\n            \"hash\": \"60906a50e01420c0603127041b5fc628cb064169ed03b6c9727857695021d2713d92cdec322d97340d9e525a1f2f3c727b7125ca07c0d04057196e0e7cf791b2\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-ubuntu.18.04-x64.1.1.11.tar.gz\",\n            \"hash\": \"d96adb429e00052e331215438d0f1f244c830f633f9bd0dcf817f02a2211028ee4ac02e585be440863bdc6afc54fabe3539188c6f5f7086d8a0ced624fb05697\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.11/dotnet-dev-rhel-x64.1.1.11.tar.gz\",\n            \"hash\": \"c79e40710dbf5e0f22d54ebeef4e08ce459a83dd58a9d7a2e56ebb480c780e912d4c8ee643df7f7717bb8544955bb154ca9aa88ec610eccd0d2f712b74668be3\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.1.10\",\n        \"version-display\": \"1.1.10\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b84d0334-d56b-47b3-9da4-c48a553ce286/5079d35485214be3fbd72a4fdf21a655/dotnetcore.1.0.13_1.1.10-windowshosting.exe\",\n            \"hash\": \"a653ae9b309baa4918b1b0c70b2b73dc4b5cf5cca0a6756273c924051973dd354b6748d72177937f851c1f7b2d16aa4d67920294ea2bf98a11768cab04d2f764\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-07-10\",\n      \"release-version\": \"1.1.9\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-8171\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8171\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-8356\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8356\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.9.md\",\n      \"runtime\": {\n        \"version\": \"1.1.9\",\n        \"version-display\": \"1.1.9\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-osx-x64.1.1.9.tar.gz\",\n            \"hash\": \"ff3fed1cda60e82de53de0c95b3ebb97e64f398f54d36aacc52d21f5859d4ab016e81c502c68e511ff2bfa5f97645e7c04eb7b8e66cf2b173419c009492bef03\"\n          },\n          {\n            \"name\": \"dotnet-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-osx-x64.1.1.9.pkg\",\n            \"hash\": \"e3ed92c005ce1d819f140e22a2e4c46e49d53f073d31eab0a3b883006f77a69b960fe97ef0931fd10bad8aff511dfee020af7a305b573436fee7a2067eb076fb\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-win-x86.1.1.9.zip\",\n            \"hash\": \"8c98407232539275bf14960f2e9dc6623aef129e2960a2feda9ae35087f3dd0a3688f54c31ec79d99e7dc233165eff458deaebd6db0e2b0396cbec1b94d5bd38\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-win-x86.1.1.9.exe\",\n            \"hash\": \"cbea84c048d9f83e218b57bdc4ee770127e2402ab63f7ba072f3420556722d891226f2826164980a5c72672b25beb62de7eb4c38082184fd1c81624f240a28e1\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-win-x64.1.1.9.zip\",\n            \"hash\": \"6de9e8db06131f0a77b78ff755350304dd7ae57a8861646bf0abca824689de2e29936667932d1cad025b062b1c818bc5a036d4326f65095448e664a5badc6d5a\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-win-x64.1.1.9.exe\",\n            \"hash\": \"c2016e5afd5e76b2a0735474d067323a1e701a6a4aa99e8dead4155edc98c80ceb36ba643941e0bb4723be0b0c34eb401ad3c8784493c6f14a6c3b4ac49df6e1\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-centos-x64.1.1.9.tar.gz\",\n            \"hash\": \"8be4dbeb3c801d219e68f8cf93400126034c4da37ae28856e690021522a0eff392264f2c44653724f6e8562a7efcfe86f96ea3bf7289c0d6e4ce64ca4cde4560\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-debian-x64.1.1.9.tar.gz\",\n            \"hash\": \"7cc5b2eaa20c1541be3b1affad8b839b1fd9fa97cf3cde5f9e13077581ade08c02f1aa89fce81cfe3fcb143b5207b3fbd71f1a7c0e9a7ac1d7eec5a66bdc3e33\"\n          },\n          {\n            \"name\": \"dotnet-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-fedora.27-x64.1.1.9.tar.gz\",\n            \"hash\": \"2e7646554c8903f6446e07f4b7a6593ee67031c00a65f0ad7aaaba7e21d287dd3fab7609234bae78941861b870701b83c99119af259e6c249530c62f1dad8dc0\"\n          },\n          {\n            \"name\": \"dotnet-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-fedora.28-x64.1.1.9.tar.gz\",\n            \"hash\": \"5e657a221841e220a7601c60ec0ba2436abd442db8d83cc79adc49c67937439c69e9cebf0b7e17073ef3f4585bdbaf21d619db2dd5694c8630a9aa0427b6c057\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-opensuse.42.3-x64.1.1.9.tar.gz\",\n            \"hash\": \"f7919d8d68b10ab00168ad2a82f69fbd661f803bfc941e9ad75037afd02d1b783bb812ed5032ef0350b9fcd0cbbf2219b293a340ffb51cd8f40485a85a3b2a29\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-rhel-x64.1.1.9.tar.gz\",\n            \"hash\": \"3d36fbafbb573dc29533209a6f463bb7e69790b93635854d9862c31c3c991ebf3ec3385b00423eb2fb4a3112ba967b5e18275acfc37a46c8063aab5e3bc2b092\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-ubuntu-x64.1.1.9.tar.gz\",\n            \"hash\": \"e64753b4f81106c6d692c45a51abc45bd700ee52390f56090ab61e25b2811c484bdd87c434e7ca4fe1f0d187d9469c207fe94694ee1d848a72cd1cff01fb01ca\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-ubuntu.16.04-x64.1.1.9.tar.gz\",\n            \"hash\": \"95e050b3faf98e1391605a69353d708231641d69a4f8cac6b0f11bf1736f09a69dfb4b2f8e446a39a22e8141c35a609130870c485af85e7089c109c313f0248c\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.9/dotnet-ubuntu.18.04-x64.1.1.9.tar.gz\",\n            \"hash\": \"fb3ee217813b099f651ef8ded1adc5bbece731ed61add842cc488c5a70dbee50877f4defec71c0089c1c90f3e580e0ea3c3f4d4006c03ecdd568787542d16728\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.10\",\n        \"version-display\": \"1.1.10\",\n        \"runtime-version\": \"1.1.9\",\n        \"vs-version\": \"\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-osx-x64.1.1.10.tar.gz\",\n            \"hash\": \"bf3bf5f22c70c944a9459565626ef935cd15465a189ef9dd65d18560f7e71e44e2ac93552999774eb9a6672530a99baa30347bf3ea1cc7f4ac4d583e1f0e60b9\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-osx-x64.1.1.10.pkg\",\n            \"hash\": \"990d54a53702f5314ad06aab3fa7b6ad0944f2d8863d5ba99f9e86a660fc542378e0fa2cf9aebbd44bdee71bdd37d287409ded40f98d4a43f77e613a3d84fee3\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-win-x86.1.1.10.zip\",\n            \"hash\": \"f46778149a785c0ffed4611966c07668061bd07dcf0c4ebb42e68461aa9dc5a8fe5bcd0d99f1ebb279a7f8269d84dd7f34e34b6c953d63ce1acbc85c4c88b743\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-win-x86.1.1.10.exe\",\n            \"hash\": \"871baf6e9e7ca12a222ad0c9eb6060b933448c58f289defe1723934c66c07b2da6bd6f3495878afb280f188e64fd6200ed18b59ea5659e62be538956cb502a5a\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-win-x64.1.1.10.zip\",\n            \"hash\": \"d0b01871251265b9a07c24e94e2e33f4a5d96ec6165ec0f60b032ce5c35895985e37cc01f73134fc8802a442eeb243b1d1403ebe898d6455907095e5b6b854c1\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-win-x64.1.1.10.exe\",\n            \"hash\": \"d686d2514f45df597791d4fb60ccc272f5d42239e21803dbbf050891f79dbc7c0c8a72623606f312fd0aed0eef7ec5270c4adcfba105e3ec635d27729ff5c4af\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-centos-x64.1.1.10.tar.gz\",\n            \"hash\": \"30af1b4c9d8bd46bc48a52c9a9bee9e3a9a750ffd2308236458acd4cc3b313b8a4ca6259b34422caabd47540e30f5467b8f9237595e49be963d29abbdbfbd0e9\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-debian-x64.1.1.10.tar.gz\",\n            \"hash\": \"f4ac12ff20db06a7c6232c2645f35486d5369201429e3aa9c89a65a3e5f53957cd6ab612c225cc1dd6afebd4dd28695ca5a1f9cbcc812d8fa08635d6cedb1dff\"\n          },\n          {\n            \"name\": \"dotnet-fedora.27-x64.tar.gz\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-fedora.27-x64.1.1.10.tar.gz\",\n            \"hash\": \"89cb369e8205224db77e314b6e236570e94b1d351689dddab5c4fbd63f444389e9745b84c57f855ddef9d693866b1103af6b8d889d6626ccc5c08c6783185d6d\"\n          },\n          {\n            \"name\": \"dotnet-fedora.28-x64.tar.gz\",\n            \"rid\": \"fedora.28-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-fedora.28-x64.1.1.10.tar.gz\",\n            \"hash\": \"91e3bd421cadaf3a3a3e65486a088d9d4b0aaab9f35757068f6f09736cacbe498fc9469aaab9a4d5c209074af253761a8325adf525e991e40c5ffc10acd8ba93\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-opensuse.42.3-x64.1.1.10.tar.gz\",\n            \"hash\": \"227928df186dbd0fcc152f602383efcb66c45e467e5b88e135c725a53f69fbba26debbcb0536629e53b15e0caac65ef3af8db9b242195f3bf517d2f629125439\"\n          },\n          {\n            \"name\": \"dotnet-rhel-x64.tar.gz\",\n            \"rid\": \"rhel-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-rhel-x64.1.1.10.tar.gz\",\n            \"hash\": \"717c07603009c52f996c3e5a90292022ecf0f7d787bd3de202a68b8eb4273b947ee2832aa93a9c9636e8b05f5e65d2051cb4ea1f0a5d4bf9f5d167e732a8c0c4\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-ubuntu-x64.1.1.10.tar.gz\",\n            \"hash\": \"21bb88c12a094aced52d5161dee6d345698210ddc942a597e489c167fdeef4a1ebab90f7bd4bc0c23fba1c912d24e73b333635b70f7571b4ab5d8d8d1ce4b713\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-ubuntu.16.04-x64.1.1.10.tar.gz\",\n            \"hash\": \"89300ca6c519ba17eebe0e425f332bd457c0af49d9ba0cd00f4df14be471bb6d5a0207486e484b106a6b1071fb140b0738f752475dd88d8d7f833e8b8e26da58\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.18.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.18.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.10/dotnet-dev-ubuntu.18.04-x64.1.1.10.tar.gz\",\n            \"hash\": \"38a3cd266f3b1f680e878c981adca1cebe81fbfd161ce4ea083ea4c7809c0a92e03ac33d292e29f43b5ebae18622ea83360c6b07186a6fa35ca6b2ad8450d140\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.1.9\",\n        \"version-display\": \"1.1.9\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.microsoft.com/download/3/7/f/37f3cf83-bed5-4ef1-bcd5-f24f7aef7c56/DotNetCore.1.0.12_1.1.9-WindowsHosting.exe\",\n            \"hash\": \"4d8f7cd4f2f647312d4615d951242cc5d36cbad3ffea48643abd4a9015494e635f7379eb1b46b0384c6a7facbe1b18fe8946fcdf277715d18c270f91d61e9e18\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-04-17\",\n      \"release-version\": \"1.1.8\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.8.md\",\n      \"runtime\": {\n        \"version\": \"1.1.8\",\n        \"version-display\": \"1.1.8\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-osx-x64.1.1.8.tar.gz\",\n            \"hash\": \"d45684320e1b4931663045a1c89d39558bb8a66cc1f1ca8f8f3a11ac8943b8c0176bb5485183c79e94eedacf58e65d9422fe7102e2fc02f0f5349b019303d183\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-win-x86.1.1.8.zip\",\n            \"hash\": \"62f3b0d7d2836979c9cd5da7d598354e6c6adb4fd804a3dc378c09e9065c555218beeff2febcfb5f0fd3a08091d2ab4628a769600f4b3d672461ad0dc7af636d\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-win-x86.1.1.8.exe\",\n            \"hash\": \"ad40c463bbec93afd79aaa734482f979251db874a5dc91bb40562ffa4aa45b5823470b5bbeba2db8e669c01add15b762db2ba113a7ffcc10bda0d6cd7a5d3ea8\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-win-x64.1.1.8.zip\",\n            \"hash\": \"81a9e99544efcb14294b267d6605edc07d857575a4ca628eb805adb8fb5c2644be24bbd3c449e3fa7ed8c28f65b15f64531a1885aec9e9898c5e31ea3a197926\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-win-x64.1.1.8.exe\",\n            \"hash\": \"682ad53a66f8a936fa8664a9be7ba6364acd9dd5983a70ded3020a144f8e13c28d3dcb3b2f1328b1003e474b05ef94c10aa90dde22bc23a5ddbf036157515e2b\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-centos-x64.1.1.8.tar.gz\",\n            \"hash\": \"c7221974f522633babe9b3e35bd984c5c65264f56d1ba9d916dd0c3a1193327e2983154b1eff6585b48c8508b4a4c95c0cc59793c7a0efd6db9b28f8f1e91a8b\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-debian-x64.1.1.8.tar.gz\",\n            \"hash\": \"49161d81fb9068ec018dd3bf6f438e838629933245cf88fe08562f8c8726e24523c628ab2a31dcdf5fe32f8496b009fefe275406318c5072cba85bddfe0a7693\"\n          },\n          {\n            \"name\": \"dotnet-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-fedora.24-x64.1.1.8.tar.gz\",\n            \"hash\": \"b0ee8856ec0d18a6d406a3f21372685eec74d22af81e351eecf78413de7c49602006a8492d775530cb72dd35da9f7dd074e1504158821ea6cc5f92b31fee5de3\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-opensuse.42.1-x64.1.1.8.tar.gz\",\n            \"hash\": \"fef9696d73d91ab7e3ea65c6a3c4d5c4fa4f0c219a21fa9f937e9292c261208a53d22173f72371d3cbddf02ea263ced50a90771effcde7ae26487526919ea9ed\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-ubuntu-x64.1.1.8.tar.gz\",\n            \"hash\": \"f7385d5273c69259fb551adc8b4b6539b858f7f70365c98a6bd181525727cb7330d35716242632e61cf41c015b39ffc1aed8682a11316e77eb90c396b833a68e\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.8/dotnet-ubuntu.16.04-x64.1.1.8.tar.gz\",\n            \"hash\": \"dc9d732ddf5b136c4b1dae873f17d73465b653fd90d97123072541a7d9e243066220e04d204fd5942645f0c06969ad93084dce0400b37018ecc4d6b8131ce3a1\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.9\",\n        \"version-display\": \"1.1.9\",\n        \"runtime-version\": \"1.1.8\",\n        \"vs-version\": \"15.0\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-osx-x64.1.1.9.tar.gz\",\n            \"hash\": \"c6e74231bdfd9d02dee203e37eafa4bd3a99645fdd982aa319800136b3ee9f4d90769095d05337f80ef50722e16d6c66eac87d83154055bd085d84bed31d50aa\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-osx-x64.1.1.9.pkg\",\n            \"hash\": \"002eaebff614b5ce20472e1247cf980c6659ff03913cf1d7fadf675ada651e1fc35caa55fe8d2b0ede6b250adac85bc41378c331088d853f4decd009bf7ee2b0\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-win-x86.1.1.9.zip\",\n            \"hash\": \"3fc2052aaf1cc48b6510dc93fe80207be61eb2a3d86d4032135d00b2feee90999e741ce02367fedadbfc8d630809f32e36fbdf2423ce1b1efaca11f2deb98fc9\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-win-x64.1.1.9.zip\",\n            \"hash\": \"93c4d9113ab25e18428b46fea75573a876f258daa1fe432e167ffaa49ac33c87dde744820ea31c605c94af948787b019048076c6eb879b515b16f9cce9ee5fff\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-win-x64.1.1.9.exe\",\n            \"hash\": \"08f7ffbf28d3a85b3e6e4983bef643a212161271c6ff3956fbdef932038ba240104db6c2deb8b662e5392f1e5b45db2aee2e7da20ee7d800f3b417aabb649d2a\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-centos-x64.1.1.9.tar.gz\",\n            \"hash\": \"259a7dd766a70175634559d08805cbf6c82ee40038ab822ccd8262549591f5492d89467f1d7ac77bfb73dc848c7b68297935b6679aa0a662dd7d8d307631d88a\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-debian-x64.1.1.9.tar.gz\",\n            \"hash\": \"1a50849d5660f8e592ee2c1eadd9aaf1af20f98977edec9a200cb04c652b4f5931d42ce618546229ab67037937802f720d784a015a7658bc765300789843065c\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-fedora.24-x64.1.1.9.tar.gz\",\n            \"hash\": \"e63da30afacf314989fff957ad7fca196651464ec5d7f50c4df8fcce396d76194d949d19a3bb4158d88777ff356a9b3617d95fe4d3ed8455486f4cb2800aac19\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-ubuntu-x64.1.1.9.tar.gz\",\n            \"hash\": \"874295a7daff58ef0e7a06aa63a9f04a344b8588888b09c50ee25266e9092a87f618ef99c8d26defe1a44e1c883bd4debf7cb52e0a5fd361cb5a296da3fb688c\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.9/dotnet-dev-ubuntu.16.04-x64.1.1.9.tar.gz\",\n            \"hash\": \"5c1df91d95f23c1b9891f8f6c7e0a7745010287fdc3a4c18122f0d922261cc53f9040eac682b639f9267026490d522af33298d32519282e23ce59f9a7db2a25c\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.1.8\",\n        \"version-display\": \"1.1.8\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/1.1.8/DotNetCore.1.0.11_1.1.8-WindowsHosting.exe\",\n            \"hash\": \"\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-03-13\",\n      \"release-version\": \"1.1.7\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-0875\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0875\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0808\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0808\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.7.md\",\n      \"runtime\": {\n        \"version\": \"1.1.7\",\n        \"version-display\": \"1.1.7\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-osx-x64.1.1.7.tar.gz\",\n            \"hash\": \"b4068d5551017208879f6e9fcb887d630b13e5bca992478fb543a291f42d3bfc6071f8821aabcd0baa1f9ef4d18f22dadfb9218f8eba98c63c01bbd70339a7d6\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-win-x86.1.1.7.zip\",\n            \"hash\": \"623dd7438b925c7063820a60e1fbe09011cc429ee325e519462fd537dfb17b53402b896aa89ffa09f695866166a410ea28cf1a8e92a9749ffc924c64034ca804\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-win-x64.1.1.7.zip\",\n            \"hash\": \"43a414489f2bcc492a7b8874e0bf8d2693cf2b2bbe0720bf9e574f81e2537b1c509a801b56a6e49d755a9ee67da0d18a10a303a1acb23b69819898238c9ad2c8\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-win-x64.1.1.7.exe\",\n            \"hash\": \"16c1356c809059a767f17156fa2529cdf1ccddee0d6d18b3a10899e7c4de6a843fd4f1ef553297a329a6c76b8c22c9335a47c32072e8ef4860f5e9c627b003d6\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-centos-x64.1.1.7.tar.gz\",\n            \"hash\": \"cd99355697c5afeab3974b6b1a4ddf49ea74a4a8b08efc54ed9b6a561b665a6d1c59254965cfe59f8f5eea00d93bfeaf9684efc70dc4e339d6976e11f6104a6c\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-debian-x64.1.1.7.tar.gz\",\n            \"hash\": \"08e26b44547025e6b3edc75e6ad75c5a81eb4f6dcb0eda0452edaee1e66d04d2fa84914842f495d978cb9b8917eda192d0041e0548232a014e0e919e21d7d1a6\"\n          },\n          {\n            \"name\": \"dotnet-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-fedora.24-x64.1.1.7.tar.gz\",\n            \"hash\": \"22d2d6b1d3ee21ecfb256a0fa257d1a14a83689b63f0560ec58c88ddfa33aeff9800c5c62dda03abeff4966247d50a80b76db5ed3b6930448fd576b85e36f229\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-opensuse.42.1-x64.1.1.7.tar.gz\",\n            \"hash\": \"945abd08d56e1f81bd162af8ddf881a920a3f6d42790d5536cc6763dd82b8b0320125b9970ddc4d866657f2d07461b744b830f2d09ecc57d0bf0c120455e5206\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-ubuntu-x64.1.1.7.tar.gz\",\n            \"hash\": \"621158af199e26c6fe9eba69dc934397b644db58ee63dd815634fc6b7bbba38b244ecce957aced307547df8e4725a6aa7a3039ee2e1eac8974c0248f662892f8\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.7/dotnet-ubuntu.16.04-x64.1.1.7.tar.gz\",\n            \"hash\": \"6e43dec9222b2d72e9ab763ee00e6f0244b73e9d02d129846afae00a474cf93656e85c5434c69b580015661f9bc5cb8fbfe09bb1f98d9df9dc6c5cc5921f3359\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.8\",\n        \"version-display\": \"1.1.8\",\n        \"runtime-version\": \"1.1.7\",\n        \"vs-version\": \"\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-osx-x64.1.1.8.tar.gz\",\n            \"hash\": \"99ab5361d7f082e269c4262acf56e851932cf45ad2dd7077a4759817c627392917900d15455dd4c51d44c341e40a3cf5e9e52b0f8e7736e58345d5a6fcda3d41\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-sdk-osx-x64.1.1.8.pkg\",\n            \"hash\": \"39f04d5bb258915794b91f0c39486f8a405fbff3bcd54524243f6685822824a605da9f2c694c0a966b5f27cc567346af57ba25d5381ea9fcbee3ddb7273a7f8b\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-win-x86.1.1.8.zip\",\n            \"hash\": \"d1acec19ef873b1b11c19412396e6f9b6388a072f3639091629966b1b28622558498786a547ca8ecf262f61868ce1f028e8308f0b18cdca20d174942c317c1e9\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-win-x64.1.1.8.zip\",\n            \"hash\": \"151ade63c624d2c34b095ea19c382b20cc746efa5f41fc0feca2239896ca877b7fd8b1677ebf49aca750a07d5d0a4a5091649a70851d03657590c6f6f110434c\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-win-x64.1.1.8.exe\",\n            \"hash\": \"278304c8ef455e3c0d24d5b9dc3c2d0019b1a429d968e4a39f499b8e63636685ef6cfef38a50b954fa24189c3421f9a3d157a0113064af09bc55f66f391a0b8f\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-centos-x64.1.1.8.tar.gz\",\n            \"hash\": \"2c81764aa67f29c7eb9577f38b2dce4fbf356805a6b652bbc45e7f869b9fce63a474c0f5d806df229b9d77525b0b4709ced67a3a9b88b9e985490f25ea49caee\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-debian-x64.1.1.8.tar.gz\",\n            \"hash\": \"c669b96f35082df356673bd602e71eacd95282dd036755be9682be3b3ef96b4ef69026d16c981122d6b382c517ed7739a339eac040064a7d4dd3403306faedbe\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-fedora.24-x64.1.1.8.tar.gz\",\n            \"hash\": \"961b48edb6fed6fd8fa9eb8cb4a384c6549c896316bbbd38911a50fdbe4bfa98b53c4a107e7eee1712b556f51d60bd4844d314bab31c3cf70760b4ce83a71a26\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-ubuntu-x64.1.1.8.tar.gz\",\n            \"hash\": \"640165e75f1f042e5f5ec9d13a7a28464703bcabe4e46683d5909eebeb2bc8cd4227f652ca66d6e7b3d8287718f1a1f6dcfdd5b94c371114817ea481f4aa4b3f\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.8/dotnet-dev-ubuntu.16.04-x64.1.1.8.tar.gz\",\n            \"hash\": \"b80c9298366f01e2472de8d11094c52e5c2a197aa4b50e1ead83e6a60e58aafda652ff5afbd0178b8c57e98c2e27c2dba432ec41ba115b61be3e9a43bdfbc6e6\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.1.7\",\n        \"version-display\": \"1.1.7\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.microsoft.com/download/1/4/1/1416E22E-A1C5-48E3-81EF-AFE86CDA9C78/DotNetCore.1.0.10_1.1.7-WindowsHosting.exe\",\n            \"hash\": \"\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-01-09\",\n      \"release-version\": \"1.1.6\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-0764\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0764\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0785\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0785\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0784\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0784\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.6.md\",\n      \"runtime\": {\n        \"version\": \"1.1.6\",\n        \"version-display\": \"1.1.6\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-osx-x64.1.1.6.tar.gz\",\n            \"hash\": \"216d4489d6d0f6cb5c1fc08e36fbf07ec051760abdeed4027dc3a21239424f54a958ae46d0e2428418a57a0cd5273adac46d63725369a8b9a0ea99a32589c90b\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-win-x86.1.1.6.zip\",\n            \"hash\": \"03809a2c1ef3b75e3753e92c82063304915132991f42f2ad3576e2076fd3b56dbfa586896b6539bdf1c3667f09a32fc745df683b3fa38636d3027642b082d45a\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-win-x64.1.1.6.zip\",\n            \"hash\": \"d1562159c16764d8313cf039e8fb59aa777acf9a479cc34db9665022053765f4608e6633d6fddb490aa40e2fdfe6248fc4d29265958648029d07a5bd27fe4a80\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-win-x64.1.1.6.exe\",\n            \"hash\": \"57a4beaf70dcf38c055013a9595970c1e5a997f48a8091553c5cd69e3b7cfeddd3d2f2848007e0319ba546c97a5e211c46a59421c6e8f0964b8db1d9523ce9e5\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-centos-x64.1.1.6.tar.gz\",\n            \"hash\": \"e5cf8a038a613241426a878751fef23fefac674206153fc9e7cf12e5f063eae2916e74a9a9a51b18075aeabca62f4651d6ac5b466cd60feaeae6a721eb6de3d6\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-debian-x64.1.1.6.tar.gz\",\n            \"hash\": \"54c1d4a3a0125f177f4e61e4a3c4d447cf2ee18e436e2e62bc435d081b6cd9d9255be7130a792d4a667e2fa8940f8e33ad9596f1c08cf8f02340aa6cd3d4c361\"\n          },\n          {\n            \"name\": \"dotnet-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-fedora.24-x64.1.1.6.tar.gz\",\n            \"hash\": \"bcc570398f9a3148dff1da6627cc4b6ca397806db74b80881c4719ff815ac09a35298eee59c19b8bdfce05c8ce6c71ac4ed172558127eade4c680f6f58755243\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-opensuse.42.1-x64.1.1.6.tar.gz\",\n            \"hash\": \"83a282254ca690de5e10e230614e28b48a18b58ba0ff390ca15d06b88bde5ea786c1915055e3d78d2a9e10c9164dbc4562d4a0ca650a24591435e8c584900505\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-ubuntu-x64.1.1.6.tar.gz\",\n            \"hash\": \"503e3d9e3adc87e90114e2e54fab7cc14c94f9df68961e77da996f293da8c8f50cb5b9a089ba7cddd2cd09eed3c3c357e4a8b52eda0f0d7f5e220fcfe41df140\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.6/dotnet-ubuntu.16.04-x64.1.1.6.tar.gz\",\n            \"hash\": \"bc8aa9990a99df631338af0d796ca0e51e452001e0593e22d3835621a45f7e3404f1214395e36cf64793d829702dddd4724c66ad841069dcac495ea4b57375db\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.7\",\n        \"version-display\": \"1.1.7\",\n        \"runtime-version\": \"1.1.6\",\n        \"vs-version\": \"\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-osx-x64.1.1.7.tar.gz\",\n            \"hash\": \"9f5430391f664c942d49d7d1371bdeedad1bf41a21fb9d9afeb5557ce518a494634b750631dbe019e8128296e6d0ffa438853561919566451f42744a53e0b6b7\"\n          },\n          {\n            \"name\": \"dotnet-dev-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-osx-x64.1.1.7.pkg\",\n            \"hash\": \"080313d0b501502829e043f417fb2ebcced2aeba7640b84d83175dba25faea7219ee2f301aed7e5db857300e600e2d6b42a35cacb5d7bebf7569df193318666f\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-win-x86.1.1.7.zip\",\n            \"hash\": \"f465d15d914fd2daa30f5a5fd9725d94c664f5bac47779151ae54e5f9d9b61f49fa95dbb16317b137a06e80b42bf766f89051fe9ca332567bc94c08a1868d381\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-win-x64.1.1.7.zip\",\n            \"hash\": \"c79605ced9c80e21609faf9622766b31a49462b06a43dde9907ca56bc1aa7e37ee5cf48cd8bafc561cb3edff5ff6be97af2fb0f138cf22c94f97e587e8f94c7d\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-win-x64.1.1.7.exe\",\n            \"hash\": \"94daa61ccebed6925f94b921af74ca3fd62c086f4680116fb4ca97c03c79b50910dfff5a7f4e957d72fd8f6d27bf07223cb29588b107181adbe3e9ec641186db\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-centos-x64.1.1.7.tar.gz\",\n            \"hash\": \"1b42158cfb4555f271e5fed62d62678cfea56c32604c8bbb8b7841723c6a5d48100bab27328d38ec6c92bb779099cc4ed5b05294c00830a95037be9a628e3ba2\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-debian-x64.1.1.7.tar.gz\",\n            \"hash\": \"5cb00f5bfc4175533956faf7bfebc08917466ec8912c23d6a57a23634b1a950df1f82587daf9a9859f6fb6f3273614990f499e81be117f460dd60b297d628c52\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-fedora.24-x64.1.1.7.tar.gz\",\n            \"hash\": \"f667a5b377d94a00020fdc547ec6cdce62cddeb4ecd1134bddc34ee10acbead588862a7c4ba25deecbde7cb7bf8daaa90a9d2891213a862cd011f68579fca6b7\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-ubuntu-x64.1.1.7.tar.gz\",\n            \"hash\": \"73b59f2d247ca7960360fdc5c849dfd641ae8c8a5314d18c0a972fe9480e64bc2faf9051deee7d8568bc4cf073ea9e48cff88ca3fb2d76a8c7a10f9fb5ccf5bd\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.7/dotnet-dev-ubuntu.16.04-x64.1.1.7.tar.gz\",\n            \"hash\": \"743b6fcca6a5831ea31710ef75136188385b5780b6e5eded24ad48c424ec13070713831c32c9b451174bacc27f012d7c90f8492c745894c0b3fda3aff5c11396\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.1.6\",\n        \"version-display\": \"1.1.6\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.microsoft.com/download/A/7/E/A7EF2AFF-F77B-4F77-A21B-0F7BD09A4065/DotNetCore.1.0.9_1.1.6-WindowsHosting.exe\",\n            \"hash\": \"\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-11-14\",\n      \"release-version\": \"1.1.5\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2017-8700\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8700\"\n        },\n        {\n          \"cve-id\": \"CVE-2017-11770\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11770\"\n        },\n        {\n          \"cve-id\": \"CVE-2017-11883\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11883\"\n        }\n      ],\n      \"release-notes\": null,\n      \"runtime\": {\n        \"version\": \"1.1.5\",\n        \"version-display\": \"1.1.5\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.5/dotnet-osx-x64.1.1.5.tar.gz\",\n            \"hash\": \"ac538259ec3ac7cad13f9b4d3e1303e70b5a641d197e4bddbcccc4b91ca170fbdb0cc17fd9224efdb14c767b94d3c37997440e3e51750b8bdfb88060d4532516\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.5/dotnet-win-x86.1.1.5.zip\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.5/dotnet-win-x64.1.1.5.zip\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.5/dotnet-centos-x64.1.1.5.tar.gz\",\n            \"hash\": \"d32e844c01fea03cb1906fd9d00b91a64f21646993748f8569d02ffeed28dc89a1eedcff60eeaf1ebbb5c7b0176ce360b929582f48725c13415b0a8f37d992b6\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.5/dotnet-debian-x64.1.1.5.tar.gz\",\n            \"hash\": \"2d8e2a4f17f6986d1d1cf5f8191aa94f858e2121efa9283a97ac5ee6c8b2ed8c169f0312c6797e1fbcfdb981f501f38dc710ca95898d63a859597081523df095\"\n          },\n          {\n            \"name\": \"dotnet-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.5/dotnet-fedora.24-x64.1.1.5.tar.gz\",\n            \"hash\": \"2d813462072ad7cf31529835d6be9afa55cc47c08b3fa749de337f5f214eda520d9b071aa67a2325c9f16711366a58380caee5c76372a747b4fda550df6dfaef\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.5/dotnet-opensuse.42.1-x64.1.1.5.tar.gz\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.5/dotnet-ubuntu-x64.1.1.5.tar.gz\",\n            \"hash\": \"9c3d08ad516ad85ce9f5ce0118b550232d5b67f8466715ccfda8b98ab350e5535d66573525691a58dd2499bfb32446cc689d713efb05ddf672af18b862ecab84\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.5/dotnet-ubuntu.16.04-x64.1.1.5.tar.gz\",\n            \"hash\": \"\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.5\",\n        \"version-display\": \"1.1.5\",\n        \"runtime-version\": \"1.1.5\",\n        \"vs-version\": \"\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-osx-x64.1.1.5.tar.gz\",\n            \"hash\": \"075daf8361e6d7dbbf079b71b2b2a804a96dbde9fe63a665afd02a5e4f1fc67dc7d37e8edd83766535f8f34ec5bb2ad82ef96effb3568d24d25ea3074068bf5c\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-win-x86.1.1.5.zip\",\n            \"hash\": \"88d69079274fbd88fdc9b6bbc7042d0be06f225370d42ed82ec73cf97521515a18631cc4b4b9dc8283a4d3e886de5dc438966e23a22ffead175815541a638f91\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-win-x64.1.1.5.zip\",\n            \"hash\": \"c8df85c9c073aaa1e7a57ad6d56c190869466587991e1620cefb203482de09a298ca0bee34446dfc42fd51c6f1990173aa280b57cad2ee40db03c71ea199dc75\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-centos-x64.1.1.5.tar.gz\",\n            \"hash\": \"083a326668530e7f380246314b33d4a08df6921b9e8e5251d26f97c073f86f6128ad6f0b56b8e7ae3f0677e4aa2c4fdafc6a68a5ef6fea5c5fcff1f20982f788\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-debian-x64.1.1.5.tar.gz\",\n            \"hash\": \"15b177092aa44584e2ffed9a5650c4bddf5938ac958f25d156689eeb1927745d52aafaec79d3a2ace9bf9fb85d9295dd59fe81beab1b787acfa5a7c380ef8016\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://download.microsoft.com/download/C/5/5/C55807F5-601C-49B1-B9BB-1BE03EB83E0A/dotnet-dev-fedora.24-x64.1.1.5.tar.gz\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-ubuntu-x64.1.1.5.tar.gz\",\n            \"hash\": \"6024e9e5ca8a986c6a63ba1d4d89234b682157f2814b379cd8d2890699f5d4acc197a5ae7204f136fd1bc2bad15c9896be99df6648a863dd1fb8e4758ba0daf5\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.5/dotnet-dev-ubuntu.16.04-x64.1.1.5.tar.gz\",\n            \"hash\": \"0f666b7cf806cde0c5d93788bbf6dd4d808417aa0c1bdbdb1453d8046262188f8e5dabf593076d296e60ad77f34d858efd3137045943cec54e6d61ccf2556ec0\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-09-21\",\n      \"release-version\": \"1.1.4\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2017-8585\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8585\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.4.md\",\n      \"runtime\": {\n        \"version\": \"1.1.4\",\n        \"version-display\": \"1.1.4\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.4/dotnet-osx-x64.1.1.4.tar.gz\",\n            \"hash\": \"58e93d00ddcaa14d58150f923b700c6190c87b1609d59040a262625853eae136\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.4/dotnet-win-x86.1.1.4.zip\",\n            \"hash\": \"265ec7d4b178e5c03e4b8250d0f368de714e3205c90180de71a3c514251d8eaf\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.4/dotnet-win-x64.1.1.4.zip\",\n            \"hash\": \"51a363fb5378f461e67793954e452cbdda4fbf825e7718e286c5ac4250c48b77\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.4/dotnet-centos-x64.1.1.4.tar.gz\",\n            \"hash\": \"4b35bacfbf56c22e389739a4750b4773e51907944d4e24e4f5fca0b8355a83c4\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.4/dotnet-debian-x64.1.1.4.tar.gz\",\n            \"hash\": \"8b3f0cd9a100a41436f316952128c0bfbd9bafc2808734599c643345de2e5304\"\n          },\n          {\n            \"name\": \"dotnet-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.4/dotnet-fedora.24-x64.1.1.4.tar.gz\",\n            \"hash\": \"1897ef8729d3356b6f3b19b20ccdb744d49c78f2b05014282b98e7ce53e0a3e2\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.4/dotnet-ubuntu-x64.1.1.4.tar.gz\",\n            \"hash\": \"7948d90eac05b56a7c37a8ac37a5c83012843feeaa0194dfb079a90db9717e6c\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.4/dotnet-ubuntu.16.04-x64.1.1.4.tar.gz\",\n            \"hash\": \"fe412836910718d3f91ea5ba815a116f5fa872ac0a9ff683db2d8670aceb9b56\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.1.4\",\n        \"version-display\": \"1.1.4\",\n        \"runtime-version\": \"1.1.4\",\n        \"vs-version\": \"\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-osx-x64.1.1.4.tar.gz\",\n            \"hash\": \"fee47d9c7d1b3674e61e586ba81f982c2b039f427b41852e11241ea1781c964e\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-win-x86.1.1.4.zip\",\n            \"hash\": \"a7512497ca34fa81c2c7049db3722b950ecf56fa224562cfcddcf53d4a6d84e5\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-win-x64.1.1.4.zip\",\n            \"hash\": \"c8227d50379eb8617dbd1a647a6c888e1e6674cd46b88e4d44997fecfaf671c7\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-centos-x64.1.1.4.tar.gz\",\n            \"hash\": \"3598ec336712b4265ccfa7574bed0d3966f0e747fafa6e5602d0ceb2dd587af8\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-debian-x64.1.1.4.tar.gz\",\n            \"hash\": \"fa05f30c5a95e2aadaf76e1a402c157b5ce4e8f102fb00a2f8652869a146379d\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-fedora.24-x64.1.1.4.tar.gz\",\n            \"hash\": \"682ca1f5d772adc93248c644019aa84f4baa9c7589ebf2dd07d5cbca8f708581\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-ubuntu-x64.1.1.4.tar.gz\",\n            \"hash\": \"9ac4b6d9f163c02d8ab4b3c1e86fd52b9cc01fb560f976cd61f0664a3c9fef3f\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.1.4/dotnet-dev-ubuntu.16.04-x64.1.1.4.tar.gz\",\n            \"hash\": \"e806a106ef671efdbc0d3fda3218560a72293e3160e4384523914219937301ed\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"1.1.4\",\n        \"version-display\": \"1.1.4\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.microsoft.com/download/6/F/B/6FB4F9D2-699B-4A40-A674-B7FF41E0E4D2/DotNetCore.1.0.7_1.1.4-WindowsHosting.exe\",\n            \"hash\": \"\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-05-09\",\n      \"release-version\": \"1.1.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2017-0247\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0247\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.2.md\",\n      \"runtime\": {\n        \"version\": \"1.1.2\",\n        \"version-display\": \"1.1.2\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-osx-x64.1.1.2.tar.gz\",\n            \"hash\": \"620a98213e423301fa44abfc1ca0b15e0bc538e676cbf0344c711abef5ed4231\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-win-x86.1.1.2.zip\",\n            \"hash\": \"31e49e6ae491795c99221307dc829bbb57e645d568a94820a031688b6d8df4c6\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-win-x64.1.1.2.zip\",\n            \"hash\": \"a4ccb23a6cf2ddf9894cb178ce8e69b5788880a1e3d9d659f26fb914a4bc2988\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-centos-x64.1.1.2.tar.gz\",\n            \"hash\": \"49c54129b39a4a873074b80691733d68ba596782f411cc6565d601aeb6229d1e\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-debian-x64.1.1.2.tar.gz\",\n            \"hash\": \"26f6a2e247dd0b9ac4003d12cf1bd8647985255fdd7659b60e36a7a26fce15de\"\n          },\n          {\n            \"name\": \"dotnet-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-fedora.23-x64.1.1.2.tar.gz\",\n            \"hash\": \"5cb04a3a7f8fd780af87cc6e3273ade1fe9803b7518228999649fcbc95528278\"\n          },\n          {\n            \"name\": \"dotnet-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-fedora.24-x64.1.1.2.tar.gz\",\n            \"hash\": \"96204460bd7998e78ad2e84b1eb6821bff97c4a3dc2bb7a79cf828c5b6dfa37f\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-opensuse.13.2-x64.1.1.2.tar.gz\",\n            \"hash\": \"24be24522531d560513c54fe4b08116a48b81be27e0a43c39f150b8e71a816d3\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-opensuse.42.1-x64.1.1.2.tar.gz\",\n            \"hash\": \"4112308f5e4bbbf38051140ee7bd47df79d4eee40d65f67a0fd1b14782da8166\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-ubuntu-x64.1.1.2.tar.gz\",\n            \"hash\": \"9032e88d43d28004ac10618ef0abac502cdeb02228297d1b51dd67c7e40cd3d1\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-ubuntu.16.04-x64.1.1.2.tar.gz\",\n            \"hash\": \"c003ccc3942e327aed42c395bdcfacfc703f5adc5ec69246588a8aaab52b1513\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.10-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.10-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.2/dotnet-ubuntu.16.10-x64.1.1.2.tar.gz\",\n            \"hash\": \"0a4d4061931e0154c9186446dbc8d4c3e69ba49537699be98185d55fc24a1b56\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.0.4\",\n        \"version-display\": \"1.0.4\",\n        \"runtime-version\": \"1.1.2\",\n        \"vs-version\": \"15.2.2\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-osx-x64.1.0.4.tar.gz\",\n            \"hash\": \"79ad510280c3e6bdf67c3164c9cf6cdc7536d809d584e471688400b1fb3bea2e\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-win-x86.1.0.4.zip\",\n            \"hash\": \"648f74ec818f5969035afec3cd4c2a0d9579539710dd4ccdfec806727cf0f8a4\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-win-x64.1.0.4.zip\",\n            \"hash\": \"82869baef9e010415583174b0b0be95a2cb326dfd36bb32ec270803a9c8196ec\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-centos-x64.1.0.4.tar.gz\",\n            \"hash\": \"8e952982414e192cff5980a6190cfdcfef543b59c0be65e5c9d86dc7d4a8ea4b\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-debian-x64.1.0.4.tar.gz\",\n            \"hash\": \"eeb1baff3999e48e725ad22d7fac800363acec56b122369c37979f87730961a5\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-fedora.23-x64.1.0.4.tar.gz\",\n            \"hash\": \"46fca05c426e0d13cb2ad5eb5cbe268c2a469cf574e6731d9cc8dacac9c02b79\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-fedora.24-x64.1.0.4.tar.gz\",\n            \"hash\": \"f3f049e099c4ea73342ec6448cb0eef61d81cfca7c476b989fcb0f09d918c31c\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-opensuse.13.2-x64.1.0.4.tar.gz\",\n            \"hash\": \"49d599df1f2b6b173e4943a3aafb0456c95086ad2bca143c346fa28fe87d30bb\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.1-x64.tar.gz\",\n            \"rid\": \"opensuse.42.1-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-opensuse.42.1-x64.1.0.4.tar.gz\",\n            \"hash\": \"91f133a77ba5ba9cd3ec5b243ce6c69ceb5ec164b2ff1fd256a28fbb73d6991e\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-ubuntu-x64.1.0.4.tar.gz\",\n            \"hash\": \"e3823b9f964d27d1434f0e52b93fb1b6a65e83fb275e01f65ecbe63a4242fbe5\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-ubuntu.16.04-x64.1.0.4.tar.gz\",\n            \"hash\": \"6fb4ec609b00bd65881f864249741d6486ba19da5b76cfcb60d03df8799b6ab7\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.10-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.10-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.4/dotnet-dev-ubuntu.16.10-x64.1.0.4.tar.gz\",\n            \"hash\": \"9e784b554a9cb68df9ce541cc220dafcb71b185837e05420c182e4a496b68f47\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-03-07\",\n      \"release-version\": \"1.1.1\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.1.md\",\n      \"runtime\": {\n        \"version\": \"1.1.1\",\n        \"version-display\": \"1.1.1\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-osx-x64.1.1.1.tar.gz\",\n            \"hash\": \"a809eb4f47a8468edacfab8dfd9ddc1015a2e4ec3643fdcedd4d7c9ab3f028f6\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-win-x86.1.1.1.zip\",\n            \"hash\": \"0c69428e55782603982b173bc66eb24fbf80f9b01ffdf8a00f012beaab3c4653\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-win-x64.1.1.1.zip\",\n            \"hash\": \"b0f7fc902308b98fa8e202081884d310a94a93264a1f5beeb4632acccf2c0bb2\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-centos-x64.1.1.1.tar.gz\",\n            \"hash\": \"2eca7129424c50bd4a312bf519e5f3add2398cc11f53e4032e233b787528c3e4\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-debian-x64.1.1.1.tar.gz\",\n            \"hash\": \"6359fcd443c686476c6b55bfcd5fdc214a64f8f399bfc1801e4d841c4ca163de\"\n          },\n          {\n            \"name\": \"dotnet-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-fedora.23-x64.1.1.1.tar.gz\",\n            \"hash\": \"f5813c020d0b5c507ab857a168f7faea54f745ff8b34404b85f8dc5c03aa3537\"\n          },\n          {\n            \"name\": \"dotnet-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-fedora.24-x64.1.1.1.tar.gz\",\n            \"hash\": \"060d05dc338cb722cad94e379e354cca174309b789b686cf4e2cdfed2c238503\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-opensuse.13.2-x64.1.1.1.tar.gz\",\n            \"hash\": \"86180fb3d67293be760abbe6a28d73a7717a2910852e8b047ba771d0fecd3430\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-opensuse.42.1-x64.1.1.1.tar.gz\",\n            \"hash\": \"97535294b174d09d685f46687d30ebc7d929afa11ed99fcc1645954b1cdeecb3\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-ubuntu-x64.1.1.1.tar.gz\",\n            \"hash\": \"bd2807bf3d5b316bf7360bddab276bc4af13106de406491a41a4fae522d1c0be\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-ubuntu.16.04-x64.1.1.1.tar.gz\",\n            \"hash\": \"e1737cfc3df8336d7469e1c3df431abcb56f94d021a941dc33af9a0d090f512c\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.10-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.10-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.1/dotnet-ubuntu.16.10-x64.1.1.1.tar.gz\",\n            \"hash\": \"d2d439fd7e544e120db4fb7246ec99cad199ad8d827a78e3e4157f8e331aa066\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.0.1\",\n        \"version-display\": \"1.0.1\",\n        \"runtime-version\": \"1.1.1\",\n        \"vs-version\": \"\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-osx-x64.1.0.1.tar.gz\",\n            \"hash\": \"f030188673ebb71fc3bb3a089504c2079cd8176e669575b5992664b405194366\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-win-x86.1.0.1.zip\",\n            \"hash\": \"3a8d7316dd774d54e27a332c5d1e73d7813fecd10b670249f480ae917226e444\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-win-x64.1.0.1.zip\",\n            \"hash\": \"e729afcf3cc69f17ec7968468b399c843b8b8327523e62c03450e4653115cf76\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-centos-x64.1.0.1.tar.gz\",\n            \"hash\": \"08759c53aaf335bab14f5bbca89836bd9d4350c1b6392d32e51b37d00dba9eeb\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-debian-x64.1.0.1.tar.gz\",\n            \"hash\": \"84601397f83adaf2028653b73f27093f66d4c763dae5c770743351975477ee1e\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-fedora.23-x64.1.0.1.tar.gz\",\n            \"hash\": \"dc6a70d11a574f9745b52a5392c384453ffdadd799ee59c417c308bdc63e86c3\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-fedora.24-x64.1.0.1.tar.gz\",\n            \"hash\": \"e98ffe4443bed058eaaeba7190b3f136128757799d28ffe8ad985aeae92970b5\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-opensuse.13.2-x64.1.0.1.tar.gz\",\n            \"hash\": \"2dff951b2db33145ba51e2310e85dd4ffad83a501eb6750365f77ddf7d3d8b5f\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.1-x64.tar.gz\",\n            \"rid\": \"opensuse.42.1-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-opensuse.42.1-x64.1.0.1.tar.gz\",\n            \"hash\": \"4c9d4eae74f04acf563da9ee3f1e846e9f2547ebd552ae874d90e897caf85e21\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-ubuntu-x64.1.0.1.tar.gz\",\n            \"hash\": \"4d4399e090c436e7037dc393373345aa0521b2acfa325dec80771f7adb448daf\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.10-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.10-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-ubuntu.16.04-x64.1.0.1.tar.gz\",\n            \"hash\": \"4a59413a0b2ba8914ceecb4a505dae4f93ede10cae4246d714178b11cbe32a2f\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/1.0.1/dotnet-dev-ubuntu.16.10-x64.1.0.1.tar.gz\",\n            \"hash\": \"828af612b3e691f27d93153c3c7fd561e041535e907e9823f206ccab51030ecf\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2016-11-16\",\n      \"release-version\": \"1.1.0\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/1.1/1.1.md\",\n      \"runtime\": {\n        \"version\": \"1.1.0\",\n        \"version-display\": \"1.1.0\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-osx-x64.1.1.0.tar.gz\",\n            \"hash\": \"b8c28c32ca6bf677982999543feec0cea4e7275ed034e1b503451de0744d13f2\"\n          },\n          {\n            \"name\": \"dotnet-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-win-x86.1.1.0.zip\",\n            \"hash\": \"6e08a9753f96ed2087d189dd1adea7611e90bd88614157c1fe51cf397a967ed9\"\n          },\n          {\n            \"name\": \"dotnet-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-win-x64.1.1.0.zip\",\n            \"hash\": \"cc66a190edc10866494df9e72dbaf4b872c83045e26431161131459ab413a08c\"\n          },\n          {\n            \"name\": \"dotnet-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-centos-x64.1.1.0.tar.gz\",\n            \"hash\": \"6f2a99f2aba9afd4c8470d5c423d06eec8e7dc9b2c6d2521216eefcceccdd254\"\n          },\n          {\n            \"name\": \"dotnet-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-debian-x64.1.1.0.tar.gz\",\n            \"hash\": \"91acd357628a3ae510e6f9ff2f912fb69b7a477125a66dca8f8cf3015d87df19\"\n          },\n          {\n            \"name\": \"dotnet-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-fedora.23-x64.1.1.0.tar.gz\",\n            \"hash\": \"de34ecd0bae6865d5ff15898415517892caf1894301a9368c7b68a62b9e188b4\"\n          },\n          {\n            \"name\": \"dotnet-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-fedora.24-x64.1.1.0.tar.gz\",\n            \"hash\": \"4bf2fed6c9607cfb19c8b80cce74a99aee3f7549b644841d46ea47238d39feee\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-opensuse.13.2-x64.1.1.0.tar.gz\",\n            \"hash\": \"97b98c12693683bd5bb5e3b1745f72b8e5a4e50ed72dbfe0155749135bc09b84\"\n          },\n          {\n            \"name\": \"dotnet-opensuse.42.3-x64.tar.gz\",\n            \"rid\": \"opensuse.42.3-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-opensuse.42.1-x64.1.1.0.tar.gz\",\n            \"hash\": \"f1b5055ffd1e8df4bcfbdbee8c99ff81315d493d2e24ebfbcab5b324e9bb7671\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-ubuntu-x64.1.1.0.tar.gz\",\n            \"hash\": \"1c067b32dd40dd2b88a6d25c8634c94f37399a590b5036e609550de7f5fda935\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-ubuntu.16.04-x64.1.1.0.tar.gz\",\n            \"hash\": \"917fa16e95fe9d2434134e09025c23b766387c67e91f5f88947ccd6b5e3032e2\"\n          },\n          {\n            \"name\": \"dotnet-ubuntu.16.10-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.10-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/1.1.0/dotnet-ubuntu.16.10-x64.1.1.0.tar.gz\",\n            \"hash\": \"48243753a3b4429b51e1c919955f40c977886849aacc03a2a207f472d78bfae9\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"1.0.0-preview2.1-003177\",\n        \"version-display\": \"1.0.0-preview2\",\n        \"runtime-version\": \"1.1.0\",\n        \"vs-version\": \"\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-dev-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-osx-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"8f1ffef37aa9da7273674185dab3b78feb44082d3a9d3156dfc20329acfe7e0d\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-win-x86.1.0.0-preview2-1-003177.zip\",\n            \"hash\": \"38a451069f6bc1d2e226218f260b19fc1a2aca775fbd88c083b2d23d5a3af737\"\n          },\n          {\n            \"name\": \"dotnet-dev-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-win-x64.1.0.0-preview2-1-003177.zip\",\n            \"hash\": \"d4056a91f83699894c9f9fbac1b8965597ded079b0d8848dacc7505f372f85a0\"\n          },\n          {\n            \"name\": \"dotnet-dev-centos-x64.tar.gz\",\n            \"rid\": \"centos-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-centos-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"168099d73a4be8dacf148a4c9300602a4a74e78fa86495a6d819a2ecca2db406\"\n          },\n          {\n            \"name\": \"dotnet-dev-debian-x64.tar.gz\",\n            \"rid\": \"debian-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-debian-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"a2f228dc79501ee85ac5fcdf771886d8f84409bacfd3f9b3ba4225663cbfa3ef\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.23-x64.tar.gz\",\n            \"rid\": \"fedora.23-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-fedora.23-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"9802a59b2e68c1fd2c91648503302066bf0ab09b1d286dd6264e2ccc75f50b09\"\n          },\n          {\n            \"name\": \"dotnet-dev-fedora.24-x64.tar.gz\",\n            \"rid\": \"fedora.24-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-fedora.24-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"4ff0b843f00f89b4391cb2b442f973117d676c56b571b40c9ffa49af3740f717\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.13.2-x64.tar.gz\",\n            \"rid\": \"opensuse.13.2-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-opensuse.13.2-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"a46585f907b73336878076ab9942db6565445b8b7a435f85537fece4ae4456a0\"\n          },\n          {\n            \"name\": \"dotnet-dev-opensuse.42.1-x64.tar.gz\",\n            \"rid\": \"opensuse.42.1-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-opensuse.42.1-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"b9bec78bbb710a47baa79e2af65b5dc0242bbc7850571d67f8153f6d6cb3f542\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu-x64.tar.gz\",\n            \"rid\": \"ubuntu-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-ubuntu-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"9f6f72c581534ec4367bc3952fe3bfe7649179d86c55b31371b4294edc96d1d1\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.04-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.04-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-ubuntu.16.04-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"4fdae55113557171a0898b283eef13669a7d722fb2b918a595eb2ab70db1d8a8\"\n          },\n          {\n            \"name\": \"dotnet-dev-ubuntu.16.10-x64.tar.gz\",\n            \"rid\": \"ubuntu.16.10-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/F/6/AF610E6A-1D2D-47D8-80B8-F178951A0C72/Binaries/dotnet-dev-ubuntu.16.10-x64.1.0.0-preview2-1-003177.tar.gz\",\n            \"hash\": \"835bfcb0cf56457a7c5f953f5fd7d6a37b7a68eb23dc0fb3d9161def833345ea\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    }\n  ]\n}"
  },
  {
    "path": "JexusManager/Resources/10.0-release.json",
    "content": "{\n  \"channel-version\": \"10.0\",\n  \"latest-release\": \"10.0.0-preview.4\",\n  \"latest-release-date\": \"2025-05-13\",\n  \"latest-runtime\": \"10.0.0-preview.4.25258.110\",\n  \"latest-sdk\": \"10.0.100-preview.4.25258.110\",\n  \"support-phase\": \"preview\",\n  \"release-type\": \"lts\",\n  \"lifecycle-policy\": \"https://aka.ms/dotnetcoresupport\",\n  \"releases\": [\n    {\n      \"release-date\": \"2025-05-13\",\n      \"release-version\": \"10.0.0-preview.4\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/10.0/preview/preview4/10.0.0-preview.4.md\",\n      \"runtime\": {\n        \"version\": \"10.0.0-preview.4.25258.110\",\n        \"version-display\": \"10.0.0-preview.4\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-apphost-pack-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-linux-arm.tar.gz\",\n            \"hash\": \"d5115b0e54b487c83fd4b66504da7c31522d4b6fe72044ef0bbf8b7362b39f538658d309f6b99289091ee3a13c10f9d63abce8bbefbeb5dfb2cba1ef382cdd2c\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-linux-arm64.tar.gz\",\n            \"hash\": \"1a42d330b310f79f6e153fcef38d4cfc6aab65ebc42bd8ba3c1e58a813e6ee2e3c9e947fb7356b6224efc7d71405526ca314f49ae7c280f78f5e4f2599a42c08\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-bionic-arm64.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-linux-bionic-arm64.tar.gz\",\n            \"hash\": \"8ea0d014f7aa4c8b91ccb060cd2f7123d90be0cca967252bbacb09fecbed93be450fa13bb3004d2d08f8fdb674cc6da57c25847f6f49e1b342c8465ccf068e5e\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-bionic-x64.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-linux-bionic-x64.tar.gz\",\n            \"hash\": \"f193737f5aa908c02e65f3a7cbf5cfa18ddb0d047b87e237410f74fb64f0adc3a866c28b2c0115b84f641a88afa7fd1c10a38804eba1461e9db724a6cd295246\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-linux-musl-arm.tar.gz\",\n            \"hash\": \"38724dcfcc683e66a3539c49bed1215b8e7a69246aff91f40cdf61ad93afd5e51f30f209fb6c5ca70cf31f33d55285917c8270c613b5a4f76968ce1045da6f9e\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1d893ee5ca41523547e9e37ef4894c3a89e36d7d0d8a06a2f9ab9b4d167ab92db8b8b121071f634ea5e52f9caa5b20468592b7ec823ace4d0e4b21abaf968e34\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-linux-musl-x64.tar.gz\",\n            \"hash\": \"86234118a59adad350db86bd81cf2720f8b41b8de5cfd405f103789e43fd7593ffe3f77a1c2ad7cc1e5be08ffd412d25c0a1828e3ea325dc8e597a9cdea96c21\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-linux-x64.tar.gz\",\n            \"hash\": \"cb259beebf484a240846940bf2e3e2a047788eab8059afbaa27518b2f5b09bba284049c97ddf9a15bf1e8d9c170f7ff0917e8b4fe7196ed5d9acb8b843fb4d02\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-osx-arm64.tar.gz\",\n            \"hash\": \"7e66852c9ad6505f1b70bd5a531b3ae1b52033af24139c7357fa63d7b2ba16cec427cddbcb2757ff117773f47345d633a08e4756f14b37a626214b5d8f51f1db\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-osx-x64.tar.gz\",\n            \"hash\": \"1d103e6f01a47c2d98d36f7b01ddabcb400ea6cd645ab8c18a3471e2e147983b16039fa884ed054079c30f4fcf1c9acd6ee8813bc19c404beb6ed6a089429389\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-win-arm64.zip\",\n            \"hash\": \"e4e331b5e9d662e323d0c00515571d13a3b7ea2dda9d91065d501a1e715d337ed6d9735af723a871f54be7262460c9b9d272c7a2786ab70e400273f59ce002ad\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-win-x64.zip\",\n            \"hash\": \"b6b131e1babea7975fddd6d92d1d37526e06cc8f314ef68c9e92b57dabc878f1bbfbc9d87c4409ec315d8b74f30fdd0f09f18b401aa17d78043b1e8a77636325\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-apphost-pack-10.0.0-preview.4.25258.110-win-x86.zip\",\n            \"hash\": \"e0141bdf479ad12ddd4896d155752908f44a186a75191b3343f3969bea354fc6a44eac1e39af9c3b4791be0c6ebd7389b1ef576f99f345010d0993f09fb1876e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-linux-arm.tar.gz\",\n            \"hash\": \"403d9c733139895e3ea6269f054a5324df870baeb5a6fe3bb74fa0bae62254962df49025c01b162085e8c633c89b4b2c8403780f0e322d7889d5da16c186ca2a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-linux-arm64.tar.gz\",\n            \"hash\": \"06af523d810d3afc311a83830e1ac03b01b36fbfc93ece395ee954ecb238ae5aafd403f330332870ea314f2b569f2474c721c12c78d162b1bf2b5fd075d6c231\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-bionic-arm64.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-linux-bionic-arm64.tar.gz\",\n            \"hash\": \"66b9492b51b107fb1572141b0951fd43c0104b5f7ab90245d086c2a5e1dc1c87d038b65417f58a5cadb52547c894262b4dc2e8b01f25dc49ed289fe0241ec6d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-bionic-x64.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-linux-bionic-x64.tar.gz\",\n            \"hash\": \"f8f2c3a986c5b6498e7dcd7d62e2351a289af990574eeedb00d15a71cd2852b85ab79eb54049ee9851f73eaab964fb0f252e76707019a950656f20b56a9772e1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-linux-musl-arm.tar.gz\",\n            \"hash\": \"95ba53d99a5faf1e666747bacc19f593011ffd6b6941ff46ec9002b7757591855738a065885af67099d9abe6d29d3623350557cac4337fa59908988788d42fce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6e2d053f3c22e4f60df2eaee9a36b7b2dd5c68e5fc0d03c4d4e51f9b5157a5abfadeb0a2a0af480cc65c3eea3d5fa78d4dba2cf3abbe74eccc06f6485e1d0915\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-linux-musl-x64.tar.gz\",\n            \"hash\": \"43987a916ab6f92e39307ec05d10e50e23c727a7436a14272ba86062b76f89ff4e288341f1e26d6e996e4b61f2006aac37eb700f3c2300c9ff27c3b6e9f882a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-linux-x64.tar.gz\",\n            \"hash\": \"1902b230b1f200fec7762a14b1c7e140172a155bd8312d5338ea290c9507a61be3ed7dc7995e5769e9e0f55b11dfe2ee7585a654e6f4b4464e59415463ce7ade\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-osx-arm64.pkg\",\n            \"hash\": \"95b322b963df61e7b4a61ffa353d8b21182c75478a284e07924c86e4986fa2a5cc5bc35be072f6d282a9d8a3c8630083ad5df5e38afc961340d1865f4b046eba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-osx-arm64.tar.gz\",\n            \"hash\": \"3aa02f829a824c8e36aece53c747acc6fa4129938af04fe305e3df7ae0666df172b60a687841a0f98d89d142644f5ed42fa14d31a13a0e7de141f9c0cfe9a658\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-osx-x64.pkg\",\n            \"hash\": \"1b25f378949dc0d8b1136b01eab8e1394bfe32b414432144dfe2df9e106c5eb52b856ada3d905f67f2ebfd822cc3c14de452d52ba2ad5700006403789fe30a68\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-osx-x64.tar.gz\",\n            \"hash\": \"3717d3249bb8778ce3696801ed57115b552b204c0480d3afbeb8e6fa3f17b9f4ea89b7b4154e3abdf5827ea11c3b63d7e291e7620b48e0b5a9a31d116c0594bc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-win-arm64.exe\",\n            \"hash\": \"dbf94215389639365fbca47b383320647555589bfdbcb73eb31dddad40ffbebbe2b136cf07077f8e2fb37d89b136dddb3cda64a8746faabd05f9f3efe7c06179\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-win-arm64.zip\",\n            \"hash\": \"677929369caa6211ac317ae98fbfb44de2eb5fbed7fb99d9091fe88f77cf2d9d32fd9b52b16288bda3f3324daf062c7ccac3710b2c1c9f8e363728af02376e58\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-win-x64.exe\",\n            \"hash\": \"4074a801ccf0839647b4a00e26e1b3f85b1dc779716c78039454bcda33217b724d7e20c02e254bd949eee2fcefd7dc9e5533797e815abba0007173ae0e7fad4a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-win-x64.zip\",\n            \"hash\": \"e8b57e093218b91cc75bff6ef929e9de890c79ce8bc71d3d3bfe6a0cfbdc23cd6902c36b7052cff3f3c4f52f6f7841acaf43d2b514a4bb672fb6129626bfc8da\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-win-x86.exe\",\n            \"hash\": \"8e7e77bc51f4ec5688e5701f846ec519f600fdc20d9f60005293fe911a4e78e59e7612aee8d23f755740d8c4d60415208395f4e323a0c22f66b4ab5a2cebd1f3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.4.25258.110/dotnet-runtime-10.0.0-preview.4.25258.110-win-x86.zip\",\n            \"hash\": \"6234f55a4525e300778260ea6721baa1e657f1837697d98030f9fb88959728a28521c061659f7ce03d93b2ba8063260508076ef3e7b8b582e6211386c39eff8d\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"10.0.100-preview.4.25258.110\",\n        \"version-display\": \"10.0.100-preview.4\",\n        \"runtime-version\": \"10.0.0-preview.4.25258.110\",\n        \"vs-version\": \"17.14\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.14)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"9.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-arm.tar.gz\",\n            \"hash\": \"0d4279a0b35853ce619a2341fe3c2375f15fafdfc67d48a85ca6c1d7212e7bf098cfebfe48455daef98ada9357fc5835b07ffb3c549234654dac39fed864cc91\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-arm64.tar.gz\",\n            \"hash\": \"38c25fa1f4335907a5e58210b343b1bed0b4444ef94a336558d70bab3f2763ffd786155e66640fc08fd9fd949bf061c4f69451fab9c0a6f134e0104a440cf972\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-musl-arm.tar.gz\",\n            \"hash\": \"8a714da3e87b21d8d81b709a7b8e401f1ae0f7be3bacb9829fb84de29b48c6e7355050018accc72f642dd395e8ebc08f9987deb9140eda8ba3f1a6cbe41138ec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0ef193341f450a17996e479e42e69087d700473589f0d8dccc1f4e8072f104cf83e065e38361f9fdcad84cc816aab0b807b82b242b6f67858cde592725e42aef\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-musl-x64.tar.gz\",\n            \"hash\": \"78c54bcc822dfebf1d4972387e594ff7bbc3d70a02609393f4d93ae90e2cbcefa00abc16a5d7fef8202446aa9057deb9194efbe2df83c078c2a2b9ba61fd9422\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-x64.tar.gz\",\n            \"hash\": \"889788370618955f2fb10005aa66a1e617d52c8cd01783d7819e4368ed5c60b9541adf126fe7e307b764c0f0f283a4f209c0d2017d992da4432b671b73765b44\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-osx-arm64.pkg\",\n            \"hash\": \"258abd5a6ec4f81109e056693a379239f8ba5556e1257518bd4f2dac6ffd53a447bc2d980edd5bdc3a12b8d6e969727a623d1b5f0eda2ad1ebffcd75fc483681\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-osx-arm64.tar.gz\",\n            \"hash\": \"b3e02d8f01786e89bc4f8de711e6edae97b979e27097b2673aa51cc5124306853325edc9be899eba4ba81b67692cd81e4c7ba388a15f85ceeba0404f1bdc92a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-osx-x64.pkg\",\n            \"hash\": \"5703352dd15952ec30cd5b96882ff22f4db6ee23cef8773d796411eb33e8c4562cc8779eeceda40c2112907b838e46d786f1289c3c75c42f733e8977e62c6e4b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-osx-x64.tar.gz\",\n            \"hash\": \"5b8b066612c4dd09e3955734cdffbba703ce6e03d40f688b4b1367980b08407ae07b234f5219f2225ec2db6d81eddd02c4afba64ae10ac31882a71b60117539e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-arm64.exe\",\n            \"hash\": \"f5b6eb2b923ae8419073bef4b4d6846c60c73d7172017c06bc67cce8b6360954882af9a0e09de2c6be32604242f6878168029599507f08e0db7b250655ce63ba\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-arm64.zip\",\n            \"hash\": \"a2a7725d794e592dd0965682ab920e7b691bf387cc7b7c526eca367604734e4e2b3022e7f09ebda3fe7a2d1682894a230b83d9ea7920665d5bb12c159c38e50e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-x64.exe\",\n            \"hash\": \"d79646bbfdee7f86250efb63934d5d9876d1934ba52fe2694ae4feed383fe1667f6c49f2435ab5b5430e22669caf0e9c821d3a1c90e075017c62085a34249e52\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-x64.zip\",\n            \"hash\": \"266d9f25c196bada1c73af596ebe1605ef0e4527d66aafbe0209f597c78d3cc9bed3a87fddcdc0c3d4a757adb108f71487ee2374a79278e688a9f12093a5131f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-x86.exe\",\n            \"hash\": \"39277ae3e55f7d59b8e083d172fa1b74ffbe1e33ac3a147137a6b390a6edd8b42b80b504522a4374f4e7a89b63f44faf22a76d0cf52e294bd699eda0aa838693\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-x86.zip\",\n            \"hash\": \"3d30f45ad988cf9612aadb64c3a326462279adb7a28996bf77143c75310ec1bec1fa3fb6a23bbc832333201fb27169a0ee2afdc0ef9dba6c93a23bf76710a746\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"10.0.100-preview.4.25258.110\",\n          \"version-display\": \"10.0.100-preview.4\",\n          \"runtime-version\": \"10.0.0-preview.4.25258.110\",\n          \"vs-version\": \"17.14\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.14)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-arm.tar.gz\",\n              \"hash\": \"0d4279a0b35853ce619a2341fe3c2375f15fafdfc67d48a85ca6c1d7212e7bf098cfebfe48455daef98ada9357fc5835b07ffb3c549234654dac39fed864cc91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-arm64.tar.gz\",\n              \"hash\": \"38c25fa1f4335907a5e58210b343b1bed0b4444ef94a336558d70bab3f2763ffd786155e66640fc08fd9fd949bf061c4f69451fab9c0a6f134e0104a440cf972\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-musl-arm.tar.gz\",\n              \"hash\": \"8a714da3e87b21d8d81b709a7b8e401f1ae0f7be3bacb9829fb84de29b48c6e7355050018accc72f642dd395e8ebc08f9987deb9140eda8ba3f1a6cbe41138ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-musl-arm64.tar.gz\",\n              \"hash\": \"0ef193341f450a17996e479e42e69087d700473589f0d8dccc1f4e8072f104cf83e065e38361f9fdcad84cc816aab0b807b82b242b6f67858cde592725e42aef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-musl-x64.tar.gz\",\n              \"hash\": \"78c54bcc822dfebf1d4972387e594ff7bbc3d70a02609393f4d93ae90e2cbcefa00abc16a5d7fef8202446aa9057deb9194efbe2df83c078c2a2b9ba61fd9422\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-linux-x64.tar.gz\",\n              \"hash\": \"889788370618955f2fb10005aa66a1e617d52c8cd01783d7819e4368ed5c60b9541adf126fe7e307b764c0f0f283a4f209c0d2017d992da4432b671b73765b44\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-osx-arm64.pkg\",\n              \"hash\": \"258abd5a6ec4f81109e056693a379239f8ba5556e1257518bd4f2dac6ffd53a447bc2d980edd5bdc3a12b8d6e969727a623d1b5f0eda2ad1ebffcd75fc483681\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-osx-arm64.tar.gz\",\n              \"hash\": \"b3e02d8f01786e89bc4f8de711e6edae97b979e27097b2673aa51cc5124306853325edc9be899eba4ba81b67692cd81e4c7ba388a15f85ceeba0404f1bdc92a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-osx-x64.pkg\",\n              \"hash\": \"5703352dd15952ec30cd5b96882ff22f4db6ee23cef8773d796411eb33e8c4562cc8779eeceda40c2112907b838e46d786f1289c3c75c42f733e8977e62c6e4b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-osx-x64.tar.gz\",\n              \"hash\": \"5b8b066612c4dd09e3955734cdffbba703ce6e03d40f688b4b1367980b08407ae07b234f5219f2225ec2db6d81eddd02c4afba64ae10ac31882a71b60117539e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-arm64.exe\",\n              \"hash\": \"f5b6eb2b923ae8419073bef4b4d6846c60c73d7172017c06bc67cce8b6360954882af9a0e09de2c6be32604242f6878168029599507f08e0db7b250655ce63ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-arm64.zip\",\n              \"hash\": \"a2a7725d794e592dd0965682ab920e7b691bf387cc7b7c526eca367604734e4e2b3022e7f09ebda3fe7a2d1682894a230b83d9ea7920665d5bb12c159c38e50e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-x64.exe\",\n              \"hash\": \"d79646bbfdee7f86250efb63934d5d9876d1934ba52fe2694ae4feed383fe1667f6c49f2435ab5b5430e22669caf0e9c821d3a1c90e075017c62085a34249e52\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-x64.zip\",\n              \"hash\": \"266d9f25c196bada1c73af596ebe1605ef0e4527d66aafbe0209f597c78d3cc9bed3a87fddcdc0c3d4a757adb108f71487ee2374a79278e688a9f12093a5131f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-x86.exe\",\n              \"hash\": \"39277ae3e55f7d59b8e083d172fa1b74ffbe1e33ac3a147137a6b390a6edd8b42b80b504522a4374f4e7a89b63f44faf22a76d0cf52e294bd699eda0aa838693\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.4.25258.110/dotnet-sdk-10.0.100-preview.4.25258.110-win-x86.zip\",\n              \"hash\": \"3d30f45ad988cf9612aadb64c3a326462279adb7a28996bf77143c75310ec1bec1fa3fb6a23bbc832333201fb27169a0ee2afdc0ef9dba6c93a23bf76710a746\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"10.0.0-preview.4.25258.110\",\n        \"version-display\": \"10.0.0-preview.4\",\n        \"version-aspnetcoremodule\": [],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-linux-arm.tar.gz\",\n            \"hash\": \"64c4359a8d35ac15312ad844587dee1d227f207d3c9ba16edf50c6706f93a29d0b8d3388bd17547491652f1423a67bfbf42c4c7ae880afbe420615e529babf75\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-linux-arm64.tar.gz\",\n            \"hash\": \"7c56bc04dd5515291fc29a944e501ce276b722aa78e3c679188cb9fe33fbe063c21b04efd0fcbba61013dd73914e7a4b438626a816c0b6f9cf7f097646a6d208\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-linux-musl-arm.tar.gz\",\n            \"hash\": \"d6b6e4f2f548b0de2ba48c85a55de60675243d91b9e433aa2c4c036679aeb814236f9cf4f38509da5d471352a3845a830e1e02e5bc5e971acdb841567285626d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-linux-musl-arm64.tar.gz\",\n            \"hash\": \"92070419e0df1ec95d92900a14984fd1226da604e815460853fea6186be9b03a8bf4e0c79b243812ac54f35f293cd247b478f1bd896c3b653cb526808cce797c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-linux-musl-x64.tar.gz\",\n            \"hash\": \"a23f36e5b2ee6d1533b8770a9b1b90b8053bed2c613489d3b5ca298f4553d0cdc79ad9f5080058a1ce868c7c83ebf4727de379e757aee45dc07def528e55eeea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-linux-x64.tar.gz\",\n            \"hash\": \"0fa8d60bdc3f63df49b5f3fe5cdda13713a3f9bea3e7c150480543f2b7c3b3871f4278fc042d6f850434146950c4934606c848f4b077be69ae4357ace36b7075\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-osx-arm64.tar.gz\",\n            \"hash\": \"71a4c1494e7fd576fef11c5c92fcd0ecd921fe042f496704a55a96ffa5145d7938c6c435090e285d8ffe150c311f3ed67f75b1c1e3d192db9429f34f5301fddc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-osx-x64.tar.gz\",\n            \"hash\": \"5aa0689b4df534c2225b78170e2b52e8ba88b5c243e655f0ab1c58a11357022f7c7d7fb418cf145d7d82613d3a3b290d68a59a34d5fe33221c6d878719b30502\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-win-arm64.exe\",\n            \"hash\": \"9a4ab672e0c5a6c600d6fd5c1ad4e2838ce24f95cbc7ff8720c1542647a7b42505b108d6e38d4b6b6c4630fd4ae208c25b13f8050f6e77814bbda917636514b3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-win-arm64.zip\",\n            \"hash\": \"17d0d35b085cd8bce4f30d29be29bfea341789580fea60f6dc09673060e1c4b1f5f3056a7c03bf465f978528f1e9e020f7c7c93d5d3fe9c4d6f6b14a11edff10\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-win-x64.exe\",\n            \"hash\": \"a01fd598de7202dc0bc379f16108a828587115ac36be19e1214e00edd44f2d5bb7706b2ce582baaa41c947e8ad8699b356ea405b5ed277fe36d0a26eb157c142\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-win-x64.zip\",\n            \"hash\": \"db68461f744a623a62fd63d230e5c9fa160c220013a46b23d436fad18927c0f349432cdeb6c9e115db5ed8311dc82891bd81f2958d7d6773c4ba84c92ad0e7fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-win-x86.exe\",\n            \"hash\": \"a94cf1c01a3c764da6e0dcdc6a86fd21fe80c9f0f4bdf7962f7ecd39d2598bb1c5597a3933c15808c5beea5caa3871698e818aebbe50278e0f8fdb70ecbbaf55\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-10.0.0-preview.4.25258.110-win-x86.zip\",\n            \"hash\": \"da426ac0f9f5f07094f38155c75c0b22887ab6b14725aecbd7bb12e529b815b61ac13fb05ea093f0a8f281e2997e05b8f71522c996c901c7d05f464cdd5e52b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-linux-arm.tar.gz\",\n            \"hash\": \"177a931c53532a4d5881775b0670405bd23ff12102c8f7c55f83a5a5db04c3d326e78eb6e86626a19f0a771067af3e23147c8bfd19bef56f21a44827bdd67a63\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-linux-arm64.tar.gz\",\n            \"hash\": \"9b1eb0c1ce649bbc74900c459fff67d91379bacf84b95d1ad207feee9baa1fbd56b3bb264a9a8c073415e5f878805754e371c48e36e71fdd9041fe68ce733125\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-linux-musl-arm.tar.gz\",\n            \"hash\": \"fbeeb4b715588e1f480a42fe799c248e3b9cf90aa5bc04dea9506d17d65f0fa9e5db8fde779bdc9231ef8d0bf947a7182c3b2164e3367eda443b04ccaf5bbbaf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4fbd593865854e0e69c271871cc4db3dcf33a244c35810c1a3c2ad42db37a92aeb628fa3e8db37f503dc27c332d108e60f3f312304cc6aa696d857ebeb200cb5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-linux-musl-x64.tar.gz\",\n            \"hash\": \"eeb47521e7d68d0e964da20cc318bc578ac3aae85340d870a29ea0e9d1e77b5ddc2b722d15e42c5b15b080eda21d8f3a1708630bf942d55e3c3288a117a91a3e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-linux-x64.tar.gz\",\n            \"hash\": \"8318d32f748348c1a5d56823a6733b3bb31558734c8f91dfe8189c8475953a64ee2c2698a1bf5e007e07054f16f797dfe2dfa463f61f69c877714589b51972c7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-osx-arm64.tar.gz\",\n            \"hash\": \"ad9a40cde11dfb7135f4e47f0f611920eacca6067598d82251c74de7cb9685d5d4960f299c784016d4267ec854e0aaa58a7ffd5f46498b4ea90487e29895c09e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-osx-x64.tar.gz\",\n            \"hash\": \"99f8600261ae2fd49be181e8d181a386b6694c5eeeee15839c845bfbfeff987e999f88aeda37360350090ea9635507d8bb3f871f86c59a5df1a722520aa42592\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-win-arm64.zip\",\n            \"hash\": \"ea788a61e314aa8912adedd2e9c8dfac306be701f917d2fec64ead0e63caf6dfbcb765dbc3f56f6d5b7e757d55326979b70b3725d02598df9ee7b6e1bf26a151\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-win-x64.zip\",\n            \"hash\": \"4b04f92244740e89615ef8e19975b51d8f87f879517850fb0037d90400952d8e2442e4679dfa246a9aa7239f5b417e15b59dd3fadafe05b63536df17354b91a9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-runtime-composite-10.0.0-preview.4.25258.110-win-x86.zip\",\n            \"hash\": \"cf95339751f7156ac19e5323b59cb5a38683236c0f5874fe03b21f695f92f6b9bcfb0f07b0823edcc1b8297019f84bab465e985792e168ff8d208e07f76bd45a\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-linux-arm.tar.gz\",\n            \"hash\": \"d5f31468d42c495ca46bc6bad75a65b3412f18a108f2ce42ccacfd0c364e257a21c1a6ef1186f5d3d96b70712905cc108835cada43437bc0c42ebb026f30c31b\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-linux-arm64.tar.gz\",\n            \"hash\": \"528202289d982da003d68fb8e07883f2e490b49de0d9e05c84ae568feb59e4f667d45959d3b2c22a875f4c8d2491dad62a834394c03e153f0c849b7e8c823a0a\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-linux-musl-arm.tar.gz\",\n            \"hash\": \"932813c81d4805ad18727d1b362d0a97a946ab34bc56ddf540dab53f438aa470aff79f57ad8fb5744dd0495dc6deefba6d1d10bb47863612265831e06d2ba62f\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-linux-musl-arm64.tar.gz\",\n            \"hash\": \"000fae4aca4bce7b2f2692233cabc94c87970826eaef4523d6ac969d0eaba46f1cc0fab939f323f298cb9a954ab4f651e8bea1df171a8ddc3b2d671698201829\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-linux-musl-x64.tar.gz\",\n            \"hash\": \"427a9e64e585ddaf852b2b54cd6831fb610665dde71a826a95915436c0b0a42ea513a11bc03cb42e7c653187c72be98aee7575417afe52d93bbb827da88ef333\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-linux-x64.tar.gz\",\n            \"hash\": \"79b0ff89da667252420c57e2c515983433bd738aa6eda8e06773569bb463be7d896c7417587a9d2e713860a3c100d94d88fe87bee8c44272fa3bf4638fd7adef\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-osx-arm64.tar.gz\",\n            \"hash\": \"051ad55c690422bdff1cd3e6936f5e58c90c1c2e6a41dc4466cf4f6debe74e3dca68790ff97efda76362e54d93a35797ee36b5a24f7b5bfc8c2a7088259e479e\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-osx-x64.tar.gz\",\n            \"hash\": \"48cdf253c8a6687af3b8cb0461d189a8d91b299af47ece3dd91206c98f4b7e86861abcbeff458f27128aa4a049fa507b4e73843461e1485528d7dce7c82f0b86\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-win-arm64.zip\",\n            \"hash\": \"6236dfc25233ca8f55543e6b723899bc94d9ef9cf125d20393c28b2b5c3255518f6e4d85e710ee45ec3c2b023cb3eca0d0203439645ffe1d8e22bd3c948e71bc\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-win-x64.zip\",\n            \"hash\": \"56e4f21f8a51c58eb6052183927f61c8d538e2e27bb4dd10d1bee0f4fea07f69874d8237d761afba9c8bd172f7c8e1877f92d26ec2fb89532221493369be5155\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/aspnetcore-targeting-pack-10.0.0-preview.4.25258.110-win-x86.zip\",\n            \"hash\": \"1e6d06385e6fc7837e648a02243d9fd45491e12e2847a2ca1a339c648ee7c23b506bf0c94d641053377a2fe3275c3288d78758e130db7f5f1b155a8031f9fde8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.4.25258.110/dotnet-hosting-10.0.0-preview.4.25258.110-win.exe\",\n            \"hash\": \"2b4084f7a291f67d0c73fab697a26d25afef3ba3ceadb14292096743e77f07d7663d20703485c3097ef2bf86f89f855f69c6c75377f87545db525a44037a8b3a\",\n            \"akams\": \"https://aka.ms/dotnetcore-10-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"10.0.0-preview.4.25258.110\",\n        \"version-display\": \"10.0.0-preview.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.4.25258.110/windowsdesktop-runtime-10.0.0-preview.4.25258.110-win-arm64.exe\",\n            \"hash\": \"c23d2116db598a7d06248f55b7550ecdea4e7762bdc68fd73036b1e93935646dae81ddfc4ecf56da38a01c8e38aa3b9f8f96f4e7f30861d1c8c00660fabd79f8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.4.25258.110/windowsdesktop-runtime-10.0.0-preview.4.25258.110-win-arm64.zip\",\n            \"hash\": \"390163e50818cdbb4699c2834c56e230935e3dc160c4976c2676cc97d1ab9f62cd35f6e5f2ff466241cb37a0d8e68143ef3c753b18c8c4341c73aa99e6c598bf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.4.25258.110/windowsdesktop-runtime-10.0.0-preview.4.25258.110-win-x64.exe\",\n            \"hash\": \"4a5fbb9ca28733487eeffb64d8e83c9cca20a76d7f443c46a9cb36fb21c58f66a8effca936435b60ef834f647c197aeaf5ae5aefcc406b51c0ae2c31be902012\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.4.25258.110/windowsdesktop-runtime-10.0.0-preview.4.25258.110-win-x64.zip\",\n            \"hash\": \"03b37d335cb34c455c317499e29c39d571929e8d4e699fcef371f4c30c7617ccd28621225f171614fb5ff4370988f46f00ea244501e7d38335d4ff22258f0263\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.4.25258.110/windowsdesktop-runtime-10.0.0-preview.4.25258.110-win-x86.exe\",\n            \"hash\": \"566fc2a08954d4dcac7b5c79f23fe40242c84d4b56da5af2ba7147cfcda54991634b26b59c2c6cdc6a5ce095b80d51166ad820ca1c7cfb198438fc64050527ea\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.4.25258.110/windowsdesktop-runtime-10.0.0-preview.4.25258.110-win-x86.zip\",\n            \"hash\": \"a5c6b2684079c33ee13bdbd331d8e4e56c0aa80be685f88181f7c1408a5be4eab4339b824bb319166079c563e90ca976fb10f698434e30883716f04749b54ee7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-04-10\",\n      \"release-version\": \"10.0.0-preview.3\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/10.0/preview/preview3/10.0.0-preview.3.md\",\n      \"runtime\": {\n        \"version\": \"10.0.0-preview.3.25171.5\",\n        \"version-display\": \"10.0.0-preview.3\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-apphost-pack-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-linux-arm.tar.gz\",\n            \"hash\": \"c28b6d9d293ed96c5306ccf38f854763d1a9888247b8e824cbd4cab91948333f5150fa303d283074c23a4d5c14ea851b0aeb9ca011c211ecbafb7d7e122ab080\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-linux-arm64.tar.gz\",\n            \"hash\": \"68e5f33442ed13528d57802763d75f15b2f93462645192aff609670edc6529d2f550f6235346292835ac3f7624af1bc5c713808151baae4055d8f5c13c106420\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-bionic-arm64.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-linux-bionic-arm64.tar.gz\",\n            \"hash\": \"a2d49acdeffe3a39795ab5e672e1f5103758349b373f76afac65cc271889dfd81f3e0d0b9ffa49b7ec8ecc829ce07d36612f80bdbe85b0bbaf4a5ea4188f92d4\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-bionic-x64.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-linux-bionic-x64.tar.gz\",\n            \"hash\": \"d6f0518537bdec561aa332b136ead3240f8b066a41152f50057bbcecf3e298d897058db6da55f56638a4876aa59472c63e8d1b8dbe3a1dc47c547d12fa794644\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"d84f7ef0a2f87ac281523d1cc0fb3d8d504c1d24cfeb8d1d0778695bb7197e3769975bcf4980c99d01154242f89b603584ce10e39677c8c8378311802c093914\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cd5298d10162b00881bcd0568440161296a6c9e08a0320707959df70c5d0372585e9c3ffd1ff56b922d04bc0db47ac657daf72ada2e5adaac79e3dee6605b26b\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"b6b354f292e85c2d99e2aa0ee1c8b2e35973e3f76a921c57a839c04c0e44d9c31a21ed0e735ee5918d398494bb8752da4a0e3e4aa29817af87ce207ca55767a8\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-linux-x64.tar.gz\",\n            \"hash\": \"b997a1b0c0ac1445e1d61b02a010d5bc8525ad298bb6f0c85cfa4c578387596364ef7d8151f5736cbec20f0b25bfa52cd55391c0e01055715d6f23f6b2d7331b\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-osx-arm64.tar.gz\",\n            \"hash\": \"0aee07fc58bc2a9bd640e9a438b3c9adf28372a0b396dc73049e34d0f03a8c0e26cb7eab6058a5508edfa7200ed7853c543ce51cce78a8cb1ad8ecb5d7ed3feb\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-osx-x64.tar.gz\",\n            \"hash\": \"37a9126f23f194b891e86d273c01ce247b87250e387bd245397fe4dde6dcf59c5b3fec7516017de3b1efdeb75c84080133526e4657dc57768622afa72f5c895d\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-win-arm64.zip\",\n            \"hash\": \"fecd488d5b2b551db07100fb442055c4c7c82b1fe71f6801201f805c5d8978e081dc8507aa4a52701c77e98e43ffd345ce43454782998f06ca5c0807c2c9ec94\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-win-x64.zip\",\n            \"hash\": \"6e817d1967e007ba1dc63358344686316509218983328e03a095b0d6a0112d269097b23043dc5867e28ce961574070459382e4204fc106b158ed18ab4c3e2d11\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-apphost-pack-10.0.0-preview.3.25171.5-win-x86.zip\",\n            \"hash\": \"bdb648e9b2f409cf41151da07619f30812853361c85f23dd9ac1de03616457f6bb0eb9b952bf6fbc220844eaade1fc0331cfa93f2f36e1f2bce89c41ab8c07e1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-linux-arm.tar.gz\",\n            \"hash\": \"8e690259454a540c0c16258bed659c0a26640d2a4f4ba7e194e2807e4597e267564fc0c9b7892805a4fa8e010219de3d2229a1026e08189f0f1eca059a3a9ee6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-linux-arm64.tar.gz\",\n            \"hash\": \"a6a59432c12ac1964957ca09f78e15e0b2d6435d9b70ba13b6bc23ec99c9523e81e23297fe28297fa723caff4a5d2159a0cab50470de623e8172245d4343f1f6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-bionic-arm64.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-linux-bionic-arm64.tar.gz\",\n            \"hash\": \"4da2db5a27f28ced921edf9f9bbb7a5bb99553c9e6dd81cf49ef32e1e153fc91fc038eae19bcc8ed604ec82e6e41e38019ef8c585b8da9be4b54b545db53a1cd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-bionic-x64.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-linux-bionic-x64.tar.gz\",\n            \"hash\": \"7cb67ef172548f403e75258881c8feea10382cb028d0255d14c252102152f4a48c75ee60b37794f444bd1ea3a8dac7b9008392bbcce8b92a0070b7ea4a71075f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"978895a7639f0c1b0860eb3c293226553e4eaeea5ba7039aa5df0eb57284657a2255e601c65a40e25d5248383884b05cd401d3472cf60934a65726007cc1de4a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7532ab4d168ad7ca86fdca46db3f9447b9ece86688fdc011d4597e4a68aedaa4b3af0079c2f92f4ab2a546e7ab6ecf525dc69ef4c11d032c84c29738c7a62ada\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"26914a60143fa394d1f238d4da335ae5869696899b31da9b1f537df96e2f4b1862cdab11ea2e550dae9a19817ee3679aaa0e4db9656cebe5143b8513090dfee7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-linux-x64.tar.gz\",\n            \"hash\": \"4e9bd2bdd54124c95dd62bcf96a5feea095617d73f132cfcc8332d15a9a8366c03bfe55d02e7409ea8ee3d35da1eb0e98390b9ec3fc86e928c6706c535fe67fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-osx-arm64.pkg\",\n            \"hash\": \"c1f2f39a11e672cf962162523f3c60ebe0426542a310b0a901ca63d990f82406d78d107b32b2fb54f9762bd6381f4a19c55dfeda1c6bb94d55a37e8317850a51\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-osx-arm64.tar.gz\",\n            \"hash\": \"cc02fd234c012c863d8725d88b6d302b214fb98d0171572915aa6dfe324881340f77b71cc81b53fc062d2893675bb399771bae05dd2d10f544aa2fa9d691e441\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-osx-x64.pkg\",\n            \"hash\": \"ed67fff1cf144bee3640007d3eef1afc69e7231847cf2cb519417615687540f6435dd9fee893088278fb371d06acf1e62f115a98c091c17d3235cafc1af4f669\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-osx-x64.tar.gz\",\n            \"hash\": \"8a9e97bb551ba3a2493043db6d55faa29c0756d8f5e1a8960617941d01941a8eb3297bda3ae0165c586569c51f2adda01d5009559900f50cbd4b9e59eeeda327\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-win-arm64.exe\",\n            \"hash\": \"4acb5933fb71ea8efc0dbbdeb2b645f9a5fc05f78a7b4c79918aae01be8e45cdcb656b72d84606de505b805fe3bfe5029801b80b2c5adb8d77e86053e56dfbfc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-win-arm64.zip\",\n            \"hash\": \"1a537b66cdb3eccdc22dea97da2672417059cf6246d473c717df5a434521bcf2c2291bec323649fe1979fdb00c4a2790dbbd8495efcd7cdb0037fe7ed8e8dd89\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-win-x64.exe\",\n            \"hash\": \"ba6808a34f8808ad7e85eb41d9ff29dbc2677656b5c5211ee48eb9ded2036d37a567a2332e1e1938c57063c804150a81e1e1630fa579702a6cd98b2f507484fb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-win-x64.zip\",\n            \"hash\": \"586e24e04ada25753dad5bea6f9302771ffb08d6a0d8be998b68ab66a28d665b6fa82c2935c4a50e9030e6baff6ba052ac43144e93c720e64cec852de125c89b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-win-x86.exe\",\n            \"hash\": \"a7f493398cdeafa10d30e46843fcc7aae18af426b832c07e3ef7e70703e1c0fc390d83788f964f2efab7a7eff1a8d3c75b17be68729f0e8d9bab171284be45f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.3.25171.5/dotnet-runtime-10.0.0-preview.3.25171.5-win-x86.zip\",\n            \"hash\": \"d0e832bd8a2f40c430bb11b78ab3b96af607787db28ed5a847455acc732091627f350bcea7da0b8367befebaef5d8f00e8e3945216a9f7aadddffd33c55af3dd\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"10.0.100-preview.3.25201.16\",\n        \"version-display\": \"10.0.100-preview.3\",\n        \"runtime-version\": \"10.0.0-preview.3.25171.5\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"9.0\",\n        \"vb-version\": \"17.13\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-arm.tar.gz\",\n            \"hash\": \"9409d8a906bae261b22f272cc80a1b41b8be7726437708815944e232396f0f889b874df37b3c28e6158002d2ae578f36c808d7670622a9f5cb9242df66fffc5c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-arm64.tar.gz\",\n            \"hash\": \"9e1f7ddd98d468f937b74469397b1fc1238c4174b94dc5a78e61c6984359f594dcfd0c248e502ebda165ec6100198ebb797b1da08be47320ce926612318b65ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"a7ababbe1bd3d4b8534199f872357ceb2f5f0a7da1f4bff9a929ba799f8c8e6b0018048524e8c760cd4a15d8f99972e993b5e728592602040a905f06884efd44\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9057e97006f99e4fff1cc0a688443c469cfc25739aaeb752d8be5aea6b494eb49419d954339d58380e89fcb5628a424f967cdc6112b8d14357dca07f9f160d5f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"5443a2e09eaccf29d0dc92330a4899140627a7901e79d13d76b9d5d249a96137552831236d214932cd3c6ac56bc437fabe7b173029661fb5d061064a06e5671e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-x64.tar.gz\",\n            \"hash\": \"aaad778cc80f5e5f023cbdab47af67703214a7a1900d12782f5d956f8623de1bd3801026727fbb5ecf84fbc885185daad92832b47da3b6514a45aa56fa971156\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-osx-arm64.pkg\",\n            \"hash\": \"accdc73b5f4649fd03ae49e15dcad39cc0740fb27f0f6ca8df6d1d9d01b0398e33f09188cb0f9ecd17389b6b63db4b03eb82f42faf0f2567cb045c189d62dabb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-osx-arm64.tar.gz\",\n            \"hash\": \"b38a6ef7c6568ea5e2fd6cbd893a8e05dd158e5f21a4245b39b22bee0231033869c6c2bf576c76260c9fa633a1f0ef1d88b3e5e9cd1cf879b5ea45e9aa6600dc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-osx-x64.pkg\",\n            \"hash\": \"3954f8b9da6d61b04d23d8ac004ba6312a5688dafacb760fa9423a923946c4d52c4b26f08a6b5d8e28bc9f70d8c6fc9e736b129179a6a7b0e9f48ecbc351ffaa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-osx-x64.tar.gz\",\n            \"hash\": \"6a9c6634176027252fbd6cc3ddd10a5eeb1e40268f58aa725ec50ea94ef87362bfb154ff1f12584792b1f956710ff8070421d9f86a4638d2b392ef09910a5944\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-arm64.exe\",\n            \"hash\": \"92bed682016c91ac75b4f9cc4f6a1e48bc93b7b5abbf8b6af9c3fbb4fb166ee86c0ac3ac4dfdc7f707ef62000ecffcbd77fd13dfccd2a8567465b73b3fbc7a2a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-arm64.zip\",\n            \"hash\": \"17889797c279519c3e98c909c2dc6952bcd15c1a7c5c2d915d87e1c8b544319262ddf7acaf80f71833f8371b8ad58b3eeaf3a32a3815fae1897585eea1154c06\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-x64.exe\",\n            \"hash\": \"848a3355da9555293964e15d0d08d11964106dededb9dd5356d899e235c325a0322d16526addd40f45badaf49997f51de874a3d6a15da9a3ff07c8cbe746c342\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-x64.zip\",\n            \"hash\": \"fb45e1d0cc4ceab81da28ef70543bae460cd85a37eab4ec3301dccbf7a0bdec7e29bed3cc533ee466fa8c978f2f4215fdddedde8b0da3113ae1af51e1d27417e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-x86.exe\",\n            \"hash\": \"11255c0fc31648bfb2cceff3c590e974159f3603316cb79163fdc08d74abe6fd4c269160176c1fd7dec4aa52304d447bd618af880880eed804e4e6d920767bf5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-x86.zip\",\n            \"hash\": \"1df2edfb8a4ed469ae34c16c3d5552e51077205149474817d7b6764c8a17f53684f08cfec19d1687d7d061b204fe5fcb2098728a9e2656abdead67222196a7c7\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"10.0.100-preview.3.25201.16\",\n          \"version-display\": \"10.0.100-preview.3\",\n          \"runtime-version\": \"10.0.0-preview.3.25171.5\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-arm.tar.gz\",\n              \"hash\": \"9409d8a906bae261b22f272cc80a1b41b8be7726437708815944e232396f0f889b874df37b3c28e6158002d2ae578f36c808d7670622a9f5cb9242df66fffc5c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-arm64.tar.gz\",\n              \"hash\": \"9e1f7ddd98d468f937b74469397b1fc1238c4174b94dc5a78e61c6984359f594dcfd0c248e502ebda165ec6100198ebb797b1da08be47320ce926612318b65ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-musl-arm.tar.gz\",\n              \"hash\": \"a7ababbe1bd3d4b8534199f872357ceb2f5f0a7da1f4bff9a929ba799f8c8e6b0018048524e8c760cd4a15d8f99972e993b5e728592602040a905f06884efd44\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-musl-arm64.tar.gz\",\n              \"hash\": \"9057e97006f99e4fff1cc0a688443c469cfc25739aaeb752d8be5aea6b494eb49419d954339d58380e89fcb5628a424f967cdc6112b8d14357dca07f9f160d5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-musl-x64.tar.gz\",\n              \"hash\": \"5443a2e09eaccf29d0dc92330a4899140627a7901e79d13d76b9d5d249a96137552831236d214932cd3c6ac56bc437fabe7b173029661fb5d061064a06e5671e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-linux-x64.tar.gz\",\n              \"hash\": \"aaad778cc80f5e5f023cbdab47af67703214a7a1900d12782f5d956f8623de1bd3801026727fbb5ecf84fbc885185daad92832b47da3b6514a45aa56fa971156\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-osx-arm64.pkg\",\n              \"hash\": \"accdc73b5f4649fd03ae49e15dcad39cc0740fb27f0f6ca8df6d1d9d01b0398e33f09188cb0f9ecd17389b6b63db4b03eb82f42faf0f2567cb045c189d62dabb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-osx-arm64.tar.gz\",\n              \"hash\": \"b38a6ef7c6568ea5e2fd6cbd893a8e05dd158e5f21a4245b39b22bee0231033869c6c2bf576c76260c9fa633a1f0ef1d88b3e5e9cd1cf879b5ea45e9aa6600dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-osx-x64.pkg\",\n              \"hash\": \"3954f8b9da6d61b04d23d8ac004ba6312a5688dafacb760fa9423a923946c4d52c4b26f08a6b5d8e28bc9f70d8c6fc9e736b129179a6a7b0e9f48ecbc351ffaa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-osx-x64.tar.gz\",\n              \"hash\": \"6a9c6634176027252fbd6cc3ddd10a5eeb1e40268f58aa725ec50ea94ef87362bfb154ff1f12584792b1f956710ff8070421d9f86a4638d2b392ef09910a5944\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-arm64.exe\",\n              \"hash\": \"92bed682016c91ac75b4f9cc4f6a1e48bc93b7b5abbf8b6af9c3fbb4fb166ee86c0ac3ac4dfdc7f707ef62000ecffcbd77fd13dfccd2a8567465b73b3fbc7a2a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-arm64.zip\",\n              \"hash\": \"17889797c279519c3e98c909c2dc6952bcd15c1a7c5c2d915d87e1c8b544319262ddf7acaf80f71833f8371b8ad58b3eeaf3a32a3815fae1897585eea1154c06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-x64.exe\",\n              \"hash\": \"848a3355da9555293964e15d0d08d11964106dededb9dd5356d899e235c325a0322d16526addd40f45badaf49997f51de874a3d6a15da9a3ff07c8cbe746c342\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-x64.zip\",\n              \"hash\": \"fb45e1d0cc4ceab81da28ef70543bae460cd85a37eab4ec3301dccbf7a0bdec7e29bed3cc533ee466fa8c978f2f4215fdddedde8b0da3113ae1af51e1d27417e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-x86.exe\",\n              \"hash\": \"11255c0fc31648bfb2cceff3c590e974159f3603316cb79163fdc08d74abe6fd4c269160176c1fd7dec4aa52304d447bd618af880880eed804e4e6d920767bf5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.3.25201.16/dotnet-sdk-10.0.100-preview.3.25201.16-win-x86.zip\",\n              \"hash\": \"1df2edfb8a4ed469ae34c16c3d5552e51077205149474817d7b6764c8a17f53684f08cfec19d1687d7d061b204fe5fcb2098728a9e2656abdead67222196a7c7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"10.0.0-preview.3.25172.1\",\n        \"version-display\": \"10.0.0-preview.3\",\n        \"version-aspnetcoremodule\": [\n          \"20.0.25082.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-linux-arm.tar.gz\",\n            \"hash\": \"f9c3a4655924604e4e4ed4365333d09442ac1135ca195e0f82374999159f4e67d0b3ef07edb60d87a4d2f1dfa2e0b1df4e49fc79f9dd248677aea9db623d9144\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-linux-arm64.tar.gz\",\n            \"hash\": \"48568aa8a3fd431a6775c90f26754136c87b89dea9e07b304101bd8c6dc4961f1436fa5a0316f7e9535198a978636caf7425f9b7aae003b53a95a1e14a01b450\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"f1b06e651590ba866dc312da08a85b4b3e4c8d71a1dce9d5719e1e86f5d7ad646913dead9552d74eeedd7cb70a349d10fd54c77dbc9ad09b34327f739fc45092\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8decf0ecf5dab0c1d09832c3419c08cb6ba027fc1713f0a17ab7a61b89369867dafabaf1704340e0db81753b65aa63e131b75969fe7d7ee58e01c8854c6cba6b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"6fc6432cda03745448e4152c06d737bd8bfa4356e2b38a0b48619f2b6ff75ff1d1f66f72449c643224ca7f04c505efe1af35e0e66dd311e5edfb34ac6599e58d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-linux-x64.tar.gz\",\n            \"hash\": \"592e78f23d0eeec3fe21d3885d6b4b2ce65538e6a987d9d4094dd5acfc98351eaa8441845d53bc0cdc1d49f3b4c1e6a93a0ddacd44bd5c7f50a01eeae76247f4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-osx-arm64.tar.gz\",\n            \"hash\": \"23fe9a7fe626ee9f0acdf64842fbb6bcdf81d6b4ef97037bc12de3cdf6a6ae7fdd218373487ce185b83fb9af5146188b1368d5eee82bdf59b089908c7b032ad2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-osx-x64.tar.gz\",\n            \"hash\": \"ca5680ec83add53dd9c261d3b4a9aa3a2353a168889aff6216300ea76b760bd4246058a2ba28f562aa822302f4c522c7c5b4b1499e13eb1851d9dd1566f3977b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-win-arm64.exe\",\n            \"hash\": \"ec8765b4d545c6dc52348895d362ba9be6db83e4f1d2da836e7c4fe02a7cc8a0f0901ab2437b322cf5ce5947d1fd975ee76357a1a9ec7e9c82610e14ce9ba4b9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-win-arm64.zip\",\n            \"hash\": \"fe23d4b8ad4e58fe8ef4785bf1f73d91deb72ed31db094cb30a588f3d3fde2525d05ef024ee220422e0835710e917a020b0e87232bf4fd75334e67b0c555bad5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-win-x64.exe\",\n            \"hash\": \"ac51127107942feba162a0ff14efb19a39be744028beb83aca2b1fdf7c25bac77586a06bb57b10a6a124923e8df5465953edc84262bf52feaf101a1b05b7b4e9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-win-x64.zip\",\n            \"hash\": \"0bcda427a08422bda3d0331b99742fd076abee2e22c994dcd4b4a84534f3e6080dbb63a69b415b8a0a5681d34be38b80366addbf3a5446fc25faca9e2a88eb8e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-win-x86.exe\",\n            \"hash\": \"e510c6e419b5977290b2ca8462f411f18a20b7168388e6677401f6889041595123082e0a91bbeb9d8f02e5241f37b8955d783795f1b9baef745e3ab4c5a9de80\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-10.0.0-preview.3.25172.1-win-x86.zip\",\n            \"hash\": \"090cc1df01eac271750e2407eea6d8adb555ab1083527401282af69a86bc252a91c68cadad455b43fda9b306df146e8056cb25c5ea66b3e6f0e90408924e4a58\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-linux-arm.tar.gz\",\n            \"hash\": \"27d233ea2fa4855880f8dc87a99b5123c4afef986904ca7827125c6e4e86c858f0bedaef82a78bcb8fb61b5015403d78bb649e371bff8b7830140973141a89aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-linux-arm64.tar.gz\",\n            \"hash\": \"a0e24eec757d9bf02cd918bf48a5e5c8c8ae5afe10df153cc2f9373e24d552f7b4385ea825638ab348537903368e9a3832abe5df241384629e558d88ac8cf676\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"37319b3e7962a1e1092bf875feaf04d6f6c0fbda2f04e86c0add572883d70ab8a0b4284bb7255bfa08c1115303eee4f0cbcf9feca495775a1c1f9111e392f463\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ffa0fb15fd3a1c48c16501862d0891c2971cfe4861b0c09a1cbec86f44c3b703482b953102e44913991b6df5deece7960f27fa18cab4a2924f3d7887770f9e37\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"b0f26f74125cc91e7612de53d41c6b845fb3a10c261eb9e717d20e267fc0332ebdb77be7c592d15b34ffa623b5c5622263d4ab81460a547dc9a602baa4f49832\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-linux-x64.tar.gz\",\n            \"hash\": \"55cca3c587e789137305ed3d6aed34915b53ba4d36000f1e5368e85ad2250d3b206db9c979bfb01b244baf9da85f3fc325a7cb5ce8905250299cbdddbcddea21\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-osx-arm64.tar.gz\",\n            \"hash\": \"317cc1cc61e65b009c8143baec0844a679509b32fbf13715faed4142c52aa1ca80c334f48aa1aefe86b461252265f648a766e872b11243eb24b248973206bea6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-osx-x64.tar.gz\",\n            \"hash\": \"d5851f026d61dac87626de5246c0fc9114a84f2a4cc75a9211d6d74e4c4918ce1cd39bc91c182a3499d4c9cab994a680708d4273d149881ee70045a92ac76e21\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-win-arm64.zip\",\n            \"hash\": \"a2b61b0fc31800e6eab96b78c74d9e60bdb5128a3639523905b97686f59491be0db44a514bb8113c7b9be91220470720e9443c179040952a29ca18f74e39c1f8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-win-x64.zip\",\n            \"hash\": \"7d77304e8e99f929c4e5661f240210b41b196bbde71a829f7b7d4e5ee25676d7c63891deb56ae5405580ae81ac763e259a4ae9d77c3b5518d865d65e3e7a5b20\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-runtime-composite-10.0.0-preview.3.25172.1-win-x86.zip\",\n            \"hash\": \"bb6b940b7a70100557c5861b70085cdb661d4fde03ad7339ced37279fc2d0178c542d8463d22abcf119cc77334203911ad7f89cb79a71d98f1491c56555f97af\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-linux-arm.tar.gz\",\n            \"hash\": \"c72bee489cf35bb776a74db282700a994a76575847e1c475707e331c9e0941ccd1b55dfeac8dc7d63b699b82118564113cf8a7dff2ad2227b1bbb9f5b7d2d2ba\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-linux-arm64.tar.gz\",\n            \"hash\": \"1166181c34da505b02d7d1242c0dfe3198c427b73c119b63f5a3fb408bfbd0a2e1b996cd6f0be4cb1104992bd84c1ec777913990c8f07277a204d60c0734160c\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"48ec5076dd9d22c3d52a638109fb85c35f1de0f2e215d63c72a628dbc0c816ba9567079afbc599ba812b0e541920d158717e94333c5b0c54bb8d2ced89d292e3\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"88eb1a8dd59bc92664508f2515bb73d922274efbd11f0e6ef71578ab135728453dc2ba8259f70c077683aa7a5e3475d94e86d1b2ea1c8c6520c97eec4890a02c\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"2854fc7fb51edfd9896dfaed0fae9a86fcf0310554cc36167eb614ab0d7d90abb7df9d9704863eb0be234d53db7b02793a50c11adc181e013c819be4e5aef5a6\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-linux-x64.tar.gz\",\n            \"hash\": \"237f27e22d5ec4dc923fc5bccac326f03c680174a53e365aa3fb6f63f3993cdc6ec70236e8559a3696393db0dc1459047c669a16090d27b0be83a3c0f6718c13\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-osx-arm64.tar.gz\",\n            \"hash\": \"6c431c18714cf4bf00b6560eae2b4f58f65fc1f1d1feb20a119b66481346e815c463274fbfe22577c55683e87364eeefa816bb6a9963215ad87f917caba3d5e7\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-osx-x64.tar.gz\",\n            \"hash\": \"ae48cce52954ef14f3117de041080adc16985638ddd2d7aac6c135b30717425d10b5ec43f7b4cc189c8aca00f1d16109f10af7c66628324e830ddd0cfc8b088b\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-win-arm64.zip\",\n            \"hash\": \"5bd2ec084c22c5d9d793805fe4150de91e57cd9e54dcb399f7cce004888f3126c2d994eb5e5ba577fb4af837a122ab2d065fed82c717b660832257a3eef32e53\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-win-x64.zip\",\n            \"hash\": \"833288807dee18f8fa41a04906007212e83ed3a33c44ce386abc8b1009772c0ac7a429d6750160b67017d357f9ac331144f5cc8e2cb422a9096ccd14d2c2fe13\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/aspnetcore-targeting-pack-10.0.0-preview.3.25172.1-win-x86.zip\",\n            \"hash\": \"3fb64cb2c399a5bc9a1874932b685217fb0320282779183bf3e0274d3316e16fa0ffe0c0309773e80b817338f058baa51d1353d98be5400c0cae6bcff4da82b6\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.3.25172.1/dotnet-hosting-10.0.0-preview.3.25172.1-win.exe\",\n            \"hash\": \"08aa4c6bf1e014a6d6140b1e51c2ef3a444a87f0bb669d10f3438604b9d7a7d7fb56db5befc8c4a29edf90e1cbeb39e62fe272d99316350ca49cea4f1fcd8796\",\n            \"akams\": \"https://aka.ms/dotnetcore-10-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"10.0.0-preview.3.25174.1\",\n        \"version-display\": \"10.0.0-preview.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.3.25174.1/windowsdesktop-runtime-10.0.0-preview.3.25174.1-win-arm64.exe\",\n            \"hash\": \"7420fc8b532723d95277f97676800c6fabbe27ec674c8593c87cddbefcb39fe76561631839d0623774ddb7bed5b75eca06d2d6fd01124d996a519964d1825512\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.3.25174.1/windowsdesktop-runtime-10.0.0-preview.3.25174.1-win-arm64.zip\",\n            \"hash\": \"9e8aa5501715957f21995153780b737c9b3e48ff619328ec63383658c9040f000a89ce70054a5b6d5d892dc7331cff45758411905266b96be6e7ea1a845e01ba\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.3.25174.1/windowsdesktop-runtime-10.0.0-preview.3.25174.1-win-x64.exe\",\n            \"hash\": \"535a275a0b9aa19bac39dcc4d463fe6c66ad7b1b9e2a002eef3999526c7cb03b6d6308093342f6b7ebf0dd5a91f75ae90e79f2a78825180e5f3c7763f23267a0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.3.25174.1/windowsdesktop-runtime-10.0.0-preview.3.25174.1-win-x64.zip\",\n            \"hash\": \"81ff1f3343fbee94713ca123882a968562948b6a7bacfba843ee0764a00967f73d17e64e326176e68e608037a9e4d60ee7f2bf7f0c87321294ac166f13fa3d3e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.3.25174.1/windowsdesktop-runtime-10.0.0-preview.3.25174.1-win-x86.exe\",\n            \"hash\": \"fd267202f3de8dacdd0b789c80e5300132030ef058cd7b22b4b7e24e1388c3eb607479cb4c24ccd86c724e5fc96d4466251fde53233aa4d5c88348f74c861a3d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.3.25174.1/windowsdesktop-runtime-10.0.0-preview.3.25174.1-win-x86.zip\",\n            \"hash\": \"26f4f66b6d479718e50a9dbe2ef2ec00f21187c6949687d3b4e2837107a5ec98b4b269d5ded0c8f7e69401b900cf0a4097bed80b0c96854e2fd4e684ff0a3419\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-03-18\",\n      \"release-version\": \"10.0.0-preview.2\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/10.0/preview/preview2/10.0.0-preview.2.md\",\n      \"runtime\": {\n        \"version\": \"10.0.0-preview.2.25163.2\",\n        \"version-display\": \"10.0.0-preview.2\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-linux-arm.tar.gz\",\n            \"hash\": \"fe8af0c9ac3d39e559155950cecbfa27450521f8e5faa446438de3dcc8c4bf51fb135323cac3ba5bb045fc13423776ae66ae4ed9d6a0df331e959a0ed34179a4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-linux-arm64.tar.gz\",\n            \"hash\": \"05ca5a0212600fa2c79c3526c673822d79ed8965e513263eea904f2d09fcdf423058321961bc930fdb90814ee41ef42545a3b27c081cc9731ee4602c514879c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"1298d446e8cb27768dbdd512576cdd6526dad29a7676ee748bc92fa64430760cdbe817ca6c62c4872ab2008b845580d4709571a59c6c3f332650acaee8643546\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"63cc61a5bd53b1327fd67d57b04841c0a8e7950b5d531fc7890352e56aa2a09b083a808cc8b9be1afd424264371d51fc3329791fdc0479888ceefadda52e2723\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"d91bfb5839b30377d09849511c8668230be51fae0d05e07d761297da40c994d800de5ce6fc5f7307cbdf5cf6e7fa7dd720ecab8354ec9436c662cd4fe14851dd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-linux-x64.tar.gz\",\n            \"hash\": \"a64cccc9809fa5b2f4ccb178964bffa92b849c43dd2b2c3981d753e73f2b05a2b6e189a8c2a50fc67652badf66963313444c08ea22e4cd18fe8797049571341e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-osx-arm64.pkg\",\n            \"hash\": \"d3493cefce4b9c7157fc2da2cdb6aab8d29510b37d3ebee06ce92eee42b8ed0d899b88c8b4590141aa5e061f2365073cb084b26ff073ba1a42d2d38dc09d0368\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-osx-arm64.tar.gz\",\n            \"hash\": \"349b2a9f34dfcd1ab819484ee09cc32ef61c31629a9520256d643916e4bd5d1384f3cbaf8d0316bde8c90cd8eeac61a170cc486be3960b9512ac79e567ee54b5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-osx-x64.pkg\",\n            \"hash\": \"7dddafcbfae1b6e54e63ee1d3bc5879631fb86fd2d8bcd8d2b5389ce1326c9caa10393d7e5002039faf20099d6c10d9fe1f10c9aeba8e7e06db8269d23890a2b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-osx-x64.tar.gz\",\n            \"hash\": \"a398deecaf401781cadec919f4876aa914d93c38f081a9c1f1b850e2ebfe4952919f90abd723d8faa5cf37a149b281e391742ba8e73613e2b1e4276755d8d81e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-win-arm64.exe\",\n            \"hash\": \"63f9ff8aea8a268a831fc05de6442bf504186b469f24cbd488e4613971f5311d6426e10bc1b67aef5c907261e38c8ef244ab76eeec0c643048a9bd1ed74fbace\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-win-arm64.zip\",\n            \"hash\": \"fe0f3c1e53ae995d01d6985760b0e519faf7b55b944508a87a1a5d4498517c7e502a2591b36b0aeec91b8c836ddce4fa5479c98ab9a536505bfc2048febdc028\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-win-x64.exe\",\n            \"hash\": \"f17c15095f3b630fd63d4de390ddd0afcd5629ce7a0629f64cbfede0de9f37433ec435a2b99a26038113a3c5916c3958178886ce21010ad75e4900457c8d7a67\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-win-x64.zip\",\n            \"hash\": \"db4f2e6cbf3729461a1232f4f9ffe625c177691082fc06707d12da1fd72e5b1bbf4516bd31fd675ee4eeaeac01bce42030ecc97edf12e36ad721c60ec31f06ad\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-win-x86.exe\",\n            \"hash\": \"9efc3b62710e35fb2bdf9928d5ca98800eeeb7b5d393b14def887914687e18e4920d95caa2f02340b73c75afd6b76a7867942a0d2c8135201ea67b37ddde5ef5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.2.25163.2/dotnet-runtime-10.0.0-preview.2.25163.2-win-x86.zip\",\n            \"hash\": \"bfdb644c6cdf29e5cec6da558264dc9956c246161ede16922747dc4e42b18b45bf8c5d474ed01155d67cdbf21096a4b339c5561f90e3ba98a8f15052ee95683c\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"10.0.100-preview.2.25164.34\",\n        \"version-display\": \"10.0.100-preview.2\",\n        \"runtime-version\": \"10.0.0-preview.2.25163.2\",\n        \"vs-version\": \"17.14\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.14 Preview 2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"9.0\",\n        \"vb-version\": \"17.13\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-arm.tar.gz\",\n            \"hash\": \"084168b2296a549fcba190d69cd565cc48efa5ea30cbfe61b5bed9e415acae43a416b53dd8e5bf16a598beeed1b0ba96dbb7bc554a2e0e2ce00c7634a1a5a1f0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-arm64.tar.gz\",\n            \"hash\": \"0491381366f50d6a2211f925f5c5b2e1364f3b3a45076c706dacd3afa6856dd95efb6bacccc8874718bde37439e77614ff2bfd580c3c2e97737d42db311db5e6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-musl-arm.tar.gz\",\n            \"hash\": \"82cfc7fa9a6491e6258adf33eb81b0bcb1b69f5960d631bfbd1e9cb59e0b5550c2ffd2620461e46430d1215b8cca097a67ac215e0f7a9c965800d307a5bb8d70\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c1419b713d5511835ffe6e61effe1782af5a8429fabd517d3d840d219752265681cb1a7a15a1f06b6c5a890dd50e7461b3b0eeea0a24d5c2066bfaf3d52eec42\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-musl-x64.tar.gz\",\n            \"hash\": \"789876535ef56669dbfe6391378fcf40dc2b8f4adf137bddb8b358a23403ecafe5bdbcbb0c7715cfb0d26ed061adb20520ad1ab12505f964dc808b2b102f6594\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-x64.tar.gz\",\n            \"hash\": \"664e5618827c4f9e5d5150cd7ed7f8c4044f85ae7be8dc779a8d8634dcc962b59e7317a9533e57b2683334b1304f7b66e59b5e68e1a501147ac14e1f22f46bc4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-osx-arm64.pkg\",\n            \"hash\": \"f65538d7b650de4670cef8ab0f7fa3c7775782686ee174589f98e78296bb1c0adfac7ba3cbf700a75db36af8143bf250c21e9cbdeb9968ff0ccc7f894e4b6a73\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-osx-arm64.tar.gz\",\n            \"hash\": \"55ec928ac50b0b34783871a7d8662aadbf9443cb9217b905fc447e6b46de179a6222bfdfc25a6bdd3e80bb8227bcddf088b41e61d5a5d1e6ab931fc8237d5a8d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-osx-x64.pkg\",\n            \"hash\": \"2f516e1dda0cd9f4ebb90fe0f3b2f30751d130252b6927a1178275a81008b00c870c6f48d978886d82fcfb1246f8e2184672669f4a93db18061037f3493c8b08\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-osx-x64.tar.gz\",\n            \"hash\": \"cc573dc0f9d84620f0c90dd74f0538e797a597daed2365c2f311a162b0fbd92d031a697c89c806adba8ac223c3e3f3719de6d2243ea044646c62cbb8ba182873\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-arm64.exe\",\n            \"hash\": \"ecbf9153c56c8bbdccad88a86a8de578ba0a12a17b28c1e40c0b13a5ef673dae292629b98625dc8ffa8c1856829525437b8972b3be4414e3115335b36c3c937c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-arm64.zip\",\n            \"hash\": \"bec80096e4d0d2fbc6e97317eddb9ce84582056b77767bf9cb771cec76039547141100bde33e7fccceb88fda56a32e810041f84ee7a17e7bc4cd92d215001bbb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-x64.exe\",\n            \"hash\": \"e70b3967716954ddb6cd766d72604039465dbf9693fcafd260e6dcf5fddcdda0ec97a499c9450953861814340445b3f24c7ded879a869c1b7be61c8b69852c1c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-x64.zip\",\n            \"hash\": \"a8aa6371149103c3fda2cb29972aa9343b2d6a3e3ecdbbb7e8b123c1aab1c9ed25f12408a59db3d7661316bb0f13261b1a353140f420e366bc61c5b7aaaabc1d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-x86.exe\",\n            \"hash\": \"25fbc7a782ec0f8927f8d2475a497f46a3b61f4873cdce43356b6a934351c0d0e7370b2064a607106ae3071f505345db45996feb2b34efed18446b56f7abc8bc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-x86.zip\",\n            \"hash\": \"70e416497327a7dcf478551d7fc12daa980750ff31f53770c4d89ca8efca086221c6dd441c31c14d0117f834750b6b15ed0c5380be4112597a645fa3d7a26a06\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"10.0.100-preview.2.25164.34\",\n          \"version-display\": \"10.0.100-preview.2\",\n          \"runtime-version\": \"10.0.0-preview.2.25163.2\",\n          \"vs-version\": \"17.14\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.14 Preview 2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-arm.tar.gz\",\n              \"hash\": \"084168b2296a549fcba190d69cd565cc48efa5ea30cbfe61b5bed9e415acae43a416b53dd8e5bf16a598beeed1b0ba96dbb7bc554a2e0e2ce00c7634a1a5a1f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-arm64.tar.gz\",\n              \"hash\": \"0491381366f50d6a2211f925f5c5b2e1364f3b3a45076c706dacd3afa6856dd95efb6bacccc8874718bde37439e77614ff2bfd580c3c2e97737d42db311db5e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-musl-arm.tar.gz\",\n              \"hash\": \"82cfc7fa9a6491e6258adf33eb81b0bcb1b69f5960d631bfbd1e9cb59e0b5550c2ffd2620461e46430d1215b8cca097a67ac215e0f7a9c965800d307a5bb8d70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c1419b713d5511835ffe6e61effe1782af5a8429fabd517d3d840d219752265681cb1a7a15a1f06b6c5a890dd50e7461b3b0eeea0a24d5c2066bfaf3d52eec42\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-musl-x64.tar.gz\",\n              \"hash\": \"789876535ef56669dbfe6391378fcf40dc2b8f4adf137bddb8b358a23403ecafe5bdbcbb0c7715cfb0d26ed061adb20520ad1ab12505f964dc808b2b102f6594\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-linux-x64.tar.gz\",\n              \"hash\": \"664e5618827c4f9e5d5150cd7ed7f8c4044f85ae7be8dc779a8d8634dcc962b59e7317a9533e57b2683334b1304f7b66e59b5e68e1a501147ac14e1f22f46bc4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-osx-arm64.pkg\",\n              \"hash\": \"f65538d7b650de4670cef8ab0f7fa3c7775782686ee174589f98e78296bb1c0adfac7ba3cbf700a75db36af8143bf250c21e9cbdeb9968ff0ccc7f894e4b6a73\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-osx-arm64.tar.gz\",\n              \"hash\": \"55ec928ac50b0b34783871a7d8662aadbf9443cb9217b905fc447e6b46de179a6222bfdfc25a6bdd3e80bb8227bcddf088b41e61d5a5d1e6ab931fc8237d5a8d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-osx-x64.pkg\",\n              \"hash\": \"2f516e1dda0cd9f4ebb90fe0f3b2f30751d130252b6927a1178275a81008b00c870c6f48d978886d82fcfb1246f8e2184672669f4a93db18061037f3493c8b08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-osx-x64.tar.gz\",\n              \"hash\": \"cc573dc0f9d84620f0c90dd74f0538e797a597daed2365c2f311a162b0fbd92d031a697c89c806adba8ac223c3e3f3719de6d2243ea044646c62cbb8ba182873\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-arm64.exe\",\n              \"hash\": \"ecbf9153c56c8bbdccad88a86a8de578ba0a12a17b28c1e40c0b13a5ef673dae292629b98625dc8ffa8c1856829525437b8972b3be4414e3115335b36c3c937c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-arm64.zip\",\n              \"hash\": \"bec80096e4d0d2fbc6e97317eddb9ce84582056b77767bf9cb771cec76039547141100bde33e7fccceb88fda56a32e810041f84ee7a17e7bc4cd92d215001bbb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-x64.exe\",\n              \"hash\": \"e70b3967716954ddb6cd766d72604039465dbf9693fcafd260e6dcf5fddcdda0ec97a499c9450953861814340445b3f24c7ded879a869c1b7be61c8b69852c1c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-x64.zip\",\n              \"hash\": \"a8aa6371149103c3fda2cb29972aa9343b2d6a3e3ecdbbb7e8b123c1aab1c9ed25f12408a59db3d7661316bb0f13261b1a353140f420e366bc61c5b7aaaabc1d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-x86.exe\",\n              \"hash\": \"25fbc7a782ec0f8927f8d2475a497f46a3b61f4873cdce43356b6a934351c0d0e7370b2064a607106ae3071f505345db45996feb2b34efed18446b56f7abc8bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.2.25164.34/dotnet-sdk-10.0.100-preview.2.25164.34-win-x86.zip\",\n              \"hash\": \"70e416497327a7dcf478551d7fc12daa980750ff31f53770c4d89ca8efca086221c6dd441c31c14d0117f834750b6b15ed0c5380be4112597a645fa3d7a26a06\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"10.0.0-preview.2.25164.1\",\n        \"version-display\": \"10.0.0-preview.2\",\n        \"version-aspnetcoremodule\": [\n          \"20.0.25073.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-linux-arm.tar.gz\",\n            \"hash\": \"ceebf19085159175e60004dba88e4698237c0708df5dd63b225177c70c91df6be110a46e9ee693001e27933050d8637cfc8b739d1e510d09dca562031c866ccc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-linux-arm64.tar.gz\",\n            \"hash\": \"2161e53f30413f27be9a81a7aedace12ad523d9e68b35d6a051e417701d238b1353569e227845aa76a9c889b7ecd1b5e7bafd3a678e2bf29438dae540e970d0a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"eb7ce0764cc88ba00bdc957b98b81105734da5964232996faeaa84e4f132b665c3177636a0a2794d2b7a01e37d963e92d59bbe6a6ee3717a01e8054d7440d48c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cdc179232b5688ef07993d7a78c5481f256f8cefe816fc913e38408fadec9b5f010a90628d6fd04d12e18ccc351b6252a566176154a111df6b6da14309aa0d41\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"793e3a3c49c221e8543850858b273f6f20dfd81cd831525f34d6be2a1cee5494bad210c73cc072d947c93fc820ff2ad709b0a22462bf3fe2c923319e00784d19\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-linux-x64.tar.gz\",\n            \"hash\": \"de14dab978133b9ec979d371c5fbd01e78b106cc330c168d6216ec8a97b0ccfeeb0d4f44386187499760db603483dc0016279dc4cb3f94bfb042cc63d25296fa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-osx-arm64.tar.gz\",\n            \"hash\": \"9e4e6dc4aa1947fde24bd79f6e2d91c43dfe13307cc2037f83e8048dff795645db0439684e750dd6f9cec304899e5e7b2b5f4d961309345d0f6e32a84d00fb7e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-osx-x64.tar.gz\",\n            \"hash\": \"e8994167755eca3bb691f4314da6b702217d285ac58fa8740ecb657a9ae21478a341aae21174023910a784e2683e536df5458953c48cd881c651e22847be8b30\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-win-arm64.exe\",\n            \"hash\": \"e2fa4aa600bf718eb4eff165ada0496899314dbbfa89431e8390ee8fc6b2dc3b28dc6012e599f888aef8ec64a94603e9fc272890bbf7847d9d7cd530178b23aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-win-arm64.zip\",\n            \"hash\": \"76cf96e0604f211151cf28d432190e261e3d37b747c79ff7899a459016c6519aefca75545496ad0985e2b7ba796cf233eadb66e076c4f9b91e160fd153c6ec47\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-win-x64.exe\",\n            \"hash\": \"9868ad7ad3f9a9be4d0cf155c519be771001d79ce35afb2926657686e968ad9e81d06ef415f42fbdd48c593a282393eccf2bb56e60ebc8dc18d3e382b6208968\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-win-x64.zip\",\n            \"hash\": \"cc69e8227cbe6e231b0b30db1e236b3b559f267d5cbd3cdc7b68b670951ed5cd1f0957b8717c983e1eb2d5270c669e91abe5fcba787837828692737e0803ec17\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-win-x86.exe\",\n            \"hash\": \"9f3b6b5152733fdafd770a1c719c2a13de78963c24badafcc36c3fd9e742c46b79ed07fc0da8e6dc0cfa00e76b243545dd91521322a50236c3811075a1d7e866\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-10.0.0-preview.2.25164.1-win-x86.zip\",\n            \"hash\": \"3ea9d72807f9b8e4fff82f8fcb82ea508ad898a9b354ddedab4013f3d97cb9748dd2458540d043ebb4c181a66a4cf62aa9f8c73cf529cf8fe7e0a381d8e0cbc9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-composite-10.0.0-preview.2.25164.1-linux-arm.tar.gz\",\n            \"hash\": \"0bf0a4000ce39a0028243ee24edac150494762af0a9693d9d0c8d59fb9ae5a5112f64aa3a633cafed511ba8dd8a8ab14a46b1045fb32038014eb22637fd9c891\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-composite-10.0.0-preview.2.25164.1-linux-arm64.tar.gz\",\n            \"hash\": \"9ac02fe1e18d987abc7137fe061f76b852c47489705c4c57fd63e9245763d412ab243e724e090ae23d0a1e9cbc09ee92e97224ab73682c27e25538c470aa367e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-composite-10.0.0-preview.2.25164.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"1437e56479078514d0ad1b5b8459f19dd4f282939ebb546e0888f12fdba9a182c41b75e1a762377923edcefc968d315bec3c4201c34132348c895d1fabc2ce26\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-composite-10.0.0-preview.2.25164.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c65448c47260671074782f6d4e4a9daf8db47233c9322647cbc1200f0d9167644e8d6a89a66333266010403537b45f7fc66ef9a7f61b9a4329fe8facea906d15\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-composite-10.0.0-preview.2.25164.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"07d0cff245177cecd10c4548b0468589a2c45d27427bfe60a50772fb2766a51a322d383780cc7cf18e628e311a127fee49972fdcde5b6d65290bbf4e8a317046\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/aspnetcore-runtime-composite-10.0.0-preview.2.25164.1-linux-x64.tar.gz\",\n            \"hash\": \"d67bc54f97d832ad06fd18269ddad48126cc0eee66b7f924158289e23983a01f9f1e48e09bbbe54ebef9499feafccd4116daa27621f7a3df0021c80de99fd2b8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.2.25164.1/dotnet-hosting-10.0.0-preview.2.25164.1-win.exe\",\n            \"hash\": \"32c3ff68d5fd6e6f850ffe846edb16d94f15ecbe015ddcc76175b4907eef4982fc613744dda63e1365e93352fedc57372297228caa829cb75e5de7d5c6c368bf\",\n            \"akams\": \"https://aka.ms/dotnetcore-10-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"10.0.0-preview.2.25163.3\",\n        \"version-display\": \"10.0.0-preview.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.2.25163.3/windowsdesktop-runtime-10.0.0-preview.2.25163.3-win-arm64.exe\",\n            \"hash\": \"d9d635d79b5dcd7bb6deeec3b1b37d1b846b3f2d774479100b112a1458efbd6311466962851d10935cf085f6bad70da9bdf2a99efe4a59ef2eafd8f0fd4e16a8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.2.25163.3/windowsdesktop-runtime-10.0.0-preview.2.25163.3-win-arm64.zip\",\n            \"hash\": \"c037eb951cb2e5fdd49164bd2b53e574c5e2aa73654ce26b7c456e8b824f56be4003112197104f9092dd25d4b31a13af8d56855d3d7140e70b645edc735bae08\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.2.25163.3/windowsdesktop-runtime-10.0.0-preview.2.25163.3-win-x64.exe\",\n            \"hash\": \"9300bb03f852c1a152cc01066331b3ec85da91eb1d7cd4cf326f5c30f13d4b94bec68bfc1e1f003478815dbac9837be0cc23fa78b471ae79e9ab318dbb39e4db\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.2.25163.3/windowsdesktop-runtime-10.0.0-preview.2.25163.3-win-x64.zip\",\n            \"hash\": \"85a44e2dcfaad52582666e6e198aea68856a3c2f2982c0df008e457ce80f4abd1f34c3bfac9c6476e126247bd6a8f6a5085a9dd43db600b6c97bc9630f9cb432\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.2.25163.3/windowsdesktop-runtime-10.0.0-preview.2.25163.3-win-x86.exe\",\n            \"hash\": \"797b3ced6cab54f5c52e5f610b9becaeebfb514821f4d2bfca01498790c9df9601a50fde0532f16dba3fcbb0f262a612e6c5a57a843e613c33b46b3b9a5f7b7a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.2.25163.3/windowsdesktop-runtime-10.0.0-preview.2.25163.3-win-x86.zip\",\n            \"hash\": \"b0b795119c9a9ff1ff82651eba9e118d72adce2aea5ed7b39365b789ae4dcd97173fb52eb2df3e8917a3cf2fb0277581868d8f6e4776ea2f84c0a2f56c6aec5a\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-02-25\",\n      \"release-version\": \"10.0.0-preview.1\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/10.0/preview/preview1/10.0.0-preview.1.md\",\n      \"runtime\": {\n        \"version\": \"10.0.0-preview.1.25080.5\",\n        \"version-display\": \"10.0.0-preview.1\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-linux-arm.tar.gz\",\n            \"hash\": \"8e91e965eace3ac1b472f8d9d2cba51537606cb0ae9b2245dde7f2f9d95f8660800cb609a7152b3efeb1e01663070c80454e6180890ccb81d6533fcc891d124e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-linux-arm64.tar.gz\",\n            \"hash\": \"840d229fc19322093ed5a18c123b5a322e92cad26926bdb709ee382076864a9e89a4dd0ecc13e5e48542b1732ebd19ba65cad1c1b63b94268d38e78bbe6b6b75\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"b907d97484966266c26732fbb6141ebb914be822589fedad26add9680ad6e0dc7d0068507241c0fbae124a9f4a9571838080387e21de81833fc7399be1bdd688\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2cc3f7715ef6d9986db73376bcbe7c6cdbb9f7a58b43e7be051c2ed457f7efc248a3c4dc87738467ad99a82ca385eea53ebc8af11c18900f5f980c8b76d9a475\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"93638a5e766b5859ae58ec3ba5dd81a60a0e6e2e4265d09b1bd71e42987216def1e94aa1c398e33d20baf6b7c021818cee111173b5771ff0ce2bcf56cc964c01\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-linux-x64.tar.gz\",\n            \"hash\": \"b704dfed083d3623024ee96ea6cb8ff6d5d7e1d6f43a27b1b4750a89193f64a966a3211b71f9e77bc7601532db992df38c34d1d1542f060082ae010d532437aa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-osx-arm64.pkg\",\n            \"hash\": \"240c3edb434f3dc4472922306b4f840f45f2730d6fa2e06c1a5b9371f3f2e5d8800efc98a78170ac628b42a2f12af15f903c4543fec834d7c7b174f1eeee7c5e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-osx-arm64.tar.gz\",\n            \"hash\": \"74ea61c16a06f86c6788d46c4d75726f6dd57fbe4c4593eff52a8b1472fdf805abe61830873fd3ef4178a75238f7dcfdf787b71e39a8415ed0f6ce04c4ba1e40\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-osx-x64.pkg\",\n            \"hash\": \"8a80455efde8ef4c0dc1c7f0ec5ba5062daacf91a43b575ab8e5fc2585245212e4f9c178e1702de21f6d9bf66e3181171552e960ab59cdb2e474d207036ef86c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-osx-x64.tar.gz\",\n            \"hash\": \"6ea1da47b60e5361964fff79b9fa3dccc087c9773d342c34def7ee898eaf6de9f46da66644847d981615dedf39698610f850dd64f209bd4410e055f50b3b7e09\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-win-arm64.exe\",\n            \"hash\": \"638af12d1f69479bf47751c6127d2e599ae5d305b83c6c892c4e7fe9d7e1a50b91272898a425280f9c7f2237234cd9d13d014310bea5c05ca7621119db34ee97\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-win-arm64.zip\",\n            \"hash\": \"a9431c593af26ba07bca7cbfee79959e0103aae5ef2918e57890a5674416d8244e6a7c31a7d8b2da7c6224d1e2abc8d1cbd49255767aaa9edfc44f2b2c6d5a6e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-win-x64.exe\",\n            \"hash\": \"51b3ae834a5498f5eaf508bc6f7de02460d43737baa3ef494367946875516adb1a08d74a7d8f353249c1e92a6f86be4dc09da2acf3777d2975157cf20d4da4b6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-win-x64.zip\",\n            \"hash\": \"70067ab2024b104502393066b7f321a580ba99d95608ea67945b5705b487bd614bc0f1ea0653d23e257763fdbdf2fa5351ddc8734a60c6400ca15ad806ba07e7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-win-x86.exe\",\n            \"hash\": \"8398d338f02981bc79f6dc8ffe834d7bd6a922862ab2d7e74094a4372d189419503040879f696db14ebc19ba2f06dcfbd215164b4538947477ee2b7b5dc0d6fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/10.0.0-preview.1.25080.5/dotnet-runtime-10.0.0-preview.1.25080.5-win-x86.zip\",\n            \"hash\": \"2764e0d40d5bf5cdab623d6ec1fcabc3f065f6e44a06f9fa464f0d761638497a8cf455f52feb145588abb8b1b83898453b14afff9e20e7a3518574e69bb63cf2\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"10.0.100-preview.1.25120.13\",\n        \"version-display\": \"10.0.100-preview.1\",\n        \"runtime-version\": \"10.0.0-preview.1.25080.5\",\n        \"vs-version\": \"17.14\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.14 Preview 1)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"9.0\",\n        \"vb-version\": \"17.13\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-arm.tar.gz\",\n            \"hash\": \"d3a76713855026bcb131b97596750e26a43180be9f875811208a3b1b7d88c81e96cc769e97df4c7397a3baace3098f848a8345df6560703ace765db8b21092d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-arm64.tar.gz\",\n            \"hash\": \"645b618ab7fbcce38f82b2ca9a5fab6b11742dc9ca53f4bb65654dbe8385e1789aed034162436af998c59e418b5031607e71856dc38848717a74f8f3292e0c4b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"361c46feb05350d07c969c88cc1a821152cb21535d544817c7bac54914b84d526e3e5aa642fb9cc5dc331ef008bb205138841ad222ec3b9a06b8d08741fae95d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"916807107cdee561f530d393d80c1fc3be55099436f324ef03d2a92792b3cab7df9fc3ccc87c58aad5520232f807de2c4258af4a24eb13715c360cdcf54efa3e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"35a2ce93ba7f39a08fd177118aa0ccfe8c90055b8df98d3e1340644a91c3ea90afc0201bffb0ceb54882313fdd9d3ab01ac23d6f8ccb3ef0670a1af825cd3257\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-x64.tar.gz\",\n            \"hash\": \"98687cb89859fe1847a0cae6c752ce2309231e5ef26ee5285893a5b5794fbfd51ddf8510deb5f700ea298ceffd9cbc0f9f26c9c7b4d90044a82bdd2b98abfcc4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-osx-arm64.pkg\",\n            \"hash\": \"14f83d81cbafcc572a70100037c677911368970e4b20dd471d69595813b688615577b393cb4f8579b284493341b7642ad2f2d00171dd9d1d40d35e886e2ed2dc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-osx-arm64.tar.gz\",\n            \"hash\": \"5e98db2acaacfb3e91ab56fd369a422587060cd4cdf3b6411bc5214d59b985142c459f650ea6b63b6af8f1fffd2f5e39d685b17950814a8b131e57b30e1c2f48\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-osx-x64.pkg\",\n            \"hash\": \"29900a2b93424661ba0300671be017629ca5c5183cdddbeaecae2666f8a5ea6c26e415b7f2286a6644efa27523ebb0f61080b9fad82f85dc9c648344af36268d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-osx-x64.tar.gz\",\n            \"hash\": \"5f60bd5a013e59cfb674b7d2e9333b4e88d8bc8645e8d18cca751e356286986f371d9f217675f703c85c515159e0f74ef54d60e5c7f717c1ee469a7684a57f5d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-arm64.exe\",\n            \"hash\": \"0a676d984d6b67e4cf8b7bc540c777fd50a0b70a3cfc66cdc22719f2b6d9802e66d9fc7bba7388745e8340a92c9a990b00576bcf008bf04f1848f380f563ad5b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-arm64.zip\",\n            \"hash\": \"42bc6fa5fb394801925eff1f296f33deebcbb9e0d506c2a7cbd345b38bbc0f26244df16fc999be62c6ea3b10ec50910650a548d500de3ce87cfcbc9d269a5794\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-x64.exe\",\n            \"hash\": \"cf6f4f097b15488bc027171f16a15a11eca65b0aba4630e998026ebdd8501757f8b68f6be6cde16b333c35392394f8f8c0dc5b4aac4b0df7609376cc6ba151c8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-x64.zip\",\n            \"hash\": \"f574e68dbb4214679a123f2527fe0478c7a7d2ca6900c81e2cfec03984421a894d8e1304a5683f077185b71b4491ed12d449636620f96b640156aa251f4a6a53\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-x86.exe\",\n            \"hash\": \"ae9f4b1b82c5be882e6c112e146e20d50f8fcd6e700263088be2ede90638a62ccd2dbb3c72407abaab636c0478b7a77fe85e60671463dd31e1aa864f33820a6f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-x86.zip\",\n            \"hash\": \"5cb4fbc77bcce3cb6ab158e24d6f10697baedaf236b55fc1b80691ba094820ac4c0b57d8c66af33fa68076f06aa3a679a3383fd095775521a6d13fd0faa59cc4\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"10.0.100-preview.1.25120.13\",\n          \"version-display\": \"10.0.100-preview.1\",\n          \"runtime-version\": \"10.0.0-preview.1.25080.5\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-arm.tar.gz\",\n              \"hash\": \"d3a76713855026bcb131b97596750e26a43180be9f875811208a3b1b7d88c81e96cc769e97df4c7397a3baace3098f848a8345df6560703ace765db8b21092d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-arm64.tar.gz\",\n              \"hash\": \"645b618ab7fbcce38f82b2ca9a5fab6b11742dc9ca53f4bb65654dbe8385e1789aed034162436af998c59e418b5031607e71856dc38848717a74f8f3292e0c4b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-musl-arm.tar.gz\",\n              \"hash\": \"361c46feb05350d07c969c88cc1a821152cb21535d544817c7bac54914b84d526e3e5aa642fb9cc5dc331ef008bb205138841ad222ec3b9a06b8d08741fae95d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-musl-arm64.tar.gz\",\n              \"hash\": \"916807107cdee561f530d393d80c1fc3be55099436f324ef03d2a92792b3cab7df9fc3ccc87c58aad5520232f807de2c4258af4a24eb13715c360cdcf54efa3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-musl-x64.tar.gz\",\n              \"hash\": \"35a2ce93ba7f39a08fd177118aa0ccfe8c90055b8df98d3e1340644a91c3ea90afc0201bffb0ceb54882313fdd9d3ab01ac23d6f8ccb3ef0670a1af825cd3257\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-linux-x64.tar.gz\",\n              \"hash\": \"98687cb89859fe1847a0cae6c752ce2309231e5ef26ee5285893a5b5794fbfd51ddf8510deb5f700ea298ceffd9cbc0f9f26c9c7b4d90044a82bdd2b98abfcc4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-osx-arm64.pkg\",\n              \"hash\": \"14f83d81cbafcc572a70100037c677911368970e4b20dd471d69595813b688615577b393cb4f8579b284493341b7642ad2f2d00171dd9d1d40d35e886e2ed2dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-osx-arm64.tar.gz\",\n              \"hash\": \"5e98db2acaacfb3e91ab56fd369a422587060cd4cdf3b6411bc5214d59b985142c459f650ea6b63b6af8f1fffd2f5e39d685b17950814a8b131e57b30e1c2f48\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-osx-x64.pkg\",\n              \"hash\": \"29900a2b93424661ba0300671be017629ca5c5183cdddbeaecae2666f8a5ea6c26e415b7f2286a6644efa27523ebb0f61080b9fad82f85dc9c648344af36268d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-osx-x64.tar.gz\",\n              \"hash\": \"5f60bd5a013e59cfb674b7d2e9333b4e88d8bc8645e8d18cca751e356286986f371d9f217675f703c85c515159e0f74ef54d60e5c7f717c1ee469a7684a57f5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-arm64.exe\",\n              \"hash\": \"0a676d984d6b67e4cf8b7bc540c777fd50a0b70a3cfc66cdc22719f2b6d9802e66d9fc7bba7388745e8340a92c9a990b00576bcf008bf04f1848f380f563ad5b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-arm64.zip\",\n              \"hash\": \"42bc6fa5fb394801925eff1f296f33deebcbb9e0d506c2a7cbd345b38bbc0f26244df16fc999be62c6ea3b10ec50910650a548d500de3ce87cfcbc9d269a5794\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-x64.exe\",\n              \"hash\": \"cf6f4f097b15488bc027171f16a15a11eca65b0aba4630e998026ebdd8501757f8b68f6be6cde16b333c35392394f8f8c0dc5b4aac4b0df7609376cc6ba151c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-x64.zip\",\n              \"hash\": \"f574e68dbb4214679a123f2527fe0478c7a7d2ca6900c81e2cfec03984421a894d8e1304a5683f077185b71b4491ed12d449636620f96b640156aa251f4a6a53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-x86.exe\",\n              \"hash\": \"ae9f4b1b82c5be882e6c112e146e20d50f8fcd6e700263088be2ede90638a62ccd2dbb3c72407abaab636c0478b7a77fe85e60671463dd31e1aa864f33820a6f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/10.0.100-preview.1.25120.13/dotnet-sdk-10.0.100-preview.1.25120.13-win-x86.zip\",\n              \"hash\": \"5cb4fbc77bcce3cb6ab158e24d6f10697baedaf236b55fc1b80691ba094820ac4c0b57d8c66af33fa68076f06aa3a679a3383fd095775521a6d13fd0faa59cc4\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"10.0.0-preview.1.25120.3\",\n        \"version-display\": \"10.0.0-preview.1\",\n        \"version-aspnetcoremodule\": [\n          \"20.0.25051.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-linux-arm.tar.gz\",\n            \"hash\": \"253c3e18705954121c843d367e3b2cbb8ffc46649f2e0db255b35833163e5dec6b5df41c4970102281af68cf8d912222db168de39e2171af39b0cc163bc17eb7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-linux-arm64.tar.gz\",\n            \"hash\": \"4f996f48fd215b63b84daf24a4ab08dd5b6877dab6bef0e6c35ec945152b6e5b22dcba9d50ac1198d5876313f0bcd0c800aa5a8cc83ec7647e77466f74dac22e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"465797b3b8d1552e9a46092481f1c816827bf01c532cb8b7aae110870a4ec9f12500adb91edafbcbbf1ae46338a4851845d56de21274d5c6c2b6ccb395d9514f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7709a4a05a0e56a4a585089051159db840c0a8d3072bb936076b1c70c89c2f1a0b54783e64d762a2d0dd61b6bb5144dbacad567ba46992196c41014a51badccf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"015564ad968b0916f122aaebcc71bd6800ac480179cb7423dca45450b9e61d271207a86be5a7cc0c1628b1e7fa4906133819d47beaa180ca75c04101afcee9b8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-linux-x64.tar.gz\",\n            \"hash\": \"bf5d4f5c1dfa63e937f4d0e6b800283437a3df5c55b2e426c3efb0b8dc9794ba704f5d4468acc130f0f3b81ace3e3d46ee11945bbc5f34bbd29d7b54c36630fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-osx-arm64.tar.gz\",\n            \"hash\": \"43b24242a57da6735bef26f4a039aa1c9bc7971f4d2d8ba28a8c019da133207f180d672144e4e122e274a7da11c65ef8932e9544d673d506b9e25ec1de740616\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-osx-x64.tar.gz\",\n            \"hash\": \"5833bd67f1c7e2b16a3bacab66c94c20a3cee2ed9619c7954e6be164b802438eef602d4adaf057a13c729b6e357ff29e923c4be16b852836132848b90c22ed62\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-win-arm64.exe\",\n            \"hash\": \"3b9c557b748b0cc8f0a9b73e0d19a3300049f4adb01e859ffe4d45c7aee81800dfbe43b779755fb51c16c1b1d005e9ef26f0f63226a241567ac5b552bcc8e5c3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-win-arm64.zip\",\n            \"hash\": \"388de23c5d88946f343ea885510faf6ab629dfccbf8fc3db13d516df154d876b55c2b6faf31cbca50910c6ab2802cdc633d92ec57f33d5bb9cba97ca9ef7d95b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-win-x64.exe\",\n            \"hash\": \"836b26c38e372af0d89b54c449874f56f253a36185c77ee1cd7d81225d0bbab3e842949268b047f8b73563bcbee84e1ec386c754b271ded9f090f8445e332cf5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-win-x64.zip\",\n            \"hash\": \"a5e5c941ad8b831c31fe623d0d3675bb9e1b4c1a442a5890061b83ff874e0c106e87fa18394873798c193de8ce0146c90d5903e98c0926929614b15ffdde2f12\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-win-x86.exe\",\n            \"hash\": \"243fb5db98556388120a7213c2950cd9a3a6e87d2c64df29a415f2d6b5f0f76fefbbf032b8f06edc932073503b792d396c36471bed676de2e48da975abff9942\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-10.0.0-preview.1.25120.3-win-x86.zip\",\n            \"hash\": \"12ba1b42491c7327358671429bed97ecd1483ad248c2a60c0402e9c29946ca5b38746c8fe006ec683ec7a33efdf8870e4955b122ce39d7bb62febaf5baa93fb3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-composite-10.0.0-preview.1.25120.3-linux-arm.tar.gz\",\n            \"hash\": \"35b67d2a31281e8ed8a6194d661e78410b5b2c8c552b0568fd24133e108978f5e31f6f7bdd21424cc0b324d1750b0f0b56a066c78694f446749048a6a10aea1e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-composite-10.0.0-preview.1.25120.3-linux-arm64.tar.gz\",\n            \"hash\": \"c6dd0af60294bfc9a0de1cf39b859a5cae2c9c54a5ef7182fc4d140bf1b9ab2aee0f117865792dff98fb892a7e9006b6cdc299e0b4c531a7188a9b04d23787fa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-composite-10.0.0-preview.1.25120.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"31ced448fa58247f0653e178e1205afadf4ee85ea8bc6db59a5d71db7d60ebb0ef9b771ca39ac7e3c7faeba37eb4995c23446550d4f5aed2441ce1508ed3a36b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-composite-10.0.0-preview.1.25120.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"631cab0c707240409314e515f65ea7cc67e4be5234fd5d2042f119bcd54ebfa582e4e4bca77501f12f66b7efda5f66cd5dcc390a6561ae85005b6849f5c61afb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-composite-10.0.0-preview.1.25120.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"ce56388e2cf567bbae78be9e63b7bac5a5f00202357f60c3b68d98d09b5fcc2ae281811cf163192e51a3bce0f3e655927438346a5648b9dfcf85c360993d71d7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/aspnetcore-runtime-composite-10.0.0-preview.1.25120.3-linux-x64.tar.gz\",\n            \"hash\": \"a9771a74c99e5c4e878e9371e00ed84b243c057ece276209d51d32538fe8db621e4af4245d92a4015b6f071f7b4f8c15a78593f8f8cf089d94012e2def4d10f7\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.0-preview.1.25120.3/dotnet-hosting-10.0.0-preview.1.25120.3-win.exe\",\n            \"hash\": \"a417fde9b7e1d143408d74b8a92999337221b2042c558e83e0fba34f8706ed024b3208ffd4b4125ea4e1821d8fffc46b47425a016b272e18fe415c724831f525\",\n            \"akams\": \"https://aka.ms/dotnetcore-10-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"10.0.0-preview.1.25080.4\",\n        \"version-display\": \"10.0.0-preview.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.1.25080.4/windowsdesktop-runtime-10.0.0-preview.1.25080.4-win-arm64.exe\",\n            \"hash\": \"f052ba22d9737c5cc00035ec6484bd0210e53837b2bc07e6bac08627d00213a8aad225912fd163425961d8fdc4ee5ddce0e7cab577e81ba5c79b546ded58eb9f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.1.25080.4/windowsdesktop-runtime-10.0.0-preview.1.25080.4-win-arm64.zip\",\n            \"hash\": \"e47be4dee94ac62bcc43389c6e7542002c280c694bb3780b9e67d0255f8701f238ff76f81bb5604b4df3ade478dedcf53a8ef56d9a2f1547e2c23b862a17cb4f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.1.25080.4/windowsdesktop-runtime-10.0.0-preview.1.25080.4-win-x64.exe\",\n            \"hash\": \"796ac79ed66d15cb4f0151645f2e424a60d41d034f6ac647515a93390a9c7d814fe6691c6a209957a14a296f499f0912f744a3fde7e7cc47855f624b8801439b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.1.25080.4/windowsdesktop-runtime-10.0.0-preview.1.25080.4-win-x64.zip\",\n            \"hash\": \"0b89790cda0d425771d2a8159bf4db768e5931892392af163ffd34fa494dce1dc22f025efb799a513b77e7a2172a5012bf9211b35d2a9e755bc39c326f487c15\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.1.25080.4/windowsdesktop-runtime-10.0.0-preview.1.25080.4-win-x86.exe\",\n            \"hash\": \"985a3919b9a31cc74e8a8f448800406ae008b6b512b08b081bc88eb595f3c1a0caff4c65e316023a4cb538d52d4daea440326cbdbc9004d99e2b4b602a78d684\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/10.0.0-preview.1.25080.4/windowsdesktop-runtime-10.0.0-preview.1.25080.4-win-x86.zip\",\n            \"hash\": \"608b95683025ca023714ef07c5c6006f34eb01f161517a51039e08210be9d36fcaa1508c03fa63758ffabc1f13de55b902ff0c5032a3753a0e555b84c9e1ad6e\"\n          }\n        ]\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "JexusManager/Resources/2.0-release.json",
    "content": "{\n  \"channel-version\": \"2.0\",\n  \"latest-release\": \"2.0.9\",\n  \"latest-release-date\": \"2018-07-10\",\n  \"latest-runtime\": \"2.0.9\",\n  \"latest-sdk\": \"2.1.202\",\n  \"release-type\": \"sts\",\n  \"support-phase\": \"eol\",\n  \"eol-date\": \"2018-10-01\",\n  \"lifecycle-policy\": \"https://dotnet.microsoft.com/platform/support/policy/\",\n  \"releases\": [\n    {\n      \"release-date\": \"2018-07-10\",\n      \"release-version\": \"2.0.9\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-8171\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8171\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-8356\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8356\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.0/2.0.9.md\",\n      \"runtime\": {\n        \"version\": \"2.0.9\",\n        \"version-display\": \"2.0.9\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.9/dotnet-runtime-2.0.9-linux-x64.tar.gz\",\n            \"hash\": \"2b49b24ef712fbfc056e0fda95ff18037b4ec938ca8bb41f4c336b6a50870e922f5093684ac92c4bb8e1155b03c36d132d7f90817793f31c9ade5267fff6629a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.9/dotnet-runtime-2.0.9-osx-x64.tar.gz\",\n            \"hash\": \"b59fdfd1763420ae39c2984cb72b122fd0118dee77d7a4ceaac1683fc6b86345f80a9c6974b34254b523a418da518f448cba8ade54b3443b923f590107ce3dfb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.9/dotnet-runtime-2.0.9-osx-x64.pkg\",\n            \"hash\": \"fd1f5e4e6ed08f47e87b907d1c28adcfb983b53822614a01fe23a8d1d81862e2b75b7ebfc4e28770f7486080d72e81179ebb05b569be5d7c2410bf52bf1270c2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.9/dotnet-runtime-2.0.9-win-x86.zip\",\n            \"hash\": \"e73a78ee66f872678594d01720849a3b95a4911ded6700a55b2dbc35fa54a42aeadeeb3de0706a1b96c7b2ed383bc431b8c6e36ce8082bb673132b3d80c7d441\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.9/dotnet-runtime-2.0.9-win-x64.zip\",\n            \"hash\": \"4e03072925ca65f350112916eac8f442ee86f84de5fd8643d6db9eb96e2175351fdee0fb8ebed6a508b5ce2a3f73bdd4b7a084adc0c765c5249c019f601179f4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.9/dotnet-runtime-2.0.9-win-x86.exe\",\n            \"hash\": \"159faebadf18cd2e06b3ca1b71f28a65ad6c3a4be78a090fb1f0947951d392d5bbd9bca9055610658c4e16dab66bc1e13200ac869b88725f6e4ba91de2f62822\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.9/dotnet-runtime-2.0.9-win-x64.exe\",\n            \"hash\": \"9d8ba6ae17a5519a8a4ed043919114d98cf36595c5c3fc82ed699c225b56e07d782680e4a57b1a83f4c9073b75045c89770ee4b0d997a8c19776d1e946bde478\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.202\",\n        \"version-display\": \"2.1.202\",\n        \"runtime-version\": \"2.0.9\",\n        \"vs-version\": \"15.7\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.202/dotnet-sdk-2.1.202-linux-x64.tar.gz\",\n            \"hash\": \"e785b9b488b5570708eb060f9a4cb5cf94597d99a8b0a3ee449d2e5df83771c1ba643a87db17ae6727d0e2acb401eca292fb8c68ad92eeb59d7f0d75eab1c20a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.202/dotnet-sdk-2.1.202-osx-x64.tar.gz\",\n            \"hash\": \"74dd07c73576f4c3e5fb68fb2bab738851ea4505f0ba50b493270ad6627ad7bd958b6d6dc937fe0a9b052a54bb8e5e3f77a521d1dab14fb6d090a677a2403e84\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.202/dotnet-sdk-2.1.202-osx-x64.pkg\",\n            \"hash\": \"e4156b91c1da41bda1873febeb8a54f6b3b56d1f966fa3b0954bb553ba49f6aaec4e22ddc5dd44b55bec9d0ddd86c0b38a90063ffe6acd0db3c70a024f7d271e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/f/c/1/fc16c864-b374-4668-83a2-f9f880928b2d/dotnet-sdk-2.1.202-osx-gs-x64.pkg\",\n            \"hash\": \"e4156b91c1da41bda1873febeb8a54f6b3b56d1f966fa3b0954bb553ba49f6aaec4e22ddc5dd44b55bec9d0ddd86c0b38a90063ffe6acd0db3c70a024f7d271e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.202/dotnet-sdk-2.1.202-win-x86.zip\",\n            \"hash\": \"d56c80643b2c404920362a738949c38a00c7710c146ac53f798a610ec40c8075b347be8acddb51fc296b7912f63fa7e41867439e2239fbeb8f5e4ec6764b71ce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.202/dotnet-sdk-2.1.202-win-x64.zip\",\n            \"hash\": \"ae0c8044a021498089cfd5dbe8888acca8cdd3295b42ff7f447ac3b11f6e43dac3b6394c4055ae17dcf7c6800aa2d59b9c62859ff1dde4496dfbb59047597bf6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.202/dotnet-sdk-2.1.202-win-x86.exe\",\n            \"hash\": \"75271cc08343510c80d56d28eacfe47e58a788e08b72f9833e47ec92295b12f64eab1199f9f639946f85bfa069b16acce9023b0921d229a677acf24680c7f484\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.202/dotnet-sdk-2.1.202-win-x64.exe\",\n            \"hash\": \"6e65baed24518266cf1edaead53cdf9cde467e8be20806c00635a7e5fc1a1ef5d803926bb0e36badaa86c40c90f3f33eed8b33749467d62ca2f7317cd4e35d4b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/f/c/1/fc16c864-b374-4668-83a2-f9f880928b2d/dotnet-sdk-2.1.202-win-gs-x64.exe\",\n            \"hash\": \"6e65baed24518266cf1edaead53cdf9cde467e8be20806c00635a7e5fc1a1ef5d803926bb0e36badaa86c40c90f3f33eed8b33749467d62ca2f7317cd4e35d4b\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.0.9\",\n        \"version-display\": \"2.0.9\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/3/a/3/3a3bda26-560d-4d8e-922e-6f6bc4553a84/DotNetCore.2.0.9-WindowsHosting.exe\",\n            \"hash\": \"bea34b32752c1a9ab589b43df68fbb90fc63c34564603619a4ac516d8732f37d4867f07602c4ce0c276ebe133a64bbcabe4586cb89459bb2b8929ef848e3b450\"\n          },\n          {\n            \"name\": \"dotnet-hosting-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/3/a/3/3a3bda26-560d-4d8e-922e-6f6bc4553a84/dotnet-hosting-2.0.9-linux-x64.tar.gz\",\n            \"hash\": \"9d99d6a44ec5ce01f994d770195d4ff602116c7c79a183e6077fc6837bedafd1353668fb8f3912caaf04413887a42359f4b1b9eec89d992b97cf1a4ea7fa1f43\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/3/a/3/3a3bda26-560d-4d8e-922e-6f6bc4553a84/AspNetCore.2.0.9.RuntimePackageStore_x64.exe\",\n            \"hash\": \"7f562a2c5171f86ba4278e899d4bce29a4844cfbe13825d524c2b6b28ddb94d9fb2da87dd7da43e7e8c0951d8d6f6f7fa511dea769c8eee035c872982c00b341\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/3/a/3/3a3bda26-560d-4d8e-922e-6f6bc4553a84/AspNetCore.2.0.9.RuntimePackageStore_x86.exe\",\n            \"hash\": \"fb59a3b70373a22241fa6f753c72c1ac726784e66a7685b5cff42a90be82a8034346875a443cda20d25e95016e071c4b27e2d60809d0527b20c64f86dbe3b585\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x64.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/3/a/3/3a3bda26-560d-4d8e-922e-6f6bc4553a84/aspnetcore-store-2.0.9-win7-x64.zip\",\n            \"hash\": \"876278b13fa35320a5402016e8bf07f51a316c9ba9a0ddf24aeae68f25f17ad07aa87942e0e802d7ff04a1c685db1e3964f5ed2dcd4bb9764d1bd0fa097c566d\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x86.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/3/a/3/3a3bda26-560d-4d8e-922e-6f6bc4553a84/aspnetcore-store-2.0.9-win7-x86.zip\",\n            \"hash\": \"0245852f8b813af572f5725bc19a6e083928aee5ff7afb421cabdf79baa5451008da43a633a599a89e213eff5e5a08fd0330180ea26fcbd3b7a502fe3c7a0f28\"\n          },\n          {\n            \"name\": \"aspnetcore-store-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/3/a/3/3a3bda26-560d-4d8e-922e-6f6bc4553a84/aspnetcore-store-2.0.9-osx-x64.tar.gz\",\n            \"hash\": \"1554182e202b5d5bfb2d2fea367ee6efbc996dc1ace65568f81784a5b920dbb0efaec29f35f208899477252d2cf0704ca9934178890b0d9776d14952c8b69014\"\n          },\n          {\n            \"name\": \"aspnetcore-store-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/3/a/3/3a3bda26-560d-4d8e-922e-6f6bc4553a84/aspnetcore-store-2.0.9-linux-x64.tar.gz\",\n            \"hash\": \"7724637f1c37a0ab6b3535acdb38583e248fb06f59e25630f45107c6affd32b1397db2f6e3a91a7ab07a42c3d7e4ff45cd50bf9c406029ca50f07491007b64e2\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-05-21\",\n      \"release-version\": \"2.1.201\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": null,\n      \"runtime\": null,\n      \"sdk\": {\n        \"version\": \"2.1.201\",\n        \"version-display\": \"2.1.201\",\n        \"runtime-version\": \"2.0.8\",\n        \"vs-version\": \"15.7\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.201/dotnet-sdk-2.1.201-linux-x64.tar.gz\",\n            \"hash\": \"3c456d5f564e7c56a8b33f4116ba79f5ec1c5f6ee87494532efb68f407f25deae1d075c83e6f86624e51b99b090c7d3f1fd6ecd812808aede9017a8877782358\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.201/dotnet-sdk-2.1.201-osx-x64.tar.gz\",\n            \"hash\": \"3d2d49f6b6b22e777e80d3ea396ee28e4e71d133478d5aa3e118ed48d3933071d4abc108ea6fded410b218ed9e15b05e99f52f6741af5d102aa0323a01a795b7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.201/dotnet-sdk-2.1.201-osx-x64.pkg\",\n            \"hash\": \"071d07df85ba1f497b0cc13787fcbdc77c4c62c0f3e76214242ef2b4dc4f2166cc28041be040c50c83010852f9c8516aed34e3f2bbcf5111a4fa41058f3042ce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/C/7/D/C7DCA2DE-7163-45D1-A05A-5112DAF51445/dotnet-sdk-2.1.201-osx-gs-x64.pkg\",\n            \"hash\": \"071d07df85ba1f497b0cc13787fcbdc77c4c62c0f3e76214242ef2b4dc4f2166cc28041be040c50c83010852f9c8516aed34e3f2bbcf5111a4fa41058f3042ce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.201/dotnet-sdk-2.1.201-win-x86.zip\",\n            \"hash\": \"08ec5d4e913f973aaebbe34fc34bfc1671a60dd132b2a2323ca48be3af71482d17e6347d72f164ac509d0d6aaaee5ee5f841ab4244ba6eaf49ac1fb424dffe79\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.201/dotnet-sdk-2.1.201-win-x64.zip\",\n            \"hash\": \"34c4c7a48ee9b88cf2c523d615816b1c597f0187e716271926e7fbe478b92f6d6c0faab4884cc897309f38168a033039a8315a395e887a4c90dddb1791f7d2a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.201/dotnet-sdk-2.1.201-win-x86.exe\",\n            \"hash\": \"d43906850d834df01e4664941633cb75db765fbab6b73057a7eec98b1be43de8fed08ccf6d73c1453baa4666c8f7bf26e9cb70592078d8102a6ae17c4aa20fc0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.201/dotnet-sdk-2.1.201-win-x64.exe\",\n            \"hash\": \"20ff0401d31efe31829c4915b802de41ba6ea06f474ab8e89d63dd75f27ee0fea7613f02db539e28224941706c56cc82bdcc1ef6e899ee98d4a79d364291967d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/C/7/D/C7DCA2DE-7163-45D1-A05A-5112DAF51445/dotnet-sdk-2.1.201-win-gs-x64.exe\",\n            \"hash\": \"20ff0401d31efe31829c4915b802de41ba6ea06f474ab8e89d63dd75f27ee0fea7613f02db539e28224941706c56cc82bdcc1ef6e899ee98d4a79d364291967d\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-05-08\",\n      \"release-version\": \"2.0.8\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-0765\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0765\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.0/2.1.200-sdk.md\",\n      \"runtime\": {\n        \"version\": \"2.0.8\",\n        \"version-display\": \"2.0.8\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/dotnet-runtime-2.0.7-linux-x64.tar.gz\",\n            \"hash\": \"d8f6035a591b5500a8b81188d834ed4153c4f44f1618e18857c610d0b332d636970fd8a980af7ae3fbff84b9f1da53aa2f45d8d305827ea88992195cd5643027\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/dotnet-runtime-2.0.7-osx-x64.tar.gz\",\n            \"hash\": \"0fd31dab707f4c143a382474b93f872c2d1c3dd88fadc882e5fb5958c35c41d9ff150841efcfedf2b4eff0a9af8d76b2ad672df98572f9c10d58b4be2303e8c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/dotnet-runtime-2.0.7-osx-x64.pkg\",\n            \"hash\": \"2913259f616c30750296311262fa044982a701f07fff9359026514e7f399c3a5261de019cc6ea0e8b167a41d0de5c177e9439faa0c82e0ae5e31d3de5bc656d5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/dotnet-runtime-2.0.7-win-x86.zip\",\n            \"hash\": \"facbe62fe77499544aa06125278b5a3e2b668d58ffbb5d9028c629ed93f05a664b2f2778100457aa47654219af124dfeaffec896c7ad684b525c7d3860e64551\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/dotnet-runtime-2.0.7-win-x64.zip\",\n            \"hash\": \"9e6bae56c972858721119eb42e294092d2a203c554e72d9c42091af8ec81bb632750e054c044c56ef821a58e45fb462d1184d199d9bb36db119982c4a8fd4588\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/dotnet-runtime-2.0.7-win-x86.exe\",\n            \"hash\": \"2875841cad57b7424769974769cde87bba34ad9eb9f174a40c21bc45b94a1c6e5efb6b7d2a80d6bab76cf8b1199220736d744de2ffccb9c4b67f79c3295e506e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/dotnet-runtime-2.0.7-win-x64.exe\",\n            \"hash\": \"596347e65aea327d14de5c30aadc04bddf3443f471a96619a498614c66a2629f707fa6d03a7225d1e924316217200d34154e8c07c92f80f993a2df6b70593e16\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.200\",\n        \"version-display\": \"2.1.200\",\n        \"runtime-version\": \"2.0.8\",\n        \"vs-version\": \"15.7\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.200/dotnet-sdk-2.1.200-linux-x64.tar.gz\",\n            \"hash\": \"c1b07ce8849619ca505aafd2983bcdd7141536ccae243d4249b0c9665daf107e03a696ad5f1d95560142cd841a0888bbf5f1a8ff77d3bdc3696b5873481f0998\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.200/dotnet-sdk-2.1.200-osx-x64.tar.gz\",\n            \"hash\": \"aa5c5eb13a663b33a82ab30222885ec95ac2079ed743375fb98be913373596e64426d55089c0dc9ec64710a19a1e3f746af4a20c46b98aa7fe0e1113ef603ff7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.200/dotnet-sdk-2.1.200-osx-x64.pkg\",\n            \"hash\": \"f0a7a36432948a570b1d8ecb48a5a5dba73d93ade43a6df989237c9d2d898ba5343704fc81cd150fc08abe0c66656cd7b10149aa442cdd333324bec0321c3aac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/3/7/1/37189942-C91D-46E9-907B-CF2B2DE584C7/dotnet-sdk-2.1.200-osx-gs-x64.pkg\",\n            \"hash\": \"f0a7a36432948a570b1d8ecb48a5a5dba73d93ade43a6df989237c9d2d898ba5343704fc81cd150fc08abe0c66656cd7b10149aa442cdd333324bec0321c3aac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.200/dotnet-sdk-2.1.200-win-x86.zip\",\n            \"hash\": \"304887eaa7189d31024eca3ca02e6b43ce01e85193551365eec1c437f3f7e5c6b7bdf4563bd4f7964c6f4d97efa1f266e304817a5f7fa8dc366a6c90e0b325af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.200/dotnet-sdk-2.1.200-win-x64.zip\",\n            \"hash\": \"5cae6f4c577182e7d84d991b9d20162c1a76ce17f65b7b52a7e6df8d98ec389e03626f61969eaed4f23a5f6c96a3ab188e71a0b94cc58f86e485ac9296c4af64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.200/dotnet-sdk-2.1.200-win-x86.exe\",\n            \"hash\": \"04ea62e1391820ee3289a6c622221908ac7336465d8cf6615228d6bfcab7e46419c3e6a826b27f41dd8ec629dc24aebf9af8ef85d0e6bf1fb8664ffff238d96f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.200/dotnet-sdk-2.1.200-win-x64.exe\",\n            \"hash\": \"0bde9fbd2d5f1e3376e96a499056dd29d788ad98674ea5e6c683a66709293374b418f094d0ac17388b6435fdade61f276752155fe158df798c1213083b5e0ea9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/3/7/1/37189942-C91D-46E9-907B-CF2B2DE584C7/dotnet-sdk-2.1.200-win-gs-x64.exe\",\n            \"hash\": \"0bde9fbd2d5f1e3376e96a499056dd29d788ad98674ea5e6c683a66709293374b418f094d0ac17388b6435fdade61f276752155fe158df798c1213083b5e0ea9\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.0.8\",\n        \"version-display\": \"2.0.8\",\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/DotNetCore.2.0.8-WindowsHosting.exe\",\n            \"hash\": \"393346d9668b4cfb4d520bc198fdff43d3137ef35a512b5ca4c8c7607c99e08c0ea173bb478ec5a8b75c7e719425abc224c2dd88ddf46b92bafec4a9e3f0bd6a\"\n          },\n          {\n            \"name\": \"dotnet-hosting-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/dotnet-hosting-2.0.8-linux-x64.tar.gz\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/AspNetCore.2.0.8.RuntimePackageStore_x64.exe\",\n            \"hash\": \"8c9199f6ede36c24c9d5350e5b71401d2154ecb37e641c0fac9c53055235a4e4844a37369255c59926924f3d4f96868affe47fbb9fef8b96fc5f658cf7dc5cca\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/AspNetCore.2.0.8.RuntimePackageStore_x86.exe\",\n            \"hash\": \"1c943c82451bdda0bc3526bd3471010ab5a9a508ff07396888986e05b55218fea8c89eb6ba504c300b438a68b100d0198549ff3ad0546280d0be15db50150279\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x64.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/aspnetcore-store-2.0.8-win7-x64.zip\",\n            \"hash\": \"c739e056f62391c8d2b8d3348c0116a54b13c1d81ba938b8ce84897289f2ac2f81ce4539599e6014389e67feead27fcea2ec09e72cd920dbf5405b9c5ec13624\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x86.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/aspnetcore-store-2.0.8-win7-x86.zip\",\n            \"hash\": \"89e63e53f0b903de59ba0174128b7baeba4a1ce6f2c95732916e50b65fc405a601d05cfe0c018db809fdd890cd24ec65ced3ce77989cc4da37433f2236a07e03\"\n          },\n          {\n            \"name\": \"aspnetcore-store-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/aspnetcore-store-2.0.8-osx-x64.tar.gz\",\n            \"hash\": \"045034f21790e92f493ce62e6e51be4d48e9138d464b9a39febc5c599e83d8e1d30bbdfdf3509252c17a621bfc894adf39a9c4797e310253acff86b9f770aec5\"\n          },\n          {\n            \"name\": \"aspnetcore-store-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/E/F/7/EF7302FE-4F84-4529-9E3A-893450F76501/aspnetcore-store-2.0.8-linux-x64.tar.gz\",\n            \"hash\": \"12389d923f71b639cd0f3c5267a06cb65e0f7aae026b545956a6d90ab07e65bee05c18713255fa7de4e910d0ec52de3a4afb40a08545f984415a9690d6adce35\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-04-17\",\n      \"release-version\": \"2.0.7\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.0/2.0.7.md\",\n      \"runtime\": {\n        \"version\": \"2.0.7\",\n        \"version-display\": \"2.0.7\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.7/dotnet-runtime-2.0.7-linux-x64.tar.gz\",\n            \"hash\": \"d8f6035a591b5500a8b81188d834ed4153c4f44f1618e18857c610d0b332d636970fd8a980af7ae3fbff84b9f1da53aa2f45d8d305827ea88992195cd5643027\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.7/dotnet-runtime-2.0.7-osx-x64.tar.gz\",\n            \"hash\": \"0fd31dab707f4c143a382474b93f872c2d1c3dd88fadc882e5fb5958c35c41d9ff150841efcfedf2b4eff0a9af8d76b2ad672df98572f9c10d58b4be2303e8c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.7/dotnet-runtime-2.0.7-osx-x64.pkg\",\n            \"hash\": \"2913259f616c30750296311262fa044982a701f07fff9359026514e7f399c3a5261de019cc6ea0e8b167a41d0de5c177e9439faa0c82e0ae5e31d3de5bc656d5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.7/dotnet-runtime-2.0.7-win-x86.zip\",\n            \"hash\": \"facbe62fe77499544aa06125278b5a3e2b668d58ffbb5d9028c629ed93f05a664b2f2778100457aa47654219af124dfeaffec896c7ad684b525c7d3860e64551\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.7/dotnet-runtime-2.0.7-win-x64.zip\",\n            \"hash\": \"9e6bae56c972858721119eb42e294092d2a203c554e72d9c42091af8ec81bb632750e054c044c56ef821a58e45fb462d1184d199d9bb36db119982c4a8fd4588\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.7/dotnet-runtime-2.0.7-win-x86.exe\",\n            \"hash\": \"2875841cad57b7424769974769cde87bba34ad9eb9f174a40c21bc45b94a1c6e5efb6b7d2a80d6bab76cf8b1199220736d744de2ffccb9c4b67f79c3295e506e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.7/dotnet-runtime-2.0.7-win-x64.exe\",\n            \"hash\": \"596347e65aea327d14de5c30aadc04bddf3443f471a96619a498614c66a2629f707fa6d03a7225d1e924316217200d34154e8c07c92f80f993a2df6b70593e16\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.105\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.7\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.105/dotnet-sdk-2.1.105-linux-x64.tar.gz\",\n            \"hash\": \"b5e71dee8720595b0eff7518cca49854ed183e7ca68b98e2ca0580be3f6893f25a1bb267367601f575529a0fd8c94bb379a1411564ed5beaa340a54f37a5e16a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.105/dotnet-sdk-2.1.105-osx-x64.tar.gz\",\n            \"hash\": \"68b060271e5e5d8257a9f87d55c6e9386fa72bec2fa6d9d37d5634837f1a2ccfe4a09934988e4f41aa4efa131708bf5cc1dac2c0609edcd86b966edf2319cae7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.105/dotnet-sdk-2.1.105-osx-x64.pkg\",\n            \"hash\": \"16b994d8b7f73f5146c5deba3880fd29482a3c807e86fc2d74b5c5a09a02dc728c395ebf6b1b8680fdbc357954cc441a1c76158bdd9897cba1e5e5a116b75cad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/2/E/C/2EC018A0-A0FC-40A2-849D-AA692F68349E/dotnet-sdk-2.1.105-osx-gs-x64.pkg\",\n            \"hash\": \"16b994d8b7f73f5146c5deba3880fd29482a3c807e86fc2d74b5c5a09a02dc728c395ebf6b1b8680fdbc357954cc441a1c76158bdd9897cba1e5e5a116b75cad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-nj-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/2/E/C/2EC018A0-A0FC-40A2-849D-AA692F68349E/dotnet-sdk-2.1.105-osx-nj-x64.pkg\",\n            \"hash\": \"16b994d8b7f73f5146c5deba3880fd29482a3c807e86fc2d74b5c5a09a02dc728c395ebf6b1b8680fdbc357954cc441a1c76158bdd9897cba1e5e5a116b75cad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.105/dotnet-sdk-2.1.105-win-x86.zip\",\n            \"hash\": \"0e027eda462877d2aa2bbe9b763e2494a01c1a739190e317cde3dd7a905e7cb5c20036ef90e846ba2c9e251386859e4b0600016a536da1b392ef12eb04236236\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.105/dotnet-sdk-2.1.105-win-x64.zip\",\n            \"hash\": \"9e902468b1f40434092d0100dd0054344f085d5d64a325d1e27c86fb2f54cccddda615bc119e3cffa357b8d9ffad455ba6ea9739ac592795d3499d0f1fe498d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.105/dotnet-sdk-2.1.105-win-x86.exe\",\n            \"hash\": \"a06393e1030e88f39628e070c6743745d142c754f0a604d26f33a35a5635ad6622f2994db719fa566352c1d0dc1f97a58dcf2792e80e6529359ae1e5454ee2a6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.105/dotnet-sdk-2.1.105-win-x64.exe\",\n            \"hash\": \"35b64e8fc1ed63778880790fcb59d2e92176e1673753b5b9c9c1e0eb1b87353eb940453abdff51457467f98a0c49a574feff1301536410ba036dc3d63affd439\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/2/E/C/2EC018A0-A0FC-40A2-849D-AA692F68349E/dotnet-sdk-2.1.105-win-gs-x64.exe\",\n            \"hash\": \"35b64e8fc1ed63778880790fcb59d2e92176e1673753b5b9c9c1e0eb1b87353eb940453abdff51457467f98a0c49a574feff1301536410ba036dc3d63affd439\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-nj-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/2/E/C/2EC018A0-A0FC-40A2-849D-AA692F68349E/dotnet-sdk-2.1.105-win-nj-x64.exe\",\n            \"hash\": \"35b64e8fc1ed63778880790fcb59d2e92176e1673753b5b9c9c1e0eb1b87353eb940453abdff51457467f98a0c49a574feff1301536410ba036dc3d63affd439\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.0.7\",\n        \"version-display\": null,\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/A/9/F/A9F8872C-48B2-41DB-8AAD-D5908D988592/DotNetCore.2.0.7-WindowsHosting.exe\",\n            \"hash\": \"83f7c2607a0ad97800d2302cd6b9462b623cc66960974bdb1c404eff89eedb0d1f876a957a671b885f7ac81584bc9fd97a34231c342fa19affa38fa603c4974e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/9/F/A9F8872C-48B2-41DB-8AAD-D5908D988592/dotnet-hosting-2.0.7-linux-x64.tar.gz\",\n            \"hash\": \"44cfe2404f5fe87e6381d039ae1a4f6de4935d5564be073f1ebf2624c62a97a35f35862730ab03f38e71ce64e0921444c3058a8aae5564915b18b848fd8e08a3\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/A/9/F/A9F8872C-48B2-41DB-8AAD-D5908D988592/AspNetCore.2.0.7.RuntimePackageStore_x64.exe\",\n            \"hash\": \"81d8bb363a7d8b517027229fce7d60800902b84921dbf926582213e3b0f9b856daeba4cfed8f6ab52974f04752722303a09e2370a9cb3dae2c443fad188dbe05\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/A/9/F/A9F8872C-48B2-41DB-8AAD-D5908D988592/AspNetCore.2.0.7.RuntimePackageStore_x86.exe\",\n            \"hash\": \"071d19f2d897a0fcd6d61e1ea8c418b305ece143eaf1c0ad03af9de03cf49084d17408f2edb3e950b9ac3bff24638638865e88a6e149bf6f7d37f8d5f9ec22d6\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x64.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/A/9/F/A9F8872C-48B2-41DB-8AAD-D5908D988592/aspnetcore-store-2.0.7-win7-x64.zip\",\n            \"hash\": \"12f4035ceab8385849c60ae9883ce68b8350de0a20100a9a5f91176a5bb52a2bd7b677fbddc1bc2f3f30a3b1926693c1eec801fe044d3b93f0dde4861d816c48\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x86.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/A/9/F/A9F8872C-48B2-41DB-8AAD-D5908D988592/aspnetcore-store-2.0.7-win7-x86.zip\",\n            \"hash\": \"d145bb1ec3ba95166c46b22e29271476d215561ac93f866f155d8016bec0cad2a8f8645f0f7e09365fb49dee966446cbdfb058f49ef3a023a0d4a47492fd09ce\"\n          },\n          {\n            \"name\": \"aspnetcore-store-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/9/F/A9F8872C-48B2-41DB-8AAD-D5908D988592/aspnetcore-store-2.0.7-osx-x64.tar.gz\",\n            \"hash\": \"6cf6d3fca8401944b28d8da5cd82ed09a1187196289d7a142ee5a48194ed74c7df55881cb54b99235dfe20d8914c2bdb29e7bc1fc5bbb349d5a78650aecea765\"\n          },\n          {\n            \"name\": \"aspnetcore-store-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/A/9/F/A9F8872C-48B2-41DB-8AAD-D5908D988592/aspnetcore-store-2.0.7-linux-x64.tar.gz\",\n            \"hash\": \"422d6fd1598628d72bf5687582c90b2178bb0c0485d2df224af7b0cedea09b9768408c6940cb60c09fee1cd36e064fa013d79dd417104ae8a42b428a2b0d395a\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-04-04\",\n      \"release-version\": \"2.1.104\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/cli/releases/tag/v2.1.104\",\n      \"runtime\": null,\n      \"sdk\": {\n        \"version\": \"2.1.104\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.6\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.104/dotnet-sdk-2.1.104-linux-x64.tar.gz\",\n            \"hash\": \"813334694667f8c1389d88cd3128a7749f4f65b13a0a8e2cb47380823849b8fe7f4816ab66c2d77e589fac9cb5748390b262beae9673aef86cad5a3d8f24986e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.104/dotnet-sdk-2.1.104-osx-x64.tar.gz\",\n            \"hash\": \"625aa1e52f9a03cf0ed0bc2ede40f94749f35ecf142a655f8d353c6d8223f8f7e6e715f46d6bd546dec9d888a8ae75ccf9d79e91b5b92b7ee633a92d6ae82e53\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.104/dotnet-sdk-2.1.104-osx-x64.pkg\",\n            \"hash\": \"3474f0dab1bd5cdc41a41f59ae2cab5ed213c7e81009ff97c8b014d2b2176d7370134253cec1cd6a4967f1c9d746be6d3a4badf901e80999d1fe006aa2f7e4ed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.104/dotnet-sdk-2.1.104-osx-gs-x64.pkg\",\n            \"hash\": \"3474f0dab1bd5cdc41a41f59ae2cab5ed213c7e81009ff97c8b014d2b2176d7370134253cec1cd6a4967f1c9d746be6d3a4badf901e80999d1fe006aa2f7e4ed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.104/dotnet-sdk-2.1.104-win-x86.zip\",\n            \"hash\": \"0d4fa339d125f780bf293ad566f5127b602c228fa3312bc0c02d455499797114aea1cb27de6b187c18908ae8a4358e7b6c91a596219f572e08ec091cadb4cba8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.104/dotnet-sdk-2.1.104-win-x64.zip\",\n            \"hash\": \"f3a46570f220cafbdb2f7d40cddd09a8f718b62f02fbea79fdf8e48ac1871a20d2e79191b037a559b7f2bd88064e1ec70d2c68988312a7ee23d34dc757b9981b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.104/dotnet-sdk-2.1.104-win-x86.exe\",\n            \"hash\": \"4462a33130b09ba6b9d5f8b579b91ff797f4081717ccc4ecde507bfd2c774985e73458716b6b1f3ea714b020d0607d99c9a013629497c26e89b3424e1713ab97\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.104/dotnet-sdk-2.1.104-win-x64.exe\",\n            \"hash\": \"90402af6694fe7fd5af65b25afd94538133d3f15fa52cf2c8bc86c7b8d32f8ec347788e0d69b51026d1927f3c734ffc6e0bf87380846a37676a7f6dcd97798f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/D/8/1/D8131218-F121-4E13-8C5F-39B09A36E406/dotnet-sdk-2.1.104-win-gs-x64.exe\",\n            \"hash\": \"90402af6694fe7fd5af65b25afd94538133d3f15fa52cf2c8bc86c7b8d32f8ec347788e0d69b51026d1927f3c734ffc6e0bf87380846a37676a7f6dcd97798f7\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-03-22\",\n      \"release-version\": \"2.1.103\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/cli/releases/tag/v2.1.103\",\n      \"runtime\": null,\n      \"sdk\": {\n        \"version\": \"2.1.103\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.6\",\n        \"vs-version\": \"15.6.6\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.103/dotnet-sdk-2.1.103-linux-x64.tar.gz\",\n            \"hash\": \"5252ece4fa8eefdd401ef90cc1fcaecaaa6ad71ae5e25351578c7f497488039b0aa334b5c6481c6c839a95dbf9ab4aec89404dc760cfbcd06564ef5869dd9377\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.103/dotnet-sdk-2.1.103-osx-x64.tar.gz\",\n            \"hash\": \"1ad9f16fc72362fa810951bf0f129ea48c4c0f10d465eed73b4706066956c063a41964bcf84fb7f7590c3c90f31261bd33162cb2aa8348bcb5c96d75473a610d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.103/dotnet-sdk-2.1.103-osx-x64.pkg\",\n            \"hash\": \"463486a94ebcb79e9812fcd058e839db3a97f599641eb9390718f110d837d59b838899334c9e2b548e9c9ebaae1d6d4f1eed2c0fbf55f9b0a53b6d6e4eda4cea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.103/dotnet-sdk-2.1.103-osx-gs-x64.pkg\",\n            \"hash\": \"463486a94ebcb79e9812fcd058e839db3a97f599641eb9390718f110d837d59b838899334c9e2b548e9c9ebaae1d6d4f1eed2c0fbf55f9b0a53b6d6e4eda4cea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.103/dotnet-sdk-2.1.103-win-x86.zip\",\n            \"hash\": \"61ee3cb4e12e435e9b3ead8426c2ae528dcf9c77de0878e51e7e3baa04b3928a83cd60f5822e785302884f5f034723a6c45599cb2eabd8c03e3f525f3cc0f1cc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.103/dotnet-sdk-2.1.103-win-x64.zip\",\n            \"hash\": \"8166b0f2fda1533df4397209616754b5255fb1ee5a775d581640b99158adf371538dd373001c2431f6d12abcc9648b325f88653b9891c8eaf9f50c9e2e1b4b1e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.103/dotnet-sdk-2.1.103-win-x86.exe\",\n            \"hash\": \"ba0f0f9519a6c5a3bcd8325034f466212797e820e7671b019eec199c8ab9ffb2f3543eb5594c76f2374459e5c0e175bc8604b67f7de3c7505959c4e209d6d835\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.103/dotnet-sdk-2.1.103-win-x64.exe\",\n            \"hash\": \"909f178a98e1742e965d005187a6121dda71c224d8bfd018b07d8ec66591cc19906825e674e9f012f422d21a2929e67b15ff79d4c1ab3e72602b5b27e9ad4cbd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/E/2/6/E266C257-F7AF-4E79-8EA2-DF26031C84E2/dotnet-sdk-2.1.103-win-gs-x64.exe\",\n            \"hash\": \"909f178a98e1742e965d005187a6121dda71c224d8bfd018b07d8ec66591cc19906825e674e9f012f422d21a2929e67b15ff79d4c1ab3e72602b5b27e9ad4cbd\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-03-19\",\n      \"release-version\": \"2.1.102\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/cli/releases/tag/v2.1.102\",\n      \"runtime\": null,\n      \"sdk\": {\n        \"version\": \"2.1.102\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.6\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.102/dotnet-sdk-2.1.102-linux-x64.tar.gz\",\n            \"hash\": \"39bcc14c6453552ea5f400aac7b5838a0361dd15cc2ed9d2794f1185ac2e38c82478e32712e1ad483eeb4edf4b485bb799de26368fccacd98e6c0819f8ff7eef\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.102/dotnet-sdk-2.1.102-osx-x64.tar.gz\",\n            \"hash\": \"a3f3acb6be30047970764dd657353262822addeb669b6179336b83c6bcf4d97faf2c9bfda3ef07fbe56630d7083de04fdb49c5d9b4c03ec9e8090c9f5ab0c4ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.102/dotnet-sdk-2.1.102-osx-x64.pkg\",\n            \"hash\": \"982522821d3d6ab7f98810ab70084eb1c10381326bd91237bc9de9821e8434803f76d3231ab8b1762f2598cde48d5ebb1b53a84da3e28424f6c7ce946fa5e859\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.102/dotnet-sdk-2.1.102-win-x86.zip\",\n            \"hash\": \"642162de05c3d7265da4fb644a9fb6c965788bea93adc2ee381ccab4992dd15dd7ffb02cf8a54485391943627533ea496ec8799d4850b6922f196e3c7cabdeb4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.102/dotnet-sdk-2.1.102-win-x64.zip\",\n            \"hash\": \"c1e169cac4200b944d708c46712389f0cadf3eb319f1b6f6f90eb2a8c3e01b18a569acacabb4b7985c9c54165a63e3ca9dc8f1ce7170db650442052d35fbe310\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.102/dotnet-sdk-2.1.102-win-x86.exe\",\n            \"hash\": \"3850b7ed490d64599f7aa592ab1cc59609c77f5f131e04c81cdc47b884db521b4ff421c25730907694b6107573c0fbc38765f6417b0ad5a1bbbd915765d8d617\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.102/dotnet-sdk-2.1.102-win-x64.exe\",\n            \"hash\": \"ee698f7a3d88d22c344f3bf692a671c03abed634250a58c55de7eba33135df6d26315bf75caf8de5dd614900e51b3f602a07a0acbcee9ecc22ba9e323c5d0cdb\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-03-13\",\n      \"release-version\": \"2.0.6\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-0875\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0875\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0808\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0808\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.0/2.0.6.md\",\n      \"runtime\": {\n        \"version\": \"2.0.6\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.6/dotnet-runtime-2.0.6-linux-x64.tar.gz\",\n            \"hash\": \"b8a00bbac9b0f4f9cf03785afa2aa71e6e5d24c1035ad9865e14c259eb06b3d98a524c1f2bb1567810a556a5c2380252642b7b43d919982c89962707e5361383\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.6/dotnet-runtime-2.0.6-osx-x64.tar.gz\",\n            \"hash\": \"b9ccb006c62cc9ac717d9b5894b3fc1dad5713c9b870a134b3232aa803c8239a05d10826458205b52207b525b75109963aedfe12a2d280e491d5ea0437152276\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.6/dotnet-runtime-2.0.6-osx-x64.pkg\",\n            \"hash\": \"6fc023b8c03c049b57597122ccd4c471924986c8962b903ebf296be394013fb18222deba5ea1dab0663d5c064640e6b11c46b89dc68452a8a34384bf84b74f41\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.6/dotnet-runtime-2.0.6-win-x86.zip\",\n            \"hash\": \"ba29f7386f4d4adfd81649798cca730e4e8d40c4cf041e084bcfb3ee8823a789d4fada73c6ff1e323d376cf8cc3704a8b0c3d18515445b1246a98c99a1c9c087\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.6/dotnet-runtime-2.0.6-win-x64.zip\",\n            \"hash\": \"c139ee4f8f65581d908efad230111948abb29431c26d058995386d796c71890423ef0654fbc6791ac6e1a889ba2c0bb755c58ac08232d9d009da3e7d55da60d1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.6/dotnet-runtime-2.0.6-win-x86.exe\",\n            \"hash\": \"a74bab1888f6ae973c35d78c21f382c5945a0f1d6ecce10f2d8e9219b8e400f4db7600f3a6f8d580e0b0ed853a40b9f8d81a77492e30d21188f793841be62aea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.6/dotnet-runtime-2.0.6-win-x64.exe\",\n            \"hash\": \"d5c185982e31fe6dd5baa01c45fe2e75d36a962b189511a69591639da9501a9ba9ac9a8e6b94160a06acb22953e235c5fb14b4a120e62537272fda872482fc4e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.101\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.6\",\n        \"vs-version\": \"15.6.6\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.101/dotnet-sdk-2.1.101-linux-x64.tar.gz\",\n            \"hash\": \"d231ac3562f025b848497eddbcb254cfd547bd622b35dc4b1ed5bcd29153f832610b77cf7edf15d9f05c707d4d06abecbdcd7633fa721246d6d7ba61d78eea81\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.101/dotnet-sdk-2.1.101-osx-x64.tar.gz\",\n            \"hash\": \"d8465acf3a0410ca6a35847e79d8063aaa46cb6d3704ef53f9257e49eaa0242aa2b7ba64eeb625ef984a7109b733988b3b400816bfa0ea09c6db9ba5a7d3de30\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.101/dotnet-sdk-2.1.101-osx-x64.pkg\",\n            \"hash\": \"448978a821903f45f6630419e5cb784c99182495ceae1d5583384df88fb7f197695c3b737004d1a2928b04c310869896417ff3c4f1528065a7387fa34d531809\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/D/C/F/DCFA73BE-93CE-4DA0-AB76-98972FD6E475/dotnet-sdk-2.1.101-osx-gs-x64.pkg\",\n            \"hash\": \"448978a821903f45f6630419e5cb784c99182495ceae1d5583384df88fb7f197695c3b737004d1a2928b04c310869896417ff3c4f1528065a7387fa34d531809\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-nj-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/D/C/F/DCFA73BE-93CE-4DA0-AB76-98972FD6E475/dotnet-sdk-2.1.101-osx-nj-x64.pkg\",\n            \"hash\": \"448978a821903f45f6630419e5cb784c99182495ceae1d5583384df88fb7f197695c3b737004d1a2928b04c310869896417ff3c4f1528065a7387fa34d531809\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.101/dotnet-sdk-2.1.101-win-x86.zip\",\n            \"hash\": \"7973c10b7cf32d71a1e564967f85e00f293f948d4f3ff58bc0a3ebdb4b936b1e5d2e247166f40e6f82cb4ba3d9fabc3d72ea78e145f76789c6f26ae5550acdf6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.101/dotnet-sdk-2.1.101-win-x64.zip\",\n            \"hash\": \"794901f629921c2ef8db9de9ef984725a3b7f7b165289294593f4add34a5abb456d1165b90cf63df287d22ba21d06a136086e4db37a63c74196332608f18b0e8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.101/dotnet-sdk-2.1.101-win-x86.exe\",\n            \"hash\": \"22527e8d3ce51189707c411bf67a23d3745bd39f994b67d2a5004f3c143439d3583d7df3935b89f5a3d58ac5a51970c2ee61043897258d45c3fff74e95091fe0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.101/dotnet-sdk-2.1.101-win-x64.exe\",\n            \"hash\": \"c7fb50ca82acba7e9454d53bf9c47a240611f731ea4a095957dfe58ab0404d4f98585951258fb353b5ff16a808dc89931f30b6b8a0ea6e1c967f2e84ba6ee101\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/D/C/F/DCFA73BE-93CE-4DA0-AB76-98972FD6E475/dotnet-sdk-2.1.101-win-gs-x64.exe\",\n            \"hash\": \"c7fb50ca82acba7e9454d53bf9c47a240611f731ea4a095957dfe58ab0404d4f98585951258fb353b5ff16a808dc89931f30b6b8a0ea6e1c967f2e84ba6ee101\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-nj-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/D/C/F/DCFA73BE-93CE-4DA0-AB76-98972FD6E475/dotnet-sdk-2.1.101-win-nj-x64.exe\",\n            \"hash\": \"c7fb50ca82acba7e9454d53bf9c47a240611f731ea4a095957dfe58ab0404d4f98585951258fb353b5ff16a808dc89931f30b6b8a0ea6e1c967f2e84ba6ee101\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.0.6\",\n        \"version-display\": null,\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/DotNetCore.2.0.6-1-WindowsHosting.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-hosting-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/dotnet-hosting-2.0.6-linux-x64.tar.gz\",\n            \"hash\": \"f70d88731859d63b632851c0a2214a6dc6c041fadfa291c97ecc5a84b4ffcd3fda89d7304fcb79392c5bbb354d98cd03bb83d4c523ce4b404bf429fdac016dc1\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/AspNetCore.2.0.6.RuntimePackageStore_x64.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/AspNetCore.2.0.6.RuntimePackageStore_x86.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x64.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/aspnetcore-store-2.0.6-win7-x64.zip\",\n            \"hash\": \"6dd368be3c46e920aca55a982866a77b6d599daa74b29b87db4a3346d5d05515c3f9f6d7bff501ec0afbd7f7edfd95a8bc47c5166486c5e57fe6642e86259a01\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x86.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/aspnetcore-store-2.0.6-win7-x86.zip\",\n            \"hash\": \"4f12f9fe3007691cfc98bf8d7026b4c0fb1785ac5fe95af692c5355275d0ba0d4a3b4b5088c587b1ae815b46b881c63a8164ef61c45d52dddc2613bcccd67e61\"\n          },\n          {\n            \"name\": \"aspnetcore-store-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/aspnetcore-store-2.0.6-osx-x64.tar.gz\",\n            \"hash\": \"29a4b4905866d6cffb314122902cd78886deac91a6348256b45f625f8461c006b790daac2318e58393280c164ce80e5a92c083123cca54859a785c23e2b1fc6e\"\n          },\n          {\n            \"name\": \"aspnetcore-store-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/aspnetcore-store-2.0.6-linux-x64.tar.gz\",\n            \"hash\": \"178f9384a4010daec34a9846fe2dc597e3dffc7170ffb889cc82f6ae6bf9aa2e93254c64af90a3ee3f8f9e024d6615f1f1857eacded6ef1bffd7601ad32eff5f\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-03-13\",\n      \"release-version\": \"2.1.100\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/cli/releases/tag/v2.1.100\",\n      \"runtime\": null,\n      \"sdk\": {\n        \"version\": \"2.1.100\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.5\",\n        \"vs-version\": \"15.6.1\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.100/dotnet-sdk-2.1.100-linux-x64.tar.gz\",\n            \"hash\": \"71b55610baa809017ccf2c133b3238344e6e238128ea3c6302e3d57ccdf88629e70f48e5cf086ed62c72101d224e94092d8776fcd42528014951dc49f578e72d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.100/dotnet-sdk-2.1.100-osx-x64.tar.gz\",\n            \"hash\": \"f0ea5bd796f58fe2544b00331cc88cf54639560135107409cacbebe8ce8ee1fce2c905379368433c4b275080a72526df087df61837d3150c6feae5e7fff68b87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.100/dotnet-sdk-2.1.100-osx-x64.pkg\",\n            \"hash\": \"1d60d14e201727681d3206286fef873e613590c51b6cfa6ea4db23c1444b89aebeaff6c7a1619dade2a0cb6ab5b5f8bed28f92b73b6d6051fc3b113251d9081b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.100/dotnet-sdk-2.1.100-win-x86.zip\",\n            \"hash\": \"7d221f9f194154410ab8be064e2bbc02d84c3067bb511cba78b4a2b57b378a10860fb0a2d0fa75e4ff992d9f76fe132df7afde056ab8e78b2038aba1fd3cfdd6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.100/dotnet-sdk-2.1.100-win-x64.zip\",\n            \"hash\": \"dbed1bde38f5ff5b97d75c7bb45a84dfc6270093f8e8bce124f2318e28b9dbd60c21b373e7862007bff28fe7b21a45a3cd754f4fede4ad70cce070dc7a2fd14d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.100/dotnet-sdk-2.1.100-win-x86.exe\",\n            \"hash\": \"1826f5ab39efad23e1c7aef844d6e5d2d0aef5bc2bb0c708b4e3dfe577fe4b8d715cce2d754cb5774c15eea888ad260f83e4f6018092f4ceb327eb68910bb63e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.100/dotnet-sdk-2.1.100-win-x64.exe\",\n            \"hash\": \"7fff3190e67f70792009ff9f15999757f769182ef7256bbb5133382f139ef5cdea86c724dbdcfd7763dd48f9619e39778238502b59d5cc4f05af4e055a1b789e\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2018-01-09\",\n      \"release-version\": \"2.0.5\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-0787\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0787\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0786\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0786\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0785\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0785\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0784\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0784\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-0764\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-0764\"\n        }\n      ],\n      \"release-notes\": null,\n      \"runtime\": {\n        \"version\": \"2.0.5\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.5/dotnet-runtime-2.0.5-linux-x64.tar.gz\",\n            \"hash\": \"21d54e559c5130bb3f8c38eadacb7833ec90943f71c4e9c8fa2d53192313505311230b96f1afeb52d74d181d49ce736b83521754e55f15d96a8756921783cd33\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.5/dotnet-runtime-2.0.5-osx-x64.tar.gz\",\n            \"hash\": \"993dab75a25b961b474f147bf42273b86b561c1823cb53458aa864599003f131880b54c5f31241bcbcee7b89b9a21bdd90d0f43fb440e2b9b5a1266f624e2e45\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.5/dotnet-runtime-2.0.5-osx-x64.pkg\",\n            \"hash\": \"94de569a3124ab1de8b52d82dfa48bf58bfb85cac532a20b1111704d31bb0c8e361f4074d7ca3cca7d0e21a7e90cbcbd2a95361cf62b2cd4cb74424c83f16bee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.5/dotnet-runtime-2.0.5-win-x86.zip\",\n            \"hash\": \"671fde7ff5a64738de7863feb8501692f4b62c2496acea9e3c47c381f14e51805f9e7237002ae63bc71189431411de0e051ab1e23200bfbe830a254ec5f7fa8e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.5/dotnet-runtime-2.0.5-win-x64.zip\",\n            \"hash\": \"5a4381d01d7b7769254aff980bb4a333aec41fdfe92e74bca95147931f1500a1d391ae8da873bc802524a83899e270e24e30faf3759a121505aef110fe9902dd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.5/dotnet-runtime-2.0.5-win-x86.exe\",\n            \"hash\": \"84dc1b30e36dc0aef5cc7294aeb43963570bf4bd6fd824ff9c9ae9fe5c7bb574b9b2a48d299d526097732879317ce92e76f9ac1b034b8c14eaebb27297b4401b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.5/dotnet-runtime-2.0.5-win-x64.exe\",\n            \"hash\": \"dc6c0f438258e8a5ea825809cc5d7e3f0e69d6aa233894086ffafafe8e539d707aac1abcf4f56ea324fc54f578b52d7796c2b828c26bb838b9b94299bf754c20\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.4\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.5\",\n        \"vs-version\": \"15.5.5\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.4/dotnet-sdk-2.1.4-linux-x64.tar.gz\",\n            \"hash\": \"05fe90457a8b77ad5a5eb2f22348f53e962012a55077ac4ad144b279f6cad69740e57f165820bfd6104e88b30e93684bde3e858f781541d4f110f28cd52ce2b7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.4/dotnet-sdk-2.1.4-osx-x64.tar.gz\",\n            \"hash\": \"1b08705b8679bf1800d40908408e0d8c1fac7963f6ce508710cf6425cdc1663fd46526e8b6ba8a67d6d327e6bbc143797aa7be4acfdb5205d4d3143de3951849\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.4/dotnet-sdk-2.1.4-osx-x64.pkg\",\n            \"hash\": \"3cabb2efefbc4356393491d878fe04892ab272411545f4f3cbe23c7206e0c39fafb50039c27eee294508fbeb43a4e39cc2d144ea3ad4a95b0e6691ce4f3a7dfc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/1/1/5/115B762D-2B41-4AF3-9A63-92D9680B9409/dotnet-sdk-2.1.4-osx-gs-x64.pkg\",\n            \"hash\": \"3cabb2efefbc4356393491d878fe04892ab272411545f4f3cbe23c7206e0c39fafb50039c27eee294508fbeb43a4e39cc2d144ea3ad4a95b0e6691ce4f3a7dfc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-nj-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/1/5/115B762D-2B41-4AF3-9A63-92D9680B9409/dotnet-sdk-2.1.4-osx-nj-x64.pkg\",\n            \"hash\": \"3cabb2efefbc4356393491d878fe04892ab272411545f4f3cbe23c7206e0c39fafb50039c27eee294508fbeb43a4e39cc2d144ea3ad4a95b0e6691ce4f3a7dfc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.4/dotnet-sdk-2.1.4-win-x86.zip\",\n            \"hash\": \"e4d4872733710ddb93bb00fe724a63be4c7fb352d120841c255a89fc42c3e81da8749c201f63ecfc0e86cb473c9854da719e92a3e665f0c380c3e7cf862b1db3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.4/dotnet-sdk-2.1.4-win-x64.zip\",\n            \"hash\": \"955e20434007592f77fb866aa8543ef13efdc0b1cb91f0c946824f60d8726db5227d1245fbeb7409f93293cf918d50b99f96b0d4512b62a70577e69874f8c777\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.4/dotnet-sdk-2.1.4-win-x86.exe\",\n            \"hash\": \"57703986a5c7eea8ceee265ce206a047e85dec5c698ad570df74b68cbfed36026bf70aa454924ec94be4d37ff492c76716beb23e12ed98816e5cb8e25eeeff0b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.4/dotnet-sdk-2.1.4-win-x64.exe\",\n            \"hash\": \"10309b343be6dc51b04d09ed97035ddaabe250685e1799fec8a0d3f7f34ea77dddc1d742544320c21bacfa4a2c27678d262540ecf2cd69dad354a8ad207f388d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/1/1/5/115B762D-2B41-4AF3-9A63-92D9680B9409/dotnet-sdk-2.1.4-win-gs-x64.exe\",\n            \"hash\": \"10309b343be6dc51b04d09ed97035ddaabe250685e1799fec8a0d3f7f34ea77dddc1d742544320c21bacfa4a2c27678d262540ecf2cd69dad354a8ad207f388d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-nj-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/1/1/5/115B762D-2B41-4AF3-9A63-92D9680B9409/dotnet-sdk-2.1.4-win-nj-x64.exe\",\n            \"hash\": \"10309b343be6dc51b04d09ed97035ddaabe250685e1799fec8a0d3f7f34ea77dddc1d742544320c21bacfa4a2c27678d262540ecf2cd69dad354a8ad207f388d\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.0.5\",\n        \"version-display\": null,\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/1/1/0/11046135-4207-40D3-A795-13ECEA741B32/DotNetCore.2.0.5-WindowsHosting.exe\",\n            \"hash\": \"98a577cfee15a521484972fc7b6f212ccc37141502b417fcb003b29e67af732b6018b01dbe7b3eca22dcad7ec4e6fbb4f01898a15ffcf8342d7f4f5712eaee1c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/1/0/11046135-4207-40D3-A795-13ECEA741B32/dotnet-hosting-2.0.5-linux-x64.tar.gz\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/1/1/0/11046135-4207-40D3-A795-13ECEA741B32/AspNetCore.2.0.5.RuntimePackageStore_x64.exe\",\n            \"hash\": \"df4576532b715c9a8b7a6797458982d156a05acd3f676a9261886f892a98ba3fb71db17027c8ef065ae9792beedd4f4bd82f3791fce497ed9cff38f4139d978b\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/1/1/0/11046135-4207-40D3-A795-13ECEA741B32/AspNetCore.2.0.5.RuntimePackageStore_x86.exe\",\n            \"hash\": \"c5df5b0b2f1848c9a797d44cb464061c99c367ecdd6f05cc93aa82b49b2191f7122043bfa34349673d5b2af7018f7062c6be2e0f3fb1e63afad34d2ffa7030fa\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x64.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/1/1/0/11046135-4207-40D3-A795-13ECEA741B32/aspnetcore-store-2.0.5-win7-x64.zip\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x86.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/1/1/0/11046135-4207-40D3-A795-13ECEA741B32/aspnetcore-store-2.0.5-win7-x86.zip\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"aspnetcore-store-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/1/0/11046135-4207-40D3-A795-13ECEA741B32/aspnetcore-store-2.0.5-osx-x64.tar.gz\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"aspnetcore-store-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/1/1/0/11046135-4207-40D3-A795-13ECEA741B32/aspnetcore-store-2.0.5-linux-x64.tar.gz\",\n            \"hash\": \"\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-12-04\",\n      \"release-version\": \"2.0.4\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": null,\n      \"runtime\": {\n        \"version\": \"2.0.4\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.4/dotnet-runtime-2.0.4-linux-x64.tar.gz\",\n            \"hash\": \"447d9f20f97133e344bdc331c2e89d9b0d05818f9ad62a72ba021343d77df4cddad15f328f79797a67c9ca205a9f1fed1e6a3f156579467454aac24c7cf260b2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.4/dotnet-runtime-2.0.4-osx-x64.tar.gz\",\n            \"hash\": \"4b3619b6663cdff7b7c5eb2781728c5433020cacbe5f5116a76ca002aa171e8f7ab0091ab825654ec7d83d1a914f9524e614eeb74b912e97409a8c9dcfa3d822\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.4/dotnet-runtime-2.0.4-win-x86.zip\",\n            \"hash\": \"743a0d94a5dfe3fd4134c67e4a287f51ec9ebf870515cf354f98d0cba72d2eccf2d2a4845ddb30b06aca8a810499d9d5512b0fa1b067f4d52522bf949843c177\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.4/dotnet-runtime-2.0.4-win-x64.zip\",\n            \"hash\": \"fb5761fa6e38b10bffdff96b841ba1d1bf3d127d2bde0401a2e87f5b31f8bfc48dc8b4a283ef8661fe96c4460ba50e824800c97ccc6858e820bd0e633f85257f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.4/dotnet-runtime-2.0.4-osx-x64.pkg\",\n            \"hash\": \"10831f708ae9b9328121ca9040e27cffa050dcf28494741abd1017f111edac96555a6c4f011532e17360e1e0ecaa3558d4738a382f974a4f0f838cc66b648032\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.4/dotnet-runtime-2.0.4-win-x86.exe\",\n            \"hash\": \"5978c622c24b8ae03e80cdd70774e90b7058908a9f380ac08cb2c7b45fde75f775eb025048af1e0fe028b2406626436019bd8dadc23868643191f86e2ff73c2a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.4/dotnet-runtime-2.0.4-win-x64.exe\",\n            \"hash\": \"551a5485e9ef8af0bebea2ee82f5edc1e5c39c8a9c1d98730b963929f23dd032a885dae5877c39d1e344d9f07483ea11e3d0fdef24d33c8a8e4535281dfd9263\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.3\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.4\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.3/dotnet-sdk-2.1.3-linux-x64.tar.gz\",\n            \"hash\": \"509b88895fd5a6a90e245141eb52f188aa9ee7d20188c213892483c142900d6975013aef9ca6d8da986cc5617a2c3571e22318297c51578b871c047602757600\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.3/dotnet-sdk-2.1.3-osx-x64.tar.gz\",\n            \"hash\": \"ce60c900039217c0f67d66a6436fd7d7adf75f4bbc4646389f8d69da53df7b8c5ecdeec270a799a4624a1a0bc3b43bea9306d72869251b2892d3763d37ce664c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.3/dotnet-sdk-2.1.3-osx-x64.pkg\",\n            \"hash\": \"77eac5aa167cc8d18a4f4aebc1db7aead6fe814fe26fc6b6c2193aa1b9d5e3b2ceb476fff0293371d0a719d68d4f93a0b2fbfba40271fc5ecdbcce34b33b0bf3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.3/dotnet-sdk-2.1.3-win-x86.zip\",\n            \"hash\": \"9adc65a0708d7ae8300ae13db509313083ecece3901576c98c69413608ccffe7e73f35547583760c4ee08f01a9e9b6e89098788344027827602053ee4106af38\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.3/dotnet-sdk-2.1.3-win-x64.zip\",\n            \"hash\": \"5d5be9568ce48b173aacd8807bb3a8085386bf0e00d1a055550a514248c88f52399818f2f5c7d998701dc6cf311395cdb4e1689173344edc207f27abe7fb36ce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.3/dotnet-sdk-2.1.3-win-x86.exe\",\n            \"hash\": \"61e2ae2300a0489ab1a53feed31b5c11b14426bdd1120a2f8fa0ebe07e291b78452bb650983164a1056aa8ddff35d9ea256a7b3084052d548a116572db641676\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.3/dotnet-sdk-2.1.3-win-x64.exe\",\n            \"hash\": \"8146bc0b74d152a9691e42d2c2f0755a735ed4cc48abeb79af86efea5801e8c7e94cf2f524c491c737cee45cf71c3182229f9a5201b9af8c5fcea324cfc67913\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-11-14\",\n      \"release-version\": \"2.0.3\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2017-8700\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8700\"\n        },\n        {\n          \"cve-id\": \"CVE-2017-11770\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11770\"\n        },\n        {\n          \"cve-id\": \"CVE-2017-11879\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11879\"\n        },\n        {\n          \"cve-id\": \"CVE-2017-11883\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11883\"\n        }\n      ],\n      \"release-notes\": null,\n      \"runtime\": {\n        \"version\": \"2.0.3\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.3/dotnet-runtime-2.0.3-linux-x64.tar.gz\",\n            \"hash\": \"4fb483cae0c6147fbf13c278fe7fc23923b99cd84cf6e5f96f5c8e1971a733ab968b46b00d152f4c14521561387dd28e6e64d07cb7365d43a17430905da6c1c0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.3/dotnet-runtime-2.0.3-osx-x64.tar.gz\",\n            \"hash\": \"20caae28a04dac96ac12de7e34c996ecc42d0b000c04900f1e7fc1c88a3369e2536165b6b16267a95428828d998bd0cf43f86065cc44fce6253491845fac55e5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.3/dotnet-runtime-2.0.3-win-x86.zip\",\n            \"hash\": \"efa901c610507249ed9b715e3f261f655550e68c0684eb04d09a4f55d3c6fa45f7f28d0810830411dc87611c99ae8a90daefcf488fd704d63404fcddb8f5c4ba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.3/dotnet-runtime-2.0.3-win-x64.zip\",\n            \"hash\": \"ac4eea527ee8e29286fe46a98be14bf7db3dab6c721eb0c319f80ad3bed57ddadaa719a4325ffd6343d12464d370be90971b1cb81db37d82e90ec7d40b5c3009\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.0.3\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.3\",\n        \"vs-version\": \"15.5.4\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.3/dotnet-sdk-2.0.3-linux-x64.tar.gz\",\n            \"hash\": \"74a0741d4261d6769f29a5f1ba3e8ff44c79f17bbfed5e240c59c0aa104f92e93f5e76b1a262bdfab3769f3366e33ea47603d9d725617a75cad839274ebc5f2b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.3/dotnet-sdk-2.0.3-osx-x64.tar.gz\",\n            \"hash\": \"f3f78ed62c1c7b996a62e591843bc34be5d76d083d257c8a839049964c35d3054d56437ebf0f4890c96396d8f230a91ae8e9c64f030ccd3b62c8e18032081c1c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.3/dotnet-sdk-2.0.3-osx-x64.pkg\",\n            \"hash\": \"052f42870a42f97a3f25863386d7337ff176258e775787ab0f567231337ebc62eec1f5ce7cf7adaf31b377aec7942be52a024bc9c2572dac69501c046b5a7ceb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.3/dotnet-sdk-2.0.3-win-x86.zip\",\n            \"hash\": \"37deddbfc1a8ea72da4e864343bb4374bd50d744e1621910de30f8d83eaa3860b14f262750810a7ff66f8ab05a587cd71a935a130acf499257d8d4509e0b3cb2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.3/dotnet-sdk-2.0.3-win-x64.zip\",\n            \"hash\": \"8b4bd2174f413f9043374d0cfa7d4061f0aeedc28c16257e66b99f28454bc0a898c6f52d4cf8349413ae222b21e6f594a8f70c1892844a0416e2be2994af13f1\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.0.3\",\n        \"version-display\": null,\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/5/C/1/5C190037-632B-443D-842D-39085F02E1E8/DotNetCore.2.0.3-WindowsHosting.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"dotnet-hosting-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/store/2.0.3-125/dotnet-hosting-2.0.3-linux-x64.tar.gz\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/5/C/1/5C190037-632B-443D-842D-39085F02E1E8/AspNetCore.2.0.3.RuntimePackageStore_x64.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/5/C/1/5C190037-632B-443D-842D-39085F02E1E8/AspNetCore.2.0.3.RuntimePackageStore_x86.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x64.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/5/C/1/5C190037-632B-443D-842D-39085F02E1E8/aspnetcore-store-2.0.3-win7-x64.zip\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"aspnetcore-store-win7-x86.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/5/C/1/5C190037-632B-443D-842D-39085F02E1E8/aspnetcore-store-2.0.3-win7-x86.zip\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"aspnetcore-store-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/5/C/1/5C190037-632B-443D-842D-39085F02E1E8/aspnetcore-store-2.0.3-osx-x64.tar.gz\",\n            \"hash\": \"\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-08-14\",\n      \"release-version\": \"2.0.0\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": null,\n      \"runtime\": {\n        \"version\": \"2.0.0\",\n        \"version-display\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0/dotnet-runtime-2.0.0-linux-x64.tar.gz\",\n            \"hash\": \"69ecad24bce4f2132e0db616b49e2c35487d13e3c379dabc3ec860662467b714\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0/dotnet-runtime-2.0.0-osx-x64.tar.gz\",\n            \"hash\": \"b92e6cff9e4f40d4d5126d0896d632951bc9a339dbc7b032098bf5ab76d571a0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0/dotnet-runtime-2.0.0-osx-x64.pkg\",\n            \"hash\": \"a70cffe0bb2b73a77c59c9de6c7080510a67cff56e519bed77055353e7f90104\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0/dotnet-runtime-2.0.0-win-x64.exe\",\n            \"hash\": \"ea7f9fce864932b25b6c709d3fe9e4432cb6d119658d1dafcafaac59b75066a1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0/dotnet-runtime-2.0.0-win-x86.exe\",\n            \"hash\": \"e2c57d314bbba4c2ebbfb18a75a41e7948ec913e0bd24a2cae21f361b2f96849\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0/dotnet-runtime-2.0.0-win-x86.zip\",\n            \"hash\": \"f6f595a8f842a73c7176a16ce9c4568af756894cd67a1870c245216e4990587e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0/dotnet-runtime-2.0.0-win-x64.zip\",\n            \"hash\": \"750cee101278cb3d521447a0a2ed11a779a42ee680baa32cd7a6cb5ceb8d08a6\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.0.0\",\n        \"version-display\": null,\n        \"runtime-version\": \"2.0.0\",\n        \"vs-version\": \"15.3.3\",\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0/dotnet-sdk-2.0.0-linux-x64.tar.gz\",\n            \"hash\": \"6059a6f72fb7aa6205ef4b52583e9c041fd128e768870a0fc4a33ed84c98ca6b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0/dotnet-sdk-2.0.0-osx-x64.tar.gz\",\n            \"hash\": \"6e87270e72b5a02ea4e3c4b2266d079366e0e55d6892f9dad5f64dee3f8a341b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0/dotnet-sdk-2.0.0-win-x86.zip\",\n            \"hash\": \"5eaa475a12843cfff9a97f4b7d3b205eb169fd372ddfc9ddde92225e9e4c1c7c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0/dotnet-sdk-2.0.0-win-x64.zip\",\n            \"hash\": \"541d4dd17023aff14a0aeb6505b200ccabffffc34ab2f629caeb994cedf8afd9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0/dotnet-sdk-2.0.0-osx-x64.pkg\",\n            \"hash\": \"69300051d696f5ae8e42bd79e5aa13a08116723d79c324fd248df7ead2869291\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0/dotnet-sdk-2.0.0-win-x64.exe\",\n            \"hash\": \"cc490d28f55b67185688ff51dc6274aea6a582e47a07e9d084437e940c69f7a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0/dotnet-sdk-2.0.0-win-x86.exe\",\n            \"hash\": \"af488629001e60d50bd0ca268de28b2ab97f6c20213be007dda763b93d51c3d4\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.0.0\",\n        \"version-display\": null,\n        \"version-aspnetcoremodule\": null,\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/B/1/D/B1D7D5BF-3920-47AA-94BD-7A6E48822F18/AspNetCore.2.0.0.RuntimePackageStore_x64.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"AspNetCore.RuntimePackageStore_x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/B/1/D/B1D7D5BF-3920-47AA-94BD-7A6E48822F18/AspNetCore.2.0.0.RuntimePackageStore_x86.exe\",\n            \"hash\": \"\"\n          },\n          {\n            \"name\": \"DotNetCore-WindowsHosting.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/B/1/D/B1D7D5BF-3920-47AA-94BD-7A6E48822F18/DotNetCore.2.0.0-WindowsHosting.exe\",\n            \"hash\": \"\"\n          }\n        ]\n      },\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-06-28\",\n      \"release-version\": \"2.0.0-preview2\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": null,\n      \"runtime\": {\n        \"version\": \"2.0.0-preview2-25407-01\",\n        \"version-display\": \"2.0.0-preview2\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0-preview2-25407-01/dotnet-runtime-2.0.0-preview2-25407-01-linux-x64.tar.gz\",\n            \"hash\": \"1fe615f179fef606b97d43ce07a491da9067716ff594f929b82d8772d461c027\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0-preview2-25407-01/dotnet-runtime-2.0.0-preview2-25407-01-osx-x64.tar.gz\",\n            \"hash\": \"3b09436c2e03e81da9d08ddd32334d1d50906e9e03cfa94831a8cc6f6fbfeb70\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0-preview2-25407-01/dotnet-runtime-2.0.0-preview2-25407-01-win-x86.zip\",\n            \"hash\": \"e4f7630d7f4ac1a9510ce60bee712b94712b76f5581fa278b75bc7ba8ba3d810\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.0.0-preview2-25407-01/dotnet-runtime-2.0.0-preview2-25407-01-win-x64.zip\",\n            \"hash\": \"807e1361c628f43e395f349b9e921f7340aba9a2f699142791ed5330c0918491\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.0.0-preview2-006497\",\n        \"version-display\": \"2.0.0-preview2\",\n        \"runtime-version\": \"2.0.0-preview2-25407-01\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview2-006497/dotnet-sdk-2.0.0-preview2-006497-linux-x64.tar.gz\",\n            \"hash\": \"f70b6dfc4e46230001ef863b54992b32bb04c998b098ad58dd47152f348a0997\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview2-006497/dotnet-sdk-2.0.0-preview2-006497-osx-x64.tar.gz\",\n            \"hash\": \"97dfd57b1e3f3c6ae365654141d3670619699449cca76c3d7ef13a9f0b967ad5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview2-006497/dotnet-sdk-2.0.0-preview2-006497-win-x86.zip\",\n            \"hash\": \"2a804fcb5d7502cc6d6fe0b2fc17676c96002d64075b32ea0e3eb6240812b863\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview2-006497/dotnet-sdk-2.0.0-preview2-006497-win-x64.zip\",\n            \"hash\": \"c9b0205f24d310204dde39e80b996f98b6d546ad4507723cceb2578a208e507f\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2017-05-10\",\n      \"release-version\": \"2.0.0-preview1\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": null,\n      \"runtime\": {\n        \"version\": \"2.0.0-preview1-002111-00\",\n        \"version-display\": \"2.0.0-preview1\",\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/9/0/09060200-E749-4025-A51A-83391C611C86/dotnet-linux-x64.2.0.0-preview1-002111-00.tar.gz\",\n            \"hash\": \"421ab6b516f68e6302878750d565a48ed7a41d6f04eedca7b03e0a8ac55cc5ba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/9/0/09060200-E749-4025-A51A-83391C611C86/dotnet-osx-x64.2.0.0-preview1-002111-00.tar.gz\",\n            \"hash\": \"10f37ee22e6c0495a91b0aaac7978305b223258e81bd4c5997046325db90a55a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/0/4/8/048C286D-59CB-4B7C-95A1-D0F7FD4D37D2/dotnet-win-x86.2.0.0-preview1-002111-00.exe\",\n            \"hash\": \"da1cc72c84e79f1e2aef0c334535f5170339108fc07a3b026d835300370ca55a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/0/9/0/09060200-E749-4025-A51A-83391C611C86/dotnet-win-x64.2.0.0-preview1-002111-00.zip\",\n            \"hash\": \"df73f34c35a0ed5286e2dc0f5db545502d917221aacf04cdeab266eb013936e1\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.0.0-preview1-005977\",\n        \"version-display\": \"2.0.0-preview1\",\n        \"runtime-version\": \"2.0.0-preview1-002111-00\",\n        \"vs-version\": null,\n        \"csharp-version\": null,\n        \"fsharp-version\": null,\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview1-005977/dotnet-dev-linux-x64.2.0.0-preview1-005977.tar.gz\",\n            \"hash\": \"1774a15ae12dd1786d14397c691411e936cb0937d59add08cc16c89e80aa65c1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview1-005977/dotnet-dev-osx-x64.2.0.0-preview1-005977.tar.gz\",\n            \"hash\": \"b3394f082f4aa00a25e2ef5a18b067fdd84faccb40f0863509f29dce496643e9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview1-005977/dotnet-dev-win-x86.2.0.0-preview1-005977.zip\",\n            \"hash\": \"0740404555687060f8d3bd32fb134d6dd92ac6fcdaaf439deb2aa3a9d55d211b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview1-005977/dotnet-dev-win-x64.2.0.0-preview1-005977.zip\",\n            \"hash\": \"f85b46532faf6e6fb1adf9f6a6df3ffa039154b89aa3db63b633f227cd1a1e43\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview1-005977/dotnet-dev-win-x86.2.0.0-preview1-005977.exe\",\n            \"hash\": \"44e03bb1b703745b07316980bcc7ce86792cd33865fca6e932f96a3da001fdf9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.0.0-preview1-005977/dotnet-dev-win-x64.2.0.0-preview1-005977.exe\",\n            \"hash\": \"ba2a47e5e63f2e695317dfcee928f5655ce87b2956a4de9e31d9a7a57e0618fd\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": null,\n      \"symbols\": null\n    }\n  ]\n}"
  },
  {
    "path": "JexusManager/Resources/2.1-release.json",
    "content": "{\n  \"channel-version\": \"2.1\",\n  \"latest-release\": \"2.1.30\",\n  \"latest-release-date\": \"2021-08-19\",\n  \"latest-runtime\": \"2.1.30\",\n  \"latest-sdk\": \"2.1.818\",\n  \"release-type\": \"lts\",\n  \"support-phase\": \"eol\",\n  \"eol-date\": \"2021-08-21\",\n  \"lifecycle-policy\": \"https://dotnet.microsoft.com/platform/support/policy/\",\n  \"releases\": [\n    {\n      \"release-date\": \"2021-08-19\",\n      \"release-version\": \"2.1.30\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-26423\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-26423\"\n        },\n        {\n          \"cve-id\": \"CVE-2021-34485\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34485\"\n        },\n        {\n          \"cve-id\": \"CVE-2021-34532\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34532\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.30/2.1.30.md\",\n      \"runtime\": {\n        \"version\": \"2.1.30\",\n        \"version-display\": \"2.1.30\",\n        \"vs-version\": \"15.9.38, 16.4.25, 16.7.18\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-linux-arm.tar.gz\",\n            \"hash\": \"908b79c876984288fda9c853c9ab460aad6ae2747dac4efc1ce01d950393fce69160dae411cf3fa0bde821afc56da04cc49902c6dfea3d4bdcb447d2488a2955\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-linux-arm64.tar.gz\",\n            \"hash\": \"41aef859a9065b6adc1df04819b7079b6385c370a9c603f351c0826773ee43d52ecb565191a3ae5dddb043fde6e8f47c244e896360055f8271c63ecb719c302f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-linux-musl-x64.tar.gz\",\n            \"hash\": \"4f804e97b2d506ecb42041678c80a0550815786b5d8b9290bcd232577bb6b9cb422ce17f07ec749d41a17479fb177fc9b1674554ce17007198c6470e33dcf1e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-linux-x64.tar.gz\",\n            \"hash\": \"b7433c9f03f7363759a044b50d8cca9486cfe402fdf62163696ba6a172e9839a140553e3d3298bb75c89dda2f6f4bec294847411f3fc2796fa4881a2b01a7178\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-osx-x64.pkg\",\n            \"hash\": \"efc864b1d4e96985358225b85f60207ae18936ab7170adf4a0eb30e4640b38ce97490c5f1b9175751e3dfe1f3667abd19a0c7fd2be47974e05a62571f9f8f138\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-osx-x64.tar.gz\",\n            \"hash\": \"548f5569179c64ed6e8f6976c775470f25cab210aff18ef18de6d35152bbe1bee23e58a6d366094bebcd77c70aec449a613d29fe1e076cbb6ed62178ba52d3f3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-win-arm.zip\",\n            \"hash\": \"c1aae31ca19cc022e74079f049961c87bd2c85112edb4f49375de536039d5576cc303fa5172b4c0ffb70dc5497e5cd700d8729aa81cfa47ddee3c5a115233a43\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-win-x64.exe\",\n            \"hash\": \"9249f5873f6fa9abbad01f46de8a935bf80e705eb583a1341846b83c4a1b8506eb37374456facf529f5d57396c328a403333a6d6d94126e981eee69b8641d420\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-win-x64.zip\",\n            \"hash\": \"3656c1a5dcf2196a34a06a01eb98851cad94663d654b8500b20b4a80cb5e7477b07172590b132805d3367bde2fc8dd7b7624a2f57f7ac425333e99424612b3fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-win-x86.exe\",\n            \"hash\": \"afad5cf966b2c7411fef5afdd6d723ab146cf215f6c3fffd7439aca3352d22e8dcd341cddf90e47455c3b118bb1ea034c38b3f82ad597ecbeac116320924beba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.30/dotnet-runtime-2.1.30-win-x86.zip\",\n            \"hash\": \"3a1e9fb8d1b256f261f7156b4d985673f29a983d65a035a98833f05c9421fbe68a1b9843b95444f749deeab663ee1aae1d3cad5c6416bd1d941037e1fa5d1c63\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.818\",\n        \"version-display\": \"2.1.818\",\n        \"runtime-version\": \"2.1.30\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-linux-arm.tar.gz\",\n            \"hash\": \"3aac9149980b33b3ceaf147dbb380aa3e1a0ea5e11af88a17a0dde79f2ec40c52bcdc2c95c66928dac65796524066c2b5e127c82388f6c19abcedebd8fe0de1c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-linux-arm64.tar.gz\",\n            \"hash\": \"4a8dfb282ba5c8b286e3b09c100a738a43df41fef371d0f6e7b3341aafb8ff00436658d1139175ec0a545e49a15aedda0efc6a4b97b7324c3cef5cdab8ff0451\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-linux-musl-x64.tar.gz\",\n            \"hash\": \"a9de41de8bc464024bf8bb51067279789e4234b51969543270fdc2c6ef83aa507ed0739547ae9be81a49abacad6b94926b24cbb3a70a960d2bad85f205ac8d86\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-linux-x64.tar.gz\",\n            \"hash\": \"0975301378d1238e55285d37aed4ab10df242e0884c0e3bb2eaf2e96af7bf6d554f5df1e653abddabf23ed8f1ea1665c452de42ad912ca84cd71760171416ecd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-osx-x64.pkg\",\n            \"hash\": \"a1b1efdcc3d949e869dcc738c8a471349c3d1284cd9cc67220ae9adedd106db731f91f3052575fa2e4004bb9b3877108000a9a7afc83dfd5ff74bfd11b5e1187\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-osx-x64.tar.gz\",\n            \"hash\": \"0a3ed2cf18eda2bf9dab1be7a389fb7d7e328429284bd267a8f15d53e369e57e260c0f9766e911226e3b8f7f78dd4717c808fe98c8ff1e6f673dce30a4ec6ce6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-win-x64.exe\",\n            \"hash\": \"f37af0f1ed01e665866b20a175b4305a5753aa6feb56da57184d06daf7dd51127d41e91f91cd11da23445010513ab20d974d21fb601d0234b5a314d3e3a6169f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-win-x64.zip\",\n            \"hash\": \"ee0c000eb6b22e72cd6a49db0b139f2f49b2f74ce7e44f6308182a9e9f3ecadfa96b08084347c209997e4bf410c0d8beafbbaa600276118d9b23b43c0f09ec46\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-win-x86.exe\",\n            \"hash\": \"6f65a05178ac3abf65942bbc91c34784d496e822d69407fc33cd5519ede21ee09ebb5cc91a57dc928abd9c00e9580bf217d6bee2c400436e4625fc852d855f9e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-win-x86.zip\",\n            \"hash\": \"23432b04c348af12e65ce2bd2abf4b2312a361279acb9fde9a21cc74a13f53bc71716ad940ef0a4c84ec68f72c78ed441e55ad8390b660b3efcbd8eb65446369\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.818\",\n          \"version-display\": \"2.1.818\",\n          \"runtime-version\": \"2.1.30\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-linux-arm.tar.gz\",\n              \"hash\": \"3aac9149980b33b3ceaf147dbb380aa3e1a0ea5e11af88a17a0dde79f2ec40c52bcdc2c95c66928dac65796524066c2b5e127c82388f6c19abcedebd8fe0de1c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-linux-arm64.tar.gz\",\n              \"hash\": \"4a8dfb282ba5c8b286e3b09c100a738a43df41fef371d0f6e7b3341aafb8ff00436658d1139175ec0a545e49a15aedda0efc6a4b97b7324c3cef5cdab8ff0451\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-linux-musl-x64.tar.gz\",\n              \"hash\": \"a9de41de8bc464024bf8bb51067279789e4234b51969543270fdc2c6ef83aa507ed0739547ae9be81a49abacad6b94926b24cbb3a70a960d2bad85f205ac8d86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-linux-x64.tar.gz\",\n              \"hash\": \"0975301378d1238e55285d37aed4ab10df242e0884c0e3bb2eaf2e96af7bf6d554f5df1e653abddabf23ed8f1ea1665c452de42ad912ca84cd71760171416ecd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-osx-x64.pkg\",\n              \"hash\": \"a1b1efdcc3d949e869dcc738c8a471349c3d1284cd9cc67220ae9adedd106db731f91f3052575fa2e4004bb9b3877108000a9a7afc83dfd5ff74bfd11b5e1187\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-osx-x64.tar.gz\",\n              \"hash\": \"0a3ed2cf18eda2bf9dab1be7a389fb7d7e328429284bd267a8f15d53e369e57e260c0f9766e911226e3b8f7f78dd4717c808fe98c8ff1e6f673dce30a4ec6ce6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-win-x64.exe\",\n              \"hash\": \"f37af0f1ed01e665866b20a175b4305a5753aa6feb56da57184d06daf7dd51127d41e91f91cd11da23445010513ab20d974d21fb601d0234b5a314d3e3a6169f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-win-x64.zip\",\n              \"hash\": \"ee0c000eb6b22e72cd6a49db0b139f2f49b2f74ce7e44f6308182a9e9f3ecadfa96b08084347c209997e4bf410c0d8beafbbaa600276118d9b23b43c0f09ec46\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-win-x86.exe\",\n              \"hash\": \"6f65a05178ac3abf65942bbc91c34784d496e822d69407fc33cd5519ede21ee09ebb5cc91a57dc928abd9c00e9580bf217d6bee2c400436e4625fc852d855f9e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.818/dotnet-sdk-2.1.818-win-x86.zip\",\n              \"hash\": \"23432b04c348af12e65ce2bd2abf4b2312a361279acb9fde9a21cc74a13f53bc71716ad940ef0a4c84ec68f72c78ed441e55ad8390b660b3efcbd8eb65446369\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.526\",\n          \"version-display\": \"2.1.526\",\n          \"runtime-version\": \"2.1.30\",\n          \"vs-version\": \"15.9.38\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-linux-arm.tar.gz\",\n              \"hash\": \"a7d49daffb5b13e53e9916e3e026b2932822f2c4770e93f4932a0357baa859eb01fdd7e8772a560cd16e84808a48c057272cadebd1e02611b2c5cda17717f329\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-linux-arm64.tar.gz\",\n              \"hash\": \"bbe169f44f62de1c80a1d6f94f777b8125127d32a324b328148b7373d59251e60ad7dc8e12d6cc730c4990f08c5679e3085867eabe67cfd976291b5d0ee76050\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-linux-musl-x64.tar.gz\",\n              \"hash\": \"7a06c22a6173de9dbd9f9cb8ee28611176886684f71b726b9c7d0619eeaa8ce4b811b6e4400852da7d8fc427442d5eee11efa03c8aeb211e6579eda7b7887bde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-linux-x64.tar.gz\",\n              \"hash\": \"27d9fcd7e4ddc97e161549b9340457cd209cc789ef7a2d7f1be8b2f6f8581bc8949bb7b9105d008bd801db0c180917ac0013e098231ccd9aaf63a61fb0fc4fcb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-osx-x64.pkg\",\n              \"hash\": \"c8a2864db5dfba752483552bc794e7a295b7fac056d1d336d27a90816edf70522ae149cc5b239965173a5b2f1868b65ec66861305c9cf230d27699f88fe76725\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-osx-x64.tar.gz\",\n              \"hash\": \"4e01f2921af5ff8d90cd2df92eeb0ddcc4b09e9ba87e9667b8d291189f8fb31960bcc7959eb73630e6b21b2e83d976ec2b91c84c8836c22f8d5856ed9d867979\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-win-x64.exe\",\n              \"hash\": \"16b90a2f0ac1b9db1de4985dc25c3604c2b070b5a1b7f5c9cb61d145dd2db3b476a2ccd8b1fe4898b495e276610782b1e07510df6dc1bc613944e0d515ab6187\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-win-x64.zip\",\n              \"hash\": \"34ea50ba6f386d7fee678f92b452ffd906e0f10cfbf7a6a972f382b9c601382b54527f305a46d08c4a6a0c5228b061fb3f210f620f21a09828e2eee920e6894c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-win-x86.exe\",\n              \"hash\": \"ac690fad1d4c4008905faf4e4855a1aa5704cdb94a276a0ca33e0287da7fd8fec25bcbc13b531cab64b3c3261e4d8839ad817294055781b596eb51552171bebd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.526/dotnet-sdk-2.1.526-win-x86.zip\",\n              \"hash\": \"a8112b6c8e6a53f203bcb8b9c487ff1948403fa1126ba4d19f646299a8d401db3595e444fc19737225cd9121daeb18eabafa0220aae780cfc41f495198d64e6b\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.30\",\n        \"version-display\": \"2.1.30\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.21225.30\"\n        ],\n        \"vs-version\": \"15.9.38, 16.4.25, 16.7.18\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.30/aspnetcore-runtime-2.1.30-linux-arm.tar.gz\",\n            \"hash\": \"a696a868955ef7bf31c830382e646e8c07040abfe50b49da345f22fa8b45576673aee36a0d4a836dbb987f138b19f856e979b0e5dab8f05c04feced0031a3b46\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.30/aspnetcore-runtime-2.1.30-linux-musl-x64.tar.gz\",\n            \"hash\": \"4a54deb9cb470bea560eb1fc23b4608581f1df814e6a7b696049c74f422e1ba66249fbd239e5f5d98cf3b43418f2b2c2484b7cc9eafc97ecd0759f95b89039f8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.30/aspnetcore-runtime-2.1.30-linux-x64.tar.gz\",\n            \"hash\": \"60f65e2e37bb9af54f809ef0f4fe814c4c0dd9c969dea1aa81e94c0dc2433c5011cde39118196310ffac4e248b24924a2c154534194e70a8cdae40dfc81fe3d1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.30/aspnetcore-runtime-2.1.30-osx-x64.tar.gz\",\n            \"hash\": \"ecdc1a055bd2352ae59394a7f9adf21f119b9f772a05da84feedc2e1c20c50acb09afc53d111e8193dc0fcd3a02dbe08eec01389eada09fb4c5b4f977d40d5a8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.30/aspnetcore-runtime-2.1.30-win-x64.exe\",\n            \"hash\": \"63be995da62e46b7ff7904eb809bb3d34e362502ff4c2bcef99bb6b810ed6d26887b17c49c007cf989bc0ac74e9989257814f5adcecd3e74deff999c79a39f15\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.30/aspnetcore-runtime-2.1.30-win-x64.zip\",\n            \"hash\": \"a49b1394ec0756872eba64d13eb693803f37cdc36ee59ea965692999d88736abaa097e37b7dc76439e84bd3e34b3c531cc9ae193534e5f07484f69aa0a467fd2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.30/aspnetcore-runtime-2.1.30-win-x86.exe\",\n            \"hash\": \"2973e6066e43ce955989b604639e07910e15e4cad2128b3b0956c9886a16d5a0a0f4c2eb5cc02150798b98e9170f67979256ae3824b03282c169feb4666520de\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.30/aspnetcore-runtime-2.1.30-win-x86.zip\",\n            \"hash\": \"cf6f6a73964c5d6cbb4f675d42de33dcfe4c48519f56fbf78ff245281634dbbe673c48a15a3b2fdb6e1351f8993832a963a9eba86bdaf67b69c18380420a780f\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.30/dotnet-hosting-2.1.30-win.exe\",\n            \"hash\": \"70c6b46b5df73ff493d087831b4254d4c3c5c1977a0325d90f6078c725129b71245bd8f886ab72c18113697c592b80714493f5693f2f4d6f5ccf4703bb58d336\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-05-11\",\n      \"release-version\": \"2.1.28\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.28/2.1.28.md\",\n      \"runtime\": {\n        \"version\": \"2.1.28\",\n        \"version-display\": \"2.1.28\",\n        \"vs-version\": \"15.9.36, 16.4.22, 16.7.15, 16.9.5\",\n        \"vs-mac-version\": \"8.9.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-linux-arm.tar.gz\",\n            \"hash\": \"7dd4a629c85a75cc890d6605a7794d00b0cf458b5f793ac8c94d7ab29f6eb9654bf046955da552aaecbf05617cd742c6173e78705fe6e53c8ec33c2f12bb2f98\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-linux-arm64.tar.gz\",\n            \"hash\": \"e2906f8e2784b7cec492427cf50398385ee33bdc8ed84ba049d967602472fda491feed282bc059c46a9c02fa10e333be781650a267241ef0758cc070af0a2197\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-linux-musl-x64.tar.gz\",\n            \"hash\": \"a8e6f3e20b6ecc9bb8501ae61caadeecfcf7cb61343b1f4008138f2dcf15f23bad4c228d61f334b1dec5afb635d6bfb5aae01e82bc95a70af5509b51d2d40efe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-linux-x64.tar.gz\",\n            \"hash\": \"769eb9a9bb5af3caa521eba956d4381592b6e5c07fcea26c1612406ecd35c98e9c462474b107a6ded48b3243d45b04b2429ca6d0149e656cc7e210df6bc8ec35\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-osx-x64.pkg\",\n            \"hash\": \"c56b55ca8146b5df26609482e3957865a4c19d395cc429a35539d87b798b6df91cce86fb9b68ce058a1efd9016574ceef9f71e40b5eead31bd7c048f9f1f9a10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-osx-x64.tar.gz\",\n            \"hash\": \"ab03d64b2f3ad679bcf13cc8cfd06dad84de637f4e98887724b2cf9c42875cae14b6b7b5497571d1e4a8ec42bf5689d9bba092fa1248ac3cc23620def96edf48\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-win-arm.zip\",\n            \"hash\": \"8bbf2ecdab1e3c5ab5db6c70209f833ea93a5a5f9d5f554e05398dea5864c085b1b5b7a8db476a5808ef93b0409b8387544973bd967c23b4e32f1278bafdb4d5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-win-x64.exe\",\n            \"hash\": \"274b108757a400cc8fa5ef3c0fa2caaa0477b3f3bea8f1e08da8cec822913279e2cb74b625331c0ab80f88a5286708accfdfa6edf967ce2ab517e3c83563a9c3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-win-x64.zip\",\n            \"hash\": \"59dc76ab1bd3371f959d14d4f8a26030748441506fabf54ce0d4df98964f961c141cedeb1091dbc384e3708841004650eb8f546cb534d8302b60c187f203209b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-win-x86.exe\",\n            \"hash\": \"dcb4ca17c99fdfcbdec97b36a51d2759757dd4403225e48299f4e788acbad88b7028c4727a33f1eaac7c2e086ed6fc36b7cf09ed33d9b75b65e67e6994789270\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.28/dotnet-runtime-2.1.28-win-x86.zip\",\n            \"hash\": \"da5ba1ed398b5e40bb91240f303e9480478b77ab601e73b7aa4ca270c3bc7e13a60999d3a8d80ca6e943744946bd26d3a573c6ad31337556fb8857b5c388d7db\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.816\",\n        \"version-display\": \"2.1.816\",\n        \"runtime-version\": \"2.1.28\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-linux-arm.tar.gz\",\n            \"hash\": \"1358c17e2f8dc8e3bb754618fb80b4a6104ea1c1fa85177676320af194b8adb0e115b5709b8d409989cea2bda28d5a23d275f9457032a13052d97942fe94f00e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-linux-arm64.tar.gz\",\n            \"hash\": \"32e72e26062444405f8d94918948ebd3a6eb4c4fa5d5c144fab35e23d2c44c9e4ab0d2f12e70c249b2972d5fef32bcbd2551f7920cd0fe778a38457368d477af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-linux-musl-x64.tar.gz\",\n            \"hash\": \"f1fc88eff316b9110418b0d759a45f6a834044a371ec1bcc8c6e75d0cd3cc7e68319a537301080b9f15984e47982383e37d46a1dae2d87c5899d8ea2bad8ef69\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-linux-x64.tar.gz\",\n            \"hash\": \"58f0bc1f67de034ffd0dafb9c0fdb082786fc5057e89396ff574428d57331cd8d5b3e944e103918e05f7b66e354d56cdb242350a6ef932906c9c3d4b08d177e9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-osx-x64.pkg\",\n            \"hash\": \"862da154161e0eea1b4f7321f42f82eb21dd04ffc22706b22f2ad29827f8a067fa0c739075a96d2f76e854ba96b6da8e911a3cc2ca3e1aff726537f659db6e6d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-osx-x64.tar.gz\",\n            \"hash\": \"d8561a763430ece4c77048747afb3025435d8c28bdcd048abfd8f277b05d65271f523d40c14adeec9f304582d2177acdba3b933c5dc9dea4a296954427d84409\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-win-x64.exe\",\n            \"hash\": \"aad2f347e0d658326e7c5ad4377b9f6a9d2c5148240006f1db5501a3415d8b1ab73954b05501fd7eb0f0d9c0fe69c9d1ce04ce4dbaa43564e1c30e72c716ba02\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-win-x64.zip\",\n            \"hash\": \"c9f81b846d71e25eb53d29f2e983ff1365cc276e1685b75550e94eeb99c9d2a4c7b0888251c54cc29f2857ea5b0a1f49e8e55cdcf54a4a72295b995b87986809\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-win-x86.exe\",\n            \"hash\": \"243a5bfde2e317863d0f9e89aec03da25a1741d10df85b739ae7d3300ba6690b230f88597567e62b169abdf9e866a796a9f18c7a2016371d08242d735a5d85c5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-win-x86.zip\",\n            \"hash\": \"39370bf541b22dc246b4a783032a348845bb3863742d421722a10620e3ccd74f56c2beb624d65f6cc62f12b44aeead05858cb0bc4c6c320732f1bb4cfd305fe9\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.816\",\n          \"version-display\": \"2.1.816\",\n          \"runtime-version\": \"2.1.28\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-linux-arm.tar.gz\",\n              \"hash\": \"1358c17e2f8dc8e3bb754618fb80b4a6104ea1c1fa85177676320af194b8adb0e115b5709b8d409989cea2bda28d5a23d275f9457032a13052d97942fe94f00e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-linux-arm64.tar.gz\",\n              \"hash\": \"32e72e26062444405f8d94918948ebd3a6eb4c4fa5d5c144fab35e23d2c44c9e4ab0d2f12e70c249b2972d5fef32bcbd2551f7920cd0fe778a38457368d477af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-linux-musl-x64.tar.gz\",\n              \"hash\": \"f1fc88eff316b9110418b0d759a45f6a834044a371ec1bcc8c6e75d0cd3cc7e68319a537301080b9f15984e47982383e37d46a1dae2d87c5899d8ea2bad8ef69\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-linux-x64.tar.gz\",\n              \"hash\": \"58f0bc1f67de034ffd0dafb9c0fdb082786fc5057e89396ff574428d57331cd8d5b3e944e103918e05f7b66e354d56cdb242350a6ef932906c9c3d4b08d177e9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-osx-x64.pkg\",\n              \"hash\": \"862da154161e0eea1b4f7321f42f82eb21dd04ffc22706b22f2ad29827f8a067fa0c739075a96d2f76e854ba96b6da8e911a3cc2ca3e1aff726537f659db6e6d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-osx-x64.tar.gz\",\n              \"hash\": \"d8561a763430ece4c77048747afb3025435d8c28bdcd048abfd8f277b05d65271f523d40c14adeec9f304582d2177acdba3b933c5dc9dea4a296954427d84409\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-win-x64.exe\",\n              \"hash\": \"aad2f347e0d658326e7c5ad4377b9f6a9d2c5148240006f1db5501a3415d8b1ab73954b05501fd7eb0f0d9c0fe69c9d1ce04ce4dbaa43564e1c30e72c716ba02\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-win-x64.zip\",\n              \"hash\": \"c9f81b846d71e25eb53d29f2e983ff1365cc276e1685b75550e94eeb99c9d2a4c7b0888251c54cc29f2857ea5b0a1f49e8e55cdcf54a4a72295b995b87986809\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-win-x86.exe\",\n              \"hash\": \"243a5bfde2e317863d0f9e89aec03da25a1741d10df85b739ae7d3300ba6690b230f88597567e62b169abdf9e866a796a9f18c7a2016371d08242d735a5d85c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.816/dotnet-sdk-2.1.816-win-x86.zip\",\n              \"hash\": \"39370bf541b22dc246b4a783032a348845bb3863742d421722a10620e3ccd74f56c2beb624d65f6cc62f12b44aeead05858cb0bc4c6c320732f1bb4cfd305fe9\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.524\",\n          \"version-display\": \"2.1.524\",\n          \"runtime-version\": \"2.1.28\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-linux-arm.tar.gz\",\n              \"hash\": \"fa47a4735c15a665016bacb61f4b7b926da371e3193b825856f61e7bbce480baa2320deeda1cedc41707212831ec13970d28d7ad8e1e162e7066ce509e782f8a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-linux-arm64.tar.gz\",\n              \"hash\": \"5131ae6639c56f2a44e077f75b186f6f8b2a2422bd3635b5090ad34228d83eee7d5c0f4ab3158cd5c5b6b206b28f77eb27984b09f0152d256df7c7321bb0cc0f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-linux-musl-x64.tar.gz\",\n              \"hash\": \"5cbb7e619921a4438330aac1c70f05a3920f21b4a5ad45d2c5602a402f355f017273c9496b2db2abed2d25819bdadd74326d39fc380c7402027517621de02310\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-linux-x64.tar.gz\",\n              \"hash\": \"365cea372e5e7d5e91ae6ef1a434a68bc8c8baa9e66b930dd7c6af515896c918e01e85678decf55395beb14afc1e5e5bf41cc2f77267e8b4024ab7a6b911ddff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-osx-x64.pkg\",\n              \"hash\": \"2c624d56f25110722f14f745767f259daed4e2770bfdad7940243cc7af75bdffe711b8a79039353a027a0fd8a9e8f217609eb4139b2433a820af6a11a1f37670\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-osx-x64.tar.gz\",\n              \"hash\": \"d462487132805d4e49f05905c8186d49a01021cd9ad0116c342c4f43b9ddec7b962feaf0f1c4a100e27b95cc17ba5931ed7de542121ff9246e7c89e1903c12be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-win-x64.exe\",\n              \"hash\": \"8f026980fc9c651cc416f719c88178ceac4de3605ef62093d08f6f40214dd47a924e2d4e25c6c89be1765e64561c97430e4fe6b029743daf21d2db183161d3c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-win-x64.zip\",\n              \"hash\": \"d3ec4346f123f76f15f4bc646a05ad044f6067d4acc9ea558bf183213a4798eba3316696a8bc300a3e0ddc7e8bbcaa6cae073a05347a918bc991001985032c15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-win-x86.exe\",\n              \"hash\": \"7e0483287146aa5bd1e2049ce785dbe7c4fd76611eab0222b61a6af4d36d67067c1bbba5e20c19117fdbd89ab5e58c6cad2aa591cc0a10603203e4a573c884e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.524/dotnet-sdk-2.1.524-win-x86.zip\",\n              \"hash\": \"14dc36ebc2643020af32be62f4f5d46bca5e5d47172e476696b9354cdf56d6b0909f791f793d1290be3a91e1e2d05d2707b450f92a218a76d87c2ab02478e54e\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.28\",\n        \"version-display\": \"2.1.28\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.21105.28\"\n        ],\n        \"vs-version\": \"15.9.36, 16.4.22, 16.7.15\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.28/aspnetcore-runtime-2.1.28-linux-arm.tar.gz\",\n            \"hash\": \"66495834ffd457bb1b75edb2e8f238250812db23d0d0fccaf8a9d3a55ef5d666cd3a84dc46803b14e1595a71a6c5dea5a8c6532b89860f0d2136f28f14c3dc94\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.28/aspnetcore-runtime-2.1.28-linux-musl-x64.tar.gz\",\n            \"hash\": \"24965731887e6e3ee26b18124c9d29897beb33b1d3a58ad03564a09aca65a00843a7df230bdb5941686a62c6538a9e381bafea87feb605d3d43a146bc07f8f7d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.28/aspnetcore-runtime-2.1.28-linux-x64.tar.gz\",\n            \"hash\": \"d97bcd5a3e6986025c24deb95483dc556dcf806f2b2274a520b1bbebe5302954f2ce7e2997da600b29142622a6ff8b7ed6439afbadba7b32b472095216a54b12\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.28/aspnetcore-runtime-2.1.28-osx-x64.tar.gz\",\n            \"hash\": \"b371bb6fc4c07b635acd8ff83107476f53b4b6f0a07dcb229ebfdfe15c3751c105011ed2610cfa4869fb9b1c4461841621ed48fb58983eecbc595eca9543b540\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.28/aspnetcore-runtime-2.1.28-win-x64.exe\",\n            \"hash\": \"135eaa51028b22ace7ee958fa41477f80e29740ecbb9262c81b39cb62404c2b9be505d094a217e22d0ea6746157b1ee8334af8a817462cf6c7ae11222dd70843\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.28/aspnetcore-runtime-2.1.28-win-x64.zip\",\n            \"hash\": \"ef05dec5f145680e501e5f2a95f08b943242403712167856313167f934d393ad820c1a7a21f5d9025fd1a37133906185f8b98f9ee675c7d3b1dca0d6b9f0db24\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.28/aspnetcore-runtime-2.1.28-win-x86.exe\",\n            \"hash\": \"14aa27f165b7d6f6ed5ec7004ada75976ff454d3bcecaa8e00586e2020622d6635fbfdd6220d3cdaaf2a535f36bc6775b7bdbb4c72f588d07ff0d4308c1660f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.28/aspnetcore-runtime-2.1.28-win-x86.zip\",\n            \"hash\": \"feb3672fd757086fa80b943aaa2ad6f13a83c1241d115fbaefd0562462a5e5006581d59e8c130f808c1fc1982471a7e40b227a1a4da4e3d432671a22d2fbe104\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.28/dotnet-hosting-2.1.28-win.exe\",\n            \"hash\": \"38d8bf4ad0f2b688092472b00e5dc4f44cf05d97acd45e9d767038b10dd523ee974df05928dfdfda59377b61551a738aabc89c5903d54d675c1ad1f5a62bdcd0\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-04-13\",\n      \"release-version\": \"2.1.27\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.27/2.1.27.md\",\n      \"runtime\": {\n        \"version\": \"2.1.27\",\n        \"version-display\": \"2.1.27\",\n        \"vs-version\": \"15.9.35, 16.4.21, 16.7.14, 16.9.4\",\n        \"vs-mac-version\": \"8.9.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-linux-arm.tar.gz\",\n            \"hash\": \"aca2c5b03be6761bad2ea737170dc7db0a6afc2c69180c6aacb57f525461d2bf6781a046d73e8a92cfef38bdab265975934b2c14ed6c2a31df2e55803052d617\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-linux-arm64.tar.gz\",\n            \"hash\": \"102d86a9259f767c1f27f37906ecb35a67296036cca028e142a6cf981338704624d9826528fbfeb7905971e83ea03b200bb77245f46b6f34acd0a4b107726d16\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-linux-musl-x64.tar.gz\",\n            \"hash\": \"198f20962b54b7cc5589485f33a512dd025570562a0a01c6ee48d21bdf9e1a305b4d252c84d2a8326a32482288a78636c8a30fc9b526307827b0f9550b33e591\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-linux-x64.tar.gz\",\n            \"hash\": \"8f72f297bcd57ee446af2f8af60ea19724fa641611643345f6eb4c81b02277d1259d6065b2424719cf1bb53a34228c2c0595980e7211223936ac416a4563c79a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-osx-x64.pkg\",\n            \"hash\": \"d140e2f71383747bc3d6d209fb1a2c9afb5843a0049a51389dd613619dc13d1f883ac54ec90948bef29c361c0823b82337f30f02dcabfbb52aedec65c913203b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-osx-x64.tar.gz\",\n            \"hash\": \"7509a0bf5569e222b9774fe03d1849b920e446ef72c66ffef950f6bc285614a4c75d1e12708538894ca9823a0dd58fe7491bb93f9b13632076d331f2a8e438fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-win-arm.zip\",\n            \"hash\": \"9b7be2a1426d93161d8362636d54a6a40c9a318c335f975d02940377955513bf239e8f4d1dd96263e6b7caec73777cdf8b1d05ca8c86e8b546f14ec72a89dd84\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-win-x64.exe\",\n            \"hash\": \"6f6be376b37248498a46c242208dcaf510b26cf9ef1080c84cc06031a06da16e71ba9cc570d6d5ad1d7cb02d43a626ff1ae279f638f760ea23c62120e302bd12\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-win-x64.zip\",\n            \"hash\": \"4cb91f35ee8d6480c54719084a110a9572ac8879355526978b2463a7a445395de7b08c5c3aa58b23ac64ba10c4bd4200b97ac017a9e6ed259f4abb66cc70be5a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-win-x86.exe\",\n            \"hash\": \"1a7830cafe73405a34aaefc25ae384642453d57226265013f292702c0b292bb8959a9029956322764f3c778d7f29bd5f235e01fae33dde10c11aa925b6899ea5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.27/dotnet-runtime-2.1.27-win-x86.zip\",\n            \"hash\": \"2cac97be983462a2494297c628c1f5445309d20886489639a11257b472ccfefcb95195a6059e718052c54b926416b3c16f2771c5fe1aa36365bb4d8f20164efe\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.815\",\n        \"version-display\": \"2.1.815\",\n        \"runtime-version\": \"2.1.27\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-linux-arm.tar.gz\",\n            \"hash\": \"190f79284c599c5a8bac0fc58954222d12fc91a4c473de915da381f9ee930d515d8d5fc4a6862e70bc37ec806a68ae55f84771b5041621f035b2ff9bd00e7ee7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-linux-arm64.tar.gz\",\n            \"hash\": \"8fa9f5c5f94f9d039228c150c6497c8bf4482befaa39b8a0acc193968bfbcc3be19e48aeb0cea4cbac713ba768bba8a72bfca2aab9b805a10023b98e6dcbc939\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-linux-musl-x64.tar.gz\",\n            \"hash\": \"bd117ac8993c678d1481b084596278ab91f0b71f0d826b37cf6be146adf681892da380013762b6f5879c17fbf098094173e5d193ada1c34529b410f6237136b4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-linux-x64.tar.gz\",\n            \"hash\": \"e998ccb8b4e47a727141e85823637f2030df556d3056aadbdfbce4eca823fe4759ca0e0b2edaa6f83dd5b4cbb8a3b0046ff2c9eae96832e71dc6c13855998148\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-osx-x64.pkg\",\n            \"hash\": \"f4c7c336b6ed807f9168d767fcb9e6c402304f951a51305ddc197c1b5be4aae5c6a049e9c640983d4a476f4d8bbdf4316c41694a9a136d5dd55c4c7811a2092e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-osx-x64.tar.gz\",\n            \"hash\": \"43b34bd59a01007fad3e1ab682764afdfb5d4429693ecb6572b23b1f54ae56022b7ee679d8c5085dd8badc95942530218385fd0af66451071112771160950f9d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-win-x64.exe\",\n            \"hash\": \"94c32062f75b3285b7992e37a94ace9236a0cc01f2e444fc7274ee57e33e1678b74b79296e0b8b1cb094d62f69af6017f2a86fe00f0fd1dd54989a2bdddd0e7b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-win-x64.zip\",\n            \"hash\": \"661a4a552a43f8ba0008fef9df01728601fcb9936e98aef7afccd0330d60f5fa56b31b7c8e395d7ab5a697c80157c11e4f0957a54985263e2ceff5f5e6c672c5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-win-x86.exe\",\n            \"hash\": \"0abd911e12cfc13162a5be624f59de01b1882fa8ae42a5811dff213240d4690a5d759fa2bddb6454fee8bb86011faa59ea358c8761f6bdb4d704a5dad95de9e6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-win-x86.zip\",\n            \"hash\": \"93a338c525d0aabe36f97a34ada1d03dd5908e7b8e67e112085dccdd6f49f8cbdbefd1eb1ac584c02bb4aee2ac68dfb6c4de00999aac3d1927cf3aedb35ba06a\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.815\",\n          \"version-display\": \"2.1.815\",\n          \"runtime-version\": \"2.1.27\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-linux-arm.tar.gz\",\n              \"hash\": \"190f79284c599c5a8bac0fc58954222d12fc91a4c473de915da381f9ee930d515d8d5fc4a6862e70bc37ec806a68ae55f84771b5041621f035b2ff9bd00e7ee7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-linux-arm64.tar.gz\",\n              \"hash\": \"8fa9f5c5f94f9d039228c150c6497c8bf4482befaa39b8a0acc193968bfbcc3be19e48aeb0cea4cbac713ba768bba8a72bfca2aab9b805a10023b98e6dcbc939\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-linux-musl-x64.tar.gz\",\n              \"hash\": \"bd117ac8993c678d1481b084596278ab91f0b71f0d826b37cf6be146adf681892da380013762b6f5879c17fbf098094173e5d193ada1c34529b410f6237136b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-linux-x64.tar.gz\",\n              \"hash\": \"e998ccb8b4e47a727141e85823637f2030df556d3056aadbdfbce4eca823fe4759ca0e0b2edaa6f83dd5b4cbb8a3b0046ff2c9eae96832e71dc6c13855998148\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-osx-x64.pkg\",\n              \"hash\": \"f4c7c336b6ed807f9168d767fcb9e6c402304f951a51305ddc197c1b5be4aae5c6a049e9c640983d4a476f4d8bbdf4316c41694a9a136d5dd55c4c7811a2092e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-osx-x64.tar.gz\",\n              \"hash\": \"43b34bd59a01007fad3e1ab682764afdfb5d4429693ecb6572b23b1f54ae56022b7ee679d8c5085dd8badc95942530218385fd0af66451071112771160950f9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-win-x64.exe\",\n              \"hash\": \"94c32062f75b3285b7992e37a94ace9236a0cc01f2e444fc7274ee57e33e1678b74b79296e0b8b1cb094d62f69af6017f2a86fe00f0fd1dd54989a2bdddd0e7b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-win-x64.zip\",\n              \"hash\": \"661a4a552a43f8ba0008fef9df01728601fcb9936e98aef7afccd0330d60f5fa56b31b7c8e395d7ab5a697c80157c11e4f0957a54985263e2ceff5f5e6c672c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-win-x86.exe\",\n              \"hash\": \"0abd911e12cfc13162a5be624f59de01b1882fa8ae42a5811dff213240d4690a5d759fa2bddb6454fee8bb86011faa59ea358c8761f6bdb4d704a5dad95de9e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.815/dotnet-sdk-2.1.815-win-x86.zip\",\n              \"hash\": \"93a338c525d0aabe36f97a34ada1d03dd5908e7b8e67e112085dccdd6f49f8cbdbefd1eb1ac584c02bb4aee2ac68dfb6c4de00999aac3d1927cf3aedb35ba06a\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.523\",\n          \"version-display\": \"2.1.523\",\n          \"runtime-version\": \"2.1.27\",\n          \"vs-version\": \"15.9.35\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-linux-arm.tar.gz\",\n              \"hash\": \"f41f73fd56504cbecc1008a32d1dcca64b26376600f6a9a9dbdf2a2101a2b6f75e5f7446b0adca3d1e55c431a0f9b90018d2f302f24921995e1553269d0063c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-linux-arm64.tar.gz\",\n              \"hash\": \"13dea59d7cbb6aab1145681d47a38e8bd79e78347854590c45930d5df0618386fc26c5906a86a6f0bc8ddd39cf0cc202bd80b857a45088baf43cdf1bee6db541\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-linux-musl-x64.tar.gz\",\n              \"hash\": \"8ab7e8eebc596ef8f501366741faf56fae72299f218f611c8aae8d0609eb3d634c073693d649a6c34a031e8676f346846e2545acfc4555d500e38a886aaaf6b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-linux-x64.tar.gz\",\n              \"hash\": \"140d978fef0a56de347fd69f27010caf2e69d5616e6411d300d8fff33d006e9debaab7d343aa069c6ca7ad24d80ef02e6840f705547f00bf5b9c7977935e01b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-osx-x64.pkg\",\n              \"hash\": \"f0454c60d29661c60591715dd522333a4f01026d6f34e33b5470acbc8d0adf33922a3dd25815a8162e9253382bf584ac5e059400b7e9f4a7c671b9f226ecbc96\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-osx-x64.tar.gz\",\n              \"hash\": \"de330b387aeb68528f25ad58281a3ea77e44403f816c83b2f7e3df29a5b7cff335fb9b0d36c9fcb2e51bfd19ad31fbf83aee7a74726249457c20cfc0edd57bfa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-win-x64.exe\",\n              \"hash\": \"c9e0de37c3c88dd01a94ae3b52503820c3fe1663c7af8862f191ada33464353b0bbc80e0db80cde50a7f8350047169a49609fc5e982f0e58cf2406ea123685f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-win-x64.zip\",\n              \"hash\": \"109e6c29669884b586937c655f43c10d886952dac85793a37318e5ccb0e6102d8c7635e8f9b7523e1b09176b7e28445cc21b2e96fb31729ece23a09378de5851\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-win-x86.exe\",\n              \"hash\": \"a898510781fd79825c1b4a32518856c3257cb0223d0e7b5190d69ae6b009e068bdae396c3b77d1411ed277596db61a98049d5d5f4b21e2e323f1500504165141\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.523/dotnet-sdk-2.1.523-win-x86.zip\",\n              \"hash\": \"e7a37fbab138efe8db2e3da9cf2f84f11d3c2bd7d216d147849f42614e12c45ea57b42357f1674f5603ab05d8f608817235e9b087ab72495acb31e75a60cc823\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.27\",\n        \"version-display\": \"2.1.27\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.21076.27\"\n        ],\n        \"vs-version\": \"15.9.35, 16.4.21, 16.7.14\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.27/aspnetcore-runtime-2.1.27-linux-arm.tar.gz\",\n            \"hash\": \"6e83a2f0b332701c4e932b0ea3e9f8783454e960c0c051b3c31180a80083ec1b191e1c5526db45d3b44e1d10f3831569e1ab6efad0ef8c5377c38e9b81226c52\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.27/aspnetcore-runtime-2.1.27-linux-musl-x64.tar.gz\",\n            \"hash\": \"45a0e5d56676b6d8f4ae66dcda40090816f92414b493013db8e23b560a50ba2d8379ad0a1e978177fee97d6c6e6d24fcf0b62bca65442ce54bf5078171011046\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.27/aspnetcore-runtime-2.1.27-linux-x64.tar.gz\",\n            \"hash\": \"ea2b36097c2dca3660265d3dffbbd82d38d2c3f11a3759f6afe70f296b515c0610f8a6680385b4a54f5b21ba0a299090adb67fc7b352c22b6a941b750ee51084\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.27/aspnetcore-runtime-2.1.27-osx-x64.tar.gz\",\n            \"hash\": \"e92a363eb3805f8a7ae69b5706f284696588325488594a8cd9795c300523436fa12a4ff61f7200817704487f6d7b6839c59400472af03a181c133f8b7ed235f3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.27/aspnetcore-runtime-2.1.27-win-x64.exe\",\n            \"hash\": \"6c484f405c4f7286b0662b03fcbdb425eb8b58674f337c84afb93dfceb7ad0338eeb4b3342e1834baf5211f2544afc825d23e424b2f481fb6e9909acb122c952\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.27/aspnetcore-runtime-2.1.27-win-x64.zip\",\n            \"hash\": \"8dd828d345759a8b18d942d3f284dc75bc333040691182e5d340b60e11420883f16cb5c7c5ef9d5fc5d3a4751bb17671ad1638abfa6402cc6c0282d2cb41ae58\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.27/aspnetcore-runtime-2.1.27-win-x86.exe\",\n            \"hash\": \"c9d119443e5bfc668adab8ca2b0ebda497c99e2718f48b1fb7c7450f3bb638b7b8503ef71e3f4e45ede042c25c1c28b6a098f16826832d3116bf03554b8aafc8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.27/aspnetcore-runtime-2.1.27-win-x86.zip\",\n            \"hash\": \"6fbc671e7fff1cbe917aca17ff01597290e910e55648664b70494bdd8e9a57ca9fdf70fcd07a1976a2a7d6c632b7dc9bd1a4214fe47ef82e35713469c46346e3\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.27/dotnet-hosting-2.1.27-win.exe\",\n            \"hash\": \"275cd5d06e790904ddd3dc2014ce0b3d0dda30e8a15873a2983fc961fff3fdd2852e1abf3e14f448d11fd648828c4ebcbe707bb4d516246ab36c5be8c4f3ba4b\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-03-09\",\n      \"release-version\": \"2.1.26\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-26701\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-26701\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.26/2.1.26.md\",\n      \"runtime\": {\n        \"version\": \"2.1.26\",\n        \"version-display\": \"2.1.26\",\n        \"vs-version\": \"15.9.34, 16.4.20, 16.7.13\",\n        \"vs-mac-version\": \"8.9.1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-linux-arm.tar.gz\",\n            \"hash\": \"c59ce1c50dc3ba0d8010e44f937a1b2916aebeaf3dc08056485e77cbf5bd41091266d354603dc9ce02ad494aa6e8cd2daec62eda5e82e68ae94e56a635c3bc30\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-linux-arm64.tar.gz\",\n            \"hash\": \"e0e54ff07bec810ce85e9cd8f9baae68d2857781ea6448780397b9df9f751bce4938542e4e1c023851dd9e8da76b849f2a6a6d4e3ade16b9f35ba4957b025b58\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-linux-musl-x64.tar.gz\",\n            \"hash\": \"0dea59e3919e7ed882ec825902e12ec852e0b1561e2a8853cf103d4c909c1643d9ff4aab1f5419f921cd3bb28a24583bb99b4792998f69b456a5daea685e1bd2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-linux-x64.tar.gz\",\n            \"hash\": \"41cc13f14dd7721a079bdd0ab489de40e9d4f32787239a26e7d10fcb0020a8e78d446c3b430b4bf80a557a925b3ca87d7981bfda4bbf9495cc44b1d42d877c40\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-osx-x64.pkg\",\n            \"hash\": \"87356b29c34d257e2c3cc99d636b45b4fe86a842d2a03ddb721a71a166d3ddb31bedb9849a239709049cd8ca18160b902e1e14ca3a952a0b289c5d9ba6b6cd03\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-osx-x64.tar.gz\",\n            \"hash\": \"d5a5275df985e46235dc61ac7089977c3ab7681a9a9b18b720c9133dfc8f7748abe0c82c791ec458c6faf62a63a4e90a6efbbb54a650f30466547c646de553d6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-win-arm.zip\",\n            \"hash\": \"1e36413584c169771b62ba908c879ec98997029d533da39fe169a307ac0f0be74bbf2ff9c0c51050342fb63dbe0c876c3631258701578c5121132605e92a876d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-win-x64.exe\",\n            \"hash\": \"f96b0ee164873fc8290df6c1dec43faf169e512e07d4803363c577edf51667b765e09f8d54c3232dcda44282193131ba12683b7b02b394866a3a91990744c532\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-win-x64.zip\",\n            \"hash\": \"08cc489d7c33d87bc5e0d9c51e8dfa06d826f86c8be04bceef5ae1853f4382ce479603590cd516d16088d33875e4f9695ce645ea11df6a0de6c6631cf632910c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-win-x86.exe\",\n            \"hash\": \"332315b3e6c478b8b1b1b9a754ffca9a382332bf84dd42419b49c618ad55bacf90e3d9acf68e9e19250a71a66f8d90332948b2d6f8e2b4c41a7e6ee60973751e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.26/dotnet-runtime-2.1.26-win-x86.zip\",\n            \"hash\": \"387c3c3da652d5bf32bee1d163c12db8b4296bcd03103a41183b633c8a010c210cf42e3ceefaa7eb1dabdb54fe300f711e7391d3a4b4d9bd2653649bb7e353d4\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.814\",\n        \"version-display\": \"2.1.814\",\n        \"runtime-version\": \"2.1.26\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-linux-arm.tar.gz\",\n            \"hash\": \"a4e12b9b1febe4ba6a5319894543bf2fb61d2311354b0eda3f664a4d8aefea0b8edc867ff13de87e84f3285925911e94c050033993038f37253a0626687136a5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-linux-arm64.tar.gz\",\n            \"hash\": \"2c4a74d6b238ab316e0e60caff77eaeafe5de8fa44fc3b0d828cf81de97d99b065a6260f1e6209f4021be0bc1c9f082a9648c341d65cd36fe3dce1b6eb86ae96\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-linux-musl-x64.tar.gz\",\n            \"hash\": \"96635ae8dcb736f9c2ad7f798c2a5d97d037c86567179c3ad0cdd60712ef654ea8dec89b9ca20f5ccc19aff431bbe7da07fcdf70077b05fa057f95afce7e0526\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-linux-x64.tar.gz\",\n            \"hash\": \"79408996f53650d0c3ac39348fa102537d14190ba5dcc4b9152cdb8fc72566608ad7430f196731eeb62dcfacdb0f2fa37577b5d51e165afd9dd9ae15f9d2aabc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-osx-x64.pkg\",\n            \"hash\": \"695294f9fa6766f95fc906e67b9df2e16246c76c212ebb5030a528f57a366a77ef201d3786545503a940f47c29974a47aa1f8e186d342227d2f525124ca6e4fb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-osx-x64.tar.gz\",\n            \"hash\": \"09b458e01bc063c80745968b72f1a356bffe7b89a1045c680557306ffc3a4a0eb24ef861957887cb738256115d88b37ef5f0a899d16587b85a6ac55214f8b3d3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-win-x64.exe\",\n            \"hash\": \"dba99d5d8f75876f0cdc0260f86d7ba6caeab64aafebe5d0f087aaf4e9696f0f9cedc3dcd25102c490bdedf88f31f0d14238bade4d39b3ebfd808d90b8d6db27\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-win-x64.zip\",\n            \"hash\": \"912de139dfc4cdcd5a67c67035d54ff4110fc31d89f34aa4ec391a65425827ad6a66bcbdf6654ccbc991f2541a8b963707156f356a1638e41dba057366dca126\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-win-x86.exe\",\n            \"hash\": \"3cce057824063598eba71734563a7b20e42fd575e6215d99606fc342d6cb4beeb27b8578ed9818bea9b6c95772cb3ee218ca13421f8047fc8bda6d4b6cb41fea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-win-x86.zip\",\n            \"hash\": \"e131d8b2bd77f57ded1867007f4bc6c4c22f83899a9ca237aedee1081fb4ba46c64b9d0d602517144048569dd5743a04e3885e53dc982e540a6c72bb982579ff\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.814\",\n          \"version-display\": \"2.1.814\",\n          \"runtime-version\": \"2.1.26\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-linux-arm.tar.gz\",\n              \"hash\": \"a4e12b9b1febe4ba6a5319894543bf2fb61d2311354b0eda3f664a4d8aefea0b8edc867ff13de87e84f3285925911e94c050033993038f37253a0626687136a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-linux-arm64.tar.gz\",\n              \"hash\": \"2c4a74d6b238ab316e0e60caff77eaeafe5de8fa44fc3b0d828cf81de97d99b065a6260f1e6209f4021be0bc1c9f082a9648c341d65cd36fe3dce1b6eb86ae96\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-linux-musl-x64.tar.gz\",\n              \"hash\": \"96635ae8dcb736f9c2ad7f798c2a5d97d037c86567179c3ad0cdd60712ef654ea8dec89b9ca20f5ccc19aff431bbe7da07fcdf70077b05fa057f95afce7e0526\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-linux-x64.tar.gz\",\n              \"hash\": \"79408996f53650d0c3ac39348fa102537d14190ba5dcc4b9152cdb8fc72566608ad7430f196731eeb62dcfacdb0f2fa37577b5d51e165afd9dd9ae15f9d2aabc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-osx-x64.pkg\",\n              \"hash\": \"695294f9fa6766f95fc906e67b9df2e16246c76c212ebb5030a528f57a366a77ef201d3786545503a940f47c29974a47aa1f8e186d342227d2f525124ca6e4fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-osx-x64.tar.gz\",\n              \"hash\": \"09b458e01bc063c80745968b72f1a356bffe7b89a1045c680557306ffc3a4a0eb24ef861957887cb738256115d88b37ef5f0a899d16587b85a6ac55214f8b3d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-win-x64.exe\",\n              \"hash\": \"dba99d5d8f75876f0cdc0260f86d7ba6caeab64aafebe5d0f087aaf4e9696f0f9cedc3dcd25102c490bdedf88f31f0d14238bade4d39b3ebfd808d90b8d6db27\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-win-x64.zip\",\n              \"hash\": \"912de139dfc4cdcd5a67c67035d54ff4110fc31d89f34aa4ec391a65425827ad6a66bcbdf6654ccbc991f2541a8b963707156f356a1638e41dba057366dca126\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-win-x86.exe\",\n              \"hash\": \"3cce057824063598eba71734563a7b20e42fd575e6215d99606fc342d6cb4beeb27b8578ed9818bea9b6c95772cb3ee218ca13421f8047fc8bda6d4b6cb41fea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.814/dotnet-sdk-2.1.814-win-x86.zip\",\n              \"hash\": \"e131d8b2bd77f57ded1867007f4bc6c4c22f83899a9ca237aedee1081fb4ba46c64b9d0d602517144048569dd5743a04e3885e53dc982e540a6c72bb982579ff\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.522\",\n          \"version-display\": \"2.1.522\",\n          \"runtime-version\": \"2.1.26\",\n          \"vs-version\": \"15.9.34\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-linux-arm.tar.gz\",\n              \"hash\": \"2cb5996501e140e05ec9d937f8387b7230fbe1c1a205d3854cf8cfc64ddfe1939e688021170dd81527440cce2abf9540976932f350501ef7b8f3a5f4a61caa61\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-linux-arm64.tar.gz\",\n              \"hash\": \"8702c696efb5eb3a9b1fbf10fd071645e2addba35f640002fae332e7885f86779d31dc023cdb7786b786586fc246af2bcadac86a9402a26b1a213ff3fcd3c05b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-linux-musl-x64.tar.gz\",\n              \"hash\": \"31fe0d841ba8b60d64eacae1773f4ef29fcf608d0a1942adb61c3e5bc2b1a62a4cb5d53e561413a7a0c4257545b8fece890008bc9382af3e120d69fa14366a2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-linux-x64.tar.gz\",\n              \"hash\": \"29d672bcc4e4070bc0a261dd01990987ffe28f6fc572e17fdaf0b5d786eeaff637763f7a96c22a0568a4a31e4b9f019ee23f6fd3a7259b95d6769de5e1bbc824\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-osx-x64.pkg\",\n              \"hash\": \"28c1cb7bfd6304f52adee26ac00f88efff748547a6db4d6f937f0135ce3c6a7cf376bb87c667edb9a1b15f4f08d1a66b29bc90b1d7c57533bc63895aa49afa61\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-osx-x64.tar.gz\",\n              \"hash\": \"f57a9cf3d2634f5232f7c0d7be136710a8bfaf423a2da214def7d3e6bae54f40d739e42cf2c68f011997ff5d6ce5197c226183635790bc8dd26836ef2a2055dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-win-x64.exe\",\n              \"hash\": \"3e8fa328b495ea8fb96b5d2bc2b6288bd8a924fecade8bc7c7c0d8ec2367d770b7cb2ca6d752b128e5a9ca4be08b26a83af188730efb92e9f36aa86c599493c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-win-x64.zip\",\n              \"hash\": \"21a5146206708fd108a45ad53cba1b9cc99a174d877eb38fe954c8ec8f1b4c3e1315c308f5edf042067216863fa8b9f43eb0cb09db5feeeeb618ca0846b65b8d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-win-x86.exe\",\n              \"hash\": \"63d988873fcd5e7eca529efa064be79216673188f623a3f44511312edb39b387f5463207ec37f5c5b01cf1026a75bc71e1360e969c8b674add62859383d0b32a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.522/dotnet-sdk-2.1.522-win-x86.zip\",\n              \"hash\": \"149617c976817c110f3820c25709d8f1cb294575532a32db912ad27ffa531fad7d82f74148c3f0c98bc56a51926efd383159bab678126a419795ff5f8929d908\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.26\",\n        \"version-display\": \"2.1.26\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.21053.26\"\n        ],\n        \"vs-version\": \"15.9.34, 16.4.20, 16.7.13\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.26/aspnetcore-runtime-2.1.26-linux-arm.tar.gz\",\n            \"hash\": \"3c3d7ea699fda97b28557522ca68a214650952a92642c094925602125c5515da5e74597c79509378eb467b94354c84e2e8d0b89c48b59a9cd5838a55f7442959\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.26/aspnetcore-runtime-2.1.26-linux-musl-x64.tar.gz\",\n            \"hash\": \"c1c279e9ac1bbd5fa8ffbb71e7aaafa393643f9fa9c78b4f61b7c206e77f4f4a7c4b1daf779ab62c1844eef3912785d2b4bf63309ef46f6dfdec9b20242d51c0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.26/aspnetcore-runtime-2.1.26-linux-x64.tar.gz\",\n            \"hash\": \"c3d12b53e5658902d49aae7f4457e785be09859eeb0270b9614f95021f7387f94f78a4d3c72c7cc62a5eefe096fc19c1256439e66676723f8fd2451c70dbb0de\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.26/aspnetcore-runtime-2.1.26-osx-x64.tar.gz\",\n            \"hash\": \"471a43093d418a8989eedcd49a648ce2157ec3144ca8eb6707abe59d7c5d5be8ebc5d8c9b92abcba4e36c7b7554db64130bf87151f4036dda884b9457ea2aa8a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.26/aspnetcore-runtime-2.1.26-win-x64.exe\",\n            \"hash\": \"b068ef821ef41fdebb13755c40e6b1c231b3c39f6a319634ed852000a0e532f50804a2f90bdfc7799ec415d314b76e09358b835fe599e9e4931f3ee365cc733d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.26/aspnetcore-runtime-2.1.26-win-x64.zip\",\n            \"hash\": \"07b8526ede1b0ae359dc93353d3e82570d60f3db9f6b649c6cf08da712e9fb8f3ffe3b9b24ccec9f39c1d69cd758bdfaef0a12c63b3d8d5b57ba5661ffe84e2d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.26/aspnetcore-runtime-2.1.26-win-x86.exe\",\n            \"hash\": \"459086258c85235c458d2c15b11c5a24cca20e800af891947f1074499c7d049a85e9853df2c8e511d749f9b8de819751c775450c5b4638e82c0ce1c4e42de140\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.26/aspnetcore-runtime-2.1.26-win-x86.zip\",\n            \"hash\": \"bcb7866fb1a1a03cdf8c0151fd89ec54214a3c279110aaeab471f35acba2dfb889a3a3183cf67fc0944463b5b25d41b46734ee061e41bfd0f7ab9205e35350a9\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.26/dotnet-hosting-2.1.26-win.exe\",\n            \"hash\": \"ba727ce215f5b04719d4bdffcb1a3c6dd4dbb2bb9ef4e14332a9cf0d03aff3c518761024bf6cafbdb83cdce2841056e30ff56b29ff714b559947f7c23c5fe53c\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-02-09\",\n      \"release-version\": \"2.1.25\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-1721\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-1721\"\n        },\n        {\n          \"cve-id\": \"CVE-2021-24112\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24112\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.25/2.1.25.md\",\n      \"runtime\": {\n        \"version\": \"2.1.25\",\n        \"version-display\": \"2.1.25\",\n        \"vs-version\": \"15.9.32, 16.4.18, 16.7.11\",\n        \"vs-mac-version\": \"8.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-linux-arm.tar.gz\",\n            \"hash\": \"84876749e588e2b8c8d1cf2205007183dc6deb13599a080479d848d0634c9338fed99c8a8818a2595f93c0d35aee4d0ea1835ab9ac848ca1c910b4ba72c547f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-linux-arm64.tar.gz\",\n            \"hash\": \"bbb460e5f3d1a85d88345979bfec65065af24a2a751418c7ee92d3fb3c4e4380120613138ff0dc6b1a016ab8fa43ba1c34404c5e83a014231099d5449453578e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-linux-musl-x64.tar.gz\",\n            \"hash\": \"bb23d691826f467ba8075ca804668dfa21076935727ba4669c39bfbbeea8d5b941a66616989469e5f44eb5f87dcb577409489ad061c62c1e6b1c1355a87d4820\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-linux-x64.tar.gz\",\n            \"hash\": \"ab93b5e4117b4f7d3267eef5552d5001e5f0974e2cc3994b80cfdc2dfe56d24f62bd49754b8dcdf0061f7e572e424631ca96d60efc63d6b63fdb2109fbf147f8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-osx-x64.pkg\",\n            \"hash\": \"35aeabd0ef05816ff60b088445b1a6a4add258ab5890c1e9f0e1ac663a6ab2265f7ece2b0b88573ae3e1190aca99098b27b3c341befcf5b838a6a84ac212c8a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-osx-x64.tar.gz\",\n            \"hash\": \"527c56527fb542fa359efa66bc265567ea27236c8736390f0b0f2c01c1739b94de80c6263e2f1633bd2a7ecf5ad221c3468636d64dbad4214ae1f8ebb5fc8c45\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-win-arm.zip\",\n            \"hash\": \"522b64305d0ec77dd76eee5030b732dbe5245d7a92635d247f66c6cb8d7bf53fa61f1cbd1e7d729af4f0da4b1fe128d32e8f797822aa128df233a17db607b8ba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-win-x64.exe\",\n            \"hash\": \"24060c08f287f503c06e53dc1e01571713d308787336639bbbd56f7a8aeddd5bd8d748df1df5e3b3eb4480f880aead6923b81a8166bb69efa8e6676bc0e91265\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-win-x64.zip\",\n            \"hash\": \"f1a23ba598dba17c47754a09f8e4b5bb9ae3995f7d0664582d9b79c4d913ffc4b91433d60504bea6210447c88a24d333d4817fbf45904af482b328bb12147724\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-win-x86.exe\",\n            \"hash\": \"99b316cd441dc870c5f3d64f9ea7e6700dc07b866d65124d7317c069454cf236859dcd04f132c8148e6b18ed0e126d7593628dc55b6e10f5416e261515dca025\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.25/dotnet-runtime-2.1.25-win-x86.zip\",\n            \"hash\": \"a2f8f6510e896733ef54d4284273bbcca3d14b8d0794d173adc806ce31aee59e17fbbfdebf153b5a3b5cd73d8b1ad46905610e487a6ba8a14d41579293a21790\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.813\",\n        \"version-display\": \"2.1.813\",\n        \"runtime-version\": \"2.1.25\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-linux-arm.tar.gz\",\n            \"hash\": \"9602894b488f8fc3dd4f2dd57ef9092748edae9699dfe385157f32c7be3f1d8914274c130b6634e39fd4bc8f76be2e148a934770c0c8e5b8dc7f75edeac186e3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-linux-arm64.tar.gz\",\n            \"hash\": \"8b953577e293ea61e764e9a54cdf7e94f0d33fccde699c339dbf298ff7bb3265858f96ea7922df2fa49aeed7572b24ef92e8d0f98b394b9b592f6d3fe8555ad5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-linux-musl-x64.tar.gz\",\n            \"hash\": \"b2593e4038033c767e1c16f697e69dbe398e2560ee6877a6998143d1af08e06a46e8a4b907b612c01b026544b884dfe8ecf6a9672105561751d6f06924d9f042\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-linux-x64.tar.gz\",\n            \"hash\": \"fbf4bbe5ff88bd12ef9da097839e9b426ce6d03b5ebff4a32f8cbc8b082b1086d5b6daacbe6c38e581d606ca2e4d7da98bac86ed608ecbee35616f9b9adbfa53\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-osx-x64.pkg\",\n            \"hash\": \"acbad9e1e8015791366abf87b5bd30963f072e02a7f5bf56d1d1cb940ae0a02042bb9841b267a9da3cba6f496c98aa21e22b33b41ab95baa8ec242552128f7fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-osx-x64.tar.gz\",\n            \"hash\": \"e909529efd294c4a6dfdd805658da0179a5e677141a4495f3a68124e35459d2790e0130c0ea375ec053a22370c2531a2eecddcc2ffb295dfbefb7500cc8c6ebb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-win-x64.exe\",\n            \"hash\": \"bda6668faea038aa8e3d11ea36ab8ccc4ad940b49a3c2faea453f26b7b8005d1b2f8227bba2b63b7b36c69b1983b9c431e30f315b2d3cd1fa2f04faab5d43df1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-win-x64.zip\",\n            \"hash\": \"452bc62a9fe4c213dfc464009164f556e188fff9eec1e25d151e9ac2693d9569e65de4a19156063bc668eafffc7907199652fd3d4e61052b172d9ea0fdfb97a6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-win-x86.exe\",\n            \"hash\": \"b99e96b323e9d24ee2a33ffa66b77803e6babfbeec834dd65aa300ddc08a2dcbcdbdf549ac4828292d956509722da10f2b0739f79dd9247243e24fae11ad1438\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-win-x86.zip\",\n            \"hash\": \"78210718f043fe3d802f1ba6ff32286bc8a9aa19978443834cef4e417190bba6d87b881bb12c7c8c519c5d3421ba64ae5c1062eff7e102859bcfc3cbdce8dbf8\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.813\",\n          \"version-display\": \"2.1.813\",\n          \"runtime-version\": \"2.1.25\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-linux-arm.tar.gz\",\n              \"hash\": \"9602894b488f8fc3dd4f2dd57ef9092748edae9699dfe385157f32c7be3f1d8914274c130b6634e39fd4bc8f76be2e148a934770c0c8e5b8dc7f75edeac186e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-linux-arm64.tar.gz\",\n              \"hash\": \"8b953577e293ea61e764e9a54cdf7e94f0d33fccde699c339dbf298ff7bb3265858f96ea7922df2fa49aeed7572b24ef92e8d0f98b394b9b592f6d3fe8555ad5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-linux-musl-x64.tar.gz\",\n              \"hash\": \"b2593e4038033c767e1c16f697e69dbe398e2560ee6877a6998143d1af08e06a46e8a4b907b612c01b026544b884dfe8ecf6a9672105561751d6f06924d9f042\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-linux-x64.tar.gz\",\n              \"hash\": \"fbf4bbe5ff88bd12ef9da097839e9b426ce6d03b5ebff4a32f8cbc8b082b1086d5b6daacbe6c38e581d606ca2e4d7da98bac86ed608ecbee35616f9b9adbfa53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-osx-x64.pkg\",\n              \"hash\": \"acbad9e1e8015791366abf87b5bd30963f072e02a7f5bf56d1d1cb940ae0a02042bb9841b267a9da3cba6f496c98aa21e22b33b41ab95baa8ec242552128f7fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-osx-x64.tar.gz\",\n              \"hash\": \"e909529efd294c4a6dfdd805658da0179a5e677141a4495f3a68124e35459d2790e0130c0ea375ec053a22370c2531a2eecddcc2ffb295dfbefb7500cc8c6ebb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-win-x64.exe\",\n              \"hash\": \"bda6668faea038aa8e3d11ea36ab8ccc4ad940b49a3c2faea453f26b7b8005d1b2f8227bba2b63b7b36c69b1983b9c431e30f315b2d3cd1fa2f04faab5d43df1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-win-x64.zip\",\n              \"hash\": \"452bc62a9fe4c213dfc464009164f556e188fff9eec1e25d151e9ac2693d9569e65de4a19156063bc668eafffc7907199652fd3d4e61052b172d9ea0fdfb97a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-win-x86.exe\",\n              \"hash\": \"b99e96b323e9d24ee2a33ffa66b77803e6babfbeec834dd65aa300ddc08a2dcbcdbdf549ac4828292d956509722da10f2b0739f79dd9247243e24fae11ad1438\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.813/dotnet-sdk-2.1.813-win-x86.zip\",\n              \"hash\": \"78210718f043fe3d802f1ba6ff32286bc8a9aa19978443834cef4e417190bba6d87b881bb12c7c8c519c5d3421ba64ae5c1062eff7e102859bcfc3cbdce8dbf8\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.521\",\n          \"version-display\": \"2.1.521\",\n          \"runtime-version\": \"2.1.25\",\n          \"vs-version\": \"15.9.32\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-linux-arm.tar.gz\",\n              \"hash\": \"ba2a96d5dd41789cd34bb73be3995dc4b21ea19ac44b7fb467c2c642d6856ac66f4f6988a17c5fffa118d7f89cb65d961eee745f604eaf25b58e22d4736b7ac2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-linux-arm64.tar.gz\",\n              \"hash\": \"9df90ba6e4c0e6453c019ace769f6cbd6c492436c2ec7ecedadfebf61dfcc27bbb8864d05459863acf6c4acca4a679a0a41e6d217df3e1bb0e1193dd46487ef4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-linux-musl-x64.tar.gz\",\n              \"hash\": \"78a0b659bed8c6a9da8f742d94ceaf834a8f25aefcfd1e8f2d2f24f8162ad694fb1366c7d45cb5fe45b8ae13e7a5a54d91615f2bd5d04d7d001a5f255e86cf47\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-linux-x64.tar.gz\",\n              \"hash\": \"601430e93c98b3de30677728ee747840ff30c1c7c1a728bf6eb3d5e4197c291706944a590f4fa102d1a83bc50183afeb7b333b0c9458ccc978b9f5dfb130b9a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-osx-x64.pkg\",\n              \"hash\": \"d333b73ec099dd54ced4e60ac9454585721d1070e7ea5571adc61f252213de04695b1d7581c9a5a6560adeacf75b34b3da86e77358ba1d2eb0fbe9cffe2fd31e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-osx-x64.tar.gz\",\n              \"hash\": \"214317c444bbe57d89497a60101c99fb3dd4b115ec27e410cc7e2623f98057f712f17638a53c8fcf2ea32b08feb2faf601eee0b67cfb9ae811f9e9ca8d8b84b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-win-x64.exe\",\n              \"hash\": \"4e19461d70ba70610d4b98eea9e39977cb49803e205b0f7eefe654129c784e84a34bf6b1d3af9ea79e9048d309166a7b5fbf283f3cd22975037628af5e856208\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-win-x64.zip\",\n              \"hash\": \"d19935623bd3e8ecab02d25dadc64ce2dadbf715a21f37d28f037d2f72487fed584e4126cce739c258ac464920b672b73c1fc5fdf4311feaf93ee222b20c283b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-win-x86.exe\",\n              \"hash\": \"766b905380024e37c3c0e93a75a0ab4fff026ac0d2a40915fb0215970ded0b29bb9a96b733ece9f87be47042c6d5d55511f1e494ddd9d14827b47318514a83e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.521/dotnet-sdk-2.1.521-win-x86.zip\",\n              \"hash\": \"4c0deaa0d9bcad233bba4727da516a54f38670fbc28b1a7292684cee9496597c9b09b26e8b12a49c85ec79a19a97bfcbae7cca7d3389d59c3870ea08b59be2d9\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.25\",\n        \"version-display\": \"2.1.25\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.21021.25\"\n        ],\n        \"vs-version\": \"15.9.32, 16.4.18, 16.7.11\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.25/aspnetcore-runtime-2.1.25-linux-arm.tar.gz\",\n            \"hash\": \"f8f0eb9ed7748e0676f38817943c74fac3d6a94094a3e2942ac11ed0ee04ac61991c16727704e31a854f655d8c73a02c09a960182f9d4996e6fc90a7d5fab29e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.25/aspnetcore-runtime-2.1.25-linux-musl-x64.tar.gz\",\n            \"hash\": \"58a3e30a27ce53e6c8b5416d0b9eb00553d94c64be93c2b1cfcc57bc40f642017716954a213a7693ee8f7ff6f877c5e7a2148761a10f1b5044f572bd02f6cc06\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.25/aspnetcore-runtime-2.1.25-linux-x64.tar.gz\",\n            \"hash\": \"fc46e2c23048ad859b01ecd3600f312e6c0eae2a9c88302535a55d0a3d4d22065c53e4bf002fa5f959d488d5aba7dfeb60b15b300a40fae6b118f75ee3ab5918\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.25/aspnetcore-runtime-2.1.25-osx-x64.tar.gz\",\n            \"hash\": \"f6cb65c27d67207482fffdc993bc4b61f909e4c6a86274d10109c54539b208746232b18760673ab4dba8fd703c60fa0d51119465b194c812251d017b84d50a4f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.25/aspnetcore-runtime-2.1.25-win-x64.exe\",\n            \"hash\": \"42f490e06df7cb26ca8c076304dbdc74c4f6d6467e31f6bf27b7141553f853e5bce820bc39e93925b9090f0395af3fd82d9e2f3109902f7e3d39a83bcc3bd2df\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.25/aspnetcore-runtime-2.1.25-win-x64.zip\",\n            \"hash\": \"5f54c20c86a2fc04c95adb03c50553de245c9b6bdb00be26588948da1abe4f59ae632a172abb91eb90a7e02e767c57f0e3fcc73ccdcc3a1cf1263a3b8f769551\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.25/aspnetcore-runtime-2.1.25-win-x86.exe\",\n            \"hash\": \"7ed0c132a48d2740d976287150dfb14e2c1f38be2082503deaa5920a983c7106baf7a414a5db37ce361a38af2cd86a6d94df5f806bd1c73662482b75dd13665e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.25/aspnetcore-runtime-2.1.25-win-x86.zip\",\n            \"hash\": \"565a63a58c3e4592bcd819fd97a34d2696f3ea89ce3bc309bdebb48838c14aad349156ccf33e849e918d601df48374ddc675a63b449c953cb2979dde11fbc9d1\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.25/dotnet-hosting-2.1.25-win.exe\",\n            \"hash\": \"b73f51c9749608c4082e9469ad2995288e7a3b3bccc8a68f6ebba733845797edcb0f2ece0a40b6609c9f6a0270711748b299ec45263d167620ff8274de5b08ed\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-01-12\",\n      \"release-version\": \"2.1.24\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.24/2.1.24.md\",\n      \"runtime\": {\n        \"version\": \"2.1.24\",\n        \"version-display\": \"2.1.24\",\n        \"vs-version\": \"15.9.31, 16.0.22, 16.4.17, 16.7.10\",\n        \"vs-mac-version\": \"8.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-linux-arm.tar.gz\",\n            \"hash\": \"f8d052fcb2a7a7d3610380a12fc51c9dd3e3d35d91c7f6649aa1d7698816efcde45c8a6c7ee7e9738caf56d8de2c96f55e7c89d6f9bc83ca7ca9a3b1de86406b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-linux-arm64.tar.gz\",\n            \"hash\": \"938a6595f7bc7d9b686bc2b631c6e0f8b8a10389a52692efb3face6e23fc4b84ccaece8357cf443fb1aed7935497aac288ad7ebfd5a59ab5d790c9595b6a7938\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-linux-musl-x64.tar.gz\",\n            \"hash\": \"2f8e6c70fc9e2d21408336a3200f1ede0f97a143605870059aa9c8338d0991aec46b8961372ebb9514c676cb2279ada4380688512988c55fd13e22ce25052494\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-linux-x64.tar.gz\",\n            \"hash\": \"afeeb1ee20b312c229dfecff76d9b6233299193e738280907020a953caa9c1c71dddb477044cb57f92d1445c83168a8eb8d0e6a686c689b2373ba798447268a9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-osx-x64.pkg\",\n            \"hash\": \"2ee0844717903e4ab905a68637530f714c74c32e08b89c1fcf4e27ebd4ea46baf170827c7d44a95a8a9221fb822d5ae1ea5573e4a6ac80e17ee386d899f80971\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-osx-x64.tar.gz\",\n            \"hash\": \"afeebce4c49832e257f663b56ba0b7a3a5392357cfaa1ec368eb12cdaf3a9a10f3ce702e9d671821f82efa568be85590fd9c7ba3adc0b29bcde0ef148bcda0a9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-rhel.6-x64.tar.gz\",\n            \"hash\": \"11d92df9abec93c4ec049df34c3a4895dac531c280274d95a3bd0e0fd4840e48aafcc1ed50b55f8e0b235126513186c86bc6c780569a584f3870a20ce9c005b1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-win-arm.zip\",\n            \"hash\": \"3b2de36593dc5c3bb5d7149bfbfdcea6d9788f9d2e6347959d1d6299287b7364ae60f8fb1946cb35e92b8090a075780374a370f33896c45fc337eedae5334453\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-win-x64.exe\",\n            \"hash\": \"7dfbcc5e3edf4bf81ad370f6c60680d14ac614920f7e4e54484a143848c3f0b647e3ca2f3ddcfdc33c0ef877f2312708f2b9a94491030b9e777e4354b063569c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-win-x64.zip\",\n            \"hash\": \"2e61d05bef7ea854760dc64ccdadd88d04659f3e586ad2d704e4e3fc6e1b76ccd65f482baee5b136d7d6aed6b6220a9dd781c4e656435fb7592cec4fd4263ca8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-win-x86.exe\",\n            \"hash\": \"eefe637d8119171e81756c99e05bdb64a0a68ce28f2406167ea7b51d1a0d1614458e581f865556a0ebf639be7fe66fd5e022215e971a641b92af814ac14a19c4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.24/dotnet-runtime-2.1.24-win-x86.zip\",\n            \"hash\": \"bbbfcbbdff2138ec6e43928c446fbb615436e563dcdc7228a0bc90d1e5ad256b6f8b99b88e5ac6615d8db9d3f3cdc18cdf9e3c6e902b3cd5a881c40d1ad768dc\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.812\",\n        \"version-display\": \"2.1.812\",\n        \"runtime-version\": \"2.1.24\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-linux-arm.tar.gz\",\n            \"hash\": \"1ad81bb664427a539ac56de9bf07e2d1628aabe9f8d6d75b0f652fb1e3f8d21772da53abf63a6523be0a05b06444c050a52246526f3ad64b2252fc3081369959\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-linux-arm64.tar.gz\",\n            \"hash\": \"e11d5d407008087d90e21ad593fcfc7b2edf7e92221bffeb44597725b88724fd301ff351a52dfeede49b229cd871b719f60d0d0f72c27f1ed895fc4a0fae051b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-linux-musl-x64.tar.gz\",\n            \"hash\": \"21e10dcdccce4de798f5cba3ce0802ec1f46f51defee446be095a96ec2f01a96f0812518b63568435837bdd372949afa8f93cebcd316931742f42c4c5d8504dd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-linux-x64.tar.gz\",\n            \"hash\": \"09fb6fe64434aa83084c1cd17d632648d4be3146a9a6c0e8e50f574748adcac8c1dadb0c49b3e909252223166fedef97173552331052fce4051b216c9f8497d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-osx-x64.pkg\",\n            \"hash\": \"3c32e52aba4d970d7ed12ad2ae0635d742112a2d4f3389cf38de71d0f2daeea0a510c91e37894274a679f5647863f86c32f1821accd660ebf97aba80c692dccb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-osx-x64.tar.gz\",\n            \"hash\": \"6000111cdba467df8e603d94c7cd66edf09fc8a0dcd1e95a2449ccd62048ca779b49d4702a88e18ce8fe14e0b29e926b06fcedcabe6ddbe65ec8feabbbf2486b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-rhel.6-x64.tar.gz\",\n            \"hash\": \"f58b3288a671d03bd4d43a79b55a51ae1f944e7b7730a44a058d575840b3fd014e55bcd26116ee2fdcffbff4bbdfb06d67117b2472838c88eceab0860a3a9187\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-win-x64.exe\",\n            \"hash\": \"15be294a615a4c21df06fd52707c8c523a0626dbe3017d1437636aa1e4d1f167e36f45dfe74649c67e95cae3aa44172a3768a1d2c7094a89b23825aff825d5e0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-win-x64.zip\",\n            \"hash\": \"27c29ef765c39dd8c4f1c0af1c8d0ecc9da7442211298ec9c8adba99b028b567204c9d22d471ead257708c3f9ba8708f234420f2ad7033b9314e91d690bbc28e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-win-x86.exe\",\n            \"hash\": \"b193d3b6576f8d3a5c3af31ba4ae2f977003748f2e2736f45639c808f1d7cb5c2fb1b3d3746be49fb08a612989d342fcc2ad596dfe40c191b0d5e1164cc589d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-win-x86.zip\",\n            \"hash\": \"3643970fe839f8959b7c5f5664de3a8a5fb4485bf5eb127ee821ceb0cf24b83af7fe1d3956ff3e5fe6f64ca61c7c487460844cff0bfdd42f6d0e45170fc9888c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.812\",\n          \"version-display\": \"2.1.812\",\n          \"runtime-version\": \"2.1.24\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-linux-arm.tar.gz\",\n              \"hash\": \"1ad81bb664427a539ac56de9bf07e2d1628aabe9f8d6d75b0f652fb1e3f8d21772da53abf63a6523be0a05b06444c050a52246526f3ad64b2252fc3081369959\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-linux-arm64.tar.gz\",\n              \"hash\": \"e11d5d407008087d90e21ad593fcfc7b2edf7e92221bffeb44597725b88724fd301ff351a52dfeede49b229cd871b719f60d0d0f72c27f1ed895fc4a0fae051b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-linux-musl-x64.tar.gz\",\n              \"hash\": \"21e10dcdccce4de798f5cba3ce0802ec1f46f51defee446be095a96ec2f01a96f0812518b63568435837bdd372949afa8f93cebcd316931742f42c4c5d8504dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-linux-x64.tar.gz\",\n              \"hash\": \"09fb6fe64434aa83084c1cd17d632648d4be3146a9a6c0e8e50f574748adcac8c1dadb0c49b3e909252223166fedef97173552331052fce4051b216c9f8497d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-osx-x64.pkg\",\n              \"hash\": \"3c32e52aba4d970d7ed12ad2ae0635d742112a2d4f3389cf38de71d0f2daeea0a510c91e37894274a679f5647863f86c32f1821accd660ebf97aba80c692dccb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-osx-x64.tar.gz\",\n              \"hash\": \"6000111cdba467df8e603d94c7cd66edf09fc8a0dcd1e95a2449ccd62048ca779b49d4702a88e18ce8fe14e0b29e926b06fcedcabe6ddbe65ec8feabbbf2486b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-rhel.6-x64.tar.gz\",\n              \"hash\": \"f58b3288a671d03bd4d43a79b55a51ae1f944e7b7730a44a058d575840b3fd014e55bcd26116ee2fdcffbff4bbdfb06d67117b2472838c88eceab0860a3a9187\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-win-x64.exe\",\n              \"hash\": \"15be294a615a4c21df06fd52707c8c523a0626dbe3017d1437636aa1e4d1f167e36f45dfe74649c67e95cae3aa44172a3768a1d2c7094a89b23825aff825d5e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-win-x64.zip\",\n              \"hash\": \"27c29ef765c39dd8c4f1c0af1c8d0ecc9da7442211298ec9c8adba99b028b567204c9d22d471ead257708c3f9ba8708f234420f2ad7033b9314e91d690bbc28e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-win-x86.exe\",\n              \"hash\": \"b193d3b6576f8d3a5c3af31ba4ae2f977003748f2e2736f45639c808f1d7cb5c2fb1b3d3746be49fb08a612989d342fcc2ad596dfe40c191b0d5e1164cc589d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.812/dotnet-sdk-2.1.812-win-x86.zip\",\n              \"hash\": \"3643970fe839f8959b7c5f5664de3a8a5fb4485bf5eb127ee821ceb0cf24b83af7fe1d3956ff3e5fe6f64ca61c7c487460844cff0bfdd42f6d0e45170fc9888c\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.617\",\n          \"version-display\": \"2.1.617\",\n          \"runtime-version\": \"2.1.24\",\n          \"vs-version\": \"16.0.22\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-linux-arm.tar.gz\",\n              \"hash\": \"79ac01de4e7cbf0470313c56d95ef816c0ac6a9c6983671f99e8f049f3a62866194e8859fa4f5437d48de222aaaafc9391da013983cd61b6ba83d573a1a80c8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-linux-arm64.tar.gz\",\n              \"hash\": \"69c50b2066a14c4213d223373038db7f4bbd2d46276195a2f1f385e75927ece750da27b91eb428a5cd940f75acec980574586832c7c2138ad54d56de78998104\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-linux-musl-x64.tar.gz\",\n              \"hash\": \"a05d9c93cf471d8f5eb6362c8be4a00214958cc5f56eee251827946d4c3a58999201fb3aa7118baa7f5fe4ce84b69903a6cbae1dbf51fe70dfe17d88a5f93747\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-linux-x64.tar.gz\",\n              \"hash\": \"25346b64223479268f1fc1db66bf5eaf979a66fd37677f5d9f42cbc57cfe8888be6929d27399800e45223dcc3cc48a3fd377790b90eaeadec05f1f5d2a06a7fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-osx-x64.pkg\",\n              \"hash\": \"e2d0bd1edf3efa361bcdc2ca8a5f0fed1e8a08a2751b01f00fa5cfb1d61b2c3fa05964494f28af150a7386471dee5d0bfa36f8f16e36a8695e9bb50963d7bbdc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-osx-x64.tar.gz\",\n              \"hash\": \"daea928f02f18c83becbe4b9794b06c004cb035c16ee978fde444f5bc39641e415bb655fb0c2886a4aa59971a25cbee0720091aff7f6df6713c4f5c14bb9d79d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-rhel.6-x64.tar.gz\",\n              \"hash\": \"5a40366d020c14461ba5fb9471b4c1ba71bd9fa406be19e0fd584b12ac717a97c9fe0c7054459cf6b9eea6ea00d320dc05b4d6dc6b0c05d8a9b4165c57e1004d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-win-x64.exe\",\n              \"hash\": \"11565aa25db68d41f8a30f4ba38cd83c663704688688bdc803e1e83cb1519fc8cc305b1dfed3f6409fb00aae91ad1b851feb4884f2457aa159440ef74dbe7759\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-win-x64.zip\",\n              \"hash\": \"65c31640dbdc9f4d2f0e4069e5f5c42d63602ebf03bf8fd431bb7a11a94ab85442f6caca7b23b17a63a02e06f89df9afce79e4197d1ddf7197acfb6a0e59b9cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-win-x86.exe\",\n              \"hash\": \"ad8967079eb136a18585a88ce47e9009fe01c604dff9eeb5a032a357e050013e85d872cd77496773e4d09e8922aa3212fbfea0bcb67d29664be83cfab23c3f69\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.617/dotnet-sdk-2.1.617-win-x86.zip\",\n              \"hash\": \"daa9fc4ccad0f97d4d8f62b7160bc8189f42aec5442402cae40b5329fa00714c4d8489b13e44894635a7af62c75481351e04886c144eeae9932c144b66be48ef\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.520\",\n          \"version-display\": \"2.1.520\",\n          \"runtime-version\": \"2.1.24\",\n          \"vs-version\": \"15.9.31\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-linux-arm.tar.gz\",\n              \"hash\": \"cef46eb1110255498fbef24758dbfe71551bb843f833b02475c20ef4c41b4a09242d07004f8877a97858d4aad6dd1e1f21881fa0a31e121cc93ec1e61dd04101\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-linux-arm64.tar.gz\",\n              \"hash\": \"296f66efdf94578741988557ef330e5a9927d9333f13dbdc4f7a4725741c1f3c162b8c6b3227713fd7005a7ed1ec53b448ddfadf7578e49e253c25613e677f2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-linux-musl-x64.tar.gz\",\n              \"hash\": \"d889789a2c58b6d8e324fa0769c46a12e70f360205bf65c504fe447dd6f69e588e7c781df7dc71628ed3ca9f4cd91c3453ec6f0b1a17e5ed1330658f0303d300\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-linux-x64.tar.gz\",\n              \"hash\": \"17b4336ebed80f28f4394f9e26e7b3e7d04bab404d01f2bbf253e0622a14c32231895b1888a772371cf67351386c308e5cba6ec4e70ec274c61148bde9f9fb5b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-osx-x64.pkg\",\n              \"hash\": \"5271950d2e2acbee49861acc80282b51f1fd1d29b12e2c1ec78e4ff609ff00b7ae5393b13ef6b587ba622a8885d1d099e9174f1f2728c93aea51dfd6a0b4c2fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-osx-x64.tar.gz\",\n              \"hash\": \"1a6c8c1a106db8df63e449daeb73ac09672a27579520e9f4421c089bea43e11c9a351b48f1ff32d4d0dff073c6db12b3cf443e8cd15498ebfae3c2f2a24d51c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-rhel.6-x64.tar.gz\",\n              \"hash\": \"6e270dbde28fcc6f6579ee222e5c711e89e70e8099d12eeb9ba34d351339796bc231c24535e1fbbe5e6ec7d0335b40863b746bd41d93f7f015c7882160d9377d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-win-x64.exe\",\n              \"hash\": \"2ec5a0b6b7d9347f4d3a30f8983b084097198d0283e87ab6274064a6d4171a192edcbf296bb795f5c4d3f3f445a8aed9194b31d5f163c8528504f401a588ba25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-win-x64.zip\",\n              \"hash\": \"b3f9952a26fc45f7b1973e3702b8fced5a645db07ec26bfccc74c20072bb4d75237870578176916c1a3796cb2d03966e02736a1416546795c5d9ff6f2d5a089a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-win-x86.exe\",\n              \"hash\": \"f2780533adbd4ea64195342977769e2867758fd2a6e379df2164177a4c8a6cc9f49d7a61995ad1541b339bd5306e72065ab242dcf63757eafa7aab01356f1e09\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.520/dotnet-sdk-2.1.520-win-x86.zip\",\n              \"hash\": \"43ac1f49104fdec84cb2fdc4735c11797fbe4cb38e1859014a642b89dd7dd73cc9b09205a08a23fa0ec929d9a5202cea5c889d98601f502ce3039f6533ce7070\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.24\",\n        \"version-display\": \"2.1.24\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.20325.24\"\n        ],\n        \"vs-version\": \"15.9.31, 16.0.22, 16.4.17, 16.7.10\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.24/aspnetcore-runtime-2.1.24-linux-arm.tar.gz\",\n            \"hash\": \"c12921d6fefc778d0f824491e6d63d7dc330897fd6275b0b993771f77d7eaed0ec9c50dbf01a4803a54ae6c952018ef6f7a01928becd977d9add9ed23a3ea8fd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.24/aspnetcore-runtime-2.1.24-linux-musl-x64.tar.gz\",\n            \"hash\": \"ac5ec463d4ec4f588bbd1ae4eeb43bc1d55b609cec1c5113f7ac414c1cc206d0343768c54ef8793b5423e27023b6419053d706a2aaeb9d4bfd0ed7f77e2249d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.24/aspnetcore-runtime-2.1.24-linux-x64.tar.gz\",\n            \"hash\": \"e4b3a1e848d0cdec720946ff46fa1f31016f67f895bceab8ea19ce4c313284b636a6abd0378fb65cb02de3d9355a2663a382335e2e804694bd3ae3123032ddd7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.24/aspnetcore-runtime-2.1.24-osx-x64.tar.gz\",\n            \"hash\": \"f8f3e657fa6580fe379666199969c0945845cb0703903e83ad6fe886559b733f8410f9a16da9c6f5303e05f3be0e7de110af69ae988cc587baddc9a29673e0dd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.24/aspnetcore-runtime-2.1.24-win-x64.exe\",\n            \"hash\": \"31fa3cf1b9e031cff10f97238a0b475c80b448a2c4801c69db62e928790fafb5155ccfe2f17ed3e7f8a3473f169d019adcf83f6ac6a72f2b372a97c113e54edd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.24/aspnetcore-runtime-2.1.24-win-x64.zip\",\n            \"hash\": \"845cc32f18e650441b373c0fbe45603968944bc1931449abc2a0625a2413360b75f80c300e8cb011dfd75d820e261671cda8d255e7ca15223688ed3894d2c4ee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.24/aspnetcore-runtime-2.1.24-win-x86.exe\",\n            \"hash\": \"57ddfcd9a2e6d0d0a24c37b6bf4948759b2c52b48555845a1070e3d93cc86626f065b0e1c0bf13149e73e6a3b6972f33c96c409ec36e8a8814659b18d65e5ace\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.24/aspnetcore-runtime-2.1.24-win-x86.zip\",\n            \"hash\": \"93fc150b13621f378bb85484d5d31f483ee3b123dee764f3404b47f42b203d6c412003f0359d320b37c5f78175d85acffb97eec8e4003172c6e76422b314dd54\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.24/dotnet-hosting-2.1.24-win.exe\",\n            \"hash\": \"278b86d1e35780bbf52a09c783d28be9eaeea4a078a2767241e17c538e45373080b3a20e4b61d48febbb46705f75c568fde066f1f0cc60e1f3ef467174018f15\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-10-13\",\n      \"release-version\": \"2.1.23\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.23/2.1.23.md\",\n      \"runtime\": {\n        \"version\": \"2.1.23\",\n        \"version-display\": \"2.1.23\",\n        \"vs-version\": \"16.4.14, 16.0.19, 15.9.28, 16.7.6\",\n        \"vs-mac-version\": \"8.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-linux-arm.tar.gz\",\n            \"hash\": \"0ac5a730b90f8e0b7c792a03d4977abd9a5464258dfc0b8ac71237a540993bf89843f6e66a311664c23e366ff505eaffd5341e34455a72033d6a41d2e2944f0c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-linux-arm64.tar.gz\",\n            \"hash\": \"3766799ea41afd84e4a5edff371ec1a1eff7214215b205ac58a630f11de3544f894bd1bb354b4b50adedef89aca66477c0e6fbbca9127fb82107630d7efeb826\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-linux-musl-x64.tar.gz\",\n            \"hash\": \"262cffc456722edc154927fa94785bb4aef95cd2043ed6a6018ba17ba6f36e88a18fcddafa181c214f862db1747b5a90e271a23cc1bd5dd2c929e576896f93a0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-linux-x64.tar.gz\",\n            \"hash\": \"9663a204abb74016113ae0db6c184598a6e5efc6126e35e275d81594432f75f186af781b3b352c8fe8527c690711820bfdd6271424b56e272f73ebe2d666bab5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-osx-x64.pkg\",\n            \"hash\": \"63fa7e99540c464e1562eba2b1c7fb3d20bc91fb626a2456462a67a8aff79dcb919405d2905862265c518372fcc319c50c29195efd3af0239d83938513180f9f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-osx-x64.tar.gz\",\n            \"hash\": \"a49125acd5cd599c9fd7881b19ef137af45058efbcaa571fb50db78dd9cddb65d14e4eddc43377906dfe5b978a812295d1ddd65f0ce76e103b03ae4885087fd3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-rhel.6-x64.tar.gz\",\n            \"hash\": \"196c68f5de824461599f3ea4420d38c0a0165dbd0c30e72200f29318f224d3b7178e9ada8aa1ab4db7e71889483b4552e4805050bd1e40e8fea5af39c13475ea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-win-arm.zip\",\n            \"hash\": \"7406a354ec181e52a868630d0d464a759ae5fd48455912bd29d9f70083c54aa270ddb9bfab7651cde32efa5909dde96f8ba036884cfd43efbbae80cafffa8bac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-win-x64.exe\",\n            \"hash\": \"7965a0800ff61898fbebe0840d9aa0e5e01d4959bc197a0af94df828c7eeb3394e7a586d13946363d5818c78e5e497ab76a897c6021f774f6066e05c1ff3c3c1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-win-x64.zip\",\n            \"hash\": \"2705a18a0c1ecf9ed2811f437b55ac1f87c4b2ce80f866145fb2191baf885950498647d52d132be8f066b15b29e45204cd6aab3918acdd53706d22d9bfac7205\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-win-x86.exe\",\n            \"hash\": \"61173ee7cd9a676fe3176f422b8896b7da5c612b646d2af9b3eab610049c5f93ce9a18889d4268638dea1be7a5ccf7524eb81eb053a209ef41f58a300db68354\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.23/dotnet-runtime-2.1.23-win-x86.zip\",\n            \"hash\": \"8486ad9d8894c85c6fc2f8399aad1c5198712db86fc66b41b8dcf21beb5e8d3c100d0e72b5b4aa1c4413e61e4eefa6d02eb2247a8f2beed02a3daa403ce68ae4\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.811\",\n        \"version-display\": \"2.1.811\",\n        \"runtime-version\": \"2.1.23\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-linux-arm.tar.gz\",\n            \"hash\": \"b53a1a603528a07a94fc494ef92b900633b91b95f74661738e705748207d401c5910ca00f742ca844d3ad31f430837da78604ca53f96eea104ae8233aeb9c207\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-linux-arm64.tar.gz\",\n            \"hash\": \"4f1f1a5878d490eda36d74e5de713ae90a2f5cd139383fae527f1649d2a6fe83f663692b39c2290bdf12d737e18356840e772b751f9e59001f2c7d2f7e4e0e03\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-linux-musl-x64.tar.gz\",\n            \"hash\": \"b808643e955c2e3bfcd713623ddaf69999af43966bafedd1af4124e7faa1cebbfefe891d2e540643754c451018ba52d2afca8c27b6d598ceb01a07040864e807\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-linux-x64.tar.gz\",\n            \"hash\": \"ddc6a583c90405a1cf57c33b2ee285ce34d59f82c4f7bc01900f4ce87c45e295de96a0293ad51937ac1935611b87bc73cdafa8acd93b6fda5a2c624b00070326\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-osx-x64.pkg\",\n            \"hash\": \"1a3ee8286edb2d862d5c7f37f00a18b3b4217b7a716a5ca95ec66b9d8bf0af083e912807e8eb0006e4bd8533c22a6ac09b4f3a6965d35c2bf6c53bb7e3282e6d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-osx-x64.tar.gz\",\n            \"hash\": \"335d08c1eeeb531fb6b608af0159e3fc41b8f02fd4ab3e50164b9cdfae018b2df2370c166c0fe9f9b98d3d01bafa52f987b261e10c183e6fac306495e362edb1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-rhel.6-x64.tar.gz\",\n            \"hash\": \"dea0d6ae087cf43ae65a36c310e2d496a7f3d429692a50b37dc1b16f78e537133b20557eec77dfd6ae7a7bbeaf32511f594d1dcfafd7911b4c1c0cbb84ed0338\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-win-x64.exe\",\n            \"hash\": \"656cde7e1def7787aac33eeac81564fbe0f0af1e3bb918c18c7fec939d898a7b2ad9efa74a196d3bc0e87cf3a2ef1012fa48d2c4a8ebdb8a12110eee08c34637\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-win-x64.zip\",\n            \"hash\": \"422db6523cdbb116741c60e967ad463e4870aecbc342e7f856bb4f672780b8bb82fce221dc534ba52f974b412b04605b28c31a3ee8269b06258526739af11afb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-win-x86.exe\",\n            \"hash\": \"1587afd3945097c4589a1e0d6f35ae3f617e6eda62508589d248b5f781f040e189b885e530084460ed0732e002ec19ebb71f1d35ce2f9d290a5a1e7c0fe39437\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-win-x86.zip\",\n            \"hash\": \"943ad4f792cf9c8b311b8cb7f14623793761d147ae8ab00503ab7f25f536d89cd86585efee86fbe743dc0bd93cc88eb5a6ec941be2d36c7ba5d87cd7da66ef59\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.811\",\n          \"version-display\": \"2.1.811\",\n          \"runtime-version\": \"2.1.23\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-linux-arm.tar.gz\",\n              \"hash\": \"b53a1a603528a07a94fc494ef92b900633b91b95f74661738e705748207d401c5910ca00f742ca844d3ad31f430837da78604ca53f96eea104ae8233aeb9c207\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-linux-arm64.tar.gz\",\n              \"hash\": \"4f1f1a5878d490eda36d74e5de713ae90a2f5cd139383fae527f1649d2a6fe83f663692b39c2290bdf12d737e18356840e772b751f9e59001f2c7d2f7e4e0e03\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-linux-musl-x64.tar.gz\",\n              \"hash\": \"b808643e955c2e3bfcd713623ddaf69999af43966bafedd1af4124e7faa1cebbfefe891d2e540643754c451018ba52d2afca8c27b6d598ceb01a07040864e807\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-linux-x64.tar.gz\",\n              \"hash\": \"ddc6a583c90405a1cf57c33b2ee285ce34d59f82c4f7bc01900f4ce87c45e295de96a0293ad51937ac1935611b87bc73cdafa8acd93b6fda5a2c624b00070326\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-osx-x64.pkg\",\n              \"hash\": \"1a3ee8286edb2d862d5c7f37f00a18b3b4217b7a716a5ca95ec66b9d8bf0af083e912807e8eb0006e4bd8533c22a6ac09b4f3a6965d35c2bf6c53bb7e3282e6d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-osx-x64.tar.gz\",\n              \"hash\": \"335d08c1eeeb531fb6b608af0159e3fc41b8f02fd4ab3e50164b9cdfae018b2df2370c166c0fe9f9b98d3d01bafa52f987b261e10c183e6fac306495e362edb1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-rhel.6-x64.tar.gz\",\n              \"hash\": \"dea0d6ae087cf43ae65a36c310e2d496a7f3d429692a50b37dc1b16f78e537133b20557eec77dfd6ae7a7bbeaf32511f594d1dcfafd7911b4c1c0cbb84ed0338\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-win-x64.exe\",\n              \"hash\": \"656cde7e1def7787aac33eeac81564fbe0f0af1e3bb918c18c7fec939d898a7b2ad9efa74a196d3bc0e87cf3a2ef1012fa48d2c4a8ebdb8a12110eee08c34637\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-win-x64.zip\",\n              \"hash\": \"422db6523cdbb116741c60e967ad463e4870aecbc342e7f856bb4f672780b8bb82fce221dc534ba52f974b412b04605b28c31a3ee8269b06258526739af11afb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-win-x86.exe\",\n              \"hash\": \"1587afd3945097c4589a1e0d6f35ae3f617e6eda62508589d248b5f781f040e189b885e530084460ed0732e002ec19ebb71f1d35ce2f9d290a5a1e7c0fe39437\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.811/dotnet-sdk-2.1.811-win-x86.zip\",\n              \"hash\": \"943ad4f792cf9c8b311b8cb7f14623793761d147ae8ab00503ab7f25f536d89cd86585efee86fbe743dc0bd93cc88eb5a6ec941be2d36c7ba5d87cd7da66ef59\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.616\",\n          \"version-display\": \"2.1.616\",\n          \"runtime-version\": \"2.1.23\",\n          \"vs-version\": \"16.0.19\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-linux-arm.tar.gz\",\n              \"hash\": \"4c4fa4db13f44ba9fee9621ae2a46872bb86339c5b7fd8b0a211041b54012e3ec7f36cd117e20dc1be7f9e9bd5b2d26f801a8c0a59b257526f70ba0cd9e4bd77\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-linux-arm64.tar.gz\",\n              \"hash\": \"7c5c08d4513c3107579e08f39599ea1dea55331668e9f867c468de674646afc69d55a6604b2c2766a0bc6f99c493f01bf114262e1ffd41bad32b0af0ca0e65a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-linux-musl-x64.tar.gz\",\n              \"hash\": \"417481f4d7da67a3d50cd418d5d29571f12cd32a459cf4397d2087d98b04b97f4f746938360cd21763aba21d40d8769942a53f31c60ee89181cd482f90fcc86b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-linux-x64.tar.gz\",\n              \"hash\": \"b38cca27dc2e6756f9f1bb07aeaa67cead9b815da4f50dd6d8d3d1efe3fee2e01cd109260732a2894620616e3165695369958b5c8c63be7b8c1b436e740956bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-osx-x64.pkg\",\n              \"hash\": \"6e8e4f679f628aa162bdfc31acfd5df6df6f2238a5a4aa6e869d925a13cb5a1118a6216f4a69869274751f8aa6ca14a5e78ef87722227d48fd2404e17ca63420\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-osx-x64.tar.gz\",\n              \"hash\": \"dfbc9bb494d45ababf8849b3cce0f2cb4deb2686baf384b408519e27db17fb4bf269b5fa1288cc0f02c4d7b2a499a8a5908a58131811fb44a95adc533361fcdd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-rhel.6-x64.tar.gz\",\n              \"hash\": \"d0028e5b39c621d1e7b81239bd6d12eb7d0ee9edb61338e000542edf6cf9298476cf92d6ed9474d29a9d70f87c7c2a7314c76bc5ccae2d847312131d9038158e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-win-x64.exe\",\n              \"hash\": \"66a5b2c0f6f337f973411a6f3be889c0f03fa94b16d198bf7acf3f5848ec26a9c38510ed72e170ba9a53977dde4b63e1bd564ab60750879b9388e5c703b46328\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-win-x64.zip\",\n              \"hash\": \"a0b6d15b8bf2d18a1be82d3660c1da4d072b8627822db153771201b10b4c4810d551f14e4037988926fab2e6f12293ec8c65d3ccf79beb60c3cc1b8f57ebdd0b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-win-x86.exe\",\n              \"hash\": \"cdba4501b68c31f0de370d2614401e0cd6d43c3f8396ce9a5f1146035ac64a8f77564c375b7ada8ec921db21ef803b511ff036b3e7ae2d36189012c4c4ada614\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.616/dotnet-sdk-2.1.616-win-x86.zip\",\n              \"hash\": \"2f9004dc97faa13129b74de275d6f3c1140a54ba9eef4659dba790c659e1b191b42023c3c0e2f689cc53321ce9064ea6e524e83a0a8a6d78abf58f9c12916591\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.519\",\n          \"version-display\": \"2.1.519\",\n          \"runtime-version\": \"2.1.23\",\n          \"vs-version\": \"15.9.28\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-linux-arm.tar.gz\",\n              \"hash\": \"7aa6b96f21c83e0c85f36ba8f6f3399a5b7d9d23db7ccdb6cad2e49f33fb8b22b67a378d4ad3d0eeb1d92cf5092659c4aa4b5ae6a4030d27258cbfecec95cfc1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-linux-arm64.tar.gz\",\n              \"hash\": \"7688715078ed6fdb7bf7f9b9f442e2decd598d080a563c6697d23f17610a99c6cc806ab1cd59fe23efd4130d1f44bd080349e6f5f4197d254a72c6dfd7a51efc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-linux-musl-x64.tar.gz\",\n              \"hash\": \"bf482e198dabebd3433401b0ce88934825bdf5b76e6138f220118a23d24c1f74289d2f7643031310de6b17ee8af2ead345928e8be1f06b061fbeb1dbf7b8cbf7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-linux-x64.tar.gz\",\n              \"hash\": \"fc148b2a887db5b9cad52e170dd011a9dc7bb569e0ac7b55ccf151843c94d6f4aa32d496966ca81be5bd2c51ae5721f002a90b9c69b6ca2c97f30be0a90d5997\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-osx-x64.pkg\",\n              \"hash\": \"c22ec32aa4c9838206b7440d4fbd5a9ebc86262b4560d9d74f23a65903ff47ad1bc0acb6583fe601ec8773c8a7ed606ee5024ee9f227e7a2da34c464e5af750f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-osx-x64.tar.gz\",\n              \"hash\": \"daf9b5c3debb5c905f089a2d7837d38c5285965862a8d943548b738f202621e56f6cd3871354aa2dd53193eb8d2c2beedc26c75cd120677c5975ef60ad4f8607\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-rhel.6-x64.tar.gz\",\n              \"hash\": \"59ec9c932ae7eea3a977035b1fbd7e6881a265a0e53f68cef05e009bc711620062943d11f237c217e04525265675d2b09c3d88003a9f059b25d2bd7f5cc02ddd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-win-x64.exe\",\n              \"hash\": \"086ac83af2dd1dab4346a5423664c326496998ea02534ab1bdfb275ef6333c3e35a0b44a4429d202b2c2d058d000747a2aabdfc7cc05157f2b567b92a4ea24ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-win-x64.zip\",\n              \"hash\": \"29880cb11d0fc84eea5bf83b8775878bd450794cb697705cc63ddbed117f68ee439cfd58ae24dbee465d7efdc907e8dda2dd8c26c159e566ecd125fb0cc7005a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-win-x86.exe\",\n              \"hash\": \"bbf8e985efe22964bbdc0db3807f2a9b20bde4008f92fe053471a020ab38d2af868eaac3f158991ba5f237b7d1d58d24270c3803ef760751522fbb7cbded3453\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.519/dotnet-sdk-2.1.519-win-x86.zip\",\n              \"hash\": \"ad147056e2a0fb4cf04f10c0e4f07d6483229e3eeb9f9eaaeca6536aea7cd9ec2b15aea32dc7c462b97136f089279a7ce5d6e7c9015bb0387b36dc6fd0e7bc61\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.23\",\n        \"version-display\": \"2.1.23\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.20266.23\"\n        ],\n        \"vs-version\": \"16.7.6, 16.4.14, 16.0.19, 15.9.28\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.23/aspnetcore-runtime-2.1.23-linux-arm.tar.gz\",\n            \"hash\": \"0855087a9855c4809d19fc351fbe717a6aede8c048cdb47443e8a516722b5411b0fad12caa2524d6fa803292783bc8c1dc4c09a2bd9becc61c0df33819364f27\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.23/aspnetcore-runtime-2.1.23-linux-musl-x64.tar.gz\",\n            \"hash\": \"0d7fed7f3673b9f267bbdae9eac0558275d88c0df9550595eb84f333fa0c04d072f1c3be0591133369be586ed9f0e0d8f4d1f7f4ba562d435f77bde48d789e91\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.23/aspnetcore-runtime-2.1.23-linux-x64.tar.gz\",\n            \"hash\": \"47df15608671ace7a13f7ba03d74a34fa8b396344409cb2cc4daeafdda8b22dc7309dd60b1f469aadeb89cfc0e22b7b9aebde3ffeaedad431ad4f4f51296030d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.23/aspnetcore-runtime-2.1.23-osx-x64.tar.gz\",\n            \"hash\": \"0ceafc031eaa60a6c590f7a20cd8bade657fba853507a17b8ecefff8e8e0515838a697dea9b2c87eb70a40e8648e42b42ce681b698f1b6b191c5fc59c599817b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.23/aspnetcore-runtime-2.1.23-win-x64.exe\",\n            \"hash\": \"3f900ae26728063499bbf95295b85c35bcf794b6b781698160a5566bba2e02151cd55a135a22cf8b32b9c93221b2deb17afc998361dc9ac1dc52bf0d1f016646\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.23/aspnetcore-runtime-2.1.23-win-x64.zip\",\n            \"hash\": \"fbd00d08c701dfadd98c205e5182f330842efad8500c1f75f6b7ef5ea4eac8569dd283c61ed00baf57155dcb11434242a9e44fcc650655b3cc0651ed6364ce39\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.23/aspnetcore-runtime-2.1.23-win-x86.exe\",\n            \"hash\": \"dbafc5d81e231ec22bd0cba6949328f5c73734417035c0c9867f3808e94c938891b7ef4b67278495fddaa89f976ff32b748bdab9779c137b508f9e3497f27c51\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.23/aspnetcore-runtime-2.1.23-win-x86.zip\",\n            \"hash\": \"d14a16473da2692301fd1d009a80c11a7d87eee4c47a3a112029d1c82aefc7d178ed44e35b84766c09b8971d07467542c68bcefaac900b8812b10f58113fd23e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.23/dotnet-hosting-2.1.23-win.exe\",\n            \"hash\": \"704eaa7595abf5bb4ffb5bbd45fd64f3d6e1a2f856f61b2fb746913d9f10da9133cc44be4e75d9e012bf0db6e5cb390d3af59b85593aeb1c29ae020a7c7c2117\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-09-08\",\n      \"release-version\": \"2.1.22\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-1045 \",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1045\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.22/2.1.22.md\",\n      \"runtime\": {\n        \"version\": \"2.1.22\",\n        \"version-display\": \"2.1.22\",\n        \"vs-version\": \"16.7.3, 16.4.13, 16.0.18, 15.9.27\",\n        \"vs-mac-version\": \"8.7.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-linux-arm.tar.gz\",\n            \"hash\": \"6a270a7f12087e430c9adce6b93c6e88d19372cc1964ed7c5e07dc3e60906713c5a2179939b27f1468c6dd53c4c46da55385b9f47883111fc16edc9108c3f890\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-linux-arm64.tar.gz\",\n            \"hash\": \"0a357c1b88a2f178cc0e4448ca97c903c61c66c95ac268572d848229fa853676ff22f638465b9951a73016db0113ad5f96bd0ef3f49a25eae4f56e176d4445e9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-linux-musl-x64.tar.gz\",\n            \"hash\": \"8f0281d3d67a457276ea13f3152f8f06f7a420f4ff9f2d1ba7b5b6efb9ee875f8ef3dd64511964a65ca0a41bd4e7e0bfc5c42df5424c812a023345bf4d68fc1d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-linux-x64.tar.gz\",\n            \"hash\": \"cc43892ba56511f94c08d7c50b4d90502ca1ef723302be8759e204068ab7f25a50ef31ce6f640886cf6fd2a21ab768500a6d535ef979f97075f6632a348c2518\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-osx-x64.pkg\",\n            \"hash\": \"669f7ae6dc6ed3c1aafb7e58cc7ad979d0988d97883c3c6fe3c751e241ce3f0ac5ea002dccf20901c31156ee28e0bfb02bd9620ee0d6bb9004eb40ff47f9a89d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-osx-x64.tar.gz\",\n            \"hash\": \"688fa5ab2fc98cd59d4a5c97017d74b748013e989e2b13452cb2feea6dc6a676b31026059cbaafc0e0a51a134276106d4a48a8fbc048d981e0cd7826caf46a40\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-rhel.6-x64.tar.gz\",\n            \"hash\": \"05284dd1cec1fd0b19da6c11c2fbaf78fc6ecb965afd7e8c0a1d764004fd6815452e37c09af5ed83cc84f900020956db838ebb39ad96c444f121d215893af04b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-win-arm.zip\",\n            \"hash\": \"5808f37bdea337d179815e607b48ddab983b4e0dfed0ad042966a29b106848f75b88722b25f572526c73d02db85300fa2b4ad1901af589eab92b826734c66294\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-win-x64.exe\",\n            \"hash\": \"73e3fdc459bfaf80827c4560d61c1e441a54b57b7ea7ff96d3ca432d91d3418a19a28b6feb89ddaf8db1fd4c396ebd677c305d93c0e306ee764e2c9a828c78f3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-win-x64.zip\",\n            \"hash\": \"001889b784e0be64e7e2651d7659bd9243ddfad58cbd668eb3f0be69382b7db7b0db0866cf2582b579e43757efd5dd2bf702413e95c45839e6cbd33a06b14c89\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-win-x86.exe\",\n            \"hash\": \"3f1d9bb521e9f5d8098b121706885c176fa87a1986cdedb55cd6300b0ff2d8aa2d9776815edf3dfce3bf829d60ce85231a0d2f9c495699e28b9b3f25c1eaeb1a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.22/dotnet-runtime-2.1.22-win-x86.zip\",\n            \"hash\": \"ac1f4ec02081618d44e305e85add222ad0cb1013988d5bde7bc1c3b94f74af168d3fbc3ed520c95dec550433baf1d5e2c0823686ff5c51727b345de1c4b87fc1\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.810\",\n        \"version-display\": \"2.1.810\",\n        \"runtime-version\": \"2.1.22\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-linux-arm.tar.gz\",\n            \"hash\": \"fe1ec616d88f2d9b9da4a9f48ede9ec2937e15f7d129907e8f14931e91d297d634689f61877df33efd39141f71f53747c55711d0361de04932ad604afe1bff41\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-linux-arm64.tar.gz\",\n            \"hash\": \"1153fdf383eb4527bb32fb7901354e49b6c60ec381267026e4be1e384a486ac7fbc89f949f9be711de4705eb4e58a1f2db320c2a62822d75e22cd930132ea4b7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-linux-musl-x64.tar.gz\",\n            \"hash\": \"2af9ea5235b179f48b93bad530f1767ffbb65bcaafad60fbe0d8f7bcb54c09d9de0536678d505e2780bd2868839573f5b42c55f783945741c14dbf916e9188b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-linux-x64.tar.gz\",\n            \"hash\": \"45ceacbf393778254c5e95184d1c284ea21beb38b1610803390858960e5edb1faee0f0c1355e1306ea282f864645fb38fccf85cc01fb10d8ebf48f2b6a658bd0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-osx-x64.pkg\",\n            \"hash\": \"4d2a28cab911e8716e233f3c2588afb0e29b04567b980ff69aa59adfa1ac97c0a13ce9a3808b7177508fa667b85e9ca5f1a10b4b697b8094053de0550e579d07\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-osx-x64.tar.gz\",\n            \"hash\": \"fecb6d298d7b564225e95c6b372e4cd67f5bdae8cf03b9f502f0780678d1f95c354b3aba64ee3a5ff8cf348fc3f47da2f6c38c5c5851ba95230eae056d3ddaf1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-rhel.6-x64.tar.gz\",\n            \"hash\": \"366678d1c6c0b443ec6e42fdcdf5f7100b8cf93321a9f1c80ce1c2674ba899f790857f74e7190cbbc128a85fd7e7f193784eaf679fe009bfe7c316d0a21d5733\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-win-x64.exe\",\n            \"hash\": \"4fe43f1b5d76d21021c40ef7131c8c05b9c8a5acf5e1d7cdfb7380702bc9cd338b1838d4aaddf5e556bc2d3bbfbd45a07728cb9f025ce969f28150f2e8a88763\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-win-x64.zip\",\n            \"hash\": \"f916d0a5eb95b4c7c87c0f62d5ed18c885c1d8d0391b3b6f0ff1060796d020fea0fbe6468f419e77f1d652d8ee23ab69025a5872fb990e5e06126a83f3414575\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-win-x86.exe\",\n            \"hash\": \"c4da2e8710533a51a0d9ac521f794c1fe5148c56df66c0f9cf6e7dfd1d8b05001256256942441bd41ec8cb7bb8e90a447357f48e2342c2fcb31038100f365e8c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-win-x86.zip\",\n            \"hash\": \"967d0eae4775d352d936914451147d2d6f0e66f01905b5fb8feae11c8b7c13dce3206e48a37daf7c3d42cf91a245019053fda15aea4fb5a7729d2ed52a109f56\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.810\",\n          \"version-display\": \"2.1.810\",\n          \"runtime-version\": \"2.1.22\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-linux-arm.tar.gz\",\n              \"hash\": \"fe1ec616d88f2d9b9da4a9f48ede9ec2937e15f7d129907e8f14931e91d297d634689f61877df33efd39141f71f53747c55711d0361de04932ad604afe1bff41\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-linux-arm64.tar.gz\",\n              \"hash\": \"1153fdf383eb4527bb32fb7901354e49b6c60ec381267026e4be1e384a486ac7fbc89f949f9be711de4705eb4e58a1f2db320c2a62822d75e22cd930132ea4b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-linux-musl-x64.tar.gz\",\n              \"hash\": \"2af9ea5235b179f48b93bad530f1767ffbb65bcaafad60fbe0d8f7bcb54c09d9de0536678d505e2780bd2868839573f5b42c55f783945741c14dbf916e9188b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-linux-x64.tar.gz\",\n              \"hash\": \"45ceacbf393778254c5e95184d1c284ea21beb38b1610803390858960e5edb1faee0f0c1355e1306ea282f864645fb38fccf85cc01fb10d8ebf48f2b6a658bd0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-osx-x64.pkg\",\n              \"hash\": \"4d2a28cab911e8716e233f3c2588afb0e29b04567b980ff69aa59adfa1ac97c0a13ce9a3808b7177508fa667b85e9ca5f1a10b4b697b8094053de0550e579d07\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-osx-x64.tar.gz\",\n              \"hash\": \"fecb6d298d7b564225e95c6b372e4cd67f5bdae8cf03b9f502f0780678d1f95c354b3aba64ee3a5ff8cf348fc3f47da2f6c38c5c5851ba95230eae056d3ddaf1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-rhel.6-x64.tar.gz\",\n              \"hash\": \"366678d1c6c0b443ec6e42fdcdf5f7100b8cf93321a9f1c80ce1c2674ba899f790857f74e7190cbbc128a85fd7e7f193784eaf679fe009bfe7c316d0a21d5733\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-win-x64.exe\",\n              \"hash\": \"4fe43f1b5d76d21021c40ef7131c8c05b9c8a5acf5e1d7cdfb7380702bc9cd338b1838d4aaddf5e556bc2d3bbfbd45a07728cb9f025ce969f28150f2e8a88763\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-win-x64.zip\",\n              \"hash\": \"f916d0a5eb95b4c7c87c0f62d5ed18c885c1d8d0391b3b6f0ff1060796d020fea0fbe6468f419e77f1d652d8ee23ab69025a5872fb990e5e06126a83f3414575\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-win-x86.exe\",\n              \"hash\": \"c4da2e8710533a51a0d9ac521f794c1fe5148c56df66c0f9cf6e7dfd1d8b05001256256942441bd41ec8cb7bb8e90a447357f48e2342c2fcb31038100f365e8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.810/dotnet-sdk-2.1.810-win-x86.zip\",\n              \"hash\": \"967d0eae4775d352d936914451147d2d6f0e66f01905b5fb8feae11c8b7c13dce3206e48a37daf7c3d42cf91a245019053fda15aea4fb5a7729d2ed52a109f56\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.615\",\n          \"version-display\": \"2.1.615\",\n          \"runtime-version\": \"2.1.22\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-linux-arm.tar.gz\",\n              \"hash\": \"7a7776a41b2b5d73a56b1c497a86a5ed341bf08b356db73fbf142c0ddf1b0143e9e678d980d72f7c50edb119ee85d7bfaaa8a25a8f11079c55ad2054028dfb87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-linux-arm64.tar.gz\",\n              \"hash\": \"2e443addc9bd1db67c95fb98475fe7099a2c2772e6e60d3430c81642e151e82e679bc5125c7dea40b22dd9e5b9c577d362613c38c76d516ae8c634f2a38d3ec5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-linux-musl-x64.tar.gz\",\n              \"hash\": \"2b0e9a9552eb063692d7c2261a1f9da46718d39a69a30d76dad1e837f594688f2508f7a0779d61cef47b87fc0cc0a67aa59b3ee7ef80fbd257a4d71bd68cdb7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-linux-x64.tar.gz\",\n              \"hash\": \"6f68b02860eaf98705372d82deb8f230b273b8a069f34b09becbcb0b7a46533e576db3f35b603b33c65f5426af8f21a659d4ba16c6b5e299c23d716a3f0ae49d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-osx-x64.pkg\",\n              \"hash\": \"4ac5bcbcd2634e3c9caaf1f53cd1856f07ea01903cbd54a0e3df8e28920aed13e1eaed2623351233b53529d868afdda39c86e6cc37852ecac7dfcffdbbdb8604\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-osx-x64.tar.gz\",\n              \"hash\": \"5234b10fbb1651da08ec0c442f84d5ced47ad47d512e33287018259b404af4e70b2cf6b476bb1fb5e257e49169c0d765c1b1e8ed582d41c3a8e986564236ada4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-rhel.6-x64.tar.gz\",\n              \"hash\": \"917007fff4c1816ee9bc30afe59a8360d9b58665a9441ef7754efbd154e0b9498ef8c3ce77603cc94a5997df6a340a76223aeff74b5f9c5de098f9815e0fc180\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-win-x64.exe\",\n              \"hash\": \"685603cb8494bd54c1756609d7eeaf6f36500e8de70023ce18c4d18e02fdb0f7001e2ea15b8e64cbe9f5c4b57eec238819c8ec670f81a18a3e0539e7ea1b34ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-win-x64.zip\",\n              \"hash\": \"1773844b57ac4baf15c94c053197475e87be530ae54027051e45e4dc09cbf46af884532cd22077d7f1688992c14481cf69cecdebafb453e7e986ea5976cdd81d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-win-x86.exe\",\n              \"hash\": \"02b1fa8824cf6580e629eda5ba17819e4d63bf1a0befe8316a3151f3c234d0beed8d9c09f796957f95df9ad92ee674e281317f4927193dee53fe96e50b8e6901\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.615/dotnet-sdk-2.1.615-win-x86.zip\",\n              \"hash\": \"7210ce6e314b37cd91d0c161e9510f14516e241e8f569350fe3466633d33abd1f947795909d5ba2856aad6aee7adc805e2085f57973afdcf356a7ecd530de9b8\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.518\",\n          \"version-display\": \"2.1.518\",\n          \"runtime-version\": \"2.1.22\",\n          \"vs-version\": \"15.9.27\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-linux-arm.tar.gz\",\n              \"hash\": \"0aa360102ee44ad6ec46d689b95b9aebe3ace40eb0ac4a5501cc49689d8f5cd674cc3a9272ceee14f851d9c9be9b8f1f6b6f94487a7537a26b2898e457125d1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-linux-arm64.tar.gz\",\n              \"hash\": \"633004f4d1a7f4fac461fc5c7f88fa32e78783e2e28c5474f22c7b4a1a0b217f51ef3b6813e2a4c31c1b257e15ff97ac824ae2d603722a85c029b66a61c9e2e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-linux-musl-x64.tar.gz\",\n              \"hash\": \"702d52dd13d7fc1a000e7ccd2b891d55a0a95096496633a9e67844735d5b03c73a76c9a0df68a4ee2d5960ddd68cc7e93c98ee5037a19522030a84f9b98c2591\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-linux-x64.tar.gz\",\n              \"hash\": \"d3797012d026fced1226c3ccaf32257e5a7cf52d926037318dbfe72583fbd6f1ef91d7ba8c0df2c4cb3c348b62d479eaa908d2bd821335c155016806fc0eef2a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-osx-x64.pkg\",\n              \"hash\": \"21ce8bc3a803c71a8ebec13e10379084cb09416b5c5b30ee9b945d45de826bfb3a686e54eac1a30ef463e50fbf1507cfb25bdc56a887ab590e40c1afaf8e901a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-osx-x64.tar.gz\",\n              \"hash\": \"01f4b80f9c71538dce0422bf4a29cdc7b0b255d654aad98334ef95fb9c6e3a6725e3cb10480cdb163497fd5e9fbac3b9b6837a8ce53966718146c8f75a78461c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-rhel.6-x64.tar.gz\",\n              \"hash\": \"1ab989a283d81fc2c0de8d65caf24aa1754716aecf078730d2476d3f6a2d9e78db9208de6e374fb764609a21506e1082c162289d58304586444adcd3c8dbf4eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-win-x64.exe\",\n              \"hash\": \"cea2759a4e1be10283e26344a360c0df44e6b83a0497c2be1ed366660523c623b7908dd59cb892e01b1a8617cd504e0cf04ff3539a70563f6f7d1bb7512c4deb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-win-x64.zip\",\n              \"hash\": \"29a605470fbd45b82af6a99dbf2cbac77617005797c7853f49a07276df22ec81133ddfa034519f54aa3cfc4cf7daf76a70c0e7c007d3e535c4546c0acf638a67\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-win-x86.exe\",\n              \"hash\": \"cbe8673e4409416ec5d23e39bf391ffc740f51b8bfceffe3519c6c2b8d6226d3b1a30685700d95ee6b941ebe47edfcdc77dfb846001c3388bbbc602d8e1b965c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.518/dotnet-sdk-2.1.518-win-x86.zip\",\n              \"hash\": \"57c15d8e7b170281852dc42fe6743df5a817b1876369cdbf5e0d641d5f2d2ca2d1eaa2022cbc1cbc47a78fb266e868869b386e5c1dc689bc2ef7628417d73414\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.22\",\n        \"version-display\": \"2.1.22\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.20234.22\"\n        ],\n        \"vs-version\": \"16.7.3, 16.4.13, 16.0.18, 15.9.27\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.22/aspnetcore-runtime-2.1.22-linux-arm.tar.gz\",\n            \"hash\": \"46d6ddd819a811b2f192cbb7d2d8095e3647c6de8592d600024cec04ddb93fce068baa6727b3f1b8e4f313fac33ff854285b76e9e3657ec02f68c4abb8a38b13\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.22/aspnetcore-runtime-2.1.22-linux-musl-x64.tar.gz\",\n            \"hash\": \"54012a25e1029765f1c890d9b1ad9e130e8fa21580254c90e990c913f754313e1e5980cd018689582ca829d43ae6a0b35fb5f5efc4a3b2cbe576be6cd0799b5b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.22/aspnetcore-runtime-2.1.22-linux-x64.tar.gz\",\n            \"hash\": \"34a424a79fa91f76fd2f91c9104104b65239192d9f5167bc1647b8888c103fe6fde3786f12dac275d8da6a7ce3d8de8d56531c0bdbc42d9f9265ed6bc9a8b18f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.22/aspnetcore-runtime-2.1.22-osx-x64.tar.gz\",\n            \"hash\": \"b44a13d7fd95ad3eec638a0711fb885d81cfb3cddc624a1d2042335c3b59633dc058379c42105f10e804a128e5200fe8dd82e24042d386a160c744ff551a003b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.22/aspnetcore-runtime-2.1.22-win-x64.exe\",\n            \"hash\": \"c9ef19c1d9bf944b2076f723e76323d2d046689c5de1e02b17a31a22fa7878171f3ba571da34543da69a114dffafc140ac3c7e2ad58b3f1084c485ba23b7493d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.22/aspnetcore-runtime-2.1.22-win-x64.zip\",\n            \"hash\": \"6b897b8c8addd6eb43a62658644db57d4ca50a70085dc01e0eac103119f1394a804ce417143fe0455c2dbf7fefc37b0cad61e88c2900946e4597efaf467f8cbf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.22/aspnetcore-runtime-2.1.22-win-x86.exe\",\n            \"hash\": \"16d1b1fe3b8f8adbe72817bb96ccd8aa554270a1a2ad45198a63a34fe4c839e615ab19c31f8d51ccfe3993de75507805e375b42491d604b5b837d6cc606984da\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.22/aspnetcore-runtime-2.1.22-win-x86.zip\",\n            \"hash\": \"5020e9982c6c13420fda953ef25440b102f78cfa96a2b995b81d70b0238d616dc69d5cf956b6f5ee725ee7eebf0b95f0a5d691c70ba0fad317b469d86e44f2ea\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.22/dotnet-hosting-2.1.22-win.exe\",\n            \"hash\": \"7ef01c139e60ddb2658e71bba1e4d07f340be512300d2ed87ffd63acba9415fa52eb51c2ca6fcb20f4e67f1b746a222ee35ba60a77c5c44ca3966d09b22b2b80\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-08-11\",\n      \"release-version\": \"2.1.21\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-1597\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1597\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.21/2.1.21.md\",\n      \"runtime\": {\n        \"version\": \"2.1.21\",\n        \"version-display\": \"2.1.21\",\n        \"vs-version\": \"16.7.1, 16.4.12, 16.0.17, 15.9.26\",\n        \"vs-mac-version\": \"8.7.2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-linux-arm.tar.gz\",\n            \"hash\": \"6335b58ff5450686d8843f777bd81328881748222c655621f3e074249d8861039d6e8d5caa2c2b8b7cf186acfa90f55bf1a3f8be40123278f3a9db41611a7df1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-linux-arm64.tar.gz\",\n            \"hash\": \"99dfba438dcd1fb20b4a33fda550a55a8f6a65fa0f7eb9e243932ded2ea2902107625d3c454f8c754d49454120221ff6f69688f664de200cff7508b4738b9463\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-linux-musl-x64.tar.gz\",\n            \"hash\": \"285a482e97cc212a34d10be3c27226a9d7dcfa625190816a11027e43f1ab0e2a2b319a72fa3dd63961ef0a0407bf15f26a243511aa29f30c9303bf9caa842fbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-linux-x64.tar.gz\",\n            \"hash\": \"ddc6cb79353f13fbf0667745f61d85eb9d668ce2277391b25759fa733dcd31adcc8ce1ce285957d4a7c3bb7cc05de7065cf30b4bda560a81484650ce19baef0a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-osx-x64.pkg\",\n            \"hash\": \"7abd9827032c2b61f1f72875631199c94f30558824f0bd43164acbc65d5f29536963e9c1a84907b1cb6759951a7a76c9cfd3a8322c6f446c9d6ce7e8ca58accd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-osx-x64.tar.gz\",\n            \"hash\": \"ff9ada81783fd051545cd9c94632d0918b71cf037b5492a6cd703837965702c4a23774031e31be8e0cede89aa4f6718b1dc68a896a25a98cc5a56a94d72cbe3f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-rhel.6-x64.tar.gz\",\n            \"hash\": \"8c5eb9bfced7fe159152c22439f79aa6f706f49958959f170472eb9fdc31d2c3bfc9362658ce6e579ea0500542e91c6a6f61b1841123e9c8ef791125a50adc4a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-win-arm.zip\",\n            \"hash\": \"e6f96a1e72b730144fc083269afb2d73d8a28d1e53dd5ee925666ef47f2561cb8d014919a3ed56ef0bd185e2f1e50deeef14e72c858b25c922143a641ad51abe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-win-x64.exe\",\n            \"hash\": \"3ad60a93d20e77b0569ab5ea294d8c8bac109406288c35fdb2db04c5e3a3ea161866ee5a09f3702a7cea53f9b8b132262862a271a2365446d3086eac90d1cc3a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-win-x64.zip\",\n            \"hash\": \"7def6738e2fa6ab8bf5a2b8b85a4f6fbcf27947891829146d2a7f74bf4d05db094dcae91d81ca248e41658d148bc24f321af66a33c2ed3d59c4e40ceec4a0463\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-win-x86.exe\",\n            \"hash\": \"e9fbbcd8532eb868acfe7f7733f108627dc080209d04538eb24f835b11cff55c8e1ea0793d46ac7987ce8d738ad2cd64502d8b0c5c04195fe2a4bbbd7f06f11f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.21/dotnet-runtime-2.1.21-win-x86.zip\",\n            \"hash\": \"6dcc0c3fe177411b42d3fb1338a8b5b1069f010d4167aaeb944b563b32a910e2308bd103a8a4c7001be9acc2cb3d4326c4c2432016836d3c545457ea69a289bc\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.809\",\n        \"version-display\": \"2.1.809\",\n        \"runtime-version\": \"2.1.21\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-linux-arm.tar.gz\",\n            \"hash\": \"7c3b7b049c1bc29f31d44e2406227b3766c745cb98cadd8da16d9df4d8c608d23ab5ff8888b9c43e02fd88989a8f03eb850f34a4b0fb78c5e8b0aedcb5a8d24c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-linux-arm64.tar.gz\",\n            \"hash\": \"8d3f91842c278dce388831147f4d302d7560f88327d2b72320b9ab75a58ec4de1a50cfaa8a138a8ca0e227670df84a755b328f8109eebe3db996cda8b5264d5d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-linux-musl-x64.tar.gz\",\n            \"hash\": \"cceec824cbff49d53a326f938cf40bd6287bdbb1bb0bdf492eb646f496cbda7945b4841aeef3a64f23d43a7d89cb2997fd4a5e0901bc0ee6bc2fa16e67944068\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-linux-x64.tar.gz\",\n            \"hash\": \"cb0611edd3543380c57b5181a5b093b178da49fee9dea32f76af80c4711823f0053661ca11546546571e6ebe4e60d62ab745ade88904ad35de46662251abd769\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-osx-x64.pkg\",\n            \"hash\": \"b7e4b18218a6fc2065e0f2b4c0e85b1698e465ae0f50fbf0bfdedb7cc81eb01a623102da636004ee17203cf8554cf139df7bc36349029d638ae38d59ce8ba171\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-osx-x64.tar.gz\",\n            \"hash\": \"9e6398f60b88d1d6abe3644f67d86a76c7d0cd06dc9ca88f9d54a8ce1ed3a440f68548278ed2c52627a6d8f6f013917d64eec2ec4b65d51f9ce5d95227566372\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-rhel.6-x64.tar.gz\",\n            \"hash\": \"3d9ffaeafe14dd0667a32c5f37bedbe359fee2e34706dabd2bcf8c7f909e9a28ee14ab9465e9cc46f0b7de40a1e318844a9bea2397a0e216f02583b1660d6466\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-win-x64.exe\",\n            \"hash\": \"34b3de7ee8571d66adba5e8aa3b7b9e19cd37d96278d8c9a46deb3f8425f8276a37f4840dc6f4cb6bab5d96cc1dc644ef01f4d8331105c3674b3dbf68f106a8b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-win-x64.zip\",\n            \"hash\": \"ed636fa3b017df1587acf69f4a7b3d49f419564d846187b99954328aeae2e39f42aaf12475891513ee54e004cf2c63a9e990d5e115e6667f8613a898bdf3f44b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-win-x86.exe\",\n            \"hash\": \"e3e911b151b2297b0e71d52930a82bc29d3b709710adfbf6a345d1175241c66589645b89170b7966300edfdf044b467d4d4965005ce6d3456d400618cdc58839\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-win-x86.zip\",\n            \"hash\": \"1816238d58b2e6e4a3ab82330e102b4875647677dcde1f330602bea212fe8941e5cdb24deb566558118b002fabc8cc1c20c7fda87c0af687c6b6e0d12596c4b2\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.809\",\n          \"version-display\": \"2.1.809\",\n          \"runtime-version\": \"2.1.21\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-linux-arm.tar.gz\",\n              \"hash\": \"7c3b7b049c1bc29f31d44e2406227b3766c745cb98cadd8da16d9df4d8c608d23ab5ff8888b9c43e02fd88989a8f03eb850f34a4b0fb78c5e8b0aedcb5a8d24c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-linux-arm64.tar.gz\",\n              \"hash\": \"8d3f91842c278dce388831147f4d302d7560f88327d2b72320b9ab75a58ec4de1a50cfaa8a138a8ca0e227670df84a755b328f8109eebe3db996cda8b5264d5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-linux-musl-x64.tar.gz\",\n              \"hash\": \"cceec824cbff49d53a326f938cf40bd6287bdbb1bb0bdf492eb646f496cbda7945b4841aeef3a64f23d43a7d89cb2997fd4a5e0901bc0ee6bc2fa16e67944068\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-linux-x64.tar.gz\",\n              \"hash\": \"cb0611edd3543380c57b5181a5b093b178da49fee9dea32f76af80c4711823f0053661ca11546546571e6ebe4e60d62ab745ade88904ad35de46662251abd769\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-osx-x64.pkg\",\n              \"hash\": \"b7e4b18218a6fc2065e0f2b4c0e85b1698e465ae0f50fbf0bfdedb7cc81eb01a623102da636004ee17203cf8554cf139df7bc36349029d638ae38d59ce8ba171\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-osx-x64.tar.gz\",\n              \"hash\": \"9e6398f60b88d1d6abe3644f67d86a76c7d0cd06dc9ca88f9d54a8ce1ed3a440f68548278ed2c52627a6d8f6f013917d64eec2ec4b65d51f9ce5d95227566372\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-rhel.6-x64.tar.gz\",\n              \"hash\": \"3d9ffaeafe14dd0667a32c5f37bedbe359fee2e34706dabd2bcf8c7f909e9a28ee14ab9465e9cc46f0b7de40a1e318844a9bea2397a0e216f02583b1660d6466\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-win-x64.exe\",\n              \"hash\": \"34b3de7ee8571d66adba5e8aa3b7b9e19cd37d96278d8c9a46deb3f8425f8276a37f4840dc6f4cb6bab5d96cc1dc644ef01f4d8331105c3674b3dbf68f106a8b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-win-x64.zip\",\n              \"hash\": \"ed636fa3b017df1587acf69f4a7b3d49f419564d846187b99954328aeae2e39f42aaf12475891513ee54e004cf2c63a9e990d5e115e6667f8613a898bdf3f44b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-win-x86.exe\",\n              \"hash\": \"e3e911b151b2297b0e71d52930a82bc29d3b709710adfbf6a345d1175241c66589645b89170b7966300edfdf044b467d4d4965005ce6d3456d400618cdc58839\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.809/dotnet-sdk-2.1.809-win-x86.zip\",\n              \"hash\": \"1816238d58b2e6e4a3ab82330e102b4875647677dcde1f330602bea212fe8941e5cdb24deb566558118b002fabc8cc1c20c7fda87c0af687c6b6e0d12596c4b2\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.614\",\n          \"version-display\": \"2.1.614\",\n          \"runtime-version\": \"2.1.21\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-linux-arm.tar.gz\",\n              \"hash\": \"54de5d91a6c97c53c21bc423e295253e8405b6e890470157d4acc369e7c31bd40d71758b44732d3db3b3a5560acb64a6c903368775689b14a94ffd6dc03b672b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-linux-arm64.tar.gz\",\n              \"hash\": \"09575659e14c73345af1e1b6790a595cf305e72d61f21577cc023a6c050cf5eacca3775dbb9c817623ed7cabbed1fcf48af847c56ba98176f73550bb6c00ae29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-linux-musl-x64.tar.gz\",\n              \"hash\": \"85c05f394a5e1541458c73a18e2dd8ccb5e2037aed330b4ba84aa64b4f58876322b6135fd4e104691f3593fc0411b454901b9511ec87821c95792518ebb3c216\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-linux-x64.tar.gz\",\n              \"hash\": \"8c8d775f8d233556fa84faec18564dfead9a528d8037d5d2c3c35eb3c83c016eb0bc7f3499a7ac4c044ee4bff4636dfaab60ae74dcc965aadf4be225a0dbcd43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-osx-x64.pkg\",\n              \"hash\": \"149c64999c9dc8b8f3e1b3a6e6071834df6588e27c49bc11192a3a3b1e4903adc2c8e807e8adcad8825ca27127483a1eaac1b6d679d75cd4dd4564c894ff9e1f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-osx-x64.tar.gz\",\n              \"hash\": \"a69db1b4b587c2df6850e11c141831b2de4ed0cebe8e5d481159e15ef9382dd588724bf460a7d041c911b5944ac6154d49f9f9095b97618623f64836acf707b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-rhel.6-x64.tar.gz\",\n              \"hash\": \"75811dff8c86acaa2023e513aca0bce898ad40d58db85fbddd61ac8c6d01df5e8b043699bc2db13db386ae5b6077ef0285587bbfad0205154c792218faa5c350\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-win-x64.exe\",\n              \"hash\": \"7ba0aef46a0e21a5ddaae6473285e7607a97e4de8ac5015fa060babd83635c56a0593a54fd8eb0f09bf164161b980396c45f391a9e3c33975eff74e73e745eb2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-win-x64.zip\",\n              \"hash\": \"1bae1c339e147d4450a646be01d3993bbc3e4caff8323ab6a34e8c3d38f141ac6804b998923a5a6722b2746f0802a4fd4e39d0712824a1be2a8ad394cdd4b5b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-win-x86.exe\",\n              \"hash\": \"ac2261a2a8841c0cd2fcb3b4a4ef56a638d542400526578c0e67faf39eac1d80870157eb393333cdb81b43e483e4f1ee2156f22c4720f7304a69b0af55ba8bf8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.614/dotnet-sdk-2.1.614-win-x86.zip\",\n              \"hash\": \"a91bb824f9d808b2bb0f0d2250a02049f84f8e70a44c2088146c3e6f0ee4307c11e0727ecb326621bbc19e524abd600b1790adc7aca1f37c7c7ee07d8c6395e4\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.517\",\n          \"version-display\": \"2.1.517\",\n          \"runtime-version\": \"2.1.21\",\n          \"vs-version\": \"15.9.26\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-linux-arm.tar.gz\",\n              \"hash\": \"c532e032a99f4e62e14d5d16dc40c57e102dfea933a255cd5da98df0b3bd11419395aeca673f7403554f64806adc86a00fa3818129ec9db6cb243a016e80519f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-linux-arm64.tar.gz\",\n              \"hash\": \"0a131d5067a7abca730c8c996b3c09692b8a23fbe7a7a281197994a1ee4811a22e1827041a19d23f15423cbb50ccde5a0ef8eb736d08a5e5f3bf4aa5f80fbf71\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-linux-musl-x64.tar.gz\",\n              \"hash\": \"0ffc71fe6658cd56dbbe3a900c7ae6c591bac791a87d1a9ca44fc8a070d5c08ccf04185b7c9b6a6bd4bc512815848a6ad308aeb9870193293543963fbfb757a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-linux-x64.tar.gz\",\n              \"hash\": \"3f4e2587fdcf6693817119b4af4c487e5a6318dc2c80001f91785b1b1110bf0e86ad1a820b6388597844264b15357a73c7422048d510957a5f131a27cdc7c7dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-osx-x64.pkg\",\n              \"hash\": \"bc9208009e4e4bae14b88a719abe5747efcf8f1eee32a2a7780f7b0cb572aaf056da46d1243ebe7552fc0fb7b198f122858bd8400d7792fd40a58919b48c05e5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-osx-x64.tar.gz\",\n              \"hash\": \"fa695be395b122c80186e9905b8a2812f7fb2cef28277dd9138619e4f9ab587d1deb57ba1a69e817a02f72045b03a4ce5c2a4f059057447fda8cfab9bba0c2cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-rhel.6-x64.tar.gz\",\n              \"hash\": \"8118dd0bd9fb68b2e89398b2f1c1c4f513473ab9d941c5d88fd9f586a4b76be2f1140dba114aec34e5bacfde962ec4c4195678bee1f073f65432061ed6799cb0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-win-x64.exe\",\n              \"hash\": \"f79b1fcd70a70bb548cdb8c8d4bf59ea255dd61ac353e2389c63f19a26811e27308cc31d8c37f62039da8942967f55bb17b6c646863f3d269e5fc22d81e967b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-win-x64.zip\",\n              \"hash\": \"c1f40f72e05bff5ad6feabab7a717743dc775e26883c77748aa4e4ab8e0d3189bbfe0d76c673bc06f7a913271750b1505a866c432dcdb20a4fb8437ae4a7af3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-win-x86.exe\",\n              \"hash\": \"373ccc9f4480d60017887896b19f53646d1863faff213c83ea0e167bed1704f4ed3a416f3cc64967a35bb2d58f3b7a6a967587692cdc6ab89c63fe44a5a5fc3f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.517/dotnet-sdk-2.1.517-win-x86.zip\",\n              \"hash\": \"f03d1157a114417a00861b0d868be02a22d0861ef2a9c6b52515db77b555ffd025ea5fcc7980f9bc0821643989a4b8f0ac1821f13447f6839135af0f65309de1\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.21\",\n        \"version-display\": \"2.1.21\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.20212.21\"\n        ],\n        \"vs-version\": \"16.7.1, 16.4.12, 16.0.17, 15.9.26\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.21/aspnetcore-runtime-2.1.21-linux-arm.tar.gz\",\n            \"hash\": \"51b79bb92514dd2cb747568fa80e13200ce5075378af6a05577946dc0cfada45caa3f361f09a63c04cc8352f83adc497f84c6d1cfad13e6294f061d952ab2bee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.21/aspnetcore-runtime-2.1.21-linux-musl-x64.tar.gz\",\n            \"hash\": \"6b58dfddec176c40e170704d23d54a704f079d3f3e2663079e50cc3342fd269b6e435cc41922d867cf0268c1a419791030b8f050d3708e8f21cc3b13efe1a68d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.21/aspnetcore-runtime-2.1.21-linux-x64.tar.gz\",\n            \"hash\": \"e4e81d00316f68eed552bb13ac1e82faffb9262a62789717eb3b79d6309445524dcde7152780f4105622f89a1cba6e23802706f86e97699b5c07de05806c3f03\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.21/aspnetcore-runtime-2.1.21-osx-x64.tar.gz\",\n            \"hash\": \"4b0f02f248c42daf0b53b01edfe3959a878cfc5a8c08522f9a7349c1712837b3a5ec1eaa5950b384714a82de274f773af6d06f896961cf3f7b74e707e5435442\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.21/aspnetcore-runtime-2.1.21-win-x64.exe\",\n            \"hash\": \"55d01aa389db661379f1e250808e2b92a2d420e8fa13be800edf5b4295407a10c88bcec2ed5be1c17165564f07d2e21249a4dbdb7f508de0177e136a167a2f8b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.21/aspnetcore-runtime-2.1.21-win-x64.zip\",\n            \"hash\": \"f41344d1bbbd1851c93536128a2423946c61619c02c4a52df1c94d1f1355e213bf9c2b8ed32ecc4b677989168e009b12b2f1d9953ac78f70204dc75499c7abcb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.21/aspnetcore-runtime-2.1.21-win-x86.exe\",\n            \"hash\": \"b1b271bb82a5c21f016eab992f73ae467c66f0caf196c85ff75e0ec1e378c8b6fed0a4fce6969730d416dec849368e1efec7022e3e97cb14b37a540263b1613a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.21/aspnetcore-runtime-2.1.21-win-x86.zip\",\n            \"hash\": \"b86c488b14f15e06d28cf688d4bb8f0f020bd3d5b7c92dbed80db5cf6aa2116ea688f0552d7eff7de4e9925023770ee891bc111f5b98b98bc9f876fcab5e3efd\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.21/dotnet-hosting-2.1.21-win.exe\",\n            \"hash\": \"b3e89e6dfa333ab221948e31e0380f1a572deefda201c785f067cf58b3b6b8d3e9a330655978d1d580671e80906ab0d8a0396add283f721870a4e07dfaa2a0b1\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-07-14\",\n      \"release-version\": \"2.1.20\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-1147\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1147\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.20/2.1.20.md\",\n      \"runtime\": {\n        \"version\": \"2.1.20\",\n        \"version-display\": \"2.1.20\",\n        \"vs-version\": \"15.9.25, 16.0.16, 16.4.11, 16.6.4\",\n        \"vs-mac-version\": \"8.6.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-linux-arm.tar.gz\",\n            \"hash\": \"d11b482e26cfc14f15c7dd76fcd1985db18c23dec555b932b7f3808277e49a61c0736f53d2ae890ba4bf0e1e4893a6e29ad5a6886cc902e4edd4b9e1b5bb8ece\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-linux-arm64.tar.gz\",\n            \"hash\": \"bdf212bc96d7f107df9067c3ba467d508cc11bd58dfaf22a63123779f4e2555a8e32fa581100530d7916f06bae9b934b06477a1a3e008970d9df4da1e6c21659\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-linux-musl-x64.tar.gz\",\n            \"hash\": \"56c5a36545e9a24607a4f46e1e9eabe4ce4015c8be995103688033efbc65a09117e3532f366c9a71932393821f6690c782073d13adb4d7a2549165e40be6ed5a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-linux-x64.tar.gz\",\n            \"hash\": \"542c299edba77991d8a4c75f2a4105f024b841e5d359a9d59e60dc64c34296a1256a5c59ab18c47fbb60693d18af8c6c1d7af7dc95c40f64dce1ab96c9e5e103\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-osx-x64.pkg\",\n            \"hash\": \"ed615167485203e01e9471121053389ee4df8727bfaace3cbe26a622ccb85625dc083e1bfdb6ba47fa892cec534c4089412082c6314cc75ecd76f95406b32cfb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-osx-x64.tar.gz\",\n            \"hash\": \"98b6dfb972a940e9acda657d5db63fa5a4e971cff8fb4e728ad0a22d7562d700197e5cfb140e0903fc3140e8aca401a844173b9215bd1c062685ac75441516f5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-rhel.6-x64.tar.gz\",\n            \"hash\": \"01df808d711d52e5b465092d90d7dd3efb621f9e22a7b43d64a53fc6dcc7947943ebbb1f69f873c782774c5c8c1221c54daf5cfef8607c6138cfe8fbdf52d11c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-win-arm.zip\",\n            \"hash\": \"9c6784a2a8ef16f4ba89b7ab68e5099dd855968cd974d1fd8f66010b8cebb878b70d8b6ed66c92c267f4f27bf8fc08f8b06c00e8e7a31463201401a41cbb2ea9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-win-x64.exe\",\n            \"hash\": \"8801143873144d908b5c6f62fe641146be820a85c55e649ddc5d5b0bab39af0a8f39f809e5fbc6ea489b4e90670640c0aa2da0cfbed6a45e6a0058756cde1158\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-win-x64.zip\",\n            \"hash\": \"0b7acb1100bd1543e1606691832d909b587c6dc2c58e4616af75aeb848f59568dabd5e32da1aeb35440f6148741ac7b99ae48686275a167a658c823a8e76f966\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-win-x86.exe\",\n            \"hash\": \"8afe2fb84b5aad70d79e08ac278086e46c16b9cbbb2e8c0b5be1946d8f1ec91732761b063bfaaf25421535fa32d61c6f8f476ea322cd09e1c28c5a30a8c77134\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.20/dotnet-runtime-2.1.20-win-x86.zip\",\n            \"hash\": \"b9dedbc0a4bca510c9f499db66d4facc269a12a7e1b99574cd80e5fb09e6168f8c5931657742f6e4d37996e0b63960182edbf8c16e8a324d9d641aa4b60eb2a6\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.808\",\n        \"version-display\": \"2.1.808\",\n        \"runtime-version\": \"2.1.20\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-linux-arm.tar.gz\",\n            \"hash\": \"35e024fafa3babc367900828299d16c484f380c171b849d5157202b77dc99ed4c5f7af612f427bbeefba4939eb95d1faeb9c8bfb6afa14ce75d5c2c36210d5ec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-linux-arm64.tar.gz\",\n            \"hash\": \"797479506373cd39490067ac8428d29e815862f7bbe121364b8d91c07a56d0d9498d98afa015da2f5bf285ccac05fa8bfac2c00e7757e97b8d65a9e03ab94c3c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-linux-musl-x64.tar.gz\",\n            \"hash\": \"8f6e04fe7091364dde709c53969e07e8504a66177c9ccad6871a42b3d2de0a96aba424ce39b281a4855b51f5129d25fd3ee1c49f95d675621dc8454b1243826a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-linux-x64.tar.gz\",\n            \"hash\": \"1c5bf0421a3447a15f5f65a0c736b0463b24c80be6aaf1f30d70be285e0e2d1e8c01948c4a318f5fe14e222d789afe1db16a09974e81fb34326e73784391c522\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-osx-x64.pkg\",\n            \"hash\": \"9dd53eaa082ed23d977d3a900f87ff8ba682d36101cd716cb66135c1d4a45c1534b41ba7dfaa12aae44566a4f758e00ba34cbf85ccb45acd80e705d759a3b3d1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-osx-x64.tar.gz\",\n            \"hash\": \"744ce07074e508edc50b52a3c500a4316b1b5d6807855b2d12b21602ef180907838535aeafa309bea431dfc39c39b3d81b409f0a3858dd6677e7fd8e7f4931c5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-rhel.6-x64.tar.gz\",\n            \"hash\": \"2c92bf7bef7dcec3b6841f1fbb95802d63e1e0bff81371c806729d6c6fa300ba563cce9c62bba19d47a32500daa615d3d1d25ff8c7ae5f16bddf4958283d03c5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-win-x64.exe\",\n            \"hash\": \"03ca6bebee8ca400b17df434d60d3ec14be37ff65717908c7bb32405f9398bd59eef5d15a56bdce0f5bf583e1416643dfe484c977bc427c087426e5b8f02a886\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-win-x64.zip\",\n            \"hash\": \"1921bceb36fa5d6ac9b994c46ee91a58f6e9dc696cf1349bda6fe864834895158c3c5fbfe4129e1b942cac1f815a99eda4113ab7548c5066a42377c239f33097\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-win-x86.exe\",\n            \"hash\": \"7ce5d5a55982ba4a746ae4533868e795e9ed46cf3f3c2367405ea838682f4874b32bf8f9521976ac082153d555006bc28b62747d968fa721910d030ed5836f25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-win-x86.zip\",\n            \"hash\": \"184dd07d486cf836bf72a11a65aefa52bea06eb51fa9921ad7ffba5a13b0dca7309c196294d6a104fa5938737017bf54bb99e9986a761f532a05780424c38bc8\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.808\",\n          \"version-display\": \"2.1.808\",\n          \"runtime-version\": \"2.1.20\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-linux-arm.tar.gz\",\n              \"hash\": \"35e024fafa3babc367900828299d16c484f380c171b849d5157202b77dc99ed4c5f7af612f427bbeefba4939eb95d1faeb9c8bfb6afa14ce75d5c2c36210d5ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-linux-arm64.tar.gz\",\n              \"hash\": \"797479506373cd39490067ac8428d29e815862f7bbe121364b8d91c07a56d0d9498d98afa015da2f5bf285ccac05fa8bfac2c00e7757e97b8d65a9e03ab94c3c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-linux-musl-x64.tar.gz\",\n              \"hash\": \"8f6e04fe7091364dde709c53969e07e8504a66177c9ccad6871a42b3d2de0a96aba424ce39b281a4855b51f5129d25fd3ee1c49f95d675621dc8454b1243826a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-linux-x64.tar.gz\",\n              \"hash\": \"1c5bf0421a3447a15f5f65a0c736b0463b24c80be6aaf1f30d70be285e0e2d1e8c01948c4a318f5fe14e222d789afe1db16a09974e81fb34326e73784391c522\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-osx-x64.pkg\",\n              \"hash\": \"9dd53eaa082ed23d977d3a900f87ff8ba682d36101cd716cb66135c1d4a45c1534b41ba7dfaa12aae44566a4f758e00ba34cbf85ccb45acd80e705d759a3b3d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-osx-x64.tar.gz\",\n              \"hash\": \"744ce07074e508edc50b52a3c500a4316b1b5d6807855b2d12b21602ef180907838535aeafa309bea431dfc39c39b3d81b409f0a3858dd6677e7fd8e7f4931c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-rhel.6-x64.tar.gz\",\n              \"hash\": \"2c92bf7bef7dcec3b6841f1fbb95802d63e1e0bff81371c806729d6c6fa300ba563cce9c62bba19d47a32500daa615d3d1d25ff8c7ae5f16bddf4958283d03c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-win-x64.exe\",\n              \"hash\": \"03ca6bebee8ca400b17df434d60d3ec14be37ff65717908c7bb32405f9398bd59eef5d15a56bdce0f5bf583e1416643dfe484c977bc427c087426e5b8f02a886\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-win-x64.zip\",\n              \"hash\": \"1921bceb36fa5d6ac9b994c46ee91a58f6e9dc696cf1349bda6fe864834895158c3c5fbfe4129e1b942cac1f815a99eda4113ab7548c5066a42377c239f33097\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-win-x86.exe\",\n              \"hash\": \"7ce5d5a55982ba4a746ae4533868e795e9ed46cf3f3c2367405ea838682f4874b32bf8f9521976ac082153d555006bc28b62747d968fa721910d030ed5836f25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.808/dotnet-sdk-2.1.808-win-x86.zip\",\n              \"hash\": \"184dd07d486cf836bf72a11a65aefa52bea06eb51fa9921ad7ffba5a13b0dca7309c196294d6a104fa5938737017bf54bb99e9986a761f532a05780424c38bc8\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.613\",\n          \"version-display\": \"2.1.613\",\n          \"runtime-version\": \"2.1.20\",\n          \"vs-version\": \"16.0.16\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-linux-arm.tar.gz\",\n              \"hash\": \"e39951715074318b64b78d4ec1ad3d09ee913450505beac3ed655b440d52c8c3d7eab8812ff0b7351cf1adc079ddb7ee29cb0630250957c4829339173517b562\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-linux-arm64.tar.gz\",\n              \"hash\": \"e2981e8b3d382d06a2ab7b6e024f1e476596ba48c362df159a7a61dfe1e724f28850b467a93431ed52b62217d3430426f558be62a772f7fc4af3c3b0b68792d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-linux-musl-x64.tar.gz\",\n              \"hash\": \"568d552bcbed7aa837caf90799ee4e24ed4aee00f61e5718ab9725bbed20b818691c2d9e4e25d05a6148bd792adb7636e77ef8023529c70cc5d86d696069f225\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-linux-x64.tar.gz\",\n              \"hash\": \"ad7aad5c6d731fd76078d80d1801800d00c8e8c06ed5db068396e952f2b0f7ff4322b841737043bf819fa4716e9452a4cda8e8025f7d61d3af16d758e4245b31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-osx-x64.pkg\",\n              \"hash\": \"b7346c6410e958142001393f0795d7214fae3dee3a4aad12e09dc4db4f654f2fbd6497f9f60d367f7ac5d1785b7f7d51c5f8ae085769c1b101b6e6660a6dfbce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-osx-x64.tar.gz\",\n              \"hash\": \"9ccb616d8062a72b287978a92eb13b22b0396a42e3f788e547bd67d28928b5a66aa39d70415dbf767d778bd6c01b2592c83fb39329a3e13fbde6f136f0e4f367\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-rhel.6-x64.tar.gz\",\n              \"hash\": \"95caacf0fdae7e656270743a705440300c6cd67c110d34836a02bb5d2347e0405b7727904774f147def298f24543e5b49baf6e33bb54e785389bf8df31aa88d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-win-x64.exe\",\n              \"hash\": \"7a521d042c685bdbe935c23010ae62f7d03115c3356ef6206b67518cc7328cacf5f7ebc4f6ed1bd0b9589f93bf8f3aa4aecd165cb7478bf350fbc3eadf922391\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-win-x64.zip\",\n              \"hash\": \"8ed3a22699279be0c3c4ceada35b2e06d2c0b429dafca074d7d734ee56a44f20730b4787b8f9c4d370146edfff51bc6e67b045aca58ec5660f5ffccdc9db7a43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-win-x86.exe\",\n              \"hash\": \"9eb464d653a16e3e94fb3d34d7ac63a7de51ad89bfe7e45d95e064f564d908e535d7919c762bf05d5ac28d44389d3b4731ba4d964a46ebd2efa70793e9555487\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.613/dotnet-sdk-2.1.613-win-x86.zip\",\n              \"hash\": \"a169489b71de363558d916a824d4c82faadacb1fd7e6aaec0cde59f2857cf8473b0a26b32ad26f8347ae002a00008aca3cb22f0f3b156c2a9729c006a5fefff8\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.516\",\n          \"version-display\": \"2.1.516\",\n          \"runtime-version\": \"2.1.20\",\n          \"vs-version\": \"15.9.25\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-linux-arm.tar.gz\",\n              \"hash\": \"1f6315e9c1871107f953239eebaf3d2bb40ccb0bd0e102ab00c425a04e927839806f7d505742dd66e2cceea7e9d49c8cbf82af41c06d6d230a0c047b559cb7c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-linux-arm64.tar.gz\",\n              \"hash\": \"a4e93052f6901476638a04076d41345350d4363d855c4a5dc832a30451490fd9644a8c13adcaa1cd799ecf688c9bddad659836b0cffd3ab37bdd903146ea3023\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-linux-musl-x64.tar.gz\",\n              \"hash\": \"c47467395da37581302b38636d71ef693a3afd42797fcd5d284d50d2913a5f9343e35d944744ada2336dfb098673a5cfa20b5aa387aa0b1543043d78ab0c7e7b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-linux-x64.tar.gz\",\n              \"hash\": \"5b8875b73bafffeec0f2bd097288a31e671d9be2bce93435591b56e65baaa9d11c402a2c82d970667fba2181c3c30a1b62cbb9b711ce6e5f44aec59c116ff8bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-osx-x64.pkg\",\n              \"hash\": \"800a84aff349c24f566d747c333bb64ef0dbea67ace643bde7ef43aa3cc89ba3aeecd197e137a7a0b14dc7c59ab891fb7c25f9f6afdd885acd0336631d3f9376\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-osx-x64.tar.gz\",\n              \"hash\": \"eb1ff91ec0f15cbeb225c35871e27381145e375b71083accab0c9c4537fef169ac47900cfd608fd3711c25e194bd2fcc223275e44c54056b4665917b1e0bc863\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-rhel.6-x64.tar.gz\",\n              \"hash\": \"187dc8a5b3bea5bc34519c50b78ef663db88941800749cdf1ca22a97e6b03f6a77701a72116bdbd729726c657047c795f0e1c41fe4e131765b402f03bef11a67\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-win-x64.exe\",\n              \"hash\": \"256150a2ed1a94345938b7a7b12a5d1d694b663e57d2917232634a602db6c68fdb2e77f910a6e947dbf88543674e7b66e187550cf336b922a200e0223db0155b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-win-x64.zip\",\n              \"hash\": \"ad383a1e0be91783f883bd275c6d64a54361990b7a2783d58c722b43fb5f8ce1e14f3d10f84f51aaee80a8ca8a587ddc111bb9e38025ca9883b135fd4c75a9af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-win-x86.exe\",\n              \"hash\": \"b793c890b6639c74331ee3e374b0141d03ee419ef5606bebb4b0e2d29610c8ee5e11ad026f033fe731b05ae477d4f27077df4f8fa7ec277498d1a091881419ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.516/dotnet-sdk-2.1.516-win-x86.zip\",\n              \"hash\": \"8e7d36a7d87d9163d59c983a5e181ebc8339eb29c5c226adf3853485d9a7ddae2f4523ccdbf2079b1777f886b1e8ec474bd5e7d0be65b642e125b781f4a4d437\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.20\",\n        \"version-display\": \"2.1.20\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.20171.20\"\n        ],\n        \"vs-version\": \"15.9.25, 16.0.16, 16.4.11, 16.6.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.20/aspnetcore-runtime-2.1.20-linux-arm.tar.gz\",\n            \"hash\": \"21c0f34031926b642d1ee31e91253d41673306682866f4aa452a802292df425056311fe315bec2f0681a92d71cf5f799f2f17b29994c1299660b8add78dab68e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.20/aspnetcore-runtime-2.1.20-linux-musl-x64.tar.gz\",\n            \"hash\": \"a83d3f7f310fedd6233af524aeef56fc49602df297de927a758e2e07e252dfd2faa762c3d450a3c9dc079256576d6500d918c9acc213f9c362f9756b6309d053\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.20/aspnetcore-runtime-2.1.20-linux-x64.tar.gz\",\n            \"hash\": \"bbde6d45641aea8fd0345dd23a4da0cdc1609c65b372bfce9bb00fd7dbd4d0934c9325a1ffae87d88e43d474d52a7a077a6dc23f861feb8aaf02f834f42b31bd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.20/aspnetcore-runtime-2.1.20-osx-x64.tar.gz\",\n            \"hash\": \"75a86e42f1bc5227941d0eabe77ae6c789e96fce587dabf7bda30673c4b6b38f72681427547cddeb9b8a1750a3427e73ea78f8d38b1de8edc2922b1a0b8cef3a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.20/aspnetcore-runtime-2.1.20-win-x64.exe\",\n            \"hash\": \"e5d6775b911a40ae7e6b4cac5cc158fc457a430c1d87ad120b410be5f14625dab7ed70dda4f4e0f6f9d81e6d444ecf3429674f750f2c518f9624c06669e68345\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.20/aspnetcore-runtime-2.1.20-win-x64.zip\",\n            \"hash\": \"ff6994b66e566a7a778901679d94f2175c345b1dcc3b985d59e6c401db1935f79156e4606afbed604ee7af4c968ec8a6fe23976bd668bbda236cfd4321662624\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.20/aspnetcore-runtime-2.1.20-win-x86.exe\",\n            \"hash\": \"77bcced36a00c0f8737a364129287ce9227db18d209d5016bc7440b5342f49a01bde03e91c57dfad6782326daec6cd0498ab2a368297e323a75b0ce54cb158b7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.20/aspnetcore-runtime-2.1.20-win-x86.zip\",\n            \"hash\": \"2f8f02893c8631d5aad9516c0a3f3b2edbf1cd6c293b86e9a3b86a606b3409685098f59487fd34cbfbe54dcdf5a1ac28f61a3ef24e057f472ff2c40bbd18be13\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.20/dotnet-hosting-2.1.20-win.exe\",\n            \"hash\": \"61668c65c0a041ecdd58c6b2d22f47ac5493a1d5242bffddfe87c89dc3ebc417d2104a87e33cd6c0f255f6e1f53e17938705da33acc7ae96ea42262d325f80ad\",\n            \"akams\": \"https://aka.ms/dotnetcore-2-1-windowshosting\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-06-09\",\n      \"release-version\": \"2.1.19\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-1108\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1108\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.19/2.1.19.md\",\n      \"runtime\": {\n        \"version\": \"2.1.19\",\n        \"version-display\": \"2.1.19\",\n        \"vs-version\": \"15.9.24, 16.0.15, 16.4.10, 16.6.2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-linux-arm.tar.gz\",\n            \"hash\": \"c674da1a311cc413a217d081cf8a69c79c5e84cf8057a3953e69ec80655840dd08332462a3a89010e094e1b62de737c95c07a3978a7f8aee6bd6e1c73f0928ec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-linux-arm64.tar.gz\",\n            \"hash\": \"f6d70a3a43d2c8194098626108e13f415ab078d676b979511cbaebc388a471e3140f69ba7d312deeb951f57f7091b0e377870d7155cf643012a7541e0af0d918\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"438d48589ce292403195603b45eb377f6d3490626c591ee83844f51b10ab2df24d077178ffc58065d1b9b54236dd104147094ca59b6229e3064124bec72e46f9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-linux-x64.tar.gz\",\n            \"hash\": \"862c5fb342ffd97fea3c3f98b2c665e744e32a1c8f94c8542ecbe577a65439898db0f2f6f5c13a0f066a554ef7e48c473ee83bac314a0fa8e2d7ad0af5ec1e4b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-osx-x64.pkg\",\n            \"hash\": \"27fed71bc3f364385b6f8aaa29857bf2e29fc5e98bab2efdb6333ca29d5ec2fbd9feac2b3269c48c24c2249eda5b6cba3d0ef405274ad083fba6c156967255bf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-osx-x64.tar.gz\",\n            \"hash\": \"ee8f788cfcae006a62914800f667979c5d0ef6a891441715e9c47d2bf3a6347a94213dc1571387936e3e5d3776b39b07201e3cfb8ba69e3fd55b47042740355c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-rhel.6-x64.tar.gz\",\n            \"hash\": \"f7d0a9d1431809fa258b4aa23537cca65a374f33065186783f915d369f49765c7647ed14bc2b9431f138ed112fb10302dbfbc43252e97fcc0b05ddbad55aef5b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-win-arm.zip\",\n            \"hash\": \"8e6c4f6ae78838d3112a7a3d1e9cae101f6e08ddfdfeb8153d9360db077e4cb602a7b63f901aa45e2b9ad1f86dba09251a4d47953f94d3a9e311d33f8c668fc3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-win-x64.exe\",\n            \"hash\": \"17da4b41870819a5ab62035f9d28730b57aaaa13b183b3d488ab5a4939e855fa304ce4578fe4d664c588438cd2a54ee874c209f01f6a3261c25d2a90f0ab3853\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-win-x64.zip\",\n            \"hash\": \"f59d956cdbe52c58512cf25227a1f9e3038ae8f68781f081dcab5015a4f93448c3da0ad58ba09e58985abd671f7fe2462493cbcba53ccbd546e5eac2e7bc4e8b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-win-x86.exe\",\n            \"hash\": \"32715c486dfc212517cc3c473c41aa41220a4480040d06d272efb6cea1f8e08efcd5f39ae479ad2b334703adc9ce8d5393f75fa2de0e1a72947dd501dc0fffef\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.19/dotnet-runtime-2.1.19-win-x86.zip\",\n            \"hash\": \"1fbf08249eba32848a6921cd4478751c6afd7c9c675d5b5cfc1184a9f628607533eb1aae2d1ed843ceccc7131a48d980aef531fa02f5cad0f43e3f456af69061\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.807\",\n        \"version-display\": \"2.1.807\",\n        \"runtime-version\": \"2.1.19\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-linux-arm.tar.gz\",\n            \"hash\": \"0b3e80abf6895d46cee8ad5c81aa7968cc6876f5a98c79ce6ad5f28fb43208aff8e5f2bca618c36577bf9f91d1f7a4f962accbe2ab472f713ba8e503519802b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-linux-arm64.tar.gz\",\n            \"hash\": \"9abf5de838038071fa965608ab43aa2f27cd3cf4106a743609c2c0f8b48fce2f5879337b2cfa1861d16c2bf5bb570bc9f9985240ce94805b46e32bc619476c83\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-linux-musl-x64.tar.gz\",\n            \"hash\": \"65ee089284f293d506a386bf51198e6ee88722b5a0a8f786c3fe6f6b440d4da1222806b62f06627d521653a022519f010e4467a9caed47a46fc6605b8d70c359\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-linux-x64.tar.gz\",\n            \"hash\": \"85bfe356d1b6ac19ae5abe9f34f4cc4437f65c87ac8dff90613f447da619724ddcda5cbd1a403cd2ab96db8456d964fa60b83c468f7803d3caadbee4e8d134ec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-osx-x64.pkg\",\n            \"hash\": \"04b798efc9660024947e5d33a77d44f7e7baa59c622c29ed47bcdcee0511874ce92d0e591d93d4cadcc8de7b97ae1576fcd154f8023d685b45492dfff96f9a8a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-osx-x64.tar.gz\",\n            \"hash\": \"d20bb5f986e9f568f553d3ce387a8f108e059297239247996f6144345761e834857b6df534ee0cadf8f030d41da7a98701219cbb3d48b7790bca4e2d0f95029e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-rhel.6-x64.tar.gz\",\n            \"hash\": \"c4cc048414e594d3bb92d6b26c85342ca4df1f2e26c1473b8419cda0e0abbc7837c17003c1ea7adc56945cab9c194f143e3dbaa61e89daee0e1cab08a8bac084\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-win-x64.exe\",\n            \"hash\": \"ff8ed317e004ff5153c92109e1caa69a230f1bd1fc09e6e3acc16bcdc6a58807feb0a6cf534f54f6557cb3821a404530d2c410b3da22f11cfd13a91d2e8248b8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-win-x64.zip\",\n            \"hash\": \"05eb8ab6a960ec51a24d24b73dbe4b12c6ac66e499a7f076caa3aaa1c3546ca78d1bf9054b49c61a2275e4c261e90f36364820eb1b90206e1e76f59ed96f97f0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-win-x86.exe\",\n            \"hash\": \"80a1b4bf48fa9fbc4944761057ed99dd540802a37757c89b42290d18033aa74296ad9bd820b5dd2566dba71fc0c9326a19cbf387476efb62228e2c1d3c2e6c82\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-win-x86.zip\",\n            \"hash\": \"0b7e30c1e1a97ef5d633caf0f0988b9f3b2a531f2e3d1718a3473050de6493c42390ef24b8524080eb3c0fa6627fe7a933c31999a7d2e4edc84886e19ac6fc51\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.807\",\n          \"version-display\": \"2.1.807\",\n          \"runtime-version\": \"2.1.19\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-linux-arm.tar.gz\",\n              \"hash\": \"0b3e80abf6895d46cee8ad5c81aa7968cc6876f5a98c79ce6ad5f28fb43208aff8e5f2bca618c36577bf9f91d1f7a4f962accbe2ab472f713ba8e503519802b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-linux-arm64.tar.gz\",\n              \"hash\": \"9abf5de838038071fa965608ab43aa2f27cd3cf4106a743609c2c0f8b48fce2f5879337b2cfa1861d16c2bf5bb570bc9f9985240ce94805b46e32bc619476c83\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-linux-musl-x64.tar.gz\",\n              \"hash\": \"65ee089284f293d506a386bf51198e6ee88722b5a0a8f786c3fe6f6b440d4da1222806b62f06627d521653a022519f010e4467a9caed47a46fc6605b8d70c359\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-linux-x64.tar.gz\",\n              \"hash\": \"85bfe356d1b6ac19ae5abe9f34f4cc4437f65c87ac8dff90613f447da619724ddcda5cbd1a403cd2ab96db8456d964fa60b83c468f7803d3caadbee4e8d134ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-osx-x64.pkg\",\n              \"hash\": \"04b798efc9660024947e5d33a77d44f7e7baa59c622c29ed47bcdcee0511874ce92d0e591d93d4cadcc8de7b97ae1576fcd154f8023d685b45492dfff96f9a8a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-osx-x64.tar.gz\",\n              \"hash\": \"d20bb5f986e9f568f553d3ce387a8f108e059297239247996f6144345761e834857b6df534ee0cadf8f030d41da7a98701219cbb3d48b7790bca4e2d0f95029e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-rhel.6-x64.tar.gz\",\n              \"hash\": \"c4cc048414e594d3bb92d6b26c85342ca4df1f2e26c1473b8419cda0e0abbc7837c17003c1ea7adc56945cab9c194f143e3dbaa61e89daee0e1cab08a8bac084\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-win-x64.exe\",\n              \"hash\": \"ff8ed317e004ff5153c92109e1caa69a230f1bd1fc09e6e3acc16bcdc6a58807feb0a6cf534f54f6557cb3821a404530d2c410b3da22f11cfd13a91d2e8248b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-win-x64.zip\",\n              \"hash\": \"05eb8ab6a960ec51a24d24b73dbe4b12c6ac66e499a7f076caa3aaa1c3546ca78d1bf9054b49c61a2275e4c261e90f36364820eb1b90206e1e76f59ed96f97f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-win-x86.exe\",\n              \"hash\": \"80a1b4bf48fa9fbc4944761057ed99dd540802a37757c89b42290d18033aa74296ad9bd820b5dd2566dba71fc0c9326a19cbf387476efb62228e2c1d3c2e6c82\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.807/dotnet-sdk-2.1.807-win-x86.zip\",\n              \"hash\": \"0b7e30c1e1a97ef5d633caf0f0988b9f3b2a531f2e3d1718a3473050de6493c42390ef24b8524080eb3c0fa6627fe7a933c31999a7d2e4edc84886e19ac6fc51\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.612\",\n          \"version-display\": \"2.1.612\",\n          \"runtime-version\": \"2.1.19\",\n          \"vs-version\": \"16.0.15\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-linux-arm.tar.gz\",\n              \"hash\": \"d0723d6b12d504824e1d4eac74212d19d7d8ddba2517a578a2da826cdfe9cb303f63e8d622b5d278ed3ed67aca7d86eb45625aa12cca2d35f1711b259fa6ff9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-linux-arm64.tar.gz\",\n              \"hash\": \"ae61beb2955de87c8ea76e85c9f54b4b165b203757abcbfde1fabe330e91009ff31af4aff17b8504755ed0b31c72711aa009051889bd929cd13e546d457f4e6a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-linux-musl-x64.tar.gz\",\n              \"hash\": \"eec338534c9682c49dcf3704d11405cec687fef4c2db8426c4516ea9135d0c85a5456ddb53927d8cc6e73144f348c809755a528d5e7ee0b803d3b7eda130c0ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-linux-x64.tar.gz\",\n              \"hash\": \"6ce6c029c926663fceb6454322e4b6f42889c8a2b9e705c9ac7b5ffd5a2e0f487acf122b5335522868c88e0c46eedfacd58f9f66904fd2eaaf60ae89be3eafb0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-osx-x64.pkg\",\n              \"hash\": \"5026b1fa68fc617810375e95e3ff004fc2b14d0c33f3870c70929520c118fe092b802608527b317c427bf7f91c446449b47f52c58b897fff555f3bc9474747d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-osx-x64.tar.gz\",\n              \"hash\": \"abdc6a48c0d54643b4a4001d3d279686f158aff2274c3dbc6e8e2a99af75d5e14a614e7c5d04481a46cf0df6f3700919a301454a13272dd89d291574e523f194\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-rhel.6-x64.tar.gz\",\n              \"hash\": \"2cc130f3063d49054864beb627e95872d61357f7ff8e73c8b2a430319bf36b5259661af29bb2fdbf66f1b5571df8da3bd2a90145b9e080a4530f291fa07dce21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-win-x64.exe\",\n              \"hash\": \"8cece153f03897a42f5f31d37e86f5ebf4c9f5823cfa1376cea2e74e1d4281a6fb5c5a103c87fd43efff014ed3a7d58cd0b78f202d8f5996e7174a60bb21cc51\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-win-x64.zip\",\n              \"hash\": \"2e1f0cebe4d216d5d79cbaa9255808cfe284f21c09db52438786c93a6956e34a22411e7c50772efa0beeb2812b7aedd1bb46a339a58cf96212e0586125df17e7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-win-x86.exe\",\n              \"hash\": \"d9e3d6e85bf9fc763fd0156d0ddb475f2e3c9162b74961b2f0c0138f2046c36ff2b9c762dbb72360ea5c4f5e488b36be4d409a311d333f277f0f521a386026b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.612/dotnet-sdk-2.1.612-win-x86.zip\",\n              \"hash\": \"dc3a7ac50a1bc70ff9218b53c22b57f3c9dc74aa9e5a228958a71119036fb44c1a945cb37980b3bec95dc2c2816542e2754207196877c8a14f8ed58e1a20db0c\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.515\",\n          \"version-display\": \"2.1.515\",\n          \"runtime-version\": \"2.1.19\",\n          \"vs-version\": \"15.9.24\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9 or later)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-linux-arm.tar.gz\",\n              \"hash\": \"ae6c754719ba623a37a53341bac6ed79ff1e30088a75a706eb94859fbca67b96c8849b36eb618705d483d1a4188c41b89396c6503ad51e780f2abf1bb3b58e2f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-linux-arm64.tar.gz\",\n              \"hash\": \"7c82818aa789c9f93d9a3a20d7574d61066df31ece0f8350b6c3383aa4032ddd4670aa9539f89dd240be10a0288376ae038cee7605e9346831bfea30320a4305\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-linux-musl-x64.tar.gz\",\n              \"hash\": \"f9f98674010c579f5ee9da99f7098ba1529d7e3124864ec8edae098fbc30812cb88d9889de9949d05aeeea206cfe10bad01b4147ac665a1563c908690a44b5a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-linux-x64.tar.gz\",\n              \"hash\": \"90ebc0657e0b41507860391baed1cb50fd660e5bb38f81df248b8cdddaeec399664bd6c1b39051f3897391adc5bee82c25c15327fea9ca12babae7714c38303e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-osx-x64.pkg\",\n              \"hash\": \"bbdce085c4f5fdf341e6daf57ccf1968b2de11a00d9a667ffe8e7bf57b22649f35ae7a159c41453e7611c292eab309a70de846b331f89131828cb4ce63c27399\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-osx-x64.tar.gz\",\n              \"hash\": \"bd5be9632d02cd10824f14ae9a932ad5f9752a442e10dd01568674eafcae7067dabc2d47d0d6fe2d49b7bd5deacd30f3c09d742f88cd96776dadef4da12c6741\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-rhel.6-x64.tar.gz\",\n              \"hash\": \"e858250148aec9e52a38a8b657d1badfeefa0fbd50b202d43b793a0ad4b76fe2f0d717c15d718937971f22b68d30c28249f55275c644a1f6dbb181f761db7d95\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-win-x64.exe\",\n              \"hash\": \"b730a893cbd8b18780f9a5d1fa1285763608d84b74a28046f2e4c26f8d85780d91de9a6a722a0a2d45f0e9b7dcbf159fef51bea9edef671547740be7bf07a577\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-win-x64.zip\",\n              \"hash\": \"84962382151fcc0c6a5f5285084bf0ac31f5cb47b257912fc722002a252be678a10c0019eb79862e862945a83cc7106c8335fadf336d11026a972d96f9f8573d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-win-x86.exe\",\n              \"hash\": \"e634579f58983bb06798b353401e79e67be895ee6f7d676cfda5277c647768adfddc2f4b4afb4bca3e00d482aa913135fe927fa69e6358e6276b848eace84e99\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.515/dotnet-sdk-2.1.515-win-x86.zip\",\n              \"hash\": \"d79bd219d2a250226675e7557185b1d636b2b3572d62a8607aee2be18770975cbd40eff5c7d3c3c3c7dce43fecae10b69dbdcf341c4376e5efd145264da04124\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.19\",\n        \"version-display\": \"2.1.19\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.20149.19\"\n        ],\n        \"vs-version\": \"15.9.24, 16.0.15, 16.4.10, 16.6.2\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.19/aspnetcore-runtime-2.1.19-linux-arm.tar.gz\",\n            \"hash\": \"f8ec53beb23c1308d91ffb2931c804714a0a10553319ffa596cd47d00cf324207130397f90ab5b78dc3d4f408eefd6753221254abaf0d02ffca9522b85851892\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.19/aspnetcore-runtime-2.1.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"ad38186e0c34185981be134cb97cfc874d0459f781df6bac6270f892658a38cfc1a7c26cfc973e6a0b4d98f3d38cb46a0f1448da5f0d9081f5610ce408e677c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.19/aspnetcore-runtime-2.1.19-linux-x64.tar.gz\",\n            \"hash\": \"4ca81b0dc1efcb8562a07f658461ce5caf976c93942af7549053f4f5c3da232964989fee2ea42537c1086b244950d8e6a1230d3486317af5108d203036c4bc0c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.19/aspnetcore-runtime-2.1.19-osx-x64.tar.gz\",\n            \"hash\": \"426e4e1bc2718433651094b910ee5c27386d726bb2c1703a210fc0c964afccc06dbf9ba395684fc457df807d2374f92b1caaeed323f317d8bc4c4ed4a9c3912e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.19/aspnetcore-runtime-2.1.19-win-x64.exe\",\n            \"hash\": \"79a80ccece358e07259d7db1588a7a276acf5a37fd75d8529286aa85f165c0f333ef28c829775ee5f676e37f45021b452a597fe089c28be34b5164db4bf92d3b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.19/aspnetcore-runtime-2.1.19-win-x64.zip\",\n            \"hash\": \"7d29881fbbdc7834d8f802dbf46b80de979b7c675adb1e3562e85f8843b246c37138412ef5b0b8aef87f4476baf77bed0a553d9ed9e7314a5d2c0d1cf25ae746\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.19/aspnetcore-runtime-2.1.19-win-x86.exe\",\n            \"hash\": \"d46cbbb84b04ff927979c07007fb73d906f99f115639eae8802fe3da2c3956286dd6fadb88b799c94e3ca0f715a45af09e42972b82ce1186387b0828ae6cd730\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.19/aspnetcore-runtime-2.1.19-win-x86.zip\",\n            \"hash\": \"06151b588add215716c4dc08ea2b6224723f26b12532d698d68cbe1007eb8eb25424ad45cf312ae9fecc9e14f733952243915f36c9be6910e1c36d64d5989c21\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.19/dotnet-hosting-2.1.19-win.exe\",\n            \"hash\": \"6bbba7eb796ad88a4c66568e45b9e2eb6873f0d591093d0b3c574a9c9dddc4af03eacbfb6d8495653aa59eb8a03f804972a52759d07b5e456a93ee87e4619d4b\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.19\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-05-12\",\n      \"release-version\": \"2.1.18\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-1108\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1108\"\n        },\n        {\n          \"cve-id\": \"CVE-2020-1161\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1161\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.18/2.1.18.md\",\n      \"runtime\": {\n        \"version\": \"2.1.18\",\n        \"version-display\": \"2.1.18\",\n        \"vs-version\": \"16.6.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-linux-arm.tar.gz\",\n            \"hash\": \"b7106a97c9114534b19761f1bcc5918d62615ed1efa3d2072bb07d6898e7c22f301fcd6c6eba740d9ab4affe91f75449123d9a44e6d6abc34ed1fc1d94e4ac1d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-linux-arm64.tar.gz\",\n            \"hash\": \"5e5714ac39e1d49794bb2b1a1fcc2bc34eaa8d79f8a5eea6b00523e23390f72038c32f5f848e7dd33ca364214211fb7a3bfafd02322f53fb953372f0ba8a7a10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-linux-musl-x64.tar.gz\",\n            \"hash\": \"e0928d75eb1d67b70e9832dedc14a6a87aef9feab3e43f8ebb670ae3de6f584e51916a69a594e1ad7979bb575bcbd08a15946c2ba80f8edaaedccb41d1da59e7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-linux-x64.tar.gz\",\n            \"hash\": \"97e8060b97ead693278af4897e33b7d13065ac19fc657c0d1aa184ffc73aab0354a07615e2f15f0bd8280c6212183bba5ffc61e30302539639d1a5b5b6466dbe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-osx-x64.pkg\",\n            \"hash\": \"adad47e232bcb4870867a30fe15691cdeea36bd84f1585249ad8f832430f344b57e668f0f6a16f232cb968392e406492bf1bdc7ed2ad28a4e34def25b6388f3a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-osx-x64.tar.gz\",\n            \"hash\": \"d034b633e14f1739b46665d9dfd9e3af3425d1c291fed5cb96b0d2ac57b280bc1c9bb9ae99bb1abeb58985020cd2ca9c03e3b83a5efc9789dadc39171a67e6e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-rhel.6-x64.tar.gz\",\n            \"hash\": \"bd3a590880ace2b6139f97b9c8bfd85a987a92c151072095279cdb4a013e6d7da673731839aa40729b5273afe34fb4a0ece9d30ced42b6f24b03dcbcc514f64f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-win-arm.zip\",\n            \"hash\": \"b9bbff3746c5c39232c62ce04e7c802437dff93642a4ee65bcb1bc2b0486fc092b245a00ad3e22b70031c4da54fdf3dadd5abd3be93af8c3480730e4885a9df5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-win-x64.exe\",\n            \"hash\": \"3ca47200f89d0125eacd6736c1212517f9705caa6d1c6be9732c78bc0f2756561cb5c7e748fde0ca0ceb5f98d7c02f1b73b7bec510826a2e617d43b34283a367\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-win-x64.zip\",\n            \"hash\": \"caf6afac6839d808c1b85b45bc2db1eb80141ce367807e747eda540547195d55a39b8100b0939c085867108891930425a5f97094d8813240ff3ca022538e6120\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-win-x86.exe\",\n            \"hash\": \"10f8777180bb9a1464ca2d30b6ebbc5dc4658b29072685c22c683a0730546f71650c2b9144b50f857fe660cb0570d64cf94199adae439678c0371a625c61395e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.18/dotnet-runtime-2.1.18-win-x86.zip\",\n            \"hash\": \"386c64a02b17b12180a29e3c812d4eb8b7b10607a0f0feb72d7a5f23c8a42acde121628cbd12c27e49edb8239413a9c09ec462e0374856ed3fcbeaf1b996cb1b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.806\",\n        \"version-display\": \"2.1.806\",\n        \"runtime-version\": \"2.1.18\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-linux-arm.tar.gz\",\n            \"hash\": \"80b38700c57cd0af6b769db9c8b171914e99512909e1181a87f014ac45201b38080531af334c7a7b429497be754e5b648600a9d86763fc2874a2d99cea6568ad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-linux-arm64.tar.gz\",\n            \"hash\": \"56cf6b8d8da2f47c81ed202a00d0215ddfa0b077885c2dec515e0535698d1a0eb5a00805cdfe41e47c89fb20fe312e396846081efa6a00a135c87cd167b41b4e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-linux-musl-x64.tar.gz\",\n            \"hash\": \"6ae31c3ff01f84b550b1d38761a173b6e19f233594752ff212e50c23e6adecb95a7bdb34f27e316c3b43c85c987b8f5af4a062b51b50d3f632d4b6bc8c83a426\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-linux-x64.tar.gz\",\n            \"hash\": \"61c3bf7dba231277b8dab274f62a38ef2f53811025a83a8ce5413f612c72176bf0f7060e7e10887ae15c4ce41dc4f2ffd689e6133c277a211b4db418e9e136e4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-osx-x64.pkg\",\n            \"hash\": \"0acaefc79720c48eee2c9f42ccc0d5285a6b41dcc03e0efe69071c9cfa174bf39dbdf4d979ddbdca949a5a17e91c2b378b7fd2e7c9a60dd7c287cf7ff72b63bb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-osx-x64.tar.gz\",\n            \"hash\": \"74d848a299932a050639467533a0aab14898a803620e2c484b7583fb8dfd708b3dd0be79e1d99bc4d714a35897ed1b3af81a3901cbfe349a9fab1c2fb208329b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-rhel.6-x64.tar.gz\",\n            \"hash\": \"804b4d0cc06450fafb7b36698b9c93fee38ff27782fedbffbf12cfea84d663690b4bab6ce7ad801c9bcf4ba6de1eaeab41d76b2f8bfd2cf604bb8c6182b0bfd3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-win-x64.exe\",\n            \"hash\": \"52099d589b133e3744a6411de4144fe37d4cbf89d4b57dde942446b37bc8c2943e404e5cbbc0b61db9e4eaeb4e6cf8267f3c261921d7f5301ec3448cddcf59da\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-win-x64.zip\",\n            \"hash\": \"ca8105c83017003ca1b0e04731ba4e4c9879b7fe29f7a1b217e1f212100a4dd4bb03ab577d6f9ba57ced448afd98e5a3e675130f16d80b10b85e35d1121cba13\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-win-x86.exe\",\n            \"hash\": \"baf20f17a25cfd7ea0dcf9be1f53799c62d65c7b318b03cfb2f6bb6e383f48643b4c7c10599ebd9173446ff4951c837fe64bf0ab0ed1029adfa736dedefc8dce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-win-x86.zip\",\n            \"hash\": \"f559e1fe127f9dfe1311d91d2eb1d40efa5fc56cc3588dd5adc6978e1df7a111cb9cc6ed436b6dbd11137d294d6dfab3b761dd054cfafcd6326529d42a115828\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.806\",\n          \"version-display\": \"2.1.806\",\n          \"runtime-version\": \"2.1.18\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-linux-arm.tar.gz\",\n              \"hash\": \"80b38700c57cd0af6b769db9c8b171914e99512909e1181a87f014ac45201b38080531af334c7a7b429497be754e5b648600a9d86763fc2874a2d99cea6568ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-linux-arm64.tar.gz\",\n              \"hash\": \"56cf6b8d8da2f47c81ed202a00d0215ddfa0b077885c2dec515e0535698d1a0eb5a00805cdfe41e47c89fb20fe312e396846081efa6a00a135c87cd167b41b4e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-linux-musl-x64.tar.gz\",\n              \"hash\": \"6ae31c3ff01f84b550b1d38761a173b6e19f233594752ff212e50c23e6adecb95a7bdb34f27e316c3b43c85c987b8f5af4a062b51b50d3f632d4b6bc8c83a426\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-linux-x64.tar.gz\",\n              \"hash\": \"61c3bf7dba231277b8dab274f62a38ef2f53811025a83a8ce5413f612c72176bf0f7060e7e10887ae15c4ce41dc4f2ffd689e6133c277a211b4db418e9e136e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-osx-x64.pkg\",\n              \"hash\": \"0acaefc79720c48eee2c9f42ccc0d5285a6b41dcc03e0efe69071c9cfa174bf39dbdf4d979ddbdca949a5a17e91c2b378b7fd2e7c9a60dd7c287cf7ff72b63bb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-osx-x64.tar.gz\",\n              \"hash\": \"74d848a299932a050639467533a0aab14898a803620e2c484b7583fb8dfd708b3dd0be79e1d99bc4d714a35897ed1b3af81a3901cbfe349a9fab1c2fb208329b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-rhel.6-x64.tar.gz\",\n              \"hash\": \"804b4d0cc06450fafb7b36698b9c93fee38ff27782fedbffbf12cfea84d663690b4bab6ce7ad801c9bcf4ba6de1eaeab41d76b2f8bfd2cf604bb8c6182b0bfd3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-win-x64.exe\",\n              \"hash\": \"52099d589b133e3744a6411de4144fe37d4cbf89d4b57dde942446b37bc8c2943e404e5cbbc0b61db9e4eaeb4e6cf8267f3c261921d7f5301ec3448cddcf59da\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-win-x64.zip\",\n              \"hash\": \"ca8105c83017003ca1b0e04731ba4e4c9879b7fe29f7a1b217e1f212100a4dd4bb03ab577d6f9ba57ced448afd98e5a3e675130f16d80b10b85e35d1121cba13\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-win-x86.exe\",\n              \"hash\": \"baf20f17a25cfd7ea0dcf9be1f53799c62d65c7b318b03cfb2f6bb6e383f48643b4c7c10599ebd9173446ff4951c837fe64bf0ab0ed1029adfa736dedefc8dce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.806/dotnet-sdk-2.1.806-win-x86.zip\",\n              \"hash\": \"f559e1fe127f9dfe1311d91d2eb1d40efa5fc56cc3588dd5adc6978e1df7a111cb9cc6ed436b6dbd11137d294d6dfab3b761dd054cfafcd6326529d42a115828\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.611\",\n          \"version-display\": \"2.1.611\",\n          \"runtime-version\": \"2.1.18\",\n          \"vs-version\": \"16.0.14\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-linux-arm.tar.gz\",\n              \"hash\": \"e6f647fe6155de7046ddbd661bbc40c2cfd2a1985ed0f09e8f218fb2ad3f1d9aced9ccb48928cbe6e2e4fe490940191b1dcba240943ffcc54d7f2291906b5471\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-linux-arm64.tar.gz\",\n              \"hash\": \"3fd0d9d9bead77bfcd858dc6d4f3da9d6caa95dedae7624fd564cbe9a949c3a212f35c204b637edaa8c0750660345b51ab428d5e80f5f4dc09d26bc21b9edba5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-linux-musl-x64.tar.gz\",\n              \"hash\": \"9389bcd648f2107b8d342e52f040103d76c4a72d22d14f14209ab30e6b8f63d1b0a4389d355e9e37f5d2151c1bc77b51c08d2fa54718d8cdfe2b82baced3cc99\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-linux-x64.tar.gz\",\n              \"hash\": \"98d96904faf9c5f4807f6d62c36e6ef141fb63ac47a2c5ee131555c86d33c07dc2c580b811fd671583a2e7ac916dd3d9778394cf45a666847f29b8f9dfa66d8f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-osx-x64.pkg\",\n              \"hash\": \"a6c51a399bb977c2839b0594a4236eff0d0c32c16027d56b0de5827404d236a26e2061239ef6e80d96a3053e72ae6fe44ad11010994bf97e0d7bdc52385a141e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-osx-x64.tar.gz\",\n              \"hash\": \"01e86c457a0c93e54778a65122eb15370b3e2f9f21cb1c90c065adfeec4b8e374e945c770f8c647482a606eed4a886a3b96a8e521fcc3dbbf85ccdc7e632718b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-rhel.6-x64.tar.gz\",\n              \"hash\": \"1e4f20d79cef1503f411d1eeda06d906f9d2e323fe17c1228182b04cd367262616edf668fcbbe038d55bb175721f36756d6bbd38f87a331de2bce38431347c4b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-win-x64.exe\",\n              \"hash\": \"6bc97922a932d280174af29a639a38d0cc06364cb1f77af1df2dc8b74ef235b01d8af6187d277bdb414108e8b6a6f512d155d0f9777faf78c79bd0a27168b418\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-win-x64.zip\",\n              \"hash\": \"731e724e0527528bf75a4ab823b18300c927655efa1d00f477003a1cc4f22160a23c7a143111a7480d1cbd0eec8b51b25489d1ad5f0862dcb83860b4eebac107\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-win-x86.exe\",\n              \"hash\": \"6a65de3a01ff0ff64246efe4e21f2fc45dbc4f105873e011efe46d0ea9cba0da1339d7c592d37b5c6c7728a5286b2a2f99ffb295de7c65c4863a1614e5f94c30\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.611/dotnet-sdk-2.1.611-win-x86.zip\",\n              \"hash\": \"d6e4cd0738bf95e497162e02ff820fa92fec7e63a05935238fe054a785ea847657230121ccfe74eacd68ec4ba78580006565e9f2ed67773c3441e92bc0394a8e\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.514\",\n          \"version-display\": \"2.1.514\",\n          \"runtime-version\": \"2.1.18\",\n          \"vs-version\": \"15.9.23\",\n          \"vs-support\": \"Visual Studio 2017\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-linux-arm.tar.gz\",\n              \"hash\": \"177a24599172d5586614efd0787583148c266aff4406f118c7e6c253636e333c2d0e8b370052b9b44aaba3753dcfe629b62343cbd06f42d463e8b5baae2d2dcc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-linux-arm64.tar.gz\",\n              \"hash\": \"4b8afef48a7c2db90943488df2e9b0084395272ba177640bb131def568169037413544f69e28b12a2ebae903a40d1b8753190c379674801d8399b1f0a6543da1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-linux-musl-x64.tar.gz\",\n              \"hash\": \"a2a4baf58caabc0aef376138c4d14ddeb3f4a1a64fe8bbfe70e903cbf8985c22a3a804afdb7458cb3efd3aafabda18a0bb83c0de8a93c63b193211bae3455e59\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-linux-x64.tar.gz\",\n              \"hash\": \"8d44a96a530745f54bec8ffd24bb63bc1405491a24be1aa6376470c43a627ad55035d7cfc467e8bc1d9a06f9620c6daf63d29505ac8295b73f2d9dd462667fbd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-osx-x64.pkg\",\n              \"hash\": \"b2c48d4d487c061f3d3c592f9aa86fd246fa626f5e6dd527981d1274feef54973b872e373310cca35bf2196388969826bb7c320a896b64138bb29fb7852194b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-osx-x64.tar.gz\",\n              \"hash\": \"40599700096a8709e2699f83247cf2a2765620578d828e14b4079b30c09d84d760775b8cc5cab3b0d54211afd80c03dde2ea613e37cc06f48bf09637de87747b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-rhel.6-x64.tar.gz\",\n              \"hash\": \"ca588d0e0e32fc3cd4c7201163f24c5bec0b459f66acde88a8ab1174d3b7b88aa632bc11db14c7489c9abdd6ae3114d91d7f86b2643dc910554bea3ccc8d4206\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-win-x64.exe\",\n              \"hash\": \"948ae07d9ccc367e91c392343c3fb12d6401ac784b9966d3ba26e0b9ab88ed6d5f53b1ffce5c7aa694aa90a78a8e35f053666825620207a06ce114b0b45ed9a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-win-x64.zip\",\n              \"hash\": \"b8354b2122a84e5e617b20f33e3142af91247b8fc43b0f1ec3bce34d1e0b727369ffa888726f23553835c114abfec802639e35d3ec337c2352bc23a32be27956\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-win-x86.exe\",\n              \"hash\": \"c316516e9396eed2c9c034fe7996762773049a0eb0a1b0066311353101bb1774d3fb7e23b107b6090010e2dfd4f44ad130c5967e4979df7dc53b8728f405219a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.514/dotnet-sdk-2.1.514-win-x86.zip\",\n              \"hash\": \"8b8c18df2b61b711eef7e987c233a6260d3833bad17458b89c923614430f0db9835c7796298af0db2cb0d9a3ac330713203059b451b47bcabe3c836e2eda2621\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.18\",\n        \"version-display\": \"2.1.18\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.20105.18\"\n        ],\n        \"vs-version\": \"16.6.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.18/aspnetcore-runtime-2.1.18-linux-arm.tar.gz\",\n            \"hash\": \"406119603dca8af68d9d91f1f622526ab6e43f13e2c630906bef92072bd73fc98207e93a1448f00a7df4b3e93f9e600b7ee43d6512285f0ab6147d83e3169d6f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.18/aspnetcore-runtime-2.1.18-linux-musl-x64.tar.gz\",\n            \"hash\": \"b1233a843fbb663e1bd3380b54737cb3caaf141f4a67ed68bbf908a5afb9a840bf9aa51306790db02da2a9945060c023acf3de04d7d1d8441eddeebee5d8e252\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.18/aspnetcore-runtime-2.1.18-linux-x64.tar.gz\",\n            \"hash\": \"83d58102ba9d9b9a6f4f19ea799fd20939ff013b3d2e3348e363f41f30c1e902995f59538f9b04d8b671b310598206736ce7dd0acde51ce3847beb3262293d60\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.18/aspnetcore-runtime-2.1.18-osx-x64.tar.gz\",\n            \"hash\": \"c1180beed138aa2b59944b33a17b46631d97f855b12169e3b609c1dc768b46d0457e491bf498b364d552bb25435522c391beb794a959df68f129faf9dbfe82d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.18/aspnetcore-runtime-2.1.18-win-x64.exe\",\n            \"hash\": \"3138de5c6870f9c4ed066098a786b4237df6cab311226d8ebb915cb0bf83a9d9ece90d491dbbd45cef464f7a158c21eeacec72d4e231c0581387617eba625f61\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.18/aspnetcore-runtime-2.1.18-win-x64.zip\",\n            \"hash\": \"47af1075d49741bf47d8c1e6cff19c40066fb990c68665f19393fd10af4fe79c9f9d6fcbf4d3066682534049d6120bfd274689652411932bf91192e41172489e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.18/aspnetcore-runtime-2.1.18-win-x86.exe\",\n            \"hash\": \"3fbf77e9ec9702375be9bc548130f789b86de8c56b84171d444226a024515e0e44aecc35a45253712a83f7c19721e2e036f618ff4375789730d63a9e8be6b58d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.18/aspnetcore-runtime-2.1.18-win-x86.zip\",\n            \"hash\": \"0451d04de74c477719d9504f76ff564e51d8c1c84198a713e335fc3083c215af87e62775435f29e0bc1868ada162f9f2975a80f3c8b66938bcb4e96ea183c1b1\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.18/dotnet-hosting-2.1.18-win.exe\",\n            \"hash\": \"284eeb85a5d67d02c1ab96188fe0be1020d177b3406a3be7283c9a250ba39f5f8eccee2e365c6d180721bf5d10b545e7f6b9e3f2f42a45dd54b4ec49b457c647\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.18\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-03-24\",\n      \"release-version\": \"2.1.17\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.17/2.1.17.md\",\n      \"runtime\": {\n        \"version\": \"2.1.17\",\n        \"version-display\": \"2.1.17\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-linux-arm.tar.gz\",\n            \"hash\": \"10572012d9d4215426a32816dbd6a49f6ad9083a73ecefb0786a0108c7ee61d721afbecb7acd2032f77332fb9c7c737fecf69000bd3566e5766619059caeddb3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-linux-arm64.tar.gz\",\n            \"hash\": \"d14d8ad1d91cb6513f3024689561aa830a27f845941275491d1340a14bc4356c88593839d1dfad0604a5b7121cfe7393cd7d0041a66feb121788b60bdc1817bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"11b0cdb54b71ca07ade783a03dd8ca9b415ef351a6c8aa3d7c56af01af5dc2965f5cdb18d2184f65348ff1f69d51b69ff780200a13b79dc3a50674e1dff875e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-linux-x64.tar.gz\",\n            \"hash\": \"ee2a189436858ca30b5bc308102fd05ddb145a471d878007073d4a7fbdb9010452523de2a4f6780e61fcd58304d4b7fef5dbd8c46fec9a05da82bc3d3a443ad3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-osx-x64.pkg\",\n            \"hash\": \"e5149066699474f3cbbdca764156fc1ba1022d7626314352a74ad80909f539e8479afb626db69e85ef141394889e93fb282f5e56150e6e4f721371240d5bbd5b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-osx-x64.tar.gz\",\n            \"hash\": \"ba5972d9d4e6246ec4c999ca59e1b7927bd01e5e58cdf8140675989e12929d6ce06a922e1bb227244bbed4bc35995e838e35cd8a4dea270bffadc15beac7b7d0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-rhel.6-x64.tar.gz\",\n            \"hash\": \"595105acf3dfd59aefdb0021461f2e008990b8bf68148d87c6c8e1987a6bf5910e6816ac9de9c1bc49b59fd8df6867bc53f2ec62cc0744cfb8de77793e02471e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-win-arm.zip\",\n            \"hash\": \"8cb7fa5701ecb1578650b36bb59d213af788db6ec16a7f01155f19a83140774fc7f1f1c25ed5420d936b49887deded5698e23c317da6d7e3fd0a070468193b04\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-win-x64.exe\",\n            \"hash\": \"76310d2e6aa7479ba5b4ac82cf75350550833c360f98439e38789bb1d41b826d036bb40829cdc14deee7644cfd24937d5745af1a7f5adbd456393e0a4ae2faf3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-win-x64.zip\",\n            \"hash\": \"a3d8372c58ff46bab27604cc6a250edeb8d2c50a3e25edc955da185c6afcb07d37477e200e32620ea21eb8bc06b57d673331a25e9ca596d1432a216cd8025f23\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-win-x86.exe\",\n            \"hash\": \"1c1d5d76c80ff22174b94924253e39bd3607d2771e51017482e28f9fca3038befcc75ea5b1778fb40fb022553daccd30df669e920228e189259e7cc3cda9d656\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.17/dotnet-runtime-2.1.17-win-x86.zip\",\n            \"hash\": \"42f37e08fb7fc8521916de5d986907a2a3d35dcb3cb3d920b9606cec11b4931cb5f17498679ba9999030946b8cc5cf2fbea15015555c83d8efe815b29759410e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.805\",\n        \"version-display\": \"2.1.805\",\n        \"runtime-version\": \"2.1.17\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-linux-arm.tar.gz\",\n            \"hash\": \"3690df6eeea6ce16986450d442e1881c42164250399f11fcc05ee539328b2fe0c54cacf08b1c9ee63dc38a468d19e4b4046ca08b430cc2ba47f8f03803caa7a6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-linux-arm64.tar.gz\",\n            \"hash\": \"917e48c9f6a46afd8600db405b5eabe5a067d3579c4976e8ab4626a909188a53979e4cb3119f3203f751ba9d760f8e38bfd6b4759f0887cd8cb18fb1efb159ca\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-linux-musl-x64.tar.gz\",\n            \"hash\": \"6eb76f405c339d8d662ad152b9cd9d0a77957f5538d44bbdc0d2c66f5923bd3064ea9fddcd20e2c2e4a7a051f97e0e99fa0a30ca1649f2c0c6ddbfaaf11831d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-linux-x64.tar.gz\",\n            \"hash\": \"ceceaf569060c313e9e1b519ad2bfda37bb11c4549689d01080bed84b8a1b64f4c8a35fce4622b2f951a7ccf574e7ea4552c076fa2ba302846d4e1c5ae5b3a0c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-osx-x64.pkg\",\n            \"hash\": \"a969eb39c107a7bd8653e6ab163f4f06934e8b85646300b07f152741716505c00e3fa3d944fb1d76f17c410c6546bbc266406fc764fb3742b0ead10c248ac869\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-osx-x64.tar.gz\",\n            \"hash\": \"9f57f777b3b7f49c9f4324d2ac98aa98a3da5437fd3fc24c55e7de802a94ecd2f45594841bb861f01edb86e074e71f861be10ddcf7975b617cce7902065d5006\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-rhel.6-x64.tar.gz\",\n            \"hash\": \"e73ce39008ef92c7a2669bee256843de797480ce68d907e0ac09f7903ff958749dfd70dd426d359e73b155fe65cfcd5bb4067b35ddd2f8caf4ccdef08e24fdff\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-win-x64.exe\",\n            \"hash\": \"25b52e55362a59fd8c1d7ee33f3f962b069092ee4dc1ccd0eaed4c99fac2bb9d6f51dda1a4305c12c0eb26e4ed29e3fec168691a516127d68b2887bf767ee846\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-win-x64.zip\",\n            \"hash\": \"606e4a68bde801f5537e56a4984aa7bc748a1a5489ca5992ec90bb8371e6deef4262be261f5cbce761d35d02b40fd4bd07893899027d8f5d603f5e58c204103d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-win-x86.exe\",\n            \"hash\": \"ee843e57b8369245495ecb717bfc77ce701fccdb3b9680ebb938fce8ea31596ea944fa27b9f89f398627c2a295cfa9a94b6614ba253ceafb93f545887fbec973\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-win-x86.zip\",\n            \"hash\": \"45c39cb30f9b3dd6a412e418ce216fac5469eae45430b0a88fe94c925d11d3a7751e5f82d0e5caa5e4bebf5cbcc4d89ed323a66ff221656459a7c8101034d550\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.805\",\n          \"version-display\": \"2.1.805\",\n          \"runtime-version\": \"2.1.17\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-linux-arm.tar.gz\",\n              \"hash\": \"3690df6eeea6ce16986450d442e1881c42164250399f11fcc05ee539328b2fe0c54cacf08b1c9ee63dc38a468d19e4b4046ca08b430cc2ba47f8f03803caa7a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-linux-arm64.tar.gz\",\n              \"hash\": \"917e48c9f6a46afd8600db405b5eabe5a067d3579c4976e8ab4626a909188a53979e4cb3119f3203f751ba9d760f8e38bfd6b4759f0887cd8cb18fb1efb159ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-linux-musl-x64.tar.gz\",\n              \"hash\": \"6eb76f405c339d8d662ad152b9cd9d0a77957f5538d44bbdc0d2c66f5923bd3064ea9fddcd20e2c2e4a7a051f97e0e99fa0a30ca1649f2c0c6ddbfaaf11831d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-linux-x64.tar.gz\",\n              \"hash\": \"ceceaf569060c313e9e1b519ad2bfda37bb11c4549689d01080bed84b8a1b64f4c8a35fce4622b2f951a7ccf574e7ea4552c076fa2ba302846d4e1c5ae5b3a0c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-osx-x64.pkg\",\n              \"hash\": \"a969eb39c107a7bd8653e6ab163f4f06934e8b85646300b07f152741716505c00e3fa3d944fb1d76f17c410c6546bbc266406fc764fb3742b0ead10c248ac869\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-osx-x64.tar.gz\",\n              \"hash\": \"9f57f777b3b7f49c9f4324d2ac98aa98a3da5437fd3fc24c55e7de802a94ecd2f45594841bb861f01edb86e074e71f861be10ddcf7975b617cce7902065d5006\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-rhel.6-x64.tar.gz\",\n              \"hash\": \"e73ce39008ef92c7a2669bee256843de797480ce68d907e0ac09f7903ff958749dfd70dd426d359e73b155fe65cfcd5bb4067b35ddd2f8caf4ccdef08e24fdff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-win-x64.exe\",\n              \"hash\": \"25b52e55362a59fd8c1d7ee33f3f962b069092ee4dc1ccd0eaed4c99fac2bb9d6f51dda1a4305c12c0eb26e4ed29e3fec168691a516127d68b2887bf767ee846\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-win-x64.zip\",\n              \"hash\": \"606e4a68bde801f5537e56a4984aa7bc748a1a5489ca5992ec90bb8371e6deef4262be261f5cbce761d35d02b40fd4bd07893899027d8f5d603f5e58c204103d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-win-x86.exe\",\n              \"hash\": \"ee843e57b8369245495ecb717bfc77ce701fccdb3b9680ebb938fce8ea31596ea944fa27b9f89f398627c2a295cfa9a94b6614ba253ceafb93f545887fbec973\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.805/dotnet-sdk-2.1.805-win-x86.zip\",\n              \"hash\": \"45c39cb30f9b3dd6a412e418ce216fac5469eae45430b0a88fe94c925d11d3a7751e5f82d0e5caa5e4bebf5cbcc4d89ed323a66ff221656459a7c8101034d550\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.610\",\n          \"version-display\": \"2.1.610\",\n          \"runtime-version\": \"2.1.17\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-linux-arm.tar.gz\",\n              \"hash\": \"4f0df363d37e00603621550e20ad188c99968079b8b48b856f713923f2920c9d8d6d374187e980a1e9c80c95eb9389ca90a8828613dcb7162da4d78dd3956875\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-linux-arm64.tar.gz\",\n              \"hash\": \"2078c57a4d2b537ff0d40bd830fd52e476f5e2eca92c91eeadc0a5f39a17521650f5b6ae8f9c2a09cbad3d315d81f618ec30bfd6c8d107286ce4519fd0f56fc4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-linux-musl-x64.tar.gz\",\n              \"hash\": \"83bdb9e59164b97bfc847aa7672fc437ef484e19e56d67f36e2a7d255d8cf5b83c28c31eb7aa19aac072d38187e9144459a5e758dfe31950920b38fca7a39d80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-linux-x64.tar.gz\",\n              \"hash\": \"70e86285c4ce0d222f4b6c814e6de9be9db2c99584117600e936a57357d4b670844c877f6a04915b730b89277f93557e882bde976fb39bae29df7a0f7bffb367\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-osx-x64.pkg\",\n              \"hash\": \"22f781ac1aa7a1fae37ad252ec0885026e3a5915204efed95fb56be927aca2580dc453da208ef85c9b532e3e27c9c44b9195df16f1d623b9f392d79c79914582\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-osx-x64.tar.gz\",\n              \"hash\": \"5b5a7e88ffd91d99ad287551ccce5d229aeb1fcfb2edab5100827926b34a3a96b40bd64157efbf0e4527a705eff0440cbb498134054b206d869dd54c5f631ff7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-rhel.6-x64.tar.gz\",\n              \"hash\": \"14ea58dd1b2baff9c50fd308699a6a3f5fe059e2c7ff8f2fb0b35175c08a6f372b10513e65aac46a275d704de0972d817a1af43a8a0f35bae4acbfdbdd231639\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-win-x64.exe\",\n              \"hash\": \"949342579c369f3b0df80d3799c676badcecdcbf2791944c09c67d9cbba464799448bd56527f3800abc76198c12548710adfa4d164f2e833ee220a6349e474e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-win-x64.zip\",\n              \"hash\": \"0d970ea12fe62982a9bf73af8c04f8432affa5f9a80c87ed01a6041ac6d6bf1f4592e4d1ba47b602166d8051248dba2400a3586a2b365f54b8f1dd7c69768308\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-win-x86.exe\",\n              \"hash\": \"f8561bc25ad632aace2bfa6d3e1aa27584dab3b942a76a0522acea5de9bfd740dc23874c5d367877555cd42cdcf1756066358a7c358c496dd584c7c4f60706ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.610/dotnet-sdk-2.1.610-win-x86.zip\",\n              \"hash\": \"68c047002554320abf8ceb8c400f7bf23e357409af31f6bdc235002a31fba3b19a245a8d0017686b0ba7c5d9dd08b68c8df082e60d9cdbabba741af5639bc2f2\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.513\",\n          \"version-display\": \"2.1.513\",\n          \"runtime-version\": \"2.1.17\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-linux-arm.tar.gz\",\n              \"hash\": \"aec4961ae0dba92a6d00db5610e8ea688f5a5feb1f3b852a3de59685606e47d2ad7fb035eb75189a074a95a9621eb6553870366d8801d0717ddf85ab1e2a3550\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-linux-arm64.tar.gz\",\n              \"hash\": \"11dd3c0eb12a616cfeeee75e31756dafb974349806b302ddd41fecf55d96813908ff417677092dd10fec9df8d58c9aeb229c43608d097456127449c7795b2290\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-linux-musl-x64.tar.gz\",\n              \"hash\": \"02197de8e659c8d100c80c4c671726335cdae49f30f53e821b495f3b9529d2b6a48297e05bcb1a8e144d5583ad5cee40e3b52744eb8683da48347ae8ee3dd105\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-linux-x64.tar.gz\",\n              \"hash\": \"2313c0e1f54ad911b948b68db7bd9529c799ae616cf269ea29f9d99735b58da434059bc4506d8fa7709b03fe9f5345b0fb7fd4b847b819d900f2a7acc2522ea8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-osx-x64.pkg\",\n              \"hash\": \"78e8cd4ad940cf2651f722c98d9551f2f5c9cffea0be3a8a5cf1e9105a8a9f418cccf67e232461c0652572139df7b4b291bf2a3cf76d9e709f0a2ea03dcf40e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-osx-x64.tar.gz\",\n              \"hash\": \"827bfa44214b2c45a922ce1bae2e7d8cc7b75e9ce1e6494e24578cfd406458f34d0071f56f0a8354ea1957031b6435f936eb7454a1ffcfbc0de6371b73be89b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-rhel.6-x64.tar.gz\",\n              \"hash\": \"0ca6def62eb15e6a61843a55c53c0867c7bdc9115cb94851849ba397cd6efe67cd19f7d5b16c7a1be260b92d0ed82a12649ca41f70ab22274220c8fe875601ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-win-x64.exe\",\n              \"hash\": \"e066097545c05fd9c381527a28b3d8152865162553a2fc34b610130d7a9ed992b5952235629561a839592b1a982cd71989a7e830cb2c07c7781b5ac6e7e482dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-win-x64.zip\",\n              \"hash\": \"6fbeb5ab3ae9cb279a0ea92202d74b177da5ebe0ce599e28664523f85a7acf673e2945cc2b27d6167f46765f0fc0aece91f6b13d004b24ceab5c6384a95f5240\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-win-x86.exe\",\n              \"hash\": \"4b088c3e492bfb5ea05829b02a9440284528a749cf34069e66263d267337d277ed34bf8baab4670270be5e023fbd8a9dbaa8da1c0939aec5722b5d0857612099\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.513/dotnet-sdk-2.1.513-win-x86.zip\",\n              \"hash\": \"2975e8627c2ccb644d5fbb21fbad338a4e511dcb9290b957d599d73dd8785ee7bfffee62224400b1599fc5d5d7aca6c6eb0c2d63532b5babe52e8974284f924a\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.17\",\n        \"version-display\": \"2.1.17\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.20052.17\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.17/aspnetcore-runtime-2.1.17-linux-arm.tar.gz\",\n            \"hash\": \"945a3de10e36f356acb6f6c84534e88ec49fcb6636e0351467aa1a449e79f4e3bf9fb1bfba7ed278fdd92d31c51ae6c638f0a7511fdbf42d29bd1f92903bd87b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.17/aspnetcore-runtime-2.1.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"6edb4648fd82d6efcca2383fe84effc3e8b145185f844c5afee3b59605b489b73cd41216112e3ee4638c2c5c59b7f8339f34294a9b844f3e1a193e2d30633a0d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.17/aspnetcore-runtime-2.1.17-linux-x64.tar.gz\",\n            \"hash\": \"92ac51b814357cf1e8050cdd3803a7efad2147b7f0a4a97ce2aee34fcd02ca0b1c97f9f47b57b3b798e047b1947ea522fdd698842a1c020dcc05f759093639f1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.17/aspnetcore-runtime-2.1.17-osx-x64.tar.gz\",\n            \"hash\": \"6b226d56683526009f46d6db99504360b594e75952bc1a79a15d0dd862f6bf0445dad020594e519d078570dcb840f64bae8276f73854ac855cc9efe0276612c8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.17/aspnetcore-runtime-2.1.17-win-x64.exe\",\n            \"hash\": \"4522fe10858074017caa0f5004b487f8a892ba4d580cc1e432c6ca5e569796172932b7a207231a468e66ec32bd5f81352cdbe5ce33d9dea1e4d0b10fba1802ee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.17/aspnetcore-runtime-2.1.17-win-x64.zip\",\n            \"hash\": \"4976639548bfaa2f7e265f8968e5e80d149cb5bcece11c4f24cb1337b2bd20eb75cf346efa24539878a4237a061eec3144a21f0e7946361cb21b0206c2b98626\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.17/aspnetcore-runtime-2.1.17-win-x86.exe\",\n            \"hash\": \"988a1db1accf5658a16dcc156e17b0a9d5038c6fda1d5909b411ee2a94a53b45b3dee0d8a9987a9e1032295ab37c625ff1e0d17e6f89f3821f2811421e1e7678\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.17/aspnetcore-runtime-2.1.17-win-x86.zip\",\n            \"hash\": \"e70701375b4b9f117e866fd62bbe0513b653c9f12d812121077d6528308317afed4bccd071ad32ce2b8d534c1c33150ba84ef1666c701fee07a3f3d9ea222802\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.17/dotnet-hosting-2.1.17-win.exe\",\n            \"hash\": \"f9b205f24f9264b1b65e7d32706320a07be87ac4fc8c4d41ea861dea5c95dbd676b3bfb245dd904c6650ebee907884914e871644692dee761e830d80595ee9ec\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-02-18\",\n      \"release-version\": \"2.1.16\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.16/2.1.16.md\",\n      \"runtime\": {\n        \"version\": \"2.1.16\",\n        \"version-display\": \"2.1.16\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-linux-arm.tar.gz\",\n            \"hash\": \"a3cbe1c4dc562797c15b880803b0bde2ce4606d31e91b6d9c460e303a4809ddd499051a89add8fc419a41e0b8cacc46866e0b6525a4fa12b8fa02bd5e15230de\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-linux-arm64.tar.gz\",\n            \"hash\": \"209cb8a60f4cfabbef2e7870ad7c02218d119379655aac764d7318894f7585b8ea1ed3c3ab1c3903719f7e15d003f7e87c86dfe1860cbe7f0b9bd3df02a5a58e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"d8b326d30fa870749e657c41eebc982a059fb11b9edca6cf7f3c19b6b152f1362f80783a772e5a29a51876f5da2e86efea419f793685bd0d8528ce66a47f4eea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-linux-x64.tar.gz\",\n            \"hash\": \"b49046a3f5ca102f36407ef0505d333c6c431862ab5ce76b25a516b91eae07dd96dd80ab1b6f82c44d65ee4203f029e2597ca2eac9ee27fcd2a5a118ead7bd0f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-osx-x64.pkg\",\n            \"hash\": \"83d7be01676eab36b032c134cc7251e71fdeaab2f72024eddeb2b7110e27fa55a46ad6bc4527dd66c79f9553c2badc3b785ddfa5647ae4be4b85303a6469fafe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-osx-x64.tar.gz\",\n            \"hash\": \"4e68eed074858f1ab48175e6dd13f9baffe7035341bedffd1720353035eb30eb1b6b4359e93b736c37b57df7a3799545c9bfa62d4744f0a0a290651b9c5ddcaf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-rhel.6-x64.tar.gz\",\n            \"hash\": \"99b8d88450d2ee0cab16dff23742335e02a1b4597c5a5cc4d05eba1f8631a930ce0753710ba68768f65cab30d5b392de20c53ca2eab258f1bdb6604824478b06\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-win-arm.zip\",\n            \"hash\": \"888f691d243205393e2ab61d2bbfbe453fe0054b010d0eba5aa65216a7a590a7748e6e099b22dec68d114b893c58b83dfb83dfdb85d8a634cf3d1bbe6b38df25\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-win-x64.exe\",\n            \"hash\": \"fa2bdd8ed6d440f75ebb2ead883fbc8e40def25c6edadcd35c027e5e9e342a0912692d9153fa92560b5f5e7d1ea482d23a941090831099d6549aed423b82a93f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-win-x64.zip\",\n            \"hash\": \"76e1a3948c7a2662e59bffa4f8d819dd36142948d78a4f5c2acd1a6bea8658fddd4f17c1096469b0e42c9e9fb145cd31fb28c05228d0711e076411f12bb8d144\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-win-x86.exe\",\n            \"hash\": \"e4543ace5c8951db2fe063b4051426aa99de5f2cbedf97b857b6932e653c5f6c956ea35301a16ecd77bde258d527b0672b445383d8a41249d11e635d5bca55ec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.16/dotnet-runtime-2.1.16-win-x86.zip\",\n            \"hash\": \"3a431f13f3fff641eeb81a82619dada70e458d7584a1343af20a03228a158f285bac1cc8e0b90d5793106e52228090a0de36f3133718486c84629a8be88f9d39\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.804\",\n        \"version-display\": \"2.1.804\",\n        \"runtime-version\": \"2.1.16\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-linux-arm.tar.gz\",\n            \"hash\": \"5a2427fd3461aa5dc5a90857e7d599447c29bbd36daaf216ce2d42d6f430ad5b3278168cfaf5d241bf1340df693c93c5beecc95a5679aab35f40dcbd11dcb486\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-linux-arm64.tar.gz\",\n            \"hash\": \"4f30381658ca8e45fb7da0db23f5e6a24a61db42e534d097bd59691bb058d1a71906d4386cbcf673eef582616af3b7400cecbdf10959a418bed7a6ed70f7939a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-linux-musl-x64.tar.gz\",\n            \"hash\": \"325b6a4c8b019ac3b6fafeda042da7893672fcc65185385c39f97a50fbe371262282da22ac0e9acda54042789b33519d29fc4f51e4e6425e0d4b15089c6eda5d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-linux-x64.tar.gz\",\n            \"hash\": \"82b039856dadd2b47fa56a262d1a1a389132f0db037d4ee5c0872f2949c2cd447c33a978e1f532783119aa416860e03f26b840863ca3a97392a4b77f8df5bf66\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-osx-x64.pkg\",\n            \"hash\": \"e22b8ea195ac6cd0ebb193197d33ee718dce6e1394d20fc2282c7cfcc410f232237c1e78947196af8e8f5507e5d020bc044afcd7e37e27832123d9a7e683e0ad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-osx-x64.tar.gz\",\n            \"hash\": \"8829cad78096bbc1d101ced08c373e44a4d7a8ad20eea80f704d9b4130750c901abe59cd231a0d89870013dd250b0a1e8b9adbdefb209df1afe6de8f1b052b1d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-rhel.6-x64.tar.gz\",\n            \"hash\": \"4380760d1e7ab6ac5b4e19cf988be455a6c1ef2bf3df5dde553806fa2ef85d207ed3d1315b719bcdeab97641aa90c91efaf01efbafe55c41abd9e7956f1c66ca\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-win-x64.exe\",\n            \"hash\": \"411b2e9afbbb44ef7239ee9e83dc1db61049473b36edea09e184f98a2cf9f10499dbc8d043df069af86625392154a09d26843edeaadffa0113edd7380d32161f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-win-x64.zip\",\n            \"hash\": \"9fcd2eb1f87f8ce2c5117e774ac8954ead4905f154f5255b61599a1d1ef6a6b8aea7e28bcc4950936db32e2351ec387d12c7ea878342d37bdb980ea1856bb349\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-win-x86.exe\",\n            \"hash\": \"d539e4cf897e167795c4ebfbfcbebcb57816771235ae667e87617da33ec1ac42a99ace81c0fa0d434ab26157af6756488c92247042b1c0153981e50dd0ac7d51\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-win-x86.zip\",\n            \"hash\": \"77b796be3706fd98a8158edd7afcf58a1572837d9f09ac22c6f5059655dc39c18345439b7ae434f86db5766f540bcac9a4aa46811bd8ace1b37a9c71cbd3ec98\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.804\",\n          \"version-display\": \"2.1.804\",\n          \"runtime-version\": \"2.1.16\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-linux-arm.tar.gz\",\n              \"hash\": \"5a2427fd3461aa5dc5a90857e7d599447c29bbd36daaf216ce2d42d6f430ad5b3278168cfaf5d241bf1340df693c93c5beecc95a5679aab35f40dcbd11dcb486\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-linux-arm64.tar.gz\",\n              \"hash\": \"4f30381658ca8e45fb7da0db23f5e6a24a61db42e534d097bd59691bb058d1a71906d4386cbcf673eef582616af3b7400cecbdf10959a418bed7a6ed70f7939a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-linux-musl-x64.tar.gz\",\n              \"hash\": \"325b6a4c8b019ac3b6fafeda042da7893672fcc65185385c39f97a50fbe371262282da22ac0e9acda54042789b33519d29fc4f51e4e6425e0d4b15089c6eda5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-linux-x64.tar.gz\",\n              \"hash\": \"82b039856dadd2b47fa56a262d1a1a389132f0db037d4ee5c0872f2949c2cd447c33a978e1f532783119aa416860e03f26b840863ca3a97392a4b77f8df5bf66\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-osx-x64.pkg\",\n              \"hash\": \"e22b8ea195ac6cd0ebb193197d33ee718dce6e1394d20fc2282c7cfcc410f232237c1e78947196af8e8f5507e5d020bc044afcd7e37e27832123d9a7e683e0ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-osx-x64.tar.gz\",\n              \"hash\": \"8829cad78096bbc1d101ced08c373e44a4d7a8ad20eea80f704d9b4130750c901abe59cd231a0d89870013dd250b0a1e8b9adbdefb209df1afe6de8f1b052b1d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-rhel.6-x64.tar.gz\",\n              \"hash\": \"4380760d1e7ab6ac5b4e19cf988be455a6c1ef2bf3df5dde553806fa2ef85d207ed3d1315b719bcdeab97641aa90c91efaf01efbafe55c41abd9e7956f1c66ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-win-x64.exe\",\n              \"hash\": \"411b2e9afbbb44ef7239ee9e83dc1db61049473b36edea09e184f98a2cf9f10499dbc8d043df069af86625392154a09d26843edeaadffa0113edd7380d32161f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-win-x64.zip\",\n              \"hash\": \"9fcd2eb1f87f8ce2c5117e774ac8954ead4905f154f5255b61599a1d1ef6a6b8aea7e28bcc4950936db32e2351ec387d12c7ea878342d37bdb980ea1856bb349\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-win-x86.exe\",\n              \"hash\": \"d539e4cf897e167795c4ebfbfcbebcb57816771235ae667e87617da33ec1ac42a99ace81c0fa0d434ab26157af6756488c92247042b1c0153981e50dd0ac7d51\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.804/dotnet-sdk-2.1.804-win-x86.zip\",\n              \"hash\": \"77b796be3706fd98a8158edd7afcf58a1572837d9f09ac22c6f5059655dc39c18345439b7ae434f86db5766f540bcac9a4aa46811bd8ace1b37a9c71cbd3ec98\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.609\",\n          \"version-display\": \"2.1.609\",\n          \"runtime-version\": \"2.1.16\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-linux-arm.tar.gz\",\n              \"hash\": \"6985b14e42af414c54d49fe7da1c5b423c00f3bce7e1b3695aaabb78ee8db6834399a26d52f9faac713f0d72a9eba31d35daf0a7a02b6c701ba85cac9565270a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-linux-arm64.tar.gz\",\n              \"hash\": \"9399533da7b1f6bff9355e94dbb620e48f799060451698512a1dde16c435ccc7545a02bd54e0b1d2023f274ca579ae8ce20fb410cf57a72eee84db36f37f2c5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-linux-musl-x64.tar.gz\",\n              \"hash\": \"6cc9e3da8c6711b30d071c9ebeb02aaabc07013c0ba1d978ae9b74eb0147e9f4c81f0d43410837698177290264c22b08ac28c4e1b22bb65f824d173f09ae00dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-linux-x64.tar.gz\",\n              \"hash\": \"26d246f696c9d009471dfceed2ebb5cfd1ebf9f55056c12b64a6ab2c7a75fe162bc3f1a75a7e7a1f81733feee4c4e7acd009e9f6461ef6924baa1aa14b024d1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-osx-x64.pkg\",\n              \"hash\": \"9ee9badbb477ae5b97778742db434aec8d93e4550550cd5a7af3da346fd612e3feab7a6707015ea9dbbde043269894bcb5bb94cbedf750eced8943d3b467faff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-osx-x64.tar.gz\",\n              \"hash\": \"1678b5e6f244bfaf9655b4035fe054f866671910e016fb0e2eff3e2cc4616ff3a804dbd2e42160d6479f5835cd94f3758a930ffee0bc5a78c38836fb4958eb34\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-rhel.6-x64.tar.gz\",\n              \"hash\": \"0273ad354fef062470a29ec00231104ef155577a1f59fc49872a1acf05e7c4461bb2e514af5f073b4de5ebe186ce17442a4aee1ef6ff450382af259baaf34dc2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-win-x64.exe\",\n              \"hash\": \"a47a497e1609463234719cc29b44b28a4fae69d43ea3a54be1251c980f29ceaf44504eb437ad634f4d2925b12b2047360848747214c2cf4dfe3a3ee0a3982d2b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-win-x64.zip\",\n              \"hash\": \"0652569a4a6115b7089a30810dec5bdfc08929d2b9e44973eb57c60d514fd4b565f9f50022b760009ceb8eef254eb5c635ee0c0ee885e2b000418e1345fe99ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-win-x86.exe\",\n              \"hash\": \"c3305c6eed0deefbc0c041b4a036a463cdbd5cba6d1c702b0448ef0176a06f1dafc50297ed8e1a5d94f565037358ebddb90d7a4a2c177c0bdd10025ca2c128f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.609/dotnet-sdk-2.1.609-win-x86.zip\",\n              \"hash\": \"9543d5c9093ca7367962f1e6ff0386d9efa371ca3da903b2469b7ac92de1a70ebbe087fdca13238e086ed7b9520372f097934a32b225373612dae410a106299a\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.512\",\n          \"version-display\": \"2.1.512\",\n          \"runtime-version\": \"2.1.16\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-linux-arm.tar.gz\",\n              \"hash\": \"4fc7d6ebdb5cf5d062b6e13934ad506326a1351130919e2b4a1b33e2a55f1730f1c0f70ceb33eed299e4196ae416634658474575d6d734500ef6c5e81ea6b00a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-linux-arm64.tar.gz\",\n              \"hash\": \"f1ff89759b85a10511ef4540645d76f3052da77f8483e070edeca182fa5a034019d0e27e12272d9c8319dd1df61f1400b6eb4415bb2a170a24612a42f6ea3792\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-linux-musl-x64.tar.gz\",\n              \"hash\": \"af91e5d4b3a19d98c060f35067d1ebdbf864119e45a251442d0cc36667692233f711ea60c64937338a31d83d51174fddc5a2bb836d10b5b97d3ad0226cf093cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-linux-x64.tar.gz\",\n              \"hash\": \"820bdc189441e39e8d5f22d3d2c45dabede7d6d96e4bc39a3634f53382d34c6431b78616064ec8ad7b2a0f8d3527df7cc5a5ca74e78734c906b817ffde4b47a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-osx-x64.pkg\",\n              \"hash\": \"1b0d54737461e5592f05f9f63ef3dc1080d1390908b571c828f54442f9d1cb8172fc50650a96bad39a7c879191f669e63a34e23654122bba641ec1a0fd31b3ce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-osx-x64.tar.gz\",\n              \"hash\": \"4bf3c86436a04a9b4a71a720f2f8e9d2426b95610c18c4627b6b3663f0e2bcf56ced9bef0b7db3eebe411526bfa9510e1232146968a5518d798c7bf5d1ac60a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-rhel.6-x64.tar.gz\",\n              \"hash\": \"2f962fb0ae6201d4f0b2c61a7f323eac3fd3a81736f54150c81c83c18348cf77da965416766cf0ac55ed9d0b0ff0978d069b8546a73a50b78acbda1ed16fe18d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-win-x64.exe\",\n              \"hash\": \"fd26060ae46d550191a06bf5b7b25435d62e0af8e6d8e58b322c370303623532be12719474a2faed9fd20ea29e7aa18160d397c8c2554a00e2d1e97b9d12fcb6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-win-x64.zip\",\n              \"hash\": \"85fc23f01c33fa81c8f78838ee2c0bf8dabe29d72233d981918b8b813cc1c01097c1f584b4c54f0f0e8e693ffe110bd1cac33745112f45d5f6bea7607d94ab05\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-win-x86.exe\",\n              \"hash\": \"086eb9dba667fc6bb90f858abb7ff164bd0a7f3dad6f9c3e6393b9af7aa88d56c8b931f379cd008951a174674cd67fdce0eb55061dd3553493639dfc9e98f7a3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.512/dotnet-sdk-2.1.512-win-x86.zip\",\n              \"hash\": \"4b38064e69daeb8929cf336a13e3c9a7b3c54b8207642241d2e9bddcd9d3a1604f570531b10b6cd34c2196763ad49f904f8458deb10c0c0a1690df5a0a50356c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.16\",\n        \"version-display\": \"2.1.16\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.20017.16\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.16/aspnetcore-runtime-2.1.16-linux-arm.tar.gz\",\n            \"hash\": \"d4f9540c9e505669c407d9bb2e7f821f5d0d0cd20e3d02f89f145f8863740811278b9ec961f4824a19f9b9a6cc3177f855764f20bd506c5f768888f1aa709b17\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.16/aspnetcore-runtime-2.1.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"f5867edc41e0fb1a597ecc1f2151fc539fca1eca4143919397b8bb45f3f594527a452c856940837b90dba3255edc9dbacb26ade278557b660f9ca92698f96f67\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.16/aspnetcore-runtime-2.1.16-linux-x64.tar.gz\",\n            \"hash\": \"f01c74183f551456539dec9af1b3a56fab7394fed85afb03e116d1d055eb02503214b5044623db811d07b37985974ea51e5a5a748e28f1aca3b7b46f28fec615\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.16/aspnetcore-runtime-2.1.16-osx-x64.tar.gz\",\n            \"hash\": \"a95f80857dabb9c0188e38fb4efb499283f40f70a77909e6ce817c4ffe549192b8076e995bafa90d0094ee489722a1a79869229c74aefb50e41b21b1f162ac6f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.16/aspnetcore-runtime-2.1.16-win-x64.exe\",\n            \"hash\": \"78d55b606c0e466e8f2a787ffd76fe85367a6edfbf619f0c09900e9170c6085fc12dea618645157d13b319a18b2cfec2103440d3998408d7dd38293feb7ad39b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.16/aspnetcore-runtime-2.1.16-win-x64.zip\",\n            \"hash\": \"7fb045aeb7761e9683f71aae64e30a92bddd480eac279dcaace0a584e3235428351de31f62be019728ba0dc36168166d945b67f83c6fa6a8e57409048399e32f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.16/aspnetcore-runtime-2.1.16-win-x86.exe\",\n            \"hash\": \"0cab3901a5f93e9ecc17cc6530a292e0d9fcadf916dd4d9a9e452092d08fd59ce492b29d5a8224db384ee73b10682f0ba03a2cc81774942011d4b1b2cd2754a2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.16/aspnetcore-runtime-2.1.16-win-x86.zip\",\n            \"hash\": \"3d7ba5093761865363a9e7aba35cee0f88f1c8ded7ed45646cc81caf0047a8fc147ce18fbc86ed94779a1860545ac17e5f933e7dd0169279c18aa37b1b326467\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.16/dotnet-hosting-2.1.16-win.exe\",\n            \"hash\": \"c0daf9c71f4d02c1b4686765b068bd8334e7a2ef6f1d2ff2ed066babd4fdc911ab83e8a35afb22f55330bd49dcde595d90998db7781ea5c9fc1ace75cb45b5ab\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-01-14\",\n      \"release-version\": \"2.1.15\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-0602\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0602\"\n        },\n        {\n          \"cve-id\": \"CVE-2020-0603\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0603\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.15/2.1.15.md\",\n      \"runtime\": {\n        \"version\": \"2.1.15\",\n        \"version-display\": \"2.1.15\",\n        \"vs-version\": \"15.9.19\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-linux-arm.tar.gz\",\n            \"hash\": \"51d9d524a01b97c08cf87b813f5bd9ea28763ae6a2082a3d5bb39a00a366c937acbd91028f520b3f2fc0b5d9dfbed81cf8cd4e360aecf89ed671422e3ae15f20\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-linux-arm64.tar.gz\",\n            \"hash\": \"dbd8985c90be30b2d3a512fc3d3a260858912a9e579e4ef1cacbc5edbbe0b817f7e085873340570248df1bab1200c2d8be9c77dc175c8dbc04f743b60e68d5ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"dac1c4e9879c8987928b53645a683989b7de6a4802c6a17083115ea9842d33e4fd7c3dbb4aff7dc543ce70e7ac70cf0bd32c7c3bd42041e4f38d1845bfaa8213\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-linux-x64.tar.gz\",\n            \"hash\": \"cfd7f7caea7e896dd4d68a05c827c86f38595f24e854edb3f934715ee1268e2623f17ff768215e465fe596cd474497384be2b1381f04ddd6d555665a341f65f6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-osx-x64.pkg\",\n            \"hash\": \"8d6e911f98f31b0ede699e914556b3ce3bddc5f1f5b822500a9f0f178b97910aa49b65e70ee536ead7091ed84ccc747b1840ae2c77c39775b82df33a70e8cb77\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-osx-x64.tar.gz\",\n            \"hash\": \"1d093c6a9af92bd2e21ceeaf53790d67997f0f7dd364ad0d139255599ca98b09190d6f170bbc2dfe4a65c882b1799161171d7096aefc20f0634bf82ef460213c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-rhel.6-x64.tar.gz\",\n            \"hash\": \"4fe7ba40d45fd09e44a862c2fa05c53adbb06695e3326fb644609d7d113cf805ed497a79bc62621bb3f17f756c799c438e4a4a9284eec95ccb306550cae2596f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-win-arm.zip\",\n            \"hash\": \"5d828c3d3ee6a490c56284e2f30901f9f58a3e5d21d3644349f8a956e2eb7c77d42f325e95f8f672d992a447c09781f4c44356dd0f7a6e6ff441602118c2dc15\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-win-x64.exe\",\n            \"hash\": \"367d07de46a0b0e0f7f70cf87cef829669a20685523b1dd1c17d1048f21e90a3706a6ba287b95760289bec95195167fff26bced79058ad30123e79bc41dbdd85\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-win-x64.zip\",\n            \"hash\": \"f0f1c33801cfb9724bedec24b4e648aa47fae85c2229ddbf5b00ed45383def41cefa55775c65f349adda5388509ce38ca63c0373ef50073971f283a88908ba7d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-win-x86.exe\",\n            \"hash\": \"8a5b82367dd4d83215dccd580ab3c35e0115db05b225ae32c70d24c138039d03412b90d008a8b405d0ca92bcb9d5f84f7bee8a7a67fa4bc1e2f988c165b35932\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.15/dotnet-runtime-2.1.15-win-x86.zip\",\n            \"hash\": \"2f7bc30b73c7c2e1618f63699c96a875845e6de6303c3623fca58dafab264e23a4ff117415ad3e2e4eeb098e7dd07393141f32a502bf7090241421bf3881d29e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.803\",\n        \"version-display\": \"2.1.803\",\n        \"runtime-version\": \"2.1.15\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-linux-arm.tar.gz\",\n            \"hash\": \"6c7e4616f25945c400b2b6c18752743268af1618651b0538576626b1fa9f98e4e8338c0b913109d3725e6f421e8206b5c0a2621a6bb25360bb14a2620a566ed6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-linux-arm64.tar.gz\",\n            \"hash\": \"646d0028949b2925ec735c44e56adefe59292825e400536f76af5ec1a31153a2dc402677996169ce934001210e65c0922c3e20197938ca39a19df2a7358daca4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-linux-musl-x64.tar.gz\",\n            \"hash\": \"df2026c23f082cf1c6426ac3938f41b7f3f9fd67ea0c975db4c58e0fe0e215481257a0884f7d670b8be622b34c005af6a104f9e50f186b13970c24b7a169d4c4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-linux-x64.tar.gz\",\n            \"hash\": \"57d48d6ca1bd92ac348dc05220d984811c0cf005774d7afdfbbf125a842acb0a26572146ed25a7eb26f4e0404fe840b70d1e7ec1fb7c9a5c6cfe81fefc41b363\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-osx-x64.pkg\",\n            \"hash\": \"34433924345282bf811f79426702da29b0c4e756ff2383f59d390cc3196d6ad87f6bda5b3b10daa243e93687a4cd25b4e0b79d72cfd793107c665a78df4a699e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-osx-x64.tar.gz\",\n            \"hash\": \"38434f90853828193da03ab586cafa9a1cc65c491e0db33d53d49ca529a7b5794a37811f4d84c55da3fa0f8d9637d8a81e8de3f192df063b057d82fbd985a77d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-rhel.6-x64.tar.gz\",\n            \"hash\": \"1e170d8b519de0d329408b676fb1ab90d3fbc7a21a4c195421872bc6d42aabcb293ed8b6cd4b6ebb5d2dc3ec266458aa6e708796b90b1ebbcae8b112fd8237fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-win-x64.exe\",\n            \"hash\": \"404f768e21be0e8725fad72c3d7965299e1a90968a24bb74717581b48cb1abeab277bc99197e6baf827bc36790bed3eba347a3d19acda87add4c4d9f5036b7f3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-win-x64.zip\",\n            \"hash\": \"cd00decf718c6f84e0845f6088815bd265d9a2d505f75f6bc77153a1a641e9c9df88b834c594ff6bf633c2da265913355822cbb9ffbfc8f988af398d19691230\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-win-x86.exe\",\n            \"hash\": \"0fb062f73f651d32d17a6078246749da41287b4865f3abcfd4f1474eff9e5db33a403b69f09f348968b287a1735eccf2dff6820a1d11502df10d3108778a338c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-win-x86.zip\",\n            \"hash\": \"a739099b7313f58b4ededfd3e4e9f2379f87bf197f3ffefbe8bfc4e01ff1f61dc9ed2cdcab5a20e4387cf354932bb5d63568599271748a2a88d582381ce62c01\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.803\",\n          \"version-display\": \"2.1.803\",\n          \"runtime-version\": \"2.1.15\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2 or later)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-linux-arm.tar.gz\",\n              \"hash\": \"6c7e4616f25945c400b2b6c18752743268af1618651b0538576626b1fa9f98e4e8338c0b913109d3725e6f421e8206b5c0a2621a6bb25360bb14a2620a566ed6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-linux-arm64.tar.gz\",\n              \"hash\": \"646d0028949b2925ec735c44e56adefe59292825e400536f76af5ec1a31153a2dc402677996169ce934001210e65c0922c3e20197938ca39a19df2a7358daca4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-linux-musl-x64.tar.gz\",\n              \"hash\": \"df2026c23f082cf1c6426ac3938f41b7f3f9fd67ea0c975db4c58e0fe0e215481257a0884f7d670b8be622b34c005af6a104f9e50f186b13970c24b7a169d4c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-linux-x64.tar.gz\",\n              \"hash\": \"57d48d6ca1bd92ac348dc05220d984811c0cf005774d7afdfbbf125a842acb0a26572146ed25a7eb26f4e0404fe840b70d1e7ec1fb7c9a5c6cfe81fefc41b363\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-osx-x64.pkg\",\n              \"hash\": \"34433924345282bf811f79426702da29b0c4e756ff2383f59d390cc3196d6ad87f6bda5b3b10daa243e93687a4cd25b4e0b79d72cfd793107c665a78df4a699e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-osx-x64.tar.gz\",\n              \"hash\": \"38434f90853828193da03ab586cafa9a1cc65c491e0db33d53d49ca529a7b5794a37811f4d84c55da3fa0f8d9637d8a81e8de3f192df063b057d82fbd985a77d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-rhel.6-x64.tar.gz\",\n              \"hash\": \"1e170d8b519de0d329408b676fb1ab90d3fbc7a21a4c195421872bc6d42aabcb293ed8b6cd4b6ebb5d2dc3ec266458aa6e708796b90b1ebbcae8b112fd8237fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-win-x64.exe\",\n              \"hash\": \"404f768e21be0e8725fad72c3d7965299e1a90968a24bb74717581b48cb1abeab277bc99197e6baf827bc36790bed3eba347a3d19acda87add4c4d9f5036b7f3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-win-x64.zip\",\n              \"hash\": \"cd00decf718c6f84e0845f6088815bd265d9a2d505f75f6bc77153a1a641e9c9df88b834c594ff6bf633c2da265913355822cbb9ffbfc8f988af398d19691230\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-win-x86.exe\",\n              \"hash\": \"0fb062f73f651d32d17a6078246749da41287b4865f3abcfd4f1474eff9e5db33a403b69f09f348968b287a1735eccf2dff6820a1d11502df10d3108778a338c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.803/dotnet-sdk-2.1.803-win-x86.zip\",\n              \"hash\": \"a739099b7313f58b4ededfd3e4e9f2379f87bf197f3ffefbe8bfc4e01ff1f61dc9ed2cdcab5a20e4387cf354932bb5d63568599271748a2a88d582381ce62c01\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.608\",\n          \"version-display\": \"2.1.608\",\n          \"runtime-version\": \"2.1.15\",\n          \"vs-version\": \"16.0.11\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-linux-arm.tar.gz\",\n              \"hash\": \"0e29f24fa5aeb01e220dcf0b53727dfdcc2963ccb98f6c8cea04b60d1cb1b356a24598c482d43946147ff153ebdbcee8d24cd535ab8daac1a436729e89db666c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-linux-arm64.tar.gz\",\n              \"hash\": \"66db6c67c18b495af56789ed0de7cd2bb5a508ddd75629f91c031ced29af95045695478dafec7322b18efba67bb8676888f466b59364a7344cd3739b9299eeea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-linux-musl-x64.tar.gz\",\n              \"hash\": \"8d3ab1ac9f0ffd81c3b3f0a512d4f49e5d2b2db12299d45f908b6375ee72404b2a52c91cee3a3700577f89685a801a83029c4514e289f9f3103548250e09fab7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-linux-x64.tar.gz\",\n              \"hash\": \"d633ee6e5f4aa6703aede691527cdd7a0ad1fbe36339d1ced549cfa0d175bd44bc6edbb494f65c6cf20b35f2461ee21da9b2d7e8187bf0c4993e555d160ff233\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-osx-x64.pkg\",\n              \"hash\": \"a1028fece6f8e3a8452f6b7f3c6f2e818d1cc20df95c6fdce3daba0d5f4c3e2e7ca42927816a39674d3cada2578e8f19b747182d588516cadd02543d853ea967\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-osx-x64.tar.gz\",\n              \"hash\": \"d0a168f7a7ec6b9ad1daf2a8361e28be367b3c36abdb6e944c4113c0106f26d6b61e80dbe6c85d5dd84764399a44c35fe4a3d23c85f227c94cf9b0da4904c7fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-rhel.6-x64.tar.gz\",\n              \"hash\": \"64ec876ea560ec87c50611eb488ed2f006eb60a002e02986fe380dccf7ade7f56a2fe2445051437ffafce2dc6698228cd8cee110ef3d2514aaf630b0cea138e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-win-x64.exe\",\n              \"hash\": \"2c7802e5f87d8404bdf30fc46f22cc2f28ab3d9a6bf0575e7c451398460d26da50dbd00fd1d22d439ecac30b8682573bf19f51fc8df1051c408506929bd3595f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-win-x64.zip\",\n              \"hash\": \"d69eece446c8956bcf1a0cba0b0a40c296d1ee2a60b612ed5e7b3c6640ee7cc7818469ce9b9ee7f8f340a98eb4f9330e2b173eabfc52cbbbda1d877b8b73684a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-win-x86.exe\",\n              \"hash\": \"3ec0292fa6d6de1c312dfe661223e512f7a300b6654e5870b3b7b349658fe8651c4e3c3cdfb415ff8bc3cea4a888b6c4ea60333cd8b4ea2a47297d26e1d399ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.608/dotnet-sdk-2.1.608-win-x86.zip\",\n              \"hash\": \"4d6ce6ebbf292d0e3763fcb1e9db93a3fee96521d9036930736d960a5321876d08d9203d6353c7d34934a1145ef99a0b6cc5aaadd341af78d809585461ed3b93\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.511\",\n          \"version-display\": \"2.1.511\",\n          \"runtime-version\": \"2.1.15\",\n          \"vs-version\": \"15.9.19\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-linux-arm.tar.gz\",\n              \"hash\": \"f209c60b28480e59fb8d86e4e95be005add7597af27e2b4533f34b07be11ebcc996d31be34f95b7b9a6810c38de4e6c2a9a216441c5a9b2d2c9df29344d7ac16\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-linux-arm64.tar.gz\",\n              \"hash\": \"8dcf180d795e60d666141e70bb040a0d7359926c3c8aad5b659d5a98afa793b4719d79f83213b7f01f6a05a8c692cbaeaa8c550a21bf19edf99a51ebfe82d324\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-linux-musl-x64.tar.gz\",\n              \"hash\": \"23d6e3bb8fac265a8750bd76423f1b7c173f4904f4e9193fa6be3296c43f73f0afa16967b00965b1072244d2cccccf007c7d783a332e5ed660028d8e1656188b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-linux-x64.tar.gz\",\n              \"hash\": \"b8d401cd64713d10badb9fda7a2dae034488a44300897bac1d3b4c85ffcf1f372f5e02b5e1f58835cf84974ff08acec15d37b260e68773d65d765370891b78f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-osx-x64.pkg\",\n              \"hash\": \"9b75456a13f83328af742521f0d2853a4eb5d1f31531cc67cfd6819aadb869d0b18c16186ce1f2312fd8e20df699f6972b93253363f2c82a5f23e09eade8d45d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-osx-x64.tar.gz\",\n              \"hash\": \"ad1f7d904b86b83898b64d19fa353d5dc6371e6311d66f334fd5692056c177824fb661ef772d3121467f8368b66890f10e9dc4c6047dfa161bc4a1077868ea1a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-rhel.6-x64.tar.gz\",\n              \"hash\": \"e7cc480c06e128ffb38229b9027c3a32098a9c058347b9f59271005e94ffde9b9422b679dd9a77f1f52822ff096ee92927b0a15c6515ade65c4837fc06ca8a6a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-win-x64.exe\",\n              \"hash\": \"3fa549088c2b93728a24026973e107bf79a65e424bea936361b19bf52111382f3f1facba198fce888b0636765473d45457f42bac65106a73fb06f53ea0ea49ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-win-x64.zip\",\n              \"hash\": \"42b992aaf11f14c3e8b5662e78de73cfe9b876e716e644bb1124e62685266e0ba4bc3750c9fa843c0436ba2e73367f6169e9734fe067e81635d78dc3da5a168e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-win-x86.exe\",\n              \"hash\": \"6cc1444d4c18ef417a939789d9674a95ff10162e66fb3e6af4837c702d9822a1f21cef38531a8e5f0f4f3191d683db6d3d4ea00059a3f8d0e9adc33189b5792f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.511/dotnet-sdk-2.1.511-win-x86.zip\",\n              \"hash\": \"b1d83b6f95c657977b39b42fda9d2989c435bd379a0d37680c2365069954884e8a797ea7315076d6a2094233699baa1ce662979e191116f32117d2eac7532534\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.15\",\n        \"version-display\": \"2.1.15\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19337.15\"\n        ],\n        \"vs-version\": \"15.9.19\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.15/aspnetcore-runtime-2.1.15-linux-arm.tar.gz\",\n            \"hash\": \"ea9b2e9908460c4e07bbdd530368c06f2e712b7f3ed16b5364723070636d64846de56367e94d52d28548ad316e875a591e389295ae78ca84ae9a80cdea391bdb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.15/aspnetcore-runtime-2.1.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"4a6ab78abc08c3e02c948de0af5fd324269785adad1b4e17bb849025ab280b7b8216cb48da5d480270cf3d596b342cedd4dc77eeaae82151fea44816e3856c69\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.15/aspnetcore-runtime-2.1.15-linux-x64.tar.gz\",\n            \"hash\": \"a557f175cca92bb1dd66cf638ff84fe85750fab67028bd4472748b22ef0591f5f3812446a3dbe21c3d1be28c47d459d854d690dbace1b95bc7136b248af87334\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.15/aspnetcore-runtime-2.1.15-osx-x64.tar.gz\",\n            \"hash\": \"4d7595ba87ff643de576d27576f4c1952c032ba84e59b4664d580aaa408b4da012b98f86d4caddb66098203b97f5c402884b9b53c8c4c8a8d3e8390bfdad8356\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.15/aspnetcore-runtime-2.1.15-win-x64.exe\",\n            \"hash\": \"7b605e4e235e0136e61d9c4ccd3e120ece10402bd1ba5a288e16bd991b134682907e03e1a516a64aa2d322996a62adadef43b84df344a6b799927776f3564ccf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.15/aspnetcore-runtime-2.1.15-win-x64.zip\",\n            \"hash\": \"bcebd0704367ad5ab1b1db28d5ee711f0f039dc7e74f7e41e5bc4493e6ea59d5c327f1a0841c0728ea201666540e2d0857f42673f5a6b412ba7e9e675e512459\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.15/aspnetcore-runtime-2.1.15-win-x86.exe\",\n            \"hash\": \"d8514d5e5277576b9f481f77f7f78e349739e7966bcb4093c73008e432edc1bd3f5d5526b53e5dec9b64a979373ea8b7dcabd762bcf9dc10681cbbf0c266cc93\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.15/aspnetcore-runtime-2.1.15-win-x86.zip\",\n            \"hash\": \"db370adba60a629ec531a8a56db99da19c536f0ceba1f88a06a54caef14d5bcdf0d0b74272f9b41a1e14b8c614105ae3af9fa3e80d6b524e70d69ca8d215ea92\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.15/dotnet-hosting-2.1.15-win.exe\",\n            \"hash\": \"18271671fa00a21b5f92d863b1824fbd828305ff84e861ddc22d7f0c2af8542e72f5c1fae89c32759bf4fdf7188578a7740dd82682d8984fb0afdf23fb74b66d\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.15\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-11-19\",\n      \"release-version\": \"2.1.14\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.14/2.1.14.md\",\n      \"runtime\": {\n        \"version\": \"2.1.14\",\n        \"version-display\": \"2.1.14\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-linux-arm.tar.gz\",\n            \"hash\": \"cd1d8458983bde5011e6d504275477f7a420742d6abad52ec673b342564161899d4538d62fc3877274898067abb516cf6bcdc4040a57ebc11febb0542c42fc70\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-linux-arm64.tar.gz\",\n            \"hash\": \"221f1128b9c6fefa3f5c11bb97fb889f50e2aa451309f1a0a5e22571e44f3e8725d6cc085d50f2d09275cb70565a9ebc34367082ba06eb68d21ed5dfc1ae1e76\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"ca46796d73bbf24137ccfde60aeabce78218a3559469a7837f5a513e0f0b879d1ed895bd5d89c65fccd1aaa54ddae3f50a0ef03ef636d3cbaa607a8f353a54fb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-linux-x64.tar.gz\",\n            \"hash\": \"ae45bc8544e80138b462ec6baddb23d8a8008d3f7b6a7e7d15387a968ce56963d423ed7d86ea1c727e22efdc380886e584cc1f67b2ea0a252b119d3a8b8d5792\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-osx-x64.pkg\",\n            \"hash\": \"e313c894761be15057a2e45b09d11b61b3f8e30e39f2aee65b838794fb4be1c5bb179d48bd005f28fbdf23e4c36b604f7f452abed656e499ecc91645d43782b2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-osx-x64.tar.gz\",\n            \"hash\": \"456a0eb0b583931a4cf62762486356153d69967c34fb16e1d5249cabed5e2446f714e8ce04b258ba51add7a09802c6588cbbe918cde50e860293b113a687d465\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-rhel.6-x64.tar.gz\",\n            \"hash\": \"2bce390c7280b90366691633a4293d3ea61eb6390d5e8698e8bdd5f07e0d9f97307745ba447ae293e4c69bc4320311342aa5eb9216e452044357ba6dad4a90e9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-win-arm.zip\",\n            \"hash\": \"aa79fae3ef4daf49865b5adb84ad25aeb988831e0b306921688528306ac9f3160e595e0f25ba82cb5a81f1a393c932994dae2e6cbeb9267fdf946e16d17fdce4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-win-x64.exe\",\n            \"hash\": \"980be894068995839ea96085034a3dae50f2f4027fa5d28216a5b8a9c8867ac1e9dd0b9feaedbccefd8d2ec72a323106a7ffd226a4f5cd997d3283af757a1a6e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-win-x64.zip\",\n            \"hash\": \"23f43f4c0b2b6c91f076a467fc4b2cceecee4fc66d2ff09c60f948abb26a190868cdff45606b6b38822908fa95b51071a06e69692bca2b1ba88cd41f17919cc2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-win-x86.exe\",\n            \"hash\": \"ef968ed2c4731146805c78de21c202fb587f6434eb910a8afb4b9264b6742b9abbaff80904f16deb12b868f45181498759aff88250150c2c027e9a39b31a26c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.14/dotnet-runtime-2.1.14-win-x86.zip\",\n            \"hash\": \"8947ff0b88eec92ffb203d9f5a4f7d370b0d883282157edd90dfe89f4542a01a544663464a557de4e203bfdc86ac0e11514e0dfca451ed658189ac2ff1060184\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.607\",\n        \"version-display\": \"2.1.607\",\n        \"runtime-version\": \"2.1.14\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-linux-arm.tar.gz\",\n            \"hash\": \"2cd8fa250e6a0e81faf409e7dc4f6d581117f565d58cff48b31f457e7cafc7f3cfe0de0df2b1c5d035733879750eb2af22fcc950720a7a7192e4221318052838\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-linux-arm64.tar.gz\",\n            \"hash\": \"e7f5e30a55bb5af3ecec0ee5566622755db4199de488e89c5e4b5d5f870d0a2c77f337346ddd9711c8c4f25b1fc85f1b4ba219bef9706e9b9510d718b5e5f9d6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-linux-musl-x64.tar.gz\",\n            \"hash\": \"61caf6602b8a2aa89769b3e91ddaec963d8ab9f802cd7f6c6da4f02426358712bc2bb0930e7ee3a81d75c7607039543b554cb8ed50e45610655f9e91ed0f2f17\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-linux-x64.tar.gz\",\n            \"hash\": \"bfcee5d0121bc3b4dcd08c7a99e700a9dc89e9dcf326ae40046a222bc2fe0212bca14811dcf1e96a6cc6ecd085fbc492e30dc2c2d19ee1741960bbd5e238233a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d9205c1f-f66e-4c01-8fc4-402876d8abb3/d73987eff8812ac44fe86fc2be12eb52/dotnet-sdk-2.1.607-osx-gs-x64.pkg\",\n            \"hash\": \"5f61b2f8b7507c70acf2261c1d13e15e432e1cf2e7b801960294304a15378d523cddce52d0bf65d6f6ee1b5a8597d9acb1701baa66712c752be61e00217882fb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-osx-x64.pkg\",\n            \"hash\": \"5f61b2f8b7507c70acf2261c1d13e15e432e1cf2e7b801960294304a15378d523cddce52d0bf65d6f6ee1b5a8597d9acb1701baa66712c752be61e00217882fb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-osx-x64.tar.gz\",\n            \"hash\": \"529c767dcb41f028db3ae30b578a6af1566e5ce8af935da32d88d7bdf166536df787129eb3b1a25b1947862f368505b135c37de8feae1aab5c236a4991a93613\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-rhel.6-x64.tar.gz\",\n            \"hash\": \"b429e7322c7776c88b040b45b42b5c33c6153f7ae7864b161dbb3d0c966605039818f718f1b1957210a84d6c7adad6ad3a93d0df1855a7fbcfe6f64cdb3c7c67\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7dfa0306-21b4-4a49-963d-244c35fb1754/9eba46218dc96fab1131e32a565e29b9/dotnet-sdk-2.1.607-win-gs-x64.exe\",\n            \"hash\": \"36915b805eff691df171d00ecf05aa7a1b63b960683202da8071eb95df18b2a758167b375df18d26706fabb1fa428bf33af9b3c5d0d44b09859a85b66cf286df\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/af934def-1397-441e-baa6-d5e97747eafe/cf90d670fd9f996a3ba3f13f940e0597/dotnet-sdk-2.1.607-win-gs-x86.exe\",\n            \"hash\": \"20b6b2b155b56916cc1e16a327915679c94a2b8f3cd9e5d8648ff861fb304c1f6bf304dd6c5320376d3c63a29b897029a61071629038ced5d1e4ba0c22d8b877\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-win-x64.exe\",\n            \"hash\": \"36915b805eff691df171d00ecf05aa7a1b63b960683202da8071eb95df18b2a758167b375df18d26706fabb1fa428bf33af9b3c5d0d44b09859a85b66cf286df\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-win-x64.zip\",\n            \"hash\": \"7d2b25cc04ed8bda41dc23bebe086f9f75822c1e54df86b860f0a9ec0f9d1c7b9af5565f0063452f842d4b048cb51b2ebcc6ef4525bb58188bb053d88da2bda8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-win-x86.exe\",\n            \"hash\": \"20b6b2b155b56916cc1e16a327915679c94a2b8f3cd9e5d8648ff861fb304c1f6bf304dd6c5320376d3c63a29b897029a61071629038ced5d1e4ba0c22d8b877\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-win-x86.zip\",\n            \"hash\": \"ff23051619dbbea51b22d25e3b917c646ce773c571ed0fb85b8284c58c8e25005dcb4a6e8488e39610d2467370082022967230676b86a28fcbbb4a17a7bc05d1\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.607\",\n          \"version-display\": \"2.1.607\",\n          \"runtime-version\": \"2.1.14\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-linux-arm.tar.gz\",\n              \"hash\": \"2cd8fa250e6a0e81faf409e7dc4f6d581117f565d58cff48b31f457e7cafc7f3cfe0de0df2b1c5d035733879750eb2af22fcc950720a7a7192e4221318052838\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-linux-arm64.tar.gz\",\n              \"hash\": \"e7f5e30a55bb5af3ecec0ee5566622755db4199de488e89c5e4b5d5f870d0a2c77f337346ddd9711c8c4f25b1fc85f1b4ba219bef9706e9b9510d718b5e5f9d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-linux-musl-x64.tar.gz\",\n              \"hash\": \"61caf6602b8a2aa89769b3e91ddaec963d8ab9f802cd7f6c6da4f02426358712bc2bb0930e7ee3a81d75c7607039543b554cb8ed50e45610655f9e91ed0f2f17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-linux-x64.tar.gz\",\n              \"hash\": \"bfcee5d0121bc3b4dcd08c7a99e700a9dc89e9dcf326ae40046a222bc2fe0212bca14811dcf1e96a6cc6ecd085fbc492e30dc2c2d19ee1741960bbd5e238233a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d9205c1f-f66e-4c01-8fc4-402876d8abb3/d73987eff8812ac44fe86fc2be12eb52/dotnet-sdk-2.1.607-osx-gs-x64.pkg\",\n              \"hash\": \"5f61b2f8b7507c70acf2261c1d13e15e432e1cf2e7b801960294304a15378d523cddce52d0bf65d6f6ee1b5a8597d9acb1701baa66712c752be61e00217882fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-osx-x64.pkg\",\n              \"hash\": \"5f61b2f8b7507c70acf2261c1d13e15e432e1cf2e7b801960294304a15378d523cddce52d0bf65d6f6ee1b5a8597d9acb1701baa66712c752be61e00217882fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-osx-x64.tar.gz\",\n              \"hash\": \"529c767dcb41f028db3ae30b578a6af1566e5ce8af935da32d88d7bdf166536df787129eb3b1a25b1947862f368505b135c37de8feae1aab5c236a4991a93613\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-rhel.6-x64.tar.gz\",\n              \"hash\": \"b429e7322c7776c88b040b45b42b5c33c6153f7ae7864b161dbb3d0c966605039818f718f1b1957210a84d6c7adad6ad3a93d0df1855a7fbcfe6f64cdb3c7c67\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7dfa0306-21b4-4a49-963d-244c35fb1754/9eba46218dc96fab1131e32a565e29b9/dotnet-sdk-2.1.607-win-gs-x64.exe\",\n              \"hash\": \"36915b805eff691df171d00ecf05aa7a1b63b960683202da8071eb95df18b2a758167b375df18d26706fabb1fa428bf33af9b3c5d0d44b09859a85b66cf286df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/af934def-1397-441e-baa6-d5e97747eafe/cf90d670fd9f996a3ba3f13f940e0597/dotnet-sdk-2.1.607-win-gs-x86.exe\",\n              \"hash\": \"20b6b2b155b56916cc1e16a327915679c94a2b8f3cd9e5d8648ff861fb304c1f6bf304dd6c5320376d3c63a29b897029a61071629038ced5d1e4ba0c22d8b877\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-win-x64.exe\",\n              \"hash\": \"36915b805eff691df171d00ecf05aa7a1b63b960683202da8071eb95df18b2a758167b375df18d26706fabb1fa428bf33af9b3c5d0d44b09859a85b66cf286df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-win-x64.zip\",\n              \"hash\": \"7d2b25cc04ed8bda41dc23bebe086f9f75822c1e54df86b860f0a9ec0f9d1c7b9af5565f0063452f842d4b048cb51b2ebcc6ef4525bb58188bb053d88da2bda8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-win-x86.exe\",\n              \"hash\": \"20b6b2b155b56916cc1e16a327915679c94a2b8f3cd9e5d8648ff861fb304c1f6bf304dd6c5320376d3c63a29b897029a61071629038ced5d1e4ba0c22d8b877\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.607/dotnet-sdk-2.1.607-win-x86.zip\",\n              \"hash\": \"ff23051619dbbea51b22d25e3b917c646ce773c571ed0fb85b8284c58c8e25005dcb4a6e8488e39610d2467370082022967230676b86a28fcbbb4a17a7bc05d1\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.510\",\n          \"version-display\": \"2.1.510\",\n          \"runtime-version\": \"2.1.14\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-linux-arm.tar.gz\",\n              \"hash\": \"2e2539057f4aeaffebca38a27b31438ea66f76a3c2e1994b204daa246485457089fe6cafa9666269cab13ced982e03a31ae083dcefa0824cd1e8e77b814d2638\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-linux-arm64.tar.gz\",\n              \"hash\": \"5638be99e9a86b7eecf51a6dc874d0f79dea4c4b294da294d07b645022e3b85bc94299ba5d45c3f19f208500633dbbd765d89914db2337c0583a57eef467c619\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-linux-musl-x64.tar.gz\",\n              \"hash\": \"2f21cfaf9318b8bd725a2d7d86cef76eb5dd343502b45cc63c61fad27e128b706686a7a5bd59a9908e503d3c17af34d9bede6e1fc23d8dbfcdc5ee3c5b6e2106\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-linux-x64.tar.gz\",\n              \"hash\": \"652e5bfbe49b501366cc562f72a3242fe282421ea49cab5c7f3550a9288d017b133fe061a38f3f9e1a9634d6542991e4f3f9e652ab636f476579270610fb17a7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5c1ad586-f168-4a68-be00-d01047353eef/5073906ee01400e13109c17d445c6593/dotnet-sdk-2.1.510-osx-gs-x64.pkg\",\n              \"hash\": \"bc8d0aae36f8dd1f1526d1651f2404bc66774dcf90ef37c9d052d8cbfe0f56bb20efdb0a13af1a087d8565de60e976c59ffb3817423713e2db05fd1789f27826\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-osx-x64.pkg\",\n              \"hash\": \"bc8d0aae36f8dd1f1526d1651f2404bc66774dcf90ef37c9d052d8cbfe0f56bb20efdb0a13af1a087d8565de60e976c59ffb3817423713e2db05fd1789f27826\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-osx-x64.tar.gz\",\n              \"hash\": \"d38e741bf4f6e42283dec5057a39e0d34567b6dfb4b72993016670920e553b98611a8dc551403a710a7697b394f66d83573b8f57590952a615f998a53427f73f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-rhel.6-x64.tar.gz\",\n              \"hash\": \"3f471303e96f9dc87501824f68a45344efbe9db0b1fbadf72b9570745ece20c32365bfd93a7c7f814452159e6784e83c4722023659723814e30f60912fcc61ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e75f362b-5755-4b80-a032-11fb32dc797a/62fc7d268f509b3d861d4e592ecc015e/dotnet-sdk-2.1.510-win-gs-x64.exe\",\n              \"hash\": \"a024cecd684d6958a68de07ef09df5136783f2df75b4db83060953dc41fbefc01fe584dad2b837ce3ef90c832f93cc17d5e110a97ef822359a162f85e2a3ee6e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/18dba087-8aab-4636-bed2-c9a0a4f8cec6/8a6ff01436f332dc0c0e36156011945a/dotnet-sdk-2.1.510-win-gs-x86.exe\",\n              \"hash\": \"b229073e334e9eb651a580d6f0e70caa3108fb67b879488c3f8050b89cd3a6ece41e1c2de7b8f0d5593a17e6aec6915e1c38af60e39f7d15453bbec114f7aca4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-win-x64.exe\",\n              \"hash\": \"a024cecd684d6958a68de07ef09df5136783f2df75b4db83060953dc41fbefc01fe584dad2b837ce3ef90c832f93cc17d5e110a97ef822359a162f85e2a3ee6e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-win-x64.zip\",\n              \"hash\": \"4cc825d6d54b1eb38419e9a26a7f1041c773e14f31bb48366c30035a74021e67b8073963a111173ffb3595c8f7b5f00a0a63d606dce8b864509fa3f897b53a00\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-win-x86.exe\",\n              \"hash\": \"b229073e334e9eb651a580d6f0e70caa3108fb67b879488c3f8050b89cd3a6ece41e1c2de7b8f0d5593a17e6aec6915e1c38af60e39f7d15453bbec114f7aca4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.510/dotnet-sdk-2.1.510-win-x86.zip\",\n              \"hash\": \"6fc521cac1049b582952119f695da2f8d9256d480c21a4fe10bbfede239425d85ca1f70972d8a93488de42f60b657be13405d2c84905767f8a3391c5985a196f\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.14\",\n        \"version-display\": \"2.1.14\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19108.11\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.14/aspnetcore-runtime-2.1.14-linux-arm.tar.gz\",\n            \"hash\": \"f4500187bf135254a03b5eb4105b8ce20f71d71e0f08c2c2ec914920f80435b7b36351c3f9c15504d0b1c2187b904c8283db67a2b60ebff374b058641153aaac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.14/aspnetcore-runtime-2.1.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"d7ead16ac4825c9a0d2f77d8f643e3fa60e3abded17df6b788c3ab825df7821439c7ffc52aeb7c92529dd3d40c2e82bfa0f4e26b4f43228f4977b3db2f292c6b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.14/aspnetcore-runtime-2.1.14-linux-x64.tar.gz\",\n            \"hash\": \"85728bd9701a6db5743c495aaf87c859b697300b668afc01d0edd3814ce50929219c5a70745ee8bd9b2c478613cbba323c5e5834c7c5f0af792712f8070df763\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.14/aspnetcore-runtime-2.1.14-osx-x64.tar.gz\",\n            \"hash\": \"5b4530eed04448412b0ba9c6253fc9cb29f0cc77cc284d36e04b27d71cc75eba57efa6194f2e18329abf63e0b2d271775ef416e5d76f72b8da33490e8dd3f17e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.14/aspnetcore-runtime-2.1.14-win-x64.exe\",\n            \"hash\": \"22a924f8997ee766f2aee996e7dd79c0dfbb7aaf63c2066fa0f7aaa9ad817d57317b3f32e24c746fd10e22c872e852746ebee9d11a0132bc7650d2c393928ea6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.14/aspnetcore-runtime-2.1.14-win-x64.zip\",\n            \"hash\": \"405693923f0979bd024777c1dd663e81467c14f500c82cf3ae0ec1ceadd40532fe7caa364fc014be03c1c28f28fb75ca0dc8b344e2fa8fd23ed8c89805a953bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.14/aspnetcore-runtime-2.1.14-win-x86.exe\",\n            \"hash\": \"c05a01873fae75c2da9b0c640cb80ef4d364c9bd7f252f6bb646bb66911bfc666e4cd25f3ddc52dcdeddf86178c542477857c7f17160971db04936626695c56d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.14/aspnetcore-runtime-2.1.14-win-x86.zip\",\n            \"hash\": \"94c0b453fb916e3de60867ec99a746ca26e3a4349e6372b35ec2c5a4b7019c01ee7ebc81b632e301d39805a015f144c7af01e19d91bd3d0e376bf4550458aaf0\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.14/dotnet-hosting-2.1.14-win.exe\",\n            \"hash\": \"95bc0148f7569aff80515f0877cc0509343a9b754d07c8efb0925f1f21ee2ce530988afc2b2b5214b5cba346dbfb302a98d5ada79110f003707314da70f08f2e\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.14\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-09-10\",\n      \"release-version\": \"2.1.13\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-8269\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8269\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-1301\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-1301\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-1302\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-1302\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.13/2.1.13.md\",\n      \"runtime\": {\n        \"version\": \"2.1.13\",\n        \"version-display\": \"2.1.13\",\n        \"vs-version\": \"16.2.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-linux-arm.tar.gz\",\n            \"hash\": \"0534D3BB5A05B291186759BEF8CA8FC359F818BE65EBCEF5E2D0156C08F47185F044E489C7B53CF58897B90556E462AACB9941B6820F878F7672A84B76E10E06\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-linux-arm64.tar.gz\",\n            \"hash\": \"B8E3B7F5AA7EC09FA8678C4721B90FFFA06CC117803D61BADFBBC6896402253796F7027E3FC8225DEA289C2B53CF345CFC24D16C8A8AACAB2D561B3CD5FB9863\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"13E56783CF180801E03CA417A40EB27249F47F2B62589FEE8FE8ABF16FCCC31C6A6040871544BE98F166A27288B625B5CD109C2216BCB9B45126E001ACB9A6E6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-linux-x64.tar.gz\",\n            \"hash\": \"10C037287A06D901EC5D5CFB2064C341E9B33A46F72AC8606C926499A5AC500E74A7BD1445224DF3AC4AC4CD0AEA76CC73CC0B8990D4A5AD6272E6261572359F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-osx-x64.pkg\",\n            \"hash\": \"852FB874DDD85362CD37385D95AA5429482871949633F06168F1ADBAC88BDD224B26C8BA8E09B42A960992992E282713787E962F8ACFAECE41D818D392768810\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-osx-x64.tar.gz\",\n            \"hash\": \"4FD7827CD68921D4F2C3220E4BD7BD1A80C0143DD483AE8090C71BC2AD8CBAF1D86624C2A178590E62C0FEEA66012B02265DA655B3310ED74B149C3C3F9D7481\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-rhel.6-x64.tar.gz\",\n            \"hash\": \"D3EDC127E63DE21F63C46769591A7406C1BA8826398C81620EA9EF5B3D45BC5BE67D62C0F11CB3D9C91F4BC3CC5116687B88B5F761073990385E414B2F4AC6DF\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-win-arm.zip\",\n            \"hash\": \"A8704CC66A18EEF54F45E1CAEC269DBF44721C5819FE57F471642426A248F7468639184875F5F0219CC371284424FECD45BD89134D999E12D9F69157D3C128F5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-win-x64.exe\",\n            \"hash\": \"9F60981AAEFFFC0AA4E5C7BB0A95E917E9407E55ADF2E8DFBEE9F8F27253BD5FB60B78A755628F24CB713906395690B1B281CD1D07773827555DFDA7B3D963A6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-win-x64.zip\",\n            \"hash\": \"4B5CAF6EAB996F526684EC32153C19A5EE6B670B984C0CDC98C52B1577831D2A6952C0BE8C1D65B6EA941B984BA60915DD1327D94568F2DD5C44B2D7B92BB334\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-win-x86.exe\",\n            \"hash\": \"49A2E98BFB06958B7988A860A664775D5DA8673D07325B1A4182C3692414ED895A5F35253C62FDC6AA00EAA76316130DB9228CC695A81FAF5521AD6ECA085AF3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.13/dotnet-runtime-2.1.13-win-x86.zip\",\n            \"hash\": \"3A4299570B5956A58B525256FBB1CF655041B90795B957D33DAE02EBA99874F2FDB0A190FADB75B0768A88DB7C271C1B74FDD5A794228419118A8365B9996BFE\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.802\",\n        \"version-display\": \"2.1.802\",\n        \"runtime-version\": \"2.1.13\",\n        \"vs-version\": \"16.2.5\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-linux-arm.tar.gz\",\n            \"hash\": \"12717F5B37D689EABA49FC9C3C40A8FAC097022390C19D348B388456E73819C3E0442C3BC06CC49259404DC6D46D63CD951ABB232AA1244F2DE0763B785BDB42\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-linux-arm64.tar.gz\",\n            \"hash\": \"42B77B1AA2533C03199884CDD0520777054B662BE27D0E27B993BCCEADFF0D426B76CD6D5426A64B5634543D9F14436CDB15BB54E043FDFF444EAEC8FCDC2AC7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-linux-musl-x64.tar.gz\",\n            \"hash\": \"69FAC356DD7EE7445E640326A6EEDFE95D93D901437FDB6F30DE80CB23274EA645CF172D656E72E5A11BE5EBD8022A8D9EF7931E5DE59D7521331FCBF51B7C15\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-linux-x64.tar.gz\",\n            \"hash\": \"8601EC68FA8978C5A08A696CC69F5E0AA9DABF274BADE40E2FD9DED2E563F2CC7A1CB418A95C9B52E1FA9B6C4A30993BE68CB3B6BBDA4598C57B37EC9CE992AD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-osx-x64.pkg\",\n            \"hash\": \"E8A304C1BDA38DAC59EB4B7C669949F49480A599D003178969E6ADE561E485DB9EE3DB530EB99199854B67E4516B9807CAFE5D4709BA9A9BD88F39B78A6B563A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-osx-x64.tar.gz\",\n            \"hash\": \"C7015C6303BCCE3897FE671CEB56E85238AF3AC5A9FCCE6249D51A5097A52C4E2A12F830EC102B86CB038B81F91D6D16145B9312A188285918D53B3E680F8E7E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-rhel.6-x64.tar.gz\",\n            \"hash\": \"7A553410B3A8F52FE5FFCB546083806A24DA4301DF1D96B4EAAB7411C4BF4FD6F6156C4714DC73D90FB223E8091911773080F0129BE454C6F23CDE56B4920683\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-win-x64.exe\",\n            \"hash\": \"1212DDE9B6BE5EE950881F8CEFBE5D96599EF3DCC08FB5E212EED5F1450AF7842E153E179B7E7C6E35B770C637F2306824D8EE348C3191D2A6DAA1D5B4CD6A25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-win-x64.zip\",\n            \"hash\": \"363C16BB3FB2FE7CE9E7FC874AA685F20A5DF6C24D784447C0EDE174B0A872B6BD1892D110FA42A7C4B0086176DA9076271F9AD3DF5102CB0A684AD619BD33B1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-win-x86.exe\",\n            \"hash\": \"964F8DBDF1CDAF6A9F5746F8BAD4954AAF7912BB1E19226A074DF2463494344170401E6046546523D3A98245B1852ABF45E9E4BF562C6426D6CD7E796D7442DA\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-win-x86.zip\",\n            \"hash\": \"876CB062E913142DBDEB9DF3833FABE0BBA2905BCC3D7AFFF7BDE4533BA38EB522E55DB2E9A199756286F3553436F99655A45DA61D80DF3552A082A7F3AC4818\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.802\",\n          \"version-display\": \"2.1.802\",\n          \"runtime-version\": \"2.1.13\",\n          \"vs-version\": \"16.2.5\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-linux-arm.tar.gz\",\n              \"hash\": \"12717F5B37D689EABA49FC9C3C40A8FAC097022390C19D348B388456E73819C3E0442C3BC06CC49259404DC6D46D63CD951ABB232AA1244F2DE0763B785BDB42\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-linux-arm64.tar.gz\",\n              \"hash\": \"42B77B1AA2533C03199884CDD0520777054B662BE27D0E27B993BCCEADFF0D426B76CD6D5426A64B5634543D9F14436CDB15BB54E043FDFF444EAEC8FCDC2AC7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-linux-musl-x64.tar.gz\",\n              \"hash\": \"69FAC356DD7EE7445E640326A6EEDFE95D93D901437FDB6F30DE80CB23274EA645CF172D656E72E5A11BE5EBD8022A8D9EF7931E5DE59D7521331FCBF51B7C15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-linux-x64.tar.gz\",\n              \"hash\": \"8601EC68FA8978C5A08A696CC69F5E0AA9DABF274BADE40E2FD9DED2E563F2CC7A1CB418A95C9B52E1FA9B6C4A30993BE68CB3B6BBDA4598C57B37EC9CE992AD\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-osx-x64.pkg\",\n              \"hash\": \"E8A304C1BDA38DAC59EB4B7C669949F49480A599D003178969E6ADE561E485DB9EE3DB530EB99199854B67E4516B9807CAFE5D4709BA9A9BD88F39B78A6B563A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-osx-x64.tar.gz\",\n              \"hash\": \"C7015C6303BCCE3897FE671CEB56E85238AF3AC5A9FCCE6249D51A5097A52C4E2A12F830EC102B86CB038B81F91D6D16145B9312A188285918D53B3E680F8E7E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-rhel.6-x64.tar.gz\",\n              \"hash\": \"7A553410B3A8F52FE5FFCB546083806A24DA4301DF1D96B4EAAB7411C4BF4FD6F6156C4714DC73D90FB223E8091911773080F0129BE454C6F23CDE56B4920683\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-win-x64.exe\",\n              \"hash\": \"1212DDE9B6BE5EE950881F8CEFBE5D96599EF3DCC08FB5E212EED5F1450AF7842E153E179B7E7C6E35B770C637F2306824D8EE348C3191D2A6DAA1D5B4CD6A25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-win-x64.zip\",\n              \"hash\": \"363C16BB3FB2FE7CE9E7FC874AA685F20A5DF6C24D784447C0EDE174B0A872B6BD1892D110FA42A7C4B0086176DA9076271F9AD3DF5102CB0A684AD619BD33B1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-win-x86.exe\",\n              \"hash\": \"964F8DBDF1CDAF6A9F5746F8BAD4954AAF7912BB1E19226A074DF2463494344170401E6046546523D3A98245B1852ABF45E9E4BF562C6426D6CD7E796D7442DA\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.802/dotnet-sdk-2.1.802-win-x86.zip\",\n              \"hash\": \"876CB062E913142DBDEB9DF3833FABE0BBA2905BCC3D7AFFF7BDE4533BA38EB522E55DB2E9A199756286F3553436F99655A45DA61D80DF3552A082A7F3AC4818\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.606\",\n          \"version-display\": \"2.1.606\",\n          \"runtime-version\": \"2.1.13\",\n          \"vs-version\": \"16.0.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-linux-arm.tar.gz\",\n              \"hash\": \"1CDD6F3986A5CCE490AB014B73548E73C586C46B306570FCC03335AD24990B15EC60594E82D0C3F4D3877C7F1514E212AB1FEA2D95F09A423E3A4FB6853B6B7B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-linux-arm64.tar.gz\",\n              \"hash\": \"2B6568A933870751812A1B59E233B76AFD14590066074760B6FC9A76ED2B47F976D79A421F7570129B904DEF424356CEF83F53C10355C9B6DD5EB89CF62805FF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-linux-musl-x64.tar.gz\",\n              \"hash\": \"0E3724EA323A9394DCF70AB9CA2BED34E2CB078FFE7256C59888ABD625472B7AF334E27378C3138F5536383FC2B3392B8CD1174FF912E17355F8989B1894CBBD\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-linux-x64.tar.gz\",\n              \"hash\": \"D4FC288A4EF2846CDB96811E4FA65B10230C67907E5017D9C2CF0895F458298DDAB2F13E08522FF36ACB5FF8383BC67FB8685559FE54D301B62C29931DF08119\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-osx-x64.pkg\",\n              \"hash\": \"6C8C77527E1B1C0EE27CA5A86AA76F59AE87DB6BC6746022E75CE5A00502FCD588DB070D9845AE7D176E4A062990FA8A157CAA2E587C611D65EA3149E30B2CAB\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-osx-x64.tar.gz\",\n              \"hash\": \"B7AD3FAC9BD0C65BA3793F8B55B39AAB8F59F64776D1CBB4BD5DD1E434DC4EB27D3A66295A62A890BB13E469770EC6E924F364DCFD77B1E5217BFAD61D9A89F8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-rhel.6-x64.tar.gz\",\n              \"hash\": \"CA3B21071F4859187B96B7173DE07B3632C443B3C555C4B766C2EA2EFE54EBB79993039F337C519F2F248A2EBB6B8DDA360AE19092728D6E9ABF4FB8984AC253\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-win-x64.exe\",\n              \"hash\": \"70DE7B4E9BD63BD8BA0FCA2DEE5CD72835D883FCDFE878F5F3A1503272579DF1C8CE6426E63805B23A5FA3A3CAC89A6A90586F6BDF4A3193DDA91E2B52FC6C1E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-win-x64.zip\",\n              \"hash\": \"D5CF6D5B6ECF9222239CCA84DB6AB6F10A1827A9FD0ABF0EE11B8F8531D7E7BEFE16BE4F1CC36AD81E4747FACAF9A2CC266F4F2986FD35CB70EA5A282469DCD6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-win-x86.exe\",\n              \"hash\": \"57D7EB263053F8C9A9673290FFB76C65599CE3E312264AD960E8DF620E1B546A934C05A50DD0948876CACD1B398C57408F82DD5547C2451CD9B8BE050596C7EE\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.606/dotnet-sdk-2.1.606-win-x86.zip\",\n              \"hash\": \"633553ECE0512DEE2137DD1BFBE3CBFA507BADE9A5BB51C3501CEC8ADE9C353CDD932C09FBC5731437A0F3FF568D83765C026BBDE3084228A674245FDEDA1F55\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.509\",\n          \"version-display\": \"2.1.509\",\n          \"runtime-version\": \"2.1.13\",\n          \"vs-version\": \"15.9.16\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-linux-arm.tar.gz\",\n              \"hash\": \"D79CC4CB57B5FD8D389E832921EB8888F21C5383BDBA98A3C08D8E63FD9552BD1D79C7DCBA80C6086AFED71AFC88829A53FBDB9074269FDEA21D122858E9C18E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-linux-arm64.tar.gz\",\n              \"hash\": \"1A40ECFB435BEFB1421EB5E861185EC326CDC2620950CFEBC126FA5C80AA1186D87BD0E1F98843336EF5797E41ED40D3ABFE1EC143692EBD7497D8218CE91CF5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-linux-musl-x64.tar.gz\",\n              \"hash\": \"1193E338341D7A4E9D1814E4B1A98CCB9463B9413E0C5E83E5493061C5B7DC5C5A05103E9E83985189DC3093DB3A7148223005D989CA5AA301E43B08E9EB84F4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-linux-x64.tar.gz\",\n              \"hash\": \"4B7DC25841F56AADDD685ADB227B362177268E3D052B4ADDDAC2530889B6506B7B4768B751AE75F131143424D02EEE77B4565DAD6B49048C39D2C47E39412FDF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/71d8ad82-8b1f-4ef7-98c0-7e7999dda2a7/5317d0a3a6c0d1e8740efbb647888e21/dotnet-sdk-2.1.509-osx-gs-x64.pkg\",\n              \"hash\": \"856682BA88A4637DA71D91F3BE0260E14A2934A2EB20F08D18C60B877AC52D14E4F2B889CEDFA62CDC155807E73AE13E2B784D9AD70B52E54314C5F4790CDD3A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-osx-x64.pkg\",\n              \"hash\": \"856682BA88A4637DA71D91F3BE0260E14A2934A2EB20F08D18C60B877AC52D14E4F2B889CEDFA62CDC155807E73AE13E2B784D9AD70B52E54314C5F4790CDD3A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-osx-x64.tar.gz\",\n              \"hash\": \"A93846BA56CEFFB06BD5E30D961E618ABBD25AD2B09B3EA622682BE9FCBC374FF9EE2D017A0C549943626611CB0934BE57763DCA1BBF099FAA7D4958DEA3113D\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-rhel.6-x64.tar.gz\",\n              \"hash\": \"9D345D81DBBE6F8A22690E4BC5169A45C24961F24BA9906851E0DCC43D0322ED89FDD630FAD9D20CFF9B92544CDBB955BB53A88F33EBD87FB76D1CDFC2B48B5F\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6f6ddea4-e493-4f65-b7b7-b37a61d51394/faeee8615781bb623c436bee75ce3840/dotnet-sdk-2.1.509-win-gs-x64.exe\",\n              \"hash\": \"64E62509293A0887930FB7F127AB79B622345328CCB0DA6B42EAB5D825867E7ECA94420BA0BBBADB4254FBE14BB2351C4AAFBF8082922EFF9DAC25C6B50BC390\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/adf6819e-ec4b-4356-98b2-34dcb4ab44c8/ddfac65f7141591173df487e2ffd65f0/dotnet-sdk-2.1.509-win-gs-x86.exe\",\n              \"hash\": \"30206B8B5046AAF79B5EF63CC36B287FACB3A8E2C10AA8E8DAEAF2EA180914DC16BFC96AAA28125C168A570BA79B9E9F62B28341FB7C2CE7B2F0DD2C9FD295EF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-win-x64.exe\",\n              \"hash\": \"64E62509293A0887930FB7F127AB79B622345328CCB0DA6B42EAB5D825867E7ECA94420BA0BBBADB4254FBE14BB2351C4AAFBF8082922EFF9DAC25C6B50BC390\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-win-x64.zip\",\n              \"hash\": \"A2492C5A877907C5012A3F289371B9FCC875D6F93ED951EB6E61C7803FEACFC44AE229C3028F4A01C74A77F21F30452353327E2E0B7C553519E9CCB5FECF131E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-win-x86.exe\",\n              \"hash\": \"30206B8B5046AAF79B5EF63CC36B287FACB3A8E2C10AA8E8DAEAF2EA180914DC16BFC96AAA28125C168A570BA79B9E9F62B28341FB7C2CE7B2F0DD2C9FD295EF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.509/dotnet-sdk-2.1.509-win-x86.zip\",\n              \"hash\": \"9FB091FB7295A8A86FD1C803C38B75AC0844AFEE5E75763BD255B4BB3873585939DC449BC9B4B4A224821DB325045FBC737FDE92C87F7E75E9C325FD64CF403C\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.13\",\n        \"version-display\": \"2.1.13\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19108.11\"\n        ],\n        \"vs-version\": \"16.2.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.13/aspnetcore-runtime-2.1.13-linux-arm.tar.gz\",\n            \"hash\": \"8D41A285E30733303B0A92A0D83C65A534597BE46DA280D60A2F759DFF90B6E9D1222002D0C32CBE02856E0D3FE2E37D111B370CC30D35B162CC3C483D512744\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.13/aspnetcore-runtime-2.1.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"3B762902BAB5403D2BD36A4AED5620AC925F73180CD7571A8D72BA3A86AA7C587A3C016DA59DC7300C8EE0D933CEFAF28894431932C40E1570E55BB3D142AD1F\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.13/aspnetcore-runtime-2.1.13-linux-x64.tar.gz\",\n            \"hash\": \"1D73B177782F6AE593DD56078D479D879DD470324113EB5A8A3DDEB12DBDCD6B0C0EE0FC722C8106C5117FC08D14A44F2F6FD3A47319DF08EC1EB74AF8A69C22\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.13/aspnetcore-runtime-2.1.13-osx-x64.tar.gz\",\n            \"hash\": \"52C8ED89B9BCE412AB241C73BE830C8B7209FD655231B7392A528CC7E5C550482051EE84A259DDBCF1941B9784E6459D0F3D7B0A7CEE630638C36688789C78B2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.13/aspnetcore-runtime-2.1.13-win-x64.exe\",\n            \"hash\": \"84028696AF12F68A2A24E9B44543A09B3AF1CC11BBDEA6C4B44849F0CC3BABFC5B61E38BEB1350291DCB0DCD0F432EF242CF7105EA58CF2B871D4AA1A36AE1E9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.13/aspnetcore-runtime-2.1.13-win-x64.zip\",\n            \"hash\": \"F290491EC909C2D83606737EBA070FEC2420C7ECC488B5DEB1F353DE1131BE0E2198CB671D5239E7E6FFD77A531811C6BCEFC346CEBAC826CAA4FBE7D90F8427\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.13/aspnetcore-runtime-2.1.13-win-x86.exe\",\n            \"hash\": \"78AC72FA21DEC47FA7B2A23B0B2546395BD6F409475C1736957DF6C22E341844ED0CB4BECE13CBCBA1F2613B9EB972B573B54D913FE0C51C9E1EBE1F3644711E\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.13/aspnetcore-runtime-2.1.13-win-x86.zip\",\n            \"hash\": \"26FB03E3AC0EFE4CEB479C7AEBC7EA33D23DE33C738CEF5BE0F4253006860D0D58471656ABB6A914E25FBD854B018A9A8DE10D00824EA1211B15946F3EE01CC0\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.13/dotnet-hosting-2.1.13-win.exe\",\n            \"hash\": \"674D14D1EA87D97D5362525AEE2119062F7E79E8D03BDAC5501D170E7B74DA2E853B84A81E307B1BBD355F75B5C237A987B52A5E5C5C206CABD8695C3B634628\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.13\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-07-24\",\n      \"release-version\": \"2.1.801\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.12/2.1.12.md\",\n      \"runtime\": {\n        \"version\": \"2.1.12\",\n        \"version-display\": \"2.1.12\",\n        \"vs-version\": \"15.9.13, 16.1.3, 16.2.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-linux-arm.tar.gz\",\n            \"hash\": \"DA041CB2AFA557E70D00039FDDACAFE48DF28B8DA9C06F790CC841ECABA496F00880EF3349731860835007FA12F0AEF7D50D5EB200297AF5E37F4503C62ACECA\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-linux-arm64.tar.gz\",\n            \"hash\": \"D5F3530F7C0DCE98845B5704127C553C788DF0006DA82F5566682B34171B8F2A3DDD6F849FEFC4E97EC277715D096E23B8D18CDBFC5BF9EB128F22B0C1BDBACD\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"E9361C78D699F67DFC2B12E87B6B004B67D835F94A1301E6EDE3007C9A8904BBDEC882967DFB40B9A66D10711649129A90C907825BEA7A846E85D6D1DA8F7BC8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-linux-x64.tar.gz\",\n            \"hash\": \"9B6D07E180BA1D19F0B00263AF9DCF3147B0869564EF82EC20584B25D801A2D5C353F0F2BD7BD7E92E75CEB4E4BCA35EC3EADE73A2B25A0306D4D95EF5071A08\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-osx-x64.pkg\",\n            \"hash\": \"2A90EC4721AF78F223DCBBC43494D6A3CA67488C88DE03E6CD41FC63E06B14C82B5FBCE986C77AF8D61C98C85CEF3A6C2DB0C10B8D400FC6BF34127A4FA0FF86\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-osx-x64.tar.gz\",\n            \"hash\": \"9BA56DF0F626991D13463716D5E079599B8F5332808B63357851B35E3A3F32E8EFB80F73E1F6851CD67A8AE4D24A8AF9F0A768CF57B759B3A14545ACC5689395\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-rhel.6-x64.tar.gz\",\n            \"hash\": \"4370F717D2BAED7BAD1F34642B93DDD80A1F692E9702340D897C23B870AC81B023B243D04AC33AE9ADDD4CB5B4EC9AE37E0E5969E087F0FB471F5EA27FB3A28F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-arm.zip\",\n            \"hash\": \"F131CDE713234236775EA45B6D522EB0E81E89CEC32D7D6E74244E5A4457FEDE3A2F52BD77FA8D50717886A67CFFEF0BAC3CC8EEF7CDB43F8C69BF15D3CE1E2F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-x64.exe\",\n            \"hash\": \"9739406353CCB1A4BCA78FCAF9D09BBD9C6A9D59EBC8DC36D6FFE4C19568847F2372F75D2D68DC299AB2128A8F89CD35D08FCFA03C1F792ED4E38DF424C12604\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-x64.zip\",\n            \"hash\": \"CE3F8ABD92997645035B7655E9AE61E2023FFC9848B250945E140BFD05C26BEED35982E8F5A5D263BC576112C6F4D3E82B0BEA45BD07D5331F290C1D8D2EB9CE\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-x86.exe\",\n            \"hash\": \"97A7D7A3F7E30B0987CE9E56E102B0601344060749A277E516879AD17C6B4154F2A8E1C7E686843CC1F8C129173BB2062FED4914B91446BDB8498383FA17C3F0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-x86.zip\",\n            \"hash\": \"66C9EB59EE72BD53E5D10EB7967A4F347C6349D2E655E758B792CE914E56E541CFA80E9CF8233F0F6414FF1DCE730691FF031437D2590465B075B8972E5DC09C\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.801\",\n        \"version-display\": \"2.1.801\",\n        \"runtime-version\": \"2.1.12\",\n        \"vs-version\": \"16.2.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-linux-arm.tar.gz\",\n            \"hash\": \"F3E201274D566D5955506B52A0A334FBC88CEB6204CAE7535BBF8493397A9244CCCA8CA9C670CAB5646804F0E9A6B2A5F8CD213BF8BB90DC332985D89845F486\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-linux-arm64.tar.gz\",\n            \"hash\": \"9525B86EB8E1CBE22C94967030FD8E1672829D61E45B39B1E0146296201984E92B7AA399F10E6E6B24F6D3025E8DA5577F3D231E47AD69906C1ABF9A195F1206\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-linux-musl-x64.tar.gz\",\n            \"hash\": \"A3F9044D04A18BEB6DCBAE5A91BBEADB38B17870154B91CAF201E8656C44325D43C24AA0BB5F7A934A818C3A403ED2A2AF428F456FB63A21723DC50988F788E7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-linux-x64.tar.gz\",\n            \"hash\": \"5781C6E254270803D9BB2C29B1555FB9DB258BF99BA2EFA2B457CA28226C70D6305C9B7C141CBF49ADE4915E136FAE941727ADFC60373E4822C52BF0E92C451B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0d858af7-d07c-43a4-af9f-75a02c814a76/bb09f81900f42f00fe3078780bf17f08/dotnet-sdk-2.1.801-osx-gs-x64.pkg\",\n            \"hash\": \"73926178114A4C7B0FDDAB2DF3629054F94CD79D35F1CB08EDB6D6763CAF42BE5D84912C52E7E18C73D115DD6F3DD2B9FF0C6640078D5E774680054A92136727\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-osx-x64.pkg\",\n            \"hash\": \"73926178114A4C7B0FDDAB2DF3629054F94CD79D35F1CB08EDB6D6763CAF42BE5D84912C52E7E18C73D115DD6F3DD2B9FF0C6640078D5E774680054A92136727\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-osx-x64.tar.gz\",\n            \"hash\": \"516D8CB764F920DA5D549798392FCF43351A9C561F528FA1ACD7E9D4A112F598629FBC56C11EFA4DE8A95049F0448D85C002FBC55D19FE295327D1F68DF9F5FD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-rhel.6-x64.tar.gz\",\n            \"hash\": \"77A952FFFDE2C04342F9BF5BABD937658F41ADDACBC11A984686711E73128C1060C1D64F4DCAF09A3D213375593D541B6297EB4283E62A043A99832F99F85A8B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f173ad5b-a833-44ad-a50c-3c0867dc16fb/19a302b2440bd9465e77b4114d72577f/dotnet-sdk-2.1.801-win-gs-x64.exe\",\n            \"hash\": \"F74A386D2780977E3F454A30EFBEBEF87599D6BA9FFA1708A70BD7A5721CE05E012E273C6AD6085990A4D9E993F3D53C9DCE90E44C69FC2A8DDD9FBBA14ADA80\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e7934255-337b-4856-8635-ab4834abdbca/1ff57a66cefaceb15a383b39a92ab659/dotnet-sdk-2.1.801-win-gs-x86.exe\",\n            \"hash\": \"4C90502CD2FAA9110412FD1D3DB6A490656821E3FBC4BB917FF16A632AA2F010D21B88123D828131E7D4B664D13D837C6686C2EA16CAC7F90FE0A48CDB2EF19A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-win-x64.exe\",\n            \"hash\": \"F74A386D2780977E3F454A30EFBEBEF87599D6BA9FFA1708A70BD7A5721CE05E012E273C6AD6085990A4D9E993F3D53C9DCE90E44C69FC2A8DDD9FBBA14ADA80\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-win-x64.zip\",\n            \"hash\": \"60D4A47A51FF542329A016ACC17AB7E2982297242F7943F0346A03D3744808EBB89BDB7083FDDEAFCDBB9C3616AEC2190464965193F9BAC8D95E8BE9042359CB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-win-x86.exe\",\n            \"hash\": \"4C90502CD2FAA9110412FD1D3DB6A490656821E3FBC4BB917FF16A632AA2F010D21B88123D828131E7D4B664D13D837C6686C2EA16CAC7F90FE0A48CDB2EF19A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-win-x86.zip\",\n            \"hash\": \"22102045C23FC0A4B9B67AA4B8847666CCB99D5578CE1CF693C409FE1F01EFF3D0FEB4A9A04E5659E041763A96F9318FBAB7CF094254E84F835FA78B7983B5CD\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.801\",\n          \"version-display\": \"2.1.801\",\n          \"runtime-version\": \"2.1.12\",\n          \"vs-version\": \"16.2.0\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.6\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-linux-arm.tar.gz\",\n              \"hash\": \"F3E201274D566D5955506B52A0A334FBC88CEB6204CAE7535BBF8493397A9244CCCA8CA9C670CAB5646804F0E9A6B2A5F8CD213BF8BB90DC332985D89845F486\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-linux-arm64.tar.gz\",\n              \"hash\": \"9525B86EB8E1CBE22C94967030FD8E1672829D61E45B39B1E0146296201984E92B7AA399F10E6E6B24F6D3025E8DA5577F3D231E47AD69906C1ABF9A195F1206\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-linux-musl-x64.tar.gz\",\n              \"hash\": \"A3F9044D04A18BEB6DCBAE5A91BBEADB38B17870154B91CAF201E8656C44325D43C24AA0BB5F7A934A818C3A403ED2A2AF428F456FB63A21723DC50988F788E7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-linux-x64.tar.gz\",\n              \"hash\": \"5781C6E254270803D9BB2C29B1555FB9DB258BF99BA2EFA2B457CA28226C70D6305C9B7C141CBF49ADE4915E136FAE941727ADFC60373E4822C52BF0E92C451B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0d858af7-d07c-43a4-af9f-75a02c814a76/bb09f81900f42f00fe3078780bf17f08/dotnet-sdk-2.1.801-osx-gs-x64.pkg\",\n              \"hash\": \"73926178114A4C7B0FDDAB2DF3629054F94CD79D35F1CB08EDB6D6763CAF42BE5D84912C52E7E18C73D115DD6F3DD2B9FF0C6640078D5E774680054A92136727\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-osx-x64.pkg\",\n              \"hash\": \"73926178114A4C7B0FDDAB2DF3629054F94CD79D35F1CB08EDB6D6763CAF42BE5D84912C52E7E18C73D115DD6F3DD2B9FF0C6640078D5E774680054A92136727\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-osx-x64.tar.gz\",\n              \"hash\": \"516D8CB764F920DA5D549798392FCF43351A9C561F528FA1ACD7E9D4A112F598629FBC56C11EFA4DE8A95049F0448D85C002FBC55D19FE295327D1F68DF9F5FD\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-rhel.6-x64.tar.gz\",\n              \"hash\": \"77A952FFFDE2C04342F9BF5BABD937658F41ADDACBC11A984686711E73128C1060C1D64F4DCAF09A3D213375593D541B6297EB4283E62A043A99832F99F85A8B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f173ad5b-a833-44ad-a50c-3c0867dc16fb/19a302b2440bd9465e77b4114d72577f/dotnet-sdk-2.1.801-win-gs-x64.exe\",\n              \"hash\": \"F74A386D2780977E3F454A30EFBEBEF87599D6BA9FFA1708A70BD7A5721CE05E012E273C6AD6085990A4D9E993F3D53C9DCE90E44C69FC2A8DDD9FBBA14ADA80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e7934255-337b-4856-8635-ab4834abdbca/1ff57a66cefaceb15a383b39a92ab659/dotnet-sdk-2.1.801-win-gs-x86.exe\",\n              \"hash\": \"4C90502CD2FAA9110412FD1D3DB6A490656821E3FBC4BB917FF16A632AA2F010D21B88123D828131E7D4B664D13D837C6686C2EA16CAC7F90FE0A48CDB2EF19A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-win-x64.exe\",\n              \"hash\": \"F74A386D2780977E3F454A30EFBEBEF87599D6BA9FFA1708A70BD7A5721CE05E012E273C6AD6085990A4D9E993F3D53C9DCE90E44C69FC2A8DDD9FBBA14ADA80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-win-x64.zip\",\n              \"hash\": \"60D4A47A51FF542329A016ACC17AB7E2982297242F7943F0346A03D3744808EBB89BDB7083FDDEAFCDBB9C3616AEC2190464965193F9BAC8D95E8BE9042359CB\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-win-x86.exe\",\n              \"hash\": \"4C90502CD2FAA9110412FD1D3DB6A490656821E3FBC4BB917FF16A632AA2F010D21B88123D828131E7D4B664D13D837C6686C2EA16CAC7F90FE0A48CDB2EF19A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.801/dotnet-sdk-2.1.801-win-x86.zip\",\n              \"hash\": \"22102045C23FC0A4B9B67AA4B8847666CCB99D5578CE1CF693C409FE1F01EFF3D0FEB4A9A04E5659E041763A96F9318FBAB7CF094254E84F835FA78B7983B5CD\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.12\",\n        \"version-display\": \"2.1.12\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19170.12\"\n        ],\n        \"vs-version\": \"15.9.13, 16.1.3, 16.2.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-linux-arm.tar.gz\",\n            \"hash\": \"09B068D5DC9CBB20B69C8ED4355EADBBFA1BF39475A66CB1DA4E9A505DEE78A612A2B848EAF8AAFC9D1B8D213410F2EF90464C53F87F68F528EF82BBCC4B0CCB\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"D4869B50F8B07B3371AEEC7A89965C9DDF6870123A165952CEB35C150CBC3B8A261EC1C10D3B75159828A3BA684E829591D066FB75A6A41AE68774D282161E71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-linux-x64.tar.gz\",\n            \"hash\": \"07EA922C59CD067A6195D4B8DCD1D0460033B4FC621C2CB85F1CDED18E03DD46FB091398D9A21377B81A6B28705C336E85B74CFB7DE986462D007703C12F539A\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-osx-x64.tar.gz\",\n            \"hash\": \"42009BF40AC85543A2BE3B1FD756E293E1CCDC72BC35DAB623631D994579891675F54B162850067FD4713BBE7B4756A2627F2C7F83C543E20A406B1F19458304\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-win-x64.exe\",\n            \"hash\": \"A8B7890702E5CC8B9D789C5F7A7B407A3D8347F9ADC793EB53CB4003CBCD709B5CDB64E41685AAD0DDAE448C152B56084279BFFD4F557BB8F655BDC50E307B3E\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-win-x64.zip\",\n            \"hash\": \"168DA5F714611E73FAAC29CDA8CDF183AF2CC9E4A703943A435C385C36F55BD9BB15A1CA75C9BEA69EADE8C9031F828B3D767A4DF0A11AC7E269AAA6ED30CA2B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-win-x86.exe\",\n            \"hash\": \"41EDD835137E11C7EA4B1EA029B98D44628D462AE18980EC907A6E99EDC053BBCA3401E562D84D62136CF83E39F64159BBFCE07F2724228588583E42BE467736\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-win-x86.zip\",\n            \"hash\": \"82D4CE3CE1DC537BE71BE2A409363383E529B048260FF2FEE5318EE9125A6B133A3C91473D5C94C38F8C8D9B74F18C5F034CDA08D41E74D593BC5CD15AD142B2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/dotnet-hosting-2.1.12-win.exe\",\n            \"hash\": \"B80AD724CC0EAB7C63E1D0FBF62BDAA573BA2626F331AE92A7669E77308589ABF06A86E268640DCCCE39AB03446133075CD69188A5E3D701B4E51B187DEA22AC\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-07-09\",\n      \"release-version\": \"2.1.12\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-1075\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-1075\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.12/2.1.12.md\",\n      \"runtime\": {\n        \"version\": \"2.1.12\",\n        \"version-display\": \"2.1.12\",\n        \"vs-version\": \"15.9.13, 16.1.3, 16.2.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-linux-arm.tar.gz\",\n            \"hash\": \"DA041CB2AFA557E70D00039FDDACAFE48DF28B8DA9C06F790CC841ECABA496F00880EF3349731860835007FA12F0AEF7D50D5EB200297AF5E37F4503C62ACECA\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-linux-arm64.tar.gz\",\n            \"hash\": \"D5F3530F7C0DCE98845B5704127C553C788DF0006DA82F5566682B34171B8F2A3DDD6F849FEFC4E97EC277715D096E23B8D18CDBFC5BF9EB128F22B0C1BDBACD\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"E9361C78D699F67DFC2B12E87B6B004B67D835F94A1301E6EDE3007C9A8904BBDEC882967DFB40B9A66D10711649129A90C907825BEA7A846E85D6D1DA8F7BC8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-linux-x64.tar.gz\",\n            \"hash\": \"9B6D07E180BA1D19F0B00263AF9DCF3147B0869564EF82EC20584B25D801A2D5C353F0F2BD7BD7E92E75CEB4E4BCA35EC3EADE73A2B25A0306D4D95EF5071A08\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-osx-x64.pkg\",\n            \"hash\": \"2A90EC4721AF78F223DCBBC43494D6A3CA67488C88DE03E6CD41FC63E06B14C82B5FBCE986C77AF8D61C98C85CEF3A6C2DB0C10B8D400FC6BF34127A4FA0FF86\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-osx-x64.tar.gz\",\n            \"hash\": \"9BA56DF0F626991D13463716D5E079599B8F5332808B63357851B35E3A3F32E8EFB80F73E1F6851CD67A8AE4D24A8AF9F0A768CF57B759B3A14545ACC5689395\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-rhel.6-x64.tar.gz\",\n            \"hash\": \"4370F717D2BAED7BAD1F34642B93DDD80A1F692E9702340D897C23B870AC81B023B243D04AC33AE9ADDD4CB5B4EC9AE37E0E5969E087F0FB471F5EA27FB3A28F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-arm.zip\",\n            \"hash\": \"F131CDE713234236775EA45B6D522EB0E81E89CEC32D7D6E74244E5A4457FEDE3A2F52BD77FA8D50717886A67CFFEF0BAC3CC8EEF7CDB43F8C69BF15D3CE1E2F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-x64.exe\",\n            \"hash\": \"9739406353CCB1A4BCA78FCAF9D09BBD9C6A9D59EBC8DC36D6FFE4C19568847F2372F75D2D68DC299AB2128A8F89CD35D08FCFA03C1F792ED4E38DF424C12604\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-x64.zip\",\n            \"hash\": \"CE3F8ABD92997645035B7655E9AE61E2023FFC9848B250945E140BFD05C26BEED35982E8F5A5D263BC576112C6F4D3E82B0BEA45BD07D5331F290C1D8D2EB9CE\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-x86.exe\",\n            \"hash\": \"97A7D7A3F7E30B0987CE9E56E102B0601344060749A277E516879AD17C6B4154F2A8E1C7E686843CC1F8C129173BB2062FED4914B91446BDB8498383FA17C3F0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.12/dotnet-runtime-2.1.12-win-x86.zip\",\n            \"hash\": \"66C9EB59EE72BD53E5D10EB7967A4F347C6349D2E655E758B792CE914E56E541CFA80E9CF8233F0F6414FF1DCE730691FF031437D2590465B075B8972E5DC09C\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.701\",\n        \"version-display\": \"2.1.701\",\n        \"runtime-version\": \"2.1.12\",\n        \"vs-version\": \"16.1.2\",\n        \"vs-support\": \"Visual Studio 2019 (v16.1)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-linux-arm.tar.gz\",\n            \"hash\": \"EB4F097965ADA20D7DEB707BC60832ECB80BCA62FD0C07BD4777FFFB24BCB27E6CB62FE8C8AACC4187775E5755975FB129E5DEBDFF069F504CA4137ED19ADDDD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-linux-arm64.tar.gz\",\n            \"hash\": \"B8205AD2ECCF6CD7551C44A914E01C1CFA81E5D0847376B39288779E9B83C2296DBEFBC7F97C576DF66666E0F901C349E36095194E409506B52F28D102E32A8F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-linux-musl-x64.tar.gz\",\n            \"hash\": \"4897C1E7226CE1DF13394096059A106529E080089ECC84913EE7F0173896EC71A6CFBDC6BE0B407EDFA4D70D39F1EDC6FAC85EDC11D536527D4BD45CAD5E8837\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-linux-x64.tar.gz\",\n            \"hash\": \"C915BDBF493CD5CAF60E051B3BE2C587D4CC28FEC426AB8E9AC1BBAB7F620273CF2B76F4ACA10DA9807CDE1B7141A0A8D07BA35C08D0C70006767589CEEC04A4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bb6e2274-e9cc-4444-8bb3-bb2189bddbcf/074879e1a9c4d158fd92c6358c77828d/dotnet-sdk-2.1.701-osx-gs-x64.pkg\",\n            \"hash\": \"74917740DCE551176489241D457808F165C84CFD236125BEB02163F0A110201D2D27EB8A2AA8D90F044B753C00D225F013D7C56D2BC14B7C72979FD139237DB8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-osx-x64.pkg\",\n            \"hash\": \"74917740DCE551176489241D457808F165C84CFD236125BEB02163F0A110201D2D27EB8A2AA8D90F044B753C00D225F013D7C56D2BC14B7C72979FD139237DB8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-osx-x64.tar.gz\",\n            \"hash\": \"D82EB94EA126146C35D2F4F95010F61DC52E2FFD4501565E3C4F04AC633460E784CB54D7F9DB9950BE297DF6E612CAFF9D5BA77936FAEE84F1E323BBE21A641C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-rhel.6-x64.tar.gz\",\n            \"hash\": \"1D65923100C17F1587ACBAE61DFFF4728C4BAEA714337D4FD13F5082EA366565997AD78DB0A34AB0E0814EEADD112B7062F03A25159ABF7F5ACC71A89C25FD2E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c19521a2-d306-490f-b64f-e09795f8b57b/9fcc3cc1d01d4ac782e1bcc614312dfc/dotnet-sdk-2.1.701-win-gs-x64.exe\",\n            \"hash\": \"E2429BE0EAF8BBCB51E2FB0B92E66A1C9BCABC0C5128811BED8341E18F9BE3B47DF894BA7EA0193D8C69C04379C3C5E0D5F26E6F64455D76D6B40CFB82B4A559\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/937cb0ae-3f37-4171-9c1c-47972f3fae3c/3db5ed169da0a0ebc1f416d991794b12/dotnet-sdk-2.1.701-win-gs-x86.exe\",\n            \"hash\": \"94AD69AD07774059E544C678953E8F00682787035EEBA8E82FE9AD00E337245D38B989C78EDD128EBB36FE4262174EC7A1A113CF359E2D6DC657438BC82961D6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-win-x64.exe\",\n            \"hash\": \"E2429BE0EAF8BBCB51E2FB0B92E66A1C9BCABC0C5128811BED8341E18F9BE3B47DF894BA7EA0193D8C69C04379C3C5E0D5F26E6F64455D76D6B40CFB82B4A559\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-win-x64.zip\",\n            \"hash\": \"A5517FD1B9E9BB9AEBC70F71BD575B72E1AC47DBE41419008C25C756A1150EE0B2AE0E67C0BCC36C00A02CEB66E146D6E20CE24293C3706B5BCB2CAF67184994\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-win-x86.exe\",\n            \"hash\": \"94AD69AD07774059E544C678953E8F00682787035EEBA8E82FE9AD00E337245D38B989C78EDD128EBB36FE4262174EC7A1A113CF359E2D6DC657438BC82961D6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-win-x86.zip\",\n            \"hash\": \"32548CE528FB4F4E860804477A818FD1198B935FE9497978B50D8FBA43D8BCFC1B82AC5ED33250D83013DB2E63C47196DC56FDABAB79180447D7B71F29168435\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.1.701\",\n          \"version-display\": \"2.1.701\",\n          \"runtime-version\": \"2.1.12\",\n          \"vs-version\": \"16.1.2\",\n          \"vs-support\": \"Visual Studio 2019 (v16.1)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-linux-arm.tar.gz\",\n              \"hash\": \"EB4F097965ADA20D7DEB707BC60832ECB80BCA62FD0C07BD4777FFFB24BCB27E6CB62FE8C8AACC4187775E5755975FB129E5DEBDFF069F504CA4137ED19ADDDD\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-linux-arm64.tar.gz\",\n              \"hash\": \"B8205AD2ECCF6CD7551C44A914E01C1CFA81E5D0847376B39288779E9B83C2296DBEFBC7F97C576DF66666E0F901C349E36095194E409506B52F28D102E32A8F\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-linux-musl-x64.tar.gz\",\n              \"hash\": \"4897C1E7226CE1DF13394096059A106529E080089ECC84913EE7F0173896EC71A6CFBDC6BE0B407EDFA4D70D39F1EDC6FAC85EDC11D536527D4BD45CAD5E8837\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-linux-x64.tar.gz\",\n              \"hash\": \"C915BDBF493CD5CAF60E051B3BE2C587D4CC28FEC426AB8E9AC1BBAB7F620273CF2B76F4ACA10DA9807CDE1B7141A0A8D07BA35C08D0C70006767589CEEC04A4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bb6e2274-e9cc-4444-8bb3-bb2189bddbcf/074879e1a9c4d158fd92c6358c77828d/dotnet-sdk-2.1.701-osx-gs-x64.pkg\",\n              \"hash\": \"74917740DCE551176489241D457808F165C84CFD236125BEB02163F0A110201D2D27EB8A2AA8D90F044B753C00D225F013D7C56D2BC14B7C72979FD139237DB8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-osx-x64.pkg\",\n              \"hash\": \"74917740DCE551176489241D457808F165C84CFD236125BEB02163F0A110201D2D27EB8A2AA8D90F044B753C00D225F013D7C56D2BC14B7C72979FD139237DB8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-osx-x64.tar.gz\",\n              \"hash\": \"D82EB94EA126146C35D2F4F95010F61DC52E2FFD4501565E3C4F04AC633460E784CB54D7F9DB9950BE297DF6E612CAFF9D5BA77936FAEE84F1E323BBE21A641C\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-rhel.6-x64.tar.gz\",\n              \"hash\": \"1D65923100C17F1587ACBAE61DFFF4728C4BAEA714337D4FD13F5082EA366565997AD78DB0A34AB0E0814EEADD112B7062F03A25159ABF7F5ACC71A89C25FD2E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c19521a2-d306-490f-b64f-e09795f8b57b/9fcc3cc1d01d4ac782e1bcc614312dfc/dotnet-sdk-2.1.701-win-gs-x64.exe\",\n              \"hash\": \"E2429BE0EAF8BBCB51E2FB0B92E66A1C9BCABC0C5128811BED8341E18F9BE3B47DF894BA7EA0193D8C69C04379C3C5E0D5F26E6F64455D76D6B40CFB82B4A559\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/937cb0ae-3f37-4171-9c1c-47972f3fae3c/3db5ed169da0a0ebc1f416d991794b12/dotnet-sdk-2.1.701-win-gs-x86.exe\",\n              \"hash\": \"94AD69AD07774059E544C678953E8F00682787035EEBA8E82FE9AD00E337245D38B989C78EDD128EBB36FE4262174EC7A1A113CF359E2D6DC657438BC82961D6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-win-x64.exe\",\n              \"hash\": \"E2429BE0EAF8BBCB51E2FB0B92E66A1C9BCABC0C5128811BED8341E18F9BE3B47DF894BA7EA0193D8C69C04379C3C5E0D5F26E6F64455D76D6B40CFB82B4A559\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-win-x64.zip\",\n              \"hash\": \"A5517FD1B9E9BB9AEBC70F71BD575B72E1AC47DBE41419008C25C756A1150EE0B2AE0E67C0BCC36C00A02CEB66E146D6E20CE24293C3706B5BCB2CAF67184994\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-win-x86.exe\",\n              \"hash\": \"94AD69AD07774059E544C678953E8F00682787035EEBA8E82FE9AD00E337245D38B989C78EDD128EBB36FE4262174EC7A1A113CF359E2D6DC657438BC82961D6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.701/dotnet-sdk-2.1.701-win-x86.zip\",\n              \"hash\": \"32548CE528FB4F4E860804477A818FD1198B935FE9497978B50D8FBA43D8BCFC1B82AC5ED33250D83013DB2E63C47196DC56FDABAB79180447D7B71F29168435\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.605\",\n          \"version-display\": \"2.1.605\",\n          \"runtime-version\": \"2.1.12\",\n          \"vs-version\": \"16.0.5\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-linux-arm.tar.gz\",\n              \"hash\": \"4DF127DBF038D3CFDF2B4467177DCA2A9D229134315BE0A917F21563A62339F2D49B8BFE553EDE2C7C93BDC7F822C36B77E1B0074CC7E47D8423BDD1BC75723D\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-linux-arm64.tar.gz\",\n              \"hash\": \"F5ABF472401F06E00FE251243FF54E5CDC1EA2A2ECEF89344773E8467211A70F0645A786B313748C5B5DF93B683CB4354A78FB962114835195BFE934FC7DBF78\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-linux-musl-x64.tar.gz\",\n              \"hash\": \"87FFE8BDA3FE7298CE2314DCACA17AEF1BBE1F0F7DC486C12A236249F5E74D5F3CDE16279A362A4FE03AEA6F7A53E8EF793D28722CC91726379E0C8B9D1933C7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-linux-x64.tar.gz\",\n              \"hash\": \"E18BA7BD9A9900DCDA249E60231E6BC3870E6253E55B95E40EF14CD022722D7E2D68AD2711076B9C57482B01BE252593AA9139B359640EFD13C2F9BF2436CA94\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e90de9b4-8c22-47a7-a0c8-a260c33ddd6c/a4e99c3de604382cf506e93b43d2146c/dotnet-sdk-2.1.605-osx-gs-x64.pkg\",\n              \"hash\": \"15F19885C134718BA24DB86DB2DD3482F64D8DBD77390BCF96BD82516450D37D98567399D1E33ED971851BD3FE28555BFB85774252E29A3A55BF3655CC995DB6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-osx-x64.pkg\",\n              \"hash\": \"15F19885C134718BA24DB86DB2DD3482F64D8DBD77390BCF96BD82516450D37D98567399D1E33ED971851BD3FE28555BFB85774252E29A3A55BF3655CC995DB6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-osx-x64.tar.gz\",\n              \"hash\": \"50D5A88FEBAC2A48E90F9793A4173C8702077BF78FB6658F88AC0D718D1CD6716DBC8F4B44E9105AE3040862C16C8710A4F96CF442111F946DC15CAF6DAE70C7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-rhel.6-x64.tar.gz\",\n              \"hash\": \"CA25F5766CB91E16435C5B149E649B8923535BD0E6212D654FAC03BCF24DB7F5F9174F05F99F0ED40D54BF2E30B64F5AE83AD20DCF8E569780896F4A09B09BB3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-win-x64.exe\",\n              \"hash\": \"FCED9C98ABBF9E110C781DEFC6BD795CE86A5B5ABCD480D716F1D77094C6AB79840A5C6110166363E437B985D3B1CF1A9E9334975176135BC4B6E4D0ADD8BF82\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-win-x64.zip\",\n              \"hash\": \"40B4C0A3377BBF3A72EE19119BB13E46BC1E174487FB64CB503354853E61477130921820AE1AC32B7CCF6A925907FED986343EBD78C29794130351C7550C42C3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-win-x86.exe\",\n              \"hash\": \"C0C18D6FD8083CE6160B02D8849286B9DD8D73FB9120FE841104DF3B6AD0894D1C23DA5275653EC83C96D9CEACB37A368BD2CAA4B98201F8C6DACD3A22BBD034\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.605/dotnet-sdk-2.1.605-win-x86.zip\",\n              \"hash\": \"ADAC9130959D6D25167E48731F0532ECBC02C637C7D4631067F9B167B85577029A55100564B1FFAE14CB2519F901FDABA83B0DE75EFF82225928D820F52EE081\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/17c91182-e67d-4d65-afee-cbe95b5a2433/fa734f75d2ba879ff20f960eddd81732/dotnet-sdk-2.1.605-win-gs-x64.exe\",\n              \"hash\": \"FCED9C98ABBF9E110C781DEFC6BD795CE86A5B5ABCD480D716F1D77094C6AB79840A5C6110166363E437B985D3B1CF1A9E9334975176135BC4B6E4D0ADD8BF82\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/42a75a4b-7de8-4fbc-9141-856a283eb008/7f861fbd424e878bf614528951ac4d2a/dotnet-sdk-2.1.605-win-gs-x86.exe\",\n              \"hash\": \"C0C18D6FD8083CE6160B02D8849286B9DD8D73FB9120FE841104DF3B6AD0894D1C23DA5275653EC83C96D9CEACB37A368BD2CAA4B98201F8C6DACD3A22BBD034\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.1.508\",\n          \"version-display\": \"2.1.508\",\n          \"runtime-version\": \"2.1.12\",\n          \"vs-version\": \"15.9.13\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-linux-arm.tar.gz\",\n              \"hash\": \"91612A610EC18FF382D32D3634E5BF95A03B2F5DBC327B28701917D3316E9C2307087D3903A4A992E4E457F104BFBC9F8409CEBEC8058F24E570371D9668CDDC\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-linux-arm64.tar.gz\",\n              \"hash\": \"80B4145BBA00320D988C55E7A63A3C07CA815F63ABA61441479B280A9A14C5A35D1E9BBE06118926D32AE04A686C448E1F82E453598602A21F5275BAF2A6D274\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-linux-musl-x64.tar.gz\",\n              \"hash\": \"A08FAFCEC2FF6890C69B78DD5D65E150CF7364C0D416E520A5887E8DA667C16CA2659C97D1AEB4443684B90C97C1D2D615A60F016DA59783E50407264008D4A6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-linux-x64.tar.gz\",\n              \"hash\": \"40A2A3F84EFACE6D8FCBFC9184AF6B8A3E5405DC04D389308D7AAB8C06F6531CDF3023EF55379B397452A5D48B41D899CC02640C552567040115878C6A765D9F\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fbea1ec3-8a60-4f4c-988c-d5bb33910b5e/e306c54fe0796912adc120236bee880d/dotnet-sdk-2.1.508-osx-gs-x64.pkg\",\n              \"hash\": \"4788E9BA8FA40BBD2E7AFB3D2E17F718E3EE058256E7B5843B4A59E5CE96BB36CE474B36B6362EC78E4EC269188D88CA9A38EC667323A360A2EFF38DA4B7636B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-osx-x64.pkg\",\n              \"hash\": \"4788E9BA8FA40BBD2E7AFB3D2E17F718E3EE058256E7B5843B4A59E5CE96BB36CE474B36B6362EC78E4EC269188D88CA9A38EC667323A360A2EFF38DA4B7636B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-osx-x64.tar.gz\",\n              \"hash\": \"075AF698D6B66A931D02F6E2E7CF42F504C17306317F9B361F5260B8B2E65CCD8A5D369C0F6C6ABFAC4EA5E11E08777167377820C7C7B1C96063C2CD95789D6F\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-rhel.6-x64.tar.gz\",\n              \"hash\": \"2708FA040465807A0972DF8207E8619C21F6A3104E7C10CB1C5306E33AA25483179C65478349CF65D979824505BC30EDC25360D65BDA0D1657F494D58AFCACB9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-win-x64.exe\",\n              \"hash\": \"1527788A856C0179EA5AC973BB8846842D820A819EDE0B10B77EFF90834335BA4F81BE696B1DE057871FC749B77FC49AAFE2BD3680146E9369FE3C9E0A9DFFEF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-win-x64.zip\",\n              \"hash\": \"C2156600C8369D2A381796271C63699D6A348FBC1091C5C6C5C7516D1316E292A51DF4ADAB508F3222906A92E4FE21B5DC3F2275665DE4A791F70E57F1E40B55\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-win-x86.exe\",\n              \"hash\": \"B175A3E21A92D185F06DB84D03A28DCFFA093E5C7319D42B6A099007D585A9E7700EF2BBF92F2D6B6C7B23C577A0990BF144CCE77B3ACD5CF4D9351CDD482794\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.508/dotnet-sdk-2.1.508-win-x86.zip\",\n              \"hash\": \"028026FC5DE817481647F23F990E54D10ADEE02B79BBCE974293DA7CCF91A8B7564F7680D004A6DA4DE0CC779A5500B02BC98350F0B07ECB477FA40C6CDB0FA5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/df91a7da-d6df-407f-a9b3-d972cdc101a4/184efd89abfb89656b2bef93427bd578/dotnet-sdk-2.1.508-win-gs-x64.exe\",\n              \"hash\": \"1527788A856C0179EA5AC973BB8846842D820A819EDE0B10B77EFF90834335BA4F81BE696B1DE057871FC749B77FC49AAFE2BD3680146E9369FE3C9E0A9DFFEF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/328c0171-20ef-4f8c-96cc-12b663c8b92e/a73850d2906e888691fdf6413b28c0c8/dotnet-sdk-2.1.508-win-gs-x86.exe\",\n              \"hash\": \"B175A3E21A92D185F06DB84D03A28DCFFA093E5C7319D42B6A099007D585A9E7700EF2BBF92F2D6B6C7B23C577A0990BF144CCE77B3ACD5CF4D9351CDD482794\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.12\",\n        \"version-display\": \"2.1.12\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19170.12\"\n        ],\n        \"vs-version\": \"15.9.13, 16.1.3, 16.2.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-linux-arm.tar.gz\",\n            \"hash\": \"09B068D5DC9CBB20B69C8ED4355EADBBFA1BF39475A66CB1DA4E9A505DEE78A612A2B848EAF8AAFC9D1B8D213410F2EF90464C53F87F68F528EF82BBCC4B0CCB\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"D4869B50F8B07B3371AEEC7A89965C9DDF6870123A165952CEB35C150CBC3B8A261EC1C10D3B75159828A3BA684E829591D066FB75A6A41AE68774D282161E71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-linux-x64.tar.gz\",\n            \"hash\": \"07EA922C59CD067A6195D4B8DCD1D0460033B4FC621C2CB85F1CDED18E03DD46FB091398D9A21377B81A6B28705C336E85B74CFB7DE986462D007703C12F539A\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-osx-x64.tar.gz\",\n            \"hash\": \"42009BF40AC85543A2BE3B1FD756E293E1CCDC72BC35DAB623631D994579891675F54B162850067FD4713BBE7B4756A2627F2C7F83C543E20A406B1F19458304\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-win-x64.exe\",\n            \"hash\": \"A8B7890702E5CC8B9D789C5F7A7B407A3D8347F9ADC793EB53CB4003CBCD709B5CDB64E41685AAD0DDAE448C152B56084279BFFD4F557BB8F655BDC50E307B3E\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-win-x64.zip\",\n            \"hash\": \"168DA5F714611E73FAAC29CDA8CDF183AF2CC9E4A703943A435C385C36F55BD9BB15A1CA75C9BEA69EADE8C9031F828B3D767A4DF0A11AC7E269AAA6ED30CA2B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-win-x86.exe\",\n            \"hash\": \"41EDD835137E11C7EA4B1EA029B98D44628D462AE18980EC907A6E99EDC053BBCA3401E562D84D62136CF83E39F64159BBFCE07F2724228588583E42BE467736\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/aspnetcore-runtime-2.1.12-win-x86.zip\",\n            \"hash\": \"82D4CE3CE1DC537BE71BE2A409363383E529B048260FF2FEE5318EE9125A6B133A3C91473D5C94C38F8C8D9B74F18C5F034CDA08D41E74D593BC5CD15AD142B2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.12/dotnet-hosting-2.1.12-win.exe\",\n            \"hash\": \"B80AD724CC0EAB7C63E1D0FBF62BDAA573BA2626F331AE92A7669E77308589ABF06A86E268640DCCCE39AB03446133075CD69188A5E3D701B4E51B187DEA22AC\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.12\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9b6a0892-903d-4b68-aaf0-8b9479c27ea3/a2431f48b4080c8110a266acbff1b875/aspnet-2.1.12-symbols.zip\",\n            \"hash\": \"98AAEB9F9F9054FA3D5E02E83F9B0DF83E48CD3900D41F28B92B123975E5FCE90C96A6D226E1B944921DD97EE5EB21E1ACB97B19BF818A846C75BA1568DF5E1C\"\n          },\n          {\n            \"name\": \"cli215xx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b2827643-f988-4be5-9fab-e138abfeb943/61396a618cf18e01c265f76b0163e4ef/cli215xx-2.1.12-symbols.zip\",\n            \"hash\": \"26445FEF3665A038084529D0768F424118641D6AEAE676F0C703C4500D5EBB7917879F3CE7BF9845C817EA4A2698EA1A26E951A00A806B83F5E248837E90A5EC\"\n          },\n          {\n            \"name\": \"cli216xx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6efc74cb-8901-4cf5-825e-67b7e90fc41f/c03c4bb19edc4dea072c5b8b0b6b1bd4/cli216xx-2.1.12-symbols.zip\",\n            \"hash\": \"C8B09199C8CD9B4D9F0DBEB53E66EDD2D01584EE98B0AA1982E8C045B84BF65FBB65A9E8FDD0692D3AB00AC6062B18B6CC18AFB9D2E603B930266DF7A09D3466\"\n          },\n          {\n            \"name\": \"cli217xx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/97244428-1e08-444e-930a-f9b6ccc08863/e80424a203118e63b5b4033df48396dd/cli217xx-2.1.12-symbols.zip\",\n            \"hash\": \"BAA95D20E46C7DE27F723F7AC699B4ACFC5B7715B2ADE18397A9E90946A2393FF6BBB02602D34A0535CC03DBC43F55C897C8FEBE9AA8AF166D1A97302DA1F3E9\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b992d510-45cc-4d55-8bd6-9cd67b5d5dde/b719f8b5e4a497b9a1448008cf9a2631/core-setup-2.1.12-symbols.zip\",\n            \"hash\": \"138D430C403596002FE1F0DD144BB0904C478255D2E696CE2D3AA8631A430287E01A1D38B934E8644F67F5EF25C5E7FCF0017B2D93F11BE80E15250CB5DD53EB\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e5ab8e45-a8ee-4445-bb67-ef489bb5f67d/c3b1272e7d2e7048900e9b1b9d0bd8e9/coreclr-2.1.12-symbols.zip\",\n            \"hash\": \"53BE5656A301872C14E821443C30C8737C6276324EE8EFFEF48A3EBE2D8CEC58991002F6ED3933D851F35624FB8035040EAC1DCF5AED415F0BE48557476AC1CB\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d288a4e6-535e-4166-b366-255432094f24/7305738b4ca3aa8de98e35357fa36636/corefx-2.1.12-symbols.zip\",\n            \"hash\": \"262D3A1461622F54A5E2CB24CDA7B9337C67D3AAD715F7F6747B28B173739CD27B1A511B4EE918FE9C22DFA3386E460A806D55BCE4846F4B1634C9F01FC75DF9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/895223a7-e490-44ab-b7b0-46c510ccb51b/1438cae050d6fabcfdf08caf346500bf/dotnet-sdk-2.1.12-symbols.zip\",\n            \"hash\": \"88EE782E9EA1819C7C06443D99A38F805158484ECAFB430EAE04D604DA0AD8FE6D2BDD13D7A379B33D36EA4427FA41CE79267C07FBC9B1DFEF82B23A490636F3\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-05-21\",\n      \"release-version\": \"2.1.700\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.700-SDK/2.1.700-SDK-download.md\",\n      \"runtime\": {\n        \"version\": \"2.1.11\",\n        \"version-display\": \"2.1.11\",\n        \"vs-version\": \"16.1.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-arm.tar.gz\",\n            \"hash\": \"4EC03929EA9995216ECFD2569BEC204AA69D55CB483267EFB800BE6CD080920B1559B60D2408489AD8FC5F436D3DCFDCD085A5B59F6084AA8AAF2CCC8157A910\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-arm64.tar.gz\",\n            \"hash\": \"1C1562108F54822EE3D073D537306438F95EDCDEF02C18335B0D041D50887C15AFC81EB757ACEEC7A3F9D04A9DEAB0017391690637645FEF5A0B46A2DDC17D93\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"1EEC1CA48827BDD2548ADE5E8FAD2CFABD806D59A44DC6505B7BBAB8DDE27ECBDF46238A6245300809EB2A560E6777691FA21E85B38874C8235E4FACE9580441\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-x64.tar.gz\",\n            \"hash\": \"BDFE060A98E0170A633F6FA0BB12F3EACFAAF8B719D596CCD83F9D42BA0C835E4E313DD8ABB82970AE655528F57A0871AAB6C1AAE3E6916862599D4214BE906B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-osx-x64.pkg\",\n            \"hash\": \"C0385A2BBB9A64A7FB656047AF9A016769752EA95BC0ADF45B72F56EDA9762C431C869212FFF8D5D32314FD35A3CDFEA17696CAD4BE154A24147255143960EA5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-osx-x64.tar.gz\",\n            \"hash\": \"3113DAA5725ECB41EEE0A12A908505792DA00AFA14D8F2A7B1A5DBD8DC5C17A9E68EB03A8D74CCD92989460EF398FC426BEBEA27357FC09E72F18C8F3036605F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-rhel.6-x64.tar.gz\",\n            \"hash\": \"168001128478F413649DB20AEC41ABCF1BA864FDE11765D07C43F7A271CAE916966A61C49DD8143EF35519F74393A16279CE06AB905DBD93D7B450D02FB7362A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-arm.zip\",\n            \"hash\": \"296DBB75A18D78EDA37E92E1EE9F4B839418267C33DF798D1E1669515C824AEF15E91E9D816331FA0FE2F64CA3E1C7654B46F42B6163A214D667022E4324EE44\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x64.exe\",\n            \"hash\": \"B0C1F6683DD5BFDC93C7070BFE808DE61BAFEA7D9CCCE45D87C19FFA4E8CCCF4A1E741F79B5F14DA5F5644D45342F81A0495B3E048B463F840A183F8A83E8E2C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x64.zip\",\n            \"hash\": \"B5118C4A3532DABA32AEAB686EC3F21779AD28CFB994446AC02AA1902FADDB8B67D383D2B516D4B02538A653E03BD97C4B817C4FFDE6B156ED6BCB8D2E7DFFFB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x86.exe\",\n            \"hash\": \"900A43CEE0BAA5D059ED8906860203820FAC317381BBBBC68C1AC2119E9362CC648EC387E1AC034D66860BEFB59A9EAAF6D635D91EB7B5E6E0E11DD158B3F2F5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x86.zip\",\n            \"hash\": \"75152F5D4346548F5B9FEBDF0D374903453BEEE9FCC64E2D4131C05D299198AE98B5D6547E0177E004B1F8A0FC477CF44EBE1294C3A03BE10BD7F17FA622B0EF\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.700\",\n        \"version-display\": \"2.1.700\",\n        \"runtime-version\": \"2.1.11\",\n        \"vs-version\": \"16.1.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.1)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-linux-arm.tar.gz\",\n            \"hash\": \"DC7F7161B584DD29346D0D306497E35A1D9B2A28C382810E4270ECB57C64D24383E0B2B8BBC6E64705FE9D592DF48A26E0380E544D708DAA66D12AAD354FDE31\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-linux-arm64.tar.gz\",\n            \"hash\": \"08D3415273AD5D1CEAD9B2FD39D3AF2594CD0A6ACD951925A9D2874AFB900FCECCB48E379FBDFD8319A3CE2DB2587195412B175478C7DFBF6B393F4EA6D483CC\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-linux-musl-x64.tar.gz\",\n            \"hash\": \"414A42726476BF0429889EE2D4D0C0AC7E84464A5749C367715BC431B4AA3FBCDDEA2CCC3020ECB1BD0D08EF8DB520940C7DE3FB2BD8AEB704F66A59BD0E4461\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-linux-x64.tar.gz\",\n            \"hash\": \"44258B4FB59927D9977900F0724EEB82248A3CC46EF3067088F8F78EB092C09DA88BBA9B7A488F1549A240E0DD3FEA465FF1FFA6CDABB543B6BB536A12A549D3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/817a7efd-8b54-4b10-9823-12a936abc51b/a1f84d87a7b253a8288a03cc00f8f81d/dotnet-sdk-2.1.700-osx-gs-x64.pkg\",\n            \"hash\": \"DC5321760C4C0A1D5F2A30BE41C468BDE70F736C2F29918F25A13393D56DAC4A51AADACEAF796E216E092CDC54486ECF27B88A4B477F7B673F81874A5C0BFFF7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-osx-x64.pkg\",\n            \"hash\": \"DC5321760C4C0A1D5F2A30BE41C468BDE70F736C2F29918F25A13393D56DAC4A51AADACEAF796E216E092CDC54486ECF27B88A4B477F7B673F81874A5C0BFFF7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-osx-x64.tar.gz\",\n            \"hash\": \"5D9C6FF654DA418B73F7EE711023085B06335E38C215471DF028AD21C3E9826EF3728521A892CC60210FA71586A4CD66C7DA21D7C631E73BE31E1ADDD85DADE6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-rhel.6-x64.tar.gz\",\n            \"hash\": \"5A15FF531DD2029B36EB03E19EA34C65C2E77884AE79ADF2CBB6F338FA32F7ECC63859179CAC8C198068432953C2764CEA3FA9B2144E81B3494ED5E1BD9AF762\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3e70aedc-1aa6-4578-a9ce-08ac43b95bb2/7b8723680bcd71db837bba727daf8291/dotnet-sdk-2.1.700-win-gs-x64.exe\",\n            \"hash\": \"472DFBC269BE021D01D0479C1EC0FF1FA5F34D78907C69DEA0076C57D2E98E85004619C9B282C0C3FDBA7831775F6A955B8FF86A00163CE1C5941A4FECFFA1A0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9f2e7c50-680f-4ddd-b80e-344a8151ada5/607417ca8a1e22407ae3849e1d52be79/dotnet-sdk-2.1.700-win-gs-x86.exe\",\n            \"hash\": \"AD03A18C19DC8F5D4E2FB1DF3DE46BCA1249912416791B02F504A3E221E49D360A216CD059FCF696F9719A4340AE3CCA43CAC6B6433E014D559FDA635FC8BC1E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-win-x64.exe\",\n            \"hash\": \"472DFBC269BE021D01D0479C1EC0FF1FA5F34D78907C69DEA0076C57D2E98E85004619C9B282C0C3FDBA7831775F6A955B8FF86A00163CE1C5941A4FECFFA1A0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-win-x64.zip\",\n            \"hash\": \"E3258E6A33CCE5BCAE6F6D00CFF39BC5F2BDB522DECA855C97975DDD60C5DB2F90CBD2E2CC2022533A65076307756BAC79F93BF156DA14AAFFFA0BD0AE1F0919\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-win-x86.exe\",\n            \"hash\": \"AD03A18C19DC8F5D4E2FB1DF3DE46BCA1249912416791B02F504A3E221E49D360A216CD059FCF696F9719A4340AE3CCA43CAC6B6433E014D559FDA635FC8BC1E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.700/dotnet-sdk-2.1.700-win-x86.zip\",\n            \"hash\": \"B388F7F73606C3D498723442F8CC7435FEE0AF700D9336448848344BE467EC2B1F2E7E52C409369BC85415AF5215D7205125AE37E49743504ECE12270707F9E0\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.11\",\n        \"version-display\": \"2.1.11\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19108.11\"\n        ],\n        \"vs-version\": \"16.1.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-linux-arm.tar.gz\",\n            \"hash\": \"5F4B016947E5706B6ED7A5BB9F767F1F966CAC2267815C3F4E16E1623888B6731122D3779F46556038E6951E72C48B0888A9385C103D2FF6147EFDFF0D148064\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"4D432655F315702897F74FB96ACD71C7BCD168F5DC287823A3731DEEC287853D107C902B1691FB74F6B2D14F24ED26CE0205DFC294DCD9E5149F8E5941EDF3C6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-linux-x64.tar.gz\",\n            \"hash\": \"1FD17BE80E9C4E6F2C70DC234079D535D8218ABCE0D34BCC6621A38AE48143DB11E8E9AC1DD8AF3BF3D47269733D82C04BCFD081566DCE0DA27CC4DD659A7AC6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-osx-x64.tar.gz\",\n            \"hash\": \"840759AB2344E81A69E1B6DE64F1E07EB6D338FD44CA17CA6C49CBFB0B0726E09A08EDA8C04CC1FE4B8D643FD925A77944BBA1F315D7D5E3B4D208B5CE43FF02\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x64.exe\",\n            \"hash\": \"4403EFE60950688EED79300A3C8C00B1F60F2053FC68F62BB75492A9A1B1A330E194ACE2C2F5BDC76C95CB158E77D6EA1B4D6D1E01398419C592C307C6968D08\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x64.zip\",\n            \"hash\": \"D7B67BA095A862635A27296F0ABEF664C19A3C9640E041E352B67A002B0ED98DE65F97E57C777BCC5B0CC752020FD9AFA2C74B8FBCD1D45458FAAFF344EAF7C2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x86.exe\",\n            \"hash\": \"8AA64E3063A67100D680C13D269654A8D5E45943C1A91737C1D847736B0902AA8719507AFD695E662CD62A8527D99705F88920AF24F5A2B0C53D4F7586704B26\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x86.zip\",\n            \"hash\": \"A0F1BA09506B5AB7FF94DB3CBCD8EBCDF334881E56B8961B3D9BC59A3052693F02A7D7E5F9563A3DBB494AC94FF9810EF469785F6C6808319B0B5B8BEC3965E2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/dotnet-hosting-2.1.11-win.exe\",\n            \"hash\": \"47B6EB159981A22C7228BF20BB031E756FA05CD2448C5FB9F89CC29A3C0FA23F4B76524B91B97CB36D664A44CF59410D2E21964866C63F6094E0EBEE5515E9D7\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.11\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/10122067-a94f-4053-94e8-f03deda2135f/064bb8dde0397d188f6e88ed7eeac62c/aspnet-2.1.11-symbols.zip\",\n            \"hash\": \"6FF723D98D4FC48E6A4E8EF1A3C80315AE6527C38AF9F6FA15228B697B5350FC256F4034252C6A87429072459FDE6B70EFCAF4B64CB883FB972E955222FFCC28\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fa32c182-4029-4d71-a5d8-3aad70e00f92/f2137db910cd2ea8adff8ff195b12556/cli-2.1.11-symbols.zip\",\n            \"hash\": \"2D5ED38155000A6F75ABB71874CBCE83EC2D757CC51CF6555F342D077274B9DD95CDF7EE791B23E633AC860468D80CD269D1CDBB89408F7D6467132A83576EB1\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b63f344a-5a87-41ae-82d2-81990ca1e867/ec5a0af3e688522dda8b7b51adbb0083/core-setup-2.1.11-symbols.zip\",\n            \"hash\": \"0F0BEB2226D015990C27811F6EC8081D1C8892A4212F5FDDF9135D63858A573CD44C0AD10D201AD565616ACC98CAFF453366C2E0EB251597AE2BB5991CE0952B\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c6b1326f-8c0e-474a-b6c6-b372660403e3/9b2a0cb31e64bb1ad8736692284c0fec/coreclr-2.1.11-symbols.zip\",\n            \"hash\": \"903AF0963C4C21950A87E102D9FFDDC4144E702F1A8029FFB829BFB7B5AA1DB75B27DE49B73FA9415C8ED2CF65D6B26728183A6F26A834568E1D77572583DE31\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/210587a4-fb59-49a4-8fbb-f15e95751f49/ecf9abdb30a2428236b499d2144826bc/corefx-2.1.11-symbols.zip\",\n            \"hash\": \"9D569CCF5E82C51EC5FBE6B9AA78086F50937E37191ABE18CEA101DD4E372304A1E5050579A51DCCD087705CB5EB3294ADA3233A3277AAEC993DA9C0A340543E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a782c245-3b40-4cbd-8c6e-a88758d591be/980df24ada29dd20ea452e1cb9c31d36/dotnet-sdk-2.1.11-symbols.zip\",\n            \"hash\": \"5C6E3780E1F46BFBE51315AC3264537192F0A9408FBE359010E14989A49BB114F39189F87C51F93B65F0383F70A7D225578E2BCA774060BF472640E272AD42A9\"\n          },\n          {\n            \"name\": \"sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ecd96463-c4bd-46a9-ab41-22dbb2d3cced/0a67923312a36cfa7aab15cd0043808c/sdk-2.1.604-symbols.zip\",\n            \"hash\": \"3A045C7B4FAB40C1BF5FBE602BB89CE702EA68375BECDEFF2CF538183A4D0FB88BDEAAD5E0016FD5AD240B20482E560039EDD8D75414BCB72092CEE2BC1C85ED\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-05-14\",\n      \"release-version\": \"2.1.604\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0976\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0976\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.11/2.1.11.md\",\n      \"runtime\": {\n        \"version\": \"2.1.11\",\n        \"version-display\": \"2.1.11\",\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-arm.tar.gz\",\n            \"hash\": \"4EC03929EA9995216ECFD2569BEC204AA69D55CB483267EFB800BE6CD080920B1559B60D2408489AD8FC5F436D3DCFDCD085A5B59F6084AA8AAF2CCC8157A910\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-arm64.tar.gz\",\n            \"hash\": \"1C1562108F54822EE3D073D537306438F95EDCDEF02C18335B0D041D50887C15AFC81EB757ACEEC7A3F9D04A9DEAB0017391690637645FEF5A0B46A2DDC17D93\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"1EEC1CA48827BDD2548ADE5E8FAD2CFABD806D59A44DC6505B7BBAB8DDE27ECBDF46238A6245300809EB2A560E6777691FA21E85B38874C8235E4FACE9580441\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-x64.tar.gz\",\n            \"hash\": \"BDFE060A98E0170A633F6FA0BB12F3EACFAAF8B719D596CCD83F9D42BA0C835E4E313DD8ABB82970AE655528F57A0871AAB6C1AAE3E6916862599D4214BE906B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-osx-x64.pkg\",\n            \"hash\": \"C0385A2BBB9A64A7FB656047AF9A016769752EA95BC0ADF45B72F56EDA9762C431C869212FFF8D5D32314FD35A3CDFEA17696CAD4BE154A24147255143960EA5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-osx-x64.tar.gz\",\n            \"hash\": \"3113DAA5725ECB41EEE0A12A908505792DA00AFA14D8F2A7B1A5DBD8DC5C17A9E68EB03A8D74CCD92989460EF398FC426BEBEA27357FC09E72F18C8F3036605F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-rhel.6-x64.tar.gz\",\n            \"hash\": \"168001128478F413649DB20AEC41ABCF1BA864FDE11765D07C43F7A271CAE916966A61C49DD8143EF35519F74393A16279CE06AB905DBD93D7B450D02FB7362A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-arm.zip\",\n            \"hash\": \"296DBB75A18D78EDA37E92E1EE9F4B839418267C33DF798D1E1669515C824AEF15E91E9D816331FA0FE2F64CA3E1C7654B46F42B6163A214D667022E4324EE44\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x64.exe\",\n            \"hash\": \"B0C1F6683DD5BFDC93C7070BFE808DE61BAFEA7D9CCCE45D87C19FFA4E8CCCF4A1E741F79B5F14DA5F5644D45342F81A0495B3E048B463F840A183F8A83E8E2C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x64.zip\",\n            \"hash\": \"B5118C4A3532DABA32AEAB686EC3F21779AD28CFB994446AC02AA1902FADDB8B67D383D2B516D4B02538A653E03BD97C4B817C4FFDE6B156ED6BCB8D2E7DFFFB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x86.exe\",\n            \"hash\": \"900A43CEE0BAA5D059ED8906860203820FAC317381BBBBC68C1AC2119E9362CC648EC387E1AC034D66860BEFB59A9EAAF6D635D91EB7B5E6E0E11DD158B3F2F5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x86.zip\",\n            \"hash\": \"75152F5D4346548F5B9FEBDF0D374903453BEEE9FCC64E2D4131C05D299198AE98B5D6547E0177E004B1F8A0FC477CF44EBE1294C3A03BE10BD7F17FA622B0EF\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.604\",\n        \"version-display\": \"2.1.604\",\n        \"runtime-version\": \"2.1.11\",\n        \"vs-version\": \"16.0\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-linux-arm.tar.gz\",\n            \"hash\": \"CD4994ED51D555888281520066F9E0C9540DF6EE1B17CCCCAB2A4BF76F07AAF594A3FFF6B3E0FC4A24A941A89C0E887A63580AD9A0E645E5F4F26837ADCFD9E3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-linux-arm64.tar.gz\",\n            \"hash\": \"9D8B5DC4482FCA1F9A41C799F33F6EFCFC7F28594CC28211059FDA54C23309425934D1E90CA3624C92A3B6529AE8B31C6349678DC5ED8D7C1935D94470183E6D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-linux-musl-x64.tar.gz\",\n            \"hash\": \"98EA20E31C8509A83C212EB42FCA28F2FB1327F7FBFF5FE4CF70038F4D84A9203ED1FB185B3CB40F3F7FB9AD3837296ED4441054070F1C6D2A7998ECF98446A1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-linux-x64.tar.gz\",\n            \"hash\": \"AD57D8C2A6B5BFACCB69270AF0478A6717717E41672E52B96149A710626972983D8D5B10CE42201B306C57948435EC388545672A8C726C06F803D3C1D5A61860\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/870ae384-4933-47c9-8f75-096ebaa1f75b/2335665b86b9dd49e6040f82fdc2695f/dotnet-sdk-2.1.604-osx-gs-x64.pkg\",\n            \"hash\": \"E3A15DC1C5DDE7F9095B2897B3405BCDA130E6F0FD19B0D50C72C68FCEDBBEDFCF9F8E8819A1AC75F5EAEA5F92622655CEC513D8E09AC28A9F418E291620224C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-osx-x64.pkg\",\n            \"hash\": \"E3A15DC1C5DDE7F9095B2897B3405BCDA130E6F0FD19B0D50C72C68FCEDBBEDFCF9F8E8819A1AC75F5EAEA5F92622655CEC513D8E09AC28A9F418E291620224C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-osx-x64.tar.gz\",\n            \"hash\": \"268DB3D48DE136F61E8EF0CF35BD206C52B306C6E979114A4E0EE23414C4F8703F02D20C1647478097E57A2A93C9CA07C58CBC4996AF075862F2431183447E14\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-rhel.6-x64.tar.gz\",\n            \"hash\": \"E5552D90BEEB0EB2119DE7C68B507C465C787BFE7594C19C0EB4BDE9E4CF839907AAA612E1860D8BF20F7E33A92040AE0D023F63774EB8009C4126366AC27507\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8f5145e4-67f9-402a-ae22-31bd753f9b20/9084880d0386b92c9e2c969b54a49536/dotnet-sdk-2.1.604-win-gs-x64.exe\",\n            \"hash\": \"C772A81BE1568E29D4A7FE43AC1F1B07CC4071B84814E6C88AFA24B01E92A7577273A66DA9CB24AF490CF636BD45829AFEC401E8AAB8E6A1E3A01EDC9C377AA1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/55f7400e-6f4f-4812-9c21-e839d694e939/9b584bd9a85379267ce46f172bfa6c0b/dotnet-sdk-2.1.604-win-gs-x86.exe\",\n            \"hash\": \"21638407C185A9E4C1178C1EE3D905623E49210D6E7776B543EBE551224040C419FA275540B4E0C9301BEDEA7B4BA250A4A6D07436435DE4097171B50111EBD1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-win-x64.exe\",\n            \"hash\": \"C772A81BE1568E29D4A7FE43AC1F1B07CC4071B84814E6C88AFA24B01E92A7577273A66DA9CB24AF490CF636BD45829AFEC401E8AAB8E6A1E3A01EDC9C377AA1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-win-x64.zip\",\n            \"hash\": \"1C2CBA1E7FAD86AF3BB69F3B914EF5FF2B8CFAF1CB6D4A6007B80C889F2628DC57AEC8105627921286F34F61B5793996398A876D60D1C20F4189745B648C862F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-win-x86.exe\",\n            \"hash\": \"21638407C185A9E4C1178C1EE3D905623E49210D6E7776B543EBE551224040C419FA275540B4E0C9301BEDEA7B4BA250A4A6D07436435DE4097171B50111EBD1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.604/dotnet-sdk-2.1.604-win-x86.zip\",\n            \"hash\": \"B9D4E02A50F24C5676CB7AA8ED9359204FC0B25D2CA91A7A79AFF3D3FCCDFE823B3DD082981D1DDF0C77821001B7A1946F445CD3E7CC425ACBD3D91F6EC532C6\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.11\",\n        \"version-display\": \"2.1.11\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19108.11\"\n        ],\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-linux-arm.tar.gz\",\n            \"hash\": \"5F4B016947E5706B6ED7A5BB9F767F1F966CAC2267815C3F4E16E1623888B6731122D3779F46556038E6951E72C48B0888A9385C103D2FF6147EFDFF0D148064\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"4D432655F315702897F74FB96ACD71C7BCD168F5DC287823A3731DEEC287853D107C902B1691FB74F6B2D14F24ED26CE0205DFC294DCD9E5149F8E5941EDF3C6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-linux-x64.tar.gz\",\n            \"hash\": \"1FD17BE80E9C4E6F2C70DC234079D535D8218ABCE0D34BCC6621A38AE48143DB11E8E9AC1DD8AF3BF3D47269733D82C04BCFD081566DCE0DA27CC4DD659A7AC6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-osx-x64.tar.gz\",\n            \"hash\": \"840759AB2344E81A69E1B6DE64F1E07EB6D338FD44CA17CA6C49CBFB0B0726E09A08EDA8C04CC1FE4B8D643FD925A77944BBA1F315D7D5E3B4D208B5CE43FF02\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x64.exe\",\n            \"hash\": \"4403EFE60950688EED79300A3C8C00B1F60F2053FC68F62BB75492A9A1B1A330E194ACE2C2F5BDC76C95CB158E77D6EA1B4D6D1E01398419C592C307C6968D08\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x64.zip\",\n            \"hash\": \"D7B67BA095A862635A27296F0ABEF664C19A3C9640E041E352B67A002B0ED98DE65F97E57C777BCC5B0CC752020FD9AFA2C74B8FBCD1D45458FAAFF344EAF7C2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x86.exe\",\n            \"hash\": \"8AA64E3063A67100D680C13D269654A8D5E45943C1A91737C1D847736B0902AA8719507AFD695E662CD62A8527D99705F88920AF24F5A2B0C53D4F7586704B26\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x86.zip\",\n            \"hash\": \"A0F1BA09506B5AB7FF94DB3CBCD8EBCDF334881E56B8961B3D9BC59A3052693F02A7D7E5F9563A3DBB494AC94FF9810EF469785F6C6808319B0B5B8BEC3965E2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/dotnet-hosting-2.1.11-win.exe\",\n            \"hash\": \"47B6EB159981A22C7228BF20BB031E756FA05CD2448C5FB9F89CC29A3C0FA23F4B76524B91B97CB36D664A44CF59410D2E21964866C63F6094E0EBEE5515E9D7\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.11\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/10122067-a94f-4053-94e8-f03deda2135f/064bb8dde0397d188f6e88ed7eeac62c/aspnet-2.1.11-symbols.zip\",\n            \"hash\": \"6FF723D98D4FC48E6A4E8EF1A3C80315AE6527C38AF9F6FA15228B697B5350FC256F4034252C6A87429072459FDE6B70EFCAF4B64CB883FB972E955222FFCC28\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fa32c182-4029-4d71-a5d8-3aad70e00f92/f2137db910cd2ea8adff8ff195b12556/cli-2.1.11-symbols.zip\",\n            \"hash\": \"2D5ED38155000A6F75ABB71874CBCE83EC2D757CC51CF6555F342D077274B9DD95CDF7EE791B23E633AC860468D80CD269D1CDBB89408F7D6467132A83576EB1\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b63f344a-5a87-41ae-82d2-81990ca1e867/ec5a0af3e688522dda8b7b51adbb0083/core-setup-2.1.11-symbols.zip\",\n            \"hash\": \"0F0BEB2226D015990C27811F6EC8081D1C8892A4212F5FDDF9135D63858A573CD44C0AD10D201AD565616ACC98CAFF453366C2E0EB251597AE2BB5991CE0952B\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c6b1326f-8c0e-474a-b6c6-b372660403e3/9b2a0cb31e64bb1ad8736692284c0fec/coreclr-2.1.11-symbols.zip\",\n            \"hash\": \"903AF0963C4C21950A87E102D9FFDDC4144E702F1A8029FFB829BFB7B5AA1DB75B27DE49B73FA9415C8ED2CF65D6B26728183A6F26A834568E1D77572583DE31\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/210587a4-fb59-49a4-8fbb-f15e95751f49/ecf9abdb30a2428236b499d2144826bc/corefx-2.1.11-symbols.zip\",\n            \"hash\": \"9D569CCF5E82C51EC5FBE6B9AA78086F50937E37191ABE18CEA101DD4E372304A1E5050579A51DCCD087705CB5EB3294ADA3233A3277AAEC993DA9C0A340543E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a782c245-3b40-4cbd-8c6e-a88758d591be/980df24ada29dd20ea452e1cb9c31d36/dotnet-sdk-2.1.11-symbols.zip\",\n            \"hash\": \"5C6E3780E1F46BFBE51315AC3264537192F0A9408FBE359010E14989A49BB114F39189F87C51F93B65F0383F70A7D225578E2BCA774060BF472640E272AD42A9\"\n          },\n          {\n            \"name\": \"sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ecd96463-c4bd-46a9-ab41-22dbb2d3cced/0a67923312a36cfa7aab15cd0043808c/sdk-2.1.604-symbols.zip\",\n            \"hash\": \"3A045C7B4FAB40C1BF5FBE602BB89CE702EA68375BECDEFF2CF538183A4D0FB88BDEAAD5E0016FD5AD240B20482E560039EDD8D75414BCB72092CEE2BC1C85ED\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-05-14\",\n      \"release-version\": \"2.1.11\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0820\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0820\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0980\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0980\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0981\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0981\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0982\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0982\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.11/2.1.11.md\",\n      \"runtime\": {\n        \"version\": \"2.1.11\",\n        \"version-display\": \"2.1.11\",\n        \"vs-version\": \"15.9.12\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-arm.tar.gz\",\n            \"hash\": \"4EC03929EA9995216ECFD2569BEC204AA69D55CB483267EFB800BE6CD080920B1559B60D2408489AD8FC5F436D3DCFDCD085A5B59F6084AA8AAF2CCC8157A910\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-arm64.tar.gz\",\n            \"hash\": \"1C1562108F54822EE3D073D537306438F95EDCDEF02C18335B0D041D50887C15AFC81EB757ACEEC7A3F9D04A9DEAB0017391690637645FEF5A0B46A2DDC17D93\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"1EEC1CA48827BDD2548ADE5E8FAD2CFABD806D59A44DC6505B7BBAB8DDE27ECBDF46238A6245300809EB2A560E6777691FA21E85B38874C8235E4FACE9580441\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-linux-x64.tar.gz\",\n            \"hash\": \"BDFE060A98E0170A633F6FA0BB12F3EACFAAF8B719D596CCD83F9D42BA0C835E4E313DD8ABB82970AE655528F57A0871AAB6C1AAE3E6916862599D4214BE906B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-osx-x64.pkg\",\n            \"hash\": \"C0385A2BBB9A64A7FB656047AF9A016769752EA95BC0ADF45B72F56EDA9762C431C869212FFF8D5D32314FD35A3CDFEA17696CAD4BE154A24147255143960EA5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-osx-x64.tar.gz\",\n            \"hash\": \"3113DAA5725ECB41EEE0A12A908505792DA00AFA14D8F2A7B1A5DBD8DC5C17A9E68EB03A8D74CCD92989460EF398FC426BEBEA27357FC09E72F18C8F3036605F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-rhel.6-x64.tar.gz\",\n            \"hash\": \"168001128478F413649DB20AEC41ABCF1BA864FDE11765D07C43F7A271CAE916966A61C49DD8143EF35519F74393A16279CE06AB905DBD93D7B450D02FB7362A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-arm.zip\",\n            \"hash\": \"296DBB75A18D78EDA37E92E1EE9F4B839418267C33DF798D1E1669515C824AEF15E91E9D816331FA0FE2F64CA3E1C7654B46F42B6163A214D667022E4324EE44\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x64.exe\",\n            \"hash\": \"B0C1F6683DD5BFDC93C7070BFE808DE61BAFEA7D9CCCE45D87C19FFA4E8CCCF4A1E741F79B5F14DA5F5644D45342F81A0495B3E048B463F840A183F8A83E8E2C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x64.zip\",\n            \"hash\": \"B5118C4A3532DABA32AEAB686EC3F21779AD28CFB994446AC02AA1902FADDB8B67D383D2B516D4B02538A653E03BD97C4B817C4FFDE6B156ED6BCB8D2E7DFFFB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x86.exe\",\n            \"hash\": \"900A43CEE0BAA5D059ED8906860203820FAC317381BBBBC68C1AC2119E9362CC648EC387E1AC034D66860BEFB59A9EAAF6D635D91EB7B5E6E0E11DD158B3F2F5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.11/dotnet-runtime-2.1.11-win-x86.zip\",\n            \"hash\": \"75152F5D4346548F5B9FEBDF0D374903453BEEE9FCC64E2D4131C05D299198AE98B5D6547E0177E004B1F8A0FC477CF44EBE1294C3A03BE10BD7F17FA622B0EF\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.507\",\n        \"version-display\": \"2.1.507\",\n        \"runtime-version\": \"2.1.11\",\n        \"vs-version\": \"15.9.12\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-linux-arm.tar.gz\",\n            \"hash\": \"2DAF22A62CD0A3CD32C240D1A8DF631B5A22AB405AFE82B7045DE4198B7F5610C025184110AA3CBC2F7168691A21FA31252A55ECE58B69E332A752CDF97BEDEF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-linux-arm64.tar.gz\",\n            \"hash\": \"5E82D0CFC6D15124FB53CFF75148E033E9C73228933F567E454156872492A443B10AE82A2B829C41226C5EC7B333445E8D55F29AF25B931887D6F431D5F71C03\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-linux-musl-x64.tar.gz\",\n            \"hash\": \"9BC26D357D442E39F898AD2246605D4D676002F942D6FBAB28E981832105EE2E22228C0A25D462FA1F1E9F3F07896EFB6B8C02436E6AD08D73CDB65E82FB8901\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-linux-x64.tar.gz\",\n            \"hash\": \"54B3A78B676E310DAC7F29948BA2493E42C1A80FDDF3399332645E8CC4DE607D9AB6478696A7BED2D3B46459CECEF1E66DE69BAA62F7E4BAEEB362A80065A8F1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9b2b766b-a766-4743-b9b4-10d5ed6b2054/76a960f32b4f9d1eee6982abe8032fe5/dotnet-sdk-2.1.507-osx-gs-x64.pkg\",\n            \"hash\": \"ADD8A1BBB3DC7492C83D537BC51C2918A0C50116F7208B91E9FADE660FD1D6EFEC7540922E21EFCA8CA65A14311EA7C0466B68A00B340C521B5E07D20596C9AB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-osx-x64.pkg\",\n            \"hash\": \"ADD8A1BBB3DC7492C83D537BC51C2918A0C50116F7208B91E9FADE660FD1D6EFEC7540922E21EFCA8CA65A14311EA7C0466B68A00B340C521B5E07D20596C9AB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-osx-x64.tar.gz\",\n            \"hash\": \"C5AF40D89BB1EBE2A9167974F8C7F9AE3705952CB60479A2B5C4615DD8B01A5984F6B4D40DBA7857ED482ED234280CF3C60BDAF2DBB4F8273BC73AE07CC04A73\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-rhel.6-x64.tar.gz\",\n            \"hash\": \"3A1A2BB649C91169C203FA97BE6C9D2E4007AD7E7683D452493B0E9CBC96028D88034AB5ABA1A8EEB89333DCC77B6098DF74201020535E6264A65B75AEB28945\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ca4662e5-b51b-4d2b-aeb9-93f9fe6ed33f/e895d77dc94df2c732370183a49544ed/dotnet-sdk-2.1.507-win-gs-x64.exe\",\n            \"hash\": \"2B0AC2F1318E6377A3CD9E348144CF8C9E8287EFF25B9EF3B8FF25D661A764215FAC655AEB016F302600044BA72100880D1EDD951E0932041027CBAB4DF4409B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3de3066e-bbce-41a9-9873-7ab29cb2e4d7/496cac744644bc1ade95cf3df1c876d3/dotnet-sdk-2.1.507-win-gs-x86.exe\",\n            \"hash\": \"24D3589D1B6F44C64FD2EB368E7109EF16935BB81B4A62A12B1FF68035483CCC9A59148181A2B31DEF42C19DA983BD6C18906FAA8A47AE473BF85A8863E7F47F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-win-x64.exe\",\n            \"hash\": \"2B0AC2F1318E6377A3CD9E348144CF8C9E8287EFF25B9EF3B8FF25D661A764215FAC655AEB016F302600044BA72100880D1EDD951E0932041027CBAB4DF4409B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-win-x64.zip\",\n            \"hash\": \"E5D778B19E5989C8CF12D440FEF667E8AB8A863253A4197419344961F62B49F8FF54F6714F17E173E20B43199670D6591683B2553BE916DD1FA702417114986D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-win-x86.exe\",\n            \"hash\": \"24D3589D1B6F44C64FD2EB368E7109EF16935BB81B4A62A12B1FF68035483CCC9A59148181A2B31DEF42C19DA983BD6C18906FAA8A47AE473BF85A8863E7F47F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.507/dotnet-sdk-2.1.507-win-x86.zip\",\n            \"hash\": \"1E7345D9547DC759F634857F85125242C9885D0EB2565765CB84798543633D63F34263E685B9457B85BD0E1E4423824E5D7EEBDE3BA828E52810AFD4FB4F8012\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.11\",\n        \"version-display\": \"2.1.11\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19108.11\"\n        ],\n        \"vs-version\": \"15.9.12\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-linux-arm.tar.gz\",\n            \"hash\": \"5F4B016947E5706B6ED7A5BB9F767F1F966CAC2267815C3F4E16E1623888B6731122D3779F46556038E6951E72C48B0888A9385C103D2FF6147EFDFF0D148064\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"4D432655F315702897F74FB96ACD71C7BCD168F5DC287823A3731DEEC287853D107C902B1691FB74F6B2D14F24ED26CE0205DFC294DCD9E5149F8E5941EDF3C6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-linux-x64.tar.gz\",\n            \"hash\": \"1FD17BE80E9C4E6F2C70DC234079D535D8218ABCE0D34BCC6621A38AE48143DB11E8E9AC1DD8AF3BF3D47269733D82C04BCFD081566DCE0DA27CC4DD659A7AC6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-osx-x64.tar.gz\",\n            \"hash\": \"840759AB2344E81A69E1B6DE64F1E07EB6D338FD44CA17CA6C49CBFB0B0726E09A08EDA8C04CC1FE4B8D643FD925A77944BBA1F315D7D5E3B4D208B5CE43FF02\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x64.exe\",\n            \"hash\": \"4403EFE60950688EED79300A3C8C00B1F60F2053FC68F62BB75492A9A1B1A330E194ACE2C2F5BDC76C95CB158E77D6EA1B4D6D1E01398419C592C307C6968D08\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x64.zip\",\n            \"hash\": \"D7B67BA095A862635A27296F0ABEF664C19A3C9640E041E352B67A002B0ED98DE65F97E57C777BCC5B0CC752020FD9AFA2C74B8FBCD1D45458FAAFF344EAF7C2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x86.exe\",\n            \"hash\": \"8AA64E3063A67100D680C13D269654A8D5E45943C1A91737C1D847736B0902AA8719507AFD695E662CD62A8527D99705F88920AF24F5A2B0C53D4F7586704B26\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/aspnetcore-runtime-2.1.11-win-x86.zip\",\n            \"hash\": \"A0F1BA09506B5AB7FF94DB3CBCD8EBCDF334881E56B8961B3D9BC59A3052693F02A7D7E5F9563A3DBB494AC94FF9810EF469785F6C6808319B0B5B8BEC3965E2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.11/dotnet-hosting-2.1.11-win.exe\",\n            \"hash\": \"47B6EB159981A22C7228BF20BB031E756FA05CD2448C5FB9F89CC29A3C0FA23F4B76524B91B97CB36D664A44CF59410D2E21964866C63F6094E0EBEE5515E9D7\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.11\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/10122067-a94f-4053-94e8-f03deda2135f/064bb8dde0397d188f6e88ed7eeac62c/aspnet-2.1.11-symbols.zip\",\n            \"hash\": \"6FF723D98D4FC48E6A4E8EF1A3C80315AE6527C38AF9F6FA15228B697B5350FC256F4034252C6A87429072459FDE6B70EFCAF4B64CB883FB972E955222FFCC28\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fa32c182-4029-4d71-a5d8-3aad70e00f92/f2137db910cd2ea8adff8ff195b12556/cli-2.1.11-symbols.zip\",\n            \"hash\": \"2D5ED38155000A6F75ABB71874CBCE83EC2D757CC51CF6555F342D077274B9DD95CDF7EE791B23E633AC860468D80CD269D1CDBB89408F7D6467132A83576EB1\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b63f344a-5a87-41ae-82d2-81990ca1e867/ec5a0af3e688522dda8b7b51adbb0083/core-setup-2.1.11-symbols.zip\",\n            \"hash\": \"0F0BEB2226D015990C27811F6EC8081D1C8892A4212F5FDDF9135D63858A573CD44C0AD10D201AD565616ACC98CAFF453366C2E0EB251597AE2BB5991CE0952B\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c6b1326f-8c0e-474a-b6c6-b372660403e3/9b2a0cb31e64bb1ad8736692284c0fec/coreclr-2.1.11-symbols.zip\",\n            \"hash\": \"903AF0963C4C21950A87E102D9FFDDC4144E702F1A8029FFB829BFB7B5AA1DB75B27DE49B73FA9415C8ED2CF65D6B26728183A6F26A834568E1D77572583DE31\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/210587a4-fb59-49a4-8fbb-f15e95751f49/ecf9abdb30a2428236b499d2144826bc/corefx-2.1.11-symbols.zip\",\n            \"hash\": \"9D569CCF5E82C51EC5FBE6B9AA78086F50937E37191ABE18CEA101DD4E372304A1E5050579A51DCCD087705CB5EB3294ADA3233A3277AAEC993DA9C0A340543E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a782c245-3b40-4cbd-8c6e-a88758d591be/980df24ada29dd20ea452e1cb9c31d36/dotnet-sdk-2.1.11-symbols.zip\",\n            \"hash\": \"5C6E3780E1F46BFBE51315AC3264537192F0A9408FBE359010E14989A49BB114F39189F87C51F93B65F0383F70A7D225578E2BCA774060BF472640E272AD42A9\"\n          },\n          {\n            \"name\": \"sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/563ddb49-52c6-44e5-bf1f-4c3d69d96380/7a18b8197e797933da76469b5e916127/sdk-2.1.507-symbols.zip\",\n            \"hash\": \"613746B67C00CE0594C92BBE23EE29CC3A45707DFC4C415C38E8B3918346DD305CA6D7B4EC65F753473802A3D7E6B679D6F6A9F1C92C4B492C2D1731B8D6570A\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-04-09\",\n      \"release-version\": \"2.1.603\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0815\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0815\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.10/2.1.10.md\",\n      \"runtime\": {\n        \"version\": \"2.1.10\",\n        \"version-display\": \"2.1.10\",\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-linux-arm.tar.gz\",\n            \"hash\": \"981795AAB43E5D96A7E6A95C42BE449796D584B5DD22559A6DFD763BF73B58B4F0E0804566783F7F61DD5242B9C25BACBA79753DF06DD5E1E2AFBB055809620D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-linux-arm64.tar.gz\",\n            \"hash\": \"18BC5EBAC44703A449BA54F1E131470E57E334B077A76B216FC4409DE8C7F591335A62B28314B6C1011C2AAB20823963F282C4B5056F60AFF4A03D81627357AE\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"04B7D2345E3294B3D3003F10EFBA86B588A3D7748BE44BE8342F88310A275C4C1CD2057142B5863510579924241C1D28A87B207F38A6D7DD94EE05D8277000F6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-linux-x64.tar.gz\",\n            \"hash\": \"0D414349C28F6D21D3E6A2EF52D28308CE93CF6FB222443D1569B136A8795852CC98975800AFBB8CBF9822B563B6B0A7502AB5FB875F8B39E92D7EE0119E6BE2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-osx-x64.pkg\",\n            \"hash\": \"EDC0FE25795F46CA703AB0BDFF6B9BDCCF02CF5BE8E896152AE4525CB2D30728D6999A631EBE000684AD9D716EC3564CCFB6B173D9BF66607643BE48082E67F1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-osx-x64.tar.gz\",\n            \"hash\": \"0862882B398039345EA0408B35A2296253C9E0BCEC34183517762DBC0DC118696EB638654C9D9E043FBD36B185E7B163C52EC2CE3990554B834684AC57B631CD\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-rhel.6-x64.tar.gz\",\n            \"hash\": \"4B11138970CD256471BC0793EF2F09FB102765B8D3C7C7DCFB60F74F13C59D2CB6B52069C38220AE4BB4F995C3137E3994834540C9E101BE069DE6F601709436\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-arm.zip\",\n            \"hash\": \"75E7332303F050DCB8047CE909D9500ACB668BF56115A814004AA307B0A395E08ED9F5ABB9EA59A0838A020975623C603C79C208FA64D733E06F65351329E1FB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-x64.exe\",\n            \"hash\": \"A1F834FF37B61C9CBD4218337E6B89E9CBDCEF6CAB14244652D6BA1C14924ACB1EF21E955324F87EB014B30FDF0DE56AC7356B72937BDFD5E7D0028ABECF04A6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-x64.zip\",\n            \"hash\": \"14A5202ED3E80A21C3E96A71A790A7E7352958DB72BFC0E100A6EAE543AD191920193645439A11C65BB5EE145B5F5783ED0934539FAE1C5E028DAC940C34C148\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-x86.exe\",\n            \"hash\": \"63A4EB96EF6B70F9DD0944D22099F9BB1CA4C677751411ED32E873DC52BFC7B7BD9B3F3D2ECA6880B0535A5D9D6FA00BC9FC76EA57B6CB94079116D9B3C76D6F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-x86.zip\",\n            \"hash\": \"A04ED2EF99A4C2C926CF5CFFF7B963B289A9257A0D5974F7471A5A6556C0C0D7CA0DD2A8C038A19AD5C3A2BB6C9C73F12CD0957D52383D7760BB8B573236FB8E\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.603\",\n        \"version-display\": \"2.1.603\",\n        \"runtime-version\": \"2.1.10\",\n        \"vs-version\": \"16.0\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-linux-arm.tar.gz\",\n            \"hash\": \"6BEB0D3014A9DBC20502F87ED2A0B234780ECA91612484529B586FFA2E91CF7E8640E3D019E4AC2163CDF7E797F30C94C8C6874D38AD874B6A63FBC462F3AFC3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-linux-arm64.tar.gz\",\n            \"hash\": \"88998D675F0D6B0A21C44BA5126648070CD693C5A50FD0A8C64F09376A6C0F69060B4CF35116F41A2AF96DC20E9832CDB852B97CC8DE32C85A54FCBF970F2138\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-linux-musl-x64.tar.gz\",\n            \"hash\": \"D33A0FDE9E439A8011F63D2659DC96B84C563631F578DB83ECE1C7A6C5082765F9DBA6ACED8A474B02640D45BEC617FA80F44950725EE022D9F5071BCF2B30D2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-linux-x64.tar.gz\",\n            \"hash\": \"DD0EFB8AAE75D8F48EF3ABBECA38AE14D2621A47E37B2D9D74755B58F9173343305F1A62CFA9A03F17C42F58B1D1B653D271E7D1327C81FF4AF0A54C43C7DB59\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c5a47d00-e5cb-46cb-94f4-1a87c6cb3e7c/30ff936476feb5c0df40a10a0e777b9f/dotnet-sdk-2.1.603-osx-gs-x64.pkg\",\n            \"hash\": \"312B2D8FC2EC09633453F12B1067659E5B36925E45D429061E64F2A246F50B3C9FC756555A817B7AE3D1659F19F08251B1A10EA39CAF79AAA40F4A15ABE76436\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-osx-x64.pkg\",\n            \"hash\": \"312B2D8FC2EC09633453F12B1067659E5B36925E45D429061E64F2A246F50B3C9FC756555A817B7AE3D1659F19F08251B1A10EA39CAF79AAA40F4A15ABE76436\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-osx-x64.tar.gz\",\n            \"hash\": \"C29C02D4736780E87C9C9D6619C68011226BA3888434F17BFA294424EAE767D06CEFE1C514BD921291B2B573E568FC1A61F09CD5BF55FC5B85B5523687EB72B3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-rhel.6-x64.tar.gz\",\n            \"hash\": \"2B70C426753DE35190C63DE58C89DD5816DA30828B1CD6261D2B7F4E83011EBBDA3D4DBD1F76905F58D345CC563FFAAEBC18F0F03CF8953A19FB0ADDD766B92B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/321b2bf6-6dd2-49f1-bb17-56592de3b856/5419a0e7fd366eeaa1ea891ad5b6726d/dotnet-sdk-2.1.603-win-gs-x64.exe\",\n            \"hash\": \"0294EFE28B0216F13973CEA909967745D36FE606BF2A0CBB100787E91CB8D92CAB8AA2FDC020226F51FF39DC943AB74724183DEBAE9B14AFDA2F04F07A7E8E3F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5175c5d4-fa21-4c44-aba4-781d47c55f44/9a474632a1b6b1bc52846892003908cb/dotnet-sdk-2.1.603-win-gs-x86.exe\",\n            \"hash\": \"AAF48601858EA9ED0A447D05FB8CA5BA52D28076608EF0673DB9FCD3711B25362ABBBEBE3C986F8AEB70584E4AD4E4E45DABC965B56EDF780FF6D9ED8EC5CA64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-win-x64.exe\",\n            \"hash\": \"0294EFE28B0216F13973CEA909967745D36FE606BF2A0CBB100787E91CB8D92CAB8AA2FDC020226F51FF39DC943AB74724183DEBAE9B14AFDA2F04F07A7E8E3F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-win-x64.zip\",\n            \"hash\": \"54A579F74A88C4132852FC52B40A3FB43C016A0FA90F7021BED64D228A85D9B4ED5AFF2FAE91E8AA6AF18C9E3B552EC9E34D96069756B37A4D32308324DC35FF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-win-x86.exe\",\n            \"hash\": \"AAF48601858EA9ED0A447D05FB8CA5BA52D28076608EF0673DB9FCD3711B25362ABBBEBE3C986F8AEB70584E4AD4E4E45DABC965B56EDF780FF6D9ED8EC5CA64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.603/dotnet-sdk-2.1.603-win-x86.zip\",\n            \"hash\": \"92202AFCF9235BC8A20BD6D6DDF49BFCEDCD3CD44D74620168CE56BED57AF5AEC521B665FEE8A7FAE5662A11D7E3D2B18C32CC99A5E7E76C3DF901D6258C435C\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.10\",\n        \"version-display\": \"2.1.10\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.18263.2\"\n        ],\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-linux-arm.tar.gz\",\n            \"hash\": \"D6E9AF9063C7A2839A54998AC78DDBC61B3B4626B32C864360F1BF20EE17F5D0A6417074BAB994813532339EAAF9D8C0D6BF0330799B3BF2263D4E69E6B44BD0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"1FDC9E7AF90112E960FAACB1C91C7F11768EC28E6FEE7DEFD5FEF5588E4F2BD814C9003008152637AA09CD7BB9B2F78C8C51864EAC2E6A534A6D3EED7025A4B4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-linux-x64.tar.gz\",\n            \"hash\": \"F812AC2992F1F16F44DF719C434080C8D7920CE4881282D5A678218606B039E0EEAC43574034C050E11CA5A1FE3172C2D5B43C2F3D08C3595A20164D8E979FA2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-osx-x64.tar.gz\",\n            \"hash\": \"D88402537D6248385B57184501BB866BC0FA65B7D2DF924F13C0811BC12F188EBC74EAB8BFE9623F298FD9B2F1A6FF7EA4F5C635CE40EFB9E84B6433245A2382\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-win-x64.exe\",\n            \"hash\": \"A527FDF0B0268C991F91B5A943482C37367A5CAB0EB52D300B0B3DCDD910C02CB522D8962D13C1A820E835276DE7925A660D249138E32781BF7CF43A8BAF6B71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-win-x64.zip\",\n            \"hash\": \"37B940FE1B49B654CBE5731AEC9C40054264A04FC13FC371F23FF6F9F10ED073735125E834B1918AC9E2B47FB65BA00541766EDA5AF050BDD4B0FD20594A266A\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-win-x86.exe\",\n            \"hash\": \"2D9AF341F2754830FCDBB656BE8C7140DAEB83E0548CA388C8629BCB313B21B5C4E0F630D390725394D52A102FB3F495FA23B2E7D4341C07E1935E87B91DA2D1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-win-x86.zip\",\n            \"hash\": \"F66E96AA2AA970D316BCD1FB9F859709CB2BB402336BB60D0EC387EB0E130E889D508052AC5AC567E81F2DF7C703D0EEAD0B906C454B2EDB77349544ABE7ABB7\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/dotnet-hosting-2.1.10-win.exe\",\n            \"hash\": \"C0225AE66533E3E10EE1B12E1090A18EB2DC67A050BB1637CAE2293B3982C34DBFBDF8A770C88AEBF41626654B135C8CE4736754B464A1A1723EC9010311F530\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.10\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fce4e98e-1be3-4603-89a5-0ba98d11ceb0/c207cbf61146b4a4cdb490732c722191/aspnet-2.1.10-symbols.zip\",\n            \"hash\": \"B7EAF2C9812124D828B79A15D219D525410A036634F45F6D81DB0FD2CB9867DC30DCECDDD2D95A7666C7E6DED2FEA2CA5E33BC93F3B86B5C5C9CD1BD4DEE1B82\"\n          },\n          {\n            \"name\": \"aspnet-extensions-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e49f73d2-9746-45c3-8b08-5e628c13c94e/580ef81d0ff9a73f36de39ff0bb4209f/aspnet-extensions-2.1.10-symbols.zip\",\n            \"hash\": \"7CDC47183A2A6DAA5D73AAEF3134A643F8EF5541C00DDE74639423BF0C439F3C2BF47422CCE6244DA2D837F4C03BC32F2DFDB777E69AC310205E056964F4A6DB\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/da4719b1-20a3-490e-a81f-46cfaedad2f1/e1e51fdcd30ea26293678dc2cae553df/cli-2.1.10-symbols.zip\",\n            \"hash\": \"691F19B7F68693A072E06503EE2671DA0E904B6281A4913EC333D490A02F680A40B22FC76A40A34BFF5439BE3480DB5D44E07BA7E609AD5A4D6CD4B78B362091\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1a5b28d3-1d71-43fb-b3be-8e166e736889/1cf3af996cb9b26fc2d5578a3a0b4b39/core-setup-2.1.10-symbols.zip\",\n            \"hash\": \"E928C4786B8832975086D745C8115CBA871952D88CFB7226629059EA07E725EE38399F1EF78CF65450567E0B3C97072D666CAB02780F608AD73831572254F4AD\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/72c448bc-052c-43d8-bf77-d66b5f6e2372/e2089ffebb26b5f3726c91a48eb288dc/coreclr-2.1.10-symbols.zip\",\n            \"hash\": \"3747D140B7EB3EF108CE83786AC2AAC163BCA63CF6A8AAB0909A3E923489AAD5EBC121D749A93DE725EBA9275CB4E8D2296740C3E8367D8E260297B7F6FB73B9\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2ce8b163-45e8-4834-8c28-4e845f06da2e/77ef403106f2ad9113efb3fe925d1972/corefx-2.1.10-symbols.zip\",\n            \"hash\": \"811A50920165CB81AB994698DD8855D4BCB7360D10CEA1257B2E4F3B04F34E2BC1A953FD30248ACC96EF0E7435A2826C443A6C0DDBBFB48967506B0C122F1C90\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8bc18ae0-6616-4218-a35b-c49360ffb0da/0f022b73024bb8d9f2e8d39c4ca4395a/dotnet-sdk-2.1.10-symbols.zip\",\n            \"hash\": \"941E76DDC30415D6155DB2FAAE3D79E532F0B59557D17905080021E23AB3B9EFA18A62B73422A500F438B1C69E6E9354458F7B94AFB94356CF81667627E44BD7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-04-09\",\n      \"release-version\": \"2.1.10\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0815\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0815\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.10/2.1.10.md\",\n      \"runtime\": {\n        \"version\": \"2.1.10\",\n        \"version-display\": \"2.1.10\",\n        \"vs-version\": \"15.9.11\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-linux-arm.tar.gz\",\n            \"hash\": \"981795AAB43E5D96A7E6A95C42BE449796D584B5DD22559A6DFD763BF73B58B4F0E0804566783F7F61DD5242B9C25BACBA79753DF06DD5E1E2AFBB055809620D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-linux-arm64.tar.gz\",\n            \"hash\": \"18BC5EBAC44703A449BA54F1E131470E57E334B077A76B216FC4409DE8C7F591335A62B28314B6C1011C2AAB20823963F282C4B5056F60AFF4A03D81627357AE\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"04B7D2345E3294B3D3003F10EFBA86B588A3D7748BE44BE8342F88310A275C4C1CD2057142B5863510579924241C1D28A87B207F38A6D7DD94EE05D8277000F6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-linux-x64.tar.gz\",\n            \"hash\": \"0D414349C28F6D21D3E6A2EF52D28308CE93CF6FB222443D1569B136A8795852CC98975800AFBB8CBF9822B563B6B0A7502AB5FB875F8B39E92D7EE0119E6BE2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-osx-x64.pkg\",\n            \"hash\": \"EDC0FE25795F46CA703AB0BDFF6B9BDCCF02CF5BE8E896152AE4525CB2D30728D6999A631EBE000684AD9D716EC3564CCFB6B173D9BF66607643BE48082E67F1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-osx-x64.tar.gz\",\n            \"hash\": \"0862882B398039345EA0408B35A2296253C9E0BCEC34183517762DBC0DC118696EB638654C9D9E043FBD36B185E7B163C52EC2CE3990554B834684AC57B631CD\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-rhel.6-x64.tar.gz\",\n            \"hash\": \"4B11138970CD256471BC0793EF2F09FB102765B8D3C7C7DCFB60F74F13C59D2CB6B52069C38220AE4BB4F995C3137E3994834540C9E101BE069DE6F601709436\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-arm.zip\",\n            \"hash\": \"75E7332303F050DCB8047CE909D9500ACB668BF56115A814004AA307B0A395E08ED9F5ABB9EA59A0838A020975623C603C79C208FA64D733E06F65351329E1FB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-x64.exe\",\n            \"hash\": \"A1F834FF37B61C9CBD4218337E6B89E9CBDCEF6CAB14244652D6BA1C14924ACB1EF21E955324F87EB014B30FDF0DE56AC7356B72937BDFD5E7D0028ABECF04A6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-x64.zip\",\n            \"hash\": \"14A5202ED3E80A21C3E96A71A790A7E7352958DB72BFC0E100A6EAE543AD191920193645439A11C65BB5EE145B5F5783ED0934539FAE1C5E028DAC940C34C148\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-x86.exe\",\n            \"hash\": \"63A4EB96EF6B70F9DD0944D22099F9BB1CA4C677751411ED32E873DC52BFC7B7BD9B3F3D2ECA6880B0535A5D9D6FA00BC9FC76EA57B6CB94079116D9B3C76D6F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.10/dotnet-runtime-2.1.10-win-x86.zip\",\n            \"hash\": \"A04ED2EF99A4C2C926CF5CFFF7B963B289A9257A0D5974F7471A5A6556C0C0D7CA0DD2A8C038A19AD5C3A2BB6C9C73F12CD0957D52383D7760BB8B573236FB8E\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.506\",\n        \"version-display\": \"2.1.506\",\n        \"runtime-version\": \"2.1.10\",\n        \"vs-version\": \"15.9.11\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-linux-arm.tar.gz\",\n            \"hash\": \"2FE07513B046D3BE2935BB2E9C7CFBC19ECA1AF2F7BA3BBF05BAE8DF11C29202CC0095AC0B941D38985AED679B9F2934B36DB9C9F591A17BD9B5AE7351FB7C25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-linux-arm64.tar.gz\",\n            \"hash\": \"3D9C0E8E1E4B4010A5BD32E3AA3953D531F77D318CFA2EA9E3EACDE83154685A748FD4611406E3C26D08A39FD7612102B814FC6A43FE9659735E997E8C5A46B3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-linux-musl-x64.tar.gz\",\n            \"hash\": \"C7CEB3CC72ECDEED0C378D146009B9BD87AA7D1CDB0D14E584F0DA95B4BCE4938B9FED68CC36EC9ED09678D9F59F4C4429B71D842B7C42AB6519092979D91B36\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-linux-x64.tar.gz\",\n            \"hash\": \"5B3A5FE86B925A394BA8CF4AA0810639EB235BD5865B4DD8B2F2B61BADBABE64A09F71B8F294A0D900B39D8D1D17335FFE7ADE25C98387BDEE98107A2075501B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c06b35b8-babd-484a-a4ad-7656d3123393/74ac7db45fceec7a0d2c646b76d6873f/dotnet-sdk-2.1.506-osx-gs-x64.pkg\",\n            \"hash\": \"C2E647375DAD15AFE6FA6CCCFCE31B9A5D07BD82B49434D9084F984A2528F9D80D7D0ABF18EF487490B03F58C7D571939CA5A23B858FBAD628CBA61AFB21DD5C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-osx-x64.pkg\",\n            \"hash\": \"C2E647375DAD15AFE6FA6CCCFCE31B9A5D07BD82B49434D9084F984A2528F9D80D7D0ABF18EF487490B03F58C7D571939CA5A23B858FBAD628CBA61AFB21DD5C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-osx-x64.tar.gz\",\n            \"hash\": \"6D0036919CB75165F892EA418BEBD84079F4943B5921B407E7245285646B0456D92FE64285D419629CB75DD68F97DC6627291CB9E4FA328DD36BF1F33F22B49C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-rhel.6-x64.tar.gz\",\n            \"hash\": \"E7A5F30AB2444DAC7D4560779CD3282CD17D6996EAB803CEDBC4F65D718EBBDD6445E5A7608ADB3556AD7ED6183C8892776B2A7C7819D9EE02342C6C225A89CB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f1dd2017-9ad1-4771-8b7e-cd35a5f2dc4d/1b0f03cd467b92523e54a791e86a2ce9/dotnet-sdk-2.1.506-win-gs-x64.exe\",\n            \"hash\": \"BFFE745C3831AC1E2A0551348D50DA2E0748EC627EF09C2499E4AD6EC32E6AC4FB12627B12C677D12817280D945163D873AB062D5C83D250E101BC31F0727982\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bb08a7b1-afe7-46b3-a578-5598c8b85cc8/8ec88e422ae880cca29b738ca056147e/dotnet-sdk-2.1.506-win-gs-x86.exe\",\n            \"hash\": \"8766C65386CFA7D907D3DAAFF0B42B9117DB25E433559B07E6CDB0B6C10473755B14AA371310972D312448533C6D0ABC925821E4FA0A95570FEF045FB04802C3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-win-x64.exe\",\n            \"hash\": \"BFFE745C3831AC1E2A0551348D50DA2E0748EC627EF09C2499E4AD6EC32E6AC4FB12627B12C677D12817280D945163D873AB062D5C83D250E101BC31F0727982\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-win-x64.zip\",\n            \"hash\": \"D67BCB069E63AFDD3EC79A36BEE3A8C314E15A573264685E94DA73D00C728D516D896E2FD0E081AD3C5301F7BE6C6067085964EE7EA1A6AF8B67CBBC60D871B8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-win-x86.exe\",\n            \"hash\": \"8766C65386CFA7D907D3DAAFF0B42B9117DB25E433559B07E6CDB0B6C10473755B14AA371310972D312448533C6D0ABC925821E4FA0A95570FEF045FB04802C3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.506/dotnet-sdk-2.1.506-win-x86.zip\",\n            \"hash\": \"887D567D531EC1805A5FF8F57527C524C6795B6B6F1587AB99D8E107A275F9C194FEC14C18CD26791EDE68077AAD7A1E46D7E7E6DC2DE9640A7525279CC87569\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.10\",\n        \"version-display\": \"2.1.10\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.18263.2\"\n        ],\n        \"vs-version\": \"15.9.11\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-linux-arm.tar.gz\",\n            \"hash\": \"D6E9AF9063C7A2839A54998AC78DDBC61B3B4626B32C864360F1BF20EE17F5D0A6417074BAB994813532339EAAF9D8C0D6BF0330799B3BF2263D4E69E6B44BD0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"1FDC9E7AF90112E960FAACB1C91C7F11768EC28E6FEE7DEFD5FEF5588E4F2BD814C9003008152637AA09CD7BB9B2F78C8C51864EAC2E6A534A6D3EED7025A4B4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-linux-x64.tar.gz\",\n            \"hash\": \"F812AC2992F1F16F44DF719C434080C8D7920CE4881282D5A678218606B039E0EEAC43574034C050E11CA5A1FE3172C2D5B43C2F3D08C3595A20164D8E979FA2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-osx-x64.tar.gz\",\n            \"hash\": \"D88402537D6248385B57184501BB866BC0FA65B7D2DF924F13C0811BC12F188EBC74EAB8BFE9623F298FD9B2F1A6FF7EA4F5C635CE40EFB9E84B6433245A2382\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-win-x64.exe\",\n            \"hash\": \"A527FDF0B0268C991F91B5A943482C37367A5CAB0EB52D300B0B3DCDD910C02CB522D8962D13C1A820E835276DE7925A660D249138E32781BF7CF43A8BAF6B71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-win-x64.zip\",\n            \"hash\": \"37B940FE1B49B654CBE5731AEC9C40054264A04FC13FC371F23FF6F9F10ED073735125E834B1918AC9E2B47FB65BA00541766EDA5AF050BDD4B0FD20594A266A\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-win-x86.exe\",\n            \"hash\": \"2D9AF341F2754830FCDBB656BE8C7140DAEB83E0548CA388C8629BCB313B21B5C4E0F630D390725394D52A102FB3F495FA23B2E7D4341C07E1935E87B91DA2D1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/aspnetcore-runtime-2.1.10-win-x86.zip\",\n            \"hash\": \"F66E96AA2AA970D316BCD1FB9F859709CB2BB402336BB60D0EC387EB0E130E889D508052AC5AC567E81F2DF7C703D0EEAD0B906C454B2EDB77349544ABE7ABB7\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.10/dotnet-hosting-2.1.10-win.exe\",\n            \"hash\": \"C0225AE66533E3E10EE1B12E1090A18EB2DC67A050BB1637CAE2293B3982C34DBFBDF8A770C88AEBF41626654B135C8CE4736754B464A1A1723EC9010311F530\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.10\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fce4e98e-1be3-4603-89a5-0ba98d11ceb0/c207cbf61146b4a4cdb490732c722191/aspnet-2.1.10-symbols.zip\",\n            \"hash\": \"B7EAF2C9812124D828B79A15D219D525410A036634F45F6D81DB0FD2CB9867DC30DCECDDD2D95A7666C7E6DED2FEA2CA5E33BC93F3B86B5C5C9CD1BD4DEE1B82\"\n          },\n          {\n            \"name\": \"aspnet-extensions-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e49f73d2-9746-45c3-8b08-5e628c13c94e/580ef81d0ff9a73f36de39ff0bb4209f/aspnet-extensions-2.1.10-symbols.zip\",\n            \"hash\": \"7CDC47183A2A6DAA5D73AAEF3134A643F8EF5541C00DDE74639423BF0C439F3C2BF47422CCE6244DA2D837F4C03BC32F2DFDB777E69AC310205E056964F4A6DB\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/da4719b1-20a3-490e-a81f-46cfaedad2f1/e1e51fdcd30ea26293678dc2cae553df/cli-2.1.10-symbols.zip\",\n            \"hash\": \"691F19B7F68693A072E06503EE2671DA0E904B6281A4913EC333D490A02F680A40B22FC76A40A34BFF5439BE3480DB5D44E07BA7E609AD5A4D6CD4B78B362091\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1a5b28d3-1d71-43fb-b3be-8e166e736889/1cf3af996cb9b26fc2d5578a3a0b4b39/core-setup-2.1.10-symbols.zip\",\n            \"hash\": \"E928C4786B8832975086D745C8115CBA871952D88CFB7226629059EA07E725EE38399F1EF78CF65450567E0B3C97072D666CAB02780F608AD73831572254F4AD\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/72c448bc-052c-43d8-bf77-d66b5f6e2372/e2089ffebb26b5f3726c91a48eb288dc/coreclr-2.1.10-symbols.zip\",\n            \"hash\": \"3747D140B7EB3EF108CE83786AC2AAC163BCA63CF6A8AAB0909A3E923489AAD5EBC121D749A93DE725EBA9275CB4E8D2296740C3E8367D8E260297B7F6FB73B9\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2ce8b163-45e8-4834-8c28-4e845f06da2e/77ef403106f2ad9113efb3fe925d1972/corefx-2.1.10-symbols.zip\",\n            \"hash\": \"811A50920165CB81AB994698DD8855D4BCB7360D10CEA1257B2E4F3B04F34E2BC1A953FD30248ACC96EF0E7435A2826C443A6C0DDBBFB48967506B0C122F1C90\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8bc18ae0-6616-4218-a35b-c49360ffb0da/0f022b73024bb8d9f2e8d39c4ca4395a/dotnet-sdk-2.1.10-symbols.zip\",\n            \"hash\": \"941E76DDC30415D6155DB2FAAE3D79E532F0B59557D17905080021E23AB3B9EFA18A62B73422A500F438B1C69E6E9354458F7B94AFB94356CF81667627E44BD7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-04-02\",\n      \"release-version\": \"2.1.602\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.602-SDK/2.1.602-SDK.md\",\n      \"runtime\": {\n        \"version\": \"2.1.9\",\n        \"version-display\": \"2.1.9\",\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-linux-arm.tar.gz\",\n            \"hash\": \"6276360FF846356E01040093EBE2A721FFE11FF7B55109D8366DCDFF4EDC4783C1D39D23FD32C5688123318862A5B7B4C443276B0AC653D7D4E5ADF6D4AA74F6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-linux-arm64.tar.gz\",\n            \"hash\": \"D1F57B563E449EFDE5A032424836CD48D0B7A90A6EC1D51C37D64BB7D979B07D78585F0151510CCE3B162CCCB23AA649DB8AC58F9E9649CAE1A45EB94C7C0C7A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"34BA7B9CD17B44B76BFABDE207671EC97F0F1BDC0177F11809AF454E399E5D4F8EF5817ABB4AD7E7330C6FEBCDED70E6791C3F7E780773100C26656709BCF59B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-linux-x64.tar.gz\",\n            \"hash\": \"39C6D225196AEE9F839F957D326BCE682C7855565C7CBBD1F7898430DA0134425DA106D5C9F43E69CEE973AF4091A89577ADD0CF3E85BD313346FAA64C82B164\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-osx-x64.pkg\",\n            \"hash\": \"1A1E087ECF78D47C8166E60C89AF4518055773FA8512A7CF8B1AF50F0471E3D8025CFC5D6696BC98A2CC806D770D2959BED60BC43842EF1F5D789C9B21E373AB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-osx-x64.tar.gz\",\n            \"hash\": \"15EFE8C176A8927D0A288C65E683C3DAEF605194A35FE4D68F66B6D76A1A6D857174608ADD579298C649695C06A96BE509DA0097C0EBAA359D8D69F25FB1D495\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-rhel.6-x64.tar.gz\",\n            \"hash\": \"98EF7ECC6728E11310FCA6060DF326A74A9785C2C350A307FC310A4C1A6389310A1CEF151615D860C7FB99495756D6EA6E6C3DF9351963D8AD61CF32CB04153E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-arm.zip\",\n            \"hash\": \"62F2C3F313046B0534725B64B6DC9A63A9CA2A3DBA357A65101E1C9CC78F6DEDADAC1771C60AE45EAA6B1F3880B40BEF1FF50CC44F3DDF6E688E2813D5441838\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-x64.exe\",\n            \"hash\": \"BDFAF1C46F10B257734D4EBA4F0DDB3E3EE09790D280A95D4484DD3AB30FA93B23EAA67E6AC5FB82C78559711EE0B37C2A3A46897E34189BE8DDFC55FA1BEB3C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-x64.zip\",\n            \"hash\": \"31A94A4576BA0C7ACC18A6160D2F3BDD65D52883F8DDEEC4244B91F58834C3CCE396A5040930CB5F3B091E280E79906AEF575EEDEE4A8A134343C9A24A63D1AE\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-x86.exe\",\n            \"hash\": \"A17562F31C67C2DEE1504C06328768DAE1EBD6DF94D66BC19B72883E72FC4A00B7E58A08BCDDDDD53377493022F2FD91DDD583863A6DFEC679B0A4F54F195D37\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-x86.zip\",\n            \"hash\": \"3EEBFD0ECCFD2F02A5C48E894E85BA168ADD7C6E75751D4F27841978CE87E30378528DFE58EA68652DDDB70571E9941CD333B97C8A8714F8FC7479E1F4941A10\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.602\",\n        \"version-display\": \"2.1.602\",\n        \"runtime-version\": \"2.1.9\",\n        \"vs-version\": \"16.0\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-linux-arm.tar.gz\",\n            \"hash\": \"A0C72D1EC819FBC92B20B6A6AE5EBB5C42C77404438FDABC7FB2DA44ECC33DB2EBC1A3F4181A493951D3F2F05FCE8D231159CBCF7371FE390C52956DA1175051\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-linux-arm64.tar.gz\",\n            \"hash\": \"39F3BCEA4D348727A7D5C2B3D017C7F58A6D3F0A03345C72741C9A466087303434BE75FB94D756D5EE9C1F0BE2C2982F1602D818BBF72D03004655AE6917D88D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-linux-musl-x64.tar.gz\",\n            \"hash\": \"E692310E34378A41316124A6AC054A7D9F2BA3BA655B4CB33815A7BAD52BD8CB097FC77408F3C685B717250E29A501F371220A352518F5F768BA6D30D6CAA88B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-linux-x64.tar.gz\",\n            \"hash\": \"F920C3D3D6794E94596B499366210007ACED019B34F7EB39768EBC3FF75FC16F161EECE98095F719C3608721EADA9411DA4D2C4B30414000BEF78C14B4AEC408\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/91cdc233-303f-4717-939c-272635f4bc0d/e05447acb728ed2a21f6b13e4ebbfa58/dotnet-sdk-2.1.602-osx-gs-x64.pkg\",\n            \"hash\": \"BD3871C14BE8F16000DE2A2BAAE7B800CABA0642755E1AF97AFFA15DBAA189A4256424F8C4172D4321C874437DCE12A3D1A250B93F0E28F9936C01DC42580413\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-osx-x64.pkg\",\n            \"hash\": \"BD3871C14BE8F16000DE2A2BAAE7B800CABA0642755E1AF97AFFA15DBAA189A4256424F8C4172D4321C874437DCE12A3D1A250B93F0E28F9936C01DC42580413\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-osx-x64.tar.gz\",\n            \"hash\": \"DA6723E22832C9711C303A3166D9F8B8E731FE0E523817424D4EE4B2C450FB85607E29B62F655554F6D5916C269D2688FF8A5B279FD444B5CFEDB5CEE590C6DC\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-rhel.6-x64.tar.gz\",\n            \"hash\": \"970FA8248381B78F53CC0CC75A70BF327C37EC5E3D1962A2A0F9C72A9D096B671E8F0AD7BA43EBF05062732B3819FAE3867FC9240BB75E26FC8822C412EB2D55\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c96e3f30-fbca-4ebc-8d2f-4ff372b78d1f/51b472f920051d44f8835019929a46be/dotnet-sdk-2.1.602-win-gs-x64.exe\",\n            \"hash\": \"7B78E2E754FF0B66B16701494B63AD8847E38D77EE9CE99D6F82C3F3AB33A304D4AB2DFE2B3EE08BE2BA6AE0E655C180F46B747F3F00D34A8EAC58300CBBC4FD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/492a0fe1-0d5c-4134-ad3a-e91c62bf9a3f/9901b18e705ee9c300e6f26a67808f93/dotnet-sdk-2.1.602-win-gs-x86.exe\",\n            \"hash\": \"A478F137F753081D08C1F74AD302C01EF6D615025F8B437584F579E79303DBFD0AB9A7491BCAF4A3E963921035F97A54092819F89B70475966590DCF38DB04DB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-win-x64.exe\",\n            \"hash\": \"7B78E2E754FF0B66B16701494B63AD8847E38D77EE9CE99D6F82C3F3AB33A304D4AB2DFE2B3EE08BE2BA6AE0E655C180F46B747F3F00D34A8EAC58300CBBC4FD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-win-x64.zip\",\n            \"hash\": \"1A7C06F488CB93AD4AD0258824D0341177DDCB50F5AA1EFCBE8CA4A714ADFE1D1635C8DCF56169789475C4B9C32D13504A086BC8747A46A2931CCE4B20C88A04\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-win-x86.exe\",\n            \"hash\": \"A478F137F753081D08C1F74AD302C01EF6D615025F8B437584F579E79303DBFD0AB9A7491BCAF4A3E963921035F97A54092819F89B70475966590DCF38DB04DB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.602/dotnet-sdk-2.1.602-win-x86.zip\",\n            \"hash\": \"80870665F4C252018258A6EA314883B23D62EC3FAFCBB50DBB3D610C9CB5A252973AAC0930F3F7E9A9E4F510B33C15329927022CC9DB0F7D1A00D3EBFE48409D\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.9\",\n        \"version-display\": \"2.1.9\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19046.9\"\n        ],\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-linux-arm.tar.gz\",\n            \"hash\": \"88A9FBD511667AA13E6A5C866F2C3A493753191D7972AAA3839535BAAAC1D2F01C33482975D6A5CCFAF33A2A9A78A50B6A05D8F20C85496701E9828899463406\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"D195124709B99CAD213D86595EE71126E5802006F053751A4D836D23E506D0FDB6A6DFCC90B28041C71F5623BF18978226BB2FE144B5436F93718DAA13A44673\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-linux-x64.tar.gz\",\n            \"hash\": \"A42056360F359D9D8FA87D4FAA1EAB2E48525236A89BB5099CA3F81ABE678D1C815F8784C4DA8D9D7EAEC8F3ABC29A25E295296A5CEA0A6BE4511F9EB0AC5A75\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-osx-x64.tar.gz\",\n            \"hash\": \"F152AC18AD2AFEA5DFF094F5ACD8EB4B7B6E5A81275CEA288A06888CC7787D89AF5F2EE920C606CA327E1DD067DD6C9B5231F1432B8A6021FBB6E579A6DEC6F3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-win-x64.exe\",\n            \"hash\": \"361D4E369E66CF07A8A8C956240F0E79C87000B6DF540732ED68ED6CEE3466E1EEAAA6CC3698DFBBA0940418EF72BF88361E5A4AD7D9740CFF92C2CE1B81EF56\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-win-x64.zip\",\n            \"hash\": \"9885C15250529C92A95F951AD498E6448B229FEF0BA40FDF8E3AAB3A24D25611851D245C698783B0901D46B227E175FA30F17F6021560E34CCCE3014912F3BBF\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-win-x86.exe\",\n            \"hash\": \"0FFC1712D53920BF37D70C3E0139617CA4B912344D8DA3CF34EFEEB6A648021CDCDA57D378AA5E34555B25131E990478B34FF5A903CC2D14A8A4D44EBB6DAAB3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-win-x86.zip\",\n            \"hash\": \"03121645905D24E1D906FD0E54F1F5D66283B9B35D30986FBDB2451A181F2924ABCA16DA95B3425321664F4B62B165A5DBE3C44D6B95662645509CF28FACBEE2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/dotnet-hosting-2.1.9-win.exe\",\n            \"hash\": \"CF1708CCDC3899DBD52C71FF2BCB9BEBD0BB8F7067A3156B6C03D83F9959B2001663237A4910B4744F0306D928143125076E581D5567273823C91E8655678A7B\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.9\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/255fda66-df42-4426-ba6e-d4f861af7c5c/688b6ff952dea68557368096ed6ff512/aspnet-2.1.9-symbols.zip\",\n            \"hash\": \"7F0E1A2EF1FCB83E6CB204B4A8445E3C7E8FF52905CE39682B087CD27D876B03A0DB88576BE374AEABDEE7F592550EC86BD3D289326F6CFC0DEB263DC11BE55E\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d0fdd452-5905-4b2a-a75c-bc3bed1064b8/dbf9eda4f8bbc68eb53f9c91dadf7042/cli-2.1.9-symbols.zip\",\n            \"hash\": \"3089052A5012766D8BFD9DC2B94B555CC811293D57F83464030D0DA3423719BD97801672C4F6C1B9082FD2D64F0F789F638A475B1A194F2B021C015DE4059927\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d1d932c5-355d-4ce6-ba8c-3a019d6dcb04/3718bdbe0ef20017a807b321d7a594ea/core-setup-2.1.9-symbols.zip\",\n            \"hash\": \"01DFF8AEF3B584F488FE9F0F5BC34D6F8CB555006E0AA6DF98014E2E973284B1BDEEC7C1CC700B5AB89AFAC56C9450C2316EE0479504425E75BF4CFDC69BDB69\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/537b9e61-b039-4268-b91d-1a5376933e1a/feeb7fbd92e3905637b4b6e89f2b5772/coreclr-2.1.9-symbols.zip\",\n            \"hash\": \"0DE0A734E9065197B0AD7B9F64B5DFF1E2F048D9E68CF6844CD257A9C860E36F8EDE742B188E02FD66CEFD558D7E3A72695D1272939A9DDE8A437547E4D4CCC0\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/77b1b665-a636-4452-bfcb-c9e533b96cfa/0817fd592a898906def3787deec302d9/corefx-2.1.9-symbols.zip\",\n            \"hash\": \"B4C41557E0B33848EB83ACB11B99E00DFB9610C4125A205FB1EA41D075129C503319F5AF1B6AD3B833E2E11878B1DAAD4DB0FDCDDF5772E95510C3C5B44C0EE7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4c75b8b4-c2f0-4b2d-8646-7a9815f1efea/44945b5d239d3163a1d6fc202ff851ac/dotnet-sdk-2.1.9-symbols.zip\",\n            \"hash\": \"B88EC26D22BD7BAC006194E677FA26FA8A0A24B633EDB7DBB616753793094D0FA4820272873104AE683A362B24766C168DC3593FA0396E28C10110B997876BEA\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-03-12\",\n      \"release-version\": \"2.1.9\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0757\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0757\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.9/2.1.9.md\",\n      \"runtime\": {\n        \"version\": \"2.1.9\",\n        \"version-display\": \"2.1.9\",\n        \"vs-version\": \"15.9.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-linux-arm.tar.gz\",\n            \"hash\": \"6276360FF846356E01040093EBE2A721FFE11FF7B55109D8366DCDFF4EDC4783C1D39D23FD32C5688123318862A5B7B4C443276B0AC653D7D4E5ADF6D4AA74F6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-linux-arm64.tar.gz\",\n            \"hash\": \"D1F57B563E449EFDE5A032424836CD48D0B7A90A6EC1D51C37D64BB7D979B07D78585F0151510CCE3B162CCCB23AA649DB8AC58F9E9649CAE1A45EB94C7C0C7A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"34BA7B9CD17B44B76BFABDE207671EC97F0F1BDC0177F11809AF454E399E5D4F8EF5817ABB4AD7E7330C6FEBCDED70E6791C3F7E780773100C26656709BCF59B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-linux-x64.tar.gz\",\n            \"hash\": \"39C6D225196AEE9F839F957D326BCE682C7855565C7CBBD1F7898430DA0134425DA106D5C9F43E69CEE973AF4091A89577ADD0CF3E85BD313346FAA64C82B164\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-osx-x64.pkg\",\n            \"hash\": \"1A1E087ECF78D47C8166E60C89AF4518055773FA8512A7CF8B1AF50F0471E3D8025CFC5D6696BC98A2CC806D770D2959BED60BC43842EF1F5D789C9B21E373AB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-osx-x64.tar.gz\",\n            \"hash\": \"15EFE8C176A8927D0A288C65E683C3DAEF605194A35FE4D68F66B6D76A1A6D857174608ADD579298C649695C06A96BE509DA0097C0EBAA359D8D69F25FB1D495\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-rhel.6-x64.tar.gz\",\n            \"hash\": \"98EF7ECC6728E11310FCA6060DF326A74A9785C2C350A307FC310A4C1A6389310A1CEF151615D860C7FB99495756D6EA6E6C3DF9351963D8AD61CF32CB04153E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-arm.zip\",\n            \"hash\": \"62F2C3F313046B0534725B64B6DC9A63A9CA2A3DBA357A65101E1C9CC78F6DEDADAC1771C60AE45EAA6B1F3880B40BEF1FF50CC44F3DDF6E688E2813D5441838\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-x64.exe\",\n            \"hash\": \"BDFAF1C46F10B257734D4EBA4F0DDB3E3EE09790D280A95D4484DD3AB30FA93B23EAA67E6AC5FB82C78559711EE0B37C2A3A46897E34189BE8DDFC55FA1BEB3C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-x64.zip\",\n            \"hash\": \"31A94A4576BA0C7ACC18A6160D2F3BDD65D52883F8DDEEC4244B91F58834C3CCE396A5040930CB5F3B091E280E79906AEF575EEDEE4A8A134343C9A24A63D1AE\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-x86.exe\",\n            \"hash\": \"A17562F31C67C2DEE1504C06328768DAE1EBD6DF94D66BC19B72883E72FC4A00B7E58A08BCDDDDD53377493022F2FD91DDD583863A6DFEC679B0A4F54F195D37\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.9/dotnet-runtime-2.1.9-win-x86.zip\",\n            \"hash\": \"3EEBFD0ECCFD2F02A5C48E894E85BA168ADD7C6E75751D4F27841978CE87E30378528DFE58EA68652DDDB70571E9941CD333B97C8A8714F8FC7479E1F4941A10\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.505\",\n        \"version-display\": \"2.1.505\",\n        \"runtime-version\": \"2.1.9\",\n        \"vs-version\": \"15.9.9\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-linux-arm.tar.gz\",\n            \"hash\": \"DEEED99198A6F8E0BDA4BAA9B60648B91D5EA05DAA0873A8BD46B0944CB4D34E2D1478806722E07217A75530F8D47793AD0BE480C1F82B6D015C98EE24EC0D1B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-linux-arm64.tar.gz\",\n            \"hash\": \"2F9576C13FDD98198A511142D76155EAFBCFC582003E774ED0CE6F4CAD19AF0E60F332906A52E5E23A7751F02B46E816AF2543740C1C9C163FD8DE876ADAD31C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-linux-musl-x64.tar.gz\",\n            \"hash\": \"3B672C7B7CC0EA05DBAA4B0AED10E3549D156CFD7FBA4082EB58F7327934C93A7EA98422BADD54F15A263A68717245A8CBCDC8911CE954AAA6683C46458D11CC\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-linux-x64.tar.gz\",\n            \"hash\": \"2F6DB29D2927CE6F558507C43145B0E8A813957434DC75EBF04C08D6B004439F32E748251251D5BD3CB732A0060835D54E8D7EA0F9925EDB83FF2AA708D106D0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/515a16d8-3dd4-4c3e-ae09-3441508c9922/026276b3d10550d099b0ebc2c5cef5b6/dotnet-sdk-2.1.505-osx-gs-x64.pkg\",\n            \"hash\": \"6A8A448740C5075977D8AA81B3118270D65F9DD0422D4224EBD5720F0C8440348406E08BF70AA124B03AF6088856DBE242CDDB186889CDBD0C7E577682AAA43D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-osx-x64.pkg\",\n            \"hash\": \"6A8A448740C5075977D8AA81B3118270D65F9DD0422D4224EBD5720F0C8440348406E08BF70AA124B03AF6088856DBE242CDDB186889CDBD0C7E577682AAA43D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-osx-x64.tar.gz\",\n            \"hash\": \"833D48DD8EDB6041408D9DD8FDAB2846F54FA65BF628FDC2680370BA45399CA1AA265DA36DBC28C05ADBBA3762A3B5911B04FE5B035468AD00C5D97324D8E098\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-rhel.6-x64.tar.gz\",\n            \"hash\": \"52CF7D06E8D754F76ED53DC4000DB139BB8E89F420F403971D2AC553795BB00027B9D496FDF7428038801E0ABEA23A625C4EF8A671FFCBFF0393B6206D361D6D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6b96f707-2ad2-4a4d-ae8c-4e81d8a9b8e1/9677f4157648917a076aba11cc1ca3f5/dotnet-sdk-2.1.505-win-gs-x64.exe\",\n            \"hash\": \"BB93A14AFF94FCFFE55CCE9393690A58F8E7707D56B4C309CE809D61F09A54F67B1A16690D6A71A902EC45AB1D2696EE2F0DF88DFF00FDD7605CA577E7C3983B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1660fd16-eba0-4ec6-94d9-b6a01feb8ba3/0c6f5d4a80dabb823fa467b3df30c4e0/dotnet-sdk-2.1.505-win-gs-x86.exe\",\n            \"hash\": \"7D09100FE3C862429E76635DC84DB3885DCC593943A936376501757829EF6B0454968F332F13FDE543897E02C20ABE3D691F879BFE5AD8268F4BE73783C3403B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-win-x64.exe\",\n            \"hash\": \"BB93A14AFF94FCFFE55CCE9393690A58F8E7707D56B4C309CE809D61F09A54F67B1A16690D6A71A902EC45AB1D2696EE2F0DF88DFF00FDD7605CA577E7C3983B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-win-x64.zip\",\n            \"hash\": \"AAA2B691F3AC7BDC1BA7EDCFABB4C51B53FE1760DB529F3AB6E77F0436627B67940F10014D10F3F76B0C77A5F4289B15DC1E525CED1E0C4F0406FD52D9DDB682\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-win-x86.exe\",\n            \"hash\": \"7D09100FE3C862429E76635DC84DB3885DCC593943A936376501757829EF6B0454968F332F13FDE543897E02C20ABE3D691F879BFE5AD8268F4BE73783C3403B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.505/dotnet-sdk-2.1.505-win-x86.zip\",\n            \"hash\": \"F72ED69EC9D8CA7A120965E05E8FF745D5CFD287423DBC2CBD430507FD15D9FDF226B38D964558CAEE402C3C040EBBA3AF80BEDC5CC5A678753764D72C2E0D4A\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.9\",\n        \"version-display\": \"2.1.9\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.19046.9\"\n        ],\n        \"vs-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-linux-arm.tar.gz\",\n            \"hash\": \"88A9FBD511667AA13E6A5C866F2C3A493753191D7972AAA3839535BAAAC1D2F01C33482975D6A5CCFAF33A2A9A78A50B6A05D8F20C85496701E9828899463406\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"D195124709B99CAD213D86595EE71126E5802006F053751A4D836D23E506D0FDB6A6DFCC90B28041C71F5623BF18978226BB2FE144B5436F93718DAA13A44673\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-linux-x64.tar.gz\",\n            \"hash\": \"A42056360F359D9D8FA87D4FAA1EAB2E48525236A89BB5099CA3F81ABE678D1C815F8784C4DA8D9D7EAEC8F3ABC29A25E295296A5CEA0A6BE4511F9EB0AC5A75\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-osx-x64.tar.gz\",\n            \"hash\": \"F152AC18AD2AFEA5DFF094F5ACD8EB4B7B6E5A81275CEA288A06888CC7787D89AF5F2EE920C606CA327E1DD067DD6C9B5231F1432B8A6021FBB6E579A6DEC6F3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-win-x64.exe\",\n            \"hash\": \"361D4E369E66CF07A8A8C956240F0E79C87000B6DF540732ED68ED6CEE3466E1EEAAA6CC3698DFBBA0940418EF72BF88361E5A4AD7D9740CFF92C2CE1B81EF56\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-win-x64.zip\",\n            \"hash\": \"9885C15250529C92A95F951AD498E6448B229FEF0BA40FDF8E3AAB3A24D25611851D245C698783B0901D46B227E175FA30F17F6021560E34CCCE3014912F3BBF\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-win-x86.exe\",\n            \"hash\": \"0FFC1712D53920BF37D70C3E0139617CA4B912344D8DA3CF34EFEEB6A648021CDCDA57D378AA5E34555B25131E990478B34FF5A903CC2D14A8A4D44EBB6DAAB3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/aspnetcore-runtime-2.1.9-win-x86.zip\",\n            \"hash\": \"03121645905D24E1D906FD0E54F1F5D66283B9B35D30986FBDB2451A181F2924ABCA16DA95B3425321664F4B62B165A5DBE3C44D6B95662645509CF28FACBEE2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.9/dotnet-hosting-2.1.9-win.exe\",\n            \"hash\": \"CF1708CCDC3899DBD52C71FF2BCB9BEBD0BB8F7067A3156B6C03D83F9959B2001663237A4910B4744F0306D928143125076E581D5567273823C91E8655678A7B\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.9\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/255fda66-df42-4426-ba6e-d4f861af7c5c/688b6ff952dea68557368096ed6ff512/aspnet-2.1.9-symbols.zip\",\n            \"hash\": \"7F0E1A2EF1FCB83E6CB204B4A8445E3C7E8FF52905CE39682B087CD27D876B03A0DB88576BE374AEABDEE7F592550EC86BD3D289326F6CFC0DEB263DC11BE55E\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d0fdd452-5905-4b2a-a75c-bc3bed1064b8/dbf9eda4f8bbc68eb53f9c91dadf7042/cli-2.1.9-symbols.zip\",\n            \"hash\": \"3089052A5012766D8BFD9DC2B94B555CC811293D57F83464030D0DA3423719BD97801672C4F6C1B9082FD2D64F0F789F638A475B1A194F2B021C015DE4059927\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d1d932c5-355d-4ce6-ba8c-3a019d6dcb04/3718bdbe0ef20017a807b321d7a594ea/core-setup-2.1.9-symbols.zip\",\n            \"hash\": \"01DFF8AEF3B584F488FE9F0F5BC34D6F8CB555006E0AA6DF98014E2E973284B1BDEEC7C1CC700B5AB89AFAC56C9450C2316EE0479504425E75BF4CFDC69BDB69\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/537b9e61-b039-4268-b91d-1a5376933e1a/feeb7fbd92e3905637b4b6e89f2b5772/coreclr-2.1.9-symbols.zip\",\n            \"hash\": \"0DE0A734E9065197B0AD7B9F64B5DFF1E2F048D9E68CF6844CD257A9C860E36F8EDE742B188E02FD66CEFD558D7E3A72695D1272939A9DDE8A437547E4D4CCC0\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/77b1b665-a636-4452-bfcb-c9e533b96cfa/0817fd592a898906def3787deec302d9/corefx-2.1.9-symbols.zip\",\n            \"hash\": \"B4C41557E0B33848EB83ACB11B99E00DFB9610C4125A205FB1EA41D075129C503319F5AF1B6AD3B833E2E11878B1DAAD4DB0FDCDDF5772E95510C3C5B44C0EE7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4c75b8b4-c2f0-4b2d-8646-7a9815f1efea/44945b5d239d3163a1d6fc202ff851ac/dotnet-sdk-2.1.9-symbols.zip\",\n            \"hash\": \"B88EC26D22BD7BAC006194E677FA26FA8A0A24B633EDB7DBB616753793094D0FA4820272873104AE683A362B24766C168DC3593FA0396E28C10110B997876BEA\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-02-12\",\n      \"release-version\": \"2.1.8\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0657\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0657\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.8/2.1.8.md\",\n      \"runtime\": {\n        \"version\": \"2.1.8\",\n        \"version-display\": \"2.1.8\",\n        \"vs-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-linux-arm.tar.gz\",\n            \"hash\": \"948B61F5618C41CA29F29E19AE6FD09EECB172F9B1227D180EE64622BBBEEBC94A344D5F089923384FE5C6CF9585D90B5BA03631679D560C5CAB1F13DA41A7DF\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-linux-arm64.tar.gz\",\n            \"hash\": \"167CBE5CEB523814051951A7102DF431DC973D13BFD69B90E327A16023FFA2A90316A4E667C7141E88781E07F9C10136E110C549D848D49BD3E32B91D9CF0B82\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"38698A9047B695197E4437C284ED4806F7C6FC526807394FBD27DC42176D743C29F0F1D48023B457C5DD544AD14C0ECA476C4666B7B907874E3816A897D96D3F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-linux-x64.tar.gz\",\n            \"hash\": \"A18FDEB8B2CD57979030EC4E7F9BF68D170151DD12559E6891E0F33A1C797F2D3E0943550BACC6AA23E047B054B56D87DD8996A5A6136495BF80C1EB88A3C412\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-osx-x64.pkg\",\n            \"hash\": \"EBB6E45BA8854062C2895A53AF00EEE76812591CCB01ACEFFE6F93108867C4DBB072556F460AA3282C8EFED1D13A84A675A6212AAB058AA742A25919DFE4A88A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-osx-x64.tar.gz\",\n            \"hash\": \"C3C4FEF5A927573A0FCCE5A775229672BB6E1FE7EE09537CA34A6500DEFD601E14B7E8E54E80B7E4BD978B664534E67DB5C10D1D0CBB585C4D8786B0B7120BEC\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-rhel.6-x64.tar.gz\",\n            \"hash\": \"DA55AB6B313E7E958549B39CEA2D9CD104E9E3099907940BF06C2193025C09DBC7896D9EDCD4874367E40EB0DC42AA8B042516CD93457AD51BC1AEFD2A9D2FEB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-win-arm.zip\",\n            \"hash\": \"35D08EBFA968AC4DA40F47A1CA0794B5E0B7AEDD3194B68C138E76B9FA492511C73E29D54C696772D42935C0E5034EBA16649B195206AA5E0AD20AAD639A2797\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-win-arm64.zip\",\n            \"hash\": \"E2A42FE264CF8F09D95CC096A28A7941EF6F18B82C947344F9D9628E6D82E787AE9BDB44113DCBBFFE5C5D6289E3C4F708B55115DA5D5EFF4BC7E972918EDAD0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-win-x64.exe\",\n            \"hash\": \"087F662BE0CFA7DE0A914993F7C44C3174B5C988C9C0050971828A6488821A6D54C5AC5DFBA1437E3AB5EF1FC2847027057251F78C4118EED2D25D1908A41A18\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-win-x64.zip\",\n            \"hash\": \"42CBFDB97E75E84B075AFEB4C943FCF2697F3F0C2D4A5541DEAD23E6B9D3954A5EFF465A4D0B73393257151A905FADB3B022CE883E44D72448F25707218C54F2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-win-x86.exe\",\n            \"hash\": \"120F273E4D1F54FB02ED098A1B002C28DBF2FF1A99E89F3671E52E9F702EE28BEA9AECEB73072CEFFEF6DA9D8C8211B2C6BB340E5319C89E7B9D709E54AEF300\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.8/dotnet-runtime-2.1.8-win-x86.zip\",\n            \"hash\": \"997F60C525A542FAE7264084DDE62CF24AF9B1D1EE2CBAE76465A645591A217DEF85DA94AE3185001F2E26B84FDC2154B741564F6C554AE9B493E928B050B5B0\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.504\",\n        \"version-display\": \"2.1.504\",\n        \"runtime-version\": \"2.1.8\",\n        \"vs-version\": \"15.9\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-linux-arm.tar.gz\",\n            \"hash\": \"B4F272063E96DE8A713894BC9832447582F67BC300162257561AF237912FADB5902582180887572E9D1C8A10A0587966FEB4523EDCB4D530627B7FAF1F2EB616\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-linux-arm64.tar.gz\",\n            \"hash\": \"8261D8FF7AA8757D4EB53CC1073038756F3A4EC5100667AEFC409580A2A94ED564EE95C5F8C9DA7ED2292506FE7DB9F1C340722A5E08B7761F78BD1EC38ADE68\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-linux-musl-x64.tar.gz\",\n            \"hash\": \"FEC149CA27513D441ED1EC57FA690A6BC92D45D5E034388D6FB3C7577CBDBB2D38E5C6C3702C91CE9772D651B0CFBF5CE9D2446A555D89D7402939B9CE6B4653\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-linux-x64.tar.gz\",\n            \"hash\": \"93318A533DA67DF22CAE5C4BBB384ABD820B37D66E473DF08DA26231D0DF0D0420661E4E587CED0954EE77EB3AF532E52D0AB1DDD9528AA0EE74B4EA1C27702D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b3f7e697-363f-429d-a78f-11c244e476a4/fb34fbea7d52d479cd4f7f8d4263545e/dotnet-sdk-2.1.504-osx-gs-x64.pkg\",\n            \"hash\": \"5200E27225FBFDF66DA78F152BCC76DE7666210C3B1F49673A9530FEC9C2E67F062814C7354DAD3FFF9E5824618434ADE4AD17165E94B9C6B3B646DB4ADE47A7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-osx-x64.pkg\",\n            \"hash\": \"5200E27225FBFDF66DA78F152BCC76DE7666210C3B1F49673A9530FEC9C2E67F062814C7354DAD3FFF9E5824618434ADE4AD17165E94B9C6B3B646DB4ADE47A7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-osx-x64.tar.gz\",\n            \"hash\": \"B2E72B5D581930D70B450AF92ECEC0F1CD068BBA067D09755076F0FCD754FFE7306E63A14F3A6CAA85A70FAAA38A10406A902A7BFCE0A72499A3618B1FD5B660\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-rhel.6-x64.tar.gz\",\n            \"hash\": \"C045D1778C76B25ADAF42D6CF53E90A9F8C8C32A26B2B42625FD3CB5FE739247736FEFE5666E57EF6F998DE2AD2A58EFEEE6B67B6C8BBB37E38697B9CA3F0B7D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f1be8c58-9b61-4a44-8eee-effe5835e078/7b385e68476df5329129007630999450/dotnet-sdk-2.1.504-win-gs-x64.exe\",\n            \"hash\": \"AC2C45DC10428EB888D80B15E1CF8B0FF2E76980038AF312C76E8929501A44B0631A9C3C15F098F288C0BE4CFD19343EDE83DEF5CDA6B16985B23DE14B6F4C8C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1d3325c2-ef86-4db4-84ac-79026c599e96/b17b88b527a27afce5689fe6c5dbe65b/dotnet-sdk-2.1.504-win-gs-x86.exe\",\n            \"hash\": \"21DED0B21CCF9EB39B4B0DC41931579D3768CF781470CCBCF25CDEA2943B1B405787B405A74245E5192FBBF81A906DD9FED8A1AE5D77082530A5AF2118CA5DEF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-win-x64.exe\",\n            \"hash\": \"AC2C45DC10428EB888D80B15E1CF8B0FF2E76980038AF312C76E8929501A44B0631A9C3C15F098F288C0BE4CFD19343EDE83DEF5CDA6B16985B23DE14B6F4C8C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-win-x64.zip\",\n            \"hash\": \"A7A19BBA1B48F47E24DA5DAA3E73C9A3279613813843FA3513C01F4D1BB6026699DF131CC624EE3FAE49775282016E0DFF62E3F62E670FE843FF6E66A3387B20\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-win-x86.exe\",\n            \"hash\": \"21DED0B21CCF9EB39B4B0DC41931579D3768CF781470CCBCF25CDEA2943B1B405787B405A74245E5192FBBF81A906DD9FED8A1AE5D77082530A5AF2118CA5DEF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.504/dotnet-sdk-2.1.504-win-x86.zip\",\n            \"hash\": \"A0BDA9FAFCA6C8B31C2BDDA09703E338B0B123F9EAF36E9C705EB45AE9D4CC41064F4ADAC64A68DF79C410CFB39F8DF5D8F0481712BA49F8D3221569E876F4DC\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.8\",\n        \"version-display\": \"2.1.8\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.18263.2\"\n        ],\n        \"vs-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.8/aspnetcore-runtime-2.1.8-linux-arm.tar.gz\",\n            \"hash\": \"1AFFAA2641E73DD9FED7E402918C3D599D86AE34DB0E2018FEBA5DA054B9079BE1A530314CE033CF5B4AE2C9349C8A5B5C27C583B88CADFFF9BA95616237E750\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.8/aspnetcore-runtime-2.1.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"00E8DE304262439972210158BFC3B065BBE4A710A82BD20E67F0A79D15503790412072F814C5A20D4370B69FE917F45A16DFA16DEB9E67CE45F5B5734AA51163\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.8/aspnetcore-runtime-2.1.8-linux-x64.tar.gz\",\n            \"hash\": \"0CEA73C8BF2B125566B17EE3A8B6282E82427F542A712086C33D0321831F2FC6835B7E5DA8EB101A5C43C643526B074942FE687446983774BD2B2E25FE101237\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.8/aspnetcore-runtime-2.1.8-osx-x64.tar.gz\",\n            \"hash\": \"A81C1B966C3C9D1ADD0A6430B8349DAD619B70111141F2DAFC2DCF090A591737ADC9B33EC5A23E28A4785CBD6706A6125D5F575297052002818D0F9DB0FB6FBA\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.8/aspnetcore-runtime-2.1.8-win-x64.exe\",\n            \"hash\": \"2908638BC02429DA611303CAC5C294CC92C53FDEF3B4FA253961C6670CCA531616AE24B38286C564C1540CF7B858E7359BC6D3A18A26A64A8C440937FFDBC16C\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.8/aspnetcore-runtime-2.1.8-win-x64.zip\",\n            \"hash\": \"B9911481B839C0FD119BCC82C60AF32599125BE1F4CFD72001F7BF24A21E8986F45930B9FE0D77E07127D78B9B4046F0DC6B3D11F1B238F867E2F42808BE0FD9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.8/aspnetcore-runtime-2.1.8-win-x86.exe\",\n            \"hash\": \"1CBF3F72F16704A1FFF5AD97263817C3E931989951B53B1938E6D750CA3D21A85D93F5458D7A66FA9503040CF6A61DC6805E981097F07BD6FC3CC26D1C03AFA6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.8/aspnetcore-runtime-2.1.8-win-x86.zip\",\n            \"hash\": \"0E134D25E4CE75B7F9E056ACA5C33A24AB1613FC9823B3FAA1F21B2ACF3A39C874153EE23320F8EF96C19B084400B8D11F1FE746A3284A49C15C857A9B70D750\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.8/dotnet-hosting-2.1.8-win.exe\",\n            \"hash\": \"E7F851CB8B75B71483AA4C3EB98EE272A3839B21F8AEF1EA0CBA9FBA5478373F037BD9BF25DE1FCA74C0A2EE792B894CD313D0F09DD68D6964FBBDC4F0A6B10C\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.8\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/284653cf-d4b8-459b-b956-084a7ceb604b/1da506036feb060c4a8cd15890c1b250/aspnet-2.1.8-symbols.zip\",\n            \"hash\": \"F675DD5A23621843A0113116ACF4502A2C02B3E424543BC561D4B7C2162135046A7DA85223A0BF9BFF8D2025DA69AC7CEE7C994A6E27195C7678EB187E2A4C00\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8a82d06e-3d16-497a-b461-58848d7add64/c3427c0a5dc1dff0498ff0af92d77bd3/cli-2.1.8-symbols.zip\",\n            \"hash\": \"C5346F25F7F564C417E17504B2C91926BCC292F475C6BB59A739379890652318413B52B67CD2792D6F765DCF2ACC93C674C7A55732C5F0B867BBE0812AD5ADBE\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ec4c3a49-2864-42f3-bd76-006e000746b8/9e70f83ab9016f136ddd5107239dbbd5/core-setup-2.1.8-symbols.zip\",\n            \"hash\": \"565C2BBBF0A38785DF538A6D38ABFA0FE84BAF06EADCF2EBA2BD66D6EAEAA9ADA24B37729432B79FDBCB74536B2B0053B5CA4DEB7043A1D1F72DD73BBA09164D\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/613d85ee-19be-46be-b454-a41497faf9d7/26945496c0862c63783c088618d26566/coreclr-2.1.8-symbols.zip\",\n            \"hash\": \"E42E7B6819B353BEE99851AB2EE0767774533C130AC451837696855F0864A5F41CA257763CC286E0BED4A5BC9FBA4BE1FDA4A9C21F5D34CABDFA32FF79FD9C94\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d358c132-d850-4d4f-be7a-6e01dfe7d47c/fdd803392b44e577eb8b221d4f6ffb4f/corefx-2.1.8-symbols.zip\",\n            \"hash\": \"359608B3CE7ADB12553DE6FE91641479922F57297ABC1A4B153E3851840E596F71E58031A94E517B74AC2206DE40FDB89FDA961E3BB3A93786A45FC4479D1865\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3bde9854-d226-4dc8-b702-5b7dd6fa687b/a5cdfb1edefb834c8413709f0016d63f/dotnet-sdk-2.1.8-symbols.zip\",\n            \"hash\": \"11DC4E08C84B274B1C038E5EB22B8700585DC867BD996B2D9176414EAD10B35940153E0751D6DD7644C6B9E864E83B65B75498B8C252948F1279A0ADB7CD3DE7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-01-08\",\n      \"release-version\": \"2.1.7\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0545\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0545\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0564\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0564\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0548\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0548\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-8416\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8416\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.7/2.1.7.md\",\n      \"runtime\": {\n        \"version\": \"2.1.7\",\n        \"version-display\": \"2.1.7\",\n        \"vs-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-linux-arm.tar.gz\",\n            \"hash\": \"EEA0D331E228B708D72C0C986BD834C61F2149FDB611D3163BEE657EA4FFE3589F015AE657FCF21E33B18E9964D872BE53E28AE0F75E56FEF00A5DD4920CDFE0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-linux-arm64.tar.gz\",\n            \"hash\": \"A1C3C852153394CE092D925BA9FE705E365A77603B20283AA1EB9B320C2073925480A47B9ECE9A850B67B53873D0DAC23146994BB3411AB114049648544E9392\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"E362A0497FCD524EA1D2FA512BF439E54CA487660A3F3E3E1B5B78B98EFB4C5BFE0C4A092501ADCC02ADE2436AE656B9EFFCCE738DA5F49A8333AB3D058A5AD7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-linux-x64.tar.gz\",\n            \"hash\": \"2360E6EC9220B355A6D323D09CBBDC05EF6D84185570AC99CBA92E933BD4D4967468ED38C06D43A5839943DEE6552D6C63A0CF33C11BA1715D726FC7A2051125\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-osx-x64.pkg\",\n            \"hash\": \"2BB6E66366E3D0FC1C6B015B11C1E60022400BC03DE4023E3D23D1C1AF6881E6D7B410ABB395FB3653AE9D21E97616F81B8FDDF0EDFA188088AACC69F4C4AA10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-osx-x64.tar.gz\",\n            \"hash\": \"88BDDE064BB6D1EF84F53AB75B141BE408369F0523C24ADC6B06116F79EB358109577FFB43651637291077E9536D4593925CB3D370D1786DAE7999B5BF8B8E87\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-rhel.6-x64.tar.gz\",\n            \"hash\": \"0BF094E053D365843121A94C6D9DED12B2F5258AF664C5A49271E578D501C41DB3967F438F617B0F766E2D6268555A4DBDE9855CC899A70F86A0DD5CF3D1D756\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-win-x64.exe\",\n            \"hash\": \"4B9D1876924D95C5CA12717D5AFC5DFF1C6A2FDE92647B3D620F6FEBB3E2F0293DDBC16D6109988B103BB8BFAA9DF7F147DB766E12D87CBB6FE9747C1AB8A467\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-win-x64.zip\",\n            \"hash\": \"5D5B0DAD9817B1B81650F86B7DF0B5FF5EF14712DC78000DCE1DAC4FBC4CE45D1BC6CDB569FA883CE000AAEA643DCF5F66A6179A298C0A16E0A69F4632A0BDB8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-win-x86.exe\",\n            \"hash\": \"0FA3A256BB5E3E56CDFF0585EF7AD00109BCDCF46718F79CF291973DF935ADCC6DFD49DB84722EBEE8392B77841D718C25D7313ED2F12D407D9961421438D42F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.7/dotnet-runtime-2.1.7-win-x86.zip\",\n            \"hash\": \"0FE43391296B2D47DCA3A5851CA1E950BC76B69E41EB61237F39BCCDF5D80746581B59BF9C11380F946E091FD04CBA72959CC821853B9C058DB698E461F05956\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.503\",\n        \"version-display\": \"2.1.503\",\n        \"runtime-version\": \"2.1.7\",\n        \"vs-version\": \"15.9\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-linux-arm.tar.gz\",\n            \"hash\": \"8A97790CDAE1AA43DD214E78483FD2201268EB7BC61718832DE766BD41741A6A04A33C5A612F4046BB315D2ADF5DAFAA9D62A6A96DED5AF38C002B7C4E682A15\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-linux-arm64.tar.gz\",\n            \"hash\": \"2BC765B3C7D5C2FA1BF898469694A8DBFC1F4767C95EBCD42A29D76E9068CDC4DDA4B015BBE69B1D9B02B9D3741433E8547AB0E0D2C1AAF216926B72AE65AAFA\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-linux-musl-x64.tar.gz\",\n            \"hash\": \"AF45E870B4676A1F755F5F50524A1D2852FAF418DF759986F64CDAAAA31FFF5A6A9CBEA7F791231FEB0E90B3C1A93A962D433B33DE056552ED12BD9766FDF8C2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-linux-x64.tar.gz\",\n            \"hash\": \"6ACCDF7A4E09B7D6B93D4DF8484191DF1290107CF396BFA85B3DD4A75596E50836143DD7CD10D0239244751A8704C2E4586F21D59361ECF527EF2CD4BC15225C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3df363d4-1824-4b18-8adb-f1c823d617e5/7d8f6c5e91c57e787dfd4a0a15926ee7/dotnet-sdk-2.1.503-osx-gs-x64.pkg\",\n            \"hash\": \"DDE5BDAF7ED1202356819D73B061FE0FADA7A7EB67B35CAD3D53C24685D75251EC952351DBA2C340E369BBBA4A3F32C3E17B815F74DC52BE62440ADE655DDFC4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-osx-x64.pkg\",\n            \"hash\": \"DDE5BDAF7ED1202356819D73B061FE0FADA7A7EB67B35CAD3D53C24685D75251EC952351DBA2C340E369BBBA4A3F32C3E17B815F74DC52BE62440ADE655DDFC4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-osx-x64.tar.gz\",\n            \"hash\": \"69C494ED2D269AFB62E8AC394C71367B255AFBB31672FB7C66219F44D66EB0016AB3EE9E3F606AFAAED4BC270E10A11CD6CE92D73E2DFE20EA01CEC85A2CFD60\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-rhel.6-x64.tar.gz\",\n            \"hash\": \"006D6BCE4E9DF812E00B03744EE226107625ACB46EA33ADEC3A7F0D3815415E035A66CF6C54535E681020D81606407415B97E474528D4166F8E045129590508B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/103926f9-90cc-426e-a311-66920abf7916/b7dbee8e5f5b7c47c9164e741abf8a05/dotnet-sdk-2.1.503-win-gs-x64.exe\",\n            \"hash\": \"338FE1D8552D871A4D0716C3E3C044826E723466CD8565E22863D1976E32B7334C8E299FE04597C7CD323066A1150041A7C97BD29EC88FF836B3339E16AF55BC\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a813dbe7-085a-452e-a90f-ba8e70fb97e0/f9825e7db3472514d56dc760452c6811/dotnet-sdk-2.1.503-win-gs-x86.exe\",\n            \"hash\": \"23413111EC00574526A92EC16FBC6EB1BD048A1E4876E3B10B83270350996575BC1C42E378CE3A6F1A9D8E3EA1387AE04E9A276472AEC5B05A14B84F55B73798\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-win-x64.exe\",\n            \"hash\": \"338FE1D8552D871A4D0716C3E3C044826E723466CD8565E22863D1976E32B7334C8E299FE04597C7CD323066A1150041A7C97BD29EC88FF836B3339E16AF55BC\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-win-x64.zip\",\n            \"hash\": \"29E44A4D6BD81ACE5F7F5B5BE946E7FC81325F4563D375D6809150BFC0552C70E07467770C8C6B44127B5B1C01D93CA14E1C98BA527313DC093DB8942358760C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-win-x86.exe\",\n            \"hash\": \"23413111EC00574526A92EC16FBC6EB1BD048A1E4876E3B10B83270350996575BC1C42E378CE3A6F1A9D8E3EA1387AE04E9A276472AEC5B05A14B84F55B73798\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.503/dotnet-sdk-2.1.503-win-x86.zip\",\n            \"hash\": \"48C6ADC531EA387D5F952AB3154FC752F8754636B2960A3FFB656F226C3F8AE796E7AC474D54BE7A8F0BBA5330F847ABA7E3D1E2CD63F04C99CE13B564FF2C14\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.7\",\n        \"version-display\": \"2.1.7\",\n        \"version-aspnetcoremodule\": [\n          \"12.1.18263.2\"\n        ],\n        \"vs-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.7/aspnetcore-runtime-2.1.7-linux-arm.tar.gz\",\n            \"hash\": \"AF63EA3041938040CCF97DA7839B6E4BD4F12D582BDF6F336F49179FAA64AD32DFCB6352BC65902EDD1B21FCDF703F99089C5FE118FA35F9074CA5296ABD814D\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.7/aspnetcore-runtime-2.1.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"08320FD139768557FE962C06C0316DF8D30312D35A354F5D4DD6DC98C5093BDA7B0FACD694BD7406F3C6543D383296F7CBA7D759367EE4CFDBC8AC98062CD289\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.7/aspnetcore-runtime-2.1.7-linux-x64.tar.gz\",\n            \"hash\": \"FEEF7CF9E296011B799B196F3F7CEC93E685E5E1B981238064D934BC003EEBC75A10567DB3AF02384C68000CE1D0A64F769928F6B91392934ACDACB008C238AD\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.7/aspnetcore-runtime-2.1.7-osx-x64.tar.gz\",\n            \"hash\": \"9935680C9A8E0E08FCB5824522A51D14BB8CA3FCFBF375852CDA47B68E14A14318459E701F8B1730E92AA0FF48683C3E4DC22E9A5F88F0C0F3360B6CE7F3CA27\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.7/aspnetcore-runtime-2.1.7-win-x64.exe\",\n            \"hash\": \"4EBD8A5F4CF5526BE8242D04F0D7893F00F34530A7A031E239F68ED8E77692D2E4A99DF6390846DF725FCAE0F1EDD2B590177056784B19549DF80E55D3A4BAF0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.7/aspnetcore-runtime-2.1.7-win-x64.zip\",\n            \"hash\": \"89599D964F99216F990E9A23531BEBBB56615553663C709BD28B85E8EAF8BF8D926E59C80868E3DE55413464C874AA3BA093CE08FBEF1556315E38BBEB89AAA5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.7/aspnetcore-runtime-2.1.7-win-x86.exe\",\n            \"hash\": \"0F72F1BA7CDF9E2D5B21C13C3C785396CA7EAE39914819405E0EB04D7EF7B8C4B348A47A3CB7D0BDA688BDB543CC56C6D16AFB9C40CDDD50154BB1544992353C\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.7/aspnetcore-runtime-2.1.7-win-x86.zip\",\n            \"hash\": \"428CDCE6C04B490C1BFA7237C21CDC2CBA171512A13DCC3AA3A9324DE553DC5E064D5660E57DFAB1F0F5CD65C515964E8D36C250EAB79B7BD2C9D94949C1D52F\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.7/dotnet-hosting-2.1.7-win.exe\",\n            \"hash\": \"829A00B36C8F4C01C6AF7EE6D653CDFFB29C9C25553F590F0B8B505403AC4EFF1565C175FB891C04EA310AF03B03D8FF9ADD45E65976143CB6CA508B20AAB245\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.7\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/26f3234d-4e72-4cba-a27b-e615595c15dc/2e83ee0f9b7e7a62dc212ef766bc5013/aspnet-2.1.7-symbols.zip\",\n            \"hash\": \"8CEE9AB1AE9FF23A060649396C3D986A34AA49FDF922027665ACB09A7A30CFEA81D9C0B10452C46EF772358D6DFA20E1AB369A77B652217B9F4CC887C20CE1B8\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b076d7e5-00d4-40dd-843a-b2747aa08fd9/84a4d47dd0af397ec1c53efe5037cef8/cli-2.1.7-symbols.zip\",\n            \"hash\": \"D3BCD69000A3703648635D3F96D9EA7E80FE691DC0870714586C812DFE265AA3D7A94A82BB28FEF4C3700CA24EEFF042F9F7C87F0443E68F772AFE614E6C9634\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fb2d63cc-c6a9-4412-b563-5e9851815f6f/7faf1cfaf0952c6fd9fb4beb42891049/core-setup-2.1.7-symbols.zip\",\n            \"hash\": \"D7BD2173806C6C14881B23AA9014AFAE95DCBB5906EAC3D9BF747415603CA52C347131AD99B077C024F49A94B7ADB26543A4822DF1D7FFFE99A927F5752E8676\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ea9824bb-3641-457b-a9aa-2be66ac35de7/0c21dc003021c6e38cd74c41e7be1302/coreclr-2.1.7-symbols.zip\",\n            \"hash\": \"BCEFA48CCB9F5AC513DA7F27F2AC7C4B6A89B88BD5D10FEE074B7A90A91B2AA85BD3BF8B04A38B4D3C8F7B9C6F450BF0D98E7FFE760D31BF80025732E645FF70\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6ea20771-8d4f-4569-9f91-a2d583391d64/58e1b0d948db6dc17179b57c385e18f0/corefx-2.1.7-symbols.zip\",\n            \"hash\": \"AF303D2155E3BC9A7F54C374C143879B8A61F4D84503D6DE6CC2BB4F467F4697AFA993542099F1D39E3BB113F6B2907B50886B36685536D1C33F7585D8A4BC8E\"\n          },\n          {\n            \"name\": \"sdk-symbols-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3b209b8e-4f72-4546-bc8a-5f037fe9c9a6/1e0a12163015993db5fbc22b69303d8a/sdk-symbols-2.1.7-symbols.zip\",\n            \"hash\": \"4012836E70053CCDCB7B1879C4E1C29A64DEC80076174FA7915CF39C9C653C775F7AF87CD51DDE9400B17CB9475DD607A7E5D5880E98E55B8E09FC206D0E423E\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-12-11\",\n      \"release-version\": \"2.1.502\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.502-SDK/2.1.502.md\",\n      \"sdk\": {\n        \"version\": \"2.1.502\",\n        \"version-display\": \"2.1.502\",\n        \"runtime-version\": \"2.1.6\",\n        \"vs-version\": \"15.9\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-linux-arm.tar.gz\",\n            \"hash\": \"F5A9BF61C81E0BC5A33367F63320C792680E80DEDE884C604531715BFB741F4B0F53779BA57ED8E0A2AD3546358A42F531FB28952725E17F8CB5CA3A4B66AC60\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-linux-arm64.tar.gz\",\n            \"hash\": \"F3D8907623B1BD7D15E2D9B9F51B8BDA6DF00969F720E7D224E9B3B5DFFE9FA1B2A9269CFE3AD6AA8FAC81129DDD94D88F8674839B9D41A41BAC4E3630306D63\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-linux-musl-x64.tar.gz\",\n            \"hash\": \"5C06A416ECFD04AC58AB104BB2D173246D41AA2AC1F6DCF1B141C0D825638E9BDE9B378AAA73F08BEEA6EFA68C8B8E206B5B33F43AC40B119C7E6AF7CFBA9AB8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-linux-x64.tar.gz\",\n            \"hash\": \"366609243FCAE4693218154A3F374822B5CEB77B7E1A3561DD0CC89755131FCAEC04777E99AC041554D452B4862D2856926A1C213029FC80C7292959CAF3AAF6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/06addaf0-590c-4418-9cf4-83f63376ed16/d6e57f0ef630fb767a8ac8cde58e4a6e/dotnet-sdk-2.1.502-osx-gs-x64.pkg\",\n            \"hash\": \"4A006A5D02C0BE76DDFC4FC89E93C620AE396B407BDA0C2BB034711AA6E473CB60AE2CA943EDE656F3DC3D7262D2AFA222FF94F9A28F5DE69FB14C24A469881F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-osx-x64.pkg\",\n            \"hash\": \"4A006A5D02C0BE76DDFC4FC89E93C620AE396B407BDA0C2BB034711AA6E473CB60AE2CA943EDE656F3DC3D7262D2AFA222FF94F9A28F5DE69FB14C24A469881F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-osx-x64.tar.gz\",\n            \"hash\": \"79302509DDFDBCD6B1C870FE79884EAE919072AE94C20F89ABB2E056770A77F76544E1160E633F6EB81FC346564D85993329A5A4EDE3C12D28A11D2D031A1130\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-rhel.6-x64.tar.gz\",\n            \"hash\": \"C5A9D86306EB7A19A58D60D60E14A77058D57F9EA6A1D2DB52B9107834E62B04B721ED34E16194F5F7C99CD81724241280C87B7855D68ABD7AA9997B6C153089\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f86f7cf7-9c38-4b97-aeea-713ead74902d/d381b15374c3dc9e1759e2f7c19231c3/dotnet-sdk-2.1.502-win-gs-x64.exe\",\n            \"hash\": \"20E5D2E54CCAD8CE2C5EED0EFFCBA5D610C8BF1D15F8D2EE2E792547B35697EA408A415D2F580E0E2F693339E5E10F0A46B82B88171016378AFBBA4BF4A55227\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bef7de68-66c5-4102-9c7a-2087ae2d9e06/a1f1c1afd190d8aae7a2fc0803b470ee/dotnet-sdk-2.1.502-win-gs-x86.exe\",\n            \"hash\": \"F4969D01F05ECA28B545B335E221DA6DA07A3B087A4B91BE0153494ECD483DB943178BBFB8EA1C8D032C07F0C1F50F801CCEF1542F3B09016E760E0D1CE8B277\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-win-x64.exe\",\n            \"hash\": \"20E5D2E54CCAD8CE2C5EED0EFFCBA5D610C8BF1D15F8D2EE2E792547B35697EA408A415D2F580E0E2F693339E5E10F0A46B82B88171016378AFBBA4BF4A55227\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-win-x64.zip\",\n            \"hash\": \"E6408DCE29660B36EBF5318F9B9108FCD2672FD0B14B999847C6173E0FDA7F553DB40718DBE1FE2900147E2090930DDD35E3B6CEF3EF47B3749ADC62CD274A9D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-win-x86.exe\",\n            \"hash\": \"F4969D01F05ECA28B545B335E221DA6DA07A3B087A4B91BE0153494ECD483DB943178BBFB8EA1C8D032C07F0C1F50F801CCEF1542F3B09016E760E0D1CE8B277\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.502/dotnet-sdk-2.1.502-win-x86.zip\",\n            \"hash\": \"CDE212A2292093103F79ED104283E2EC0159CA38C9A9EE9048A61A6CE3951C421D4D8BD62C16A5B7B637DDCD8F5B40BB87AE6195CAE9589BA8A768AC17F4A6C3\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.6\",\n        \"files\": [\n          {\n            \"name\": \"sdk-symbols-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/319e69e5-3a4a-47a9-a454-b4e17380e5da/6af8d9c315d8f24e95e6d4c9a28cfd3d/sdk-symbols-2.1.502-symbols.zip\",\n            \"hash\": \"3AEE6A4B827400C0B4264591BEAFAECA0936D0E7229D50CD436C78B63CC408555AACC59A0060063730D59E6514309B12769C1DDFFE0FDC36768B5BDABB16858C\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-12-06\",\n      \"release-version\": \"2.1.600-preview\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/Preview/2.1.600-preview.md\",\n      \"sdk\": {\n        \"version\": \"2.1.600-preview-009426\",\n        \"version-display\": \"2.1.600-preview\",\n        \"runtime-version\": \"2.1.6\",\n        \"vs-version\": \"16.0-preview-1\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-linux-arm.tar.gz\",\n            \"hash\": \"865FCF406BAE3E39A7EB2277FAF3C96F1AF7800F1AF3096F768558F52F901CCD23203641807942951B84BF324F2F7F05D9074D0D7702B61EE1BC1BF590499BD7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-linux-arm64.tar.gz\",\n            \"hash\": \"9641CE375F63B42F49E472456146B0155FE3A714375DEE36939EA94A12E51E7C6A27A26469ED90581AE6C46E2AEB6C5526C11D23647FB9F3908127BBAD11B958\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-linux-x64.tar.gz\",\n            \"hash\": \"2DDDDC2652032DE14DEBDBF55D6940AA227F8FD37199D098F0AE23645732A77B850A02444084D4FBCF4BDFDCEF89A2964E47FF210179D89816970F9B7BC391CD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-linux-musl-x64.tar.gz\",\n            \"hash\": \"F43E826845065FC877659614FCDE3C0F9E588C636E5284EBE72FA48A8F52EAAE56FCD99AD18A2C77145CEB761F88A6EEF9AF1C48C3AC3ECDB539BF189938279D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1690aa3e-6039-493c-a57e-9d24f2616e96/d56658e8c3886d6d69d58e6c83ab5c22/dotnet-sdk-2.1.600-preview-009426-osx-gs-x64.pkg\",\n            \"hash\": \"FF77BF94390B4CE0A0B3237F3B5A854FD2527C694F519E5D74DEA9217A888644A3F202E63A9F5E4AAF497A2617EC59B1B840655B5592EC7617BC3DF9439D7176\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-osx-x64.pkg\",\n            \"hash\": \"FF77BF94390B4CE0A0B3237F3B5A854FD2527C694F519E5D74DEA9217A888644A3F202E63A9F5E4AAF497A2617EC59B1B840655B5592EC7617BC3DF9439D7176\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-osx-x64.tar.gz\",\n            \"hash\": \"3ADE09CAEA4FB32CC4CD380A3043F59602B6D9D3721144ED1A975082767FE5C354FE480CDF2CDB8CFF968101F3876F37B55651B09DAC36BDB47741A83664D5B3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-rhel.6-x64.tar.gz\",\n            \"hash\": \"24C526293BA5A8A1F0B200AF8E6412BF49E96C3C6008E9C472C3AA6A581D6B785CE78551B9CC2C8343B3BAC358CD2680905330ABCD92A5715D476F8CDC4ABD02\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/31a8cd43-a31d-4d33-b6f4-0f430543c9b5/e88b8ff32ae2f40c88c7828cb8ab589e/dotnet-sdk-2.1.600-preview-009426-win-gs-x64.exe\",\n            \"hash\": \"FDADAF2CB923431993C02ED3F6A8C6336357F444B4123FA8C92B9C706C84A977E32EFEB0FCBF333854A07A3FAC2C088CDB569EC763D6DBDBCEE44E41E6C662F3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e8fa06be-54bd-4a15-bda6-6876b688abcd/be8609cfb001a1c94bfffd7af310ba14/dotnet-sdk-2.1.600-preview-009426-win-gs-x86.exe\",\n            \"hash\": \"B77812812B33F53606A947184438D6D0A41D4EBFF38E2E9E68DB3FD0460EFD3A066B6A0F37E9E0F8BE31FE39C8AB5DC3A2CB6255A0DFEA648679B93FDA2DDA1C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-win-x64.exe\",\n            \"hash\": \"FDADAF2CB923431993C02ED3F6A8C6336357F444B4123FA8C92B9C706C84A977E32EFEB0FCBF333854A07A3FAC2C088CDB569EC763D6DBDBCEE44E41E6C662F3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-win-x64.zip\",\n            \"hash\": \"46B0609F69ADFB6FB1B714C402C312E9E10D372BC50F3B7DC4670C25509DB2FF1EB47235006AA21D9B2BC49B92B9959E45BA1C70F5071A7C1EF9717C1FA5C922\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-win-x86.exe\",\n            \"hash\": \"B77812812B33F53606A947184438D6D0A41D4EBFF38E2E9E68DB3FD0460EFD3A066B6A0F37E9E0F8BE31FE39C8AB5DC3A2CB6255A0DFEA648679B93FDA2DDA1C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.600-preview-009426/dotnet-sdk-2.1.600-preview-009426-win-x86.zip\",\n            \"hash\": \"B736C393A6A2AB062FB5C41E8FA633628051A4D221E7AEA64E5F0008C12B040E911BFD112DBF085D0A2817F1137D20FC1FABEB6F0A91FCEABBA1A5E6D9DF0172\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-11-13\",\n      \"release-version\": \"2.1.6\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.6/2.1.6.md\",\n      \"runtime\": {\n        \"version\": \"2.1.6\",\n        \"version-display\": \"2.1.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-linux-arm.tar.gz\",\n            \"hash\": \"4F44CD5F6B61D0A4B7E73B138FDF5EDCAA9E148BF0473514551F4D03D97C29F297662C726D145ECDF80CB58A086F925F97B7896C796CB3D82FE927F5CAF7BBCC\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-linux-arm64.tar.gz\",\n            \"hash\": \"C3CAF2E270C2EFF9B84A16335C0A81681D43A95BCB08C444F4AD04B4AC78FE19D49BFE4BB57E4DED9B965F300534130CB91377E9A7B6252E312924D6378DB807\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"8A0900B7DC010AA2293C5926D13A05F0A2DE1F13EAC6A1EAA3C9997A8EC6363D83C852763B118B3DDB6586F95F34263CF27E769B4637BB4BD196BF73AA62269E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-linux-x64.tar.gz\",\n            \"hash\": \"74D99AEFCBE953B30743330689E750156E68C3410BC26C40A11B60BBBF1D01887262BD6D7C0EEACCA4D6B696C1A04980D9BE2DC2A222226FA910B885D2FB5956\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-osx-x64.pkg\",\n            \"hash\": \"605B81BBE71423FCD3C2A3F1548CCCA04DDCDE08566B0301AC43130C239406EF621D174064272F04C5584900CE1F3F2B4D93E1D3B8277F07150404EB3A492992\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-osx-x64.tar.gz\",\n            \"hash\": \"595578F419094175E9A0ECEA4D0C8FD86682C5962DDA98B68403C4EC0760FB5EE7C922BB9E15100894A2E05AC16D458D22E814CA32B5BB0790F0E51A2F563643\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-rhel.6-x64.tar.gz\",\n            \"hash\": \"1367020B7808793C466692025466FBF08CCBC5C18D0A2DE4944FC3C53482FC30C699753581B12B387113AF1CACA505CAA1D1FDC1DB6985666CF0C718A081D8D6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-win-x64.exe\",\n            \"hash\": \"603F397C1F5C37571F24A56AD4B22DF442AC98B86085CCF96E38077F7940700CC43678458030E626F49C7B6A027A5BA90FA5BAC03013C2223EC9E91FBDA4ED34\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-win-x64.zip\",\n            \"hash\": \"F716C90B0A4512F3611A9D6D922FF1F7B5BF306440283798E17B893920D390DF15C503F5808EE34BEB3CE6355308C6BB3435F06CDAFDE60BE31397C2633CC270\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-win-x86.exe\",\n            \"hash\": \"7BB07641D47BFC293F61BFD18F6F960C21F5590D7E52DBCB6BD95AEFF8D037DC1EC222A9067D2B7BFA3DBDB01EEBF843DF815400654D1E724D3BD71190FD9996\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.6/dotnet-runtime-2.1.6-win-x86.zip\",\n            \"hash\": \"193C7F357F953D0B19012EF63ECCAD42CF69F5BA6DF12B132C0618C152EDE5F385CD7312CDB3D95841F9BB1705D1E4E50B0214776A111F38D50666DE52F545A2\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.500\",\n        \"version-display\": \"2.1.500\",\n        \"runtime-version\": \"2.1.6\",\n        \"vs-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-linux-arm.tar.gz\",\n            \"hash\": \"106D3E5B7B96CA3522E78B77F094CECAAC38C348D7138C2FCAE0464FF9D57EC137802603C4A5C6F81B9EAE9DE39B86BFF8D9FC573817E033982EB576532E334C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-linux-arm64.tar.gz\",\n            \"hash\": \"E5C3BBD610A38BE1F74E4851EE5B701052103EDDF9A804AEAB276048A06E812278E726E7718C5955A1159C41CFE98B8E2700F8BEF1577C30B242D7AE1A8212E1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-linux-musl-x64.tar.gz\",\n            \"hash\": \"AF061F17D88E4371FE523B895B60A0259296E2CC2BD9854A04541B87038638E0A7B7053288B45BC00A89FBB04DBDB7218A76EA9DFED8919457E758C532C15E9F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-linux-x64.tar.gz\",\n            \"hash\": \"85055728E2433DFDE41D15C85475F2DC6CFDD30242B4B23065B63CB12CC846ACB93C09C000B02B722890CEAC8AC382B40871C78660716CA2339C71052FE52F4E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-osx-gs-x64.pkg\",\n            \"hash\": \"07DC690149914252EA88D16D0862685F213405E375E5C49162420B3BE4B8FF0AB562B7DF12C800A77DABF0574CB57D4D6DE0EB961696F7410A4563B88CB49E7C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-osx-x64.pkg\",\n            \"hash\": \"07DC690149914252EA88D16D0862685F213405E375E5C49162420B3BE4B8FF0AB562B7DF12C800A77DABF0574CB57D4D6DE0EB961696F7410A4563B88CB49E7C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-osx-x64.tar.gz\",\n            \"hash\": \"E87FD0EA816C1875A896CB284F762F22D2AC7A23C84F4D10F5299EA54E8ADD9D4E782656F53726627D615F98D2E6C288AD634B75F80D6F815EDF8B35F484C817\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-rhel.6-x64.tar.gz\",\n            \"hash\": \"323A727C1112A167E87C3C3510496C07DB10B36757736F8510150EA200B45FEC02913CA81518115205C526B075BE25A2DCF45C63C23B5B1C3BB759D36D18D17B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9b60a25e-5b31-4550-aae1-72516c1067f6/52e8387487fecef06266a7a19c97ddee/dotnet-sdk-2.1.500-win-gs-x64.exe\",\n            \"hash\": \"A6EB777DF0F8581872EF34D9363EA0148A95314546507B879B648CA8AA051791DA59377CA3F1786F18D2831823F2A2A9B6D275C96572F0917C88FBEB18272C32\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/246c196e-2934-4571-bf21-b988a0f57e90/11329123100c557261e585a9871c2398/dotnet-sdk-2.1.500-win-gs-x86.exe\",\n            \"hash\": \"E34065EA573598F4098A9D57A05243FB9EE58C7A8AA08A81E7F6248372BF850F4A69CD2558FE1BE98B267491FBAC5022657E67625595795F9FB9AB5BBF6F8B14\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-win-x64.exe\",\n            \"hash\": \"A6EB777DF0F8581872EF34D9363EA0148A95314546507B879B648CA8AA051791DA59377CA3F1786F18D2831823F2A2A9B6D275C96572F0917C88FBEB18272C32\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-win-x64.zip\",\n            \"hash\": \"C8A398773A517B7D36BC29895FC1C4B6B0D47CFDBED04D115FC75E8D0A4B7542B67C9125F701EC1C53038E846848F3C77CACAE2B61986E66164CFCA05005CA08\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-win-x86.exe\",\n            \"hash\": \"E34065EA573598F4098A9D57A05243FB9EE58C7A8AA08A81E7F6248372BF850F4A69CD2558FE1BE98B267491FBAC5022657E67625595795F9FB9AB5BBF6F8B14\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.500/dotnet-sdk-2.1.500-win-x86.zip\",\n            \"hash\": \"5143FA77EC0BA779CFDED5E1FE27C9E4A4081F0F67FB69F7E73746A907EC1554D91347BC4D747A4B79B45A5B18E7D3438CF8A7EDDEB3C094C15E70A197FEA8EE\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.6\",\n        \"version-display\": \"2.1.6\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.18248.0\",\n          \"8.2.1991.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.6/aspnetcore-runtime-2.1.6-linux-arm.tar.gz\",\n            \"hash\": \"2312BA29EBCB3CA2E473C90727563E04C89CD771BCB68BE76ED8BCB1D196E7D5B9A886177481837AE397142497CC2947A19372FE0DA23F0ADA0B3C1AD4FD0218\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.6/aspnetcore-runtime-2.1.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"F909A6B70D105588C0D4C684E88C1EB2B83001BA55B9BFB0932807953EA9756C5539D3B9BD11666CB07CC68ED362F3786C8F6A0FF91DA072E4B67CD8B5ABC16A\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.6/aspnetcore-runtime-2.1.6-linux-x64.tar.gz\",\n            \"hash\": \"4D6416C7C078047ABE3493FDD7BEBE0A796BDB2AAEFAD302FB6A64DD225C871A1183F016F0974C6DCD82F80AE893660B2AEAC2ABB70509435845A430E0117E29\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.6/aspnetcore-runtime-2.1.6-osx-x64.tar.gz\",\n            \"hash\": \"4DC06D8A145BBC78641FABEB699691F05E01A3DBB199F0AC1BD297C5CA57E91A65CB4F77971DA0528563D649988C5DD97A913B11760C0904403E317EF0442564\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.6/aspnetcore-runtime-2.1.6-win-x64.exe\",\n            \"hash\": \"D52A47BBDF9FDEB2172A04ABFB3E09E318950F512136E020F40845A3604A93DA1B344603204EE9092936CBB76B32150F8A25A9B5DD4786520A3C7460207BCD97\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.6/aspnetcore-runtime-2.1.6-win-x64.zip\",\n            \"hash\": \"333C7EADBD5E5202DB706696ED682298C4FC66551AD87A9C374A28CD459AA8C6A47952434BC642E1191B0F10E09520B9A34E6BE19C5387AEEC1FF19C2001EC32\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.6/aspnetcore-runtime-2.1.6-win-x86.exe\",\n            \"hash\": \"3C23C66D9F9FD65EF8CD4E5779B8E9E1301519578084CF14E35CC366AA1B66C039459E2480AFC855428B1CE23DDC38A5DED8699A37B1237C18B700D0B6657792\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.6/aspnetcore-runtime-2.1.6-win-x86.zip\",\n            \"hash\": \"5D84CF72F6A500E276D3D8C10E138BC180EDA50F29603C3CA0DAF8B4F686B6EE0EAAA8B1A928790DFEBDDAF0EA2E863DD95F86A566A5C98346953C848641CE23\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.6/dotnet-hosting-2.1.6-win.exe\",\n            \"hash\": \"E4F36F3DF427CBB59749B7BD993934229D6D6E985786DFE3F92E77F6F5F10209F57E450AE74B5ACD70C5CE2067C881C1DDAEBEF5164D009E15C648CDC1A7B51E\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.6\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-2.1.6-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d77ca6f6-fa77-4eb8-82f9-9e8be43e4acd/830ad12af9a632ff05a70e2530a3c564/aspnet-2.1.6-symbols.zip\",\n            \"hash\": \"605c894697d96b1e72edf056c874a9eb6a471eb96865275d34404b55484e264467b34d9dac4b748e3e8f3caeac528c207759ee9ef265fcd350af079a91465451\"\n          },\n          {\n            \"name\": \"cli-2.1.500.symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bbff4d72-ae50-42c7-9a5e-e3f24448be01/604a59b419eddbbd6a4148b5bf90a89e/cli-2.1.500.symbols.zip\",\n            \"hash\": \"0d325c0473f5ce4e6f6b60b2f771b66139e2302aeef22f40f2503d18cc3cd309bdafe1fa319798ec149e50947b5585d22c4454332d2c20208d45d262aaaa0861\"\n          },\n          {\n            \"name\": \"cli-2.1.6-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/31972dfb-b0fd-4e01-9d2b-5008321dbf68/f198c9f2aa57f8c7e141d95a6c6b098d/cli-2.1.6-symbols.zip\",\n            \"hash\": \"2e552add81cfc61709e043f22158b1714ecb4a28506d61851b868c30b9c24e4acf0b173c2b6fb935cca49302a5aa7cde37bf9ae10f097869e46e970a1c98792f\"\n          },\n          {\n            \"name\": \"core-setup-2.1.6-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/04ddc39e-1db1-472f-a7a6-4a51d73cc75c/3d0f620127304ddfa981bdc9dbc6aee9/core-setup-2.1.6-symbols.zip\",\n            \"hash\": \"4b3dfd92de61ad1a909380128f88c1e12c40cfda9121b57259b04f62f7ef6410c0fe99194b7e8c6b5f88bd9c1100e76728f1032826546675f8183b86d6a03a6c\"\n          },\n          {\n            \"name\": \"coreclr-2.1.6-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/459e604d-efc0-4e1a-838b-e311c890bdaa/bc02969da98047faf9b4d1dc1c70b349/coreclr-2.1.6-symbols.zip\",\n            \"hash\": \"77d494554e80e893c78c17385a45debd18b9cb6a8291e4744efabf1f9ac032842e71e90241d569884122b3633b4994273f6b68484fc47b25348a9e30f03a9ec0\"\n          },\n          {\n            \"name\": \"corefx-2.1.6-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/dc20e757-f7ca-4683-900b-3d0a94134c0d/1743c2e0e4952e9a5ddf2d1c8934af95/corefx-2.1.6-symbols.zip\",\n            \"hash\": \"ac621eb41eb81ab6cc9327ea78ef296c71760739ef1f36c25d2a1b8cb92e3e55966de31ed4cdf77817bc23f35242d436dc9c61b49edf710b035e7143fd4319f5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-2.1.6-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/05930291-d788-4c74-8727-67a8dc91bd10/abef49e4ac04610e9c3ff1317a5b4140/dotnet-sdk-2.1.6-symbols.zip\",\n            \"hash\": \"1c98fc7290bdc5cc31cd02f3a6150ca92df3ab18cb15f1a3238124401307076096aa8b45a738a5374d473a31a23185e6be31c3399f36f7cfeedafa730b44617b\"\n          },\n          {\n            \"name\": \"sdk-symbols-2.1.6-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b8907954-0bb6-484b-a1ee-1beba64843e0/490b81242561a2b9b3f14bb3be467611/sdk-symbols-2.1.6-symbols.zip\",\n            \"hash\": \"89dce1499fc54c35160a357b6d3d5c116c19bdbc2a4510fc7b05cc2cba046695de983ac29bd2fc66da3c5464d6eb369acb2a1fb1bbc4662c1286d9a0e5c410ef\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-10-02\",\n      \"release-version\": \"2.1.5\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.5/2.1.5.md\",\n      \"runtime\": {\n        \"version\": \"2.1.5\",\n        \"version-display\": \"2.1.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-linux-arm.tar.gz\",\n            \"hash\": \"89a77a07065ea24e7198c77a233b9ce5c6cf51b1deb2ef55c88f0adbb2ecd9db1ba4e7d55eec2ef7139c47f91346fed360161a5bb6e3a7ccfc4559bcde286364\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"6823778d6ae0a57a9782d1fa460fcea2c7df99c719d14d4aef96e4cbc48406936090e2f727cbcb961f6e645ea960374575e37db8f59907cfc5a588bb1044d840\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-linux-arm64.tar.gz\",\n            \"hash\": \"4c4d45f4bf0c86b83dd9dd1a844754c3cdc15e0c4b417a069132607e6e95b0e9d8ef410ebdd8b9f5479d91bd704dd098cc674a5f42fd6e67c62df75e1b3e96d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-linux-x64.tar.gz\",\n            \"hash\": \"d815c79fd868d2642898ddc09c890a90c4ab26ef8999046581d7e3912bb06ec97ce6637ce8bf0ceb9deb773daab1c0cd93e336992c885a4fd7550d6686d4dbf4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-osx-x64.pkg\",\n            \"hash\": \"a1835776f4873327229d68f641cf320e45f4857007875cc1ec25463a266ef7be3f520e68acfa1d2e27d1f69a6030667e36f9d9f2099d6e12a84784a5462af12e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-osx-x64.tar.gz\",\n            \"hash\": \"8d95f08a55e913aa5c885e42f126eacf479e6de3a59dcab6594d4e90d7dbdf36f03c4eb084a9bf4405a1e52db5b84be583f44ec4f02dbe4e58c3582329b0b50c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-rhel.6-x64.tar.gz\",\n            \"hash\": \"83ab74399d25a85fcb091bd63a3d620f5c5bf62700ec8f8fe5a63de8764f725ce25156a07e5da1e8f326360fefa625402de295e03e2d9e67cca5a2fb95b60c06\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-win-x64.exe\",\n            \"hash\": \"1fcd054b48b93a40e1b23903d00f0163382e19827c9dec297acd9fdb61f117c0c79fa86c1fe16989038db300274e4813a4a65ea0100a571e1085ce8a8ec6887a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-win-x64.zip\",\n            \"hash\": \"aa7145201f1ed0689ff6abeb53b9c64c1efa1420dee7e5cc916168fd2479e252ed56b2492221f4038edbc73056accd9d4a46ec469155f2bdf0fc71bd909bd220\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-win-x86.exe\",\n            \"hash\": \"88c7cdcced8dc22aec86cc7edf105ad96887f98e6d5d013459e5b8957a7c146489371480dea0fecc5cd89da5ff94cadee9b5cbadb748c54399a6035c456d4e3b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.5/dotnet-runtime-2.1.5-win-x86.zip\",\n            \"hash\": \"0765035c328e479681bbc8967ae1b8031bc16e6fe399fb74b93d517677cc8ecc852984f556f0bb41960bdb7620c67bd7ac95c66304699966aa6cd1cea80b3b9e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.403\",\n        \"version-display\": \"2.1.403\",\n        \"runtime-version\": \"2.1.5\",\n        \"vs-version\": \"15.8.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-linux-arm64.tar.gz\",\n            \"hash\": \"a9eeffeca6b80b2873c21c7b8bb06df096290cd5b23a6e1e0fb158b60f2c2af6ee4b2bfcfd96a303ebf33ea2cc782f3dee629d06d48b634dda05ae9e11051335\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-linux-arm.tar.gz\",\n            \"hash\": \"144f1a8822f57d3e9286ed80b7ee0c7796cb2765632dd99d0f89a276248c3be77d8d90c8bf987af0237e67f2af26be834c138441980d2c7d35156ee1bb7e3d94\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-linux-musl-x64.tar.gz\",\n            \"hash\": \"620f091eba8d111b13d440c20926f60919e64dd421c6cbf2696b6f3f643a3d654b7dc394e6e84b1c4bef6ff872c754a7317e9b94977cbcb93b5d0fdfe08d8b55\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-linux-x64.tar.gz\",\n            \"hash\": \"903a8a633aea9211ba36232a2decb3b34a59bb62bc145a0e7a90ca46dd37bb6c2da02bcbe2c50c17e08cdff8e48605c0f990786faf1f06be1ea4a4d373beb8a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-osx-x64.pkg\",\n            \"hash\": \"043F0E79F875EB5A47289E2D6F087927BA713C98B6BBDBC3828C49025D03CE1A210917F9519FF2671FA15A82EE2B544DDF272E4DE7C28B46DA436488C08C1CD1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-osx-gs-x64.pkg\",\n            \"hash\": \"043f0e79f875eb5a47289e2d6f087927ba713c98b6bbdbc3828c49025d03ce1a210917f9519ff2671fa15a82ee2b544ddf272e4de7c28b46da436488c08c1cd1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-osx-x64.tar.gz\",\n            \"hash\": \"b20dadf3654522710a2ee2768566fe48aee6c234d678c87fece3395523e09e5243389214cd4433f850615585e46f5e9d53a0c46b6a5192fe399054126537d818\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-rhel.6-x64.tar.gz\",\n            \"hash\": \"30faa188766bf2b628064fc0b90fe76ce9a2bc63c07acee1dd8f082af895cec536aa52af7f48892aad6579ec98354e432d7c6860713a9b976d84482c624f8b3f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-win-x64.exe\",\n            \"hash\": \"3630dc9c52ec6b08c0804da3fc9177d3d61f12f5629c65249f7bc75b34a24c4059812fc8e6cdef64dcc7c4030ad5952e998674ac1ef497f20e43b2ab4b53be90\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-win-gs-x64.exe\",\n            \"hash\": \"3630dc9c52ec6b08c0804da3fc9177d3d61f12f5629c65249f7bc75b34a24c4059812fc8e6cdef64dcc7c4030ad5952e998674ac1ef497f20e43b2ab4b53be90\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-win-x64.zip\",\n            \"hash\": \"52bb1117f170587eaceec1f78cdc41a41d4272154b5535bf61c86bfb75287323cac248434b05eabe4bc7716facabdb0f6475015cbb63f38d91af662618a06720\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-win-gs-x86.exe\",\n            \"hash\": \"c35be7071348b2812ee3694276b0bf7b9289f9176896b6d27ef0ab8d6c3f499e2678856d50b782a171c819e1837de070a4d9cb6897e05be86ed57cb97feda686\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-win-x86.exe\",\n            \"hash\": \"c35be7071348b2812ee3694276b0bf7b9289f9176896b6d27ef0ab8d6c3f499e2678856d50b782a171c819e1837de070a4d9cb6897e05be86ed57cb97feda686\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.403/dotnet-sdk-2.1.403-win-x86.zip\",\n            \"hash\": \"f3292cddad3cc2921ac532367568086a778340dd76a00825119f9e634958173d6688d3d3e93a9f4a0b091cae989f5d0213ed0ea4ba818f90efc901a86093c2fc\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.5\",\n        \"version-display\": \"2.1.5\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.18248.0\",\n          \"8.2.1991.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.5/aspnetcore-runtime-2.1.5-linux-arm.tar.gz\",\n            \"hash\": \"5d503f7181c59d95ddc7d537dbc4b26fb6d5b6bea25b0a29154906fa422e7014e80e0a8ee92c6f81484d169a17b3e8284d455e3e05d85cefe736190e769b7355\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.5/aspnetcore-runtime-2.1.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"5d87fb86e4e70bf0769d081a0b0c4388348bcefe61559242af17a9604bbdb3269e4ab47c420105ab6a2236431978adede9406d3ff0845602a398bb81f4ecf6f7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.5/aspnetcore-runtime-2.1.5-linux-x64.tar.gz\",\n            \"hash\": \"3326963ba0a431ca430d8f1a7940487e516952ec560da563f03662b71b2ac8b5d9904b0e1422212e452b49f563349d10fea34241f4d5e4811d0aedc02c557029\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.5/aspnetcore-runtime-2.1.5-osx-x64.tar.gz\",\n            \"hash\": \"a5f9ee4a89a50dd0dddb4b0bc089e0385cd8d11d667253f8bf3fb1722308a3189512022472394251c5f640332b843798a8f5a0c129b9d78094349130ffb93aac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.5/aspnetcore-runtime-2.1.5-win-x64.exe\",\n            \"hash\": \"ebb8f2b239155c9314c39b77ed6a89fb1954109d31d030783ee59427f7c6d6bf7af04037b9e57f82e60799292f507e003c8a76278036ddbae096a7f9baf03fd6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.5/aspnetcore-runtime-2.1.5-win-x64.zip\",\n            \"hash\": \"98224c8646b7eab234b97f52735905bb0219ea2290490e408ff469459ea82116068854e7b9c5869bccef780b4ceac17477f34f23e06a0a6bedca445a3866d73e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.5/aspnetcore-runtime-2.1.5-win-x86.exe\",\n            \"hash\": \"e7e62e13aa917a53015d987ef48fb255f887ce850b9aa1e869e46a13ab6f1697566f4e3d808ed71f6288e2b930f61bbcc26758f328382aadc6b53442f0c13e0f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.5/aspnetcore-runtime-2.1.5-win-x86.zip\",\n            \"hash\": \"9c46619708fca22db2bd7206cfed0aae56d99f52f4f00aa12a43ae2e744da4c75bb749ea343311a051b900e6299352ef7a0e9c5378611971f4d9fdc585c95f20\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.5/dotnet-hosting-2.1.5-win.exe\",\n            \"hash\": \"51da1bc97185209f19ff753fe0ca8a4ae5afec9a96b15fc088c357ad1ecf327e03d68347f54cda85d190131d6289a6de595c840f1decf7895009aa0ca5563448\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.1.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cd19548d-5b4b-49dc-b33b-be0fff2c814d/f92efb317bd7864097ef824174e6ded7/aspnet-2.1.5-symbols.zip\",\n            \"hash\": \"b0f2ce9c018605395d5c7a47a233fac83097df41ab7cb351827d727387646f831b0a1c251cd488dfeb9c473a18510f53b50ba7b1fc4322808f95ab921fb8e84b\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d3d1518b-c3ad-445c-a6a4-bc31691517f1/cb22f3c8e70ccacfc9dbb74748d11ee8/cli-2.1.5-symbols.zip\",\n            \"hash\": \"173168730d6fe23a7c5457ed5533e4dc103a2f95ae5c0118a3ac4fd06ad23a1bd5a605bd43b10148cf8bcfc3a5b4c32d78b8d745dd5ba57921449a236f2c8ad8\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b7ea7023-1d3e-4b6c-956f-fd95acddaf34/93db59925f87bf2088f262ea29536ced/core-setup-2.1.5-symbols.zip\",\n            \"hash\": \"5581be34b1e54650e1495aef9e4c02d676532dd11316174344711cde7d55cd434382ff389cfa741d364bded66d6fa560399077080376e351cbd7678009441d8d\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/26b24856-99c8-4caf-a5b4-81502b2df64f/ff4916b6eb2370d79241510511f845a6/coreclr-2.1.5-symbols.zip\",\n            \"hash\": \"d7cf81866131e90b95067c60c2123f68411f940256673766061df6c8778d33b861b49d2e14996bf08cd6b900fd19b6f6ecf483da3b0931e469b27f159384ff43\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d9ee037a-60e6-4efc-aa09-27c8b2f6c5df/73556861aecee927a870c2afb10576aa/corefx-2.1.5-symbols.zip\",\n            \"hash\": \"e6c24e68333797b652f9408ba95ff2fd01d8ced3edc475d8f3446984a40a5856624b1da51850e819cc44f1e29d94cc0cc9c295e6508199d553d8982f064c023c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f5348f78-7a05-40c3-9b5d-240f9f96162e/90b6da7e4ed745894884ea596b22335a/dotnet-sdk-2.1.5-symbols.zip\",\n            \"hash\": \"53d8a381108562253bd0c5336b2f8c3a665c54d95c09671e8867d3efd35b47967bda4a208735194a14e8d401bb7f9e995cddb20d430d1e90956222c266308d37\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-09-11\",\n      \"release-version\": \"2.1.4\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-8409\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-8409\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.4/2.1.4.md\",\n      \"runtime\": {\n        \"version\": \"2.1.4\",\n        \"version-display\": \"2.1.4\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-linux-arm.tar.gz\",\n            \"hash\": \"6ae83b0b51c180c44e0792a6c0b9dbeb40d9e28e695d7b565914232955cd0c6009186ca954d87255688163f79eb4b59d1fdd8abae7438de17f4cd919eb671028\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"854867452df8973ae5b2c266c07aa6bb69afabcce4bf9a693d5c71d437cd66a2d2d16d7fd9cb6ac5aa82884af816c470a74fff1e9e450bd8eb5d59cb36724551\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-linux-arm64.tar.gz\",\n            \"hash\": \"4d604229653522456ebdeee7b1a6cfb8032a14f6ef1c757544e0e27ea64bc455fe448c6f7c0647700f9e2790c48ef015c24003705b58e209dcc9489b77b18c85\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-linux-x64.tar.gz\",\n            \"hash\": \"94bd277112ccecf65d425e0ce98e7e30ac702e2ee91ebb976119a2a96f500745217dc77b4a3f0f5a7d6a4ee9779429c0bea419561cae09b446fba5cefb81e9fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-osx-x64.pkg\",\n            \"hash\": \"ae318363382be3fc6dd2487e03b125b1a0fe68cc9f00cb376dc956ec90d5ddaa0ee4b1f8f1114635620871d1271d1e15fc3fce7a869a6ed51b345106492828ac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-osx-x64.tar.gz\",\n            \"hash\": \"da9cfcb9ae636e0d0739f75cd1d6ea6b4a48858f1dca11134fec57e4e66b28f0f1b0ac55a02a741edc506fb011b023976d1395eff3ec5a51bb5d15298a6a56ad\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-rhel.6-x64.tar.gz\",\n            \"hash\": \"e6837ecb264413b9663d2bb89c16246c9aca64dd424571ed3f7569fa1ae97d312dd32ded62eff418be598ecc4312bbecbf5244d14ee4cc673dfe0161ad236f4b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-win-x64.exe\",\n            \"hash\": \"2812c23e0fc89dd7cfdc972fc99b867ba1883d9a1a921659371f346d1efc7638205cd22e372d78cc3250c3878d6a764002177f14a6200adc70c4b61e322bd47f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-win-x64.zip\",\n            \"hash\": \"d89a09736c35388a82f9791bce478866b672dc68fd1e7254ee9c4e06a2083a4205b7a87cc0129210989a1a53f544660cc0338ffdfe4cf6a2407ad76180534b68\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-win-x86.exe\",\n            \"hash\": \"76bc8246a9dcef7fb7486842b405c387abc4558e1fb82d408415904242ce50e387c73be792d4b4e367708f14251e3cf8976c3a9be20d89b09d1944fcddb07859\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.4/dotnet-runtime-2.1.4-win-x86.zip\",\n            \"hash\": \"4e8235d1271e79a2e6ec5f1ceb05a1daa85245529a56764bc4abd84e8483e2d4e739cf2e3efc6a6fa6a6dd94be2d491108ce71b15e1a555df43e3d9349d12c0c\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.402\",\n        \"version-display\": \"2.1.402\",\n        \"runtime-version\": \"2.1.4\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-linux-arm64.tar.gz\",\n            \"hash\": \"7a71f34867da96c84380e17d5c5e6263ed4de455865df6ec0353f941529ac6f7964de72f72fb8ef4848a2ba8c5676f8c28de8480f411d591b7da38bdc015812a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-2.1.403-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-linux-arm.tar.gz\",\n            \"hash\": \"021315da0bb32b70d9c39f793f5783010ebb7ba8dd1d4a4c38988004aeb56e8f14926a9b049ad707bd1dc93c3bf6653b5bbec20077be0cafae5669120d1b7726\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-linux-musl-x64.tar.gz\",\n            \"hash\": \"88309e5ddc1527f8ad19418bc1a628ed36fa5b21318a51252590ffa861e97bd4f628731bdde6cd481a1519d508c94960310e403b6cdc0e94c1781b405952ea3a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-linux-x64.tar.gz\",\n            \"hash\": \"dd7f15a8202ffa2a435b7289865af4483bb0f642ffcf98a1eb10464cb9c51dd1d771efbb6120f129fe9666f62707ba0b7c476cf1fd3536d3a29329f07456de48\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-osx-gs-x64.pkg\",\n            \"hash\": \"5ddb5374a9eaa71b6281c0e4d79cead5d22fb349270df32246486ebb055780b75659368fca50bbbdf97378206732f178b622a6b462a048662df1d962284d15af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-osx-x64.pkg\",\n            \"hash\": \"5ddb5374a9eaa71b6281c0e4d79cead5d22fb349270df32246486ebb055780b75659368fca50bbbdf97378206732f178b622a6b462a048662df1d962284d15af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-osx-x64.tar.gz\",\n            \"hash\": \"6abd86e3a340a6d529f6406be7a6db466bfe1daa2368631bd4e4c01216512c54ac4f2f710d1229e4f1550fd4332eb33ac1dd8a9dadd1947fa8b2981c2557cd2a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-rhel.6-x64.tar.gz\",\n            \"hash\": \"d224d51cf6d05211026fe8afd729f39eaf306d5f5f2df82ff000dbb4f9914b2ab9a9d4d27aefb892ff2a80532bf5377aef4e979ac9fc343cd8918bc860463b0a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-win-gs-x64.exe\",\n            \"hash\": \"1020bd17cb6587f73125f36428bd945b720ba612037f58d7bb33751b90783f6e26090e125cd1421439c167a309fb62d2c480b8ee8e9e40dee1bf33dbe0fd5d0d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-win-gs-x86.exe\",\n            \"hash\": \"b80459549cff5e93e5c1701fa1c852124fb22fde4dc513fef46d19d9c503e17e2567c04593551cc0dc9a6f573add5b6e0e3a7eed10998dd82a95b3e10a903505\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-win-x64.exe\",\n            \"hash\": \"1020bd17cb6587f73125f36428bd945b720ba612037f58d7bb33751b90783f6e26090e125cd1421439c167a309fb62d2c480b8ee8e9e40dee1bf33dbe0fd5d0d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-win-x64.zip\",\n            \"hash\": \"405cbd7c65d63b36e3bd6bcdfc897ac6474c4eaf93db9db478a80ab511bfa7a1c4a84024cc6e4af0df0af86bcc0a1a96a8ba0864c77bf579f32bce437c28d5a8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-win-x86.exe\",\n            \"hash\": \"b80459549cff5e93e5c1701fa1c852124fb22fde4dc513fef46d19d9c503e17e2567c04593551cc0dc9a6f573add5b6e0e3a7eed10998dd82a95b3e10a903505\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.402/dotnet-sdk-2.1.402-win-x86.zip\",\n            \"hash\": \"817d16ab72713b85af14becfdb828dc8e2dcfd2654d12b3ee8caae5bc960401df5e2923272f42ff9a39687d32a607d14a1642a9f45e6da0d3733708c5fe0c3dc\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.4\",\n        \"version-display\": \"2.1.4\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.18248.0\",\n          \"8.2.1991.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.4/aspnetcore-runtime-2.1.4-linux-arm.tar.gz\",\n            \"hash\": \"b0f2ce9c018605395d5c7a47a233fac83097df41ab7cb351827d727387646f831b0a1c251cd488dfeb9c473a18510f53b50ba7b1fc4322808f95ab921fb8e84b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.4/aspnetcore-runtime-2.1.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"173168730d6fe23a7c5457ed5533e4dc103a2f95ae5c0118a3ac4fd06ad23a1bd5a605bd43b10148cf8bcfc3a5b4c32d78b8d745dd5ba57921449a236f2c8ad8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.4/aspnetcore-runtime-2.1.4-linux-x64.tar.gz\",\n            \"hash\": \"5581be34b1e54650e1495aef9e4c02d676532dd11316174344711cde7d55cd434382ff389cfa741d364bded66d6fa560399077080376e351cbd7678009441d8d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.4/aspnetcore-runtime-2.1.4-osx-x64.tar.gz\",\n            \"hash\": \"d7cf81866131e90b95067c60c2123f68411f940256673766061df6c8778d33b861b49d2e14996bf08cd6b900fd19b6f6ecf483da3b0931e469b27f159384ff43\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.4/aspnetcore-runtime-2.1.4-win-x64.exe\",\n            \"hash\": \"e6c24e68333797b652f9408ba95ff2fd01d8ced3edc475d8f3446984a40a5856624b1da51850e819cc44f1e29d94cc0cc9c295e6508199d553d8982f064c023c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.4/aspnetcore-runtime-2.1.4-win-x64.zip\",\n            \"hash\": \"53d8a381108562253bd0c5336b2f8c3a665c54d95c09671e8867d3efd35b47967bda4a208735194a14e8d401bb7f9e995cddb20d430d1e90956222c266308d37\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.4/aspnetcore-runtime-2.1.4-win-x86.exe\",\n            \"hash\": \"1c76147f6cfdd463d79d9096930247dc86ea5e9e4d3256452a08ccb6bc09d8047e3f828c37a7aa15e03b8e6f2173d0e300ec8250b7277f33941d5c6ed5f2c9fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.4/aspnetcore-runtime-2.1.4-win-x86.zip\",\n            \"hash\": \"db8794adc8363fd061e592a264f0b8333e9db3a030ee8a2d3f811ab8d82dc7c9c084d4ccbf29082bb4400231365de0c70350a8dad48ec620fdfd89eaf0043dcf\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.4/dotnet-hosting-2.1.4-win.exe\",\n            \"hash\": \"3f80f0e9144b0dcb61d14c4e9f8d2b84ec0d111cfc56eab143570f0841794f596bb0092d68c09088a8d889f5ed49fb13d63e65b3497c7e3ec3b59e08b6b641e7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-08-21\",\n      \"release-version\": \"2.1.3\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.3/2.1.3.md\",\n      \"runtime\": {\n        \"version\": \"2.1.3\",\n        \"version-display\": \"2.1.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-linux-arm.tar.gz\",\n            \"hash\": \"3d42d5127d1729028467cf692c11ee04ed9a9f8445e0968dc5fed5894946bc901bf8de6fc57fec8373aa24d88b2f27fbea98704615f52506901747bed407732c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-linux-arm64.tar.gz\",\n            \"hash\": \"a271e741ac4b9afacc466aa081add4b54e83b646b9d1e8b8e7001aaac2f24a51973a0c0e9f191f7a4b83a123557cccd057cc0a381075a70b1f52926009018fb1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"fb9a080141038545af3fced55acbd7ef0d4948d527115f67937bfb6eee012eff0c1e18858ccab43f2752711f2eda29445d2c42edf5557348686844b2046a3b54\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-linux-x64.tar.gz\",\n            \"hash\": \"e2a9a25436744498ee827125083e41151e90e914091863d396ff8d3916467e8ebef4cdfe5c97a13381e6d257d1e01b7a02f846b9c8406643848e3d433d6bd60a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-osx-x64.pkg\",\n            \"hash\": \"397b32f3637d32e5e77265a73fc6af74f57c00e34f77566d3c50ae762dc0124b79ec5b34365eddeb856fb6cbf626c77d0eb16ed7d48f1f0eeff9e0b07a3c6015\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-osx-x64.tar.gz\",\n            \"hash\": \"504efdbe6a83ef5a0c8a21be486295e703dd0f6b0a11c633e297d9f99523a5ff570c57cb197f3772a80239e4df00c6c6d47d2021dc63496ef1026b3950772af9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-rhel.6-x64.tar.gz\",\n            \"hash\": \"71663d1b5a15e89fe3022556c10ef12f689bcc7376fae7833c7a80535ec44b057346cb71aef90ad5679e41c0522850a950bbafe78a791a9dd50ff1c1e79dc58b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-win-x64.exe\",\n            \"hash\": \"17346ecd526edb965a91b217ee488ae649bf77e28cb33cbaebd505a6c4dc9e599dcbfce54782f8dd82eb4d1423621a7726c9f9fa1583495f24f81f3c1fb35386\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-win-x64.zip\",\n            \"hash\": \"eec3465a1dfecc3890e8c07d45198352a9ef4026bebc867ca8723ddf4bf30e83b79dfae4c5b8800a4b1b83d38c63be06b8ebf7c5dce87cf7108cbb83b169b47f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-win-x86.exe\",\n            \"hash\": \"e7b04de3475b6352e19e3d6c2bdae8c962b555b2c77962685da86d47bfe166bd0a096c20367b0cfc94feb01baa1edeca77aee793756c3be4775de6b497f1d967\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-win-x86.zip\",\n            \"hash\": \"c9dd70d7b98297d32de05108efc2f3859f31fcc4c92a20e8797c51df7d14608280185dbdce25d172a56bfc935562fa66677497c48b8115d92245be3e4bc6fa5b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.401\",\n        \"version-display\": \"2.1.401\",\n        \"runtime-version\": \"2.1.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-linux-arm64.tar.gz\",\n            \"hash\": \"b8e1a4ba94fe54d7f897da2118e88dfb3ec97ab8595b40f72b972e65d5e95a673b0907a58790b710c37ef2681f6f7a0988f2da67da5f8517a60208c887186550\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-linux-arm.tar.gz\",\n            \"hash\": \"0b428331aae4adbc28fa0e8bd4696aeaffc86d1643cb366e9b7e8f7f27ada57d91c640490340acbe017fb7bbbe375cbc47c9e49d5905da230eac0eb8168ca6ff\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-linux-musl-x64.tar.gz\",\n            \"hash\": \"cc2a75abca3314118b97629dad9c21039d80c9dba86b0b89752b2259fa66b7c1734f7e6632e38e785b8db1b12f4a1be67d36330bda5128bec83306088a2547c5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-linux-x64.tar.gz\",\n            \"hash\": \"639f9f68f225246d9cce798d72d011f65c7eda0d775914d1394df050bddf93e2886555f5eed85a75d6c72e9063a54d8aa053c64c326c683b94e9e0a0570e5654\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"url\": \"https://download.microsoft.com/download/E/8/A/E8AF2EE0-5DDA-4420-A395-D1A50EEFD83E/dotnet-sdk-2.1.401-osx-gs-x64.pkg\",\n            \"hash\": \"7b644c808a3987d26306431fbdca73fa0120680faefddbdc063c92335f23e2f892e0d3db4e4c410d2b292f732d9445d796150b2dd89af2668f15853050d4080c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-osx-x64.pkg\",\n            \"hash\": \"7b644c808a3987d26306431fbdca73fa0120680faefddbdc063c92335f23e2f892e0d3db4e4c410d2b292f732d9445d796150b2dd89af2668f15853050d4080c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-osx-x64.tar.gz\",\n            \"hash\": \"53ea33279f0f217a3b13b144e231b2931b001e43f9eb988722b698f8331c56e279ebfde5962fb6de98cbfeb552c8f538d127e08da639cca4b73d6407d102b523\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-rhel.6-x64.tar.gz\",\n            \"hash\": \"26ee3faa349f9351a4c6d789484c8ab62da43181fe63c468ba9983d68c65433fa66c2f5f52ce4dc7e8ef6a1f9345b5f4fe5612716e74dfdc47f9f4a44261f579\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://download.microsoft.com/download/E/8/A/E8AF2EE0-5DDA-4420-A395-D1A50EEFD83E/dotnet-sdk-2.1.401-win-gs-x64.exe\",\n            \"hash\": \"cedf1e992a025c9e8887aa36e6c0b920ec9d2482fba3068505a110e7e7bfda603ca0e2675089b46c25c04e9d85c0a74dd35e5f42adbfb4f4848318c48f93031b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/E/8/A/E8AF2EE0-5DDA-4420-A395-D1A50EEFD83E/dotnet-sdk-2.1.401-win-gs-x86.exe\",\n            \"hash\": \"2e41720a7a055a12e23bd638f550b791f9919ad1eb0ca966060a8bb16b0ef018a8f1d052da10cf276c24998cce476be49be9f17f475325e7d09433a837db0f82\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-win-x64.exe\",\n            \"hash\": \"cedf1e992a025c9e8887aa36e6c0b920ec9d2482fba3068505a110e7e7bfda603ca0e2675089b46c25c04e9d85c0a74dd35e5f42adbfb4f4848318c48f93031b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-win-x64.zip\",\n            \"hash\": \"7d017487c1a11ae4db862b1efa7ba9beb0eabcf5d2467bc4055aa2227a548663a596682ff4adba4688930b22472587f29b83bce9f689efc5e9f4e37f7edda000\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-win-x86.exe\",\n            \"hash\": \"2e41720a7a055a12e23bd638f550b791f9919ad1eb0ca966060a8bb16b0ef018a8f1d052da10cf276c24998cce476be49be9f17f475325e7d09433a837db0f82\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.401/dotnet-sdk-2.1.401-win-x86.zip\",\n            \"hash\": \"d3b5c9d071ba5e083feaa4507c60d99d3d10f8a01b69263ef1f05ae0ebe973a576a94a20fafd8455f7aba2f9feedaba671775586e9c553e1811e2cf32d477321\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.3\",\n        \"version-display\": \"2.1.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.3/aspnetcore-runtime-2.1.3-linux-arm.tar.gz\",\n            \"hash\": \"89783eb504e52d393c85133861f0230c322aee452efb27b9e30dbe874e7255462eba7eecc152d5c8cedaa6101b05a4d73cd9f9db2240d0727a9fe3173fab7348\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.3/aspnetcore-runtime-2.1.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"5699445c571a64c68000cf97555debee4439d892a43d3409c14dc730eca38b16dc8a4842807c3ed9b086d3e2e41fca28e15af430cbadf3c9959b055b17893795\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.3/aspnetcore-runtime-2.1.3-linux-x64.tar.gz\",\n            \"hash\": \"522eccf29a1d08f11d803934c8e436321485a12a96c51bab19a8bba58e363b7277fccdbf95909bdf4c20c9166e335b834f250ec8a782c6e91d44bb86c44782b9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.3/aspnetcore-runtime-2.1.3-osx-x64.tar.gz\",\n            \"hash\": \"4f48bbd22861826e6b63959ac4f28f66fcde56525d7e8b5a0eccfda565df860cc77b573d75a91615874addbab515997f10aab330082c14802426ef74ef875faf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.3/aspnetcore-runtime-2.1.3-win-x64.exe\",\n            \"hash\": \"1489A7AF688B79F8A8AC3D1307B4ADBAB209FEA47431B589EEDCD07839E5F1D06752D0C713C5635D68945C0794892713076E588104847F81289F9B1FED45BA3B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.3/aspnetcore-runtime-2.1.3-win-x64.zip\",\n            \"hash\": \"098BB4A0EBC04ADD24DA0EE153EEC4BC2F6B4BDA8F04D6D05CF2956AC11A261D46611250CC4644A40293BF8C0DCDD15C03F664F71635D2F5B13295B3AD0DDAA4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.3/aspnetcore-runtime-2.1.3-win-x86.exe\",\n            \"hash\": \"cef632b7f47ee421764bea6e526fb2813dd5b2c3611a8c603bd1e72ff450f63a57fa6902d583625fceadb11c702b47d35e62766cedccecad8c91d7a8b69a1dbf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.3/aspnetcore-runtime-2.1.3-win-x86.zip\",\n            \"hash\": \"7e9dfd7f1cae2739d1d79a07a35ea4d84cf4c28df6140ee65289a7694ef20f6b1ffd519990e900d38389357f9dae4bc63a47f26af1df70a1ec6f88448384f6b5\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.3/dotnet-hosting-2.1.3-win.exe\",\n            \"hash\": \"7868ba46822b6e53c2a8056ec28f59434c7ecadb8e0adf8285396e12deb31cdec26158c54e4d0cad0566f8f7cb2f0612f685bd1ef20feb9e2864e36702e47116\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-07-10\",\n      \"release-version\": \"2.1.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2018-8171\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8171\"\n        },\n        {\n          \"cve-id\": \"CVE-2018-8356\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8356\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.2.md\",\n      \"runtime\": {\n        \"version\": \"2.1.2\",\n        \"version-display\": \"2.1.2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-linux-x64.tar.gz\",\n            \"hash\": \"229db61d9c1f9f587ce20f06ac3517e459a3c16b465dbbcf4fd0457ba216e0aea2d0a73df94b651992e744a8456de8bacf0211bff3a281198cf9fad845e9d8cf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-linux-arm.tar.gz\",\n            \"hash\": \"c720033a558284b139e891b588642e7975afdb0137da9aee096cd8c4bd73453d1641a75d18a13bb4aebb282d31730cf2a6fe963e84bec315f3296efd72924973\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"092c966af4e3b697aaff06315c3eb3e342651643d3a1929bd33bb5f638e73989944ecdfb02ac18b251b797ff4cadcb312f4be9fe8627b4dd4b8dd8b51ea59ba1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-linux-arm64.tar.gz\",\n            \"hash\": \"0567b927c23bfcb67b45d15d1c052036676c5196b7432ee918eba6f99e5538d9052d049de93234e469e3fafbebebcd2bdeacd6cf8ea9a787b632e0aff6dd06c8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-rhel.6-x64.tar.gz\",\n            \"hash\": \"81eb0031553ccabf92fc63fb0c1bc7eaa5a746c95363ae55525ca48a9c638ef457ca51c785e0f13b03cdab49c16b04fe3d1c8c23e22148f504dbac8171c6fcb0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-osx-x64.tar.gz\",\n            \"hash\": \"a39d10c1680e2adf98200285ee4b704b3861e371113e0359388fc0fa479222dd69e513b473e547b8382303918d708ce78a42edc06bcf4f6885775788dc0632d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-osx-x64.pkg\",\n            \"hash\": \"8cd973a1efe329c16b3099acd33ee191359314d4a6c9755ba0ea717ecb4ca773bb44bcfcc64181e68cfbd4ff6f214ab67ba1611b89b0c399423ffeb88b8f1d92\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-win-x86.zip\",\n            \"hash\": \"e0e941c2b89b8638447e42f93a0a028cd81464ac4cea6123acb4130b72dda03744b3bcbb42683f1e9554b1cadd1c28f35d97523278f40de5e8c57606460556b8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-win-x64.zip\",\n            \"hash\": \"9e67c62feb34aeb52a45d0e623d1ad098637a322545956eb5e6de2287ddad2412b766c492ae5a7dddc123a4cb47cfc51d9bb10d0e30c007ec3fc90666f9733c8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-win-x86.exe\",\n            \"hash\": \"3539dbc699a1bd29f79c4fe95d28246cc53c4916acd30927868e9e6fe1da3a40693bbe9bc8e69b814a25d7f044c289231a200a74204a2f374d38545083440fbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.2/dotnet-runtime-2.1.2-win-x64.exe\",\n            \"hash\": \"b15d988c51bc2da9edeb9ad3b1b643ef1f71d16eda0e35dec6224a67a78e9e1d58a3f8d0fdd727cd9643b5d9816664b02aba158d7884f0bd2098561e237a3ffb\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.302\",\n        \"version-display\": \"2.1.302\",\n        \"runtime-version\": \"2.1.2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-linux-x64.tar.gz\",\n            \"hash\": \"2166986e360f1c3456a33723edb80349e6ede115be04a6331bfbfd0f412494684d174a0cfb21d2feb00d509ce342030160a4b5b445e393ad83bedb613a64bc66\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-osx-x64.tar.gz\",\n            \"hash\": \"67a83f30f5c4d504eeafe5200711bff6e7c4c365067f4e6140e31f3e149974aa34e993d5ce9b39377b6e3e031c85e4348a46723519e87f200618dfebafd0b1f5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-osx-x64.pkg\",\n            \"hash\": \"6aa99c6810f6fe4aaffcbe1a9d69bff32acb0de8be665e00250f927fac00e8f4309da1c91bce28a60bb62938a65963ea08d4a79114ec07470ff5bf2253a1eddb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-osx-gs-x64.pkg\",\n            \"hash\": \"6aa99c6810f6fe4aaffcbe1a9d69bff32acb0de8be665e00250f927fac00e8f4309da1c91bce28a60bb62938a65963ea08d4a79114ec07470ff5bf2253a1eddb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-win-x86.zip\",\n            \"hash\": \"bb540fa18f32bc9d911ccf29df682c216d08cd5881e6b6a988e182ee2350a60eed24e56392370f2bc5bdef046496ac7c63da7e7ffbaca79fbb54c299f109a0b7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-win-x64.zip\",\n            \"hash\": \"a8a74d3329191df6357a00e26591cdc64153970e0cf42f820ade0fb520c9cb0e6ab16ab357dc9538a8c488245c505930b4b0a6b63721e4eebf8682613a63441e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-win-x86.exe\",\n            \"hash\": \"19239e9a54117baf7a3a1ffd56b4ec5b3e5b9e40f2ead3a70c549cf742f415cf3b65176d3e2c3b2d2668f6851c3dfa50bb178ba9af7bb36404a0620da2518519\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-win-gs-x86.exe\",\n            \"hash\": \"19239e9a54117baf7a3a1ffd56b4ec5b3e5b9e40f2ead3a70c549cf742f415cf3b65176d3e2c3b2d2668f6851c3dfa50bb178ba9af7bb36404a0620da2518519\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-win-x64.exe\",\n            \"hash\": \"30cd9f690f20c435f30430dff5901c778fd708e9ceab85d7a7bacd469524a7c027e9e5dbb951ec0bc8f7cf9bbd88df225159c87b581ff2cbb0fbc241917fc7aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-win-gs-x64.exe\",\n            \"hash\": \"30cd9f690f20c435f30430dff5901c778fd708e9ceab85d7a7bacd469524a7c027e9e5dbb951ec0bc8f7cf9bbd88df225159c87b581ff2cbb0fbc241917fc7aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-linux-arm.tar.gz\",\n            \"hash\": \"af18d6dc918bd638342a5910415e4f53b55aa802adfed551f164ccd6d1441aff70947b7985d7ad1ce7c7eb7d8f05995b45c0405a520d9577ff9c019b0ef5cd6a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-linux-arm64.tar.gz\",\n            \"hash\": \"93f481278d9da6ed7ba16d66c9742cdc9f66b31e6d09cd14b4b27621f44116f9a26386076de11e5ad3e967d51d95c17816287e164c80eebfd55852227a038457\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-linux-musl-x64.tar.gz\",\n            \"hash\": \"0f9a6fcbad609ef1ff5b398de9a1f1bf59eebc59b28a4c8cfead28f0209bf77601d05d49f5ea1223c860a803fb82cd7e2401b6df290da34e54b36bdd8788ed48\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.302/dotnet-sdk-2.1.302-rhel.6-x64.tar.gz\",\n            \"hash\": \"9991d57f1e5f4f2cd227bca9ef980457d3422ae28a36f6c5ed2a7d0665f9d378aad2c57d4b375a7d410eb229b13a18e818f3f980dc222e9c5347ef62dbde8633\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.2\",\n        \"version-display\": \"2.1.2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.2/dotnet-hosting-2.1.2-win.exe\",\n            \"hash\": \"1b20f9eee7b83d5068e8e4ac5230b7e584be944c4da1264fe117fa3a93aa520250e38e8bce7b54f87db73a40188e49c6caa9baa0f3ab45e38d4eba8a54e98e53\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.2/aspnetcore-runtime-2.1.2-win-x64.exe\",\n            \"hash\": \"63c8dfc01ff5a3a852a4d2930e185748f534ddc6c8aae96fac1cd6f7780a97aeb7d38a2b7be1f90c61df8bb3ca406cab37c5673676434d3597925ecbd2643276\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.2/aspnetcore-runtime-2.1.2-win-x86.exe\",\n            \"hash\": \"cf0f185c906dae5e359f230f2c5bcc65e6f04a3cf6fbac89b79f02ffe2e13f2c4085fb817a7f65038df5884be39057a992b43631d74f52c6d5951861c03f6031\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.2/aspnetcore-runtime-2.1.2-win-x64.zip\",\n            \"hash\": \"a9ab3f01fc07527016513f47fc46427f6da8ee45ab847eebe228ca940f00d7b791431295b5aeaf8c8fb07f4ff1d4e8894fb4cfe5c36e74684f08f7d9d15a0e6b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.2/aspnetcore-runtime-2.1.2-win-x86.zip\",\n            \"hash\": \"86414db4ce9ca76b3c40649da098fdc8d8e6dd79e4f94ec3a1402eb5506070ca8d9ae571a6845262720d42e5ef35e4ef396a0c01ecaa58fc55bc503c1ab8dd65\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.2/aspnetcore-runtime-2.1.2-osx-x64.tar.gz\",\n            \"hash\": \"5b9ad8e0fbe473cfc4f39516e3f793940287cefbb5fc2eac4dfcc346693d9b50242073aec605972fac0ac6f3d77f3d3715af32362061339565fb50db17f994d7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.2/aspnetcore-runtime-2.1.2-linux-x64.tar.gz\",\n            \"hash\": \"294a6c256ce7954c05c3dee85d4114e320c7b94b2ae2e854a268b2bb4383a967e1063ee0df0da0f09511b3dc9c215aa735899f5c6db4f11bd58da3cb9cc8b6da\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.2/aspnetcore-runtime-2.1.2-linux-arm.tar.gz\",\n            \"hash\": \"49565a49e8357894b34a8cd12e1cccf9702c2c9c3dd06e1fc7c184ebee5b2fec43290e18998b60a77dbd5dfc5d59b838f3f4210675db1d64313cf206a22fc6b2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.2/aspnetcore-runtime-2.1.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"7e4ccfd0610949c4e228da38d40223ea8086bc98ec92d83fb0823909f40e897c3ad59706ff84e4dfec7873a587e83d9d98826dd13dc2bbea239a927f6906a9cb\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-06-19\",\n      \"release-version\": \"2.1.1\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.1.md\",\n      \"runtime\": {\n        \"version\": \"2.1.1\",\n        \"version-display\": \"2.1.1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-linux-x64.tar.gz\",\n            \"hash\": \"39737997bc10de06b8fcae448f1c740dd422d9f6e4f71a61f364b5643adfade3f3902ea07eebf38c6505e5262312d05cbc9f295d3ec5f8d5830f4ab73236a5a5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-linux-arm.tar.gz\",\n            \"hash\": \"470b0cc3a614b716ad288ad527e1f00e5e7321636ba6bdecfab770a3d84da20417fe4ac362a22f4c6eab4b34614b7b3490b4b00a2f9824ec957199e14696f7b9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"5bb938b012d86bcecac42e3c4e915cded051ffeffcdb4122ce41cfd53896395b952d61ef10e22e37d330a78eeb861550e0c73d0595ae001228a03bb0d94bd286\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-linux-arm64.tar.gz\",\n            \"hash\": \"28c170e1d7e01e0de67f77b0e65f26816cb20e3ea4cccb148506bef830d6dfc9ac0825408bd36432aee15027f6c0a41ca52c69f01060db134f21be724b6115e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-rhel.6-x64.tar.gz\",\n            \"hash\": \"d6e512a3f854ace827b0528299f4d2286e43f5dc526440d0c014bafebe98932ecef5079879e4eb53f965a4304e724a2238913e4233c9633d06e058a296bd32db\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-osx-x64.tar.gz\",\n            \"hash\": \"4e1ccaa728a12f508fcc69dd75270b9bac5cd6e4458eeb3ecad8d7ab718f5c1750d7d191420af9669a1d87c503b645f3b1dde98a92d818e9ab7e79a504136a1f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-osx-x64.pkg\",\n            \"hash\": \"7b5c750aacb9c62e3fea36889661b63e7ad1fd2ed331a8d413f36c54e136d3d219e27fec8874202e9dd66f7458d6c60dd949c56f1dbdce927cdcdcb8ddd017f5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-win-x86.zip\",\n            \"hash\": \"864df7bc475e7a05dd20b8b5c927f8a7c2370446046070b5b1262a07c34253259769d1442a1f5c144cd4b91285a5f275a3919f8de2ae49d0e35a122e57af051c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-win-x64.zip\",\n            \"hash\": \"4414fe957d2630404ef23d2ceb9d8d2d37fa4d1249ef4755d05302b179a64821fca6d21d4de011f4b466c090ffd7c5422f2b94e88168bd868ddc3b22557bfacd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-win-x86.exe\",\n            \"hash\": \"5d2968020c2d255429860606b509f25ae3a5a4fa79569cdb4c5ae1fca6decd0c6c43feff171000111378d99c413e349504b7b413051e73b1dd9c2ce73f4d23dc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.1/dotnet-runtime-2.1.1-win-x64.exe\",\n            \"hash\": \"e1ecf007a7ceb18e92acde8ea3d3f5c15c2adbadcb6366c8d743eb6752761efdac02185551a009420a9c878cba76a5abe6bd8d73626edaff104a2592a241d3ad\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.301\",\n        \"version-display\": \"2.1.301\",\n        \"runtime-version\": \"2.1.1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-linux-x64.tar.gz\",\n            \"hash\": \"2101df5b1ca8a4a67f239c65080112a69fb2b48c1a121f293bfb18be9928f7cfbf2d38ed720cbf39c9c04734f505c360bb2835fa5f6200e4d763bd77b47027da\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-osx-x64.tar.gz\",\n            \"hash\": \"120444d800d7761b4c535d601b6e79a32c9d7443f8029a47600b6d30c59e0e0f0573ce7ff435b6a563028c2cd19abcb5406fff48afa3f969ee8464db7e216bde\"\n          },\n          {\n            \"name\": \"dotnet-sdk-mac-x64.pkg\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-osx-x64.pkg\",\n            \"hash\": \"37466af3f27ce6351487e2daad584f2d4d1780379866256953526781eb15aecdcd61a5a105b37a8f09bef020dd85a2b598b8bd9ef9148e053ac6dea771288799\"\n          },\n          {\n            \"name\": \"dotnet-sdk-mac-x64.pkg-gs\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-osx-gs-x64.pkg\",\n            \"hash\": \"37466af3f27ce6351487e2daad584f2d4d1780379866256953526781eb15aecdcd61a5a105b37a8f09bef020dd85a2b598b8bd9ef9148e053ac6dea771288799\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-win-x86.zip\",\n            \"hash\": \"237a0a980d8bcdb4d8c9adf7824f9bb9e50da47af224fd291d7667f88efbe7432a66a606ea4fedae018f1a252db938c19bded3d451f7a2fe47b0ba47d0861e9f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-win-x64.zip\",\n            \"hash\": \"f2f6cc020f89dc4d4f8064cc914cffabde0ce422715138778a6bcbbb6803ca66d6fd967097a0209c47c89b85dd9e93db48486ac86999bd3a533e45b789fcea89\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-win-x86.exe\",\n            \"hash\": \"dfddde070115ddc8a637f24ed80f0f1439e9813e850c8cbffcdb245b7ee6d99a3d28278f031a58d4fdd7255009e30effab69cad38da768ee525f391872299dbe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-win-x64.exe\",\n            \"hash\": \"894d620a9f700b2fe3f788f0ef12c26ac654f15b34d76bfde22570301054208aff4461567d3f18a7f76031132ea5f63b2ca9a42a122a3d246815aa4c4455cc96\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe-gs\",\n            \"rid\": \"\",\n            \"url\": \"https://download.microsoft.com/download/D/0/4/D04C5489-278D-4C11-9BD3-6128472A7626/dotnet-sdk-2.1.301-win-gs-x64.exe\",\n            \"hash\": \"894d620a9f700b2fe3f788f0ef12c26ac654f15b34d76bfde22570301054208aff4461567d3f18a7f76031132ea5f63b2ca9a42a122a3d246815aa4c4455cc96\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm-x32\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-linux-arm.tar.gz\",\n            \"hash\": \"f241a9e6b910f0000691973784a28b652ab7feaf329fd732a7a808a2c5926e7116c8c78e6c42806663135b6d3fecd7f9e1c28e24ec3db742a585a93befb17500\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-linux-arm64.tar.gz\",\n            \"hash\": \"852d29e572398347afe166bbde5b17c5e09130d7af72ba5b483766b80b6fb657695102a92f5bd247f0d011f807cc05a4e7c61f8aeae577b95fa9fae9819bb3fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-linux-musl-x64.tar.gz\",\n            \"hash\": \"86e288cce53999b719ced7959f5ba652f667b8c1e0aec266c3012c9870380e5142e3f5ac103f03691d4426158d9da4d7c89f0739dee5815419a6150c8ee84a12\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.301/dotnet-sdk-2.1.301-rhel.6-x64.tar.gz\",\n            \"hash\": \"e638c0fdbf41668477e92afefe9a2ee29229aa2880dfaa83fc01b6c4298ab8d2699581fdbf543533d70873c8a4d430bf8da32c64a90b6b2c19a7766f34632739\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.1\",\n        \"version-display\": \"2.1.1\",\n        \"files\": [\n          {\n            \"name\": \"asp-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.1/aspnetcore-runtime-2.1.1-win-x64.exe\",\n            \"hash\": \"bc4c6ba1a5955e8486d3960d354182fa885afe1e56989e49b12420b6fa8dbbc28a42e653bbbde85e5ad638ad2fbf96bf99a52f5d5b1ade03b399e8585b28f897\"\n          },\n          {\n            \"name\": \"asp-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.1/aspnetcore-runtime-2.1.1-win-x86.exe\",\n            \"hash\": \"83041e846f74ed2594d2ad0f6f28efb007ac5b7b8a7489326d9d6f2dedbe7132c3f5e769daaacbfcf56d183f66b339bc278c773496573adfedd52cdd30ed8f48\"\n          },\n          {\n            \"name\": \"asp-runtime-win-x64\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.1/aspnetcore-runtime-2.1.1-win-x64.zip\",\n            \"hash\": \"312b4610e3fffd2bcd92c6a215c245bb112f40276837bfa2edea9cb9376554f6c237fc773f2c83c146cca6e7bfcfc53d708627d9a76a896996174ff300666528\"\n          },\n          {\n            \"name\": \"asp-runtime-win-x86\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.1/aspnetcore-runtime-2.1.1-win-x86.zip\",\n            \"hash\": \"18c6fcb50376a57657ed0a4c254cea5fde0a5b7e7f7086dec7fb1153711f5545bb1f70beddf688c2ee7cc473fb607ec9a6a4663f05a25d473f2dad3a41de7034\"\n          },\n          {\n            \"name\": \"asp-runtime-mac-x64\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.1/aspnetcore-runtime-2.1.1-osx-x64.tar.gz\",\n            \"hash\": \"2ef0ac04986c587914a9bcb9062d5abfbf4ec66efc68be8f3e8a6d46df20a839e0a04d0cfb7d6265a275bbc4e26245cf3d496a769e90bb88e1c5b8a7f944123b\"\n          },\n          {\n            \"name\": \"asp-runtime-linux-x64\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.1/aspnetcore-runtime-2.1.1-linux-x64.tar.gz\",\n            \"hash\": \"ab7de9d3e01d940ec985b1787532d856abb24d64b59066f0cee343f79edd2cd67be4b0de2788b9bfc97968311308384f912888e9ea8fd8d6def7e143c4e825c0\"\n          },\n          {\n            \"name\": \"asp-runtime-linux-arm\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.1/aspnetcore-runtime-2.1.1-linux-arm.tar.gz\",\n            \"hash\": \"5160edb49a16e24ff4cb018bf7ff2eb6638b514abaa9e0d5006e83399bd5830116c35e317b4d9418d2ecc7b757b21d7cf1353d445a7162fa81e990e9f9034a42\"\n          },\n          {\n            \"name\": \"asp-runtime-linux-musl-x64\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.1/aspnetcore-runtime-2.1.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"b8d3ac5c1970b2a6d6fe812c66b55ff74b1a130010889d6b828a031296355c7b507b7289a90c149d5f710f93847609c6264fec0da5d196df6c2aab3100a8797f\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.1/dotnet-hosting-2.1.1-win.exe\",\n            \"hash\": \"6c24ec02e6c8996a419ad0f7092ada5e58754a5e1db7f1828670ce8f4503c22e14bd74ae8b86a99833147605157763a8d95bc5dbebbc5643c92fc28c4b58391f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-05-30\",\n      \"release-version\": \"2.1.0\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.0.md\",\n      \"runtime\": {\n        \"version\": \"2.1.0\",\n        \"version-display\": \"2.1.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-linux-x64.tar.gz\",\n            \"hash\": \"f93edfc068290347df57fd7b0221d0d9f9c1717257ed3b3a7b4cc6cc3d779d904194854e13eb924c30eaf7a8cc0bd38263c09178bc4d3e16281f552a45511234\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-linux-arm.tar.gz\",\n            \"hash\": \"2e4a95223b449a696277c1c144fe2aaa0d3d4936cba23626cfb22e68a0308c6cd37bdec6e86f6e5a3803fb1d4f27c4b7d08da41c4d246d822428ab755b90f097\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"f34be4356d28201d6962b884e7b660efefd187f2dad34eeed87d044a8033a281143b6bf9972cb843d7f48f1956c9ee4dd9a6e548fb917ba547031212f722b41f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-linux-arm64.tar.gz\",\n            \"hash\": \"9c3485370314a703b7fe7003f779a3de55bebc74a77eb3dd8e86ce6041982884e4b69751f12b6ccaec28fcd0174261953a6adf32a82f6c1b5b4aa39530741955\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-rhel.6-x64.tar.gz\",\n            \"hash\": \"e2f15fd0b29ac0957c67ac50c3c7a57af4eed9167aed0df1fa56fc69f5bc694154ea75779f556166a24efe3507e49ed616f7c23b1d9956bc78ba74a70ccf0b96\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-osx-x64.tar.gz\",\n            \"hash\": \"7985d44edc28af3432ea9c2fd185cf21662d5fbb1f7a1155d565abb1838d29374d7703bc16d02da9f7f3608a07eff5c348b887538e249762f72b35ca0db7cab2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-osx-x64.pkg\",\n            \"hash\": \"62708701f00826df8158f4873e775b0ddb54046530ba41c46c99a61b5e3ae12a8996c5c98e5dc6a4a9efa855855d54959df2b344519681f551038cad6921965a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-win-x86.zip\",\n            \"hash\": \"5631a906c26c2accdcb6620ba5b8b71a0c34f842b7f59748348c82bc2fa5804014fa017214230472808add3d9066cf94522de045a2b797158d33f08adfb3c21b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-win-x64.zip\",\n            \"hash\": \"9e30be1d0de2e93ce6854f448f353ed9961e36d1da950e3548ed76e29b993eb2946d7b5db5e9a35baf958e878aead198e703d0ec391269a0ab1f13d354bd5749\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-win-x86.exe\",\n            \"hash\": \"7894e33971fe6a56a9ee6cb628cdcc6a51c56bc9176abf4c61ca8f5180b33ed459615668fea6447856dbefe4473b182a7af2601c2bd7f3ee715663ddc24f2772\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0/dotnet-runtime-2.1.0-win-x64.exe\",\n            \"hash\": \"ec23c90c95d8501b05b87c42cdd189174f7c2ee8891196ee595f31e209e2670625e6b0b30d019cb09fbf4e3f17b20c9669ca63b5082cc6f8e547802eed9fffbc\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.300\",\n        \"version-display\": \"2.1.300\",\n        \"runtime-version\": \"2.1.0\",\n        \"csharp-version\": \"7.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-linux-x64.tar.gz\",\n            \"hash\": \"80a6bfb1db5862804e90f819c1adeebe3d624eae0d6147e5d6694333f0458afd7d34ce73623964752971495a310ff7fcc266030ce5aef82d5de7293d94d13770\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-osx-x64.tar.gz\",\n            \"hash\": \"87597ad03f028a1c04156a68d8447e29bac2e46a1438ceda3b0b624b78211284c547d202a272c3cc772818a4e981beaa8172ecb2b0b017d474a7fd9afcad6188\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-osx-x64.pkg\",\n            \"hash\": \"80ecad155180129f59c24e85926345f1a73374498fa6dd903e27b50efba6c52363f49fd707ca1276bb5c367e37aa499e651c33e18e6af61088d9e9aa1daa2c61\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-win-x86.zip\",\n            \"hash\": \"be5da1f6a7aa983d25feed7f1fcddb67d88ce98bacd6ff4b8116737b30e2132a004a93887a7f773818c81abf0ff8e3fc071956a3d08032a65300f1088707bf6a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-win-x64.zip\",\n            \"hash\": \"4aa6ff6aa51e1d71733944e10fd9e37647a58df7efbc76f432b8c3ffa3f617f9da36f72532175a1e765dbaf4598a14350017342d5f776dfe8e25d5049696d003\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-win-x86.exe\",\n            \"hash\": \"81bc04b1a8d32be59f45d6c58c4eddb63843efc91650f469e8418a8977bf071d1435564f5c754bbe2cb6a37ec52b6d1bc28837de15c4402b2cb59bfe08cbb9d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-win-x64.exe\",\n            \"hash\": \"f01012683591f6a9530b27296c287390e9a88cad6cb20339366e3ff627f25e26965ab9bd9f982d8010c4d195943c18f7d5e08e246d315d15e48aaaf07cd5a372\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://download.microsoft.com/download/8/8/5/88544F33-836A-49A5-8B67-451C24709A8F/dotnet-sdk-2.1.300-win-gs-x64.exe\",\n            \"hash\": \"f01012683591f6a9530b27296c287390e9a88cad6cb20339366e3ff627f25e26965ab9bd9f982d8010c4d195943c18f7d5e08e246d315d15e48aaaf07cd5a372\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-linux-arm.tar.gz\",\n            \"hash\": \"35f384278fbfd709bcebc5bed35a9d7d808040b6c53345484586fc4442ac684b1a07d4b70ee33d9ed364cf8dc74658b1a38bcef657f5e308f6559d3c881d0f64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-linux-arm64.tar.gz\",\n            \"hash\": \"04f8b4db03db4d5cdb47e6051e747b9348c4b58da24191a4fe053b4f6ce3f5220a448fc746842ff740eef76b2a60aba521de925cc183b0cd94caa43deb61e9a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-linux-musl-x64.tar.gz\",\n            \"hash\": \"8e69f6ddcf979373d14619160c266430525559ffef317e6328d5e98be0538bb00e8a7a83bb5d3bc9ce3e0c5f4be5d8fc52b9c9835aa626f7dab6ef0424635923\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300/dotnet-sdk-2.1.300-rhel.6-x64.tar.gz\",\n            \"hash\": \"af625c4d6a64c71b272f34f1095a421e82b27ee0cf38b31876b30efc4f6c18343a8faeda6037637cb3414dcb59dfc7d6a100bbe0ec6341d2b78405a3b108e8f7\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.0\",\n        \"version-display\": \"2.1.0\",\n        \"version-aspnetcoremodule\": [\n          \"8.2.1991.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0/dotnet-hosting-2.1.0-win.exe\",\n            \"hash\": \"c8cead20f3dd69c27b178d02d357ff8b0f33b9631f2db798f6e57c89ed7dd4ccf7bceb7b23407e756c1b3a8f6154ec3f7fe2f24647485fa0afb22abc08ffa898\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0/aspnetcore-runtime-2.1.0-win-x64.exe\",\n            \"hash\": \"10c5f3a9c9302a7896dc92ebadfa62dc89a25e452f92bd84c80e61b724e53e4e670d720de117905659b69731b64e8e8484c5f4b8eb77c9c754146c44d00a5cc7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0/aspnetcore-runtime-2.1.0-win-x86.exe\",\n            \"hash\": \"e6172e47495664172b2955f5f35c48aed1b5a5402bb13c74acc7eb9bb6cb06295e73079dfb751107c6beec9e095913d868a1bea7f521f56265bd0939f2b80f9b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0/aspnetcore-runtime-2.1.0-win-x64.zip\",\n            \"hash\": \"fdab464f151fa38a5537d79b4a1ec89a8cae8c1e1a06fe9b1d6e9c92a31c1c0f59796a933df2cfced07172fa81e2c8d8ee10c0cae4f16b93f2dd56a70527598e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0/aspnetcore-runtime-2.1.0-win-x86.zip\",\n            \"hash\": \"ad20f95809bec3f9fe7b7afce6402025f67a2809a4db55ff1b398f5df4f5f06b6786d3f1b023259672e435a5ca2dad2a841f0712e806535c02a2b9918d2e5cba\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0/aspnetcore-runtime-2.1.0-osx-x64.tar.gz\",\n            \"hash\": \"473f54c723110ad53d0444172d0b7f597d8120ee94c9044d2cc7a2734f42598929d81cdcb771b1991b08e4cd4bd8fd7af48bebc63d99c61cd84907172c759f31\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0/aspnetcore-runtime-2.1.0-linux-x64.tar.gz\",\n            \"hash\": \"0f37dc0fabf467c36866ceddd37c938f215c57b10c638d9ee572316a33ae66f7479a1717ab8a5dbba5a8d2661f09c09fcdefe1a3f8ea41aef5db489a921ca6f0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0/aspnetcore-runtime-2.1.0-linux-arm.tar.gz\",\n            \"hash\": \"c9f2f573f034c104ea24579a72a0e4416d73ea01109b25ad538fc854ea498bcb778e60492adb64192069c7d564b644cd4c49623e276c24368a03d1d251292db9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0/aspnetcore-runtime-2.1.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"001cb500bfbc1bc5843943979101f402f0bc575bce4f87cfa301b4ec7ded801a3376520d80de87990cbf21f1617647fb40dbf21051c6627549bd365232bfa5f7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-05-07\",\n      \"release-version\": \"2.1.0-rc1\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/Preview/2.1.0-rc1.md\",\n      \"runtime\": {\n        \"version\": \"2.1.0-rc1\",\n        \"version-display\": \"2.1.0-rc1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-linux-x64.tar.gz\",\n            \"hash\": \"29f27f7b208ed20be71941f8c57aa5dc3c4a0e0fceffa4cf80553fca81dcfbe3b7f26a93662aae86c10ebf5f43a150bcac9290033dff6876d28683141e5d98e4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-linux-arm.tar.gz\",\n            \"hash\": \"d2a49b3b08ab282bbecfc578a3e24f76dc25dc15be5cf2021a33942b6629e47f81ac6c4766f97d4529fd92c4dd8c781a28c13eff3bff2e7b484a5b2c994ae37e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-linux-musl-x64.tar.gz\",\n            \"hash\": \"4f4b6bb043bc927643448de7744139cd5006f6c6108d39aeb24af1c79f76d4bcac05013e0700972f230d35315fa73241113fee2374d82e3318bc9f170a533652\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-linux-arm64.tar.gz\",\n            \"hash\": \"a5ddf10cf8477d811b1ad5958e4347cdb40a3fcdc9cd0e471d38245fca4e59e42e27d0c756a4e354988c979276ad41e33d42d151aae60f32601ddad21df56d85\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-rhel.6-x64.tar.gz\",\n            \"hash\": \"13e4cdc01d4dc0985a1d6edb9aa228b809532e4e07d29ba7e6f001663c2e2e8478fb4b3459622699133debd122214279a5597762f659000e3efe18d9544ccbe0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-osx-x64.tar.gz\",\n            \"hash\": \"db2c6d403f5cd37c1fe0988d0f207d8dccc9940046553e280b16690f71225a638f3f90b86e43e2c26b02adedb86978c86ad6831c583f603dd43dcb7fb93fdcb2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-osx-x64.pkg\",\n            \"hash\": \"5895c7dc2e721b921da579ec37b8defb47e53a5ccbca39a0dc989b04be24c9736c0b9c4fe2eeb0bb078f3a5cf472aae2d42c3f8f08b9fd2305f5e4e101503075\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-win-x86.zip\",\n            \"hash\": \"1a161832ac0ded127b0f4ab36569b5d06cc1681818f72341cc530c4a645d7cc5b21b568c5e07749aa27968982487d9b18aae5e246cbf5ee385a10fc9783520f0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-win-x64.zip\",\n            \"hash\": \"781a67337f7717f38f061f623c8491dcb91be58750dcb47c15ef5519ab4be928ce8645500fad67a30026476e64e507d18210aab8f18213ffb48d83e0fa935cf7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-win-x86.exe\",\n            \"hash\": \"e5ea1830f5cc94a5aa5dee744797b19a6af5c59c4e222b1e694e05acd9deb5474ffd24b6aea49ff72d8d8743eba20f3adc19158c7b5fa7ea3168a20333562980\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-rc1/dotnet-runtime-2.1.0-rc1-win-x64.exe\",\n            \"hash\": \"279a5378ecff673dc15acb56c94fbd04e2261d77eea78f0679fa0a975a81b6f5bec37d3fe99f6a9bd2d228047afe024627071ebdbdd28ac6a57d76ed3e4eb1c0\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.300-rc1-008673\",\n        \"version-display\": \"2.1.300-rc1\",\n        \"runtime-version\": \"2.1.0-rc1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-linux-x64.tar.gz\",\n            \"hash\": \"f3964951e577b7b829a8f6cdc8b9477fd8ea39ad6baaed30f369280d06523ca3574cd8679d74bca027acdad0cb02fce76e46d742d705741a7074d99fdf95cc06\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-osx-x64.tar.gz\",\n            \"hash\": \"0e3e86ad493d7844d226d3e423b4d912124ea62ef8cb440de8fd318a579e105aacecde774e24c7c1c082d395e6b732970ae7c08c6e47e4e7477066174c251206\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-osx-x64.pkg\",\n            \"hash\": \"3a0c2356712007232f83b38b89427d4cc6d576778e3db331455eedab393e1bc86ce771226eb7e2e6edd8230170fefb54e82d2a3b13ebf09d4478600c5b518ec8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-win-x86.zip\",\n            \"hash\": \"9e4e904f7743b6e0635f3474361eebb00f1164aa96e12fabcf6ecf2c56fa84abf974a1af5c7df8dc0139c8f11e43faaf5b85bd4401896320ea52f87f87aa37b3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-win-x64.zip\",\n            \"hash\": \"a9e8b89dcac02ebaec82bcd8bbb55b42480e1ce040b8204e5fb8c2241978af7a090952de09982c02b6f9a1bdb85555f7bf356c6c8aea2d0207003e1d5f521ab4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-win-x86.exe\",\n            \"hash\": \"803c748bb67c77939232b36ddcc90b3663fd3679cf82aab0baba5979caf28252a2b171e2e3c69bd313a87e2ca78869bd484597170a2118c359fffa3dfb2a4470\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-win-x64.exe\",\n            \"hash\": \"7256aca2c02827028213ce06ceb5414231b01bbc509d0d57d5258106760c0fa5621a9d5f629fca3f34d6c45523a133206561d7188a0cb4817d4d5cc6c172d6f0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://download.microsoft.com/download/B/1/9/B19A2F87-F00F-420C-B4B9-A0BA4403F754/dotnet-sdk-2.1.300-rc1-008673-win-gs-x64.exe\",\n            \"hash\": \"7256aca2c02827028213ce06ceb5414231b01bbc509d0d57d5258106760c0fa5621a9d5f629fca3f34d6c45523a133206561d7188a0cb4817d4d5cc6c172d6f0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-linux-arm.tar.gz\",\n            \"hash\": \"2600659fe88f2ae0fa3e491e5495123d441d87aa392a2ea40d0eaedb0aee471c2c824de4b425742d1e4cc5c4abaf272ec56b079458b9f062eab31c6343a14862\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-linux-arm64.tar.gz\",\n            \"hash\": \"75ad50527eb4468b313bcd79d8e506c9da1670a92d4f06dfdfc6f524153edfd46447799ec50d90bb5b1dc6fbd04fbbd3fb7e4cf11b387db8005bdca2a947a67e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-linux-musl-x64.tar.gz\",\n            \"hash\": \"852b51b0802297c13d6b86f6fae38c515eaaf51893dedfce129966134a8100f5da2ab789295528ae868cf54cb9f7004fd37bf97927f716bb193a6232f181a38a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-rc1-008673/dotnet-sdk-2.1.300-rc1-008673-rhel.6-x64.tar.gz\",\n            \"hash\": \"7425908F2A99849ECC7DE7576B708131DCEA06B174D8B22347C934A280BFD7456F8938BD7317A48C56100C9688E813A32F75613827A2B2473B7B108B5A1EDAAE\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.0-rc1\",\n        \"version-display\": \"2.1.0-rc1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.microsoft.com/download/D/0/B/D0B7F62D-9C5D-4CF3-AB6C-88F56B4FC1A9/dotnet-hosting-2.1.0-rc1-final-win.exe\",\n            \"hash\": \"45ae5913e8fca08513fef71bd9a849dabd829bbaf5fbd6e9489ffeb38177e65b1042e267243d40bd70df404ccd292c15746ecd2c820ad35527308b83da4bddc0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/D/0/B/D0B7F62D-9C5D-4CF3-AB6C-88F56B4FC1A9/aspnetcore-runtime-2.1.0-rc1-final-win-x64.exe\",\n            \"hash\": \"1138f7e2a23cf0309cb53986e219d52a27cba30d8d5caa3697317b4cab951bf2976211f0894eaf60900da778b4aa790490c417041abe9bc741695a259ff94789\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/D/0/B/D0B7F62D-9C5D-4CF3-AB6C-88F56B4FC1A9/aspnetcore-runtime-2.1.0-rc1-final-win-x86.exe\",\n            \"hash\": \"b5e9a89ecfbd638c0f92bbb1626183def620c22e50169fa58a7a21faa83a2d48ef8f3cdc9b2815527e8885617db3624e25a5c63cdb23cf73ecd07056afe997f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/D/0/B/D0B7F62D-9C5D-4CF3-AB6C-88F56B4FC1A9/aspnetcore-runtime-2.1.0-rc1-final-win-x64.zip\",\n            \"hash\": \"18ce3332214fdf8e68afba978c2cc35213595e2b0d70c77d5e108f939990bc6234b6fda9159e9a020db3a7fe8ed5bee2d85df5bf569314056cd495a0a06fd1c3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/D/0/B/D0B7F62D-9C5D-4CF3-AB6C-88F56B4FC1A9/aspnetcore-runtime-2.1.0-rc1-final-win-x86.zip\",\n            \"hash\": \"c11d4d533828267d661cd7c01afa8a6e14a979a7595bc446284635e2e24ba10c299aad451c960f0c39afe7597e00aa311c77c9eef85cbc6768c8a136f05b2b2a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/D/0/B/D0B7F62D-9C5D-4CF3-AB6C-88F56B4FC1A9/aspnetcore-runtime-2.1.0-rc1-final-osx-x64.tar.gz\",\n            \"hash\": \"d929b601885bbd965ae47d2942d0e9d875a9750d63ebfe4015879b9f54c928bf833b966f3a58430d0e650d4de5afca524dffa7a71d5a4a5af901b51be2012f3d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/D/0/B/D0B7F62D-9C5D-4CF3-AB6C-88F56B4FC1A9/aspnetcore-runtime-2.1.0-rc1-final-linux-x64.tar.gz\",\n            \"hash\": \"156ab969bc533c3a64b770f2b88214f0b07d1d867922257182d496828ac3cad6d6c01ea44f2a2a1d568278bfdf916db9825452de26a1262bdc591ff19f6e4b99\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://download.microsoft.com/download/D/0/B/D0B7F62D-9C5D-4CF3-AB6C-88F56B4FC1A9/aspnetcore-runtime-2.1.0-rc1-final-linux-arm.tar.gz\",\n            \"hash\": \"c76690fb147b39ab8113efefd3442e40d26c3767bcd9e1c3b0692d6cb022ceb0aeb5eecd1ef38af89e3cba59adf8579347e005608b09622e10186732ecc41f47\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://download.microsoft.com/download/D/0/B/D0B7F62D-9C5D-4CF3-AB6C-88F56B4FC1A9/aspnetcore-runtime-2.1.0-rc1-final-linux-musl-x64.tar.gz\",\n            \"hash\": \"701a96fc3b27d6ebc46f2c9192bc1a048d1c3915888cdc2223183e7a8c7be7e591e9ea317c2e6a363c841013ae2209564da470e48f268c374084ab57c28a66a2\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-04-10\",\n      \"release-version\": \"2.1.0-preview2\",\n      \"security\": false,\n      \"runtime\": {\n        \"version\": \"2.1.0-preview2-26406-04\",\n        \"version-display\": \"2.1.0-preview2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview2-26406-04/dotnet-runtime-2.1.0-preview2-26406-04-linux-x64.tar.gz\",\n            \"hash\": \"9f8dce51f0438e0cff5fbdf38a60c620d879825902aae4d59ec026c6cfd0f6d2237f220a5346836e6e3c50a5be7b357443ab4ae01f85c596abceec12a8dc29d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview2-26406-04/dotnet-runtime-2.1.0-preview2-26406-04-osx-x64.tar.gz\",\n            \"hash\": \"5c8602cebe11b08a34e60b7bf2a826ee1e907e0e6aa4106b27f4af9063ffb2dc3cd03123c8bb1677445cdaab1fc0af758d11f752d5228187ac1f256eb9f82d75\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview2-26406-04/dotnet-runtime-2.1.0-preview2-26406-04-osx-x64.pkg\",\n            \"hash\": \"a09fe3640b4dbfbf1ad005a44f488da264aceae83f8f9afac9d60df1ac51e0e8c96c2a5a88e880d545ea72162c286c206b833c2133260d10096bb8c50f50b065\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview2-26406-04/dotnet-runtime-2.1.0-preview2-26406-04-win-x86.zip\",\n            \"hash\": \"46816c29827516328f39147b5bf52f8f1786e8f58e3628ee02bdf5b080f7420e62b57751a9fb16caec8f4de41766be28693f29e42d5de1eae722938def6780ec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview2-26406-04/dotnet-runtime-2.1.0-preview2-26406-04-win-x64.zip\",\n            \"hash\": \"eabf2cb0fbaa096739b5e25fb43ebe7b3a8a62756e25cdccf740658a0b7d1166259645c61f8c6e5c1c3577d440ee6285c9ce504ad6b9f66ba9d7fd71c211bd1a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview2-26406-04/dotnet-runtime-2.1.0-preview2-26406-04-win-x86.exe\",\n            \"hash\": \"80a5894d44d153de640a9c9216c1ddd7c3a98033e06661658dc71be6d8c8f750e13f03f217ba01a4917fb2a20a78d8eadec742836357dc8d4f5e6bfaea60b732\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview2-26406-04/dotnet-runtime-2.1.0-preview2-26406-04-win-x64.exe\",\n            \"hash\": \"53c42d54ba7ce83d234efa63a6dae7c38593091ac28839d2f8706ea866f2fe2bebe88c8d03a09eaf8673ea257a3da099b4b7b8647cb100cdb17f3aa5257b2716\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.300-preview2-008533\",\n        \"version-display\": \"2.1.300-preview2\",\n        \"runtime-version\": \"2.1.0-preview2-26406-04\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview2-008533/dotnet-sdk-2.1.300-preview2-008533-linux-x64.tar.gz\",\n            \"hash\": \"a50ce826458092cc0547c36ff0d281e00b71b5689109414ab41b8bd9b57fc1f20c04fd55c6c298503bd552b1eb1ddf9eb634f947ea3ded2ceb3fb61436df0457\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview2-008533/dotnet-sdk-2.1.300-preview2-008533-osx-x64.tar.gz\",\n            \"hash\": \"088ee5309bc07a32d8b142c6f8c4bc981d37f6d14a1138dec452baa67dac4840f82b091fb3a5dc0b8902dba540ccaf96bef10d9fb0b040ab07e2af170ceabe25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview2-008533/dotnet-sdk-2.1.300-preview2-008533-osx-x64.pkg\",\n            \"hash\": \"e22f5947e492be96aabfd12372c656bf12dba76e70751bf2d76e1bb78f2660fbeb4020ad23e17882c7ae6762af14e32d417a46dd8a428fbba6c3aac7a49c684f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview2-008533/dotnet-sdk-2.1.300-preview2-008533-osx-gs-x64.pkg\",\n            \"hash\": \"e22f5947e492be96aabfd12372c656bf12dba76e70751bf2d76e1bb78f2660fbeb4020ad23e17882c7ae6762af14e32d417a46dd8a428fbba6c3aac7a49c684f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview2-008533/dotnet-sdk-2.1.300-preview2-008533-win-x86.zip\",\n            \"hash\": \"fb906747d1bd7258eb803fae29256de02c1ca92d48041142cfc3a64feb5a36e7a91a04ffe12b407a2a67e003ae621a6181313a1f8833ce48417c7d2aa76c2566\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview2-008533/dotnet-sdk-2.1.300-preview2-008533-win-x64.zip\",\n            \"hash\": \"e2858d0809cd727ef361ecd192cc79208bfb04b258b1c7375c4a8fc34b897a4d0f244c67744f2c4154c1b8cf47cff4f656b70357f8c2d06c30058e82d115ef46\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview2-008533/dotnet-sdk-2.1.300-preview2-008533-win-x86.exe\",\n            \"hash\": \"3fe6174590802bea4e37f8c415d8ce5afc72113b8189511f15110057ba04cbf24d8495d57e8b67584a13706c033278a0daec33530ba43dea0403bf106524ea19\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview2-008533/dotnet-sdk-2.1.300-preview2-008533-win-x64.exe\",\n            \"hash\": \"584ff392f4a49700afe2e18819b888be8320cfcb3133618866934690d23f127a1b663eb35ea91072c19c8d2d498b4847f0f4ab4dfc15b4bf4f4ee4b96419308b\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.0-preview2-26406-04\",\n        \"version-display\": \"2.1.0-preview2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.microsoft.com/download/9/0/F/90F8F18D-CD21-4A79-ACDC-AF4CB95F490C/dotnet-hosting-2.1.0-preview2-final-win.exe\",\n            \"hash\": \"5cca21d9f1cadebc130607f1ff14ab17db05f971ee218a7d855f452bd1f36ac8c7773af4662887c711c93ec6bd2c85a5e648aad845c2c9543ddf25e186cabd44\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.microsoft.com/download/9/0/F/90F8F18D-CD21-4A79-ACDC-AF4CB95F490C/aspnetcore-runtime-2.1.0-preview2-final-linux-x64.tar.gz\",\n            \"hash\": \"4bbc0f25623947048430f5e44a0d3dc444f13fb8fd0058b148f86ef31a0167c35c72accf6c713c92762840bd0059890417e5ebed0c408e5f7d4f25ea2e3844c1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/9/0/F/90F8F18D-CD21-4A79-ACDC-AF4CB95F490C/aspnetcore-runtime-2.1.0-preview2-final-win-x64.exe\",\n            \"hash\": \"79567d9c4ee73195ea49d735b9a4a70f1f2485c3f38c53e83f624488b112a6304118f7ce8a48b7f5a169365165a8b11f5743c69141b260237846e24a560fb684\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/9/0/F/90F8F18D-CD21-4A79-ACDC-AF4CB95F490C/aspnetcore-runtime-2.1.0-preview2-final-win-x86.exe\",\n            \"hash\": \"a574395e4a478bd7f6a3f932e0ceccfc527661218ed24c7e33ea761a909d3598be522e7002b67f67a6569e9be5f79d4021cb1207d7877e17b48d0a82be6b0587\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.microsoft.com/download/9/0/F/90F8F18D-CD21-4A79-ACDC-AF4CB95F490C/aspnetcore-runtime-2.1.0-preview2-final-win-x64.zip\",\n            \"hash\": \"5e247e07e29dc6932bdd810911461e78c16d30c5724403953d20971383be06dbed7b579a21a10b0da7d90ada884ef9f2d8a9ea7dfc442bcb4cefbc1a397c00bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.microsoft.com/download/9/0/F/90F8F18D-CD21-4A79-ACDC-AF4CB95F490C/aspnetcore-runtime-2.1.0-preview2-final-win-x86.zip\",\n            \"hash\": \"857560b9e780b686e5503d84574da811a302c3f1435d8dc09398b5e28a1cb2b5f82da87fc04ea170e92f37e5bb68f2669d5ff68b8cf64ea10d8f1735bde34cfa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/9/0/F/90F8F18D-CD21-4A79-ACDC-AF4CB95F490C/aspnetcore-runtime-2.1.0-preview2-final-osx-x64.tar.gz\",\n            \"hash\": \"7f8463f06af03cd951d1a2497c7d76def63239269ef510443bd6843f6fc9e3b68f4b0d812f8d22236a9d45c0c0cfd8166793461250c76037f08c0122b151c3ae\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-02-27\",\n      \"release-version\": \"2.1.0-preview1\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.1/2.1.0-preview1.md\",\n      \"runtime\": {\n        \"version\": \"2.1.0-preview1-26216-03\",\n        \"version-display\": \"2.1.0-preview1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview1-26216-03/dotnet-runtime-2.1.0-preview1-26216-03-linux-x64.tar.gz\",\n            \"hash\": \"0249b32f68d1266e6f481e16266b4b2d027b1644d182da31e34ef3c60b37fc755c5f85a482de6c85cdf095c8185221f666c7d6bc62364a786f0f2f8b72919c88\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview1-26216-03/dotnet-runtime-2.1.0-preview1-26216-03-osx-x64.tar.gz\",\n            \"hash\": \"47431a5e6126ebb883d8e8a18ea7327dce285da41fd809860597c9574ab1e35fb323933f743a49e7a5078fb6e41740ec4611f5e1ffddd3114379f0b4db30a8a7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview1-26216-03/dotnet-runtime-2.1.0-preview1-26216-03-osx-x64.pkg\",\n            \"hash\": \"8cbf0f7cacbb537619c580ff8ec7ac012aa40196ac00b2fbc2514a5097c878f766158d79a72e0582418ec20c6d98be7bfa81867c55e989b7da055f0942307ad7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview1-26216-03/dotnet-runtime-2.1.0-preview1-26216-03-win-x86.zip\",\n            \"hash\": \"1c6c6a6821eb5e3435fa57c2661584c4118a5a951f5f7df8087922f692859ee230566dc806b9a48e8dceed703f157cac3ae3619c645e18db487a8f740db4ed95\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview1-26216-03/dotnet-runtime-2.1.0-preview1-26216-03-win-x64.zip\",\n            \"hash\": \"511447ea54aab82b9b890936440fe08a0c25e7b579050ec7706bf9212a58a31cfc56420a9de8775a7bf3bc1e39143045c542617c065e59b471323eb00567f9d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview1-26216-03/dotnet-runtime-2.1.0-preview1-26216-03-win-x86.exe\",\n            \"hash\": \"8ec6e0efe7134b79debea41fa7bb45736f7a317260b15955c33d018ccf21fc13c46f1b30f4d0abed385ba76437d3be861e97fdc12022b99bc69c31cf22497214\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.1.0-preview1-26216-03/dotnet-runtime-2.1.0-preview1-26216-03-win-x64.exe\",\n            \"hash\": \"b7830445ac00a37718ed1b3b563fa323ca5889484141d9dd30e9b46b004c62ac2c003cc8f8bba1d4266ead62966817c93dc21c36f0660de3867125dfaffe04d3\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.1.300-preview1-008174\",\n        \"version-display\": \"2.1.300-preview1\",\n        \"runtime-version\": \"2.1.0-preview1-26216-03\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview1-008174/dotnet-sdk-2.1.300-preview1-008174-linux-x64.tar.gz\",\n            \"hash\": \"3030d6876eef6770c54e6d1e23f1be544b72dfe171915d2e55e00e40faacec0035fe4f9d72a6dc5fc5fb29b768ff64c57dcce0b9fddd8f1b7f7ce8389f535da9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview1-008174/dotnet-sdk-2.1.300-preview1-008174-osx-x64.tar.gz\",\n            \"hash\": \"65de990bdfd131f9246e5b47480211a2b829c73b1dd0248c6c32417c0489539c15d98d12ffd70034a69b952b49a89eb79360eb9e0f34802706ade2563c78e1c4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview1-008174/dotnet-sdk-2.1.300-preview1-008174-osx-x64.pkg\",\n            \"hash\": \"7eda0b3191621de9e858eb27560bdce44b475584b3f789b2bc15e15c5b183c7cb419a7dfc99a1ec021afa87859d3c2f5417acfdb3ee317f6ace654901ef96925\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview1-008174/dotnet-sdk-2.1.300-preview1-008174-osx-gs-x64.pkg\",\n            \"hash\": \"7eda0b3191621de9e858eb27560bdce44b475584b3f789b2bc15e15c5b183c7cb419a7dfc99a1ec021afa87859d3c2f5417acfdb3ee317f6ace654901ef96925\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview1-008174/dotnet-sdk-2.1.300-preview1-008174-win-x86.zip\",\n            \"hash\": \"e1466e7652e7787206c06f2e642f10bf8815a8d02a06b8fb4db7c7941bdb64463c10a4dc1fe59b8c768353404016fa384a00c5b14f228272845f6a75f14f1896\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview1-008174/dotnet-sdk-2.1.300-preview1-008174-win-x64.zip\",\n            \"hash\": \"d1195ec86e745854735c2d8431858987b937963d5b96dd2f1fbecfe8f3b9c4259fbd9454fc7e81542aef117903a0674c7aba242bef3a761a9c8237f71286793f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview1-008174/dotnet-sdk-2.1.300-preview1-008174-win-x86.exe\",\n            \"hash\": \"bd8a9145f651026cfa1ca7c264c2e05b3740afc0b5f8ac5572409a95836d8f87e1a8c460eb985182501f679b721a97fd174b7690ab8cdc5e43c8155ee8af94b5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview1-008174/dotnet-sdk-2.1.300-preview1-008174-win-x64.exe\",\n            \"hash\": \"d6749ef041136865353289250a92fae582c118f77b2838ceb9484854b636249bc2950da942bd807bd3ec04f91bc2b9ccf0bc73a9771c04e8552db82d56eb73ee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.1.300-preview1-008174/dotnet-sdk-2.1.300-preview1-008174-win-gs-x64.exe\",\n            \"hash\": \"d6749ef041136865353289250a92fae582c118f77b2838ceb9484854b636249bc2950da942bd807bd3ec04f91bc2b9ccf0bc73a9771c04e8552db82d56eb73ee\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.1.0-preview1-final\",\n        \"version-display\": \"2.1.0-preview1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0-preview1-final/dotnet-hosting-2.1.0-preview1-final-win.exe\",\n            \"hash\": \"4f2b8bf998bbda10f32cad96b5fa15bc944f321afe97e9a21da3e1984d25aa4cc39fac5c138e88ae126b7e3db78f07149517a38acf1066f8e5d2321044f76aa0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0-preview1-final/aspnetcore-runtime-2.1.0-preview1-final-linux-x64.tar.gz\",\n            \"hash\": \"7a8a3f98f65f99e8a6439253e72abc78a2a7f741176f93dfbdd9b6589f98ef22881ba2afa7997ca047a2b2e3217d25988b4bc4ac6133ff61115f7a68b2bd3af6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0-preview1-final/aspnetcore-runtime-2.1.0-preview1-final-win-x64.exe\",\n            \"hash\": \"c14bfbfc0ceed63e08340384ee849ab9700f708486a3d09c4cb4651c7989a920563e008faaa3809e13e610231576cd55e3e676bdfb8e31c24f012484c4cbf433\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0-preview1-final/aspnetcore-runtime-2.1.0-preview1-final-win-x86.exe\",\n            \"hash\": \"8f114a4842d6f30c16b929f163e2c88428de25f2477baa0d4a0beb5965e7dd05c7c6e52d305ff1da9d3377bd3f7f6bb766a78920383a732542b1af30cad7d162\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0-preview1-final/aspnetcore-runtime-2.1.0-preview1-final-win-x64.zip\",\n            \"hash\": \"3a56bdf4ff099bd8f51e9b6b06a3bf3c34ff9769bbc655d81df2660be3af0de4508d97295e820fb3b04f7c79c3034b313509ad7cfa897636db8afab2115b8b63\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0-preview1-final/aspnetcore-runtime-2.1.0-preview1-final-win-x86.zip\",\n            \"hash\": \"4792e530651ef0a276218e3ffb7c7d4e0bbd44d68eebb384f2f4f627024b4ba69d74ddce8fb9a6b2e0d9b11910bd7dea542c3b19eabc2e9396d2475ef681523c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0-preview1-final/aspnetcore-runtime-2.1.0-preview1-final-osx-x64.tar.gz\",\n            \"hash\": \"f8c78d7ea16f54d4ed87aec532b57bed8271265eefc3134647b50d760e6bd7fe001eaa6fdcba5d15d2db5330f3bc82ce2ff0b88b5bfedeaff53cf42143e2cc47\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.1.0-preview1-final/aspnetcore-runtime-2.1.0-preview1-final-linux-x64.tar.gz\",\n            \"hash\": \"7a8a3f98f65f99e8a6439253e72abc78a2a7f741176f93dfbdd9b6589f98ef22881ba2afa7997ca047a2b2e3217d25988b4bc4ac6133ff61115f7a68b2bd3af6\"\n          }\n        ]\n      }\n    }\n  ]\n}"
  },
  {
    "path": "JexusManager/Resources/2.2-release.json",
    "content": "{\n  \"channel-version\": \"2.2\",\n  \"latest-release\": \"2.2.8\",\n  \"latest-release-date\": \"2019-11-19\",\n  \"latest-runtime\": \"2.2.8\",\n  \"latest-sdk\": \"2.2.207\",\n  \"release-type\": \"sts\",\n  \"support-phase\": \"eol\",\n  \"eol-date\": \"2019-12-23\",\n  \"lifecycle-policy\": \"https://dotnet.microsoft.com/platform/support/policy/\",\n  \"releases\": [\n    {\n      \"release-date\": \"2019-11-19\",\n      \"release-version\": \"2.2.8\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.8/2.2.8.md\",\n      \"runtime\": {\n        \"version\": \"2.2.8\",\n        \"version-display\": \"2.2.8\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-linux-arm.tar.gz\",\n            \"hash\": \"a3fb720504821eca64ec507e4ae2e321b3119c90f7b14844db85026d386047e1cfdf6f24b07f5fae6f19af9ed7ccbe49e46a39ad16d0c3838d9e9589bf2d5ef9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-linux-arm64.tar.gz\",\n            \"hash\": \"097e94db6a7cf2d78588825aea663ebbe6fdd51275bcb9cee4d6d00c8274532a3474f95d506267e38b1b45bf1fa3fa2d255ba532afffe9f5bce17c8092c24766\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"d0f8e7ac385e7fcaca2a70b1081625be88289e06f031ce12955f0d6df0b6ff2f13e6d93287e30439bb19932b2a06a9d1162577579c9c85da435c4036c609659a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-linux-x64.tar.gz\",\n            \"hash\": \"b818557b0090ec047be0fb2e5ffee212e23e8417e1b0164f455e3a880bf5b94967dc4c86d6ed82397af9acc1f7415674904f6225a1abff85d28d2a6d5de8073b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-osx-x64.pkg\",\n            \"hash\": \"ae5d06c54fb0126d87abfb30cc372f8b56f6ed2ddb3d0762fb05b39714c42535ea47298f3ed85f687dfea42d670acdb19bc3009dc79fab39d1a339d5708ca360\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-osx-x64.tar.gz\",\n            \"hash\": \"dcd38ac8c6093eacd6b649b6416dc6af0053003441d1182ccf0b9584e04805b82c51381139ee76de1788ffa3ff576e7310dd4bc24318412a0fe47a0982cfc0fb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-rhel.6-x64.tar.gz\",\n            \"hash\": \"5016f53948514bee22f4d7646ebc03784e86eb45d1d19bcec0f2ef2957f3f9374c512b9fff34686c597d4c0640cd208ed07df9298c0ff0f50a44a2c4b774beeb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-win-arm.zip\",\n            \"hash\": \"21f34cafd5e3661017f1bc92f39d250f162f9d3832404125c73473250157d25cd74d7afe959749c4cc2fc418439d20f521626f4505e254f42ef857c5c10904c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-win-x64.exe\",\n            \"hash\": \"963742eb79d51807444d871cd57acc1c2b37a199eeecc97f3d47715fe73dcc7d2b7015bb2b7e6f7497726de67a44f936c1ebbc2c9ea728cf47e66aa4cbacc191\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-win-x64.zip\",\n            \"hash\": \"5864a40f662388761bc108510df9540b0b6672ae0f5a04cac71112ef0d1aa5781ffa3c856e919eed68eba6161f21a38c52f0e8850e8ecdf22609c42d2387d848\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-win-x86.exe\",\n            \"hash\": \"75de2107f0798add2f67f773451a779b051bf6898936f8fbd82ce7347e7471bb5310831844e3868610bc1fb8cc6ef780c5b4fa7ec4419b81b574fb5085881de2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.8/dotnet-runtime-2.2.8-win-x86.zip\",\n            \"hash\": \"66fca0a5b9b801fea1972b87d99ecf9f9904edf948139df495e7696c6a02a417371c4632a9232c76e3832f6161a3dd172a0d799acf66db0dc43a7719776c90d7\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.207\",\n        \"version-display\": \"2.2.207\",\n        \"runtime-version\": \"2.2.8\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-linux-arm.tar.gz\",\n            \"hash\": \"a922b87fc1e433d489d6863fa3faca5a5eeb33f68104c5c4733ca8fbd187230715f6ce384ddbdaca501b1f42c87f590a9299b525be405214803bb1da3c4bbd1c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-linux-arm64.tar.gz\",\n            \"hash\": \"565fe5cbc2c388e54b3ee548d5b98e1fd85d920ceeeb5475a2bf2daa7f090fc925d8afef19b2b76973af439fbb749c6996711790287eafd588e4d916a016e84c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-linux-musl-x64.tar.gz\",\n            \"hash\": \"231118ba205b5d609263fc790851c65900aabf5830d492425849de89b7103f02012a302ce21960cb062426c5b8fd480e1316176a927bd287b08b7d19445f7224\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-linux-x64.tar.gz\",\n            \"hash\": \"9d70b4a8a63b66da90544087199a0f681d135bf90d43ca53b12ea97cc600a768b0a3d2f824cfe27bd3228e058b060c63319cd86033be8b8d27925283f99de958\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/837aa87a-8160-4297-b6b7-eceb56b3ce48/74c42db19f2784ab172e27598eae7f4f/dotnet-sdk-2.2.207-osx-gs-x64.pkg\",\n            \"hash\": \"3cf91804f2d0b7beb0830450f98cbd18125d1df72354b6a57668cca11a871a68d234f2d8a8a5fe86215b1f71584c22b9f75fc057365c55026da2979195894278\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-osx-x64.pkg\",\n            \"hash\": \"3cf91804f2d0b7beb0830450f98cbd18125d1df72354b6a57668cca11a871a68d234f2d8a8a5fe86215b1f71584c22b9f75fc057365c55026da2979195894278\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-osx-x64.tar.gz\",\n            \"hash\": \"d60d683851ba08a8f30acac8c635219223a6f11e1efe5ec7e64c4b1dca44f7e3d6122ecc0a4e97b8b57c2035e22be5e09f5f1642db6227bb8898654da057a7ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-rhel.6-x64.tar.gz\",\n            \"hash\": \"64decac610d7fdda90e7a1236e155ddcc8bb35ee5fda8f1ebd7c97380eddff9638e08cf8d439bbc52bdedb223c70049441b448bda0b687b744b34b159630ef4b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-arm.zip\",\n            \"hash\": \"263aa3de231de97268d75dadee94031f26ee0c3ed0da18ee87c53eba42138cf1384ff0869caee13f8a57441c4c5d415d8abe388bb3dee3294f5af2a9e7620ecb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/dfa5fe58-1542-4b4c-84bf-2aa44743c925/170740c73015a8c621bedab256fd8431/dotnet-sdk-2.2.207-win-gs-x64.exe\",\n            \"hash\": \"721882a80632fb113dcd3b82a80f4be968a08b6f09a9c0513cef7464e5fae836b60b601e570289fc6a31d3765f6f66d81ec32d6e98e58098acb74d0a714eabb6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d23f0125-64e3-4132-97c0-5beb671228f9/e68a5a74a1dbf73059efe007ae56a456/dotnet-sdk-2.2.207-win-gs-x86.exe\",\n            \"hash\": \"ce0a50585881d0345a232a3f40d99d4248c455157472525ade558bb93f222358ee79dde0786dcdf75b4923f55935d9d6aa8785c0129f44d713c8dee3f97c4195\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-x64.exe\",\n            \"hash\": \"721882a80632fb113dcd3b82a80f4be968a08b6f09a9c0513cef7464e5fae836b60b601e570289fc6a31d3765f6f66d81ec32d6e98e58098acb74d0a714eabb6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-x64.zip\",\n            \"hash\": \"726f60e2cf82b7fbea97066dda318d468774bcd830c7244aac16610f4a2bbd879cfb89a93dd7983a8b424babe8201d62845e2b904ed698455f1082655dd00286\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-x86.exe\",\n            \"hash\": \"ce0a50585881d0345a232a3f40d99d4248c455157472525ade558bb93f222358ee79dde0786dcdf75b4923f55935d9d6aa8785c0129f44d713c8dee3f97c4195\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-x86.zip\",\n            \"hash\": \"3f8d76e44a4f236d2c38b79620d4c4ab8e98f768774bf00ce3b3fad32762991f9c65bd16b5811218605b7f959a7fc7d492e17879370f4a58e0f7c15e0e603a56\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.2.207\",\n          \"version-display\": \"2.2.207\",\n          \"runtime-version\": \"2.2.8\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-linux-arm.tar.gz\",\n              \"hash\": \"a922b87fc1e433d489d6863fa3faca5a5eeb33f68104c5c4733ca8fbd187230715f6ce384ddbdaca501b1f42c87f590a9299b525be405214803bb1da3c4bbd1c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-linux-arm64.tar.gz\",\n              \"hash\": \"565fe5cbc2c388e54b3ee548d5b98e1fd85d920ceeeb5475a2bf2daa7f090fc925d8afef19b2b76973af439fbb749c6996711790287eafd588e4d916a016e84c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-linux-musl-x64.tar.gz\",\n              \"hash\": \"231118ba205b5d609263fc790851c65900aabf5830d492425849de89b7103f02012a302ce21960cb062426c5b8fd480e1316176a927bd287b08b7d19445f7224\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-linux-x64.tar.gz\",\n              \"hash\": \"9d70b4a8a63b66da90544087199a0f681d135bf90d43ca53b12ea97cc600a768b0a3d2f824cfe27bd3228e058b060c63319cd86033be8b8d27925283f99de958\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/837aa87a-8160-4297-b6b7-eceb56b3ce48/74c42db19f2784ab172e27598eae7f4f/dotnet-sdk-2.2.207-osx-gs-x64.pkg\",\n              \"hash\": \"3cf91804f2d0b7beb0830450f98cbd18125d1df72354b6a57668cca11a871a68d234f2d8a8a5fe86215b1f71584c22b9f75fc057365c55026da2979195894278\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-osx-x64.pkg\",\n              \"hash\": \"3cf91804f2d0b7beb0830450f98cbd18125d1df72354b6a57668cca11a871a68d234f2d8a8a5fe86215b1f71584c22b9f75fc057365c55026da2979195894278\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-osx-x64.tar.gz\",\n              \"hash\": \"d60d683851ba08a8f30acac8c635219223a6f11e1efe5ec7e64c4b1dca44f7e3d6122ecc0a4e97b8b57c2035e22be5e09f5f1642db6227bb8898654da057a7ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-rhel.6-x64.tar.gz\",\n              \"hash\": \"64decac610d7fdda90e7a1236e155ddcc8bb35ee5fda8f1ebd7c97380eddff9638e08cf8d439bbc52bdedb223c70049441b448bda0b687b744b34b159630ef4b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-arm.zip\",\n              \"hash\": \"263aa3de231de97268d75dadee94031f26ee0c3ed0da18ee87c53eba42138cf1384ff0869caee13f8a57441c4c5d415d8abe388bb3dee3294f5af2a9e7620ecb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/dfa5fe58-1542-4b4c-84bf-2aa44743c925/170740c73015a8c621bedab256fd8431/dotnet-sdk-2.2.207-win-gs-x64.exe\",\n              \"hash\": \"721882a80632fb113dcd3b82a80f4be968a08b6f09a9c0513cef7464e5fae836b60b601e570289fc6a31d3765f6f66d81ec32d6e98e58098acb74d0a714eabb6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d23f0125-64e3-4132-97c0-5beb671228f9/e68a5a74a1dbf73059efe007ae56a456/dotnet-sdk-2.2.207-win-gs-x86.exe\",\n              \"hash\": \"ce0a50585881d0345a232a3f40d99d4248c455157472525ade558bb93f222358ee79dde0786dcdf75b4923f55935d9d6aa8785c0129f44d713c8dee3f97c4195\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-x64.exe\",\n              \"hash\": \"721882a80632fb113dcd3b82a80f4be968a08b6f09a9c0513cef7464e5fae836b60b601e570289fc6a31d3765f6f66d81ec32d6e98e58098acb74d0a714eabb6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-x64.zip\",\n              \"hash\": \"726f60e2cf82b7fbea97066dda318d468774bcd830c7244aac16610f4a2bbd879cfb89a93dd7983a8b424babe8201d62845e2b904ed698455f1082655dd00286\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-x86.exe\",\n              \"hash\": \"ce0a50585881d0345a232a3f40d99d4248c455157472525ade558bb93f222358ee79dde0786dcdf75b4923f55935d9d6aa8785c0129f44d713c8dee3f97c4195\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.207/dotnet-sdk-2.2.207-win-x86.zip\",\n              \"hash\": \"3f8d76e44a4f236d2c38b79620d4c4ab8e98f768774bf00ce3b3fad32762991f9c65bd16b5811218605b7f959a7fc7d492e17879370f4a58e0f7c15e0e603a56\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.2.110\",\n          \"version-display\": \"2.2.110\",\n          \"runtime-version\": \"2.2.8\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-linux-arm.tar.gz\",\n              \"hash\": \"7a4c26448216d8e4e1433c4070972f5314fe69c8f7b8f66993b0a60465282fbd6b6a9cd8de9da251982f55f24a5853bd400c6cbf5e4ed40213b80b62e541d8c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-linux-arm64.tar.gz\",\n              \"hash\": \"921ee8b9409a36ccc0d49fa90af68aa387bb0a7fbe7eea06c10b76cb2c53b81e08ce7767f4b18afdd4ce46194ca5e0de787b105a906f4da6c03dd5b284518063\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-linux-musl-x64.tar.gz\",\n              \"hash\": \"1dd6bedfa2151bb518eaaba8621035ddae94fc69a1053c3247de3aab044252e2d0979984520bd11dee4922cd58a03f6ba99b652fb1602b5cff9a6d3d22034fa5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-linux-x64.tar.gz\",\n              \"hash\": \"cd3bc601ccc45edf38cdcc254831b88539dd51f26bdafa2d74eebb09d20d19d745fe319a93c4290e3b74a7a5d8fe851773a748ef0f23f7997c76b26e74d0d94f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/701d2e3d-4e06-44e1-a364-88772d946ddb/fe84d8921516ac6c7c2f6b039611ac29/dotnet-sdk-2.2.110-osx-gs-x64.pkg\",\n              \"hash\": \"4cd219e117c642955a553fd3c2bd78b6e1163d4bd773bfdc2bd2e8f1fc9a0b90b6243edb2d9c13298e18900394522284961d9e9204a4a9913c91bd15cf6de206\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-osx-x64.pkg\",\n              \"hash\": \"4cd219e117c642955a553fd3c2bd78b6e1163d4bd773bfdc2bd2e8f1fc9a0b90b6243edb2d9c13298e18900394522284961d9e9204a4a9913c91bd15cf6de206\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-osx-x64.tar.gz\",\n              \"hash\": \"866512de8a387d66b9518620ca1449bef61fcd8ca4978f2286d3d44de09670ba418bdb9d0a6d821f61e3f753996db66841e8ddaf53e5859ed0b767b6451534d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-rhel.6-x64.tar.gz\",\n              \"hash\": \"25d68910b75aec0ba8fd038264aa641a8b8b89c1c6cb8871a69081d40ebfe9f79473e3d3efe64c75cdab7b50a4518da131a04e685c1c91b95f1c7ceac48216dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-win-arm.zip\",\n              \"hash\": \"3b938d4b46807fd84e62f1d8b20ecd3e89280e2f7867a4a510ef298b9eb29cfd524f332525ccd442a9d40c9bac438291e2601b305ac23f9f8fdcc2a023652009\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3e380085-9346-4710-9079-a7292981b1fd/3aeba734cf4d9d44e0fd8eea4af0673f/dotnet-sdk-2.2.110-win-gs-x64.exe\",\n              \"hash\": \"d36edc2cc36e3f1a673cfddc4c5ccfd70806f56604995015678e17ab3ece7cc5a530b4f1dbb9e03f916c5cd0eabd13005219c25259d29528cb4efc3a03425623\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/005b25fa-1626-4ea0-9605-c72d0a1786c7/6735c99bc12178f2db721b883582986c/dotnet-sdk-2.2.110-win-gs-x86.exe\",\n              \"hash\": \"365de8c85f22977d3fda98fe02d15fc3c847b43ce1b447fb9028c062a86c541fd668a48d50633b1ce8e3469b7d219ac68cff33d8b3b064325c66d021d30f4b3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-win-x64.exe\",\n              \"hash\": \"d36edc2cc36e3f1a673cfddc4c5ccfd70806f56604995015678e17ab3ece7cc5a530b4f1dbb9e03f916c5cd0eabd13005219c25259d29528cb4efc3a03425623\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-win-x64.zip\",\n              \"hash\": \"4b702194aa19a3e9659733cae3e32ae1db595924ddeb4d7fb81736242b30c91ed2444b7bc2b588ff4e6a79ec184fd476e0c9a49b37b09bc93085a5b5dcdadeef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-win-x86.exe\",\n              \"hash\": \"365de8c85f22977d3fda98fe02d15fc3c847b43ce1b447fb9028c062a86c541fd668a48d50633b1ce8e3469b7d219ac68cff33d8b3b064325c66d021d30f4b3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.110/dotnet-sdk-2.2.110-win-x86.zip\",\n              \"hash\": \"77072d6eabe0181e7f1ad2dbf95b4d37ffdb8189049785df24d2842e28ce950c9ab52f08b45aa0443c553cb67aa0ef1ed139ba0c4a8364671574a8166d6af482\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.8\",\n        \"version-display\": \"2.2.8\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19109.5\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/aspnetcore-runtime-2.2.8-linux-arm.tar.gz\",\n            \"hash\": \"fab9a1d9d101716337bb153af2ac36429fc387230c0c0bf2d639b31fb7f787bc8dbaaa31f28f9cbe69f117ffc78d8ddb5a5968da0e77785d3c12c6814ef50f7b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/aspnetcore-runtime-2.2.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"139d13a067d91b13f90f488cbb36517a0c629e803e15edbb4fb85443641184c4efd8c83110e32c1a1cc578b95f25e38056e680830288665491b568ea3944db3f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/aspnetcore-runtime-2.2.8-linux-x64.tar.gz\",\n            \"hash\": \"954072376698be69acb7e277df2c243f931e10529def21dcbf9ce277609b30d462126bf8b8b3cab36476bec3d63a927b8e44e59e4d4cade23eef45956fba1ffd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/aspnetcore-runtime-2.2.8-osx-x64.tar.gz\",\n            \"hash\": \"1c969c6cbad8276ae19a64448105d627a43b97f26d4bc65165afecbea684f9f370969be00070fda065e0cd88842f4280e54b181bb32c608f307e68507fd4607c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/aspnetcore-runtime-2.2.8-win-arm.zip\",\n            \"hash\": \"ed0152644d9270010c0470c32e5774c8f542f70bdf09f66665c4c1640c379b3cc4ba38d33ef170e16f606257faa5b696562e3575eb6f372865780b851b39e59f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/aspnetcore-runtime-2.2.8-win-x64.exe\",\n            \"hash\": \"18e3b7fcb645aa5d476d9b06491013b533ba1653015d8dbf90001c917ce48a8a6e93b3d5cea25e38965f5a024f836ef8b99e04892b043b4da850316111d60514\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/aspnetcore-runtime-2.2.8-win-x64.zip\",\n            \"hash\": \"990c1c0e1db6f59b213f4d94c81c212dc39cbbe6a9ae2a0183c1f7947b447e614ac266d78785d0f0fc0451d32e3d3f0b3e5f7415a52d5c7f2e58db38aedda1d0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/aspnetcore-runtime-2.2.8-win-x86.exe\",\n            \"hash\": \"34c648e841ec8a016990d9dab30eac3bf26b0bca1ba2f16b807cb15abd028d951db61be8b1a5f1278ad6a63469908aa7e37dc75717556b660e2fe07c5d4d6cc7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/aspnetcore-runtime-2.2.8-win-x86.zip\",\n            \"hash\": \"a82014bc9ec924668115351d96c1c64754ffdd31ae3bc080ab7b18fd072dc4c127256cb2442b7977cc13014208793bcb2340e575d4af5ac9d12f0c12fe275892\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.8/dotnet-hosting-2.2.8-win.exe\",\n            \"hash\": \"1b3177fc65ec343f641b8ffdc2a0e925e322e90ed44dcb5c6d3982a370dd7b56f7fcc362dad3a4b7e2db4f0fe6878b7e7448fc7f41dfe01302c7484434691f6b\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"2.2.8\",\n        \"version-display\": \"2.2.8\",\n        \"files\": []\n      },\n      \"symbols\": {\n        \"version\": \"2.2.8\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-09-10\",\n      \"release-version\": \"2.2.7\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2018-8269\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8269\"\n        },\n        {\n          \"cve-id\": \" CVE-2019-1301\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-1301\"\n        },\n        {\n          \"cve-id\": \" CVE-2019-1302\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-1302\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.7/2.2.7.md\",\n      \"runtime\": {\n        \"version\": \"2.2.7\",\n        \"version-display\": \"2.2.7\",\n        \"vs-version\": \"16.2.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/51c29196-43b3-47d6-a393-d0df24081ac1/8b8d720b3cd63d88a2fd69115ab713c5/dotnet-hosting-2.2.7-win.exe\",\n            \"hash\": \"137E2DF801EFE520A774B793799A532310BB42C3C13FAA5B5F1E048C4252896DBD776FA55F25CB30E2FF57DAB8492BE37B41A9952EAEEA968E2A449261DE5EE3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-linux-arm.tar.gz\",\n            \"hash\": \"DD961F6FB3B79AF0E31E89FBEBCF8C07531D6006E3B22D4F7167C38D8AF55827B34EBBC59DE903CCA2DAF2CAF30194E72C6410D83807E1FC4E49C6742A8C67AD\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-linux-arm64.tar.gz\",\n            \"hash\": \"BA6A45295736D6520F2FB19DECD89F681D1A1F9BBA46A30183B808B5DE5CA9E7E99D7A964D7D92B6E92D412EAED087742FA3C1C24D54470F8925BD205212DBD9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"E5E5437B57041395BF0AF0B7472A615FB6AAEF72A052A9B16D891CF0E9EA8A9CB09C28E0BF1D0F4808D5B61648324F3AB77DDDCC7E426BA1FB91235A039EAAF1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-linux-x64.tar.gz\",\n            \"hash\": \"5C76EEE6DCF89569B40F5D7E87B2DAA1AC9E924C6C22F37A7A2498BD96266B93AA95B70537218F9BAC6E3992B24D991816AFEB185AC6B29ECD3EA9B85201139C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-osx-x64.pkg\",\n            \"hash\": \"692F5F4ECEE22E1CED1CD910217AC8FDF18E2755FE7AB1548442B1B63E675794C9622C5345433DD6CA60CE23F7D9E56E96335C855136C98A1E47E7E44BC55642\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-osx-x64.tar.gz\",\n            \"hash\": \"F4688582323C4CF18500D3D7509319F960DE77D8DCA8A1787643426BB9FC4B35016C3A8EE4D9086251FC4AEF98D1C317B750ACD70953BE8F493BE209FFBB4898\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-rhel.6-x64.tar.gz\",\n            \"hash\": \"3063823906CF11B5E6E7995457DACEE6CB67C636F1C2A784A70BFB13FE5E3A44A7B81B442A5BA376CB93D6F71695BF1615A4B9F6544C2CD5EAE79439D3FB5BB7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-win-arm.zip\",\n            \"hash\": \"5D1BB8E078D3AD1A62B2C88057E5200E4520853903818210F94F64FD67B1A79E80107852D3681429C3E6A50AF748118D6B4286229A3E6E38A3E97DC66765E020\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-win-x64.exe\",\n            \"hash\": \"866887F8A794558864B779FA25714C2A6BB78B350C7C5DC33EFB74993C3A04C0253665B482B23DBD4CD82B8DF3FCAEB6B718273A1359D130615C73DFFFA872F7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-win-x64.zip\",\n            \"hash\": \"11D93D73B13C6B432526E7E893DD33E0C68E7A46D3E63C55441E707D73570534B2D97BC34E78EEF30CA3BA3DEA8B24E8C85D72432D2782CA187925F0ABA699EB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-win-x86.exe\",\n            \"hash\": \"A8D38F4FAB991886F54EA79947BAAF8B12C77C2BC2C957B95C059376B46A1ECFED1212500441C49F5A85DA78CC7FC8CE06C3672C2D002B00EF0DBA74AEB28B48\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.7/dotnet-runtime-2.2.7-win-x86.zip\",\n            \"hash\": \"E2962840A440FCE318F65D9D30948C0D5485F09C4F22C1F0A09951A26C27C5C34484F7DC88B8F2258FEA5AF1FEAD69CFD55176EE7D779351A3DAD94FBF1239CB\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.402\",\n        \"version-display\": \"2.2.402\",\n        \"runtime-version\": \"2.2.7\",\n        \"vs-version\": \"16.2.5\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-linux-arm.tar.gz\",\n            \"hash\": \"B8F240ACFF5C0371CCFFA483172BD98EA2F202EB884B7AA0C244EFC8FF648193BB565470D51AB74AF56B293989F1D3030BF128CAEF2C8F1C31F30B999C92F244\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-linux-arm64.tar.gz\",\n            \"hash\": \"5DA659FE3DC2CEF7B6447C8947A8974CA2DCEBFC6B785EC5491D87ACD9F81A47B2950EA7EE5A43831BBD7277DF3A83A366F384C5C7B7A2C54F3BA6142DA7AD11\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-linux-musl-x64.tar.gz\",\n            \"hash\": \"E23A41F60AFA72005E3F5B251F855A080786535B7647ECA3D55A8553CE7B3E4AE499150ED936971972A9FE185FBFA674ED4A8A4041FDA5DFC73DDB3405AFADCD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-linux-x64.tar.gz\",\n            \"hash\": \"81937DE0874EE837E3B42E36D1CF9E04BD9DEFF6BA60D0162AE7CA9336A78F733E624136D27F559728DF3F681A72A669869BF91D02DB47C5331398C0CFDA9B44\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-osx-x64.pkg\",\n            \"hash\": \"6C85EF1975E0F1296425D3ECAE4D15A5D123E2BE8AA0879A99B6DF80D5E9AC9022DA35513373D77D02380CB4DEE526D3BB7C8811319E8445F3026ECA2CC9133A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-osx-x64.tar.gz\",\n            \"hash\": \"C5759F35CAE411F5DEC5A7C2DCBE5A5809FA2D4E1467CB9A41380EBACDEEE12D6EA09A72AAEF23B01C7CE6E6910D5A0A348AE95717ED918128507DC5D51970CF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-rhel.6-x64.tar.gz\",\n            \"hash\": \"56C77FA4CA8FC9119270E6C6327096EA3D67CE454A72BD870DE41722FB924AFB5D87964C0474CF03C320B2923B24AA1540FFF064A620A9C84BA5720515CD513E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-arm.zip\",\n            \"hash\": \"3D8E8D1E818418408B5DF807B3FEB1231950A364ACFF8E8455DD6A57C6E3EA26F8C61ABE85A9F86BE64F8BD42264CEF914C488EFDF1D2B5E9A378208D442C54E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-x64.exe\",\n            \"hash\": \"45C43A28A702DF5C1C534A66ED216842B04CA2936932F116FCFD88CE41DD49317C7518B7AAEF2360C758FC86528A8B00CE13116518B9CE6765202DE747D0D38B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-x64.zip\",\n            \"hash\": \"0FA3BF476B560C8FC70749DF37A41580F5B97334B7A1F19D66E32096D055043F4D7AD2828F994306E0A24C62A3030358BCC4579D2D8D439D90F36FECFB2666F6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-x86.exe\",\n            \"hash\": \"D783F027158D06A364F8A0992336FEFE39BA1DE4752E07B81B7FFF9B3966C065B8BE09088E0E050BAC6D388BDFC6F42F8D88303F2ECDF6FFAD7F52D759114CB4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-x86.zip\",\n            \"hash\": \"2F2BADDAA4784F4A7A9C97A0E38E0D5C1AC348716BBF2EE03501896D82B925AB19FC13A515B8B886568652D2C4AA09B345F458662FB576AFFEF77B9AB456D050\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.2.402\",\n          \"version-display\": \"2.2.402\",\n          \"runtime-version\": \"2.2.7\",\n          \"vs-version\": \"16.2.5\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-linux-arm.tar.gz\",\n              \"hash\": \"B8F240ACFF5C0371CCFFA483172BD98EA2F202EB884B7AA0C244EFC8FF648193BB565470D51AB74AF56B293989F1D3030BF128CAEF2C8F1C31F30B999C92F244\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-linux-arm64.tar.gz\",\n              \"hash\": \"5DA659FE3DC2CEF7B6447C8947A8974CA2DCEBFC6B785EC5491D87ACD9F81A47B2950EA7EE5A43831BBD7277DF3A83A366F384C5C7B7A2C54F3BA6142DA7AD11\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-linux-musl-x64.tar.gz\",\n              \"hash\": \"E23A41F60AFA72005E3F5B251F855A080786535B7647ECA3D55A8553CE7B3E4AE499150ED936971972A9FE185FBFA674ED4A8A4041FDA5DFC73DDB3405AFADCD\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-linux-x64.tar.gz\",\n              \"hash\": \"81937DE0874EE837E3B42E36D1CF9E04BD9DEFF6BA60D0162AE7CA9336A78F733E624136D27F559728DF3F681A72A669869BF91D02DB47C5331398C0CFDA9B44\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-osx-x64.pkg\",\n              \"hash\": \"6C85EF1975E0F1296425D3ECAE4D15A5D123E2BE8AA0879A99B6DF80D5E9AC9022DA35513373D77D02380CB4DEE526D3BB7C8811319E8445F3026ECA2CC9133A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-osx-x64.tar.gz\",\n              \"hash\": \"C5759F35CAE411F5DEC5A7C2DCBE5A5809FA2D4E1467CB9A41380EBACDEEE12D6EA09A72AAEF23B01C7CE6E6910D5A0A348AE95717ED918128507DC5D51970CF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-rhel.6-x64.tar.gz\",\n              \"hash\": \"56C77FA4CA8FC9119270E6C6327096EA3D67CE454A72BD870DE41722FB924AFB5D87964C0474CF03C320B2923B24AA1540FFF064A620A9C84BA5720515CD513E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-arm.zip\",\n              \"hash\": \"3D8E8D1E818418408B5DF807B3FEB1231950A364ACFF8E8455DD6A57C6E3EA26F8C61ABE85A9F86BE64F8BD42264CEF914C488EFDF1D2B5E9A378208D442C54E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-x64.exe\",\n              \"hash\": \"45C43A28A702DF5C1C534A66ED216842B04CA2936932F116FCFD88CE41DD49317C7518B7AAEF2360C758FC86528A8B00CE13116518B9CE6765202DE747D0D38B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-x64.zip\",\n              \"hash\": \"0FA3BF476B560C8FC70749DF37A41580F5B97334B7A1F19D66E32096D055043F4D7AD2828F994306E0A24C62A3030358BCC4579D2D8D439D90F36FECFB2666F6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-x86.exe\",\n              \"hash\": \"D783F027158D06A364F8A0992336FEFE39BA1DE4752E07B81B7FFF9B3966C065B8BE09088E0E050BAC6D388BDFC6F42F8D88303F2ECDF6FFAD7F52D759114CB4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.402/dotnet-sdk-2.2.402-win-x86.zip\",\n              \"hash\": \"2F2BADDAA4784F4A7A9C97A0E38E0D5C1AC348716BBF2EE03501896D82B925AB19FC13A515B8B886568652D2C4AA09B345F458662FB576AFFEF77B9AB456D050\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.2.206\",\n          \"version-display\": \"2.2.206\",\n          \"runtime-version\": \"2.2.7\",\n          \"vs-version\": \"16.0.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-linux-arm.tar.gz\",\n              \"hash\": \"60EF56E5B7E9E940954746294F570790D87602AAFD8B3541343ACB78DD786DB1705247A464750EDB7021F21B5B5E4B3EDD007E5A925399849FA1FCD909543680\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-linux-arm64.tar.gz\",\n              \"hash\": \"D7B0F75A3703C7D8CED3D72D5709E257C4B8CDFBA6845E9E65D63878C36DA1F5633A28D1FF754D1015D1E80CA2B410D5B1341A1B35033154E85D8200F4290D70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-linux-musl-x64.tar.gz\",\n              \"hash\": \"19BA7BFC5BDE4D6FD4768FF89C2DD85C8C06E2B24045395FB866DEC77F2971A93D79CBF8C076F78320E7F19548BC8AEDEE6E1CED6D3F30D9D6162A2283F7CB84\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-linux-x64.tar.gz\",\n              \"hash\": \"6D036347ED835062106A906316EFC061B46CDDB8728C839C69F564F1797C0C06CFF43C9D223D16034FFA0BB34AB1403DAD1B67D7EBC1AEC3429E342A2E4073F3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-osx-x64.pkg\",\n              \"hash\": \"78ABA33A2A6BEF6A15B665193B787B392FBC851903DE01EC037E053CB3EEAED67AEC187E74A2B5A7C8393442A6F202C07A6512B941321D77E9A6FDF0FFD35CCA\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-osx-x64.tar.gz\",\n              \"hash\": \"CC931080EC2287077780168FCB210F4E1B825A141D89839F8C09582E801ED2EB932B7F2D48B0ED18A456951709CC92715C1FF660614F017D9DD4B54E304D7E2A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-rhel.6-x64.tar.gz\",\n              \"hash\": \"9E58ABCC7D997B1A22FC1114111BE2D5619360FD0498A8E4B0E8CFB9E0A028AD60B0C14DC7C981386D1E69BB8AB1F26623AE3B7CB7B900CA96DC9651E6FDFF50\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-win-arm.zip\",\n              \"hash\": \"7216A555B60994FDEA27D82C0195A7C8609196B20A46219B01F11F5C7A4369332373ACACA0B00B981590BF69ABEE9C35EDC46307883583DEE67144124713B1DF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-win-x64.exe\",\n              \"hash\": \"EC0B29EFF6FCE461450CDCC218CCE13AAB365D1B406B6186DCA03C8E462911C2CED624D78645EF7E78E47AD825645E473D2BF54C99B49022859602007832E7C9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-win-x64.zip\",\n              \"hash\": \"4DB220894B87245BBADFA51A2244F290F0781763141149748FB255EB1DABC03113FEBE704DEA0470EFC0BFD5FBE06AD0842C50F79E618ABD3FF601D1DFCF9778\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-win-x86.exe\",\n              \"hash\": \"00C5BCD92FB12E1A52846293E72455F8648EFF34E341FF15B2642DC2BEAB43418D0E3A8FB42004BABCD484A814337C19050E615C4B8C7153248173E270B8CBE7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.206/dotnet-sdk-2.2.206-win-x86.zip\",\n              \"hash\": \"D9D4DB0A9B52EE5E54C0933FD9BC4D88A245E592C9BCD0841BC5C84070E8968A5ADB1162254932C2E7CEBDF7816AC9E8A2489E548EC04D7220610F26535F5F2C\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.2.109\",\n          \"version-display\": \"2.2.109\",\n          \"runtime-version\": \"2.2.7\",\n          \"vs-version\": \"15.9.16\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-linux-arm.tar.gz\",\n              \"hash\": \"0C64E16CFCA8F257E35F8798ED314284EB89ED97C6BDA66250E3924ECCD64A146F25AA163831097718494EAD0F987F19512DA9D7A762322086A6B86E817BC953\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-linux-arm64.tar.gz\",\n              \"hash\": \"EBDE07EA85706D36DAE5CC1A22FB6455B3E0F9435B4566533A7764E2B9DCE8BF69A86B65AFF6F989CBF24031F83D20057C5DF39250DFAE66119D7EC2DD726ECB\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-linux-musl-x64.tar.gz\",\n              \"hash\": \"3038915B12E999A271C34CB50D3E95CABB74FB22A951DFFA7CC96013C8318B2785EAEA92113842CEEDB24341F8B0F19820AF48220169052D8717B9C9B9229270\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-linux-x64.tar.gz\",\n              \"hash\": \"9C278FDCA7C987A5D210A28BFF2E4450F0C89ED18874CEC3C9AED463FCCFC486143C01ED150DAEA32B9FC07719345274CA6656A648F7CD50FFBA7DD86C350D7C\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f3749dee-8f04-4d12-9202-ba591b229f70/64478b5eceac229a885b789c8def5df1/dotnet-sdk-2.2.109-osx-gs-x64.pkg\",\n              \"hash\": \"1D868EC01F7343EC1068F88211A0CAF2BBB3A159264E1F0D9E6C9F98F1333EA9C91F0DEA41720904E2A3113637714041C0C7A8DD3EBA6067298634A8245DC184\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-osx-x64.pkg\",\n              \"hash\": \"1D868EC01F7343EC1068F88211A0CAF2BBB3A159264E1F0D9E6C9F98F1333EA9C91F0DEA41720904E2A3113637714041C0C7A8DD3EBA6067298634A8245DC184\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-osx-x64.tar.gz\",\n              \"hash\": \"ADC5CCD4A462ED6C57AEA1EDB0A4B1AA5CC5CE26C3DE0E8C384D9D8EC887E370AD3174F9CA2B3B1FC8C1E794612A88E363F661404DC6B07160C931CE8F1181C9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-rhel.6-x64.tar.gz\",\n              \"hash\": \"37F8D1D846F00E9BF6EAD5B4412930663C196979A9122E03DB018A5564D7254C9A8C07E620529D5DB8C1D7286DBF60EEABCB2949150F5133A78DC237B5037336\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-win-arm.zip\",\n              \"hash\": \"F3AE6C4A6A8A729AC94885925D8D6EBC8A8A63338E085F22E2362A783D37BFFC61BFF6D978DED96D1AA9F42960E29829A802CE2480523C270E5E3E71F326CF9F\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/164143f8-f23f-4875-b1b1-a0379dab8438/d40197e47da84d7659b31e461703020a/dotnet-sdk-2.2.109-win-gs-x64.exe\",\n              \"hash\": \"5D8EEB42696023BB8527E2A30AAE7003E931C3218A4E90B53176C87FDBF7FC7B416E6E593FF919C14F038BE87A461A881A527A6A6585C54B1BB15892289AB307\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/96c29ac0-e893-497a-a1a9-27d3fd1ddbc9/6143b152b3ab2bcd1e1b44236b635da0/dotnet-sdk-2.2.109-win-gs-x86.exe\",\n              \"hash\": \"898108575D988B47B2A44169E6563CFEEC565773549F76013C48440F8A02D4CE474987856EE828CC9E499B558B4C4F0F23B29DE58D9D17624FF52BC25C9F627B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-win-x64.exe\",\n              \"hash\": \"5D8EEB42696023BB8527E2A30AAE7003E931C3218A4E90B53176C87FDBF7FC7B416E6E593FF919C14F038BE87A461A881A527A6A6585C54B1BB15892289AB307\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-win-x64.zip\",\n              \"hash\": \"143AE01A7C1DB63A7C8895D52518DBE8F22C9FC771D4B8F84DB19293F2D12F100567152C84A9E97306557F9D7D5CBBA359A7AD4695E6047C7303A818BD781738\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-win-x86.exe\",\n              \"hash\": \"898108575D988B47B2A44169E6563CFEEC565773549F76013C48440F8A02D4CE474987856EE828CC9E499B558B4C4F0F23B29DE58D9D17624FF52BC25C9F627B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.109/dotnet-sdk-2.2.109-win-x86.zip\",\n              \"hash\": \"C4A729BCE9F3FFEE3EB0D6E1F73D3E91A2995922091F50E5C6C26A5E4B98C63FEA8506146A6B35AC57D23E00E9C8FA5DD2912EC5A944C64340486B519D75723F\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.7\",\n        \"version-display\": \"2.2.7\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19109.5\"\n        ],\n        \"vs-version\": \"16.2.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/aspnetcore-runtime-2.2.7-linux-arm.tar.gz\",\n            \"hash\": \"A83218B2AF302B106951CD27D369CD98E39FC9B96F51BD63903EEBF985C51C672553EA11C64D84C503A9F5E41EFDFB981951E4FDDD73EB268FB5D2CAA4FFB3AD\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/aspnetcore-runtime-2.2.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"D3C1CC27998FC8E45FBF0C652A8D8694E999A3CD5909F83FB11B1E5CF713B93F4E7614C4B74C92D6C04F0B0759373B6B6FF7218D9D143D36BB9B261EF8161574\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/aspnetcore-runtime-2.2.7-linux-x64.tar.gz\",\n            \"hash\": \"3FDC874A20D5CD318DEABF12D73D26BD1F9B767CF351D05BFED5EFC6D66C1D774EBD911D7DC28A5A7F6AF9976D50068B217EF051024D3C91496D4A44B89B374A\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/aspnetcore-runtime-2.2.7-osx-x64.tar.gz\",\n            \"hash\": \"6F2E71E7CE1F95920F39ED4B4FBA638CA9C5A5363F7033D074FB0A0AEC1AFABB84E7CB965D6823487EE6CA2DE2D31830F60F423930E004AC1AC1B28109729553\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/aspnetcore-runtime-2.2.7-win-arm.zip\",\n            \"hash\": \"4F01E91C4467B86D2053AA19D1B0D58FB31A7270BC2C6984BC5EFF09419A7A1843FBDF123B9FBAC23B5A4A92D3F3C5AB5CD26BDF5A0B835A0F732650816257B5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/aspnetcore-runtime-2.2.7-win-x64.exe\",\n            \"hash\": \"ABBFDFAFE9C7EABFAD548A1623604D3CF4984C4ADAC16DF6D08FC37CA8087A21EE07F70F653D53E511D8374D4E342249A1BDE32C80C701291D0E033A2CC444E7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/aspnetcore-runtime-2.2.7-win-x64.zip\",\n            \"hash\": \"3EE683CE3D4F2EEC43A7F9F4ED5172763C121564663A7ED23751A276A9452C7ACC253ACC98079494EFF8455A1A6A8E68981A435AAC9F66C97A2CDACB94EC1EC9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/aspnetcore-runtime-2.2.7-win-x86.exe\",\n            \"hash\": \"10830FED328E98E3156497389B50B3C1E4AECF896B902AFABCD29223911593A4B0A90689430D943CF15431B09090F407450BAAC1FC40DF7597790C7A9F67B11C\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/aspnetcore-runtime-2.2.7-win-x86.zip\",\n            \"hash\": \"A7AEA44BB771D976322BF4D65BB40CE512C3EE886D1038847486E5E9DABF00CD0E565EEDFC11B57D35515E6C1CCB5281FE591B17B23B2E5FB0712A6934D443A0\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.7/dotnet-hosting-2.2.7-win.exe\",\n            \"hash\": \"137E2DF801EFE520A774B793799A532310BB42C3C13FAA5B5F1E048C4252896DBD776FA55F25CB30E2FF57DAB8492BE37B41A9952EAEEA968E2A449261DE5EE3\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.7\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-07-09\",\n      \"release-version\": \"2.2.6\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-1075\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-1075\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.6/2.2.6.md\",\n      \"runtime\": {\n        \"version\": \"2.2.6\",\n        \"version-display\": \"2.2.6\",\n        \"vs-version\": \"15.9.13, 16.1.3, 16.2.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-linux-arm.tar.gz\",\n            \"hash\": \"D61B66A6663676F04FB1AE19129D793109DB7BB1BF88DC9FBA32257B214B852B3579DA2114E41A7103392871CE62E1B93E9CA99F57B79804C72DE06D52168ACB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-linux-arm64.tar.gz\",\n            \"hash\": \"55A14B94AE5B981D8AC6218EDD2D8119776E778F094071FCF0F9E42AFFEB3992552D31840A7368FD9C01E8B23566651D02BA88CDC9E38B46B91ACC4E485D6663\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"C4F45AB88FFDA26B30C53B1DB03E50FE0EAFF92D6DD5DAFF05F4E019FC111405D016A787CADCB3A61DF4E973D297A1F63BA2535F3802EFF83B2E81B3C31CF0F9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-linux-x64.tar.gz\",\n            \"hash\": \"8AF7A39407B4A3503A7C6D83106336140EEEF2BC24DECF1B817C7D5A3E5596C8CEFED8F211019148CD89A31759D851836DD6147E544B8C1D183DCFBD5A8D4636\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-osx-x64.pkg\",\n            \"hash\": \"EA47F0D890FB90715564D33E2E9FE7CF3B152D01E6F777B37973D93FFE4FEAA9F786517461D6D4CE5142C31C571B22DEEE3CD20A1172386C62DA8DCBEA3060CA\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-osx-x64.tar.gz\",\n            \"hash\": \"A703476B817D355A16748F94DBF9BD4C4FAF3F51A299BAD2E77D2435796921E72247041EFD7E8BB154874FC9A7DDEC83586C1275C6F7C61DA283613B1CD8A7D1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-rhel.6-x64.tar.gz\",\n            \"hash\": \"59D095813535F943D5A74100377F0B07117A4BAC663DE108E0D8B80E2D7B1DE6E7E040EBA78BAF856443AD8E9517155C5C8AE1CC526B91E1CA9E60D56D803026\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-win-arm.zip\",\n            \"hash\": \"703F84F84A441A20F09A68F07F7DF15D99C6552840B3C3247B16EEBD668D40BF1E8E1C904341C1A371B3FF50AC6C2D4B016C3560225419AC2BDDCDCEABB62970\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-win-x64.exe\",\n            \"hash\": \"C6C399D009E2D742C55E467E351EDF23E64832D8559E6A07005215DB465A75DFE08A1B46828C58EB9929C6051161555F790EB6059FBD1F046CE67A7F3091E57D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-win-x64.zip\",\n            \"hash\": \"B4AD5FDC9729E4BE5BDA5CFA7D7EAF9967C7792E099FF139E08B4617118E0EC7C62F0252A235F9B3E861E3014795C4BBD75E1EDDA0D284567F456D935CD02D14\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-win-x86.exe\",\n            \"hash\": \"886FB3A42954D8181A77429140B6DEA49B00783D48CDBB0AEE621F2436C4DD09D6E43EE08FE98CC5EDE9B17A630DFF0FB68761F3EAD74673200066FEB83F0E5C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.6/dotnet-runtime-2.2.6-win-x86.zip\",\n            \"hash\": \"D99714079D73A45C7E8413B7F4A7050B436BD6621006FD59919699BBFAEEACD21BF703000D4ACC7DBA04B67A96372A0272E3C38AA19F66E3A426B2B6A17FB6BA\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.401\",\n        \"version-display\": \"2.2.401\",\n        \"runtime-version\": \"2.2.6\",\n        \"vs-version\": \"16.2.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-linux-arm.tar.gz\",\n            \"hash\": \"272E58DCE530FCB7EA953324503021A1D20447AD756AEA98FFB4F71E8B5913309399EB0FA3CBF2CB0822BC5B4DA15149FE21ACA98956B8859EE8237A55ACE36E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-linux-arm64.tar.gz\",\n            \"hash\": \"B9BC12DEA3DC688A3568E051B3A20F643F0D7C789E1637B29ABB1ACEE76A288385A5E743725C766BBD1AC9D058FA9F863D5C76C1EDF8554EBEEFB720FEE735E8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-linux-musl-x64.tar.gz\",\n            \"hash\": \"89BA545C35154D7B5D40480148AFF245D624CE287BE4C52711EE987167FEB9688B8BEAC92E607885B9E66A8228981DF05B41E9846B6810449E8C05E170389619\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-linux-x64.tar.gz\",\n            \"hash\": \"08E1FCAFA4F898C80FF5E88EEB40C7497B4F5651AF3B8EC85F65A3DAA2F1509A766D833477358D3FF83D179E014034AB0C48120847EF24736C8D1A5B67FEC10B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1045a7f9-5585-49b6-a138-34717f2a7e9f/bd24b2ba41dfcd0a8ec8271caa6f38e4/dotnet-sdk-2.2.401-osx-gs-x64.pkg\",\n            \"hash\": \"666E56CD4E24E6123C49A6F11AFA2FFCBE99B63B9CECB0F8AFEAED80C4016E8AE9C1498D7E46DA969583B1E83F21CA558DD88961FC2657EBF40A66024BE927CC\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-osx-x64.pkg\",\n            \"hash\": \"666E56CD4E24E6123C49A6F11AFA2FFCBE99B63B9CECB0F8AFEAED80C4016E8AE9C1498D7E46DA969583B1E83F21CA558DD88961FC2657EBF40A66024BE927CC\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-osx-x64.tar.gz\",\n            \"hash\": \"905FC6FB47B515BEC7A5624DABD5012518792B84BA05BA4BEE48F856563D653AC1421C2434A48803018DA30029288BDD8ECE289964528B9B11515E14F9C7E068\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-rhel.6-x64.tar.gz\",\n            \"hash\": \"0DF9813B6618642B97E07750703787D1A3D3D3DF1B2D20AED7B9A1A0AF73CC85ED6813BC9CE7944408E69F63CDA89F44443F1208A87A35B7744CD1E6F57736ED\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-arm.zip\",\n            \"hash\": \"7D86F535F68461EE4EB6FB3C00B330EB129C522A7687830FB563112EB34AB42CEE698167BF6A4B9A00110DCCAC4E66A2B1F900F00EF03862CAB7BC75123721F1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fd368d43-d681-46b1-9e77-2d812f2f14ae/5bd60381d60f36aa4529934c7a83c0cf/dotnet-sdk-2.2.401-win-gs-x64.exe\",\n            \"hash\": \"D9308187C65E6B82E63777A2B9CF53FBEFAC8819A136375B4D40AB9DE95EB453A2F3C9133DFB4BF24C0C5C9E9D921ADFF842BA6951B9CB1BEBAE5B15CA41FDC0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a5b2e438-e413-455a-8c16-07adf9d68239/ee2389254ead8a449defb8b59c340ffe/dotnet-sdk-2.2.401-win-gs-x86.exe\",\n            \"hash\": \"2AC8D34162F3A69251E09E1ED2126C76316153585FF8525E6117D031E908E24BE71B138E96529A7ED588DA6EE37CD625CEEFF971E8B10326C3C5A80051258B10\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-x64.exe\",\n            \"hash\": \"D9308187C65E6B82E63777A2B9CF53FBEFAC8819A136375B4D40AB9DE95EB453A2F3C9133DFB4BF24C0C5C9E9D921ADFF842BA6951B9CB1BEBAE5B15CA41FDC0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-x64.zip\",\n            \"hash\": \"ED83EB5606912CD78D7696FBDC8E8074AFA95FDA84EEC57B078D7371848AD15FE91AAF521B85E77C69B844A7B036A2C0B7B6CAC87A8E356643980D96B689AF93\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-x86.exe\",\n            \"hash\": \"2AC8D34162F3A69251E09E1ED2126C76316153585FF8525E6117D031E908E24BE71B138E96529A7ED588DA6EE37CD625CEEFF971E8B10326C3C5A80051258B10\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-x86.zip\",\n            \"hash\": \"DF31F54A77DFF9855E7E1EAE2E0BCFE81E6FD3DFC6BAEE28FA7AF26BEF9B647BD6BB20A9EB69C98DF65ADA04EE74C4DDC1BC35A0A120265F8E846A65A4CB0534\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"2.2.401\",\n          \"version-display\": \"2.2.401\",\n          \"runtime-version\": \"2.2.6\",\n          \"vs-version\": \"16.2.0\",\n          \"vs-support\": \"Visual Studio 2019 (v16.2)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.6\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-linux-arm.tar.gz\",\n              \"hash\": \"272E58DCE530FCB7EA953324503021A1D20447AD756AEA98FFB4F71E8B5913309399EB0FA3CBF2CB0822BC5B4DA15149FE21ACA98956B8859EE8237A55ACE36E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-linux-arm64.tar.gz\",\n              \"hash\": \"B9BC12DEA3DC688A3568E051B3A20F643F0D7C789E1637B29ABB1ACEE76A288385A5E743725C766BBD1AC9D058FA9F863D5C76C1EDF8554EBEEFB720FEE735E8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-linux-musl-x64.tar.gz\",\n              \"hash\": \"89BA545C35154D7B5D40480148AFF245D624CE287BE4C52711EE987167FEB9688B8BEAC92E607885B9E66A8228981DF05B41E9846B6810449E8C05E170389619\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-linux-x64.tar.gz\",\n              \"hash\": \"08E1FCAFA4F898C80FF5E88EEB40C7497B4F5651AF3B8EC85F65A3DAA2F1509A766D833477358D3FF83D179E014034AB0C48120847EF24736C8D1A5B67FEC10B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1045a7f9-5585-49b6-a138-34717f2a7e9f/bd24b2ba41dfcd0a8ec8271caa6f38e4/dotnet-sdk-2.2.401-osx-gs-x64.pkg\",\n              \"hash\": \"666E56CD4E24E6123C49A6F11AFA2FFCBE99B63B9CECB0F8AFEAED80C4016E8AE9C1498D7E46DA969583B1E83F21CA558DD88961FC2657EBF40A66024BE927CC\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-osx-x64.pkg\",\n              \"hash\": \"666E56CD4E24E6123C49A6F11AFA2FFCBE99B63B9CECB0F8AFEAED80C4016E8AE9C1498D7E46DA969583B1E83F21CA558DD88961FC2657EBF40A66024BE927CC\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-osx-x64.tar.gz\",\n              \"hash\": \"905FC6FB47B515BEC7A5624DABD5012518792B84BA05BA4BEE48F856563D653AC1421C2434A48803018DA30029288BDD8ECE289964528B9B11515E14F9C7E068\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-rhel.6-x64.tar.gz\",\n              \"hash\": \"0DF9813B6618642B97E07750703787D1A3D3D3DF1B2D20AED7B9A1A0AF73CC85ED6813BC9CE7944408E69F63CDA89F44443F1208A87A35B7744CD1E6F57736ED\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-arm.zip\",\n              \"hash\": \"7D86F535F68461EE4EB6FB3C00B330EB129C522A7687830FB563112EB34AB42CEE698167BF6A4B9A00110DCCAC4E66A2B1F900F00EF03862CAB7BC75123721F1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fd368d43-d681-46b1-9e77-2d812f2f14ae/5bd60381d60f36aa4529934c7a83c0cf/dotnet-sdk-2.2.401-win-gs-x64.exe\",\n              \"hash\": \"D9308187C65E6B82E63777A2B9CF53FBEFAC8819A136375B4D40AB9DE95EB453A2F3C9133DFB4BF24C0C5C9E9D921ADFF842BA6951B9CB1BEBAE5B15CA41FDC0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a5b2e438-e413-455a-8c16-07adf9d68239/ee2389254ead8a449defb8b59c340ffe/dotnet-sdk-2.2.401-win-gs-x86.exe\",\n              \"hash\": \"2AC8D34162F3A69251E09E1ED2126C76316153585FF8525E6117D031E908E24BE71B138E96529A7ED588DA6EE37CD625CEEFF971E8B10326C3C5A80051258B10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-x64.exe\",\n              \"hash\": \"D9308187C65E6B82E63777A2B9CF53FBEFAC8819A136375B4D40AB9DE95EB453A2F3C9133DFB4BF24C0C5C9E9D921ADFF842BA6951B9CB1BEBAE5B15CA41FDC0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-x64.zip\",\n              \"hash\": \"ED83EB5606912CD78D7696FBDC8E8074AFA95FDA84EEC57B078D7371848AD15FE91AAF521B85E77C69B844A7B036A2C0B7B6CAC87A8E356643980D96B689AF93\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-x86.exe\",\n              \"hash\": \"2AC8D34162F3A69251E09E1ED2126C76316153585FF8525E6117D031E908E24BE71B138E96529A7ED588DA6EE37CD625CEEFF971E8B10326C3C5A80051258B10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.401/dotnet-sdk-2.2.401-win-x86.zip\",\n              \"hash\": \"DF31F54A77DFF9855E7E1EAE2E0BCFE81E6FD3DFC6BAEE28FA7AF26BEF9B647BD6BB20A9EB69C98DF65ADA04EE74C4DDC1BC35A0A120265F8E846A65A4CB0534\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.2.301\",\n          \"version-display\": \"2.2.301\",\n          \"runtime-version\": \"2.2.6\",\n          \"vs-version\": \"16.1.3\",\n          \"vs-support\": \"Visual Studio 2019 (v16.1)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-linux-arm.tar.gz\",\n              \"hash\": \"A7C30EA64C135C9D414B55611198A9432D790B8B811C8AF68241174BD614FBAFE6DD35B72890DF6B7A098D570878FF8854F8BF42215696F67F5E376E2FB1D6CF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-linux-arm64.tar.gz\",\n              \"hash\": \"2C56C559E7FA73F3F875B32632FFA4E3259616694DA0438A292016E752053FAF4C41A5D88F998634F702113E0D7962FD3A0F70FC925895BC809B2F3FDB35AC68\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-linux-musl-x64.tar.gz\",\n              \"hash\": \"B0C7B73E39AC38920F332EAA91AC615226A38A2250F16071E55BF432C3E7B0BACA038B29976CC42928E7E3512300AB1F2D13B1ADBF39FE286E97738377A9E3C3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-linux-x64.tar.gz\",\n              \"hash\": \"63C54261B58B8D5E56326D0EFB2EF3B25F120AE16E49F7BD470537DA9CDDDF96B1E0B6288C159EC808BD0B7E2CC9C93D0DF2E4122948995E74A797C04098C599\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/19f39d7d-3296-4ed2-af75-f0190d074d43/84949e2b33ccdc6b7c51d5835df2844e/dotnet-sdk-2.2.301-osx-gs-x64.pkg\",\n              \"hash\": \"675D5539901D8247B251CAB3C054A5FDD95F1D95C3E3479CA9325325227D590AFC2CF5E3D86744D2E59AE567582A05F1A212D73A5BF4F161CD6A3D8653AC61AA\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-osx-x64.pkg\",\n              \"hash\": \"675D5539901D8247B251CAB3C054A5FDD95F1D95C3E3479CA9325325227D590AFC2CF5E3D86744D2E59AE567582A05F1A212D73A5BF4F161CD6A3D8653AC61AA\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-osx-x64.tar.gz\",\n              \"hash\": \"01C228BC1743AA2533418FB114AA5F4D7AF3D4AB4BC0CD712B2E31472C9321A9C83D9C6A1F25A25B1345CB15FD1F370E94DD12AE2B0E715F63F4E33535B4CD19\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-rhel.6-x64.tar.gz\",\n              \"hash\": \"A647C0CE1F79779FF04701780DCD9FD2D6206E3D9FFC5E590B53D7269591B4CB45189893E349F1AE3E93EF4E144CEFAB1DA9B8E80C0A67CBA9889E3AFF5EBDEB\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-win-arm.zip\",\n              \"hash\": \"307A781041BAE1EFAA56B5CAE4EECF19E82268567204C5303C21E512A53FB06B0DB1891D09E79D2D61B320F34CA2402824BC533277D4FF82BC78A112BDD8F4FD\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9f2372bd-6630-4da0-b5ff-7f3363a0111b/cd48423b1c7b4985ea213dcf551786d9/dotnet-sdk-2.2.301-win-gs-x64.exe\",\n              \"hash\": \"DF3B007439AE965941AFB54900B3AEBF740C88B4E9907D2A178D16A6DC776E0C95627A1F29476C324953A8DA7DF0BAAE5EADAE643446FB319DCF10544FD658A9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cad41544-4702-4236-997a-b67f8fd71d3a/5ce6ba16d1fc142f2819f8bd65e1b628/dotnet-sdk-2.2.301-win-gs-x86.exe\",\n              \"hash\": \"66170E7C84C1082B957857B6841432AEF1CA0E2ACD2CD3A5ADBEFE2E0F9840C69A158AE66A54B2E1605C99B81C92064AD62290B1F97D2A361DB7BED705F2BF06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-win-x64.exe\",\n              \"hash\": \"DF3B007439AE965941AFB54900B3AEBF740C88B4E9907D2A178D16A6DC776E0C95627A1F29476C324953A8DA7DF0BAAE5EADAE643446FB319DCF10544FD658A9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-win-x64.zip\",\n              \"hash\": \"2F7BAAA7CA994A0F6550879DA66DAB67B4799DC634354C2CE746F2E107F35FB931536E8B19C85620A1A400A33E71B6B1B03BF373632A1D338C6B737A2A9CC81B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-win-x86.exe\",\n              \"hash\": \"66170E7C84C1082B957857B6841432AEF1CA0E2ACD2CD3A5ADBEFE2E0F9840C69A158AE66A54B2E1605C99B81C92064AD62290B1F97D2A361DB7BED705F2BF06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.301/dotnet-sdk-2.2.301-win-x86.zip\",\n              \"hash\": \"9F01B6EB1185D3136AB787AE9CBC79527B009BFF92F4C2EBB82804B10CD2156002365F06ADCF0EEE9101BDE1CA3F403FA3A4FF16E44EB0D3FD20C8C0FBD19A77\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.2.205\",\n          \"version-display\": \"2.2.205\",\n          \"runtime-version\": \"2.2.6\",\n          \"vs-version\": \"16.0.5\",\n          \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.1, v8.2, v8.3)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-linux-arm.tar.gz\",\n              \"hash\": \"40FB989D9A3740DE4A107D572D42B068EC7B863FCE5D22EFF2DFB9C4D576E602AD47A6CE33ED4661FC9BF5C91C5820F107B1BE8F7A56B3A1ACED8D65432E979A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-linux-arm64.tar.gz\",\n              \"hash\": \"343636754E043ABA0D83146AF3B80C1075D08BF9EDD55D8DE7DD157818195052708F416C568AEE1D5F52B7F613920BD993676B6688102CE0FFC2DC218D0A54F3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-linux-musl-x64.tar.gz\",\n              \"hash\": \"DF5275994EF27B34D3D2661DD085161D21263712965B87A9C4659A9F235942AC25B74A6850AB2823B25411B693F018204BFD7FF065617F36F3B00DB944AC4AF8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-linux-x64.tar.gz\",\n              \"hash\": \"C4E39BADE72F4D22937CC89CD8466D5C3F4C10EBB1646C43A0302C6CD4547113EAD803A4653457A6C482EAE059DB1FC4686CB80383DF33B392BEA4D0486C583A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ba52b765-d00c-4529-be56-869f1f4b9760/d7ba35b708debe49ac32bd1c9d2d9612/dotnet-sdk-2.2.205-osx-gs-x64.pkg\",\n              \"hash\": \"CF8372A1DF594DC97A5CB140392AC1EFDC4F0ADFFAFCEBD9486AFE3BA5D2494CE6A2F80C3996DC62066439AEDE2A1D0CF6948D4217DEA0E13C80F9EB083A0943\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-osx-x64.pkg\",\n              \"hash\": \"CF8372A1DF594DC97A5CB140392AC1EFDC4F0ADFFAFCEBD9486AFE3BA5D2494CE6A2F80C3996DC62066439AEDE2A1D0CF6948D4217DEA0E13C80F9EB083A0943\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-osx-x64.tar.gz\",\n              \"hash\": \"16DBE92252B00204E4655CF2357367F010B1360C562F8E16471BEB7BF1094C59B1E8F33ECB8F5AEB184B2B2B5F3C0F198753640CA246B3AD7DC56539B3B0B939\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-rhel.6-x64.tar.gz\",\n              \"hash\": \"B91A7D96AB29BA25CC66B33C3168733071AC62C2DF390A7ACB8158587F0EE03497969A9400876E1B018C2D35611F7F541DC82A097B69B5182CF0D5E859533C73\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-win-arm.zip\",\n              \"hash\": \"9797767F2F274A67E6C6BC3A130AFBD802354E1868F095F8AAA6C404F50D69252A8D39302A8197D380B22C6FFE55B40FF1BFF6AEF1C29E72DFFC251BE57B1D6A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-win-x64.exe\",\n              \"hash\": \"2EC0B77CFC05A46B97131174450A04EC91934A47712046017FE85602969A4C623D48244E8DDEFBB43F84AE567A5FD884AD82975CA01ADDEFC73DA807A90F1242\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-win-x64.zip\",\n              \"hash\": \"089532600475D49D24031D66FAE8E1A6B94B56AEAD51A19B1EFC8B666BE64A94C574F8DC0D7B41441C5C2DAD1EE656471517F18E89ADE517D969319979BFCA3D\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-win-x86.exe\",\n              \"hash\": \"27CE7E413137805369F79105144969492A2D26BFBDC11D358E8EF100D16B20D457AB0BF0F5EFDF34D2D8F4738196713C33600C37F4F497803B7667B9E0F2D57E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.205/dotnet-sdk-2.2.205-win-x86.zip\",\n              \"hash\": \"26E7C988E831D66ED17413201D2DB09E00F18DC320541C97F46AD8593820D1B333828B8D1E4A2C4933B6C0A27DA6689E0B20148F8CFE13B2CEF3775669737838\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b13f248d-975a-423d-a65e-2482324a6083/38b086260fdaa2fa8b22fe20b76712bf/dotnet-sdk-2.2.205-win-gs-x64.exe\",\n              \"hash\": \"2EC0B77CFC05A46B97131174450A04EC91934A47712046017FE85602969A4C623D48244E8DDEFBB43F84AE567A5FD884AD82975CA01ADDEFC73DA807A90F1242\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/46e2565d-953a-46bf-90b7-146d77df4be1/bbe3ed72b4d3ab2b2fbd25ab02517415/dotnet-sdk-2.2.205-win-gs-x86.exe\",\n              \"hash\": \"27CE7E413137805369F79105144969492A2D26BFBDC11D358E8EF100D16B20D457AB0BF0F5EFDF34D2D8F4738196713C33600C37F4F497803B7667B9E0F2D57E\"\n            }\n          ]\n        },\n        {\n          \"version\": \"2.2.108\",\n          \"version-display\": \"2.2.108\",\n          \"runtime-version\": \"2.2.6\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n          \"csharp-version\": \"7.3\",\n          \"fsharp-version\": \"4.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-linux-arm.tar.gz\",\n              \"hash\": \"AFAEF66AA8FD821C0334E88F30B49EA8ED83ED3CB60C6FBED832EF0E6D57F99D2DDCEF8D475EFC6963E7DEB09A24E5EABBD9393B5142EFD063AAD21F667D6FA9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-linux-arm64.tar.gz\",\n              \"hash\": \"D3F3B9F25BA21D5CDE7D1257A8BBC9F2BB03115E474B802982DE71C60D9917C49C006ED0107B98D1D8A891815BB9901DFBDF48D71A53CA8EDC47F53A4DCB647B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-linux-musl-x64.tar.gz\",\n              \"hash\": \"A03BA856577E075CF4477C1754365F3B987089341CE931E4D1E0560830F93262A29E773FF4BDE1012FC66FCFE94F075D13013F41E3D707ED118CC33238D759D0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-linux-x64.tar.gz\",\n              \"hash\": \"41E33CC55819D26E0E0E71E0D3EA8FD4745E0DF5EF696F647ADAF5CA02308BEEE3DF17F5C953D116AA724089FBFED0A01EFF8598A62B0245DF370AA127005F6A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a281b5bb-df95-47ee-b8eb-87fc6c27fccb/300134bccc0f0d49b4710e39befa294f/dotnet-sdk-2.2.108-osx-gs-x64.pkg\",\n              \"hash\": \"8D5C290364F3B15C27103CDB7E1C3610E3A4185FF1E9101A2C040D497D5415534E79051C32E2F525A88853353D8FA74C908F4FF64A8F7D3CCAB8FE4D40FA23AC\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-osx-x64.pkg\",\n              \"hash\": \"8D5C290364F3B15C27103CDB7E1C3610E3A4185FF1E9101A2C040D497D5415534E79051C32E2F525A88853353D8FA74C908F4FF64A8F7D3CCAB8FE4D40FA23AC\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-osx-x64.tar.gz\",\n              \"hash\": \"8D24511F5D1E19E1BBE21EE43439DF2D27FF4155377EAFFE8464F92C93ADA8427920AE97559321C6F1AEECCC01125868E129A18C3A926D0431D3B70CCE67FC6D\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-rhel.6-x64.tar.gz\",\n              \"hash\": \"C35A13D65B11C053FFE3E91AF89724CFD7385F269178D371662B0C199CEB3C2E310754791997CFA626972FCE80DCE316DA958619D6877BCC429407B120D1C304\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-win-arm.zip\",\n              \"hash\": \"9909D5ABE24B5B33DF88EF2B56AA5D0D328B46550EDA9E4C31308431C6E97DC60504D2823B6AEF272BE4C4C4730F0FFC4878EED49B80A0C1F42D875D12F41F2A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-win-x64.exe\",\n              \"hash\": \"F4A2FE15F680CBAFC335412B2667EFFBD6D93D8AA6322B4D991818A604866BA9408D293831C0272606BB8ECAF456A20669AE89B62E937C3497E2E652BDDF216C\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-win-x64.zip\",\n              \"hash\": \"7348849167582B5CDA0329B6909CBA4C226EF769E3403FDEEA52AE8358729AFE87521349DC5DE5498EE1D0A15CA1F02520709471F0C80E25E5C69DF26ADD6E26\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-win-x86.exe\",\n              \"hash\": \"0E72EB2BF7462FB2B2B8076C965E0CA3C51A45DA77D5704FB9EE2F0E9D954190BEBA3334ADC0D5B88716F74FD5BCD81E910301DD49797540201566DBC555823B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.108/dotnet-sdk-2.2.108-win-x86.zip\",\n              \"hash\": \"D75FB8C3788B039256FC3BD060D49A82C1AAA2B69177AC1EB7352C2119C961D1D81F2CA310080B24E114B249B50324D2A1EA1212533E72CDE24B1664DDFFBAFB\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e1fb4d62-5c12-4abb-9aaf-129535ac33b9/9c06a4869ed6b8eb044965bdeac67254/dotnet-sdk-2.2.108-win-gs-x64.exe\",\n              \"hash\": \"F4A2FE15F680CBAFC335412B2667EFFBD6D93D8AA6322B4D991818A604866BA9408D293831C0272606BB8ECAF456A20669AE89B62E937C3497E2E652BDDF216C\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7abeefec-3857-478e-a5ab-a9797ffdbc39/e35a53c69270beb4b1bc41ff59a1e9ce/dotnet-sdk-2.2.108-win-gs-x86.exe\",\n              \"hash\": \"0E72EB2BF7462FB2B2B8076C965E0CA3C51A45DA77D5704FB9EE2F0E9D954190BEBA3334ADC0D5B88716F74FD5BCD81E910301DD49797540201566DBC555823B\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.6\",\n        \"version-display\": \"2.2.6\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19169.6\"\n        ],\n        \"vs-version\": \"15.9.13, 16.1.3, 16.2.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/aspnetcore-runtime-2.2.6-linux-arm.tar.gz\",\n            \"hash\": \"349FABB7BF1A2FC68A51D57CC0A12C84A333D98F53AC74338568512E1EC2F3D55FA7EE765CC690FBFA4D0D84A6E8BDC783FA42B60AAF7F65FCFAEB8E14656EF8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/aspnetcore-runtime-2.2.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"590E73898A6F1B3EF7B86E019B681A3099B7046B02CDB7F99DEA61460AA6079211A42AF3587BF71C03C19655DC24455098B14B3E9A9A12AEB2E64B7ECC207F84\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/aspnetcore-runtime-2.2.6-linux-x64.tar.gz\",\n            \"hash\": \"B5B86FFA40A4294E2532D22F6B3C173EBF17ED569CCB1E51FA9FE8804128B9541CE5FCCABE74E71BE9A7D42B80414F74B4F27A4733CA9C1DD50CB0B69C92829F\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/aspnetcore-runtime-2.2.6-osx-x64.tar.gz\",\n            \"hash\": \"7141594C490ADA6669535B5F6667075D7536C7F723D2D19C384838B4C0CE327A111E45C6C262A4CB0C826BBCF2E40384BC846D7DE7E8217830CB4C20A0B2D16B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/aspnetcore-runtime-2.2.6-win-arm.zip\",\n            \"hash\": \"3CC3DF0872EFB7C7849B373B8778B567CE25CF4D9A9C85B919CACAC0B4F06D1ED7030DCB5A5E9EAB5811284F3B31291B4D76F1BEBD47D1C31EF3A53C01E7BD9B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/aspnetcore-runtime-2.2.6-win-x64.exe\",\n            \"hash\": \"9F956A2BB808C4781A53B1803A6EA1048BBF0D6B4C5FDAB838314AA74E8C118965102EDEC989CE6274A0E1ABB1B3E03AAE8E633EF6EFAF29C10A461DECA2AEDC\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/aspnetcore-runtime-2.2.6-win-x64.zip\",\n            \"hash\": \"2FE420125B762FE5CE49E869C0A6F6E6318DF024CBD6F37A743D2EAE29136C8F982BD7B05E480639513520959E559EF45D6B590F95D83F5136E8931FF42506E5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/aspnetcore-runtime-2.2.6-win-x86.exe\",\n            \"hash\": \"8DD6063DB64FF9220916B83AAE3B82E866582C5B15697F8F49E4620F7FBB5DF758517D8C93D2CF0B372C75CC40381841DC23FEE0391EBB4C9C4C93FE5E45626E\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/aspnetcore-runtime-2.2.6-win-x86.zip\",\n            \"hash\": \"2F83E2D9BDC51550F89EDF7285E3B721BDC32352C0C1425BD051DE9C52551BD20300C0EE15D5A5417FC6C1B617AB5FFD1AEC7DDF21BB1DB97C2571CE1FCB796E\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.6/dotnet-hosting-2.2.6-win.exe\",\n            \"hash\": \"BEEA1B4A00F2411737E2D1E5D665CA60555934F694F3442414DCAE1396F861FB078C333721043D4A0C456DA7289F8BC9FE035885C4673CB2D63A48BE7C6DB55C\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.6\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f9fccf37-ce4b-414c-a4cd-11ecc8610335/e41ec68f6402d011dc6ae246736537b7/aspnet-2.2.6-symbols.zip\",\n            \"hash\": \"A2469EB3448AD3124A73186BC3C17E8C55D0DB41EFCFB088D98FAA9F2375855246C7A1546AF6705BAC16CB8770D060CC7BE3726A5717C5AADE131EE9D39974C4\"\n          },\n          {\n            \"name\": \"cli221xx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0bd795f2-f80b-4720-a696-6362647557bb/96cefd20ffd9ccd334987d6e8cd0b802/cli221xx-2.2.6-symbols.zip\",\n            \"hash\": \"71F032E2836A1515863A07CC7989BC570BDD222F19CD36DC081D35AEC61299B93F8F46A0C8A8E8195F4658E712E18735C80C78EDB5FCBD5F793ECF49EA3B7BF1\"\n          },\n          {\n            \"name\": \"cli222xx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/975d33ef-a61a-4ca2-8e86-b0e2e4426e7e/998d6fa933b991fb59a716388b7b33c0/cli222xx-2.2.6-symbols.zip\",\n            \"hash\": \"A845989C82961C6849C7472511E52AB6071ACF98264A92AD5EACA67FCCD36BA5672BB5EFFE8155897135D7344CDFDD0730A9ACDEDAA51DAC7AF956CE7C03CE59\"\n          },\n          {\n            \"name\": \"cli223xx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/127909c4-cfae-4927-9f6f-a5e276a8c2e4/fc7d215a493d14c517f1e675064933b9/cli223xx-2.2.6-symbols.zip\",\n            \"hash\": \"B30941EB1375FD831BF5E37C69855611664355F4409B9A0B8A032009B7947E7270F8B66FF8D17A07FFA460500BFCC7485382BFFB399EBBD9934117370937206D\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/df2e74d6-c3d6-4146-b92c-07b017db7c47/d85c2c17949a80c38166f199451b4d1e/core-setup-2.2.6-symbols.zip\",\n            \"hash\": \"78C4F51AD1891B8F2D0658D1513FA3566B064AC7B626C3080D3B828C5CF6344421BD82218C776A3AB69B2EF11731F108177F9EC0A0C80F1D65E95B4C4A0993CB\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ac44b040-59a7-4c31-b1f3-d307666533c0/928e45c40fc96d65d6b0208add08919a/coreclr-2.2.6-symbols.zip\",\n            \"hash\": \"63E82E83C8CF29D6668202362EC076C67877B50981E314877DC84AC126BFAB3644BBC3049137B0D976A66091423C2381B8CF34B4FE2126DCEE811FDC9C9441D0\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a11480e5-d099-4351-91ca-f8fd50f1f5df/bfc5bd03d27d857d98846c31dc6625d4/corefx-2.2.6-symbols.zip\",\n            \"hash\": \"F2CBFDF905245176AEAD503DB908AF6D59AEA6F1A4F76209C443E555F6E8C62FD184A7BA6E44E115D76B1C184F6AE6B3D57845125A62075798D51905EB8A9A51\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d64002d7-fcc2-4d47-a903-28ab7904dfec/c7e49df6e74debd1c386ef226239dfdc/dotnet-sdk-2.2.6-symbols.zip\",\n            \"hash\": \"6D540B15C8CAFE1A333D03C143984B3434ED349F1030E8E1C998C3340C77A3C550F659B3CE3E34CF3B49E3F9852496B3FB5DA76FD50D639BF9D9EA5A0C3931BD\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-05-21\",\n      \"release-version\": \"2.2.300\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.300-SDK/2.2.300-SDK-download.md\",\n      \"runtime\": {\n        \"version\": \"2.2.5\",\n        \"version-display\": \"2.2.5\",\n        \"vs-version\": \"16.1.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-arm.tar.gz\",\n            \"hash\": \"D3A545AE8EE19D6AA19B349CA634FE321A477779E5C74AD6C8BD1657B55C3440142FEB8FB4C46FD41B6697D0B9565BDADD78365B1E36115670037D7FB1041B82\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-arm64.tar.gz\",\n            \"hash\": \"3D0DEABC092865BD3583312FE14211BD94275F569EAE9D32F447B29D55D31B4B61FADA36ECFB88CB7E9B185C1F3D67A1F270DBFD3D691ACE249DEF3797926F06\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"F4CAB0135F69F3819A905640E59718F292FECEF849480DA16043E6CBBFF72D80EDBC64FBC3BF84BF6151148D9982DEC67038020DEBA1E9CA4A1C61A35BCAEA56\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-x64.tar.gz\",\n            \"hash\": \"7CACC139737A7B05D5ADCEA0125E0D3ED7342E1D81D94D0445DBBCB64D6DB2E9C840311966AC091AD0E4E4C737EDEE09AA0533252EC75510C9285008632ADF03\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-osx-x64.pkg\",\n            \"hash\": \"D73B700AEFE75E7CB52DCDF8121652F2EA96C06ABDE4E1EC09A1EB022A51FB8EA84AA7BE2927D93853FE6ECFD93EE804C5C1D79ED7C6BD66D2B7BD063FD54972\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-osx-x64.tar.gz\",\n            \"hash\": \"F6770F660259019CD22FC678BF3E389588AEB2B158B68778FE3590293412B9BE6544C75BFE5736CD37500694C549FC47DC0B141CF993B8ED90186444B03B985A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-rhel.6-x64.tar.gz\",\n            \"hash\": \"CDB2C6C1260E212C8E304064765C5FBA0501393A1483DA00417D2D7D89677CB8AE98108E82921CA66C4CECCC1C84B46575F0689C2FAFD76DB172681EC4B05C2C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-arm.zip\",\n            \"hash\": \"76682D8907FD6B5349C01EB6A1033650E41131B331CD1D3BE83BFADB6AF6E8D59922AA66474CEB96C73248C28148D8AE6AA49763494486530F842781D48C25E6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x64.exe\",\n            \"hash\": \"479F3AECBA52221BE144EBAE310A7A03DB9B79F2019EC0998C02C883822443313D1E87D0ACDA6241B2F10EECB9D01C85FC89C7D6CACA94E1229282E6C52400B5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x64.zip\",\n            \"hash\": \"E3CCE1A8FA304AFF40FA1CF6B278CEDA60D341DFA25C31449DECD8900B6E49FC1DAC34888853EBA6E9AD610580F1689B90B5E9110826EB5CE80CF781696DA98C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x86.exe\",\n            \"hash\": \"97CE50019A3E0786231F20C35F29485F64AE001455D9B50EAA8089C90138343B9A399CCFA103C9A79439E790EB8F3ADD1F206FC719A2417718B11AB8FFCE0110\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x86.zip\",\n            \"hash\": \"28CFCEC3440E3E4B77D256D2FDBB28CFE8E535DE92983FAFDEF7E7850F074D3D6BCCF6C3BA089F016E93A2A6ADCBCA1CEDC3E2193F59FCCDA01A2EF065D6F870\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.300\",\n        \"version-display\": \"2.2.300\",\n        \"runtime-version\": \"2.2.5\",\n        \"vs-version\": \"16.1.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.1)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.6\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-linux-arm.tar.gz\",\n            \"hash\": \"A14160B1EE64EA5FFBC80EF3550AD77809E05352B68E33D9B283BFAEC75C61AE9ED28DB45E31855E5E5921F2836D7C2705B5BBB6481CB68FE3C2B6A4F09B668C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-linux-arm64.tar.gz\",\n            \"hash\": \"DA03270CC99D0314D9A2FDC95C11F3B6EDD44CBD2E3CCC95A08D23753CA8AD18DFF225946112176C23E0AD55F752C9AF4008548BAD9594C60097B280BE67D4E4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-linux-musl-x64.tar.gz\",\n            \"hash\": \"5E58B1D404CE26036DFC8FEEA57086DF76D47228FB7E023C1ED1DB2C0360693780E86B3BD87F5B0A667476C8C3FE0BD6DDB5BE3A06DFF0CFEAA86AE5D4423C7D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-linux-x64.tar.gz\",\n            \"hash\": \"1D660A323180DF3DA8C6E0EA3F439D6BBEC29670D498AC884F38BF3CDFFBB041C7AFFF66171CDFD24C82394B845B135B057404DEF1FCE9F206853726382BC42B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0cc790f8-f0b6-438a-a8c8-f734e5709590/8fb91e7ef7a43a8509eeaab6785a4c14/dotnet-sdk-2.2.300-osx-gs-x64.pkg\",\n            \"hash\": \"638B204B0C0208DC0D4CF563629C8CCA72FBF864150E852E387FBD30778EC2B4F805FDD7F4FD7792172089AEF0717405B9C12B7F24022B83122CB4A6FD7A13F5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-osx-x64.pkg\",\n            \"hash\": \"638B204B0C0208DC0D4CF563629C8CCA72FBF864150E852E387FBD30778EC2B4F805FDD7F4FD7792172089AEF0717405B9C12B7F24022B83122CB4A6FD7A13F5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-osx-x64.tar.gz\",\n            \"hash\": \"3EE77D7E9371D36DB6BDF55973703E7A431A860866E568DA432AF4435832B2E6FECC88C8770DA152016C5C9A8B95A9361527F765FAA6E6E352432086D00B6B96\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-rhel.6-x64.tar.gz\",\n            \"hash\": \"0F0D04A8AE5285998FFAE911611654C141A620EDC3C773914CC6A1B0022CB3463B488991879F6F06F764FEA6AE70D65A360A9E85532BCCF850778F45EC8C6D6E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-win-arm.zip\",\n            \"hash\": \"6A8C035873FC4C3EFEE214F07105566E7428438A7D1229C8AF1EB8FE75FFC1F9B930C61D67CE797527B781CCDF79D276B3EC42E86C9DB1AE4706A477346A94A6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d4bb8e3f-911f-4698-ab2e-9b1843ccb89c/9d06eca174c23689997758b819b4286a/dotnet-sdk-2.2.300-win-gs-x64.exe\",\n            \"hash\": \"4D1BF45DA628402FF1D5264999823A9248D81B0C78AE59648D3F32D0202FC36DFD823EA834AA9158ADFBD8335803E07C62183065AD7E518A16121D469DF94E02\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/389b1e28-7245-4990-a9f0-af0a9a33281e/d57189b00a794820761c89070e8bc5f8/dotnet-sdk-2.2.300-win-gs-x86.exe\",\n            \"hash\": \"DC2AC716B77CA69D6BD7BFF7DA27FD69CAAEFC2B9C2C13F4498B50214AFA894ED558773953672223CCA005A31E7E6CC0AD91D5F51E07BC153A1DC6237C5E411D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-win-x64.exe\",\n            \"hash\": \"4D1BF45DA628402FF1D5264999823A9248D81B0C78AE59648D3F32D0202FC36DFD823EA834AA9158ADFBD8335803E07C62183065AD7E518A16121D469DF94E02\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-win-x64.zip\",\n            \"hash\": \"67583F2D88F83C82A4A0206C09AB9C20D10CBD96FCD247765FE36A961E750FD06469FAD45CBF699EB4076E6A08C8F3E47B840AB32A4F76B963730907513D2FDA\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-win-x86.exe\",\n            \"hash\": \"DC2AC716B77CA69D6BD7BFF7DA27FD69CAAEFC2B9C2C13F4498B50214AFA894ED558773953672223CCA005A31E7E6CC0AD91D5F51E07BC153A1DC6237C5E411D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.300/dotnet-sdk-2.2.300-win-x86.zip\",\n            \"hash\": \"C377A15195E70486A07AE3449B3A10455D6A669395190135202D9FC3C682207A91A987617D8E2390FDD9C67509295B121F71094AB744C1E713A304B0B086A5B9\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.5\",\n        \"version-display\": \"2.2.5\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19109.5\"\n        ],\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-linux-arm.tar.gz\",\n            \"hash\": \"16AABD3FCD0EADCFBFEA37DB976E05EF8997820F84C00EEF7994BF529BB9FFDD5628E7E12164B7288DEF9CDF27F0243CFF57780FE1333AF66E6452E84EAF52C0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"6DC1058C218A8AC70C4EA8CE0C62A0CE275374C282FF87FCAC940C9E472297EFFAAB94FB7E1738D68E61F1F021166E9F565E676A0A9DDCF2AEB0762144BF7B92\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-linux-x64.tar.gz\",\n            \"hash\": \"B208BCECA2A80C75DD40DEE7F1DAF88824062EABF5A929E189FB83FC6B8D4C7A05B61A37C7A7A4962E63E83860E4CD34B31B67582CB8CCE76AF05EF0DEEDDDD7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-osx-x64.tar.gz\",\n            \"hash\": \"6B06C6649F31CC39B1D39D691BED8323196F080E5B29ED677EAEB75CE11AE8C6145461D940117F8EB89CE020B674C32B11E9429E8CD38788D856C925493E28C7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-arm.zip\",\n            \"hash\": \"67C15B315F3158ED82E7BEC210A79C47D02A459808A10E345899B28EB9A458C02DE2DFC86CA7DC975E26124CF850CE63CCDDA3C1A68B1699F3FB1DCA69036A57\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x64.exe\",\n            \"hash\": \"7664A6C0C70F93B2E20E6C60AFE2C7FC38D5DC7C420C23A4F76A49F610A2C679DD9A582FBEFC12454D4994520C3D9FDCBAC62169B5D913836976903F656BEF98\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x64.zip\",\n            \"hash\": \"7F8163E2DD6EF8C430E0F7A35117A547090A15C0A362348FAEBEDBA99287FA89A214F86C54266BD002388A19A1369FEF0FF3F73E1D29DB34FE1DA48B6E535BC7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x86.exe\",\n            \"hash\": \"EF107FE682D7FC0D445257C80038D26DEBD6294B9F0B03141F39A3370F486E173D36D5D7A5C64390FF6447ECA04906EE940F06DB005FFEFBA9C3973AB4BE8738\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x86.zip\",\n            \"hash\": \"00B4D2B8E5ED7CCC930A9E192A72D91360C4CD0BF35F065A5C88786C66FC5DE5B5778E11E7592CC49B2ABC2150D6C91B2C16CEE013A989E53641EB04EE6331F2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/dotnet-hosting-2.2.5-win.exe\",\n            \"hash\": \"5F06FE9E2A894C4E089CE51FE6FEE7E79FD1062E1CF2B3F18C5B205B4031F417E4CD4FD93BD2DC308B7CBD4340C9CF8C26CDB3AB173F6137399503B1E3A61AEC\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0c8969d6-a150-4fd0-b5ee-f85cf47b29fd/8628d29e58df3e675327e89a3cc02eb6/aspnet-2.2.5-symbols.zip\",\n            \"hash\": \"3B11929D9666EDE0BE027BFCB3C68E86B946841A29B509CDC380D0D431CC053CEC349628091DD650EB739737AAA05AED94174E0C63AFD520731C6075F921FF6B\"\n          },\n          {\n            \"name\": \"aspnet-extensions-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1d8cdfb8-e3b4-470a-838b-629a4df38034/a3b613b6c5bd68514e6ffdc68e43402d/aspnet-extensions-2.2.5-symbols.zip\",\n            \"hash\": \"10AA33B95444E4F57B2A662C4E3EA1C7782576208D4B80E8156F206BD3BFCDA3222484A06172046055D2ECE556C28F83A6E8FB2E47EC3ABB0110A4843C937553\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b7a489d4-5833-486e-af48-47aeba1deead/6e23995d55fdb4241e9135a5f60a975d/cli-2.2.5-symbols.zip\",\n            \"hash\": \"828CD0BFA2F7AF2631687644D539F078B3C5D3053F41F9D431206C40AB855ED47C58C3B935CAE1B5D60BE4AF294D48891556DAEFF0F2F76551CEFB4DE334E90F\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0cb24dfa-e1c8-4c7d-b6e8-ada512a895b4/4431f0316bd4af2c8d93df78bddd3931/core-setup-2.2.5-symbols.zip\",\n            \"hash\": \"0B9D3F36690839BF0AF6BA36F61496D0DA98DB179C973B4C76A4A9D592A2FC2B214D7C345EE4E69CD4520103E48FE7B644BE7B4AB2390EF767FCF9831223650A\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/173d6b83-0ee0-4a76-88d4-1b2cb9defc35/5603ecf3d3b2b346f1c41d1ea9d1a6dc/coreclr-2.2.5-symbols.zip\",\n            \"hash\": \"13243A47FF33931F6DD50AD89452AE4DAD302922F2A8667BA6B6FF100F5B2256A191B8D85719F1921AA9FE05DC275F11AE1235995B2E6B232B84169EC37527C9\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8ca8518d-3e3e-438b-bb1d-130e96896abf/fb6ce1b1bb8215f0d41c9004d45819ec/corefx-2.2.5-symbols.zip\",\n            \"hash\": \"31BD76CB1D12A7C1A9A89994E0074F344B8AB8F8C2FDE94E931C4854197CFA6AA358E0A5AB31E1C226A88051C6195CF47E55DD3146FCC3D8A073435AD6398A7F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bc10e87f-b8c9-475f-b128-c79f1b10a479/89bb00ae7d070290942a48261504a73a/dotnet-sdk-2.2.5-symbols.zip\",\n            \"hash\": \"DB653C4DC2E058F30BBAFDC15F0DA428227526BFEAFB09DECB05CB385AA982B5886DA150AAE5657DE552CF225E89FBC01ABE68ECFA830209962947E999557E1B\"\n          },\n          {\n            \"name\": \"sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8d15bfff-d1c7-448a-adea-6f44d4191413/59632e1b6558ab689a837a1acb6875b3/sdk-2.2.204-symbols.zip\",\n            \"hash\": \"9C62F4FA2975A6325C8767FAC620726E1A91BD5856D1548A5803EC75AB5272C006BCB83A983B2FB6135CAC3EC429DD301DC336FA23DCEBBEAACF5C9ACE4C40B5\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-05-14\",\n      \"release-version\": \"2.2.204\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0976\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0976\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.5/2.2.5.md\",\n      \"runtime\": {\n        \"version\": \"2.2.5\",\n        \"version-display\": \"2.2.5\",\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-arm.tar.gz\",\n            \"hash\": \"D3A545AE8EE19D6AA19B349CA634FE321A477779E5C74AD6C8BD1657B55C3440142FEB8FB4C46FD41B6697D0B9565BDADD78365B1E36115670037D7FB1041B82\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-arm64.tar.gz\",\n            \"hash\": \"3D0DEABC092865BD3583312FE14211BD94275F569EAE9D32F447B29D55D31B4B61FADA36ECFB88CB7E9B185C1F3D67A1F270DBFD3D691ACE249DEF3797926F06\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"F4CAB0135F69F3819A905640E59718F292FECEF849480DA16043E6CBBFF72D80EDBC64FBC3BF84BF6151148D9982DEC67038020DEBA1E9CA4A1C61A35BCAEA56\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-x64.tar.gz\",\n            \"hash\": \"7CACC139737A7B05D5ADCEA0125E0D3ED7342E1D81D94D0445DBBCB64D6DB2E9C840311966AC091AD0E4E4C737EDEE09AA0533252EC75510C9285008632ADF03\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-osx-x64.pkg\",\n            \"hash\": \"D73B700AEFE75E7CB52DCDF8121652F2EA96C06ABDE4E1EC09A1EB022A51FB8EA84AA7BE2927D93853FE6ECFD93EE804C5C1D79ED7C6BD66D2B7BD063FD54972\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-osx-x64.tar.gz\",\n            \"hash\": \"F6770F660259019CD22FC678BF3E389588AEB2B158B68778FE3590293412B9BE6544C75BFE5736CD37500694C549FC47DC0B141CF993B8ED90186444B03B985A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-rhel.6-x64.tar.gz\",\n            \"hash\": \"CDB2C6C1260E212C8E304064765C5FBA0501393A1483DA00417D2D7D89677CB8AE98108E82921CA66C4CECCC1C84B46575F0689C2FAFD76DB172681EC4B05C2C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-arm.zip\",\n            \"hash\": \"76682D8907FD6B5349C01EB6A1033650E41131B331CD1D3BE83BFADB6AF6E8D59922AA66474CEB96C73248C28148D8AE6AA49763494486530F842781D48C25E6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x64.exe\",\n            \"hash\": \"479F3AECBA52221BE144EBAE310A7A03DB9B79F2019EC0998C02C883822443313D1E87D0ACDA6241B2F10EECB9D01C85FC89C7D6CACA94E1229282E6C52400B5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x64.zip\",\n            \"hash\": \"E3CCE1A8FA304AFF40FA1CF6B278CEDA60D341DFA25C31449DECD8900B6E49FC1DAC34888853EBA6E9AD610580F1689B90B5E9110826EB5CE80CF781696DA98C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x86.exe\",\n            \"hash\": \"97CE50019A3E0786231F20C35F29485F64AE001455D9B50EAA8089C90138343B9A399CCFA103C9A79439E790EB8F3ADD1F206FC719A2417718B11AB8FFCE0110\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x86.zip\",\n            \"hash\": \"28CFCEC3440E3E4B77D256D2FDBB28CFE8E535DE92983FAFDEF7E7850F074D3D6BCCF6C3BA089F016E93A2A6ADCBCA1CEDC3E2193F59FCCDA01A2EF065D6F870\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.204\",\n        \"version-display\": \"2.2.204\",\n        \"runtime-version\": \"2.2.5\",\n        \"vs-version\": \"16.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.0)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-linux-arm.tar.gz\",\n            \"hash\": \"C3D52801C3B65BEE33CDCBDE2206DA54EBCFF918D4AC9277AE8B9975C58F8A81F341E5FB1FFF7489D809118FEFCE1506C2AF657D83D90C1D1BED23FDB4A8736D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-linux-arm64.tar.gz\",\n            \"hash\": \"4012E0E57A64144018ACA3C9A4994B9B9160848BCC532A4F00806F8EE86B7B5EFB3B47FF53DDF852E829CA0ACDFBEF285C9FFE34B02D223D79A8C00C76264E39\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-linux-musl-x64.tar.gz\",\n            \"hash\": \"025E2B52CB3B082583AE7071D414DB3725989BA7C16B28FB9E5DDF0427F713F0E8B152AADD87137C1E6E2DC64403A7C7B697EC992F00507F5DBF17F1F4F4EB71\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-linux-x64.tar.gz\",\n            \"hash\": \"1ADD882C32A96AD564EF3F2A38FDC9282C6EE1C851BC59C22ADA911D36DBE5F2F839B428307510E3F93900246E0BBD4A277A9BD45F778DF4B889782D6867BF01\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/25dd7bd5-f6c1-41ea-99db-0e4ae3bd9b43/4b81ab6878ed9e2057868cb8c61041c9/dotnet-sdk-2.2.204-osx-gs-x64.pkg\",\n            \"hash\": \"71E3D59D34EA8CA7DD2F367299EAE04E026D4CFEA7E7E0F0E7E0057C280F0B99A8956753542E50DF48303082CDE904C64A02982E7886EB6D8D2CA73F1F5ADD67\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-osx-x64.pkg\",\n            \"hash\": \"71E3D59D34EA8CA7DD2F367299EAE04E026D4CFEA7E7E0F0E7E0057C280F0B99A8956753542E50DF48303082CDE904C64A02982E7886EB6D8D2CA73F1F5ADD67\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-osx-x64.tar.gz\",\n            \"hash\": \"234A855230DBC8BE2B6C5A48F932498B10C3CC178C0931B3F5CB813C37B5F394D21A7B86A3D9A7A08D73A16E3F2E96A24CCEF31CFD1F8942DE6661E710AD5C04\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-rhel.6-x64.tar.gz\",\n            \"hash\": \"1D420F7D8645F8B950BFA22D43906503BF481B6EB7DB1BFC8028FCCAE42522EB4E0261D672A8313A1095ACF3273D0156D9C2C194075BB510B73A5A3CBDCEBF8F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-win-arm.zip\",\n            \"hash\": \"DCEC2DCE0BFCBB7B8AAE05A4C2704A78B31FECB8BA8419D5ADB02DCCDB158B36718C6CAD0F5BA3F97A7B7C0A06DD13936C111A0BC263733A6ED32DBA2F473421\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b6c5a4ee-62e4-499b-99f4-58e1ec233a2c/1dbc34e037bdb0d16ca04ad11d151d8b/dotnet-sdk-2.2.204-win-gs-x64.exe\",\n            \"hash\": \"D538788C3FB19033F28874B4B19546EEF61F6E802B9FD15E07302568A80E25A125B265C00A439C45F82C77474CCBAA14623BE22D35A1CCE42D5F019FA202646A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3e9e57da-4def-4ad3-96a5-5baab155a9e6/bb30501dce828e3e37ecf086457e3058/dotnet-sdk-2.2.204-win-gs-x86.exe\",\n            \"hash\": \"8D4CFCDC4BD391DC7E4DEE344E2BABDE283329936BD8565ABA9937C96E71D1ABCF7B8C9E3A57DB11A3739099A256705B337B45B80F6C20D9BCD1D3EA10FFEAC0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-win-x64.exe\",\n            \"hash\": \"D538788C3FB19033F28874B4B19546EEF61F6E802B9FD15E07302568A80E25A125B265C00A439C45F82C77474CCBAA14623BE22D35A1CCE42D5F019FA202646A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-win-x64.zip\",\n            \"hash\": \"18B4EF18BABAD5CA61F9E3643095126E0256C58662E8B69BE85E4894772C1AE12D9CEE84FD9C9DC9068558C8B830ECEF08E0E3E6E112F77FBBD5CDBFAE4BE537\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-win-x86.exe\",\n            \"hash\": \"8D4CFCDC4BD391DC7E4DEE344E2BABDE283329936BD8565ABA9937C96E71D1ABCF7B8C9E3A57DB11A3739099A256705B337B45B80F6C20D9BCD1D3EA10FFEAC0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.204/dotnet-sdk-2.2.204-win-x86.zip\",\n            \"hash\": \"790A2C53DD9C438A7B1EB18E20A08A56F75B8E65085AFB6B0C1C35D8FF9265FDBB0859C8DF4A08BA380C9A68B2DB9B86F78843A42117AF19FA69BA35DA324BC8\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.5\",\n        \"version-display\": \"2.2.5\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19109.5\"\n        ],\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-linux-arm.tar.gz\",\n            \"hash\": \"16AABD3FCD0EADCFBFEA37DB976E05EF8997820F84C00EEF7994BF529BB9FFDD5628E7E12164B7288DEF9CDF27F0243CFF57780FE1333AF66E6452E84EAF52C0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"6DC1058C218A8AC70C4EA8CE0C62A0CE275374C282FF87FCAC940C9E472297EFFAAB94FB7E1738D68E61F1F021166E9F565E676A0A9DDCF2AEB0762144BF7B92\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-linux-x64.tar.gz\",\n            \"hash\": \"B208BCECA2A80C75DD40DEE7F1DAF88824062EABF5A929E189FB83FC6B8D4C7A05B61A37C7A7A4962E63E83860E4CD34B31B67582CB8CCE76AF05EF0DEEDDDD7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-osx-x64.tar.gz\",\n            \"hash\": \"6B06C6649F31CC39B1D39D691BED8323196F080E5B29ED677EAEB75CE11AE8C6145461D940117F8EB89CE020B674C32B11E9429E8CD38788D856C925493E28C7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-arm.zip\",\n            \"hash\": \"67C15B315F3158ED82E7BEC210A79C47D02A459808A10E345899B28EB9A458C02DE2DFC86CA7DC975E26124CF850CE63CCDDA3C1A68B1699F3FB1DCA69036A57\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x64.exe\",\n            \"hash\": \"7664A6C0C70F93B2E20E6C60AFE2C7FC38D5DC7C420C23A4F76A49F610A2C679DD9A582FBEFC12454D4994520C3D9FDCBAC62169B5D913836976903F656BEF98\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x64.zip\",\n            \"hash\": \"7F8163E2DD6EF8C430E0F7A35117A547090A15C0A362348FAEBEDBA99287FA89A214F86C54266BD002388A19A1369FEF0FF3F73E1D29DB34FE1DA48B6E535BC7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x86.exe\",\n            \"hash\": \"EF107FE682D7FC0D445257C80038D26DEBD6294B9F0B03141F39A3370F486E173D36D5D7A5C64390FF6447ECA04906EE940F06DB005FFEFBA9C3973AB4BE8738\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x86.zip\",\n            \"hash\": \"00B4D2B8E5ED7CCC930A9E192A72D91360C4CD0BF35F065A5C88786C66FC5DE5B5778E11E7592CC49B2ABC2150D6C91B2C16CEE013A989E53641EB04EE6331F2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/dotnet-hosting-2.2.5-win.exe\",\n            \"hash\": \"5F06FE9E2A894C4E089CE51FE6FEE7E79FD1062E1CF2B3F18C5B205B4031F417E4CD4FD93BD2DC308B7CBD4340C9CF8C26CDB3AB173F6137399503B1E3A61AEC\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0c8969d6-a150-4fd0-b5ee-f85cf47b29fd/8628d29e58df3e675327e89a3cc02eb6/aspnet-2.2.5-symbols.zip\",\n            \"hash\": \"3B11929D9666EDE0BE027BFCB3C68E86B946841A29B509CDC380D0D431CC053CEC349628091DD650EB739737AAA05AED94174E0C63AFD520731C6075F921FF6B\"\n          },\n          {\n            \"name\": \"aspnet-extensions-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1d8cdfb8-e3b4-470a-838b-629a4df38034/a3b613b6c5bd68514e6ffdc68e43402d/aspnet-extensions-2.2.5-symbols.zip\",\n            \"hash\": \"10AA33B95444E4F57B2A662C4E3EA1C7782576208D4B80E8156F206BD3BFCDA3222484A06172046055D2ECE556C28F83A6E8FB2E47EC3ABB0110A4843C937553\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b7a489d4-5833-486e-af48-47aeba1deead/6e23995d55fdb4241e9135a5f60a975d/cli-2.2.5-symbols.zip\",\n            \"hash\": \"828CD0BFA2F7AF2631687644D539F078B3C5D3053F41F9D431206C40AB855ED47C58C3B935CAE1B5D60BE4AF294D48891556DAEFF0F2F76551CEFB4DE334E90F\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0cb24dfa-e1c8-4c7d-b6e8-ada512a895b4/4431f0316bd4af2c8d93df78bddd3931/core-setup-2.2.5-symbols.zip\",\n            \"hash\": \"0B9D3F36690839BF0AF6BA36F61496D0DA98DB179C973B4C76A4A9D592A2FC2B214D7C345EE4E69CD4520103E48FE7B644BE7B4AB2390EF767FCF9831223650A\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/173d6b83-0ee0-4a76-88d4-1b2cb9defc35/5603ecf3d3b2b346f1c41d1ea9d1a6dc/coreclr-2.2.5-symbols.zip\",\n            \"hash\": \"13243A47FF33931F6DD50AD89452AE4DAD302922F2A8667BA6B6FF100F5B2256A191B8D85719F1921AA9FE05DC275F11AE1235995B2E6B232B84169EC37527C9\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8ca8518d-3e3e-438b-bb1d-130e96896abf/fb6ce1b1bb8215f0d41c9004d45819ec/corefx-2.2.5-symbols.zip\",\n            \"hash\": \"31BD76CB1D12A7C1A9A89994E0074F344B8AB8F8C2FDE94E931C4854197CFA6AA358E0A5AB31E1C226A88051C6195CF47E55DD3146FCC3D8A073435AD6398A7F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bc10e87f-b8c9-475f-b128-c79f1b10a479/89bb00ae7d070290942a48261504a73a/dotnet-sdk-2.2.5-symbols.zip\",\n            \"hash\": \"DB653C4DC2E058F30BBAFDC15F0DA428227526BFEAFB09DECB05CB385AA982B5886DA150AAE5657DE552CF225E89FBC01ABE68ECFA830209962947E999557E1B\"\n          },\n          {\n            \"name\": \"sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8d15bfff-d1c7-448a-adea-6f44d4191413/59632e1b6558ab689a837a1acb6875b3/sdk-2.2.204-symbols.zip\",\n            \"hash\": \"9C62F4FA2975A6325C8767FAC620726E1A91BD5856D1548A5803EC75AB5272C006BCB83A983B2FB6135CAC3EC429DD301DC336FA23DCEBBEAACF5C9ACE4C40B5\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-05-14\",\n      \"release-version\": \"2.2.5\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2019-0820\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0820\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0980\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0980\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0981\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0981\"\n        },\n        {\n          \"cve-id\": \"CVE-2019-0982\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0982\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.5/2.2.5.md\",\n      \"runtime\": {\n        \"version\": \"2.2.5\",\n        \"version-display\": \"2.2.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-arm.tar.gz\",\n            \"hash\": \"D3A545AE8EE19D6AA19B349CA634FE321A477779E5C74AD6C8BD1657B55C3440142FEB8FB4C46FD41B6697D0B9565BDADD78365B1E36115670037D7FB1041B82\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-arm64.tar.gz\",\n            \"hash\": \"3D0DEABC092865BD3583312FE14211BD94275F569EAE9D32F447B29D55D31B4B61FADA36ECFB88CB7E9B185C1F3D67A1F270DBFD3D691ACE249DEF3797926F06\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"F4CAB0135F69F3819A905640E59718F292FECEF849480DA16043E6CBBFF72D80EDBC64FBC3BF84BF6151148D9982DEC67038020DEBA1E9CA4A1C61A35BCAEA56\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-linux-x64.tar.gz\",\n            \"hash\": \"7CACC139737A7B05D5ADCEA0125E0D3ED7342E1D81D94D0445DBBCB64D6DB2E9C840311966AC091AD0E4E4C737EDEE09AA0533252EC75510C9285008632ADF03\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-osx-x64.pkg\",\n            \"hash\": \"D73B700AEFE75E7CB52DCDF8121652F2EA96C06ABDE4E1EC09A1EB022A51FB8EA84AA7BE2927D93853FE6ECFD93EE804C5C1D79ED7C6BD66D2B7BD063FD54972\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-osx-x64.tar.gz\",\n            \"hash\": \"F6770F660259019CD22FC678BF3E389588AEB2B158B68778FE3590293412B9BE6544C75BFE5736CD37500694C549FC47DC0B141CF993B8ED90186444B03B985A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-rhel.6-x64.tar.gz\",\n            \"hash\": \"CDB2C6C1260E212C8E304064765C5FBA0501393A1483DA00417D2D7D89677CB8AE98108E82921CA66C4CECCC1C84B46575F0689C2FAFD76DB172681EC4B05C2C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-arm.zip\",\n            \"hash\": \"76682D8907FD6B5349C01EB6A1033650E41131B331CD1D3BE83BFADB6AF6E8D59922AA66474CEB96C73248C28148D8AE6AA49763494486530F842781D48C25E6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x64.exe\",\n            \"hash\": \"479F3AECBA52221BE144EBAE310A7A03DB9B79F2019EC0998C02C883822443313D1E87D0ACDA6241B2F10EECB9D01C85FC89C7D6CACA94E1229282E6C52400B5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x64.zip\",\n            \"hash\": \"E3CCE1A8FA304AFF40FA1CF6B278CEDA60D341DFA25C31449DECD8900B6E49FC1DAC34888853EBA6E9AD610580F1689B90B5E9110826EB5CE80CF781696DA98C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x86.exe\",\n            \"hash\": \"97CE50019A3E0786231F20C35F29485F64AE001455D9B50EAA8089C90138343B9A399CCFA103C9A79439E790EB8F3ADD1F206FC719A2417718B11AB8FFCE0110\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.5/dotnet-runtime-2.2.5-win-x86.zip\",\n            \"hash\": \"28CFCEC3440E3E4B77D256D2FDBB28CFE8E535DE92983FAFDEF7E7850F074D3D6BCCF6C3BA089F016E93A2A6ADCBCA1CEDC3E2193F59FCCDA01A2EF065D6F870\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.107\",\n        \"version-display\": \"2.2.107\",\n        \"runtime-version\": \"2.2.5\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-linux-arm.tar.gz\",\n            \"hash\": \"0F2D5FD54955D8478143B9645344C2730AC4E8865492600CBE954841D57144AD715D25B4CF12A2A6DBE6DBDBCBE60FB95C624CAEE4EA444DAE8FABAA60D34EB4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-linux-arm64.tar.gz\",\n            \"hash\": \"ED54D510AC73B94075CC33F4B8BB8E7B77C4B84038FD2A7553A95BF8EDB044F9558F2BB88B1F372326291320444B0D6D8E12D7368928BA3078C0C454187A355A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-linux-musl-x64.tar.gz\",\n            \"hash\": \"823093A2987E3F7F1C78089FD0212ABC8F59023919DD7140FD813B73C16F93FB4F34E35B75BB8132F8380F627AA6FCE1F4230FD4DC77E3FC829BC1F85A9CD8B7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-linux-x64.tar.gz\",\n            \"hash\": \"E75F9B2190787F3CE665FF231BC6A2EE395B81B3D3D8D41ED5E8F4528791E5A8728D81310EA6751768645EEE82C0F0E1287818D29411A150AB9E7A227B4F41D0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b4e6bfc6-1843-4154-8b5a-6bd85702df16/270d40a3ede0b72d3f0b801bf103ea96/dotnet-sdk-2.2.107-osx-gs-x64.pkg\",\n            \"hash\": \"B65F016FD290BCF61B97197BD0CD6ABAA3C505CF02A5D5D4E5888D7E7A191B3D54A7B3ACB2EF6CC9055DA9B605359E5EC01B23E78BACA81AFA8EB2B452702229\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-osx-x64.pkg\",\n            \"hash\": \"B65F016FD290BCF61B97197BD0CD6ABAA3C505CF02A5D5D4E5888D7E7A191B3D54A7B3ACB2EF6CC9055DA9B605359E5EC01B23E78BACA81AFA8EB2B452702229\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-osx-x64.tar.gz\",\n            \"hash\": \"43909640B811EA3697369487E16FBCAF4A056B85EB374ED6700BA9AB8575469A5E8FC6C67B551827C9380602D2E8AC8C35BFF00217FAF3EDF423BF3BCBB55895\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-rhel.6-x64.tar.gz\",\n            \"hash\": \"BF3B9846200A2EDD84AB00C497C4A786E6D66C6AEDD29A8BF59CC27B1B5378DDE3488DB776861685410C50D29F90E7560F504AE9D60661DC510784421D2D5480\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-win-arm.zip\",\n            \"hash\": \"9F2AA7228B5477334AAFF050B4628FE72FD9B784B09D71396C1CDC6B973AE8AD9460820AA5C1A72BFE7C05D117D880B838779BA0CD044FE69DB82ECD88216A34\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/73c21f87-19f7-4080-8cdc-f262c5a31c08/8e807ce186a41b2cf6b06d1e410a8d25/dotnet-sdk-2.2.107-win-gs-x64.exe\",\n            \"hash\": \"56A1B2F7B334F12DF1B3BBA5E771C65872702A596249DDFC7DCE2449028CC65F968B6F5CA785E67EE20C3430A19463FF7223057C9591A84744CCD3EF5D5AC2C6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/62971a68-a245-4ec2-9065-ffe19149e89c/59e7b11b992dd5dd15334cba46bcbbfd/dotnet-sdk-2.2.107-win-gs-x86.exe\",\n            \"hash\": \"AB8ED818B3DDCD049BABBA89590B8FD7E1BDA7691546D704205BA937FBEF0A9556536A660799251DF11FA26C6B11B94411CBF8CA75DC6CBE84540DF60E966AB5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-win-x64.exe\",\n            \"hash\": \"56A1B2F7B334F12DF1B3BBA5E771C65872702A596249DDFC7DCE2449028CC65F968B6F5CA785E67EE20C3430A19463FF7223057C9591A84744CCD3EF5D5AC2C6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-win-x64.zip\",\n            \"hash\": \"260A36A8FD0F4DD3859744C970CF4276AB79676D12014438BF85C8717560D285A4E95A664B1CB70912FA3936F8C8190D6FF3541127C8A4265B4D330131650AC9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-win-x86.exe\",\n            \"hash\": \"AB8ED818B3DDCD049BABBA89590B8FD7E1BDA7691546D704205BA937FBEF0A9556536A660799251DF11FA26C6B11B94411CBF8CA75DC6CBE84540DF60E966AB5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.107/dotnet-sdk-2.2.107-win-x86.zip\",\n            \"hash\": \"3B1BBE1B528FF86E0CF5B495C4E743109083D5DB1DD26B7BBEC90A466FFB74BA012EA3FFDC80712025D6F095025E028AAB70A08E2FDA30ADB7F53B15624706E4\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.5\",\n        \"version-display\": \"2.2.5\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19109.5\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-linux-arm.tar.gz\",\n            \"hash\": \"16AABD3FCD0EADCFBFEA37DB976E05EF8997820F84C00EEF7994BF529BB9FFDD5628E7E12164B7288DEF9CDF27F0243CFF57780FE1333AF66E6452E84EAF52C0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"6DC1058C218A8AC70C4EA8CE0C62A0CE275374C282FF87FCAC940C9E472297EFFAAB94FB7E1738D68E61F1F021166E9F565E676A0A9DDCF2AEB0762144BF7B92\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-linux-x64.tar.gz\",\n            \"hash\": \"B208BCECA2A80C75DD40DEE7F1DAF88824062EABF5A929E189FB83FC6B8D4C7A05B61A37C7A7A4962E63E83860E4CD34B31B67582CB8CCE76AF05EF0DEEDDDD7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-osx-x64.tar.gz\",\n            \"hash\": \"6B06C6649F31CC39B1D39D691BED8323196F080E5B29ED677EAEB75CE11AE8C6145461D940117F8EB89CE020B674C32B11E9429E8CD38788D856C925493E28C7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-arm.zip\",\n            \"hash\": \"67C15B315F3158ED82E7BEC210A79C47D02A459808A10E345899B28EB9A458C02DE2DFC86CA7DC975E26124CF850CE63CCDDA3C1A68B1699F3FB1DCA69036A57\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x64.exe\",\n            \"hash\": \"7664A6C0C70F93B2E20E6C60AFE2C7FC38D5DC7C420C23A4F76A49F610A2C679DD9A582FBEFC12454D4994520C3D9FDCBAC62169B5D913836976903F656BEF98\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x64.zip\",\n            \"hash\": \"7F8163E2DD6EF8C430E0F7A35117A547090A15C0A362348FAEBEDBA99287FA89A214F86C54266BD002388A19A1369FEF0FF3F73E1D29DB34FE1DA48B6E535BC7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x86.exe\",\n            \"hash\": \"EF107FE682D7FC0D445257C80038D26DEBD6294B9F0B03141F39A3370F486E173D36D5D7A5C64390FF6447ECA04906EE940F06DB005FFEFBA9C3973AB4BE8738\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/aspnetcore-runtime-2.2.5-win-x86.zip\",\n            \"hash\": \"00B4D2B8E5ED7CCC930A9E192A72D91360C4CD0BF35F065A5C88786C66FC5DE5B5778E11E7592CC49B2ABC2150D6C91B2C16CEE013A989E53641EB04EE6331F2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.5/dotnet-hosting-2.2.5-win.exe\",\n            \"hash\": \"5F06FE9E2A894C4E089CE51FE6FEE7E79FD1062E1CF2B3F18C5B205B4031F417E4CD4FD93BD2DC308B7CBD4340C9CF8C26CDB3AB173F6137399503B1E3A61AEC\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0c8969d6-a150-4fd0-b5ee-f85cf47b29fd/8628d29e58df3e675327e89a3cc02eb6/aspnet-2.2.5-symbols.zip\",\n            \"hash\": \"3B11929D9666EDE0BE027BFCB3C68E86B946841A29B509CDC380D0D431CC053CEC349628091DD650EB739737AAA05AED94174E0C63AFD520731C6075F921FF6B\"\n          },\n          {\n            \"name\": \"aspnet-extensions-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1d8cdfb8-e3b4-470a-838b-629a4df38034/a3b613b6c5bd68514e6ffdc68e43402d/aspnet-extensions-2.2.5-symbols.zip\",\n            \"hash\": \"10AA33B95444E4F57B2A662C4E3EA1C7782576208D4B80E8156F206BD3BFCDA3222484A06172046055D2ECE556C28F83A6E8FB2E47EC3ABB0110A4843C937553\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b7a489d4-5833-486e-af48-47aeba1deead/6e23995d55fdb4241e9135a5f60a975d/cli-2.2.5-symbols.zip\",\n            \"hash\": \"828CD0BFA2F7AF2631687644D539F078B3C5D3053F41F9D431206C40AB855ED47C58C3B935CAE1B5D60BE4AF294D48891556DAEFF0F2F76551CEFB4DE334E90F\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0cb24dfa-e1c8-4c7d-b6e8-ada512a895b4/4431f0316bd4af2c8d93df78bddd3931/core-setup-2.2.5-symbols.zip\",\n            \"hash\": \"0B9D3F36690839BF0AF6BA36F61496D0DA98DB179C973B4C76A4A9D592A2FC2B214D7C345EE4E69CD4520103E48FE7B644BE7B4AB2390EF767FCF9831223650A\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/173d6b83-0ee0-4a76-88d4-1b2cb9defc35/5603ecf3d3b2b346f1c41d1ea9d1a6dc/coreclr-2.2.5-symbols.zip\",\n            \"hash\": \"13243A47FF33931F6DD50AD89452AE4DAD302922F2A8667BA6B6FF100F5B2256A191B8D85719F1921AA9FE05DC275F11AE1235995B2E6B232B84169EC37527C9\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8ca8518d-3e3e-438b-bb1d-130e96896abf/fb6ce1b1bb8215f0d41c9004d45819ec/corefx-2.2.5-symbols.zip\",\n            \"hash\": \"31BD76CB1D12A7C1A9A89994E0074F344B8AB8F8C2FDE94E931C4854197CFA6AA358E0A5AB31E1C226A88051C6195CF47E55DD3146FCC3D8A073435AD6398A7F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bc10e87f-b8c9-475f-b128-c79f1b10a479/89bb00ae7d070290942a48261504a73a/dotnet-sdk-2.2.5-symbols.zip\",\n            \"hash\": \"DB653C4DC2E058F30BBAFDC15F0DA428227526BFEAFB09DECB05CB385AA982B5886DA150AAE5657DE552CF225E89FBC01ABE68ECFA830209962947E999557E1B\"\n          },\n          {\n            \"name\": \"sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9b63dd6e-9ad5-4fd7-a269-2a1ff6795665/ec2b12679604ba6a073d58e2ab78a656/sdk-2.2.107-symbols.zip\",\n            \"hash\": \"4EBA7F4A9424682DA91E9B9933D73454BE662258D4C9921B8365B96E0A706D5BF922B1629C5568D0A76EFD42B2B73ED0D2B86A0FD23352D72F44AF04C3D364A1\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-04-09\",\n      \"release-version\": \"2.2.203\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0815\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0815\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.4/2.2.4.md\",\n      \"runtime\": {\n        \"version\": \"2.2.4\",\n        \"version-display\": \"2.2.4\",\n        \"vs-version\": \"16.0.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-linux-arm.tar.gz\",\n            \"hash\": \"B9D846EA5881C818850413F42A3B28CAAD176E9E337EC2097986988A4FC45EDFC98D0DB266316812D046A92B40888B14C39D872CA165E01DE3A06C5899CADC7B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-linux-arm64.tar.gz\",\n            \"hash\": \"782271E8C1D4D1C5617EF9360E7D489AF65CF9A2EE963276CE820A68CDA0B36520FCB0D08485BCA2DF6FA3295A14624FBE12C378B8E52C6A4CB85213E13B59D2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"97FED0C8751A4D6C596D49764FCF38F9F3ADD7456C5A311C6FD9530A8540B1FD52970F4CA0E8CEA34FFE8CC8059C85473281A499A797DDF18773380C92F092CA\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-linux-x64.tar.gz\",\n            \"hash\": \"14B9DFAD2899054B55A533ADB213A88C19977C34D1B40D7D5095D05BA72EB3E3C229F2A6EC5BB5605133BCAEF0B4A68416A90A9C6D572DCE1E2C423ABDA2272B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-osx-x64.pkg\",\n            \"hash\": \"E53E16B1C7E6E372EE1B84B86994F9DD8521618E8531B72CC4946A69F1B74F8F9C65C07FE1F0F81865A6F789A9CA624C7FD9B8B4C0C775B59043F5492362A37F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-osx-x64.tar.gz\",\n            \"hash\": \"500C9FCA155678D8CE94834E0B2B2B220F1F6CC424285EC7933CE028AD1CE9ED249FC051BB8134E58B630DE613C3ACD87F4C5D73F173158F604BD17F0EB4A434\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-rhel.6-x64.tar.gz\",\n            \"hash\": \"4D867CCCCEDFA6FC23861D92E3D895F42134B0FE19F4BE85F6E4EDAAD15ED89A23C4E573444A6C44E1B307AB555D9248294E8929075DDF59D30CA645D383F0C9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-arm.zip\",\n            \"hash\": \"6524A6CA5094EC42C856A63D1F99AC7000B024F5F7408D44C04F36C8B0310487DD74DBFBA387DAACA4B8F250DB42360FD2238A3A6751298FB00FBEA48DD3F62E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-x64.exe\",\n            \"hash\": \"4F791C2E6752E512F3914C75CAF485C961DBB55D177CBCC4027BF471B508DFE4CB7524A100E9F20EF775A915DF123AE0F2010E92E959FC5CD178276B622D401D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-x64.zip\",\n            \"hash\": \"470E847E3964C29B4D23F11FFD6A9A3FCD1FB386457BF2D75A329F0FCAE180225DC9E8175A35602979BD7E61132A1519EDAC110DC6D863792E234EF0BF8F48CD\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-x86.exe\",\n            \"hash\": \"02AA3F84D37B24203F051C19E18E4E712F8544D55BF387E8F8679CE78E416ADE9C12859509CF4520EEB43D23AC78805C0B44B60356024C56D71FF573C25171A7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-x86.zip\",\n            \"hash\": \"F394FDA4F53F59C32D5E08F719434632D8B4E3F6F987E4A749897AAC01D6E4625D2A3BABC96D3BFAE6910107D80D12FFB004E82F9224F2D8FB1B973E1A00D377\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.203\",\n        \"version-display\": \"2.2.203\",\n        \"runtime-version\": \"2.2.4\",\n        \"vs-version\": \"16.0\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-linux-arm.tar.gz\",\n            \"hash\": \"B08A0E72315D7658A76C8E3900D787E7678072E2FBDEA148499BD34D942BFD2665B4ECC95BFAB7ADF33613CD78064BBABF6759E227508A683A63F902A4F08703\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-linux-arm64.tar.gz\",\n            \"hash\": \"27819A8E772C4B8D3323BC2957C8905C873E91D1CB524FD7CFE71742491DD8A7573C511DDBFD677A3E6AE996C10D80DE8119EC00BF09EF08237BB00E6E328B8D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-linux-musl-x64.tar.gz\",\n            \"hash\": \"18C821C8F9C110D3E1BC4E8D6A88E01C56903A58665A23A898457A85AFA27ABFA23EF24709602D7AD15845F1CD5B3C3DD8C24648AB8AB9E281B5705968E60E41\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-linux-x64.tar.gz\",\n            \"hash\": \"8DA955FA0AEEBB6513A6E8C4C23472286ED78BD5533AF37D79A4F2C42060E736FDA5FD48B61BF5AEC10BBA96EB2610FACC0F8A458823D374E1D437B26BA61A5C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e806668f-6825-4754-9d3d-7a2c1c45304a/ee61a77eaf402ccb14c41f7bb10b6e94/dotnet-sdk-2.2.203-osx-gs-x64.pkg\",\n            \"hash\": \"295870A9A8DE1213B4292B32828BADC52158CA4427F7BC511B1067EFDAFCD1D17AF6E7365BE5DEF60FE5DC3E1DF087776C234CD77F96B7B98D9C06B8FC0071DB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-osx-x64.pkg\",\n            \"hash\": \"295870A9A8DE1213B4292B32828BADC52158CA4427F7BC511B1067EFDAFCD1D17AF6E7365BE5DEF60FE5DC3E1DF087776C234CD77F96B7B98D9C06B8FC0071DB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-osx-x64.tar.gz\",\n            \"hash\": \"ED3C0E954B317508E2980D3E96BBB0AF86C1C420C7C926A15ACBD3D48706EE2382E0A70C16CB3385B1CD2E6BD3CA2E68D9D2B6DC6746621A7E7E9DDF36D8EF11\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-rhel.6-x64.tar.gz\",\n            \"hash\": \"4D9608BD5B9690BCE94AFA57822EC9467903760D821D330B0054B438A29BBD5C1D3FF8DEA5199C1445369F2F0E9B4B79452BF91E6B55C64BF4C0870E62D02DE0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-win-arm.zip\",\n            \"hash\": \"92F4E4424EAE5DCADF1B82FE632FCC7B6A8F8F50B311535D45B80B639A93F74A246643BB7E5848EFB80D299F2BDE5787A23D7170B46B15199A1669F12703920B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b5b2c515-9909-4912-9631-b5b8adeaac1f/e44d9456a5ffb5d325f361f3babc67c0/dotnet-sdk-2.2.203-win-gs-x64.exe\",\n            \"hash\": \"8286860182B7AF6259AA9F28BD58A64B6EB92AFE3F8E6A9BC8DD15793F2A94DD06FABF60B22B9A786461F0BB27982B55184890C8409BC2BDDD5E3C1A02DDBB52\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c80334ce-82e9-474b-bbbb-a2dcbdc69b41/8020fe6e67ba8f232ff5b01470cf6bad/dotnet-sdk-2.2.203-win-gs-x86.exe\",\n            \"hash\": \"561EBD4546E5CB44D4414D29A085CDEFC60D60EAED1DA82C179860A3E5384BFA48961A709249C5572D1785E2CA123F020A6353F158EB095584978E1C933D3D6C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-win-x64.exe\",\n            \"hash\": \"8286860182B7AF6259AA9F28BD58A64B6EB92AFE3F8E6A9BC8DD15793F2A94DD06FABF60B22B9A786461F0BB27982B55184890C8409BC2BDDD5E3C1A02DDBB52\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-win-x64.zip\",\n            \"hash\": \"8A92BE12F5373FA4CBFEA99E7EDBE082E6ACEA9E3D50B7B61EBB9399A11653A7E14CC643F75BF90DDF3B94EC6929CD3D799CAEDE9ADD2CB14BBB985A0E730706\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-win-x86.exe\",\n            \"hash\": \"561EBD4546E5CB44D4414D29A085CDEFC60D60EAED1DA82C179860A3E5384BFA48961A709249C5572D1785E2CA123F020A6353F158EB095584978E1C933D3D6C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.203/dotnet-sdk-2.2.203-win-x86.zip\",\n            \"hash\": \"81B86017B5FE861D30060AD7D904DE7FB73A35C31639918A37687C47C445204E5471C0B613218650ECC3316FD938CCBADECD6A42AFAD849B46D79C1539A26103\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.4\",\n        \"version-display\": \"2.2.4\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19048.0\"\n        ],\n        \"vs-version\": \"16.0.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-linux-arm.tar.gz\",\n            \"hash\": \"23A88907247D4D312A2C5C798EE2D8A3D11E3CBCFBF4ACA8A622657D7BF17CDB1921E770EB1B2E6750B3BF84E05B450C205A9A09249E415AC432D584643C3E63\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"E807C62CAC7FC101DF54D623398189DF8795226B6567DF6334C8A16060ABDF4D60D1DF0C39ABDEA3E786EA8395DA21EDA12F1C530D4FFCF00CE2C52148262D48\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-linux-x64.tar.gz\",\n            \"hash\": \"8EA3DD1A5F955AA6B5816C99843CB2A247B1578292E41A66220D84188E36669C836BBFC961206BB51558E6D1B14F1597D16194A9679A227F33AABE4BC3382D4F\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-osx-x64.tar.gz\",\n            \"hash\": \"64D680A9A177CAA36C6A81CC757BFF61CC573805B730D6B46312D9AE43CB28B668684399616F3AA1F1ADAA7B71C0049651F23A850E4F5DEF1CC5C311CBB57FF4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-arm.zip\",\n            \"hash\": \"906DAC726D476CAEE72BA85EED6BDE91311D5FA6C77512565ED4C97C1C4836F6884EB527B1CD62F3F5FB02CDA10E727AED28450BBD07D0D91395E73F0CF3F8B8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-x64.exe\",\n            \"hash\": \"AE4F355E41D7677C4DB2BC52CD23F0EE300766DEFB628DEEDCE6AEF43FFAADF3D19B05F6AE3E5333BA122C2778AA9EB9A467ABEB345B767AC684C65EFB31FC76\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-x64.zip\",\n            \"hash\": \"1F440DCDCF47A6F50316C0173E0885AAC67B9CC0BA7B6FC70DF17AC4DE6B1A16E7BD2BB38A35FF21190FF87855EB98B5F1E252588F140C16AF55AE84B5644B7B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-x86.exe\",\n            \"hash\": \"4ACB90B48B0565257A0E039B0207C9D0581A73D15A52254B4E9305307CA047FE14D0644ACBDC2AFE9559D395595D2BB42518522D76B3EF2DAF3923E31AA39ADE\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-x86.zip\",\n            \"hash\": \"0219F65792F88C0A8BCAA6E17F4F70AD488B3A8FF21F08E4AB65A97330178D42218D3105A3A2E1AFBC44FCA6727B16A99D0F3ADE8D2D4131E960FE6B2777E655\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/dotnet-hosting-2.2.4-win.exe\",\n            \"hash\": \"4B12589FBBE6777DC81F287837689B6465C3B0D06DBDA4D21117B4B7285AA5A4A0BEDE742E572F90F5F70A8D4E1ACAB18BA1F0151B9CF412340C8037E9FAD179\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b343ad77-edd2-455f-9813-b9f3e5e743d9/1937f1a021a7d8052ce39f5a67cbf5fa/aspnet-2.2.4-symbols.zip\",\n            \"hash\": \"390CDB4ABFD212E83771EDA1E7FAB27134061F041618B5C33AC711535C728238D237E9E89CFA907AD853EA329BE59BD1ACA9790CA099FFF75B08A693C43BDDED\"\n          },\n          {\n            \"name\": \"aspnet-extensions-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/01cfb96c-acde-4700-af4c-72852042769f/a3d0d4ca9de2dd279692f5a1cad75aea/aspnet-extensions-2.2.4-symbols.zip\",\n            \"hash\": \"1B03B67BC2D655D2F6FA8A54B33F20D78026F8092ED1ACED620ACC722348318EA8C404801484CBC6B87F30B631DA78E4C959CEF42DA73C45D0A81BD30FBFE673\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e22b6a72-eb1d-4a8f-ba40-2b55b5fa1732/27761268efdb4045ba9984b10dd8a3f5/cli-2.2.4-symbols.zip\",\n            \"hash\": \"35A55899C18AA80F9895DFDA31D2E75E1A79B4F9B10F5B97571466949654269F1A705B3E9A9F306CA9963502380A06E34C8E0A35E11E5B289CBA59580C5E36D8\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b4fe8af9-3113-48db-8c6c-2845e7741631/4b2acac94e15bab914698c958f4060c9/core-setup-2.2.4-symbols.zip\",\n            \"hash\": \"B0DDAECC4A46CD2FC02D1583F87B80EAE0545A9D1F0DA02831F05A835E32956F126565122AF617881AA2BE3A09E641C6D83D31A40240D7396A5B120E8893F666\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c73c191b-c1e7-4a42-a290-01fae122f956/456302207affcfd4a43af82c32dd3e8e/coreclr-2.2.4-symbols.zip\",\n            \"hash\": \"826BFB2439812D9919BA32E104ECE9C0AFB5DFBBF9265064465BC3E5EA82B6E557515813A4EE4371378874E7F490CB06338D86D4B704BE905105E20E64398869\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ba7202ff-a4c7-4eb3-ad5e-8448f16c7b41/8cc77f8453c8a40a6ac88c1ea3213d17/corefx-2.2.4-symbols.zip\",\n            \"hash\": \"7FBA626A4110070B76658E483B24FC922400CCD78C8B64EC7536CF53D711CC918B3E6E7C7BA63E4A3E707DFACDE4240870E77F80CB5FE472A9B2282B9FFE152C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9de1579e-a940-4279-9b81-3e80654e29e2/02f79685daffe061821ffde0332ebfa3/dotnet-sdk-2.2.4-symbols.zip\",\n            \"hash\": \"3D5FC02F1E672122CB6D8047DCE7907841F70B28BC2C2A1E8BB788C471576DBA8C9706B6CED6E0617C196467B10BE1FEC622DCBEDBD96271EEDACA7F134132CE\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-04-09\",\n      \"release-version\": \"2.2.4\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0815\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0815\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.4/2.2.4.md\",\n      \"runtime\": {\n        \"version\": \"2.2.4\",\n        \"version-display\": \"2.2.4\",\n        \"vs-version\": \"16.0.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-linux-arm.tar.gz\",\n            \"hash\": \"B9D846EA5881C818850413F42A3B28CAAD176E9E337EC2097986988A4FC45EDFC98D0DB266316812D046A92B40888B14C39D872CA165E01DE3A06C5899CADC7B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-linux-arm64.tar.gz\",\n            \"hash\": \"782271E8C1D4D1C5617EF9360E7D489AF65CF9A2EE963276CE820A68CDA0B36520FCB0D08485BCA2DF6FA3295A14624FBE12C378B8E52C6A4CB85213E13B59D2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"97FED0C8751A4D6C596D49764FCF38F9F3ADD7456C5A311C6FD9530A8540B1FD52970F4CA0E8CEA34FFE8CC8059C85473281A499A797DDF18773380C92F092CA\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-linux-x64.tar.gz\",\n            \"hash\": \"14B9DFAD2899054B55A533ADB213A88C19977C34D1B40D7D5095D05BA72EB3E3C229F2A6EC5BB5605133BCAEF0B4A68416A90A9C6D572DCE1E2C423ABDA2272B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-osx-x64.pkg\",\n            \"hash\": \"E53E16B1C7E6E372EE1B84B86994F9DD8521618E8531B72CC4946A69F1B74F8F9C65C07FE1F0F81865A6F789A9CA624C7FD9B8B4C0C775B59043F5492362A37F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-osx-x64.tar.gz\",\n            \"hash\": \"500C9FCA155678D8CE94834E0B2B2B220F1F6CC424285EC7933CE028AD1CE9ED249FC051BB8134E58B630DE613C3ACD87F4C5D73F173158F604BD17F0EB4A434\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-rhel.6-x64.tar.gz\",\n            \"hash\": \"4D867CCCCEDFA6FC23861D92E3D895F42134B0FE19F4BE85F6E4EDAAD15ED89A23C4E573444A6C44E1B307AB555D9248294E8929075DDF59D30CA645D383F0C9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-arm.zip\",\n            \"hash\": \"6524A6CA5094EC42C856A63D1F99AC7000B024F5F7408D44C04F36C8B0310487DD74DBFBA387DAACA4B8F250DB42360FD2238A3A6751298FB00FBEA48DD3F62E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-x64.exe\",\n            \"hash\": \"4F791C2E6752E512F3914C75CAF485C961DBB55D177CBCC4027BF471B508DFE4CB7524A100E9F20EF775A915DF123AE0F2010E92E959FC5CD178276B622D401D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-x64.zip\",\n            \"hash\": \"470E847E3964C29B4D23F11FFD6A9A3FCD1FB386457BF2D75A329F0FCAE180225DC9E8175A35602979BD7E61132A1519EDAC110DC6D863792E234EF0BF8F48CD\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-x86.exe\",\n            \"hash\": \"02AA3F84D37B24203F051C19E18E4E712F8544D55BF387E8F8679CE78E416ADE9C12859509CF4520EEB43D23AC78805C0B44B60356024C56D71FF573C25171A7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.4/dotnet-runtime-2.2.4-win-x86.zip\",\n            \"hash\": \"F394FDA4F53F59C32D5E08F719434632D8B4E3F6F987E4A749897AAC01D6E4625D2A3BABC96D3BFAE6910107D80D12FFB004E82F9224F2D8FB1B973E1A00D377\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.106\",\n        \"version-display\": \"2.2.106\",\n        \"runtime-version\": \"2.2.4\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-linux-arm.tar.gz\",\n            \"hash\": \"3B88C6AA031CDD92B88377468A2538041E38E43BE167968F0FDB5C0F906BED79CB2DE5FFD1775CB8553BAE08A84BF1C15E138CDD9DFE86E92D0098EC0FE1E8A9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-linux-arm64.tar.gz\",\n            \"hash\": \"AF04D89F249D1E712E0AA7EF9231AF8E6A2E8FCD72391CD128F3A29F5A06B4CB4E21E12DEEBF7F4CD67C2070935CA899A56204836E6E8CD78948161F83341025\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-linux-musl-x64.tar.gz\",\n            \"hash\": \"C02A34F8AEA4DE56F536AD365E10112857C8813ABC043E688816569AC72154FE58D21C35836D00CBE6D44A0FE3E4515DAC4E67326648F42C95D19BB73817F8EE\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-linux-x64.tar.gz\",\n            \"hash\": \"CF1CF0CD909BD622B623A6BB96ADBA705DD0DAA217EA8A791E3C6D932F3DED24D28802609498FAC20C15AD587D1DC2CF16C1607AF1C7B0CDDEBA02FBAEFEDC53\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3016849c-82af-433f-afc3-78f0e5d087aa/cd7232c238c583570ed8d60dd00324e5/dotnet-sdk-2.2.106-osx-gs-x64.pkg\",\n            \"hash\": \"A69FE98A41DFC1A16C81C1C2B5C5F8BBABA93BEA3894EB18A39BAFB47682B02144AA8CAD991BA8B0FD4BFA6D44940ECC7E7EFF9048EB7D1F3475A6A95D507F42\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-osx-x64.pkg\",\n            \"hash\": \"A69FE98A41DFC1A16C81C1C2B5C5F8BBABA93BEA3894EB18A39BAFB47682B02144AA8CAD991BA8B0FD4BFA6D44940ECC7E7EFF9048EB7D1F3475A6A95D507F42\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-osx-x64.tar.gz\",\n            \"hash\": \"BE68AB7AAF4C910B97319E27D9C6BD76C3A6DDD36C1918D9FC9A39C86D3FD14A5419FBC7703F15F5B89423522B8BCBAA8D547F8ADADBBA1BBD6E579D5C6B5A92\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-rhel.6-x64.tar.gz\",\n            \"hash\": \"24E6B6C5F56946A686BF71EBA28796BCFBFD6A6177FA09C846E44387BCF894D9D89AC01C8608BB30F064C9B0817AE4E6DE23D15FE44BFC0BFDA8532551C93506\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-win-arm.zip\",\n            \"hash\": \"EEE5BFF2AFDD26F4BB6EC42D0E004FE78D3A1C23A2223281ADCA07B044F50BAE677CEEDB3BB37B02B371498FCC45A2EE494D5216D193FF7F6ECF09952F96B540\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9710ef40-b5c3-41af-8aa9-af9fc7627d7e/2a188550b5d144f038a341bbc80bb525/dotnet-sdk-2.2.106-win-gs-x64.exe\",\n            \"hash\": \"5AF544929C4E2732947E3FA967B18A56E0BC87CFEC109793B951023E3B7248E9584455809538B087320A46EF24602D5FE38AD9F99D67219E59903BD395A3D467\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/729f4d8c-1212-45af-bf94-81ebf4dc8d53/1343f83e0b699c448d1312f0308f8deb/dotnet-sdk-2.2.106-win-gs-x86.exe\",\n            \"hash\": \"70647C17677E5D77ACE92BBF7A8D054FDCC10468D97A61212CEB8843F6F280C6F1521C0A165156D481AB910752A09E6B32E27B2385D5114E3988DA53A281B0FB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-win-x64.exe\",\n            \"hash\": \"5AF544929C4E2732947E3FA967B18A56E0BC87CFEC109793B951023E3B7248E9584455809538B087320A46EF24602D5FE38AD9F99D67219E59903BD395A3D467\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-win-x64.zip\",\n            \"hash\": \"45B36B678222DF7E862D512964E7D3C95E0A6E6AA841B922CF5A7A412C38811E9F9E86F5B36AEAF4CE08411AD2AC405E152C948E7F513DC81AF7DD5A00C9CEB0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-win-x86.exe\",\n            \"hash\": \"70647C17677E5D77ACE92BBF7A8D054FDCC10468D97A61212CEB8843F6F280C6F1521C0A165156D481AB910752A09E6B32E27B2385D5114E3988DA53A281B0FB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.106/dotnet-sdk-2.2.106-win-x86.zip\",\n            \"hash\": \"0B7EBDFB6BAAB3A9B26D8A24D90FB904B91046E2CC34618ACB8C9E23839579366C4B2C6BF4F3C2707BB1BFEDEE8BF983FA2AB8FDCCA272F8B593CF3A3E38E440\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.4\",\n        \"version-display\": \"2.2.4\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19048.0\"\n        ],\n        \"vs-version\": \"16.0.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-linux-arm.tar.gz\",\n            \"hash\": \"23A88907247D4D312A2C5C798EE2D8A3D11E3CBCFBF4ACA8A622657D7BF17CDB1921E770EB1B2E6750B3BF84E05B450C205A9A09249E415AC432D584643C3E63\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"E807C62CAC7FC101DF54D623398189DF8795226B6567DF6334C8A16060ABDF4D60D1DF0C39ABDEA3E786EA8395DA21EDA12F1C530D4FFCF00CE2C52148262D48\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-linux-x64.tar.gz\",\n            \"hash\": \"8EA3DD1A5F955AA6B5816C99843CB2A247B1578292E41A66220D84188E36669C836BBFC961206BB51558E6D1B14F1597D16194A9679A227F33AABE4BC3382D4F\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-osx-x64.tar.gz\",\n            \"hash\": \"64D680A9A177CAA36C6A81CC757BFF61CC573805B730D6B46312D9AE43CB28B668684399616F3AA1F1ADAA7B71C0049651F23A850E4F5DEF1CC5C311CBB57FF4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-arm.zip\",\n            \"hash\": \"906DAC726D476CAEE72BA85EED6BDE91311D5FA6C77512565ED4C97C1C4836F6884EB527B1CD62F3F5FB02CDA10E727AED28450BBD07D0D91395E73F0CF3F8B8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-x64.exe\",\n            \"hash\": \"AE4F355E41D7677C4DB2BC52CD23F0EE300766DEFB628DEEDCE6AEF43FFAADF3D19B05F6AE3E5333BA122C2778AA9EB9A467ABEB345B767AC684C65EFB31FC76\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-x64.zip\",\n            \"hash\": \"1F440DCDCF47A6F50316C0173E0885AAC67B9CC0BA7B6FC70DF17AC4DE6B1A16E7BD2BB38A35FF21190FF87855EB98B5F1E252588F140C16AF55AE84B5644B7B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-x86.exe\",\n            \"hash\": \"4ACB90B48B0565257A0E039B0207C9D0581A73D15A52254B4E9305307CA047FE14D0644ACBDC2AFE9559D395595D2BB42518522D76B3EF2DAF3923E31AA39ADE\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/aspnetcore-runtime-2.2.4-win-x86.zip\",\n            \"hash\": \"0219F65792F88C0A8BCAA6E17F4F70AD488B3A8FF21F08E4AB65A97330178D42218D3105A3A2E1AFBC44FCA6727B16A99D0F3ADE8D2D4131E960FE6B2777E655\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.4/dotnet-hosting-2.2.4-win.exe\",\n            \"hash\": \"4B12589FBBE6777DC81F287837689B6465C3B0D06DBDA4D21117B4B7285AA5A4A0BEDE742E572F90F5F70A8D4E1ACAB18BA1F0151B9CF412340C8037E9FAD179\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b343ad77-edd2-455f-9813-b9f3e5e743d9/1937f1a021a7d8052ce39f5a67cbf5fa/aspnet-2.2.4-symbols.zip\",\n            \"hash\": \"390CDB4ABFD212E83771EDA1E7FAB27134061F041618B5C33AC711535C728238D237E9E89CFA907AD853EA329BE59BD1ACA9790CA099FFF75B08A693C43BDDED\"\n          },\n          {\n            \"name\": \"aspnet-extensions-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/01cfb96c-acde-4700-af4c-72852042769f/a3d0d4ca9de2dd279692f5a1cad75aea/aspnet-extensions-2.2.4-symbols.zip\",\n            \"hash\": \"1B03B67BC2D655D2F6FA8A54B33F20D78026F8092ED1ACED620ACC722348318EA8C404801484CBC6B87F30B631DA78E4C959CEF42DA73C45D0A81BD30FBFE673\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e22b6a72-eb1d-4a8f-ba40-2b55b5fa1732/27761268efdb4045ba9984b10dd8a3f5/cli-2.2.4-symbols.zip\",\n            \"hash\": \"35A55899C18AA80F9895DFDA31D2E75E1A79B4F9B10F5B97571466949654269F1A705B3E9A9F306CA9963502380A06E34C8E0A35E11E5B289CBA59580C5E36D8\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b4fe8af9-3113-48db-8c6c-2845e7741631/4b2acac94e15bab914698c958f4060c9/core-setup-2.2.4-symbols.zip\",\n            \"hash\": \"B0DDAECC4A46CD2FC02D1583F87B80EAE0545A9D1F0DA02831F05A835E32956F126565122AF617881AA2BE3A09E641C6D83D31A40240D7396A5B120E8893F666\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c73c191b-c1e7-4a42-a290-01fae122f956/456302207affcfd4a43af82c32dd3e8e/coreclr-2.2.4-symbols.zip\",\n            \"hash\": \"826BFB2439812D9919BA32E104ECE9C0AFB5DFBBF9265064465BC3E5EA82B6E557515813A4EE4371378874E7F490CB06338D86D4B704BE905105E20E64398869\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ba7202ff-a4c7-4eb3-ad5e-8448f16c7b41/8cc77f8453c8a40a6ac88c1ea3213d17/corefx-2.2.4-symbols.zip\",\n            \"hash\": \"7FBA626A4110070B76658E483B24FC922400CCD78C8B64EC7536CF53D711CC918B3E6E7C7BA63E4A3E707DFACDE4240870E77F80CB5FE472A9B2282B9FFE152C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9de1579e-a940-4279-9b81-3e80654e29e2/02f79685daffe061821ffde0332ebfa3/dotnet-sdk-2.2.4-symbols.zip\",\n            \"hash\": \"3D5FC02F1E672122CB6D8047DCE7907841F70B28BC2C2A1E8BB788C471576DBA8C9706B6CED6E0617C196467B10BE1FEC622DCBEDBD96271EEDACA7F134132CE\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-04-02\",\n      \"release-version\": \"2.2.202\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.202-SDK/2.2.202-SDK.md\",\n      \"runtime\": {\n        \"version\": \"2.2.3\",\n        \"version-display\": \"2.2.3\",\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-linux-arm.tar.gz\",\n            \"hash\": \"BA2DA77A6DD186FC26E61706813A38D4854D8DC703066949E2D2130613DEDD9F07CAE76128EA331608ACA0D500CDA2D59A41F1C2B44956494E5AC4C3D6C4FA03\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-linux-arm64.tar.gz\",\n            \"hash\": \"7994EFDCBC06E3A2E0FCE75FC036BBC1FD469C21BDCF4B596688A7402DE6B18313273BD4EA3DFAB050B843F9D336CA56BC57139CDEBADD9F538A0CAB3ED6DC10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"B11E8731DD2E6B8738FB3A2762ED90DE08DF6661A8720ED76EF9429B99D763D0913EE100042A2995D72A13B50394A7E357397CECB23402C3104075EFDA04F62B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-linux-x64.tar.gz\",\n            \"hash\": \"476DF111A1A7786B742B69759DA36185720707AD45DE0550DEA418484A401FBE338ADB8D1BA2706ABDBB7ED5C489E7D7A76579CA50C60168DBEBE52E00F7071F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-osx-x64.pkg\",\n            \"hash\": \"939722448DE27033DE21EEE7DD045A7AF0AB18AB4A9C8B0FA5862B55FA461DDAF409A567BCD0409F8ABA1664CF08108203D9AC4A7C1A1E49D821315D2C9BF735\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-osx-x64.tar.gz\",\n            \"hash\": \"BCACBCDBCF4ACE06D9AAE2A5E0DDE369225E58FD59695913D95584579298D79842F99B56C1F2DEED1857457DAFDAEFFDED103C7818F6675BB6C327D8C6FC364F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-rhel.6-x64.tar.gz\",\n            \"hash\": \"5D2A42808662B22D8814AD387EDCC7CF82DE0195BE55576425E0D14EC1432830471675F78ADA672D50C9A4144F468FB07F7B4EA96C586A462D5CA255B84264E0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-arm.zip\",\n            \"hash\": \"BA71F1BD5B2FFC6CAFC4093AB008018C6EB487DAB995F6588CEDE9B48CF27E129B6B6AF7BB1E5FACC943E0F9CCB771E4CAFE541ADCB36256A5EA1EFBEDBBD59D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-x64.exe\",\n            \"hash\": \"0D5F8A7FE8C8C3AEF0B430E20633A4A18B5F4ACF5AA222B98932DA0E4A5B1F867C0FACF72827FB48A40DF9591FCE74508B00D4E4597ED543A8AD067A76CAFB11\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-x64.zip\",\n            \"hash\": \"BD065BD434D4BFFA0C22605B3D3D12D150EAE41AE45272D51696C8609FF0A83E0F1A147A789DB7AFAA78E8A02B6B167B79B7E5056F21AA0C1168BEA5D14C4451\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-x86.exe\",\n            \"hash\": \"C17DA89114E133836D61360EEE246BBD2A88A60B0990B261A92DAFBCD4B4D9F14C26003C44F4FF575CC170A8FDDDFEDE8C41921993E21BD51E78D42A6A9E9643\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-x86.zip\",\n            \"hash\": \"01E4A3EFCF257CE8B5EBDEEF1185EA0E7C1F359BE7D6A1F826E6B1A74041FE67F450F3472ADBD9507177060C135CE45DEE6051D0680B9671F256686F28AFCEF6\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.202\",\n        \"version-display\": \"2.2.202\",\n        \"runtime-version\": \"2.2.3\",\n        \"vs-version\": \"16.0\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-linux-arm.tar.gz\",\n            \"hash\": \"78E8EC6FF25E2DA3E120C633E6CF546EAC8E9CF4E10A0E1047B35CFDE5DC5BC0CD2945C15E18CCEB1BF4376F292FDBCFF75E5173AD64B7DFC3C67060F902F82C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-linux-arm64.tar.gz\",\n            \"hash\": \"D731FCDA7569201A64959E68F090C0B85D72C4854D0B7C4BDF327DED6885FCBABAB78F5B978E2C76F1831B15FB88A10923BDBC90BD12AFA82677D270F04E72F6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-linux-musl-x64.tar.gz\",\n            \"hash\": \"62FF6177E91A28B994CCDD90C33643C768840AC881A8B47CA2EBB3B546134C21917E6B9E9321DB02855E9C3C84C3ED810969E82A3AB21CB4B5DDD3ACCE285BEB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-linux-x64.tar.gz\",\n            \"hash\": \"14F5C0E6FBB874A882334E0D500E494B01D7F363028E72DB58DFFF6DB43C54670533539DCF6B8F50A97CE1E099119A8286CE84E193B361D65B1FD8C7DFFCE63D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/54e73358-c5fd-4e68-9548-547825bb1f25/2b07be8d371c4919b0bea186f6e5d4fe/dotnet-sdk-2.2.202-osx-gs-x64.pkg\",\n            \"hash\": \"6CA8CBB4187EF3C4A9558C1DD7DF2A2C585E96AF921EBDF5467AB972B5A5474B39567E5B7FB0FAD79487EA15E3971AB063728CD955D15C7C58FE532FA996F5CD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-osx-x64.pkg\",\n            \"hash\": \"6CA8CBB4187EF3C4A9558C1DD7DF2A2C585E96AF921EBDF5467AB972B5A5474B39567E5B7FB0FAD79487EA15E3971AB063728CD955D15C7C58FE532FA996F5CD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-osx-x64.tar.gz\",\n            \"hash\": \"931C41681BA867E63B5C5AAD2D4A8FD888E86190F252E301BD1FDE614ABF10E52D65A0EFC8FA37EDB059928FBDEE0F3AFDDF6D0DEA02E7EB45E4E0E357FDFD3B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-rhel.6-x64.tar.gz\",\n            \"hash\": \"BE7D1E8BFB1FA7DFF51CEAB63E6FBF776416E889C1C671D0C6AAB542CFB7476CF72F7E95C17643A0CD91A0AA34FFE75F437D3AB960016AC7218360866607C2AE\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-win-arm.zip\",\n            \"hash\": \"03CAB9ABE6EA102693199FAFE25D7899495CDEAE5C64BC1A2B2033B028822E243F1C76EABF2306F2B06999A59EE8BA6475062BB403ECB8C210AC8FA58C24DE6D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4145b8a6-dfd9-4677-9a88-416e546fc30b/95a010d11c01c1013dc3943ced53de74/dotnet-sdk-2.2.202-win-gs-x64.exe\",\n            \"hash\": \"0CECEAC51CCE75FD61344EBA77D35467321D11A803F24D303EE73E45463E0C06C252E882E720EA4848A0BCB0C3B1205313A2DBFB50313791A412E502B40FFB5E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/811fb09c-8db7-4208-9636-f741c9e974e2/a38bc4b4bb4f5283215b93fc737e80b4/dotnet-sdk-2.2.202-win-gs-x86.exe\",\n            \"hash\": \"EE7369D7E3608DB07A8D8619D859FE63E479795BCB087F0DACFDA3DCDF9B2AB922496766718316240DAEA10E779BEFA6BC45396CB2C6F3489B6C390CBF08A47F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-win-x64.exe\",\n            \"hash\": \"0CECEAC51CCE75FD61344EBA77D35467321D11A803F24D303EE73E45463E0C06C252E882E720EA4848A0BCB0C3B1205313A2DBFB50313791A412E502B40FFB5E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-win-x64.zip\",\n            \"hash\": \"98F954BE2E6A15E3CD642E7B91B3578DB2BE9DFC91FBB7017CCA553B87853F192C71B28796DF051F5DDDA853B2FCDAC422879F06148F082FAC7F4DA6C1E7C804\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-win-x86.exe\",\n            \"hash\": \"EE7369D7E3608DB07A8D8619D859FE63E479795BCB087F0DACFDA3DCDF9B2AB922496766718316240DAEA10E779BEFA6BC45396CB2C6F3489B6C390CBF08A47F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.202/dotnet-sdk-2.2.202-win-x86.zip\",\n            \"hash\": \"24219B278B04EEA8A25F1C1ACB0D1D746C9F511B5AA6902B37B1DA28A584F4F8D2766CE0BDF2764D4B25634E9097EEE41B47A7A56FBEA94FA56DE84DDEA3C5FA\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.3\",\n        \"version-display\": \"2.2.3\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19024.2\"\n        ],\n        \"vs-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-linux-arm.tar.gz\",\n            \"hash\": \"3D71D970304D35DA75D05650AA8CF9C818DB2FDB478FEA1D76B65118816A2C527F317999BED17F9A1CC2ABFA804CC3CDCC9EF998D8DD1A66C289605F1BF1C8CB\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"9D706C4916EF527FF93DBB2C7E774D6F0482E1D22A1A963FD7F13E7DEAEA8FD3ED754E46D104F9A921751FC83D1DCBD4E582591BB29966EC2A65903CA05A1B45\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-linux-x64.tar.gz\",\n            \"hash\": \"53BE8489AAFA132C1A7824339C9A0D25F33E6AB0C42F414A8BDA014B60FF82A20144032BD7E887D375DC275BB5DBEB71D38C7F90C39016895DF8D3CF3C4B7A95\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-osx-x64.tar.gz\",\n            \"hash\": \"03D618CA64494F5E963F54D5F260B10C0A59E7DD8F83158664FCE51E1944184AD1D66F0E659997B96FF4FCABA26707C0B2841DE58041D2729AF346C098411FC7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-arm.zip\",\n            \"hash\": \"BA2D98CA749197BA9BC5D3D3FB8FBB449BC6A7C36C596AE3AE254066D2E90BB74DA2CDF0C73AFDB57A1821BEC1E7182DDBC464509C716CCC14329974D80F17AD\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-x64.exe\",\n            \"hash\": \"C3222EAA90D7FCEF417EB14CA3E0BAE188A6E70A7B2E14EEE0338E971A24BABE6FD2C6915E401C1D6585E9C5A3DE77CCA8CD13F35366AB98BB249D13CEE2ED53\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-x64.zip\",\n            \"hash\": \"FD367C30C92D543171082A01690BDFB7D3C897CDCE59494A4A536C3085DEAE91EFD87D2BFECF3B9BF2869596B0802A6C37C98462E6B9A589B2CD83A2D89A5056\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-x86.exe\",\n            \"hash\": \"23E3B3A58F29D630024DCDC000B6543E3CCC2C45CEDF77834CA3A030D957204666B8DB45893C37F2C362E3B6024BA6A2F56C3F54135F28651F503AFE8BE01439\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-x86.zip\",\n            \"hash\": \"70288AAD1B06C80159091E203B166880A010B3A52B4422CE90382ABABD4C2AC2A4F8BC02C3B5554FE96E73714F53D36DC016C7F2CD77E603A7EA8234197D38A6\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/dotnet-hosting-2.2.3-win.exe\",\n            \"hash\": \"70D9EEC7DF64BC5CB5C0FAA85B086BC4C45BD1874E9E9C4DC4E594E482F1D4ECC4FD7F220A0A0ACBE8CC4381AF9649F6952DF14E5C5B0F687EBB6E74A90A404C\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f7f28566-3c8a-40bb-9f40-7141376ce88e/72d747b17a54dbccc1262b175f4c8360/aspnet-2.2.3-symbols.zip\",\n            \"hash\": \"804DC5FF4179832D9C2B7F2FF44B7C4A2DE2EA41E1F8547E21CBCD29B831F76266A3B5315E6B56279F470EF93BE93D58977C5135B1F6CD7E0284D09D1AD43168\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cb431d94-36d4-4671-8977-f4649e3ab903/276655436cbbac3e7e810b1cfdaf3c46/cli-2.2.3-symbols.zip\",\n            \"hash\": \"2FB750A94C3C9182FCA500B92F81125FAB67C01FACC77A14F4BE820E9125792B1288B654E7EDE5182C377C6F29F21C1E2CBA7BA365D827B7AFB0CACC8AD05285\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/db4af9a3-5f75-4e3c-92d0-6104fe9be008/8d09884da8f8eb99cfa3ee6ac57516e4/core-setup-2.2.3-symbols.zip\",\n            \"hash\": \"CB8104AB1679421672F59DD214D27DF3A31169B0ECFEAC1615633A5A9FBB0AEE5908D78C80FB151AB2670144CF04AC7183DD3DB2687B69D0A6D23F381F11E599\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6e2d7e59-5f40-43f5-9569-38907d035b90/01e119548f0e9e9c82339cc6ab4ce6f3/coreclr-2.2.3-symbols.zip\",\n            \"hash\": \"416DEE40367342035DF022E23EB18975510D8DDC5B4E666132064FA2DC8DEF490BB9C253D4C366B6B5D569081604B0549A385E8C286D1CF08FBEF15D3D1E616E\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e985d9ca-61da-45a6-a474-190e1d8dac0c/bb0a16d8b290be9ea26e6442c7591201/corefx-2.2.3-symbols.zip\",\n            \"hash\": \"D0055AA3E7A59221E9D517897843DDFA7A44C07A902A252AEE257645C4FA355F8830B7963B03279BA0EBA67C547F8148701773946D85E1EAA100C2A48E515197\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/26cbe290-2523-4d29-9832-b825d28bd73a/23b167b5be34a62955edefc8e84ba76c/dotnet-sdk-2.2.3-symbols.zip\",\n            \"hash\": \"6A3DE00AB975FC424AC8853D7802C638D5874C5971CD665E9C27E64165D090712E242BD4B379B2BEBCA43AC6054CE61AF21E5BF0CB015D64686648431CAD771F\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-03-12\",\n      \"release-version\": \"2.2.3\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0757\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0757\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.3/2.2.3.md\",\n      \"runtime\": {\n        \"version\": \"2.2.3\",\n        \"version-display\": \"2.2.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-linux-arm.tar.gz\",\n            \"hash\": \"BA2DA77A6DD186FC26E61706813A38D4854D8DC703066949E2D2130613DEDD9F07CAE76128EA331608ACA0D500CDA2D59A41F1C2B44956494E5AC4C3D6C4FA03\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-linux-arm64.tar.gz\",\n            \"hash\": \"7994EFDCBC06E3A2E0FCE75FC036BBC1FD469C21BDCF4B596688A7402DE6B18313273BD4EA3DFAB050B843F9D336CA56BC57139CDEBADD9F538A0CAB3ED6DC10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"B11E8731DD2E6B8738FB3A2762ED90DE08DF6661A8720ED76EF9429B99D763D0913EE100042A2995D72A13B50394A7E357397CECB23402C3104075EFDA04F62B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-linux-x64.tar.gz\",\n            \"hash\": \"476DF111A1A7786B742B69759DA36185720707AD45DE0550DEA418484A401FBE338ADB8D1BA2706ABDBB7ED5C489E7D7A76579CA50C60168DBEBE52E00F7071F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-osx-x64.pkg\",\n            \"hash\": \"939722448DE27033DE21EEE7DD045A7AF0AB18AB4A9C8B0FA5862B55FA461DDAF409A567BCD0409F8ABA1664CF08108203D9AC4A7C1A1E49D821315D2C9BF735\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-osx-x64.tar.gz\",\n            \"hash\": \"BCACBCDBCF4ACE06D9AAE2A5E0DDE369225E58FD59695913D95584579298D79842F99B56C1F2DEED1857457DAFDAEFFDED103C7818F6675BB6C327D8C6FC364F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-rhel.6-x64.tar.gz\",\n            \"hash\": \"5D2A42808662B22D8814AD387EDCC7CF82DE0195BE55576425E0D14EC1432830471675F78ADA672D50C9A4144F468FB07F7B4EA96C586A462D5CA255B84264E0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-arm.zip\",\n            \"hash\": \"BA71F1BD5B2FFC6CAFC4093AB008018C6EB487DAB995F6588CEDE9B48CF27E129B6B6AF7BB1E5FACC943E0F9CCB771E4CAFE541ADCB36256A5EA1EFBEDBBD59D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-x64.exe\",\n            \"hash\": \"0D5F8A7FE8C8C3AEF0B430E20633A4A18B5F4ACF5AA222B98932DA0E4A5B1F867C0FACF72827FB48A40DF9591FCE74508B00D4E4597ED543A8AD067A76CAFB11\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-x64.zip\",\n            \"hash\": \"BD065BD434D4BFFA0C22605B3D3D12D150EAE41AE45272D51696C8609FF0A83E0F1A147A789DB7AFAA78E8A02B6B167B79B7E5056F21AA0C1168BEA5D14C4451\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-x86.exe\",\n            \"hash\": \"C17DA89114E133836D61360EEE246BBD2A88A60B0990B261A92DAFBCD4B4D9F14C26003C44F4FF575CC170A8FDDDFEDE8C41921993E21BD51E78D42A6A9E9643\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.3/dotnet-runtime-2.2.3-win-x86.zip\",\n            \"hash\": \"01E4A3EFCF257CE8B5EBDEEF1185EA0E7C1F359BE7D6A1F826E6B1A74041FE67F450F3472ADBD9507177060C135CE45DEE6051D0680B9671F256686F28AFCEF6\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.105\",\n        \"version-display\": \"2.2.105\",\n        \"runtime-version\": \"2.2.3\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-linux-arm.tar.gz\",\n            \"hash\": \"FC79F87691CB7CA1338E292163FB36FA54CED8E72C4CFE749A572FD6857A6FF95D96EC123D3AF28C7569A20A82E3D450A8E08C677692BBAE81F66BA182176422\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-linux-arm64.tar.gz\",\n            \"hash\": \"1E78AD77380AE19F969DEDE4F1E8C2C35EEEF1676F9BA094AAB5A808CC69C3F0E6A4EEF8B1F6126541A0593050B26A57D3A57F36BE0828379C0E439047A46819\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-linux-musl-x64.tar.gz\",\n            \"hash\": \"04045F20440FCA38BC517CF6AE1C6BEA48E773629ADA8B86F3CE0394784B1372A180AA829FA2BCC5ABC184A0E41BABE7C5FF0EF376C2B89AAD271A0CFB3D75E4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-linux-x64.tar.gz\",\n            \"hash\": \"B7AD26B344995DE91848ADEC56BDA5DFE5FEF0B83ABAA3E4376DC790CF9786E945B625DE1AE4CECAF5C5BEF86284652886ED87696581553AEDA89EE2E2E99517\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a4b4e61e-0905-4eb8-9d2c-9f5f390312e7/e1edac05922be70b51007739ed0db49e/dotnet-sdk-2.2.105-osx-gs-x64.pkg\",\n            \"hash\": \"4A5E1B7F89A2D21F913ABB1B2FCD7346D82C8CD8FCBD1B3A1603739068B1CA1B100BFACA9F80281670549D1D71B877F69E529EBF59593F2016FB08C5BA9B481B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-osx-x64.pkg\",\n            \"hash\": \"4A5E1B7F89A2D21F913ABB1B2FCD7346D82C8CD8FCBD1B3A1603739068B1CA1B100BFACA9F80281670549D1D71B877F69E529EBF59593F2016FB08C5BA9B481B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-osx-x64.tar.gz\",\n            \"hash\": \"D49BC0C7AACB4AD03A6BAAED4AF43BD481C2F2977FB8A7C63C0F077A9E82E1D508150523299A4629E9037B4C1038C159DC92D5B992ED5018F467FFA5D88A6975\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-rhel.6-x64.tar.gz\",\n            \"hash\": \"CB9160DC0366617365C8B0CEE86B284A6317049CC3811D79145FD6C2BF2614E5581B41665B2A2ECBE7D060FB9B6BE2D24E93E8686EA1083870D5772EADF66E69\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-win-arm.zip\",\n            \"hash\": \"7ACBE15AD18E5B2C421251A6ED687752DBBDA4269CA23609BF4722862A4EBF88D5233163213DF2DD715C9A086BA617D84CC31EECC80602046D5686404331B29F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/26f5f19d-3eba-4ee0-b4d4-3fa2a6dc0f4b/c4a0c3ff9c8df8e472b51532d7b3eb35/dotnet-sdk-2.2.105-win-gs-x64.exe\",\n            \"hash\": \"0F71DE050A106EC9FB4AE6057BC77387E3BA62485F47DD586E5FB119FB547C6C54C8E2F511D4E1EA8D5B420494C17F85F1BE8C4A48FDC85CBCFE93EE9D51A1A9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e2e6fc59-d6ed-4845-8769-872049fb50b4/d41c74a31b8a64545914dfe2479207ad/dotnet-sdk-2.2.105-win-gs-x86.exe\",\n            \"hash\": \"F64653A6C3EC0CA298E849C2CAB2538BF3643DDDDE276AF512BAF5C3CA8A9E40A8C3FFEC30FC88A846E941B2DC49B61346A28C6DC42B26F735052A591A3651E9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-win-x64.exe\",\n            \"hash\": \"0F71DE050A106EC9FB4AE6057BC77387E3BA62485F47DD586E5FB119FB547C6C54C8E2F511D4E1EA8D5B420494C17F85F1BE8C4A48FDC85CBCFE93EE9D51A1A9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-win-x64.zip\",\n            \"hash\": \"D58B0B3F2F82F3960B84E1A7EE36C4FEBC28DB9E08BB99A6DD0B61E5812631D935C471A5BA2F90C966FBCDDB208454948339EE5C0D7FBAEE4168F3FE6C0827F4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-win-x86.exe\",\n            \"hash\": \"F64653A6C3EC0CA298E849C2CAB2538BF3643DDDDE276AF512BAF5C3CA8A9E40A8C3FFEC30FC88A846E941B2DC49B61346A28C6DC42B26F735052A591A3651E9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.105/dotnet-sdk-2.2.105-win-x86.zip\",\n            \"hash\": \"9F4CE962532915B937C68192ADC8C1B3B747A4270B488F1E7FA9AD6E1AAE12584578FF420CB2E2E736A41CEB617E86334BB6E5BD669895E3B4AD53ACF2C0BF61\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.3\",\n        \"version-display\": \"2.2.3\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.19024.2\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-linux-arm.tar.gz\",\n            \"hash\": \"3D71D970304D35DA75D05650AA8CF9C818DB2FDB478FEA1D76B65118816A2C527F317999BED17F9A1CC2ABFA804CC3CDCC9EF998D8DD1A66C289605F1BF1C8CB\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"9D706C4916EF527FF93DBB2C7E774D6F0482E1D22A1A963FD7F13E7DEAEA8FD3ED754E46D104F9A921751FC83D1DCBD4E582591BB29966EC2A65903CA05A1B45\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-linux-x64.tar.gz\",\n            \"hash\": \"53BE8489AAFA132C1A7824339C9A0D25F33E6AB0C42F414A8BDA014B60FF82A20144032BD7E887D375DC275BB5DBEB71D38C7F90C39016895DF8D3CF3C4B7A95\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-osx-x64.tar.gz\",\n            \"hash\": \"03D618CA64494F5E963F54D5F260B10C0A59E7DD8F83158664FCE51E1944184AD1D66F0E659997B96FF4FCABA26707C0B2841DE58041D2729AF346C098411FC7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-arm.zip\",\n            \"hash\": \"BA2D98CA749197BA9BC5D3D3FB8FBB449BC6A7C36C596AE3AE254066D2E90BB74DA2CDF0C73AFDB57A1821BEC1E7182DDBC464509C716CCC14329974D80F17AD\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-x64.exe\",\n            \"hash\": \"C3222EAA90D7FCEF417EB14CA3E0BAE188A6E70A7B2E14EEE0338E971A24BABE6FD2C6915E401C1D6585E9C5A3DE77CCA8CD13F35366AB98BB249D13CEE2ED53\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-x64.zip\",\n            \"hash\": \"FD367C30C92D543171082A01690BDFB7D3C897CDCE59494A4A536C3085DEAE91EFD87D2BFECF3B9BF2869596B0802A6C37C98462E6B9A589B2CD83A2D89A5056\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-x86.exe\",\n            \"hash\": \"23E3B3A58F29D630024DCDC000B6543E3CCC2C45CEDF77834CA3A030D957204666B8DB45893C37F2C362E3B6024BA6A2F56C3F54135F28651F503AFE8BE01439\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/aspnetcore-runtime-2.2.3-win-x86.zip\",\n            \"hash\": \"70288AAD1B06C80159091E203B166880A010B3A52B4422CE90382ABABD4C2AC2A4F8BC02C3B5554FE96E73714F53D36DC016C7F2CD77E603A7EA8234197D38A6\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.3/dotnet-hosting-2.2.3-win.exe\",\n            \"hash\": \"70D9EEC7DF64BC5CB5C0FAA85B086BC4C45BD1874E9E9C4DC4E594E482F1D4ECC4FD7F220A0A0ACBE8CC4381AF9649F6952DF14E5C5B0F687EBB6E74A90A404C\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f7f28566-3c8a-40bb-9f40-7141376ce88e/72d747b17a54dbccc1262b175f4c8360/aspnet-2.2.3-symbols.zip\",\n            \"hash\": \"804DC5FF4179832D9C2B7F2FF44B7C4A2DE2EA41E1F8547E21CBCD29B831F76266A3B5315E6B56279F470EF93BE93D58977C5135B1F6CD7E0284D09D1AD43168\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cb431d94-36d4-4671-8977-f4649e3ab903/276655436cbbac3e7e810b1cfdaf3c46/cli-2.2.3-symbols.zip\",\n            \"hash\": \"2FB750A94C3C9182FCA500B92F81125FAB67C01FACC77A14F4BE820E9125792B1288B654E7EDE5182C377C6F29F21C1E2CBA7BA365D827B7AFB0CACC8AD05285\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/db4af9a3-5f75-4e3c-92d0-6104fe9be008/8d09884da8f8eb99cfa3ee6ac57516e4/core-setup-2.2.3-symbols.zip\",\n            \"hash\": \"CB8104AB1679421672F59DD214D27DF3A31169B0ECFEAC1615633A5A9FBB0AEE5908D78C80FB151AB2670144CF04AC7183DD3DB2687B69D0A6D23F381F11E599\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6e2d7e59-5f40-43f5-9569-38907d035b90/01e119548f0e9e9c82339cc6ab4ce6f3/coreclr-2.2.3-symbols.zip\",\n            \"hash\": \"416DEE40367342035DF022E23EB18975510D8DDC5B4E666132064FA2DC8DEF490BB9C253D4C366B6B5D569081604B0549A385E8C286D1CF08FBEF15D3D1E616E\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e985d9ca-61da-45a6-a474-190e1d8dac0c/bb0a16d8b290be9ea26e6442c7591201/corefx-2.2.3-symbols.zip\",\n            \"hash\": \"D0055AA3E7A59221E9D517897843DDFA7A44C07A902A252AEE257645C4FA355F8830B7963B03279BA0EBA67C547F8148701773946D85E1EAA100C2A48E515197\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/26cbe290-2523-4d29-9832-b825d28bd73a/23b167b5be34a62955edefc8e84ba76c/dotnet-sdk-2.2.3-symbols.zip\",\n            \"hash\": \"6A3DE00AB975FC424AC8853D7802C638D5874C5971CD665E9C27E64165D090712E242BD4B379B2BEBCA43AC6054CE61AF21E5BF0CB015D64686648431CAD771F\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-02-12\",\n      \"release-version\": \"2.2.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0657\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0657\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.2/2.2.2.md\",\n      \"runtime\": {\n        \"version\": \"2.2.2\",\n        \"version-display\": \"2.2.2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-linux-arm.tar.gz\",\n            \"hash\": \"D3842D4F7BE058D4A782BF11102970CA6718E715B533D9F36551B5CEAEEA5E4BC811497ACF70F6BE9A72D7CC029FEDA5DA6DFD8EC6E712A8181DF60A64EB9659\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-linux-arm64.tar.gz\",\n            \"hash\": \"32209C69CACFDEC8467CCCDB719CCB37A4BEC3F88720209D752903D783DF616099C49D8B58FF9635B83AF589CC473BF7927B8B012A751B3A8B28B1EF60DC86C6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"E5994D1B6746D1E7F64E491FF870302901431926BD037DAB7B0DE87D7237D9398545917A25FAC4146514EB7182ADD93985F057A63409E13720AD359810480716\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-linux-x64.tar.gz\",\n            \"hash\": \"76B252C3FAB234F9792B927F5AF2015A635532D183FD38B982047F677870FF5CA19050726D7406E9C90CDE593281A401A00DAB5315E10AC5A16E9255A57FD34A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-osx-x64.pkg\",\n            \"hash\": \"917331F38B07B250A65BAB9375B2AF913E4B5A31640D102105EE1464866D51E1F46813559AD3DCCDB378C4BFBEF151A7C6A30F1F6C26092D6D18E74C9F38A9BA\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-osx-x64.tar.gz\",\n            \"hash\": \"43C813F5CDE897EDA1801FCD4632046222C25126CBBF8A2CDCA07E0CEFFC9A02A319DD2980908746D2ADD89E9ECDD4D338263E88859BF0D2C557E6C111DE2D10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-rhel.6-x64.tar.gz\",\n            \"hash\": \"06A0E9827AAFB8E5D1C00BD8B75E352E0D363422B0B23922431308397B2478402328896E7D6250D416D0095AA4EF20E9D8AC62C05705F8C72097139A4560834B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-win-arm.zip\",\n            \"hash\": \"219E800A0EDD50A5431FC6A45976E3BFE94D48966DC2D17CE229B25C5580F678343DDD84A4C82C4B557264F3D92C648FF8E9049CE23419B7EB4A60AD2F99F2E4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-win-x64.exe\",\n            \"hash\": \"7A985FC47C00F97A1D148500D2CFCE42DFF7881E47FBF5747D2D7B45DB8FDF17850E46654D15ECFF1BA31B0299DB116490ACBF176F8C34F12CF9BA0A08EB9307\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-win-x64.zip\",\n            \"hash\": \"E8813DE402B66E461ECF1E81EE327338374ADB6279BC0876BEF1DC84B1FBF2F94A716434ED40E6B0F9AF1CFAA85256AA439E6C7765A9EF13DFFDEF08A3EF6097\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-win-x86.exe\",\n            \"hash\": \"E82194EDC024ECB7DEF52B1C00A72F58B13769260C56D6816A2751CDFDD132217479D1FA8F502D4F3BF570C499D5DA76E477BC33F2AC71D53F727CFAB5FC4893\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.2/dotnet-runtime-2.2.2-win-x86.zip\",\n            \"hash\": \"C44066DA16FEE653D33E4E40EF2A695C4BD193D4F5D30AC3FA666A3E971B1B27FF148D474F26CB3F2BEFAB6851D99ADD613267E642BA8610187584FF5C51A458\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.104\",\n        \"version-display\": \"2.2.104\",\n        \"runtime-version\": \"2.2.2\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-linux-arm.tar.gz\",\n            \"hash\": \"8CEF296E4348229D9ED1E7686CFFD31D147D6D371123F3319950FB40C56B52502E512F69DE7D09200311AE4FCD5653596313F100B69A89F636191BC730E20280\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-linux-arm64.tar.gz\",\n            \"hash\": \"6B3404052DDD866877ED5DA0ACBF0BCB86D2E428EAC595B62B8A8D427053FBC0D59B31F537F35D8C9E4B31BD5E2BD2CCB18AF44C16C63F3738495E696E908FD5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-linux-musl-x64.tar.gz\",\n            \"hash\": \"2CFA356D99B39240FAF65F6307EF558625AD78CC49FFCDDEFB0DFF5E7A4D3EE318574B47D3FF6B8981D13E05222D81C717900550553976AED287A0F66D032712\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-linux-x64.tar.gz\",\n            \"hash\": \"FD03CC4ABEA849EE5E05A035E2888C71D8842E64389DD94D7301E0FCFC189CBED99FE84A6174B657FFE3D328FAA761972C061A339246F63C9BA8FA31EAD2A1B0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3fb2ae01-c8c5-4d0a-9102-31c8c3386bc5/94b144257db9c52405d7f7e03adc31a9/dotnet-sdk-2.2.104-osx-gs-x64.pkg\",\n            \"hash\": \"BA81EAE29A04EE468D13542AF77FB2DCF42A683780335C0CDB8A5B32CED6116BA7CFED3025699932C827FE93BACAE50D12A52850F863053E56457423CB9B2617\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-osx-x64.pkg\",\n            \"hash\": \"BA81EAE29A04EE468D13542AF77FB2DCF42A683780335C0CDB8A5B32CED6116BA7CFED3025699932C827FE93BACAE50D12A52850F863053E56457423CB9B2617\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-osx-x64.tar.gz\",\n            \"hash\": \"28545231F5B335765861CEACDEF66002C0EDA91600C46695DDFBFF7B2090FE37CA43E77402332E2FE6B3A7E5FE23596B5AE8F7FABB2BA6CF174AA0866FF23C50\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-rhel.6-x64.tar.gz\",\n            \"hash\": \"CB4D3E03079ADC1C102D1992ED85D3B6728986B4F036C4E106A5B7E6A6A79F0FA177B5413D9AF86CD715A6CB04B2A360749DE57775759274B8FC02E41C0F4141\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-win-arm.zip\",\n            \"hash\": \"B9383E696A221EDB5875EA2183732529E7F3CE2DD993D044952A4C9F6EB4C187FB6992142FFD3336070E89557C75F14B4368E8549B6D98600B56AF9ADAB910D1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/48d03227-4429-4daa-ab6a-78840bc61ea5/b815b04bd689bf15a9d95668624a77fb/dotnet-sdk-2.2.104-win-gs-x64.exe\",\n            \"hash\": \"262E8921D678150B08B6E6563170BE2826C7D012AC6CCFA23D8686DFE3FBCD42CA5B24124631DBDFA497A609BD5700F736C7F43FF467629C0B4B20FA90F67F48\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b59b514e-ade0-4c39-b736-7b5fe33d4eb6/8a43587adbbc7b46c51791c21176490c/dotnet-sdk-2.2.104-win-gs-x86.exe\",\n            \"hash\": \"2E903EFF30AF25115F452C8D00754955D33E77401455C19D43CFC53C1EC2052A40921F269F1706BECB091ABFE5D9B419BF46FFD91119FB5B85485A99B782DA6B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-win-x64.exe\",\n            \"hash\": \"262E8921D678150B08B6E6563170BE2826C7D012AC6CCFA23D8686DFE3FBCD42CA5B24124631DBDFA497A609BD5700F736C7F43FF467629C0B4B20FA90F67F48\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-win-x64.zip\",\n            \"hash\": \"2E73F64A7FDF0F9E03A58A1824375DAB91CAE658C1863D5130047064643A5C035DB25251C443E9E0EDED73FFE7B33AE6E1BE4E16083DA6122DFC1A7D6E2F1564\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-win-x86.exe\",\n            \"hash\": \"2E903EFF30AF25115F452C8D00754955D33E77401455C19D43CFC53C1EC2052A40921F269F1706BECB091ABFE5D9B419BF46FFD91119FB5B85485A99B782DA6B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.104/dotnet-sdk-2.2.104-win-x86.zip\",\n            \"hash\": \"87F02C01E89513E823B487817F836F8E1C0B9BCF9679FE3FCBF134086BFCE6979382FE60773BFD63C9E9F62451207B93D240B22A1524250AA9D3FF1A0D64AA5D\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.2\",\n        \"version-display\": \"2.2.2\",\n        \"version-aspnetcoremodule\": [\n          \" 12.2.18346.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/aspnetcore-runtime-2.2.2-linux-arm.tar.gz\",\n            \"hash\": \"8EA208B141841DF06B614FE2F2B68D4753775AA6CDCE9D35A7870EC513A063EF6A6696724C28503284BA8D173EED65FA5355BE301DD9D4F7509CDBAD93CB4DA7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/aspnetcore-runtime-2.2.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"59E2E0EB092D90BA53814C74259F59DCB8AA11B409B908E849AA0D851EC6CEF7D1616E02C23D37E84901CA92FD9A6EB05C522EF8668DA1FA6A518211532B41AB\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/aspnetcore-runtime-2.2.2-linux-x64.tar.gz\",\n            \"hash\": \"47EBC9E533D9025CC926EDBD76DC50D07E5910F0FAD111771C220A2E184B52B237CCE85CC12AC51382C0037E999779A1B61F5AE54297E2883BD3B0B6D8936AA0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/aspnetcore-runtime-2.2.2-osx-x64.tar.gz\",\n            \"hash\": \"A8311ADC7ABD62A7E93A19CBB6D89617DF332A3AB43BC724170504212AF84CB389A601F74F303CBB6EE038D58F3F7A00F42AAE6185F376283997DEBE950B0FFC\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/aspnetcore-runtime-2.2.2-win-arm.zip\",\n            \"hash\": \"9DB94D8DA965344115F4D7B013CD1BA534B45AB605B90E4A31B8CEA62493D2C6D0EA5FB0D21ED951947920F0B620F36BEDE245F719037875727851BB74404E7B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/aspnetcore-runtime-2.2.2-win-x64.exe\",\n            \"hash\": \"3F1D671A64688476F8919083469E2B856BCA037C001FFE1EC3C4FD928C67BDEB36F65DD0212E569FBBC5D548136450753D25A472CF2D6DAB239F887E3D2CEBAD\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/aspnetcore-runtime-2.2.2-win-x64.zip\",\n            \"hash\": \"F7FA97F793A511379F3018CC7798C9918FAB566E14199DAB76AB60628D4C1772B71B896E1728A23D3191F58FAF723F23210D4F9A585666BF3160555365082039\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/aspnetcore-runtime-2.2.2-win-x86.exe\",\n            \"hash\": \"2AB0D79B465A66C2FDDD7BACDA5ED2A8E92CA1BE37AF49F5AEDF1359FEEE69738F897051834D18555082F1AEA58A0A4BDFE0855B4A2FCAF0B1D57EE086BE2ABE\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/aspnetcore-runtime-2.2.2-win-x86.zip\",\n            \"hash\": \"0ED7047758E6140C5FF7159445006856680D969205E927172B1B0C8829A5D814F03C587BC315844478A703B1032FFD500781817978B1754672A191E0DA7161B4\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.2/dotnet-hosting-2.2.2-win.exe\",\n            \"hash\": \"EC475E581A849F7AD54878EAD61CC3DA64C7EBEDF16745A7ADDD706286A9617FDBAD0860EC2DFF31596EAE1DFB5B80AFC0A6296F156B5164E6309D34631207A2\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.2\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1b7e7360-2e58-4a38-acf1-1e96aabd2f63/d0b0c78eead45a989eacfa19038b8ca7/aspnet-2.2.2-symbols.zip\",\n            \"hash\": \"2BDA7034BDFA2DCE07680544C288BBFAE4837E7F1E12F9DE356A3E95757676B5E28FBCAB36595B96A57EAD3C0A8C7BB199A37AE410678BC1C082A55994CFE44D\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2894a162-c8ac-4f32-8c6f-6289f5b09a4c/d9a072077e4c32ff47a5c4c7aaa51b76/cli-2.2.2-symbols.zip\",\n            \"hash\": \"0AE73CFD601DD12DCE11B3860A84AE06AC29E9FFC4D69096828498CB784B2DEE80F6A63FBD3D795A5F4484756D9679D9C4CF3B8FAB9B19E5B949FBAAECDDCB78\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/996f56f9-a472-4c29-9eda-13e90d504630/448d08d3ad1123f49c828d4d5d08acf4/core-setup-2.2.2-symbols.zip\",\n            \"hash\": \"C1F4AA8E647A0CCFDAD3B766DA1164472E7FD6C7D8962809E12EADB22F32AAE0ED987C7C6CD202204B3DAC2A285B30B89740FEBD0D227DF0481EBCF95E82276B\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2f71d6d3-19aa-43fc-830a-2dea519619ea/1244e6b153434c8e3c27ee46860847db/coreclr-2.2.2-symbols.zip\",\n            \"hash\": \"95323E9EF3A57C97DD251F09EB600662FBFF3DB6A28FAF54EF032FA762A1E939C11348781B88C2CA605C34961742B2E1AE13700957969CD636577660D02FE861\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/69ca7488-7a91-4f48-a9ea-8dc477e39eeb/9ba834f945f97b62ab217dc77f198931/corefx-2.2.2-symbols.zip\",\n            \"hash\": \"C99B7E62FECE35CC2AFA760DAF6C367C19E0C7AEC4DE3E97BC25CFDACF0D240F611E412ACA2FA3252641C0C83EE4F9B5EF8D95832905BCC01708DAF063EB5137\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1c48180a-b844-414c-821d-3e10becdde74/bc5734b3a2229d97c32e405bf248a1ea/dotnet-sdk-2.2.2-symbols.zip\",\n            \"hash\": \"89D5DF47ECE9F2D33AFE80814B13CF6563499457BF6CC451F75CD8B4AD7CA7118C93823FD59918F080F2F18624D62727B6EFE165B2A1758F50A1470155D26B24\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-01-16\",\n      \"release-version\": \"2.2.103\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0545\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0545\"\n        },\n        {\n          \"cve-id\": \" CVE-2019-0564\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0564\"\n        },\n        {\n          \"cve-id\": \" CVE-2019-0548\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0548\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.1/2.2.1.md\",\n      \"sdk\": {\n        \"version\": \"2.2.103\",\n        \"version-display\": \"2.2.103\",\n        \"runtime-version\": \"2.2.1\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-linux-arm.tar.gz\",\n            \"hash\": \"A81A1D33CB98FBD3F2C3F724269BE74C81E49E2D2ABA2B6A1625B66A8F37ED7456C18DDC653A3EF3A09F448B57087172905946F680E4D00FB0603A83E80CF18F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-linux-arm64.tar.gz\",\n            \"hash\": \"2ED18FCD1EF2BF42AA27446695C7A99D444BDE1087E37AA3FD5FD3D626D069E3361EFFC14AC8F54A6B33B21C288BF4E4177985D51D662A5B257A9C6E22770B03\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-linux-musl-x64.tar.gz\",\n            \"hash\": \"A67D681FE480D9A0074B009EF33206D0303B657BDB889AB50B12A1D3838961DF7A622C0DC9581467A7024E18EFD29C487D91F074A86CF4B37F3AD4D64C20655B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-linux-x64.tar.gz\",\n            \"hash\": \"777AC6DCD0200BA447392E451A1779F0FBFA548BD620A7BBA3EEBDF35892236C3F10B19FF81D4F64B5BC134923CB47F9CC45EE6B004140E1249582249944DB69\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5b55396f-9166-4273-96a9-cc9c176bb2bb/6f7de3a3006a193a5adf4799dfe79019/dotnet-sdk-2.2.103-osx-gs-x64.pkg\",\n            \"hash\": \"77CC8FE08467E847C8916D8F3657234AFB60731917984FE80BFB89E5377111DF3B8D3CA6CF318B32803E47E761A4B51EB89370E5E787E6C61B4C2179D565F840\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-osx-x64.pkg\",\n            \"hash\": \"77CC8FE08467E847C8916D8F3657234AFB60731917984FE80BFB89E5377111DF3B8D3CA6CF318B32803E47E761A4B51EB89370E5E787E6C61B4C2179D565F840\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-osx-x64.tar.gz\",\n            \"hash\": \"DDA066A0FAB0253217DC7FC53ACD3F47FB082F342B1F0B4B4F29B703A7767002DFC31203536E159E659F586E85947B9EDC40C76556405C521C8B6C45214F80C8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-rhel.6-x64.tar.gz\",\n            \"hash\": \"041446199DE22A75B15C44790F0AC75B3EF1048036029C4B1C899D0BCC85AB5EB3CC4FCB3D3B71750C5A9D50E6EEEE579B95FA18435A886506F75FE064E6EB48\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-win-arm.zip\",\n            \"hash\": \"F3DE77C61EA11B55C7AAAE5CE2C1FC9AF97B5275EA9851E25A622BE2E5CFCA644E8E4F04A8ED0314FA1B6FC3B7C6BFBE9A87B9B92DA9388462F1B330B228CCEF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/97132669-937e-48c8-99c7-e3eb543b0325/c30900f4f2a534380995d25ef80c3f77/dotnet-sdk-2.2.103-win-gs-x64.exe\",\n            \"hash\": \"DA78E5A03B064D88BDDE5F1EC5DDA7E70D1427DE493D4C07F95C96A6C66132CD1A9BB661F13ADD0A1817DB2F0716A92A511DE136D92E005023D4A163FE341B20\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/afe99b4b-a419-4969-a174-42a10d759919/fd0b15d8e23b17a1b6f3bf44abe8e67d/dotnet-sdk-2.2.103-win-gs-x86.exe\",\n            \"hash\": \"15FAFDAF814E9E28473A8DF6A4F5C58E4BFEED8370D0720F8CA41EB86806478C3C245F26DA63FFADDD5EC5AD47DFB72D46DA90900BA413D4BE10C691387E100F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-win-x64.exe\",\n            \"hash\": \"DA78E5A03B064D88BDDE5F1EC5DDA7E70D1427DE493D4C07F95C96A6C66132CD1A9BB661F13ADD0A1817DB2F0716A92A511DE136D92E005023D4A163FE341B20\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-win-x64.zip\",\n            \"hash\": \"A74D230AB184C6571E445C8E05361F1DB32FFB9BD76BAAFE4D307EF42B7BF9CEBD70E1AED37136CAA485EBACE185FEA24B476907FF7BF522F3B485C8CF0C285B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-win-x86.exe\",\n            \"hash\": \"15FAFDAF814E9E28473A8DF6A4F5C58E4BFEED8370D0720F8CA41EB86806478C3C245F26DA63FFADDD5EC5AD47DFB72D46DA90900BA413D4BE10C691387E100F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.103/dotnet-sdk-2.2.103-win-x86.zip\",\n            \"hash\": \"F5838FCF540C7974BF91744AF0D81303798B2A81CF884934C8886CEABBB63916C23900E3EB22CCBADCBE92FA3127BC389A14B46614CD2F157DDEAF7531A40A4A\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-01-08\",\n      \"release-version\": \"2.2.1\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2019-0545\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0545\"\n        },\n        {\n          \"cve-id\": \" CVE-2019-0564\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0564\"\n        },\n        {\n          \"cve-id\": \" CVE-2019-0548\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-0548\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.1/2.2.1.md\",\n      \"runtime\": {\n        \"version\": \"2.2.1\",\n        \"version-display\": \"2.2.1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-linux-arm.tar.gz\",\n            \"hash\": \"47F65AB7598832F72E08D980843663D79CDEEA365FC8B261F207ECD6C84BD5C1D7EBCCE2A3C8BB015275EE3CD7DA4C065F81128941E4A787B28873FAD3A52D51\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-linux-arm64.tar.gz\",\n            \"hash\": \"BD620287730401461A3D33DF169605495E38ADE53FC239E283863CED5F10DC665FCC942F91432F25C87FD896DCB245D2DC4E2F345EBD6AF2BEDAB1FB2AEB2D13\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"F76F8650AAE126B2CDF55CCE200D6400137288F5C0688E314575273AB9F87F364D06DCF0992524D8D6A127485EC11F8F6E9586A5B47604BF1F6396748B3E7FCA\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-linux-x64.tar.gz\",\n            \"hash\": \"B79D87A986CE2F2B0B9EFD08E8D8F1E283C478737CADD4389F2A9E81882C71906D5C1914B189EB47E11DE27BDDDCD01BD85FB5BD87082E0F7DB6AA206729DEA8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-osx-x64.pkg\",\n            \"hash\": \"E8CA11E67BC46BB5568CFE4F407909CBEB70BEED3BD8BCC6E17BE6074BE266B25A4E42484BF46BEF46F614B71E05700CC2AF6033D1518525097AEA748EB12361\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-osx-x64.tar.gz\",\n            \"hash\": \"2E4415F30BB7690E9E2C55A9C9700F18910FF519A1AF02FF9671D199E7FD8EDCAF8CE2EF4113CDCBC1787604CE597430E1079AC576B5A9FB0082E07BF55083A6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-rhel.6-x64.tar.gz\",\n            \"hash\": \"0F256AF1E141A291DAF6D159531154C3E932ACA43A082CD725573CA39E9C39F621347B374E0E2307C9A8C8C133F47617A40335DEE127898A6482674D8FC976CA\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-win-arm.zip\",\n            \"hash\": \"1BBF9B53A581C09809BD574FD8A0572C653ACF14FE17F64CB64EBC91822D404CA2A2A452A3355B17D1C802EB6B01D200CF00CADA39CACC680DA14D23E5ED0603\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-win-arm64.zip\",\n            \"hash\": \"1EE186BCEF0F5E018D65DEEA7BB32B390FA22813B214E7DCF45BD82A00DBC9DA7DC9068FD0BD252C0CA96DD22B4099A4BD3E96DA49AAD7AF125B88636DF8538A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-win-x64.exe\",\n            \"hash\": \"8A5BBB7F28F8ED96B6C7C50DA13982E63FD02228AD95DCB95F91469A0C56A0A28A554766C83B5EDFF0A93D9DDE7D260B63406774FE814801CEF5D5F761FDA5FC\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-win-x64.zip\",\n            \"hash\": \"C5098CD5D8297EE7F4DD888C11A3C32DD7F34B911694A2C45981FDF6D9F3917619F07A2E15FCAD07BD5CF03B3DDBDBB239B9CB7D58B00ED5496BC2850F2CF314\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-win-x86.exe\",\n            \"hash\": \"3D48B2D860FFCBB5DF3A87A2BFDFB3E4565F5D35A67CF5E850B1805DC67B07EF4193F498C72A37B4999FAA2C547D248A7681379EEA64339533BDAC4977520DFC\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.1/dotnet-runtime-2.2.1-win-x86.zip\",\n            \"hash\": \"35714541D0B881772C8094C7CEB7D27C9A8C4F9AF792479F7DDF3732ECC971EF1C49391822D6F74370E45B3D30715C1463516A0ECB477120DA55CFDBD425B86D\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.102\",\n        \"version-display\": \"2.2.102\",\n        \"runtime-version\": \"2.2.1\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-linux-arm.tar.gz\",\n            \"hash\": \"298A6B75D72FED2BEACAE884E5DEA09C4374B3E2D6C3CBD3FD54894D1C2E68BA89D63CF607DC8F64CA88C53CD0B1881FD3C3A7B199286B9AB1DE3544F93DA747\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-linux-arm64.tar.gz\",\n            \"hash\": \"74246FA23579D0DF73978315F180D0C4C5718305970B027CAF60848A1F326F63A26FB3AF0372C3E981EB4E6C47DC6A7117A7CA6620E532DF48784D831AAF52E8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-linux-musl-x64.tar.gz\",\n            \"hash\": \"6A78A501C811A703399080A66B965BC554D7EE9746769D472D3AF596EADA30B77F58F974754FAEF94B2807714685DA6E4442D44E4366A6C66001154C63392037\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-linux-x64.tar.gz\",\n            \"hash\": \"D7ED76A0EFE2B07AC0BB3AF611072B3B99F646200759CB5905A7944B1687F34D42B4B74A3A5C77DBE251F769C6C3878FC30A8D0F8F44E44BF4C7116699F3F948\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6d678659-691d-4e02-8896-2d297e0e8e57/bb9201b72a621690aec60f51e6b8e6ab/dotnet-sdk-2.2.102-osx-gs-x64.pkg\",\n            \"hash\": \"BD437F5249D1A43F59307F1B6D7DF5539B0A90F152CAD0BA7FC8E2057DD04A1B7AF03ADD525903FD3D51A1D252191011721D202437E1CD0CB25900E3BF0B8803\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-osx-x64.pkg\",\n            \"hash\": \"BD437F5249D1A43F59307F1B6D7DF5539B0A90F152CAD0BA7FC8E2057DD04A1B7AF03ADD525903FD3D51A1D252191011721D202437E1CD0CB25900E3BF0B8803\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-osx-x64.tar.gz\",\n            \"hash\": \"4A8E7F8EE6518BF34AE9A6909EE1FA65A5B25944E28D22035E9040C5C74315F2B2A9742920CCF1CE02671BBD55F84F1618F58C4869E955201578261101A86A7E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-rhel.6-x64.tar.gz\",\n            \"hash\": \"E421C8F042FD052173FBE5B76D3CA9D4C46504DBFA72412488B5617C4B90157F077220C532ED088755A8C034B30CA13FA4BCB48E3F405436E444C010E2C009CB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-win-arm.zip\",\n            \"hash\": \"dfa7933bd8ccf02df8710fbeeb0333896fd7d383fd94d79b720aefbc433164ead4af80e5b6eca34a216459245f21ec03a626255e8c823de10bd6b0e13e4c6e47\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f173dde2-25dd-43cd-966a-7a71ddd3ca29/990c46d1af1acf223dc2ff3f4a2128f4/dotnet-sdk-2.2.102-win-gs-x64.exe\",\n            \"hash\": \"2D42517E8C716E59A01C77D94C76F718916190B5A9A9318D17985AFDF34E1335997C7502AB1CFC43955BD8B8AD543BD554475BDAECC5F900F37AAE066F1423B1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/96dc4857-2306-42ca-a855-66251373d0e0/d9217d3447d3613682eeac04a927dd8f/dotnet-sdk-2.2.102-win-gs-x86.exe\",\n            \"hash\": \"A6EE0C079BA02AEE1A75179E3420D08486C0AB0D101B27E22F889D9A9E83A97BA6AAADD4F2221ADCF6DAA9E9B74CF5ED41B3DCA0B1F34F44405814F72FFDB8B3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-win-x64.exe\",\n            \"hash\": \"2D42517E8C716E59A01C77D94C76F718916190B5A9A9318D17985AFDF34E1335997C7502AB1CFC43955BD8B8AD543BD554475BDAECC5F900F37AAE066F1423B1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-win-x64.zip\",\n            \"hash\": \"283C972E0A422F69D7A62F947A57416FFAB15112B5B989A9D979685A6D9303BAD2FC15AB504C9D65E90A3EE5C3FD55C7B4FA0EFEA07ADC68AA6AE78195030996\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-win-x86.exe\",\n            \"hash\": \"A6EE0C079BA02AEE1A75179E3420D08486C0AB0D101B27E22F889D9A9E83A97BA6AAADD4F2221ADCF6DAA9E9B74CF5ED41B3DCA0B1F34F44405814F72FFDB8B3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.102/dotnet-sdk-2.2.102-win-x86.zip\",\n            \"hash\": \"395053BD164F3A0601794CA5FC531658C6A58F53CE494622F1248A0BE74DD5A409B94C5449E34C7C685E6FAC061EEF7CADF8E1168BCC07FC9B9AE2293A64B833\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.1\",\n        \"version-display\": \"2.2.1\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.18346.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/aspnetcore-runtime-2.2.1-linux-arm.tar.gz\",\n            \"hash\": \"E1824CDC5FF754BAF98D372D8D1D6E7D7DFC6D486B5D0F3DC3411E0D89E8AE251610FF71CB9B1376B728A4281B5B24E2421F90EFF8AEBE12E4B46617CFC0C55A\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/aspnetcore-runtime-2.2.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"CAFE7C0F369B4CDD0B9121A13B7A8D9420D5DCEA3CEA4D4CC2E5F63FCE40E37269A90A772F125B7040BC7F425B9989AA78091BD5BDA1F11E5103C7F98416F26E\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/aspnetcore-runtime-2.2.1-linux-x64.tar.gz\",\n            \"hash\": \"E027A5DADA5D139A44675F28090F996375E49FBD72F7897AA925E48803632D5BF187D4F22DC8225505AC33E6A7A05DCDD8ED19D8B6D5E46B22E628315CF13E3E\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/aspnetcore-runtime-2.2.1-osx-x64.tar.gz\",\n            \"hash\": \"78972D5D0C1CE4621ADC3AEEF4931FFD46D71ED997286F92BAB1B9921CD056D7E8B6603D0652DFF9434C7A394E2C9707469ED96D4B26464856545451CBE3D6B0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/aspnetcore-runtime-2.2.1-win-arm.zip\",\n            \"hash\": \"8F75A6FBD5820E6D1A6F05380B2A7157101F9BBD46FAC6F62DEBB54232BC715ABDE77EAD67A79C1E5DED85B171802741539C316C1A73060A41A865F6617B5517\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/aspnetcore-runtime-2.2.1-win-x64.exe\",\n            \"hash\": \"ABD0A2923A603053CFD77887E8102B09E73ECD0F5EAD01CC3B39A964F38A063197CF8561FF8011EDD80E9E6160E440A55E66BCDD81598186DDF560DD563C3F37\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/aspnetcore-runtime-2.2.1-win-x64.zip\",\n            \"hash\": \"AA8802C8C482D2FC708E669D9E9F0DE7E74700AFB580F0197545F33B50D67317FEA7101A4704B2C35B1362D92BE814E3FD31436CABF53F2E7755F8953278CDD3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/aspnetcore-runtime-2.2.1-win-x86.exe\",\n            \"hash\": \"EFBA54F8D5B6EAC0ADE065D9068E83987138B4EC6F1529671D3270196967001B96F6719365710B1993E05745585DDAE45949DA44970FE579CD47685C7C450A71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/aspnetcore-runtime-2.2.1-win-x86.zip\",\n            \"hash\": \"5C5F7A4A8614B8D4249D21860983667904EA26A2B0D5BA8B5FD235541D6895CBFFAD2DFF10C7A147D7730F1C86CA16537E6335A45D6F6DC0B07963864A79C351\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.1/dotnet-hosting-2.2.1-win.exe\",\n            \"hash\": \"B3F2700363F9BD5AF63EB641135FD93C032DF6A3ACF6EED977E6545A177EF2DAD8CC956A2BEE17C77AA9AAE331932EAC896ADA45757D9C5FB8762EB58A34BAC3\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.1\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5054e671-e4e5-485f-bb21-c21db96e4c32/5a3d985edb2aa4d636a70abf2f008f74/aspnet-2.2.1-symbols.zip\",\n            \"hash\": \"46E2A839AF3F4ECEB1423EC14F0CCA78BB9FCFAAD962CFE6DB1368E6DD6CDB634D4A9C743E64C61DFAC408AC8A6FA0036081A0657AF2419E03BF05D6142A2F2C\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c1345252-2b65-463c-a242-387584319029/bd273fbf195ef073d65f521b3c23bc5b/cli-2.2.1-symbols.zip\",\n            \"hash\": \"8A68B3091697C1E8E02A03D7C1FE4D365BFD96CF167A6F824A0E85888CAFE584B451FE4A1E3D29A2460E45A2F51D57FC93166B18A6AC8A873811BFBD3C034C69\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7181f15d-9b79-4433-bd78-70920d0a4285/400dde7650fdb910b5fe5323caac5600/core-setup-2.2.1-symbols.zip\",\n            \"hash\": \"50B41227199B4A0D58B66173C59245EE35788A17B7F940E22F5EC3BA6318E5B5EFA3D1D530497530147C9A2C03A8F892B4FF6DA54066A69DFCF611A40A66B3AE\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0a6b8b1b-99ea-47d3-b469-e20e7de24d2e/3414feb5b173ded0cbe20de2f3d1e61b/coreclr-2.2.1-symbols.zip\",\n            \"hash\": \"768C14F4139500B80E497DC2E96977722A4A5ACD7F7C767FCD2A22D133BB6465EB6482EF1553F0C71225A0AF878D469B2DD2D625C552B6F73B1F714708C6CFAD\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/45660124-8e10-4871-a2b4-003ae46b3928/c93c49381fabe993ee95666d842bb91f/corefx-2.2.1-symbols.zip\",\n            \"hash\": \"B59EB37F6130C41EB533B61E1BE023D22B8C90A15E3BF0C99B7BF20322D93C75BD7C0569A9B2BC5D8A18AD18083A761FBF433C4B26F95B7D106DF2D550C3E892\"\n          },\n          {\n            \"name\": \"sdk-symbols-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fb7eaa7a-7bf9-481e-a30b-ce8d87d9710c/ceacf3a172301d0ad64f5f4199327379/sdk-symbols-2.2.1-symbols.zip\",\n            \"hash\": \"5E31EEAAB3C45EF25E6BC625793A4A1EE1CB8065D09FEEBA94A04AB363A883F5D6BC555AF567B7967E59EFC34541CEEE917D34A12E2755857E6D32915F1978A5\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-12-11\",\n      \"release-version\": \"2.2.101\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.101-SDK/2.2.101.md\",\n      \"sdk\": {\n        \"version\": \"2.2.101\",\n        \"version-display\": \"2.2.101\",\n        \"runtime-version\": \"2.2.0\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2017 (v15.9)\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-linux-arm.tar.gz\",\n            \"hash\": \"D606B513594D6B115F3FA39F6E394B64A9087F5BD1217FB1C7FA0C21081A8B2E61B1EEC7E3785245638AD267C04F55916759029EF6C5E6AB838A4A78F77E8AFD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-linux-arm64.tar.gz\",\n            \"hash\": \"B7040D873D31EF6B499DF69F8FDF0F13EA9C5991B92B0E572DA068BA7B1871BF1B74BE12D103D8596B0B7964D8034AF412B3EFE77A8A3BC195FFBCCED4E5161F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-linux-musl-x64.tar.gz\",\n            \"hash\": \"224F2DCB08130F6C10EE1AE9D2FCDD219FBAFC3F64E50D48EB55F6922F6178F0A81F39C597D83AA720C47D1E5345791EC850C75CDB0376628FB6562ABC81FC51\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-linux-x64.tar.gz\",\n            \"hash\": \"7D0235469287D55B87AA68FDD8CCE51D2F35FDCCE485701EBF14B53E3AE0A341CDAB8D04AAE066F5E4EBD1BCA7A55C18016DEC4643DE72FD2321FE81C9CB69CD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b0d39717-6bda-4d1b-9cb7-e782a9a87f0c/f68bddee81da14befb036a3d17351c3e/dotnet-sdk-2.2.101-osx-gs-x64.pkg\",\n            \"hash\": \"542FED7877B1A81EA2C784D5AC78B4A5360C2CA79C466DA007E34D0B03637E2905771174ACB774D807D22CA67AA8D23403555A411821CA7ABEA85316FAFDD20D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-osx-x64.pkg\",\n            \"hash\": \"542FED7877B1A81EA2C784D5AC78B4A5360C2CA79C466DA007E34D0B03637E2905771174ACB774D807D22CA67AA8D23403555A411821CA7ABEA85316FAFDD20D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-osx-x64.tar.gz\",\n            \"hash\": \"52CAC8B0366356B39F9624C915FE7F38E49433178572D7C0131A7495EB282C4C78ECDE979BFEE3F4846603B8FF7C0C5D96DA7CE33150F12D406DD0EC117DE3E7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-rhel.6-x64.tar.gz\",\n            \"hash\": \"9B431FAB6C18510992DA1310AF1BE2F183B87E70F575920002487C37E1C34FE1698477A1AE7FB0E5ADF1B84B6E110986FC97ECEEBB3DABC954A87C7589DB68D6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b43f1987-60d5-4fb1-9e9a-1443fff8472d/ffdb11b6d29038c891810dd9db24f23b/dotnet-sdk-2.2.101-win-gs-x64.exe\",\n            \"hash\": \"9009CF8666DF060546915A777783DC1E69CFD645BFE9F0BB6F517070D36355EA22B7B4DF5EAE9AB0748013BBB6E41587C2F029B0922804BC3DD569654F329C88\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1ab946ea-82e0-455b-812e-65793099f98f/e756a0b31345b11614f8cf5446a1c0ac/dotnet-sdk-2.2.101-win-gs-x86.exe\",\n            \"hash\": \"055B22D54C24A2B2A43C43DBF1516C0C2979F1B9718DE2B6EE0BCEC6DDE0512457DD66298F109A1C9E3E98F4FDAD8070BCE1B13F6F81653228A580C74D47BDAD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-win-x64.exe\",\n            \"hash\": \"9009CF8666DF060546915A777783DC1E69CFD645BFE9F0BB6F517070D36355EA22B7B4DF5EAE9AB0748013BBB6E41587C2F029B0922804BC3DD569654F329C88\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-win-x64.zip\",\n            \"hash\": \"3C0DA9A7DA1C5E86C46C3A6C57D3AE350A8A9BF46DC5B3F7568FBE75D7E5EAABF36FBE1146099A07E189B6EB83E36DBBE5CD5792D9F96EC9EF0962FC1086857F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-win-x86.exe\",\n            \"hash\": \"055B22D54C24A2B2A43C43DBF1516C0C2979F1B9718DE2B6EE0BCEC6DDE0512457DD66298F109A1C9E3E98F4FDAD8070BCE1B13F6F81653228A580C74D47BDAD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.101/dotnet-sdk-2.2.101-win-x86.zip\",\n            \"hash\": \"39BEE4254D3A20681E05C9903775A51A4AA2F41C5BC3B841F5BB05D8E0F8CA5674A7BC892630128DCAA8C7A86A7BEBB00C8462FD7E9496B947FE6BFB63466CAD\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-12-06\",\n      \"release-version\": \"2.2.200-preview\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/preview/2.2.200-preview.md\",\n      \"sdk\": {\n        \"version\": \"2.2.200-preview-009648\",\n        \"version-display\": \"2.2.200-preview\",\n        \"runtime-version\": \"2.2.0\",\n        \"vs-version\": \"16.0-preview-1\",\n        \"csharp-version\": \"7.3\",\n        \"fsharp-version\": \"4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-linux-arm.tar.gz\",\n            \"hash\": \"84587224C5437FB5422BC54529BAE557DBE50C9066EE717BF90457401227416FDA6B4E1706AD38214D65E0CC88A73D6C5F4185460B1D9779D9EE9E0F9EB580CE\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-linux-arm64.tar.gz\",\n            \"hash\": \"BEE6AF2976944975204CB1429E4DC3FE0417FF3E7823335FA72AC2A6610F2D7047E63ED1FDC49A515F76A7B78CD68E81E14312026B8234693150112146941259\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-linux-musl-x64.tar.gz\",\n            \"hash\": \"895BE47C861CDE9D6360BEDDAAEF8D954C5F5E63B8E04E07CDA24C16B90F22889F71BB06DB1FC24411C986CB3B9616DF0E76187CDA18D84E233AAACB0D1E4FFB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-linux-x64.tar.gz\",\n            \"hash\": \"E72C13877D0DBA3FD0E29E759C1DF95C7A2F1F6D5608794ED1158F90119E10074FAFFBAB57F45032D1F61995CC25C83BEE5C67B04BB219E7C613B07B4C79D6FD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5f76180d-a776-4bec-998b-a27ff8242611/9649baa9f464666831321b41e05485e8/dotnet-sdk-2.2.200-preview-009648-osx-gs-x64.pkg\",\n            \"hash\": \"3C3760202D50E364C67D2B95F3C79D1FE367206BE05079FB66180EF559CA853CCA11FEA587C550D21852C7789CE181D4CF30FD41A29999427D6F37249EEB37B5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-osx-x64.pkg\",\n            \"hash\": \"3C3760202D50E364C67D2B95F3C79D1FE367206BE05079FB66180EF559CA853CCA11FEA587C550D21852C7789CE181D4CF30FD41A29999427D6F37249EEB37B5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-osx-x64.tar.gz\",\n            \"hash\": \"645E3758ABA1A08AD4BD1B5C3F95F2526FDA21D893DA61DAA3C7060298D2DB0B6972C99012AC9C473CE8F51B32DB584A33C8E6415DA78C9DFA2274A366ADA63A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-rhel.6-x64.tar.gz\",\n            \"hash\": \"2B3024A07BFBDB0EFE600E3A5CAAD49B561EA93C11299F1F903C7391DE441163B2A64133B9B3D006E06E747A0C28EC9BF220D16CD65F2B5E5C3C1278E699D476\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/226510bf-1e3a-4068-a26a-9262ff3a8b35/4131137e41e2823a90a4ab30d01062ec/dotnet-sdk-2.2.200-preview-009648-win-gs-x64.exe\",\n            \"hash\": \"ED41A4AABBE13117566AFB00F08C582E62833E40F755082E6BE8F135EF880A0586478A88148BE99EF6F4BA4D812E0C7C6833A12A3FDB1CA4DEE238EA58B8F091\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bc4a220c-0ce6-4c6b-a346-f1cc66ecfdc7/7bf462f7c129ae2aed3ea04195e5cfbc/dotnet-sdk-2.2.200-preview-009648-win-gs-x86.exe\",\n            \"hash\": \"552528AF370039032C8A5AE17D55904DEBAA4523BD62C56E9946C0D0A84610DFB78271BA4575C34E92FC8F1A985CCF62FC85D51903FFFDABB80C3D336044D04D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-win-x64.exe\",\n            \"hash\": \"ED41A4AABBE13117566AFB00F08C582E62833E40F755082E6BE8F135EF880A0586478A88148BE99EF6F4BA4D812E0C7C6833A12A3FDB1CA4DEE238EA58B8F091\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-win-x64.zip\",\n            \"hash\": \"B6AC617899182F787FD6CB496823B459E372195B5F83DD7DDAA933EEB855F1F8B655DE16CB2BB3D3F2A5FD9CA91365D844A14B685DE15A3644AF23E612AA4AAE\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-win-x86.exe\",\n            \"hash\": \"552528AF370039032C8A5AE17D55904DEBAA4523BD62C56E9946C0D0A84610DFB78271BA4575C34E92FC8F1A985CCF62FC85D51903FFFDABB80C3D336044D04D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.200-preview-009648/dotnet-sdk-2.2.200-preview-009648-win-x86.zip\",\n            \"hash\": \"1F42190EB7F67020057D4F49B51D5748FD3663EC7F7E97152FE98594148F0844570BF381A8E5D246175DB1FA52D422FA534EEFB53C16AC6F2133427878C6E414\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.0\",\n        \"files\": [\n          {\n            \"name\": \"sdk-symbols-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6819ef7a-d432-4900-a242-78ee5e6b80e9/297807fa4167c35f4090eb6f39698df2/sdk-symbols-2.2.200-preview-009648-symbols.zip\",\n            \"hash\": \"6D124C2D0752B5228A2226ACDEEE36E23A6B14A4A5E1FE2E8F6A15395B9CA36E845BFC33A7C7276D48D1F6368CEC9DA559FD0C2EE2EE73E9A2BBC8DE0FD88654\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-12-04\",\n      \"release-version\": \"2.2.0\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/2.2.0/2.2.0.md\",\n      \"runtime\": {\n        \"version\": \"2.2.0\",\n        \"version-display\": \"2.2.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-linux-arm.tar.gz\",\n            \"hash\": \"C1E52E053AC5797A2A0CD621A0DF257E882849621F5C74604F1B51FC11A7E310A418226DF6B36C79AB694A7A18B2D80FBB04236E0D3442F13A02007B9365B2B2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-linux-arm64.tar.gz\",\n            \"hash\": \"4DE976140A34C72BAF84F2386D63AA119356A4B7937C008B080EF8B63E7F11D204A38DCAA9072CD89AEC18E3E1D7FD288C5BBBEBD59E738AE3FB85008B1127E7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"10665979BF77EC7CF92108372C7FF48B4F0E577DEF75513128D088567E5A2553FF1502FE6E4E403D0DB485D629A11EAB93CB5FE84752A0A8D15398E1F2AFF53C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-linux-x64.tar.gz\",\n            \"hash\": \"B1C08A7B44B50F66AC35B8049FC980FB3920E3A52D8FF8337D9FA0D163DC2F0111904AC3D79B97A750155BFB927177ADDBD72C7970AB0F301D52EE40544933FD\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-osx-x64.pkg\",\n            \"hash\": \"E7EF10CA7475BD715C977D8623E14B9ABFB6F20F526F3256E3BED86434B530887ABDA0085684AF8687CFA2834208A3489D7FA63117AB1E3C49D8DB952F7AD44A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-osx-x64.tar.gz\",\n            \"hash\": \"5299D16F3FF81C67003DC525918D1E1D4664B6BBFC846254881DDC61FFA2F221F723268352E26CEC33ED5B03E16EFB3434CAB94535D7699ABB4015A57B79F27B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-rhel.6-x64.tar.gz\",\n            \"hash\": \"61BCEA56C84AB6794E354036403C572C6DCCD878476F2BA4104AC71394F59078AC47AD490FD39BE4ACFC9F5849517AE462465FBA134A90183D5EA1A42B2A53A8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-win-arm.zip\",\n            \"hash\": \"904A65C285C3F59B43337889BA0CDE75E42E12CB09EFC9F2E7618783F072E0B00C43C9FEC599B77ADAC9C9AB92D5934D92ACFE9B073834410BE5C97F4E92D933\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-win-arm64.zip\",\n            \"hash\": \"1EBCC679CCC9E12E3B76C83711041204588704CB8DBB316E09AA777B07ECA2A6ABB2BDAF4CFC2FEC52695A4AC9590879C4B0A8CB7D5B15ACD5192D4C33756353\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-win-x64.exe\",\n            \"hash\": \"BFCAAB6F2BE8E33ED1CCD3D9D17548E015549874BF2D26BD379B17C332CF67569EBEFF9EF8C95C20B8D313D83F2626FB607627D612DD123ED985957D3CF2CAA9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-win-x64.zip\",\n            \"hash\": \"5B262C6D30EBEACE5718D063363CCF778C49CFED535CC5BAAFF2D518CA94CFE83FFBDACB8EB0E3617D5CFCC3D07D3C1F7CEED0B26636F6971BA91054D78BC1F1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-win-x86.exe\",\n            \"hash\": \"C0EEC9DB797228D25FC4188297D807565B43E9A1384FA162E3EA5E6845A02B016585CD3CC72A7447048E2B0B683641E1491AA97CC9C1BA17F62453FDC4666097\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0/dotnet-runtime-2.2.0-win-x86.zip\",\n            \"hash\": \"F426A8B8BAEB0E34A9B9CDE257D10CA59EE934B95708AD42BF1FA6FB12CD97E6727ECAFDBDBC2EDCAE7B275A063478F5FAC3DD77FEDCA62C874D8932DF8F65FB\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.100\",\n        \"version-display\": \"2.2.100\",\n        \"runtime-version\": \"2.2.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-linux-arm.tar.gz\",\n            \"hash\": \"A3175AC1514BECD9D63E3137A4F6A96E36EEB5FD224BA365ADC068EDD624311E45B7533E96607C2C95C9FA1906140C9E95255320071CD6039F4A6C66E66B4976\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-linux-arm64.tar.gz\",\n            \"hash\": \"067AA933FFCBCBCE48256B0DEF4627A8FA952E293BF241D21E77BF18AE37F28FFF355B20B4F735204B989E560A85D8ADB9F1854EEEB4C008C95C65B55D1DF054\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-linux-musl-x64.tar.gz\",\n            \"hash\": \"5D9F13FDABA1ABE55268AA4AD8CB68F78526D6D6842494856043E174BF5708BC46127EFCA289B7DB2D3B1F6CC04F0FDEB716D651F0228D0CBDB37960D8AC33D5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-linux-x64.tar.gz\",\n            \"hash\": \"C8282CE26DBB60872FC5BEB61EE2B6C7D07B87B57554455C017038EE5805596E277E47C721D6C676C8E5ABE3794AB0BD99CFF51147975B88E0B8D4C066FB6E15\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4524456c-d9b7-46b3-99a2-7a4b21a26fb7/1fe6edb9e60ddd1b5f79381e9d0a3738/dotnet-sdk-2.2.100-osx-gs-x64.pkg\",\n            \"hash\": \"5bd6754a8bf89bc0c0e775b3aa0e3d18e6a9c4e72ab321dd923330d2fb35a5a051fd8343a2687ae81f68642befd2d94106bc8aa054e061670d3b598b855c4984\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-osx-x64.pkg\",\n            \"hash\": \"5bd6754a8bf89bc0c0e775b3aa0e3d18e6a9c4e72ab321dd923330d2fb35a5a051fd8343a2687ae81f68642befd2d94106bc8aa054e061670d3b598b855c4984\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-osx-x64.tar.gz\",\n            \"hash\": \"C535A421586B11AB803AF3F856A91A8B6C511861A032670155D320ECB6550FBEBB222413B9C8487C179C852BA912B8AEC5FCAD1EE4721F4E15F7CE4987A9693C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-rhel.6-x64.tar.gz\",\n            \"hash\": \"816F3E7FA631968114D6A2BFD26D47D0351F85C559BCDC1A76DBBB2C915CD80C6FBEDDA3120F7A3F9E1AF3C129574076447BC514174EB5179E774184CAB78397\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ecde9720-0283-4869-897e-93467ba8cd45/d90fa7f9ed6149f76b0d5cd30ac35676/dotnet-sdk-2.2.100-win-gs-x64.exe\",\n            \"hash\": \"CDA96523F5969B8A338FFB89A14972F2D8B5697E60B7BC48BE70E019BB70BEEBF4EAAE2F3E84E0F9A90040EBDBA4E781D525CF7B41B95D44DAABD6A862129F7C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6dc0eaf5-1ed2-49a9-adfa-8112d3a551f0/7bb64b14cf8e67d6c9b90881c1af3ef4/dotnet-sdk-2.2.100-win-gs-x86.exe\",\n            \"hash\": \"F961FB0197FDF0EBE345D34BC25B9FAAC3804E60DA8A2AA7E0C859951CF64E05913F302779CD0FF1AD49582F925EC11FAAA27E83C21AD656B8EE87900CBC923D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-win-x64.exe\",\n            \"hash\": \"CDA96523F5969B8A338FFB89A14972F2D8B5697E60B7BC48BE70E019BB70BEEBF4EAAE2F3E84E0F9A90040EBDBA4E781D525CF7B41B95D44DAABD6A862129F7C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-win-x64.zip\",\n            \"hash\": \"950DC685294C6423438BA5B38D444C08E492E25A630A552CB5D3A170775ED6E6247EA8C06E6B1C26DF90E91E3B9041E87E93DB2A59349B814F6B2CFBA59629A5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-win-x86.exe\",\n            \"hash\": \"F961FB0197FDF0EBE345D34BC25B9FAAC3804E60DA8A2AA7E0C859951CF64E05913F302779CD0FF1AD49582F925EC11FAAA27E83C21AD656B8EE87900CBC923D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100/dotnet-sdk-2.2.100-win-x86.zip\",\n            \"hash\": \"F007B3912F265F5CA5397CBB7AA55FC2D34788ADB77CAC53B45643D76088C01E47A70576417957DE75BA4543BE298DBC8C31DC82A33AEFDAE9490F6E64C9AB6A\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.0\",\n        \"version-display\": \"2.2.0\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.18316.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/aspnetcore-runtime-2.2.0-linux-arm.tar.gz\",\n            \"hash\": \"71FE46137C2B485AF8F191412155A4C3C732CB71C37FD77471DAAF517B612BF3EF6E9C2300C75DA88BA04981FA9B965D8709F2E1BCA731236C72BCDE7E26CC7D\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/aspnetcore-runtime-2.2.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"C297F7196B72E02EC41A5A0C027DCEC1648AD552BF44036FA491D67D9B4F09E3ADE84FD51EBFFD68E8FA8077F2497AD851E13C83DAC6ABA89DD03F6DF0ADCA6F\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/aspnetcore-runtime-2.2.0-linux-x64.tar.gz\",\n            \"hash\": \"26B3A52EB0B55EEDAF731AF1C1553653C73ED8E7C385119A421E33C8FCA9691BAE378904EE8F6FC13E1C621C9D64303EA5337750BB34E34D6AD0DE788319F9BC\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/aspnetcore-runtime-2.2.0-osx-x64.tar.gz\",\n            \"hash\": \"726F2D698468130CE6200D52D02B297951CA58A5B5BB36C3D1A7BB9CDBDD90F56D8092B07799D89D61E3462B4268B712306DEAAA4B03E6DDFE053A1EA7BD499C\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/aspnetcore-runtime-2.2.0-win-arm.zip\",\n            \"hash\": \"072BA6A74F91D543E12695032A26D79707585E2C9DED831287EA7F1A447058594E570D6443EC82EFF6A98962F7C73A0E8471F60178EF14196F52AABCD2610CDF\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/aspnetcore-runtime-2.2.0-win-x64.exe\",\n            \"hash\": \"D18C4A3A4987EDC4C023AD6DC9F0BA77936AEE3EC7F97BA5C7690DE054AD6611048A852E3652CAC533765D35A32955C4140E4288E5BB17677E89BEBA3826C27F\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/aspnetcore-runtime-2.2.0-win-x64.zip\",\n            \"hash\": \"0159F27762A0DD1FB7F7E4F85259C145D8E6964289F7477D6E9D5C03898AFB38DCA010F900E3CCB28E282514835A66D5546BBC1542B9DA8C92DD3D2759C507DE\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/aspnetcore-runtime-2.2.0-win-x86.exe\",\n            \"hash\": \"1967FA0C55258499901490C2D3782E5B6A46B8AAB58DEF6F71BDEC0408682A7262110CEE77417138F7A3D8DA50F353D69CA73B592095DB3780ADB5762A1ECCBF\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/aspnetcore-runtime-2.2.0-win-x86.zip\",\n            \"hash\": \"EE340D3086904C41913C218344405B25C3280831AC1066280FEE3035500E3E850FB5E14C7D9969F27B6021BCB65A136A26D1183777A44A6FF35C68A9EF5341F2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0/dotnet-hosting-2.2.0-win.exe\",\n            \"hash\": \"E25BD118C24A7F1EDB8ECD40499C73DD486E11939635CA116F6F0484744630218F92C3B5A7938900FB161299E9766CF0F34B546E83452EF5B9B5B5B42C198ECE\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e0c8c95e-4e4c-4cc3-9b5c-7c6740feba1f/3cae4aeb08ededcc4b6d0986eee3fb80/aspnet-2.2.0-symbols.zip\",\n            \"hash\": \"F1D4CCBC814CDB86190F856ACDE3C3B7FF3CAAD3B08CCEF316F26653A4D64FB4C73467EAADE0F532CD65A1D7A06E8EDE29795FE7139F860828AFCAF5E04C7FDD\"\n          },\n          {\n            \"name\": \"aspnet-extensions-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/81c09839-3d1f-42d8-8a14-a52cba70c8a4/04280557d2b96f0840cbf4c4ea59937c/aspnet-extensions-2.2.0-symbols.zip\",\n            \"hash\": \"E331810DEA3B265D4F9F3735EFF33C5771B41169D811E9615B7C3D1900D3BFE5BDF6FDF066559A8D787F4170DDF52868C2ABB8E95645E3F5D45000A95183E95A\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/546ad62a-4839-4170-9a59-86c569f18725/69bd4fe0372becfb354264f664b12d5b/cli-2.2.0-symbols.zip\",\n            \"hash\": \"6CEB754AEC7C1A5B0290C27C3E237E019438D9CE4DFC5A894F689BC69C49F2B37F25793752C7D5B8932BB1385AC566103708D20A7FEC46C24ACDC10706019921\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/53b39749-d31a-4272-a280-8d3cd1974922/da1c0fb161ecdc0c09810b98bb115ffb/core-setup-2.2.0-symbols.zip\",\n            \"hash\": \"97DBE8280FEB4057283C8C0EAF201F71B93F273EBF84914009F5F503D26C4C3731DF5F556AFCF197B8E39C2333C486125B1B31D8E285B631B3F5F894D4268E71\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a6a3fcc6-e72c-4d56-a002-c1ea2ebf491b/b00ec1d7aeee16b002579e7855d8574a/coreclr-2.2.0-symbols.zip\",\n            \"hash\": \"B67E9570A89464E6FF5A6D0755154D4BF8B14EE58ACE80A130FD220E1A612DE6D4E256BBF4273F78B0BB5BBEB75D9892400FE08D6210F80F4C0F44346113B65B\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6576cf85-ad10-49c7-ab3f-f26c2ba1e518/621fc14558560a3c585697ee5e77993a/corefx-2.2.0-symbols.zip\",\n            \"hash\": \"55EC17C369F5660AB28BAD88FBC504280A16F6C972533015048637FF06E07F390D9F321EB151581A441CAB5F2BDAFED8539EE60C80A507DE8EDE4B6F5D69A2F5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4b233b85-7b9b-4e7b-a2ed-62fd6017b65e/91ed01dbe66f087e9d7b5f0a7c97f289/dotnet-sdk-2.2.0-symbols.zip\",\n            \"hash\": \"5AB7000C833FFD8D3A3C82BC2F67F16512D46DD715D7405C1A15FEE9450E42BEAC85B6D967CF81673DDE579342263C5010D09E62307098E630C4BDEEB49454B4\"\n          },\n          {\n            \"name\": \"sdk-symbols-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b14fc6a3-2fe4-4cb5-8083-d752ca106944/86f2e153b184b09ef90ac4499cec0ef6/sdk-symbols-2.2.0-symbols.zip\",\n            \"hash\": \"C636E7FCE5F05294E48A37276921982CDD69CFBC7BCB1F17D51211B851A5BCE56336D85DC29339FEF2542BE39870244C94BFA30D3B5518DE716C9213FA47297F\"\n          },\n          {\n            \"name\": \"templating-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/52249021-0c7f-477a-b961-72b64694fb47/22b0006ce020a668309a2c254f2996f4/templating-2.2.0-symbols.zip\",\n            \"hash\": \"3CE1237FC1F30BBF4C7FFA49C7B55E51996FE07F18DA7C5C8AB5F016EAA7D80D3D76F572EFFF20D8A4031CDF62AD6AEB6AAD3525886BE92790AC1DF9469B4908\"\n          },\n          {\n            \"name\": \"websdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0ecfbde4-d827-4e2a-b2ae-b67f1e72495b/8a5e533a4b846d6877be4420a42664fd/websdk-2.2.0-symbols.zip\",\n            \"hash\": \"44A050D4C6274EFA95670965EE97CE2FADA48ED50C3C93FDA848D3B9B42CDEFAEE42A53016C0B68D79976AD211751351F1FDEBF4193557BD8DE0FAAFDF7110F2\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-10-17\",\n      \"release-version\": \"2.2.0-preview3\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/preview/2.2.0-preview3.md\",\n      \"runtime\": {\n        \"version\": \"2.2.0-preview3-27014-02\",\n        \"version-display\": \"2.2.0-preview3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-linux-arm.tar.gz\",\n            \"hash\": \"37d7216f2f8f0c7bd1ce3e3dedc3a00295117b6598959275a8f6bcb5a5154abe10f2b2d8e30416897a0d466d0f1d75e9a73e67dac67d0a7c5789fa5296cc473b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-linux-arm64.tar.gz\",\n            \"hash\": \"82caeb6a7536060bca5aa89b2acc11cc6c0b5022dee5a4c50b29f80410f2f3a2cc3e4156b83fe41faf1d1a9823a12e7616ccdc5c9a264357ea448d979814d67f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-linux-musl-x64.tar.gz\",\n            \"hash\": \"6dd8f0f48fb997a888ef6e494d15ba3f512a0e29d59585c0ef6baf04d2935cdfe0046057786fa3021b84dc3e5d9d2726a0d53871c6d843d80ded01c1527ab34e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-linux-x64.tar.gz\",\n            \"hash\": \"63bee8876ca3166f81a14f95aebaa84a91da94fcaf1b33328594cf68bb0f43db75ed56d1afbf9b89d375b535f3ec0d938ac56b6c18d790d5a5b6bfd4e36782b7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-osx-x64.pkg\",\n            \"hash\": \"4fa32345bff734718e338965c374962f07b9b904f2895fcdd4c6b80ac08ca81a2d7b12d677afbde099bf956aa8ca8a9b6d31a6be7f0f9e26ada1fb1ab23b0de9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-osx-x64.tar.gz\",\n            \"hash\": \"cd4e09ad7b6d6593c40f36691829cf5b84452dc1b5fd0559f0eeabb84deee2e17c42b6bc72c2abc3c2d1191f4bda2aba5d0e7e9b9ea14525f486a94728248e45\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-rhel.6-x64.tar.gz\",\n            \"hash\": \"f4bfde949243421c73802ac62e74ebc30a630b444edfed430b3293934e138ba21c639798dd98e3eff9078cc99b2ce788b49966c441a600a4719ca265949445f1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-win-x64.exe\",\n            \"hash\": \"44df185179c4e4ce17a752eef363e1861ede568af711d517bf8a2d5113d626d6ed5fb991e8e21737981ce25e56d32ccfd8d0aa9f4f046e96014af99831b95f08\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-win-x64.zip\",\n            \"hash\": \"ee9d9e623b71836dbad5c1429b9dd49e7a91583be7fce4df04b784317a77b74c2b8f38d689fc304b48c9c88533908411de0d0b59059919bd3f87cbf8bbcb3764\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-win-x86.exe\",\n            \"hash\": \"06081504129328fbe30009009105b498a7aac9be9fbf88b1eb152ef56c1b8a66763a8d41e8c48290d472d5a4d8c44111bc37a047432530745fb48df2fd0c0326\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview3-27014-02/dotnet-runtime-2.2.0-preview3-27014-02-win-x86.zip\",\n            \"hash\": \"552aaa2de0fb433f7ac4ab3abff7fbfe15a5bbcc1670539b90309ab2fa4ca949ade4c3422b8d553c8c52246d181864b12cfb22bb2db5dd7b7fb29467551cff36\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.100-preview3-009430\",\n        \"version-display\": \"2.2.100-preview3\",\n        \"runtime-version\": \"2.2.0-preview3-27014-02\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-linux-arm.tar.gz\",\n            \"hash\": \"190722154e0a70e93bd5626d0640b50e49d24353e6c61ceebaf8c3e6f63b17b8736533cd059f7cd70c128a51d1a3cd7755edb9895fde0b9968fcfbb34d088e25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-linux-arm64.tar.gz\",\n            \"hash\": \"b1b5594cdc536eea3a2e8f1056849db8b07bc515d8862cf8644d0e49f51d004be07a37ced6aebaa06bd9ff857cd2683b1758e9881072ba446e99e56f0d144b03\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-linux-musl-x64.tar.gz\",\n            \"hash\": \"c3dd035d1fa6996a50cb5987710ada24bcd2c28dd3db3da167999ce8cfefdd0a9cb605f39d85f78a2b89c54219d6e94ea1adf37ba4169018c0a10100472fd622\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-linux-x64.tar.gz\",\n            \"hash\": \"c74aeec0e141711359e4af0785fa3af457949783233ad07e7afea2f98f34ddfbf9ced56fb29a92b5350381c4698a4fae09865af9ee03ef24195ec659e852a089\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-osx-gs-x64.pkg\",\n            \"hash\": \"157a5dfece772d40d9152064a70bf167241f09c90f4058b02ef91243caf526b7e344f21de58912676b7d937669247e4ff2303d2634a5c385bc7257e19f0cc8f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-osx-x64.pkg\",\n            \"hash\": \"157a5dfece772d40d9152064a70bf167241f09c90f4058b02ef91243caf526b7e344f21de58912676b7d937669247e4ff2303d2634a5c385bc7257e19f0cc8f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-osx-x64.tar.gz\",\n            \"hash\": \"3d13240d768d74270dc62c9b8168caa18158e87f6052c01c88dd0bad494c41235909161b2baa14186a08ca1c9898fc31ec03ca2920e13a439b4c9bddc1dfaf85\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-rhel.6-x64.tar.gz\",\n            \"hash\": \"7bff125ee63b329cfbdd62447f48d1f5309ba62ea5e7c51c0c563669d36d8443d2eac88d3c5932066952458df15ebe3ef6212376a0a45c81228a4a2b4106d7da\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-win-gs-x64.exe\",\n            \"hash\": \"b702cb920cb615b56da5b34ceb938e2f6b6130d954bb9e7906cf767c4b94275f0a2e99331bdfb77e1dc4e5a9e4a4e153ecb9a5559c8b0c91fd4c2d69c9a945a8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-win-gs-x86.exe\",\n            \"hash\": \"3f36656317627d46fbeebd4b45b62dcc11bed1303ae9090d9ce9db7f04c97ffa724f440eff88766e76a8c56e4530128723f450387c47df6ec9a815caa55b8b89\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-win-x64.exe\",\n            \"hash\": \"b702cb920cb615b56da5b34ceb938e2f6b6130d954bb9e7906cf767c4b94275f0a2e99331bdfb77e1dc4e5a9e4a4e153ecb9a5559c8b0c91fd4c2d69c9a945a8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-win-x64.zip\",\n            \"hash\": \"ad170a82cc4e000e4444f559f3aaf79200a5370e02055662fab1c3d290b37e4b963505d21e9fe54de47e436cffaef3bd06c528f021eeaae016c5576c99a5141a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-win-x86.exe\",\n            \"hash\": \"3f36656317627d46fbeebd4b45b62dcc11bed1303ae9090d9ce9db7f04c97ffa724f440eff88766e76a8c56e4530128723f450387c47df6ec9a815caa55b8b89\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview3-009430/dotnet-sdk-2.2.100-preview3-009430-win-x86.zip\",\n            \"hash\": \"dc3689108b9adc4285cac27758bf9c35d8bc2723f7f7f5e3537cd152cb552b33d77bb2cf6cbe396176b8bc14560c6c8ef80dc6823bd199c75cd55137fa5acddd\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.0-preview3-35497\",\n        \"version-display\": \"2.2.0-preview3\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.18248.0\",\n          \"8.2.1991.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview3-35497/aspnetcore-runtime-2.2.0-preview3-35497-linux-arm.tar.gz\",\n            \"hash\": \"5e8d10ed70f3c1f30a36952fe8e5ecf3c51e259279ba17428d45a5b25a43dac1be4c8af9f32f94e77488608291c3f80208b0c7bd60f7019c90771a23bd604cac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview3-35497/aspnetcore-runtime-2.2.0-preview3-35497-linux-musl-x64.tar.gz\",\n            \"hash\": \"f1750aee5a909564f148a3d3d4219047d4fef3342a3498c6c0c04094ab1014d0802eaacd034249154bd8706ad440a80aa210ed2a4c5976ccbfd163f3fd66e995\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview3-35497/aspnetcore-runtime-2.2.0-preview3-35497-linux-x64.tar.gz\",\n            \"hash\": \"cfef05e1da3e392ddad9a38cb8961c361b08ab87ba97d1c4dda68a60a37ecbe091d95c91ba28b0724ba235dfea813a0e5987b26f7160badf3efbd5274df81847\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview3-35497/aspnetcore-runtime-2.2.0-preview3-35497-osx-x64.tar.gz\",\n            \"hash\": \"2f068794f24a18a3f967bfa66812b4e5bea9687cad48b1058b97b35e9a6ddfafdfdf358172b8c160cd088e79dd094350e61f8f0b17a208f29da4ffcc8ae53dcd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview3-35497/aspnetcore-runtime-2.2.0-preview3-35497-win-x64.exe\",\n            \"hash\": \"458c95f1aded97560d8d0049285037340d98859bc8fc7cb9e201ff784c56c15d8391dded3e3df023fc9873c00a5745ca8e6f51d67c46d7df16a43862d83afe8e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview3-35497/aspnetcore-runtime-2.2.0-preview3-35497-win-x64.zip\",\n            \"hash\": \"77559dfc94e653437a485ea7772564183c896a3e19bf9f84248a8cddb9bd6fb506ba31e71e55947637eb9ccbe15c57ccb4666d01883a944807f483e21e01ad1e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview3-35497/aspnetcore-runtime-2.2.0-preview3-35497-win-x86.exe\",\n            \"hash\": \"68779a2a00adec12b2508303c64cdcb0814daea55c74d123b6d0aa898cbad7db4051b13be23e334878f4902b33d610c277807591d5a2181ba8f8f8547b72851d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview3-35497/aspnetcore-runtime-2.2.0-preview3-35497-win-x86.zip\",\n            \"hash\": \"b6a9f2b79e9aa665c1af30d32a2e6e2944228da7858af4ffe9731f0f8b81c4d111ea388aa0861bdd2d1e87f948642e839e44df2bd07081f6a5dc93d146f9d878\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview3-35497/dotnet-hosting-2.2.0-preview3-35497-win.exe\",\n            \"hash\": \"09eac2ace10707f37c34b1186c0687c776108c714a900531123293fc33335fccf76f8f953effb25dee7a8d686a646aca0603c7aa5bfbec16b67b912261105821\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.0-preview3\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ff684bf4-a2c0-4185-ab5c-6b85141762b3/bd4e331233355dafb80e977c1cdd736e/aspnet-2.2.0-preview3-symbols.zip\",\n            \"hash\": \"f63b45f9cc529d376b9078850d739801fca9a2191bd3119fbc748695c755a58785ef99c3f7dd8ec1842905421c547820065912cf02a2acf313db0b811cafa186\"\n          },\n          {\n            \"name\": \"cli-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ab5fe4e0-1c2b-48c0-8e54-6ceea29ddc5a/1ebd0a7f61215737a513ba96bfa938ab/cli.2.2.100-preview3-009430.symbols.zip\",\n            \"hash\": \"b6d43ca591638591d1ce435989aa9b4e36faa6312cff2ee35aeef08b11de5f4929a7ac2c51a8084266186eeec153d37f52b16d1d1ff1e49b6fc4646704651462\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e49f47c8-6bdd-49a7-a0a1-e1b0c98bee6e/75d5e06db61f6c3d01568533a5c99d5d/coreclr-2.2.0-preview3-symbols.zip\",\n            \"hash\": \"0ddc028e9305629ef019374f0f6dcc5cdce96569074e1570076c9e276ddd54e922136c495b43f30870432a1e24b6fa5b0b8502b04c0a908fa183a647dc336641\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/eefa375a-e704-4016-912e-b5e2d92e46f9/65dddd0b2442753920fbe7af24bc884c/corefx-2.2.0-preview3-symbols.zip\",\n            \"hash\": \"15393870ddb0fc53954d689be3e38b4cf4ca76a24ed8d3cb68efd483593be32c1f7903db2e25cbc9b3eacf791cfc725682f4fefd6894672d2c73f27ba9b2127f\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4ad88922-ecd1-44e4-9c6c-bdab57fc6e86/a0791afe24f16039244d6d2fc5ed8564/core-setup-2.2.0-preview3-symbols.zip\",\n            \"hash\": \"71dcc5a9b058b319f652451e9107890b3919114be599de687bbcee98bfbfa122f83dbda2a80e7eb5b2a8d247250fb8afd954637f76b88d22a0b7c089ea97ee64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-symbols.zip\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d9c227bf-0af1-472d-8387-a0d47dc88ebe/1849ee73ceb55a59d8ae389942399fa5/dotnet-sdk-2.2.0-preview3-symbols.zip\",\n            \"hash\": \"6545098b5d8c273f721eafeb4937b71f573e52da57c16a8a21f71633261c6307dcb9c3f9d752fd9e221a35317e7dba92c126d545d8630717558bd15611856d00\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-09-12\",\n      \"release-version\": \"2.2.0-preview2\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/preview/2.2.0-preview2.md\",\n      \"runtime\": {\n        \"version\": \"2.2.0-preview2-26905-02\",\n        \"version-display\": \"2.2.0-preview2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-linux-arm.tar.gz\",\n            \"hash\": \"93eb9c831745519f8976c9bf6c02ef4a55cd46f7312330de05602e74ee70bea99f0ff45c93c0fdb4cbcc53ce3f22b8d82a27acc354db5cc1cb8eb4caf1ec6dd2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-linux-arm64.tar.gz\",\n            \"hash\": \"1c88c7b7284f53be6c978ad5f80d1fb44696c5fd67769f17b5967a8aae1f581185a0401bc593fa3968a30b0fbd320c42741f018fcfd37fe979b3643975683201\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-linux-musl-x64.tar.gz\",\n            \"hash\": \"ef90cbd272f426bdbf8737a99229ccd0eaf9cc6b0a5a910c28f9a892ce11eacde33b8c74bcd35cd2e458ef811295aa9ca92a4ac28db105a3cfdb9e6d6ad3470b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-linux-x64.tar.gz\",\n            \"hash\": \"da47c2f0574ee1e73e68ebebf9132b70f2d6b6ff110e4e09666bf360d8e36840ae91855d46ef471ba249c62955efc134ae802584effa688563026f30560e8730\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-osx-x64.pkg\",\n            \"hash\": \"2ddd73819cc73077cce9dff5d8442740c2ad66183bd9dfc20987d2b75c8a8bc2048c75c0470d5f1bbd74d722ce53cfcd7207226531dfa5650d526e00746bea49\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-osx-x64.tar.gz\",\n            \"hash\": \"9f48942259d9512c47bcff7f939dcff56818a7afe40dc770c3b7bb0973b141f53b893774545a1dd64fe4ac57fa900fedabab9cc3f9cd379092c25aa5d315fb05\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-rhel.6-x64.tar.gz\",\n            \"hash\": \"06bd8753c827dfef54ad17ad9f698bca0a1bfa2d5d64420fd53b2ed0075a8952cd298d5e8059d87917bd3f6df4f1d4750841d13926c82a3a0f2e5f8c205d86ff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-win-x64.exe\",\n            \"hash\": \"eca0b684bed858e45a8d04dcf05296e023d4eb4ffa996d2b0970b475944b67c86ac7af05c6673ed1f327e06b1184bb1574528fd5d15296661c47cd5d9ae92602\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-win-x64.zip\",\n            \"hash\": \"8869b53858dde352d2a1aff369daa2805b412288d0c7e52c79114bad17e7c6ddb97490c3c88b9e3c093c3e07f95945766fb3b009a0dd1364bdaedf536b80650d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-win-x86.exe\",\n            \"hash\": \"29611927629370c3659f77ee8004225a1b8d58747431c0e846ea35f2db8f72b4588c7df3f570dcbce130fad5cce73566ab7a816b14dab7f261f8c0ad452d6e98\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview2-26905-02/dotnet-runtime-2.2.0-preview2-26905-02-win-x86.zip\",\n            \"hash\": \"6f9ce9ffcfdc03a07cd9c29f36bd21a3d49720b198b5b361bf499d9c485d38d438dea076189471dc43839b0b871b67a6ff834f3dff56d0fcbb73123eab696026\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.100-preview2-009404\",\n        \"version-display\": \"2.2.100-preview2\",\n        \"vs-version\": \"15.8.4\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-linux-arm.tar.gz\",\n            \"hash\": \"5544eb753e7bab67d34c1509a37a2af96f97ddbdb32e2c63a5d857b27710f37db63630287550e6b60c76e8c2a6988b8212a69e75d04382b224b5fde51b2aea1d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-linux-arm64.tar.gz\",\n            \"hash\": \"9cd2f0d9970a205a3b92a19c397139e522c3cb309dff34076f141bbae382651bc57bf91bc54703123af997ed64da3970f289b1fbd49e1ef638b1fe279a4ce545\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-linux-musl-x64.tar.gz\",\n            \"hash\": \"8c41c9ead676e8b1056868eae3464099d2f238a2a2f8bd7ccefb097bfa3758c18a0047d0de48389d53a662e2799391d8761fdaad288049ce0e61f0fc709ddf03\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-linux-x64.tar.gz\",\n            \"hash\": \"05c4e4accea5cae674bfde24ac883ba7aa733686479621411a5d8fb9c030e0c053d5c0f2c4a4fb62bc8b0f651987ce0f33628ac8a26af1d5c7a4259b3cba7a21\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/D/5/9/D593CD8F-04E7-425D-962C-86FF4C90B1DA/dotnet-sdk-2.2.100-preview2-009404-osx-gs-x64.pkg\",\n            \"hash\": \"bab8d830984255f9c3c19b1d70a575f3c1876be5dc537ab50a7be43bea0b0ef19a0e22895deb03e30f3559a849f15c68c8e245af314258d79296fe4b4b8019f9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-osx-x64.pkg\",\n            \"hash\": \"bab8d830984255f9c3c19b1d70a575f3c1876be5dc537ab50a7be43bea0b0ef19a0e22895deb03e30f3559a849f15c68c8e245af314258d79296fe4b4b8019f9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-osx-x64.tar.gz\",\n            \"hash\": \"91b45bc9f6012afc4fbc0a1a0e3ca91276c6873715811a1ec75e9d593d93c244bf104faa34d23e01608ac5878b9220a7c65b0b1ad1793b31abff3ecea95bda61\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-rhel.6-x64.tar.gz\",\n            \"hash\": \"215c66b4826d98c92b09e8186aeed0ecdc2556fbaf53ccc41ee69092e4464a65ffaea02028077efbffad6eb7e8d4c242a8773af148e39f6373e0da464dc2a8d7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://download.microsoft.com/download/D/5/9/D593CD8F-04E7-425D-962C-86FF4C90B1DA/dotnet-sdk-2.2.100-preview2-009404-win-gs-x64.exe\",\n            \"hash\": \"f3431a4b83d97ec835a4fb9daf1dff421e8693a902aac854da3b1d8652c78a98c9b15174a7734e4bf5942aa425af34f97e1cc4809e40eb418de3d597f4cad0bb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://download.microsoft.com/download/D/5/9/D593CD8F-04E7-425D-962C-86FF4C90B1DA/dotnet-sdk-2.2.100-preview2-009404-win-gs-x86.exe\",\n            \"hash\": \"64b5173921cdfbdda7657111e4428241e70bd5ad52ba21a36dc1a84f59da00ed1aa3c18570a639d4d2e07f97fb7b0198d89b658c6ceec123abb1b2e22bfa4d1a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-win-x64.exe\",\n            \"hash\": \"f3431a4b83d97ec835a4fb9daf1dff421e8693a902aac854da3b1d8652c78a98c9b15174a7734e4bf5942aa425af34f97e1cc4809e40eb418de3d597f4cad0bb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-win-x64.zip\",\n            \"hash\": \"a56368bcc3cc7d94940d2275c8da57ead08e852c2f45ad16323616e3efd1411bfa557eea50f72dd8895153a8e3fb6b90658220ea4d33cdb278cec60df1ac92a3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-win-x86.exe\",\n            \"hash\": \"64b5173921cdfbdda7657111e4428241e70bd5ad52ba21a36dc1a84f59da00ed1aa3c18570a639d4d2e07f97fb7b0198d89b658c6ceec123abb1b2e22bfa4d1a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview2-009404/dotnet-sdk-2.2.100-preview2-009404-win-x86.zip\",\n            \"hash\": \"4e0bdb25276c287cb4ed4dc71d0cbddb19f6ef892cc2461bc2738e74dfe528567ea2a49740f0a602da23f2c8e343a73786daeb140500246e5d683978899162a3\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.0-preview2-35157\",\n        \"version-display\": \"2.2.0-preview2\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.18248.0\",\n          \"8.2.1991.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview2-35157/aspnetcore-runtime-2.2.0-preview2-35157-linux-arm.tar.gz\",\n            \"hash\": \"736d96512ced3b4d40a85a13fad10fda22f6f9ef49775cbd730a9025b1a97da6b6b6dd7364e331b51283dbc13aed1648f0c41d371d26b2be3aac1b6719acbb5b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview2-35157/aspnetcore-runtime-2.2.0-preview2-35157-linux-musl-x64.tar.gz\",\n            \"hash\": \"bff1d30755a4918d42107248b8fd94d4a0b782d8715ff2c2b5a0a547e5bf88ceace574c354a2ba314390909bc2d915dbb048d3304492685b204a14b1ca2ab6b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview2-35157/aspnetcore-runtime-2.2.0-preview2-35157-linux-x64.tar.gz\",\n            \"hash\": \"c99cbac87b7904305b4b04df4a48779dd18157d6e7befa6f964317f82133005eff3ec2fbc3f91d3db64d9c3382ebd3903a7918bb424180084fd42933211025c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview2-35157/aspnetcore-runtime-2.2.0-preview2-35157-osx-x64.tar.gz\",\n            \"hash\": \"edc004bc6e230c2b4220a7489e5a6213812b19895df95239e39291570f7368e8543d9c511953cb24fa209c064825afbde81dafd8f195b61812762a23040719f7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview2-35157/aspnetcore-runtime-2.2.0-preview2-35157-win-x64.exe\",\n            \"hash\": \"fa331f372ec4d3a4de2a6dc9664e39dbbbda017ca1872720ee6257bbf8f9dd0878d4c0aba5d27cd2113ee381756e6482ddef5424362ceb52063c3a4d812d8b8c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview2-35157/aspnetcore-runtime-2.2.0-preview2-35157-win-x64.zip\",\n            \"hash\": \"f90a087ec1f5a36b6012e6b5041c76fff63472dc2c95b7c1f68b979e679aaab55ce855c4c18fe2e38f6671f365e956b25a1ae977e7dffe914b0d27477ab67839\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview2-35157/aspnetcore-runtime-2.2.0-preview2-35157-win-x86.exe\",\n            \"hash\": \"69eafe97f6c0e5286c923ca681268c03b00f0e1e5c89f5cb5f177ee093056e4d81dfd82b0221713fe486119e4db81c75cef3eb0505d2a12332163e5bbde78e22\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview2-35157/aspnetcore-runtime-2.2.0-preview2-35157-win-x86.zip\",\n            \"hash\": \"86282ab1adb588314446382012c0730d66622160442be91dd6764ac2cb60117e81ece542ba352ddd72b9a2041e5c21cc147163fcc378e1d634d68c33ef6585a9\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview2-35157/dotnet-hosting-2.2.0-preview2-35157-win.exe\",\n            \"hash\": \"37c88e69165ac1116991027b74434fad47a61affb80bea759b79b98bdd2afe82b0a2e0cd62d5d09189a796453ada711f4aaf109cff89fd9878e1faadbf31b5fb\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.0-preview2\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.microsoft.com/download/5/B/A/5BA1012E-5112-45C2-8369-152B49A6AA3B/aspnet-2.2.0-preview2-symbols.zip\",\n            \"hash\": \"f2cf90c7d0c513945c04555043e7bd2461a4432154a961c99ff4710acb0f941a944c26710e7ca94e6c3a0edd4824df73eaa5bcd9c5bcb490bcec5719c2819fa3\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.microsoft.com/download/5/B/A/5BA1012E-5112-45C2-8369-152B49A6AA3B/coreclr-2.2.0-preview2-symbols.zip\",\n            \"hash\": \"7e1bf8ad862320b4e77978f670cf890ac13ffdfa4a5bc454110d783d317bea01aa225bb9a6692cb34d2989a53fcc99125906e7081d6dbe10f3d27a2921639531\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.microsoft.com/download/5/B/A/5BA1012E-5112-45C2-8369-152B49A6AA3B/corefx-2.2.0-preview2-symbols.zip\",\n            \"hash\": \"58c3a7beff06c5421d19f173666889ddbfccf66b91d656cfbc4b3207a645214be8d89d2654cd80f37272c45148e4aed9a4425d7a64af849460eaf75bdedbd8dc\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.microsoft.com/download/5/B/A/5BA1012E-5112-45C2-8369-152B49A6AA3B/core-setup-2.2.0-preview2-symbols.zip\",\n            \"hash\": \"e022ec37fc972d970bd56ea8d2985c7d7c158be45da3bd60c725040f4ae0da948b837632cd81fb3455c5be315b48c023c4695487a5625a9b986193dea4a3f4e2\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-08-22\",\n      \"release-version\": \"2.2.0-preview1\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/2.2/preview/2.2.0-preview1.md\",\n      \"runtime\": {\n        \"version\": \"2.2.0-preview-26820-02\",\n        \"version-display\": \"2.2.0-preview\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-linux-arm.tar.gz\",\n            \"hash\": \"33a4fda6cda60352195fd4cc4c214c1e565628d6ffa9b2582e105e49c8886ea143ab50479fb129b22ee87fbdfcc6e99714aae465a111954f5c529c5b5e5b8b54\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-linux-arm64.tar.gz\",\n            \"hash\": \"81fd36b2209446823a39f89ac93db7c566b531897bbcdcb26abde09b95e6d36838d62ed1b2a95339c5f6944ead830c1ebffe9e0d0d28c53ef9d594d8f25df8e6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-linux-musl-x64.tar.gz\",\n            \"hash\": \"e260a28512dae88e677aaff8e2f4eae26274a15fd459a63c2ebb03c4f39d6a55451e44612e07ed0dafd2410112a0b21fa32941d13888d70475defc0309ecb910\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-linux-x64.tar.gz\",\n            \"hash\": \"6fc7e1a39707f2909699c5b1af470a01b6f0908e169db5b83425f3a5498597850ecdb0c78c60f64205bd68aa9822025a1579a004e3d48128dee59f272d4bd10c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-osx-x64.pkg\",\n            \"hash\": \"b0ce07e2294dfb613d5aa3d81e02c6af30716613900da8d0e54015ca3fd60dae05ceec7351400559a2c619e99c1fc8199feee57b3cfb25453b03e9ca0dda43ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-osx-x64.tar.gz\",\n            \"hash\": \"870dea28301ca7a402184f14e956fa23756b60458afcedc0475b2bf2ccdba19c6ab6592f8a2e612b52312ad47c364362f065fa8cc67757970001ee7f5d8dc770\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-rhel.6-x64.tar.gz\",\n            \"hash\": \"945ee583ce4d58334049ed73de4e20da6c8043a33d8950d229584c368be03d90da9389b3ae328c471cce9b47ebbba806c5393130b05677c6c53be00177f56631\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-win-x64.exe\",\n            \"hash\": \"968fd684c65314634338f6d3fc7e5336d97303eb7a2e0149a5fb94fd105b14b9b3f146a572849e843dd8656aef16444c69cb6630ea4cbedd1d1ed637bbc15058\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-win-x64.zip\",\n            \"hash\": \"1c8be0ae874a4daab7a6558a18c4bdf8c2702a93946c0cf3c1b5b6d4ea2cb090880a9e76c139a68e518904016fe37e9dbfb90d471fcc351f7947b7921b7880ae\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-win-x86.exe\",\n            \"hash\": \"fab1f877448002bb7cd509ec309978baca2322f2c9c29d91eaf54a0b4310079ad7f55449da5ddc8cd5a29c67e05d262bbb1b96325258c123642c77c874fa8eed\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/2.2.0-preview-26820-02/dotnet-runtime-2.2.0-preview-26820-02-win-x86.zip\",\n            \"hash\": \"9a857b5b22c579a7a55354076b81bea38c61ed70425fb33094762180e10e9c5f06fc9dd436484b1de0bc854f93a282f8c8beeaad1f1f01dd68de9a613ab9ae51\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"2.2.100-preview1-009349\",\n        \"version-display\": \"2.2.100-preview1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-linux-arm.tar.gz\",\n            \"hash\": \"2f1b84cc88a2098b30ae4b560e6af93b4299990dae8c5939e8aedabcf08931ac37e5af330467aff9ec998cfaada3b0dc76eeea667ce4398a6423b36546737741\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-linux-arm64.tar.gz\",\n            \"hash\": \"705d876fee32e28c49fbcf15f1ee42c4708d9006bf28f5ea2499634e92d86ddb643fe213530b14545f27fa94a1187d79cdc6f9abdc31482f35a4ab896f4cf831\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-linux-musl-x64.tar.gz\",\n            \"hash\": \"ea1bcf0c2f9f91ea3296667d2b95b07ae4080625d14fdd06f353ac6f02336c26f1ca9d85ae904aebf717b8fb065c86b4eb3a06e643cde746b1bbcfaec1ddadb0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-linux-x64.tar.gz\",\n            \"hash\": \"0584ff770e1e8808126c74cd36c6014cbc95320ff797a79159e809aac72dc6a84bde932dcc4fbb4b281fa253302d4979ce2bd709647fe1f4dfa1e47799ef7184\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.microsoft.com/download/5/9/2/592E5073-8394-4A95-8F48-54080F0F1555/dotnet-sdk-2.2.100-preview1-009349-osx-gs-x64.pkg\",\n            \"hash\": \"a2f65c0d5eb09bff9d630a9f4bebaeca82e319bb01b8489e728f144020831736818c59de0a52d0796f059aaeb8a6d758b501b8301911ef74c747b12d63a56fab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-osx-x64.pkg\",\n            \"hash\": \"a2f65c0d5eb09bff9d630a9f4bebaeca82e319bb01b8489e728f144020831736818c59de0a52d0796f059aaeb8a6d758b501b8301911ef74c747b12d63a56fab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-osx-x64.tar.gz\",\n            \"hash\": \"edcc36f939689ffb6a16c0ddc43c73da5cf69abf7c1b86a1b7ded9f382e0c7f5c8cada0d2f2fa5e81ca6d93fa7186215625e0433ab6d4721842ea7d7653d6efc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-rhel.6-x64.tar.gz\",\n            \"hash\": \"bedd1485f677c955288f3e1d41c065cb91704d2f346f478f3946040f32b6f9c67eeda5c0a902618ff65f47327b8475bf702c1ee50a738238f1c40cdf685dd6f0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"url\": \"https://download.microsoft.com/download/5/9/2/592E5073-8394-4A95-8F48-54080F0F1555/dotnet-sdk-2.2.100-preview1-009349-win-gs-x64.exe\",\n            \"hash\": \"91fe61cfb0f76757ae025d77cdd8cd3ecbef14f3708aa742f1a86650323f38fac490e9cc6ab180769bcd3ca1f470ea5b3291726633a6675a33af442307c7dd27\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"url\": \"https://download.microsoft.com/download/5/9/2/592E5073-8394-4A95-8F48-54080F0F1555/dotnet-sdk-2.2.100-preview1-009349-win-gs-x86.exe\",\n            \"hash\": \"47cd97836615c73dfb1f10e9b0d10c36c4e0def770564f8f5ed1e162c8d33d5cbb54cb25ebea4d2e87d1955ffa93756709d2c61c5568b7886c9b97f148a5ff93\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-win-x64.exe\",\n            \"hash\": \"91fe61cfb0f76757ae025d77cdd8cd3ecbef14f3708aa742f1a86650323f38fac490e9cc6ab180769bcd3ca1f470ea5b3291726633a6675a33af442307c7dd27\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-win-x64.zip\",\n            \"hash\": \"98c799cf1effe00f86ffbcff016f01f7a749289b51a96f310040db713140a4a8e5202aa6e9b2a92e22a0aeb183503a5fd6e733b6853835b4fd83a10b9b5449b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-win-x86.exe\",\n            \"hash\": \"47cd97836615c73dfb1f10e9b0d10c36c4e0def770564f8f5ed1e162c8d33d5cbb54cb25ebea4d2e87d1955ffa93756709d2c61c5568b7886c9b97f148a5ff93\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/2.2.100-preview1-009349/dotnet-sdk-2.2.100-preview1-009349-win-x86.zip\",\n            \"hash\": \"d1975ddd41a4dd0b9cd97c818d192a6343d4090d1a9c941714d9a8eb2e2dc6a3bc9c2dd49a6b19ed2d702913546be12b88f22aa4ed13d4dcc7693a9f5fbf92e0\"\n          }\n        ]\n      },\n      \"aspnetcore-runtime\": {\n        \"version\": \"2.2.0-preview1-35029\",\n        \"version-display\": \"2.2.0-preview1\",\n        \"version-aspnetcoremodule\": [\n          \"12.2.18248.0\",\n          \"8.2.1991.0\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview1-35029/aspnetcore-runtime-2.2.0-preview1-35029-linux-arm.tar.gz\",\n            \"hash\": \"f033ef30ef5a48c4a6fa281865dd4062416e668d1b019fefb8a630c20ada7b4d762e045f6b16b1bf36bb21096d783a14b8fa0cea0ae7b6d78ae118ff769efb84\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview1-35029/aspnetcore-runtime-2.2.0-preview1-35029-linux-musl-x64.tar.gz\",\n            \"hash\": \"b86908f2c5fc72267520e6b35929d6e8551df7b1f8292c6179c4af09efaffc868574563148868c4ae48ecb45a5c4b95648c33a6b3601024c9db388ecb1a8e938\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview1-35029/aspnetcore-runtime-2.2.0-preview1-35029-linux-x64.tar.gz\",\n            \"hash\": \"5513145c0d6344af6858fc94f2aa9a78dc2d8abcd35a9db7d10ff01b97a89221cd8534eaebad59b9d548af2233e4d075a8bc254ff0934d0f66a71d83507c03a0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview1-35029/aspnetcore-runtime-2.2.0-preview1-35029-osx-x64.tar.gz\",\n            \"hash\": \"16ee2abe50d22332098b371baefdc84313ac7728eba5199243b5755f2f6ce1ab9cb4f32356d53b4402baf38a8b7e0aaf1e583a9cd7de1d7eaef37068de27fec6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview1-35029/aspnetcore-runtime-2.2.0-preview1-35029-win-x64.exe\",\n            \"hash\": \"867cb2efefcbf0cfcb68ecf92bcb42eb72c9c1fd11be1c0934c51f50c14d907d97b4c8efc3f91e9d2e0682e5c35a7e161f6c30f936c820add142ae902084835f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview1-35029/aspnetcore-runtime-2.2.0-preview1-35029-win-x64.zip\",\n            \"hash\": \"c923f4e4537642d2ff431d3e5478edcab0cdb3122103d7aeb3844a027de7fb605849b46910a3165047a6ae5d57686fdd914a7f34c9bbb960c912852503206f42\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview1-35029/aspnetcore-runtime-2.2.0-preview1-35029-win-x86.exe\",\n            \"hash\": \"a838ee412c12eecebb50ab05b7de6bb6034420ae1b69b58639aceccd13c6189aa5ffa3d3b37963f623cc8a242b874c79ff41fd08a02e16999681d81cc7f1860c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview1-35029/aspnetcore-runtime-2.2.0-preview1-35029-win-x86.zip\",\n            \"hash\": \"38d42d7deb948160a969495bda3f12a4bff6d603ca1ecf657bd128e66ae5b9fe04b3bdd2903e41fb35c75bdb6478075889159c0dd22270596c5ac7a663aee35b\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/2.2.0-preview1-35029/dotnet-hosting-2.2.0-preview1-35029-win.exe\",\n            \"hash\": \"ea347dccf2e62476b151e8d2f9d0cb3bd5523c1830f0f19cef778d63abc05553f380c513325b719239667afe7743d03b4a6dd405a5d94bede2ae53a7abeb480b\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"2.2.0-preview1\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"url\": \"https://download.microsoft.com/download/1/9/F/19FEB118-A1D8-4B0E-B74C-D155FC5D297E/aspnet-2.2.0-preview1-symbols.zip\",\n            \"hash\": \"6960afaa7b5dc2446c3adfbcb6c352409241298c9114aa7be9390a0af0126dab0a06f39e82f27f3e35aa3340becf5291f54cec4cdc73831550177e26d7433518\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"url\": \"https://download.microsoft.com/download/1/9/F/19FEB118-A1D8-4B0E-B74C-D155FC5D297E/coreclr-2.2.0-preview1-symbols.zip\",\n            \"hash\": \"2d2d9ead71b13aee5d1bc89b0e947ef6fcb4be7bcfcdaebf325051dc21cd0a1c2a7d20c105d500af7454ff4b09d04f6359315f6da39063eeb4484590848a21fb\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"url\": \"https://download.microsoft.com/download/1/9/F/19FEB118-A1D8-4B0E-B74C-D155FC5D297E/corefx-2.2.0-preview1-symbols.zip\",\n            \"hash\": \"1eb028e621ec0febd4fef4aa787c2ecf8563733bfe95ffa02ac8bd3c39898b5e91fc19ba78a5bf9c545a825e36adaa8138d94872abda0968f0b12ec3f0695770\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"url\": \"https://download.microsoft.com/download/1/9/F/19FEB118-A1D8-4B0E-B74C-D155FC5D297E/core-setup-2.2.0-preview1-symbols.zip\",\n            \"hash\": \"493804a96e01e2d9c63458f81fe2b0c253e1479286b60318050aeaa041497e293247b8b92316f829f0cab567c8c6521b0a5dc76ff81e4959080478044840c227\"\n          }\n        ]\n      }\n    }\n  ]\n}"
  },
  {
    "path": "JexusManager/Resources/3.0-release.json",
    "content": "{\n  \"channel-version\": \"3.0\",\n  \"latest-release\": \"3.0.3\",\n  \"latest-release-date\": \"2020-02-18\",\n  \"latest-runtime\": \"3.0.3\",\n  \"latest-sdk\": \"3.0.103\",\n  \"release-type\": \"sts\",\n  \"support-phase\": \"eol\",\n  \"eol-date\": \"2020-03-03\",\n  \"lifecycle-policy\": \"https://dotnet.microsoft.com/platform/support/policy/\",\n  \"releases\": [\n    {\n      \"release-date\": \"2020-02-18\",\n      \"release-version\": \"3.0.3\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/3.0.3/3.0.3.md\",\n      \"runtime\": {\n        \"version\": \"3.0.3\",\n        \"version-display\": \"3.0.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-linux-arm.tar.gz\",\n            \"hash\": \"129b8af023c541986ac74367b63337363949c2307452246aa61ef05dd33969576db8fd5e515373f14da9bd23428037e60aa7d9000743dce6c75186de065e61e7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"cfdb6132a3759a6fe67e4140f01d59089bf8e72b87ed5792cd9892ee9819234ab21888fb73abbf673354b5258d97cbf47a8801d4a302f6d3952d4b3b36367469\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"d62a1c9da4e38c1b2fe3f31180486008eff9b7b74d0ef8b1016c27c573bcf61a7b11a4874b9a1b67af3a16abef10ba0b993e8730e45cf51342b6281056a71fa3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-linux-x64.tar.gz\",\n            \"hash\": \"3d1f0ba2f293f43e087a8940a0f4736561f43b9f28bc5beda79a61f887e258543aea4dc71e88414a7c6e271dcda984a989afb62fc659a72223707a179cdde9c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-osx-x64.pkg\",\n            \"hash\": \"bbde63ab43032cd3d8607323682eecceedbd5b2a63bdb87d8019d48e2ece946564df4f97aab8f666b7585fc078369a2b9bac187cc9cb39a4dec00a835e9f2357\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-osx-x64.tar.gz\",\n            \"hash\": \"035daff05a04c53ee9735a6d9af0caebf58f93057d8a4d44e3fa56f2061042359f3b220f20226d4ba02cb8f38a2890260dcfe176d63af1b027d03857fd4c2034\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-rhel.6-x64.tar.gz\",\n            \"hash\": \"c6dbf98d6e361053432f7a611adb4623a7e6809e8671d05886cb1acd215f579247ee13a886b3ec4ef9ba88e86baf7e375e13e9d5d621f241eaf26186a844fd3f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-win-arm.zip\",\n            \"hash\": \"ba7376649f5cabfafd63c13559c4bc14d2f33ecbb78c5673ba5b77670f0ae06e2e628f14b29209690f21a70e9e209f88155be97bb5c1ab1477ef041901fedf60\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-win-x64.exe\",\n            \"hash\": \"d8b85817dd2691a03a9ce3c488c37694bc723750fe11a7761ce15bf65a6d6cf2672c4f32f6c8b7d3576e3e197e86898e89cb36e69feabf3b7c205c78cb0801ed\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-win-x64.zip\",\n            \"hash\": \"00428351d01f90e2951699f035d60068313f59e8ca5f07dfe228f1196644d2e1e4d7d8e80396bbc659001ac47df000c2f3b73433cba5f18ee7a39c0465daf60b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-win-x86.exe\",\n            \"hash\": \"8ec3b01530f112e268cfdbd0213f0d47ebbbb2bd2b14b574e60bdeb22e6a46b42d39f5c212f603375e074459aef1a0e1442c1b016effe201081b0fb745ffa207\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.3/dotnet-runtime-3.0.3-win-x86.zip\",\n            \"hash\": \"06f5551c9a31d3f05f9f689ea0c6b0219404e6ac57b8fb632f682bb6d99045c98d843973ce34bf1ecfd53bd2fac2fe397319634e0b60aeaef01e9606805781bf\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.103\",\n        \"version-display\": \"3.0.103\",\n        \"runtime-version\": \"3.0.3\",\n        \"vs-support\": \"Visual Studio 2019 (v16.3 or later)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-linux-arm.tar.gz\",\n            \"hash\": \"c4836970b33813f5de36ba6b92cbce2b2ecb9bfd23101cb20af194824ef7b2c899d9d550284616036f546804032aeabc93d5edf5471f9bea73060c341a813a2a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-linux-arm64.tar.gz\",\n            \"hash\": \"ceeea4f5590dab0ccc8f016f61db72515bfe1b0d2308a1065696ec654088993f2fbfa7e5b12a486a229c9fbbda657be9f80e03879d9e3038b2d78ea4020f82c4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-linux-musl-x64.tar.gz\",\n            \"hash\": \"79c2c93d5d4f212f4d2c96cf1611d4f93370c075c342186ecacebb10cad301cffe8345e2d97e45a771e165f10e895f6e08d0b2e74b12b04c8e1b4062a2bbd35a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-linux-x64.tar.gz\",\n            \"hash\": \"22acd337c1f837c586b9d0e3581feeba828c7d6dc64e4c6c9b24bdc6159c635eb7019c3fb0534edeb4f84971e9c3584c7e3a4d80854cf5664d2792ee8fde189b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-osx-x64.pkg\",\n            \"hash\": \"478310aa9683973db33195baf02849fef810a7853f9f3ff94719481cdfddc59033e19237f58f00b83ffb6c66dce09a04ce748a00713a85d3e156fb8d93f3c8b1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-osx-x64.tar.gz\",\n            \"hash\": \"96edceb1024ce83e86de8c173d49b8cccd0e0af2e54f2c9dea340570243d93df400521cb0c1b64e9f1f74e6327308dbba528e12629e0a910c447155c62727dd5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-rhel.6-x64.tar.gz\",\n            \"hash\": \"ce9e9ceb51cb969109c1dfa2a90ea8b54540a34e361c8b86e60e8d2dab8a562bb659546c88f067d1464aa3015133050538b93b110e823a2853583a4b3e3231af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-arm.zip\",\n            \"hash\": \"5b1b042cc1ee611149d997e8255cae1a56211194583ec6b8721bf219fdf15233e9c18f58fea3ff698ad22707491d8120e5d010b18de0ef33a913425f7cc995b6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-x64.exe\",\n            \"hash\": \"1cbe8d898b53342fd08864f69918375ce24181464a5e54e25e0c5f8ed4d737b595af72ef11d3aed029df8ed6f51fc400a1f264f0996a2dc2edb7502f750a14bf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-x64.zip\",\n            \"hash\": \"4d873263ba312a14fc10bdc4ce362eefbb65b759c0676c32fb00cb60bb52deed2bc397908c9472fd53991e3b679e5c8285d3df2cca52c6597909fb17a64580af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-x86.exe\",\n            \"hash\": \"f5791ba9df3ce6acb2a4c11336e2170e9825697ee91aaf55d4879ab1552fe4df63989b1c099bcc7405781009ad27d955e17ba6c0f5335a3f82d3fc3162a1c7b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-x86.zip\",\n            \"hash\": \"cff9737c9cee6389ecbb7ede732e70da8a2199a0b89e56e4bddbf9f705ccbeffb6b1a8df15038d09295c2c56d07bf2d7ce9754de3621f55703595442eb9c972f\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.0.103\",\n          \"version-display\": \"3.0.103\",\n          \"runtime-version\": \"3.0.3\",\n          \"vs-support\": \"Visual Studio 2019 (v16.3 or later)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-linux-arm.tar.gz\",\n              \"hash\": \"c4836970b33813f5de36ba6b92cbce2b2ecb9bfd23101cb20af194824ef7b2c899d9d550284616036f546804032aeabc93d5edf5471f9bea73060c341a813a2a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-linux-arm64.tar.gz\",\n              \"hash\": \"ceeea4f5590dab0ccc8f016f61db72515bfe1b0d2308a1065696ec654088993f2fbfa7e5b12a486a229c9fbbda657be9f80e03879d9e3038b2d78ea4020f82c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-linux-musl-x64.tar.gz\",\n              \"hash\": \"79c2c93d5d4f212f4d2c96cf1611d4f93370c075c342186ecacebb10cad301cffe8345e2d97e45a771e165f10e895f6e08d0b2e74b12b04c8e1b4062a2bbd35a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-linux-x64.tar.gz\",\n              \"hash\": \"22acd337c1f837c586b9d0e3581feeba828c7d6dc64e4c6c9b24bdc6159c635eb7019c3fb0534edeb4f84971e9c3584c7e3a4d80854cf5664d2792ee8fde189b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-osx-x64.pkg\",\n              \"hash\": \"478310aa9683973db33195baf02849fef810a7853f9f3ff94719481cdfddc59033e19237f58f00b83ffb6c66dce09a04ce748a00713a85d3e156fb8d93f3c8b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-osx-x64.tar.gz\",\n              \"hash\": \"96edceb1024ce83e86de8c173d49b8cccd0e0af2e54f2c9dea340570243d93df400521cb0c1b64e9f1f74e6327308dbba528e12629e0a910c447155c62727dd5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-rhel.6-x64.tar.gz\",\n              \"hash\": \"ce9e9ceb51cb969109c1dfa2a90ea8b54540a34e361c8b86e60e8d2dab8a562bb659546c88f067d1464aa3015133050538b93b110e823a2853583a4b3e3231af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-arm.zip\",\n              \"hash\": \"5b1b042cc1ee611149d997e8255cae1a56211194583ec6b8721bf219fdf15233e9c18f58fea3ff698ad22707491d8120e5d010b18de0ef33a913425f7cc995b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-x64.exe\",\n              \"hash\": \"1cbe8d898b53342fd08864f69918375ce24181464a5e54e25e0c5f8ed4d737b595af72ef11d3aed029df8ed6f51fc400a1f264f0996a2dc2edb7502f750a14bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-x64.zip\",\n              \"hash\": \"4d873263ba312a14fc10bdc4ce362eefbb65b759c0676c32fb00cb60bb52deed2bc397908c9472fd53991e3b679e5c8285d3df2cca52c6597909fb17a64580af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-x86.exe\",\n              \"hash\": \"f5791ba9df3ce6acb2a4c11336e2170e9825697ee91aaf55d4879ab1552fe4df63989b1c099bcc7405781009ad27d955e17ba6c0f5335a3f82d3fc3162a1c7b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.103/dotnet-sdk-3.0.103-win-x86.zip\",\n              \"hash\": \"cff9737c9cee6389ecbb7ede732e70da8a2199a0b89e56e4bddbf9f705ccbeffb6b1a8df15038d09295c2c56d07bf2d7ce9754de3621f55703595442eb9c972f\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.3\",\n        \"version-display\": \"3.0.3\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.20023.3\"\n        ],\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/aspnetcore-runtime-3.0.3-linux-arm.tar.gz\",\n            \"hash\": \"f63f29877a02f9467b4016f6802315d7c9c29fbcededca458b50670af4bcb8cc16ce08568a82371ddf7dc67fb17f9f399888a15d9a5d608bf6102c551531c3fb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/aspnetcore-runtime-3.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"6edf8b2afa39228ffc39e92b712791e9a32152fa06faf78a2d15909057bf1c8e21bcd42d49511bd4614f173773a0d97248967a23d999f94d1a2e0b46089337bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/aspnetcore-runtime-3.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"2126db5d988e28fa9a7f2c64340fadad2ccdda350a6d4429f26d4d95b7e270d89f6b0cc7af0c2e15b9441da38d07c12f46bb4ef30595000f31820bbdfe9c11df\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/aspnetcore-runtime-3.0.3-linux-x64.tar.gz\",\n            \"hash\": \"d88366ac20204c5acb4b80bc40396d608d6c067b25baeef54204e77dde48fb515bd463743745a0982ba8c9182fc751306a4e796f91060b2d013ffbea7d9a2dc8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/aspnetcore-runtime-3.0.3-win-arm.zip\",\n            \"hash\": \"98df004888cd3b43c5941f415543e3a6acb9d9cf4c73ea826ae3ebd76be3d627a0befcc2e7a11d0ae6d0be831e6efeb5140258a8ce998c3a99650162b3d05955\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/aspnetcore-runtime-3.0.3-win-x64.exe\",\n            \"hash\": \"c2b083f99f1408b662053990c5d507d9659b7606d45925a76e836ec8dd7f7af0838383fbf8981b1fd9337c2d8ef95d5c838008f007269be78dc3a2b594f57396\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/aspnetcore-runtime-3.0.3-win-x64.zip\",\n            \"hash\": \"68b504408287c49efa09d8861857ef4cade4999a05b78130cdc955ade1327faea6842b954afffb17ad0463d3a9afafbde6721c466f336b5ce4033765ad485825\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/aspnetcore-runtime-3.0.3-win-x86.exe\",\n            \"hash\": \"b22a9a8ea763a8901e1e18211b372d21da5ea20e1aea7596666a1b71e90a7f69b79a43296e9601700e42cfb22861918fcafb127ccdc997826586742211b8d1a0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/aspnetcore-runtime-3.0.3-win-x86.zip\",\n            \"hash\": \"563e145a0b60e1e1a5d6e42fb37f33c9b664ba1dca0f3932ad6c94a6456470f5ff1f0d852d8e5778aa672e994f7ee08387c2aae59d53ff772e1e9d68d6dad4b0\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.3/dotnet-hosting-3.0.3-win.exe\",\n            \"hash\": \"36dcfda8182690df255233c4329496aa2fa442b79f898b57cd086be54c98137b64e36a295a9b0bacbe81a9be2ac6eb6f5c56a7fcc26b0941a1491ece72ce469a\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.0.3\",\n        \"version-display\": \"3.0.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c525a2bb-6e98-4e6e-849e-45241d0db71c/d21612f02b9cae52fa50eb54de905986/windowsdesktop-runtime-3.0.3-win-x64.exe\",\n            \"hash\": \"32ec256feb91077c1c041f33875de3e0e5163350bb41d97a100802a1790971b8b35fe2071401116e07c10a5a5e05c8d303a1e48962dd2a22ce1ed80e3fbfbc84\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e312618d-85c4-4cad-b660-569b5522eca9/e951e76ebe011b5d3ea1289ef68e8281/windowsdesktop-runtime-3.0.3-win-x86.exe\",\n            \"hash\": \"d2d55727a092971be696435ed11ed36c84469d299aad3509a2e958b573b5271bf2eedc779661c2fa00519036a6303215021b229f5669a82f0ef51e3e60f8e659\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.0.3\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-01-14\",\n      \"release-version\": \"3.0.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-0602\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0602\"\n        },\n        {\n          \"cve-id\": \" CVE-2020-0603\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0603\"\n        },\n        {\n          \"cve-id\": \" CVE-2020-0605\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0605\"\n        },\n        {\n          \"cve-id\": \" CVE-2020-0606\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0606\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/3.0.2/3.0.2.md\",\n      \"runtime\": {\n        \"version\": \"3.0.2\",\n        \"version-display\": \"3.0.2\",\n        \"vs-version\": \"16.4.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-linux-arm.tar.gz\",\n            \"hash\": \"679d7dfb9ed324bb9b964a9ffe39c88592dd3c2dd1f81cd0db12a2f300e9b8f60e8e607590d885626b6569142b88ff2137e25b24144e82a671343761d7578fb2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"f71e4c46b5c3a138dc6e6f467724bb27b66bad591f5b5abe2547339a522dd5d8298fd79d17fdc2b61ee6a5fcaf553dfb5b1185551e2ecb981eb113949c1f3421\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"f9c5b54b3e3231d7a4ac9dd8ef8be8d9b23c7fa0591514607ce1003938254c2750640dfefdb3c82458edff83cc23304a912937d34a76737200aecbdf782b8120\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-linux-x64.tar.gz\",\n            \"hash\": \"c8f0e4eb220fa896c4a803a8d9d0c704ae7b8383801a977036f3089b1d779159f5a2d9293dc11ff5f4f6c76febc6f70f6cfcdff0debd3243cad5eb635f853d45\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-osx-x64.pkg\",\n            \"hash\": \"ff653a21da2fba425008dfb579a618ea7816d96fe5f7ebeaba00c8ee4809842a24afcba67f7610540f4ac4e77f93fe4ef68fcb13aaf19152ec4028277784e60c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-osx-x64.tar.gz\",\n            \"hash\": \"ccba8b317be9f8473369365cf105eff9cc22733f3af88b8a3b24346e1d7fb87349ce05a9a0d494dfa9cf2f99176f92831471a6b4c6b7f3f4381267a7be3c1204\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-rhel.6-x64.tar.gz\",\n            \"hash\": \"828697931b95f8c1c07094c2c5772a18f38f10542d2de1d95ea802c9c57961799688add740963e8f27db8abf267071bf596b0ba0dc29360b3e9ac0e41bd13674\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-win-arm.zip\",\n            \"hash\": \"7199e773e56c9cd1cf31c8964edc400fcdf03cff518c18e20ba894016c1a03cfad5c806c0b2747a5010da8fc681ab09b71b2fae8a7f23711d8de65494d975347\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-win-x64.exe\",\n            \"hash\": \"8a539f1ef52823d69949b8728bac6e62567e86d3724283175b6f5db3ad5e0bef27d5d72d29d04ce69465004d02c9e7b991ae477a6a9432600f5eb53615ca9320\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-win-x64.zip\",\n            \"hash\": \"c27befc57d3c2700bbba8d61907dc99cbbfdd7f69611cd10363974907025637b71cf9e02be4721790ffe5451fdd7a070a5ab0203759af98f2ae7937ce8f1fda8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-win-x86.exe\",\n            \"hash\": \"e882abe61cf2f82338942ea72b508afad430907f262253742bc4a31a40315691507a624bf1e68f372b7f5948a7ad46eefe36203e1e0e8fdaa89703b64c6529a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.2/dotnet-runtime-3.0.2-win-x86.zip\",\n            \"hash\": \"25ee784a04d43738d1a21bf6130f0067097085160b0f5292612e6c129b826e3553c3afb58382104a982e2a83e894970c82f80deac2f633209f892d3ff9a34a1e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.102\",\n        \"version-display\": \"3.0.102\",\n        \"runtime-version\": \"3.0.2\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.3 or later)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-linux-arm.tar.gz\",\n            \"hash\": \"f4151e9f2b2c719cf32c61fcc2a12eb7cf378889f6909cfaf5e24bbc6400a52fa29dd13f45494b1713afdd276565a4b44a560be860602f65fbbb707afe504da4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-linux-arm64.tar.gz\",\n            \"hash\": \"9f3d0e30180a0b7967a6827f0a83023af90d6ccd9ff89c67e648d043add553d7ae1b60dc19f77db3f8c18dc2574b3cf7ed586b0805d49f0e8945c6ee1ddc9c9d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-linux-musl-x64.tar.gz\",\n            \"hash\": \"1a9054ac0365045d0f6d161b3f2f8876d026b6a230f595fa11cabd32643bf67c460cffd5f5159c60f2b743f24fafdc189c79c2112fefe67acb84cf7d547e6ba1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-linux-x64.tar.gz\",\n            \"hash\": \"77bc287d9c20630976ac4c0736192ba4899154c9e7cc5b87bc9d94d5d8abafdd832cfe8f385b6ba584c702d9261566109df15ab46b0d62bd218d950d3b47893e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-osx-x64.pkg\",\n            \"hash\": \"df094b0a74ea9da2bd1ee5d8d137902454b3ce9eb75d154dee32e117c9bf3b7b4a5ed3981ae723d4f6615681de6537d6e91e2019760d78e25ac04aad10c2cbc8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-osx-x64.tar.gz\",\n            \"hash\": \"7e6ba6f0d8a73d05bf7fc212f52c120d5a7b5349c58901b242bf39d01e28d1655a6b88f19c6f4247c9459dbbdc38e862fe88a44623307920db8c18006f66f48b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-rhel.6-x64.tar.gz\",\n            \"hash\": \"e48d3ead60a7bcd98c4fb43ad5fce4b2d606fe9b6385d791c0486a31db94f7e61593d60db2474c2fdd2320e6cc6a21ce7788f7b5b6bd5b2547e4d235c210e933\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-arm.zip\",\n            \"hash\": \"000418fdf08c42d349fc879a8fc1df724e76d8ed735abd63d84b1bda8992cc4a3b40e5e4ee63cc4ec0a1cb5ade115a256cb14d6f75e0b59b12541d4dbfb29e2c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-x64.exe\",\n            \"hash\": \"dd75648b4bf8e9521b90d5e6ac6fac16f4843b58b0e2ff6e35e61f6f98b5ed2640ba8278f53a78ded1178e57931a8965cd279ea638b600c7032dd5e9c2c5d44a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-x64.zip\",\n            \"hash\": \"aab00a5a41c5b0b122c4520b80040c24e590225a401bc9158ad4db913e8f7f9c836091ba2e103290a2902e96a1b067dfcdccca687208ab4fe78feb75d801eb07\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-x86.exe\",\n            \"hash\": \"d97421c5727aa77ed0129ca250685c39b58ff975a1d7c471759b1932f28baf8de86b632f306765ddb2235234a6ee49466a5c664d8395b81bac1af285914d0d0d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-x86.zip\",\n            \"hash\": \"0cbea5cca14aa086c2ed6165b81f89a6b3beaf9a75fd1f4c4c61dff432c28742afef3bf8dbe39c2a3a4de6e3b947b9cf96fae946a8020e6204e01fc7abf9d67c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.0.102\",\n          \"version-display\": \"3.0.102\",\n          \"runtime-version\": \"3.0.2\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.3 or later)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-linux-arm.tar.gz\",\n              \"hash\": \"f4151e9f2b2c719cf32c61fcc2a12eb7cf378889f6909cfaf5e24bbc6400a52fa29dd13f45494b1713afdd276565a4b44a560be860602f65fbbb707afe504da4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-linux-arm64.tar.gz\",\n              \"hash\": \"9f3d0e30180a0b7967a6827f0a83023af90d6ccd9ff89c67e648d043add553d7ae1b60dc19f77db3f8c18dc2574b3cf7ed586b0805d49f0e8945c6ee1ddc9c9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-linux-musl-x64.tar.gz\",\n              \"hash\": \"1a9054ac0365045d0f6d161b3f2f8876d026b6a230f595fa11cabd32643bf67c460cffd5f5159c60f2b743f24fafdc189c79c2112fefe67acb84cf7d547e6ba1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-linux-x64.tar.gz\",\n              \"hash\": \"77bc287d9c20630976ac4c0736192ba4899154c9e7cc5b87bc9d94d5d8abafdd832cfe8f385b6ba584c702d9261566109df15ab46b0d62bd218d950d3b47893e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-osx-x64.pkg\",\n              \"hash\": \"df094b0a74ea9da2bd1ee5d8d137902454b3ce9eb75d154dee32e117c9bf3b7b4a5ed3981ae723d4f6615681de6537d6e91e2019760d78e25ac04aad10c2cbc8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-osx-x64.tar.gz\",\n              \"hash\": \"7e6ba6f0d8a73d05bf7fc212f52c120d5a7b5349c58901b242bf39d01e28d1655a6b88f19c6f4247c9459dbbdc38e862fe88a44623307920db8c18006f66f48b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-rhel.6-x64.tar.gz\",\n              \"hash\": \"e48d3ead60a7bcd98c4fb43ad5fce4b2d606fe9b6385d791c0486a31db94f7e61593d60db2474c2fdd2320e6cc6a21ce7788f7b5b6bd5b2547e4d235c210e933\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-arm.zip\",\n              \"hash\": \"000418fdf08c42d349fc879a8fc1df724e76d8ed735abd63d84b1bda8992cc4a3b40e5e4ee63cc4ec0a1cb5ade115a256cb14d6f75e0b59b12541d4dbfb29e2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-x64.exe\",\n              \"hash\": \"dd75648b4bf8e9521b90d5e6ac6fac16f4843b58b0e2ff6e35e61f6f98b5ed2640ba8278f53a78ded1178e57931a8965cd279ea638b600c7032dd5e9c2c5d44a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-x64.zip\",\n              \"hash\": \"aab00a5a41c5b0b122c4520b80040c24e590225a401bc9158ad4db913e8f7f9c836091ba2e103290a2902e96a1b067dfcdccca687208ab4fe78feb75d801eb07\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-x86.exe\",\n              \"hash\": \"d97421c5727aa77ed0129ca250685c39b58ff975a1d7c471759b1932f28baf8de86b632f306765ddb2235234a6ee49466a5c664d8395b81bac1af285914d0d0d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.102/dotnet-sdk-3.0.102-win-x86.zip\",\n              \"hash\": \"0cbea5cca14aa086c2ed6165b81f89a6b3beaf9a75fd1f4c4c61dff432c28742afef3bf8dbe39c2a3a4de6e3b947b9cf96fae946a8020e6204e01fc7abf9d67c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.2\",\n        \"version-display\": \"3.0.2\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19350.2\"\n        ],\n        \"vs-version\": \"16.4.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-linux-arm.tar.gz\",\n            \"hash\": \"72f7d8b97ce779f688051847144d59696eaacff0a76243572671f36bcf1746bee7ce6067c1d23199310c3f32deff10a19cf48e9ede11c55f5aeb7d018656f0b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"916f94a6c73a78c8fe07802f0fce890e83710f6915ad3b17b5ed8df82d7441272a637510531758e410b7aa2928c3e4d0a967864e9fff1337df90de9954f5f3f7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"e20995330effefc569881d5b1585a58af9453b26d947080f96a29fca728f842e63bdc9817716c84cfa5884576684b9f36e38fdab2e98bee41d7b47f85d98aa0b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-linux-x64.tar.gz\",\n            \"hash\": \"84dcc2a2a9e43afbc166771153d85b19cb09f964c85c787d77b362fd1d9e076345ae153305fa9040999846a56b69041eb89282804587478b926179d2613d259d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-osx-x64.tar.gz\",\n            \"hash\": \"e5b7ed3be04bdcfad275967ce04e250db963c18b5b071a56f11eaa555d1911921706d9214da684616a5128416903dd2b6dd688c3937ca26e541da2b2ab613183\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-win-arm.zip\",\n            \"hash\": \"31f2af5ec18182016ba896ef86c130cc205de42df88968ec98f119ab9a075cf9c7671e7fe8318c17d7042314bdab6517bbe65e8bc1e1545c03b10b98dc2aa545\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-win-x64.exe\",\n            \"hash\": \"b2b8aa66b92ea1874ee36b9eeb192ed79d659ab5325478bf02d5e449cb62551baafcde384f3f4a42c4710d19845e0f3aa185a986e36a3a0b2d6ac1158884010d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-win-x64.zip\",\n            \"hash\": \"1f81f0769a845ddbb86684d8a8da0af7f1b432c9659e90d522415cbeacc84d2b7c583314f6d3fc11907202621c541fa5bca2a54e02ac9855fa7e42a42a76d7d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-win-x86.exe\",\n            \"hash\": \"c5bc42f81c7ef10a2676231ce5d4d9f182092f19f676b3f85ffcf0de9cc7dc91d6f090a8723dc1d4c8c50812271e31df5b3ca7d7365913fb257c5d35933d5f29\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/aspnetcore-runtime-3.0.2-win-x86.zip\",\n            \"hash\": \"5adfe39ac2fb197f4caf78ebf73cf6abe920bdd1fce198cbc014f60951b663ee44b38e2e1a053dcd748603f5374962b7370b9e3d2c7a744115cf4ccbb3628df6\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.2/dotnet-hosting-3.0.2-win.exe\",\n            \"hash\": \"a2f1a3a4b3cf540c51fbc5d2a7828f5baad7c437cb3afed4d7bbeb39f4cd769f268e8b34ec6e23a05d75f7abd57a5c017c75718433e456b4a6a883a466655c58\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.0.2\",\n        \"version-display\": \"3.0.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6de20972-a961-4ea9-add7-1ed70c889292/5fb88f842d9d0ef361f0982bd047c42b/windowsdesktop-runtime-3.0.2-win-x64.exe\",\n            \"hash\": \"9c10e22067831da0f90b0414f65cf77f513c9721b354f8eb10ae23f2af64492b3a73af9ad05edca837331b1aa3b9d879ef24d4a4bcd35755fc06fa0c34080a9c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a9175198-d86c-4aa2-9a69-007ed7f5895b/2c7fb7db8989f10eb4c48a1ac27e0a34/windowsdesktop-runtime-3.0.2-win-x86.exe\",\n            \"hash\": \"762b021eba520dd33a211d3d8c0a7eaa6ef0897399414dc7514db7c444419a34f43fddf42259f50a00fb37badf58c05016b3770a9c6ba50622fe3e972c6a3328\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.0.2\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-11-19\",\n      \"release-version\": \"3.0.1\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/3.0.1/3.0.1.md\",\n      \"runtime\": {\n        \"version\": \"3.0.1\",\n        \"version-display\": \"3.0.1\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-linux-arm.tar.gz\",\n            \"hash\": \"3aeec884b3ea48fbc2739f49a3400bc7d3e22c853c76fa7741f6730af3c8cdd006be888057e185da6571ca5d7bc79d83be776f5929f10b69e963f08d07cace84\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"1ee95a2f5c84da0773b7bbb788976bb8e5f395a3f4d7e7b9e58bd8d46f5c495ab1a3c880b4c20deb851b1d8e9cb9f5f8a18ad3e70525898f54aa8c8e4574a0a6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"90d2bdf1b774267a66daf18dfe0795348e8c2ef562d166d13f676eadcd130aa0f0bb96b4b2a39cb0486d8e483b6c4614b9f2e1c3a997ced293484f976f61bbe0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-linux-x64.tar.gz\",\n            \"hash\": \"d84192fd20ff09e6bc00eca37c6e5d2c5025c7a0fd93644a1dc4e4f0fc7322689dd8ee7b331352c568b999a7ebcd909c0893abf455da354b23119334378615ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-osx-x64.pkg\",\n            \"hash\": \"5de9cdda1dd82005686c4c0354ac70d3172481e72a5cf378b5c011618004d613e3f26b6b6db53d807018ce13b595db71139a49f07984b85701bbd45073b8d38d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-osx-x64.tar.gz\",\n            \"hash\": \"2707e9fc5339162ca4c545ac2996bedb61a2678057697227b010544cb936769423e97da627afe4c27a9c3d1a9abf3d3fc7efa88b46b93ac734ab9d7757ff5c1c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-rhel.6-x64.tar.gz\",\n            \"hash\": \"3e54c92c9dc8ffc7dcd7752c6631c70d9e0bc30f2f8882e6349932b40178e9faa7d7961623170f2f7c981b5d549c538697eddef707161e0d6b79c9eeca21a12f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-win-arm.zip\",\n            \"hash\": \"49c55c44abead170856840127863f30543a9ce4cfb79a502a76358e3e300f741f8ad992ce9147ce6928307e3d28b4040935ea10db86a3cb770fdcede5bb9ecd8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-win-x64.exe\",\n            \"hash\": \"757d3441a20ce96e33472966f94212862d9246688ac9d20d89519c173e0bada324dbc6845247c29977da77db5257782a0a082741f158d836cce443ec28900d4e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-win-x64.zip\",\n            \"hash\": \"1e8eb1037efef07b6995d8b46b9e6d9d638a25a59148d085259803830b5ffe90e5daf4e783e0fde0aa17524dc8c0e23841c39f659af664d64f210171d224a18c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-win-x86.exe\",\n            \"hash\": \"6d22f4619e812fbd5d7101cebd0a9ffdaee9986cd841fe67e1fb81126a7d59fda6e05a6cb750ff6b7ad668874e3a367c28e8f68f27650abd7dba5e5b169b10d6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/dotnet-runtime-3.0.1-win-x86.zip\",\n            \"hash\": \"19dc6fa2b263cf705bef61c64e74c5d85dba28434a6c6deec0fb89c3754289fcb08df4b1a07157a8712e8ef14bc556a542aa5c71c71a84d23b9a4450690cac28\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.1/netstandard-targeting-pack-2.1.0-osx-x64.pkg\",\n            \"hash\": \"cb83c6de72d35ea9227a14a3ce5a8169913259b762570b82f69deaf8e3c2e7c02e0e8af1f773e327c289c1521e1b5b59cdf4f7acb9d360b10ef4470de1d0bee6\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.101\",\n        \"version-display\": \"3.0.101\",\n        \"runtime-version\": \"3.0.1\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.3)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-linux-arm.tar.gz\",\n            \"hash\": \"79f1a40e30b1e3f1e743dc7e9d539ec296a65ba9a2ca5a11c7ba0d3811ddfda5a4897c263da754d6f5ee4d02531d5a42cc303f1106c57d84bbe8d7d713c510bc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-linux-arm64.tar.gz\",\n            \"hash\": \"e0c148a515d74325e110b4542c87c6397ec78efd362ef7ca49b31768476d7f174456895a5054159492bd949caf0cdfc466c703855d666bb337a89cae381188ac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-linux-musl-x64.tar.gz\",\n            \"hash\": \"98cc98f58187d208bd388f8c71862ea75e50ca25666e265f40a4e7c28082c2784738172e8ae4af7815057f7c57072cbe4fc03301d01738fc1ed5bb5e4d30a363\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-linux-x64.tar.gz\",\n            \"hash\": \"8cd6070c9df1272ac3f2a0e9bd8c1fc2cfef38907fa2e3c81384f005168f45036b5904b4f731cbe37d2b3fe558f560008c481939093b0d08ef0f1778ca97f186\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fb3f4f38-99cd-4d24-a707-b64f8fdd9aae/11900d0b5d14d62bfa4b058dfd505bdb/dotnet-sdk-3.0.101-osx-gs-x64.pkg\",\n            \"hash\": \"3df46745c1bc7efd9693942b9c5b7f9dfeb7acb6dc92cec9e46bded7b2ecbf1a176d1ca798ed3dc25fdf135513b35ff8a4578788551fed33350e08fc2a1639d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-osx-x64.pkg\",\n            \"hash\": \"3df46745c1bc7efd9693942b9c5b7f9dfeb7acb6dc92cec9e46bded7b2ecbf1a176d1ca798ed3dc25fdf135513b35ff8a4578788551fed33350e08fc2a1639d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-osx-x64.tar.gz\",\n            \"hash\": \"3d01a586ab92f9386b13796a2307d77e35ec6932c0f97e0c8bfd87f4198890a302722f1e49d68a39d8b51e626eb5c4b3cbffd9ac8fbaf330b40d043c0a4c9a3e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-arm.zip\",\n            \"hash\": \"7d2504655d07a8cb5635ffdad19a781f9577ebe32c1dabb9c602b451f7653bca604dcf439b3b78fa673474dbaeab3db3b7ead363ec69b24d4e50dd78e6b7184d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f79d11c2-f913-4581-b621-e2abc84652ea/07364d8688ddc28f7d4263b2d682ace2/dotnet-sdk-3.0.101-win-gs-x64.exe\",\n            \"hash\": \"cc0cac8e6850295f5a265d28bc21c5b22442823d996ad4742b3d93646b8846298bb393e1b9602c185c765ef4d29b9957eba5851cba4a5613c505c3980cf469ff\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a1b83309-05b9-4f98-8170-84871bd4cbdd/7c348d896b4f1d00c4967c57905d9b7a/dotnet-sdk-3.0.101-win-gs-x86.exe\",\n            \"hash\": \"ba25df49ce10fa7b75e2dcee600b489e52eb04668a3208682dfbc11bd26d9909a606641ddaa3470a431f9d31afdef17afdd3d2fc9b6119be9cc980c9e80ff374\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-x64.exe\",\n            \"hash\": \"cc0cac8e6850295f5a265d28bc21c5b22442823d996ad4742b3d93646b8846298bb393e1b9602c185c765ef4d29b9957eba5851cba4a5613c505c3980cf469ff\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-x64.zip\",\n            \"hash\": \"2ad96d001efb565ba24f218d3b3b1b9ff6e52a4f8f697cf72c8ee59bc7d3edf01d9587781c80fb44e31b52451b22d4e11090c9bd6931aa27f236fadcc2e8fe85\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-x86.exe\",\n            \"hash\": \"ba25df49ce10fa7b75e2dcee600b489e52eb04668a3208682dfbc11bd26d9909a606641ddaa3470a431f9d31afdef17afdd3d2fc9b6119be9cc980c9e80ff374\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-x86.zip\",\n            \"hash\": \"d1c040e747fc0596bab159f11a8f40132fe638fda72819e89bdaa80d336cdaf867d7f96f18618b09c070fef8a333f7e35ce7cb22a27156ca824e711c5146b7fc\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.0.101\",\n          \"version-display\": \"3.0.101\",\n          \"runtime-version\": \"3.0.1\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.3)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": null,\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-linux-arm.tar.gz\",\n              \"hash\": \"79f1a40e30b1e3f1e743dc7e9d539ec296a65ba9a2ca5a11c7ba0d3811ddfda5a4897c263da754d6f5ee4d02531d5a42cc303f1106c57d84bbe8d7d713c510bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-linux-arm64.tar.gz\",\n              \"hash\": \"e0c148a515d74325e110b4542c87c6397ec78efd362ef7ca49b31768476d7f174456895a5054159492bd949caf0cdfc466c703855d666bb337a89cae381188ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-linux-musl-x64.tar.gz\",\n              \"hash\": \"98cc98f58187d208bd388f8c71862ea75e50ca25666e265f40a4e7c28082c2784738172e8ae4af7815057f7c57072cbe4fc03301d01738fc1ed5bb5e4d30a363\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-linux-x64.tar.gz\",\n              \"hash\": \"8cd6070c9df1272ac3f2a0e9bd8c1fc2cfef38907fa2e3c81384f005168f45036b5904b4f731cbe37d2b3fe558f560008c481939093b0d08ef0f1778ca97f186\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/fb3f4f38-99cd-4d24-a707-b64f8fdd9aae/11900d0b5d14d62bfa4b058dfd505bdb/dotnet-sdk-3.0.101-osx-gs-x64.pkg\",\n              \"hash\": \"3df46745c1bc7efd9693942b9c5b7f9dfeb7acb6dc92cec9e46bded7b2ecbf1a176d1ca798ed3dc25fdf135513b35ff8a4578788551fed33350e08fc2a1639d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-osx-x64.pkg\",\n              \"hash\": \"3df46745c1bc7efd9693942b9c5b7f9dfeb7acb6dc92cec9e46bded7b2ecbf1a176d1ca798ed3dc25fdf135513b35ff8a4578788551fed33350e08fc2a1639d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-osx-x64.tar.gz\",\n              \"hash\": \"3d01a586ab92f9386b13796a2307d77e35ec6932c0f97e0c8bfd87f4198890a302722f1e49d68a39d8b51e626eb5c4b3cbffd9ac8fbaf330b40d043c0a4c9a3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-arm.zip\",\n              \"hash\": \"7d2504655d07a8cb5635ffdad19a781f9577ebe32c1dabb9c602b451f7653bca604dcf439b3b78fa673474dbaeab3db3b7ead363ec69b24d4e50dd78e6b7184d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f79d11c2-f913-4581-b621-e2abc84652ea/07364d8688ddc28f7d4263b2d682ace2/dotnet-sdk-3.0.101-win-gs-x64.exe\",\n              \"hash\": \"cc0cac8e6850295f5a265d28bc21c5b22442823d996ad4742b3d93646b8846298bb393e1b9602c185c765ef4d29b9957eba5851cba4a5613c505c3980cf469ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a1b83309-05b9-4f98-8170-84871bd4cbdd/7c348d896b4f1d00c4967c57905d9b7a/dotnet-sdk-3.0.101-win-gs-x86.exe\",\n              \"hash\": \"ba25df49ce10fa7b75e2dcee600b489e52eb04668a3208682dfbc11bd26d9909a606641ddaa3470a431f9d31afdef17afdd3d2fc9b6119be9cc980c9e80ff374\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-x64.exe\",\n              \"hash\": \"cc0cac8e6850295f5a265d28bc21c5b22442823d996ad4742b3d93646b8846298bb393e1b9602c185c765ef4d29b9957eba5851cba4a5613c505c3980cf469ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-x64.zip\",\n              \"hash\": \"2ad96d001efb565ba24f218d3b3b1b9ff6e52a4f8f697cf72c8ee59bc7d3edf01d9587781c80fb44e31b52451b22d4e11090c9bd6931aa27f236fadcc2e8fe85\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-x86.exe\",\n              \"hash\": \"ba25df49ce10fa7b75e2dcee600b489e52eb04668a3208682dfbc11bd26d9909a606641ddaa3470a431f9d31afdef17afdd3d2fc9b6119be9cc980c9e80ff374\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.101/dotnet-sdk-3.0.101-win-x86.zip\",\n              \"hash\": \"d1c040e747fc0596bab159f11a8f40132fe638fda72819e89bdaa80d336cdaf867d7f96f18618b09c070fef8a333f7e35ce7cb22a27156ca824e711c5146b7fc\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.1\",\n        \"version-display\": \"3.0.1\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19309.1\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-linux-arm.tar.gz\",\n            \"hash\": \"ac13b782840adaf053e23abee86af78bd727fcc693991dbfa5c8a42412bfe15adeaff8ef99acb440a68cd8117643d48c4c57e21a27c8167e3305d9b75647ba04\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"0378e449bad05553c2dadc1bf8aeafcd0774ba9bb7ce29cb9ceb8dd4afea581d714caf88749ed003f04633993d239c3ba249aba026b2bbe5e7a8743429473a3e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"3945c64b36fd5a8bf9cf4427d0ff17280d929fb6c8b05a37b6f340e025a3936aa9f9aa709b95daf08fa6d33b6def3f04822265c160e81dc6ae46173019232ad8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-linux-x64.tar.gz\",\n            \"hash\": \"f7f6c8e09a9faccb818c42312e77e2fd3d34a7186d611fbe9e77dfb8d02178f31a4f563a5ff8218678cd3c00e7e8e9aef10a69f32f44fdac9a616993c57d1253\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-osx-x64.tar.gz\",\n            \"hash\": \"b728bdc1a5ed1d9ebd3c4163dad8a0d8860b08eec319ecf081a15c2a274e267850982f457c6bba71e0593255f854c337786e8c98b3963912e56688a3ab446dcb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-win-arm.zip\",\n            \"hash\": \"2b1cdf5b3a52d23345fed691e512418f8df2fbf55078989e74645949939189e2bbb396cc0bad40e20282b70942e64c2f9cd97f2a7c5c36bff525c580b2ecbdd1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-win-x64.exe\",\n            \"hash\": \"791cf61e7a9998fdcb9d7ea452b0e42bdb4dd1bba3d694833329731e23d7efc328807e41ea3b8896b9b0595828ae6c5ec3b74d77ae4e471227c85eceb4dface6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-win-x64.zip\",\n            \"hash\": \"7a6e0ea35d3d26815876f2e3173768ad3b8f2c70235f5d7052546f3d1fbb2704bea4d363ce5eb2982fefc52ab8beb032da8f81031e75dda252510dbff4023bde\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-win-x86.exe\",\n            \"hash\": \"729c5766bf31d9e25900918559e37e8f68fbaf7b5b72a4089cce29624877eab01f7300d49827d0a24a94361b4d1769f9e4dd586a899a8c0b56c9f57b6cb48a3b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/aspnetcore-runtime-3.0.1-win-x86.zip\",\n            \"hash\": \"8f7764c361a36d516e9d52a68e11bca89fcbf87f727eb892ca895ea34d49a1594ee7a69c6fcb2ccd51c12e47388e202b040139cd72ed81150aee9c0582aa4d19\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.1/dotnet-hosting-3.0.1-win.exe\",\n            \"hash\": \"39609013901be227ef505cb817f4d1476bf9025fe41d7954db428d827d996b6bf0528a9247ab08aa450b7bb89ecc87478c97c50c562ccbbfb96402c093c1ae30\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.0.1\",\n        \"version-display\": \"3.0.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/856eeb1c-3b2a-4165-b248-b88082cffaf2/c6ad73da23e82a7db7177c5b39c3f825/windowsdesktop-runtime-3.0.1-win-x64.exe\",\n            \"hash\": \"6468a9392226d11913fd611815284dc1cca0a4a66fcbee3d4333688730ee8b3d9490869941c6eed450c105d0104f8bc9f039701bb75c1f9c8063414861f3e4bd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/69e24078-d75b-4f5a-b043-c0a5d518bccf/82596a43ad0f0eca21915cba4cea250d/windowsdesktop-runtime-3.0.1-win-x86.exe\",\n            \"hash\": \"f46a5cceac70d4555b9b9a3b2d1f16ac0d1942251d119f90d435494bb33e280c1e91e0278737c5fbfbc5088d4c531a48e7a1e621989fc36783147d6828a435ae\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.0.1\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-09-23\",\n      \"release-version\": \"3.0.0\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/3.0.0/3.0.0.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0\",\n        \"version-display\": \"3.0.0\",\n        \"vs-version\": \"16.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bf608208-38aa-4a40-9b71-ae3b251e110a/bc1cecb14f75cc83dcd4bbc3309f7086/dotnet-hosting-3.0.0-win.exe\",\n            \"hash\": \"37578fef13f245e62931f2cc6ec4deee02baca707522c12dedbf3f11fc6418163736ab384de3c917a6c9a885dfa8c0a51cd3bbfcf7f71f441de5b87006d195ee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-linux-arm.tar.gz\",\n            \"hash\": \"b48854509ade35c3b74e462e45ad08ca5d08e536eaf52ae948b28769b5c7c29b29e287ce746ab040b43195dfde59cd734aacc88871644faf6a40490818bf350c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"dc342ec40a39d0a179330d2bbffcedd3f2dc457c27b5b59065b7c0e5e18db3b7662599c2e0421a1457ff2a0824b17b6331885224fe62fdb1b59101655bc88968\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"a7382fbfabbfe859a66151760f199799d093a88c50a6f2fd97f31a7d6d688d9978526b9637c5e10b95a3155f76d5032cc7f054bb168915eeacf0dd759ada8b54\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-linux-x64.tar.gz\",\n            \"hash\": \"0cabf85877eb3ee0415e6f8de9390c95ec90fa8f5a0fdb104f1163924fd52d89932a51c2e07b5c13a6b9802d5b6962676042a586ec8aff4f2a641d33c6c84dec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-osx-x64.pkg\",\n            \"hash\": \"4f57fbb6b4a2632e0a335cf17d0b8b7337951580dc207488b8ed32c234c1a5ff64963190d45303bc98f4ef3bf19799cadeb35036225a98ecf12b0727edd10b22\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-osx-x64.tar.gz\",\n            \"hash\": \"e5fa486e51230164b11bd377fd115a181cd6ec1c1d9c25d8af7c930cff16607e59fc2551f2db1bd57861c7fa44127fee8006886ebcceca18da98d992fd4163a5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-rhel.6-x64.tar.gz\",\n            \"hash\": \"587a66e77bac6a0823e12fa8122443402483a49c2f4e7352299c9dd5a1a4be0dd406c43e712ef3f03fe787ac0640b6f2084e2e6c6f3709fffb0319b7721fdb02\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-win-arm.zip\",\n            \"hash\": \"317f61fb3367b59e1ebbfaa35b7eb5c63c8794ef81b455c9df4d151df499e47e7fc5d9d14ba36797b48cbdae749300573355855b2b67312f62ce97dc89089da5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-win-x64.exe\",\n            \"hash\": \"713b7480ccb761819085199d81c29830b15f753e6fde0ff618e8e401f7119c5213f3127db3bb09b1a063bb435e4ed9949f3461ccfd4408c241d206bff13e6ce6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-win-x64.zip\",\n            \"hash\": \"9cab40057badcad236cd4855fcccb2acab150fa85c26b9c794f1eeab28c6ed5f0e338da5dec0ab4a8ba3a1af5f0feada987bae0d456dacef6858736a6033f4c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-win-x86.exe\",\n            \"hash\": \"9354f1b8627c61b1dd5d0266e4c9110bce7acac8055912617de7e407b03b7901f3a748a311e86845deead870e3359293d7f0ec1ad9f75c120d3ada284c03ee27\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-runtime-3.0.0-win-x86.zip\",\n            \"hash\": \"b124794cd1a139084fa68d83ea7873780bf6bbde4ba1c0fa7ad22d783982d21907e7b370fa63083a8f2923d3811f19de41a5f6cd5795c1059e2b4b5991b6aca1\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/dotnet-targeting-pack-3.0.0-osx-x64.pkg\",\n            \"hash\": \"67ac77f1b299ce386f04d14c5dc63a30a28d58082080a5677031ac4eb7035de113b77666c493f54487d05217cf9ffc04c81614d30dd5dbcd96f0db7bdac4ad10\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/netstandard-targeting-pack-2.1.0-osx-x64.pkg\",\n            \"hash\": \"66463237d195e31ba520503ee2896836e32c0d64d66f8617ceb38185fb486cb1f80d1ec7278a6444ae5d35f1d1da5238c3cebbdd9244fa062547f770d7eb20c9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/windowsdesktop-runtime-3.0.0-win-x64.exe\",\n            \"hash\": \"381bd27252a89485fd6436bfd8be7abdb89a269220ea59b25d5a8b1899478c3aa7bd3ef7c2eb1347af7aa9ebaf76a7d13aeace6705c69dd3e0b2d6fd431909df\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0/windowsdesktop-runtime-3.0.0-win-x86.exe\",\n            \"hash\": \"736bb1c75085c3164b2aa3144eaf1747f461ab0436ede95b324717080d95268b97e3148ba303d64cb0278023b944b95c42c8b6f2e188631dc4c6425c9d364baf\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100\",\n        \"version-display\": \"3.0.100\",\n        \"runtime-version\": \"3.0.0\",\n        \"vs-version\": \"16.3\",\n        \"vs-support\": \"Visual Studio 2019 (v16.3)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.3)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-linux-arm.tar.gz\",\n            \"hash\": \"c81dddb0b2db8e29762f222f8dc15b8f3fdf939226c4015d2d919b8faaece503c7bbe0ceeec3e8dc27ad9ca29d027bb1164ac9901f7bbf9c5e4a793e4111d45d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-linux-arm64.tar.gz\",\n            \"hash\": \"18c3bc07c4486381f54d4b40eb8401bf56c14fef5febc4639e3134d74ce66172d1e66c2dea9684ad727f08e9dd7e89d74535a8642fb2a2203445483293f3b3c3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-linux-musl-x64.tar.gz\",\n            \"hash\": \"b2b42c7e33bdb492c7f25c615cfc57c9ca3222d4492d59829f2d683cb40a3d18d648195d21f4e519fd187f40d69e2977ccc3d993c5aefc5cb0a23cd496f344dc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-linux-x64.tar.gz\",\n            \"hash\": \"766da31f9a0bcfbf0f12c91ea68354eb509ac2111879d55b656f19299c6ea1c005d31460dac7c2a4ef82b3edfea30232c82ba301fb52c0ff268d3e3a1b73d8f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1d39b7b6-e01f-4299-9521-7ed37602dac0/ef3031ee9605d3e7f3aa74efd444887d/dotnet-sdk-3.0.100-osx-gs-x64.pkg\",\n            \"hash\": \"c44d0936766e0b04209a1cbe9ab93d7c12e8c57b9f52eaba251eb7df2d9f31a5efd97967215cb71fae08ab48ff9e6f0b51e8f2f0c57a7971fdb04cf5c63a77e5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-osx-x64.pkg\",\n            \"hash\": \"92654688a279c4659e87e35320187099ca67315e396003699caaf9caace932a5ffde0570c2c68b194ca80713cff28dc95f3aa8f3d3007e2d3125203a9e3faa1c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-osx-x64.tar.gz\",\n            \"hash\": \"a4cb957150aad313da813d6830c2471787e7422aca8b7d47be6c10c1c54124425833a407eef5cc2459df1d79c009a32c1f855967b8ab1764b267e16b7dd79a08\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-rhel.6-x64.tar.gz\",\n            \"hash\": \"cdc4ff53ed659f00e2888b93a8464967f0c9a4ae157234ced5e67ac23e36599528521ee3d187cde5be7f4aee932eed6ddffed92975b5b337ae82453862fd8635\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-arm.zip\",\n            \"hash\": \"e858f4db61937eb71eaa93b3382ea556ea8a22dee49767c642a38eb2ffca29c25f0676adf084fda233820e5bc5bb3f9f825e30afc41cc177ec50497a97077842\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8a382be6-d34e-4a15-92a1-e49fe2fa54d6/0038e8d5447470750098f8db5d836561/dotnet-sdk-3.0.100-win-gs-x64.exe\",\n            \"hash\": \"2b353ca10cd5865a996ac707a8d548dc300e3676383e35930dfab97a16863a8d8e2056d4ecc3b863d10ff22b9e7cd0a874e016f45d77f9c5a02e5e7e821e6a7d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8af457b6-8a58-4b61-a2b7-ee4fbeb0519b/190a2414988b3403cd66d4ef28dc9c55/dotnet-sdk-3.0.100-win-gs-x86.exe\",\n            \"hash\": \"d5223e9526eadff3d80047ccc8d32c569b0eeed8372460f93d489544696bd6b4f053e5ab93730da4b4031f3d4d4b1c19f1ce30da6e7c1305b4dfea0ff91312d4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-x64.exe\",\n            \"hash\": \"2b353ca10cd5865a996ac707a8d548dc300e3676383e35930dfab97a16863a8d8e2056d4ecc3b863d10ff22b9e7cd0a874e016f45d77f9c5a02e5e7e821e6a7d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-x64.zip\",\n            \"hash\": \"c5f9a483bece13e3edd6fb2414191cf8b782767b21623d08a1c27578fac3798bd145e8a2b3867e74667accebf4353aa00920ed39298d7bc9790c0c82bbc3aa87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-x86.exe\",\n            \"hash\": \"d5223e9526eadff3d80047ccc8d32c569b0eeed8372460f93d489544696bd6b4f053e5ab93730da4b4031f3d4d4b1c19f1ce30da6e7c1305b4dfea0ff91312d4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-x86.zip\",\n            \"hash\": \"dc2bee9336aed555f42ed08205fbafbb8b30f2401bac8d506aa0c2fe4adb0167de67fbb06c47c4ec1ab43e9eee5ee4574ff21b72c7efbdf58a9edc46cbb27249\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.0.100\",\n          \"version-display\": \"3.0.100\",\n          \"runtime-version\": \"3.0.0\",\n          \"vs-version\": \"16.3\",\n          \"vs-support\": \"Visual Studio 2019 (v16.3)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.3)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": null,\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-linux-arm.tar.gz\",\n              \"hash\": \"c81dddb0b2db8e29762f222f8dc15b8f3fdf939226c4015d2d919b8faaece503c7bbe0ceeec3e8dc27ad9ca29d027bb1164ac9901f7bbf9c5e4a793e4111d45d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-linux-arm64.tar.gz\",\n              \"hash\": \"18c3bc07c4486381f54d4b40eb8401bf56c14fef5febc4639e3134d74ce66172d1e66c2dea9684ad727f08e9dd7e89d74535a8642fb2a2203445483293f3b3c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-linux-musl-x64.tar.gz\",\n              \"hash\": \"b2b42c7e33bdb492c7f25c615cfc57c9ca3222d4492d59829f2d683cb40a3d18d648195d21f4e519fd187f40d69e2977ccc3d993c5aefc5cb0a23cd496f344dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-linux-x64.tar.gz\",\n              \"hash\": \"766da31f9a0bcfbf0f12c91ea68354eb509ac2111879d55b656f19299c6ea1c005d31460dac7c2a4ef82b3edfea30232c82ba301fb52c0ff268d3e3a1b73d8f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1d39b7b6-e01f-4299-9521-7ed37602dac0/ef3031ee9605d3e7f3aa74efd444887d/dotnet-sdk-3.0.100-osx-gs-x64.pkg\",\n              \"hash\": \"c44d0936766e0b04209a1cbe9ab93d7c12e8c57b9f52eaba251eb7df2d9f31a5efd97967215cb71fae08ab48ff9e6f0b51e8f2f0c57a7971fdb04cf5c63a77e5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-osx-x64.pkg\",\n              \"hash\": \"92654688a279c4659e87e35320187099ca67315e396003699caaf9caace932a5ffde0570c2c68b194ca80713cff28dc95f3aa8f3d3007e2d3125203a9e3faa1c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-osx-x64.tar.gz\",\n              \"hash\": \"a4cb957150aad313da813d6830c2471787e7422aca8b7d47be6c10c1c54124425833a407eef5cc2459df1d79c009a32c1f855967b8ab1764b267e16b7dd79a08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-rhel.6-x64.tar.gz\",\n              \"hash\": \"cdc4ff53ed659f00e2888b93a8464967f0c9a4ae157234ced5e67ac23e36599528521ee3d187cde5be7f4aee932eed6ddffed92975b5b337ae82453862fd8635\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-arm.zip\",\n              \"hash\": \"e858f4db61937eb71eaa93b3382ea556ea8a22dee49767c642a38eb2ffca29c25f0676adf084fda233820e5bc5bb3f9f825e30afc41cc177ec50497a97077842\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8a382be6-d34e-4a15-92a1-e49fe2fa54d6/0038e8d5447470750098f8db5d836561/dotnet-sdk-3.0.100-win-gs-x64.exe\",\n              \"hash\": \"2b353ca10cd5865a996ac707a8d548dc300e3676383e35930dfab97a16863a8d8e2056d4ecc3b863d10ff22b9e7cd0a874e016f45d77f9c5a02e5e7e821e6a7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8af457b6-8a58-4b61-a2b7-ee4fbeb0519b/190a2414988b3403cd66d4ef28dc9c55/dotnet-sdk-3.0.100-win-gs-x86.exe\",\n              \"hash\": \"d5223e9526eadff3d80047ccc8d32c569b0eeed8372460f93d489544696bd6b4f053e5ab93730da4b4031f3d4d4b1c19f1ce30da6e7c1305b4dfea0ff91312d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-x64.exe\",\n              \"hash\": \"2b353ca10cd5865a996ac707a8d548dc300e3676383e35930dfab97a16863a8d8e2056d4ecc3b863d10ff22b9e7cd0a874e016f45d77f9c5a02e5e7e821e6a7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-x64.zip\",\n              \"hash\": \"c5f9a483bece13e3edd6fb2414191cf8b782767b21623d08a1c27578fac3798bd145e8a2b3867e74667accebf4353aa00920ed39298d7bc9790c0c82bbc3aa87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-x86.exe\",\n              \"hash\": \"d5223e9526eadff3d80047ccc8d32c569b0eeed8372460f93d489544696bd6b4f053e5ab93730da4b4031f3d4d4b1c19f1ce30da6e7c1305b4dfea0ff91312d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100/dotnet-sdk-3.0.100-win-x86.zip\",\n              \"hash\": \"dc2bee9336aed555f42ed08205fbafbb8b30f2401bac8d506aa0c2fe4adb0167de67fbb06c47c4ec1ab43e9eee5ee4574ff21b72c7efbdf58a9edc46cbb27249\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0\",\n        \"version-display\": \"3.0.0\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19258.0\"\n        ],\n        \"vs-version\": \"16.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-linux-arm.tar.gz\",\n            \"hash\": \"79a67a6430c15e715a14653cd54d40f9661e2b243d46b3895b0bc7835b4b642c960b3398430c6e56d850df0d8a2741878704506f3136c7289ad0b1e3354dc8d6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"1c1f6c51adf27cf2e07c698294fe7d2ddc3ad46249c1cf0bd8d62f0bf78e1157bc26e51177a508c7dae902bba305eca40020d82d0ea609150c2bfd1b41e06363\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"aa00899762a1593a12df9ae810aee54318dca603ca0aead51dd60fb23c459fda6f1ff6a331cc31a0c5d824d2d16afff5d1e6d5eb09776c3e542c431d03f50dfd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-linux-x64.tar.gz\",\n            \"hash\": \"344a6cbfb2ae75e518dcc82a7aa4860da606673ec6be571552da79467ef0bc340aa49275c28290e6a47390bb330c196b7db88be1140c22da789cc6920d5a94a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-osx-x64.tar.gz\",\n            \"hash\": \"176e5578fc4a367889753b967d5abb3a1acfaa6c740261c011dc8deccd0094f0cfc9f19c3530f60f2179fa445748a92fc7d52b73c772ff2bc8d2be49eb4f0d1e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-win-arm.zip\",\n            \"hash\": \"c44cbc42edb672e26b1e3da7c7447c312e611863d365a66f61b58908a334a4ff01362f7570f53eb42280a9dc742c0376000ce36e9527a8ed032bdcf1c050404f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-win-x64.exe\",\n            \"hash\": \"0494b293cca049acd1618245f6cf79d9f74f1e2b1c99346990ffcfcae6db6e78acd96f705a644de5e71d818c16602366ed08098cf30f1b9279723f6d6d790f6b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-win-x64.zip\",\n            \"hash\": \"7f2a4ea55f204d8a7d940e5fe58fc31a3bc294269c534d0b6cd9a9db3081277c1a692c9eff47ace4294a0c58eb68675e29cac1d6b4eafb6b85738fc944032adf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-win-x86.exe\",\n            \"hash\": \"0d4c335b4015829a3c2278770b8022361bfa03c860ebbe876066d4551492ab51c8d0d865148c5b1a0eb7dc43fa4a5e41bac971bb6c129973522e0abb2831cc2f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-runtime-3.0.0-win-x86.zip\",\n            \"hash\": \"13a95a0382989dbb975a340d74b2ef0ec7070f5c2ea8df55efa2cfe5e5f1cb5336d923e62086c29d884c3810e1b514e1695ffd4df79057749529f13d1d2a3d6f\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-targeting-pack-3.0.0.tar.gz\",\n            \"hash\": \"805b2344f08396e39f06086a694e95f16dc46b02bd56b098511d9eb7dfdb5e067159be27df104aec98edaf6715ea1c52f4db61443c4a1fee6b67c23e56771122\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.zip\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/aspnetcore-targeting-pack-3.0.0.zip\",\n            \"hash\": \"963d1f44457eb0c71ee25f278158364e97440e9a295ff7b08c19b9885956c9314ed0e583f0b69ddba9aeda7a76b774bb35d437cf0c17e1b3e6e23d26ba7304bf\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0/dotnet-hosting-3.0.0-win.exe\",\n            \"hash\": \"37578fef13f245e62931f2cc6ec4deee02baca707522c12dedbf3f11fc6418163736ab384de3c917a6c9a885dfa8c0a51cd3bbfcf7f71f441de5b87006d195ee\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": {\n        \"version\": \"3.0.0\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-09-16\",\n      \"release-version\": \"3.0.0-rc1\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-rc1.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-rc1-19456-20\",\n        \"version-display\": \"3.0.0-rc1\",\n        \"vs-version\": \"16.3.0-preview4\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-apphost-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-apphost-pack-3.0.0-rc1-19456-20-x64.deb\",\n            \"hash\": \"7B7710AA03E144B426DA17E3B8A48EFD9AA62B35A336F5469F22F3F2B9285363D05C84FED14177F1D72869006EEB46512AC6DC829F3A1DC4E23386A681210893\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-apphost-pack-3.0.0-rc1-19456-20-x64.rpm\",\n            \"hash\": \"F80862A454AE118F28706E0AB946DBB4CD019648725C78A5DE6378E8DC6FC26E1A1BDFCB3F672461D4EE418D9749643BB67D370B0B271A73086AA79CF18FD355\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-host-3.0.0-rc1-19456-20-x64.deb\",\n            \"hash\": \"C4339180A4720D7080557C3461F29D5158947BAE3549E28F377C18DC1B666C849FDECCD18C4002F11B0D958CE66553F47734C4BC7584FF86CD73A4490BE0D9CD\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-host-3.0.0-rc1-19456-20-x64.rpm\",\n            \"hash\": \"211882D4130666DA745D4E6D3A1BFA87AA0FB5F1D8EFCF66FDA0F401923AB44BA7A842728ED1B1AFDBF2F62345CB762CAD8A7850357F96F93D24BC1EF450EEFE\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-hostfxr-3.0.0-rc1-19456-20-x64.deb\",\n            \"hash\": \"F955606C1CEE47A253F0DCA88C32D76FB2AB262EEC1148AEB36EF4B1B8589480FDB2209FA6D224E3B1C32F2316C9559FA2697862AF8CE91C02EEDFACC82B36C6\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-hostfxr-3.0.0-rc1-19456-20-x64.rpm\",\n            \"hash\": \"A88E54F98DDDC086515756DEC1F065CB3EE737E7F0859AF98837289A273B0EEA9951839C8D698338B069BB0AD3B79A9D54E3DA6F827ED179CD219D86B7B5347B\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/dd166010-f2af-4f48-9099-c2a8ef2aecd4/b12863ae56d58c2acb453225e06c69b3/dotnet-hosting-3.0.0-rc1.19457.4-win.exe\",\n            \"hash\": \"53088D104E0D24E6C8EA9D6F672C4DCD9A6438C93C786C90235857EC27F56FBB335DB6C337B617BAD4B77D61008A3F56847656B62CF1F1EAA99030AB3D987D37\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-linux-arm.tar.gz\",\n            \"hash\": \"5A4DCE98C4B074C7D5185DCE6744352D4200155D6BDD6F576F05AD5BC5A9E7B7DABD9DB66129A0965E88306C0182108EF71DA0E3C8AFC4BF7088DACDC9898B6C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-linux-arm64.tar.gz\",\n            \"hash\": \"DE20413A30347C33C45C5C82281BDFD57BBA440CA64B5B727A97242C8C1344CDDDB3934BD934771D79C660ABC092F1C2CC118E54905E627071B9C6E57C410D26\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-linux-musl-x64.tar.gz\",\n            \"hash\": \"C4D569B914ACB1DF2C1379C3F5B05395419DED943625D8C60EC61AF2E4209550E2926D2CCFC0D29E8556851C940032233700F1A42FE37ED55A48B1C39F1A245B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-linux-x64.tar.gz\",\n            \"hash\": \"FFA9DAC658D83D785B92AE29F6931D9069E96F255B6778E0ED58346005AB425C659605408C628C6CCAE683EBBE144D9C4BFABA83B20146966D04D4028C6FB4EB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-osx-x64.pkg\",\n            \"hash\": \"84EEE05A270D5E8E33E0542CC905857F8063A86BBB05A213D5E178F5B8EA9AF78C347C3D07071A71AF20B5677557509AF752531B05B42163BA100BC2D1F5C702\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-osx-x64.tar.gz\",\n            \"hash\": \"2B451159ADFE02D54DF491BDE5635CEA48AB3A043A7267FA9E1A9992C23871D4BB30EB8EB0B96DA8FCA98F764983B0820DC67F73BCA763DBF78CAA776F26F3E8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-rhel.6-x64.tar.gz\",\n            \"hash\": \"F18AB7F1D6DFE88C8770D0EE621FAFF428A902F008C1C91884159AB67EFED2DC03441788607CE6D7EEF6EE2259088754ADE871E003B713331D8DE979F99CC35D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-win-arm.zip\",\n            \"hash\": \"F827F0446D2793815C5D598AA8DD872517BA7C26C973ACDFCD101A128E6C60C89616F16EFC3F33D62AE59D1FA35D09A09F23D1F3ACE33562DD375574FFFF4C5C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-win-x64.exe\",\n            \"hash\": \"A905B112991CC8D416D1F156C2A06C98DAB44BA9224B5C1A5CD6BF9828B06EDB81EB90B951F23E77D3A28A3F5E32AA22D63D0368BD7F1B2AB8E9F156FB7BFF3E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-win-x64.zip\",\n            \"hash\": \"91CDC5A03930B5DD8A18C0B54B04DA0F2888032A6622FB9C0F5C8A4E2D2A335506D0DB69BFB78D094C2C76F05EA29D4DE4A1D4EB02EA2E30DE1E47D1A8D11E0C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-win-x86.exe\",\n            \"hash\": \"A62E2BEC5355F12FA56505E6DBF6B12D5BDC9DEA392087F8712D636FFC32F6756F3C4E1158C3E75A34E8AE206B7081DBE72E1427C722CE3E389BB2FFB038BEE9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-win-x86.zip\",\n            \"hash\": \"323E777A6E865F2B5243E91F9DFD4DB0545C87E6A52D487D39AE697D2CDBFA0AAA13097D6596C459ABE9C37E54382AC71EB4674CC4CF18384AB9FFAB72AECDD9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-x64.deb\",\n            \"hash\": \"2989A3E39BCEA169C16903947E1C6DD7BBF40933B4B776CABF237156B14BE2E418C4BA59B21EE44903ED283672A5936D4A702B12904FD8D2BF58194D6D43C751\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-3.0.0-rc1-19456-20-x64.rpm\",\n            \"hash\": \"178E4A157CBB9DEB40253BB525A216B42F98386A9E4CA5D1981CCF5BA504BB2141BB49755AB50DAFE4724DB56938F24EC12EBB256D47B16CF1661E1B631AECD8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-centos.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-deps-3.0.0-rc1-19456-20-centos.7-x64.rpm\",\n            \"hash\": \"806C378D79ECB16B40493CDD6B34BC56F4338F020AFDD0A294012DE273329D47A906CF82AD35FB7787FCE17CBA01D8184D104F8AAD64ED8508B35DE7B0C9BB29\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-fedora.27-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-deps-3.0.0-rc1-19456-20-fedora.27-x64.rpm\",\n            \"hash\": \"03FD5FBB322E8766848B03566999BD641C14604AEBD1E70F652537E5927DD5BEA1ECFF40907BB115D5605EDB0D56A1F53BF0E9516336646E930C30B382311A4E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-opensuse.42-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-deps-3.0.0-rc1-19456-20-opensuse.42-x64.rpm\",\n            \"hash\": \"BEEB0BA6FC4EAB331E095AC3F8C1E4E7D34F6EF9FC5EBEEB21277941F78BD85D5F1C30618FC4EBDF29D3296752972DC912219E904FC2BCE8E122B94C1768E8E7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-oraclelinux.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-deps-3.0.0-rc1-19456-20-oraclelinux.7-x64.rpm\",\n            \"hash\": \"A10742AAFC4966650302435D1F460543C24ADC1C08446440C7BDA57A3F3A0601A5A788DB6E3F226E3E25683F252D5C86CA165C5CB55A0ECDA7A3E03CDE5E6361\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-deps-3.0.0-rc1-19456-20-rhel.7-x64.rpm\",\n            \"hash\": \"89DC81D43447829A6142E5E9465D35BD3EBD9F78DBEA54C63C1C53AB908346CF2F9AB756F64AA7462647C31927C2542017B2B83855C58BB18462B5C63BDD3D0D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-sles.12-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-deps-3.0.0-rc1-19456-20-sles.12-x64.rpm\",\n            \"hash\": \"DA882268C7EC6A3E7C6F2AF49C88CDA8C2C0B994DF5FBEA1F03243FBAF6F4C867A55C45C8AD36CE28B845F1142D59C45D79304318F9F5DD9C161569011AAA657\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-runtime-deps-3.0.0-rc1-19456-20-x64.deb\",\n            \"hash\": \"3968D2BF3DB51326E7210E647BADC0953A0D339D3FFCFA02771E996D8615E7908D65970165261B9A22276E05CAF97B36D2BCB0CCB0DDF255BC087E3C5D8C7A83\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-targeting-pack-3.0.0-rc1-19456-20-x64.deb\",\n            \"hash\": \"05676BEE27B7BA05FD6F8EA266172771588980E577578FFB95FBCAC00B7A4A810AD18B6F0D7A288EF75F326F9D91250D358D074629FE4B4720B4A9F0AC6348E5\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/dotnet-targeting-pack-3.0.0-rc1-19456-20-x64.rpm\",\n            \"hash\": \"15334AAEF17FDC782E7B4BC7452CC686576110F90E247898ECE0142FFBCF7C78D6009FE9E7CC0753013312BB75CF8CDD2B9B6EB6D50E8C976066B9D1B9F596DB\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/netstandard-targeting-pack-2.1.0-rc1-19456-20-osx-x64.pkg\",\n            \"hash\": \"FF1E73BAE111C02BD58A3CF2E5ED88FA2653BD4F0DAB3540FD981331D6835F86520A3C1BD43C44C9DDDC8CF4770F684013B72E07E3D27BEE454EC897E8798498\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/netstandard-targeting-pack-2.1.0-rc1-19456-20-x64.deb\",\n            \"hash\": \"60A6DDBE382D44DB04A4F1F035E78673D325D4FE4CF1857BD914455EB65208C277CED08C42F5D9F1585012567A5A6288EA4D2662787E73A387056E112B48A6B9\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/netstandard-targeting-pack-2.1.0-rc1-19456-20-x64.rpm\",\n            \"hash\": \"B71E4645B32C10DBB838E46433B93153EA469544C2C2EC49F91D8D4CD598218EBC41524176139D3338FACB25B146FA10958AAF9866F8D9FA7338F5B35839C912\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/windowsdesktop-runtime-3.0.0-rc1-19456-20-win-x64.exe\",\n            \"hash\": \"A74E535719F7CF581424F0A28C049FE408C5D71B31616EBEE4CB745815E7E52593E7BEB0D186D8D299D11FF3C8C3075504575589AF2241D99EAE0055132EFE68\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-rc1-19456-20/windowsdesktop-runtime-3.0.0-rc1-19456-20-win-x86.exe\",\n            \"hash\": \"86A70F71DAEB24C96494A61A211D15C2F81B8102E05B3AA0A88A53531711149AE0FF1D0D0E98331D8656DC644E5D5FBB9A156492F6F62B0FBE5593BD271B4462\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-rc1-014190\",\n        \"version-display\": \"3.0.100-rc1\",\n        \"runtime-version\": \"3.0.0-rc1-19456-20\",\n        \"vs-version\": \"16.3.0-preview4\",\n        \"vs-support\": \"Visual Studio 2019 (v16.3 - latest preview)\",\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"4.7-preview\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-linux-arm.tar.gz\",\n            \"hash\": \"46D928D50AC12CA85C92FD7ABFBF40EB2D8073CEC9D99D641467A9036A9401F5A2E9FA44B36E4A7732D17B374BAEBCF51BE949F0948AF46640744089293A7800\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-linux-arm64.tar.gz\",\n            \"hash\": \"A1F4FBEA9D015494F4301184D6780C5FD0DDAE2BAA49E67C94C6F5F4281A2D3C73ABF2CEEEC57A37A257E389DF8F6FCE753E0292CF2C1C6B463A8E15287D7939\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-linux-musl-x64.tar.gz\",\n            \"hash\": \"F47CF58B8D3EA7B2A8C7A1DA7E1C206420B48300FE06846BEC40BAED837F022B8DD48E77E38C68B6351FFCB9B904A19641402444F9DE3CA3ED38DF9677985678\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-linux-x64.tar.gz\",\n            \"hash\": \"24CFE258849579399B93AC81813BDDDADD1D1C546E3EB5DAE7586263F157A4B3DE3223E6A54B5458ECD103E4C70499CAECC330B57570302E378A2203EADDE671\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0a4b1b26-a6c2-4c6f-b845-f449e5a93cce/e25e43969a5efbc7e7c21d55990c6588/dotnet-sdk-3.0.100-rc1-014190-osx-gs-x64.pkg\",\n            \"hash\": \"B35AA7EF5E18EC74ABB789E97080B046551DC71FBAB197F122D65695EB7D3438108B25111F6392042D03FA427ECC484ABBFDE37323F6E65FFBD986F9982031BD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-osx-x64.pkg\",\n            \"hash\": \"B35AA7EF5E18EC74ABB789E97080B046551DC71FBAB197F122D65695EB7D3438108B25111F6392042D03FA427ECC484ABBFDE37323F6E65FFBD986F9982031BD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-osx-x64.tar.gz\",\n            \"hash\": \"F0D896E4F3442F41E4B6AA2D0E4631883845682B8A1499757681E24DCA7752B36374CB8B79BD6B6A84BFD19F7E9E681E845E8890223DAB2D0DC49C91570585B9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-rhel.6-x64.tar.gz\",\n            \"hash\": \"48AF6E3D6F4286E9974E494C489FC3792D4CE5D4F6FC5BEC54FDE6D49C008FA1B21B78CE4CA875609A88412734F6239503C70167263D6B5A874B7658F2B4820C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-arm.zip\",\n            \"hash\": \"64689B3928709EA2E1EA62C578ABF456EED8C6C08ABA30E6B82AF1B3A6FFAF383E372940FD2E06BBD62D33D649C42B17406446B00A52A9C2208789B56C709A21\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3c85def7-c01e-4fb7-9084-8977f74c0863/aedb5e1c827051e5a836db4b324356cc/dotnet-sdk-3.0.100-rc1-014190-win-gs-x64.exe\",\n            \"hash\": \"746C63ACB432DD5BD80EDFDFF8FCA8C28303650B74A813EB1B46405C734E5E036ADA0E694D00D5BBCCC4A174D16508645BA3FF41C4A7F5AEA7EEB717267561E4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/aa945335-23e2-42bb-8f08-4e15dffd22b1/d6548c8ed3480e78d9ab003b8ea4e875/dotnet-sdk-3.0.100-rc1-014190-win-gs-x86.exe\",\n            \"hash\": \"0A3CDA31223133657C84E5BF31D71A51CE63832541F1BE3F4608644E1D31BB513B438A855F3EFE6DBF0012F83CAC9B7640EE502ED40752145A677054D69AD616\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-x64.exe\",\n            \"hash\": \"746C63ACB432DD5BD80EDFDFF8FCA8C28303650B74A813EB1B46405C734E5E036ADA0E694D00D5BBCCC4A174D16508645BA3FF41C4A7F5AEA7EEB717267561E4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-x64.zip\",\n            \"hash\": \"EBEA78935351142774F5A43F5B8604460C4A5ACA5AE2073D4392C909992AB3AE09239F2E08080503CB6979CFBD12C42429FECBFD1F7D7F00AAFC6E5849FBDD1A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-x86.exe\",\n            \"hash\": \"0A3CDA31223133657C84E5BF31D71A51CE63832541F1BE3F4608644E1D31BB513B438A855F3EFE6DBF0012F83CAC9B7640EE502ED40752145A677054D69AD616\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-x86.zip\",\n            \"hash\": \"9630299B9D6B5DB8AAD567726D3CFFBBDDD81202C79EDAE3001AE9F24D6BB1F1ED9CBB5EE54E6380B4ADBA0D20DE8AF8D4856A5C45C4B74CFB3A2DBEF431D698\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-x64.deb\",\n            \"hash\": \"D724F844FF387EEC45E5C082DD7E388D00A656943BA4A85A2BEEF96549AC1B44BFEB13141AF544A9EE76948FEBD853C3222F45F4EC28E9B52B32E80EABCEE2AE\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-x64.rpm\",\n            \"hash\": \"3E4EC8AB555D43BB51582384071CE706EFF535B80BA3C38806295DE9FD96F0BEA169D84B62119CD65E81CDD85C0DEABB18E8BA1074F9143DBCAE978321830323\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.0.100-rc1-014190\",\n          \"version-display\": \"3.0.100-rc1\",\n          \"runtime-version\": \"3.0.0-rc1-19456-20\",\n          \"vs-version\": \"16.3.0-preview4\",\n          \"vs-support\": \"Visual Studio 2019 (v16.3 - latest preview)\",\n          \"csharp-version\": \"8.0-preview\",\n          \"fsharp-version\": \"4.7-preview\",\n          \"vb-version\": null,\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-linux-arm.tar.gz\",\n              \"hash\": \"46D928D50AC12CA85C92FD7ABFBF40EB2D8073CEC9D99D641467A9036A9401F5A2E9FA44B36E4A7732D17B374BAEBCF51BE949F0948AF46640744089293A7800\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-linux-arm64.tar.gz\",\n              \"hash\": \"A1F4FBEA9D015494F4301184D6780C5FD0DDAE2BAA49E67C94C6F5F4281A2D3C73ABF2CEEEC57A37A257E389DF8F6FCE753E0292CF2C1C6B463A8E15287D7939\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-linux-musl-x64.tar.gz\",\n              \"hash\": \"F47CF58B8D3EA7B2A8C7A1DA7E1C206420B48300FE06846BEC40BAED837F022B8DD48E77E38C68B6351FFCB9B904A19641402444F9DE3CA3ED38DF9677985678\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-linux-x64.tar.gz\",\n              \"hash\": \"24CFE258849579399B93AC81813BDDDADD1D1C546E3EB5DAE7586263F157A4B3DE3223E6A54B5458ECD103E4C70499CAECC330B57570302E378A2203EADDE671\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0a4b1b26-a6c2-4c6f-b845-f449e5a93cce/e25e43969a5efbc7e7c21d55990c6588/dotnet-sdk-3.0.100-rc1-014190-osx-gs-x64.pkg\",\n              \"hash\": \"B35AA7EF5E18EC74ABB789E97080B046551DC71FBAB197F122D65695EB7D3438108B25111F6392042D03FA427ECC484ABBFDE37323F6E65FFBD986F9982031BD\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-osx-x64.pkg\",\n              \"hash\": \"B35AA7EF5E18EC74ABB789E97080B046551DC71FBAB197F122D65695EB7D3438108B25111F6392042D03FA427ECC484ABBFDE37323F6E65FFBD986F9982031BD\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-osx-x64.tar.gz\",\n              \"hash\": \"F0D896E4F3442F41E4B6AA2D0E4631883845682B8A1499757681E24DCA7752B36374CB8B79BD6B6A84BFD19F7E9E681E845E8890223DAB2D0DC49C91570585B9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-rhel.6-x64.tar.gz\",\n              \"hash\": \"48AF6E3D6F4286E9974E494C489FC3792D4CE5D4F6FC5BEC54FDE6D49C008FA1B21B78CE4CA875609A88412734F6239503C70167263D6B5A874B7658F2B4820C\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-arm.zip\",\n              \"hash\": \"64689B3928709EA2E1EA62C578ABF456EED8C6C08ABA30E6B82AF1B3A6FFAF383E372940FD2E06BBD62D33D649C42B17406446B00A52A9C2208789B56C709A21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3c85def7-c01e-4fb7-9084-8977f74c0863/aedb5e1c827051e5a836db4b324356cc/dotnet-sdk-3.0.100-rc1-014190-win-gs-x64.exe\",\n              \"hash\": \"746C63ACB432DD5BD80EDFDFF8FCA8C28303650B74A813EB1B46405C734E5E036ADA0E694D00D5BBCCC4A174D16508645BA3FF41C4A7F5AEA7EEB717267561E4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/aa945335-23e2-42bb-8f08-4e15dffd22b1/d6548c8ed3480e78d9ab003b8ea4e875/dotnet-sdk-3.0.100-rc1-014190-win-gs-x86.exe\",\n              \"hash\": \"0A3CDA31223133657C84E5BF31D71A51CE63832541F1BE3F4608644E1D31BB513B438A855F3EFE6DBF0012F83CAC9B7640EE502ED40752145A677054D69AD616\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-x64.exe\",\n              \"hash\": \"746C63ACB432DD5BD80EDFDFF8FCA8C28303650B74A813EB1B46405C734E5E036ADA0E694D00D5BBCCC4A174D16508645BA3FF41C4A7F5AEA7EEB717267561E4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-x64.zip\",\n              \"hash\": \"EBEA78935351142774F5A43F5B8604460C4A5ACA5AE2073D4392C909992AB3AE09239F2E08080503CB6979CFBD12C42429FECBFD1F7D7F00AAFC6E5849FBDD1A\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-x86.exe\",\n              \"hash\": \"0A3CDA31223133657C84E5BF31D71A51CE63832541F1BE3F4608644E1D31BB513B438A855F3EFE6DBF0012F83CAC9B7640EE502ED40752145A677054D69AD616\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-win-x86.zip\",\n              \"hash\": \"9630299B9D6B5DB8AAD567726D3CFFBBDDD81202C79EDAE3001AE9F24D6BB1F1ED9CBB5EE54E6380B4ADBA0D20DE8AF8D4856A5C45C4B74CFB3A2DBEF431D698\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.deb\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-x64.deb\",\n              \"hash\": \"D724F844FF387EEC45E5C082DD7E388D00A656943BA4A85A2BEEF96549AC1B44BFEB13141AF544A9EE76948FEBD853C3222F45F4EC28E9B52B32E80EABCEE2AE\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.rpm\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-rc1-014190/dotnet-sdk-3.0.100-rc1-014190-x64.rpm\",\n              \"hash\": \"3E4EC8AB555D43BB51582384071CE706EFF535B80BA3C38806295DE9FD96F0BEA169D84B62119CD65E81CDD85C0DEABB18E8BA1074F9143DBCAE978321830323\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-rc1.19457.4\",\n        \"version-display\": \"3.0.0-rc1\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19236\"\n        ],\n        \"vs-version\": \"16.3.0-preview4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-linux-arm.tar.gz\",\n            \"hash\": \"426B9A0496CF21D2B27D3AEE91A3F518F3A1080223C91AF11EB88BD59EF503257280B4942756A8F491DC64AC57CDDE72EE2961E542E2FAA09B06FEEBC9D7F080\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-linux-arm64.tar.gz\",\n            \"hash\": \"D1FAC590E01E9E91557FEEC781FE4EADD02781B110E9B532BF1996E5D8CC96032FEAEF07FFCE18981C7CE4639E079BAD4707AA7B1CABC42865FDABADE0A78799\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"0E4B9780A2A92614FEA4F0AE81609B0CD334E549020ADFB5A7F0D3CF6005CB584B3DD33F49F00B0B0B9529BA779BCF3225B8F44B875220BFF90524D23FA97E28\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-linux-x64.tar.gz\",\n            \"hash\": \"C4B82A94C47137668CC2899BE97D6FB382713E016D1831740DBEB735664772E0482DBF84BC7C3DCB3F0BC57FB36EEF5E2467C83D31F651D038D83C3CE58F5A35\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-osx-x64.tar.gz\",\n            \"hash\": \"E41A80D50FAE6CF61B72B67421CF5FBE307EAA91E20F95C836344E875C4A5CAF76AEBE46DC1712126A9EE0AA6E9ECDD357A797AC8C90240430DC486AFB2DC976\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-rh.rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-rh.rhel.7-x64.rpm\",\n            \"hash\": \"A35D3DEDC108F37E29210F51DCBB506A877011D449168A8D8B3DB1F87DD2431351A85D404FF7FEDFBF4BDECBD8D626EB26616060A2FE652D8DC43972AF7A242D\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-win-arm.zip\",\n            \"hash\": \"608699065ED6423DDCB130F2ACBDA11FDCD515D551A5169D966A8B3D62A55C6E22FBF46662B1E4DEC77E8570ADA7D25FEFA61E54066278B6B172F8889A9D0C7B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-win-x64.exe\",\n            \"hash\": \"5DBFC71AC858CFBD16F100D8B00BAB981FFD52D27163962A1ACC2D2FFD3F29850640A6C10DAC5A1B870A0B16D60A8187D90439CC8C7F3684394CC7713DEC7883\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-win-x64.zip\",\n            \"hash\": \"CD05B261A61FA20B1C7B26A311A7D9185CE9818233A0290098BF1B7CEAA6097174BA62B659E510228D8B49680083463E18C6BAF2F64A5279A6462542659A8C41\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-win-x86.exe\",\n            \"hash\": \"9270BFACAF9E640789BED0974A06447A8B482B9B66B2B9F23DDD6A1FE71D95E24FAA2DAEECB07D740D9267CB9291D8A77CDDBFE3A6A701F8F826057C5751C43A\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-win-x86.zip\",\n            \"hash\": \"4B6EF59F54A1BAF0539CE19527F534C68A05BFDEF2AB33516161696F752B01243CFCC62D63CA196BC1AD692924B0185B418DB59C7EC666B270E7D11381C6E54C\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-x64.deb\",\n            \"hash\": \"6291F145922E05519792B9466FCDAEBA849E598D950F4F6014A0CE6FDEE3582A5C81AE765FFFDD4F4C2B6A89BA1952650D3B5E8F5FA3568185F1C6362925FE09\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-runtime-3.0.0-rc1.19457.4-x64.rpm\",\n            \"hash\": \"79D393FC8670292EB990A227B4470B0CC4DF9BA6453D3A3351FA4307431802278D569F3D1B2ACE23DC363C0C085BB807646DCF4D5B2EF94CB95E7528613FFB7C\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.deb\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-targeting-pack-3.0.0-rc1.19457.4.deb\",\n            \"hash\": \"04DE1D9DC6A4FF42F10849002FACF89D377A61D56A911C73985899E6786A1FB6E46632863F6F800C0484E242FC4B5022D26928FF0A21BBEA607B4423BE35E4E4\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.rpm\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/aspnetcore-targeting-pack-3.0.0-rc1.19457.4.rpm\",\n            \"hash\": \"C910A88E8C76CD076B7F8815128822F0DD72630E8406AA64BFFCC083157DB205A19B929F871238C638428A82D022F40CCA7B692A7CB6C578087C9BD2F569B0E6\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-rc1.19457.4/dotnet-hosting-3.0.0-rc1.19457.4-win.exe\",\n            \"hash\": \"53088D104E0D24E6C8EA9D6F672C4DCD9A6438C93C786C90235857EC27F56FBB335DB6C337B617BAD4B77D61008A3F56847656B62CF1F1EAA99030AB3D987D37\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2019-09-04\",\n      \"release-version\": \"3.0.0-preview9\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-preview9.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-preview9-19423-09\",\n        \"version-display\": \"3.0.0-preview9\",\n        \"vs-version\": \"16.3.0-preview3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-apphost-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-apphost-pack-3.0.0-preview9-19423-09-x64.deb\",\n            \"hash\": \"EC05BCDEA0AF2630727877FF69D04ADE64FF9FD7B23CF510FAA0220582BBD8C4FC6AE0374BB389003AC8BC3DDD3F01E0FF979063DB1E9322ACCE6299A93A9368\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-apphost-pack-3.0.0-preview9-19423-09-x64.rpm\",\n            \"hash\": \"755358DDF6C79324B805EED51B4297B4046F85D01CB740A0F1792CA538C63F8384ABF2D1982A010BE03DB3CD30DAB186A4DAD928010CDFC7107B4203BBD8A136\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-host-3.0.0-preview9-19423-09-x64.deb\",\n            \"hash\": \"0CA7BBC1EC4DD69F021654AA235427A2CA08584123A94CB7CBBCCAEB2517F311B0B3824FDC8D4D89570A6495D9E83B134BB2054DA7DF4DD03EDD62EB6F518373\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-host-3.0.0-preview9-19423-09-x64.rpm\",\n            \"hash\": \"6C5C7C43B4FF480C69176FA74C5A36E304B8383973293963783A976DFEE7939DEC98C89F1C0E4327F4CA91177B75F86E45A388E383753C91FC6D713F5946F078\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-hostfxr-3.0.0-preview9-19423-09-x64.deb\",\n            \"hash\": \"FC5800276A95DB144B06AC1D0EA6B079E7BE66E2FD39EB4F8E5F20CD6D4D24D2C763D6E08A51FE4791841497437CD664C109C3EB41F4BEF510A3CC0A114D0F21\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-hostfxr-3.0.0-preview9-19423-09-x64.rpm\",\n            \"hash\": \"3CD69F5A612B69D4B131FF41272A8A24B94324ABB1A68D859C56A47DB7DA7A5D948FBA965BD23321A20512D8E17F4AFA32F16AA152AE98ABBFA9AC26622402FD\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/276b36f0-ecaa-4c09-91c3-f9dc409d03dd/eda0c93372662a7b5d502eb51789862c/dotnet-hosting-3.0.0-preview9.19424.4-win.exe\",\n            \"hash\": \"705AF21CA4F644E017810F5E78E292D5C71105048484405E871B312C3EA7D723347641311C8F178B5D476431419C11443F24F94B8EEA434A77849DA1E3B3104A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-linux-arm.tar.gz\",\n            \"hash\": \"C471622BC04E5B5B0A808DB6A55FA7CC830CFB2C684CA8686EFB96682F8BE1E77D083E151F686E1C2A39033E2F041F54B6C8FD6C08B0E4937E1725B442FE4E3E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-linux-arm64.tar.gz\",\n            \"hash\": \"311D4DEF5C5F247FF88C2172382C31D26F76E4125345073BFE40D3C1B453DF79E7338413F5581AFB2ECF3D30F9B8E6BC0A87B844BAF009C29A5F5F29CE245D56\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-linux-musl-x64.tar.gz\",\n            \"hash\": \"445A321EA5EA6544879C0826C752459E3C52D7A07D829FCA7F6B536A1D36D5FDB678F05CA6A905F2291A9BE45C781D7B938CFB0C37844B82EEE994F80AF98F6F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-linux-x64.tar.gz\",\n            \"hash\": \"6E0EF2A499C62EBAC44E37ED7CAA47F22E06A41C47E0320ACBB4D782D6EC5076C3A2CD74B0CBEF7AA9E577AFCEFC9158B50486FFD87060CC15C6E93CDCCFF225\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-osx-x64.pkg\",\n            \"hash\": \"F228E543A762CED4AA6B31546E708279FBD2EA68D429F12BB80BFBFA39FBA774668C8E01A2B318E4DDB52D85F93D2983818AA49A885A120B1744854A1D401888\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-osx-x64.tar.gz\",\n            \"hash\": \"9C603E0DC614ECB0238FDCE364BB0BB43D01A8874476711675B1DCE707201F77536D97EB0633C782FF8D73A673BAA54665528179C007324E8A71ED723A13B805\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-rhel.6-x64.tar.gz\",\n            \"hash\": \"80B53049FA91C4006C2240432A3734FEB2419674C2AAFB3B6DA5442395C5CC14F7FD006431EC5F3087A56E6A6DD0B472D0C627A1A915D9E41B174A03EDAE5731\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-win-arm.zip\",\n            \"hash\": \"F163D062FD8E467A2AD951A2B0A2716B89CB09023361DDB9AC79A8A39E68C55DC41D94B382C5E0F2105CF8F13BF692CFBA65A5FDFB9DC27D735A57729A7A4467\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-win-x64.exe\",\n            \"hash\": \"4DFF627A2D0369BCEF9380BD153C25474E7215BDD09A665C6289DE7B05A89E34327254B1B412B909656CCF6AB60E16CFC436C6BA939672DB02C50537C731E6E2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-win-x64.zip\",\n            \"hash\": \"B674A3ABA54360929C0E53C845FE447B84456D0395481E3F1C4D6881BFEAA06AFC56F19B05990857C60AA5736F3E2A471D61851CFC4DF231866D3C7F24750C53\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-win-x86.exe\",\n            \"hash\": \"40C7FDB50F685C5B0B4DF3F8C10BCF8113A230E8E9C8CE14C9966FB89713F7394198A65C77AD7575B4BACDB969BC09E70A47F4770A623FCC288F1C70151D5581\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-win-x86.zip\",\n            \"hash\": \"68169064D8B1F2524C91DCFE18B11B6DB0A5A63CD12EB8CBB1213A3B9B8022F6895182822DB3DEC014A517EFF2A9A354730B1C36E40CAD13D2D50668AB92E548\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-x64.deb\",\n            \"hash\": \"2BEA715B568ABB8D02D4B108CDCFDDF8166868250332B66B87E811297F96A41A01E810A384B7C3E42A87CFA7B8DA17A3BC71A6047CFB5168CE99C8FFA530DCA8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-3.0.0-preview9-19423-09-x64.rpm\",\n            \"hash\": \"0D91F3536DA0BB4285D76567E7705D1800293D3E5B1637D6B8875F182E69B16BCE7FFAF5888B09D072BA998CAE96BC2B15C5B3079A3F91F0ECD0B9AAC3ACB44B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-centos.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-deps-3.0.0-preview9-19423-09-centos.7-x64.rpm\",\n            \"hash\": \"731DD8E04B888A6B37DD569358BF329221675F99FDCBD20ECB04FF6817C2D341EABB3786F59D2640E84D652D9009AB73BB8A65F32EA9EEBB6DC0A17F68CA121F\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-fedora.27-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-deps-3.0.0-preview9-19423-09-fedora.27-x64.rpm\",\n            \"hash\": \"E5903EDCB29D96289DF7FCC1925CFEB6815C77BC9DC7517BD33832E65A89D2A7C0F27A34C2A20C37146F0B2AA11A30BACFCD837150CDDE0A00BF04A7A16F6831\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-opensuse.42-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-deps-3.0.0-preview9-19423-09-opensuse.42-x64.rpm\",\n            \"hash\": \"36B7654A29B8B8B3885B168E369831F3B0CDAFB4242E075FAA906421879AF462F2D57C42CE8BFEE8A15F81758B4EFBAF214139FBE45F0F50AB27E677A23CEB2B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-oraclelinux.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-deps-3.0.0-preview9-19423-09-oraclelinux.7-x64.rpm\",\n            \"hash\": \"ACF89DBBAEDC644AB76FBF5D8B01FB16BE646CBD169E533D61B90ADB4CC169C85357832DA7B240999C7049078B73DA74B2266AE8DCC0C6CC926EC09D40B7A2BC\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-deps-3.0.0-preview9-19423-09-rhel.7-x64.rpm\",\n            \"hash\": \"108BF20216502C6C0DCBABED6C16B6E0030F7EAFCDFAF33DD414CE21FE3D9756F1D3B626C31ACA8BA221593DF55CC424EA4A2338918A76B912B96830AAD6B8DB\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-sles.12-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-deps-3.0.0-preview9-19423-09-sles.12-x64.rpm\",\n            \"hash\": \"5EB17D015ACD6858D8DC6439606AA44A067923F7D7EC9E28D44EC0CE7E23D1E2E4E1953EC3FA3818A24988A1651A9A59D61F9AED1923F6A3D3FDF2359FE7AA92\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-runtime-deps-3.0.0-preview9-19423-09-x64.deb\",\n            \"hash\": \"24997A1A9E95093FDE21210BCD4BCE1A5AAAFECE81FBB4AB16B7465F83032ECBB3304C03960D80566D88AED09AC3A68EB89C4514E70D909C17CAC0AAAAC350E8\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-targeting-pack-3.0.0-preview9-19423-09-x64.deb\",\n            \"hash\": \"8720F4F242034DB50CC9E8BBA24E63A1016F6FCF3A214AEED5A9EE20D52A721E9CCBC973AE932DA9EC2E345183F23479E2D290D5B326564B5A860621AB407A74\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/dotnet-targeting-pack-3.0.0-preview9-19423-09-x64.rpm\",\n            \"hash\": \"82D2AC0CF92F63CBC8EEF980FC179F6F41529713AFF468A424EFBE56B674CC29B89BF5DDFD62E51F9E480DBDE7809FD6054FE01CED3FC03244B6D09F4C665B24\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/netstandard-targeting-pack-2.1.0-preview9-19423-09-osx-x64.pkg\",\n            \"hash\": \"BC547FE964535A19610323EF54EE1E1291AB77858E5B73A54572959D2E053FB25B72E40B608472260AC268E23C034DA20B66058C9F309ABD982A8A6045F66697\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/netstandard-targeting-pack-2.1.0-preview9-19423-09-x64.deb\",\n            \"hash\": \"9ABC47381FC530B8B1522E39CD8E16152644EE8A3752A1A29DC468EBEDC2EB4F0BB925D2A3C919824BF148A0A0143A7E8C8645AA1060C84D676FC18CC9C74897\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/netstandard-targeting-pack-2.1.0-preview9-19423-09-x64.rpm\",\n            \"hash\": \"9952DD77F1E76537E1B6349262780C1D8F1C57FE486E9D91F1DF69324185DFC482268BEBB77CCBC411CF33CD1178F41BE2EB39815C020F3B2F1697DBB77B7080\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/windowsdesktop-runtime-3.0.0-preview9-19423-09-win-x64.exe\",\n            \"hash\": \"F1513453EF4E876F4BDD6F06DA389DB59E5FC6DD46528556C52B53621C26C0D196BC02C4124CEBC760907345D9E16714B7ECDE483A8868BA1F0E65C3E359F077\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview9-19423-09/windowsdesktop-runtime-3.0.0-preview9-19423-09-win-x86.exe\",\n            \"hash\": \"2D5A33ACDA711338D090870D0DB3F8D26A4E5C7A852E5F75763698092C46438DA9A2CA5A08A7787A5A204A1A620E1028DABBFFEA53543388676B8BB7636B75C1\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-preview9-014004\",\n        \"version-display\": \"3.0.100-preview9\",\n        \"runtime-version\": \"3.0.0-preview9-19423-09\",\n        \"vs-version\": \"16.3.0-preview3\",\n        \"vs-support\": \"Visual Studio 2019 (v16.3 - latest preview)\",\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"4.7-preview\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-linux-arm.tar.gz\",\n            \"hash\": \"D90B3F84BD25F3200455335CD1F9865597F3DFD3D6DFB6A2B73F4D3E15C4BAB6EDCE1EA20D325AC83271A8E8F79257529C4972BBDC2E07CFC9E6A00EFF35E387\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-linux-arm64.tar.gz\",\n            \"hash\": \"EF5F90710C3976356590BEC17EE3175C114282DBD6CF73B846B96E41B3428EE1B979AFEDD65818B0AB253AEDABED1BD9EEB11829F430175621A40F1991108330\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-linux-musl-x64.tar.gz\",\n            \"hash\": \"14AB8879E98C16547355D5A7BC67093DDA3D8716EEDC687A64318FC014DD6AD7998257B68AFE2BFC7B2368CA106AB262CD9C001155A7F2E49159D5D3BFF76563\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-linux-x64.tar.gz\",\n            \"hash\": \"B4E4580250F172C7B14CBCE96D2DE54D13A0B312ED71F86986CC53A9392491347E83CDEFC2805A23BD652FC2CC0658C2E74FC8C05212C3983C19E2ADBC1FE9A3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7a4a68cb-95bc-4e53-8167-1132da004f09/3141f739beac7c1ebb3d4a81a138e93a/dotnet-sdk-3.0.100-preview9-014004-osx-gs-x64.pkg\",\n            \"hash\": \"A45BC9DBD3D3A819E7783373533B69B0FDF2E00D2457EC6CA4049452A0DF28BFE30504B16592CCF4FF591CA3061CA6FC7F8397386A723F34E62954E45B2DA71B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-osx-x64.pkg\",\n            \"hash\": \"A45BC9DBD3D3A819E7783373533B69B0FDF2E00D2457EC6CA4049452A0DF28BFE30504B16592CCF4FF591CA3061CA6FC7F8397386A723F34E62954E45B2DA71B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-osx-x64.tar.gz\",\n            \"hash\": \"BBA54A337011F556AC09D80D5E4E44C21882A34858175E5866F7563D535133853892E6F88CEF57CFC441D2CA3F4DA9CD69C99DF82EFAC21D01E29F503347B8C1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-rhel.6-x64.tar.gz\",\n            \"hash\": \"A7764A0439F3D1196B4948C68C907DAD1E88E06E9F59FD9B2FCC1868CD55E68E3C5B7215D15BF546D117D652314CF9CCAB7F54E4083EA28C959ACCCDF9F35140\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-arm.zip\",\n            \"hash\": \"4c505c17200b7073e6cf1e9dcb617205a77f5d5c9eb3ddb150fa185ae9c18a90ef884dfb6a93b9db68f7772a4a435487bdc0ac5c8b2cb3dd9935e4651a80d997\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d95c9d8b-2077-4cea-b939-302007e3d277/47a421f8e4e0781af750854209f9e76e/dotnet-sdk-3.0.100-preview9-014004-win-gs-x64.exe\",\n            \"hash\": \"DFE71B46B5163D0C71C3742C4A00BCF457FC43106C5001B974A6066A82EAE97C84E61AE58E4FEEA9D1B1760330EB4A0E5E18B3AF16BC0C862584D8A1B0C923AF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c0e87314-d12d-467e-bc97-d21224233fb5/56b033e63e60f5c80f6d9d99be1e99e3/dotnet-sdk-3.0.100-preview9-014004-win-gs-x86.exe\",\n            \"hash\": \"3E28E3B7D388B3CBCB122C2FF6690065A29C2A9DBE826AB9E51F87EEF6A7843BD31B61503B61C1F0BE2F3764D5921931202AFBF2ED16241A377DCFD3572EDD87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-x64.exe\",\n            \"hash\": \"DFE71B46B5163D0C71C3742C4A00BCF457FC43106C5001B974A6066A82EAE97C84E61AE58E4FEEA9D1B1760330EB4A0E5E18B3AF16BC0C862584D8A1B0C923AF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-x64.zip\",\n            \"hash\": \"E3FE0B390034640294418E46EABD27010607EE14EB00C33D5EAC111382F856646563DB162CB20005AA170F447566CBFE9948B5F04D74ED24C2115B8670E0A686\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-x86.exe\",\n            \"hash\": \"3E28E3B7D388B3CBCB122C2FF6690065A29C2A9DBE826AB9E51F87EEF6A7843BD31B61503B61C1F0BE2F3764D5921931202AFBF2ED16241A377DCFD3572EDD87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-x86.zip\",\n            \"hash\": \"39497EC67ED886738716F2513A0E26AA14E9B4FFF2D66112FB2E76BF980526A9C12BE417415DF1A231ECD29498DC8CB9B3D21A8AAE82E2E776445403CAC7AB5B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-x64.deb\",\n            \"hash\": \"689C98F25DD3F5FBF6690DD5A19DA9C44268504F71E2691977F7E4C72FDD7C5CA80CE3C1794250B8E928505F56DB3C6E638CC00C1C9FCF5F0619CD6932DF6E34\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-x64.rpm\",\n            \"hash\": \"967167CE5BDCC73DA83DADE1258B6156EDEC80E5CBA1AF5678F9ECDEFE3B8F14FF31FC5281F22301325E1D8A5AE387B5ACB6931FC45418310F7122201D387DE0\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.0.100-preview9-014004\",\n          \"version-display\": \"3.0.100-preview9\",\n          \"runtime-version\": \"3.0.0-preview9-19423-09\",\n          \"vs-version\": \"16.3.0-preview3\",\n          \"vs-support\": \"Visual Studio 2019 (v16.3 - latest preview)\",\n          \"csharp-version\": \"8.0-preview\",\n          \"fsharp-version\": \"4.7-preview\",\n          \"vb-version\": null,\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-linux-arm.tar.gz\",\n              \"hash\": \"D90B3F84BD25F3200455335CD1F9865597F3DFD3D6DFB6A2B73F4D3E15C4BAB6EDCE1EA20D325AC83271A8E8F79257529C4972BBDC2E07CFC9E6A00EFF35E387\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-linux-arm64.tar.gz\",\n              \"hash\": \"EF5F90710C3976356590BEC17EE3175C114282DBD6CF73B846B96E41B3428EE1B979AFEDD65818B0AB253AEDABED1BD9EEB11829F430175621A40F1991108330\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-linux-musl-x64.tar.gz\",\n              \"hash\": \"14AB8879E98C16547355D5A7BC67093DDA3D8716EEDC687A64318FC014DD6AD7998257B68AFE2BFC7B2368CA106AB262CD9C001155A7F2E49159D5D3BFF76563\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-linux-x64.tar.gz\",\n              \"hash\": \"B4E4580250F172C7B14CBCE96D2DE54D13A0B312ED71F86986CC53A9392491347E83CDEFC2805A23BD652FC2CC0658C2E74FC8C05212C3983C19E2ADBC1FE9A3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7a4a68cb-95bc-4e53-8167-1132da004f09/3141f739beac7c1ebb3d4a81a138e93a/dotnet-sdk-3.0.100-preview9-014004-osx-gs-x64.pkg\",\n              \"hash\": \"A45BC9DBD3D3A819E7783373533B69B0FDF2E00D2457EC6CA4049452A0DF28BFE30504B16592CCF4FF591CA3061CA6FC7F8397386A723F34E62954E45B2DA71B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-osx-x64.pkg\",\n              \"hash\": \"A45BC9DBD3D3A819E7783373533B69B0FDF2E00D2457EC6CA4049452A0DF28BFE30504B16592CCF4FF591CA3061CA6FC7F8397386A723F34E62954E45B2DA71B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-osx-x64.tar.gz\",\n              \"hash\": \"BBA54A337011F556AC09D80D5E4E44C21882A34858175E5866F7563D535133853892E6F88CEF57CFC441D2CA3F4DA9CD69C99DF82EFAC21D01E29F503347B8C1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-rhel.6-x64.tar.gz\",\n              \"hash\": \"A7764A0439F3D1196B4948C68C907DAD1E88E06E9F59FD9B2FCC1868CD55E68E3C5B7215D15BF546D117D652314CF9CCAB7F54E4083EA28C959ACCCDF9F35140\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-arm.zip\",\n              \"hash\": \"4c505c17200b7073e6cf1e9dcb617205a77f5d5c9eb3ddb150fa185ae9c18a90ef884dfb6a93b9db68f7772a4a435487bdc0ac5c8b2cb3dd9935e4651a80d997\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d95c9d8b-2077-4cea-b939-302007e3d277/47a421f8e4e0781af750854209f9e76e/dotnet-sdk-3.0.100-preview9-014004-win-gs-x64.exe\",\n              \"hash\": \"DFE71B46B5163D0C71C3742C4A00BCF457FC43106C5001B974A6066A82EAE97C84E61AE58E4FEEA9D1B1760330EB4A0E5E18B3AF16BC0C862584D8A1B0C923AF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c0e87314-d12d-467e-bc97-d21224233fb5/56b033e63e60f5c80f6d9d99be1e99e3/dotnet-sdk-3.0.100-preview9-014004-win-gs-x86.exe\",\n              \"hash\": \"3E28E3B7D388B3CBCB122C2FF6690065A29C2A9DBE826AB9E51F87EEF6A7843BD31B61503B61C1F0BE2F3764D5921931202AFBF2ED16241A377DCFD3572EDD87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-x64.exe\",\n              \"hash\": \"DFE71B46B5163D0C71C3742C4A00BCF457FC43106C5001B974A6066A82EAE97C84E61AE58E4FEEA9D1B1760330EB4A0E5E18B3AF16BC0C862584D8A1B0C923AF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-x64.zip\",\n              \"hash\": \"E3FE0B390034640294418E46EABD27010607EE14EB00C33D5EAC111382F856646563DB162CB20005AA170F447566CBFE9948B5F04D74ED24C2115B8670E0A686\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-x86.exe\",\n              \"hash\": \"3E28E3B7D388B3CBCB122C2FF6690065A29C2A9DBE826AB9E51F87EEF6A7843BD31B61503B61C1F0BE2F3764D5921931202AFBF2ED16241A377DCFD3572EDD87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-win-x86.zip\",\n              \"hash\": \"39497EC67ED886738716F2513A0E26AA14E9B4FFF2D66112FB2E76BF980526A9C12BE417415DF1A231ECD29498DC8CB9B3D21A8AAE82E2E776445403CAC7AB5B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.deb\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-x64.deb\",\n              \"hash\": \"689C98F25DD3F5FBF6690DD5A19DA9C44268504F71E2691977F7E4C72FDD7C5CA80CE3C1794250B8E928505F56DB3C6E638CC00C1C9FCF5F0619CD6932DF6E34\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.rpm\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview9-014004/dotnet-sdk-3.0.100-preview9-014004-x64.rpm\",\n              \"hash\": \"967167CE5BDCC73DA83DADE1258B6156EDEC80E5CBA1AF5678F9ECDEFE3B8F14FF31FC5281F22301325E1D8A5AE387B5ACB6931FC45418310F7122201D387DE0\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-preview9.19424.4\",\n        \"version-display\": \"3.0.0-preview9\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19236\"\n        ],\n        \"vs-version\": \"16.3.0-preview3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-linux-arm.tar.gz\",\n            \"hash\": \"015D4EC7EA238E83D6F3389A9D0EC328300C41CC44FDDE746A66AF72AB9F463ADF1989F3F157138DBFADA93ABB949CC0F2791AE4B5FE0242CCBF7FE2A2CFCFD2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-linux-arm64.tar.gz\",\n            \"hash\": \"0670030A2DDD598D8026398C9D4449DA6BA9164E7BE4395D9982C92D08517363933D9203F10CE0824C77DEB214FC96718818B354491ACDC1712F9C54CA2D11A3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"437645756ED9F8100DB36C6E276E8B6D597A44C137B6797C38B1CDFABA15C2A1F1424B42797BBB3580867E22C80A3613C3F23DE2CE151AD6C8727BC8B272EF21\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-linux-x64.tar.gz\",\n            \"hash\": \"373882F3BF180ED54898BCABB3E555657AE02FD418C04A58A672EAAEA822F95A3D59694C2A8AFB73B14365D5D2364BCE14A1F634083B42CA4B404AC9B6A2E197\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-osx-x64.tar.gz\",\n            \"hash\": \"2FB199ADB48C00EA7433878B42AE5F17292ACEFF6219EEA309220135F0382BF0FAA4D4AB12A5D0C0D5CF4D39603A8D344DEDAE22FCB2DDF6DB3A52635C06F898\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-rh.rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-rh.rhel.7-x64.rpm\",\n            \"hash\": \"FBBE7494A2D76F1934C9A723633DE49054D7E1C84126DBE43DE1AA0C0EA2D519E2371E5607A2201A0D6AAFA5BFB94F05FC4FCC0C55A210D6B378CF917E43F63B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-win-arm.zip\",\n            \"hash\": \"A735204C11663222B73B897808BC717CA4EE223313BD5394D16E9EB685D4FC1A2DAA261D88DA61265A827A0F52FBF049C51A657DD186B81739A5C1507C8CB45B\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-win-x64.exe\",\n            \"hash\": \"8D6B23F75F9130161B5DC44D50C4DC28D1201B4E46D98F9BA83B2FAD0147730B28FC45F5F2D3BDFC0DCF2CAF6200654783EF23D37F9D0BB56CE2CE16272EC9BF\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-win-x64.zip\",\n            \"hash\": \"79F0FAF6A48E16E286AFCED58481B8F41C9E9D43DCD05929B57AA881DD766F47B21E59DF4C55809B804A809415878A0A98F77C8A069A3E5D4D3330A3BA72C62D\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-win-x86.exe\",\n            \"hash\": \"4DFFE1E3B89BC0041374AC59019913A4939C880C4D34E2BE334B22DC4A7DCCC47484E9D569A532DE17470FE58C47ACDB4A51739342787E3C2D76544045B62237\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-win-x86.zip\",\n            \"hash\": \"B190597F4C1B66E917547CB9D19FFDA2B1B2DBA8E2C118D35635F4151ACF21C1B3CE74F9F37B0AFA7C4BD524BBA1097DCD75095802501ED57DFD6D1DCE9D3BA7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-x64.deb\",\n            \"hash\": \"F2736EAA03206457A1312B9AEBF9B23FF82DAEE16B76616CA5E8EF642A6DAC07D374B3379EC29D1FC6737CE7B129C164A4840D0EB00456ED63AA4F7A39C66F86\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-runtime-3.0.0-preview9.19424.4-x64.rpm\",\n            \"hash\": \"3EAF3EA24EF54AD704F2A37308B7AFA71ACD4F2E8F6829505CAB17449D0D54486E72C8394AB0EC90E9008961BA4F6FEF7BF48A736052BC8DF2E6A8314B3DE68F\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.deb\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-targeting-pack-3.0.0-preview9.19424.4.deb\",\n            \"hash\": \"8878639D0163A3ED2853D6E3507B981EF7B534DEA4D07421ED35695042E5DB1572953625727D54E2A2D62F12DA49F051047D530B27600944490D1900DFBC87EE\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.rpm\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/aspnetcore-targeting-pack-3.0.0-preview9.19424.4.rpm\",\n            \"hash\": \"5FFBB72DF0B805E4FE35108AA15151795422B060000B004588A5ECC56D0B8B53951DDFD88C20D6C0651F1D5E0D67A4674623FC1A93C11AEDF043A60943586A53\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview9.19424.4/dotnet-hosting-3.0.0-preview9.19424.4-win.exe\",\n            \"hash\": \"705AF21CA4F644E017810F5E78E292D5C71105048484405E871B312C3EA7D723347641311C8F178B5D476431419C11443F24F94B8EEA434A77849DA1E3B3104A\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2019-08-13\",\n      \"release-version\": \"3.0.0-preview8\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-preview8.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-preview8-28405-07\",\n        \"version-display\": \"3.0.0-preview8\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-host-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-host-3.0.0-preview8-28405-07-x64.deb\",\n            \"hash\": \"4D044E7A5BC87AC23D4A5B89E6564450FBCBE854E7756FB5F68E7E8F1D6272785EC018051F25BCB4CDFAA33E761151C9A4498F5B9734C8A24CF0632041B02AA1\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-host-3.0.0-preview8-28405-07-x64.rpm\",\n            \"hash\": \"4012BA4D749F21150D3D77066C664FD6103551B6AB7BF1188149ADF4D81EE19FC2C575B3EE85FB2B930F752DC4DF6962163C08B0BAAEE117561E5BD7B34B3892\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-hostfxr-3.0.0-preview8-28405-07-x64.deb\",\n            \"hash\": \"1A6902B15F29953CF99161A47B4F4A61804571CB05D6815BD62A9B139E9933D37BFD4863EDA1B6D7D59FF484B59205C5D506517B352182C5A635DE89FB19FA0D\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-hostfxr-3.0.0-preview8-28405-07-x64.rpm\",\n            \"hash\": \"840D8FFC8C7E866268403A505DE985F966D1D06FAB19967851B35D6A4BCEA0041AC1481BCA72D04AEEF4E17767F0D0E12F4982FDF63FB4B382D42D4774083502\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-apphost-pack-3.0.0-preview8-28405-07-x64.deb\",\n            \"hash\": \"E5AE873269CC7A1029ABA41C4135B1464B917E6B37D8BAF0819B002690C9033E0BC0B14E550EECC500E8FF875EC6CCF5883BF609676D6414F69737C6F1A51D58\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-apphost-pack-3.0.0-preview8-28405-07-x64.rpm\",\n            \"hash\": \"03E1DFAC544130A9710010F4C66DF8D39D89C7F8E0B17E8512D1B21D636E26B19F6F3FE82ECA6742F245119B1632AC5AEF89ED859562CA39E9403A92667D4FF3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-linux-arm.tar.gz\",\n            \"hash\": \"F570AC11C0097FF7A91DC4F29C8061F1E626A51ED0748BFCED9BC3CAE866FD51B663623188DCC4C71813337860A65B1AE2C223224713A0B43FD6B3E8F6822952\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-linux-arm64.tar.gz\",\n            \"hash\": \"69639D704EBE977865A9688080AF841D3BEAAB38708CF4CC37223B8F858968DE55AA4165F1F9EE3E31F415BA249CC4A829CD529B14A12CBFDE009975C7870F6C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-linux-musl-x64.tar.gz\",\n            \"hash\": \"F1DF2A90A16F66906D3FD28905C1021A7B957497019F995A3C48FB566569E56951603DF449B1F6104EA763986FFFF24AD456334E9F336A373F020F87382D303C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-linux-x64.tar.gz\",\n            \"hash\": \"C10DC7E71E7E6481F1D88B1539673764EC3BA2F5AB36E7B06990D4C813247BA5DEDC7ACDA08A73130F8CF778EF1EACF5BE8FB9B495483299BDF530393E3EF38C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-osx-x64.pkg\",\n            \"hash\": \"C1874B7D804EBDE6820EB7FE2498165EC6505BD9640AFA51240214757A73F705274A05E9FA3D07188CF8B7EC63B1435D98F193E70A075CA6B8838DE2526DBD29\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-osx-x64.tar.gz\",\n            \"hash\": \"549445A6231579A1470FCA2C1605ADFDC58B951E21ED7FA88C781953E4FA09C64559F0C21B19B9AFF7ADC4E8A2F57B0134BBF4F52B4D57754DF80EF62A6C5ABF\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-rhel.6-x64.tar.gz\",\n            \"hash\": \"D930F08EF00BBB451C272E3531E830D999876B5C7A982261E2E5236C4833CA5EC4F0388D48B526204B89F299A338C4D3D70B2E652069CC5E3F6E408FA423FB3C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-win-arm.zip\",\n            \"hash\": \"B9DDEB0B085A5DC4EB4350F0AFBD28E8146DD69D27AAF16932E29782CF3C3FFAA58B15AC8E2981EF939DE1E6592DD735B7EA9AA4259C6396F0A867CBBC186053\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-win-x64.exe\",\n            \"hash\": \"24C2C59228FA7C1BE41FE7B55685614FEF13FF17FEEA5504D0665D82B7D427A7A5FCB19B1F39357F7C5EDD0B4C53E8D3ACA8EFC0CB8120E4A5D15899060E95FD\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-win-x64.zip\",\n            \"hash\": \"D3239F98C34E95D9D0B267A9B25F3772F07A6E155EECA0D0101986C3624384C04648FBAF47FEFF974F92B739DA26D434CD76D4D0E140CADE70708C377509120A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-win-x86.exe\",\n            \"hash\": \"9222AD05CE8FA09EEA38F9A9B055FF68689B2E718A464B66B8F58280A1F9208FB3880F93064FDB586617B778D11AF096CFEB82F6733435B87EC37E9ED27DA195\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-win-x86.zip\",\n            \"hash\": \"552B24F34FD3E5B7A60B88199FC7E76241DC66679444893B8E68B04F3C545F6DA9A7CED3790F42113ADE108B3410F8AF634B18711068592563B216CA21AF4A0B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-x64.deb\",\n            \"hash\": \"FCB9AD55DF299FBB05D0CD1738EC0027D5EAE1FD62D5847E39099A0D05E6A4DDBB61E5E4E6FF7275413E64979AF5E54C6243C9DDB525710466AFE5F4323448C0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-3.0.0-preview8-28405-07-x64.rpm\",\n            \"hash\": \"05C17BB07A1F81344D637792D781017CCED9C14988C0ECECE445F793AAEDD976A468BC3BDC695105021577B01EFB5AB3AF12A14224E2DB23B306CAE63B77A60D\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-centos.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-deps-3.0.0-preview8-28405-07-centos.7-x64.rpm\",\n            \"hash\": \"69343F3A6AB363D76D990FA6D3CF2B03FA6E38DD07C6ADFB3BB46A3657D24957633177923DBBBA9AE494833AB391432CA3A9287C7D203028EF08D1E5527BB78A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-fedora.27-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-deps-3.0.0-preview8-28405-07-fedora.27-x64.rpm\",\n            \"hash\": \"D00EB193F4276F3776439A26F92A904124D38B19D37F56E09EC8CD776FDF45FEFAAE54EF17EB59BF9D9DDE4FA1C7D84443A586E2169EB23ED1E310534AA11319\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-opensuse.42-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-deps-3.0.0-preview8-28405-07-opensuse.42-x64.rpm\",\n            \"hash\": \"5C543D29A23ED2DADA525D724C42CB6695BF392052E0880CF6B11AC31E88F3D10E2B483CEEC6EB893BCD1AE5C7C78CCB72F7BABBB6967DEC06DF4CA25DE2CF37\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-oraclelinux.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-deps-3.0.0-preview8-28405-07-oraclelinux.7-x64.rpm\",\n            \"hash\": \"81EC326A9B29177379D26D3D85DF83BAF53ABB9B9FC0279FF258C981E45F2BC819715696A3A97ED462B45BEC6F482888B27425CA8CAFFE71A932B32CBE2D2B74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-deps-3.0.0-preview8-28405-07-rhel.7-x64.rpm\",\n            \"hash\": \"8E817993D883A65C70BD244EBAEDD86BA39DC9B364FD6D41859B70B204F4C71C269496987F8CD33F344EFEAB9973A69CC640AF2316F1AB19AA8E511F9B395FC4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-sles.12-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-deps-3.0.0-preview8-28405-07-sles.12-x64.rpm\",\n            \"hash\": \"5BBE7C8B601C8E90C623C4A7E54F1B3EB045AB6C643F978ECE6AE8068C46AD55929BC76FD2626E1C50F439C945B1DE1BC4D1A06F028581086131CF2693421AEF\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-runtime-deps-3.0.0-preview8-28405-07-x64.deb\",\n            \"hash\": \"9D72D83E7064774B7C001CAC84EB4E368CC9F6F3B698651C44A68B8640B0E463BBADA4C08241826ECE896D166772969BD5D53CA50A23C14B3D09423C0361E87C\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-targeting-pack-3.0.0-preview8-28405-07-x64.deb\",\n            \"hash\": \"803F81D172288A9EA89376F1C70D1432CCFC19EE8B1ECDB30AF22A2CD7CE6E2F56CD34321890323EAE0871E1A8160B5C5071A2A3C61EA04103623BBD917978DF\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/dotnet-targeting-pack-3.0.0-preview8-28405-07-x64.rpm\",\n            \"hash\": \"DBB5E3B3ABF020629B180440DDF5EC280C550E0109B262C436DBB663890C3C169A04CF1BDE628352886A81506AD5EED9976C2DBC3E5B3E844BC48C6AE5F6D65A\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/netstandard-targeting-pack-2.1.0-preview8-28405-07-osx-x64.pkg\",\n            \"hash\": \"FE493BFEDFFF31BB0D40C77976DDDABD95A6F148A6D7A124B247BA9FBA4A80B1FDA25CFEA60B840D59DDFA2B85BF97243935E088B78384591DF4B81FF26BC057\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/netstandard-targeting-pack-2.1.0-preview8-28405-07-x64.deb\",\n            \"hash\": \"FD2C19566884959F959CB308473CDFE9DADC3076154FA69475FDFE8DE7BBFA2D61A00876138D8612556CA56EA963C3D24B56745A051B5446F1F0DBD871140DBA\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview8-28405-07/netstandard-targeting-pack-2.1.0-preview8-28405-07-x64.rpm\",\n            \"hash\": \"BCCAF920D0120A7D99C9031C788E796295B582520F4E5ADF6430D5913F6DBA095DA0437E3AA0F016E396356A12477030FDDC42553D3E003EDBE7C4F9AB442C09\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-preview8-013656\",\n        \"version-display\": \"3.0.100-preview8\",\n        \"runtime-version\": \"3.0.0-preview8-28405-07\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.3, latest preview)\",\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"4.7-preview\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-linux-arm.tar.gz\",\n            \"hash\": \"9BB4A99CBBBC3C86EB4FE7C04DE8C3CA4BF5A720B9B5321F6A1218EB6A381C7A069F13C1C4CBF13F59D91B63867CBEF797CA194F3C90B45CB01894F11212A4ED\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-linux-arm64.tar.gz\",\n            \"hash\": \"C2AF69C01597138C73783E322B69F985D99D1396D12DD6624D95077CBC74FD39D2F7C844878E46DDA295AF8F199BF2DA9E306E3E1BA8F920DADEB6F65AA6B87E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-linux-musl-x64.tar.gz\",\n            \"hash\": \"EAEC220589C980D0D3E8915673DE967426B5202255489C00DC76ED03F7C4FAB57ABBCB9C5EADC50896127551F42743B0E2EB8B9CD90D9FF09AFDA12E94E1009E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-linux-x64.tar.gz\",\n            \"hash\": \"448C740418F0AB43B3A8D9F7CCB532E71E590692D3B64239C3F21D46DF3A46788B5B824E1A10236E5ABE51D4A5143C27B90D08B342A683C96BD9ABEBC2D33017\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/faf7de64-b807-4eb4-a3c0-dcdaceab5bea/f68c9a083b7bb4eadd38f813e4a2b89a/dotnet-sdk-3.0.100-preview8-013656-osx-gs-x64.pkg\",\n            \"hash\": \"03345ED6B045E76314ACE2C60C3FED05F0A33091042848DA1C84B6E51662676929886911CD678DAF1D4D65658DDED8AEDE8CAE37E38C5BA9C1E69AF951A8FC1E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-osx-x64.pkg\",\n            \"hash\": \"03345ED6B045E76314ACE2C60C3FED05F0A33091042848DA1C84B6E51662676929886911CD678DAF1D4D65658DDED8AEDE8CAE37E38C5BA9C1E69AF951A8FC1E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-osx-x64.tar.gz\",\n            \"hash\": \"CC80C152ADF583F3D9688C8026C822731BADB90B50027B68B4D4E9237EEFE8A7EDBB09D7A10057594B3692E37ECDE9973604D3949252B3C60A9407D21B4BC9BF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-rhel.6-x64.tar.gz\",\n            \"hash\": \"0C487EEFDEEB96263DB2F2CC84F048C5A5362297D0AB5AC093F5126BA94CBA7E566D575CF775CB56A993D43B96D3511FD1DD5B822C28B86068ECEE6B594C4E3B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-arm.zip\",\n            \"hash\": \"88DE48E61DD5D57CA1BE1CFFACAC72DC5FEE46000F2CEE77EC27D6AA7AE38BB67474B9CF31B648CF09403B7D14EB99F65CA5999513D5B18F06B99D7B4B034960\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e83d64d7-c4cb-41ec-bb42-dbd40d2692b3/e882a6a211275af0aa97349344714384/dotnet-sdk-3.0.100-preview8-013656-win-gs-x64.exe\",\n            \"hash\": \"02A59F2A07274B3331B804ACDC37E12047182B63BF2F82D96E1ABCB022B8596F9B441CAC025AD04123741AD00DAABEA7F6E12080A4FFD7E938B1752F9276FD6B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ca1c10e8-384e-4488-8be6-d0ff46ae862d/e97b25d06705b45fdeb44578d2f950e2/dotnet-sdk-3.0.100-preview8-013656-win-gs-x86.exe\",\n            \"hash\": \"2D5A335F5C8775263A259B9F41D17905CD3FCA38558336CD294BBD30361157CFE7C252F4DC89215BDC92E602845FF253C1A9301AE0BF36C3196EBFD7DF3BF124\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-x64.exe\",\n            \"hash\": \"02A59F2A07274B3331B804ACDC37E12047182B63BF2F82D96E1ABCB022B8596F9B441CAC025AD04123741AD00DAABEA7F6E12080A4FFD7E938B1752F9276FD6B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-x64.zip\",\n            \"hash\": \"A957BDDD6533233B8E6FDD5CD6D4AFAEB4BE79C3E3C57587CD842E5E61425038C79A4949A9702A388AF7EC87EC4D01BDBA28C7171063033F4FBBB2841BDE7662\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-x86.exe\",\n            \"hash\": \"2D5A335F5C8775263A259B9F41D17905CD3FCA38558336CD294BBD30361157CFE7C252F4DC89215BDC92E602845FF253C1A9301AE0BF36C3196EBFD7DF3BF124\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-x86.zip\",\n            \"hash\": \"F54F565875F94A9DE0DC053D3BD6906ED074CC32AAB74A0A61F4D9B80BFBCBB846745F7020DD8484CE058A4FA50DA022C97779B01085D2B51F66407745C25959\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-x64.deb\",\n            \"hash\": \"FBECF7CF48CDB7B08E75EBBBCD90B81B9E49003D835F0C6894CFAF5BE3D69F35EF15B6A42DDF46FD9520258B4282BE06DEA5103D74768FF576141D05F37E0298\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-x64.rpm\",\n            \"hash\": \"DA98580AE676940745D2A460FC417A55C9FDDCEE67D12EEE81A339125EEA55154236D6138312915712FDF5BADAE07920BD2AE3DB620DF50487C31BEF5B99EA29\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.0.100-preview8-013656\",\n          \"version-display\": \"3.0.100-preview8\",\n          \"runtime-version\": \"3.0.0-preview8-28405-07\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.3, latest preview)\",\n          \"csharp-version\": \"8.0-preview\",\n          \"fsharp-version\": \"4.7-preview\",\n          \"vb-version\": null,\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-linux-arm.tar.gz\",\n              \"hash\": \"9BB4A99CBBBC3C86EB4FE7C04DE8C3CA4BF5A720B9B5321F6A1218EB6A381C7A069F13C1C4CBF13F59D91B63867CBEF797CA194F3C90B45CB01894F11212A4ED\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-linux-arm64.tar.gz\",\n              \"hash\": \"C2AF69C01597138C73783E322B69F985D99D1396D12DD6624D95077CBC74FD39D2F7C844878E46DDA295AF8F199BF2DA9E306E3E1BA8F920DADEB6F65AA6B87E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-linux-musl-x64.tar.gz\",\n              \"hash\": \"EAEC220589C980D0D3E8915673DE967426B5202255489C00DC76ED03F7C4FAB57ABBCB9C5EADC50896127551F42743B0E2EB8B9CD90D9FF09AFDA12E94E1009E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-linux-x64.tar.gz\",\n              \"hash\": \"448C740418F0AB43B3A8D9F7CCB532E71E590692D3B64239C3F21D46DF3A46788B5B824E1A10236E5ABE51D4A5143C27B90D08B342A683C96BD9ABEBC2D33017\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/faf7de64-b807-4eb4-a3c0-dcdaceab5bea/f68c9a083b7bb4eadd38f813e4a2b89a/dotnet-sdk-3.0.100-preview8-013656-osx-gs-x64.pkg\",\n              \"hash\": \"03345ED6B045E76314ACE2C60C3FED05F0A33091042848DA1C84B6E51662676929886911CD678DAF1D4D65658DDED8AEDE8CAE37E38C5BA9C1E69AF951A8FC1E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-osx-x64.pkg\",\n              \"hash\": \"03345ED6B045E76314ACE2C60C3FED05F0A33091042848DA1C84B6E51662676929886911CD678DAF1D4D65658DDED8AEDE8CAE37E38C5BA9C1E69AF951A8FC1E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-osx-x64.tar.gz\",\n              \"hash\": \"CC80C152ADF583F3D9688C8026C822731BADB90B50027B68B4D4E9237EEFE8A7EDBB09D7A10057594B3692E37ECDE9973604D3949252B3C60A9407D21B4BC9BF\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-rhel.6-x64.tar.gz\",\n              \"hash\": \"0C487EEFDEEB96263DB2F2CC84F048C5A5362297D0AB5AC093F5126BA94CBA7E566D575CF775CB56A993D43B96D3511FD1DD5B822C28B86068ECEE6B594C4E3B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-arm.zip\",\n              \"hash\": \"88DE48E61DD5D57CA1BE1CFFACAC72DC5FEE46000F2CEE77EC27D6AA7AE38BB67474B9CF31B648CF09403B7D14EB99F65CA5999513D5B18F06B99D7B4B034960\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e83d64d7-c4cb-41ec-bb42-dbd40d2692b3/e882a6a211275af0aa97349344714384/dotnet-sdk-3.0.100-preview8-013656-win-gs-x64.exe\",\n              \"hash\": \"02A59F2A07274B3331B804ACDC37E12047182B63BF2F82D96E1ABCB022B8596F9B441CAC025AD04123741AD00DAABEA7F6E12080A4FFD7E938B1752F9276FD6B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ca1c10e8-384e-4488-8be6-d0ff46ae862d/e97b25d06705b45fdeb44578d2f950e2/dotnet-sdk-3.0.100-preview8-013656-win-gs-x86.exe\",\n              \"hash\": \"2D5A335F5C8775263A259B9F41D17905CD3FCA38558336CD294BBD30361157CFE7C252F4DC89215BDC92E602845FF253C1A9301AE0BF36C3196EBFD7DF3BF124\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-x64.exe\",\n              \"hash\": \"02A59F2A07274B3331B804ACDC37E12047182B63BF2F82D96E1ABCB022B8596F9B441CAC025AD04123741AD00DAABEA7F6E12080A4FFD7E938B1752F9276FD6B\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-x64.zip\",\n              \"hash\": \"A957BDDD6533233B8E6FDD5CD6D4AFAEB4BE79C3E3C57587CD842E5E61425038C79A4949A9702A388AF7EC87EC4D01BDBA28C7171063033F4FBBB2841BDE7662\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-x86.exe\",\n              \"hash\": \"2D5A335F5C8775263A259B9F41D17905CD3FCA38558336CD294BBD30361157CFE7C252F4DC89215BDC92E602845FF253C1A9301AE0BF36C3196EBFD7DF3BF124\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-win-x86.zip\",\n              \"hash\": \"F54F565875F94A9DE0DC053D3BD6906ED074CC32AAB74A0A61F4D9B80BFBCBB846745F7020DD8484CE058A4FA50DA022C97779B01085D2B51F66407745C25959\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.deb\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-x64.deb\",\n              \"hash\": \"FBECF7CF48CDB7B08E75EBBBCD90B81B9E49003D835F0C6894CFAF5BE3D69F35EF15B6A42DDF46FD9520258B4282BE06DEA5103D74768FF576141D05F37E0298\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.rpm\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview8-013656/dotnet-sdk-3.0.100-preview8-013656-x64.rpm\",\n              \"hash\": \"DA98580AE676940745D2A460FC417A55C9FDDCEE67D12EEE81A339125EEA55154236D6138312915712FDF5BADAE07920BD2AE3DB620DF50487C31BEF5B99EA29\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-preview8.19405.7\",\n        \"version-display\": \"3.0.0-preview8\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19218.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-linux-arm.tar.gz\",\n            \"hash\": \"3A1E657BDC83BB42AEFFF5F2386D6A34877CBA40201D0F53217129EC90EFF6A27BD683283C47F087DD2676E1E6E1D4A5FE573CCFF93B8541ADFDD81F55CA6ACA\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-linux-arm64.tar.gz\",\n            \"hash\": \"8F38B19D2B4EF1F8BFEC20703FF7BE84005A34A4CEA9F6C065C0F857E397C03DCD90209384C81F72D2A2CE2461F44006D4CAA3D66DF2F5F58B654F402E9910EA\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"B8C774ABCAD0F789198FE77D770FA5BDD9BE87434F6755CB76E45213450792A27A971AD5DD11CE4D76F62DA6E642B07D7891ECA521323AD4DB25A0645E3F1B8E\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-linux-x64.tar.gz\",\n            \"hash\": \"4F0D7330CDD2FED3D01E9F871815547BB0587A4A57933CA0908C54075714C5C34EE2976A8F8FC4E02110D891F190566F4055061FC22A21C43897FEAC8A76C267\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-osx-x64.tar.gz\",\n            \"hash\": \"8E685144B0955ED03E7175E3A7ED3C6424FB0C1ED03DF0820712D784D1F219D8BAAC229618F4089CD3DA960A2C5D74601D4EEB7E9DA2BC6F8DC1CE740A5E9FA4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-rh.rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-rh.rhel.7-x64.rpm\",\n            \"hash\": \"5AA32A0F7AE4E4B8D29ED8F62925131B0982BF751EFF330B017CD69FB2F22ADCB724E2801B9B4AC08EE52E16FBD41E3BB40F859A8EAEB26B37197AE76CC23316\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-win-arm.zip\",\n            \"hash\": \"FD8CB269A49D667221B6D235C2FEC9B7A26D453135B8E66E544B61DE1AD7E46D597FE8A4C39ADDD10ABE8F8A237A760D19C9A789455DD358E2CC8DB3E6C03316\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-win-x64.exe\",\n            \"hash\": \"5F6C2E622E0E558B1B04512171171C18B6E1EC9EEEA0C8C1BF0C83995B39585A7571F38C5AC40C82A0D1E5D13B50991B1E03A2E71AAA5AE1BB4787B2015E108C\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-win-x64.zip\",\n            \"hash\": \"D2A4D80EBF30A17EF7261003640AA8C1F844D45C49C49113333E8D7F8A4C74C780B8D7227D7407CC70C3B9F532611FA39C29CA4648AABB075E30EBB09AC0A517\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-win-x86.exe\",\n            \"hash\": \"DB7DE9E7291F78EB4BD54C9E368A3D9407364471659F26B460BC1384EF47C5283DADE1BB70F388D9CD420FFA1CED9B98F90F435A21886244CA83323F02264045\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-win-x86.zip\",\n            \"hash\": \"F2ADAD636932CC84D50F52E5FB6F80CBA27345F426FF7B719A76AAED06D28785DF7144826FCBCF3240F71571D277803932E24BCA21D4A56EEDAFCE546B1F5706\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-x64.deb\",\n            \"hash\": \"4ED5A1266AB99788CFC8D8342536CAFBC6CFFE3B64ABC5B44250F84EC2431F2F07F3FDE7EEAF868F49E7B6CBFD48D737FEBA08CDA8D9891238151C072DD403C1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-runtime-3.0.0-preview8.19405.7-x64.rpm\",\n            \"hash\": \"0EA74F0704882A89C2DCA9E0EFC488B0D857540252143017B79A17585886EC3423AAFEC0DC617DE33BDC7A6BA92B1F1E83B8D73AA246B22A7D20CB2C006C7669\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.deb\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-targeting-pack-3.0.0-preview8.19405.7.deb\",\n            \"hash\": \"9EAD5D9722089E065C60B7ED557694E3E333634AD91917D1910A602DFC6D0445FF91AF37266045B0F5E450B87BC9A21EE1AFA6B24D223900B81FE29DCFB85F26\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.rpm\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/aspnetcore-targeting-pack-3.0.0-preview8.19405.7.rpm\",\n            \"hash\": \"168CD7065A395158593D495E3BF90FEBD27C7B6E45EFE6AD2EC6140ECCC841B51745E9D746F682F819252BAFD02C0A863A234B4079EEAFA5FA3C8A63CA402E1A\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview8.19405.7/dotnet-hosting-3.0.0-preview8.19405.7-win.exe\",\n            \"hash\": \"CFCA6D21DC5CE9D471E22D1942507224980C0521B3D74FA3C2E479290B5DF50BF4BFE00E1D043E29F1EFC136A62B25546C2C4D1508D95AE112888479EA2956C2\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2019-07-23\",\n      \"release-version\": \"3.0.0-preview7\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-preview7.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-preview7-27912-14\",\n        \"version-display\": \"3.0.0-preview7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-linux-arm.tar.gz\",\n            \"hash\": \"697C4638EFB5113EC8757AD376D012C03E710B03A93B9887F2A064E68B72B0330C29CAE98625D54129BEFFB9015272B3A9DE115809E9AA2887F6A5DE9EA70028\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-linux-arm64.tar.gz\",\n            \"hash\": \"F2BFA9FFB9B979D68EC9CC931E50EE7F508842CCE1134CB2FD583D701B300B8CBD18942E6CA34C59CBE92B2070BAEF97712E56A0EA644DC537DF51531ED95A8B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-linux-musl-x64.tar.gz\",\n            \"hash\": \"90F5B96382EE64420BB06E38235AADADF8B9D51DBA47A26D3B131EB1DDD1126EA334E414145A152A55158F723BE0D6EFD48E1D21BB87AE2759C5E92B3DF5B466\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-linux-x64.tar.gz\",\n            \"hash\": \"F1DDE62D95230D30B1531A7A63278CFD591E7094195428F43B0CA4C2A6273BF422EBF4A2D7A9A5EB0E95D4B81C5A297F41690FD56A51BB5C6951BBE36DDCCAF3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-osx-x64.pkg\",\n            \"hash\": \"3DA71A3CFADF82CF9E28410F88A7DCB62707B92B83C7BDDD73FE8F2920B2116A06E109292D4C24C5712F6ADF45F8C83349315B9A81F5373F7C1419977A2BBBE6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-osx-x64.tar.gz\",\n            \"hash\": \"0E1B1AAF903E5EFBF133E256B91F75829976F974E234B4FBF76BBF50659C9DF4D73E1DEB35FA5442DA44A8BF71CCFD2EC0690061556C8E37B7964B8EB70362C8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-rhel.6-x64.tar.gz\",\n            \"hash\": \"8CFBDB2D76186A30B74CB051FFEBA070DB21A1F9B893CBE086CF283F96DFF66392576397813FAE2BDFD1F5843965718865725F57D74331FF30D668FA39B0E0B5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-win-arm.zip\",\n            \"hash\": \"06B835200E40BD90590DDF6C476CE0DB1EB4683E11DC26CBD0840A0DB3BCB797C6144493340D822D03CB8931C61E99D8B2AE1DF8DF153A84BBFA472097427438\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-win-x64.exe\",\n            \"hash\": \"4FCBFD36C501C22A3116325FC0E6B00CD88C6D52560FCF8390416BAFEE042EF9F5607A11ED37864895DBB550EC4D769BAF6E0CC3F88AC66605D5BCB5FFD929E5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-win-x64.zip\",\n            \"hash\": \"D0C9E368DBE5C76E026205225C268F228EAEA0D6587A45757D7E63B80F8D503CDA4AC3CAC9BB68B4956D4E0CAFA27B062FD15E5FE99C78AF030FB8F27A0BF4A1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-win-x86.exe\",\n            \"hash\": \"85A26B51AF8EBAAD857437C9E7D6D23CE3CC1AB637FD8569CDCAC9990A3449D2FCE1E25E0C70B18F418A4AE8C78C97898990A8133BBBD492D87D50EE91B8318B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview7-27912-14/dotnet-runtime-3.0.0-preview7-27912-14-win-x86.zip\",\n            \"hash\": \"5A0CFE8BE4E4E72EAFBC4B8490A7452B1CAC0561570ACD8FA1F068ED3E5C14421B6796AE86DA2C3A9E6F90247042F5C3A0CEDD5804A3BA335EF6396E37CF3B56\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-preview7-012821\",\n        \"version-display\": \"3.0.100-preview7\",\n        \"runtime-version\": \"3.0.0-preview7-27912-14\",\n        \"vs-version\": null,\n        \"vs-support\": \"Visual Studio 2019 (v16.2. latest preview)\",\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"4.7-preview\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-linux-arm.tar.gz\",\n            \"hash\": \"CDC91159F6CBEE0F34B8579F3577DBF9F14C9CD17CECBD23FDDD0E299D3C0C80171898396CE6AAD0B77647B814D928F5D276EE8AF2D842562656CD39D4B25176\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-linux-arm64.tar.gz\",\n            \"hash\": \"8EE3B984C328A7C1A08ECD8DC2CBAE036883C751E5B3E5BC9BAF601ABBCFB38B7165A56D979A60D5E64D6B1CCDDC1261B2669E5C2547EC9A443F403D1B9DE8F0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-linux-musl-x64.tar.gz\",\n            \"hash\": \"ADF7A5A734F68DB7612BC6BCD2E5290D0ACF66BF69E3026DF97B6DCCA28EFD1C2CD80D307436559FE9F516054347C5FD5ACBC33DDD1FEBA110F10DC3E1826CEB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-linux-x64.tar.gz\",\n            \"hash\": \"DF70CA86453CEBA51B480BC8521D6BF76625469CDD3DA6FE782B85F13620D8BEEB34E02EE7AFE2803CD144066E7C685E5A1A9A4005ADC9B2709C69F7F37C9BDC\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/64c5239c-620c-4613-b4a4-0ce34952bf48/fbe397790bf9b93b9637017965a336f4/dotnet-sdk-3.0.100-preview7-012821-osx-gs-x64.pkg\",\n            \"hash\": \"3A2FCBAFFD3884D452CB7B587620C1CF2FEE5B123D5B0F2F8BFAA9F164467DD7F993185E1F1F68858E7C8EC8F726CCD092386B95DE214A0199BF76D38C4AD828\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-osx-x64.pkg\",\n            \"hash\": \"3A2FCBAFFD3884D452CB7B587620C1CF2FEE5B123D5B0F2F8BFAA9F164467DD7F993185E1F1F68858E7C8EC8F726CCD092386B95DE214A0199BF76D38C4AD828\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-osx-x64.tar.gz\",\n            \"hash\": \"AE4332983741EF660893E967E1B5B7FCE25CFE8E3133F64DAD48D778E7C1B1E903F781C54EC2512A3CACC169CF3165DC58955AE61BE2AB54A650778BBE5E0C1E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-rhel.6-x64.tar.gz\",\n            \"hash\": \"FBEC12DA7E3ECA1BC54522883EA00439BDBC2FE86039EFD55EEFB6CC69027C18476C61A138922A986AC1047F58A52C7C149AA9B58861467422F3302B3199A825\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-arm.zip\",\n            \"hash\": \"080479A246207CCFE0AB9141BE2FF59B15829E43DC1A597307DB09C7966B8387864F1B4C4312738D57176A3BB7A0AB5E48DEBB68911A8E9DF917AB0A9EF89BD6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cd15f7e2-b815-4e97-8c15-5effedb52016/f8db9e9ac11169d3ba6557f90d1133cd/dotnet-sdk-3.0.100-preview7-012821-win-gs-x64.exe\",\n            \"hash\": \"3A94FA4CB71072E401697F3D6601AD01997D814079862B9AC4A2DB12288C603D5EB91E6523F9C443F10CA753C5FA9182E1D355FD097A736D43E8EACBAB05DE52\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/853f415a-c583-4cb3-aca5-447968ea1042/1315f856ead57d9c90d5075b244d9e1b/dotnet-sdk-3.0.100-preview7-012821-win-gs-x86.exe\",\n            \"hash\": \"98D71FD29875C645FF07C5DB9B4BD5985C96F282CCDD8C47DAC59A88B8571CE30BFAA8E6AA13640D53515D35FADEA02AB8565E083C807496EEC150C5F05ECBCA\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-x64.exe\",\n            \"hash\": \"3A94FA4CB71072E401697F3D6601AD01997D814079862B9AC4A2DB12288C603D5EB91E6523F9C443F10CA753C5FA9182E1D355FD097A736D43E8EACBAB05DE52\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-x64.zip\",\n            \"hash\": \"9A67E58677481BC497519D8939320FE1085C3C7CF606D790594A4D0E7F4EE38D72E250D25F45F118E6811613510EDFA3E53E578BA05E62A23C79074D3AF7B381\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-x86.exe\",\n            \"hash\": \"98D71FD29875C645FF07C5DB9B4BD5985C96F282CCDD8C47DAC59A88B8571CE30BFAA8E6AA13640D53515D35FADEA02AB8565E083C807496EEC150C5F05ECBCA\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-x86.zip\",\n            \"hash\": \"C8F0CCC9008B62B4316EDA281D351FE526618F9D398CACF56E83FA43CF57A1DC8C7119F44CB36DBFEC77223C0598585EE627EC3796E9693FF1F665089B772215\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.0.100-preview7-012821\",\n          \"version-display\": \"3.0.100-preview7\",\n          \"runtime-version\": \"3.0.0-preview7-27912-14\",\n          \"vs-version\": null,\n          \"vs-support\": \"Visual Studio 2019 (v16.2. latest preview)\",\n          \"csharp-version\": \"8.0-preview\",\n          \"fsharp-version\": \"4.7-preview\",\n          \"vb-version\": null,\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-linux-arm.tar.gz\",\n              \"hash\": \"CDC91159F6CBEE0F34B8579F3577DBF9F14C9CD17CECBD23FDDD0E299D3C0C80171898396CE6AAD0B77647B814D928F5D276EE8AF2D842562656CD39D4B25176\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-linux-arm64.tar.gz\",\n              \"hash\": \"8EE3B984C328A7C1A08ECD8DC2CBAE036883C751E5B3E5BC9BAF601ABBCFB38B7165A56D979A60D5E64D6B1CCDDC1261B2669E5C2547EC9A443F403D1B9DE8F0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-linux-musl-x64.tar.gz\",\n              \"hash\": \"ADF7A5A734F68DB7612BC6BCD2E5290D0ACF66BF69E3026DF97B6DCCA28EFD1C2CD80D307436559FE9F516054347C5FD5ACBC33DDD1FEBA110F10DC3E1826CEB\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-linux-x64.tar.gz\",\n              \"hash\": \"DF70CA86453CEBA51B480BC8521D6BF76625469CDD3DA6FE782B85F13620D8BEEB34E02EE7AFE2803CD144066E7C685E5A1A9A4005ADC9B2709C69F7F37C9BDC\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/64c5239c-620c-4613-b4a4-0ce34952bf48/fbe397790bf9b93b9637017965a336f4/dotnet-sdk-3.0.100-preview7-012821-osx-gs-x64.pkg\",\n              \"hash\": \"3A2FCBAFFD3884D452CB7B587620C1CF2FEE5B123D5B0F2F8BFAA9F164467DD7F993185E1F1F68858E7C8EC8F726CCD092386B95DE214A0199BF76D38C4AD828\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-osx-x64.pkg\",\n              \"hash\": \"3A2FCBAFFD3884D452CB7B587620C1CF2FEE5B123D5B0F2F8BFAA9F164467DD7F993185E1F1F68858E7C8EC8F726CCD092386B95DE214A0199BF76D38C4AD828\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-osx-x64.tar.gz\",\n              \"hash\": \"AE4332983741EF660893E967E1B5B7FCE25CFE8E3133F64DAD48D778E7C1B1E903F781C54EC2512A3CACC169CF3165DC58955AE61BE2AB54A650778BBE5E0C1E\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-rhel.6-x64.tar.gz\",\n              \"hash\": \"FBEC12DA7E3ECA1BC54522883EA00439BDBC2FE86039EFD55EEFB6CC69027C18476C61A138922A986AC1047F58A52C7C149AA9B58861467422F3302B3199A825\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-arm.zip\",\n              \"hash\": \"080479A246207CCFE0AB9141BE2FF59B15829E43DC1A597307DB09C7966B8387864F1B4C4312738D57176A3BB7A0AB5E48DEBB68911A8E9DF917AB0A9EF89BD6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cd15f7e2-b815-4e97-8c15-5effedb52016/f8db9e9ac11169d3ba6557f90d1133cd/dotnet-sdk-3.0.100-preview7-012821-win-gs-x64.exe\",\n              \"hash\": \"3A94FA4CB71072E401697F3D6601AD01997D814079862B9AC4A2DB12288C603D5EB91E6523F9C443F10CA753C5FA9182E1D355FD097A736D43E8EACBAB05DE52\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/853f415a-c583-4cb3-aca5-447968ea1042/1315f856ead57d9c90d5075b244d9e1b/dotnet-sdk-3.0.100-preview7-012821-win-gs-x86.exe\",\n              \"hash\": \"98D71FD29875C645FF07C5DB9B4BD5985C96F282CCDD8C47DAC59A88B8571CE30BFAA8E6AA13640D53515D35FADEA02AB8565E083C807496EEC150C5F05ECBCA\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-x64.exe\",\n              \"hash\": \"3A94FA4CB71072E401697F3D6601AD01997D814079862B9AC4A2DB12288C603D5EB91E6523F9C443F10CA753C5FA9182E1D355FD097A736D43E8EACBAB05DE52\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-x64.zip\",\n              \"hash\": \"9A67E58677481BC497519D8939320FE1085C3C7CF606D790594A4D0E7F4EE38D72E250D25F45F118E6811613510EDFA3E53E578BA05E62A23C79074D3AF7B381\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-x86.exe\",\n              \"hash\": \"98D71FD29875C645FF07C5DB9B4BD5985C96F282CCDD8C47DAC59A88B8571CE30BFAA8E6AA13640D53515D35FADEA02AB8565E083C807496EEC150C5F05ECBCA\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview7-012821/dotnet-sdk-3.0.100-preview7-012821-win-x86.zip\",\n              \"hash\": \"C8F0CCC9008B62B4316EDA281D351FE526618F9D398CACF56E83FA43CF57A1DC8C7119F44CB36DBFEC77223C0598585EE627EC3796E9693FF1F665089B772215\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-preview7.19365.7\",\n        \"version-display\": \"3.0.0-preview7\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19197.0\"\n        ],\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-linux-arm.tar.gz\",\n            \"hash\": \"A52163A9C9113319D33DCFEEDE9805D972C943E692D5B6FEF3995C426B98AE826F57E6C1D1F7B32DB0F7950B07BE7E42C7BA2CCDE33E6CFFF2635C25E1D3817E\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-linux-arm64.tar.gz\",\n            \"hash\": \"CC8DFF55532108B0E14711FF03B8E0A082F06AF248BCADC1663FA972C9DC1F8A9A3BBEA29AD63B679508B55D100BFE3CD989359D6662EB98E61C43BD7C06A4EF\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"1B3F55B9EEFE548DAA6A8F8ED9BE3B2196C3DAF8ED896C5E32D8169ACEB6E3F8CBC5F7AEBB910C19EE8D343255045446C73E6B65366097768263620E72C06667\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-linux-x64.tar.gz\",\n            \"hash\": \"B58B652051AAE07BBE8F47F84A690060D3BA704DE3BC31A3FC8DD046CE4EC76A16CE8519FFC5B57E2CCF02892C7B44AC817962EDA38A6B1BD30AC2561787A2B5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-osx-x64.tar.gz\",\n            \"hash\": \"0BECC88EED037FD16143D3C8E9D705A18C99FF3F6326E0BFD66B5930F07336B64628A3794806A1E1ADCF0893F7A71D6643418EB797635B5587BB09A84C69F745\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-win-arm.zip\",\n            \"hash\": \"D25A102954856B582524FC016A3A48B8C357F407CDBCCF1D3D202074D17142705324BDD87EA6DA2F9BBF1B8E2D211FD5E0803F3443474DCD561ED02C86FBC627\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-win-x64.exe\",\n            \"hash\": \"4BBF476BC3071D3AD6182030191EB953E3403078E2DF386E07F21C724D2D5D494F7101AC46FBCDED87D53FB98F82E8D28A712B9C74D0EF6CC76BA988A0706886\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-win-x64.zip\",\n            \"hash\": \"AA1812B85887C7BE9773E0A8647682303E8BA2EC3BA178485DC624BA4750DD84EE6C994E5E2394F47F99C1D8A76DFDDF84BC15D14835626A819BACFFECBA1D96\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-win-x86.exe\",\n            \"hash\": \"59357BF085C22DE2FF71192816306196399D2B2172E0004842F9F816A533521E32303F85C42DA314D9720473D85BA2F4C9ADF324C454E65E42D07407AD676682\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/aspnetcore-runtime-3.0.0-preview7.19365.7-win-x86.zip\",\n            \"hash\": \"10D03B62B9A152F569DC83D28BAFE62316DEFA17F93DDD72E0EC391329E54F9DE8F0303E7BA958FF90C82B9E73C0795E743938AEE13661ABB76A52609BBF76F8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview7.19365.7/dotnet-hosting-3.0.0-preview7.19365.7-win.exe\",\n            \"hash\": \"0CE8DB1981B64CD1899702BAE02B20D87491F739F9AA84868DDB76BF50468739B6EE12A6EF9DDC567694FA3DB4BEC58D7551436FE644FA834249815341778C6B\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": null\n    },\n    {\n      \"release-date\": \"2019-06-12\",\n      \"release-version\": \"3.0.0-preview6\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-preview6.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-preview6-27804-01\",\n        \"version-display\": \"3.0.0-preview6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-linux-arm.tar.gz\",\n            \"hash\": \"30617A076B077D6AD9C29FE0A58B058B4F71C8C8C619A8A122920B0055C4DD25E3DBF27F2917AA65494BC1D14AC113570FB143BD24CD2AA08172D9E66602E5EF\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-linux-arm64.tar.gz\",\n            \"hash\": \"E93959FC32789CECD6DD0F1B0BA3077937F04DAE3AF4B23F2FD4B8332049CF052E6542784EE598D32CDC24ED1C76CA2FAEEDBB4454E815F744C979A21D791EBE\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-linux-musl-x64.tar.gz\",\n            \"hash\": \"22BE19E46499249F39F9857DD893107766AA47EBFEBA33F0F6700F3470D06770B6AFF65815845BAA335A366AE9F4A8957965C2A1386FF6036BB5115F14226020\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-linux-x64.tar.gz\",\n            \"hash\": \"D0F6E1946D069551634237427CE22D920A051649E7538D91F06214255DEE3AC1316FE01F0B3F9DF177F36C472B942C2B4E541C2835211F69543AB432D8E47DFA\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-osx-x64.pkg\",\n            \"hash\": \"4E3BBFFE31EE3EF62A54F8B4D3BA945E58DC7032E198E3E70ECFE2707CA393198872083DE743C2A37F16A45CED63A62FF2C876F55C2A469745C238ED608B7F41\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-osx-x64.tar.gz\",\n            \"hash\": \"157E476C3F3A366DAF2E9962C4700055089CBAEC796C45CE1214A693EE041ADF5E7B13E72BF210A54E885CCC86E8E98BA27043A703C34831007967CEE396FCC2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-rhel.6-x64.tar.gz\",\n            \"hash\": \"0FD4DB3B9444E62EF6F22BC7B1D0711C3734306719681C04323F1C188EFC9F0FFCAC0C23B22D4EF238CAD496EAEDC1BFB705DAB8C3E6E0A8BEFE0BD77063AA0C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-win-arm.zip\",\n            \"hash\": \"4043D72B7AB666AECA03F65EF635145E65DC350A8A2D3051C0D2FE93791EDB6C55819CC1D5B93809123260F94FD017D18CDCE629C3A5352A4888D2A5433169E5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-win-x64.exe\",\n            \"hash\": \"4187CF60F732E872756B883AA8F8E0DBDF129F89A794C4173357D734C00268C563A77153C9F15095C0F9223A2C98B3AD06BEF5D50A8A18799F25DAFA2CC58F46\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-win-x64.zip\",\n            \"hash\": \"3C33ECB3C9A3D786468440258DBBB2E0F00FC7F0328E8F198D0BBCF394568FB98B505E2B6C41EF8C0656042F089701958590B1BABCF6A50765121425CBD72203\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-win-x86.exe\",\n            \"hash\": \"CA360086582A2AAA34C739518BB0B0B2C29E1B4A13AC21710339FA2CA9384F04EFEA778EFACF4152BF68067A5F6F57114BDBB2A5C9487BD2ADE9719B15E88E98\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview6-27804-01/dotnet-runtime-3.0.0-preview6-27804-01-win-x86.zip\",\n            \"hash\": \"612E0384FE2BD1BB548EB2FE3E78BB69D0250BE910196B92035559AA4B314F38D95F9C5170BE46030295A9ED95F0FE0389D083B07B79363C912B3D34A13BF760\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-preview6-012264\",\n        \"version-display\": \"3.0.100-preview6\",\n        \"runtime-version\": \"3.0.0-preview6-27804-01\",\n        \"vs-version\": null,\n        \"vs-support\": \"Visual Studio 2019 (v16.2, latest preview)\",\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"4.6\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-linux-arm.tar.gz\",\n            \"hash\": \"CEA4FE3A44BDBA5192E83CA11FD5668883E3EB1CE67EAAD5A4817014CF684EF5F46D8A4CEED1498C3A6C883EF94B16729260A08EAA64EAC4F41954EAFFC23D5F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-linux-arm64.tar.gz\",\n            \"hash\": \"6A1BEA73B7B1361CA54DE192ADD9589DBD977C796C8DCA8D259112953E02560544C2058D919437C1E360B48CAD190C5095BEF1638F673E67FB6DCE7E7D769DB8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-linux-musl-x64.tar.gz\",\n            \"hash\": \"C130BF9CF4E05071200762686590DA138B9CDE32BDF209C8D659A6AC250554AB0D190F6B5327E618BCD85C1F35192BA197940FE5DE01B8498185CFEEE6BC84F4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-linux-x64.tar.gz\",\n            \"hash\": \"047E295F3D7D4C590C906334EC28B844BEF90C2B3FEFE395A23E37E2A7D13955A11CBCF2FC2EE9FFCFD6FD44CEDE4ECD72A6B92258F568D5B328AD46BF0A7BB8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e5638e40-46ce-43a6-9de8-5c4d13f9c8f6/4d0be16033dfca7ee7151d0f5d517ce3/dotnet-sdk-3.0.100-preview6-012264-osx-gs-x64.pkg\",\n            \"hash\": \"8603C31E09861306DC16DC375B08EF5AE180479999BE287E2D6F3531C53136FDE0504A147D3F2448B1A66AED18A5FDD22B37A565946ADE200EE4D8E00736CB59\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-osx-x64.pkg\",\n            \"hash\": \"8603C31E09861306DC16DC375B08EF5AE180479999BE287E2D6F3531C53136FDE0504A147D3F2448B1A66AED18A5FDD22B37A565946ADE200EE4D8E00736CB59\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-osx-x64.tar.gz\",\n            \"hash\": \"480B814FC74BBE5D73F69E2834A3E2B1152C289FAC5C0AA06575506FAF0ED45B907313B000E33C5BAEF0CBDBCF9414FA33E90FDB7958FC208BF05FC261EA6B1B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-rhel.6-x64.tar.gz\",\n            \"hash\": \"5B7680442D5FD1674F6EAA0F4C6E06267E733538CDE6A49FC3C45DFEA1EF12F42956746DB2BE65F0657F10BB8EA44290B956A0FB3FA0E9717C85A45FE6C4279E\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-win-arm.zip\",\n            \"hash\": \"259C679B979B0E231C78E7C1E23895C09CABF81EAA1E1E1942599E4E9EABEA3DA1E064EA28B52CBA6B38F9203016A68F0A67D6D11A8495062B6952741F2302F2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/eb1580a4-c36e-40bc-8a39-4c4f3f979a99/421b1e0f25d61fa314eb6729c099d243/dotnet-sdk-3.0.100-preview6-012264-win-gs-x64.exe\",\n            \"hash\": \"D53279FD8D6D816E65C134F52C2211E27D6C5BBBD8A8AE9A1D7008CFD1A9143A97A033676B9CDB9B86CC1CF50F430D6BD5A7646250AD1DC4A18D3FCD75AD4D8B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5fcdffa6-53c2-4e95-8c6b-57c0d64eb9b2/6450f44a4566149c6047962ceb49ae0c/dotnet-sdk-3.0.100-preview6-012264-win-gs-x86.exe\",\n            \"hash\": \"89E27B9A43EACE572883452565321F09B0104B25303083FA61A5A6BE464EC51705582CF281069F526E3FF7487208E8E6B0BC71FD6D8DEA32B617571435EA0A95\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-win-x64.exe\",\n            \"hash\": \"D53279FD8D6D816E65C134F52C2211E27D6C5BBBD8A8AE9A1D7008CFD1A9143A97A033676B9CDB9B86CC1CF50F430D6BD5A7646250AD1DC4A18D3FCD75AD4D8B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-win-x64.zip\",\n            \"hash\": \"57C32E489AE204E02B07F048B25A6260BE9AAC3CE545D4EC7BCA1491B88A4F7FC0308845B430C30A51960B1AA35FD30666F30334ACD6B058DB464FD63FF66DFB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-win-x86.exe\",\n            \"hash\": \"89E27B9A43EACE572883452565321F09B0104B25303083FA61A5A6BE464EC51705582CF281069F526E3FF7487208E8E6B0BC71FD6D8DEA32B617571435EA0A95\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview6-012264/dotnet-sdk-3.0.100-preview6-012264-win-x86.zip\",\n            \"hash\": \"46D8F7BD8E2FCF31002C06117D252C7A3E9ED8DF06A872A266B55CF32993FCF3FAB7A78326FDC3A178A1BA636DD03ECA288959486A4C7E2A4687F1F713A9AFB1\"\n          }\n        ]\n      },\n      \"sdks\": null,\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-preview6-27804-01\",\n        \"version-display\": \"3.0.0-preview6\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19150.0\"\n        ],\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/246ddf4f-e4b8-4306-8761-2dfbca37f7de/274b8c00abf99f374729e0534779951e/aspnetcore-runtime-3.0.0-preview6.19307.2-linux-arm.tar.gz\",\n            \"hash\": \"7D56012CD3AF235173B81BE9F7868321D3DE0DC921BB24710EF7B35D6F1504C853E915EA9DA25619F70792832F7775A8A36BEBA75777D59F30DC2BBC7868BACF\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0040c5cc-ea1f-4d64-b9f3-9b4adc3811b6/fab5141cf1850d520eb2bc00bfa80183/aspnetcore-runtime-3.0.0-preview6.19307.2-linux-arm64.tar.gz\",\n            \"hash\": \"E6562855BC9C305705E48B0E86A737A53AA498C251F0D713D89301A2BB5EC0F0BA03D6949C8DB9E4E909B3E1E9BFCD17364951B9F77D014EE8E1E3D1BAA8E658\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a3fabeed-a2a9-480b-9cad-4f40ad3be347/4a576819c2fafceda1804b37945784b4/aspnetcore-runtime-3.0.0-preview6.19307.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"3C015B35995DACC514F7B3637A033E8ED0310A1CE9771A255EAC215993BF386F6EEB43BCCB5DECB883041CF83BF6229C6AA271D5D26C63E95E1322B241D0BAC9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ea4b23b0-d7dc-4d39-8de4-d4c89e1f9551/bfe628fcb8f19d4c97c75d1217af1a8b/aspnetcore-runtime-3.0.0-preview6.19307.2-linux-x64.tar.gz\",\n            \"hash\": \"BD0E712D7F7888F9061901D5990BED53FAA34FBE095D64360CC6DA1772F08EDB11ED8CBE746DC065A2C14E6B0F988FC27348800CE00E6C8E4547F7973BA49AA0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bb0fdeb4-7823-4fe2-9570-476dbb8820af/60dc3930f2aaeb0e6ebfdf0dcdca4101/aspnetcore-runtime-3.0.0-preview6.19307.2-osx-x64.tar.gz\",\n            \"hash\": \"F2A127EF08664B31F8302750DBD78F9A21F86F48F9D561AE8EE5C4AC17B74E7C9C85F675B6F1492FC4BB125E8D203BECCEDD709236F3DEF967DC76673CF235F9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0dbf6a21-ef68-4aaf-b4f7-ffaa04a9ce88/89c9a67c6ca678d435d8acb7c7895c45/aspnetcore-runtime-3.0.0-preview6.19307.2-win-arm.zip\",\n            \"hash\": \"CC398EBA0B4B28A7C48D1750D0ED985D45D674E334945447ED64C1448E1DF9190401F0252F16C6F33C4C9EB726081937AB36637EBDD989C5A352B5AD38933384\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/871eacb3-13c5-4bb1-ab9c-4776813b2f0a/d5aded51b925d2a933f51b9dec0c1222/aspnetcore-runtime-3.0.0-preview6.19307.2-win-x64.exe\",\n            \"hash\": \"CEB54695B4F70E68293B16D62E3CBA82FF81556E90A7F324945606C881BFC8A303236A24C7B1A9C88AF5A2D01B5B9DB489C70641978C35C568A3F5B42B713463\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7ee7da31-90a2-4992-b687-db86efc47a20/a7fde0f0b5edd35ffbd3455f7115d5a0/aspnetcore-runtime-3.0.0-preview6.19307.2-win-x64.zip\",\n            \"hash\": \"3E888C763B915F1631A28DB7E2E373C201A1BB785E1E5DCE56A42360AF3635C25E67C0087BC125D903A7A4D4C8BE160BDC4E091493509C12F24F88777DD37D41\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/951f140b-08b5-417d-9177-3d79cea6e023/31ac4b39e95c038987de4f76d9863c11/aspnetcore-runtime-3.0.0-preview6.19307.2-win-x86.exe\",\n            \"hash\": \"A22F6C833F9F8D027B3A7A9B17C29A6B3E8858F7E89E8FE3D021BD618A04C19067CCC23885260189D455531175D557FEE41300B02D84AA5D14495D4D9AB5D065\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/dc310993-a8ce-48a7-adc6-37bde172e327/6caf36f2576dcdc97c6124fa26d6ceab/aspnetcore-runtime-3.0.0-preview6.19307.2-win-x86.zip\",\n            \"hash\": \"D1C4060D0B98923AE4FFF9F94E1FC7EBFF403D2E57F84D267125CC0584A1A21AAC0E3E45198E27E064B8D3D0BCAF94614287F330815F3BA337A05B33D6D24671\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/82fe6f83-3212-4401-9d71-d48bbc9bb69b/e003304de24a434a0a27c24131a2cb9f/dotnet-hosting-3.0.0-preview6.19307.2-win.exe\",\n            \"hash\": \"FBEA6C797FA3360D034987BD44DF28FC113FB0D45D84ED82DA611F7D22DD1BEDC8A8F43798E10DBCD5CD8BE28A4B07DC4B28DDA11C9AC0D62D46612C2E35DD84\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": {\n        \"version\": \"3.0.0-preview6-27804-01\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/675838d4-94bd-48f0-b873-db60188e9dfd/b726010bcd1c2c80a76e4a1aa231fed3/aspnetcore-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"E596CDA1FD028206BAEDF6C3C000EDCB0CB3372353ADA0443DA03CFA9EBB385B9DF7F61EA084DDA03E8D5292DAB6C5708EF383B4F66103052C51E5147E30E2D6\"\n          },\n          {\n            \"name\": \"aspnetcore-tooling-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/22af416f-8d85-4ffa-be44-ad8912f34279/49c40491bc2a93344e571c8e79cfca73/aspnetcore-tooling-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"FB16D125EF1B586D2051266431F9136EB25EF1AB423AB36D32097B14B7AEA09C5335286B40D580F095DE074C2DE8DE448B6EAE31E7A0609BCB994988D6A79371\"\n          },\n          {\n            \"name\": \"blazor-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/aa5c443b-1375-4e22-ad4b-49ea3aeef89e/07006746268b666500860ea332cfdd93/blazor-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"CCDEA5788696A83B202983E61B36A2569F65369CF09923B81B797D508EAD80C5D2FA93DA53CCCD2289849225EF44129215BD6DDDDD25259FF1ECF783BB57E014\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ef6c90eb-d3de-4e43-86c2-1ae3fda0f2dd/5a4c7c03c74d05cf3a56c723f169536c/core-setup-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"17F7955B181EA74DF1A4212686BD30AB330A21D91A8EDDFE0B64AA36C706DF5727978323E6966146BE7CDB9FDA4D1BFD7BF2837D5EE39BD2933F0699DCAD7424\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/da1abf8a-d8da-4c2c-8c54-c5feed83a25a/0ebeb91c064ec5162b6793f6dc84212e/coreclr-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"F2438D64E069D41976A6EA808879BD651A1B2E1295B5266DBCD86CA22F0850085D4EB55B69F8626F00E86788C5521E0EB039A69D78A616253A01C296F86A4D4A\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4ebe24f7-9a1b-4f3b-bc70-a0db7e2d141a/69a426a9ddbb74327e8ba78935853391/corefx-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"E6AC188CC3A36028D154651748D434EC84E5845BAE5E47971D296C87CF86DC5F8C386130D5DD8CC67523F578224DC51AEA944A09C94BD714F194B941D306B2B3\"\n          },\n          {\n            \"name\": \"entityframeworkcore-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/668eadfd-e4fb-4ce5-b4e0-fced6025d6e4/1b2e30e0dfe3b9a47de385e14cf40b0d/entityframeworkcore-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"3A2FD7920B3B4C72CD90DA41D21AF16FEDC47388BC1F47BCFEB3F1B6839C48B0E9FA00B5C89D419A200DF4C2260D8838843E3F758D84F6AA6B64B03A4A78BDD3\"\n          },\n          {\n            \"name\": \"extensions-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9b15012c-74bd-4c38-ab5d-2d756628022c/7e460f32e84bdee983222962b284043e/extensions-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"B4D4EA9C73D7C684326274F5EB1AEB45DF1E7CDBCDA2BB11A1EAE29BC9C8B190EF777617EF78D3291BE743896E44CEA652766D5B5A0E00EFD684EDF9E7D177E8\"\n          },\n          {\n            \"name\": \"linker-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f95b4f2e-0c84-4002-b6c9-df633fcd9533/ddcd5b36e940143f2a4a8eb84d2d3c27/linker-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"E772E2A24F18EEBBEEEF5F7E1EABA220D9D187A71DB90FE802AA90B51BF13E13F1B615E9783D9F6722A900978B1D0772A17FA0B8FB61CBE900E9504950CA8128\"\n          },\n          {\n            \"name\": \"msbuild-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0cf835fa-9ee1-4541-9ef0-0d9331b4e1f1/20bcc828a74122a1911b53778581bee6/msbuild-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"7D68F39ECD6671F348C31FEC5A746C5CFC50AF86881E000EAB18751B7E78D657E6CD7E1260968E36D77D80797F54E6F495C22007D43D9900D1BD2D3ECE460338\"\n          },\n          {\n            \"name\": \"nuget.client-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cfd8b9e9-c52d-43be-9806-93bdbfd079d7/295fa4e1b3335ce5494e35e7308b062d/nuget.client-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"0A3C7AC36B1164B5232A486716E827542F954EACCF56DC2BA246A8C5D6FC31F0EB9D066765D02D4BB15D22897E37878A41CE787D10C7DC7E4A7B148684B66413\"\n          },\n          {\n            \"name\": \"roslyn-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/88028db6-3526-4298-836c-642e0b00d543/309be14c1188198e0564a2a47c78ab0f/roslyn-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"BD0B98254F9BE31E0DCEBACB9D4C54FA6154E732F9FFFDEC05BF7C9262E25C61586A46541402F3027441F6BB61FE9AE3BBE8ADFBF10192E09B0B2C6A1E54313A\"\n          },\n          {\n            \"name\": \"standard-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/839250d9-9fcc-4546-a157-b31a96874a72/324c581c910eca2df761354077c93f4d/standard-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"1B2B230D9263492DCD9B7EFF11E72869A3AA00C81776B312556799AB38C8E1216FCAB47560C86B87AFB5C1538B6D617F88DE0DFE4CDBFF36E0E2B8D0BAF3E4F4\"\n          },\n          {\n            \"name\": \"templating-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ee6fd854-d860-4240-8455-fd2d5c231a11/a89c24d480e0b652fd1bc8b8a0290b8c/templating-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"26DA64E146B0E6C80FCFA0D98C1153045CEA4A83380726B80BFD71694039E5A99E1DFEA770978BA7CD954F30873AE32FDDAA1648CF3364CAF5C05D436AB606A8\"\n          },\n          {\n            \"name\": \"visualfsharp-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ce96faec-2171-42f6-87ca-a97dd077d3eb/2ee84b1e28dd92c55d4a557046213904/visualfsharp-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"DEF68CA888412F51925CD26D9137FB619DB58356E9E94475B29EDB25970EC01204BE806C56CFDCCFF1E104C3FFA1294605C878F96DFD20C3194EAB221FD86666\"\n          },\n          {\n            \"name\": \"websdk-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3cfe6b47-dc4a-4ae8-b3c7-19c10e5ad001/3883444ce919e9a396663122ea0e1990/websdk-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"26BD1C434E1F7700AFB744D35112A56E1E37EC4F586110E0DC21032EA57C22C7EE2E0365A91D4FCBE331A20444615BF0D287B7693210A5640439BD68638919AA\"\n          },\n          {\n            \"name\": \"winforms-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0e06800a-f7e4-4928-8870-2ddb84b294b2/f6ee3167a9fc8b8169c15284a4dbcbf3/winforms-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"AA5CCF3F6B7FB5D967F434AADAEEF620D552BBCF0A929F7BCE7D9DA1F6071CD73EE76CE71D8F742AB8AA4341AA326C1E5F45DDEBD4DAEC87F52557B3365C5D57\"\n          },\n          {\n            \"name\": \"wpf-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b7af603b-03aa-441f-ab22-de51f5e2ce0c/ad37eb0f33e27c41b91605b22f967f3d/wpf-3.0.0-preview6-symbols.zip\",\n            \"hash\": \"41CA81E8034F530749C7ADBEA84F10E0A95EDC270E01400607564B9EA9CFECD936D2D6745E60619D47F5B0A1D23AB812A94790687E395615ECCF80E9ECFEAD55\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-05-06\",\n      \"release-version\": \"3.0.0-preview5\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-preview5.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-preview5-27626-15\",\n        \"version-display\": \"3.0.0-preview5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-linux-arm.tar.gz\",\n            \"hash\": \"14BB89C0E6DE5479137235B2B79BAA64B63ABD89712B7D9ED239AE0ECBFC226E8CC60287D6BD8159BFF626712BA48F5CA961692DAF018E87575FDBABDCD42C83\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-linux-arm64.tar.gz\",\n            \"hash\": \"05115F8B1948C919A2880FCD402B7867C12F4F7130213FA060ED684E38EBDE512DA0BD85345E48A14FCD05BF976447275C2AEC6C47309474CCC66B79E60251E6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-linux-musl-x64.tar.gz\",\n            \"hash\": \"2D3E818804D56B44B8C009785AA79577EF441FD5E3CE37E7F8E62C971EA6BB7622E272EB12402E5EB9E30F832DC636E8609C1381494B629B2E555226AB6EE014\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-linux-x64.tar.gz\",\n            \"hash\": \"BCE60AB112BC9F47FE968EDFD96EC7254020ACB5D4F9263F91E1D66BC2B8B953F9B945D172619A2707B032F117C11E77423E43864E6CE31E0B1174A51CB55B8E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-osx-x64.pkg\",\n            \"hash\": \"9E46DED64E24727CD49C9397704E12462F8987A79FB205389CDFF6B28696C89C9497507BB9C15CA202D37A06D114281CAFD7D52921EE464C9CEFF14D95C5FA29\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-osx-x64.tar.gz\",\n            \"hash\": \"3B082CE6DA89B0CB034E34067D0B1A3773B58152DE4025AD10E308ECC26F6027CB65CE76CA4CAF2F5681C8DFE725742742D3DC06A6186CD99ADD07E2EF3A4E19\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-rhel.6-x64.tar.gz\",\n            \"hash\": \"0142AF092AD205B1BE4431A539F08AC69ECB4F4969C0621E83703D5653DDEAA3EBD39FE67528F493DBAC68E96E35B9A11E0EC65DE75F98118AE1FAF6FBF63A18\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-win-arm.zip\",\n            \"hash\": \"68C10F087FEEE1946A413E31AD596EB6B8F03AAE9F620C78BA10B0D318F6DDC80C19877C753D7BCD66AA0F1FECBAE9C808B2A346847B74C52DED720CEB5EBBA8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-win-x64.exe\",\n            \"hash\": \"0A08A6AEA97592C1C015BF0E5A376794AC30A126CD81CEAD49E1F660E7AD7622A305F67FEC8302AEE63962574759DD9095865BEA15C96C16F9B6F23FDAD31A38\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-win-x64.zip\",\n            \"hash\": \"138615ECD8C2E95D4CCFDD08A387DDEDE76726569D1162663779E41C05A0EA255E8352580F4C11D1A4FE437F5E67532DCCC9BB36FFCC2DC82D6A10A72ECFF861\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-win-x86.exe\",\n            \"hash\": \"3925BCE2097B9318F1A889C828CE6D129941DF56B961101009D22B5C69AAA67391B8C2C5F0FAD8240B01882F61F76A6428014E70A97590B3D105D158F884423E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview5-27626-15/dotnet-runtime-3.0.0-preview5-27626-15-win-x86.zip\",\n            \"hash\": \"611D28B331FA5B2883A713E4E5436B8EF4A6DCC92BC9F6353BAC0C2B67B45F25493F419A988934D001B883C38C9B0D481D2A46C96C90C3D2B238D4299E34B7C0\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-preview5-011568\",\n        \"version-display\": \"3.0.100-preview5\",\n        \"runtime-version\": \"3.0.0-preview5-27626-15\",\n        \"vs-version\": null,\n        \"vs-support\": \"Visual Studio 2019 (v16.1, latest preview)\",\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"4.6\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-linux-arm.tar.gz\",\n            \"hash\": \"5E95F4A32A90364553FE8A5778A6B417162BF39B7E01085B6EC2D6848F76ABC6365B75724DB6FBDE524CCF9E929C152040B4B9068F2F5131D0A4D4C9509B50B6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-linux-arm64.tar.gz\",\n            \"hash\": \"FF8D2143015223464C52F6BDC29A3F54B0A4B33675E5381C1454A7C240C1C37C3BB6886325E70C097704AFDB77C1F13A1245862EA3C79AFBEBF21D6EF622D9FC\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-linux-musl-x64.tar.gz\",\n            \"hash\": \"53366240ABE09B1C629F5D26EF8025539C7DBD4BF294E48FC467989330B52ED1E2F3EDBAA2D83395CF7C84F2B2DC8B87FAC253C5274F95D9D789222164AE4396\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-linux-x64.tar.gz\",\n            \"hash\": \"207AF1F3161CBD0864902370475FCAD5B500BF2B7199B06445E7C338053BC7CB0157EE1B4D00A37A351EAE6E209417EE4A15EEACEE086AAC0AC1BE7A62F3AD0B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bdfaed78-c075-4df1-90b4-9f0abc2d8e34/8c334c978118e9f9d45884db5b008c7a/dotnet-sdk-3.0.100-preview5-011568-osx-gs-x64.pkg\",\n            \"hash\": \"6C73CF778BEC51BC5D279DCA022051E7F5584D970467F10344BE85B31551E02B1BBCCE1260E35D89827B1FA51AE185020E59684AA524BFD824E624E92938A1E1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-osx-x64.pkg\",\n            \"hash\": \"6C73CF778BEC51BC5D279DCA022051E7F5584D970467F10344BE85B31551E02B1BBCCE1260E35D89827B1FA51AE185020E59684AA524BFD824E624E92938A1E1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-osx-x64.tar.gz\",\n            \"hash\": \"92272C797E92C4A9D628B9F76318C2F4FA908AED9A98BBF321780704E482811D569EAF484024DA00D219DB86F77B256D6F8557030D9461C15004553C07668B83\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-rhel.6-x64.tar.gz\",\n            \"hash\": \"E9C06C8A80D1D92C22B6B5367E580EBD3A806BDDF97088AE7C514132FACA7240877F4C0182A6F81B601A829E13F801C88973CC84F5E3E32697AC795BF1DAEB1F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-win-arm.zip\",\n            \"hash\": \"55CBAE4B7C09D4ECCAC5E4F2EA585C37409589D37ACD27023E814317B5B5DBE84407FCAC6DCDABC03E5964ED028069FB91A5BEFD9BCC0AED8C142F0B685C08F7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ca7ffceb-d11d-448e-bb46-7914a11cd62c/92b4679f2a901cd894f897bb2f2ef519/dotnet-sdk-3.0.100-preview5-011568-win-gs-x64.exe\",\n            \"hash\": \"C95E9C0D6BE6319F693A2377CF2E06BF65E86845258C4563C9F0776FB8B4362C94A7038B24AC51C11AE8CC76B85D472E5E7594FDA8585BA1B74B29ECEEDFD232\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b3574b68-90d3-40ef-9280-dcfc1f8df957/ebd5aed1a3b5c0c4f480a6b7143978c2/dotnet-sdk-3.0.100-preview5-011568-win-gs-x86.exe\",\n            \"hash\": \"750DBC7AD020A7E7B1866E35F1E6290ADCC035AE9DAD39C3F9804DBD9B21CCC62856A2AD598CE6D612F120144D051A8ADC0CBC6BCADB713C32DA3D044FC7FAB5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-win-x64.exe\",\n            \"hash\": \"C95E9C0D6BE6319F693A2377CF2E06BF65E86845258C4563C9F0776FB8B4362C94A7038B24AC51C11AE8CC76B85D472E5E7594FDA8585BA1B74B29ECEEDFD232\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-win-x64.zip\",\n            \"hash\": \"6171B234FF20849A970F750E39F3C5A968F702EACAAC5D04D1AC8E2C01C779F3A4993ECA42245C04E02ED063E8D59989DB47796F334275F5611C40703278CBF5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-win-x86.exe\",\n            \"hash\": \"750DBC7AD020A7E7B1866E35F1E6290ADCC035AE9DAD39C3F9804DBD9B21CCC62856A2AD598CE6D612F120144D051A8ADC0CBC6BCADB713C32DA3D044FC7FAB5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview5-011568/dotnet-sdk-3.0.100-preview5-011568-win-x86.zip\",\n            \"hash\": \"D8F50B7D0D8CAB5E34146D4A9F895891BD2785D0D39358EB16BC1052695BBFFE01227311C24CD784BA62C6BE6DDB2A10CBA1D5ECA821C48C7C7F7860C4268413\"\n          }\n        ]\n      },\n      \"sdks\": null,\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-preview5-27626-15\",\n        \"version-display\": \"3.0.0-preview5\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19118.0\"\n        ],\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a8f84ed3-7294-427c-883a-5278091d63ab/373f6fa1ef32f798c2fd3ba98b657249/aspnetcore-runtime-3.0.0-preview5-19227-01-linux-arm.tar.gz\",\n            \"hash\": \"8B43F09C7832911EAED67BA6BFF4987226E06146B310A6762A63E1586CFB9FD0D466E7AE9B04E25D8D0C0E058B26C295BB4D31EA2A8FAAED8C519758ED089BDD\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ee1fd04f-606d-4bd6-ad2d-1a902af87ca9/d8c3c09f00cb010c0af0922870ba5b04/aspnetcore-runtime-3.0.0-preview5-19227-01-linux-arm64.tar.gz\",\n            \"hash\": \"1DB29CDABCAF93DC3E31ADA3BD1288DB03DB6129478E33E31952DE3A64A5490EEB4D493B4E8761283C3A22F240C98C2F000E86EB9CDCA4905F20C50F1B24DFF3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/96d6195b-aff9-46c2-b5a0-ec33a1b4743b/e3c2deb2ec803fad6d24bc5fede61d66/aspnetcore-runtime-3.0.0-preview5-19227-01-linux-musl-x64.tar.gz\",\n            \"hash\": \"BD57DC0408E44B24835BF34BF974F174DDC1F6E7B8C71B6EB575D23729F8047DF4176B3DD102BC67EAD35511344A6E9185C79E4BE98869D043BAE6D30FCEBC66\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cd52bfa4-0260-479c-a32d-b4435c8ccda8/943c20feec33b778685d733064d8ddb1/aspnetcore-runtime-3.0.0-preview5-19227-01-linux-x64.tar.gz\",\n            \"hash\": \"7C8790C263806DBF7CFFEF73FC39C52C46DC9CE7F43A3A290CA21B271A6164A57ABEE4619D021C04097C43AF4DEC0E2BE205CF0C12B4AC498290CFCA77EC1DE5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0664198d-9e22-4553-a09f-46200d7c168f/70aab66943febeb83b5aa5f182125cb7/aspnetcore-runtime-3.0.0-preview5-19227-01-osx-x64.tar.gz\",\n            \"hash\": \"FE57FEF681DC5DE7D746CCEBF3037DF69863AF61EC79D9A543518F994177FFF7267FF1F2C5CD7F5D546BCA4E7AD1ADE73C4AB62007D902EEE74F1FCAE7187D83\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2702e7bb-e94e-4706-8498-bdb839d00572/0143b82ea04720d3f4f2950c493747f3/aspnetcore-runtime-3.0.0-preview5-19227-01-win-arm.zip\",\n            \"hash\": \"84A96237FFF92DD2A94A2BE30033C7E8F57AEDA6519ECB2DA1D3608C8E7B682B73005A40E9544FED1034FE9ADE4168A62025B42B8EC57635EA9051635A5EF3A4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d62ad250-c555-4b64-99b3-47fba99a445a/3eeee0eb676ddffac689a2a98ae83779/aspnetcore-runtime-3.0.0-preview5-19227-01-win-x64.exe\",\n            \"hash\": \"300BBA2CB2710FB4D690B6532C6EE132B093274B46EED043EC5B9E3A4E761A8AA42C57F6343AE3C245299616BF01E94FE2DB7E0B5373A61E868E31BE519CBCAE\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/14f0ae25-c99a-4415-8136-2c8298ae8056/311187358a73ed3f76557dbfc7a061ec/aspnetcore-runtime-3.0.0-preview5-19227-01-win-x64.zip\",\n            \"hash\": \"661F2C2B73F8D5F1EC3CA62F963BC6CAE23F569ED88EBD3A0FB70A8A10EB5133240F7B9CE0927BF88B3259FD3E9E511E36CB753AE54B00E0936DA5ECC5D905FE\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0daba0cb-2b7f-42b0-bf33-92bd58a5913d/439fe05a7aea1f713137d1de5173140d/aspnetcore-runtime-3.0.0-preview5-19227-01-win-x86.exe\",\n            \"hash\": \"F04FC845FB4136D0B6645B0A6C5CD93E1CA4DC2E551D3E898E15D4C10CE3CCE3F53AAC7F9FE7B413C419DB2B06792F2BCAC9F3FE09E21363767046DC73D2B2AA\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bd1697a3-51cc-4ed2-83a0-cbcfc9f39d10/7233165fd661268c625e3c353cb3fbcb/aspnetcore-runtime-3.0.0-preview5-19227-01-win-x86.zip\",\n            \"hash\": \"0337D95E82D41B575038D85EFDF162A31405B4964CAF3915908D17CFCC254E9F68070D2E29692E111CE38611323D0CE1CE211EE94EAB46050E9A1F66004171A7\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/41483896-e029-40ff-b167-b4dde24153e1/ccd755c56bc8cfeb38ef816e54deb906/dotnet-hosting-3.0.0-preview5-19227-01-win.exe\",\n            \"hash\": \"2D0C6E04AD07C4FC242C8A2BCEC75DC0EF1D1668F2FD2CFEDF822A90B0E43C5A1AF3668B13E5F2DF4F170D1C60ACC2C4F3AC4055F886011B150EAEC1555D9EB7\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": {\n        \"version\": \"3.0.0-preview5-27626-15\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/90074ec5-e4f9-4e6b-b6dc-131c0159ac6b/7643d117ef84ede1204e576abdb7d05d/aspnetcore-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"042791A4BB1E0E51FD17CE3BED0C4CC284D4D3A033B37BB80137A8C84A8D789B7C4858A4AAD96BE404F6872687D6A22794C40BB62FED80FA71C9D00013540A7E\"\n          },\n          {\n            \"name\": \"aspnetcore-tooling-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/369404f5-5904-4668-a719-63bd5ea01628/f980f8e11b1efb76ba645d4e84879ea6/aspnetcore-tooling-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"46ED3663B357AD3AC3DDFF46D93D3718A159F165F4DECC20321F3611A85A38D4D8022EE1DD2BBCE54EE4B0BC2B271FE89E2626F57B1F34F31828DBDA91E81EB0\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3299d878-83fb-42e9-b46d-0376c7e4a8b1/b6cfb1bda3779952e91c77fa40c93cc9/core-setup-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"DD929CE44F3C7D8338B061286094ABAF92657626A92B147DE77BC649B91E5D462B90DA6702D670552FAA7507B7568496C4F41AB6DE4A3E4CD82296A98924A0F8\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/57eb9cc2-35c0-40e6-862a-72e013635512/d67f5f9789c5ebb3345a38f7d72ba501/coreclr-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"2D4982EAB092CDB6F15F960CE3C91396B4618B29965FBB85DD1196ECF0DE09CB1648AE78252048F2DEBBF43CF934577E98E8F914248C2ACFF1CA9A55C514D9DE\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/585beb3f-a54a-4382-87cb-a92f22667502/807a02ba130426797811f4cc0ef1054c/corefx-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"644EBA02F99C8BC0ACF45A689F74057B03106550B5A724472CE78EE2A6989916770472F47C1284D97E8F64B8AF14C01651F67C000FDF45165FE384A8939DFB7F\"\n          },\n          {\n            \"name\": \"dotnet-trusted-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f28c3d63-ef3a-4795-a70b-d8be7009bb1f/cab25cab171b9dbf4a83b22b4e9eb4c9/dotnet-trusted-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"D430514CF8A43EE4756011D6C63E30AEF5F5D5C45C9B70748876EF4B6573445A4EFD5D743F8085AADE751484BA028DC3AD0152ECF2F963B3CA8EDE05320D6508\"\n          },\n          {\n            \"name\": \"entityframeworkcore-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/554f6d8e-3395-45bb-a748-9b1bf15c7d00/48a99ba761b75b2c8c30545da0e4fad3/entityframeworkcore-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"3003DCCB8D505E65D54398AE1F8AE422C755C1CCC0B733FF070BEA00E104D92DDF9CD3A5E927EFD5E43F3C2B8BDD3D3CCE5D0DEE3BFB2E220B66D4847F1CF8F8\"\n          },\n          {\n            \"name\": \"extensions-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/22772da4-4b7a-4eae-8e29-de6548668e5e/1eb8187a8da650add55559e85ac3e863/extensions-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"764D1F212B38B425F7C220400A841F4EDE538C005FE2BF86264951CB3C2EB23F8B5E9A16094AA276AA60F1E66FE695C714F127CE145941CC05999F1923C7905D\"\n          },\n          {\n            \"name\": \"linker-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f304886f-b84a-4c62-8869-51039e505741/916eb007f0383bbaffbf9392a1f0aa26/linker-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"4AB3F33592851A4C58C1F32B70D667112230EE3DF73B5E2DF470E0BF4072BBA3D9C0CC343F7E0414539BC47385FF4953936C4B9F288B8B140224CC543BC559F7\"\n          },\n          {\n            \"name\": \"msbuild-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b044dd97-91ab-4b8f-88f2-aca01ed7e6b3/42849a6c92a041a0c549ed936de5b7ff/msbuild-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"F9FF5B7DC79EACDC7002C8D7B5F1D3306CCDC39ED618B80E4AE9A7F6DFF34F344F55F4638629FE11998C0CE3458B3DEBB724D18CE6364EC6F6D23D6B4E931C44\"\n          },\n          {\n            \"name\": \"nuget.client-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/de7cc91b-ffd0-4687-a47b-f526800ca136/f2ce53386fb788ca597d8fdaf7b9e8a1/nuget.client-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"8C85FD0C3F9E179CA360A2D08B73D02F67773B8BC48A5204B455C84FF5AE52AC045E6702A8950F4EE2C218703DBA26EE28B29C0218DA84573FD03E613E0ADDD2\"\n          },\n          {\n            \"name\": \"roslyn-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b38be644-ff60-4c24-b28c-d5f74d46aa23/4e44ae2338b30401c64045aa233e1556/roslyn-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"622C74E9329925EBB1FC3CCD60031548A92D4C9BBBEA11705D9A0ACED61F7BDE7F14A2ADD62E505B1B2DE496113C3AD57333A7FF663E52ACBB1566F099838CFA\"\n          },\n          {\n            \"name\": \"standard-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/91c33e91-7a1d-4e29-9ebd-151f6d9c8fac/d8668854b5d3f6960fdfeb3fcb57d4dd/standard-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"20B39AAF589C531A2206EB5E39BEB73CFE44DB58909D1E03E97E2AF0F7276D5332D0B5807EAD3EE10837A410D1C71469091D045312D80E8F1F18220D3F2A003F\"\n          },\n          {\n            \"name\": \"templating-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5e9e39f8-d2c0-45e5-b545-f118d5fcdc63/a2031e8d5d6ef7aba7d2e2990df41249/templating-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"C2A2F8D3E99D3ABCA1F812114E6C8F0A920D89DAF142C4C269343E4E026C01F0A272F0AB5AEFC00D67DD1271DEF73E795483C94132652F2849A5BB40D21E843D\"\n          },\n          {\n            \"name\": \"visualfsharp-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/15eebc4e-aadf-4dd0-80df-48779f304619/7cfe576ed32643f50c6f291cde42a8f1/visualfsharp-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"520F040C6F84C7CF0363BD0C3097B0821A6F6621925A739671841357BD6CDD6E1DB783322AD9F1F34921C9EB7BEDAA82FEDF9D97D4A0DB3A211D0D7D61D8A9CF\"\n          },\n          {\n            \"name\": \"websdk-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0f85b1d0-3d13-48df-b945-ea3004951741/57c86e99f231e337599cb1ca2cb872e3/websdk-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"8C13AB04E3FDCEE6EAC13EA6B12A70E225C2DE23B14F4A45A91B7589C1CBD3CCC5A7273AAEBE8909932C8B423B2E2140700EE6FB5C2AC156103FCD9A404B7C8D\"\n          },\n          {\n            \"name\": \"winforms-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/12bd9ba5-21e0-446c-ad94-4fbaf786d70d/2f946135a4831f7e961158601d804aab/winforms-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"5CB8BE26B9DA8CD2A0438C27E4314458F3733F630C4B98D92725ED28AE80CE148655DE080F8B14C64E28854E21232E13100F57186A7441599E8B4A82A7B60DF5\"\n          },\n          {\n            \"name\": \"wpf-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bb3914d1-8d03-40ac-9211-efef6df1851b/a2686e68087d273f6bac1e0041b8f5ba/wpf-3.0.0-preview5-symbols.zip\",\n            \"hash\": \"147CFD7A83F80914B5AFDEF840F4F62D4004F9AD3F176265EA844EF119AAE4101239721A834349D65332F4F27BB4DD78522FCD4C94D1488765142C287D0D454C\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-04-18\",\n      \"release-version\": \"3.0.0-preview4\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-preview4.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-preview4-27615-11\",\n        \"version-display\": \"3.0.0-preview4\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-linux-arm.tar.gz\",\n            \"hash\": \"0207FE62DFBD70B70CA38F0C8A4F4018F0D1E985257A56DFCF7BC2C3225D3D4A6932A6E4B4DBF9985E47801A4F26E14FB28EB8FE6DC27EB22E76EC216A4A8451\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-linux-arm64.tar.gz\",\n            \"hash\": \"5D5170978DD7DE1D8CFB0D5034F6AE33AA8FE1B2AC01CE77D4041A3CB5E73AA074B490C543E80FABC9A7CAD352368D62F632CBF03565B189DCBF919E43FA43F8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-linux-musl-x64.tar.gz\",\n            \"hash\": \"6F0ED3E269C4F9BCCAC13DA70A310BB778C5173520E961A175C421328F9440BACC7169622AABB87525D39BCA3E667C643DF9B21DFC43D97DE89E595EB518C904\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-linux-x64.tar.gz\",\n            \"hash\": \"45D4C937D062ADBA04BC214DF266DD9640EFA9A7FE79F42B10B60169A6C4B300CBE92D75C8210954563361F4E660C3F11C477F6CDDB98C3392CFA797DC4C092C\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-osx-x64.pkg\",\n            \"hash\": \"178836DAC8E6893061859FAE4F98CB1AB437BE165C40110DD22929EDBB6C0AE36CAEF9DA318D59868F6198EFD010C9A74795F232AC2ABD721D9DE4C23313BD2A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-osx-x64.tar.gz\",\n            \"hash\": \"0ED886002A712409D9C8A00056429A2F295126024E2DCCA405D01104288AAF28FF1F30ECA60B83F039A84070799C60AE859B1A45A696EF48D72B14D3276B2A52\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-rhel.6-x64.tar.gz\",\n            \"hash\": \"78BA2C678AEC24AFD02D62754D1EE8F7D92717B7A10348327974C7074C27E0E33DD3E702578D46DC155FF6C656069419AB9675E0336840380450A047C8EE93EF\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-win-arm.zip\",\n            \"hash\": \"F2BD6F9DE857420FD1F7A85EAA6191CDBBB81E3F9D5E030ADAC661BA533353EBADCBCCA975D8BAE8BA80A5A5DB3554F05AB32C0618ED840E7E62FFE30A46546E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-win-x64.exe\",\n            \"hash\": \"DEBAB6419934EC9DBDCBD0C6720C2BFA463CE7DFF1AB130B67E742EDEC420404C97638D2A5CFCBCCA95E7EB4ADF442066A81180A4B70680B9D42E79F38582BA7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-win-x64.zip\",\n            \"hash\": \"B53C7B2FD327AC077A954B813DFD3CB82A6A2FD6B3D4B8420EE9146A71574ADFD75514C6BE1F7A267F99966B8714B70BA6C2813564452311C03ED87CDEE1DDB9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-win-x86.exe\",\n            \"hash\": \"D6611061B3CD03EAC8823C005980E69996DC219A4B752220635969B1C0D98CEFAD8A5A8F07A9BF7C97DC1D7EE53882B9993B73A786B9015BF6B6303BA651692B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview4-27615-11/dotnet-runtime-3.0.0-preview4-27615-11-win-x86.zip\",\n            \"hash\": \"28A334942767A6C04F95A3D0820BAE892437271F6A5188B66A69F4E9838DE7BF44C09476E82B7CBDA2600B692A6159EC0757071F18D81F3D4137E65EA83DA0EF\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-preview4-011223\",\n        \"version-display\": \"3.0.100-preview4\",\n        \"runtime-version\": \"3.0.0-preview4-27615-11\",\n        \"vs-version\": null,\n        \"vs-support\": \"Visual Studio 2019 (v16.1, latest preview)\",\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"4.6\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-linux-arm.tar.gz\",\n            \"hash\": \"806C7E66009D4D097918F449A82426B6A631571A12CE2A1AE53C025BBE65D4DB76C3EF3C6D6C2E56C40C4998055BC858AF98A2B901FB3BA5F243A81565B04C00\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-linux-arm64.tar.gz\",\n            \"hash\": \"F06AF9D8291D7A6967A9F17E3981C3A536EB008C8C71E5FB10423964088E05315B8D2B1DC1B6B404F5EDE1390BD09D6652AD036AF052A305E83899CF8DA28433\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-linux-musl-x64.tar.gz\",\n            \"hash\": \"3F2B14788D14D55AE25E9F7C2D738E14CA7F2117C43C371A94DBF4FBAB40DFAACDED494D9908FB22DB3E5D03D9D4C68EB122E43FAE48A2948563482ADA1D011B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-linux-x64.tar.gz\",\n            \"hash\": \"B416DD4014AD62C7D19413C44738F1CC6152C94570C31DC953BE16BFEADECF449B2AAB7ECC09C9D3FCD12B2D440F281A0C8F1AD0635BC035ADB34C26F8D1E2AE\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/76e25984-7108-4fb8-8aed-556199384b4a/e010fe0a188dabb738c9957dda6bea0e/dotnet-sdk-3.0.100-preview4-011223-osx-gs-x64.pkg\",\n            \"hash\": \"DB162851C6261610DB505195C2DC60FDB547645BDAC24CB2925547A77C86FD645D3DEE4CCD9E837134B9AEC666F0D620FD54D8B80A5EF9B966CD56D88AA05D01\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-osx-x64.pkg\",\n            \"hash\": \"DB162851C6261610DB505195C2DC60FDB547645BDAC24CB2925547A77C86FD645D3DEE4CCD9E837134B9AEC666F0D620FD54D8B80A5EF9B966CD56D88AA05D01\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-osx-x64.tar.gz\",\n            \"hash\": \"EC4A0ECD1AC95190072C648D83BF24A83117F6CA3ED5F7F22E0F262028BE3567B1C518201BD94B06D7642DAC7FB7189A7B693367DCFEA463FE8939BF4B9540E0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-rhel.6-x64.tar.gz\",\n            \"hash\": \"C8637C837F5617F0045A2ACFED7E3C7B4F6ADC4C657A71E4249BC51C178219DF6117B2D9F3861C6ED99EABCFB97192BDC9B72F13D0A32831DBE71064290039E5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-win-arm.zip\",\n            \"hash\": \"8A76C7DF80CB702E0DC46F6D66AC2E0F7EB2A454FB2C2E8E8DF5614DBBD04EF4B6EFA66A9409417344AF0580D66784B2D288EA2288F8378D1B517C9D75B5FA98\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cc143315-efac-4ef2-a60b-185cb1570ea1/c09bd8113d2b383f8849dc6b49ffa937/dotnet-sdk-3.0.100-preview4-011223-win-gs-x64.exe\",\n            \"hash\": \"13AE848788F1309CB49459823B23E435F0C79829BAB846B2AFEAA42099FB00DC7DA81CA442DF77C20E64DC2F5EDE9096F378279612771D972572857E5E8A2F2A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/bc5a238f-4399-42d7-b133-a114f6746484/4d09dd3e1fa48fbcd8308871a466e007/dotnet-sdk-3.0.100-preview4-011223-win-gs-x86.exe\",\n            \"hash\": \"784C9621617745CAB5F986E386BAB2CD4E338D706CA06CBD82B4994F5722F8B4909166CE0120BC498F7EA4DB27A0423407F95029C00F21638949AAC1C86D7688\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-win-x64.exe\",\n            \"hash\": \"13AE848788F1309CB49459823B23E435F0C79829BAB846B2AFEAA42099FB00DC7DA81CA442DF77C20E64DC2F5EDE9096F378279612771D972572857E5E8A2F2A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-win-x64.zip\",\n            \"hash\": \"2E208318A513315D7431F756AF8689B7E7915F9AE1C6DEC7D182BA14D874D7ACD006C1066D0CCDC41B1E9136A08B7B21B43AD3916960C970F31E503646DF516D\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-win-x86.exe\",\n            \"hash\": \"784C9621617745CAB5F986E386BAB2CD4E338D706CA06CBD82B4994F5722F8B4909166CE0120BC498F7EA4DB27A0423407F95029C00F21638949AAC1C86D7688\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview4-011223/dotnet-sdk-3.0.100-preview4-011223-win-x86.zip\",\n            \"hash\": \"7F91618A9DF73D1F2352EC3A248FACB2CCFFF3C687CAEDABC0D82E21575D777BE3955A3893443479BAB1C098E36EC5E4A9EAB03285C59BC1599516A7B3F17F82\"\n          }\n        ]\n      },\n      \"sdks\": null,\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-preview4-27615-11\",\n        \"version-display\": \"3.0.0-preview4\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19106.0\"\n        ],\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0c4d44a8-3ccd-45f4-994f-ea93008226eb/c4088c9872670837bb2fa55162fd5c77/aspnetcore-runtime-3.0.0-preview4-19216-03-linux-arm.tar.gz\",\n            \"hash\": \"34DC21026E75EA05E33F9B21249DE438598CBA8ACF851FAC9418D9EB2AE0BEA9A31AF14BA8454C921C50F8C16EF6F40B383BB1654347FAB80962E4EA7F5BACCA\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/cfa0ebe9-c4f8-4e1c-b777-57a5e0d66bb7/5344f7c1fdab4400102b46e04c2eff3b/aspnetcore-runtime-3.0.0-preview4-19216-03-linux-arm64.tar.gz\",\n            \"hash\": \"D6CF82216260F1FD4CD4D58F5991685AF8D103E2A1B084CBC1BA8044EAE77F2F60158DB58D0DAF223D9F17207EED7BB0C628E53DCCBE8E29E627EAEA759A6AD9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4c88d509-2236-40e5-9797-3e6681ed278d/3011a1d03fd89eed089bd3ce44baa6b9/aspnetcore-runtime-3.0.0-preview4-19216-03-linux-musl-x64.tar.gz\",\n            \"hash\": \"335B56D35FC7F6379AD470352BBD1A2571388DDF050EB256A67FE7A0911CAA9F96B560B1C5AFA0DE47D3605EE3C2B5A80478C5A197027F3C1A3EB3E681C047DC\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/efe3f589-6a9e-4c05-95ca-a514188d048a/b81d36316bc4406efd37df0419691208/aspnetcore-runtime-3.0.0-preview4-19216-03-linux-x64.tar.gz\",\n            \"hash\": \"BF22533969A67D3BD5E16CB5A5C64C63B9AC99CD69BA6C6A04384E3B786CDB80196A61FB0A69706F5C24A44636A17BA86DD35A2C3D4E43F7447CB6BEFC198327\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c7d3a630-4c69-47bd-b4af-654e77514d20/6b15853d4c0e45637e01b37983652cc9/aspnetcore-runtime-3.0.0-preview4-19216-03-osx-x64.tar.gz\",\n            \"hash\": \"E442E5C44C35E9F7DA0C92ECC41C8F82A24F25FED515F366EE359A1E90DC8E7C1782D14AD81B348214B9C4FECD4D5EF10FBEAB03081494D333F2046DDA595157\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/06f50bbd-1a2a-4cfd-ba58-3dd5e573cd2b/e94ff22b6065272fa5499649a64b2e45/aspnetcore-runtime-3.0.0-preview4-19216-03-win-arm.zip\",\n            \"hash\": \"79B006517280E8DB9E41EF645FCE5E72B03D8D32F3796A9D5FFEC75F3DE499A8717B767001A3EF3EC026EE09BB1AF7D01E2628EABE0BF2DE7C2A73C9C76F7C1E\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6963b6d0-6335-48c9-8bd5-8e418ce9df27/7412bc71723b27c40667b082533f6e99/aspnetcore-runtime-3.0.0-preview4-19216-03-win-x64.exe\",\n            \"hash\": \"FEAF7FCA7FEFDA965C93FADB6997F21FC4D0C1BC61988C57374BC344D2DBEF4A13EB77200090F191E310F4729E3F939E54E256765B18884A7902BD7FBBE6463D\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8cd7ca69-40cc-461f-ae97-d50d73b424f4/39638454092a873e5680af2d7e496373/aspnetcore-runtime-3.0.0-preview4-19216-03-win-x64.zip\",\n            \"hash\": \"B73E49C4C12620041B51C34FCFA81CED5DE75533D78B8B99FE580094029DF6F4BD0A0B1C159AC0CB70519EE3CE37851E4546D04BB0A14125B36E3D7B86BC2725\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8c1dad0a-4f29-41c2-9f73-f6339f80d127/a75e7316bf4dfa497992ddc22c5cae05/aspnetcore-runtime-3.0.0-preview4-19216-03-win-x86.exe\",\n            \"hash\": \"CA1424A0D55160427A67E0B2B7D76F9CAB6AC297D46D5F96C726207771278CE41EAEF545CA5BEBC9474BBAB72C47D64CE9A770B661AD324876527F7B6C290DE5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/709aa675-f1ca-4efe-80c8-67795696c882/c6c59a222f722b9c755e6b5662133c95/aspnetcore-runtime-3.0.0-preview4-19216-03-win-x86.zip\",\n            \"hash\": \"108EE2F2F67730CB6812609DEE9D3261A642695758D694224401889424064B270466EBEB136A45042F491327555391F355D573B66127B8EED157A19D2F984B6D\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1a4373cf-d4ed-4aa7-b3e1-49f5ddb9cb22/f410589b3d4ddd4f0bca9a466bb64ce3/dotnet-hosting-3.0.0-preview4-19216-03-win.exe\",\n            \"hash\": \"FE0BD4C364025B4EC260FC36BB2EBC6E8806FE169C4206EF5C34C88FDF3C7BF00856AC1D1FEB2B9BF0893CF7A16FE5CB0CAB28D2D61DB25777900A73FD0B50A7\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": {\n        \"version\": \"3.0.0-preview4-27615-11\",\n        \"files\": [\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/61fb6716-1c35-4833-b7bd-d1952458ad5c/f1387df70c4fe1722f6aeae81efd6c9c/core-setup-3.0.0-preview4-symbols.zip\",\n            \"hash\": \"338D9EA530502C1F6B4B0D3A264C94C592BA06AFE2E9DCAF9AEE3A6B513565C019F3246C44BABCD46F07C0E2F5EABD9D7B0038306567E9FB8EF504495AF7850F\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/21e51454-1796-4d75-bda3-62cfc609e0ad/ffcf37fcc73043554a18a64a43f62ab4/coreclr-3.0.0-preview4-symbols.zip\",\n            \"hash\": \"FA2F0A483EC84433CF29D2D2FB9E8B74CFE150668E86DFA19FCADE18A6196694FBF48200CF0EE4B1CAAB33EDBAF7E1898DCDE6E462D9411793FA60323376EFDA\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/459e521e-3a07-443b-8bda-5551589b5137/b71f1121008551eec5c0bac3cfcb44ea/corefx-3.0.0-preview4-symbols.zip\",\n            \"hash\": \"8494A94A1AE8F057637F930879AB6F75AC825421713D4D011242075F7BF039C87C5E90EB08169493EE36C03B05EEFD5EF37B8761CDB4AF0440405979EE7FA1D6\"\n          },\n          {\n            \"name\": \"dotnet-trusted-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0c77038c-bf98-418a-b2ac-9d64dadfa4d4/f788cc2ba2d1ea7ba57f32e6065af155/dotnet-trusted-3.0.0-preview4-symbols.zip\",\n            \"hash\": \"33A79E6E0185ADB28E27A2D292BA07F21D22E8D2B3111208EAF86D5FFFEEE6A97175F7156572BAC60C4A5A80323ACB92C21063E0D96B06A4140DA1F6E4F84C5B\"\n          },\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d5d0ef3f-e495-4394-82bf-5b3b1e2db8f2/ba5c2e7e94516602373c764d4a467eb6/aspnet-3.0.0-preview4-symbols.zip\",\n            \"hash\": \"4953C8B7D0036D13CCB1E5961E23C4ACA928C7DEA3D5B419A9A0923C9D252344CA8122725E2985C7984F29A1C70B12578C59B105EB8CA2007BA127E775A496D3\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-03-06\",\n      \"release-version\": \"3.0.0-preview3\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-preview3.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-preview3-27503-5\",\n        \"version-display\": \"3.0.0-preview3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-linux-arm.tar.gz\",\n            \"hash\": \"3521C2E8C5220168D1B1BF52BC99C3DDFEFA7B0A6C61A34FF07A59642AB586991F3C6BD7BDD8EA71B5CFF3AEC2FC05601C55E5858134511D939AEB9AA7687066\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-linux-arm64.tar.gz\",\n            \"hash\": \"0EA71389AA24B84FB654953920F91159A1B1239F092E75E83D8BC09B2233858168952F8BE85C761A70E465E8887CCC914A2B9C3E7351B258D798D1E57E9676ED\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-linux-musl-x64.tar.gz\",\n            \"hash\": \"B90AC0727EE4A1C16488BA77A1BA0BAA0ACBB1202B49DD9DA01B7C6672E6C6C85899DDBFA3F6BE886BACAF5E2D9D955ACAA365D83ED8155D430B1C4029B80D10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-linux-x64.tar.gz\",\n            \"hash\": \"4B4B25BB8DA54160687B2F325E9C8ED4CF9768FE61A0BFA46DF302E9873EE036956FF8AEBA509B472C7BD2EE7C802DEC8173D33E616CC944DB6429725BF2C670\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-osx-x64.pkg\",\n            \"hash\": \"CBAF977E66E7FECC1FC8431CAE335910944E41431DC363B7814A5C1000C6208C94AA1858903BCD02E2F23D848096767FFD9B18A1E550B05CFBFAB4A44905480A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-osx-x64.tar.gz\",\n            \"hash\": \"102FB95E2009B98E2134DFED72C12DAF72C7345FEC5EA57C24FD0FD35822BAF80AF2625F936F3F2250960AD9AC44357CAA8A3612CB310C04D8A8BD97B7A135D2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-rhel.6-x64.tar.gz\",\n            \"hash\": \"18B7B41482A43099935C01ECBDB9C8DC47348A7E88BEB544BF0B9288C2DB9FD0A7EA18DCA8F2949F821EC0A23B84B92E402CA012A52ADA7FF7B6CC67391A5D35\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-win-arm.zip\",\n            \"hash\": \"4BF045E1F01001C3F82CDD55081BE85EF5F4F5B29E10BFC359CD90E53443197393DF6ADA0599E282D43492F8B6221A792467252C0EA371E315E3C4CCEDDD2B88\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-win-x64.exe\",\n            \"hash\": \"CA70A032EAA397281EB15BA9892E0684F08CF17BD64C1EF04D09AAD5D49002A3B8746F7301FECA11F000B0CCA5966EA014011267238112985BEECC0918BE6263\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-win-x64.zip\",\n            \"hash\": \"46901BCC7AABA924AF20E4187A2C9FD88C6CE246B6540278BE686BED3F622BCB64F1B9A7E82C3352DE6989988AAF1510551550EF86133EAD35646454212F40E7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-win-x86.exe\",\n            \"hash\": \"9A31A8833956947BF3AB5EC55217807D5283FE1812DBEFF7F80C24AB10B9553FAAF3B87DEBFF4FF38DCE708CF1F38CBC307B7EB11E81E26FA6B46C4338EA6673\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview3-27503-5/dotnet-runtime-3.0.0-preview3-27503-5-win-x86.zip\",\n            \"hash\": \"23A7B75FB84DADE74833003F151FEA93E442DF22C51D325CFBAF1AA9C22CBB32F6C80E3D69812004DFC84AE428E0C5F187871BE051DD2474856C43FCDC40BB2E\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-preview3-010431\",\n        \"version-display\": \"3.0.100-preview3\",\n        \"runtime-version\": \"3.0.0-preview3-27503-5\",\n        \"vs-version\": null,\n        \"vs-support\": null,\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"4.6\",\n        \"vb-version\": null,\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-linux-arm.tar.gz\",\n            \"hash\": \"189696C006E27418462C993A84001B07138ECB53E3BEE3EE91AF4B21D6AF88935B22FB3DA67E705D4441CB4383765E99EB555F2B6556658002EDA0F7D47E2391\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-linux-arm64.tar.gz\",\n            \"hash\": \"CC15D0509D47BBAF13322F7EE23990CC2C3A71FAD1B577D0455303F2F9C7ED05EA6775F9E79664B1DAF195B46511852F6251AC1D2FB73E6CB607B335965288D3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-linux-musl-x64.tar.gz\",\n            \"hash\": \"C3BD7EDB1259CD6E872CEE91C05F394E9B0D56A0759CBA472C7AD96FF2A373FCD28319DEB0DD56C3DC0CD3D6C5D28A54C2B6B7A5F6A70AFD1B8AADE65C573F76\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-linux-x64.tar.gz\",\n            \"hash\": \"EAA1208590E60A793CAA8A35E9A26722A4E3BCD8733EA1F79D18C7A777E1A5A8E9D82EDDABBD18B82D8795838E6DFC3B5EC7C4504E58C0C852F2D69D40131CFE\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1596788d-f5c8-451f-8587-dd583ad7db3c/f3038ad1cd239af046ef0d47b01602a9/dotnet-sdk-3.0.100-preview3-010431-osx-gs-x64.pkg\",\n            \"hash\": \"392C58D30ECEC45F5EEA3EEDFFC419F2D5A0FDE3B4C0A8ED187899425582D500366565AC5E204424979D7375D3C45D13A0746D9F1840512B106EA3DABDC7B9CB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-osx-x64.pkg\",\n            \"hash\": \"392C58D30ECEC45F5EEA3EEDFFC419F2D5A0FDE3B4C0A8ED187899425582D500366565AC5E204424979D7375D3C45D13A0746D9F1840512B106EA3DABDC7B9CB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-osx-x64.tar.gz\",\n            \"hash\": \"7A635A9DF659DD57E5326E56DA3D9EE518FBD033F48886EB8A57A180666DD6F8696550B6C4672340F7DB1300020BAA7C6B16CD84D74FF46A4D7E62069EF5FF65\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-rhel.6-x64.tar.gz\",\n            \"hash\": \"5C97D09DD73BF24E3DCACACE7EF0B8D7BB09B19641D91E72D94A2E6EB437A9A28EDD389B209E78F40180D6D23DAA26EBE5FF70AA538655317C9549D76234C7CB\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-win-arm.zip\",\n            \"hash\": \"DF9EE41969622848D494DA6CB35B0F809680BF14E5A6B4453A184EC2619D860F0DF4AAB5112D93EBDEFB948750E6F318860D90A548406F1C516638E660153330\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d6736e55-38c2-4bc5-8043-53173aea4255/09bf44ebaed251c59964d8c33172826e/dotnet-sdk-3.0.100-preview3-010431-win-gs-x64.exe\",\n            \"hash\": \"121CC460A2BFE7E164CCB8026DBDE5EA8A7171B7265F4323764837B236D207638614532F91F44F381683023DA099E7688CA19B03BD78336B476104A252E33536\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b367c2e3-733c-45e7-97b8-f734d3abcd06/537bc9093e259236c79071d24f8f3cf9/dotnet-sdk-3.0.100-preview3-010431-win-gs-x86.exe\",\n            \"hash\": \"6E104CBF638947B9D37B5C019A6099F738DBCF18177603DDB884EAB6CA7477298D8DA76A7FC602BD63FED3D3E3BBA8BB72E05C4FAF3CD6E85B748A6DA4909515\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-win-x64.exe\",\n            \"hash\": \"121CC460A2BFE7E164CCB8026DBDE5EA8A7171B7265F4323764837B236D207638614532F91F44F381683023DA099E7688CA19B03BD78336B476104A252E33536\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-win-x64.zip\",\n            \"hash\": \"60EF0FEE5107243066EE68CFD9591746DF281FFCEBA197AA9ACBBBEB319DA753965B8A923947860AEAA29A58A213CCE466847C0C05829A2A6D6C335445E4B2BF\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-win-x86.exe\",\n            \"hash\": \"6E104CBF638947B9D37B5C019A6099F738DBCF18177603DDB884EAB6CA7477298D8DA76A7FC602BD63FED3D3E3BBA8BB72E05C4FAF3CD6E85B748A6DA4909515\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview3-010431/dotnet-sdk-3.0.100-preview3-010431-win-x86.zip\",\n            \"hash\": \"C348FD6674EED5EF1F9C870BB63BC2288F1A94BD7A8D288609BF24F01C3217513564258B55AE5D96D77186C2B3B6B47E3A7638191835A8D25E3CDA3CEC4D1DC1\"\n          }\n        ]\n      },\n      \"sdks\": null,\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-preview3-27503-5\",\n        \"version-display\": \"3.0.0-preview3\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19063.0\"\n        ],\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/44c55f6b-2c22-4823-8e42-2a1140b4cf1f/f901b96aae5b4fcedc4d43235c1db5df/aspnetcore-runtime-3.0.0-preview3-19153-02-linux-arm.tar.gz\",\n            \"hash\": \"DB6A7D2590DD4F31197815FE5CF4F1FB5EC78101365B54F9AF65BBE54F73CBA2BFE3A2BF139464A6C2084EFD972B7ECEE6566D8501E1B239E3F056FAE7181C14\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d5838f73-108c-4b76-ade8-c53bcbdba5e1/827a390e239b74c97f2295cdfa281031/aspnetcore-runtime-3.0.0-preview3-19153-02-linux-arm64.tar.gz\",\n            \"hash\": \"0F45DE305AA1F640EEDB8645FDB031AD90E22B5E6CDDC4B4458FF6E080005255D5FC3DE02C15015B3BEEE756601975B4DAEC2DFDC3774942F07EC8ECF36883BD\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/af4b8486-585b-42c0-b6a6-3723f9e5fbce/1906bae4f0da82eb5b922bad4d1f1e11/aspnetcore-runtime-3.0.0-preview3-19153-02-linux-musl-x64.tar.gz\",\n            \"hash\": \"5F52FF31AD0C63A1E7C9AF2C4BB9FCE45ACADF770A0000001481C13BF4FB7155F12A7AE7AE82497203F2CED6DB6574234CD78489581628C01923973FF3B75A3F\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4ddc5034-7154-4614-a1ec-7bae47977be7/4c78edf3c60b073805a8483086676934/aspnetcore-runtime-3.0.0-preview3-19153-02-linux-x64.tar.gz\",\n            \"hash\": \"53B591352DED7F09A0535FFB8B65CFD6E4B6F813DCAEF0124150A96092EFAB8F75B12A4D42D593F0D80640E56566D7F6A8EE6F40FE74BFE236E0408511EA033D\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ad88ebb0-0938-4655-b46d-2ba9174a15bc/69115f4dde714fb55ec46f78bc386d13/aspnetcore-runtime-3.0.0-preview3-19153-02-osx-x64.tar.gz\",\n            \"hash\": \"D4BF725307A4569E6E39F2413107C80912817E29DF22D045C7D34372CE0D6AC638CE6E312FB357C5D306023A59BEF2737E2D8C8037F206B38B3D725C5DE3D664\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/40d4f666-aebc-4f3e-aad9-1a2645eadf30/cdab78650de7a79d335fa94e61af99c1/aspnetcore-runtime-3.0.0-preview3-19153-02-win-arm.zip\",\n            \"hash\": \"E89D47FB36DFC41C4CD73DE51459A05C5867E2F81F856D22B6392BD30B543DFD8AB87B56B768197B2496C1580DE3E6AC0A690F41FBCC374827D00C79F73A4C58\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b6fcffcd-c92c-40b4-90e0-6fd20ebdd1b4/e85f36c4d41694d7d4f84e55ddff27b6/aspnetcore-runtime-3.0.0-preview3-19153-02-win-x64.exe\",\n            \"hash\": \"73FE4A720F26FAB5618FA093AFD3F23B6BA955B2FCFEE66E4208EA08F53444B0FBAFD52CFD791C27EBF9D5BA6B4E9F2615DEE8AB15C3FCD6DF8B1637F4B33209\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ea523a80-4499-4c9a-acc1-ed6a6fd939d8/728ab0ab36b5015bdce777400bd74d21/aspnetcore-runtime-3.0.0-preview3-19153-02-win-x64.zip\",\n            \"hash\": \"B1AA091400B8122A17ED6597436355D39575E93ABDF53705D69DEEF68C4B2DD9189FDD03264021F9206FEB5E78EC406156EE041E2974BD1017B4285E31524B94\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ed6fd9b1-95fa-4cd6-a2c0-38c19a02b782/1f286f9539c0452dc7431bd5ad8a3881/aspnetcore-runtime-3.0.0-preview3-19153-02-win-x86.exe\",\n            \"hash\": \"05359583151479058C1B5990F94715D405DE49106893F12E6082F26C0062DC3A0650BF55246C2BE136C21852D914924CDEEFAA4322F885A3ED30264BDD1EB677\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9aa32bd5-1a85-485f-9408-92f61a81187d/2a34986ff5df46ab6de09ab9bdeed639/aspnetcore-runtime-3.0.0-preview3-19153-02-win-x86.zip\",\n            \"hash\": \"6CF6E6C6BFA636601E2D25496D8305780FC8616FB54AC1FF9B35F21F53A413E2374A800EEC19E6D481123DAEF52494D6686BF039A02802C2293F3E01B5097502\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": {\n        \"version\": \"3.0.0-preview3-27503-5\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/361b2318-a494-48f2-9af3-9799a51da164/4e8548d354b6cbf6435f3291226c78e7/aspnet-3.0.0-preview3-symbols.zip\",\n            \"hash\": \"0C4C890864673CC958C1B77A579E8AFF2CB525108E9C619E178BFC796DA58A29C27E63AE0E7DD974EC760740B3556A233CDDCAAFD6FF328F88F8051C8C514E85\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5afd460b-2dfd-433e-a00b-be06d7ee1912/cdbdda4e5d7048d64d55555c4ee0905c/core-setup-3.0.0-preview3-symbols.zip\",\n            \"hash\": \"D4A8AD8CC66D2746A6BF00E6BDEE19115716E1D1529E268F5A7480CA810BDAD7936FF94C7DF8B0BD65313C3965D45B53E99BE7D04A7D0768A13CCE6D8B995EB5\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b696eb22-1be3-43c8-abf0-8d9d11398961/1098113b86572161451a56c934f60080/coreclr-3.0.0-preview3-symbols.zip\",\n            \"hash\": \"5BD0A79423E9762A386CE2A474B5C0AB45836021C5A7C896897ED74B8A0BF0510C69F6ABDE1A799826C84A20DD67D49CA9ABE6CF1225AB9D8228785976F7D159\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b658336a-b844-47c9-8739-afdb64883cbf/ad090ed416cf7b5959259461defbb021/corefx-3.0.0-preview3-symbols.zip\",\n            \"hash\": \"6F914451C3F7F88EAE09B4014D64F0A52F8C33E3BC2460A0FE61524A900C2DA9C6C2B184C3E6F83D46CEC88936773A8A6E93E8FAB7397EA4BE482DD7D6DA18D4\"\n          },\n          {\n            \"name\": \"dotnet-trusted-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/80c1ee91-4281-4f37-9d87-9fbdc5fa63a5/9b995f857ff52f79fe40b1e8261fea9b/dotnet-trusted-3.0.0-preview3-symbols.zip\",\n            \"hash\": \"6B921D301A90207825158F3B71F0508EE81691595CA0DD1BB96485B5955781D1CC12B61B6D3E25EF21DAB0E8E86C182B77823F6DD10C4F70BDCE6C0CA3BA73F1\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2019-01-29\",\n      \"release-version\": \"3.0.0-preview2\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-preview2.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-preview-27324-5\",\n        \"version-display\": \"3.0.0-preview2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-linux-arm.tar.gz\",\n            \"hash\": \"3BE4B25B96C089A37CA863CD65540A5AFA9E01F0AE4A4C29CF9AA4DF53F5428FEFB286C567F7ABEE9DA955BBE11B1C6008A30475D83D62AD0A77154E9DB5C038\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-linux-arm64.tar.gz\",\n            \"hash\": \"ED46906C1EF5C0A234768D42B2B942165BACE894FE3AC40D5A760F95E6EA086A7AC2C53ED2189BC82088D6369D26776E27A9F408B561650A7268C1C88322AEB5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-linux-musl-x64.tar.gz\",\n            \"hash\": \"D8F55ED89D687E405EE9147065DFEB8320F8FACF09C5831E51D8E24B95E7F1D683F0CB0B23304D19A4AB2626B05EC23810624B08CC3AF1FC84BE3CDC3BB89802\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-linux-x64.tar.gz\",\n            \"hash\": \"99BC012E4ACE111C13652BC5B82170A8E4E7CA4098526108EADB2DBF166DBBC78E5A7589D5C654D16E6F304DC1B7BFE1C0A9086A152F56CF3F23A8E01FC0B064\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-osx-x64.pkg\",\n            \"hash\": \"17E5D2952F24546942B47F6FAEA8BA87DE3A63195EB43B591F7F85A663ECED69717D0FBE7683AF7D461077FCF656B1F806DA20818BFB5E9ADF8AC300137F20B3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-osx-x64.tar.gz\",\n            \"hash\": \"FEBC6C7EFE442621DA9080AEB536B873D4549B0043ADA5465E143AA9A6A15770C66BD9E8888549FC489E0A0A2767A9B47C29FB7AD70C7A571B55DC4811467CE2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-rhel.6-x64.tar.gz\",\n            \"hash\": \"BF255732374F0D4A39B0D63A92333B112FF8F4D5D35D5FE60EF3ED069F9474832766BD445A428D587F7529E90457310397780EDBF3D511FD4639B4A331BE4C13\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-win-arm.zip\",\n            \"hash\": \"6D82821C51A3F38DB95747FA1010307BF9F753D59285197898C8A295E25BB2339EC4EFA03C97B37BF76D299344D5B03793FDC4A4BA7BB8762CC1DB3DDB6AC4B8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-win-arm64.zip\",\n            \"hash\": \"BA87F4544911AED0D6241CF27C485E32100475B7E2DD82BF47E5FF5DA7C5CA9ECFF2CBAC011D7923FF14031CC5163411BFFF20F04F8B4DAF5827B94DF47CE448\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-win-x64.exe\",\n            \"hash\": \"76F53862C9B3755D0643029539C0D258AC70B66EA2191A2E7DE8920D74B10790B26F26E50FB01871EA5A0B47365E9DA41F9239DAEB7A09A4AB8812FB07A49BDC\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-win-x64.zip\",\n            \"hash\": \"463500279A57AA36306026DF78853981C9224D365DC48F4785359DCA3B9B535553F18BF8F423493FBD1C84776AFBAB4FCC095C17B82EDA1DE0B452882CABE547\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-win-x86.exe\",\n            \"hash\": \"2472863B4B37BE6C91DC67B95777D1F0B06B2A5380324939BD515FFC7EFA6B0D13FDDA4F53CDF5C9EA728A3054098EF8A459CD513EFAAE39139AFE2E615BCCDC\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27324-5/dotnet-runtime-3.0.0-preview-27324-5-win-x86.zip\",\n            \"hash\": \"D3E42933DEBAB4D18FB929F4B8109BB122808AD6F76A943690662386656D82481C152372A48F1396CC29CCD4394BDF99431F75FBFE1358EBD1542C9A95D1E3C0\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-preview-010184\",\n        \"version-display\": \"3.0.100-preview2\",\n        \"runtime-version\": \"3.0.0-preview-27324-5\",\n        \"vs-version\": null,\n        \"vs-support\": null,\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"10.4.0-rtm-181207-02\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-linux-arm.tar.gz\",\n            \"hash\": \"D87144969CACB4730F630B4A6BCD5D103A64F278F1F5824A092C73BD30A86881021ABD593467FC6A282CD3476FF96A5C60791AD8A9A4BF1929D71C4FB2F2CF1C\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-linux-arm64.tar.gz\",\n            \"hash\": \"3FD7338FDBCC194CDC4A7472A0639189830ABA4F653726094A85469B383BD3DC005E3DAD4427FEE398F76B40B415CBD21B462BD68AF21169B283F44325598305\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-linux-musl-x64.tar.gz\",\n            \"hash\": \"A51CD98AC12B8CC3FE58334602768AB998F6BA654ACAABA2A13EDDB362CF174433BA6C72931A6239555CE4A8FFA4CBCC8F091C5D06154ACDE26685F0D6BDB10A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-linux-x64.tar.gz\",\n            \"hash\": \"DBEFE65B5409A8FCCD5E150560073A0487159016AC52A98EC460EE161A77E63B86E10548E45F3166F1FAF38FA9CF805B6F469DD75F2F008E5E769776C8B63777\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/60046b90-03b4-4332-bc4b-0d09cc1a21c2/d9c6632f9ae6ad3bf5305c20566b9a0d/dotnet-sdk-3.0.100-preview-010184-osx-gs-x64.pkg\",\n            \"hash\": \"DA40671AAC593E45399BC500010598CA977378BAAA815B94C774379B402925B407144F284F1335563E34098C12211B62A4808D004815051B2C8A8F2FAEF0AEC7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-osx-x64.pkg\",\n            \"hash\": \"DA40671AAC593E45399BC500010598CA977378BAAA815B94C774379B402925B407144F284F1335563E34098C12211B62A4808D004815051B2C8A8F2FAEF0AEC7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-osx-x64.tar.gz\",\n            \"hash\": \"A95F4A1211F3D196A1EC2913A12B777F87653436C06D026F8A5F0332FAD9A7712C80E73FD12DC643762F46853ACEF061A47FD09F6F4A9B1C26330919C162D4B2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-rhel.6-x64.tar.gz\",\n            \"hash\": \"D3463D132AC84B1E3F589DED8207D43B853D87AAC36F20AF84A7FB1C18FA03ECDBC1A71CEC8ACB1652E90A052CB9CB79654FBC9ECA48C08EFBB946789059DF59\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-win-arm.zip\",\n            \"hash\": \"35E0A58F8E6FE0593D9C8A0E34970ED4F2E43C31D6CCB4A378C35A0B95709B1F9EFF27812FEF45B0CAA31DDF564FDF308B33C45D50FEFFEEA99CB0DC0B26AA9A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d22f0ed0-8011-4a6d-acc3-dab972c5469e/08c3e668eb24bbb450e930c875a70459/dotnet-sdk-3.0.100-preview-010184-win-gs-x64.exe\",\n            \"hash\": \"7D61A4F9B4B486DDF2D4B8E94E0B042670E90AA9527FB0A2BF9C372AE1539E35C3FAC5F402EA2100E03D39E1C61572C2E70FA84B7E46BAC38A5364C921D9BFB6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/739a39be-e179-49a7-a947-e691e1a3005f/a8daf554fbc5baaa68fcf1391f131f89/dotnet-sdk-3.0.100-preview-010184-win-gs-x86.exe\",\n            \"hash\": \"D12488627FFBF9FC74FA54AF459781F4D2ABD7FF81417921B0B2B45216C27EA804E8CA5770002E97179984B240BAE3BFF361F93E0A7B1848FA20437B90CE6FC3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-win-x64.exe\",\n            \"hash\": \"7D61A4F9B4B486DDF2D4B8E94E0B042670E90AA9527FB0A2BF9C372AE1539E35C3FAC5F402EA2100E03D39E1C61572C2E70FA84B7E46BAC38A5364C921D9BFB6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-win-x64.zip\",\n            \"hash\": \"C72A7EF5ABDA0B5D9CBE9B9326E2DDDB5BFC7DF3F6761BBD9E0C1961798CDD9C994EB2B4C8BE4437F28D5E68E10F083617EFEDC8725DC3ADF11F8911FDFFA548\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-win-x86.exe\",\n            \"hash\": \"D12488627FFBF9FC74FA54AF459781F4D2ABD7FF81417921B0B2B45216C27EA804E8CA5770002E97179984B240BAE3BFF361F93E0A7B1848FA20437B90CE6FC3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-010184/dotnet-sdk-3.0.100-preview-010184-win-x86.zip\",\n            \"hash\": \"BCEBE2B0BA128CA7E697ACA3B927CFE39E4AFC986C51EBD91F01FD1FE80D734B1A3EF4B2AB388144DC1ED82D398761F88A31F529CC318330A0BB54BDB51D0770\"\n          }\n        ]\n      },\n      \"sdks\": null,\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-preview-19075-0444\",\n        \"version-display\": \"3.0.0-preview2\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.19026.0\"\n        ],\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-linux-arm.tar.gz\",\n            \"hash\": \"82C0B5C5BA1CCD254E17056124D52C347485D18C3C5D6F8D1E15292840022061B43D30038332B6BFB209BAE46F9E6FAF22EB902C91F6186018EEE7FD135326E5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-linux-arm64.tar.gz\",\n            \"hash\": \"4E47098A9512C79985954A7FFF1751C178EC10AB3C89F1B7EBD1E838EECB2B64B750503D72D72366F99E54ED000D5085D1E08114BD7C4F0F4F732C418601EF14\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-linux-musl-x64.tar.gz\",\n            \"hash\": \"A01D292BF4E6722A5354AFDFFF4D29FB4B8B09FCFFC3E1CCCEEC7B889505ACF87749A09829ABC34827B73A7DEFA14164120B8E2E90F72C351B66D45539D38025\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-linux-x64.tar.gz\",\n            \"hash\": \"CFCB904B736CF1B477C6C63B30C117C07EA4179E695BECEA249745C17F5B6F81354305216B4DAFBC7B52A17417BF123596DC01B1A9572E9340BDA13A086A6AB7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-osx-x64.tar.gz\",\n            \"hash\": \"4B474EC58E8C2F971ABA4333017B1E481BDBA075BC2E954510C7B86403A3F4413AAC1D0874804B91C4E95E86F500EDB0CA5D3F333E32D517D4D287C422B1A6E6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-win-arm.zip\",\n            \"hash\": \"DA1DF877FDA9EE908F102671BBF4E217EA9F16A4337F34BB3145614195F4B39F93E07162A4A7900B18131D0E97AAE4D9DDCAF06D194E4271E8B6BB48FCA89924\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-win-x64.exe\",\n            \"hash\": \"77CEA7591D59C91D1D7A85ED47D39C2D5CD9EFF4AAE401EA3DC2D14AD3ECDBDD937E4F0D10EFC799EB0AD3E9F7A45A102CA6A380CA8007A30B36467010490680\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-win-x64.zip\",\n            \"hash\": \"2AC8995E62B55D4D9EBB6BE0F5A19B9EB0EF89CB589745340C04970B0267D985D4B6176B2C638A98BA2D7803ABE82F52CFCCEB61B91D5C6EAE183CFBC082ED9F\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-win-x86.exe\",\n            \"hash\": \"8CB45A8C2B03A54C01B52E3B6D5CB96825FD06A3FC4B6B8E59DAF44BD82A3B94A589A9783EB203DD205F80F8A8967B599F921AB61F1E534B3417741810B80AF8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/aspnetcore-runtime-3.0.0-preview-19075-0444-win-x86.zip\",\n            \"hash\": \"2D5169B1D1D896CE3FE7FD50E642F44703FCF879650CD8269CF43C33EAA8057728F2AF266E38B5E8BB7E676C6175201DE7149EC446168B14FD5650B6F337E883\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-19075-0444/dotnet-hosting-3.0.0-preview-19075-0444-win.exe\",\n            \"hash\": \"A36EA31BD0B9150749A1544312909D51A727E4F710DED2CF524C2155B01D350CB5951561761DE0EA8F8A06D88F1A632C1082CC55D7BB6A57D33355B6B4526713\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": {\n        \"version\": \"3.0.0-preview-27324-5\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3bb56825-2b32-4abb-9052-040a276d16d1/a059da55e95a6f516b433c97de17ad56/aspnet-3.0.0-preview2-symbols.zip\",\n            \"hash\": \"E1F771B1B9F98FE5B152BCECD8F999BDD5608467F87F9BBF624CB94CE5D66D2A87600837A3181E4CE9FDB837A62468B1C9B113191D48720EB18277CC13E7C458\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6eacf7dc-e302-487d-956e-86277f630491/30fa1ae51bb033a8f58391612112567f/core-setup-3.0.0-preview2-symbols.zip\",\n            \"hash\": \"8B7C4A0B3F90C57DA7CC02059E5AC1237A63D0EBAD86EE8AC18DB487291AE0E2E44617A7264DFB0BD8B289E7A1B224B5C9DEDA568067AF032DB468959AC72A76\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9b361fc7-c3fc-4964-b1e7-9826d2f3778e/036f50690dca77182353bd78474c0ffe/coreclr-3.0.0-preview2-symbols.zip\",\n            \"hash\": \"E9892F5BD9F97BA40D1933B3B71A6ED7E4310F802255E1C9622C1FDD60452BDA3B4317160C7887BBC7F7C107E048C1297EB3148C85BAC49DA23F23BF2CD8994D\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1a50a636-b56f-48ed-a5ab-7cdf8c85914e/d89d8d15227621c495b7eebfea54d3b5/corefx-3.0.0-preveiw2-symbols.zip\",\n            \"hash\": \"3E1E0023EAEBC5DCB708591CC044C6E4A20ACA6A02D7FC9257FBEB2704F9ED7AAD27DA313119C64ED895F049E7CB4AB2ABC2DDEF3F2AF36074750AE5396105FC\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2018-12-04\",\n      \"release-version\": \"3.0.0-preview1\",\n      \"security\": false,\n      \"cve-list\": null,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.0/preview/3.0.0-preview1.md\",\n      \"runtime\": {\n        \"version\": \"3.0.0-preview-27122-01\",\n        \"version-display\": \"3.0.0-preview1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-linux-arm.tar.gz\",\n            \"hash\": \"C4452A4111EFF47BCCED7D837F46764C5807A55400816E53CFD08CAB38FF8C94775AB26DE821DD9B3A0FB60F5CAC0656DF915B8D25A1F97A925AC76D65405D10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-linux-arm64.tar.gz\",\n            \"hash\": \"1DCA6D515884E75E1EE9EA63B1A6F115526E3E4DFB2D53415E66E310B99F7B9BA1779B0ECDB49637FBBBE5657C1599C88E0E6CA62AFFEE410EA911A9F199BC8B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-linux-musl-x64.tar.gz\",\n            \"hash\": \"EE1099BAC0C08E17D5313303FD471FF525437EA73F830893FF9C5CF1547D58C1D0A981B9FD6DFDD0E2988E44998DF77018864E24140FC8444A83A3B541848F8B\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-linux-x64.tar.gz\",\n            \"hash\": \"C7346495E65F965A14994FA5DE7EA4D13ACAC759DCD74B05780832F97A6E5C26C0BD76FB9F10AB01790AE8641DF3892B866345E2D50C7574141F47AB5EB5D5D7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-osx-x64.pkg\",\n            \"hash\": \"4B029C9BD5995379937E85197936234F3EE681D1C717F1317866754627E1555F4D40831F1A96275AA2910FE9CC4881C04E993C94BAAF7C8C17E5650976DB5BE3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-osx-x64.tar.gz\",\n            \"hash\": \"D75271606E08ECD7260B010157FAFFB06E7CC23F0723D77E7157B654B5865E9DED4B0E5C726A794E00D5A4F5A335123B1C65BD0C4A0BF64D89C09318374B0806\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-rhel.6-x64.tar.gz\",\n            \"hash\": \"855D07EC7AFB8553D56D8C0C3392A92143D767EB8D5B197735F1C26D79DB5C9816E8B381610AE8B1AE1ECA8666ACD65BC1B8FEC6F6A77F37376F0EDF4C449171\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-win-arm.zip\",\n            \"hash\": \"68753528E124ADEBF63E5EADF368CB0DDFEE3602207C5F00A428716E0E089C958136029AB433A3939D789BE1C06A20703D1D37B3721FD78C8E0B8E88C27F1467\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-win-arm64.zip\",\n            \"hash\": \"A769556025BDECA11511A8BD1F81D55F6E0D39F911DB5AA91C8AF988A542095A9E4170ADE54F18D85EC8A4D1647657A48F3B41EFEC8E67332D3CBA274D10E489\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-win-x64.exe\",\n            \"hash\": \"328EFA8C5F21F9E49902FA8FA74003A07EBFBA31D161EF880358F3A13122BA50A38BA5E8FC69E790022F6CBCC1E3D33DC16E9062CF4CB2970F2A2F7604DA698A\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-win-x64.zip\",\n            \"hash\": \"BFC6074E2632287B22730AFBF5615241FFAC051B3959E7A08DAF74582FDF81F6B47C1761F381FB10CBCD9E46CF13C1A6B049BAE623827CEABFF16F9BC880EB0E\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-win-x86.exe\",\n            \"hash\": \"46A98C223E4B45D14C1744100FC028AB95A783DE8F900075A7565E77E7773417E726CE21F30DCB7A9642E9DE45ACB7798B360B7FC213FEB601BAE7788FD8F458\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.0.0-preview-27122-01/dotnet-runtime-3.0.0-preview-27122-01-win-x86.zip\",\n            \"hash\": \"1B0CCE6E915E9562640C51CEF95FCBD266C164014953A7FEA0A316AD77B8D94914A5B027F77C826A3892156D45321A0685ED26B2D0561B8215994AF75C30D8D2\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.0.100-preview-009812\",\n        \"version-display\": \"3.0.100-preview1\",\n        \"runtime-version\": \"3.0.0-preview-27122-01\",\n        \"vs-version\": null,\n        \"vs-support\": null,\n        \"csharp-version\": \"8.0-preview\",\n        \"fsharp-version\": \"4.5\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f97c1f65-a021-4778-8c84-cc8305c49ac3/12c1ebf85f15551987682860d9dec0be/dotnet-sdk-3.0.100-preview-009812-osx-gs-x64.pkg\",\n            \"hash\": \"8ED4FC075B16C0F30A6A1F42BDC12447782669FB96D98EA8C991F17F9D5C935DDF523B4EB787CA91B6D1210F3A9E39C2DAB7BA5DCB49422267FFEC4823493CBE\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-linux-arm.tar.gz\",\n            \"hash\": \"68A3CB131FAA1262B6DA62CE49C428F0AFAE8E51FD3EB4A00FE87D33B4C58DFC99ECB45785CCE12405555CE503BF92D3025831C6B5573748F85B884609336CFD\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-linux-arm64.tar.gz\",\n            \"hash\": \"1F3A28D80062A34C6771EF32DF536B3A57B54D4838A9C07A16A7BAFA26A567F746A6BBABA17AA8F6EB823CF35325A827FEAA5196F720F27124F6898A8DD1B117\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-linux-musl-x64.tar.gz\",\n            \"hash\": \"6F5EAF3E330CE3B9D35D6731C69056172534B7A468DCE2F20679499BA524258FFDF8417BC12DEFAC0BEF4A70DBA6656884DBC93D54CE123D1CDC9DFB45B35671\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-linux-x64.tar.gz\",\n            \"hash\": \"109E2EA82350DFAC79ED0D5A3FD56B22BD78269AE7099ED288A7893DF4B24DB6E5A7934F4764A5763D3F0777FE8E51A8F2454EA1055700D62111B396FA5E8B39\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-osx-x64.pkg\",\n            \"hash\": \"8ED4FC075B16C0F30A6A1F42BDC12447782669FB96D98EA8C991F17F9D5C935DDF523B4EB787CA91B6D1210F3A9E39C2DAB7BA5DCB49422267FFEC4823493CBE\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-osx-x64.tar.gz\",\n            \"hash\": \"B6A32A35881A7F15F0FB5D2813C9901D82F8AA88A0F68646AB64DB0D9E2967675354B20E4168508D25AD6683E1D177B591CF5465F55464BA3D767FBAE1076E3A\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-rhel.6-x64.tar.gz\",\n            \"hash\": \"21FF7E0A568C6F460F0E2C83048A7A9D370C1A960988573260807DBFD7833429AE406CA34525D44FDB517F9FD6E8CCD8B9744BEFAE0B95B8E3ADF324385CF95B\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-win-arm.zip\",\n            \"hash\": \"6C19D3A7F7CE2B8323394C9518E0DFC703B460A206D1963350ADB53A37E05FB97DCC09DFCA9EF726F8E4B6C4083B060415DD71B1C056CAC3E02D907F7ABA80D9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/84a10ab3-4304-4cce-8ec7-9d9557b1c0fe/7319534102973dff178d8319f5263fcb/dotnet-sdk-3.0.100-preview-009812-win-gs-x64.exe\",\n            \"hash\": \"41BA89F2ADAC5040B9EE0C51A115901BFF98B16E10183CEE0FA9B280687AE5ABD3809C0011B78FBF8B024014D0638A6D9CBF9C117D10F7E900713571AA0A7F1F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b3445424-5fd7-4064-ae41-a08997939091/cf12037965ddee5cd85dd99dacfcea4e/dotnet-sdk-3.0.100-preview-009812-win-gs-x86.exe\",\n            \"hash\": \"78A38A0CA0BCA29587E22C77C5C8466D7AA16E69668D3DE707C0A8EE33134B988C60841D930365CAB8CFAF046BB78F51D532838D66634E71312ECAFC5CBFD567\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-win-x64.exe\",\n            \"hash\": \"41BA89F2ADAC5040B9EE0C51A115901BFF98B16E10183CEE0FA9B280687AE5ABD3809C0011B78FBF8B024014D0638A6D9CBF9C117D10F7E900713571AA0A7F1F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-win-x64.zip\",\n            \"hash\": \"EBF248E727D61083E8F281744E350045B78B16809520ABC92E855E5527E09A84DC3E9C7B9E7816AB9DE7CE78D7675902B3C86EFB4A5DF815D32CDC85CE842ABA\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-win-x86.exe\",\n            \"hash\": \"78A38A0CA0BCA29587E22C77C5C8466D7AA16E69668D3DE707C0A8EE33134B988C60841D930365CAB8CFAF046BB78F51D532838D66634E71312ECAFC5CBFD567\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.0.100-preview-009812/dotnet-sdk-3.0.100-preview-009812-win-x86.zip\",\n            \"hash\": \"567FAFAB588D512D4548B3EFF95049BC3A8EB30E4786BCB9B1E8FBBAF7453A29C6769C1B220D74BBF86B67C046B4759497B53E878E9D28E47CCE9DE937569881\"\n          }\n        ]\n      },\n      \"sdks\": null,\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.0.0-preview-18579-0056\",\n        \"version-display\": \"3.0.0-preview1\",\n        \"version-aspnetcoremodule\": [\n          \"13.0.18333.0\"\n        ],\n        \"vs-version\": null,\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-linux-arm.tar.gz\",\n            \"hash\": \"D565B6696828DA6F83CD8C1EE9C55AA2F3DE02FFCA95E7B18BC0A13CD5FA324941063FDA7C86F8324A07FB06485BCD832A354B2FF2998FFE241AFD1597A915B2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-linux-arm64.tar.gz\",\n            \"hash\": \"1B90EDD7C5C74402340D98F9DA803C420A4C85899ED329B004F6A3D94E04ED4A555DBE685A423BC86ABA0755C67F0E2DA63C2416F204937B32473D7649C4DEDE\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-linux-musl-x64.tar.gz\",\n            \"hash\": \"FF66488463DC34F6757239DE584992DF555C1F7AE3D12090ACF2391B2B614B570DD38D383E8859126FDAE2E85B816CE8C157C0613A584190530D37BD08AE08F1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-linux-x64.tar.gz\",\n            \"hash\": \"377CEEA78497F279ED93C7FE00D931246B49E1960C7C83911164E931344BEA97E32F76EFEA5AF9FCD25E9BE76BEFFE8E24134D0093EE288ABE68479FC67B7A58\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-osx-x64.tar.gz\",\n            \"hash\": \"A65E945F988A15240D1E01346536475709AD1379664FF94429E7CD838E19FECA64EABA419C150E1A58928DB77BBEB9457B38176590DEFD471447E96DE4797C12\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-win-arm.zip\",\n            \"hash\": \"F4758E3C22018E78C181AC1F29D5A4DFCDA152759492CD15A63B83E11C079795E6E6C3B8B0EB35E8CABDF47E3F61C4D3299379637290B5378A62EC7525A76006\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-win-x64.exe\",\n            \"hash\": \"D6782184D12DC8EE0662607E4847C73177019FD549BF64AA9B22E74BE977D9407BDB04E44BAE35F0CE497B3FC6EC699E743529C8ED513F8BA35893B16F3AB60D\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-win-x64.zip\",\n            \"hash\": \"E4225EE9C2E6B0A68A0401D882D8163759AE317816E0F09AF64E8EB797E4E77E4277F84BE04A21C17C654B215632B82AE425F0B1F97362A1AAD3DDB20BBE58E5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-win-x86.exe\",\n            \"hash\": \"E72385FC0052DCE6248080178E3337568F79BDD99A2A2D1A9F3F68BF14B7B8093F8779EBD7FEBD795D8ADA84DC7E5569AD7002A683461236290D1E5EDCEFB091\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/aspnetcore-runtime-3.0.0-preview-18579-0056-win-x86.zip\",\n            \"hash\": \"C40C617123A58B6EC3A411BF8D768517CF3F88E450E27877A8AA5E78F836F7CA4BDF0E4AD4EC3DB8E5258C622AFE124A9B2701BFC66263D2144CD064D8EE6BBC\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.0.0-preview-18579-0056/dotnet-hosting-3.0.0-preview-18579-0056-win.exe\",\n            \"hash\": \"783C657976D0209F0A417B2C965BCBE6B16169DDE5C2675129245861DD2DDFBB72FA0C9BEF96921789BA8C4F487F32B67596510E2DDAE9BA90D466DB5BF6D095\"\n          }\n        ]\n      },\n      \"windowsdesktop\": null,\n      \"symbols\": {\n        \"version\": \"3.0.0-preview-27122-01\",\n        \"files\": [\n          {\n            \"name\": \"aspnet-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2c62ae5b-209b-4f0f-9822-512319981766/32c5139973341c4a83dac5edd417136f/aspnet-3.0.0-preview1-symbols.zip\",\n            \"hash\": \"8BE05A0A191F43C2DC0AAC427F85A3B74042BFB5C89E62B9CE053C9257ECDE12D2BA0F14B899186C26A4FF6FBE83DD214DE2A47365DA7DF48322AE172AD4258D\"\n          },\n          {\n            \"name\": \"core-setup-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c12ffe56-4b65-4b36-8de3-f6ce7c7334dd/b1b2d998ea21a8e6381b94cee0cac336/core-setup-3.0.0-preview1-symbols.zip\",\n            \"hash\": \"0C608DEF1AE07EC36B1D19819FA396684C0040794820E4316F5A0DA8B3A769760D9CA74D9C2E9303DECCAB63DF744FAFE6043BCAB2D003CFBA381425BBD766E0\"\n          },\n          {\n            \"name\": \"coreclr-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/89603152-1024-4dcd-a05a-0bf29f59ffc4/8508e69a69cd026aa800f09d425f1981/coreclr-3.0.0-preview1-symbols.zip\",\n            \"hash\": \"6651891961DA53852705D9B079267AD33F13E5C04F9BC64E3A331D546A09417FBE98636709DCA1F192E793098FA9A822D80E63A4DCFA1325FEC43470DED68F91\"\n          },\n          {\n            \"name\": \"corefx-symbols.zip\",\n            \"rid\": null,\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/eb8aff95-4641-46c0-a019-0747887b4d4d/6d90fb115413c773ab291984124f978b/corefx-3.0.0-preview1-symbols.zip\",\n            \"hash\": \"BCCA00885A87D4F5F1FC5B50F23B040F4239328EEC3DEF390363B84DC90F51DD6D72AD8C9C3CC43257F58427A8DDD14C1177B17EA0536D6A60C8E70DDF4660ED\"\n          }\n        ]\n      }\n    }\n  ],\n  \"intellisense\": {\n    \"version\": \"3.0.0\",\n    \"version-display\": \"3.0.0\",\n    \"files\": [\n      {\n        \"lang\": \"de\",\n        \"name\": \"dotnet-intellisense-de.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d3b00d4f-caf1-4198-94ad-8c3e72adc878/39ab924cfe39baf2571d895b9dd4c73f/dotnet-intellisense-3.0-de.zip\",\n        \"hash\": \"69aaeab699b1d6e66dd3c0d04e23528204dd12d4d0efaa3fc75352bdae09782e14b3e5b8bfcbf05a834a336fbcb0b0d7514a1a577d8b9e4cc634e407d0e231fc\"\n      },\n      {\n        \"lang\": \"es\",\n        \"name\": \"dotnet-intellisense-es.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5b4c04d7-8380-477d-b130-50cfeb0ad26e/13786b8524bf1ad822ec1a1055819ad1/dotnet-intellisense-3.0-es.zip\",\n        \"hash\": \"f60782528bbaa672b3631561cb0c39552767baa629a30a864111ffce1d2c4c515a578533ff0e528632f417f8f55d3d4afea4220372cb13ae5f008e6acee9c68a\"\n      },\n      {\n        \"lang\": \"fr\",\n        \"name\": \"dotnet-intellisense-fr.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5a0529ad-25b9-4c86-9d18-41a94ca78db6/e58d25b0253822a3684827c7316e62e5/dotnet-intellisense-3.0-fr.zip\",\n        \"hash\": \"98ef2ad7f95d00a6e1b74ec80ea40d13f926fc17541bd3ac15d2d883a728024aec674996601d20ed6e74376cbc85d219197334f01958db744d8d9abeb3e4fe76\"\n      },\n      {\n        \"lang\": \"it\",\n        \"name\": \"dotnet-intellisense-it.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c921cbc0-51d1-4373-bd1c-cef129efb344/f49610f170b3ec1259c54c3b7df4b804/dotnet-intellisense-3.0-it.zip\",\n        \"hash\": \"8701352c987894c2b05b5986470b005fc1f1b7a7e3283aaeb726ad3741d5cca0a8c7d2a62e9b773d19ea8b3d04e27daa2bf2faf33e0df4b6312706eaeffda19e\"\n      },\n      {\n        \"lang\": \"ja\",\n        \"name\": \"dotnet-intellisense-ja.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/96bfb8c7-ea41-4ef7-b2bb-bc71d7b6ea80/40ce21050aa7710f15075cae2d98cff3/dotnet-intellisense-3.0-ja.zip\",\n        \"hash\": \"4a83ecefc616676b6ca4b920838528dca84a49fdcb9565abf320d234b62574983deab910d17b19f6401f7516cb77888e85854cd1c9f625e33dce663b0865a02d\"\n      },\n      {\n        \"lang\": \"ko\",\n        \"name\": \"dotnet-intellisense-ko.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/dfe9bc5a-2930-4266-b773-5199fa04b8d3/0fc38923a44e8e15aa051139b2728275/dotnet-intellisense-3.0-ko.zip\",\n        \"hash\": \"d33fc3a380b09a65f8434d94ed3d390fdc1a39b1180ebea5d1d0f8c22bb023eabfafd435af9c3f3b27f925d3086558d302f31b227bdafc34f8ae1b4810c806d4\"\n      },\n      {\n        \"lang\": \"pt-br\",\n        \"name\": \"dotnet-intellisense-pt-br.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/947d6ed7-4fa7-4663-89bf-f7e373a3375a/017c6e0f2731fc4798798b56e16b4892/dotnet-intellisense-3.0-pt-br.zip\",\n        \"hash\": \"91dc3e1d6909806627bdc23bc3cafce1c909fc51b99d1b956d10522e415a3ec8273c18e1638164a851e36f79086d1e169edfb9c32859ccd99fab6987d3233727\"\n      },\n      {\n        \"lang\": \"ru\",\n        \"name\": \"dotnet-intellisense-ru.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0e7be442-c311-4a1a-af32-9778e8bd18a3/3dcaab6ac0d6ba7ecf1b7d70e5a5eb7e/dotnet-intellisense-3.0-ru.zip\",\n        \"hash\": \"8869fb840e8d4e65c949e64ccb611ef0a867e8b9df552e15096323b5895a0028a3c7ac0d1c8860fcb0ea45e854eea3b6bab0428013cdabe1b9002939b07412fb\"\n      },\n      {\n        \"lang\": \"zh-hans\",\n        \"name\": \"dotnet-intellisense-zh-hans.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/96ccd0e5-e67b-4796-b0f3-711c24faf820/dfb5c62d13dcf6274950cd76c327cc61/dotnet-intellisense-3.0-zh-hans.zip\",\n        \"hash\": \"3f41d479a4d7c8e9f830953a0924a8c6fb0d437f00459eea351a5ccad4726483e8ddf92abe7b474f449bdfecb10e52ea4f1370d56e616abbfb367ab2f0e0f05b\"\n      },\n      {\n        \"lang\": \"zh-hant\",\n        \"name\": \"dotnet-intellisense-zh-hant.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/625ab14c-9da7-441d-a236-97c5723d5ada/3f9edba32673760c0efa2b222514a44c/dotnet-intellisense-3.0-zh-hant.zip\",\n        \"hash\": \"53b84bcf2faf1ebd091a46c2825971b41d8a15bea79779efefc01f7ef415b8d96a380cf76829f0096d35539aee5605e9ebf2a3cc35227df719aff66cacbc05ba\"\n      }\n    ]\n  }\n}"
  },
  {
    "path": "JexusManager/Resources/3.1-release.json",
    "content": "{\n  \"channel-version\": \"3.1\",\n  \"latest-release\": \"3.1.32\",\n  \"latest-release-date\": \"2022-12-13\",\n  \"latest-runtime\": \"3.1.32\",\n  \"latest-sdk\": \"3.1.426\",\n  \"release-type\": \"lts\",\n  \"support-phase\": \"eol\",\n  \"eol-date\": \"2022-12-13\",\n  \"lifecycle-policy\": \"https://dotnet.microsoft.com/platform/support/policy/\",\n  \"releases\": [\n    {\n      \"release-date\": \"2022-12-13\",\n      \"release-version\": \"3.1.32\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-41089\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41089\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.32/3.1.32.md\",\n      \"runtime\": {\n        \"version\": \"3.1.32\",\n        \"version-display\": \"3.1.32\",\n        \"vs-version\": \"16.11.22, 17.0.17, 17.2.11, 17.4.3\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-linux-arm.tar.gz\",\n            \"hash\": \"eaa5e439e9a70ca72a1de731e4b2b7b97e59c8d60bc694e0a08c8da6246aaecc3498dc14729c83140039a285a8cda8fcd334bdc81e507d97c2f92b9dffcf0140\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-linux-arm64.tar.gz\",\n            \"hash\": \"ff311df0db488f3b5cc03c7f6724f8442de7e60fa0a503ec8f536361ce7a357ad26d09d2499d68c50ebdfa751a5520bba4aaa77a38b191c892d5a018561ce422\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c6699ddb9297340c2c9539fcc9eeb8b898397c26f2ca2f6162605bbbf54e3e8957148d93ef353f79ceb76c37ccfd8f7648383be64b6112de757312689de3cebf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-linux-musl-x64.tar.gz\",\n            \"hash\": \"2f66b0d2c4cb7aa87298650afde34c78008de1abf59f5432aa68d21b97ed81b2189933fa690388f856c6bbf1f979afc97536867866cc878af25884d7f2a33575\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-linux-x64.tar.gz\",\n            \"hash\": \"a1de9bbc3d2e3a4f5f52b7742c678b182a58a724d36232997511e390027044d60144a7e010a29d6ee016ec91f2911daef28ac5712a827fff8bdde73314b7e002\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-osx-x64.pkg\",\n            \"hash\": \"e12a2cba830e6d983f785ee60b98beeeec9136cea18780a79e01540b3859e8dbb7d73f935314e5b8357bb9f8f7a8a717803a371fdd4d82aa67d20e29a76f8c15\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-osx-x64.tar.gz\",\n            \"hash\": \"9fd385812e770525856d734ca62e5d01ddb534ff317bb09e1091ded38ce2c16dc4bd02b5eebad8ea6e01b21755fe6f5ce6ca5183ebbbee04fa1aed956da4c58a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-win-arm.zip\",\n            \"hash\": \"f06c49699dd3efb7e6a8faea4cc7154c680320c247b258909962739146e7f2bf268d40f762b6753f8b64ea1a59af78eb6c40531f04f1d18eb104370361ce9aba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-win-x64.exe\",\n            \"hash\": \"299217c743d3b5527205110a20ef00097c5e8373a256e4e079e723471d5cd68f4976b769ad052c19312a55b6dccc965749a0a724da01d8f879e2a3c1b6c2bf6b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-win-x64.zip\",\n            \"hash\": \"72a3feb6784c5c69cb464ad4a8678e719615bd1e4e9a7c3cf5c1f67a4f01e08c073424532772f1e320d05f63c01079c6a089be45f4777abe035f14ffbf06f38b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-win-x86.exe\",\n            \"hash\": \"ad1fef5df4dc35d6535ba70a6386105dcd75990c889c36154953b47dff9becc776bd706599ee46672bf5daaba73025e75b129b952d26102121d8c14924b4ed67\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.32/dotnet-runtime-3.1.32-win-x86.zip\",\n            \"hash\": \"3cddda423359bc178dd5df8695a0b98c69c39ce846d53c316eda1436837147ba863ab01a606c72c9fae47fb82890a69a3c1916b1c4fdc1590c7113026617cf09\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.426\",\n        \"version-display\": \"3.1.426\",\n        \"runtime-version\": \"3.1.32\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-arm.tar.gz\",\n            \"hash\": \"dd357fa62f486cc9c3855230753b34c070d06c8d3e887753866886dda3c931533c780e02f94fe8e73e66ef504e11dd7fb63a004f5914beeccb36b4ce48f50914\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-arm64.tar.gz\",\n            \"hash\": \"300e154fba3123644910bbb89a6e61f67569677efa359aa110871cbbb62afad059709dc362f0af27ece0b9a30bc3e6ef57c3cb7c6f75377b20d48636605f30f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-musl-x64.tar.gz\",\n            \"hash\": \"2854eaeb79b29fce1ae31f2253adb2d8f199b7d5a988fc8c90130afe3df6668893d87c14a86932254bdbaec64a553d7b996bbd6868ba7858e3a2cb28c5e9576d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-x64.tar.gz\",\n            \"hash\": \"6c3f9541557feb5d5b93f5c10b28264878948e8540f2b8bb7fb966c32bd38191e6b310dcb5f87a4a8f7c67a7046fa932cde3cce9dc8341c1365ae6c9fcc481ec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-x64.zip\",\n            \"hash\": \"bd9bd22a8ed316ad5fb0a171e23899fdb8604cfd16e974cedfe221a0073ee7dd8b076d52155bbd1a9702d8928a96400eb83e92692322d464cb876d02889c7b6f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-osx-x64.pkg\",\n            \"hash\": \"56c5e045844f5474a9a12b42e4a22c851985fac5690e227ce62b529d644c4faeaafdfe255de2f1e86a90c0c114e7de66ce4de1692fbf66357ac4d35341f933c3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-osx-x64.tar.gz\",\n            \"hash\": \"be1c29ffe8ddec6051d7529796dae35fe18036af89d5e7285fcdad46316fec557f4b15c15eed4d676071d187b363c2e16cb3bcbf708b920b5614340a6e51ab3d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-arm.zip\",\n            \"hash\": \"54b879af118ef064deb330e6aa124c31183698fbca367aa89de7faafc3dbddb04563992595cb6c2fd46cc4e38e4156e15cc2d6a79d3d6d30e51ffe95225a7f21\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-x64.exe\",\n            \"hash\": \"0a9cc67349adaebb8b81754aae5d7c478a043e25661537d149c65b098c13446ec78626f23e7eab4c5a6539485888f4f0a200e539038bae0be9e45aaefc76c05b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-x64.zip\",\n            \"hash\": \"ca5c60898318d2cf9786013edd45508f44fba45c2a8814752ba53094ca7b78b3d94874e765655e310b4efd2b604d42807ef6e16c6281d877495d513bfb5c1261\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-x86.exe\",\n            \"hash\": \"6c8412f2435f35447e8ce4a5208987b9e64f4dcbf2da22626d4d7386e68d7d3b1a7f930c4d43ab6821ecaf52ecf0bc6658686d625fe0274b6d532c194799d419\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-x86.zip\",\n            \"hash\": \"a5b3452184cfe15351e971906664e5372ca6c73ec44252c4aee8bae7c943c81d23415fc02965d8df5993eaa07826d6d50975a8d51842b9fc80edee077869f542\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.426\",\n          \"version-display\": \"3.1.426\",\n          \"runtime-version\": \"3.1.32\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-arm.tar.gz\",\n              \"hash\": \"dd357fa62f486cc9c3855230753b34c070d06c8d3e887753866886dda3c931533c780e02f94fe8e73e66ef504e11dd7fb63a004f5914beeccb36b4ce48f50914\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-arm64.tar.gz\",\n              \"hash\": \"300e154fba3123644910bbb89a6e61f67569677efa359aa110871cbbb62afad059709dc362f0af27ece0b9a30bc3e6ef57c3cb7c6f75377b20d48636605f30f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-musl-x64.tar.gz\",\n              \"hash\": \"2854eaeb79b29fce1ae31f2253adb2d8f199b7d5a988fc8c90130afe3df6668893d87c14a86932254bdbaec64a553d7b996bbd6868ba7858e3a2cb28c5e9576d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-x64.tar.gz\",\n              \"hash\": \"6c3f9541557feb5d5b93f5c10b28264878948e8540f2b8bb7fb966c32bd38191e6b310dcb5f87a4a8f7c67a7046fa932cde3cce9dc8341c1365ae6c9fcc481ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-linux-x64.zip\",\n              \"hash\": \"bd9bd22a8ed316ad5fb0a171e23899fdb8604cfd16e974cedfe221a0073ee7dd8b076d52155bbd1a9702d8928a96400eb83e92692322d464cb876d02889c7b6f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-osx-x64.pkg\",\n              \"hash\": \"56c5e045844f5474a9a12b42e4a22c851985fac5690e227ce62b529d644c4faeaafdfe255de2f1e86a90c0c114e7de66ce4de1692fbf66357ac4d35341f933c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-osx-x64.tar.gz\",\n              \"hash\": \"be1c29ffe8ddec6051d7529796dae35fe18036af89d5e7285fcdad46316fec557f4b15c15eed4d676071d187b363c2e16cb3bcbf708b920b5614340a6e51ab3d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-arm.zip\",\n              \"hash\": \"54b879af118ef064deb330e6aa124c31183698fbca367aa89de7faafc3dbddb04563992595cb6c2fd46cc4e38e4156e15cc2d6a79d3d6d30e51ffe95225a7f21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-x64.exe\",\n              \"hash\": \"0a9cc67349adaebb8b81754aae5d7c478a043e25661537d149c65b098c13446ec78626f23e7eab4c5a6539485888f4f0a200e539038bae0be9e45aaefc76c05b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-x64.zip\",\n              \"hash\": \"ca5c60898318d2cf9786013edd45508f44fba45c2a8814752ba53094ca7b78b3d94874e765655e310b4efd2b604d42807ef6e16c6281d877495d513bfb5c1261\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-x86.exe\",\n              \"hash\": \"6c8412f2435f35447e8ce4a5208987b9e64f4dcbf2da22626d4d7386e68d7d3b1a7f930c4d43ab6821ecaf52ecf0bc6658686d625fe0274b6d532c194799d419\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.426/dotnet-sdk-3.1.426-win-x86.zip\",\n              \"hash\": \"a5b3452184cfe15351e971906664e5372ca6c73ec44252c4aee8bae7c943c81d23415fc02965d8df5993eaa07826d6d50975a8d51842b9fc80edee077869f542\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.32\",\n        \"version-display\": \"3.1.32\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22321.32\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-linux-arm.tar.gz\",\n            \"hash\": \"f984a6bf0d0c917fc74bee1d03af79a7e6ca6ce3bd722b14c0cf82641fdadb2d48014ea30989239f5082e4320668172409ee8a99c4acf7d9db155405187d7578\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-linux-arm64.tar.gz\",\n            \"hash\": \"34b9ec241cd0047cb23f0b8416d3a009476e511c3dd5854636c11cfd078117faf095f32f06e7c97d810af94fde43621117414f983d3b2041ad40260f50dc330d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3d4baee2ca9e064c6f53ba1d89c099273a245c0fa3f6406485b2d6ed0e0526df2e28d0f69ede1c5855d8eb6b2401c1d862b0a622e2ec7cc8ec671266d9563f2f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-linux-musl-x64.tar.gz\",\n            \"hash\": \"d67edf1ed7817c002e1f444baf3a48b71d6f3328ed3f63287d744445665db846f63d24f4f8dd97f99d85f9d5f28fd0d1f1b8efa0c88ed7545a3ee9cfc491f7d0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-linux-x64.tar.gz\",\n            \"hash\": \"0aa2aceda3d0b9f6bf02456d4e4b917c221c4f18eff30c8b6418e7514681baa9bb9ccc6b8c78949a92664922db4fb2b2a0dac9da11f775aaef618d9c491bb319\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-osx-x64.tar.gz\",\n            \"hash\": \"21f77b64b527af41bbba0f8887c71be631f37d7bbabe9119fe39961c2600a90075f60768173097c9fffe32e40f8db309544837055cb70fe428195682b85fb9a0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-win-arm.zip\",\n            \"hash\": \"2c9dad36f379432187edd1aaa9334ee8929e8e546dd4f3ee7c02eae8e37076e48d927e7d64ddaedbf56d96fca2c42c18beb185b8aa6a1b87e72952b91aab0e04\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-win-x64.exe\",\n            \"hash\": \"5bf7c77a9a488ef188665bb4480449ae36b080ad90483a119e93e7bf64ff8805019e93fa54c176695a878b9017ec51c2b4f7a4e95edadd16bb53690c0fbe11d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-win-x64.zip\",\n            \"hash\": \"89c6612c302cb28d8c45c39bac6d01edbf72fb90ada9434d5ec2e9ff95f1bb956cb2e841fe57fc7b6baa94c133022e5f94cecaba587696a77e5fd4f0d762a0a1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-win-x86.exe\",\n            \"hash\": \"1c2683b443ec92d74625e191484efae006721697a48ccf9bf173e785ff6bf300809ef58e78bbe8d050ef49a0cf4901e1c01ad91e78f7fe872890ed9c6587426f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/aspnetcore-runtime-3.1.32-win-x86.zip\",\n            \"hash\": \"8ce5c72777042cd29c1b79b6869aa955ecde33efe07ff697ecb578dc7556e83c206c5a314eef91877d8f839fb9bb2d27df75a0c49162b296a9e76b11e6c20741\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.32/dotnet-hosting-3.1.32-win.exe\",\n            \"hash\": \"cd6a21ce456062d98395664b8843fa3c376e26c99a3ab238f9e4f3ea455d06f190cc2910cd1cf5d60fbb1a9945203dbcd5db953e1b50121d245b84b36f98c052\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.32\",\n        \"version-display\": \"3.1.32\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b92958c6-ae36-4efa-aafe-569fced953a5/1654639ef3b20eb576174c1cc200f33a/windowsdesktop-runtime-3.1.32-win-x64.exe\",\n            \"hash\": \"426add7ee806ff3e50e348bd294d406594c44d2a2894b037b1f871999ed9cce685f4fefac3828cd814897a2e40147647d03ba521d952a66bfe18c85767b40603\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3f353d2c-0431-48c5-bdf6-fbbe8f901bb5/542a4af07c1df5136a98a1c2df6f3d62/windowsdesktop-runtime-3.1.32-win-x86.exe\",\n            \"hash\": \"6b96d2db0d42d06683b6fc2e991193686167d40c85912737705db23dbe8dc7d6b80689ab25201fc0a397c70c463c3fdd40d294e9c47d48b375ff8b7a0a699cf7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-11-08\",\n      \"release-version\": \"3.1.31\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.31/3.1.31.md\",\n      \"runtime\": {\n        \"version\": \"3.1.31\",\n        \"version-display\": \"3.1.31\",\n        \"vs-version\": \"16.11.21, 17.0.16, 17.2.10, 17.3.7\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-linux-arm.tar.gz\",\n            \"hash\": \"3a73c449115afb2b978ed708e889a1a661a7d3998bf773af4aebe5c79114031c39cb61770f96bee528d4d858562fd9f4c97dad089f25e53febcc176188970ef8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-linux-arm64.tar.gz\",\n            \"hash\": \"bb9594cdf3b1f8005005d12055fe5e1ae6ba40ed56c2f6f41e36b2c04c9a7fa4630da594c7d93fe587d75d9a00638818fb14228e188fb7f1b7b5eff96d53bc7f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f39dfbd0a71a608e044bc44943e7ddff539eee7a8fb9541c8b81bf8123158bb7ac0ad76bd1e858a7646803dbe754b5a3998caf32dd7a5710f7371c82abd7b288\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-linux-musl-x64.tar.gz\",\n            \"hash\": \"d81ffebcb8eda65bb3a1f60832d0f4f6eae746bfa3734a94915485f8e77af7bc0d33660173008cd3d8c6d527ae9f8d6b4dd64cde50b7576787c7ad25e5073419\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-linux-x64.tar.gz\",\n            \"hash\": \"fb2ac1a1e3b9b1eceb37587535d96a5a3c0b01edd07182ed57d4725e067678988a3fcdf22f3f49d21bc35760d69398af85a6449e6c3a8ed401ad85df920be4df\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-osx-x64.pkg\",\n            \"hash\": \"162aa2df6b5a836b04ade06e2f944954ca011e6e6628925ed8413952709f1277cec3856fcf1e289f4d7b91bdfd6f0b3a86e33ebd640f5c3752fe2fda6ca6a18f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-osx-x64.tar.gz\",\n            \"hash\": \"8890441bd64911656e34a824f3d4abdbcbe4337887efc90fc8eba62189be161bcedd0d0f0e1168dadbc25bc616c462ab1c8499b9a52f05be19173f2af8ea09e7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-win-arm.zip\",\n            \"hash\": \"6b002309731e7967ddd4ab7d4ca438c3221c6331532f1d9a72bf43e8a4b753cbeed997a7721694de53c5a3ce013ca6efa782892b426772ba474587d12367e7ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-win-x64.exe\",\n            \"hash\": \"cf7963a4336e7695a6d1a48afc6660d4eb79fff4057f231ac67b130cb35d68c309336f93c10bcb63cc560610ed350c74087eb93b614f6ad73afd1cd559d68d70\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-win-x64.zip\",\n            \"hash\": \"dae6a5f8edc209f844e2b17aac230984c9bb70367f7f0be7a3833ab3ab1d0bb80367984a688be49f11d0bf65ee7c3c69bd760fe42935cb3972f5d739a8539b69\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-win-x86.exe\",\n            \"hash\": \"57c5ad85c9a17818cab232210d9057c740c3eef928b9a07f8dab24c98177cf2945e65a95ebfedb878dc2f96c88b9b18a46e5977f76303aa2edb3da067b9dd37d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.31/dotnet-runtime-3.1.31-win-x86.zip\",\n            \"hash\": \"157188ce8751911b49a671c015f06f422d489483646240b5e6fb7c88b79ce2f56fc4ec175a8be092710e349b4ec7ec5147551d9fb53e0057e41d2f208acd1e61\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.425\",\n        \"version-display\": \"3.1.425\",\n        \"runtime-version\": \"3.1.31\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-arm.tar.gz\",\n            \"hash\": \"ca1d9e119dd72e3ed1afafd12b7e6b01ae98c1b5146008dff937d577426ff27069fcb912ab93bcbd064115eb69aca9ebc07b2fd84fccbed051c4f7c90a994df6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-arm64.tar.gz\",\n            \"hash\": \"f3c18acc094c19f3887f6598c34c9a2e1cfa94055f77aa4deae7e51e8d760ca87af7185cc9ed102e08f04d35f9a558894f04f7a44fa56b91232ccc895f4e5a5c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-musl-x64.tar.gz\",\n            \"hash\": \"1e4b7e851b50ab7c86bb01882b2599339972fa3e4dca8a5f280f5196075a6de133fe415c115533a984933423028dca88ab1578fcf76986370811ce1c3c4f27b1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-x64.tar.gz\",\n            \"hash\": \"3d31c6bb578f668111d0f124db6a1222b5d186450380bfd4f42bc8030f156055b025697eabc8c2672791c96e247f6fc499ff0281388e452fcc16fbd1f8a36de1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-x64.zip\",\n            \"hash\": \"a20fe1a17201ac6300cd8b7ce3893cf927cab4141ab417ebb279324c8b010a1f57f84b41cbf947e549294de88f58eed8d575b1cc5add4f8dbc770d1019b66c4b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-osx-x64.pkg\",\n            \"hash\": \"a8fa51abc00fec8279210eecc2d79aa5130329fb46f17e25a268b8377a7a92ef2478ba4ef012b693a1a68d270c7523334635dc61e2dcdbe84721c158609b2b2e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-osx-x64.tar.gz\",\n            \"hash\": \"dbe560c6d052333f2922c8337ca84cb4cd1de614de53be8bc3c52537c32bc4d074b8af832f5a1660bf0bc07204c74b3f0610a12ce6b192eae6503f76bb5ce40a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-arm.zip\",\n            \"hash\": \"888dbf1742732e8b84e74e70d6e492ce503c510100a14c9e27a84929f80bdba6e57582e66f1fc2a52e57b6c9fb2ca2f5988c1db6469d314bfecbfd8dbd5bfc6f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-x64.exe\",\n            \"hash\": \"7a2b2f6cfda3dfabd01acccf545de795b943dd08e16de257b7844090c5bdf893408494ecd2de73a978998a8330e42e804bd70498792aa6a0749d324202ea84cd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-x64.zip\",\n            \"hash\": \"20b92ce9f44483d44fac53c7f5c72dd277099e837fd08ffdac70f61d040d501373a240eeadd9dc97dd79cf2b22ec124c625a09a1c563111581a355a1dd3b3d10\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-x86.exe\",\n            \"hash\": \"3d24fa891ce8dba4a3352e908d2150ba2b484cf4576e2bc702841a3d48aaee1e8e2beddcfb016fabec7eeedca0f636c991400f940b1a9a5305586ac4d131080a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-x86.zip\",\n            \"hash\": \"22210ae4a9f41246c2c0fb7dd6fedceb83b43ab5c610afccbe29136bad432976117fd3b06937fcde3638f2b91fabf7fc91171ed1464dcd0c79583e236819b287\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.425\",\n          \"version-display\": \"3.1.425\",\n          \"runtime-version\": \"3.1.31\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-arm.tar.gz\",\n              \"hash\": \"ca1d9e119dd72e3ed1afafd12b7e6b01ae98c1b5146008dff937d577426ff27069fcb912ab93bcbd064115eb69aca9ebc07b2fd84fccbed051c4f7c90a994df6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-arm64.tar.gz\",\n              \"hash\": \"f3c18acc094c19f3887f6598c34c9a2e1cfa94055f77aa4deae7e51e8d760ca87af7185cc9ed102e08f04d35f9a558894f04f7a44fa56b91232ccc895f4e5a5c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-musl-x64.tar.gz\",\n              \"hash\": \"1e4b7e851b50ab7c86bb01882b2599339972fa3e4dca8a5f280f5196075a6de133fe415c115533a984933423028dca88ab1578fcf76986370811ce1c3c4f27b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-x64.tar.gz\",\n              \"hash\": \"3d31c6bb578f668111d0f124db6a1222b5d186450380bfd4f42bc8030f156055b025697eabc8c2672791c96e247f6fc499ff0281388e452fcc16fbd1f8a36de1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-linux-x64.zip\",\n              \"hash\": \"a20fe1a17201ac6300cd8b7ce3893cf927cab4141ab417ebb279324c8b010a1f57f84b41cbf947e549294de88f58eed8d575b1cc5add4f8dbc770d1019b66c4b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-osx-x64.pkg\",\n              \"hash\": \"a8fa51abc00fec8279210eecc2d79aa5130329fb46f17e25a268b8377a7a92ef2478ba4ef012b693a1a68d270c7523334635dc61e2dcdbe84721c158609b2b2e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-osx-x64.tar.gz\",\n              \"hash\": \"dbe560c6d052333f2922c8337ca84cb4cd1de614de53be8bc3c52537c32bc4d074b8af832f5a1660bf0bc07204c74b3f0610a12ce6b192eae6503f76bb5ce40a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-arm.zip\",\n              \"hash\": \"888dbf1742732e8b84e74e70d6e492ce503c510100a14c9e27a84929f80bdba6e57582e66f1fc2a52e57b6c9fb2ca2f5988c1db6469d314bfecbfd8dbd5bfc6f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-x64.exe\",\n              \"hash\": \"7a2b2f6cfda3dfabd01acccf545de795b943dd08e16de257b7844090c5bdf893408494ecd2de73a978998a8330e42e804bd70498792aa6a0749d324202ea84cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-x64.zip\",\n              \"hash\": \"20b92ce9f44483d44fac53c7f5c72dd277099e837fd08ffdac70f61d040d501373a240eeadd9dc97dd79cf2b22ec124c625a09a1c563111581a355a1dd3b3d10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-x86.exe\",\n              \"hash\": \"3d24fa891ce8dba4a3352e908d2150ba2b484cf4576e2bc702841a3d48aaee1e8e2beddcfb016fabec7eeedca0f636c991400f940b1a9a5305586ac4d131080a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.425/dotnet-sdk-3.1.425-win-x86.zip\",\n              \"hash\": \"22210ae4a9f41246c2c0fb7dd6fedceb83b43ab5c610afccbe29136bad432976117fd3b06937fcde3638f2b91fabf7fc91171ed1464dcd0c79583e236819b287\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.31\",\n        \"version-display\": \"3.1.31\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22287.31\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-linux-arm.tar.gz\",\n            \"hash\": \"77bd03a2f9d3ea15401b7b6004794cad77c43ac972b2fd0817daf73003ce12358009faf60c2058f5a29366514c458b89a0d0f719829996f81f38e8510f70b3e7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-linux-arm64.tar.gz\",\n            \"hash\": \"970def9298bfe39c00054ae45231e2c632d4364a311349b3594bef5dd3739af2db33329f314f29a3956c271745948df88076e39bd2fa80e8a4dbb9723e3493ec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ce61ffe110dc5dbac31f1abdf040d06d1fae2bf52065f6a88f77785d879f4f916e3335cd9c75cf4cb4e6c8a0208089e663f81972c4b4bd84a8589e73aed03450\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-linux-musl-x64.tar.gz\",\n            \"hash\": \"f3e28547974303257a76af87fec7d0084c8efce4359ecf761ecab191336679f2ffe12928f7edb6624442ad7b0a38738c9a3fe2fd5d7fece1fa16441e4898de32\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-linux-x64.tar.gz\",\n            \"hash\": \"9ea1fb4c9a656de8392b8f92c608c2f927fd03ad8e8b195f3f0b69c1433cfbf2679827b1ce2fac783f8ef77307c7b1b36563d0813f914b75b025b5cca6c773f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-osx-x64.tar.gz\",\n            \"hash\": \"25d395435ddc17b8155c6d9b06c6b280e462da3e86a8c2b0b0549cfb80d2770b0df33a0a87845b442e89295000a872fce12a5949b4f1b123f802e8e2d071d504\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-win-arm.zip\",\n            \"hash\": \"8005743d289f8029712ce433a6ef9574304ef705442529142c97cc21a02a2fae72c284fbd7ac9f276123b9e53f6f61f6f3963e268e87d615c4e7b8cc4c3ce5fb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-win-x64.exe\",\n            \"hash\": \"a2c386fd789435c511acc40560fa51d17eda40f0634219b573c656f469d038edd09a0795da6ec2b05980aab1d315bcf559fe6a2065ae7b191d57849b4d563cdd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-win-x64.zip\",\n            \"hash\": \"b4bb07b07794242b40de40d58d0b5a01d3be7df7f565a3f2bf1ac68bd38f1c781d7e935141908bc2d7ab9f184600e8f9c997e5bf796e0606896cd5a79a7b5f03\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-win-x86.exe\",\n            \"hash\": \"0c95c11c487da69d71269a9d2772e652f25383cdc1fd719ff85c55bbc733879542bc40e0b2eb02a3d35484dfec01548bea751f74eac2cdc00691cc4b0f282a23\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/aspnetcore-runtime-3.1.31-win-x86.zip\",\n            \"hash\": \"a8f179097e0e25ff35a8b923a2220785e634bce025eaafc23e1d7b0fa9405ab02ad63ee7f8e94989e43fdcad4533d52698a2e502b6bc43cd3a56cd54386f2c5f\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.31/dotnet-hosting-3.1.31-win.exe\",\n            \"hash\": \"9df442fe4d6ce526a284bd11a878c84bd3797fb592958cc15ad1577b5650cb3dacf80e2ef05cd914a14c1fc6792103edd4253121ecbc5a59a20ca54d5b6e3625\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.31\",\n        \"version-display\": \"3.1.31\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f68e8704-171f-47dc-88a5-40572a22319a/43a6b2785e73b2177a4401ceccd01ef3/windowsdesktop-runtime-3.1.31-win-x64.exe\",\n            \"hash\": \"7d10dd9f9e345a57b0c91b6703115c114d3418bbf2715297bbee8445e6a9919741cc167fd55a0b5628ac5f31d416e716b13eacf57dcd5c6305b4a6bf26192398\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/df67c05e-3019-4d7f-846b-e08b92924b60/18a670ed3b1b60c5f7061f7bdaa6f7f6/windowsdesktop-runtime-3.1.31-win-x86.exe\",\n            \"hash\": \"9d8b64ae13d855aab9e622af4bb4967cc9c8b97ee2671bb9efe9ef31ebe3b7a312e213f3d4b3237cb1201445f1edaa6de987b08929412528fb0b6521ce0f7780\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-10-11\",\n      \"release-version\": \"3.1.30\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-41032\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41032\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.30/3.1.30.md\",\n      \"runtime\": {\n        \"version\": \"3.1.30\",\n        \"version-display\": \"3.1.30\",\n        \"vs-version\": \"16.9.26, 16.11.20, 17.0.15, 17.2.9, 17.3.6\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-linux-arm.tar.gz\",\n            \"hash\": \"031e6421b02e8e192cc2c9d5f5b6c6c9fc71d7f73ea9a1d582b98bf46dab9bdd459de16f0f6a3c20f669d2a054154d5cdfc0e433c1bc347d3261d0cff6e9da0b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-linux-arm64.tar.gz\",\n            \"hash\": \"e94b4f9dc1bae62f2577f5c6dada8ae111936eeb535010afb4d838c993b372be7dda2dfd84caf9e86d6b6a688757c63c18b73b547934023f058e5d75b099a912\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-linux-musl-arm64.tar.gz\",\n            \"hash\": \"efc6bdc2704abeae42d56260a378791402b2f0b549d3e8203a9a04e07d2d396ab108c59bc53973e85c0bee3d4ce6bc7551989b811a0d60a7418c307a2d170ac5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-linux-musl-x64.tar.gz\",\n            \"hash\": \"454aaaff0cbb0a82581132ad8a46c37df5b5844230331b1d3e0fa163de4ae9ab1d54c553861971382077a7da8ca2165fa35bc9ede0d4d116d247bdea41f573f3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-linux-x64.tar.gz\",\n            \"hash\": \"febe026170101a4fd033a37395215c408fd0764786157c2cb70dc2ac8fd2f41e9e8659c3f8f9a034190b70df056ce9809abf083f59dded73d4cd5253dd0bac57\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-osx-x64.pkg\",\n            \"hash\": \"2e928aff6c5612f0db7e5f9f61076694ecf1dc88ef5ede9e324e07d179848e26dafafe9541d6d59690b09e6d59063bffa202b24b73a3cb4a1eb0ba9baf8a79f3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-osx-x64.tar.gz\",\n            \"hash\": \"43b8f60e9b963a673e0fdd4122a9b36ef54bacdcce7c396a61a99a969e18908bf63c4b092c0661d7ff17fbb138ee68b9d046c2c6e22886d3908c94cc08c35976\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-win-arm.zip\",\n            \"hash\": \"3e725c8646223e1b9f2b7843563f81d9cbefb0f1cd5751d2ac2466934984d475976e1ad31feb52242978eb220ae5dbf852aaaf814520dfca7705db931649d3a1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-win-x64.exe\",\n            \"hash\": \"186666cac61951a16b976c9bd0c7e6488178b5ebc75e8c644e64684fd941dd83e93cd0f4a961bae0e37b69f0466ce65bef69f01b6b2421453fb1a6a05f1e88de\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-win-x64.zip\",\n            \"hash\": \"2d24e78d37df5af1732751e48326ef74867f65fa83b5caf9b700eba4d487db58cb9eceef55c216295c4c8cc27c80790ea4e258a70566f36d05e0104b1f281d74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-win-x86.exe\",\n            \"hash\": \"43d37e72bdede7b215c6e0afec8a12c8acdb6b98795666551b4f4c9af01f1c3b6f5dc9491207cba92e33c8285d81ff3678e2a091f561e475246b6697752d4b8e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.30/dotnet-runtime-3.1.30-win-x86.zip\",\n            \"hash\": \"151cb534f8fd69f9697838f6f03196a4bcb102758e0fcacbfc6fac6eec5633ecfa29b2cfe590422f52fa66640704f1db965f0e36c5bf25c418f4794bb107a3b8\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.424\",\n        \"version-display\": \"3.1.424\",\n        \"runtime-version\": \"3.1.30\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-arm.tar.gz\",\n            \"hash\": \"4ca319e7cdfcd318cb0d649d83a93f1ac87a7a777f454a0a71ff7e87bae1ef8020e789edb4bfa172c091edc66b1e5dce0faa0950cb95a93953863c76721ce11f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-arm64.tar.gz\",\n            \"hash\": \"3bfd29233a3e0dfdbdc967f07808d4e239651f0f4f23f7c9e74f09271c9ded8044539ea4278bad070504ad782c4638a493bd9026ddbc97bbc657c5c12c27ccd2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-musl-x64.tar.gz\",\n            \"hash\": \"b3a3bc39394d789f66f2edd3fae485dda824919214384950d11ad8780e043c62b187a741d441888e43f07690c7aa3afec0b5255161f8fa23db2b668fb92d6ee4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-x64.tar.gz\",\n            \"hash\": \"5f9fc353eb826c99952582a27b31c495a9cffae544fbb9b52752d2ff9ca0563876bbeab6dc8fe04366c23c783a82d080914ebc1f0c8d6d20c4f48983c303bf18\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-x64.zip\",\n            \"hash\": \"738801dfebbd82fa9f450c0d2634532f182cbe2701fd3001879b38b00b7bf43b5284645e364f3fac13ae5580508eec1a9f74f218c22a50625d35e5f18003729e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-osx-x64.pkg\",\n            \"hash\": \"58f67ca494fe87e35ca673631b69f72446b07e08102a290a148ebe07750a97907c6c56f23a6446bcc1a7a95dc5401e9f7baf077dd6dcb0da684b12af45d6d4b2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-osx-x64.tar.gz\",\n            \"hash\": \"3e6bf0116afd20828c5b1420e70b5840df029f144ed7cfe8c133b02f43d7b2a5d17566e1815f166179f51299768d73bce43740f9862ac8384f2c8bd06e1b8d09\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-arm.zip\",\n            \"hash\": \"c1c5ab76d3f8a86481612115906c3415b66816559ada8e55e897486f83f065d9bd4f4a8c17e8503056803e9b2c2d42b166c1b7b5c9bf92c19fe8223cab5fc4c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-x64.exe\",\n            \"hash\": \"ed7b9dda2a557a9fc711734d7d585e543bb6076de262875857d0d4964422692d2f3a10ce38558715f8e7ed40aa40929e798e389f5a7708b46f53bf8bce3938cd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-x64.zip\",\n            \"hash\": \"4cd515176fa6b0a737715fd4e50dec7ae18b44c6bee3dd4d498149a8846b9094031394886bfa634db0d4bfd2e239ce4392e01b9b270a59cce65df9422e982372\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-x86.exe\",\n            \"hash\": \"ec8d28cabd100856937eac15d17e37f147f83dc521bcad6da02cb80e9f75d271dfd8a3f40671e27583f030e8bf8c950a1323a1454e895527fea9f05dc5f9a77c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-x86.zip\",\n            \"hash\": \"6e39e6de6fa4539bd5cdcc31615ff38111affcd97db098789732f25c70ea6162572434e617443753092a4fc5dc395535c3fc492371cb507454f2c4cb5a7c6548\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.424\",\n          \"version-display\": \"3.1.424\",\n          \"runtime-version\": \"3.1.30\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-arm.tar.gz\",\n              \"hash\": \"4ca319e7cdfcd318cb0d649d83a93f1ac87a7a777f454a0a71ff7e87bae1ef8020e789edb4bfa172c091edc66b1e5dce0faa0950cb95a93953863c76721ce11f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-arm64.tar.gz\",\n              \"hash\": \"3bfd29233a3e0dfdbdc967f07808d4e239651f0f4f23f7c9e74f09271c9ded8044539ea4278bad070504ad782c4638a493bd9026ddbc97bbc657c5c12c27ccd2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-musl-x64.tar.gz\",\n              \"hash\": \"b3a3bc39394d789f66f2edd3fae485dda824919214384950d11ad8780e043c62b187a741d441888e43f07690c7aa3afec0b5255161f8fa23db2b668fb92d6ee4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-x64.tar.gz\",\n              \"hash\": \"5f9fc353eb826c99952582a27b31c495a9cffae544fbb9b52752d2ff9ca0563876bbeab6dc8fe04366c23c783a82d080914ebc1f0c8d6d20c4f48983c303bf18\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-linux-x64.zip\",\n              \"hash\": \"738801dfebbd82fa9f450c0d2634532f182cbe2701fd3001879b38b00b7bf43b5284645e364f3fac13ae5580508eec1a9f74f218c22a50625d35e5f18003729e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-osx-x64.pkg\",\n              \"hash\": \"58f67ca494fe87e35ca673631b69f72446b07e08102a290a148ebe07750a97907c6c56f23a6446bcc1a7a95dc5401e9f7baf077dd6dcb0da684b12af45d6d4b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-osx-x64.tar.gz\",\n              \"hash\": \"3e6bf0116afd20828c5b1420e70b5840df029f144ed7cfe8c133b02f43d7b2a5d17566e1815f166179f51299768d73bce43740f9862ac8384f2c8bd06e1b8d09\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-arm.zip\",\n              \"hash\": \"c1c5ab76d3f8a86481612115906c3415b66816559ada8e55e897486f83f065d9bd4f4a8c17e8503056803e9b2c2d42b166c1b7b5c9bf92c19fe8223cab5fc4c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-x64.exe\",\n              \"hash\": \"ed7b9dda2a557a9fc711734d7d585e543bb6076de262875857d0d4964422692d2f3a10ce38558715f8e7ed40aa40929e798e389f5a7708b46f53bf8bce3938cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-x64.zip\",\n              \"hash\": \"4cd515176fa6b0a737715fd4e50dec7ae18b44c6bee3dd4d498149a8846b9094031394886bfa634db0d4bfd2e239ce4392e01b9b270a59cce65df9422e982372\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-x86.exe\",\n              \"hash\": \"ec8d28cabd100856937eac15d17e37f147f83dc521bcad6da02cb80e9f75d271dfd8a3f40671e27583f030e8bf8c950a1323a1454e895527fea9f05dc5f9a77c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.424/dotnet-sdk-3.1.424-win-x86.zip\",\n              \"hash\": \"6e39e6de6fa4539bd5cdcc31615ff38111affcd97db098789732f25c70ea6162572434e617443753092a4fc5dc395535c3fc492371cb507454f2c4cb5a7c6548\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.30\",\n        \"version-display\": \"3.1.30\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22270.30\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-linux-arm.tar.gz\",\n            \"hash\": \"33e3a6b2e5cffc019a25c4d580047bbf6e927e71da62e043984e76dc4d17d76dfbf8a1576d741038c3bd16ecd6f09c395c08128d85a69adf4cc46a5f803d2853\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-linux-arm64.tar.gz\",\n            \"hash\": \"327116926ed9d4a86664c6d3687d59261353639b67beafa8d451d8546eb800804ace64d40a05e14db5dc6ec638fc041efbd209ee58430fb539d02799c1a33c55\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-linux-musl-arm64.tar.gz\",\n            \"hash\": \"80a6859032c9a9496afaac28396c8eaa612a5491415ecb5d68703a0d884c987da58d13fa60be00fefd1b01c9306303f6990bd68feb7e77ec7eff1a69a5d51de4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-linux-musl-x64.tar.gz\",\n            \"hash\": \"102bf4961627db8b7ccd9b4020762cd6bcb37964d241591fb9d0aed9b4863e656badab2314f2fa40cd20d3ec219c433833da203f45ca736e870666a3f6637f2e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-linux-x64.tar.gz\",\n            \"hash\": \"afae1f5ab022b81636a0d6fe3956d491c3f28206f8177787013f309841dcb9f1134b33677a9cf3fd68a5c86cff7fcb0694eb597dc99a96dacd704e89120375a7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-osx-x64.tar.gz\",\n            \"hash\": \"dd02798cff8ceea809789532584e104a8e06addbd7327cc35a2b220bee3ae92f8a8172d69208604682153131a4fc158fe860f2d4c62b1aaa120e832a4801cbe3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-win-arm.zip\",\n            \"hash\": \"d2183e7bbb4c8a7da4404fde8f2f6907a682646bd3e575b816324f32d20fad19579ca3de41210c683f5d27f5203eac4077a2464d864ac72fb42a4b887bc6230d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-win-x64.exe\",\n            \"hash\": \"c9f0c9ce95b1714ffbb082bcbbc210e1f36ea46f0be84ea64f1616bb3a599bc3d4e52fa85d09a7a33719df8354d4965f2bd44817fcf01cbe595d132aa33e219a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-win-x64.zip\",\n            \"hash\": \"0bf37603017c7cc558d8b2d9100445b4354c9a5a21bb896f3de76a84a9abed0dbc1d54591d4beede25c8f451456a5604b13afdeddcf5c1489d81ccb9816cd2a4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-win-x86.exe\",\n            \"hash\": \"48d4d243b2b4398345d4e08551a9eaeb865d28ac7e1c6d0c28d8201b245b8edc6cba2355f0c6dbc411153a19d445805db9d1302e705fa4fbf2d642c33b272a6c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/aspnetcore-runtime-3.1.30-win-x86.zip\",\n            \"hash\": \"962296ee27fffac4a6e8cdcbc3020ec1c380125dcaa5364d336ca13d515a82e961e1c870870c8fbe10dde88a22f2bcda7b25128a0e6a984c245aaa806e130701\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.30/dotnet-hosting-3.1.30-win.exe\",\n            \"hash\": \"c521637598350a814945e01b62a74fe89736790abb189b4bafb21c09b5895820d39a302b9b8ef45e7a4c53be67ac4c729a6b1bbf8eb6aae8390f3af573feb1ce\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.30\",\n        \"version-display\": \"3.1.30\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d8cdebe3-76ae-47a8-9461-e0b588f52fdd/58f4ac35bb7eff0192987ce902c9b051/windowsdesktop-runtime-3.1.30-win-x64.exe\",\n            \"hash\": \"a5a22c027d53096f982da30def2b079654b1549bfd1651bc0fce656d90f95014e2f533fbec4447b2382693f42e915f3f66317536240bbaabb7aff0ca037f1de3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/81f9b887-49cf-43a1-83b7-3d6db15e8f3f/79f20278e76d07333b98524f69f62a9a/windowsdesktop-runtime-3.1.30-win-x86.exe\",\n            \"hash\": \"e8bd87b5c784f25f9596e517ba307533409478d68f6accb001f1fda3a00ec575581db1ecefded9f62336dbf7bf2f47d99c8abe7ab39bb9e7e8e82062f5c0f3f4\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-09-13\",\n      \"release-version\": \"3.1.29\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-38013\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-38013\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.29/3.1.29.md\",\n      \"runtime\": {\n        \"version\": \"3.1.29\",\n        \"version-display\": \"3.1.29\",\n        \"vs-version\": \"16.9.25, 16.11.19, 17.0.14, 17.2.8, 17.3.4\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-linux-arm.tar.gz\",\n            \"hash\": \"d378ae9be1c899aaf7e0c06926eeeced0c1857b9ebd1f0b8fd0ad6a9550fc3c430c3a016e7a009cb111750cbbb0ac7cb36bb4fe48efbd6400e9aaf1493984c17\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-linux-arm64.tar.gz\",\n            \"hash\": \"aa3444a91d37a10e892338ff3df0e601cb47f469268f58acdece939e5455c774f7ee9d7600736f72195c312e03cd6ce3fa47b175bcfc62b9155d122f002d7e5d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fbd103c901d44065d9a1ec3383baf2253e3df2c1ccc774b13793b5affc3d058da649cd080a12a377bad8bdc212effe973dff4a1414980e00de32cfd54363a46c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-linux-musl-x64.tar.gz\",\n            \"hash\": \"a005ac073face06883172dca52a3b4cb94a60213533ad9ec4889b27c9588eeb397014af346d27bbbeae015907550d7cfa0f402c995594bc73f2bc45279e56adc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-linux-x64.tar.gz\",\n            \"hash\": \"5c5ef6022abb5437e148c1cb22944eca7471a20a6a61300c6737c5f6e3ab0d95ba22d1ce55857e033c826a06359b601478228e3ef62cd321707911ad9d96bf67\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-osx-x64.pkg\",\n            \"hash\": \"43ee82fdf8202b65a7d530154e8b6523e11cb3d3100d9d2291a4e8e05ce2722a898d92a52a86d2d95a81aebeb4ba3a2785af0c4354c07e1037e505ad1706a1ba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-osx-x64.tar.gz\",\n            \"hash\": \"c4e87afb80d6374a4ec66b1e043156b685b80778033565f55bff521cde82c6eb69f75d8edd54db65cb992cba2b24b0e0cb0f44b97a87d2baf4761eb7e966edb3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-win-arm.zip\",\n            \"hash\": \"5ef6ac65ba2fd0634cbbbb1550045e1f66c4ecbb8379c846103ef5f685b25522872f18a9b457d86349a2ff5c34b7325e62ac68c31b8db3dd8beb4cabd282a22f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-win-x64.exe\",\n            \"hash\": \"e43f03f2c0c0cb3161691ea7dedaa1134e94777203c22318b8af48bb7e1875646820537aab614b68d366a22056ff6eca1df873588b8715fbf93560c3a015e64b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-win-x64.zip\",\n            \"hash\": \"48f7fcb21b730bfbe0bb8a99254fe8b6caed5c19904fb14284018dacbe381e212d99cd5b6597fa496ab4ec2b3d7e88faee725d1e7944a04a30dfe133a5771708\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-win-x86.exe\",\n            \"hash\": \"81645590a2b46c0572b39d52c2589dbc4cbf80d2c07375dad84f2b2dc1e04f569f71b42b3dc72be737b02a0a48fc615e95e2e8cefee4925452987bdbf7cec85a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.29/dotnet-runtime-3.1.29-win-x86.zip\",\n            \"hash\": \"3710e420af534739e6334dfea63d16a209637d750381f72924e339a8347084d560aff3d17e1cac639b5202dd434dc37849c6b3aaacfafc2e3e2de01ca42004fd\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.423\",\n        \"version-display\": \"3.1.423\",\n        \"runtime-version\": \"3.1.29\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-arm.tar.gz\",\n            \"hash\": \"6b615ec6c1d66280c44ff28de0532ff6a4c21c77caf188101b04bdd58e8935436cb2b049ad9d831799476d421e25795184615c7e1caff8e550855e2f6ed5efd9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-arm64.tar.gz\",\n            \"hash\": \"ba4f82e939be43ed863f059f69cdfb80b6dfe7cf99638bd6e787b060c2c1c4934440b599c133f61e3a0995f73675ae5d927bb047597cdd6a15b9074891dfd62e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-musl-x64.tar.gz\",\n            \"hash\": \"e3e887c029535c7566437e5e6bb3a2cac44cdf103c247ac528e02c535b3efd860ee9bbd0ef9c570daac91e4012ddc84dca509e1ce23ab293ed7c744edbc9107b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-x64.tar.gz\",\n            \"hash\": \"bcb0efcc066a668eb390b57fd2c944abe73234fdbed57a4b1d21af5b880d102b765f2a790bb137d4b9f3d0d4e24fc53d39dc7666e665624c12e07d503c54ceae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-x64.zip\",\n            \"hash\": \"46149b9b3e036eb7e9a98aa281c37ff6d04b8dec0a145a7cc630cb78ea7dcbb356df821734b66129317cb91ac5e66b7805c26b1369cb14047419edb276013089\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-osx-x64.pkg\",\n            \"hash\": \"2b0abf29bce94327f568117607df0a6c0725204cfdb39307ada963f2b9241add42a6d29627690f2359d145c0684ab7600f1f844d314f1112319f8147a6749ef1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-osx-x64.tar.gz\",\n            \"hash\": \"89c23bd2a4b9d10af443d609194db33de4a5b7ed5f1328b705a87d68bd4a413a7e2a3e18a8a047aa7ce757224f4e81f3582bc91c1f4ffe074847656f56b26098\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-arm.zip\",\n            \"hash\": \"f904594d65a11839dad1f3e993f2aac9e96e34211408d25a5655d328cfd8973d5c285fcff16755097a3748bd229a022b8ac18d65626ddb9ea9c22daf03cb194b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-x64.exe\",\n            \"hash\": \"54af0b3b76f19a4f2790b0c698c9135b351fbb546cd0ca5b04988d2ba37b6453af76c0893736d2b0603b5feeb370be5d4056c7c33aa021fe01cf00bd5d19ca40\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-x64.zip\",\n            \"hash\": \"b2b2ad620f0463a2c3d55e0d3d619bfca9965d59fee0e61bbd6e609d16ee28114b67f026ba9721e95c2eba63c58d6051aff5be3c496a7a9aead5cb504013ef4d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-x86.exe\",\n            \"hash\": \"10b8673476511a87f5ee6c2542a96f10e71ee4441d0d795ab5c8904f51361c3e2fb1abf6f89340d8ffa9a304d5972eefb289e0454eb12aea9494c208ce18128c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-x86.zip\",\n            \"hash\": \"d3c2e84d6d465cd40f8eb5a5d69a02d52946be8e5525f685242205ebabc0ae69fb6d671d5907f02e831234bea272f801d17c771438f9459daa5be755f8699ae6\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.423\",\n          \"version-display\": \"3.1.423\",\n          \"runtime-version\": \"3.1.29\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-arm.tar.gz\",\n              \"hash\": \"6b615ec6c1d66280c44ff28de0532ff6a4c21c77caf188101b04bdd58e8935436cb2b049ad9d831799476d421e25795184615c7e1caff8e550855e2f6ed5efd9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-arm64.tar.gz\",\n              \"hash\": \"ba4f82e939be43ed863f059f69cdfb80b6dfe7cf99638bd6e787b060c2c1c4934440b599c133f61e3a0995f73675ae5d927bb047597cdd6a15b9074891dfd62e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-musl-x64.tar.gz\",\n              \"hash\": \"e3e887c029535c7566437e5e6bb3a2cac44cdf103c247ac528e02c535b3efd860ee9bbd0ef9c570daac91e4012ddc84dca509e1ce23ab293ed7c744edbc9107b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-x64.tar.gz\",\n              \"hash\": \"bcb0efcc066a668eb390b57fd2c944abe73234fdbed57a4b1d21af5b880d102b765f2a790bb137d4b9f3d0d4e24fc53d39dc7666e665624c12e07d503c54ceae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-linux-x64.zip\",\n              \"hash\": \"46149b9b3e036eb7e9a98aa281c37ff6d04b8dec0a145a7cc630cb78ea7dcbb356df821734b66129317cb91ac5e66b7805c26b1369cb14047419edb276013089\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-osx-x64.pkg\",\n              \"hash\": \"2b0abf29bce94327f568117607df0a6c0725204cfdb39307ada963f2b9241add42a6d29627690f2359d145c0684ab7600f1f844d314f1112319f8147a6749ef1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-osx-x64.tar.gz\",\n              \"hash\": \"89c23bd2a4b9d10af443d609194db33de4a5b7ed5f1328b705a87d68bd4a413a7e2a3e18a8a047aa7ce757224f4e81f3582bc91c1f4ffe074847656f56b26098\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-arm.zip\",\n              \"hash\": \"f904594d65a11839dad1f3e993f2aac9e96e34211408d25a5655d328cfd8973d5c285fcff16755097a3748bd229a022b8ac18d65626ddb9ea9c22daf03cb194b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-x64.exe\",\n              \"hash\": \"54af0b3b76f19a4f2790b0c698c9135b351fbb546cd0ca5b04988d2ba37b6453af76c0893736d2b0603b5feeb370be5d4056c7c33aa021fe01cf00bd5d19ca40\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-x64.zip\",\n              \"hash\": \"b2b2ad620f0463a2c3d55e0d3d619bfca9965d59fee0e61bbd6e609d16ee28114b67f026ba9721e95c2eba63c58d6051aff5be3c496a7a9aead5cb504013ef4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-x86.exe\",\n              \"hash\": \"10b8673476511a87f5ee6c2542a96f10e71ee4441d0d795ab5c8904f51361c3e2fb1abf6f89340d8ffa9a304d5972eefb289e0454eb12aea9494c208ce18128c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.423/dotnet-sdk-3.1.423-win-x86.zip\",\n              \"hash\": \"d3c2e84d6d465cd40f8eb5a5d69a02d52946be8e5525f685242205ebabc0ae69fb6d671d5907f02e831234bea272f801d17c771438f9459daa5be755f8699ae6\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.29\",\n        \"version-display\": \"3.1.29\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22230.29\"\n        ],\n        \"vs-version\": \"16.9.25, 16.11.19, 17.0.14, 17.2.8, 17.3.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-linux-arm.tar.gz\",\n            \"hash\": \"9b14938c7d456a86782eb63c527e74f6543b919e8ec4e86e3b50c9356d52da2a1218a3467a1f18597fe1579fda53d3aae2ab37a810ffe51abc884d9fc1c4496a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-linux-arm64.tar.gz\",\n            \"hash\": \"7cf6bccb85b39990d19ed5f42c8907e9fc615358330a060e9f93455c277143ec261f5255b6b05b081ade155f7965db5b092c956b0c77b2ebc9e2dae065f8e977\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-linux-musl-arm64.tar.gz\",\n            \"hash\": \"36889945d974d440dc55e6631a61b19f6a6b6b6513cbd92f44ecdcda05e1215c61b6b2ae5ab0d1e74d8c7bbe5418f76c6dae81cbd53581f00fa02a6394aeebf6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-linux-musl-x64.tar.gz\",\n            \"hash\": \"d7b4bb21592338ea9c6f3441a01ca538799fcfa047670923100545f8e6c3c6fa9cc11dcea6c130c871146ab1875853a2ccee78ed4e907ca897adfeb9241eaaa8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-linux-x64.tar.gz\",\n            \"hash\": \"991918a89c1372d8d1eef967777cc9dd55d0cef827d940f068e701ca877dd6e14045c3a309e6e9c4a7f843eef6d1b192b9ae1257141947f999f4e8dd6b0d43e3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-osx-x64.tar.gz\",\n            \"hash\": \"03978e8c131274d0bddb78ea6c4f590f015c0ce94527ff7b21cdcad4bd4a731dedb962cd773861f53b2e0178524f6fe5235f00f755b315ce4be47ae1573b382e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-win-arm.zip\",\n            \"hash\": \"080c758d16058bfd34ecfb5ca84ac13860b46b266799f214d9c981d09543d2483f5472fbef8dcbebff1649bab6e4a778be5eced16068c759dc43bc7190fddbcb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-win-x64.exe\",\n            \"hash\": \"f7c730bceac91b8234e8ae39a166ad7aff91740ef91a9dcb4c6f17ab43cbe903c28f69542df4b23f459a5128b29acbedce084b512c7b028daf3d149089fdf043\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-win-x64.zip\",\n            \"hash\": \"ad96a4a54970614216bd2bc25fb7cc84eecd9f1a9d0db9dcdaa32fec805e0b12c2dcf4c7e72a9fadc802b77d120bbb55f744dbb090545d259f1fab72aed72d8b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-win-x86.exe\",\n            \"hash\": \"fecaeb3e1312ab6ae6988ca573c7005b9fa7ea1cca3cdfd357ec0276bcf31c4fc91d12a027fed709622d28ae7fc4af994283074fd9c3738e8beb13e701ee62cd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/aspnetcore-runtime-3.1.29-win-x86.zip\",\n            \"hash\": \"85d8331a8725b16890cb52476cc71947cd1aeb8a2cb3dba27107f11f9fe4fc4bd7091f615be91826281a9914151cc6e7d96441e50d9777eaa2d45266cc1929c8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.29/dotnet-hosting-3.1.29-win.exe\",\n            \"hash\": \"460e5bd0d65e012a3b3e107031aa2eeeb73d44a93bbce79dff743a909ac7533770eda7a3bfa75131a026dab0b4a9a9fa175894fc19ea00403dddcee18abfa684\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.29\",\n        \"version-display\": \"3.1.29\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6a9318dd-fec5-4df3-84df-ffd917b382ea/d3391ca5a4e14a8a96e04bbfa5c4c2dc/windowsdesktop-runtime-3.1.29-win-x64.exe\",\n            \"hash\": \"de49ecf60d9fb799c7f6b84cc2d423d7ce87d817068be67f82875c2eca3113bf61c40a991600957491e36dd7fb21fb156584f249a4b79c4fefdea4460da814db\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b5a2058e-d1a7-48f6-a615-353973a1f960/9a2efe2b3d299f1e276106da8cea1c1d/windowsdesktop-runtime-3.1.29-win-x86.exe\",\n            \"hash\": \"3a403c3455e95f08369d0564e38557aa26cf5e8f81b809e3214b45795e6df50c0125b3e34a591f5b6cad61e314b3e8f7a6f5c48e1d546204fe6d994fc68cd71e\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-08-09\",\n      \"release-version\": \"3.1.28\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-34716\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-34716\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.28/3.1.28.md\",\n      \"runtime\": {\n        \"version\": \"3.1.28\",\n        \"version-display\": \"3.1.28\",\n        \"vs-version\": \"16.9.24, 16.11.18, 17.0.13, 17.2.7\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-linux-arm.tar.gz\",\n            \"hash\": \"124a6dc9148e649e21257a23893d7754d8623fe77772db5e42988fbf85d015c890a80b3150b0b3ba034844c74d1ddf9481ff0fab89529b580bb6e0698b71bf7b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-linux-arm64.tar.gz\",\n            \"hash\": \"feb65d2926e21df802c600c8c8c060d15cf44458150b2be8a5d9dc42735cb89d1a5e990121f7ba5813d6f8acf88b6e6bae11d078156c84023e1337b917219b17\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e679a1d9831d8a1d74aabfb6ac13123eac5af75d46bba361b7658575286ad79b8cc7d1715731998e3f2d8906e5c0963946a60a619974b3584c00835743986f99\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-linux-musl-x64.tar.gz\",\n            \"hash\": \"25478879063d99328d20a2febaa22641b6c02cf5afd78089d9d9551bd814f08ef96e721cded4397d74e61b3beb3541f7f9d5e9358b055eeee9c724b447737caf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-linux-x64.tar.gz\",\n            \"hash\": \"b0760d463b8935a14bc247899b692038ded7d476a0cf2ed262eaac8ee6840350b29738cd1ab4961ba93b05f1802e7aba6e3c5e27e06ec9cb5e244149c52adea4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-osx-x64.pkg\",\n            \"hash\": \"8ad2bd4bff71775c673f9e05695f35e192b2e62cf49e6321a54d20359c781c5965387da843f3bf15b619dc025ba9cc280f1b3f36bcb834bd15c8ccda50f7f126\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-osx-x64.tar.gz\",\n            \"hash\": \"ad6ad23b08460eb09b5019760083906df96d064a5f0a34aa9b31b4e1eb4c8313ee59c1f3717056e3e9f4db8310329f9aed368bea6bba3c0a86c4a4ec7083bbb9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-win-arm.zip\",\n            \"hash\": \"f7a7ba3fea720fc032e44961bc9577f4ba2e7fbab9514c948861009dba220297e35996c17de920aee23baf610cc1d3edaabc8769f698462c5790b746bbb0f652\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-win-x64.exe\",\n            \"hash\": \"0e3b87343ac528bb98797238f3d343a927cceccff287b67abeeed1ff6b71120ba79312b2612bee912a08f524ccfb5c3048439379c7b63ed20fb824c4872c8094\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-win-x64.zip\",\n            \"hash\": \"ef6535b26a5fc7153e802da2248c0247b7fddf6d75d18d61ce1414064d0442debf37669b1949abcb6593640c10f0d7c182406d8f81e2779688d2a2adf93f8174\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-win-x86.exe\",\n            \"hash\": \"fbb86d7951fd0cfbf91826610c13fbe8e5011d8a93d4a49060e3fc7cefdb01d19864905e9a435a92cea0f77dbca64613b6e7e55f6382d5f83295b21c31c1021e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.28/dotnet-runtime-3.1.28-win-x86.zip\",\n            \"hash\": \"0e32c9b8f577a3bdbfd9ee20751a474a1054d3bdbede5ce8d04f816b8ee3c8a92c7662d49c4b3617698ac253f03feafabeccd3399ed035df9357878a1711322f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.422\",\n        \"version-display\": \"3.1.422\",\n        \"runtime-version\": \"3.1.28\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-arm.tar.gz\",\n            \"hash\": \"9cbccaf303f693657f797ae81eec2bd2ea55975b7ae71a8add04175a0104545208fa2f9c536b97d91fa48c6ea890678eb0772a448977bce4acbc97726ac47f83\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-arm64.tar.gz\",\n            \"hash\": \"3eb7e066568dfc0135f2b3229d0259db90e1920bb413f7e175c9583570146ad593b50ac39c77fb67dd3f460b4621137f277c3b66c44206767b1d28e27bf47deb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-musl-x64.tar.gz\",\n            \"hash\": \"8ac9004d6d6f8c679746de18ee24ac99d1a0d2a3da2fa490adc75462da70c057fd1375debc0d5fd2369aa82bafd8f65d02df04ac497199d13cd71682db09ebd0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-x64.tar.gz\",\n            \"hash\": \"690759982b12cce7a06ed22b9311ec3b375b8de8600bd647c0257c866d2f9c99d7c9add4a506f4c6c37ef01db85c0f7862d9ae3de0d11e9bec60958bd1b3b72c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-x64.zip\",\n            \"hash\": \"269d78298f5ad1ecf5415d5788bb4168c3ffa6b790b9ee58797d4400dd553b3a739c2a5a489c816d216e17e5b47a7442af0392e9fdcf2753db575e2b776d6f32\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-osx-x64.pkg\",\n            \"hash\": \"e921dbe4bc6fced993072ca2a9d6c39aa964b382158e9e4862a79b45bf24757ad0a1b95a6f64afd563f55b5a9e4cd7a3a90c433ec07dace74e4a7defcd7c8bc0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-osx-x64.tar.gz\",\n            \"hash\": \"9f919e42a692e048405b52cce8938fd4c40e7dcdf9c6c29eaa41940af7846cd2a678b5c43222d1cb988236917e47d85f37212bfe0c2dc6973cd5a8f2799838ff\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-arm.zip\",\n            \"hash\": \"787cb43f6040c02b23db0b8120ede5bb2256f8c5cb21e8885eedd99207c52183b2437998878313c0820bd47ec9adb94747ad263bdd4a1b1b792e07112848e05e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-x64.exe\",\n            \"hash\": \"baaa610c64d8b5f90b4d2aae4c3b198a804fc13083f7a4dce20d18c7b28bfb10ade19b54e79f59a2b00b2107171b850d80e0e6659db6d834f593be97c60100a8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-x64.zip\",\n            \"hash\": \"07d13dd458dcfbfbc31a4cea3eb28b77aa25385a1eeb5e28af031fa2098564a811372679cf4d725445e6d43315b609582732c238b894dccab489713fc0056c56\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-x86.exe\",\n            \"hash\": \"81320ceca1eb705d6292c1e5551dae83105cb712dce862e0ac50266fccf9bd84a9acfbc6b33255c97b2be885d0c4b50e01cefce50d4fa72826de36eb64432300\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-x86.zip\",\n            \"hash\": \"c8d9a690f40366f2eb8ad2cb3f8764e5da9cda134435fe9424ea4f2bd08935c0818d146427073f82733a066aabac218765ac519deacb9a6bad35344847a0a8de\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.422\",\n          \"version-display\": \"3.1.422\",\n          \"runtime-version\": \"3.1.28\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-arm.tar.gz\",\n              \"hash\": \"9cbccaf303f693657f797ae81eec2bd2ea55975b7ae71a8add04175a0104545208fa2f9c536b97d91fa48c6ea890678eb0772a448977bce4acbc97726ac47f83\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-arm64.tar.gz\",\n              \"hash\": \"3eb7e066568dfc0135f2b3229d0259db90e1920bb413f7e175c9583570146ad593b50ac39c77fb67dd3f460b4621137f277c3b66c44206767b1d28e27bf47deb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-musl-x64.tar.gz\",\n              \"hash\": \"8ac9004d6d6f8c679746de18ee24ac99d1a0d2a3da2fa490adc75462da70c057fd1375debc0d5fd2369aa82bafd8f65d02df04ac497199d13cd71682db09ebd0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-x64.tar.gz\",\n              \"hash\": \"690759982b12cce7a06ed22b9311ec3b375b8de8600bd647c0257c866d2f9c99d7c9add4a506f4c6c37ef01db85c0f7862d9ae3de0d11e9bec60958bd1b3b72c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-linux-x64.zip\",\n              \"hash\": \"269d78298f5ad1ecf5415d5788bb4168c3ffa6b790b9ee58797d4400dd553b3a739c2a5a489c816d216e17e5b47a7442af0392e9fdcf2753db575e2b776d6f32\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-osx-x64.pkg\",\n              \"hash\": \"e921dbe4bc6fced993072ca2a9d6c39aa964b382158e9e4862a79b45bf24757ad0a1b95a6f64afd563f55b5a9e4cd7a3a90c433ec07dace74e4a7defcd7c8bc0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-osx-x64.tar.gz\",\n              \"hash\": \"9f919e42a692e048405b52cce8938fd4c40e7dcdf9c6c29eaa41940af7846cd2a678b5c43222d1cb988236917e47d85f37212bfe0c2dc6973cd5a8f2799838ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-arm.zip\",\n              \"hash\": \"787cb43f6040c02b23db0b8120ede5bb2256f8c5cb21e8885eedd99207c52183b2437998878313c0820bd47ec9adb94747ad263bdd4a1b1b792e07112848e05e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-x64.exe\",\n              \"hash\": \"baaa610c64d8b5f90b4d2aae4c3b198a804fc13083f7a4dce20d18c7b28bfb10ade19b54e79f59a2b00b2107171b850d80e0e6659db6d834f593be97c60100a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-x64.zip\",\n              \"hash\": \"07d13dd458dcfbfbc31a4cea3eb28b77aa25385a1eeb5e28af031fa2098564a811372679cf4d725445e6d43315b609582732c238b894dccab489713fc0056c56\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-x86.exe\",\n              \"hash\": \"81320ceca1eb705d6292c1e5551dae83105cb712dce862e0ac50266fccf9bd84a9acfbc6b33255c97b2be885d0c4b50e01cefce50d4fa72826de36eb64432300\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.422/dotnet-sdk-3.1.422-win-x86.zip\",\n              \"hash\": \"c8d9a690f40366f2eb8ad2cb3f8764e5da9cda134435fe9424ea4f2bd08935c0818d146427073f82733a066aabac218765ac519deacb9a6bad35344847a0a8de\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.28\",\n        \"version-display\": \"3.1.28\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22195.28\"\n        ],\n        \"vs-version\": \"16.9.24, 16.11.18, 17.0.13, 17.2.7\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-linux-arm.tar.gz\",\n            \"hash\": \"086f7ed75527807b9701e9edb9f12672ed603cd8bce05c76bd4fd7cb4a0d09130134570fa4dd82d2f47f989941e63b3e8cc2ae30eb256d7f9a3a41bc861c6f32\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-linux-arm64.tar.gz\",\n            \"hash\": \"28371a6888d41e938f14cceb6c8a4471a1f0d7b585045e65b914f23ffb894f72a66a4a4cdaaf6d21dfd60063bb35d88c36fce8d4411a89c89b52023807639f82\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7df8d13ce92aed09c397b992758503fb8db3dbb5c0f7fa5f96326283abdc96721ec22a6f64d27519e64cad99d65cffafe4bcdb3ccc0ce027831c51b1c06ed426\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-linux-musl-x64.tar.gz\",\n            \"hash\": \"b701272d4bf935594d2ee0f3346d70d758a7a4c7a06f0fd05df5fcc869dd0a24bf60caf8ffd6e42f74046b78e247ef568b604dbf57dcaf51ba5b925b6e2ae33b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-linux-x64.tar.gz\",\n            \"hash\": \"fd66f9c0d0e9ed57abe5f81650c2ff49c694e05927e5280dbbdee1a9eb4299f0710bdc06ae0af0737c0a0584970b24d3eb952434b45ad8984fe3e37ca95cc1b1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-osx-x64.tar.gz\",\n            \"hash\": \"965b23a32a9734c72515430e05d395db506a3a802997a6268ed42e24a700f06e5971cd38102f4ceb9c9d85d8515c1b0d11d4e5fbf8adc00c14060cb503a8faf1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-win-arm.zip\",\n            \"hash\": \"558701a09401e810047c15b302ec9565e4a6ecd9abd2bd1c28ad52fe2cacfabb10527773334e1a03abd4b3e80d392d1899417e201f02ff7bae43d979f64eede0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-win-x64.exe\",\n            \"hash\": \"5cf11e19eb2484d967a2d5540e7e949b01e0b2ec2e07c38e274b5a640f2368e04e5e44563e2904506768a95abac41f286d88e2431a43d39a7207f06baaec0b83\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-win-x64.zip\",\n            \"hash\": \"58eca4780b91b5e6742a7f1a4f9ff9d6189c763a3981df12d0353a456569d0261c6585aba5fe7cce3b56e821240aa8eab05a780993bd9d964a42e68912d7427a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-win-x86.exe\",\n            \"hash\": \"d9fa7af2bc220f898ec6fe42402a22f8eb3166c4acf2fbd9866964831b53132216d538ad686d05527cb657c8b23ccf15357ffa50a8482163e41379c5b5969b3b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/aspnetcore-runtime-3.1.28-win-x86.zip\",\n            \"hash\": \"714348dc73c9097c023485f47d5d036946c912db8505ed9007508cce6fe042358cd745fbe32a10f42185e7b4d9171e93ed32e233dafe9cd79b3065e68d617d81\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.28/dotnet-hosting-3.1.28-win.exe\",\n            \"hash\": \"15601212032e186b8411fb5c68fca2e5e09c3bc8809dc6cf2b21bd1de9f713df5b3e810ee393bfe818d69e64c043acaeb34960f305fc5c8cd72fef6548638578\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.28\",\n        \"version-display\": \"3.1.28\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5c74593e-f156-44c8-9957-f11996de72bc/d3e0e26c64a5a2d860c5c0deca975d78/windowsdesktop-runtime-3.1.28-win-x64.exe\",\n            \"hash\": \"136d33cacf2511a143bb329a12288e7f1bb262bfb4603455ab7653f5d1f026525870e2b18df020413eac4bcb6d1f3b5c58a94132eba2c344daa28e0800e203e8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d2ec7ca2-017d-4d06-a6da-3707daa3c3b1/1f2e108653e3d8316e1657105ef24b93/windowsdesktop-runtime-3.1.28-win-x86.exe\",\n            \"hash\": \"264b635541dc739fdac3998f0a391f71978505c048ef3b30b71c594f86fbb22d176a33ae19d5c73d906bec8da2556fe22eff80760e30a42961138664dbad2994\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-07-12\",\n      \"release-version\": \"3.1.27\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.27/3.1.27.md\",\n      \"runtime\": {\n        \"version\": \"3.1.27\",\n        \"version-display\": \"3.1.27\",\n        \"vs-version\": \"16.9.23, 16.11.17, 17.0.12, 17.2.6\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-linux-arm.tar.gz\",\n            \"hash\": \"b34ffc3b918cd2ab028b1d788fb49953fea4a1132266be7f469bbd6e4cb9f62a51a2d48599d04bb4998668ee866fd3b49fa4bd5b5216e4fc77846ff7d0a0f699\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-linux-arm64.tar.gz\",\n            \"hash\": \"7593e2bd9128bcf46be0e002e2f4f8d4c6ca0afd12d4ca07d9d172244b61e1ded3426579f459f6b4416b139aa54d84b2720fd20bd98ccfa8f2e5fecb427c3227\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a5ddf7254d620437703215ff3a4292a31585f7349a85db87b2ee855726d1e55828715d38806439ba01ae4221ff562bd3c46e65cceef4b80999ee836d966539ef\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-linux-musl-x64.tar.gz\",\n            \"hash\": \"20fed726e85ff1aed1f53afb4a193fdac83275636f8a9370b0de8498689e0f82919c45df5aa128e68f5323d2cedc8b4ecafff192ac8765f2e2cdacd6ecb8a920\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-linux-x64.tar.gz\",\n            \"hash\": \"288fe52b68e02d33bddf7a27ceaf49bd7db795e9dee56930b52978c5d856bf38c0aa3010bb3acfd25313114a3837587f1efe8f7aa248f6e71e4659589d7be097\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-osx-x64.pkg\",\n            \"hash\": \"5034ce85e585385e63fcb061ecef1bdd5dd6f71c2c33434fef2f725026844657452a6e9417692b3903c4247cebc4819be434b888d8d691fde638bcbb08f9d413\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-osx-x64.tar.gz\",\n            \"hash\": \"946fdbd7eb386668fc4f86463f01fe5b5c8d9a6041884160db6f761ab9e8d7de71bfd7a7ce570a319d6a9b0147789e70cd3a6c88254562abd131d5c8de1419a3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-win-arm.zip\",\n            \"hash\": \"da7f4fd431e157d4aeb666f76ddd0028228fe29c74dd32e8dab3f23532337ee3926ad36a634967fa5fbd9c2a773194b8f92fc05958c59115e2c312d51ad1629b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-win-x64.exe\",\n            \"hash\": \"c6a647f2c8704ffc6d6ae60f870c70f52841e7174b5c21478644d0946f189acdab8b87948507ce63a814eabecb5c8ef2923bfb219bf4d3295d49cd15cd16e0eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-win-x64.zip\",\n            \"hash\": \"48f7d213db11b18819cab31a29c849d509eb624ba3b0c69d67d14ebbd436f7fa5be006d80fc173b90d2a1f6eb2c56a7ac8741206fffed6c83f1ef927e6dd981b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-win-x86.exe\",\n            \"hash\": \"efe1672b40bdecb52f7c6adea55c15221566db15149d04d14ea3d52b85a52ad20c194e997b0b81ee7cb852a2dbfa26ee0ae074a41b3c2c09afc460208fff6ad1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.27/dotnet-runtime-3.1.27-win-x86.zip\",\n            \"hash\": \"346b0a8586cc45f01923af9b6afb2a364e9a334118aa2b682e45db4b645cc53a552f899e82424c01696c8299dbf6088c003cd82bfe70a97d2305418176480063\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.421\",\n        \"version-display\": \"3.1.421\",\n        \"runtime-version\": \"3.1.27\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-arm.tar.gz\",\n            \"hash\": \"412b30ee45554de69844e4297354680fdc5111c270b5e41af73db212117ee101878b87eb4592bda4c314ec0d7406ba8ab449d83466267f78198ce09fc32ef425\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-arm64.tar.gz\",\n            \"hash\": \"c584642469343c2c54fa02a7157009fa36bae9b304512db0a2b0069f71593ee2ba47070896212def0541460f37bf1b0a478b914e08a2c78b985cb2981e5ab6c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-musl-x64.tar.gz\",\n            \"hash\": \"189a7cfed48be012d90828bbbf83bdb8970c3dfeeb2cf4d5a746c13c49dccbe336842639a8877073e4b02c961f93be584c87bcf964cb37f15092f8f7e5064567\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-x64.tar.gz\",\n            \"hash\": \"9f592db89ddfdfa3254d59c39f227109e0f87f156a8ab00595bcf332fdebd3e873fb9e07c875905aaa8ba5022e6e551e2d9516cfb855d04ec781313521595431\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-x64.zip\",\n            \"hash\": \"0c2b227d326337459dac0034dd66d85152d9150acf9bc2ed991c609a92dce69adb12144625c1b044075a9c1983f02d575e55fe845239b356294352b2018dcd5c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-osx-x64.pkg\",\n            \"hash\": \"de6e841a7a97f794bf8816b759f62c636c23f49ca4698a0648d9b5e4533a7be1fa2b8ac4f969ce935a16a7272065589b85c8b7e8708738d2dcc05af4782e7140\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-osx-x64.tar.gz\",\n            \"hash\": \"706c3a5d573c4adf6fe2e34891a4909877ebcd2fea46228f714232cf414c72814ae3a83c82f863434b494f9306010e11142135e042d61cd1739acffb18c310c3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-arm.zip\",\n            \"hash\": \"90c8f493d96d4381128a90f653560a94524d3c5c37c19027d307e83d043aeb035cf351d16b8129b5328ced551e3385c8cdf539469cd1bc781f1cf2f7532dc8e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-x64.exe\",\n            \"hash\": \"3b2e6b694cfeb4ac248f5fc38fa8cdcf8d8cea5fe93a2592a3c714051f254ce92eef971352c23177db4e0e5ef81f772b70354755e1ae90c4583cf2bbfcc55c85\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-x64.zip\",\n            \"hash\": \"e36bf71eb1ded57921f756e930c63cb1f8b26d2a4d726740135c86117f433c13ee98e22f097b3c831ce93ba00844c374b75242d8c88f5c9384a3270140a74cb6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-x86.exe\",\n            \"hash\": \"12fcb5f4bd58955be517b871176120efa34dd6cfb6e6c111fab3bfe2786bf04d631f3c0caa87c8d0fadcdce48139d23e0d35283e65db84b3950e8444cda82dbd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-x86.zip\",\n            \"hash\": \"4d482972d716fab763d56534a1fc3e4b4169d2e3ea4480278eadc670d52e71452f1dd8c978330ae7c0f2fc196c7a9554c0d28f4ec87edcd28cb46a2f8fcf1aa2\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.421\",\n          \"version-display\": \"3.1.421\",\n          \"runtime-version\": \"3.1.27\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-arm.tar.gz\",\n              \"hash\": \"412b30ee45554de69844e4297354680fdc5111c270b5e41af73db212117ee101878b87eb4592bda4c314ec0d7406ba8ab449d83466267f78198ce09fc32ef425\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-arm64.tar.gz\",\n              \"hash\": \"c584642469343c2c54fa02a7157009fa36bae9b304512db0a2b0069f71593ee2ba47070896212def0541460f37bf1b0a478b914e08a2c78b985cb2981e5ab6c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-musl-x64.tar.gz\",\n              \"hash\": \"189a7cfed48be012d90828bbbf83bdb8970c3dfeeb2cf4d5a746c13c49dccbe336842639a8877073e4b02c961f93be584c87bcf964cb37f15092f8f7e5064567\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-x64.tar.gz\",\n              \"hash\": \"9f592db89ddfdfa3254d59c39f227109e0f87f156a8ab00595bcf332fdebd3e873fb9e07c875905aaa8ba5022e6e551e2d9516cfb855d04ec781313521595431\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-linux-x64.zip\",\n              \"hash\": \"0c2b227d326337459dac0034dd66d85152d9150acf9bc2ed991c609a92dce69adb12144625c1b044075a9c1983f02d575e55fe845239b356294352b2018dcd5c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-osx-x64.pkg\",\n              \"hash\": \"de6e841a7a97f794bf8816b759f62c636c23f49ca4698a0648d9b5e4533a7be1fa2b8ac4f969ce935a16a7272065589b85c8b7e8708738d2dcc05af4782e7140\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-osx-x64.tar.gz\",\n              \"hash\": \"706c3a5d573c4adf6fe2e34891a4909877ebcd2fea46228f714232cf414c72814ae3a83c82f863434b494f9306010e11142135e042d61cd1739acffb18c310c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-arm.zip\",\n              \"hash\": \"90c8f493d96d4381128a90f653560a94524d3c5c37c19027d307e83d043aeb035cf351d16b8129b5328ced551e3385c8cdf539469cd1bc781f1cf2f7532dc8e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-x64.exe\",\n              \"hash\": \"3b2e6b694cfeb4ac248f5fc38fa8cdcf8d8cea5fe93a2592a3c714051f254ce92eef971352c23177db4e0e5ef81f772b70354755e1ae90c4583cf2bbfcc55c85\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-x64.zip\",\n              \"hash\": \"e36bf71eb1ded57921f756e930c63cb1f8b26d2a4d726740135c86117f433c13ee98e22f097b3c831ce93ba00844c374b75242d8c88f5c9384a3270140a74cb6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-x86.exe\",\n              \"hash\": \"12fcb5f4bd58955be517b871176120efa34dd6cfb6e6c111fab3bfe2786bf04d631f3c0caa87c8d0fadcdce48139d23e0d35283e65db84b3950e8444cda82dbd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.421/dotnet-sdk-3.1.421-win-x86.zip\",\n              \"hash\": \"4d482972d716fab763d56534a1fc3e4b4169d2e3ea4480278eadc670d52e71452f1dd8c978330ae7c0f2fc196c7a9554c0d28f4ec87edcd28cb46a2f8fcf1aa2\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.27\",\n        \"version-display\": \"3.1.27\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22167.27\"\n        ],\n        \"vs-version\": \"16.9.23, 16.11.17, 17.0.12, 17.2.6\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-linux-arm.tar.gz\",\n            \"hash\": \"4137f2e27a9c9d8c78fc9b8c416082588dcc2d8dec7d5b4d92c8a09cc31ad2b9972a0ceacfaf451bdcdf9f46cf279f9ef9bf4eb922d8ca539f3640907dd8d558\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-linux-arm64.tar.gz\",\n            \"hash\": \"3f2aec61ea701dd4aa467863eb841d55f059e4dbf5dc54101072b039106699e4d7ecf62094906cc25473b4bdc8c6682522cd020f9af00a5a67027b2c523cdbc7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fac06b2bf77f9f74c1d42528f63e09d0805a2f1a654dc7b89bbbb0e467f0efa28a8830097c7c2135ff6c6853261c8c21e28c1c7a9995446fda4763b62f72cd35\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-linux-musl-x64.tar.gz\",\n            \"hash\": \"5d73545eab4293d64e8904b9205bc63b1f9c702f391b038209e55ab5d83d1e44517c12a9e0b8dbc7d445a4703a0780ca0f85b077db5a006cda9208441d24f6fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-linux-x64.tar.gz\",\n            \"hash\": \"80f300c9081d66ecf911707f39772c437e5e6a4d6603fef48300b7e94c29d5520de08ab2b6b687786e22460381477ed30a2a69245364d1b4cc0753b124caaceb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-osx-x64.tar.gz\",\n            \"hash\": \"54415fa819d56b3a252213cf48b42d26260e496b208b3c71242d52877a677586904eeb6c209f0ec2bf88d412dc25ee2634f14008007b0bb0b360a64c6bee6159\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-win-arm.zip\",\n            \"hash\": \"ba93c86492b206c5e39f42b6505add7ec48e3578c3ba54453d84bf5b994d717ba0a896cb09d0cfb70a34a766e1c8cc54210cc76487eb547bd95f9d51147d687f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-win-x64.exe\",\n            \"hash\": \"f5917c1e6fde13b4b55f2342cdacb7521c1cd4ed4b9b964427bec01f33a21da7ad7f66fb8a5bbdd32e97eec7452c0e59fc30510978b8b0b29caa9dc4ce3cf4b8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-win-x64.zip\",\n            \"hash\": \"0f58efce295de91875ba730557dacc827f34d8331907be501f50709d4047a536ab0dadc6faf2a6f355267f395b96674fac897dafa2ffb551b78b4c700404112e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-win-x86.exe\",\n            \"hash\": \"d87703b48dc47ff9358242d5819176483dc27270dead0ba89f43299bded664441bb0bff0ea021121efcae4c1203ac14e581960eda5558e77ad434dde41565d26\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/aspnetcore-runtime-3.1.27-win-x86.zip\",\n            \"hash\": \"9fad93a56d945a3965e6af7a0a4ed85c7b5a2f71b0da4bd430268c0bac2253eba9f01057a5878665f86b3d00e38fa1f96eb8d4374ee20d1052b56a2d66971bbc\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.27/dotnet-hosting-3.1.27-win.exe\",\n            \"hash\": \"b7654facb15fa30d513b145300d1ef8a0ab94571361ddc862b1956b0cf93b99c094cbfd2fd2cc01a1d4755a83c5af1368acdbd8b732c2f4a6e838a15eb07c355\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.27\",\n        \"version-display\": \"3.1.27\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/60789643-4d4e-4770-8a8f-570a834c7ca5/1195f4b1ee94d16a107040a5ae511845/windowsdesktop-runtime-3.1.27-win-x64.exe\",\n            \"hash\": \"6bb512746027f30852709d5e7cb011137ea0f55cdb75368f730b8733819a60ad60ba5121893e6863866661368e9bbb6404251f39387e7bd3a574f5c29250f4c5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6e16ee29-4486-4c4e-8090-2afd3b372532/f1643131475e45c9b6d1e064860cd93e/windowsdesktop-runtime-3.1.27-win-x86.exe\",\n            \"hash\": \"13717dfec6dd569bff35ff9c3241603d67c03c8f2f7a2d07075b3028c2ca67413c81e5a1dfca0d1f5b1dcb9fcc9edafb663e9d8468189a05902b34f68331a3cd\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-06-14\",\n      \"release-version\": \"3.1.26\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-30184\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-30184\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.26/3.1.26.md\",\n      \"runtime\": {\n        \"version\": \"3.1.26\",\n        \"version-display\": \"3.1.26\",\n        \"vs-version\": \"16.9.22, 16.11.16, 17.0.11, 17.2.4\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-linux-arm.tar.gz\",\n            \"hash\": \"41abcd90159ca29ae512a76f3f5c5233e508279a5a6aee600802857345e626f87aac8a3875f23835662b74c0d57653fdfe177b30f49c3908c55e9b22ed6fd9c2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-linux-arm64.tar.gz\",\n            \"hash\": \"574409616f5cbef35a2bd6fd1a2f0bcb3bdaa81457aea3af5e0e237ba768ced5214c51a3045697fe7478e8211e2045fc2072e382d6f456509a8f2923e9b1fc26\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-linux-musl-arm64.tar.gz\",\n            \"hash\": \"73b25a229deabdcb3258d8b135127c5745bea6726de3461dc828f95b00bbacc241719d904379ceeace5d36fc30650e7f7fa39f33a3cde130553656e4de9f8107\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-linux-musl-x64.tar.gz\",\n            \"hash\": \"2cf8665c74feb5ae7917f07d8d904a0207fb6d50db41f28680be290e691bafcad7ebf5aa4f3a39e96bd700da5a5f87e05c47a4763ec973d4ff08eb1b06dc50e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-linux-x64.tar.gz\",\n            \"hash\": \"03676885ec4d1f5ba184678a6b774f8e385abfff800a6bcee6f85557b39e9cdde500be49b5d6c956fc95cdfb9f33d31e467548bb498a52bc4fd639b3cb87c8d0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-osx-x64.pkg\",\n            \"hash\": \"08b972e6054a12403ec161264636271e223f8aa35ce8e6a7c20d05705f1d8ca6b6a7f3a39ac3591c1b655c9f2f38a017df75d6289e846d7d752c357e5d0c0f5e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-osx-x64.tar.gz\",\n            \"hash\": \"7957b5e697db7548964c399197ae8e61cc31f15374df384b6db9b47472a7d6f1b5b3e256c191e203c4d18c18cc8bdb6c4a331c5875bd37bd6415f3c83b8062da\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-win-arm.zip\",\n            \"hash\": \"4e95b3bb6c62a5d612dbd1045b5ae7dfc8eb353fb16f8049495cc1ac82aa53ee0a3bf5ff9f512e307065d1e3b5b69c1d81c5ced39086a29434c41d9fbfbb7d1e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-win-x64.exe\",\n            \"hash\": \"caab7929f99fe25b03520f861ad5f2fca7f482bdc643c98d18575d0ea7c5c68ec951443a8236c6afddecf924fcb3939ace204956608163ae9ef857e97ed61201\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-win-x64.zip\",\n            \"hash\": \"5bee2f991d59acfcccb1755de470988db8639a9cbfa567008db2a44f4dc85c8edefbd08725ec23764eb1e79ff2f5103931ae775b34db436f345659c778206605\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-win-x86.exe\",\n            \"hash\": \"026062c5feb223e0a9d6a512815e9a8681c80dc9ddfe455549bc09be7406b806737afb07b0570d46321e6553307a458a6190e24310aa442e742243b70c814c00\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.26/dotnet-runtime-3.1.26-win-x86.zip\",\n            \"hash\": \"d750a83bf1c59542e7408e5b0ac3be0d5b26ae1090e27696c0d6f4c8fb8a32ab92874a745aa08929d7954764c8b8ddeddbe4cbefbe3107202703d552f83d7a6f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.420\",\n        \"version-display\": \"3.1.420\",\n        \"runtime-version\": \"3.1.26\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-arm.tar.gz\",\n            \"hash\": \"d61cc1a5dc345d4c32bb06bcce1e50d603103294783460c811a87635eb14fc51c58869456f3326cfb689fdb7b379d2410f5db5bf63332aff173814035a319c28\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-arm64.tar.gz\",\n            \"hash\": \"ac66b1544fe178153bb85c2e5be584464374ce4c036fc95720547c231c2730312018fbdfc735f9071579749415bc54e1f6b8f080cc2b08d5799a0da941e8a5f5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-musl-x64.tar.gz\",\n            \"hash\": \"e4c383f57eddb94c61ace06ddc1e896e44a0eb37a068a5d533442044dd615ef4478fa1ddd0747835be7b8913a090bd29be45930c8a256ec10a087baede9cf10b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-x64.tar.gz\",\n            \"hash\": \"b3bdd964182f9edc3c2976541e657fcc43b0eaf9bc97197597c7ecb8b784d79e3efb9e0405c84e1dcb434cf4cd38ddc4af628c5df486c3d7ae8a23e5254796e3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-x64.zip\",\n            \"hash\": \"a095fbdb12a09f64d7614fbb21edb18e064ad41894c39924c3d3caddab631aac3bdde96a4d90b5a8538c1692928a6db1c23509fa9d5b8ad8bea1b5f2b5d1bc6b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-osx-x64.pkg\",\n            \"hash\": \"57f1685b7d6057d64206f96eea29fb8f59260ca4a8bac22b15c338dc2c2ac2f47a3887c4e4d373a76b13aca2622db0103a53a75218765438d4a86ba37f968357\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-osx-x64.tar.gz\",\n            \"hash\": \"370cba4685e07d1cdb5d7f9b754812b237802ace679c9b9985c6e5c4dc09f500580f1413679a288615079bd155b68b362adb00151b2b8f5ca7c3718ab9e16194\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-arm.zip\",\n            \"hash\": \"64c6dfdbd5963246e936058e3dbf197cb081f508ba77b940f371cef187ba44a1e3b7205f77ae4f4960fb1c96ae483cb9210a98901ff027e8df8090fbb1e55202\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-x64.exe\",\n            \"hash\": \"0ee8f5d0ed47d6095500953b94349e6cb6f620bbfbbba670557e2420217eaf008131e241799e4e60e59472f7a65788bf762a10acc96bf59cbc7a56c784034abe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-x64.zip\",\n            \"hash\": \"ccb5418be598f8a58493609a058a04a5b9181ac6fdf9b9b51772646ecbe2ae58e19fe76d2fc8a10c401460259458b658684a4bf4604b6cf28c4ac4eb4e9b0d3c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-x86.exe\",\n            \"hash\": \"2860ea7781f1172ecbdbc6c5d8ab6f7e85ef446ea4a6b2ea22ad598092c3d0493d2b0773b664235c325385cf6b9b1c97152f01fb9dce60f39df059331efd6d70\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-x86.zip\",\n            \"hash\": \"1a8dd4fba5a3d4f3fe83060b49fbfca3d0fe3495293fae669ac38bdbf6b55a9efec867d9f9a0132d03708c97f4a7ea2a318a6bfcd72b70510e31e500b755bcf5\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.420\",\n          \"version-display\": \"3.1.420\",\n          \"runtime-version\": \"3.1.26\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-arm.tar.gz\",\n              \"hash\": \"d61cc1a5dc345d4c32bb06bcce1e50d603103294783460c811a87635eb14fc51c58869456f3326cfb689fdb7b379d2410f5db5bf63332aff173814035a319c28\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-arm64.tar.gz\",\n              \"hash\": \"ac66b1544fe178153bb85c2e5be584464374ce4c036fc95720547c231c2730312018fbdfc735f9071579749415bc54e1f6b8f080cc2b08d5799a0da941e8a5f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-musl-x64.tar.gz\",\n              \"hash\": \"e4c383f57eddb94c61ace06ddc1e896e44a0eb37a068a5d533442044dd615ef4478fa1ddd0747835be7b8913a090bd29be45930c8a256ec10a087baede9cf10b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-x64.tar.gz\",\n              \"hash\": \"b3bdd964182f9edc3c2976541e657fcc43b0eaf9bc97197597c7ecb8b784d79e3efb9e0405c84e1dcb434cf4cd38ddc4af628c5df486c3d7ae8a23e5254796e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-linux-x64.zip\",\n              \"hash\": \"a095fbdb12a09f64d7614fbb21edb18e064ad41894c39924c3d3caddab631aac3bdde96a4d90b5a8538c1692928a6db1c23509fa9d5b8ad8bea1b5f2b5d1bc6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-osx-x64.pkg\",\n              \"hash\": \"57f1685b7d6057d64206f96eea29fb8f59260ca4a8bac22b15c338dc2c2ac2f47a3887c4e4d373a76b13aca2622db0103a53a75218765438d4a86ba37f968357\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-osx-x64.tar.gz\",\n              \"hash\": \"370cba4685e07d1cdb5d7f9b754812b237802ace679c9b9985c6e5c4dc09f500580f1413679a288615079bd155b68b362adb00151b2b8f5ca7c3718ab9e16194\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-arm.zip\",\n              \"hash\": \"64c6dfdbd5963246e936058e3dbf197cb081f508ba77b940f371cef187ba44a1e3b7205f77ae4f4960fb1c96ae483cb9210a98901ff027e8df8090fbb1e55202\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-x64.exe\",\n              \"hash\": \"0ee8f5d0ed47d6095500953b94349e6cb6f620bbfbbba670557e2420217eaf008131e241799e4e60e59472f7a65788bf762a10acc96bf59cbc7a56c784034abe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-x64.zip\",\n              \"hash\": \"ccb5418be598f8a58493609a058a04a5b9181ac6fdf9b9b51772646ecbe2ae58e19fe76d2fc8a10c401460259458b658684a4bf4604b6cf28c4ac4eb4e9b0d3c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-x86.exe\",\n              \"hash\": \"2860ea7781f1172ecbdbc6c5d8ab6f7e85ef446ea4a6b2ea22ad598092c3d0493d2b0773b664235c325385cf6b9b1c97152f01fb9dce60f39df059331efd6d70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.420/dotnet-sdk-3.1.420-win-x86.zip\",\n              \"hash\": \"1a8dd4fba5a3d4f3fe83060b49fbfca3d0fe3495293fae669ac38bdbf6b55a9efec867d9f9a0132d03708c97f4a7ea2a318a6bfcd72b70510e31e500b755bcf5\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.26\",\n        \"version-display\": \"3.1.26\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22144.26\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-linux-arm.tar.gz\",\n            \"hash\": \"ae09b848d6a550ac1c04763de2b1b8bdd1860f0fe3c45278cd2fcaa700e54379ae09500ec917c36cb24b4b19f67629d08faaccba39ebf2e2b0cf58db2db253b3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-linux-arm64.tar.gz\",\n            \"hash\": \"757ff6cbc31b1c8743077288d7fa621c73fa7f4d155d636ad100cda6e1f601e31d2f842d5cfef3dec5daa4c8c3efbcf76f02afd1c518cae7b67b2a46a9faab08\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-linux-musl-arm64.tar.gz\",\n            \"hash\": \"655c7a0fa346a96b5ab5e64baec089ccf6333424f20dea043dbc195558278ecfe32129e5b33cf316d8cb4e4caa45c5310265368ac3cfbd97dcf9679709852fd9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-linux-musl-x64.tar.gz\",\n            \"hash\": \"7c0aedbdcb400df6d33fff31ca63f468f6440cfe3630f7181a52bc8953d4c309eb75215a1050ca41a1fda8f0bb826d6ebfe3b9ce82f30d4b438030a6e28cd755\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-linux-x64.tar.gz\",\n            \"hash\": \"8bbf06012cdd2cff23c592e0d3c49d032d77add4dda8fba1d7ba73e6cc4ae97b1676908b14cdc7fc2fe723302e1efd27a44b48190a91d69c0e41bb5edb47501f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-osx-x64.tar.gz\",\n            \"hash\": \"0657d8b11a58357f5374e5d8201b401e55f9f4710794be565f7b9022d10639c2e72aebc6b7433b34fd24a03e8e12541c998fad28b5263de4439b3d31a8252c4c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-win-arm.zip\",\n            \"hash\": \"179cd23243b353913c6eaf0c67aec5c34763bce68cf0ae8ce4a3def24e24865230c76c179f68aa14e76d5fee60c4e8bda588ab438694fa3434645c9b0194253a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-win-x64.exe\",\n            \"hash\": \"e5751b95a9390877817f74cb16c902d6f7d39fb2f04aae44b976f9a649d7cb6126c7d9579841a1639a47a6d917c1f29ac59b0f0ebd17e5002909aea94fe3dcb2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-win-x64.zip\",\n            \"hash\": \"3bf68ba912cd4a193e22df9554860a631502de2cd1016b679a0650b5588c9e3a2d97f1ad990ef1325749fa619acb037616da0244fcde4e3a0baddae15ce9d2e1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-win-x86.exe\",\n            \"hash\": \"0f047b95de2a6afd6b2e89f8ce1f9e3ddc3cf0387c014e38c9bc9e683839a48d2104ecec826df1b24f2ee148ab7db100d094c7f16d3b0fe97c96f27114fe1325\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/aspnetcore-runtime-3.1.26-win-x86.zip\",\n            \"hash\": \"468aed12244359a08625b4d20c100c7621e94832580ecb1d81141d1e7a8bcd2c7a40e81cbf812b75a73c12e19f5f257cb46e97f6ffcb1ce2a224363cfb13ee18\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.26/dotnet-hosting-3.1.26-win.exe\",\n            \"hash\": \"e6c28869b72486985e14feb7ceb55bbdd6417fd9cfee480a2364d53ad267dd374669f09a581be0a0b65bd214151ce00f42e914dc2899f0dd6e09f183417dd02f\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.26\",\n        \"version-display\": \"3.1.26\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a40ed796-b721-455e-bf17-574d905fd8d7/b5ce5020abaf4317855697cb5d085695/windowsdesktop-runtime-3.1.26-win-x64.exe\",\n            \"hash\": \"1f22fb7316b5db72151f688323782427e8eb706f4899a4489014e34f9f6433043f407987942dd33d2a894bbcc3edeed55866b65d3dcb60d2951c6031d7dc15c5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a4ddd21c-0c40-49a2-bea4-a9209e214953/6381be0ed116cf2ee2cc72c9b4ad35ce/windowsdesktop-runtime-3.1.26-win-x86.exe\",\n            \"hash\": \"fbf713e05e3ac57a1d0578de2b07e6e69d93b656117460c295b29c18822c3fb947dae7c42ade9836c88fe28c8fdef23d6fce230fe55808b33a68312a4c037576\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-05-10\",\n      \"release-version\": \"3.1.25\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-29117\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29117\"\n        },\n        {\n          \"cve-id\": \"CVE-2022-23267\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23267\"\n        },\n        {\n          \"cve-id\": \"CVE-2022-29145\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29145\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.25/3.1.25.md\",\n      \"runtime\": {\n        \"version\": \"3.1.25\",\n        \"version-display\": \"3.1.25\",\n        \"vs-version\": \"16.11.14, 17.0.10, 17.1.17, 17.2.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-linux-arm.tar.gz\",\n            \"hash\": \"a0950ef427e07e4de7111411fb12389fda15193a84f22ca04c8a43e16bfe451ba34338def07dcfd3cf530cda0b14b4e69dac83e38da753e8cc708d6090c62dfe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-linux-arm64.tar.gz\",\n            \"hash\": \"894efe2c65702b6b99812fdea82672ec8534fa3cee66185266ff06c7fc7d6e9bb5ab12c1a9aee7a9f8f0873fe1eef402a22f34da1860d1f9ec068574380cba10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3f80826bf922a17c6b08e92488335c65342abb8171a1eed017cdbf663e3c7fa005e115afbf0b1f9a6b4cffd7477f0dd53913cee63fdc04910e661b1b7691aec9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-linux-musl-x64.tar.gz\",\n            \"hash\": \"ae4c397f2c0ddd9da99650f2cf22d3cb2cf13aa7feb25d79992b30f44ab49989d4d96d2671caeb962eaace58f2a1dfec2e5e5248b2ed35f1d1eb44343e12ba4c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-linux-x64.tar.gz\",\n            \"hash\": \"e5155a0d26837b53bfc9275bfcd69eb7400bd8b2004be69e339f62ce36b6333f1f2da8d391bb98e4cb3630a20b68a0a0f4e6f8d1558a4cb0a53da796a71c214c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-osx-x64.pkg\",\n            \"hash\": \"4ad52db4a59c351377cb48486d8250da5b7975fdffa3b0793f63cc434ae70e34e350ce64d0a2e1aeabc37907d2a5acb5fb69175282ba1d5c3eb6756b80c90d44\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-osx-x64.tar.gz\",\n            \"hash\": \"8086b5da32f538648dfc550851c15ff7ff5f1eb184a429ffb360a77c09896ca3fc11a38c7c80e6a18321b0aa481b21f46505d7f64ded02083b31b00bdf55685e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-win-arm.zip\",\n            \"hash\": \"16cc034f0355e11ec457ea8bae2d09c07808cbc5fe951d3e42ac0c6daabbcf33062ec97f11a7e04d26909f762f595c50e1c1bd19bb1385721d5d003c6bb78bf9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-win-x64.exe\",\n            \"hash\": \"df2b73cfa42dd9899baac8fb80b6d4849195268c6ae7c75f1c6296aebea53e0a0964bdb9f09ad53af56920f96632a16078e1d9cf368f455b3cf43d4025fb19c1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-win-x64.zip\",\n            \"hash\": \"f694930889dd21d2294946f85bc1a0c0b28c876fcc27ade2b6c102c106469f7baef044153919307ab639337a443b891b7890cd92be2b269e5acd9ec8ada7a1d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-win-x86.exe\",\n            \"hash\": \"b29c20b28d8f55a84c7d6767f1f78ba049f804452874338d9f701facf75086de462644d5d0fc7896851d7ec4b3fd77af4fc2bbbecf377244c8cb36bc38810e3c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.25/dotnet-runtime-3.1.25-win-x86.zip\",\n            \"hash\": \"938f2866209d2b3ad1526f7859a209abf929120d00d2c2d7480efe0c54b264327a38e78a692dbd7117056156fcd8dd051b1eb9471092860dcaacc3ea295df543\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.419\",\n        \"version-display\": \"3.1.419\",\n        \"runtime-version\": \"3.1.25\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-arm.tar.gz\",\n            \"hash\": \"a89d857200f5ce4d65f662f1acd70f0d8a6eb7fda0ae7ca904cf7b50a6772378a42c7d11ce0dac27c522d642fee0ad67c9da64ce0e7edbe27f28df776b4a45d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-arm64.tar.gz\",\n            \"hash\": \"94f398c09b53c10dc3e4ed1f624eee19b18770734956ebb0cb4ac9d789c1a79a891c1934e7c4c3a2bed5326ee1a0417ee89816695ab2436b3db7076328a40b77\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-musl-x64.tar.gz\",\n            \"hash\": \"f2afe43d1234007c4dd5794cb3d18a9b5ff50a29719a6b7efe777e4e17fc08e52c76bd67c53a86772e2cff6c382faf20f0d63f250f393601fbf05bbda3a06d6a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-x64.tar.gz\",\n            \"hash\": \"957d9561b346226806270a969a302217dec2a5e4853225d73fbf85f20f6107137ac5678a6ffdf5c170a72f5ef93e3defe3218970bc20d97a4f880d5c7577376f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-x64.zip\",\n            \"hash\": \"25266d6a0baf46856d87f9d354e84184e71aa6002ba31e9c826a53db4087697b3ee2ef2818c1ca04c75216c5f28d0be6c745ae76cb02c3f0e8fca31c91ac33c0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-osx-x64.pkg\",\n            \"hash\": \"6e7be47fb9d3de591e7a473ca4d55807801bf83e8858c159d89fe2ef6ceec7d3f232d6604c1dee54aa980e49ba15733fdbcfe1244018c63e0db264fdafec39ed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-osx-x64.tar.gz\",\n            \"hash\": \"8e838fcd15d5d170bcb75e8e3cb14b626965ebe1ba58af8605b951461e0dc11d97d05c2cd76777978c72d0109c476e0cedf82772d445987697a7e23d3c7f0b1a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-arm.zip\",\n            \"hash\": \"d36d965c846226532a737cca417b1260b35f100bd58bb21fd1361464a6819173de6be9ef51405696d0acfa9aede418448b139bc68b6bb94ce7d57eda1bf8f357\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-x64.exe\",\n            \"hash\": \"709625f097984a8b327bd7ffb79f96494e9cffb7582af6579fac3929177fcf4a3416cc663bc94dc866599a890133bfc0c93d1d0bf6f6770ce18c1646d24cbc11\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-x64.zip\",\n            \"hash\": \"6fb9d6aeed88e8c9499230dbcd0bf5783c6741d0b5837867449057adfe300cc068caab9303361789441a079acd92b9cb7c73154187ece7fc4b210e2dfdbbca70\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-x86.exe\",\n            \"hash\": \"434dd622d49783c5bcbeee74eed6fb90b5d3f18843a2df9f676992848457dda7bfc76109a472c516b9f4c00d562ab5f2d33e498ef02c76cc29647b2e44ffbd45\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-x86.zip\",\n            \"hash\": \"f8c1f02547d50dfcdf82924617043939c0fb346a9c610e65abc85e9cd121cd7809b973b069d6126a399dd57eeb5047194c5ab6898f171134ae3131103c44499d\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.419\",\n          \"version-display\": \"3.1.419\",\n          \"runtime-version\": \"3.1.25\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-arm.tar.gz\",\n              \"hash\": \"a89d857200f5ce4d65f662f1acd70f0d8a6eb7fda0ae7ca904cf7b50a6772378a42c7d11ce0dac27c522d642fee0ad67c9da64ce0e7edbe27f28df776b4a45d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-arm64.tar.gz\",\n              \"hash\": \"94f398c09b53c10dc3e4ed1f624eee19b18770734956ebb0cb4ac9d789c1a79a891c1934e7c4c3a2bed5326ee1a0417ee89816695ab2436b3db7076328a40b77\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-musl-x64.tar.gz\",\n              \"hash\": \"f2afe43d1234007c4dd5794cb3d18a9b5ff50a29719a6b7efe777e4e17fc08e52c76bd67c53a86772e2cff6c382faf20f0d63f250f393601fbf05bbda3a06d6a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-x64.tar.gz\",\n              \"hash\": \"957d9561b346226806270a969a302217dec2a5e4853225d73fbf85f20f6107137ac5678a6ffdf5c170a72f5ef93e3defe3218970bc20d97a4f880d5c7577376f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-linux-x64.zip\",\n              \"hash\": \"25266d6a0baf46856d87f9d354e84184e71aa6002ba31e9c826a53db4087697b3ee2ef2818c1ca04c75216c5f28d0be6c745ae76cb02c3f0e8fca31c91ac33c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-osx-x64.pkg\",\n              \"hash\": \"6e7be47fb9d3de591e7a473ca4d55807801bf83e8858c159d89fe2ef6ceec7d3f232d6604c1dee54aa980e49ba15733fdbcfe1244018c63e0db264fdafec39ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-osx-x64.tar.gz\",\n              \"hash\": \"8e838fcd15d5d170bcb75e8e3cb14b626965ebe1ba58af8605b951461e0dc11d97d05c2cd76777978c72d0109c476e0cedf82772d445987697a7e23d3c7f0b1a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-arm.zip\",\n              \"hash\": \"d36d965c846226532a737cca417b1260b35f100bd58bb21fd1361464a6819173de6be9ef51405696d0acfa9aede418448b139bc68b6bb94ce7d57eda1bf8f357\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-x64.exe\",\n              \"hash\": \"709625f097984a8b327bd7ffb79f96494e9cffb7582af6579fac3929177fcf4a3416cc663bc94dc866599a890133bfc0c93d1d0bf6f6770ce18c1646d24cbc11\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-x64.zip\",\n              \"hash\": \"6fb9d6aeed88e8c9499230dbcd0bf5783c6741d0b5837867449057adfe300cc068caab9303361789441a079acd92b9cb7c73154187ece7fc4b210e2dfdbbca70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-x86.exe\",\n              \"hash\": \"434dd622d49783c5bcbeee74eed6fb90b5d3f18843a2df9f676992848457dda7bfc76109a472c516b9f4c00d562ab5f2d33e498ef02c76cc29647b2e44ffbd45\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.419/dotnet-sdk-3.1.419-win-x86.zip\",\n              \"hash\": \"f8c1f02547d50dfcdf82924617043939c0fb346a9c610e65abc85e9cd121cd7809b973b069d6126a399dd57eeb5047194c5ab6898f171134ae3131103c44499d\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.25\",\n        \"version-display\": \"3.1.25\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22110.25\"\n        ],\n        \"vs-version\": \"16.11.14, 17.0.10, 17.1.17, 17.2.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-linux-arm.tar.gz\",\n            \"hash\": \"fc6ea45a5b89f7ff66a863e89b477d94b329a3f6e0b03b9dfacc31a85a0b915f4f68aade825bbef1e0bb0f4b6fe7c173be7cb24b5cef685217d6a3919598d465\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-linux-arm64.tar.gz\",\n            \"hash\": \"003d0294aceaaa51adc2dd0d22fa645eba612e33c70504979b152f16f8fde8d0d07cee9056c5871a5773269f9724840f1618828620e1a31ae9b7ff6117c0336d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-linux-musl-arm64.tar.gz\",\n            \"hash\": \"aab5fbb9578354519737f495adbbf9ded777c4f20c21872912e60475515b30f62e130acb91d7c5dfa4575b37b393fc0f05cf8513844e4922ce7ff9acfd31ffe5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-linux-musl-x64.tar.gz\",\n            \"hash\": \"1f8c12190a16fff5a8454262cd0e9bed7660ad63278c34d2935889ed043a56130a11dc2167c84277d4cdaee1a292a77b52114f411781a0bae74f72d663a9e05c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-linux-x64.tar.gz\",\n            \"hash\": \"6b0d39062374d5574cd5b52bbce033f7769f231494f9ff93ba6f1368195742eb1796f25268fee8a2f44ed34a44d822d11b8ff8de0ba06515e75b88c3cfbd0244\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-osx-x64.tar.gz\",\n            \"hash\": \"1ee7c019d185364bbbc4612a07a7cf2e056101ed382bc2ce821b392107a944a9f922c43d37e57457b0f55efc349900668c05b2022908b355ad2b8aa736394bff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-win-arm.zip\",\n            \"hash\": \"21cdf1afbe9d844066b7307eef1b85fd65411208e11c3c5466b3cd46712f1a4c9a1f307dd026a380967e8cd8acabd00b78e7da9c2cd0b620ea080355923b054a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-win-x64.exe\",\n            \"hash\": \"cffd3dc877aba014534abebef8fb88559a4f6d24570d55cc732c56d01270b699ba0aadb1db56e74f3c78d988b0a72bc001aa3dc86b37538cff54dc978982060d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-win-x64.zip\",\n            \"hash\": \"7ca3cfaf814b12fbfc65a0faa1f858dece790fb08f814f99c5e1f062ead7a75db6e13e035aaa0d5d9a07a487b84496ecda23f9e4cc92fca4dd1143fda89cc898\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-win-x86.exe\",\n            \"hash\": \"6d54a7501dba5c98028b088b1bfdfd9d9b542558122a3ee6190222eb053c858deeb2ef490a473bb8c0c68080a4a72a426727c2449255ac735e09535b0a7cfaf4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/aspnetcore-runtime-3.1.25-win-x86.zip\",\n            \"hash\": \"22bc03ec9390f0438c5289405f68993a33dea062e7462be8eb483d51f779c1481b68e3cf40a845ecd2eaacad3df96523a8b25c4f3fe0412c27953cc7ff122b3b\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.25/dotnet-hosting-3.1.25-win.exe\",\n            \"hash\": \"d57c188da3f837a8eb4f36fb8b895a08e1772af62aab4c7b397d0bb7384aeb76c6ddd13660d7c2604376d10188f895403414bead52549999d9598369041f9c34\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.25\",\n        \"version-display\": \"3.1.25\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b1c43147-5635-40e4-b5b2-49075772b8db/d1cc338cf20775e487a52879c103df2a/windowsdesktop-runtime-3.1.25-win-x64.exe\",\n            \"hash\": \"bd55c2fbaca42ea26c6c0cd8e000e1df94af7fe3ad91e9703367a073e1dfc736365d088e9aeea63e8590550672ab30a43809addeed7990e0a8e5a4f9b0104c57\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d696e537-033e-4a2e-902f-0daf743b4c14/d60e6abafc1235b6d75410ab9ce5cec4/windowsdesktop-runtime-3.1.25-win-x86.exe\",\n            \"hash\": \"8ceb186444ceb1a7235259bc629a425e824a9853aef07bf5ef8d493d2323663f97e9babd666fbe1fe37baa540195d373d338eb36f39e589e73375ff69f5219b8\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-04-12\",\n      \"release-version\": \"3.1.24\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.24/3.1.24.md\",\n      \"runtime\": {\n        \"version\": \"3.1.24\",\n        \"version-display\": \"3.1.24\",\n        \"vs-version\": \"16.7.27,16.9.19\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-linux-arm.tar.gz\",\n            \"hash\": \"30e2453419f0bc84d08db0436ed924fe2633bafe1e7a7513d3bda939e6c201b2387351d5f8724e4964f3d760d336c771312988c94b1f145d74a706e414f166f1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-linux-arm64.tar.gz\",\n            \"hash\": \"8d6a47104097e0872f2685046d3a26a5d63cb27a4b65b5510d8b41861eace611f75c585d9a818f985cb7d929d7f174acd5b9ed1147f97a82c6579eadd645ccca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ee679a99a89a0f4a843595fc0fd3cb72883612e8bbe2a38edc6803014c6999bd4aac208ecee77899a19aefa347379888c2a9676c1b7e0689019eedf139f0e51e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-linux-musl-x64.tar.gz\",\n            \"hash\": \"fb5328fb29e71c5f35c5c5e08a57db6d27b9fe66ee2a01f72ecc7fa097da1d9e1939c20a75ac0fad4937a19eed28f299a99d1c94fcbbe040f55ac53ee3eea00a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-linux-x64.tar.gz\",\n            \"hash\": \"78a5f277fbf21ea6c656f62f6c9bd19e07b425f19e804e32881364b004f121a04d042647faef23806ecbeed98a0568197d89f558b9c8f204bafcce5ea4621352\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-osx-x64.pkg\",\n            \"hash\": \"53ce400f94cf9ebe9bfff848e26b457739fdbaa9f10ad13a88830cda2b30ce5cb0cd5f7320f617657dc2d6b69519ae02af6d001e00c9b82fa29109008ce2df88\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-osx-x64.tar.gz\",\n            \"hash\": \"ef44c9cd7d53ce35a0cd38b6fc520c3f4e685e69251ffe97b56bec26f4819cb5550f8ca60114e070c229e4f6ebe87f34c07f1e1ed60daa5230c8dc3f34c338bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-win-arm.zip\",\n            \"hash\": \"a9a309a53ae7d60210461f31d32c205429ef79e8700b2528d99230a1c221d087f05a0db192ba443a122c2931bc506750b94b5ca6a6677233994e6e0cb1b33263\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-win-x64.exe\",\n            \"hash\": \"02e9d615f4bed530d5afa4fcd137ff2759451894c8a577503892dbbdfc9f523f75b1e267f48fb47a3f50c6259e01d3edc10d780e0145aaeb4faf5677b8d288e5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-win-x64.zip\",\n            \"hash\": \"34a79c6e6de7b9d086079744fff6e4a7feb6c9b2bed1132877b76b6e694313968371ed1615691ab0e983edf342a8bd019d50dc2af49921b6fc9a5a2913a450ab\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-win-x86.exe\",\n            \"hash\": \"b4fcbfcb629fcab32cb29ff115d728fa373d150025f3bb03ad322c5886b4f9f70c40a98ffb4bc8408dfb79116da30e27c4cabfee19a85da0034c507d73bbbe78\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.24/dotnet-runtime-3.1.24-win-x86.zip\",\n            \"hash\": \"836f0d9d92a5c89959939ff317dc755c5750c7f63938e388ff063e2d103939438cc33952f6818e003b3fcfa709562edfa1ef1ec1879c9b06bc3c1ca441fa04d2\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.418\",\n        \"version-display\": \"3.1.418\",\n        \"runtime-version\": \"3.1.24\",\n        \"vs-version\": \"16.7.27\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-arm.tar.gz\",\n            \"hash\": \"a5edf84b01740767cd0ed2d7e8f84ed66bd786fc61bc93065d3125c8eac123e6c383e7155e5ead31e344b691e23788b240f812d5a5759fa0d764c0e336f2cc22\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-arm64.tar.gz\",\n            \"hash\": \"8c3f1254a27991f116f499b11aa389266bc63b93a85ab7103b398bdf14225755277499ccb8297012f572732e5e521c23d02fe3d99b552ecadf8af2867456ebc5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-musl-x64.tar.gz\",\n            \"hash\": \"c79f2f1de4da11c2c87e98ff894a4959685071fd2f3c74210caee276208bc18647b30d5641e15b342300d30c6d4f949b6c3a8d60cdf7d5a81ad63f5319f0be70\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-x64.tar.gz\",\n            \"hash\": \"e60f14841f1d0156de163f6f1e4c6358f14bd57e81beed13d294022da8a5182e41b8333591f92c4cac8eec138b7bc85725c19ae10e4e73a139a5231bb12b557f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-x64.zip\",\n            \"hash\": \"c9c9b096a1c85bfaeba06e651334a11002e8c343137966206f0845ab1aac1f5185c6fee0052ab51fc2d6371a5d8d28737c421c134bef2311b03fa74510a0452c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-osx-x64.pkg\",\n            \"hash\": \"1730d4d0a9f9e58819f3a095f39f1fe029cdd52cfd66ed8ed11c75a09fa0da52e2d0dcc83e59035494edf6743c82aad234a8c25275f6e8bb594959e0081e0a7e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-osx-x64.tar.gz\",\n            \"hash\": \"d4119638fcc93d3bdacea99021a0588d9adb494ca0642eeb0e9f6b604c63745e1765d7026347c1b518cbe4a4948668315b9cd5106fc11ceb4120f2b5dfc39a2d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-arm.zip\",\n            \"hash\": \"cd8f12108ea21f8519490f349c603a51597dd5114c731eb29b37d013dd748d9e158d171cb8af999934673d65ce5959d6dfe04ed6af96d120a21d028a745a380a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-x64.exe\",\n            \"hash\": \"9b15157a75a8b1e7c55169f8f68ecc0bd07af4a563f95b228b3f0c75d47053abef31245ef2c2580e7da95eb785e80f739ec4acd872964163b3c99812bd9481b9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-x64.zip\",\n            \"hash\": \"dc8193daab7229e3728c3958060c902e58407218bfaf7b35f984f32713584a6b933df3e03cf36f3fd152d778f4e072ee9dd8d7d7c7429804b72d50bfbc319a0c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-x86.exe\",\n            \"hash\": \"c4453d7791ffb859f88f3cac58046bb423982f14ed9e5b8bfa4999783fc21384d4403c4c699e2345fa9c38f92f061d939d1f3fa513ceead1cd17a611073b0140\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-x86.zip\",\n            \"hash\": \"b05f7e9a773ffca3dcaace324d72e4f9c0b63a3b8da28dd072e44b4c6a2c6b1f501f3eed28255c1d25263c1ad89489620e4d6e05de7a1965c5b11cf9ee23e978\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.418\",\n          \"version-display\": \"3.1.418\",\n          \"runtime-version\": \"3.1.24\",\n          \"vs-version\": \"16.7.27\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-arm.tar.gz\",\n              \"hash\": \"a5edf84b01740767cd0ed2d7e8f84ed66bd786fc61bc93065d3125c8eac123e6c383e7155e5ead31e344b691e23788b240f812d5a5759fa0d764c0e336f2cc22\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-arm64.tar.gz\",\n              \"hash\": \"8c3f1254a27991f116f499b11aa389266bc63b93a85ab7103b398bdf14225755277499ccb8297012f572732e5e521c23d02fe3d99b552ecadf8af2867456ebc5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-musl-x64.tar.gz\",\n              \"hash\": \"c79f2f1de4da11c2c87e98ff894a4959685071fd2f3c74210caee276208bc18647b30d5641e15b342300d30c6d4f949b6c3a8d60cdf7d5a81ad63f5319f0be70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-x64.tar.gz\",\n              \"hash\": \"e60f14841f1d0156de163f6f1e4c6358f14bd57e81beed13d294022da8a5182e41b8333591f92c4cac8eec138b7bc85725c19ae10e4e73a139a5231bb12b557f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-linux-x64.zip\",\n              \"hash\": \"c9c9b096a1c85bfaeba06e651334a11002e8c343137966206f0845ab1aac1f5185c6fee0052ab51fc2d6371a5d8d28737c421c134bef2311b03fa74510a0452c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-osx-x64.pkg\",\n              \"hash\": \"1730d4d0a9f9e58819f3a095f39f1fe029cdd52cfd66ed8ed11c75a09fa0da52e2d0dcc83e59035494edf6743c82aad234a8c25275f6e8bb594959e0081e0a7e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-osx-x64.tar.gz\",\n              \"hash\": \"d4119638fcc93d3bdacea99021a0588d9adb494ca0642eeb0e9f6b604c63745e1765d7026347c1b518cbe4a4948668315b9cd5106fc11ceb4120f2b5dfc39a2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-arm.zip\",\n              \"hash\": \"cd8f12108ea21f8519490f349c603a51597dd5114c731eb29b37d013dd748d9e158d171cb8af999934673d65ce5959d6dfe04ed6af96d120a21d028a745a380a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-x64.exe\",\n              \"hash\": \"9b15157a75a8b1e7c55169f8f68ecc0bd07af4a563f95b228b3f0c75d47053abef31245ef2c2580e7da95eb785e80f739ec4acd872964163b3c99812bd9481b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-x64.zip\",\n              \"hash\": \"dc8193daab7229e3728c3958060c902e58407218bfaf7b35f984f32713584a6b933df3e03cf36f3fd152d778f4e072ee9dd8d7d7c7429804b72d50bfbc319a0c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-x86.exe\",\n              \"hash\": \"c4453d7791ffb859f88f3cac58046bb423982f14ed9e5b8bfa4999783fc21384d4403c4c699e2345fa9c38f92f061d939d1f3fa513ceead1cd17a611073b0140\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.418/dotnet-sdk-3.1.418-win-x86.zip\",\n              \"hash\": \"b05f7e9a773ffca3dcaace324d72e4f9c0b63a3b8da28dd072e44b4c6a2c6b1f501f3eed28255c1d25263c1ad89489620e4d6e05de7a1965c5b11cf9ee23e978\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.24\",\n        \"version-display\": \"3.1.24\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22089.24\"\n        ],\n        \"vs-version\": \"16.7.27\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-linux-arm.tar.gz\",\n            \"hash\": \"3d14f2c1af96173b0bd9734b7c833977b6d69ceae791471445023c1fad25639a2166d6b2ca7b57ce09b6c060073faafe470a9599c6d30fd25dda63f55905daea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-linux-arm64.tar.gz\",\n            \"hash\": \"ca3c4536cb8b4464f11fc528744fc1c0c972f5e743b0e05c6da965551f64c521ee8110fa90f3346a5253071718342144abf2cdaa9012482ce1b4176a48a26478\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-linux-musl-arm64.tar.gz\",\n            \"hash\": \"242cf82d00cac6493627b07a7ffa45e1a62881146793b2b5db977f9755cad218b764ef540bf5dcc3f5d3241b7eb48255eda10227d372832fa97603295519edd3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-linux-musl-x64.tar.gz\",\n            \"hash\": \"1341b6e0a9903b253a69fdf1a60cd9e6be8a5c7ea3c4a52cd1a8159461f6ba37bef7c2ae0d6df5e1ebd38cd373cf384dc55c6ef876aace75def0ac77427d3bb0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-linux-x64.tar.gz\",\n            \"hash\": \"49e4796e44fccc5ee8ec6b5506a1f2d0a0de123b152ac3f9320823699a0e1f8895d83f13ab8f7273863ec64274a06027ec7f8896666b9c43b1f0d3ec3b3ef81a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-osx-x64.tar.gz\",\n            \"hash\": \"9f05e47e13745bfe9b932c4d26d23540a14c4321768842e89c0a4e5f4ee0579c7b125ade3685efda9462a0d9aa37977d2bbf2ea0acc946cd3c68c78a662a13ff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-win-arm.zip\",\n            \"hash\": \"65d74dbc08f533191bd28efc2114446d592f90687ba1c49724480268e733f934f8e1c37f9ab9e8b7b67f35394e618b7f2af198bb3be5762fa585b3478f8b465d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-win-x64.exe\",\n            \"hash\": \"2ec2dbbc40086c89b91b8c011fc541ee751f022145d79362b192f2307883b2f23e2c8a89a21b42d6760733ab537de180808984d00231f2d9c03a50b99f338d6b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-win-x64.zip\",\n            \"hash\": \"3c97deaf0d17cab017ecbb59e2256447dca10bbdcfe6a8c9e9635deab9f616e4e4cb5ccc5eed3cc382570523ff8667be069f6520c2907094af199b153e842115\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-win-x86.exe\",\n            \"hash\": \"964f79d086cacc059c83566be4ab3ff95941cb9b171ffda897abcdf7829fcd23aa2fe46d9ea7cea294224a4ff4520a65634cd73305e6fe29cdf6a9172baa4980\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/aspnetcore-runtime-3.1.24-win-x86.zip\",\n            \"hash\": \"1f3fc72787589c861113f0d1277394c8862003f79daa9a57c759da82a828d57ff3fd5de7a79645d804f1aeeb22170148ee45291e9421ce61f466d20bf2e95c96\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.24/dotnet-hosting-3.1.24-win.exe\",\n            \"hash\": \"0d8304f403f2fad403b58071c2b3ecbf25a2e4451ab76de3285e8076c6df852090baf5cd90c90b9d87512a1f4960cdd6113ec84d67c73f21e1b909e41be14e10\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.24\",\n        \"version-display\": \"3.1.24\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c561eb57-4bf5-4bf4-aa3c-bd6dd0342c6a/5257304cf597d41ac6369c02813412c6/windowsdesktop-runtime-3.1.24-win-x64.exe\",\n            \"hash\": \"ce899e0b7464835eb21eb6db9be3c8068a0137196dfea3825ddf79bf08ab3ba277f921bbb75e43a976fb97d709fcef6dc020e7a8899497e3114b07fb857baa7b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/510706ca-1040-4fb8-934b-f28af4fa522a/92919ca73e073d210a8b2e76c5172b25/windowsdesktop-runtime-3.1.24-win-x86.exe\",\n            \"hash\": \"72b029a85f967c4525d939ac839b255e899d84ce904001e6295797964850361da3bc596a26e2176032f787c25c22ae3fb5adb605c4e081ddcb97164c20a2094d\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-03-08\",\n      \"release-version\": \"3.1.23\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-24464\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24464\"\n        },\n        {\n          \"cve-id\": \"CVE-2022-24512\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24512\"\n        },\n        {\n          \"cve-id\": \"CVE-2020-8927\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8927\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.23/3.1.23.md\",\n      \"runtime\": {\n        \"version\": \"3.1.23\",\n        \"version-display\": \"3.1.23\",\n        \"vs-version\": \"16.9.18, 16.7.26\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-linux-arm.tar.gz\",\n            \"hash\": \"59f2df4a1f4170312c50a3a1673c1744c5bf0b2eec44b0d1d8b8d7dbe95bcb7be64e5600243d3ff3bfdb912dbcc49275228b2c03dcc8848e15cb256aeac0eabb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-linux-arm64.tar.gz\",\n            \"hash\": \"0fbde71deef7a82a0382dc9d5381525ccbfe56e7608650f91c23e0174aa36f36186ab41c8523bd508817e0f8750279a6a7ff1f605790f21c3743fe68e85542c3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-linux-musl-arm64.tar.gz\",\n            \"hash\": \"af37e25e32c5f6047eb5c69b14e7a61c40c6f374175dc73ab193af4a9423270c3a680824b9f5038545e4b2da5c36fcaf23f6c9bbf09123410f96f78c4694d58b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-linux-musl-x64.tar.gz\",\n            \"hash\": \"2c250089dbe6390edae9511253e2fe0e234a81f44f95676812f576ac479c3ebade4899373dfd6e5130e1dfaf1a5be80c95e8d897a3bf451d0d9cef33c678a609\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-linux-x64.tar.gz\",\n            \"hash\": \"5f9b800a4ee13c4dbab98348f97010211f8bfd412cafeebb89972beebb2fd69c4b7c03971683e025577696a6d943f2cbcf0b7dba766eed846beb1281cbe14182\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-osx-x64.pkg\",\n            \"hash\": \"eca6cde85c9ee449f330fd00b25d34334d1a0922d73853b8a1757bc2f66c3a1b8b2e00022fb8977daf00c632b1637a2faac1966d96075f93f4fafbc71f811b1a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-osx-x64.tar.gz\",\n            \"hash\": \"f0d9ae5775db60b493c7d2e6bdabb06d3b1014975259c8468f79a3044a4247d69605e1e8d707c0d4b7e772788a132480297b6d9011232ec3ba64bbcea2c0e4b3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-win-arm.zip\",\n            \"hash\": \"c2139eb00244a5a3c46b183c83898bc5494997ac650888d58dc45f8efa769ec827590c594e2e8b8bbf1ddce89f7bb00f2cc925b5874b594d3137e71de1df8bfc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-win-x64.exe\",\n            \"hash\": \"369f40c43aca91aeb9aeafb0a34269c7dc60f2938db867dc3a17b3de2a398ec2ca000085edc0678a95836183a9fe63ce38c3825f33832ccea7d3fc5371f35a54\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-win-x64.zip\",\n            \"hash\": \"825757a369b816e31a58e63cfb50c5cc4df9b338b91a135c32b11eb5bf25b30cb3442f1c769c603e8c59980352757beb6c8650c1102dd11b0a358d627cb8ddef\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-win-x86.exe\",\n            \"hash\": \"1a3de5dc1c6c6916fe82b29bd56ef9142d01095da9a1b87de51ef477822426d370b0c305b27d89284c26716b8781786091c6cf2f4f2a0c2f91ecd6157a8536ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.23/dotnet-runtime-3.1.23-win-x86.zip\",\n            \"hash\": \"8c5bd084fdd530c86e65ac89248d525da3f6b61ee40bd5ec18c5f579b05a0783df4b7c6ca8c8118acfaf4f7845236f0446823bfa59af121e8caa994b3e8b627c\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.417\",\n        \"version-display\": \"3.1.417\",\n        \"runtime-version\": \"3.1.23\",\n        \"vs-version\": \"16.7.26\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-arm.tar.gz\",\n            \"hash\": \"d68f9b130f4a516cb199c9010a42acdda0c9e8c705bce0e72e9854587ee54f5a017b1cea5b84f15dae057531a8a619cffffa1e79f3413d376ba7d7226407574c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-arm64.tar.gz\",\n            \"hash\": \"28ea17c3c8e57721fdafcdf8339a175d4d7c29616597d7dac60362fe4ac8c3a8493612865a37e985729b3d3953caae7fed2f8a11a0d0bb1dd24b1d816d6b6abf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-musl-x64.tar.gz\",\n            \"hash\": \"9fe21063e891ffab8c95df2eefe0ef07cc369ac8c03136778b7e9b58d62081a375628ff47de6b6240681beb63742cc784476e42d6bab020c3c92dc0c5e2a1cfb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-x64.tar.gz\",\n            \"hash\": \"8eb1002ad829ddd17638b942d3f8da24ad71ccab268a92a1fa6af6a65d86a4ab7f885f663ea9c68127bb356462bce125222ec4f04dc928005cbbbb1a8658f107\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-x64.zip\",\n            \"hash\": \"dcb18291995be5d7a603dd2bac4945ed8b373ce70dafe74ae046abf69d14e7254c5bc4ff1eecc1fc97da5e94529154d70d970b14dd70231364f262cedd921e99\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-osx-x64.pkg\",\n            \"hash\": \"a5854b55248365edd324efcd315d8bf26a1cb82542455333b5ffaa3c23b387266e6ba798c66b220cfdca34e70f0a52a21198fa816142b9b1969a6e0f934da258\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-osx-x64.tar.gz\",\n            \"hash\": \"098d96841b798701389fdde25cf7019c6cf175b097f13ade82b6f3b61fcd27a59131f7bb4c24f8e87a28e28a13c6394212a361407a44f644cbbbcc7cf3b9da2d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-arm.zip\",\n            \"hash\": \"5b3f8a4a6631577616ff18d819c261d1a4b8c4142c720f129728d079f4784592fba9c8a8be4aaee9605aeae04153bed5c9ec83ed41c98f21eb78953b38043183\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-x64.exe\",\n            \"hash\": \"79fe1de714101c1437ca2ee8201dac96f684a94e7cc72e2331d46f422a89f4573581d8904769547a193f97986a4951c8f8466970eb849f60202f8ee7a57e30c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-x64.zip\",\n            \"hash\": \"df5d31b18062fb4fda710b27d951be3a5957b2515d8694151c6e7488a70edef85452a0810efbbc4ee81e05ba59f686fd682a5345286222cf0627401aacfb1d8a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-x86.exe\",\n            \"hash\": \"420be26cccd39ae598fcf1bcd2f59d6c14b7736020ecfb318049a9efdbb50058edfde0fc5f106ece1f8b85d611034ec9b726f5cf3cca1a35fd5c90869862325a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-x86.zip\",\n            \"hash\": \"94ea50191270f20d9ca7426d66e3fc8a2bfa6bd21eaa90f457ba81c2e1ae37aae227e5359c889eaef47d9188a776121c1ecdf54ca3c8d2c3c54e6e1fc1ae6541\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.417\",\n          \"version-display\": \"3.1.417\",\n          \"runtime-version\": \"3.1.23\",\n          \"vs-version\": \"16.7.26\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-arm.tar.gz\",\n              \"hash\": \"d68f9b130f4a516cb199c9010a42acdda0c9e8c705bce0e72e9854587ee54f5a017b1cea5b84f15dae057531a8a619cffffa1e79f3413d376ba7d7226407574c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-arm64.tar.gz\",\n              \"hash\": \"28ea17c3c8e57721fdafcdf8339a175d4d7c29616597d7dac60362fe4ac8c3a8493612865a37e985729b3d3953caae7fed2f8a11a0d0bb1dd24b1d816d6b6abf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-musl-x64.tar.gz\",\n              \"hash\": \"9fe21063e891ffab8c95df2eefe0ef07cc369ac8c03136778b7e9b58d62081a375628ff47de6b6240681beb63742cc784476e42d6bab020c3c92dc0c5e2a1cfb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-x64.tar.gz\",\n              \"hash\": \"8eb1002ad829ddd17638b942d3f8da24ad71ccab268a92a1fa6af6a65d86a4ab7f885f663ea9c68127bb356462bce125222ec4f04dc928005cbbbb1a8658f107\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-linux-x64.zip\",\n              \"hash\": \"dcb18291995be5d7a603dd2bac4945ed8b373ce70dafe74ae046abf69d14e7254c5bc4ff1eecc1fc97da5e94529154d70d970b14dd70231364f262cedd921e99\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-osx-x64.pkg\",\n              \"hash\": \"a5854b55248365edd324efcd315d8bf26a1cb82542455333b5ffaa3c23b387266e6ba798c66b220cfdca34e70f0a52a21198fa816142b9b1969a6e0f934da258\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-osx-x64.tar.gz\",\n              \"hash\": \"098d96841b798701389fdde25cf7019c6cf175b097f13ade82b6f3b61fcd27a59131f7bb4c24f8e87a28e28a13c6394212a361407a44f644cbbbcc7cf3b9da2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-arm.zip\",\n              \"hash\": \"5b3f8a4a6631577616ff18d819c261d1a4b8c4142c720f129728d079f4784592fba9c8a8be4aaee9605aeae04153bed5c9ec83ed41c98f21eb78953b38043183\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-x64.exe\",\n              \"hash\": \"79fe1de714101c1437ca2ee8201dac96f684a94e7cc72e2331d46f422a89f4573581d8904769547a193f97986a4951c8f8466970eb849f60202f8ee7a57e30c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-x64.zip\",\n              \"hash\": \"df5d31b18062fb4fda710b27d951be3a5957b2515d8694151c6e7488a70edef85452a0810efbbc4ee81e05ba59f686fd682a5345286222cf0627401aacfb1d8a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-x86.exe\",\n              \"hash\": \"420be26cccd39ae598fcf1bcd2f59d6c14b7736020ecfb318049a9efdbb50058edfde0fc5f106ece1f8b85d611034ec9b726f5cf3cca1a35fd5c90869862325a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.417/dotnet-sdk-3.1.417-win-x86.zip\",\n              \"hash\": \"94ea50191270f20d9ca7426d66e3fc8a2bfa6bd21eaa90f457ba81c2e1ae37aae227e5359c889eaef47d9188a776121c1ecdf54ca3c8d2c3c54e6e1fc1ae6541\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.23\",\n        \"version-display\": \"3.1.23\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.22054.23\"\n        ],\n        \"vs-version\": \"16.9.18, 16.7.26\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-linux-arm.tar.gz\",\n            \"hash\": \"f4e79df54702ffd11c0e86300e9649c54ac30df6d5d42c7c7d8b78e1fb7987fb17789be853546fe6938d573dbda552bec07404f39f8b35efd39da33dff28c13f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-linux-arm64.tar.gz\",\n            \"hash\": \"2fd873ba9362d4c63d3583444e80910115c06a9378c528b06d40b0a49b6626849a9001bf35db32f8959084a33dd4da6b16116e7d240c79920bfd8af0c84b1f0d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-linux-musl-arm64.tar.gz\",\n            \"hash\": \"530801e168078a6a64d24fcf5d3622e8c9042a2a7a92e612c85137958ac57fc9d98cc5812124d373eb56a0ee6d8ac25edc96b09cbe68f0a46673ae287f7562a2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-linux-musl-x64.tar.gz\",\n            \"hash\": \"e4d3547edd7fccab5d824b739355b4eedb8f0b2ba076884898bdecbe1ad040583013ca728386c0e2bcff1cf29071f516107f71fdf7206af2b34c32e2455a4725\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-linux-x64.tar.gz\",\n            \"hash\": \"85390781e27d60bce8ebfe95468ddfa58b7538e42b5391f97a78547f34b792e1601d000a08a399f5599e55efdacc45ea6d7aa5d797e2063aa5063435615ddd61\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-osx-x64.tar.gz\",\n            \"hash\": \"f6818716caad61b503bcc6ed4f5969b319b02e36a5c5e06d6142e168041df35fcb6f2a6bf714768530d956e8e72047b8bdb3c3344f4aa64efc4ec59c553c9733\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-win-arm.zip\",\n            \"hash\": \"e59fe07a3db66274403ff59011f36b0de6f8466bfdf6ebf4c3d9f14c5d090deeb9206986a5e5bfc02ca57cbe259f3c30796e0622cd7d371a1a7085cfbd4e143c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-win-x64.exe\",\n            \"hash\": \"653c45d18174263bfb9bfc75eda4fd336bbd3eb65b559ca36dc21631e1d429e70b5bba350e1874a74cfc5f05b7a527bf4010a6c13bbf01ed87be3926d8b9dd2f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-win-x64.zip\",\n            \"hash\": \"95838f2024a6863a5f24115819a59e4c0eede6087d29c187107065e9f4d51ed94ee9e85c9815deca3f7966e23cde43d066ddc1269c3c765f60ddbe4b2f81c213\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-win-x86.exe\",\n            \"hash\": \"33155269af8732e41bc8368edfb3eecbaac8d3d2aa77181c10fa5e9cf21100849c3edd6c245858d393a67f8dc7ee03dd2b0fe5610af908d0f2c70e39742258b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/aspnetcore-runtime-3.1.23-win-x86.zip\",\n            \"hash\": \"899ed1ae846282757f18a2679cb67e9e35696c373fc1a4790f2ef1a672443f027af9f05f3077bb4dd2a90321bd1e3f076319492d9c23365e147bfbe8edcf2eb6\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.23/dotnet-hosting-3.1.23-win.exe\",\n            \"hash\": \"2de9a44c112a8c1d95cfc36c63cadbab5fc35caa96354588c1a0801c48e426e9ff60e7289742841ed4421aa56609d08c673d8bcf735376293e1d870cfc0a01bf\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.23\",\n        \"version-display\": \"3.1.23\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0bc6a80a-3f07-411d-8ce3-17aaeb7388ac/ed1000a04fc9c8dca5af35b53263d9ae/windowsdesktop-runtime-3.1.23-win-x64.exe\",\n            \"hash\": \"4143ef87c5ab77d52b57aa38edb1ee61d7638ab8c81aa4aea9cb298acc641f7a972e6cfc35926297e63ee4b228d74a1e7234bc70bfea7d526558558c2a9da347\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c5fa66c0-fe4f-471e-81ac-8f6574518709/b729e0728b756672758ec3927b34c1bb/windowsdesktop-runtime-3.1.23-win-x86.exe\",\n            \"hash\": \"a28206b21186190416f31498f29f256b5d1d5530c2e2d839b052bd3287694eb5e9c54d8f98960cb4acf44f9cf30e38b7aa83b607ea5f36388e1076601f047e1e\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-12-14\",\n      \"release-version\": \"3.1.22\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-43877\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43877\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.22/3.1.22.md\",\n      \"runtime\": {\n        \"version\": \"3.1.22\",\n        \"version-display\": \"3.1.22\",\n        \"vs-version\": \"16.7.22,16.9.14\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-linux-arm.tar.gz\",\n            \"hash\": \"2b189ab7fa7c2a42c155a270c59ec149b78194aa4c84c2e35b236e757ae73b7d0055bcade6d45e208f00e391fecb04fa5f71ef51a6a0851f29949517d33086fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-linux-arm64.tar.gz\",\n            \"hash\": \"ac7abb9273d1446ecacf536d2c59b01f23de81a21db035c98e53f63f64f8c3d252b613c24b7f9ea9e559f9c75385d93528ae0207aa7b734dba421c8871f312ed\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3145597fe5fb4d8d08839e744a2c517591a03c6d287c02390a65eb99d4559a9ee593568a09044fe1d583f44f4a398cf0c309b7f6c5bea0d6ed5d63c57bdae650\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-linux-musl-x64.tar.gz\",\n            \"hash\": \"708d17a4f3fc0bb866343f359e88543c99c70511d1d90fa3c889ce126bd2625f2ce3118552dbea52b3410b70586ad5f551453de41c6cb88ec77e131854979955\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-linux-x64.tar.gz\",\n            \"hash\": \"4e32b45086fbd630622d20b0b2316d0c9bd66647b38ef1475c9bf8ef755bd60ec7eb8055a8de2bf89ed96e0460abc9e68f500189dd5437e21f2dfbd4fc71693e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-osx-x64.pkg\",\n            \"hash\": \"2b6d859f6584acfc5d39d54c180ce8425bab873a05b39ffd83c78542b9aa0c58e43f1c726710950289e5a3c4acb0336782fdfefec036424218c55ca587f19e23\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-osx-x64.tar.gz\",\n            \"hash\": \"36e6d407c9a349d864bb90f23896514f8ab3cd50188539221f779b4a719c4524bded3c1b581743de94a6bcf687f1ac142033df9902414402f6f2cade13683f4c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-win-arm.zip\",\n            \"hash\": \"aba6b0a3e499bd4ed84b8143277b71bda6172d6100dceda592a5c378af32fbfdcc8a7ea9c9317c08d7d14b77bc87c65f53bb2c18891e7e27ad84f1f5ccf10641\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-win-x64.exe\",\n            \"hash\": \"fa348c8411c525a7dc4e4167dfe34f0619a87928e8e75415964d985c82c7e5b74ab4c71447110cd3449b4086a7dd896a905192f3f006b8e51f0971b157bc92ba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-win-x64.zip\",\n            \"hash\": \"302ebd2348ca893646f1574ff38b8db31dde91c52ec60f23019a5f28cb72ad268facf2c0ee23d201ff0187ba5ee4317f01eb9c6681f88356f3da7d5d2f3452f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-win-x86.exe\",\n            \"hash\": \"18b91be665de5be64e7cc787ef7c46daee229e189fddadfc21a4e82d73113342f97b08f3cc89ff55a09d461b3a3f76dc0d265a2513d3cddc3f5f9635ead7c3af\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.22/dotnet-runtime-3.1.22-win-x86.zip\",\n            \"hash\": \"2a20b4730eebc73dce892ed0b747000bb343d85316de268032e93c7ff0724bc0cd03fd125131aae4ae1208b42ed2d63abb36163ffcec142125d1efc2326edab7\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.416\",\n        \"version-display\": \"3.1.416\",\n        \"runtime-version\": \"3.1.22\",\n        \"vs-version\": \"16.7.22\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-arm.tar.gz\",\n            \"hash\": \"33a6d64f466839cc30adef87909a2ff98ecdf6bb763b82a7951314ee8eded7dc210297f914d4aa0b9c0b101aa0c33da97cb15ff64c5f83f08b212b885d662e90\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-arm64.tar.gz\",\n            \"hash\": \"0065c7afb129b1a0e0c11703309f3b45cf9a3c0ea156247f7cc61555f21c37054f215eb77add509dad77b1d388a4e6c585f8a8016109f31c5b64184b25e2c407\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-musl-x64.tar.gz\",\n            \"hash\": \"252837690f099ee756705559a030715dd19836c8f7b2d0364beb9998fc78596586d045e2a7f23e16143be2dbccf19470eec1818486790bf8d9160c166eeb72dc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-x64.tar.gz\",\n            \"hash\": \"dec1dcf326487031c45dec0849a046a0d034d6cbb43ab591da6d94c2faf72da8e31deeaf4d2165049181546d5296bb874a039ccc2f618cf95e68a26399da5e7f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-x64.zip\",\n            \"hash\": \"300c5f06f6bca14a04db47a94d3d0333dbd941c8bfc2524eeab48def6c7a884bb9e3f9f2fdd073c43eb67d7cf42d8633fd7547df2053ccd16b669ac425c22597\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-osx-x64.pkg\",\n            \"hash\": \"1beee3205abd7b41d39d227f78956fd68ee5556752fd5a0d8869d042e9633e3e33d24b5cd3aa5f252a318d51848a321da99dc2da6136431335cd62d1a987ce6c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-osx-x64.tar.gz\",\n            \"hash\": \"c62ce7278d9ca7582fa474aaca98c5bb06930a8a530645e598513f27a73c8598ed5bc356fa98d3c96748773667dcc0b9d0b197b37e31dd0cd70b9c238573d98a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-arm.zip\",\n            \"hash\": \"31dc35b099b7b8bff97091311675e03011965b8d825541368bfcff4751cae7652425999d5e550896351c6325f7d098098cb43d98faf932ead6f27513ef7dbda8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-x64.exe\",\n            \"hash\": \"782d8c2581b338321faf717bf46840bae7f895fbed871cb1c37deaffea4800a8d7ce22740f855f02a4ebdcef3a59a9c3c5d3592bfa0e5633d28acbba0543e823\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-x64.zip\",\n            \"hash\": \"489442ea1285933ac8dbdacf4978905f9e57957346cbc1c581dab6a86617d47a007cf469863d19cb56b1655bcc7cc99261b18a1219c4d7b2c933d98f31684930\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-x86.exe\",\n            \"hash\": \"5ed54ed7feb22f457c3b4b56215bea61a7b35a49fe31329d6efb6cc25c24804d33b8c175136416ae0508f480f4d1858d1a153fc4fcb8d01558fa42d0076b28bf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-x86.zip\",\n            \"hash\": \"91f9df4d9123d21233df9c920c520f69c2db2e03eaf35fae3bd06bd8bdc35e37c38275af47e7083da41a83584b5244a6ee90737b5fe9aad12c89e03cfec487e7\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.416\",\n          \"version-display\": \"3.1.416\",\n          \"runtime-version\": \"3.1.22\",\n          \"vs-version\": \"16.7.22\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-arm.tar.gz\",\n              \"hash\": \"33a6d64f466839cc30adef87909a2ff98ecdf6bb763b82a7951314ee8eded7dc210297f914d4aa0b9c0b101aa0c33da97cb15ff64c5f83f08b212b885d662e90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-arm64.tar.gz\",\n              \"hash\": \"0065c7afb129b1a0e0c11703309f3b45cf9a3c0ea156247f7cc61555f21c37054f215eb77add509dad77b1d388a4e6c585f8a8016109f31c5b64184b25e2c407\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-musl-x64.tar.gz\",\n              \"hash\": \"252837690f099ee756705559a030715dd19836c8f7b2d0364beb9998fc78596586d045e2a7f23e16143be2dbccf19470eec1818486790bf8d9160c166eeb72dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-x64.tar.gz\",\n              \"hash\": \"dec1dcf326487031c45dec0849a046a0d034d6cbb43ab591da6d94c2faf72da8e31deeaf4d2165049181546d5296bb874a039ccc2f618cf95e68a26399da5e7f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-linux-x64.zip\",\n              \"hash\": \"300c5f06f6bca14a04db47a94d3d0333dbd941c8bfc2524eeab48def6c7a884bb9e3f9f2fdd073c43eb67d7cf42d8633fd7547df2053ccd16b669ac425c22597\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-osx-x64.pkg\",\n              \"hash\": \"1beee3205abd7b41d39d227f78956fd68ee5556752fd5a0d8869d042e9633e3e33d24b5cd3aa5f252a318d51848a321da99dc2da6136431335cd62d1a987ce6c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-osx-x64.tar.gz\",\n              \"hash\": \"c62ce7278d9ca7582fa474aaca98c5bb06930a8a530645e598513f27a73c8598ed5bc356fa98d3c96748773667dcc0b9d0b197b37e31dd0cd70b9c238573d98a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-arm.zip\",\n              \"hash\": \"31dc35b099b7b8bff97091311675e03011965b8d825541368bfcff4751cae7652425999d5e550896351c6325f7d098098cb43d98faf932ead6f27513ef7dbda8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-x64.exe\",\n              \"hash\": \"782d8c2581b338321faf717bf46840bae7f895fbed871cb1c37deaffea4800a8d7ce22740f855f02a4ebdcef3a59a9c3c5d3592bfa0e5633d28acbba0543e823\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-x64.zip\",\n              \"hash\": \"489442ea1285933ac8dbdacf4978905f9e57957346cbc1c581dab6a86617d47a007cf469863d19cb56b1655bcc7cc99261b18a1219c4d7b2c933d98f31684930\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-x86.exe\",\n              \"hash\": \"5ed54ed7feb22f457c3b4b56215bea61a7b35a49fe31329d6efb6cc25c24804d33b8c175136416ae0508f480f4d1858d1a153fc4fcb8d01558fa42d0076b28bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.416/dotnet-sdk-3.1.416-win-x86.zip\",\n              \"hash\": \"91f9df4d9123d21233df9c920c520f69c2db2e03eaf35fae3bd06bd8bdc35e37c38275af47e7083da41a83584b5244a6ee90737b5fe9aad12c89e03cfec487e7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.22\",\n        \"version-display\": \"3.1.22\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21333.22\"\n        ],\n        \"vs-version\": \"16.7.22,16.9.14\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-linux-arm.tar.gz\",\n            \"hash\": \"ff4490c739ba6e86bdd1106d4832759c152a03af3866068cf9e48e9bbabbbd81f2af9842cdcd36610aa221ee894f50952b93f237a2c4e1e1bfa183b5c6119e28\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-linux-arm64.tar.gz\",\n            \"hash\": \"b60afc6277fbf256c6c8ff17cb644d0e893054d0f017d7fe68ed3acc5bc1276636cdf11e89148bd2bea8cee35acee688224d64cc3a468152ee8c84a9a33b4a2e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-linux-musl-arm64.tar.gz\",\n            \"hash\": \"137758a409afffdb6bfc9a696e35dd78717222c8585cf2ea2f5a24bcc2f3b1dd23bd1413b8d854265511ca37054cb9ed022faa19b6a2b30e20000c719f7cf7b7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-linux-musl-x64.tar.gz\",\n            \"hash\": \"36fd0f7d1922f3da4eb5b6624a4c58aee01c7a74c9727e27f1efcb39459ca9cf9cbcbdbb8253ae9bb713f84448622dc2e8d7e1a7bf6b86cf602be41aa325feb4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-linux-x64.tar.gz\",\n            \"hash\": \"32332a09a2f05e56ca66fff2a27e988dc35dc12dcc312b62c99c2a7b2532fb02bab0fa7f49f73938999488c0463a0c79c151b020e01104b8e9cfab80a877b5f3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-osx-x64.tar.gz\",\n            \"hash\": \"1042a654fe625405191e584c055eba5fcca47974016cb29ef804d9e627d7a2a0240ac5fa27209b28a02df37d113aa3d8f4482e5f722b2314a06104440677104c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-win-arm.zip\",\n            \"hash\": \"7f6bf5c40a4c0d9e2183ed95e101f9b79ed175f3700a5e1431d2663d0ded278e25d1a79108bf4b0b913ef2c7258e0206c38eb07975a9114335064eabca1721ed\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-win-x64.exe\",\n            \"hash\": \"0a05d19e3af70c8c6323d0906995601b425a6f6d292b333db9dda32f7f18f58eb0906c74bf2a4be459a5da82d41eba8820fe2b248c2e44c2edee85358a85ac31\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-win-x64.zip\",\n            \"hash\": \"897d73a412ca5d72d7aed342bded314c2eef2b7d9b16690e1a6ca547c6707d6e7602b7bd7bc75ee9e29bcce2b3247b70ea0af802c3a3de66730d32a58b3fdfc5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-win-x86.exe\",\n            \"hash\": \"71ee77f3df43e1134b60b70eb4ab1315ca92787afd9a4149a2224304ca2d371d4e91b982e4a5d6a7c85d865e685915fabbb1e5195ef716af335fa4e5ee5066cd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/aspnetcore-runtime-3.1.22-win-x86.zip\",\n            \"hash\": \"64594c54e70337a4beca196baf978af84e8825a547ebe25cc8725b0f1d3ea10ad57604c37b4c63c54d8b803da59af29acb52976a87114eff3b6a215e71e4e130\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.22/dotnet-hosting-3.1.22-win.exe\",\n            \"hash\": \"a0a2b181a61c10ae8b786fa9bfb8cc26bd48727b9fef38d3419ddd2775b3fc6786dd80e7ea0b6e32344b266f81eff91fee51a645a87c77e94e03e820970e179d\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.22\",\n        \"version-display\": \"3.1.22\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1c14e24b-7f31-42dc-ba3c-83295a2d6f7e/41b93591162dfe556cc160ae44fbe75e/windowsdesktop-runtime-3.1.22-win-x64.exe\",\n            \"hash\": \"5fc4fb09ab641fb7f29dc7890f2133414ba20f10d2e53b068ce6553d217a01d24a8638bfc93caf57c9d00e807ae4a676c4dd7b7172dc9f1e9fc249b9b9dc43af\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e4fcd574-4487-4b4b-8ca8-c23177c6f59f/c6d67a04956169dc21895cdcb42bf344/windowsdesktop-runtime-3.1.22-win-x86.exe\",\n            \"hash\": \"7f4d0480962c9bd46a2c666334f774fddb4a82810a020435f332b700e214c859cc564b37e3004ab392eb2d785e09385df1a4753eb13d9a3cf419b020dd6dc3db\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-11-08\",\n      \"release-version\": \"3.1.21\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.21/3.1.21.md\",\n      \"runtime\": {\n        \"version\": \"3.1.21\",\n        \"version-display\": \"3.1.21\",\n        \"vs-version\": \"16.4.28,16.7.21,16.9.13\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-linux-arm.tar.gz\",\n            \"hash\": \"9c3fb0f5f860f53ab4d15124c2c23a83412ea916ad6155c0f39f066057dcbb3ca6911ae26daf8a36dbfbc09c17d6565c425fbdf3db9114a28c66944382b71000\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-linux-arm64.tar.gz\",\n            \"hash\": \"80971125650a2fa0163e39a2de98bc2e871c295b723559e6081a3ab59d99195aa5b794450f8182c5eb4e7e472ca1c13340ef1cc8a5588114c494bbb5981f19c4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b12a07f7c68110485157af732b19b0fc1d90916dbe5193391e92936f2f14f86884bcabeb74783d30ff74a01b1a74788b10dc093cdcaac106fd1f7da625f684c9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-linux-musl-x64.tar.gz\",\n            \"hash\": \"73e7fb6f7ddd4e6e7891fd006d18c4cfb07120dd4fd15458b01656540c77df667704d3c9068dea1177ea37fccbefd7bcec0c7d2e58660859e7ac8bc6cfff07f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-linux-x64.tar.gz\",\n            \"hash\": \"cc4b2fef46e94df88bf0fc11cb15439e79bd48da524561dffde80d3cd6db218133468ad2f6785803cf0c13f000d95ff71eb258cec76dd8eb809676ec1cb38fac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-osx-x64.pkg\",\n            \"hash\": \"6107e79c1e182f44d33e5d5b403808bece870c172ed10f46147e03983f30023086727888408106c1e8dd373f82fb872a234534291d0aa21a266f23b60055cc04\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-osx-x64.tar.gz\",\n            \"hash\": \"049257f680fe7dfb8e98a2ae4da6aa184f171b04b81c506e7a83509e46b1ea81ea6000c4d01c5bed46d5495328c6d9a0eeecbc0dc7c2c698296251fb04b5e855\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-win-arm.zip\",\n            \"hash\": \"634da792a2015e4b28d84a61a6300e1106316094af643dba58c8ad67e9335ff0629d8a5757adac98c42bcdad13711023c79f6b080612260e758fdcb01caf0d9d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-win-x64.exe\",\n            \"hash\": \"e5e8f2124fd36f032243e94cb7e6ec4be6e0340331939a412ede2be77133814993206b1263a071faccba9f69f67492f0dd7a2abb39096f04e98499f3429cfeb2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-win-x64.zip\",\n            \"hash\": \"7ba766b2f388ab09beee6a465f1eeb6b9a6858c8b6da51dacc79622b110558ef6211a40e715a16b526f2da08216c99143570b8253ff2c5ad874400475d1feb44\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-win-x86.exe\",\n            \"hash\": \"b4c3ff5fc374765b5c6dbf23bba0f766e84d2ed11f879c1df89c8bafc792d5fe3afe6d1685e8427c1c642dca82336d2424af47393548cfb429af895908929ded\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.21/dotnet-runtime-3.1.21-win-x86.zip\",\n            \"hash\": \"e6fc2185e1872120eec51c2539cd4344858353800ca5cd2eee9ba0d90a5a8b74f14fb99191ac0ca532c29189d30f87f72e0b940c1dcb771cf46bf378a96f7eae\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.415\",\n        \"version-display\": \"3.1.415\",\n        \"runtime-version\": \"3.1.21\",\n        \"vs-version\": \"16.7.21\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-arm.tar.gz\",\n            \"hash\": \"b738f0b4455b926b8fafa9699525cebbf51eaad7bbe0e77267640a3fe33645ab4901552008de0a9916f55d0eff1de61c22ebd432a5a1fb5099f0cfa1b33a5e75\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-arm64.tar.gz\",\n            \"hash\": \"7a5b9922988bcbde63d39f97e283ca1d373d5521cca0ab8946e2f86deaef6e21f00244228a0d5d8c38c2b9634b38bc7338b61984f0e12dd8fdb8b2e6eed5dd34\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-musl-x64.tar.gz\",\n            \"hash\": \"20297eb436db2fe0cb3d8edfe4ad5b7c7871116616843314830533471a344f0ca943fbc5f92685113afc331a64c90f271245a36be1c232c364add936dd06d13d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-x64.tar.gz\",\n            \"hash\": \"df7a6d1abed609c382799a8f69f129ec72ce68236b2faecf01aed4c957a40a9cfbbc9126381bf517dff3dbe0e488f1092188582701dd0fef09a68b8c5707c747\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-x64.zip\",\n            \"hash\": \"3e2c87e857f714ab8e613d669a15a75b44d978675f8e0dbba793fc42011760b264dd79406101ed84a54bc518dc68b15dcbce5a733dc916492e47e46dd43f465e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-osx-x64.pkg\",\n            \"hash\": \"4db98859132b9d760ccbff7941cba66f98efa9a344e2dd06848fc0cb1caa7eb00bf7ece3b2fae74737f1b0f15f89d6e1efb009793f9c80cf85bba5dbd87463c2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-osx-x64.tar.gz\",\n            \"hash\": \"e26529714021d1828687c404dd0800c61eb267c9da62ee629b91f5ffa8af77d156911bd3c1a58bf11e5c589cfe4a852a95c14a7cb25f731e92a484348868964d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-arm.zip\",\n            \"hash\": \"668f783f7d6c92763fe42085d706e307d75b27b636d77bbfed0618d596b93d10bd6dcb7f54fb4bf0865e9e11d603d5eafe17be4f1af39c3ee0e4423ee41aba50\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-x64.exe\",\n            \"hash\": \"b7b234078ac076be3116eee181d535d3d94c584102a77f8676bd08ca241b6115d008eaec221f7337863f45d3c0aecc0babb6024bcf4dd2b34bbecfef256988a5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-x64.zip\",\n            \"hash\": \"4b4a58a77d052a0a9b585feaefa782dce278bbb0f3de20c71f08762269bdbfe44e18ab8600295146c9b422cf7d9c131fd8b5f43025a15efbb219b4355801963d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-x86.exe\",\n            \"hash\": \"18dcbfffd56f74ddd1cf4b18128015aba48b1527f744b9d28961cc738f30b60840692eb16b5741b43d2252f87217c17036c566b17db111346409fad288b6d344\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-x86.zip\",\n            \"hash\": \"2727e0ce61e0ebeb74d7b9f0afc1de26a15b8726b16a9c2536da5c6337f26b3082ef3dcb411bebf9bd4f78945505c4412e4a14701cd0a3c5f34260c1e802bc83\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.415\",\n          \"version-display\": \"3.1.415\",\n          \"runtime-version\": \"3.1.21\",\n          \"vs-version\": \"16.7.21\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-arm.tar.gz\",\n              \"hash\": \"b738f0b4455b926b8fafa9699525cebbf51eaad7bbe0e77267640a3fe33645ab4901552008de0a9916f55d0eff1de61c22ebd432a5a1fb5099f0cfa1b33a5e75\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-arm64.tar.gz\",\n              \"hash\": \"7a5b9922988bcbde63d39f97e283ca1d373d5521cca0ab8946e2f86deaef6e21f00244228a0d5d8c38c2b9634b38bc7338b61984f0e12dd8fdb8b2e6eed5dd34\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-musl-x64.tar.gz\",\n              \"hash\": \"20297eb436db2fe0cb3d8edfe4ad5b7c7871116616843314830533471a344f0ca943fbc5f92685113afc331a64c90f271245a36be1c232c364add936dd06d13d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-x64.tar.gz\",\n              \"hash\": \"df7a6d1abed609c382799a8f69f129ec72ce68236b2faecf01aed4c957a40a9cfbbc9126381bf517dff3dbe0e488f1092188582701dd0fef09a68b8c5707c747\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-linux-x64.zip\",\n              \"hash\": \"3e2c87e857f714ab8e613d669a15a75b44d978675f8e0dbba793fc42011760b264dd79406101ed84a54bc518dc68b15dcbce5a733dc916492e47e46dd43f465e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-osx-x64.pkg\",\n              \"hash\": \"4db98859132b9d760ccbff7941cba66f98efa9a344e2dd06848fc0cb1caa7eb00bf7ece3b2fae74737f1b0f15f89d6e1efb009793f9c80cf85bba5dbd87463c2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-osx-x64.tar.gz\",\n              \"hash\": \"e26529714021d1828687c404dd0800c61eb267c9da62ee629b91f5ffa8af77d156911bd3c1a58bf11e5c589cfe4a852a95c14a7cb25f731e92a484348868964d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-arm.zip\",\n              \"hash\": \"668f783f7d6c92763fe42085d706e307d75b27b636d77bbfed0618d596b93d10bd6dcb7f54fb4bf0865e9e11d603d5eafe17be4f1af39c3ee0e4423ee41aba50\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-x64.exe\",\n              \"hash\": \"b7b234078ac076be3116eee181d535d3d94c584102a77f8676bd08ca241b6115d008eaec221f7337863f45d3c0aecc0babb6024bcf4dd2b34bbecfef256988a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-x64.zip\",\n              \"hash\": \"4b4a58a77d052a0a9b585feaefa782dce278bbb0f3de20c71f08762269bdbfe44e18ab8600295146c9b422cf7d9c131fd8b5f43025a15efbb219b4355801963d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-x86.exe\",\n              \"hash\": \"18dcbfffd56f74ddd1cf4b18128015aba48b1527f744b9d28961cc738f30b60840692eb16b5741b43d2252f87217c17036c566b17db111346409fad288b6d344\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.415/dotnet-sdk-3.1.415-win-x86.zip\",\n              \"hash\": \"2727e0ce61e0ebeb74d7b9f0afc1de26a15b8726b16a9c2536da5c6337f26b3082ef3dcb411bebf9bd4f78945505c4412e4a14701cd0a3c5f34260c1e802bc83\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.21\",\n        \"version-display\": \"3.1.21\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21296.21\"\n        ],\n        \"vs-version\": \"16.4.28,16.7.21,16.9.13\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-linux-arm.tar.gz\",\n            \"hash\": \"3f7e1839946c65c437a8b55f1f66b15f8faa729abd19874cb2507c10fb5ae6a572c7d4943141b8a450ee74082c3719d4f146c79f2fabf48716ff28be2720effa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-linux-arm64.tar.gz\",\n            \"hash\": \"f3d014431064362c29361e3d3b33b7aaaffe46e22f324cd42ba6fc6a6d5b712153e9ec82f10cf1bee416360a68fb4520dc9c0b0a8860316c4c9fce75f1adae80\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6d3b66ddfe93fbeea9b85d6efdb253c826f41339d843195a7ba2c4ef6604a4de9890ea84305d70ac17ec444f4344947c792abc7ce38286e2c26f5b16c8fcd7a9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-linux-musl-x64.tar.gz\",\n            \"hash\": \"aacef811d7d6c549671212da79f9ce85100c9a898ed33091190679ffd83cbc7e984eb582e223f03ce0f4d4300393bc9e65d29824143175ac78a9cbfdb2a46aeb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-linux-x64.tar.gz\",\n            \"hash\": \"f59252166dbfe11a78373226222d6a34484b9132e24283222aea8a950a5e9657da2e4d4e9ff8cbcc2fd7c7705e13bf42a31232a6012d1e247efc718e3d8e2df1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-osx-x64.tar.gz\",\n            \"hash\": \"477912671e21c7c61f5666323ad9e9c246550d40b4d127ccc71bcb296c86e07051e3c75251beef11806f198eebd0cd4b36790950f24c730dc6723156c0dc11b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-win-arm.zip\",\n            \"hash\": \"1706ec7d7cd39c57abf01d03c6c0b9b63688a88faeec62e092517870e6d89ee2034ee5969fa6be2c0f964a1aff5192463b1b03e74d7abc6bfd4e1853e0ef9173\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-win-x64.exe\",\n            \"hash\": \"b8154921e5a3bbeb147c115f31a37c1c632819dbe275ceeab3ece87cc3b36185a6e49be4d3d714fa7851ceef402c67c36cd9b9e9b9d3b19b000a626d4883500b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-win-x64.zip\",\n            \"hash\": \"b31ecee90ace55264c2f730a73f48b6bbbc1a3e2c58cd2f424411f3728fddcf28babd008a597be732bd9d5ccc105d64d9ecb61d5a4c6d18fa795f3bb8632ef67\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-win-x86.exe\",\n            \"hash\": \"8b28d34c5ec57da21f8ba7c65f401b6d2b0abec39467928bd5dd45cb23af857641d11df4f3008de66133e81a45461caa6fa276014293eee4445ee3b9115f6708\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/aspnetcore-runtime-3.1.21-win-x86.zip\",\n            \"hash\": \"bab422659471ec863fd794a7a02b1f4de4e1fdf17a14f70b19dec7bff41fdbb618eeee59847f7504df0de37d42d1bb2d6e14586b184a8f4398a83bc33da0c25d\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.21/dotnet-hosting-3.1.21-win.exe\",\n            \"hash\": \"ab41bbb191d6fe619d648800d72e08396d829fbad28bc61a813af311fffabf3dab4b67f28e33f7f2eb37c18169046e2411414b80104bb78aed3f61a4ca3759de\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.21\",\n        \"version-display\": \"3.1.21\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3f56df9d-6dc0-4897-a49b-ea891f9ad0f4/076e353a29908c70e24ba8b8d0daefb8/windowsdesktop-runtime-3.1.21-win-x64.exe\",\n            \"hash\": \"bcb5fa0781d5cf170359e16ec754d64672db75ebd60aa7522321aa61bd222c236d8fbbca5c402005c365b7361bf2ab1fe938263a809bcbd4e64a9a6b348ec41f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/edd0e0f3-2f0f-4420-8864-a1d0f6c669b6/4936c974bfd6edc5c43566678bf00278/windowsdesktop-runtime-3.1.21-win-x86.exe\",\n            \"hash\": \"bf667539e52fce7be1f1c332572fc74a2902802c5c3b38505b80adcd8ee14f4a9da3731722ffe81094bc39463254213d033f1513f7a2d16547013733498f22e8\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-10-12\",\n      \"release-version\": \"3.1.20\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.20/3.1.20.md\",\n      \"runtime\": {\n        \"version\": \"3.1.20\",\n        \"version-display\": \"3.1.20\",\n        \"vs-version\": \"16.4.27, 16.7.20, 16.9.12\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-linux-arm.tar.gz\",\n            \"hash\": \"0c6ba7c542d52ad94bd08979d538df9c4befd5d2588f604edcc9c79b6bf0c853794bc4aabe9a2c65db9248a0820c2703d4d2cd9619c9afee8b8768f82ef699ed\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-linux-arm64.tar.gz\",\n            \"hash\": \"874f30351a51e517acc469884bd9ab33f54967aca6ed388c7dc6c9887cb849976c6b166f82921c4ad4df7804081249b62b12a292c1a25f79f8a7a22ec2d10693\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e1e25b6c1c89575b84183311b5b140dc28836e61779fb42d37a8d156437352e7be10b1a76529666ad8cab7ba353233b44f2a253b3e4579fb571cd06337488fe4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-linux-musl-x64.tar.gz\",\n            \"hash\": \"6965afa8d5639edb293f44b8da3f42a0fec8a7c1673174da93963fab8a6bc3521a8e921e69b40a6b73c25ce25264a9be3b88205f2a7fa2c7a2ea8986f2227113\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-linux-x64.tar.gz\",\n            \"hash\": \"67ba54b1076e88345446de535a64cf852a20d3d8a62932587b4b43fa67721e2e0f149cc059dc2ab9cec84ce2ed13561d6782c76a06e85e0db054808c5af5ff02\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-osx-x64.pkg\",\n            \"hash\": \"09043cbeb943b8b2ece127f85de0f24e222816200e9ca7517e5722b5afef9ae0f753ef71fa95a7f6afdd214a4d805eb06fcf550241d42e79e7aa5eae49674c16\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-osx-x64.tar.gz\",\n            \"hash\": \"ee8b630e432bd15e8681619f5bcfff7b27c5b7fb242ec5e1d7927e172dc5c91887b9f72ccc1e86a1c6233533124c23e6dc724880bf4a98c26b0948c8a0372ebb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-win-arm.zip\",\n            \"hash\": \"80f1756c286cb1e8523065d3e57656094437fd217fe1f0238d68546785994a019a8bab0e6b077a2cf17fc2f83ed34331976fbd7fb26bd3f25c8661a3a8e6e4a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-win-x64.exe\",\n            \"hash\": \"80aacadf595c0371223b1c126ace04c18f5fae507a14f2aaf5b3a92a69450aff5978fba6ddb84f0700eb660065b0d0bd6d23aa7a0140c62dfcb72f3b0beddb8f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-win-x64.zip\",\n            \"hash\": \"f1bade5de56d93c87e38f81facf18ed15614696ad616d47c2502b4281ef547b505da3c62262098fe4007fd1ccb0f03f65191d413e4c1b8b127ff2bf3c81d6654\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-win-x86.exe\",\n            \"hash\": \"a1cfcd018d358ec00ed5e20ef863058eb8dcffabd84c3285b5f0e0813e77f65a457e6fa4843a761a55beb6f2ba33c6ee37f0fbad89a641399e67a5db3ff03cdc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.20/dotnet-runtime-3.1.20-win-x86.zip\",\n            \"hash\": \"7f826de5a1414a5041907dc711ee974f01ffb518b3f3959949e3c7b95c33ff38a17e1af916a2871b5381f8c2b08789bacb6f09a17d029f0f5ab1a5eeb6c26f45\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.414\",\n        \"version-display\": \"3.1.414\",\n        \"runtime-version\": \"3.1.20\",\n        \"vs-version\": \"16.7.20\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-arm.tar.gz\",\n            \"hash\": \"08c93b7948151fbe3db9fa105ed02bfefb510e437aa9ad418c60ba96b41a7e25f891a1d4308f51595a9aa385d4e9ca05cab8a803e75728fb70aa9bae30f37b67\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-arm64.tar.gz\",\n            \"hash\": \"42b526d4ae914a0f1b04cbefe70b2c052eae9791dce54431ee5aff2e1bba5dbd08f49505a835319dab0551e9e9788f239e53ac154760cc8c0a85512cbe568408\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-musl-x64.tar.gz\",\n            \"hash\": \"500b52967a47c90fe2dc638385d10eb3df64999d7eea26951f4cf180ec603f0a93afa498c71f62e056d56cfe273a6ea4de1533cfcbbc74bf139db685b5de8c33\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-x64.tar.gz\",\n            \"hash\": \"f0a133a2bfbbdb6e3f35ad543bfd8e48f35e2a0e0bd719f712853d686e5f453b89569504813fde33baf8788dfe509bb3bc7ad69026588761f0a07362eac76104\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-x64.zip\",\n            \"hash\": \"9f09b5a3171b21b096715cdb910cad031dd5de67d47d17f093fb153f72bc40a1d13fd5dc273159726223a74544c008c4450eef25dd838338f4d3fbb7f3789a07\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-osx-x64.pkg\",\n            \"hash\": \"fa14f6a7e1d3c45fabe4c112f774c9a113abd1e66bb75c6249e43a323a9a4714f85121ff38df47e87a4090629dc930d3cc2e72eaf2a239a93476dcdfc5c66ab3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-osx-x64.tar.gz\",\n            \"hash\": \"b9b3e15819e16ee97790058c04830b83321c7e06c6a46ff70ac6e13928c92f9fb17e9e6d515a6f92544e88ce1169fb18e2fdb2e57ea3aeddec7265836c802e98\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-arm.zip\",\n            \"hash\": \"e2a7250bce4e6473c31ecc39172d576e4dddf3b23c0b8faccd179d832cb74a608249de0dcbe5b9bf051ffeef6f5a5ecba8001bc8f7f2bb46120554592163198a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-x64.exe\",\n            \"hash\": \"acc18e2f3114cf28da1076d5a1c8ec707dc80d88a9d4ae4811d909541607118fffdf7430263f59c3916f2716300f35a34cf4824c51b94d53777efee964110b20\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-x64.zip\",\n            \"hash\": \"fb1bb51b203e4157ce78c04a5e65d2df1fe2bb3c03da474b126bac9d39fca34695b7b88c1a506f8ccfba20b84902ea2b891910a6f9e493b4b6ab1964650e032a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-x86.exe\",\n            \"hash\": \"026d77004e9299a0e0c7673998ef207ce8bfc8dac5e7bf19c6f303e786cd7004e0efcb67e5db43daeace27524202ff1d3ae5384e3bcad8ae6ada2f8d4a95794e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-x86.zip\",\n            \"hash\": \"77fdda1cafd946072f67aecf6fde8b847b7b303f042b1ee4fdaabd7ba83f71fd916f297c07aec68ee384b4112c94195778e6c066e524bcbe77a008c727860276\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.414\",\n          \"version-display\": \"3.1.414\",\n          \"runtime-version\": \"3.1.20\",\n          \"vs-version\": \"16.7.20\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-arm.tar.gz\",\n              \"hash\": \"08c93b7948151fbe3db9fa105ed02bfefb510e437aa9ad418c60ba96b41a7e25f891a1d4308f51595a9aa385d4e9ca05cab8a803e75728fb70aa9bae30f37b67\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-arm64.tar.gz\",\n              \"hash\": \"42b526d4ae914a0f1b04cbefe70b2c052eae9791dce54431ee5aff2e1bba5dbd08f49505a835319dab0551e9e9788f239e53ac154760cc8c0a85512cbe568408\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-musl-x64.tar.gz\",\n              \"hash\": \"500b52967a47c90fe2dc638385d10eb3df64999d7eea26951f4cf180ec603f0a93afa498c71f62e056d56cfe273a6ea4de1533cfcbbc74bf139db685b5de8c33\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-x64.tar.gz\",\n              \"hash\": \"f0a133a2bfbbdb6e3f35ad543bfd8e48f35e2a0e0bd719f712853d686e5f453b89569504813fde33baf8788dfe509bb3bc7ad69026588761f0a07362eac76104\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-linux-x64.zip\",\n              \"hash\": \"9f09b5a3171b21b096715cdb910cad031dd5de67d47d17f093fb153f72bc40a1d13fd5dc273159726223a74544c008c4450eef25dd838338f4d3fbb7f3789a07\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-osx-x64.pkg\",\n              \"hash\": \"fa14f6a7e1d3c45fabe4c112f774c9a113abd1e66bb75c6249e43a323a9a4714f85121ff38df47e87a4090629dc930d3cc2e72eaf2a239a93476dcdfc5c66ab3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-osx-x64.tar.gz\",\n              \"hash\": \"b9b3e15819e16ee97790058c04830b83321c7e06c6a46ff70ac6e13928c92f9fb17e9e6d515a6f92544e88ce1169fb18e2fdb2e57ea3aeddec7265836c802e98\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-arm.zip\",\n              \"hash\": \"e2a7250bce4e6473c31ecc39172d576e4dddf3b23c0b8faccd179d832cb74a608249de0dcbe5b9bf051ffeef6f5a5ecba8001bc8f7f2bb46120554592163198a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-x64.exe\",\n              \"hash\": \"acc18e2f3114cf28da1076d5a1c8ec707dc80d88a9d4ae4811d909541607118fffdf7430263f59c3916f2716300f35a34cf4824c51b94d53777efee964110b20\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-x64.zip\",\n              \"hash\": \"fb1bb51b203e4157ce78c04a5e65d2df1fe2bb3c03da474b126bac9d39fca34695b7b88c1a506f8ccfba20b84902ea2b891910a6f9e493b4b6ab1964650e032a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-x86.exe\",\n              \"hash\": \"026d77004e9299a0e0c7673998ef207ce8bfc8dac5e7bf19c6f303e786cd7004e0efcb67e5db43daeace27524202ff1d3ae5384e3bcad8ae6ada2f8d4a95794e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.414/dotnet-sdk-3.1.414-win-x86.zip\",\n              \"hash\": \"77fdda1cafd946072f67aecf6fde8b847b7b303f042b1ee4fdaabd7ba83f71fd916f297c07aec68ee384b4112c94195778e6c066e524bcbe77a008c727860276\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.120\",\n          \"version-display\": \"3.1.120\",\n          \"runtime-version\": \"3.1.20\",\n          \"vs-version\": \"16.4.27\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-linux-arm.tar.gz\",\n              \"hash\": \"b82c36dac8a6aeba87e7015775bdffb1ed381abc86ed51a251d508f670015b8c720e65781b39566931dd7948f56735175c176445efb14ef36b82f7b620219746\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-linux-arm64.tar.gz\",\n              \"hash\": \"507c5cade364a71b52c7c9c45ab4ee098b56ec24676ce960a092ba8497a10cacdd4d48184d24d88fd20c20698cf8bb9d0d409b02e706a7440351b37ebbc7de26\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-linux-musl-x64.tar.gz\",\n              \"hash\": \"d1f5565fef5a496643ef5c67cc54d8bf33bb7b59d9d04c24a91f54624a8cd673ddf98e4369a7c10ef9f31aa30041b20ef04cb6be563f2043bf123460c9e7f4a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-linux-x64.tar.gz\",\n              \"hash\": \"88da58541add83696e87d66c480b672baca6590511e58052157c1f1cf84557648385c0529ae8fa13bd30b4eaead682bb38cf512cf5055776cec0fc01ea59626a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-linux-x64.zip\",\n              \"hash\": \"1368c7d711a8c6960f4c1b04079e56ca77973900714ade0dff941049b5ab9b4293189b548cbbff29220e6d4dff9cde7632d8457ceaaa68461b3d7cf4eee48e4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-osx-x64.pkg\",\n              \"hash\": \"3a91f32f063b70285ccd26401700bf7526d4dde3e0ab54afaef7246a92e45a4cdb8889034ec28e3ed6be575e7d7f5e886028ddd7700b9787baf4f2c294e1f238\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-osx-x64.tar.gz\",\n              \"hash\": \"72fe1c9abd9a9b161d28ef08e11e92589e8f0a60983c077ad419b9e76ee3d97953a410d5ae40a9dd5467682945212d2900909e536e3376b5716727c8fd3d61db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-win-arm.zip\",\n              \"hash\": \"c461eff274f82daf9316ad09ddf4707312f158a9b6c6f6af58332d10ea083d512a9fc77600a39a21335711b4a26dcce6a72aa058ea56460ca4b34f446c2f0262\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-win-x64.exe\",\n              \"hash\": \"dee2cf7c62d3b942f552492d1d4048d9ea2ee09ff40ba84f15e9823ce9f95e6e31aa1e4521c0df2671676a4a4f3faf8914261acb3657d7ef751657281d53c669\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-win-x64.zip\",\n              \"hash\": \"51ed2f4be3e8088d2d56d9455714bff3df98f286e674a8fbd905fd58816732b7e73dcd71d55e5dc6ac247ec2b180ae2f4e56964e4555eda281b10f14fefb38e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-win-x86.exe\",\n              \"hash\": \"2fda2d154b41ac44a342d5dbe5a2920321dd547be76a7519c6f597b817d0abb68379d2b674e2d0c39690d781b8be2f82c7c8e69156e7a250484fac3b3cda2a5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.120/dotnet-sdk-3.1.120-win-x86.zip\",\n              \"hash\": \"a9a0d09bd397fea59d3d69e338ca0b54b448274caae88d91c32fba714658036401f32959ed7ac0e1a0b1f8b098097f4615f2b04bdff98605b6017d24ec390eb5\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.20\",\n        \"version-display\": \"3.1.20\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21266.20\"\n        ],\n        \"vs-version\": \"16.4.27,16.7.20,16.9.12\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-linux-arm.tar.gz\",\n            \"hash\": \"5def0a3a803bdc7103f72f2856c38e9fa224a93083852b36b657d1cc0e058a6d6990c6dfa182ef206d56bdd6d50d0c4e43e8417728037c07533f1acb2459e763\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-linux-arm64.tar.gz\",\n            \"hash\": \"77888dcac7d92793674a861a6b9a7fc0a8de597d0d698d7dd1fac5ed0293020d8200cd441f64994f1121d7ea3b582551a799f8664775e26105dd9b91d95a1c4b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-linux-musl-arm64.tar.gz\",\n            \"hash\": \"76c7c6c9b876b02209eff1807cf7bb482ae90bde2917980f13177d9f650aabc75fb7e36867d592863e594e61b61706cbffe54fed838fe482daff2233229bf5cc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-linux-musl-x64.tar.gz\",\n            \"hash\": \"e910816ccf840f2eed8546ed441acc968baff241522cf5c6456f38cd3344fc13eaf15d5a8daa5b4422ed63e79b8434b2a3413d7c660ecbdab437efdf88507b0c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-linux-x64.tar.gz\",\n            \"hash\": \"374e9232aec8a85f1fbcf376e2263f4ee220552ca7902b5cc5f1d1482733e208494ee1394082dd5c067b48a867d69a3a7be648c7670d425e09316c4e519e3ead\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-osx-x64.tar.gz\",\n            \"hash\": \"f1d386b0313eba9e9d588d908fad7a516c69b53937d8f1b33a1cf8c9c22ead0baa4ea10f19d4f41b296fcf036acd97a486155ef08116bfd02da3fa3be23ab026\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-win-arm.zip\",\n            \"hash\": \"d80e8c802439b175dab27f51d539478e62977079305d620264598707e983554f1a14ff8e3fcce64b4e04a72225dedc62aa4c9d9e5ec03b90713d5acb95f71728\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-win-x64.exe\",\n            \"hash\": \"30f2fac2e081fbeeb06190fcb52e9d7f9e19941796f457059fc5bc36b2de69d85b26918d1b66583216c06afc0179d6b3f53da845309a487ca9e790f1356e999b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-win-x64.zip\",\n            \"hash\": \"7449ea01e470336653cedc51ce7981c8bfd75d9714ded437d9ea32d103f0a880780fbcd35edfe3431dc50edf0ae9e82d4bf2e3309930d7b0cb27e7b3d7c90aaa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-win-x86.exe\",\n            \"hash\": \"dd4a72138aa522afb68457b55a84aa6ded59f77ffabb6d81fe9dee1710428f544f80b6991ff587a2a8ea93e4f23b0647265408c81f54d48e7b21efd1fc0beeca\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/aspnetcore-runtime-3.1.20-win-x86.zip\",\n            \"hash\": \"481c6a4443498f6fc113908e88e237c8ed7424e7a5cda88c3d656a1b32309b6cea2bfdfc01be08724f6d04234e2efe36bc1221c2262a84875174cb1b473a2cc9\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.20/dotnet-hosting-3.1.20-win.exe\",\n            \"hash\": \"d5fb6a6d167e3d4e3e4d3be327ee161f0b783f398f0c2b9d1fef82bceb438a9dc00976214e3d1223d9e8c8b18305d44ecb86ff36f27c164a7a1d2b9ec5e3d7a8\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.20\",\n        \"version-display\": \"3.1.20\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/93c69a29-d379-4a5d-bb9e-3116cc14de41/907bbc52446d8bb7baa0c6faebde1d44/windowsdesktop-runtime-3.1.20-win-x64.exe\",\n            \"hash\": \"3a6992e7c4da097c0bbba16242eb1d472aa0adc1ad3e976c636c7f7bf2d7e11b0135810a5338de5947bb47c2c69f5d6718e6c0d10393366858fafe6548068060\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/30dcb1c4-79da-495c-9947-a3bb8efc9d99/76a3de29f61f9785ee57c2a74c3a6418/windowsdesktop-runtime-3.1.20-win-x86.exe\",\n            \"hash\": \"7c4e6bf6f21432cc2ad16a5ae3cecb635e0bb8af51fc234bcafea864fab0b3e24941b7a307939af59746d5e28a821448d61172bbb4e007b334b1fd20f92a2893\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-09-14\",\n      \"release-version\": \"3.1.19\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.19/3.1.19.md\",\n      \"runtime\": {\n        \"version\": \"3.1.19\",\n        \"version-display\": \"3.1.19\",\n        \"vs-version\": \"16.4.26,16.7.19,16.9.11\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-linux-arm.tar.gz\",\n            \"hash\": \"db9827bb9162f5fa979a124af7bfe4e8f9b314767a99285e1d055f627830f9cbc42f02258d8fc0a22582d388c75f38b37e302e8d7ca5b9259d4fc1c039f40045\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-linux-arm64.tar.gz\",\n            \"hash\": \"c6a97bc6e2f2644d57d3fa5a512274b7129956371b07e0f39f734875b15bc0c178a9b068e2fa3e06e8a3a6696163ad1856f5d87a689612211ee02e589138110e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7e1609c05925f84990a609b58f951adab5bb8fd7513db592984cad6a7a427ff8bcbd14073ebd55d903aff5b6b31ae9926393194fab158dade4e2f5bd7f3e1a69\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"dcee0837238f292b127b123cf774c7544f3fa2f509114b141198f84ac06fdb3a9d91af6d5829b16866bf654dbcf829de61b13d16677af67318795e2d93dbff7d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-linux-x64.tar.gz\",\n            \"hash\": \"2cf268cc13bb4739203a18a9160aac58f2088e8ec275b1f7ef2fe2b74bc16edfdfbeb886a74fc9421edbf2899fa9e3ee7ea2734a83b1800b4a9848fb7e10bbbe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-osx-x64.pkg\",\n            \"hash\": \"72e1966a2f6d96420f3f2fc37ea189c3a3172687fa8f63b7003fc40b9e6a91fa5b9bcc07f8aada39f00eeaa720facfeb196596ba401da2444df3d13eb1ab2e86\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-osx-x64.tar.gz\",\n            \"hash\": \"41ae9bc0212247c4721f41be384dae620971360c09fa31430f062c2ab851f10506ef620bf63ee414819b5dd20ddae8a1ce581bbe0d699378b244375e0822bd34\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-win-arm.zip\",\n            \"hash\": \"ebb56757fb4d032bc483ec95f2f4a366ead80ffadf2f0683bf702b64f5cc9c8ef8a727053be5343b741770250c8b3c39f302225a258a994568094574d81f4c41\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-win-x64.exe\",\n            \"hash\": \"87139df3e418b4c3f14eac2be149601712e16682a544e6c45433c870e73bfe950a28bc8032e52b68eedce32321014f7293193d5223c2e6eb51928ea7d41627f2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-win-x64.zip\",\n            \"hash\": \"201fd2215290dcf7a3a74d08c4f92c9bfc51b72f963642467f4c2bd3d739b2aef9c9cd16845cef065e6ad5cd3108ff48edeafe661f1f15895f4b3f71ba557c51\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-win-x86.exe\",\n            \"hash\": \"3d63f1f8efc9470929cae62615353fda59d2b42ccc64f1e922467f5766158e98d9c18e6692a2e5a1c4f64fe434a837bc981a0fdbdf2ddb93d85747f3c9f2139b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.19/dotnet-runtime-3.1.19-win-x86.zip\",\n            \"hash\": \"0cbf13a2e8788a429ddb9f3e14c1a6059b927680db4d88308fd4cf26d51255e6bc333531ead89747c46eb5dcd36c75241815d07500b45874b9602a548aeefa7b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.413\",\n        \"version-display\": \"3.1.413\",\n        \"runtime-version\": \"3.1.19\",\n        \"vs-version\": \"16.7.19\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-arm.tar.gz\",\n            \"hash\": \"31f395b1e48e9ba53d4dc63db7ff1ea38bdcb612a1d54b483cde22a009c48fbae0303779f42cee32db0e51bd953c8abfdaa1620a43a7fd84e1f8e937b6675d59\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-arm64.tar.gz\",\n            \"hash\": \"39f198f07577faf81f09ca621fb749d5aac38fc05e7e6bd6226009679abc7d001454068430ddb34b320901955f42de3951e2707e01bce825b5216df2bc0c8eca\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-musl-x64.tar.gz\",\n            \"hash\": \"46ffb31754b295cdb7dc615d5f905aa5842e3ada0e3f975217dfecbaa94e7b0190e86136fe9693d354b6ef88faa83e1c48496ffb1d644bd7ff437aeb48b9229c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-x64.tar.gz\",\n            \"hash\": \"2a0824f11aba0b79d3f9a36af0395649bc9b4137e61b240a48dccb671df0a5b8c2086054f8e495430b7ed6c344bb3f27ac3dfda5967d863718a6dadeca951a83\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-x64.zip\",\n            \"hash\": \"7eef81e376b406b6a965e078f5056609b0c75e7abdc6f356ed8464b582a28c863062f0aea38949062d027ae92b6ca66f01d68604ab866453659bcff86dfee749\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-osx-x64.pkg\",\n            \"hash\": \"4f8f3ca46a47f9124bd120e033d0f9f30ea52f6a32c8b0f3b4bc273ac154d492d94a82c3510cd984579761ab4340b4185f709b1279cc198eb311115dec5b3f1e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-osx-x64.tar.gz\",\n            \"hash\": \"2c8e5b7e578aa36d40946d0deea93dff72a68ebb5504b1593d86d63022be8b65b284cf2adad711a926b7170fc865ac4cb38531a4f2ef087e07147e67300e86b8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-arm.zip\",\n            \"hash\": \"f8f90fc05d3d24475a631118d1719d4a11d14e9fdaf7d08271588089c15eccdc69c6b437294956bf027f6c5691d7a56062c1b93241d259078941bfca613de461\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-x64.exe\",\n            \"hash\": \"878ca8654df81a363c4cddddb5303857f3e21be684f191f5c9cff1505038e4303524890edd778892ea13b752ea112d9ecdbb3ada2fdd8439071e6160ce02b8d7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-x64.zip\",\n            \"hash\": \"1fe3beb2e033c557c1577452f341121c1a8b2520b8bc80c2e1291d382964aeef7bfbc3e7b55c9130b934fb89aa6cbf1354cf625b3b1dada1bde3443b43ca2359\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-x86.exe\",\n            \"hash\": \"55c96e477c270b6d20c433da0dc95db3ac6c0c7efed3dbb7f37769a6da68a94aba7be82be445a511e28b927642d1e8e3d9657304a56a89366e8004599881925d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-x86.zip\",\n            \"hash\": \"bf3fe477e12d2e4f94a8647409c8608bee256f47a6bc99b0b7b111a7f0c924df8cf3894a00f73c717ead17cf55aa49c1367ad3d28cdec639fd8a1a4ceffbe92b\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.413\",\n          \"version-display\": \"3.1.413\",\n          \"runtime-version\": \"3.1.19\",\n          \"vs-version\": \"16.7.19\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-arm.tar.gz\",\n              \"hash\": \"31f395b1e48e9ba53d4dc63db7ff1ea38bdcb612a1d54b483cde22a009c48fbae0303779f42cee32db0e51bd953c8abfdaa1620a43a7fd84e1f8e937b6675d59\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-arm64.tar.gz\",\n              \"hash\": \"39f198f07577faf81f09ca621fb749d5aac38fc05e7e6bd6226009679abc7d001454068430ddb34b320901955f42de3951e2707e01bce825b5216df2bc0c8eca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-musl-x64.tar.gz\",\n              \"hash\": \"46ffb31754b295cdb7dc615d5f905aa5842e3ada0e3f975217dfecbaa94e7b0190e86136fe9693d354b6ef88faa83e1c48496ffb1d644bd7ff437aeb48b9229c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-x64.tar.gz\",\n              \"hash\": \"2a0824f11aba0b79d3f9a36af0395649bc9b4137e61b240a48dccb671df0a5b8c2086054f8e495430b7ed6c344bb3f27ac3dfda5967d863718a6dadeca951a83\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-linux-x64.zip\",\n              \"hash\": \"7eef81e376b406b6a965e078f5056609b0c75e7abdc6f356ed8464b582a28c863062f0aea38949062d027ae92b6ca66f01d68604ab866453659bcff86dfee749\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-osx-x64.pkg\",\n              \"hash\": \"4f8f3ca46a47f9124bd120e033d0f9f30ea52f6a32c8b0f3b4bc273ac154d492d94a82c3510cd984579761ab4340b4185f709b1279cc198eb311115dec5b3f1e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-osx-x64.tar.gz\",\n              \"hash\": \"2c8e5b7e578aa36d40946d0deea93dff72a68ebb5504b1593d86d63022be8b65b284cf2adad711a926b7170fc865ac4cb38531a4f2ef087e07147e67300e86b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-arm.zip\",\n              \"hash\": \"f8f90fc05d3d24475a631118d1719d4a11d14e9fdaf7d08271588089c15eccdc69c6b437294956bf027f6c5691d7a56062c1b93241d259078941bfca613de461\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-x64.exe\",\n              \"hash\": \"878ca8654df81a363c4cddddb5303857f3e21be684f191f5c9cff1505038e4303524890edd778892ea13b752ea112d9ecdbb3ada2fdd8439071e6160ce02b8d7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-x64.zip\",\n              \"hash\": \"1fe3beb2e033c557c1577452f341121c1a8b2520b8bc80c2e1291d382964aeef7bfbc3e7b55c9130b934fb89aa6cbf1354cf625b3b1dada1bde3443b43ca2359\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-x86.exe\",\n              \"hash\": \"55c96e477c270b6d20c433da0dc95db3ac6c0c7efed3dbb7f37769a6da68a94aba7be82be445a511e28b927642d1e8e3d9657304a56a89366e8004599881925d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.413/dotnet-sdk-3.1.413-win-x86.zip\",\n              \"hash\": \"bf3fe477e12d2e4f94a8647409c8608bee256f47a6bc99b0b7b111a7f0c924df8cf3894a00f73c717ead17cf55aa49c1367ad3d28cdec639fd8a1a4ceffbe92b\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.119\",\n          \"version-display\": \"3.1.119\",\n          \"runtime-version\": \"3.1.19\",\n          \"vs-version\": \"16.4.26\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-linux-arm.tar.gz\",\n              \"hash\": \"1e8c67c0036d49c57d4525f256d422b40d315dc434dca9aad7ae6f164a17168d74ebd6cda81b974798bd4008b78b41eb5bd81a7092b2efd6ebb96feea3eac5e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-linux-arm64.tar.gz\",\n              \"hash\": \"943de9f6d4f46193cda08e4a149550a0490495ea19ff0a99119070b0d1d16a2c315ea0d05c04bdbfb742db993637ac9e264e7f1e00db4d99184d2874ec55e0ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-linux-musl-x64.tar.gz\",\n              \"hash\": \"e67a5cefb8f1d24ceba5137a2060990fc8439ec39996a777d16d2f1b06f22c888792a1c353835d7389211decc2b775abe777a26cb6caa1c284b639c848d2348c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-linux-x64.tar.gz\",\n              \"hash\": \"697e45e786d3b4b8e751dca68ab595d7e30437611473f815942fc93803c00223cb32547c4ac9c0775fc1075a3315d6029f0d4aa94dd8d5d6c7c0b1e358c96f0e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-linux-x64.zip\",\n              \"hash\": \"f90160e197d78c20ce078ec325c18a1b18946ef6570d334bc8cd9ce3a881c96fcf1fcb79c2edb12c4e8871b7f3c1e056823f9fba2a54f131aff9e81983650c71\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-osx-x64.pkg\",\n              \"hash\": \"995085c1ae3c4373dcc0d28ce4fb4339788e15eacdd945df2c189a046304767b5fe4c0299478235c0435cbbfc3a282720cc74913f0521c43c3ad638cee76bbce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-osx-x64.tar.gz\",\n              \"hash\": \"5a89382cbd395ddc8805b66a9924ae6b9d6e1be0d39350d6d3fac9bf97418cb13395f21cbb29126f41f694724fa31461fc41a84682bf6f3f5a2e44058c7256c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-win-arm.zip\",\n              \"hash\": \"2301f52f90b8dbfb893eb85f7e4f5994b4d19f02dd57d83d23634af060e725702883b326401ccf1103c21c185f3f62a7349b0d5d07ebdc38d5d5512c46f69bc1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-win-x64.exe\",\n              \"hash\": \"3ae1ef798512d04e551d28541b4233a640c256a4c09d1b683ba836912f0d95c9c37f11d98eeda7963cd3e7541061dda1ff60bf992c6aa8193f7c84cd1b01fae7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-win-x64.zip\",\n              \"hash\": \"6f8f08c1e787551ec4dca99b4c7dc13c9487b9b61a391d51b0a07ec384a288212686db62be386d2b053440f86ccf2fa95308fbe5cecfefeefb57820faf631f22\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-win-x86.exe\",\n              \"hash\": \"8a469d2941bf2cce3791994b0ec623e2889e78568697ac4ae157331848572a1ac772b850a4e793c687634588f2a912db0922c536d4cb9ab559fd808a04c403b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.119/dotnet-sdk-3.1.119-win-x86.zip\",\n              \"hash\": \"012c8aad1f3e4ff6537dc94cc9020b63db555afab54ffdb9164a8deed3e043eec1d8731ce6ea39131561caf6aa853084f1a1fbc103809f72e48b9646589679c6\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.19\",\n        \"version-display\": \"3.1.19\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21229.19\"\n        ],\n        \"vs-version\": \"16.4.26,16.7.19,16.9.11\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-linux-arm.tar.gz\",\n            \"hash\": \"d28f77adde711ac1eea40de702e47340c6021cd2ab529fc5009b0662de3ae0dff1668427975072776bef7bbe4d85df2b42e116e66e542d8e668505e6d9b2782c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-linux-arm64.tar.gz\",\n            \"hash\": \"4cba9b43a9beb977bb50c290c0e7cbbf42664538609079dd1bc0e925a0cc4a1f76748492d4d0d402610ae910e878449bab5d797a9f12e63399585b11f9bfbee9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dc798bb2ddb6d8ce22cc4b4d3c197c05b69c4b8c04b11c9c585f1a4fa50860c75627d8478f63ad5bd30f00f77f20f4ccb9ae0f405c65c3b5fda838932154a40d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"f90e83939d947e45d1f50647a77b90cfc8f91fe4295921736b4a57130d92434e463ae28885a1fb1b6455bdfeb478a665c5f5bc4e943c27a1eff08f1da2a4dec2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-linux-x64.tar.gz\",\n            \"hash\": \"c9234b5dba62c88b5f7e869c7dc7fc94d9cd7b300b0ed2461132c32762c0d3d1f23a1ee0432264704fefeb35f77ca7d1dd41910daee84df9aa325559a43cfc71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-osx-x64.tar.gz\",\n            \"hash\": \"a30959156c818d8d93df398742a70a050decfddbd777ddd6adb4d3c1aa5ed129545eab8f0aa3f12be991611dbc3582336ed747f3075906a2a29a1cd30ef3ad90\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-win-arm.zip\",\n            \"hash\": \"39386a5f48afd25f0aaeff4106e13cb7f1c98521999ea9c314ef1c2a3e64718d40e26f77bd5aca5aca8e569d860300e8bcc6424f0d557c4cd5b90aaf4c4240fe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-win-x64.exe\",\n            \"hash\": \"0306a419a1ecc6a6428996f1d5992781cab9712e0e125f376183011fd105d7f5f6fb372860d18c2f3067cc279fd614b115dd0a79598b1d4f30a6a21a279873c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-win-x64.zip\",\n            \"hash\": \"d0499511faf606c32ad51d9e9f112ad80b04689a5163df10f8f476cf7042cc7f5a9c616e0b80077a21efc48e88e3a1f5e2bbc382ee38c288bd0bab860437540d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-win-x86.exe\",\n            \"hash\": \"6cc83329b0653095979adeef58b728bed02f9d3c7be25cea24542fc4a290ce2a332508a03038eb493dc88f3c2bdf4b2236f8e6741df3e2c225d312145bfdcc50\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/aspnetcore-runtime-3.1.19-win-x86.zip\",\n            \"hash\": \"86f5c046a388b59b2daca90cb74f32d60b189960a498a631ed274bdd32e1c7f389b0c009d61ae9abfeab68a6d255c9c2275dc7c9bb43eab542e3b8e5e11b4b04\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.19/dotnet-hosting-3.1.19-win.exe\",\n            \"hash\": \"86048a43e90ddad41a3491c371984dd9a0d1a3530d9bb06b0a2b6b032b243fb66033bb71727a91eb815241642d46e69cd6b4a7f12d3a760a8132d4a1063f368c\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.19\",\n        \"version-display\": \"3.1.19\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/411e36fb-e1c7-4158-9464-0a473ec12a90/9b564480c7e693f3a297e83e73c02586/windowsdesktop-runtime-3.1.19-win-x64.exe\",\n            \"hash\": \"4180d2745cb0433d820e3f58ac2a6881c64083dfd53b20758a33c0d1c85dc48808a210037032608df11b70616ebfe7c7ba7397ae44be88e24c9ca6eb0c8af9c2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/99810b85-b4cf-4832-9d8e-c83fa4a9561f/b6bd6966b51d8b767dcf8cb3dc0b1854/windowsdesktop-runtime-3.1.19-win-x86.exe\",\n            \"hash\": \"d0714f41d8ed5d17bc5accf16bbb28994a624466c3cd7bb49249dbaf552e44df4c2392596c76046ab2484f882aa08a58c07f3e92ae3578ea6aa6d571e31cda9d\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-08-10\",\n      \"release-version\": \"3.1.18\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-26423\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-26423\"\n        },\n        {\n          \"cve-id\": \"CVE-2021-34485\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34485\"\n        },\n        {\n          \"cve-id\": \"CVE-2021-34532\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34532\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.18/3.1.18.md\",\n      \"runtime\": {\n        \"version\": \"3.1.18\",\n        \"version-display\": \"3.1.18\",\n        \"vs-version\": \"16.4.25,16.7.18,16.9.10,16.10.5\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-linux-arm.tar.gz\",\n            \"hash\": \"2a2af7e8a678bfca1765d647ddefa0d9ac78880216eea38c3fa71e188f7134b452d5b3f5beb481050b81f940d0d2a9e5b7acc6ecb1a9c2ca32fbb1bde0ef1216\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-linux-arm64.tar.gz\",\n            \"hash\": \"0a106e73e3f4e1ce76ef8f89eab3f951ce999b0efa7a8c4ea2995cd89fe33566f1ee7868304c8e989da96e94af79ff128284911916f3d0d0f0421a86e8d74e54\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-linux-musl-arm64.tar.gz\",\n            \"hash\": \"def354b929cdc2b8432292727d54d765181e0892b7c357b075430d2f8690b615a7ad46dfa34389d4ae95233c073f36717eff744c76b1f1a317e02a00db33ed37\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-linux-musl-x64.tar.gz\",\n            \"hash\": \"1863a63652f9530ca26c82d715906023be6e2a67e6c7b50368f006e0b115b724f8a50298c3084dfeb14e4e4db9d52eab30086ede210f938b395de2ac7d69d046\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-linux-x64.tar.gz\",\n            \"hash\": \"6f06dbc4625fa8a0e64f650de7b285b5ffa0cd32ad8d2048fb9269b5f657e369fd28e7f27bfd05d4f422c6aa95847b5089d70760024bdf1100990dbbffce220a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-osx-x64.pkg\",\n            \"hash\": \"50b8ffb7e71eb8515e456e81fd8339bebce48b17dcfee82275fb3f866bf488426bc4f1a97e6b70b9862e0d2322c703c35e61b672772a453f431f2663d77dd7cf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-osx-x64.tar.gz\",\n            \"hash\": \"bec253c01a53ba0277e025be12ebbf65a2b81450d1fcbb0d3de486c5b5ceb3c18b8a9818f69692c3a3b73746b88615c44844f451eabb9a8cdffe60025b7a0511\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-win-arm.zip\",\n            \"hash\": \"414aeef8e5ac51848dec58fd98979e22ed5fe60064d91d98b17cce7fc3aa861cc647eb8f7c509ad0a06eaffccf5d18a078c8f87034a4a5594b1f398b20322885\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-win-x64.exe\",\n            \"hash\": \"9eeb2ab8b7d82a11f3e2adc96c084b3fb6eaff255c89a9ff42f0ec9830c9780abff3bff8ebf45352f0885492d85a2b5dd3c68ecf46d2f713cef99c4a4a7d8289\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-win-x64.zip\",\n            \"hash\": \"2c586aa782ce505eb69cd271f02d22fcc6f6ad8e0a4ca9f69c0e1566f1e3e205058f3eb9faae01c5aaffb270be636afb6e2888b91894dfe75348280aa883c58c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-win-x86.exe\",\n            \"hash\": \"a51fbc6c429c2301934f603aad807e1dba5eba279f1df928c650e3179ef571158bee3f497bd2685fe92ca702cf8c75e8c338cbf6e2c52c24cd28240df5f67c47\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.18/dotnet-runtime-3.1.18-win-x86.zip\",\n            \"hash\": \"dec9b933178a9a4e6462ee2bd1a9c1929b1fe6aacd91b329fffc66e789a46761eb9835ec16e3d35866abb451f6e66ba3e267a87e8a6f6f0b0177b6334ca787c9\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.412\",\n        \"version-display\": \"3.1.412\",\n        \"runtime-version\": \"3.1.18\",\n        \"vs-version\": \"16.7.18\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-arm.tar.gz\",\n            \"hash\": \"3c66abcdef095db393ecd25501ba1e13c5a78b79ce65e6bd9ddcc3a559528eab21b0a95b39acb86e5f7f8565ae7a799e6c7e6d723121132110f93eb868cf81eb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-arm64.tar.gz\",\n            \"hash\": \"bfc6f58cb0b87b0a2cf42d91494b914ab0997c91289599cce1704ee33fac9773e5b37b48d40c2d0fc53709c7f94cc37c26533ef7d0eb90f6db05680b2b603da0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-musl-x64.tar.gz\",\n            \"hash\": \"f81ec24d3550bd414fb0fa154007f88a2e2956c73d033c2a82a6cea3402f0a842d1f32e8ffc199c0d9ed86faa8005a76b7c3b130e9cd0c1bea71d0631c9a1bcd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-x64.tar.gz\",\n            \"hash\": \"1ed0c1ab48723cef834906a55fb1889b29dd810cd2bc66cbd345a0baf8a2796045b5b7f4beef3c48bd56bef3ffed690b6fae4a5f017ad8687817b25a76fbd9be\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-x64.zip\",\n            \"hash\": \"9c8d6d96391c4b97661fa3bc15ab91418a8428c5b62c11e18b1701f3417ee292e0e0ffe6c060f4a72d24232c1b1aa48902018a7c005cfb66c1b759a56f5766b5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-osx-x64.pkg\",\n            \"hash\": \"a37d2611476a2f9307f9538792bc39d70cb9612118a966e755a0a749ce3eaac84eca9e34b2d1a81f3f15fd55a9c4eecdbc27c597f860599265281dc1c8e1e926\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-osx-x64.tar.gz\",\n            \"hash\": \"0f43610ae01eb987494e09737addd435f38e952b1536fd8f5fc4d9bc1da7a95b6b9bc400ffb09eb826da73b6fe00a7c6e198e54f5ade2d7eb019fbe494fdebd0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-arm.zip\",\n            \"hash\": \"f9c7b637274e186e8a94b906ac06a487eff5e5799bca2e402c039ad988ac1f547c4467dd76950d87ea6d530bdab282b5c5f147b48a84bd14b2b3d1cd98d7554c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-x64.exe\",\n            \"hash\": \"542ce4bd7b2249ece59f411d9f4075648ff7b66d3895043a499976306039080d2ba626ec2e9d90ec8e4f0f0ab9ec61a4227417ed148f4c96ed8bc953078f148c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-x64.zip\",\n            \"hash\": \"99dae901e1d07fa06f401d927d9127c145ee58076274d6eee3a7256e77535ddc3833e3b5879b27848a3d94323c6ccc7641480d0907032bc34a65a384f912c239\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-x86.exe\",\n            \"hash\": \"14a5d0c246f5a198471c8bcb2f31c411c6f64b92dc8aa6b616f38e4d2fdcd787488506947f6806367ca84567a701dee3c3aff4795816895f24818d1562bb99f3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-x86.zip\",\n            \"hash\": \"1b5236cbecb22733f505b5efa477315fec0bff0cedcc6f82b170c763fa4809a900c09a3a17a47b6511e2f1da2bc8dd2013367ce8d64420148b4925d6952013b3\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.412\",\n          \"version-display\": \"3.1.412\",\n          \"runtime-version\": \"3.1.18\",\n          \"vs-version\": \"16.7.18\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-arm.tar.gz\",\n              \"hash\": \"3c66abcdef095db393ecd25501ba1e13c5a78b79ce65e6bd9ddcc3a559528eab21b0a95b39acb86e5f7f8565ae7a799e6c7e6d723121132110f93eb868cf81eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-arm64.tar.gz\",\n              \"hash\": \"bfc6f58cb0b87b0a2cf42d91494b914ab0997c91289599cce1704ee33fac9773e5b37b48d40c2d0fc53709c7f94cc37c26533ef7d0eb90f6db05680b2b603da0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-musl-x64.tar.gz\",\n              \"hash\": \"f81ec24d3550bd414fb0fa154007f88a2e2956c73d033c2a82a6cea3402f0a842d1f32e8ffc199c0d9ed86faa8005a76b7c3b130e9cd0c1bea71d0631c9a1bcd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-x64.tar.gz\",\n              \"hash\": \"1ed0c1ab48723cef834906a55fb1889b29dd810cd2bc66cbd345a0baf8a2796045b5b7f4beef3c48bd56bef3ffed690b6fae4a5f017ad8687817b25a76fbd9be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-linux-x64.zip\",\n              \"hash\": \"9c8d6d96391c4b97661fa3bc15ab91418a8428c5b62c11e18b1701f3417ee292e0e0ffe6c060f4a72d24232c1b1aa48902018a7c005cfb66c1b759a56f5766b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-osx-x64.pkg\",\n              \"hash\": \"a37d2611476a2f9307f9538792bc39d70cb9612118a966e755a0a749ce3eaac84eca9e34b2d1a81f3f15fd55a9c4eecdbc27c597f860599265281dc1c8e1e926\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-osx-x64.tar.gz\",\n              \"hash\": \"0f43610ae01eb987494e09737addd435f38e952b1536fd8f5fc4d9bc1da7a95b6b9bc400ffb09eb826da73b6fe00a7c6e198e54f5ade2d7eb019fbe494fdebd0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-arm.zip\",\n              \"hash\": \"f9c7b637274e186e8a94b906ac06a487eff5e5799bca2e402c039ad988ac1f547c4467dd76950d87ea6d530bdab282b5c5f147b48a84bd14b2b3d1cd98d7554c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-x64.exe\",\n              \"hash\": \"542ce4bd7b2249ece59f411d9f4075648ff7b66d3895043a499976306039080d2ba626ec2e9d90ec8e4f0f0ab9ec61a4227417ed148f4c96ed8bc953078f148c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-x64.zip\",\n              \"hash\": \"99dae901e1d07fa06f401d927d9127c145ee58076274d6eee3a7256e77535ddc3833e3b5879b27848a3d94323c6ccc7641480d0907032bc34a65a384f912c239\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-x86.exe\",\n              \"hash\": \"14a5d0c246f5a198471c8bcb2f31c411c6f64b92dc8aa6b616f38e4d2fdcd787488506947f6806367ca84567a701dee3c3aff4795816895f24818d1562bb99f3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.412/dotnet-sdk-3.1.412-win-x86.zip\",\n              \"hash\": \"1b5236cbecb22733f505b5efa477315fec0bff0cedcc6f82b170c763fa4809a900c09a3a17a47b6511e2f1da2bc8dd2013367ce8d64420148b4925d6952013b3\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.118\",\n          \"version-display\": \"3.1.118\",\n          \"runtime-version\": \"3.1.18\",\n          \"vs-version\": \"16.4.25\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-linux-arm.tar.gz\",\n              \"hash\": \"e7fe87cf3d5a4d4f20c2f1b7b4e0e8ae99bd14ece3113e9bcf83ab54cc93b40ee4458b7eb76d9f78f153a8b1aed5cab62398577e6fc4aa204f8827551112cb08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-linux-arm64.tar.gz\",\n              \"hash\": \"c79d4ca598caf3cc0f90e3b3b8b36bfc792b849f4cae538a6b1258c06f79b61d7c93c235e0fb80cae369a1b05a4a0132c7b45f3d862c1829fa356cbafb22e880\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-linux-musl-x64.tar.gz\",\n              \"hash\": \"b950e099af39440dd630db02a8d769a3f3bdc55f1fe492a624bf7fd125084a7719a4e126ef4ae6388a0375f3dc7a9cbb8cfedcdd8151d3372982f260533157ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-linux-x64.tar.gz\",\n              \"hash\": \"ad7e04c6577937d863fa7b6a66c90297ebae07b1f5382c2906ada246dd0e814f2b2ba8a754bc0cfbec93dc71e970baf944b18924794c206aaa5adf35c0467456\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-linux-x64.zip\",\n              \"hash\": \"54eb86717d4e5766e945e40185df9c0c38f3b97b96299ddd8b96029c61b98b138965a837d7f2abb9a2adcc9a79dfde549c4f4b3ccb870aca4827caae0a07bc4f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-osx-x64.pkg\",\n              \"hash\": \"0a5fa32c1f8a309d2a394524d401cd459cac6bc802e87cd96c1b75f7d629bda728061b341610a61513ca86d79dc6787eb364d9cad8e4a56e26c786a300100c43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-osx-x64.tar.gz\",\n              \"hash\": \"f2fa8fe714bdf329e6a28dbf998e4815a8e184b4663e66a9c97ba8115ceeaedb1e8cd844be1c1b748ead08162cd81eeda054045f3797a0a5f176eb0c87d5b0dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-win-arm.zip\",\n              \"hash\": \"6fa0959f912f81fe0b8c316fb16577d48ed29b068d1d763c5774c0a9d218a4a6eb07eea1ad18917f20b82eafb9ff4a1f93a3c9af7ceb92c7c5edd997fb16afd1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-win-x64.exe\",\n              \"hash\": \"d1af05fa3c0732177570cfe3c73a49fd25c3dc7258b9abe753366f70550faf598f38779def49cd05928176bff11c525d6f60bde0138ec6c0969c8ffdff052b80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-win-x64.zip\",\n              \"hash\": \"b8ce4a1bb9ed6ac5a837de48a0b254b5a8b714779409efe32f6d5988b245eb2162ae96125be09779d42525d7e34968e2f07eae5356c555aa56e8f939560a0a77\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-win-x86.exe\",\n              \"hash\": \"6432bdd107120320c9c66177b856e11e06e28b1a3e8d65ae0ce05fc5be338ed260243ddaea05a0249800b5a2ff4b9dd1960853caacd613f85d9f3d54f22a6688\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.118/dotnet-sdk-3.1.118-win-x86.zip\",\n              \"hash\": \"af07314f0266ee61b9617f7eba55d98f9320e68978f77b71cc00837cb6956d874a68f9ca32f1571f7243d28d71658b2fdde7c021fab72c8d08982c7be490bc49\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.18\",\n        \"version-display\": \"3.1.18\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21169.17\"\n        ],\n        \"vs-version\": \"16.4.25,16.7.18,16.9.10,16.10.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-linux-arm.tar.gz\",\n            \"hash\": \"373d8314f267c9c49df866e14eb98b0600a7e2a68157f84b0c08762417bd8ebace6b2acf214c5749ad1c1b00989b9e04bfa9f1d802269c12b8bd2ff8434d7f86\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-linux-arm64.tar.gz\",\n            \"hash\": \"82f5513866138626bf12dc1f5e48684ada96870ab93acef0bf8a9ef0f05988bbea6bdbad02bd52b2c394ca9fdcdc8b924b5bba7994bfe1c034913a0d77ffd00a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d02a694ba0c480911c65d471efdce6a999ac374bd38802f644d2a31382f6aff2e0ae9714a3140c5529b554f8f7060d5f43f99efa5f3e62419d1f32cf0c1f59c4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-linux-musl-x64.tar.gz\",\n            \"hash\": \"6288002d8281594d6b928f887b7a24c221acc52d584155fada7198e0cb53c77357867df6e23331b71bc7c3150ed71632e16503b0639ad5c72acf59959fcf6cb3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-linux-x64.tar.gz\",\n            \"hash\": \"be29a7611941d9b20d5d3ece64d271bddf6814968b5103ce3c2342ba24bf0382eed3625713ce89957fa15671403af16ccb588397fc0b27e7f028952213e08db6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-osx-x64.tar.gz\",\n            \"hash\": \"4ceb899b83c01af2960d54b1e35243d95e854d33312c860a48a1420e6639ab19007dcb3b3db059df10aa6af051713e6da9386837cc2335f0a4cd9e3c86666119\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-win-arm.zip\",\n            \"hash\": \"e39f569ff5b63f8c155f77924f98d027ed323bcc21cc4bc91e4a566a31a57e551440b3188298604db188741ed541aae22eb7f498a7bac33f26b39df17fd0fcaf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-win-x64.exe\",\n            \"hash\": \"4545f55aa792e6d1854dee270668594e28785053387144256a1a8c8933c9676cbd78125f400441df6b3eaab15b77a3c8c202687219731b44f16592a3856cd325\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-win-x64.zip\",\n            \"hash\": \"61d93c156faca2481f8ad292e84a83fb933f3029a39b5146d8bd0034757a47981c223c7cd6ee545e368c112f0d37b4aa7938fcb4f76d8091092b387999af1f6b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-win-x86.exe\",\n            \"hash\": \"83116a5443b1962c3ad21714bea790ab01e0f398c1c9454a0ca9ed211f1c696fb3565f22a706dff989497ae4b6ae66a4f908515d615d23062c54aacbfbc626cd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/aspnetcore-runtime-3.1.18-win-x86.zip\",\n            \"hash\": \"f7fec8075f86955d7a6960890667d901097f76d042c4a4cf681929ceb1fc3699d8827a20da4459a4194832e599b8b6dc22315522b9c1d3b224e44b7e04afb1f2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.18/dotnet-hosting-3.1.18-win.exe\",\n            \"hash\": \"d0c3ea9603345a6e4dfdf0fa9d652b4fa7f5207b123aca24861f8744798f7597463f56ada63c6530dfec44e61de4d31efe4ac1aea3fd75c9fe0d446a2342d561\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.18\",\n        \"version-display\": \"3.1.18\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/aa240732-82d7-4bd1-9701-e4014d7dc735/41a460f5e9c343f7b9207f64ab0e4c90/windowsdesktop-runtime-3.1.18-win-x64.exe\",\n            \"hash\": \"37c5afe4e0dacdd7adaa8ac7b47076e8cd3e5ee02d5f8e9522ae6106470615ddf22b1f76f3fa50ed3722d6aa325e77302995c9ab60a54e82fb5aaab727509787\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1a1efc0c-f28c-4d60-8a52-6d62da05444c/0d192b81749b9374342b64150c9442a0/windowsdesktop-runtime-3.1.18-win-x86.exe\",\n            \"hash\": \"81521bacd224764daf95dc2c268cefb600c42ec7dd6b4d1a958a1e4449d59e694159ee1be2c564ad4c782eece3f70c5f2d58781c620fa0768a51ebec579c03c7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-07-13\",\n      \"release-version\": \"3.1.17\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.17/3.1.17.md\",\n      \"runtime\": {\n        \"version\": \"3.1.17\",\n        \"version-display\": \"3.1.17\",\n        \"vs-version\": \"16.4.24,16.7.17,16.9.9,16.10.4\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-linux-arm.tar.gz\",\n            \"hash\": \"3db3dff57003825140275cf79026df8edbaf007f441b9e9383f7a3833bfcc83e9fa96918267d0e8187f39b38cf643f6309166741fce07a80639fd13b2d55c0d6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-linux-arm64.tar.gz\",\n            \"hash\": \"41b9adff569492c107516ceba71c5787f6f9c82e2e7e6674f620325bad33d814fb4e336a43414ea467b884d2df7dd8c69450e165fc2a4d8115c3fa4548d3c294\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e95e3d3357048bdd54fe822b89773d5c96020f8911ce9c9291463d73eb23e7d2fd4ad314e946472bf67ae7a3fb3a3975ee0667251ec074a50ed0ffffbe0a9581\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"aca9ff3a2d3105eed366816fedee8fa0d3c06f0c1081a9df5ad6e7638e540299d4452faefd42518de2023fccb4169127883c0f30f202b3b1a6ac9a68aa9e9efd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-linux-x64.tar.gz\",\n            \"hash\": \"1ce74aa00aca36b246fe9bf7b72ffe142eef5731d2e283d4d2181c94740e00e1be377b7781ee2fa97f4ed28f514e62131452359f50dbf965a56a79dac3b3d16c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-osx-x64.pkg\",\n            \"hash\": \"8c7e027f565a3e6dd8785a27324aa00c04112e998b35016dd8fea60c4dd5a042aa17cc25d0d6148a9c10a30647116cefdb0f0d768057d9a1b1087cd14424cc19\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-osx-x64.tar.gz\",\n            \"hash\": \"a25112229743b3233906b6b335e8e0ffd92872769cedb9929b7fb837bd97ecd0683783f5eb7c2f9618b2ae070a712318575cffff61fdffbd3329734c79e5a0d9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-win-arm.zip\",\n            \"hash\": \"ba1714a29de8b8574416105fd592a3c312131440e0d09b2230341b53d4300c44fc113a90d55ef04b5e261756422909f81fae1b352c65fc9695fdfc8b95147144\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-win-x64.exe\",\n            \"hash\": \"02dd655166aa5231a3a59bd04cee9b97393d01d41e4be29460d468a3b01843f0b2a2977f691a88dcc1da717be70fc7a93937645d77431ef6c1baa6cd0b86442a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-win-x64.zip\",\n            \"hash\": \"1c13f15c64bacdc8119d23e15014f73ac674ae1a21367778c589600e8f5b644f12bc640b37c4345a9cb55f908cc8fbe069b3b5d7ae4b78013c12054f407ea993\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-win-x86.exe\",\n            \"hash\": \"7a5c1d149c6af080642bfeea0385d3918bbc1d308084f524fce77efccb6f459c7c6120b2f30a7d02329bbefe94e98f033f3b3a0c60eb4b50c92e905c5fc49e63\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.17/dotnet-runtime-3.1.17-win-x86.zip\",\n            \"hash\": \"ce8643236cf00d892950881f0761d9c9c7a87cd99ab8432e4f52fb3f465f8f7a6a1e59832cceed1885f2addac45b8e72464ceddfeefeea48b1bb47a88bade10e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.411\",\n        \"version-display\": \"3.1.411\",\n        \"runtime-version\": \"3.1.17\",\n        \"vs-version\": \"16.7.17\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-arm.tar.gz\",\n            \"hash\": \"a684155eb088e280ea4e8612e06b3ccd3d00a58ecd84d0971ee96ac0ec80c1d7333acf929590a886be5759eec33890bfd126152f740657fb9bbea09e9f96e97a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-arm64.tar.gz\",\n            \"hash\": \"c9b03b858e6063fc200a103930fb5a3b03ae35b89b884bb461bad36ce34f14fa84c4e98edc7082bcf5b132fbd31d8d58192e62ae055e757d064ed98e4ec5c600\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-musl-x64.tar.gz\",\n            \"hash\": \"58bf68237e604cb4b5f64b71c140f5498ee4c2471689fc7630fdcf09c5694fe75d75961418fc4ac6cebac6544972aee98dc9c3cfab3876182c4a5eba694e90dc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-x64.tar.gz\",\n            \"hash\": \"4117763444028519865f11f3c1f7e951245b06e93f30429fc97089f31ef0ce63777ebfa83b3c729b8c5ec9b2562a0f23036e69b3a5766ff999106e2068b55950\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-x64.zip\",\n            \"hash\": \"e7e6c4dadfda2ce3f3494a8563fe5d95ca2da22b09926306de7e38ca62472d4869fc4d39758ff321956d81390e80c62068323da123b90f027952274c6d32ffd4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-osx-x64.pkg\",\n            \"hash\": \"f21fa54d91da4da232693f1a1cf297a1271eb56b28dee076cbc7197f801638255119c1c9ebe84d385a0f91931e5b75a8af2bb0f42c3e99dfe09d10a987e74fa7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-osx-x64.tar.gz\",\n            \"hash\": \"e15eda205ca5ea7ab60055e211534f2d7c7b8b7186102bb6edc9917b22ea8d61c6b70eb99e7dc0496f541e7d4f47be1675f9a10b68ab2ec4be1b2923acb6981d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-arm.zip\",\n            \"hash\": \"d0b42337d690dc40841baeb3863509217c2087910be1aff687214f040cd3b5bf22f090eeea36a8cd0bc078cfecde960fe8588ec39112b1206eab3a83ee2a4e2b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-x64.exe\",\n            \"hash\": \"79b2726f425c2d0bc4dffc05e65ec3f8a70e526b59671ec2bddaaaef598a72b461b0344e736775a3fa2541a4b175adeb7709487828f30b2f9e777e17076f4bf4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-x64.zip\",\n            \"hash\": \"665d8ca3542d99231580d08d9027c5a48cacf7da5dbbf0bfd52250f053987dd127396792eebf5e29b26e67e8d62787ccf94675878c9e504cf6c76c7295e10c71\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-x86.exe\",\n            \"hash\": \"ec122326f17c811b55f486b5d36696506f4eb56f13602bb1c163a5fddc2dc1593d60ca990a84cc65711e20a354adcb2718fa0e163634564944ecf518f7cc5c6b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-x86.zip\",\n            \"hash\": \"fc87cfc47938846e5f28838f63c6f55bc44fce149672527e3c28724ef1d28aa92282a5b010b30befd4022fb3d419adb148be1dfb0459b701d7a0b1df8f27931a\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.411\",\n          \"version-display\": \"3.1.411\",\n          \"runtime-version\": \"3.1.17\",\n          \"vs-version\": \"16.7.17\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-arm.tar.gz\",\n              \"hash\": \"a684155eb088e280ea4e8612e06b3ccd3d00a58ecd84d0971ee96ac0ec80c1d7333acf929590a886be5759eec33890bfd126152f740657fb9bbea09e9f96e97a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-arm64.tar.gz\",\n              \"hash\": \"c9b03b858e6063fc200a103930fb5a3b03ae35b89b884bb461bad36ce34f14fa84c4e98edc7082bcf5b132fbd31d8d58192e62ae055e757d064ed98e4ec5c600\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-musl-x64.tar.gz\",\n              \"hash\": \"58bf68237e604cb4b5f64b71c140f5498ee4c2471689fc7630fdcf09c5694fe75d75961418fc4ac6cebac6544972aee98dc9c3cfab3876182c4a5eba694e90dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-x64.tar.gz\",\n              \"hash\": \"4117763444028519865f11f3c1f7e951245b06e93f30429fc97089f31ef0ce63777ebfa83b3c729b8c5ec9b2562a0f23036e69b3a5766ff999106e2068b55950\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-linux-x64.zip\",\n              \"hash\": \"e7e6c4dadfda2ce3f3494a8563fe5d95ca2da22b09926306de7e38ca62472d4869fc4d39758ff321956d81390e80c62068323da123b90f027952274c6d32ffd4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-osx-x64.pkg\",\n              \"hash\": \"f21fa54d91da4da232693f1a1cf297a1271eb56b28dee076cbc7197f801638255119c1c9ebe84d385a0f91931e5b75a8af2bb0f42c3e99dfe09d10a987e74fa7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-osx-x64.tar.gz\",\n              \"hash\": \"e15eda205ca5ea7ab60055e211534f2d7c7b8b7186102bb6edc9917b22ea8d61c6b70eb99e7dc0496f541e7d4f47be1675f9a10b68ab2ec4be1b2923acb6981d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-arm.zip\",\n              \"hash\": \"d0b42337d690dc40841baeb3863509217c2087910be1aff687214f040cd3b5bf22f090eeea36a8cd0bc078cfecde960fe8588ec39112b1206eab3a83ee2a4e2b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-x64.exe\",\n              \"hash\": \"79b2726f425c2d0bc4dffc05e65ec3f8a70e526b59671ec2bddaaaef598a72b461b0344e736775a3fa2541a4b175adeb7709487828f30b2f9e777e17076f4bf4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-x64.zip\",\n              \"hash\": \"665d8ca3542d99231580d08d9027c5a48cacf7da5dbbf0bfd52250f053987dd127396792eebf5e29b26e67e8d62787ccf94675878c9e504cf6c76c7295e10c71\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-x86.exe\",\n              \"hash\": \"ec122326f17c811b55f486b5d36696506f4eb56f13602bb1c163a5fddc2dc1593d60ca990a84cc65711e20a354adcb2718fa0e163634564944ecf518f7cc5c6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.411/dotnet-sdk-3.1.411-win-x86.zip\",\n              \"hash\": \"fc87cfc47938846e5f28838f63c6f55bc44fce149672527e3c28724ef1d28aa92282a5b010b30befd4022fb3d419adb148be1dfb0459b701d7a0b1df8f27931a\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.117\",\n          \"version-display\": \"3.1.117\",\n          \"runtime-version\": \"3.1.17\",\n          \"vs-version\": \"16.4.24\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-linux-arm.tar.gz\",\n              \"hash\": \"c7a781fb1cccb308788d5b04c3acf822c3d0fd8df31a2882090b238a7d04ce9bf059b4153a0f6e0cc7e6468ff8fbe89ae3456b6303dcb8292157e7470f71442d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-linux-arm64.tar.gz\",\n              \"hash\": \"6c474b38dbaf6b55cb2f5ce27a98b50f3cb18c1fc1b15448785baf20c371fa42973eeafcf667ab42c7b840ddfde35a6b3fc819c06f9d76963617e74c34220c70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-linux-musl-x64.tar.gz\",\n              \"hash\": \"923ba3fc5394c7ef57e5282fb481651fa6eb4fc55bcb4cfecf61b23800083e36a25c8f9347a97cb94e5b2535b002f4ff20196dff28afe749bf6ebe43e07190df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-linux-x64.tar.gz\",\n              \"hash\": \"8aea60564dbc6f683da443d1f5c17088521c8c736961978b4e0c74a548108bdd0f47e6488e56b174530c6d9a0f0e4f768a28d3e0d44ef46eedc85f190eacc712\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-linux-x64.zip\",\n              \"hash\": \"c943c49a76d2aa759a5e3194a99785cd34228adb708464c4fe375f306780d7593a3e0cee40a2f57ca5f1f60266cc5ee2756bd388d0321a45ecc9eb1246585291\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-osx-x64.pkg\",\n              \"hash\": \"6e7b96a1e0adcb2c3de835af09c47fea47a79d32348606bb60b9fc5e2e15808b991e81250d2a7b5fd004798f62dec043bd634cfe1b9858598dcbb04a698044c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-osx-x64.tar.gz\",\n              \"hash\": \"b9ed428e02ec6880474388731bf715e8e096bb1e6e42b78ff50df58787ce326e94efff720edb928cb35b930639f0f61e0c8e52ce24ee00a7e286ecf9e0a1ddc2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-win-arm.zip\",\n              \"hash\": \"7fab24e9685fe03bf05569c9248ffd6c343c58d6783bba1704b80126990d0450c529cb83e99a289e27b6c4eb609366edef47710a48e7d53b43aed8fecc80b042\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-win-x64.exe\",\n              \"hash\": \"d7e15b39a92ffe0c72694f6bdb6a79e28df6720a6694c0510b366faaad12654315a23b47e8485af73bb8f21609e13f33c1e85cb251b8587e067f359879b0a2fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-win-x64.zip\",\n              \"hash\": \"7bc69f5571fc922ce56b97e393da4b09042530bb8b460c41e5ba84ff5a192581aa44e9384ce99f4edf6ee151657f6f19f397e6f7db1112812d45b88341950d5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-win-x86.exe\",\n              \"hash\": \"6226483d83d5284a2ccaf59be55a555d88e4639398c2fb35c38efa11675388e17a6abdb2cc34e1a3315b36a49d7dd3acc8a93a47f126cb5a3a26019a0fbf57b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.117/dotnet-sdk-3.1.117-win-x86.zip\",\n              \"hash\": \"66661f07a8296f463f69e921e6521d85fdbf7d087d1a913c250a6a677abfd139e376e2a5de9d2e57db5c199e2699856df16a3cb1a7a657ed245f93724f7ab8f0\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.17\",\n        \"version-display\": \"3.1.17\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21169.17\"\n        ],\n        \"vs-version\": \"16.4.24, 16.7.17, 16.10.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-linux-arm.tar.gz\",\n            \"hash\": \"0388c9e9499bde6e36a75cc160c8f1de025ed8a998dadf8c8f6bb3b5db8399b567b2ca5baa8eba09944d953e44ee725962304688fdb933856b6c3ec6a8d64548\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-linux-arm64.tar.gz\",\n            \"hash\": \"7fe6443deea56bdef7c990560113b86a2f40862eb3fdbe1f5307ac461aa563d6106c9cf6d8caee08de375e82e598571e742460832c36a3c669e44a0522d5af87\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8cd21703bb4940323c7f7f6b7237163b2833ba5208357b2ce98e1eb9f43d91833094cfa550d27d85fd9c680dedb0769d5e690f457d5475867461ad3952521d3a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"8861552d21a7efed982f31d228d42da7f8de8cb5343771de96034b3ddcabca2f9bc96bdadc40c7732c217bbc1b4d68999e91a98541076d6b5f535c2e6c9f8a4f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-linux-x64.tar.gz\",\n            \"hash\": \"456cdf2eaa85ab6eeab6555072bd472090fdd2aa20bf830c13b33976c3cac02570bf573ba08098d0303746203787d227e716fd417f94cc04a6256528e2459f97\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-osx-x64.tar.gz\",\n            \"hash\": \"f3b8fee5b4601b135995b4a969c3e5950b5fd37b279ec00e34f0c7dae40765c9458abe9cec1b67e15ce01726152fa48cd140a34cff3c87878b37a35206bdcf39\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-win-arm.zip\",\n            \"hash\": \"9dafa2510b62c1c59c09ff63006414d46f65b3586fd76a6786830a46e9cdf9184414a53c5ac2977c06f71e1713298e102a0a681982400283bbd7716bda95bb18\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-win-x64.exe\",\n            \"hash\": \"a83ae18d6a50f1071d2900f4f9309a84cc2884a4436dac0a4a5a07707f04dc4a520b0eb57be67cb7c64a5a1008461aff070aacd832fe78676f8b81bcc4dddafc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-win-x64.zip\",\n            \"hash\": \"eac3dc14519b76a25e0803642e60f8a78ea19cc9d28a49118c327c61a8221c0d5ca27fd0c67cfc1c4712bcfb9dcacfa32cdba8b7be89aecc6e75107c0a96f761\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-win-x86.exe\",\n            \"hash\": \"44c596a020cca8822dcd0ca4a86556a5eb3b4b0927e2ffd32e3c012cddb7fed5da4d2bfc245bfc861839b21a16a939113328e58f0cd0abc5dbbe30fd555d9c75\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/aspnetcore-runtime-3.1.17-win-x86.zip\",\n            \"hash\": \"2dcc2f38cee2c113c5b0d4f342af4a4d6692ff42b8588f8e098887b827b0686af67820fd9ab5c7e2da524cd54174e2f1656141c8080c219a4418b7e0c231c637\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.17/dotnet-hosting-3.1.17-win.exe\",\n            \"hash\": \"680ecfe0f3f920deb2f5514c56ae84a715f8c54852a682e5bfea0047355b933fe41cb6395761c5de79bd86d9abd071b77c3b5d65fa10655ec1d76600935ecc64\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.17\",\n        \"version-display\": \"3.1.17\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/444b48db-df03-4c14-b98d-09fec51b34d7/5bf38b8cde40d1e6e92c2495a89a4793/windowsdesktop-runtime-3.1.17-win-x64.exe\",\n            \"hash\": \"3601db1095fe0b7ce65a8e864851f70e6bfa99fb6b99fb6de10cf5c9a9bfe07c9ed4ec025ef719fec54bdea25691427fa2f3eb7b488fb5512d8f4e870839abf4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7849e6b4-8ba7-4287-85e5-a76cd764ce6f/e4a25251dcff1af2af15868d7d9f3950/windowsdesktop-runtime-3.1.17-win-x86.exe\",\n            \"hash\": \"99603664bc64b6376f2c7c7592a0b342fc2ba4a79cb72deb473b23e2f0fa27f3f8d741f73ece6fb52fd3c7e8d7d8f1ad3dc852b1a9f54429762718d5137ee6b2\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-06-08\",\n      \"release-version\": \"3.1.16\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-31957\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31957\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.16/3.1.16.md\",\n      \"runtime\": {\n        \"version\": \"3.1.16\",\n        \"version-display\": \"3.1.16\",\n        \"vs-version\": \"16.4.23, 16.7.16, 16.9.7\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-linux-arm.tar.gz\",\n            \"hash\": \"7a4b89a589b44ba6cbd1a7f32062e131f69c7730e28168ed8c9b56955d5b4a860eb6388781208cd2794bf0bcbd55a967b649e0e261660491a092484ccc41b96f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-linux-arm64.tar.gz\",\n            \"hash\": \"c517d811c4c5b4bc8f57bedeb5a5a9db304656bbe8d73695255dbf7e60ee0f55dc0d07ac216d6d4d293f3597b7dc01247e2df008a40be247826e853eccc00fad\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"60897e463049b5d5ef2169651b3b256f761a472f3a864c453c28bd4d787fb693d3d03f2a61473ffaafa3a074b30c38c2c6d2e473bc7dfd2d3006954d0321280f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"74cbf5617c9c5d6a0d371db3fe2af10b89d7f0328c9e0db40015b0ed1d2092126b7f831134fb0a7c8557627f6d6597de886e885e8b8c4f5c6a9e109b5fcdb92e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-linux-x64.tar.gz\",\n            \"hash\": \"1a6de47e4ecda4d346e07ff502c128af97b1a08301d2a77751f24f005f340531d13dd7fc071726590d67354037e27deeb09a005082c6c170aa0bb2351b5a2543\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-osx-x64.pkg\",\n            \"hash\": \"af93824bb774326fc703a4aeefbb7fcfcc2f07fe8cb2201d7c10d43e578cdf8358f628fc392dc6b44743a4ee05300d9feebe4850ae2fa370f388708fa28ad020\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-osx-x64.tar.gz\",\n            \"hash\": \"e1216e41b3753466f98b26787f918666d0f70b3a54a1a84e0cde66b651504d2e82c64519b6e17437b6c0c452666db37b99440c558219be3440b81021ef2e6ec0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-win-arm.zip\",\n            \"hash\": \"265fdbd8d5eff98b0209221ba37096285b8a72a063ce17b8526dadec20dc90b8977bd77126c928ec08a1e958673e06bb9633814fe758d1d96a9b7fe616b2f0d9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-win-x64.exe\",\n            \"hash\": \"4d01bd542ef923ca369d292e0d13ad028a609f73ba71d001f840e67c0fac40b8005d6737b22c4ebc14191fce5372b811596fc805519cbec9bafd4a2598a30c8c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-win-x64.zip\",\n            \"hash\": \"2eaa3f57160fd5cd022ce73c9607f16a16c2b77dd6fcc93afd8247fdff74d6ae554e79dff908cd1bfe9fd02e357ce1833cacb3a83f590cf3b0a9d270070ec816\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-win-x86.exe\",\n            \"hash\": \"a574453625cd566833b631826ddf440b8fe1420e7d992e295a9e11617089811155cf8535aac087b66f7b62e4c9e98680f59fefc584a30e76f84f8881737e0f8d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.16/dotnet-runtime-3.1.16-win-x86.zip\",\n            \"hash\": \"78cdd8b6fe7f7920968646db1913073717d529db82e969d71051255d5f290baac69c7b4019eeeda9763f3ad09c037c530ce530c729952471301e95049adf7c4b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.410\",\n        \"version-display\": \"3.1.410\",\n        \"runtime-version\": \"3.1.16\",\n        \"vs-version\": \"16.4.23, 16.7.16, 16.9.7\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-arm.tar.gz\",\n            \"hash\": \"139c9b41a89af44bef74de27df31d4bf50e56e5edd2d76e501bcaab7fc39764c1d74ef142fdd4f077a21c84b550b65038a642a4c65bbe65c0e38c6ce7fb7ac25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-arm64.tar.gz\",\n            \"hash\": \"58400007d55b122becb229a45d0fa8676890e16e818e229a9b6f5684e6d9133a22e4cb144f3a1af351c01fe9cc70056d43ab8164dca2b841cbdfae96fd7b02db\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-musl-x64.tar.gz\",\n            \"hash\": \"d844e044d7dfbca0b69913c3d5a5dde0f46ddf4a43c1e8c2a474dc65c3089521d0e946507ede4654efc4281314360c66f5c477ee90e1e80f30115e7a5aa1b586\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-x64.tar.gz\",\n            \"hash\": \"aef9340008c2002b73171f186a6a167edf3494b740286927fc86f908eca20f5df13289f88ba2a1ef2011c93542d8aefec11d919ed191fb449dcf1b22e0cd74bc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-x64.zip\",\n            \"hash\": \"180cf0404321d3237b3cf382baf1f7cbb3fcc1b06672046bf4b6df25b000c3321c4e9f1d21563d9e770db149469979f1643ff1f3e8d34849e1822cfa7ffcfd97\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-osx-x64.pkg\",\n            \"hash\": \"d5f97db0337088ac302a19ccb8105cd075409e55a41af7252a89e672070adc2ac672bde58bd65a7b49aa14908f1f783a447503667cc48a666f225cee4e0e342e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-osx-x64.tar.gz\",\n            \"hash\": \"f620e951ca66d4a605a478e59bbc80aa0d131444fdb775701f0d19b93373937c123cf0da2c32764f25b66ee18894cb40eeedb9325742d554224f7a2d4f89b6c2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-arm.zip\",\n            \"hash\": \"a6170c5bdb264a50f79a703a46d6602d4133b6ffaef69e16bc5f31a441c44ab40bcae4d2ff81f445530e331bb3cecd121e51003fec0186845b0a18bb546bd4cd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-x64.exe\",\n            \"hash\": \"a300792bf831172e72ca26603129477e84af226591b9e9dba9d3d0198a3556bdabd924ec2a2df9a4b3e1a4a7f9f836c72731965d73cbd00c9ef0639830876e69\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-x64.zip\",\n            \"hash\": \"e9840c98ac324c863af58170078784e44fbdfbabc804ed6f1160f994fc94e765bbdaa91f917368951d698898f9cb9f926ce0074cd95502e268f485a69bb8122e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-x86.exe\",\n            \"hash\": \"8eb811750fb104a685ec1018906bc2bb4bdffc643f9812cf3ffad86d5336d7ff1f4bab33ae25e35e9a6f8fce97d65bace6a9c011a5b8c4d5ca78fd33f05ed9eb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-x86.zip\",\n            \"hash\": \"580dee6e3cc39b4bb339868d30ac5354f9aa16e3ab91927b7d7dc43dd4bcc2dd1837714695614d39ca822fb8f110066e119858068a1c9513fd61778a09b6ec5d\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.410\",\n          \"version-display\": \"3.1.410\",\n          \"runtime-version\": \"3.1.16\",\n          \"vs-version\": \"16.4.23, 16.7.16, 16.9.7\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-arm.tar.gz\",\n              \"hash\": \"139c9b41a89af44bef74de27df31d4bf50e56e5edd2d76e501bcaab7fc39764c1d74ef142fdd4f077a21c84b550b65038a642a4c65bbe65c0e38c6ce7fb7ac25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-arm64.tar.gz\",\n              \"hash\": \"58400007d55b122becb229a45d0fa8676890e16e818e229a9b6f5684e6d9133a22e4cb144f3a1af351c01fe9cc70056d43ab8164dca2b841cbdfae96fd7b02db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-musl-x64.tar.gz\",\n              \"hash\": \"d844e044d7dfbca0b69913c3d5a5dde0f46ddf4a43c1e8c2a474dc65c3089521d0e946507ede4654efc4281314360c66f5c477ee90e1e80f30115e7a5aa1b586\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-x64.tar.gz\",\n              \"hash\": \"aef9340008c2002b73171f186a6a167edf3494b740286927fc86f908eca20f5df13289f88ba2a1ef2011c93542d8aefec11d919ed191fb449dcf1b22e0cd74bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-linux-x64.zip\",\n              \"hash\": \"180cf0404321d3237b3cf382baf1f7cbb3fcc1b06672046bf4b6df25b000c3321c4e9f1d21563d9e770db149469979f1643ff1f3e8d34849e1822cfa7ffcfd97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-osx-x64.pkg\",\n              \"hash\": \"d5f97db0337088ac302a19ccb8105cd075409e55a41af7252a89e672070adc2ac672bde58bd65a7b49aa14908f1f783a447503667cc48a666f225cee4e0e342e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-osx-x64.tar.gz\",\n              \"hash\": \"f620e951ca66d4a605a478e59bbc80aa0d131444fdb775701f0d19b93373937c123cf0da2c32764f25b66ee18894cb40eeedb9325742d554224f7a2d4f89b6c2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-arm.zip\",\n              \"hash\": \"a6170c5bdb264a50f79a703a46d6602d4133b6ffaef69e16bc5f31a441c44ab40bcae4d2ff81f445530e331bb3cecd121e51003fec0186845b0a18bb546bd4cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-x64.exe\",\n              \"hash\": \"a300792bf831172e72ca26603129477e84af226591b9e9dba9d3d0198a3556bdabd924ec2a2df9a4b3e1a4a7f9f836c72731965d73cbd00c9ef0639830876e69\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-x64.zip\",\n              \"hash\": \"e9840c98ac324c863af58170078784e44fbdfbabc804ed6f1160f994fc94e765bbdaa91f917368951d698898f9cb9f926ce0074cd95502e268f485a69bb8122e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-x86.exe\",\n              \"hash\": \"8eb811750fb104a685ec1018906bc2bb4bdffc643f9812cf3ffad86d5336d7ff1f4bab33ae25e35e9a6f8fce97d65bace6a9c011a5b8c4d5ca78fd33f05ed9eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.410/dotnet-sdk-3.1.410-win-x86.zip\",\n              \"hash\": \"580dee6e3cc39b4bb339868d30ac5354f9aa16e3ab91927b7d7dc43dd4bcc2dd1837714695614d39ca822fb8f110066e119858068a1c9513fd61778a09b6ec5d\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.116\",\n          \"version-display\": \"3.1.116\",\n          \"runtime-version\": \"3.1.16\",\n          \"vs-version\": \"16.4.23,\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-linux-arm.tar.gz\",\n              \"hash\": \"3fd1a4842067a7dca2a6730865884b607dcf5bdd40406a9950448ccf1d12941446a2d753521c124b6ee6b9adb8cc4076da4a9b2f548f5afce52cbc96f8a9613e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-linux-arm64.tar.gz\",\n              \"hash\": \"3a8f3744290899b860be9a2456df58d84101dbaf8c7383acc89a3c6daaaf03e5f708fe52d67f79bc7da5f3b0bfc4e0731add1ee59ed31b7e4efea40aa0d328d7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-linux-musl-x64.tar.gz\",\n              \"hash\": \"406a4ef9748d0606d32c301e97deab4b57fc7211d5a1fe2b680ccf897b9ec7276321a194cbe5a154cbfecf93c087c2503bdcb98f36fb8d0431f34f0fa88c3b4f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-linux-x64.tar.gz\",\n              \"hash\": \"ee392c162616cdaf26cf5e8abceb24907b9f883bc992804f0a7084626989a2548e55815c60fcf41a6f6a395ef17710cd9d00b4af1469e69ff8e600c6601876d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-linux-x64.zip\",\n              \"hash\": \"f013f15ebca39e34faa89772299e9b7f0f61d7b52e5f3b0969708fb15a2829448f638bd9eeaabdcb70207b5a0f2e08312fd86bdb8e9f4396b8d36eda03c310e5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-osx-x64.pkg\",\n              \"hash\": \"947fc74684cfcfd94c9a6ef06deb757e62f4a9738e9dce99ce5e773497cc0f0177307a60b4bf539a9a6d538d2d567dea88a043501a7cdde4cf4245efaca2025d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-osx-x64.tar.gz\",\n              \"hash\": \"d05ac2cee7e13dd6bd6e73d6068e2dc89a50acabc11bc2a43deb3c36bf817ee875aaae65354e59ec697ce3fea1809cfdb3be56ba3af8cc9f126d8b78e5558f1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-win-arm.zip\",\n              \"hash\": \"17d5d5951cb15d303d51a8ddc1fc21dd5b28e505fc4a8953838dd8a8efb5e987d89bf1722d627462f15f5966f34076165dc0431e393ed108bb8c380ae478d55e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-win-x64.exe\",\n              \"hash\": \"6848b42a748f854d387590f8194fdc57b6a0fe43aedb7f87fe6243229170582a4da147d6bec0f17444c2701014a29e952ea18de42a9afdd1a5b1b882cfa80db7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-win-x64.zip\",\n              \"hash\": \"eb6e2dc0b2c9af04b5424bc61e70b807a450d0bdef093920f018cadf3ecc4c31898674badc78cb15a200f59a799df8c9a56b56fabd639530f8b059183bc31343\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-win-x86.exe\",\n              \"hash\": \"b99ec8c822a74ae625866cb0dbea1cd9bc4511ce6eb07c6d0ec34890788c89578549691014fb70bbd25db78ea74f1e8e05cf5db30db11d0bf022aa31ff95b0c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.116/dotnet-sdk-3.1.116-win-x86.zip\",\n              \"hash\": \"a19f592b109ecf4c2c5f66c897d2380066b6e294bc2b62f71f004ae5aa14aa74f124baa5815e949dd4e2139cc378dc16fb15944a63db14bd9562a1e338e9956f\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.16\",\n        \"version-display\": \"3.1.16\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21133.16\"\n        ],\n        \"vs-version\": \"16.4.23, 16.7.16, 16.9.7\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-linux-arm.tar.gz\",\n            \"hash\": \"12268e04d8ff50773987c894621fc0979ced62749d5bd7168c61818345b19ba610a177547bf37dbdcb491f8bc7ac33e33c4e46bef80f11365f30547d315e5b67\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-linux-arm64.tar.gz\",\n            \"hash\": \"e19a241306108ff8acc2d3197f9ce79cd7dfe0f0eac75ce37feb3195cdf0a879576d992fed207a2614b08e146cc8a644dd4c34b90b22be1ff00378c1004ed867\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d67b99ab4395b00933fe01a558dc39487690be69c71d4a8175db85ef56caf8376a866e6eef9c74d542a078826ab2a992caba1a455e0d6e7a374a22d665d98293\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"0357a441f085cd91d61cefe02b3933a77fbac9dc2b0b4b7dec4dccf13220ce7b25152f2f17d6d6a14fd3762cac40f0a6cdcf5d56dd44b4724762ea2caeba6c87\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-linux-x64.tar.gz\",\n            \"hash\": \"81e4cd050bcaf77a54f0b2cea18be2ef30197f8ac3bee5e90a9331fb18886868aad2b65d733e79899a608354cd12aa0877df2e68c80c1f4d1bec594a8b5cf054\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-osx-x64.tar.gz\",\n            \"hash\": \"a11f70eb11312623cdc42e36ada4913b25dd380db6f4008acd3ddbd9c85740a57403fffa8b0cf2b9a8953082fcbb66bd5a6a08e9aa746c95b41332261e7aeebf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-win-arm.zip\",\n            \"hash\": \"895086b9a0c3206630a8c07ea6a9417b882ac3adef5dbac683bf8a2cd30cea891939a79bdca32c6df94796e9b913a91c757a79a26a3c1acdf8921ec7719ac6dc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-win-x64.exe\",\n            \"hash\": \"109d19929fa83a038bc5c2f588f8d30b0c3120f484f666ada48722bd47924407eb3ff99ee1f8ebb93cdcbea4052c12464cdaefd72fde5f86fc93d85fa7951d7d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-win-x64.zip\",\n            \"hash\": \"20069e007fb9ec83c43c5c60bcf565909142eee9b8b239733a4d2e166b9e3dd2314b762f1c2e47ca7a01d01b7b4b53dd034c97a5db7b2a8a6b793be5948ff368\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-win-x86.exe\",\n            \"hash\": \"80423dc46068031bbabea853fdb4ab180b55da040342ae83e5eb77349ed436f7fd40196f78c048392ac252fc7fc400a9ae3604f7a71169a7f4eebffa1b00f3ce\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/aspnetcore-runtime-3.1.16-win-x86.zip\",\n            \"hash\": \"ef0b4d65c884e6a2fe2b447e9ecfb2d9469425b6d69572ef919f82c89f4e87a529a5900a041029991c95d318945bfa653a9bf8ec42be3334ddb830845c9be7f8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.16/dotnet-hosting-3.1.16-win.exe\",\n            \"hash\": \"e3d87a6a2e2ea6b2debbf64efa76a0b48e9ce8d5915dd3308487d95c8c0129ec01a97d7afb9bcb467704f32c57ebd29ae3587a731da6a42308652a90981b6a7b\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.16\",\n        \"version-display\": \"3.1.16\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7cea63ad-1e76-41f0-a54a-eacb48fec749/87c339835cd7647c0fee3f14820cd909/windowsdesktop-runtime-3.1.16-win-x64.exe\",\n            \"hash\": \"fba9388e88ddb7399cd5f870146377084c0a790bdea23604176e1a45156d76797c3af036cc3420e27ecf34d23d59896eaa90d511d5f36441cbc957b58ba6be7c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f703f604-a973-4ab9-abe4-b4b2ec786e66/af8cea0988953ef074157ea99d30879a/windowsdesktop-runtime-3.1.16-win-x86.exe\",\n            \"hash\": \"b61313bf637845466efe4ceb5d53a92ac5a4e9e1f7cb0265c500a39024a87bdfadbc06a6934ee9e3aa0da87bf862a0ed0967ba38962685598ff12c60d8e93832\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-05-11\",\n      \"release-version\": \"3.1.15\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-31204\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31204\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.15/3.1.15.md\",\n      \"runtime\": {\n        \"version\": \"3.1.15\",\n        \"version-display\": \"3.1.15\",\n        \"vs-version\": \"16.4.22, 16.7.15, 16.9.5\",\n        \"vs-mac-version\": \"8.9.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-linux-arm.tar.gz\",\n            \"hash\": \"35f73dc826f08698ba7fb0f10673ac9678e97af31925fce803f5e3e602c16e00c089f909df795a61517b6c5d69ca392496d994773863fb00b1c526b19451e1e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-linux-arm64.tar.gz\",\n            \"hash\": \"9b36ac1479808e486c56a0cf29ac334109cb77306dfe98c72eebbebf53cc34d1e22f404850a6da41bff0a8121781ca79bba23a9c5d82d024a2f4e6c3bff29f59\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d0d1693dee99a98227feb8d1fa56324a80efa4e54cb1aaed5c2cdce1454a328ce4625605fe5265972bb22e64ef55b66493305b1713db76fa1fd6690f6a862362\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"c6686acbd398ca9ff5c47cde4a59f38794b207f2f3bd00d8f2b7e1dea04160f495cdb39f79e663d413d837a131c45bc9ee03653b59734cdacaa2c2fc0a57a002\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-linux-x64.tar.gz\",\n            \"hash\": \"0de999a51cdd53a2efa4ae3552834b540d59f598438675cb9b2ab1f16b41a64dbf0a25a2c8e65324bbdc594935046bc6ee32d8f8c25a95f607da2985f903ed55\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-osx-x64.pkg\",\n            \"hash\": \"c19633002a6a651c67817690ae9e47f6d8e1953289680b462cd9000b1359fc71082386b8a7eadabcc7d5876e8709c7c6ec449f62e955af8c0012adb163391598\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-osx-x64.tar.gz\",\n            \"hash\": \"d77b57f9939707744af5bd854f9fa391bd8084beafdb7d609c85b5a9eb058521807627f0147e78329e86e00eec88440f6c806e5d0e319b0f8bfcbfb07821846c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-win-arm.zip\",\n            \"hash\": \"5f919aff46975b38da77efc4a21720c222e93652154fcd1cef5e43ccc1c8cd4fac5cafccc02406794d99acaf95fb1cabd198049a86a4d6a3140bbbeb9da3d1f0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-win-x64.exe\",\n            \"hash\": \"cb117b31c272283438ab217d1293d98437a26365abe2b124897e0e2f5a3ac82992656cbe957be866854e8ed987369afb80f60a20888bce8780d3f2930b267756\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-win-x64.zip\",\n            \"hash\": \"1a2238181c69d2808742f721925f986b230b8848d66506571116616b7fabd17ec0c0e751428993c04174255cf924228fe835a92bc8700bb363fcabbd8d6b610b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-win-x86.exe\",\n            \"hash\": \"a436af9f3b0513f048534aec29c887c139227583a63b0924a29baed9ae626fd7a164607e721394feaeacdba6895d16ee73d5ca663e8234231ee8e42181999821\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.15/dotnet-runtime-3.1.15-win-x86.zip\",\n            \"hash\": \"30d53c55a1c2328a56ed0a12383a89cab0a1293a5c859080474a685ce79c85f6f6ec217266e8374026e6a9f4935a2218af25352db34e6c6f77ceaeebd63a8fa1\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.409\",\n        \"version-display\": \"3.1.409\",\n        \"runtime-version\": \"3.1.15\",\n        \"vs-version\": \"16.7.15\",\n        \"vs-mac-version\": \"8.9.8\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-arm.tar.gz\",\n            \"hash\": \"4908a84951a93acac80c6e7d2dff88b40b90fa079bfc0a02678a70c412a45f1146a3d344c218791edef4bb972d549accadcbfcdc721be0478b07db3a3336cf6d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-arm64.tar.gz\",\n            \"hash\": \"edc011e5ee64fc76e8004aa73d439e7cea922ab00be6c70250c5f73cf6838b1935f5d3d3c9aa65f83bfd3923751bc1a6d92be3fba64a0a09a4acb4fd8d6db4c7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-musl-x64.tar.gz\",\n            \"hash\": \"ec0e94fbc1b02eee58be344bb201a72cba4cb5c8ac0075adbf2937587ea66e2786e76fcc57cd6e4336ac448be54afbadce063cdc91707d009dc8242e2bfe31a2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-x64.tar.gz\",\n            \"hash\": \"63d24f1039f68abc46bf40a521f19720ca74a4d89a2b99d91dfd6216b43a81d74f672f74708efa6f6320058aa49bf13995638e3b8057efcfc84a2877527d56b6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-x64.zip\",\n            \"hash\": \"2b78c89f516e771bfc29c2f9f65bae3d7875d35d89aa97d8928e896be754496b1a7b78c98b5599c7e79f4eab7071691f97adb8dfdee108eef3df7712a0bbbb31\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-osx-x64.pkg\",\n            \"hash\": \"cb40c93570fedf3ed4adb46ef857fd740d284c1a3632b52babcfe2aa48867220e8b2f2e0ff3f373fa9f9bff21cd88f4195d78c9ccb55dce0b789c439ae757d35\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-osx-x64.tar.gz\",\n            \"hash\": \"b8cb6287a655e069311dce89e8eeee3b1ea953112856ce5a77731550c34d3f64625fb318bdb1257a78e0deb75a06f6d09835490aa8dc64249fad9b3a75ed438b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-arm.zip\",\n            \"hash\": \"cc06aa79fa64d140c1cd63e130af1edc42afe64d6e7633eb6fe91a4e9a7efbe09a9fc2367fa6eabcd134e8b2e125e25fa6bdf6cef8811ad38f77d709a1751ae3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-x64.exe\",\n            \"hash\": \"06be05d47367bb9089146af8f66a57f8fbb8959253d403a031fe99ebf7decc33939096e0df3227b1b6ddfd114126cd2da291e52f9bda66f2717df96c207bf02e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-x64.zip\",\n            \"hash\": \"044ab6ccf316ac18882ecef98f9ec0a9afd8cf8509991a4f82a5778eefae5ad503bf5da915fd567d8ab17ab0a9d93318c59a8c20a8a45ab255eb25247bbe51a7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-x86.exe\",\n            \"hash\": \"2eaccd629785f278c38f109b4fc028913c410440d3f366aa793fbb287f44baa910744d72d7b204020cd15b68114af09f7af768858335b36205422114029c370d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-x86.zip\",\n            \"hash\": \"d3c9115a48b0574cbfd75529be787b46ade1f114165ffcbc855597a45d41ca21ccf8d7c677390eb4ee20bb4f250a1eb9caebae57ada90749ecfaab8c83b89362\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.409\",\n          \"version-display\": \"3.1.409\",\n          \"runtime-version\": \"3.1.15\",\n          \"vs-version\": \"16.7.15\",\n          \"vs-mac-version\": \"8.9.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-arm.tar.gz\",\n              \"hash\": \"4908a84951a93acac80c6e7d2dff88b40b90fa079bfc0a02678a70c412a45f1146a3d344c218791edef4bb972d549accadcbfcdc721be0478b07db3a3336cf6d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-arm64.tar.gz\",\n              \"hash\": \"edc011e5ee64fc76e8004aa73d439e7cea922ab00be6c70250c5f73cf6838b1935f5d3d3c9aa65f83bfd3923751bc1a6d92be3fba64a0a09a4acb4fd8d6db4c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-musl-x64.tar.gz\",\n              \"hash\": \"ec0e94fbc1b02eee58be344bb201a72cba4cb5c8ac0075adbf2937587ea66e2786e76fcc57cd6e4336ac448be54afbadce063cdc91707d009dc8242e2bfe31a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-x64.tar.gz\",\n              \"hash\": \"63d24f1039f68abc46bf40a521f19720ca74a4d89a2b99d91dfd6216b43a81d74f672f74708efa6f6320058aa49bf13995638e3b8057efcfc84a2877527d56b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-linux-x64.zip\",\n              \"hash\": \"2b78c89f516e771bfc29c2f9f65bae3d7875d35d89aa97d8928e896be754496b1a7b78c98b5599c7e79f4eab7071691f97adb8dfdee108eef3df7712a0bbbb31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-osx-x64.pkg\",\n              \"hash\": \"cb40c93570fedf3ed4adb46ef857fd740d284c1a3632b52babcfe2aa48867220e8b2f2e0ff3f373fa9f9bff21cd88f4195d78c9ccb55dce0b789c439ae757d35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-osx-x64.tar.gz\",\n              \"hash\": \"b8cb6287a655e069311dce89e8eeee3b1ea953112856ce5a77731550c34d3f64625fb318bdb1257a78e0deb75a06f6d09835490aa8dc64249fad9b3a75ed438b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-arm.zip\",\n              \"hash\": \"cc06aa79fa64d140c1cd63e130af1edc42afe64d6e7633eb6fe91a4e9a7efbe09a9fc2367fa6eabcd134e8b2e125e25fa6bdf6cef8811ad38f77d709a1751ae3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-x64.exe\",\n              \"hash\": \"06be05d47367bb9089146af8f66a57f8fbb8959253d403a031fe99ebf7decc33939096e0df3227b1b6ddfd114126cd2da291e52f9bda66f2717df96c207bf02e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-x64.zip\",\n              \"hash\": \"044ab6ccf316ac18882ecef98f9ec0a9afd8cf8509991a4f82a5778eefae5ad503bf5da915fd567d8ab17ab0a9d93318c59a8c20a8a45ab255eb25247bbe51a7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-x86.exe\",\n              \"hash\": \"2eaccd629785f278c38f109b4fc028913c410440d3f366aa793fbb287f44baa910744d72d7b204020cd15b68114af09f7af768858335b36205422114029c370d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.409/dotnet-sdk-3.1.409-win-x86.zip\",\n              \"hash\": \"d3c9115a48b0574cbfd75529be787b46ade1f114165ffcbc855597a45d41ca21ccf8d7c677390eb4ee20bb4f250a1eb9caebae57ada90749ecfaab8c83b89362\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.115\",\n          \"version-display\": \"3.1.115\",\n          \"runtime-version\": \"3.1.15\",\n          \"vs-version\": \"16.4.22\",\n          \"vs-mac-version\": \"8.9.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-linux-arm.tar.gz\",\n              \"hash\": \"00da62d108784d6fb09a9be418479ca695b99f4ef5f65c56a700f61bbe7eac8cb83cadd596fb4577c77a434b435493fa32b889b1c23375c82c391dce1385d004\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-linux-arm64.tar.gz\",\n              \"hash\": \"325a8c43f74ab30b2a6ae52476f37853b361bc862b77eeb74007a3bdf44245615a0bbfaab0971fe6542b24d0a806aa1526869a62e5640635480c8110a024ae57\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-linux-musl-x64.tar.gz\",\n              \"hash\": \"7b80348af806223e192229c9e28f70d1e155ae98b10d3fb7a99280fc312cb0cf6c39910bd153281c6fc1474503dea68a829431559cbc96f95c79c0e254356591\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-linux-x64.tar.gz\",\n              \"hash\": \"bb2c5c775dd42df20bb54d91e7bc87b77a90050042982bc1ab4254013bdf30f391a69300c4df3a5fb6b1015620205129d808eaf2ebbef78289356b9ef74b8a07\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-linux-x64.zip\",\n              \"hash\": \"f6ff27ed783e22e54943b5c685637ba6e7924c1db27a9665c054401c8c2bbb042c2b68274fb69bf3985624b5785b2a8f775b14a868770f8866a7e63d2f4cb880\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-osx-x64.pkg\",\n              \"hash\": \"60962aa0ef18146c94d9b59a7194fa6d3b11244007ce845d762aaffaaeab05579547a2195c5e2b100c8d3535687ec5cc3b00ef8cdeef7208112c9e83c658468b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-osx-x64.tar.gz\",\n              \"hash\": \"375fd422928f2bde8e496bbd03c20099c7aea37d242df2f39b1a128fb3442fbb76de19b8e0e3fc2df971d4bdc6feb3b1a85f6acc7ad8021f7c5a62b776b93f80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-win-arm.zip\",\n              \"hash\": \"a4a87f17c1bef03d583e3c6ab08d27eefbef17f37a46da603852096ee95d4057829713576ca3e26afba4e733af30b7265444a866d0c2a4b3113c2f76df6679c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-win-x64.exe\",\n              \"hash\": \"b1eb596a1c352984184b0a44d403b6e41aba8a66e61c645e1c851196a25c5019b64490831ede8f6cd9b09e84425950d66da739b44cf054357a0e8eb30ae7d557\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-win-x64.zip\",\n              \"hash\": \"60ef948e43515a29c297db25d9af6916e13580d7e2a13c6d0875f457d1a640933101e3b4e3fa9b258ca21c73ef541da8f021f4afe70c5007a34e90c1f0e24967\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-win-x86.exe\",\n              \"hash\": \"7b1752cc83c43d0beb70107391837c9d4faf6d7c601f8abd21997c18f8cf439329224a2bdcc2181159265d1184077c3667a46bf49b2400c58306c2f5f61b45f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.115/dotnet-sdk-3.1.115-win-x86.zip\",\n              \"hash\": \"800cd5e73c4474b2aa01e65a60d634d7b3aeaf46723f3e40b8d652c06a6fd7d2bc1c3a6e8ed014c7aea06ca4ab847865ba38138b6e88a220825aff4320fc7a61\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.15\",\n        \"version-display\": \"3.1.15\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21106.15\"\n        ],\n        \"vs-version\": \"16.4.22, 16.7.15, 16.9.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-linux-arm.tar.gz\",\n            \"hash\": \"3c4fcbf9eab630f25605cfcbe8c55af452d4b10cc054257e26dfa4bdb09fd025c35cc9ea12dbcbc7c420946e618b9e8ba50ca81525b5055c79323bb7e94b5544\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-linux-arm64.tar.gz\",\n            \"hash\": \"574db7a64e6afe6e55dbc4f95b5d87bfde9cec973e9501f8b8ce6a11383edc97b600a3e926cda53a3711d2d7bc195dbe5d77ecb954c8d09a6b332b45c07e6512\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c8607c614ad241c8d60060680acf588d2b5cd0261d13904374202521e822cf2ea81f1f0b500295f596755e04c4101aee5f71f4c71405c9505fc5f26d8daab346\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"c7c39bf9adbec0389cda30c8f0dd19f57eecfb873288da00fce9d07e6247f16772458b07b46afc9ca79a0f8dc2349d87a79cb77637f13f51824818eb26bb8270\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-linux-x64.tar.gz\",\n            \"hash\": \"f1bc75c3af3308dd4d1448570a85a2f5ab9d21df474965b7216452e9dccd6f10028c18e3e291864f8f19b18e1f203c80a9fdcacb303b5a5763d7579cdb014cfe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-osx-x64.tar.gz\",\n            \"hash\": \"973920703eb1ebe70279dbd78f5098f755753582504fe9fa55cf9d16d93f597ce464b741b13b5d6a3228f0a1a9a7e8303ec4f4d8f0c343dbf7ecca7abb45144d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-win-arm.zip\",\n            \"hash\": \"bed38519607c6b3fe20ec616ea65a0ddd8e39883103d53ed03ddf4bf1a0af314000a3af627e0a9e40526b37907b4de6a2e125484175723dd5df8a629e0808b5d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-win-x64.exe\",\n            \"hash\": \"faa5ea64436f46d3933d7bed511ca8e3a437922955b87819183535da4bd1136882d2adc110a43a010544f112edae15a3a99d1f11931413a15e7fd7207fb08742\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-win-x64.zip\",\n            \"hash\": \"f6ff10fbf6a51308c6066bb68beab96c4caec8b54472e3f4f5e55638104ebd9871f88dd42806945307a66fe183b5b04f34eafa093d5a849f9e4db44843ebc639\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-win-x86.exe\",\n            \"hash\": \"1fc6a263ee8f75570d1526cb7550558f60aa94cab8bf3d05e28caada6084c4962bb84f610c42b0771ae2ffa5bb8d8c1494eef2ea26300e2c25b9ed8ddc35b483\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/aspnetcore-runtime-3.1.15-win-x86.zip\",\n            \"hash\": \"b05405919acacef41c7b86061ec962507d5b9267e9c61146c8d06c997f8d6a496b36efdeedb6640ad683cfe186b6caa088e8a4fc830612960e802ad50f10deb3\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.15/dotnet-hosting-3.1.15-win.exe\",\n            \"hash\": \"120cb2d10679058d0ba01c1bc1cf07bf5a3693150c6ae77e3f41d44e94cf5fa3fc95ed5f1d5e0e81d9e5615fd1d080615e5a3922798a1ecdf4106ffba537bdb5\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.15\",\n        \"version-display\": \"3.1.15\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d30352fe-d4f3-4203-91b9-01a3b66a802e/bb416e6573fa278fec92113abefc58b3/windowsdesktop-runtime-3.1.15-win-x64.exe\",\n            \"hash\": \"86a3758e389d872882407fa7000d319499b9dc0ae9608ac08ef73cab89d9b7fa60f8a385e57fc2ff9a90003897caec337f7e6c9144ea5cba712aea40fd0f42f6\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/8b11972e-ded9-4d3c-9714-7c7ef047cca6/76dbe20bc03e69f5c0d005452ba88a9d/windowsdesktop-runtime-3.1.15-win-x86.exe\",\n            \"hash\": \"9c82435f964cf70951b20b3efe473264de57fc6b9de1e60ef289efa389a88d4906db1d19be101e55f6b66fc3657b125a2ec5a605f9e37c7be7ed2b50c1b4767e\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-04-13\",\n      \"release-version\": \"3.1.14\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.14/3.1.14.md\",\n      \"runtime\": {\n        \"version\": \"3.1.14\",\n        \"version-display\": \"3.1.14\",\n        \"vs-version\": \"16.4.21, 16.7.14, 16.9.4\",\n        \"vs-mac-version\": \"8.9.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-linux-arm.tar.gz\",\n            \"hash\": \"800d7b84f9b76c842dda788e533bea31dd9274f16a28de3c12cf50487255c4ead73c815e3deb176a686433abec32ea82b010698bc92f8fed5bcd6009042da2ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-linux-arm64.tar.gz\",\n            \"hash\": \"46a263e018138913b753e96592929933e7a938438e15026b0618e0640f731047f94c367a6f50f4309f19e43a3a403e1557c71bc6f0d4cfb9dda75b45531f7cc2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"25bd3f86a5326409649518d68028eac163e23a5d6c89be7e22d3acf513caf6ed129569e1243466005961e5d6c046a3415fbbc3f6f878852c7f3d94b440942e70\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"77856f6183ef7ee561fe8510e89148566972ae21e3915242ae4ac7ef987b1aa78cda09bb06fdae96cd03758975dc5eb0e8652dea79b96db327ac5de2a4d41961\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-linux-x64.tar.gz\",\n            \"hash\": \"558144688ce1cb187d86e13d08713c86411bb6892d79005f402f560a19fa202946d60c11c8fc4d520d8bc21048df564e8b526d745d323fb8ab7c02f362654b8a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-osx-x64.pkg\",\n            \"hash\": \"dfc2fea5036c02d85344257d223b7ee8f38b07b55cd7ef48c409f01d569524a2ea745775e9f106dfbab586e9e1c7677dded68ca92373cd0826dea1ae689186fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-osx-x64.tar.gz\",\n            \"hash\": \"7cbeb9e844276aea2d0677d3d93cd5ef2c5d1fddab33891fcfe9dc97e1e3f098cfe3d987f03cbd26c1eaa037e236cb63c09cde6db4e510a1b412ae090c46cb7f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-win-arm.zip\",\n            \"hash\": \"09a2eaa6b1da5e1360b7a8b2b3af278489f4cd31ad5d379e32ce2db2250c520a928ce4f321731981ae37fea724d6fbd361b1d58b385fe831531c50950894f169\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-win-x64.exe\",\n            \"hash\": \"8cc07f37eab2465dd8d39f3eadd6a225d169f157981f801ac5e49c5639436799c429e1b64e06643b094ce164005d9137680ecb23f09db53811f556edaa0cd7e0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-win-x64.zip\",\n            \"hash\": \"da9c2f22a0fe808027947ccc4f00238caf1cbbe9b636eb03b583b9ff986ae72338ea7326b75ae8c70d103aed4947f5dd9deccfd62fef0ce9836317867bd8def7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-win-x86.exe\",\n            \"hash\": \"2fb7b20e9139aac7e146568ef8be5cc11fee0fa4c60fadbc09e2a6482cfca773cfeecfd203d1b0c5873b3bfb134d6b1cdf9f0e53f57b8d9f063a1ff92692dd2b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.14/dotnet-runtime-3.1.14-win-x86.zip\",\n            \"hash\": \"df045eb5eb375cb08dca5b9424bb4e8ae649577e514a8591d832b4ae82b20388c24a7cf17e2ffc8e7747e186e0149c84ea54fb404ee92f17afbf70293fce46fc\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.408\",\n        \"version-display\": \"3.1.408\",\n        \"runtime-version\": \"3.1.14\",\n        \"vs-version\": \"16.7.14\",\n        \"vs-mac-version\": \"8.9.6\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-linux-arm.tar.gz\",\n            \"hash\": \"05335636d61067c647e15ced618ca3ba2460b5aaa76e1713281fda2995740ee49fe9d63ae71fa8ac51786653b2ea7da83f540cec742628f78201206e142de609\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-linux-arm64.tar.gz\",\n            \"hash\": \"5d69cb6d5f088452a6cc3a3635d5f6102e0217f3d5fa680287be9e67c211b0720fe493f05280ab4d2c1a905afe78e8ba9cb28151453172e7fcf10b0d9553e2d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-linux-musl-x64.tar.gz\",\n            \"hash\": \"959ee892de78a61e2b8a49d8af5f6c8fc8840be5f048949842a3e21e4be8cece9ed84d880f8d6d10325802098d5b010a362f6c52f30806155d3cd498244e1e8e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-linux-x64.tar.gz\",\n            \"hash\": \"5e2c378addf337c1b7e44583718672e0791235150630f0b613353c8597342dcaae3b7c412b17d5e6d93d87b5708a6ca2dc16ff6e6c5a2101b224d24e6a5c4e7a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-osx-x64.pkg\",\n            \"hash\": \"e20a468e0ecf4d79009fa263641673ef1a3f48c1d63aee81e7f8cdc500886225919d9a919ffb1573642d66a146e19d7e050e3725df04212953d4b0d1668a3d91\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-osx-x64.tar.gz\",\n            \"hash\": \"57b29bdae41b93d00e237738e52245d44990c9ae4a284dc396a5c051b9dabb301dc528a90f9e70168512a0936b6fe48d34fd6d1d6c055023596de7ebba6f95c7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-arm.zip\",\n            \"hash\": \"218ab768dab0d755663b9a45fb1c67515db62326c2e73675349cc1534ccf2b0527b565083e9f5ac3d7fc941ab7bf5d51c02dfc35ecd8096197f0398ae6284a7c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-x64.exe\",\n            \"hash\": \"c8d3000f07735ee7cdf3bab402323bf96413d7afd7dadc5f1e92f02c184b67ca00f188e083f1d6bd8ae21b88a24f87d443088ecee28c33cd186f8ca9606fc816\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-x64.zip\",\n            \"hash\": \"0593f811a912973bb1dfe72ea75f13cf531257823533fe1a4e562baff7a94fc72d05ba655bd2d9ec6c88c0bf9bb0e14931d26ddcbb7786aa4b448ef1dbccedae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-x86.exe\",\n            \"hash\": \"526edc3e2025459af340a6992f48625e41c4a6d4bdf75d7929c9de635bccfdd571d9deba0ddaec2235365131d0d1d1507178d53c82385f15cc360dfa51a94809\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-x86.zip\",\n            \"hash\": \"c77c28886cd660f305c13a8eebb45b16e4733d126055c565a0b5a8375ddad1a48748beb2cb758fc6981d4257ce913935511423d332f009116906c9ac5232ff16\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.408\",\n          \"version-display\": \"3.1.408\",\n          \"runtime-version\": \"3.1.14\",\n          \"vs-version\": \"16.7.14\",\n          \"vs-mac-version\": \"8.9.6\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-linux-arm.tar.gz\",\n              \"hash\": \"05335636d61067c647e15ced618ca3ba2460b5aaa76e1713281fda2995740ee49fe9d63ae71fa8ac51786653b2ea7da83f540cec742628f78201206e142de609\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-linux-arm64.tar.gz\",\n              \"hash\": \"5d69cb6d5f088452a6cc3a3635d5f6102e0217f3d5fa680287be9e67c211b0720fe493f05280ab4d2c1a905afe78e8ba9cb28151453172e7fcf10b0d9553e2d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-linux-musl-x64.tar.gz\",\n              \"hash\": \"959ee892de78a61e2b8a49d8af5f6c8fc8840be5f048949842a3e21e4be8cece9ed84d880f8d6d10325802098d5b010a362f6c52f30806155d3cd498244e1e8e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-linux-x64.tar.gz\",\n              \"hash\": \"5e2c378addf337c1b7e44583718672e0791235150630f0b613353c8597342dcaae3b7c412b17d5e6d93d87b5708a6ca2dc16ff6e6c5a2101b224d24e6a5c4e7a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-osx-x64.pkg\",\n              \"hash\": \"e20a468e0ecf4d79009fa263641673ef1a3f48c1d63aee81e7f8cdc500886225919d9a919ffb1573642d66a146e19d7e050e3725df04212953d4b0d1668a3d91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-osx-x64.tar.gz\",\n              \"hash\": \"57b29bdae41b93d00e237738e52245d44990c9ae4a284dc396a5c051b9dabb301dc528a90f9e70168512a0936b6fe48d34fd6d1d6c055023596de7ebba6f95c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-arm.zip\",\n              \"hash\": \"218ab768dab0d755663b9a45fb1c67515db62326c2e73675349cc1534ccf2b0527b565083e9f5ac3d7fc941ab7bf5d51c02dfc35ecd8096197f0398ae6284a7c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-x64.exe\",\n              \"hash\": \"c8d3000f07735ee7cdf3bab402323bf96413d7afd7dadc5f1e92f02c184b67ca00f188e083f1d6bd8ae21b88a24f87d443088ecee28c33cd186f8ca9606fc816\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-x64.zip\",\n              \"hash\": \"0593f811a912973bb1dfe72ea75f13cf531257823533fe1a4e562baff7a94fc72d05ba655bd2d9ec6c88c0bf9bb0e14931d26ddcbb7786aa4b448ef1dbccedae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-x86.exe\",\n              \"hash\": \"526edc3e2025459af340a6992f48625e41c4a6d4bdf75d7929c9de635bccfdd571d9deba0ddaec2235365131d0d1d1507178d53c82385f15cc360dfa51a94809\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.408/dotnet-sdk-3.1.408-win-x86.zip\",\n              \"hash\": \"c77c28886cd660f305c13a8eebb45b16e4733d126055c565a0b5a8375ddad1a48748beb2cb758fc6981d4257ce913935511423d332f009116906c9ac5232ff16\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.114\",\n          \"version-display\": \"3.1.114\",\n          \"runtime-version\": \"3.1.14\",\n          \"vs-version\": \"16.4.21\",\n          \"vs-mac-version\": \"8.9.6\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-linux-arm.tar.gz\",\n              \"hash\": \"3357a7a3192583b8478364d684e3c93e8dea894628b6fa9cffaba6fc9daabf9c8aada4f5cc423a56041d01e95fc9e703109f3ba6b320dc52ea3055f555e932fa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-linux-arm64.tar.gz\",\n              \"hash\": \"822ce83c1fe1d5dd4cfbe7cde8cd68dc29db54ef673582e3c9e6423d252592317bb1a579d0f3598b4b967cd30ff015023400382f447a48ec1292649ba47cfadc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-linux-musl-x64.tar.gz\",\n              \"hash\": \"63b26f7b6a29a81e4d9a24a6a3c9f841f087213995191226191174bd00d7a5fe88c7384d3399f4d0017306106613456bcdab706b5458ddbbacdce993c23af70c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-linux-x64.tar.gz\",\n              \"hash\": \"f730edf9ffe08302c276d62674d02db96bf9e59c3e55e2e729e15c76a7db9775be65caa9e6404a55c2392ff186638418c0a8f9b7204b5847867e6244c315f452\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-osx-x64.pkg\",\n              \"hash\": \"7a4b5881988a2c6186051601b38571b55b28bdf07cfd9870795731de5d735d6ac505eae343c0f5c40f54838dc69a350631466083f69b3a3a31cce493f787ac77\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-osx-x64.tar.gz\",\n              \"hash\": \"0ff516d473e13188fa7c3706888236c5010b4a83ec7c4cfd3634d3aa0f4663e09334d1c3d25d3b5e92beceedf32581c9240ed6aa9c80ce0ce0a5f5336dc2407d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-win-arm.zip\",\n              \"hash\": \"9ee0f7a56868ce453bfe1608af5be93d00fe8d953128ca94fe73b5ba34bf2b9f63b931ccc70aba3dcda8c83131873fe6bf7583c820c619987152442b784f3251\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-win-x64.exe\",\n              \"hash\": \"11983b246df07ce64c26e3309c8f3f065ba3c97cc8b1d79bed01994f9b68eeeaf470c0f7fdb0301d7ab94ab9717a6f9d432219bd725d3ea43f8e82f251231dd0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-win-x64.zip\",\n              \"hash\": \"690d83691df6968c2ef7ca20dea5a599ece42713672ee6bba7e283faa86aafb9602aaa31584b416644c859316749e483e326a62f84b2f53060042479de93b2e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-win-x86.exe\",\n              \"hash\": \"7a704454b4ea0ddf0e1dac078a7b2fa93df48dba161743932befd625b71347e5add85f811f50ddd8b2b2acb6b9b83c97f141a371bcc3e1d8fe5ea3bfaf6ecc8e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.114/dotnet-sdk-3.1.114-win-x86.zip\",\n              \"hash\": \"c5ae8a7186afbcd9e347092baee0bfdd527130fed2ad0752834eb168320a35a8bc451422983d540038c9395b24a629b3fbf8cac6086d7883740c23fe47821571\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.14\",\n        \"version-display\": \"3.1.14\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21075.14\"\n        ],\n        \"vs-version\": \"16.2.21, 16.7.14\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-linux-arm.tar.gz\",\n            \"hash\": \"86507136494d16e83833c2fb0bed6afdf4b901c37c5057c94b3c35cf803cbf5a00d00ff54bbd2dea9b6bb81ec0860081cd911f61dd10f918de89bf697a1e7baa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-linux-arm64.tar.gz\",\n            \"hash\": \"23ac00b88da24072d39c1d3ebfcea60fba9f0891961c9f9ac1f49f686f1089b9b7e0227440eee071bba98d887492b9dd6dc2c5e9ebdccd536d705425dc26efae\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f929112813acfafe7fed08dd801f770176ae3101ab45515e670fb9f779a9eec7f5dbfef98d8511c6a1fa23fbe5636fc053566ba9d213de0735197366c22916ed\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"bcdd66e48af4703764588e0b76ec1997f1a391d6e840a675af0155669f16c874d9b66b4906c25b717c6955ae2032d064b32e283205519f61d1b4b673db2b3421\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-linux-x64.tar.gz\",\n            \"hash\": \"c4b7ded8ee6dcc7983dfdb44af4eb9af3e4f225bf5bd57344213d049828438854d10e6605b97fef8a2ee49aadaf8f62267908022122daee1a3182ae2c4a2bffc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-osx-x64.tar.gz\",\n            \"hash\": \"90b8e1266bbc4020c71ff293364d76d5d04f0508b2ee88bcaad2998d5fe4b119928691d742ecdfd00d0237864a380b2c9f36764b0b8cca2c8e11fe51bf5f71fa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-win-arm.zip\",\n            \"hash\": \"f2b91b2ee4c4eb7b8599b84a72fe3d6aa3dc3cf7b5f58dc809f2a8fa003f0ba341bbea8f79a16bdc5ed8f356a019ce92c68f6c26f2744bb619ba45503417bfc5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-win-x64.exe\",\n            \"hash\": \"dd070c9ee2f1acae1c9946ac86765c6677059c8c9baa52962e2f658db9d20ae860ea5376ec79439890056e0d329d488bf41ef06bbb4f7e4fddb2eea888def26c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-win-x64.zip\",\n            \"hash\": \"1ed1130a7a933552b18d3c45c95e3525af623312be2ce4cfc4ee7cc935f92e56acd7b86453a01f82574c5f8874047b1c54df62cd3826782cf8acdca8cdabaa33\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-win-x86.exe\",\n            \"hash\": \"e9f44ee8c7debcb5c011d78920f9c42d40225dc3e394371762e63d74181a2f56b5218433aba74c38e10ea1f5acc9f961ad6716e97020a72d96f5ebae59bb06f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/aspnetcore-runtime-3.1.14-win-x86.zip\",\n            \"hash\": \"b630d7a7ced963f10fe959068078f65eb20f0b09cc025ee6291f0ed9d6a218edc3a84ccc5bb53149b22f8909387355e5a21af74d09bff671f6d69deb44e93584\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.14/dotnet-hosting-3.1.14-win.exe\",\n            \"hash\": \"488e6157f17fb9e4fca8210fa23eab305e765626dbf29882d2da8f15fc7599f8c26c8ce365f41d05053e0fecc53c3a5fac758024eb4b2ded42208c4bac4fef15\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.14\",\n        \"version-display\": \"3.1.14\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/88437980-f813-4a01-865c-f992ad4909bb/9a936984781f6ce3526ffc946267e0ea/windowsdesktop-runtime-3.1.14-win-x64.exe\",\n            \"hash\": \"1bfdf8bebaee7e682fbdcdad1288a8fca6ac43de3c734e0c487e65d035cbfeae58d0174e9dc931a06712d3b7dac9596b9559915fd09477feb7416c2a04a316aa\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f449f435-25d3-4d5c-ad14-0c84f5131dea/a597530464689595a430407e440787c4/windowsdesktop-runtime-3.1.14-win-x86.exe\",\n            \"hash\": \"6cab47daa5ab28e1d6cf5da87c52173ccd97aceae45d7201ab8792ba0d5006d734b00ecf36b9fc623a24de1db370e9f2e4b4a62e1d37fa410ab784b8cfa2b1b9\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-03-09\",\n      \"release-version\": \"3.1.13\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-26701\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-26701\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.13/3.1.13.md\",\n      \"runtime\": {\n        \"version\": \"3.1.13\",\n        \"version-display\": \"3.1.13\",\n        \"vs-version\": \"16.4.20, 16.7.13, 16.8.7\",\n        \"vs-mac-version\": \"8.9.1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-linux-arm.tar.gz\",\n            \"hash\": \"e93c096156d5bc12ce83eccdc014e3f796da269296fd0df45d37fee6713c24be553238138ba41d4017a278289255df3517ee7a93a6dfc32de49a4759cfad31a4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-linux-arm64.tar.gz\",\n            \"hash\": \"1f24195cb9ae27b6c5903f7ee698d6833b0452f2864b299939d58febb49d1251a631aac1835c355b36d4d67115f0607c6d75c2385a2cbe5c6cf89ec130de2799\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9e6c6339c467bd96801df1678f1d4e0f896795a429d7848675176df7b781c44b0c984ba6bc6b1f08977290f8317d5ee96670c316b3d6b77e2d316045e5c2317a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"40f23e81ca8fa8bcb657e480a475650b2e3c59daad702e2cce0ee8daba18e9703f03bb02a28bd9ae548410b0f503ebdaa6de1079b417798f965217fc0ee94cd0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-linux-x64.tar.gz\",\n            \"hash\": \"2559026dd9f6939ae882a925cd44901524673885b94b93d029db414c6be5981302a4dbd6d0e1234957dfab610b79b9a82867defa59dff09b5a99412318a7bd27\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-osx-x64.pkg\",\n            \"hash\": \"f81d636ce7382fc449af85c1564cd2131d010bd0830d902cfca43dff01e0d9ff948fc8284f5e0308c8910d707093c0ee7966258b5b5794fc8cbad7465ce8009d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-osx-x64.tar.gz\",\n            \"hash\": \"b5046adc8be2ee0716ef3edf95277bcbb705b95d0c48f9c0bdd2be4ae1563ae4d398f551404826e1e105b173ee0c9ad326c4c9f4bbafdd7928d9a966ccee8646\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-win-arm.zip\",\n            \"hash\": \"16a855156cc0067cd1c0449c4d1c0cbe6911f5d2a5628bc1fd8bf2c0dcb458ef3045e0a33b72938f0a353995985434d9cc4bf732faaf72e06d1cac2f3820f408\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-win-x64.exe\",\n            \"hash\": \"72e3031f6902ccca44e8c950b96ffcc0e5c3815206a6ba5828087b7d9e3bb1d87c3882a0df5f051ba5fe726e5c885479c3eb01aef6d70ae292c3dd99524c24fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-win-x64.zip\",\n            \"hash\": \"d7fb6db67414ce1582139d1f3d30e6a8ab7bbc0206920466f65ed4ca10e2258ad9f3582d6cfe5c194fde75a12c3a42f592cc6122a5eb45a4ef1765fd9fffb74d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-win-x86.exe\",\n            \"hash\": \"a5c7e158f48afb4d93fa22cd3146e3194a70913eab7aec5c7940584be787d1356b320c2755af42e49833703e262c0eba7569002c8c3f6d740698fa243b86dcbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.13/dotnet-runtime-3.1.13-win-x86.zip\",\n            \"hash\": \"31f2d540814df1f87bd054d977c24f29dedb9c316117e3a64cbcc2cd73320ddfb798c525a43990c76c0b711135792e8a2af1924b01617b5ca55a71f384225625\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.407\",\n        \"version-display\": \"3.1.407\",\n        \"runtime-version\": \"3.1.13\",\n        \"vs-version\": \"16.7.13\",\n        \"vs-mac-version\": \"8.9.1\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-linux-arm.tar.gz\",\n            \"hash\": \"a60a272673842470ec3b32addd2ce2c3528b36315ba9c0b4237847b7e0b34914cb56b4b2f62410de2ccf231656327a7a3bbe2afa5c14672f1808df5cb4f9b8d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-linux-arm64.tar.gz\",\n            \"hash\": \"4ae1c92bd4cdf0ea459591e87aea0e2f560df9d2c406e68dcf6667576ebf7761817683b565d42aeca74a6f03cdb8342d3fd1f9c81a4657a78043a5f765dc549c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-linux-musl-x64.tar.gz\",\n            \"hash\": \"d389ae56be3dabcceeff9be81239e3da4e914fab0aa77ae7d36bc645fedb32e6193c6bc1e0412aa5081a5804a48d99acbcf6bc501f2f2739fbd3fe0d199eb8c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-linux-x64.tar.gz\",\n            \"hash\": \"b9c61061464a38df0a3eb5894a4a1229cd27d2ccba4168e434f4609b763630c01fbe1b2564826194d6d9b5ad86047e586312c0f35eafc3755dfe0ff9ba075c0c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-osx-x64.pkg\",\n            \"hash\": \"033a0dcf85f2ca2433eb0fccb8ee69fa8ace7be62c90f4f88c62c8445c12f5af7ae7cee21e5ebd9f1c25ef9cc3e25761981a5d0b6bccd9db9588521ac8c666c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-osx-x64.tar.gz\",\n            \"hash\": \"3ff849ee3f9f7f282bdb05df3680be2949604f8a805e53595953f27c02bcb17ae8ab16c2856a29573a5f22fc6e0fc448461e36c031088f33b51d677784e1ffd0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-arm.zip\",\n            \"hash\": \"a28320f01d4762be27d3458fecfa1810e040b125d93a72215a23843091005e2dbe33556e49c878383da0185ab5075f8c616ba885c2b733f9d215addba7597601\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-x64.exe\",\n            \"hash\": \"d80d05c292361ac464d2d231c649e18db7f30abddd9257087b47908ceb123cd9f702e65ca875ecdc359333f9ed2bdd5275a2f3431786b00c47afaef4579e1355\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-x64.zip\",\n            \"hash\": \"8ef2fb0526343a7a57ca982c96332c01fa7da827cee1db401e11b49ca8dacbbbc47c06a2f4333206492bcabde43155b08876c4cdaf9d22aaf3bcf0f6792a6162\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-x86.exe\",\n            \"hash\": \"337e5d3cf7a5b3beb828755f4f4efb0c96e60b521bbd1bac3b12ed05575324e3c090973a3197ed14d66a852106fbf1817acb42879c9063049bd229641e0416a6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-x86.zip\",\n            \"hash\": \"72c49b253f8c6d03e0752ff66f8d7f19d7d1f28b7adbca250297a1e5d6ffb27ce618181332182c686235ae8194852f68858e23ed3dd0fa43d686292a8309bb9d\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.407\",\n          \"version-display\": \"3.1.407\",\n          \"runtime-version\": \"3.1.13\",\n          \"vs-version\": \"16.7.13\",\n          \"vs-mac-version\": \"8.9.1\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-linux-arm.tar.gz\",\n              \"hash\": \"a60a272673842470ec3b32addd2ce2c3528b36315ba9c0b4237847b7e0b34914cb56b4b2f62410de2ccf231656327a7a3bbe2afa5c14672f1808df5cb4f9b8d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-linux-arm64.tar.gz\",\n              \"hash\": \"4ae1c92bd4cdf0ea459591e87aea0e2f560df9d2c406e68dcf6667576ebf7761817683b565d42aeca74a6f03cdb8342d3fd1f9c81a4657a78043a5f765dc549c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-linux-musl-x64.tar.gz\",\n              \"hash\": \"d389ae56be3dabcceeff9be81239e3da4e914fab0aa77ae7d36bc645fedb32e6193c6bc1e0412aa5081a5804a48d99acbcf6bc501f2f2739fbd3fe0d199eb8c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-linux-x64.tar.gz\",\n              \"hash\": \"b9c61061464a38df0a3eb5894a4a1229cd27d2ccba4168e434f4609b763630c01fbe1b2564826194d6d9b5ad86047e586312c0f35eafc3755dfe0ff9ba075c0c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-osx-x64.pkg\",\n              \"hash\": \"033a0dcf85f2ca2433eb0fccb8ee69fa8ace7be62c90f4f88c62c8445c12f5af7ae7cee21e5ebd9f1c25ef9cc3e25761981a5d0b6bccd9db9588521ac8c666c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-osx-x64.tar.gz\",\n              \"hash\": \"3ff849ee3f9f7f282bdb05df3680be2949604f8a805e53595953f27c02bcb17ae8ab16c2856a29573a5f22fc6e0fc448461e36c031088f33b51d677784e1ffd0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-arm.zip\",\n              \"hash\": \"a28320f01d4762be27d3458fecfa1810e040b125d93a72215a23843091005e2dbe33556e49c878383da0185ab5075f8c616ba885c2b733f9d215addba7597601\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-x64.exe\",\n              \"hash\": \"d80d05c292361ac464d2d231c649e18db7f30abddd9257087b47908ceb123cd9f702e65ca875ecdc359333f9ed2bdd5275a2f3431786b00c47afaef4579e1355\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-x64.zip\",\n              \"hash\": \"8ef2fb0526343a7a57ca982c96332c01fa7da827cee1db401e11b49ca8dacbbbc47c06a2f4333206492bcabde43155b08876c4cdaf9d22aaf3bcf0f6792a6162\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-x86.exe\",\n              \"hash\": \"337e5d3cf7a5b3beb828755f4f4efb0c96e60b521bbd1bac3b12ed05575324e3c090973a3197ed14d66a852106fbf1817acb42879c9063049bd229641e0416a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.407/dotnet-sdk-3.1.407-win-x86.zip\",\n              \"hash\": \"72c49b253f8c6d03e0752ff66f8d7f19d7d1f28b7adbca250297a1e5d6ffb27ce618181332182c686235ae8194852f68858e23ed3dd0fa43d686292a8309bb9d\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.113\",\n          \"version-display\": \"3.1.113\",\n          \"runtime-version\": \"3.1.13\",\n          \"vs-version\": \"16.4.20\",\n          \"vs-mac-version\": \"8.9.1\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-linux-arm.tar.gz\",\n              \"hash\": \"c27d63b171dda1e7513137c625ebb5897f7b9b10b4d213f49dd32e353913f18d112469eb19f739b8186d02a7f5cc47f050b38c000b109ca1233982b9556c3b87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-linux-arm64.tar.gz\",\n              \"hash\": \"d25ddb029c5ca469895ec97b4d88f8b8ded157aeb51ff20106d53d428851ff8d146e3acd10e869e486f21cdea5d40aef2ba62d1a6586b8bbd4291179df9882b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-linux-musl-x64.tar.gz\",\n              \"hash\": \"6ee388fcf07a07e912e225ba8ee9010fc54a017152448189a68c026a9aae33fcb0a64a517e830ec6dbbc8ac2799ce29d92519f4036684c4370e91443c9de6d94\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-linux-x64.tar.gz\",\n              \"hash\": \"213beb329e654acf16e9f8fc2a12c82cfe3fb8d0a638229df3ade4261878b4d5e9aa32cf4f27a278e89b4d57f85a107ad33fe43e107ef095b31f1447911d8b12\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-osx-x64.pkg\",\n              \"hash\": \"ed85bf53f5701cc30e69df34a8c36dd0cfd1e57e50d1d1e5320c015e7db9576e8bd4f6bd7e95834fb094d28de00d24085a466b946715606f30c0018d64acc880\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-osx-x64.tar.gz\",\n              \"hash\": \"75e89002da86f4f05efbd092e8f46a6c5688cd1128887c6926fc16553db8931496390e593c626e89f5b400a7ba03252f32ec3b5e388ac11eaa1a0821693bf29b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-win-arm.zip\",\n              \"hash\": \"e998c94d332c201d044314569f82314f4fe70c5319ac4ff33b97cb81a768950fa60807d421fb25fd20d72027a04998ad2505f76928549b597c991e27ac4c4f69\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-win-x64.exe\",\n              \"hash\": \"573d4c2b7a4047b09da4894933e5006ad0261f17f0e9035e44e84b9f3e51ea1c1aa29c210be7d445087008194ceb3689f5609985241f2dd41f2f3ebcccdd3031\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-win-x64.zip\",\n              \"hash\": \"3168859315f5131eb1bc003fcc24cc30afa3d9f32731a231e0235642ea3fa91e28903a3357dc534b1f0b3b11c1f179ef9f0462a5fbd4c7ea3d6d21699ac7b597\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-win-x86.exe\",\n              \"hash\": \"cd809aad742b4c85da2d2c91f0d6ffc2fc58576b1360d7fa6982513560ea17adac7119b9af4011bd16d1f60a122fdd67f08408cec8a834faa03dc9d7c5f8b9f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.113/dotnet-sdk-3.1.113-win-x86.zip\",\n              \"hash\": \"227efb30be9e0bae00d71080ca38a2e3fd1de8a2fb92090782a6696b162d91a1f01188c1627beacec5c5ad5ba3712bc8b65f15aeb8efdfab63dd90e1eb687603\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.13\",\n        \"version-display\": \"3.1.13\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21048.13\"\n        ],\n        \"vs-version\": \"16.4.20, 16.7.13, 16.8.7\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-linux-arm.tar.gz\",\n            \"hash\": \"05aaa12d951e7d0fae14ca0f7fc20ec921fd70cb016abd043663565282ce112f8d37f6a98e79c7b4449575b604ec06e73ce01fc349ea9563cffc37b606d7d239\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-linux-arm64.tar.gz\",\n            \"hash\": \"0480835c6daff68e270b13f07ea5c6c3620f78c9b4f7b0448e842887d11014b53107692aacaecaa57a684814ad744a3af675f7bbc2662c7f40024f905c19db08\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f81e3f87d47e2b51f7eb8a23262f96f92753a3f7ba023b9b4578c3f772690982d80e48cb670ddb27241ae46f3bdfba4d93336017590a6cf9027187f694032d5e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"418b18bfd3a5e03ba0129720eef361fae6ba001263a0ec72b4cc018b8a6b90c8215df1ffae26c429e5a594c4425275996454666e6e0f2d66efffa6c844ee1a1a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-linux-x64.tar.gz\",\n            \"hash\": \"77c5475e0be0ca78a01c728f4dc5b58b57a721605ab4b96aaa9585d5e83a711488edc78a9fcd37bb68b499d711cfe18a9671b4397a591a0632d4f739f02b9f5c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-osx-x64.tar.gz\",\n            \"hash\": \"db6fb318179fe8b3766e110d8ce1cf60a1dcd4acb49322a22695aa93091e15e8025724f8c808f3a69b9573a05230ef0b34d76acb7cff827f76465aff53c83835\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-win-arm.zip\",\n            \"hash\": \"8fe5b30fe2319359e7510134cce8b472951e24386c45263a22dc0a34d9cf4c8a0df96169852868621be20962ceb67a11fea6c9abdfbd8142761e3ef4c5350948\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-win-x64.exe\",\n            \"hash\": \"614936103e678af72fe863bf96229aa29c1801ba3ff75c46ef29b0a8500c1f50b4182a98fa9e33ca50c1f8ef5096b2b39f29ca06049bb35367224c64e0afc5d1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-win-x64.zip\",\n            \"hash\": \"18421f8edd5c5949e2ba8f12a77bf2636dd96b2c4650997a56c1001952f0eeac4096ea6d52481d3219c3db993927806d7a181b9dce5ffddba1877ea33f9de3f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-win-x86.exe\",\n            \"hash\": \"79550c9e579a6a0aa26710c858a82b120dbbaceeadd1cdeefefffea73d67b41a3aca935e2f7951b45099adf4cb085df82df3ad016967c1b9a01e54ae600063cd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/aspnetcore-runtime-3.1.13-win-x86.zip\",\n            \"hash\": \"4cd0b937850002264615a2a9569025731cdf3ebf83df83d3542cff335794fc4e18c3ec8d14c1cfe27eabb0585912f490021f47e3718a608566850aac2330f4f3\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.13/dotnet-hosting-3.1.13-win.exe\",\n            \"hash\": \"771f64e8028dacff692f226316539bbf8dff0f84d5b41d5ee29d9659f16570b96f4ff45ab17b0521d751f00f43cd2ea27db35f8713bc7b01fc7e15d78a1d779b\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.13\",\n        \"version-display\": \"3.1.13\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/aa717f57-3ae5-48fa-a3ab-0018338d0726/fb37276b1575772461701339110e7a54/windowsdesktop-runtime-3.1.13-win-x64.exe\",\n            \"hash\": \"4a5cdbdb851cf94130dfbe5429aeec2471e0621c9f79c57ce57655c15854c5afce18fd0b8224c7e65afb98eccc8cf8881b021c3f7eb6dd05d0463225c15abb18\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c39e684e-f804-4e5d-b2ca-eaf4ac49d7b3/fb155e336f2a2bea7efbb3161822296e/windowsdesktop-runtime-3.1.13-win-x86.exe\",\n            \"hash\": \"987cc4c2878228e95c89462c1dea53793dc9dccea5cfc7db4520a676a291a6cfcf1761b5dc15e5ac36d962d3c7c73fcd4c1ec9a54de023bf31066767a4056128\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-02-09\",\n      \"release-version\": \"3.1.12\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-1721\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-1721\"\n        },\n        {\n          \"cve-id\": \"CVE-2021-24112\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24112\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.12/3.1.12.md\",\n      \"runtime\": {\n        \"version\": \"3.1.12\",\n        \"version-display\": \"3.1.12\",\n        \"vs-version\": \"16.4.18, 16.7.11, 16.8.5\",\n        \"vs-mac-version\": \"8.8.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-linux-arm.tar.gz\",\n            \"hash\": \"5d241663ef78720dacd4073f06150e0b1e085cda542436a9319beb3c14fb6dc19ade72caa738ce50d2bdd31e2936858d9f080a2f9ae43856587b165407b47314\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-linux-arm64.tar.gz\",\n            \"hash\": \"1c7ca36af74524fa5ec49374983338ab3f1584a03aec11080943cf3bbc7e1fb36abf313549231e5be1c58c2252f27d4e001cac1464ee20702daf831ec61c92cf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d0b5bd6aa0e40bfdd980887f6fca9f596852617107ec9b1b00bb5aa5b79718ab10e6befd778e97426558aa1c5652d8b6192a2a57f7da9d25471cbcac5b8fd5fb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"f38aced794bba9a896df969667b2b01528f7857b2dd9b9018c4c2c8e1e646c6ed44e66b9b28f76bded1472fb0dd932a575c6887c5a0da9848bb3d2694751a413\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-linux-x64.tar.gz\",\n            \"hash\": \"d1a815d26c75d9fe41479efc32626c1c83bdc616cdcde63768ff7480d721c37427a17fd3999366c738aa936afe43c5426162c4b188f923d810762c91230e2d8b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-osx-x64.pkg\",\n            \"hash\": \"611f2c82d7c18ce1534bdc554f6cb71795e9653c412dcab0461ca5e8a565a9ce99e384bec2ba9f93ea7b30e48d5227fa7f9f6d1259bb29747efae7c5c1ab6888\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-osx-x64.tar.gz\",\n            \"hash\": \"b3d024d8e41a451497a571ca05bc2d44efa9af02c9491506c42cf9bd3062bb7d1cd1d19b63b2e283a3378f9a5d6362b1b3e6a14c9be4246cfcfd10a158af6aae\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-win-arm.zip\",\n            \"hash\": \"72ecf82aba6a5d01f641ae698ca65464006704dac8fa9dd2bfdcf17b206f41feff4b5a7d97827b5d9f6758e790423a128bf1672a31e9dae7c0db0b64ab3c0db8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-win-x64.exe\",\n            \"hash\": \"9b3f882ae5dfdc8b50d3cec4f3292292d658b2fecb84b3f73426fb3c16e6fc6b8e7118ef559cfae25ed7a2c175fa4d89e18986ca3c05d15f706524fbb667f702\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-win-x64.zip\",\n            \"hash\": \"41f0fc1e65cc5807de3847958d0a9788c7fccde61489e411544341e6df940a5a87add6b6a528e6f7576e5b0f127e499f956dae31743da45365fea57213a08ec7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-win-x86.exe\",\n            \"hash\": \"ba18f9028b19630d91017beaccd8d79388125c228a83b5a62306108f3bb283617a7ed9b98785bc73192ec00e5d186da767e940dcab388699faf274e437d0c16f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.12/dotnet-runtime-3.1.12-win-x86.zip\",\n            \"hash\": \"c7613c1cb79ab6111c832eddf1528c185650b01f378eea8c37dbef3a39870a40824c8d647a500f8737efcd09dab39d1bf9192698c701c650e70359f853eb1d39\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.406\",\n        \"version-display\": \"3.1.406\",\n        \"runtime-version\": \"3.1.12\",\n        \"vs-version\": \"16.7.11\",\n        \"vs-mac-version\": \"8.8.8\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-linux-arm.tar.gz\",\n            \"hash\": \"b978d8f8dd6af16abb16f42b8c36c356d18e6e88309967ae9faa9a8009245e4a94183a4c2a6acad48ba342a7429de8055e4e32aca79f0c1d2f2c3bca1a318530\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-linux-arm64.tar.gz\",\n            \"hash\": \"e460ac35329e572dbf4005254129b9799c897f19261d01ea77a0aa196b9e0fecf804996b1157cea92731e30e08b5827ccb0c2d280ea9ab2b04b46492ed5e12a3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-linux-musl-x64.tar.gz\",\n            \"hash\": \"d6a19f06c90d6bcdedfd4d18529b2148a7784b84b64ea263cdb356204453b8d3368153258ede93019f0096ba37105883a238485459c0aaf0bbf702a8359c5f0e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-linux-x64.tar.gz\",\n            \"hash\": \"df0c59e1a2ec37fbde33dae98215cf12128c37ca3e68012ac670d057df318340451300065d716c9205a4ccd247802bdb4c68a5575cd80214a9ca2fd277d1a780\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-osx-x64.pkg\",\n            \"hash\": \"0b2b99ca60563e8e0f91fc667fa348c5026376bb9124c41e794d87216d0ec47246c2d066b4585759f5883a88c36e7d8778d29104caf60acda77a296d0629d8af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-osx-x64.tar.gz\",\n            \"hash\": \"56eac4822ec84eea1b44e99e2b667e186cf4eaac617ec4469595ea895e05b4d41c914f23e22d6d72e6fce870823537b95471c96dc4dab80126bc2ce89d89efa8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-arm.zip\",\n            \"hash\": \"942ddc7a6e120d778d8c9b4da4bd6f0c7638ac79345b4cfe8a3dd18312b5e73d4d5ec081b5f87c814dc6f7b3f40e7cf2b564c98f079c90d67fffbf5def7e7c3f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-x64.exe\",\n            \"hash\": \"6afc1916bd7be1488768ece0cc83c77d9962404f431331a7998a98385407dc7085fc04ccac2eeea1e28d38fdf870af71f61762e7d7b15c3a7ba56b6d6399d354\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-x64.zip\",\n            \"hash\": \"2cb98949a64b7dbd1b83c81e71e6f1fa6034df7692e5e233bd6415c4e6bbc172c46823f32fe99ca67d3e1e18f52d4ebf088647955f3db3e4abf09d4945cfab34\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-x86.exe\",\n            \"hash\": \"1467a070b6473ac794399a330c1dad34c8a7d3fa213641069383779bcfbfd5999f5d7c508a67d5657d2eda9b0199ef59645efa312e44a1235823c0d2fff6b674\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-x86.zip\",\n            \"hash\": \"9540f0c1bef387f4aa366bce5074d560380f613d2d766bdd07d5e7ff79bf87c1a3e5a7a27975b9d3c2bd6f2e518b91f00d996f1959cf037b5e53963120f75905\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.406\",\n          \"version-display\": \"3.1.406\",\n          \"runtime-version\": \"3.1.12\",\n          \"vs-version\": \"16.7.11\",\n          \"vs-mac-version\": \"8.8.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-linux-arm.tar.gz\",\n              \"hash\": \"b978d8f8dd6af16abb16f42b8c36c356d18e6e88309967ae9faa9a8009245e4a94183a4c2a6acad48ba342a7429de8055e4e32aca79f0c1d2f2c3bca1a318530\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-linux-arm64.tar.gz\",\n              \"hash\": \"e460ac35329e572dbf4005254129b9799c897f19261d01ea77a0aa196b9e0fecf804996b1157cea92731e30e08b5827ccb0c2d280ea9ab2b04b46492ed5e12a3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-linux-musl-x64.tar.gz\",\n              \"hash\": \"d6a19f06c90d6bcdedfd4d18529b2148a7784b84b64ea263cdb356204453b8d3368153258ede93019f0096ba37105883a238485459c0aaf0bbf702a8359c5f0e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-linux-x64.tar.gz\",\n              \"hash\": \"df0c59e1a2ec37fbde33dae98215cf12128c37ca3e68012ac670d057df318340451300065d716c9205a4ccd247802bdb4c68a5575cd80214a9ca2fd277d1a780\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-osx-x64.pkg\",\n              \"hash\": \"0b2b99ca60563e8e0f91fc667fa348c5026376bb9124c41e794d87216d0ec47246c2d066b4585759f5883a88c36e7d8778d29104caf60acda77a296d0629d8af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-osx-x64.tar.gz\",\n              \"hash\": \"56eac4822ec84eea1b44e99e2b667e186cf4eaac617ec4469595ea895e05b4d41c914f23e22d6d72e6fce870823537b95471c96dc4dab80126bc2ce89d89efa8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-arm.zip\",\n              \"hash\": \"942ddc7a6e120d778d8c9b4da4bd6f0c7638ac79345b4cfe8a3dd18312b5e73d4d5ec081b5f87c814dc6f7b3f40e7cf2b564c98f079c90d67fffbf5def7e7c3f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-x64.exe\",\n              \"hash\": \"6afc1916bd7be1488768ece0cc83c77d9962404f431331a7998a98385407dc7085fc04ccac2eeea1e28d38fdf870af71f61762e7d7b15c3a7ba56b6d6399d354\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-x64.zip\",\n              \"hash\": \"2cb98949a64b7dbd1b83c81e71e6f1fa6034df7692e5e233bd6415c4e6bbc172c46823f32fe99ca67d3e1e18f52d4ebf088647955f3db3e4abf09d4945cfab34\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-x86.exe\",\n              \"hash\": \"1467a070b6473ac794399a330c1dad34c8a7d3fa213641069383779bcfbfd5999f5d7c508a67d5657d2eda9b0199ef59645efa312e44a1235823c0d2fff6b674\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.406/dotnet-sdk-3.1.406-win-x86.zip\",\n              \"hash\": \"9540f0c1bef387f4aa366bce5074d560380f613d2d766bdd07d5e7ff79bf87c1a3e5a7a27975b9d3c2bd6f2e518b91f00d996f1959cf037b5e53963120f75905\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.112\",\n          \"version-display\": \"3.1.112\",\n          \"runtime-version\": \"3.1.12\",\n          \"vs-version\": \"16.4.18\",\n          \"vs-mac-version\": \"8.8.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-linux-arm.tar.gz\",\n              \"hash\": \"a7e639a7432ce4ef404ab8bbc66f42128571a1b7de70989c6aca26dd83a43d036db985f31992a62d707d7986eb00a30b03b67ed28e1f5048a76bb9954fbf97de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-linux-arm64.tar.gz\",\n              \"hash\": \"0044bc449af04e0c6d349d0cb9c35a9f30e7e13bb906951e077911a49a5de88faede9f1f798625d10b6cdf8f35695f22e61623570b72f00324005b90d3b6c47d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-linux-musl-x64.tar.gz\",\n              \"hash\": \"fc63382b86461a39e1f4bd117505cf9446e96838d87306e8c7e63e94170a14ed50c006fa421c719fe6dbde76c3b40c0d3dd5cf4d74c1617a7e40363a17f73ddb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-linux-x64.tar.gz\",\n              \"hash\": \"386bd6e212a448f941dfc351a849f3e8de58b6f0c4801742524cf7a735ef5ee3247053ce874074929c5272bd70290cedc6f17b1511e5dad95ece7227420b820c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-osx-x64.pkg\",\n              \"hash\": \"d4022a2bf9bd0d7c1014e325169f36de69c4790308249a95c4d5da866a954e3babd99c435fd481df0077cb2a17da1a797fee2db8ce5c7a2b28029e25e5160eea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-osx-x64.tar.gz\",\n              \"hash\": \"8d2c259dc2c580cc4e4b31ef70b4bfa7f5d7d00483f0e688515395fcc22843f1e1129855772d93a8f35a034beaf7880efce6515c1f5995b4fb26dc0e4942acd4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-win-arm.zip\",\n              \"hash\": \"c8ee1ae0eda16fa97a41404a403f07d0360a547affc4a8ba82439310325a774fb66bbdf1f23f04642d6913c0a940ec95b225bbb96037863b6e0785998dc53495\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-win-x64.exe\",\n              \"hash\": \"84bfafc94f28286e5686f4a537ea0bbf69b8b4d13a5199dfa7b9a7ccd762fadd631b8e0acf305e91e731934f1d3034c8651d8159173c5cc7224a7a90a75b8e9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-win-x64.zip\",\n              \"hash\": \"3ea72529b493fc51ffa584cf747b99b06a6b94f35eee9af480ead3d2e90b6f5aa23914ab34ea7f55eb4887855ce8ff108205016b75fbdd5d389bc6b12518fa5c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-win-x86.exe\",\n              \"hash\": \"6cb58dbc46a7d97b4dacfdff6250901bcd6de63c836e500ccd04cf87df18127bc97cfcf812f6d5f628e59d0e0fc5f553d6825ed11f34e79e565b430d1210e464\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.112/dotnet-sdk-3.1.112-win-x86.zip\",\n              \"hash\": \"ac2f70a48652eaeb9878feec7b96802e53173e7e5dccb7cf6737ef5597d8f57f97e97c50a166dd3bfa2d09f23d5a14fd1d5494d50ce59bea3a1fd55b2d65ba29\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.12\",\n        \"version-display\": \"3.1.12\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.21020.12\"\n        ],\n        \"vs-version\": \"16.4.18, 16.7.11, 16.8.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-linux-arm.tar.gz\",\n            \"hash\": \"656f95054ca2a40f12f993a7b2d0f734ab7952f52ced8bb52c4c2074a68b93f82fcbc191a215587306f0a7b82e7aec0bd1473de8bf2e8842fabab4d0a8809ead\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-linux-arm64.tar.gz\",\n            \"hash\": \"ad0f2bec8852037da08d8399ce200f5dde852453f0098b6c9b6451c1050fb7ff49a2fcedcf91f027af758782dfd5016b411d7c74bf8f3f1a19a93a129e48cb1a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9f8c9fd651ab0784d9449b0f314575f7c3cf3473235fb9d1ea505b970e498c0ff5bd94c347c59e5d2859454e95ea266182e3ba1402fd323909f4f0c382fa0260\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"0e4ef3c8884c3ebf5db99733e89edaf8c1272bae8ad2f88dab708e8566020d161960cd4f6f4d0df7231da36ab6248670a50c3dd415d740ac8d26e86dd69e2438\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-linux-x64.tar.gz\",\n            \"hash\": \"e6d384a4c05bc6a693a85dc1da5f34e26449ad5d9414dee5f46a56805ac53eb304610be06d6a2a683f2d9e1447f316f47abea71fbfd6ee901dcc9da9d7c4e03b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-osx-x64.tar.gz\",\n            \"hash\": \"54343a3b90d7db1a310e69a930037bc59ae060e0868fe03ad3dbd9dab988cb1f58c44307cfd2db1f983f6f2435039c0003e9d3362847f700f24d2ed8a918e8fa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-win-arm.zip\",\n            \"hash\": \"d4ffb7cac8c50ad8483f568585924ab76d9a493720fd42d323dd4c7a4f4896839b5d0ff342bbe8eb77b9b0d5b281f9112b4c51e18b7fbc53b077606d4e6eddaf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-win-x64.exe\",\n            \"hash\": \"5ce9839cae90fb2936033431f2905e97c7dc080dc50108d58714939cccc6a265694b8259a3bf742a68bf04d9cffb0602b0306dd401c4ce644bdb96c7d1168e59\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-win-x64.zip\",\n            \"hash\": \"996b0f7e44f58516c321ef926ab86f5d10e369c2e343e7b33b5726f281c2f80d42d81f1403ac6515202b4c141bf5996308f833607be26a66aa98a50cc04d44b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-win-x86.exe\",\n            \"hash\": \"03ee5f6d3b2af8ffe2a5154bb05e50938e2d36e98d996d9e67a3c349dd0c8b3051d5a9628f48c51e006cea0b1f4484b4be51920fe5ca841060b0d2c6a12fd5d2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/aspnetcore-runtime-3.1.12-win-x86.zip\",\n            \"hash\": \"95abdcc1b67a71ce9e82fe8377f3e9b3fb36f52d37375a041144bed81ad1384963aac8b2fc461d0e475decefd4bf2c807c9029694ef9b32c1c29539a4b661ed2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.12/dotnet-hosting-3.1.12-win.exe\",\n            \"hash\": \"d82ce1845611b8f1a65413c523b249761ee67d45e656a2e5683a47fddaabea882d2ee3bd43490b915bbfe3d9bdd82091fc00ed5950c6326b0ebb24274ea8d3c9\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.12\",\n        \"version-display\": \"3.1.12\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/076a47e9-c65b-4b78-95a7-93eb988891a4/3574764590cfa650e0aa87c44d3fe384/windowsdesktop-runtime-3.1.12-win-x64.exe\",\n            \"hash\": \"cd69b8722b2ff175fadd6774ab6a97f89292fc57a15cec95218e79fff1e26f46a7efffb15ce0f6d22b83b991f7083bb5c04f5158f87d298ea0f204933f8ecd27\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5d89a010-88bf-4e4e-ac12-a07258ddbf5f/1ff5dfe312c5bd9760f3b500b1b37597/windowsdesktop-runtime-3.1.12-win-x86.exe\",\n            \"hash\": \"c211a7f29d9b6feefcf0379b153ffbfb815157d3d494cfd7d0d84d619701eea284bf12502094bcff2bb2968213190454e7ce0e865fd623e78c2fcdaebef963da\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-01-12\",\n      \"release-version\": \"3.1.11\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-1723\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-1723\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.11/3.1.11.md\",\n      \"runtime\": {\n        \"version\": \"3.1.11\",\n        \"version-display\": \"3.1.11\",\n        \"vs-version\": \"16.4.17, 16.7.10, 16.8.4\",\n        \"vs-mac-version\": \"8.8.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-linux-arm.tar.gz\",\n            \"hash\": \"7d42d00574aedbf5b77daad27c0b5c058caea28a2c96fb6b024888cc5e9a219cdf2bd64d92e0ec38e0a3a87e71f62b5ad926d2b7c7ea14db6578eadaa71ebfc7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-linux-arm64.tar.gz\",\n            \"hash\": \"a717bcc55c17b6201b31274c739c0a8448cf285c2a1c29242b3474cdb83123d04242bce7ae24160103f08b7e979f8278d14f3eaa8185cb1c8cb14c2b15d22a6c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b8eb1c6c661935323de76cfe7268ec169a6eb6bb1beea3975a15b9fccf172c4d25172ec01b08f4d39c293c91991b80ef0c39dc3d5fa29bb59b1dcf276d8a4688\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"d8e8e30e0b9cd619d11dac5d7466f39fa5ad099dfda0e1b4d8c06e4e4e33bcab81456eda2f83db47ed19469b4c1208b544df254316a95b1244e09b4d62e2e8bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-linux-x64.tar.gz\",\n            \"hash\": \"9f04797ae293723dbfe846676abcf5809e94a335b37fdc0c61b940e583b52730ba2539eddbf8edc0901fa6b7765b1ec3946eab381530e03f6d5d9946cc2bfbeb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-osx-x64.pkg\",\n            \"hash\": \"98fa0f54c61f75cdc5bf4a900b89c91baaf081ca7df67c807e192578d1abaa68fc52d37f6576580a0aea7526f8843a860d4df2ffc1a09a46bd53549de4b3941b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-osx-x64.tar.gz\",\n            \"hash\": \"8d095508cf5756ec2ce124503c5fd8247ee2a6d95b9eab74390ec442e85e10acc893ad515b622e6ca9d32c82549db05a8574a947fd3af8a42a381bb1737fcb5e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-rhel.6-x64.tar.gz\",\n            \"hash\": \"cb6cfb4b0dafdf2176551ed6b6b7dd7ae70cc232fa857126f3b3de0dd593293a416b0f279b0972da64e823f8bffa52a6d31b7a17e7a106cefaba0359f0f854f3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-win-arm.zip\",\n            \"hash\": \"a7838b2e097cd10d32e529d983a0dd5a75f533407b4babdc9738a38f11050cf3b0bd40246cc8ed84c914880e1a6b96483208a8f2f952e075aef7e9d7171a1aa1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-win-x64.exe\",\n            \"hash\": \"3c1acd621183f21f61b9b0b162a90b23963c056b2d0f5c70c636bc1646850666d4be04b757753f2e0d8161b61026b46ee5b1b4d8d09febc2640f40c8d76a631d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-win-x64.zip\",\n            \"hash\": \"ffded8c76b059401adc025663cd4d3058edf14f09c6d82814e45644556e34a0ba798d294df553d48535c7f346eb0c737766e3ffeaf4585f559dfb992e4f1526a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-win-x86.exe\",\n            \"hash\": \"c9e47710dbdc07bd861ec3efe3012869a7dc69ccc0db3d9c446dfda471846be272b36172b3cc6a81d4b696dfea9e98bd4f3d44386022ffd8847ddbdc3796653b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.11/dotnet-runtime-3.1.11-win-x86.zip\",\n            \"hash\": \"3cc1493e49fc84f24e71b96719700ec2489f17fe3909bf1b58a7fed069c34318fb66e3eec3954e7c190ed598bc4baaf67572eabe1ef8c704770b6c676793aa3b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.405\",\n        \"version-display\": \"3.1.405\",\n        \"runtime-version\": \"3.1.11\",\n        \"vs-version\": \"16.7.10\",\n        \"vs-mac-version\": \"8.8.5\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-linux-arm.tar.gz\",\n            \"hash\": \"110f595a835ebc5c974fcb24e5ed7b81461288ddcf6b3a0dcead3f22b6995698dab767304e0bd98d3c450a297db8f04b185bbaa0d310fc9f1d3f9c3157fdac06\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-linux-arm64.tar.gz\",\n            \"hash\": \"e720b7c6497da52ce4a927b1a29df5c180fbf5b4f800185de61a31092c0bfa18a78bb9c2fee744fabc78214c5be6e9277f3dc14ae1426b55274f9726997fc733\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-linux-musl-x64.tar.gz\",\n            \"hash\": \"e0fdcd08cf3cddeb4e24f57ccc1398e58b20c1c797bc2f9492124467defc6046a9690dbebc9d22e0f4b1627205519c7338de872451f37dc3b794865e1d0bd9bc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-linux-x64.tar.gz\",\n            \"hash\": \"924ec0ab3f126d340ef37fe90263a91f31218995716d1ad5a817bdc6ef71e4d8e87a91edeeb785f5dff3912cc08fe87615718986bb5540ff23e9edf2302e38dd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-osx-x64.pkg\",\n            \"hash\": \"642b585a469ecc6efc0e53acc1e2ba439ea21c0c418101655d6c1723a505bae70918e1a5f8916c6d2776ef381d18d8e14eb96a0b6c2e1c04cce7d984a04c332e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-osx-x64.tar.gz\",\n            \"hash\": \"2897eb94bda1cee293985a10a798df8817db7e5562cb209963cfc1eba055fcd2617c2687eb3adb1330f3de40b9fdd2b28ef7453c0fb738a4c0766ff21b56973e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-rhel.6-x64.tar.gz\",\n            \"hash\": \"7c88049edc080eef559b2d29137b27d4b046b429cf4f7c5ce044dfbf528f09f0dacfb10ba7aaa2f8e7a57d5b296bea261ea1afd8d53a59140b8a0a24ea08411d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-arm.zip\",\n            \"hash\": \"da84d18309d4f2d5154cb6c870650976130e287fd3d424d97da7c275f76e61df15d44f84b64a68a753b0754bab97a480b8d699fd4d39567d769780536454d8b4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-x64.exe\",\n            \"hash\": \"6dd2f4f45036c25918d8fd48fde7109b1c794d4c2f863131b02f0b5b30d6fbeba070bbbadc897f672c098ec34baf26db33d6a99e19b72eb450cdfb4dc9c445d0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-x64.zip\",\n            \"hash\": \"b58731cecaa4a468a160b20cd1080fe4cea7840db69101cadc80ba6d0af5b4a5a0ab28cadd2da49086e5137edea3a70144bc46ae4508618af644a82a32897260\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-x86.exe\",\n            \"hash\": \"fbd30e77f15535fd3db4e2aceb95d0f15d378d25a900f050c5e35c0b65e6e11173f1411407a0e193be126ba2a7bb6518b4acefcab659171ebfc9b94bbf2a7349\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-x86.zip\",\n            \"hash\": \"3c85b15c0f42829cd338ad565ff9cb18902f7ab1778007ab75996cc40c81bfdbd4d8508a71efd25dc5015c2d941853e8a1763dfcfb48d9627e4e4529fc6711eb\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.405\",\n          \"version-display\": \"3.1.405\",\n          \"runtime-version\": \"3.1.11\",\n          \"vs-version\": \"16.7.10\",\n          \"vs-mac-version\": \"8.8.5\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-linux-arm.tar.gz\",\n              \"hash\": \"110f595a835ebc5c974fcb24e5ed7b81461288ddcf6b3a0dcead3f22b6995698dab767304e0bd98d3c450a297db8f04b185bbaa0d310fc9f1d3f9c3157fdac06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-linux-arm64.tar.gz\",\n              \"hash\": \"e720b7c6497da52ce4a927b1a29df5c180fbf5b4f800185de61a31092c0bfa18a78bb9c2fee744fabc78214c5be6e9277f3dc14ae1426b55274f9726997fc733\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-linux-musl-x64.tar.gz\",\n              \"hash\": \"e0fdcd08cf3cddeb4e24f57ccc1398e58b20c1c797bc2f9492124467defc6046a9690dbebc9d22e0f4b1627205519c7338de872451f37dc3b794865e1d0bd9bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-linux-x64.tar.gz\",\n              \"hash\": \"924ec0ab3f126d340ef37fe90263a91f31218995716d1ad5a817bdc6ef71e4d8e87a91edeeb785f5dff3912cc08fe87615718986bb5540ff23e9edf2302e38dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-osx-x64.pkg\",\n              \"hash\": \"642b585a469ecc6efc0e53acc1e2ba439ea21c0c418101655d6c1723a505bae70918e1a5f8916c6d2776ef381d18d8e14eb96a0b6c2e1c04cce7d984a04c332e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-osx-x64.tar.gz\",\n              \"hash\": \"2897eb94bda1cee293985a10a798df8817db7e5562cb209963cfc1eba055fcd2617c2687eb3adb1330f3de40b9fdd2b28ef7453c0fb738a4c0766ff21b56973e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-rhel.6-x64.tar.gz\",\n              \"hash\": \"7c88049edc080eef559b2d29137b27d4b046b429cf4f7c5ce044dfbf528f09f0dacfb10ba7aaa2f8e7a57d5b296bea261ea1afd8d53a59140b8a0a24ea08411d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-arm.zip\",\n              \"hash\": \"da84d18309d4f2d5154cb6c870650976130e287fd3d424d97da7c275f76e61df15d44f84b64a68a753b0754bab97a480b8d699fd4d39567d769780536454d8b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-x64.exe\",\n              \"hash\": \"6dd2f4f45036c25918d8fd48fde7109b1c794d4c2f863131b02f0b5b30d6fbeba070bbbadc897f672c098ec34baf26db33d6a99e19b72eb450cdfb4dc9c445d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-x64.zip\",\n              \"hash\": \"b58731cecaa4a468a160b20cd1080fe4cea7840db69101cadc80ba6d0af5b4a5a0ab28cadd2da49086e5137edea3a70144bc46ae4508618af644a82a32897260\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-x86.exe\",\n              \"hash\": \"fbd30e77f15535fd3db4e2aceb95d0f15d378d25a900f050c5e35c0b65e6e11173f1411407a0e193be126ba2a7bb6518b4acefcab659171ebfc9b94bbf2a7349\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.405/dotnet-sdk-3.1.405-win-x86.zip\",\n              \"hash\": \"3c85b15c0f42829cd338ad565ff9cb18902f7ab1778007ab75996cc40c81bfdbd4d8508a71efd25dc5015c2d941853e8a1763dfcfb48d9627e4e4529fc6711eb\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.111\",\n          \"version-display\": \"3.1.111\",\n          \"runtime-version\": \"3.1.11\",\n          \"vs-version\": \"16.4.17\",\n          \"vs-mac-version\": \"8.8.5\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-linux-arm.tar.gz\",\n              \"hash\": \"67b9aa755b208a9594d73b3964721521976963e05abc6cfc95add271d6c09a0848555a04d0aa1531d900d67aa3fb7414dc704af74ec5d733ee18b6267f3ca460\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-linux-arm64.tar.gz\",\n              \"hash\": \"0ea4d5a65d78ca09dcfd558e15accde34ca99647873ffd3584733e79d80ac4df493f466ce2434847bec4dddf2907e247522a5751fd05bd1eb3c82f6023f1e41f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-linux-musl-x64.tar.gz\",\n              \"hash\": \"78d6a85e08930dd271b38acb895cabbc33a7a5a350421cd9a6b5b45ad533697710424385c1b5488323aaadc114ffd3fed207591320685e53fcf16ff36906dd64\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-linux-x64.tar.gz\",\n              \"hash\": \"53e3b592e9950ffada666e85fff973cb9ef3b171722126b551c408bc415069aa23f174e017da2bbb7b6278e20acdf2b7a2ca6043e7e9b5ecf0ed26def0ba68a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-osx-x64.pkg\",\n              \"hash\": \"a4e0ff4f582c43ae0947e698c0c14c1cf14b78ca0905f373bb39d90cbe96840b98a6ff7d6e6787b79c1946f5739dfcc2f1c10143dbd63ed4d155ccb65b8342b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-osx-x64.tar.gz\",\n              \"hash\": \"d63e8e64a4052a9a437adf9faa8130cb7a6d92118a85c8ff859e8d81af2031473261dd0001db8f4188aa5a101c6341cdf131dbea70f37814f692fe87fc4cc9b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-rhel.6-x64.tar.gz\",\n              \"hash\": \"95ca368203879a86f65159d3d25930767e6fe9891e7b0837b68acbec74a98252547451976bef669e64cc58f35464b4054d01cc1c74f67e93c011ea6e5b80efd2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-win-arm.zip\",\n              \"hash\": \"359c5511def3ebc9caadc296029df80a7b16c382fd5ac53595daf614b65606cef9719f0c0e396f7923067bf051b03b4f1f244d990703bbae5692824aee2eb8d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-win-x64.exe\",\n              \"hash\": \"feea92635bd99323ce1c4c3cb7e45e7fce936745690ae183130064b59e9b40b5be2f111bab6344a8b265193a8ab37184e0c4d6dc3877a3b229f27dcf3a599744\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-win-x64.zip\",\n              \"hash\": \"a11a4259fd3f6fb70cd793a2537c15cac307f329e6e093ecceca0b71d12ba60535c1ccbf434d1bab7e7cffa9930949bed21b20887d991311751ffe2489669641\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-win-x86.exe\",\n              \"hash\": \"4f8db02f6ecae4b2ce0e197b8f9c197887ad8de2f637a33600fd4d94da1225d33b130e702ef5337db1d7a755a667103ea6322c3f1be533474651f0af2b6880eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.111/dotnet-sdk-3.1.111-win-x86.zip\",\n              \"hash\": \"1c56e3b159d8ef8e000dd083988822600d2bbada0c51534f604726fbe0f435115eb5b6a0cabc2c86cf8c5787587c2d04e027ef4253517a938511e6c6a2f4c49b\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.11\",\n        \"version-display\": \"3.1.11\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20325.11\"\n        ],\n        \"vs-version\": \"16.4.17, 16.7.10, 16.8.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-linux-arm.tar.gz\",\n            \"hash\": \"30d302fa7d14d73091cc102f147a185a8fea232afde0576af88f56af282201d397aae5a2a50d2b4ab4be9efb165729a80cbfedc61490596324625d13297806fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-linux-arm64.tar.gz\",\n            \"hash\": \"4d0bd5972bd66729b9ab9cc69e934138fbf5e75b6590305b2f975dda63310434bf8eb355daad7ec53894fc8f61ffca53e71a05a6dd719fa8345d055ff39e9ce5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fb32dbb342e658f62ce8490cf2328ec8216001875522ac259ba05de0ee236bc7ab83a7e5661fe9dfff8924fb214216d8d9e5513a4fa292b2ab49fd4930405a68\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"dfe6c191cbd87cf926a85da59095171df13c8bef8a5a8b7089c986475c4f3c508c66302ec008bee9ef458c2b2a5f9c348371139a2cddc3d9e0d74e879bc0f31a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-linux-x64.tar.gz\",\n            \"hash\": \"626cbf5f4c76c9382403f18cc288a925e62d6bf821249be5c0ef2f58278479dd95ee4bc243377554a835eda0c2409c5d8e529c5f9712ae7475ce0420c8df4b72\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-osx-x64.tar.gz\",\n            \"hash\": \"bade260968eeca2f37b9e6e83244260c04c3d507ab145d2c192baee73376b88e71f5e21b20b7a9420f54fc47f104679ec22869a0f91137112e89b91fb8b7f04b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-win-arm.zip\",\n            \"hash\": \"67769d7da5ca6347ffe633390b4f5745b8cc3935eb2d48a31ee1ee71e849451dce70a0bcc8558d14f494cff021eda35de2a5c34f53231d946c7f1c48c092d34b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-win-x64.exe\",\n            \"hash\": \"5dca6915ce4c1360972071398e3392442fb60dc1da281e4de1e602c9185f25f8e390b2d1972ee85092d729140740794f89b39c560d3a90e14666c4b128281d4a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-win-x64.zip\",\n            \"hash\": \"0a70030181516aee21424699951e18b17236736d93f90244b9823dd4c9ee5e22dd1452fbb0f3300d36270b641b80266dc004c1cd72fb5c35a49129970576ae50\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-win-x86.exe\",\n            \"hash\": \"fb5ae0e602097ee535c78044174ad6de74a8524c42dfc8f540a51bb2da8ac5e1c42be7dece1f48de6293af589786a1aadc2ce5d8756d77f91ace51b90704bfff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/aspnetcore-runtime-3.1.11-win-x86.zip\",\n            \"hash\": \"7a1423300a9c037a0b48930f63b072a0fa0e465d6f659b04fb46533ea09194b204544e35a9e3bc496117d08fe7f855fdb25c29ebb73080915977915eab6a2f43\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.11/dotnet-hosting-3.1.11-win.exe\",\n            \"hash\": \"f4542d259134d5c3baf8da3fcd381fa8f01b2072aeebdbd6fa0d39ba8de4482995c06eda621f40d690a1cf1a958f4cec8bafac21ca6870a787d18b8495a42535\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.11\",\n        \"version-display\": \"3.1.11\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3f1cc4f7-0c1a-48ca-9551-a8447fa55892/ed9809822448f55b649858920afb35cb/windowsdesktop-runtime-3.1.11-win-x64.exe\",\n            \"hash\": \"ad4c1fe410ddc3c97444882a4515d42829e428e0f8218b4d5edc67a6f6efa7b7629a736cf6ae52e56882f0707a9222180be5715d3f79a4ed39687404a5adfd5c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/42b8e14d-6f6d-421f-a150-39adc1727e07/c2963b894eaea409ca33f8c7076c41a8/windowsdesktop-runtime-3.1.11-win-x86.exe\",\n            \"hash\": \"56b4aa80199e5e0bdc7ebea7ba812a0331b052d725d531194daba541307d50adb2e551eaab101882ff55959e4727ee213618d86642b9b84a33a36269d49fb778\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-11-10\",\n      \"release-version\": \"3.1.10\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.10/3.1.10.md\",\n      \"runtime\": {\n        \"version\": \"3.1.10\",\n        \"version-display\": \"3.1.10\",\n        \"vs-version\": \"16.4.15, 16.7.8\",\n        \"vs-mac-version\": \"8.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-linux-arm.tar.gz\",\n            \"hash\": \"734274c23fe56ea689d767da2031fb19ba81c10014f268ded7c63241024478ee1b6b418f114f4b9018aa36ccdb311f7400fea1dfe78465282b51a9e505b0e746\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-linux-arm64.tar.gz\",\n            \"hash\": \"40ab54cdc0966f4b3059851b7b3bd51674a1bbb067fbc58b9eac906e16d9e4f6ee60771c326be8e0e1f4d391203bc6edc31fe32f44cec2705c31f4418bdd7d51\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2227f406bd121cbf1a166ea7a00fc6e0bd52445e7a0bf755140ed21f4e1a1108a5428a2c2b8920a1abc334b80a866181fbdecdfc46c5954561fc8f61b96dc9d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"ee54d74e2a43f4d8ace9b1c76c215806d7580d52523b80cf4373c132e2a3e746b6561756211177bc1bdbc92344ee30e928ac5827d82bf27384972e96c72069f8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-linux-x64.tar.gz\",\n            \"hash\": \"7ff09caf2cdff0ae1c75d0ac731267ffa624025137b079134eb9fda15e1ca386af8422ddd3e93ba084853006e7d58bc04bdf232ad3762580e94658ce3dc8f984\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-osx-x64.pkg\",\n            \"hash\": \"8f659502f51ba955f6285b97b6c0137a808660a503f3682abb80893bbfad206a557720910f678b7b57b77a761ea57fca235015d056a9f9387b5e3e83d1a70c78\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-osx-x64.tar.gz\",\n            \"hash\": \"b04846c47e53e8c986fcfe32f09875562b4b60879a276f0007ed448439492cbcbdd068291ff673a9a22b6d0ac3579fdfabf4ec85d3fa02cbc19dca5b14043f3f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-rhel.6-x64.tar.gz\",\n            \"hash\": \"dc8a4c5de58981a6b83708ed14cf14e5f4444180fc990357aff0c2fb426d76056c7fe8f6c6dd5b64a6b12cc075a8034425262c38e356142310b35e1d003c3a7a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-win-arm.zip\",\n            \"hash\": \"2a55ad0ecb1236a1bbe57472447a0485feeecd60f47305a097ab2c6793f90cc3af84bfc14dcef76f0e56cb863198c42a8c973fa89889ed29fad30c170027a0d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-win-x64.exe\",\n            \"hash\": \"ecddcc05f6994fc45cf41718be78afa73f7ea9a1d5f9b983d43765a8f00a3f45050257bee0b521907a748d1dc4792a5a452e8c7aac3f4f6302ba4de62c82b4ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-win-x64.zip\",\n            \"hash\": \"ff6c9e925f686bd28d8fb5d5b128eb9186f77376a2f3766c835d553a2decd2fcba69872228177d7fd18f707a957447f4ea8e48e6693b6325abe3ea5b65b6c2b3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-win-x86.exe\",\n            \"hash\": \"cc590b8033728f9b588f3f130ee4497cb2b991fdc0c443c5d0749237ba4f17e9a7d0e287b3c84046db27129dc17ff1c91b186bb13c5571de267d72a702ffcdb9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.10/dotnet-runtime-3.1.10-win-x86.zip\",\n            \"hash\": \"3291084a8801c829b9552f9da50ee84e310621febe983ad12b5825cacfd5c3524c9f8079cb2ad946c4ecf9422450db33407c7e2d7f9cbc7d1ef7f1a9437bbf8d\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.404\",\n        \"version-display\": \"3.1.404\",\n        \"runtime-version\": \"3.1.10\",\n        \"vs-version\": \"16.7.8\",\n        \"vs-mac-version\": \"8.8\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-linux-arm.tar.gz\",\n            \"hash\": \"0aaed20c96c97fd51b8e0f525caf75ab95c5a51de561e76dc89dad5d3c18755c0c773b51be6f1f5b07dda02d2bb426c5b9c45bb5dd59914beb90199f41e5c59e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-linux-arm64.tar.gz\",\n            \"hash\": \"b22b60a06f4a1a409eb8eb8f5aec26454ff393bef9677294f0a9d61367caeb2a55fff1e4e282af5250365d27cee3b5cf7c31db8ff1c224f1c7225263b0e4a9aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-linux-musl-x64.tar.gz\",\n            \"hash\": \"c6e73e88c69fa2c81eb572a64206fa6e94cb376230a05f14028c35aab202975c857973f9b5fac849c60d22f37563d8d53689c2605571e3b922bda2489e12346d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-linux-x64.tar.gz\",\n            \"hash\": \"94d8eca3b4e2e6c36135794330ab196c621aee8392c2545a19a991222e804027f300d8efd152e9e4893c4c610d6be8eef195e30e6f6675285755df1ea49d3605\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-osx-x64.pkg\",\n            \"hash\": \"158a1bfe61d74e3d72addd076c8a71b484f920f041744c03a3d52372a2355e2caf79637f3745f32894820ffa28a668d742adb9f4ab66018021ec13e5f80cde72\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-osx-x64.tar.gz\",\n            \"hash\": \"141e1c12ccc5ebfd53b1b804cf0bbc7e6b0af8d5c928575910472ab6781a41d05d4f72164accae24d0e99ed7627f8503fb05f7ed9447af79302baeed4cebec0e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-rhel.6-x64.tar.gz\",\n            \"hash\": \"859b857fad4bc5ad3c4060705b765b184a59c708c3e85d445d3588406d109cd8cd39cca8f2a9084099df9ab191b89d433ce904ca170b20df005f6846e03f1a49\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-arm.zip\",\n            \"hash\": \"c53656bf65e994d70ecdb03a6baaaa57e3dff8c4e19e1d321e60c1bed2c4630d926277b9b5176d60198f98e678f3f91ae180a1529afe40a483449b76739664dd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-x64.exe\",\n            \"hash\": \"9d12890913ec5e0d6894f769bb704673a8e15619ef19d0d1906a19f80be53f6ccbbf3f451e069676a1512755e1cd4fc4ee36becb9aa67e3c8edbce76fc854ddf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-x64.zip\",\n            \"hash\": \"8faf1a077e2d67217e2bbc01aed4b30fd55b1f2c0b2ccee55e3c6523a869949b8cf48a39b320bf822c5b75f01453811f00b997bcaa2a5b79890ec83a8dc50d3c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-x86.exe\",\n            \"hash\": \"fbc027f54221df2f6b8ce86338994df9544aa419d4713fb588ccc29e13f8c7c2c5ca5ea8b3032837bbb3c33d8150cbfc2ee0267510834386a5782de84ed91d4c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-x86.zip\",\n            \"hash\": \"80531e70207446890a750fd2160505c7a125c5b461ae5f6779c7da8f77891cd99031699c0de107464e74059f43c7fca1ea5e44b0469590e6691d79b6c290bd0c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.404\",\n          \"version-display\": \"3.1.404\",\n          \"runtime-version\": \"3.1.10\",\n          \"vs-version\": \"16.7.8\",\n          \"vs-mac-version\": \"8.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-linux-arm.tar.gz\",\n              \"hash\": \"0aaed20c96c97fd51b8e0f525caf75ab95c5a51de561e76dc89dad5d3c18755c0c773b51be6f1f5b07dda02d2bb426c5b9c45bb5dd59914beb90199f41e5c59e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-linux-arm64.tar.gz\",\n              \"hash\": \"b22b60a06f4a1a409eb8eb8f5aec26454ff393bef9677294f0a9d61367caeb2a55fff1e4e282af5250365d27cee3b5cf7c31db8ff1c224f1c7225263b0e4a9aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-linux-musl-x64.tar.gz\",\n              \"hash\": \"c6e73e88c69fa2c81eb572a64206fa6e94cb376230a05f14028c35aab202975c857973f9b5fac849c60d22f37563d8d53689c2605571e3b922bda2489e12346d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-linux-x64.tar.gz\",\n              \"hash\": \"94d8eca3b4e2e6c36135794330ab196c621aee8392c2545a19a991222e804027f300d8efd152e9e4893c4c610d6be8eef195e30e6f6675285755df1ea49d3605\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-osx-x64.pkg\",\n              \"hash\": \"158a1bfe61d74e3d72addd076c8a71b484f920f041744c03a3d52372a2355e2caf79637f3745f32894820ffa28a668d742adb9f4ab66018021ec13e5f80cde72\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-osx-x64.tar.gz\",\n              \"hash\": \"141e1c12ccc5ebfd53b1b804cf0bbc7e6b0af8d5c928575910472ab6781a41d05d4f72164accae24d0e99ed7627f8503fb05f7ed9447af79302baeed4cebec0e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-rhel.6-x64.tar.gz\",\n              \"hash\": \"859b857fad4bc5ad3c4060705b765b184a59c708c3e85d445d3588406d109cd8cd39cca8f2a9084099df9ab191b89d433ce904ca170b20df005f6846e03f1a49\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-arm.zip\",\n              \"hash\": \"c53656bf65e994d70ecdb03a6baaaa57e3dff8c4e19e1d321e60c1bed2c4630d926277b9b5176d60198f98e678f3f91ae180a1529afe40a483449b76739664dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-x64.exe\",\n              \"hash\": \"9d12890913ec5e0d6894f769bb704673a8e15619ef19d0d1906a19f80be53f6ccbbf3f451e069676a1512755e1cd4fc4ee36becb9aa67e3c8edbce76fc854ddf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-x64.zip\",\n              \"hash\": \"8faf1a077e2d67217e2bbc01aed4b30fd55b1f2c0b2ccee55e3c6523a869949b8cf48a39b320bf822c5b75f01453811f00b997bcaa2a5b79890ec83a8dc50d3c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-x86.exe\",\n              \"hash\": \"fbc027f54221df2f6b8ce86338994df9544aa419d4713fb588ccc29e13f8c7c2c5ca5ea8b3032837bbb3c33d8150cbfc2ee0267510834386a5782de84ed91d4c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.404/dotnet-sdk-3.1.404-win-x86.zip\",\n              \"hash\": \"80531e70207446890a750fd2160505c7a125c5b461ae5f6779c7da8f77891cd99031699c0de107464e74059f43c7fca1ea5e44b0469590e6691d79b6c290bd0c\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.110\",\n          \"version-display\": \"3.1.110\",\n          \"runtime-version\": \"3.1.10\",\n          \"vs-version\": \"16.4.15\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-linux-arm.tar.gz\",\n              \"hash\": \"af345605f4f795d90ca469b70ded4a62d8d3536cc1cf8856a856b576a438c1faff9f8b652c4657d7ca211306266d78f80da6ea1286e00812314bd742786d72d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-linux-arm64.tar.gz\",\n              \"hash\": \"ad20fb6d23ce9967cbd88390510c8207172854ea9ef5a3eae78cfd04dd73b6e312aaaa2f999ce81542c15021b4c313238e9ec01c1b7fb5f39b086848d39a244f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-linux-musl-x64.tar.gz\",\n              \"hash\": \"b12487cc4de9a7c1ff266d73f07a441311da2ec14375d313b7006b417a282d873702714ec7934373899a525530520b1230db1c1500dfccadee2c5bee76514eea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-linux-x64.tar.gz\",\n              \"hash\": \"650996a614a111bf4b80b6bbe684aff01cea8b7ff5a119923b5c1eaa5a02e87ac2185730241c438a4e5ee13006fa66820e3b31f0d2f71a1f96db54d3ad4c2575\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-osx-x64.pkg\",\n              \"hash\": \"a82be396a5b1c04c855225748fe3bf9a666747c353dd492f1ae9a47212601ae3968fb167453ce26d003262bb47b3660373ff6c886b906d1cc05b1c7183a645f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-osx-x64.tar.gz\",\n              \"hash\": \"58e1ff007a772527d31b1b09dac953bf508d1de862f0c3221762edd17df22a1823d27a9cce8d18885ac3138813cac2321a8f78fa647abe4a1710e6d8a8867b95\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-rhel.6-x64.tar.gz\",\n              \"hash\": \"c5702061b7bcb296d81a9c28bc60db4ddb3c0009139a10ae7b7aae147e2ac6e3aa1777001318a4a118aea51dc91cf84f721190385638c1cc02095ffa7008d474\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-win-arm.zip\",\n              \"hash\": \"000d07126bdef308ea0f82a7108dd19c6fbf3445e4cc7dd9bff67df3a38eb514363b9125bd0596dbaad40d74891f8b42279dc1da856d1cf06ea744eae9d6b351\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-win-x64.exe\",\n              \"hash\": \"6bfa51de4ee678aae90f233b0cbcc562c8582c0b7a8ed6936ef9c5ed93c2eac496c67466964731a7e11abff45feaa4a2cf6871dd99c9fef98c48bdcc5de0eacf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-win-x64.zip\",\n              \"hash\": \"55d16d4f47d5f0d040d76a51bc632eaf26309929e2a955d03463b317dd7fb2425243fed83176de91c8d990c0bca2d3f7c4f0dd580df7cf6083faeef1633d165a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-win-x86.exe\",\n              \"hash\": \"400848f7d8c19f4886f7659d8c971ebf33145ee2542d574eb4beb5b0c19c30d94e09c6bcece05138c09e0bd4100463ce130619bfa1a59bfb6b245e0783543eec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.110/dotnet-sdk-3.1.110-win-x86.zip\",\n              \"hash\": \"f4c520a60b28995a84afaaffd3e6001796347696dad0005adb158581390fd134fca1c77966075e457eab3c46e387cba8316364646f89479a071f4969855bcc94\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.10\",\n        \"version-display\": \"3.1.10\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20295.10\"\n        ],\n        \"vs-version\": \"16.4.15, 16.7.8\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-linux-arm.tar.gz\",\n            \"hash\": \"02e304af66734fa14042e59b0c47a1c19ffcacef6dd58f293352dd32a79b5abce303010101384fe25d20cb6391df4bdffc8e3cf766f88781a8e3b1f6b1e2ee0d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-linux-arm64.tar.gz\",\n            \"hash\": \"b23585cebda43ec01d866013519c64456733730a7d74593b0583bc54327321e17dedeb3c8127097edceec105e979909db7097ad53ee8ca9dfc434da9007588e0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d6aa43dade937606af8301e758843178954383807b4e4425592a0b8e1fd0c07051862b6939de9c5ce263e6c73076070e662784107e85cce3fecf02333738ebab\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"1a596c6f413c1f37ec6d3f0be74a19a9614d2321b5ab75290d5722ae824206dedf05e8773deac17330c4e9eff97caa56f5e59f5a6fd5d3543d3b8b4f67bbc8b3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-linux-x64.tar.gz\",\n            \"hash\": \"884ec943eefc8397537a193d48d481eae8869eb82a8149f11b8a8bbca0cd75307e82e4db04a2329f03f8a50519afa27c0caa79193fb35a9c776efe1aff2d07a0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-osx-x64.tar.gz\",\n            \"hash\": \"7798a3c351ffc3e89e5c39dae6fa47a81548a0792b3ce0046e269f1a729fba8ac6dc9338fd9649ab5a62ea24c675edddd73d25df65dfeb693366c0a0b0f659e2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-win-arm.zip\",\n            \"hash\": \"992f8a73b7c3970d7ca64250987c14cfac33fd11733d8ee851f119e0036959f2eeb270b6fa7cdaa240192f6209eef3b89dedc45bb8af6d9c2d8b8c2f76dc2ecc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-win-x64.exe\",\n            \"hash\": \"b376a06418779e0ce9d0172dc92d7ea8558f903f46afd703e2fb000c269fa6af800a8a1b7fb8b9d7e0fdd8b93ef599fa069469e7cddee0dacb9ef9e9f8a6c17d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-win-x64.zip\",\n            \"hash\": \"de7c5814e43526363a24f1fdc305936f4bcda62eac98bf6c00afa76f01ff6608a855684e2e487d8820106e8fb916f4c1aaac376e0e5178c856f7718b6ecf6bb7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-win-x86.exe\",\n            \"hash\": \"d8f5f2b674fc83b6d6b8fe285170f16454fb918cfa9b54e52504d265aa72c157e09bef1b553f41e32e3b801f6e5174943f9c8ed5b4a00533c0f54a303b06a57b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/aspnetcore-runtime-3.1.10-win-x86.zip\",\n            \"hash\": \"ad6955598f800dff82251773ac978be946e29aa2b1d68a7308da6e525613be378bb9ae8accfd68ff4eeead0524eecea308cc3223ff45f022e586dd5f3c054b2d\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.10/dotnet-hosting-3.1.10-win.exe\",\n            \"hash\": \"3c77fb710a56cbb438835176c4668f36737426bb36b5966dc9d834f40b8862863763b04e46bca2de17ac22efa9f1a6632f234b856c69d643a753b0e73f20fc67\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.10\",\n        \"version-display\": \"3.1.10\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/513acf37-8da2-497d-bdaa-84d6e33c1fee/eb7b010350df712c752f4ec4b615f89d/windowsdesktop-runtime-3.1.10-win-x64.exe\",\n            \"hash\": \"14a7d97fb258bee024cff3585492ed43c3ec6ac823b50980ddde8241a8bca3e578c38ca28e461630d38c180bd72323e1fcb0ee2e6e65ef9bfc8481df7beef142\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/865d0be5-16e2-4b3d-a990-f4c45acd280c/ec867d0a4793c0b180bae85bc3a4f329/windowsdesktop-runtime-3.1.10-win-x86.exe\",\n            \"hash\": \"1697e69644a1df46922e440c1ea16e583660f79f3b9b109b493a24835ae543ea6180c5167d6dbe89d8dd8991f865dba717525e333e4a2f32319733afa6a320b5\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-10-13\",\n      \"release-version\": \"3.1.9\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.9/3.1.9.md\",\n      \"runtime\": {\n        \"version\": \"3.1.9\",\n        \"version-display\": \"3.1.9\",\n        \"vs-version\": \"16.4.14, 16.7.6\",\n        \"vs-mac-version\": \"8.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-linux-arm.tar.gz\",\n            \"hash\": \"c924ca8be918bd910b87cd17599f418dee13991b4f05d4d75e41aba794b099bf32bb50a8d2b12c9eb92603fc474f7c8ab230228f69693a4fb735a697137ab80c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-linux-arm64.tar.gz\",\n            \"hash\": \"a1e43dab5402abf627458b4c9117d4fe7ef07759520dde6867fc01b01957d59950df32ce8cb3d65f804f6d119ecebe660ef39bed7d1b0b6798a799c95f71c20a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d6f0cd071adb6999df3445f8150b102058d1f90cf36d6d4b63cbbbcfa98fd05b070c049b0e33586126e0f41bd36f1193fe6bde85bef04ce62203bff8f8742de4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"98778ec5ead5008b018e03defbe6eafe5d7a61e81689ae072dfff2135698e4bf4053d72a81851a25129d5969e3dca1258360961318db44adc3c94a7fd5cd2892\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-linux-x64.tar.gz\",\n            \"hash\": \"dde97e3e95fe4109bcb6a16c23b709e8144a75ec46222e62541bd052c9db734008a8ccf3b2441b9438687bf9d2643f0155e795253c77a7d2eb6030bf1af3bba0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-osx-x64.pkg\",\n            \"hash\": \"80835973778ab04502ca127cd41101ad2839f77d96ca63d8265c8203c0acf4346b54f63447ba622ee795afd883b81b83d6ab197012f4d452e76af99397da2073\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-osx-x64.tar.gz\",\n            \"hash\": \"132dc7c4a2325aff25467fe896390574e079a64b5ad04c486249c005c3a91b6b0edc469d09a2947ed626b0c9eb78bda75404763a0a790357acd6562b9580eaee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-rhel.6-x64.tar.gz\",\n            \"hash\": \"5a292b8f3601d6a9fcbe4ec71ea43ae3d314e4bfcc0e0583c2ee96b1f98dbf5fae73532c7e28d92a012c3b546e8dc628c1637770150d0aa3feb52f8bf3b5092c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-win-arm.zip\",\n            \"hash\": \"942ede537d7d733fda6331178c7eeab947714e312955470b5805804d39308c11e67c31f8da6428f39886b0e3a554760e5a5874084c0aad90a327fdb19783342f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-win-x64.exe\",\n            \"hash\": \"12228ca665700e71137f3c305e04fee3a26349f560f2968889349b126151c3b75c72315f4161c106b9defccba3f66dad1031d6d4ef1fa051c6c87c1ba91e5625\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-win-x64.zip\",\n            \"hash\": \"f5c8ec530851fe6b951dbf5d70d2443aebdb37341fe844e567e1023a12e237717e2b78b3be6d84928a177c9d6686d4c33c9d6c5f681583494a47605833649710\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-win-x86.exe\",\n            \"hash\": \"fa6c63561394fd2d5ac6c56fa21cac135d2772d5f5496bb5898d71665d61de399159f9f208be6858fbbeee764286c94fb70549095105b77e68b4377416f5d33d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.9/dotnet-runtime-3.1.9-win-x86.zip\",\n            \"hash\": \"a5930cc22130b88bc6901591b12252e0e9b675d65cc86d9ef49b46f59a6c04924e11a08f59df9b89fe665aff53778a8a734eea270b06798096f900eef7122075\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.403\",\n        \"version-display\": \"3.1.403\",\n        \"runtime-version\": \"3.1.9\",\n        \"vs-version\": \"16.7.6\",\n        \"vs-mac-version\": \"8.8\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-linux-arm.tar.gz\",\n            \"hash\": \"9f1293ef8f3abf5c6a8da7f963de4408d5aed6a9ee29a2c84655871574041980d8a4bb5b608ea129b1bd392890dc577d11c138bd54ce91745cb4960be697cb4e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-linux-arm64.tar.gz\",\n            \"hash\": \"c0f5070deca932d67a80b06268a69146ca403f1657e49d509513b5fe15cb5224cdfb5bec9cd2e63db6c83a48f3cb64d23d8cc30fcd98c620d9936544dbb6ce0b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-linux-musl-x64.tar.gz\",\n            \"hash\": \"3f3d9e96553718f1c8dd8774afb9a892ece64be4f4ec98a50fb4c0f18d358ee739032189ebc38809464ae69aa435e529c65b4f907a59d603e042f649b055a2ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-linux-x64.tar.gz\",\n            \"hash\": \"0a0319ee8e9042bf04b6e83211c2d6e44e40e604bff0a133ba0d246d08bff76ebd88918ab5e10e6f7f0d2b504ddeb65c0108c6539bc4fbc4f09e4af3937e88ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-osx-x64.pkg\",\n            \"hash\": \"6402025b1dd5488e2d7ff391ddc22072a5aa788e53fb4b5ac33d0964e4232268618995fea51bdfe914475a1dc75edeedf8a17914355142fb465cc8af82e13514\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-osx-x64.tar.gz\",\n            \"hash\": \"e6750930beff0ac6b66c569bef9d55cabf3571492d48465f9e457b44778d79fb4bc74e639e5db88abb07b0add7931810a32d76044dc2643b1e44550a25422829\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-rhel.6-x64.tar.gz\",\n            \"hash\": \"6d8c6113bee8fe5d574917fcf7fe3307707f35142710be6b021ea1348659a1146e51616e7371f17b22abe0da26489903a4bd808bd00041f4bde425eef04e9bfa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-arm.zip\",\n            \"hash\": \"b23dcd981506a133bd5481b6c808904f3d0c01ecf7d767233b68556557143ba983b79e5254fac026a7f4ff3dac4230cc21a784118208d1ad2a50991b8bf14981\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-x64.exe\",\n            \"hash\": \"c8519eb9dd5c7f54fa517cf6148e177cbf3b061a95b9feee3cb1161a27ca09d5d4b8c09ee15dfbf6a7b324879f961ebeaa50efe74e93699b12ab8fee349b2b7d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-x64.zip\",\n            \"hash\": \"280c7dee8c6cfa56f1f37efe901d124495ca0a9bdb1f3d535e37ca069ec7bb646cded362517b9d3f63233ecf184914254217914a981037f9050a94480322ad00\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-x86.exe\",\n            \"hash\": \"c249df47ae14366859a5c6f69ab879b2d8f54fc3d8c46c95108ed931b20c0a250387dbd0395096eec6267735d0867a24f54c14d023a827167873f17361df28b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-x86.zip\",\n            \"hash\": \"664f5300ba8a70b3f1bf7031768c17e8b91675d4dd1c5773223023806f14fb6c140940dc0f49d8ad714209d7304ab1f7b1df52b7f7bc3fa29d65148fb3ae60b0\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.403\",\n          \"version-display\": \"3.1.403\",\n          \"runtime-version\": \"3.1.9\",\n          \"vs-version\": \"16.7.6\",\n          \"vs-mac-version\": \"8.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-linux-arm.tar.gz\",\n              \"hash\": \"9f1293ef8f3abf5c6a8da7f963de4408d5aed6a9ee29a2c84655871574041980d8a4bb5b608ea129b1bd392890dc577d11c138bd54ce91745cb4960be697cb4e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-linux-arm64.tar.gz\",\n              \"hash\": \"c0f5070deca932d67a80b06268a69146ca403f1657e49d509513b5fe15cb5224cdfb5bec9cd2e63db6c83a48f3cb64d23d8cc30fcd98c620d9936544dbb6ce0b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-linux-musl-x64.tar.gz\",\n              \"hash\": \"3f3d9e96553718f1c8dd8774afb9a892ece64be4f4ec98a50fb4c0f18d358ee739032189ebc38809464ae69aa435e529c65b4f907a59d603e042f649b055a2ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-linux-x64.tar.gz\",\n              \"hash\": \"0a0319ee8e9042bf04b6e83211c2d6e44e40e604bff0a133ba0d246d08bff76ebd88918ab5e10e6f7f0d2b504ddeb65c0108c6539bc4fbc4f09e4af3937e88ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-osx-x64.pkg\",\n              \"hash\": \"6402025b1dd5488e2d7ff391ddc22072a5aa788e53fb4b5ac33d0964e4232268618995fea51bdfe914475a1dc75edeedf8a17914355142fb465cc8af82e13514\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-osx-x64.tar.gz\",\n              \"hash\": \"e6750930beff0ac6b66c569bef9d55cabf3571492d48465f9e457b44778d79fb4bc74e639e5db88abb07b0add7931810a32d76044dc2643b1e44550a25422829\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-rhel.6-x64.tar.gz\",\n              \"hash\": \"6d8c6113bee8fe5d574917fcf7fe3307707f35142710be6b021ea1348659a1146e51616e7371f17b22abe0da26489903a4bd808bd00041f4bde425eef04e9bfa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-arm.zip\",\n              \"hash\": \"b23dcd981506a133bd5481b6c808904f3d0c01ecf7d767233b68556557143ba983b79e5254fac026a7f4ff3dac4230cc21a784118208d1ad2a50991b8bf14981\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-x64.exe\",\n              \"hash\": \"c8519eb9dd5c7f54fa517cf6148e177cbf3b061a95b9feee3cb1161a27ca09d5d4b8c09ee15dfbf6a7b324879f961ebeaa50efe74e93699b12ab8fee349b2b7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-x64.zip\",\n              \"hash\": \"280c7dee8c6cfa56f1f37efe901d124495ca0a9bdb1f3d535e37ca069ec7bb646cded362517b9d3f63233ecf184914254217914a981037f9050a94480322ad00\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-x86.exe\",\n              \"hash\": \"c249df47ae14366859a5c6f69ab879b2d8f54fc3d8c46c95108ed931b20c0a250387dbd0395096eec6267735d0867a24f54c14d023a827167873f17361df28b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.403/dotnet-sdk-3.1.403-win-x86.zip\",\n              \"hash\": \"664f5300ba8a70b3f1bf7031768c17e8b91675d4dd1c5773223023806f14fb6c140940dc0f49d8ad714209d7304ab1f7b1df52b7f7bc3fa29d65148fb3ae60b0\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.109\",\n          \"version-display\": \"3.1.109\",\n          \"runtime-version\": \"3.1.9\",\n          \"vs-version\": \"16.4.14\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-linux-arm.tar.gz\",\n              \"hash\": \"035b00adc3aecc365017db44771a30300b0858c6eb480f7358fa5c9b931a1d7d2a8d3e44d88a3e7ef59efbdf1cfab1c9dbd52e8c31694a1fa9419805134e2b52\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-linux-arm64.tar.gz\",\n              \"hash\": \"c3675edda58a8dc8ae9132fb1c5cea0b2a764d5c93ce2f94de0109676d4ef64f21f886d4354a10c441c522a2a8f13493c49501d62fc2c9e7a2f480eaff93cf56\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-linux-musl-x64.tar.gz\",\n              \"hash\": \"9f0c180fda2cc368ff354ef3d589a6e6f0d724d89c6b7be3987078159344dca7012df7603af69b6c91de3043f7b4030efffbb36f553c115087e537abb4d51d5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-linux-x64.tar.gz\",\n              \"hash\": \"566beb381872f0399729b0d3b2b505ff353ffcd01fcfeaac521dcec2fb69b22c068aa55ddce08104c57cd6fce3c372b631e4f639dad4d4a08a06162521cec9dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-osx-x64.pkg\",\n              \"hash\": \"446b6f6b6549963ae574c97871bebbebd4ab78857ddd925af0d3bc38caf530fb17acbdb92c8581b9dbd50170d08dec5f29d2b2ce69832374832ce51cd8253f0c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-osx-x64.tar.gz\",\n              \"hash\": \"52cfddd15f39c99086d5bbe7a9a30bdf0aa496cb0cc476c98dbffcacf001fd882ae01b08c0bb0880bda5b98f797bc6f06dc80c023b81715723a2e7ba9fca1787\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-rhel.6-x64.tar.gz\",\n              \"hash\": \"c28aac7bf420f5ed6581e1c0c4cef30bf6f918d0b16f8c4d4b4c5d45157cd396609fd1c40782b5d01fc7e3c1e7de018407801ca8feff85b9e891a99100f7b777\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-win-arm.zip\",\n              \"hash\": \"7a0d2fb41c6923050132b0b8790e096a8e957f9280f0d01670ed5f563504fc9c2ec4e80c9ee81f61005a29724b272008bec5e91f0cdf8fd2307a260cbc012fb0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-win-x64.exe\",\n              \"hash\": \"de561753d9d82fd5ce23b78eaaf8876cf5adcd56889de3462a349e98f7f46631654fb58f8ad23399938a6643b64ebc5d646bab94a1af82362156b0e1c2f51420\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-win-x64.zip\",\n              \"hash\": \"4b54d48026a7cc1e925bf1b53e4fd2035b0aec49a89a67d728fdf68ccfe67ec562c8941475a4661627b234d6e2bd22c21e8006403735a89d863f2f9cc7d56f2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-win-x86.exe\",\n              \"hash\": \"50cbf49184da4c254f0c9489027486fa8f5b890f865c54241c34b5553e25907bd9c4433b94b3fc1c1eeca413aed9e5c4d5023cd97649413f584d6bc40791a4b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.109/dotnet-sdk-3.1.109-win-x86.zip\",\n              \"hash\": \"acae2d9eae7f1420b54474980de32597515014ac5a5c0e57775c31d6ccdd3d3d69c0321a84c10b5c95ff00ef337fad43a53b31801f886df347d103ac1b74de1b\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.9\",\n        \"version-display\": \"3.1.9\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20268.9\"\n        ],\n        \"vs-version\": \"16.4.14, 16.7.6\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-linux-arm.tar.gz\",\n            \"hash\": \"fdeb0c58d7d5d2ced7fc6f5d0a8b6b2fc89f3ba2218014869d80e8aed99c6c5e69ab629e32b11694b8a54ed5fe75f3410d0c973f586ceffaba263f95bdbbfa4f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-linux-arm64.tar.gz\",\n            \"hash\": \"86a9ab4c3401b02510dc8b2d99e73ff083d1de2845965d43bf45aa4dc72527870de86cf16c43965eb981a4f60d8d7026e5050d71a7216b0de4f9e976a169e4a1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8e8e4cc8bf286580ae2266e5731832725d850b727c3196d405fda283aea062940dbf211eca31276447fbd3942f5553271a1e97896084aa737f37b66c859984f1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"016dcf06ee019a3358c0431187a28cb184c352f14e3615e8d8cc5e47450ce964a33217f80b42eae0d90c9e6e3628585314a68fcae2ba191f49e258bb27a22907\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-linux-x64.tar.gz\",\n            \"hash\": \"86462c61dd71adda38ddb0178fc44591cde13de4357652365e0d5c80d14db98d2e1f14a6fab2455b9deebcb910577174473d86f432dd3cd3d0b4284a9dcf440f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-osx-x64.tar.gz\",\n            \"hash\": \"6e66d7344894e5560b2440fa35813a239ccf937445f612f05194069e534bf6fed04ad583efed443f5dd9323e103ce401a19009d21bf9a8b76b2e5723e348bf9a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-win-arm.zip\",\n            \"hash\": \"60e83dd132ba050ac738fdea312ad7041ba63c8e3cdc6600e15dda729c0595338618e4cbe05b0c18ae29d352505dab74ae69010c2ee6b185a809de4ec3d332a0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-win-x64.exe\",\n            \"hash\": \"3acb793699ff89412029d1d0050242cf5e11c07f111bcf4c620f0bd7765571cc791737fce0070b934afc78fb6097b9aa8d6e0124e227f546605c056a2503de2c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-win-x64.zip\",\n            \"hash\": \"a165e61234cea95440383a36fe3bc826af1057f3a987d815667b0157d4cde2a4ac5bcbd6d905dda3ce57259b26619f592b84ae15089b0db7bf5d258225537c86\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-win-x86.exe\",\n            \"hash\": \"9011aca9fcaf15e797f950187d1798a099f0db93872ab5abc0b8832764a531c98fef7a7015dfa011ced8ff1156eddd16025f669e15a41a0b8713379a945c0bcc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/aspnetcore-runtime-3.1.9-win-x86.zip\",\n            \"hash\": \"ee2fdf7be2bce12486aae7b329469c1654290da2d443526c8178f0cdc72396b2e0a7e98ca59cff3b8e26c2f6c6175acae3ef76cc6011b6ef3e4efb3fd934436e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.9/dotnet-hosting-3.1.9-win.exe\",\n            \"hash\": \"674d5f7d12a3fd8070fe5faccda982f5a52a69321cd5018e22d47dfe7cb565667d3402ce1b14b1cf8df1eafcbc9ce56e8c078ed926a273bdc357674e92c221fd\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.9\",\n        \"version-display\": \"3.1.9\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/6a3a8a8b-4aaa-4d3f-bce6-b512f2ef5a2c/e6963fbe57cdd8258a9f0997cc3a6669/windowsdesktop-runtime-3.1.9-win-x64.exe\",\n            \"hash\": \"78c7c8bf4994fbc657d15b4799f4c9313f175a4582764e6abe758a43134b69d9c6af31e4b5e7f71a36a1c6ca617079e79b9136474af92fec202c0d68c30ea501\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1419cd1f-64ac-44c7-bfe0-937fd5e5f39a/e72ec98df78dfbb3a5bbf35b66cb7c15/windowsdesktop-runtime-3.1.9-win-x86.exe\",\n            \"hash\": \"9936845c7c9c0d9e8fc961ee718c8df224fa17047836afe1ee370eb43dea3089b234d7b7c17c08e22bb68691dfad09476b61a154c24e4205db92692ef8ce0a86\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-09-08\",\n      \"release-version\": \"3.1.8\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2020-1045\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1045\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.8/3.1.8.md\",\n      \"runtime\": {\n        \"version\": \"3.1.8\",\n        \"version-display\": \"3.1.8\",\n        \"vs-version\": \"16.4.13, 16.7.3\",\n        \"vs-mac-version\": \"8.7.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-linux-arm.tar.gz\",\n            \"hash\": \"5d766a76cb5c4d2c33ff747b7150c457be41b40d214c4c59356df8768e951061445321dedf77db0dcd7f9c5d4d73cb36fe4fc31b0809e38db4cf3e2bd1488b7b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-linux-arm64.tar.gz\",\n            \"hash\": \"6e2f0f8f30391f33d2862966424dad84b21d039fddc165299d2fb98f1054361bc28bf8199d3737dc24c443181fd512dd5f7738405506ac7999e9141748ba0f20\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b179f16d561a1d1e645ce81307959ed0f404859928d878e30df1d7011edd3ef7a4e5de7737f7672ef26c19a2d2507c6b2af80da75bb5b8a887db42146211ad2b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"6b441b3d658026af0c4ba3d852f4cde5c3a6336c01f0bfb244b1a2619becb44730c2bdb2c0a86b9ef3767660c776e44ce72b9a0e0bcf428b1e9d82c8a7d96267\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-linux-x64.tar.gz\",\n            \"hash\": \"acfb3233ecd06571a6b289802962a14a02dfb41b8c96e7d1516044d0ee800dbdede2a327bf152752fd26aecf6608c7fe31d28cbcb28f6091f4cadda422adf552\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-osx-x64.pkg\",\n            \"hash\": \"927da46bc01cc0695f3c9040a0c4deef05b7c5aebb6fb1c0e94f22bddbfc4f3b1815cc878c433667122ee4022123253b313f13160b99beff581a148a014ecc3f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-osx-x64.tar.gz\",\n            \"hash\": \"4c908e012876a557905f1ca68822d9b7497fb694a9695d015839edb959604c5a566073074b396f5a279b0ea8386527fb15cff8a566adb47407b9b381f49ccb3e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-rhel.6-x64.tar.gz\",\n            \"hash\": \"824909cf0a9c97c20ba34879aece942df409d64804c8f32139e7e09ba65c6d519888fd54ae972627700da2326e8bb767a2e19768fcf9cec040f66b5aabd457b6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-win-arm.zip\",\n            \"hash\": \"3188722413e79cb2ca0c5c91495c87692ceb632f2268bcbb08bf783f11c4191d398fbdfab4d4979e20a953f7d6214d827b77577c6cf0dad6adcef9cdf0f6d4c1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-win-x64.exe\",\n            \"hash\": \"9c9fed0b2bcef6b817d6cdf4ce318ba44b85451a2065b4d1dd47259ccb0e5bb445a03de6b499fc39034094a8b68e77d72f3c010af0d0370601f17cb1e17a65a7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-win-x64.zip\",\n            \"hash\": \"6c6a2e0d2e9e6750df74badf6260d9657838a5fbe2d088f97c7e415379180a296e7a951e579be8182a8f80cd87e61e24c8e3807d4727d089b4e3a2902ff4bc8f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-win-x86.exe\",\n            \"hash\": \"690e884477ba82572ce44b9f414d49c4b03297b98de051920f26c67e56cfaa454d8835ec39b24432ae861a7ed7c628c3ebd25465ddad4f6f59efe0f46546c753\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.8/dotnet-runtime-3.1.8-win-x86.zip\",\n            \"hash\": \"d86682842da87bf7809508436d19e8e43dd4ddf44cce3e19e8a7a1fa1b1dd0f5e9d735a0be078322533d96b3d002c731142a463d2f4dc34979e5525d3f3687a5\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.402\",\n        \"version-display\": \"3.1.402\",\n        \"runtime-version\": \"3.1.8\",\n        \"vs-version\": \"16.7.3\",\n        \"vs-mac-version\": \"8.7.6\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.7.6)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-linux-arm.tar.gz\",\n            \"hash\": \"b4ada8bff572d39262c952506661d6f328d22dd963903ed81a1c7646e1dfbd54e8f6897e0ff189bfae29f69b76b3ddecc17001b5df1ddd9e8da4cf9eebdd22d7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-linux-arm64.tar.gz\",\n            \"hash\": \"1704fb88a04cb5a00de5a22da4ad68237a7cce9aeaac608166f85082a4bfc86ba360b1d81c5ceb40c906cf7407e365aed73fa68a735d4ba90b334ab01a3a8455\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-linux-musl-x64.tar.gz\",\n            \"hash\": \"30916407ee1f99c0f1398a45aa1a480b6d75c5e42488c877b7879ea68a03de07b29943e89e9324c3b14df4ca1d2723116a5c4812b2265cbb103488706aa56b70\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-linux-x64.tar.gz\",\n            \"hash\": \"42154efb5ad66ae3dcc300b2c0573a9537dd916fc48cbae92885a63a0b6d7f7c3a4366ca2298107783bc1f1913328f35e778dcda378da276cff3b8269495d5be\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-osx-x64.pkg\",\n            \"hash\": \"e7e4d1e5081b738acf5ca50a2a9464c0dc1a3974578cdc91a63ae57bfabd00fa9df210f9159b7c06611c307475f80d654facc9ce6b4eb32f55deac5700fc36ac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-osx-x64.tar.gz\",\n            \"hash\": \"68b5ecc76b588399d4f5bcc123caf0c1c1f26625bf21731737f004886f665ebe6559e9cc77f1265c678508726025f66862fb901ae95a25265bc3da4bed69335f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-rhel.6-x64.tar.gz\",\n            \"hash\": \"6ce90addcd54b999a37d6b5f43b203f1d124f364ef52ccc0f8a97800077fe7ebb2116fcdd5b066859a6872d1cad81536c33008ef43d89ba874148e51296e3a02\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-arm.zip\",\n            \"hash\": \"ba94c87834d0b6d3d61f926a58b19fdbc10ba821a6577e18b603d7fbb9cb67aab0563fb16d467190299bb0e14602a65ae5131570f1b41ff4d32c538beae1520f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-x64.exe\",\n            \"hash\": \"1c933d0bab8896e41fc92640c859b18ad8debf5a61d17a0b484d24dc1edfb24640393d17435321f983e2cd7d9e2fc4fc9f679bf6821ffc2fc0602803499c6169\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-x64.zip\",\n            \"hash\": \"a9e391ce51bf63fe223ca020de4be3e1cbdaa42ca49b3f46ab21890afaa58747eedec3937026ae4f046a8a584c802bc604f635dff5a71d6ccd755ca15c5cc566\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-x86.exe\",\n            \"hash\": \"7e7cafb8bc81b7bf83f160e2745e079496b6aa36f51c5c4161db296e3c898b1b2b66442e455c595f7e4d19630e39b1c11a766ff473431884831aafb3858a9c08\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-x86.zip\",\n            \"hash\": \"ac0ec94bff595143b026f352f1957f0cca009945d13729cf90ecaaea017b6d75418650d604913da16957ddfece7a157f70cf6125080a1bcb303d09f583823437\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.402\",\n          \"version-display\": \"3.1.402\",\n          \"runtime-version\": \"3.1.8\",\n          \"vs-version\": \"16.7.3\",\n          \"vs-mac-version\": \"8.7.6\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.7.6)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-linux-arm.tar.gz\",\n              \"hash\": \"b4ada8bff572d39262c952506661d6f328d22dd963903ed81a1c7646e1dfbd54e8f6897e0ff189bfae29f69b76b3ddecc17001b5df1ddd9e8da4cf9eebdd22d7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-linux-arm64.tar.gz\",\n              \"hash\": \"1704fb88a04cb5a00de5a22da4ad68237a7cce9aeaac608166f85082a4bfc86ba360b1d81c5ceb40c906cf7407e365aed73fa68a735d4ba90b334ab01a3a8455\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-linux-musl-x64.tar.gz\",\n              \"hash\": \"30916407ee1f99c0f1398a45aa1a480b6d75c5e42488c877b7879ea68a03de07b29943e89e9324c3b14df4ca1d2723116a5c4812b2265cbb103488706aa56b70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-linux-x64.tar.gz\",\n              \"hash\": \"42154efb5ad66ae3dcc300b2c0573a9537dd916fc48cbae92885a63a0b6d7f7c3a4366ca2298107783bc1f1913328f35e778dcda378da276cff3b8269495d5be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-osx-x64.pkg\",\n              \"hash\": \"e7e4d1e5081b738acf5ca50a2a9464c0dc1a3974578cdc91a63ae57bfabd00fa9df210f9159b7c06611c307475f80d654facc9ce6b4eb32f55deac5700fc36ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-osx-x64.tar.gz\",\n              \"hash\": \"68b5ecc76b588399d4f5bcc123caf0c1c1f26625bf21731737f004886f665ebe6559e9cc77f1265c678508726025f66862fb901ae95a25265bc3da4bed69335f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-rhel.6-x64.tar.gz\",\n              \"hash\": \"6ce90addcd54b999a37d6b5f43b203f1d124f364ef52ccc0f8a97800077fe7ebb2116fcdd5b066859a6872d1cad81536c33008ef43d89ba874148e51296e3a02\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-arm.zip\",\n              \"hash\": \"ba94c87834d0b6d3d61f926a58b19fdbc10ba821a6577e18b603d7fbb9cb67aab0563fb16d467190299bb0e14602a65ae5131570f1b41ff4d32c538beae1520f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-x64.exe\",\n              \"hash\": \"1c933d0bab8896e41fc92640c859b18ad8debf5a61d17a0b484d24dc1edfb24640393d17435321f983e2cd7d9e2fc4fc9f679bf6821ffc2fc0602803499c6169\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-x64.zip\",\n              \"hash\": \"a9e391ce51bf63fe223ca020de4be3e1cbdaa42ca49b3f46ab21890afaa58747eedec3937026ae4f046a8a584c802bc604f635dff5a71d6ccd755ca15c5cc566\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-x86.exe\",\n              \"hash\": \"7e7cafb8bc81b7bf83f160e2745e079496b6aa36f51c5c4161db296e3c898b1b2b66442e455c595f7e4d19630e39b1c11a766ff473431884831aafb3858a9c08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.402/dotnet-sdk-3.1.402-win-x86.zip\",\n              \"hash\": \"ac0ec94bff595143b026f352f1957f0cca009945d13729cf90ecaaea017b6d75418650d604913da16957ddfece7a157f70cf6125080a1bcb303d09f583823437\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.108\",\n          \"version-display\": \"3.1.108\",\n          \"runtime-version\": \"3.1.8\",\n          \"vs-version\": \"16.4.13\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-linux-arm.tar.gz\",\n              \"hash\": \"b2f074cb6820f8859c61e04a355087828028f5c11912e0d1bcb0f93c5f3597eb60774542b0f3f3955f81fb459784036f2d4a9bcfcc0ba06965d671ed004e52ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-linux-arm64.tar.gz\",\n              \"hash\": \"b83513ffcfcddaca679edbd731ec4dbe8d653c46e626f0e1dcb700559a16effe0859d8c9a9b4a5e79e3de23521e0f37f8794e493075018c0fd7b8df7bc889d54\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-linux-musl-x64.tar.gz\",\n              \"hash\": \"540460c93fb3fde7b439c28c2200dcb095250ad2320fb04ffb3d3b2441717f70375fe8764d9e14a1dea58ef1ed6a1b884a32e1e5e4ffb57a7f6dfd1b954c7a55\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-linux-x64.tar.gz\",\n              \"hash\": \"9286a070267f5520df6389936ca492660e870ffa6929ca0c2370b5ab7cdbda8c32059263ff232eaedc141ce64797a264ba15d9107e00e4b9f66eb8b0e5ee5bd9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-osx-x64.pkg\",\n              \"hash\": \"f03e227b1c343817e592b67718d34cc3c7a5f081584ff394f67b22dd0cd557629509109c8d972c0f6221c7882dea11f776dbb800ea3ac31bdc038fd4e91de992\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-osx-x64.tar.gz\",\n              \"hash\": \"d6e2b29cfe915c5d212c05b22d26108a141a70783258e31a47283a54c8e4394fe891ce3050c0f61e4ea8217f855d72e72e252b580d991a3e69b261f8f9d25dc3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-rhel.6-x64.tar.gz\",\n              \"hash\": \"57cb2d148fc06704e311e48178de8db0a4b8d2cac3ca17369e8aa7a464b437d0f3724551535cf5953df64963813ffb5ac568d1b09071a64e5ba7b0e87efaff46\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-win-arm.zip\",\n              \"hash\": \"8d7f126f08edb9c1f5abefe07b860a8a85c0fb065c1916e67a8a596c2d6f91169d42c26b687237503852ad3d837010eee9e627256d34714d32f6fad3b46b0c03\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-win-x64.exe\",\n              \"hash\": \"a7af970ec8df5376220865d881fee730d0b1aa913ac42d8c07847db1eb7a9cc80d5889fd966540e50732bc26c46afc41954d842de850fe34c448ee27d9c37afc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-win-x64.zip\",\n              \"hash\": \"0fd14b4247f11f1ac23fd4f843bdae6a6eed13891fdfb9f2b3bdcb20492e33c1beec98c06e19ef78ac495469d2d2192e733b77d727d57a76f1506ed3fac60019\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-win-x86.exe\",\n              \"hash\": \"9ec847a48ba1a360e513ef3dfd66518ef5feb810345fb23f1bff7c55d20e62b69b3b65e4cdce485d6a4c21553f93f76369c04979e161bc207878f4bfeb056145\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.108/dotnet-sdk-3.1.108-win-x86.zip\",\n              \"hash\": \"5f0f6710702747e476f29bf2491a6482d64d774e7a67b92533554c7833c7cb196826953dae841aa45f2af13738c7f8850e30756bc8c271a7cdfe3e6c7fe33182\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.8\",\n        \"version-display\": \"3.1.8\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20234.8\"\n        ],\n        \"vs-version\": \"16.4.13, 16.7.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-linux-arm.tar.gz\",\n            \"hash\": \"7aa715821218ac8596d5d1e0339b3e61b9831c9286a4bead3feb21ff617c23880302feb619d62077c55079948f61b93d0c02a397eb070a475c4e742e32d360b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-linux-arm64.tar.gz\",\n            \"hash\": \"80e05a22b4c82599b4b25c7943a124b68db3e70f7d0757d64bda6b4b46bed7b54813caa029ab16e515678d692f225eadef35a70435c1384f5b8e2f96c7cf3edc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f4c2e25ffe8c0b1181d33e729f3a1cf312735020f032440837810e3863b103c6da87ce4bbee504cebb6a8f3cadc7e800a3870c9812eb9913d39686107cee2652\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"e1ca4d3e7b8e5f549d7b62b1d56b191c04f2909b8965565561174cc0d54622aec45b07f115560c87615bb0d96b32980ca593fbfaf3d28359d61f0f6245c7d218\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-linux-x64.tar.gz\",\n            \"hash\": \"dc332c14a6b0362becf8c8bbb1e3cc6a93bad1ea9c883602fdba35b53b3bf8078ede079c5918723add03ccebee46165d7f6d1ee4fdc1e04f29257a8155e33622\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-osx-x64.tar.gz\",\n            \"hash\": \"0b191939fb21efd9699e6858211cba457ac00eff7db4980beb36c743d118fea2b75a73e79ccaa7b23e35c7187183b8584ad407b26d3dd958a70a1094f4c7b85e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-win-arm.zip\",\n            \"hash\": \"6b57e34aaa2c071e3ed33f6db4952642cfd8f87a1d6bbdd98a08d7f5f53e9f871e0dbe6a56efa6ad9e6246a3094734c7d95d994ae56c04d5fa152ffc4806d829\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-win-x64.exe\",\n            \"hash\": \"6633730d8956a483beee5c1f49fc35db5f3a968e1b391b71e9eeea8d2c83cadd69246872dcd26e6f262ff5a3d5197acfe90ceb854aa512d8ad0bbb2052dc1260\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-win-x64.zip\",\n            \"hash\": \"95fc66351c93c873e98bf3559894dc6bd7cc94a4507261294696f4035c5934735e7c67cdd81998e59d14d6719cf10ce7d8d9e142c0a525c887b164407acc09fd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-win-x86.exe\",\n            \"hash\": \"aaedf6362cc05d839ae880a4cd0c069d76fc5e955187966d6ab738ff28cfb76de073cd0f5e5260dcded613dbfb21ef368e689807e851dcf92a77493abbedd7df\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/aspnetcore-runtime-3.1.8-win-x86.zip\",\n            \"hash\": \"201fcaba63d51ec0ef450a20d69ab24371899a00c43ac79a2eeb6e21dfae2398bd9bf2c27ddb3bafadd220ae326b4e19481311b4437413c3c1e845ab7e6379d9\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.8/dotnet-hosting-3.1.8-win.exe\",\n            \"hash\": \"27a853d2ee0b1ad25a0b035603e2d1981de94c63a50ce964ae48fcbdf4b8bf15c838578b18c20fbf60a40b0ff50c0981167bfbb6e40694b91dd552dac2f5bc21\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.8\",\n        \"version-display\": \"3.1.8\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/add2ffbe-a288-4d47-8b09-a39c8645f505/8516700dd5bd85fe07e8010e55d8f653/windowsdesktop-runtime-3.1.8-win-x64.exe\",\n            \"hash\": \"ee3d00c98bd4fe5ede558eb64c499556b8f1a09908ef429b997da8a92115f3931f0338bebacce894e1fc4942491ade97b22e44a1377a65ba40affc5301d1996c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/712f4ec2-79a4-4897-af5b-6c814dd49741/2025ef17bfc218cce1699787352d84b8/windowsdesktop-runtime-3.1.8-win-x86.exe\",\n            \"hash\": \"a11a69f67ee478fbf76bf523a4435a5ac68199c017665ba4a5917ffccf6384e7f7b5e871a6534d591db8cb4805162f0b41961f6d90698a04332b318b3fd644ff\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-08-11\",\n      \"release-version\": \"3.1.7\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-1597\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1597\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.7/3.1.7.md\",\n      \"runtime\": {\n        \"version\": \"3.1.7\",\n        \"version-display\": \"3.1.7\",\n        \"vs-version\": \"16.4.12, 16.7.1\",\n        \"vs-mac-version\": \"8.7.2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-linux-arm.tar.gz\",\n            \"hash\": \"a586ed88cebbef298cda04c94e1809017800abea50668e18bcf27c3aa1ca114bb16963bcdcc4fd535288838120cba52966d594ef395bb8fac11693f64c97ccc1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-linux-arm64.tar.gz\",\n            \"hash\": \"d5e97a7c3e495ffe03f62415802a5a6f8fc57e9ee86f7730e6752b016747514507fbf79c0e65a815b9d09fb35af05026ca8ea99626535b31703a217559909309\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7ea8b5b953528c35745aa3c53b1fb47f7b19a1c9967d8e00ca73e03a025cbab158fad8eaac917a13e60caa4a1e9fa50c681379d7d8ba52173b0165242d26cc4f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"b982c3f397f40a79b2bbe852083b648dc0c2ee530307127a1b6f5020d32322bd9eecaab9440d729dcaa5c1ce408bf37450411f5a0d83061b2ddc84e4dc043d3c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-linux-x64.tar.gz\",\n            \"hash\": \"6919e87b0e8e2c42349acb1042dba81eaf2fdadd8967f9b78e192676efd883962e3b928c423055cef010bdf1923527817553cd24036303ee2741485fc44fb116\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-osx-x64.pkg\",\n            \"hash\": \"63b3aeee64ba3d13961c35a32f781d56ff752a215f66d7a061185c8cdb9e16f8e35b857c97d334365fac25006bf5c284a28f54e8cac45b72748cd9225d2f42bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-osx-x64.tar.gz\",\n            \"hash\": \"63e7eed252dd0e0268beff8c31647cb04472dc0775a8c08d3f07c9b2950f4fed75bd3c2b04a57cf4cf973983c7f3b2e6f7444522fafce4322d7d34fa2daaa212\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-rhel.6-x64.tar.gz\",\n            \"hash\": \"10b6e2f373e2b69e5115ce5bc1705313cf9b96bd7b12737b11e395f5255db28a17cc172d71dec194e33c2942fac1aa75d5fe74415c63541b2ba2e54b27515bec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-win-arm.zip\",\n            \"hash\": \"d2092850d2faeadc3e36815d7b8ad5b51b61fc4bc1e1527e37d718bdb7ea0bb23de24d154c2db3c3dc4406105b117edeabac0b25cd916715b0f09b6b2ca1104e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-win-x64.exe\",\n            \"hash\": \"2ec260d69a0832b9edda9e36c9dd01ad330c3a8a09a75779de1dfa2ce7e4c32b8a52738302a5fb8cb6d8f52361e92256a05c6fb3709ec7f5712a3f1492b17165\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-win-x64.zip\",\n            \"hash\": \"51ef166e9c935ee236b16aa2f87e985664740de7f4a53c1c1becc04a42d7c7cd52afa652d9b2e477a014f959b349826d6f8c2f703ab11b312fcd202b0b22d1ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-win-x86.exe\",\n            \"hash\": \"860dfd37be7ad75217b92c1e441cdd17b0ac113ed63ac203192e81f0b327831d28bfcec8b8d769ed4d0bf01daca9dc0f0de9454d5ed5d4e09ee360a243123f6e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.7/dotnet-runtime-3.1.7-win-x86.zip\",\n            \"hash\": \"150064503388e966465a02b46fa7aa35217a2b18bd0a21e818c8b51f9cf6186ebd02473ffbda8ab8b28de053fc4843e29de6ef41173919038e3ef13fef7d4450\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.401\",\n        \"version-display\": \"3.1.401\",\n        \"runtime-version\": \"3.1.7\",\n        \"vs-version\": \"16.7.1\",\n        \"vs-mac-version\": \"8.7.2\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.7)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-linux-arm.tar.gz\",\n            \"hash\": \"2c84d8442fd872aafbdff7a1f131c4bacfb75ca69426d2aa2b9f3cf05a8e3a365923c14f7eb732113dd7a9fdc674c955e70817fb355aaabca25b79ed33356a15\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-linux-arm64.tar.gz\",\n            \"hash\": \"ab9afd226b920dce24bcd372cccb1965163829c26d1f11f1df3d8f9be5afb1d87f26b23e5fbeb58cf4ddaa040b8228fa00a786c379a454b9d99c2964197ab4cd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-linux-musl-x64.tar.gz\",\n            \"hash\": \"1356cdfaa6daa275fc4176fa528fe0e741693a5ca9d13f6bf355c3b970077fdce414b6558ea98653a29cb9c364aa9fa784edd027d0b97b25fcd96263e0c850d3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-linux-x64.tar.gz\",\n            \"hash\": \"5498add9ef83da44d8f7806ca1ce335ad4193c0d3181a5abda4b65e116c7331aac37a229817ff148e4487e9734ad2438f102a0eef0049e26773a185ceb78aac4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-osx-x64.pkg\",\n            \"hash\": \"3bc2d8478d51a5936cefbdb1068a879359380c75d30074fe736df75dd159f893d99935852db043f0a7d83cf22b204b1d27751eb520976fcc95af145d84e014e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-osx-x64.tar.gz\",\n            \"hash\": \"5e18bb49ce41856d599e089c881950a3a9397a9866227a24bf9ab1a858fc38545b5b3fd5fa53f245acf5dc79af94d64a477a23b5b11cf87953e9e115501d5c8c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-rhel.6-x64.tar.gz\",\n            \"hash\": \"18646573c9329a87c96bbe5e3511b12ad3e56c37141709ce16592199126d52d09ac246492bd891107fd22ee309c35bf6fcd2b975f01a29868ef58cfd4493d2b3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-arm.zip\",\n            \"hash\": \"c00fee38f2f2f0ab760ee9bc811400568a6f5f3045d1d079e7c8f3da8919e21fd02b129ec18e9f3fbf087733b83adca5bc56ca75d207657013b7624d7b1d4596\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-x64.exe\",\n            \"hash\": \"d14cb0bd419e009ec4aefd06e33066c5ba0a7640c9f4b40a619fb766e8c1b33fe812f290169a029ecb991d47b6b7d777a8cb57016932c103c8f749ff6222e893\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-x64.zip\",\n            \"hash\": \"ddb0029e64ac80bd6db11dfafde46949a0f3170ef25e23923a474bb19d30f83c56c7eeff3248894635c30e391628fbf0fae4292ff025dde8ae5a153e2496082b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-x86.exe\",\n            \"hash\": \"367815d46a2d5efcd850caa061fd706bdc8e10d8c9b920d5e0a7d6cb700af1e42c4301fb5cf54c1fefde8e9e89f80a22791e4819d0b04f781d9ac3c04292c6af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-x86.zip\",\n            \"hash\": \"d07c6577f81e9c851f3fc15041b74c325ec0d7706a343ac38b90eae4b1bab721f312a07085195ee4974e78a25d42706fd00abb9f1ba8de5757f4bf77267c1e71\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.401\",\n          \"version-display\": \"3.1.401\",\n          \"runtime-version\": \"3.1.7\",\n          \"vs-version\": \"16.7.1\",\n          \"vs-mac-version\": \"8.7.2\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.7)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-linux-arm.tar.gz\",\n              \"hash\": \"2c84d8442fd872aafbdff7a1f131c4bacfb75ca69426d2aa2b9f3cf05a8e3a365923c14f7eb732113dd7a9fdc674c955e70817fb355aaabca25b79ed33356a15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-linux-arm64.tar.gz\",\n              \"hash\": \"ab9afd226b920dce24bcd372cccb1965163829c26d1f11f1df3d8f9be5afb1d87f26b23e5fbeb58cf4ddaa040b8228fa00a786c379a454b9d99c2964197ab4cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-linux-musl-x64.tar.gz\",\n              \"hash\": \"1356cdfaa6daa275fc4176fa528fe0e741693a5ca9d13f6bf355c3b970077fdce414b6558ea98653a29cb9c364aa9fa784edd027d0b97b25fcd96263e0c850d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-linux-x64.tar.gz\",\n              \"hash\": \"5498add9ef83da44d8f7806ca1ce335ad4193c0d3181a5abda4b65e116c7331aac37a229817ff148e4487e9734ad2438f102a0eef0049e26773a185ceb78aac4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-osx-x64.pkg\",\n              \"hash\": \"3bc2d8478d51a5936cefbdb1068a879359380c75d30074fe736df75dd159f893d99935852db043f0a7d83cf22b204b1d27751eb520976fcc95af145d84e014e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-osx-x64.tar.gz\",\n              \"hash\": \"5e18bb49ce41856d599e089c881950a3a9397a9866227a24bf9ab1a858fc38545b5b3fd5fa53f245acf5dc79af94d64a477a23b5b11cf87953e9e115501d5c8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-rhel.6-x64.tar.gz\",\n              \"hash\": \"18646573c9329a87c96bbe5e3511b12ad3e56c37141709ce16592199126d52d09ac246492bd891107fd22ee309c35bf6fcd2b975f01a29868ef58cfd4493d2b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-arm.zip\",\n              \"hash\": \"c00fee38f2f2f0ab760ee9bc811400568a6f5f3045d1d079e7c8f3da8919e21fd02b129ec18e9f3fbf087733b83adca5bc56ca75d207657013b7624d7b1d4596\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-x64.exe\",\n              \"hash\": \"d14cb0bd419e009ec4aefd06e33066c5ba0a7640c9f4b40a619fb766e8c1b33fe812f290169a029ecb991d47b6b7d777a8cb57016932c103c8f749ff6222e893\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-x64.zip\",\n              \"hash\": \"ddb0029e64ac80bd6db11dfafde46949a0f3170ef25e23923a474bb19d30f83c56c7eeff3248894635c30e391628fbf0fae4292ff025dde8ae5a153e2496082b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-x86.exe\",\n              \"hash\": \"367815d46a2d5efcd850caa061fd706bdc8e10d8c9b920d5e0a7d6cb700af1e42c4301fb5cf54c1fefde8e9e89f80a22791e4819d0b04f781d9ac3c04292c6af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.401/dotnet-sdk-3.1.401-win-x86.zip\",\n              \"hash\": \"d07c6577f81e9c851f3fc15041b74c325ec0d7706a343ac38b90eae4b1bab721f312a07085195ee4974e78a25d42706fd00abb9f1ba8de5757f4bf77267c1e71\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.107\",\n          \"version-display\": \"3.1.107\",\n          \"runtime-version\": \"3.1.7\",\n          \"vs-version\": \"16.4.12\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-linux-arm.tar.gz\",\n              \"hash\": \"e36f8192127c6d52c34fe15dabc23d4b9cb6e48d88a44355f687d974b13fe4a56dcb142fcacd9d959e67469cc31455b10b1fad8a5fdebbfc3f6cebc99d63dc5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-linux-arm64.tar.gz\",\n              \"hash\": \"80f980455452b3d63c55585b8009a5475331202dc60c2d8b6990bf4ef367a652e07dd29d1e2d879042f65f90ecebadd4178042f3446186dfbdf530c8e39237a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-linux-musl-x64.tar.gz\",\n              \"hash\": \"8fbdd86a5031e980241878c44da6e2c6db1c34bd1619534d856d0911aec3f00b5f7c16ab6a8ed3cd5abf4cdbf5424abc46762c98dfff78376c151cdead41dcf9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-linux-x64.tar.gz\",\n              \"hash\": \"5ff916fa72e696debc2a571e90bb580ee071c8fd32461aae5bd95e2c1bd7d5f1088291233f7b914fa5948416346d7da3f110a8cead65db8fca615608cd12bef8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-osx-x64.pkg\",\n              \"hash\": \"a3fa61b0aac3545fe1a0929c3c5c6af70f4194b677a5c490f7076ca1688ccf6d3e1350f62b7ae22d494f5312946ad06b98b6ed2de59f76c7976cd43eb577d476\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-osx-x64.tar.gz\",\n              \"hash\": \"e9e7d8710f72d623249a1356fe1e39a5261070bafc33d6ace6dd4281f1a5767afedfda831f0d2e025626428526cf016877cab2f03601e9ea6f7f1d87ed5e5bd5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-rhel.6-x64.tar.gz\",\n              \"hash\": \"59e798b4319f218ffca3dcb846f4ecbe7746e2636ce534e44f56c21c7e5e3424b1e0cb5663029680c0b6655eedcae6c4c212946b67903fd1c05ed40a94ee9e6a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-win-arm.zip\",\n              \"hash\": \"abad56f85d7b007d91c332cc9168f758b279239fd81a59af092b9af1507f49d5da6638bfb96400003e8a7708e43bb7e44940e76c6f6d210b0b701608f577dc5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-win-x64.exe\",\n              \"hash\": \"1c75468a16e18d1a12d776334dd9b34671a2f5bc3c4bc47038fed58a5eaedb6ab506849aff0b829531b4c5bd87e7c2509ee9b8f079c93dd7e45c147b3a8984aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-win-x64.zip\",\n              \"hash\": \"f22ae648143f6ebedf27bed5ac94c67623f41fd24164d0e6a76addeaebc82a47899fcf68b9b0e57edd5ad89297aec739446bc577d9aeb1660dff3d7c90875da8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-win-x86.exe\",\n              \"hash\": \"dbb23a68ebd730aacb86b9425caed0e7befa6b7af6fa63a2a742b6b6e3aaf418696793deda3f98c32fbdd58f13b859341de9ee309844c4a72554fdc33dcbad91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.107/dotnet-sdk-3.1.107-win-x86.zip\",\n              \"hash\": \"19cbd5516f67f255cd3994121f39518313d87e4bddf3cefd699b43c109d80b8050cdb2db30b445139eaa081bf29424281c57186f868ad69789b29fcc761168cd\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.7\",\n        \"version-display\": \"3.1.7\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20205.7\"\n        ],\n        \"vs-version\": \"16.4.12, 16.7.1\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-linux-arm.tar.gz\",\n            \"hash\": \"475d5d04365602a17983d4bccbb3d6dbd7cac9db4a4c68cb6ea6398ff1769af4168d0f96c5fdfddbcbc9fa7e5adc18c078bbfcfa896f030aa8dd88d48a939923\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-linux-arm64.tar.gz\",\n            \"hash\": \"3e7986fa13e0e1b00888d3cab03bed8e97325cf3a542d1ad5041d6725d134ec206781f53d44a57ccc3050da33f320ce39c688ce33590b31915fe2ad2d0b192a7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f986ef6b1efddf8c4dd2fff297bf596668bbaf3e7e43827b8c1a95cc1ac3236bbeb33ae467eaf1e2d0ab1914030c6f15bac4296c8ba2e185448272c4caadcee7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"43df2fa8660a9dff03cf8412ad7a78f9e790be0cbcabc69c4ab69c640a3efbe3327cd2f98101dd6adf8a8a51e2692a2404358c2a3457321098dc815cc87c55dc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-linux-x64.tar.gz\",\n            \"hash\": \"c8c866faa5cae5511ee833b70d65a605ba91970f1ee59a2dad1fbcb84aa8743d07c47bd66fb1c37ef8b641f1b94b6f382f3f5cb69d7b1fbddef9043e4848c1cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-osx-x64.tar.gz\",\n            \"hash\": \"66ea90160dc53ae48da0cbb3cfb7177fd1b1ba61e8b71d59bed7671c3c6fc823c3e8bdcbc4ec157a7d7685683982bc51643e7662bb57e9c03b51bec4fce5099c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-win-arm.zip\",\n            \"hash\": \"b53518a773f9bbf4056514a96a53d82c52277302cc7f0a94036639833a8b8ddd52a0c9e925cd1deeb885a4c906e3aa2b325b4f0df44bc9307991be9abf2ba87f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-win-x64.exe\",\n            \"hash\": \"34c3a9f3f90039543682808b0b531198590376ad524cc19907307ef8be0cfc726bfd82ebd32e99c075a8a122ec8c3480b8089125944eaa059e9155ae00ce5f65\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-win-x64.zip\",\n            \"hash\": \"f330c8b02699340503d4129626c0290097dc79d5d5cf97941ce9344f78de5e9bd3cba1a726b56753db0cac9db8b531c21335a3ea04dc740f09e2e5327e9f423e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-win-x86.exe\",\n            \"hash\": \"166ce073d019ae8d2b59cba84171b0dba9f911201744014176c98efb2d8f0e936cabf0dd0c01cc1aa2d7b43cee63386265055e7ed63ab9c5786c794d0ab585b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/aspnetcore-runtime-3.1.7-win-x86.zip\",\n            \"hash\": \"0900fa40890cc5a67203f689e4cbc6ebfdaac1edfab712512f0de19c003a76d94a569374747d0fd6c8fdeba286ea375504d851ccd69c5d10018480c4c75e7b48\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.7/dotnet-hosting-3.1.7-win.exe\",\n            \"hash\": \"f5512cbe1ab3b16a834a49a48c1b4577ff7bd20f34ea9684104a5e7459d7ecefb452e312ae7914e11dc061b4185f289087baf917689aa7fc65408c951ef2f986\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.7\",\n        \"version-display\": \"3.1.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5e4695fb-da51-4fa8-a090-07a64480888c/65aa842670d2280b5d05b8a070a9f495/windowsdesktop-runtime-3.1.7-win-x64.exe\",\n            \"hash\": \"db998fd0ae309f44382dced73ebbf1b8782cfdcd635d64a8314b18300d232677c666396e161ec0bb31e50774b57dbf770899d4368222659a69eaa60c0182bc6f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3e6c8a13-9d89-4991-b683-b6bb279bc096/d1c44ba0c34f2be8878c36d27287e1a5/windowsdesktop-runtime-3.1.7-win-x86.exe\",\n            \"hash\": \"c51e02d718a05afaa11e66ef23809518cbe377b4c7595b3b0b232dd809c9cb83729db3b62ee14117cdc521d093bc842a842b683cba276ca34b2d16e0f8d8a826\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-07-14\",\n      \"release-version\": \"3.1.6\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-1147\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1147\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.6/3.1.6.md\",\n      \"runtime\": {\n        \"version\": \"3.1.6\",\n        \"version-display\": \"3.1.6\",\n        \"vs-version\": \"16.4.11, 16.6.4\",\n        \"vs-mac-version\": \"8.6.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-linux-arm.tar.gz\",\n            \"hash\": \"8500e595a26e4d658ebce2103d2640237b472eafc4b8347b44ca2e7540137d32ed3c18d6a0159012ec46e3950bcdef8f1d50b085fa768e52f41002f15d35943f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-linux-arm64.tar.gz\",\n            \"hash\": \"cbaca4286929aa421796f3f0442a820d27b29dc2ef7e3ed2fca1bb80804ce6b287e37e754bbb014f5352efa86e6630872084c86b30611b1f126918745d5feab4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"885d8bd485fdf7dcfc5894179eb69475d3f452a3917a038ac6a2cd9918f718c31e634caff26b8868c6e2f6f97897e880629a9ac24ba0de4080699593055306d8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"373643ccec92752468978e312f86725718c650a0bc83d8ea3faeb09d0ccb230c0c4626d6c5cb10481cf269687b01070b6fa874276963923872a6af748d2617bc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-linux-x64.tar.gz\",\n            \"hash\": \"3d0667120f6af71f7bbdd8493f75952df70396886f6e167961103e0f1c6c5566ef9730c4abec060734edfa4dbcebf48397dca4e2b8f5308fb01cd4ecc2e4fe6c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-osx-x64.pkg\",\n            \"hash\": \"309534dfd1dfe4e075b49159c9e792196bed3108194d4bba411828c3a207a97b1cdb67b50cef8bd2b8135c09fc8379128f008aa17fa0a94cb723f067fd46b004\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-osx-x64.tar.gz\",\n            \"hash\": \"ea8b7a2b129102cb7d99c38ae142f19e10cd6cf1d8cfa878e6f0c612a2dd0d5abd8e8541baecb1efc59f64c6516e2dc5bf3a3c8e3a586c49ede6c280c20555a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-rhel.6-x64.tar.gz\",\n            \"hash\": \"5ac7c2630a8ab920988d77c8e0dd4db77d7671f106ce55d8e8b3d628568caccdfbf958f3fe57a213238ecfc86b518fb32913b7edbb0505cd4dcaa4fab6886789\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-win-arm.zip\",\n            \"hash\": \"8c1a5f29ff5b7cbaec6a5c57dcf233018538d0fd63b86bd183cdb4e7ee17324cb8f05f3e703c6409eaf7fe1d3702639ba01b731fa80d8f88a9f1b3987aeabbf6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-win-x64.exe\",\n            \"hash\": \"fe97c3902a2690ead397981dc18609de7ba41d87a304fca3f6d074837936b258a398b78ce316a2b19d8461ee5ff8a2868d1600b193808ee64820723b790985a8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-win-x64.zip\",\n            \"hash\": \"61ddeee464518f11c3afd9b860b24930076e1b01244d624ec50ebac599efecea11d4d08204af84c8dd60d279780471e9bb922ae720953cea764a85559ee2c58d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-win-x86.exe\",\n            \"hash\": \"134bf392e22ffa0ab60324ac6367f977189fbd40a598bc83cfaaf0098766bc8d4707a6e08e9dda3c1e114462c7d08cde7c53cd9861994cd8af8f2fe681806d04\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.6/dotnet-runtime-3.1.6-win-x86.zip\",\n            \"hash\": \"5d0210198de9ab7551b79a8318833767bdfd558a925bd15b267d70420a954d9b3aa88c218c66f53a4acad325d97d23bae4f05cb93d2f9e9f052da915c0016005\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.302\",\n        \"version-display\": \"3.1.302\",\n        \"runtime-version\": \"3.1.6\",\n        \"vs-version\": \"16.6.4\",\n        \"vs-mac-version\": \"8.6.6\",\n        \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.6)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-linux-arm.tar.gz\",\n            \"hash\": \"eccb9ba89eb745282cb749e505fcf2209e3b56f41d5ddbb383dbeae04eb58a9b367560d743bc78600c8adab4abb93bbabccaae33613b9d3fec2b150fca5dffc4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-linux-arm64.tar.gz\",\n            \"hash\": \"c2bebb673f217d9e7afb80b2b032c6f850d93e2419b5c0f9aa22676114a5c4fa91550a89b46757012fb9535405c1bb7902f0927f093769d4d055a8de84cfc5d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-linux-musl-x64.tar.gz\",\n            \"hash\": \"ba6731051604b141c9a18e8d52eca383089aa524c07eb74e84acaa55334703a6636a054bea7c644b28f39a57fd19547ad92459415e4d25a85bb6ab3ff4046a19\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-linux-x64.tar.gz\",\n            \"hash\": \"a270c150d53eafbb67d294aecd27584b517077b6555d93d1dd933f4209affdda58cae112a50b3a56eeef63e635b5c5d1933f4852a92e760282c7619d2454edbe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-osx-x64.pkg\",\n            \"hash\": \"6a2a7ffe9db0728a5337f04685d100ecea3a2ce4f68a600cb868bc1b64b01c94d293c12967a8f7f89244b39db38764151aae8b291873a00873d27bc7a611ad9d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-osx-x64.tar.gz\",\n            \"hash\": \"f02556a72d1c7a4e6bcb8d2d6fe046788b3c9c3a64c97c433968af9c92f3f9fe3856413ae7538e331090925c8763d79743760a89b293e4f2cfec8bac28e82ce3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-rhel.6-x64.tar.gz\",\n            \"hash\": \"0b1c4370990dcf468216a4048f7ac6c75bf9fd466d8f63836412b3c9004bb4ac69a607ae47781566365e737fac6b4fb2cec55733f52f954301b7fade56d836f1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-arm.zip\",\n            \"hash\": \"c5254afec6a13a92ecddb86d713ae15a36cd19482e9d5a250e4f6107bcfa333d4bb6cdf9e74b8c202a37dc3abe6b400540206a43fa2762ee0ba8394e595120b1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-x64.exe\",\n            \"hash\": \"56f25b43f4d3afc835c6145a048d6ad2077fa706188bb2d783ae288a97205fe37c973e3de64e441de18c75b397b40bdbc86062856e5b234b3fc40d92740080b7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-x64.zip\",\n            \"hash\": \"1db61a6e2e888c4a1b81dce5c5f64110bd622dfc35a12cb68784b5a2afc86f26a2d3db177560bcb997ecf4f1dfd34a9465812caed270319b359a8a858d7bddbc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-x86.exe\",\n            \"hash\": \"98dd3291414c8eb8f9ba4b85481a6a4faca6c747bed734ab7d3246e810e0ac8ba5079d7212fae3add47aff22ad9286d00457871250d8b1bfeb129b1a861f3bf4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-x86.zip\",\n            \"hash\": \"db8d3d4573dc780fd60ef19455676c17b4d60ddb6c281dba5fff9483a8818fb32682c50124bb10d763fc9eff2b13558086b2dbb5a66f651a0f240ecff13f7e65\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.302\",\n          \"version-display\": \"3.1.302\",\n          \"runtime-version\": \"3.1.6\",\n          \"vs-version\": \"16.6.4\",\n          \"vs-mac-version\": \"8.6.6\",\n          \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.6)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-linux-arm.tar.gz\",\n              \"hash\": \"eccb9ba89eb745282cb749e505fcf2209e3b56f41d5ddbb383dbeae04eb58a9b367560d743bc78600c8adab4abb93bbabccaae33613b9d3fec2b150fca5dffc4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-linux-arm64.tar.gz\",\n              \"hash\": \"c2bebb673f217d9e7afb80b2b032c6f850d93e2419b5c0f9aa22676114a5c4fa91550a89b46757012fb9535405c1bb7902f0927f093769d4d055a8de84cfc5d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-linux-musl-x64.tar.gz\",\n              \"hash\": \"ba6731051604b141c9a18e8d52eca383089aa524c07eb74e84acaa55334703a6636a054bea7c644b28f39a57fd19547ad92459415e4d25a85bb6ab3ff4046a19\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-linux-x64.tar.gz\",\n              \"hash\": \"a270c150d53eafbb67d294aecd27584b517077b6555d93d1dd933f4209affdda58cae112a50b3a56eeef63e635b5c5d1933f4852a92e760282c7619d2454edbe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-osx-x64.pkg\",\n              \"hash\": \"6a2a7ffe9db0728a5337f04685d100ecea3a2ce4f68a600cb868bc1b64b01c94d293c12967a8f7f89244b39db38764151aae8b291873a00873d27bc7a611ad9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-osx-x64.tar.gz\",\n              \"hash\": \"f02556a72d1c7a4e6bcb8d2d6fe046788b3c9c3a64c97c433968af9c92f3f9fe3856413ae7538e331090925c8763d79743760a89b293e4f2cfec8bac28e82ce3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-rhel.6-x64.tar.gz\",\n              \"hash\": \"0b1c4370990dcf468216a4048f7ac6c75bf9fd466d8f63836412b3c9004bb4ac69a607ae47781566365e737fac6b4fb2cec55733f52f954301b7fade56d836f1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-arm.zip\",\n              \"hash\": \"c5254afec6a13a92ecddb86d713ae15a36cd19482e9d5a250e4f6107bcfa333d4bb6cdf9e74b8c202a37dc3abe6b400540206a43fa2762ee0ba8394e595120b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-x64.exe\",\n              \"hash\": \"56f25b43f4d3afc835c6145a048d6ad2077fa706188bb2d783ae288a97205fe37c973e3de64e441de18c75b397b40bdbc86062856e5b234b3fc40d92740080b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-x64.zip\",\n              \"hash\": \"1db61a6e2e888c4a1b81dce5c5f64110bd622dfc35a12cb68784b5a2afc86f26a2d3db177560bcb997ecf4f1dfd34a9465812caed270319b359a8a858d7bddbc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-x86.exe\",\n              \"hash\": \"98dd3291414c8eb8f9ba4b85481a6a4faca6c747bed734ab7d3246e810e0ac8ba5079d7212fae3add47aff22ad9286d00457871250d8b1bfeb129b1a861f3bf4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.302/dotnet-sdk-3.1.302-win-x86.zip\",\n              \"hash\": \"db8d3d4573dc780fd60ef19455676c17b4d60ddb6c281dba5fff9483a8818fb32682c50124bb10d763fc9eff2b13558086b2dbb5a66f651a0f240ecff13f7e65\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.106\",\n          \"version-display\": \"3.1.106\",\n          \"runtime-version\": \"3.1.6\",\n          \"vs-version\": \"16.4.11\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-linux-arm.tar.gz\",\n              \"hash\": \"05830f3b9924706d40b9a310e5dc334029f7be080b0e69aaef17e470b9845e1cc708e52652537c2ead98ca4209fda4d53a0cd5200c6b7727ce42f808c54d50f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-linux-arm64.tar.gz\",\n              \"hash\": \"aa2cb7ce94a013b1204dd9523e4fa0051dd43545b5a881647e44f1cf998dd1aafc7e1c709f603306c25bcf064ffbd8295cb17e17fb974e9dfa469e2ecf991f92\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-linux-musl-x64.tar.gz\",\n              \"hash\": \"4e081b9279862c957f8f861b2d2c60443b0d1143a7025f50969e75b3804e75e4485ace4f39125851fcb04781127e7ab13d471f0667b8f166bddcbd21285c3338\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-linux-x64.tar.gz\",\n              \"hash\": \"8cd5d858e10d5cd1d08153ec6084c1e94ad94b06d87a5d5a3b6c43e3217569f25c5bda5ecc9763f5e77e4f78f542d8e5e38cb2c24decf84ddce062ac0386e9be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-osx-x64.pkg\",\n              \"hash\": \"685537008d8fc0868dfe14ca4b6906488e4820b716ee089834193c228c3c03b6d89aad2f25141a6efdad037e4d0c0e051ecb32b1ea7ece5f922e48c71815f8c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-osx-x64.tar.gz\",\n              \"hash\": \"51ab0b169b1b813b9f6c433e4167720393542906cf32fd652d2d63f2bd4e329095c5faa58a0345a909f6bb69aa24efde6c3582cb4239daf052574c7901d1417c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-rhel.6-x64.tar.gz\",\n              \"hash\": \"bc6a17f5ef1291bfccc3b878938cb49ce8835c7d7ce2cf787fe46f6081120fc782fd6869627ce729f3371e21ed94a05613056f08f0a834dbcc077618aba65061\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-win-arm.zip\",\n              \"hash\": \"2938731df68ed0ed8de57806d5a4157f16512e0fa7c18c9c072410c2437b5d36d6fdccd0c03f6167f815381bd386676d1ccd7422ea24dd41a5df1f7921c1866c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-win-x64.exe\",\n              \"hash\": \"9b4f0eb907cac737e4923f8a88f3a616e00c3f5fe99132b8c71f979ce86a02dce28f3a73834255cff6ee858e75d151eecc448dd4c745dd5800164998794bc600\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-win-x64.zip\",\n              \"hash\": \"41da6e91c6c71a32261fb178c596a708f1ac73f9e8cd7365aaf1c18889e55fad7df9bffe0d8d1b85170e52ce0659dafb9b1c893696f6ace21d45d79095b04e10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-win-x86.exe\",\n              \"hash\": \"0a0025b7432a34f992ded3d3fa6d8f9548203991f6d20dcf13e3aa1f26ced2d259a04430cb8692dbff144889005ce4403c0964fb6c982bcee740c8183adee5a3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.106/dotnet-sdk-3.1.106-win-x86.zip\",\n              \"hash\": \"c97c31e9ae662850c2e89527ef7c4c794609119cefb85a36bf8cdb371bb731f78db7b502ea295137f7a0894baa8fe053d18ed68aeb4f5a9e9b81c8a0f4fd05fb\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.6\",\n        \"version-display\": \"3.1.6\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20169.6\"\n        ],\n        \"vs-version\": \"16.4.11, 16.6.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-linux-arm.tar.gz\",\n            \"hash\": \"c04d275fabf2c6ee31abdebaa2d889a85db7b5c6d9b167022eb043158ddd1266a7dbb6373acfa9451513f6063bbe1e3c8d004c098487fb3035e7d43cca507fdd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-linux-arm64.tar.gz\",\n            \"hash\": \"269856c6b44d874c97b8670ef0f80615e15c0f5d997305aad37934e8b6704647022d4fdd001ebabeb20d4287077a193541884a593ba98a48a2ad46e91679041a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0b1a5e4817f087f6538c24ecbfd962681a8c04a944890145b768d894fb6f0b657a30842b7b2e01f5d39be39e4c8e86a07950f0ca8fdf8729699a16a526931cc4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"fc0b6acc3031673a0f77b53a028c86c1dd55da08d4c45792d46fd040792cc5668cba3e0b29c5642897df04e66a095eff66d0eee4b92b04bdabeea2442c264166\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-linux-x64.tar.gz\",\n            \"hash\": \"f74da84b6ddc9e9a7fed91772e82a01772a20c3b9f4f9e8948502e7defd1c6aaf5c6fb18c73259f1010edfc0e6ab0fef483ed5285560c00ef01f974650636f7a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-osx-x64.tar.gz\",\n            \"hash\": \"348e9f8401d45f4071346327974ee37335a594457a33c941a2e005cc36a9a859f42d50ff9635e6c7493932679a264d9aafde039d5e206a6f7d56c5ff30fd445b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-win-arm.zip\",\n            \"hash\": \"02a4db8e0aceeed893e8ffcf693e43ac1ceb5e81f22776531b9592fa898ed4fe6a1ec2015992083e362c07095c851a82e36a893fb3aa82129ff948f7e885f698\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-win-x64.exe\",\n            \"hash\": \"8d65d15b2d4e18c39a91a387f95e59e73c7e13acc26bf2470795a53efd4c67c9dd8662ab7f95e5592b5e6ddb9b1978f48f4a681d99cc051500af8f560913bfd8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-win-x64.zip\",\n            \"hash\": \"156c63624c72e24568559f9c3ac28b81d1c56467d9e119123d9e6a48131596f5292e6cd3d98ce1a7781921446a8c863a515b1aea5c922dbabaf8ec063ef976cd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-win-x86.exe\",\n            \"hash\": \"e64025f7be9c34c37ea3cb3221be38a738b6eeaffe82d1f48248acbbdf55adbd13991277bc20ead3b2486c2a71011c215c7cd3b5c9d265179f67f84e53fc9a89\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/aspnetcore-runtime-3.1.6-win-x86.zip\",\n            \"hash\": \"3bb5c4e955ee6fd1df4717e1b5bd47101516a78cee7a98553dd0d352f5146152400be788491f3c3f8d1d1f01549b6c9b8aed6754924baab4a250f16a140dac91\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.6/dotnet-hosting-3.1.6-win.exe\",\n            \"hash\": \"513f24721b9716c3ef7e6624fbf7127ef538d1eeeb53b2e0d81a7eec9fd97e6206594b9b5b3390b66bff7b0254e4bf4b263b264012602ccf5fb40db00fb6f6f8\",\n            \"akams\": \"https://aka.ms/dotnetcore-3-1-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.6\",\n        \"version-display\": \"3.1.6\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3eb7efa1-96c6-4e97-bb9f-563ecf595f8a/7efd9c1cdd74df8fb0a34c288138a84f/windowsdesktop-runtime-3.1.6-win-x64.exe\",\n            \"hash\": \"6b413e1a434339e084fc2e194a59251acf144fa5351998f505261b4459664ffc611447bf476fbf29624fbd346427b9044c53d301da99d63c6ed2ee6651ad4d4d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d5fc4fb5-7374-4886-8815-68b7bf788b5b/3aeb172d4a3c5e01078738440442f4c7/windowsdesktop-runtime-3.1.6-win-x86.exe\",\n            \"hash\": \"ab3be52070cd609887192898bdffbc7ba9472122c77cadbdd4bbeb8baeb521169ce80832753797d922613732501eeea526fac2e9311864ebccc9b3908fab1238\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-06-09\",\n      \"release-version\": \"3.1.5\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-1108\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1108\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.5/3.1.5.md\",\n      \"runtime\": {\n        \"version\": \"3.1.5\",\n        \"version-display\": \"3.1.5\",\n        \"vs-version\": \"16.4.10, 16.6.2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-linux-arm.tar.gz\",\n            \"hash\": \"c3eb0453893ca7f758e491780031ef0b1323a14c080740847aea652b5c4db99d30e8b3b27fcd306c3a098dc838572c41d3ea871156ba62d9302df32e63a28835\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-linux-arm64.tar.gz\",\n            \"hash\": \"ebf79c3f529bbffc9445f7d75849896f67caede5be93be1a3291edb1e85120ffb35d65990cc1ed3c74bfe66627c11d93fa1283aeebbf1adc24fde1bf9545fe8a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3ee1b7a86be7cfcddcf501f8fd3bd482ce7d5695f5149765ac0967658bd9a2ee47f417159e096ce774e651314f532545d4e82a589b8260ee6ba84384f0ed4e42\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"2f98acecc0779dba03fc5ee674d6305dda780f174af47582d80d556002028df0b6a594e5d13dd36f8a1443e5fc6950ef126064ba6c4b3109b490c6d5ebcb9f39\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-linux-x64.tar.gz\",\n            \"hash\": \"b88e110df7486266e3850d26617290cdee13b20dabc6fbe62bcac052d93cd7e76f787722a5beb15b06673577a47ba26943530cb14913569a25d9f55df029f306\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-osx-x64.pkg\",\n            \"hash\": \"81fc60fa00b14d551ec8c69cfc4267219e64f25c5cad667780b534091577b7084af79817812cdcf2707961970d48d178dd5d9f771cf6dc7f62e2f8cfa77ac34f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-osx-x64.tar.gz\",\n            \"hash\": \"ef6844e9be6c1385c486038997e401461d4459f1b1353e9ec9f5b01ca8a3eb9244cbf986a77726f50831f327cb8795816e2b1e959e2627d8f5778f0dbb4a249e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-rhel.6-x64.tar.gz\",\n            \"hash\": \"69a22ac1d8d692e0b95a349e351da110aa6ef229a7bb691f2c6c60722748b445b2a25c11e2be86d68238634640fc080b34aa3595bad104fb22fbfeeab536ffaf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-win-arm.zip\",\n            \"hash\": \"551eff63b0aff9eac07c9842fb6d3c53c2f080756edd72a07b423e16123b1946c048ea90b6d8421e9f06648c50d67c7221e070f49319925f6ac3a4d56da058c9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-win-x64.exe\",\n            \"hash\": \"3e656dc718e1fea248f628f71a8771a542711494ee8b07de9c4bca998a86e5c2c9080bf4f9b6fe6fcf91a9c66491f481b083c8d86c44d0f05fb6dc965d6685bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-win-x64.zip\",\n            \"hash\": \"7baebbf09273acbf082c0cd1e9e1d935cd4a96794fb6a05dc67f3e80dc027775738c900db1e4c025cfe0562cadd0f3f5feaff00d6feec4dcd372633d27a17820\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-win-x86.exe\",\n            \"hash\": \"7b258cfb442eb5991f9047f5fb030e7888291a05ed048cd1bd24446dce8b5195de49fa25b128ec0902b787448ae2af386001d8454b597c7a94f30b6a3408e86b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.5/dotnet-runtime-3.1.5-win-x86.zip\",\n            \"hash\": \"1536cb211492804d62b5aa413909c16448f18ed92c462f4969d106502320fab2bac326376c77a05ecdaf6b4d81a7502d241058f09154bd53b81da9da127bdfbb\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.301\",\n        \"version-display\": \"3.1.301\",\n        \"runtime-version\": \"3.1.5\",\n        \"vs-version\": \"16.6.2\",\n        \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-linux-arm.tar.gz\",\n            \"hash\": \"732364b93caaa94ee96dfe24ed42e63ae59862afd0691760557c22019c67139f92db28cc5e730618a630c45a96b2468676867345e54ae93004567b470edf5f47\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-linux-arm64.tar.gz\",\n            \"hash\": \"834dc5829730ea7abcf5adfca5557458d5de534597933dbdcec99abbd7eff00f3e1d0084b7f3572de80b4d333dee6d32cffa2d1ead022faad3957c95e5a920a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-linux-musl-x64.tar.gz\",\n            \"hash\": \"f1631569991b448ab9814fe1150609136f428d686d67f93e23b203163dc743de9b0c061bd5dd15f383c832a143ed9e2f7e70d4d417f75c6812d4ff09efb82188\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-linux-x64.tar.gz\",\n            \"hash\": \"dd39931df438b8c1561f9a3bdb50f72372e29e5706d3fb4c490692f04a3d55f5acc0b46b8049bc7ea34dedba63c71b4c64c57032740cbea81eef1dce41929b4e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-osx-x64.pkg\",\n            \"hash\": \"5c125edb32d388eea765334d465b3b312fe55f5e0ad53174e6f643fb0e461eb147ca28e66b093f85ae26fab658f23f88af5253684c4bf170aa4fa663902449d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-osx-x64.tar.gz\",\n            \"hash\": \"0b2b88698047434bd80efd85b5f54632004951b010b9737d5e351a2e28e35eb48e61394add156eac850befab1d5bb9b557bd154ae7ae54c77470f1f2a9ef4ea0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-rhel.6-x64.tar.gz\",\n            \"hash\": \"b7d95969c604e59c0726f46d110aaad1bbd73a532a9a41e1d6827bf0da4e469c4f041dbedfd0f73545899b4238c1691717ad607517f8fdde2285d316a0235f5a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-arm.zip\",\n            \"hash\": \"1a423728488fa4797b34d28889fefb31ea52aa54e0b9e3b4c9850b1bed16c20a22cea1da1f43d6d251ed378bc2f08c63728b226eda13b5312c5ceb6713e37e75\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-x64.exe\",\n            \"hash\": \"d4c564fb970f8f21ae7c1ae3185eb1f048d2ff79755198c25cfe461049c3a34de7392c8f4c66da2591b086ea69fb4d9caf830346ed98619743a201d05148ca16\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-x64.zip\",\n            \"hash\": \"99a124d19503036bcedefffb348fa23476e60cdabfcb8e9cddc6545f05f57d8d2cf5bc7ff9b42039387a15328471c5bd47e50c5ea129fbd418a6e0fa9607bb17\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-x86.exe\",\n            \"hash\": \"6c060c220b0282c88382a66f4569501c2fb803ded6c90481f1828715105e9ca2a9e31ed48eca6f1acc28b73b237fdaaf872c912f67703fb5aa7ecf9c15c8cf6d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-x86.zip\",\n            \"hash\": \"d955f6a129ddc5ee8173b225b5053f1a7f7a3f38ba5e68237ba53eff792b6b1473649cda4eabd637c4460600bf649b0dc02e99c2a7db0ad1d982dc23ae710b6c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.301\",\n          \"version-display\": \"3.1.301\",\n          \"runtime-version\": \"3.1.5\",\n          \"vs-version\": \"16.6.2\",\n          \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-linux-arm.tar.gz\",\n              \"hash\": \"732364b93caaa94ee96dfe24ed42e63ae59862afd0691760557c22019c67139f92db28cc5e730618a630c45a96b2468676867345e54ae93004567b470edf5f47\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-linux-arm64.tar.gz\",\n              \"hash\": \"834dc5829730ea7abcf5adfca5557458d5de534597933dbdcec99abbd7eff00f3e1d0084b7f3572de80b4d333dee6d32cffa2d1ead022faad3957c95e5a920a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-linux-musl-x64.tar.gz\",\n              \"hash\": \"f1631569991b448ab9814fe1150609136f428d686d67f93e23b203163dc743de9b0c061bd5dd15f383c832a143ed9e2f7e70d4d417f75c6812d4ff09efb82188\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-linux-x64.tar.gz\",\n              \"hash\": \"dd39931df438b8c1561f9a3bdb50f72372e29e5706d3fb4c490692f04a3d55f5acc0b46b8049bc7ea34dedba63c71b4c64c57032740cbea81eef1dce41929b4e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-osx-x64.pkg\",\n              \"hash\": \"5c125edb32d388eea765334d465b3b312fe55f5e0ad53174e6f643fb0e461eb147ca28e66b093f85ae26fab658f23f88af5253684c4bf170aa4fa663902449d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-osx-x64.tar.gz\",\n              \"hash\": \"0b2b88698047434bd80efd85b5f54632004951b010b9737d5e351a2e28e35eb48e61394add156eac850befab1d5bb9b557bd154ae7ae54c77470f1f2a9ef4ea0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-rhel.6-x64.tar.gz\",\n              \"hash\": \"b7d95969c604e59c0726f46d110aaad1bbd73a532a9a41e1d6827bf0da4e469c4f041dbedfd0f73545899b4238c1691717ad607517f8fdde2285d316a0235f5a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-arm.zip\",\n              \"hash\": \"1a423728488fa4797b34d28889fefb31ea52aa54e0b9e3b4c9850b1bed16c20a22cea1da1f43d6d251ed378bc2f08c63728b226eda13b5312c5ceb6713e37e75\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-x64.exe\",\n              \"hash\": \"d4c564fb970f8f21ae7c1ae3185eb1f048d2ff79755198c25cfe461049c3a34de7392c8f4c66da2591b086ea69fb4d9caf830346ed98619743a201d05148ca16\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-x64.zip\",\n              \"hash\": \"99a124d19503036bcedefffb348fa23476e60cdabfcb8e9cddc6545f05f57d8d2cf5bc7ff9b42039387a15328471c5bd47e50c5ea129fbd418a6e0fa9607bb17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-x86.exe\",\n              \"hash\": \"6c060c220b0282c88382a66f4569501c2fb803ded6c90481f1828715105e9ca2a9e31ed48eca6f1acc28b73b237fdaaf872c912f67703fb5aa7ecf9c15c8cf6d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.301/dotnet-sdk-3.1.301-win-x86.zip\",\n              \"hash\": \"d955f6a129ddc5ee8173b225b5053f1a7f7a3f38ba5e68237ba53eff792b6b1473649cda4eabd637c4460600bf649b0dc02e99c2a7db0ad1d982dc23ae710b6c\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.105\",\n          \"version-display\": \"3.1.105\",\n          \"runtime-version\": \"3.1.5\",\n          \"vs-version\": \"16.4.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-linux-arm.tar.gz\",\n              \"hash\": \"a5e7531445c5efc5d647a6dca3725bc13b92df19aa87b63163b01518de5eb29e22f02c124807f29edc5f07ab31c56b675a6c34a1eae50e090c4ddf930fb4bd9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-linux-arm64.tar.gz\",\n              \"hash\": \"10c13928f8f3b4a7bd0c782d3579e417b526f3497cb59deeef4ae9e7fae3228df2ecddfeb1c66f9c2d329204a62fa0c4bb759e2954a0e26ac00419b3efd6017e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-linux-musl-x64.tar.gz\",\n              \"hash\": \"8922550a852f04aa7e331b141ce7eff1a53965b2b4b58ceca9c01b25a0345d6999ecaccdb77541e5c3eae604ff0faf54ecadad50c6dcc3ad1dcc91b05ffa77b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-linux-x64.tar.gz\",\n              \"hash\": \"4c15208c6edde102c447cbe20abb3189ae9ab530118297994a523b3ef4bababffe74830d0803fd8afcae3cd6bccf1a8f02c42c3bee19bf6ccd6d7cf8d25c68f4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-osx-x64.pkg\",\n              \"hash\": \"d42f6714f4dbed52aa3d6bf81eaac7840489c30c7019929488c587fbbed2098778500e9976dfbe486e757506409944ac098064590a2ae6acb6c99b8ffbb3d6bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-osx-x64.tar.gz\",\n              \"hash\": \"df6df2d120c373088813e1015ddd24c5aceeb0425dba976a2771ee6bcd49bb9fcf0fd1182b7634b003f0102a44c7fda3be19cefb1ce45428f4781d6c7ef440d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-rhel.6-x64.tar.gz\",\n              \"hash\": \"a8c57a31b388454499f6b612ae62d73eccaaa85c68df383c2514261a5daaeb69188ab0729866bbd4d41632f6db96a31106b765f616017c802659c5d7a803d074\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-win-arm.zip\",\n              \"hash\": \"44eb1ea82f4935f05999e567456bd760207c362220866fa53db8e8bea619ecc26ff396b25be00df3cd085df5fa2bf18c7909abd2a784e27c9518194fc464bd66\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-win-x64.exe\",\n              \"hash\": \"1c3121ef7be444581589bfd06a8e6881669fbc0e68cac8f8aa38cb2bc72d3fbfc477d47711b625966b150f396fb0563d6b103a1f990522c639a28f2ce6013531\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-win-x64.zip\",\n              \"hash\": \"6a1398fb3b0cff3942c4a6668e0b187000fc7f0ccc9a557673b74b5a5e3da2162f24b4b368a88aa8580f24d41664129d85a83bc435c8e0f995ce4cc2ff7ede17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-win-x86.exe\",\n              \"hash\": \"b357519f7e1984c84b86d9903e3e36d110142d465b98f9effdbc892d1dc6b3a9cbd82931d39e84a98a40bad04d70e42dcac552cc35c752da2426702118a80eba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.105/dotnet-sdk-3.1.105-win-x86.zip\",\n              \"hash\": \"994da02c662c9324c7464ef740f01e05870d4a1b67c5b9fee550c9b764d61b71a7372055ba37addabf8a2fba083e3d14cb9154ef9bb3a89eb73d904afa6222d8\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.5\",\n        \"version-display\": \"3.1.5\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20142.5\"\n        ],\n        \"vs-version\": \"16.4.10, 16.6.2\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-linux-arm.tar.gz\",\n            \"hash\": \"090ef0da2454935015184f4b4b968c049eb806d19dcd258af06265e922f9d0df209fa9f84ebefe9e7cb6bb391dd0459eb3b5f7e8609fca2cffd75d3801c1b6a7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-linux-arm64.tar.gz\",\n            \"hash\": \"8ac87f0d5a7593a0341dbffc2d7e68a0e3ff86d512f03f40471020087152997df8176c6ea415275ed682a5fe68652e080c63f5bca6bdd10cbe76de6d086eb8ac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3d97ffabe40743b86b5264c6eebe26af894a98dc71d35570a5288373be48b7fb5f65734a891ca48feeb2d0e10825c6aeb2d0d315d41049844c1a901c9a77b59b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"b56aaefdd188106b47f3c20aa65f1fb3b9bdaca450e9599f132c178803119e7611ff8cde07c9248a49923dec1255d1e3e2fb53d7ec5807903c7bd1b1b9954a88\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-linux-x64.tar.gz\",\n            \"hash\": \"262a8e670a8800aea1c518e48a237543f2bca92010187d25cae2bd513163786c5b49ff2593b1e256ca89201fd3d819c2265f8a3946b257e8490b37a5a66e1fff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-osx-x64.tar.gz\",\n            \"hash\": \"1c32470742e45bed30b34bda27c8d52164976fdd91880c330774200be64cc8bac495d661fc4410153020e5d07c6ecfca90e8df26a7a52be7a0adeb4e045deb74\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-win-arm.zip\",\n            \"hash\": \"f8864765da0ba7da02f998a0bd26df066b8553d43706115c743766e1898d92232a0462f06876bde7798d37ebab04160be0ceccdcf7e298fff1ba2cc6aa0dcde8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-win-x64.exe\",\n            \"hash\": \"b091b7c2403c2b86817f73a3f678313580f9d494e213978440795e359b9311ba89a6d10921ca35f172b3631b029b242b93ca2d3e08ed738a0859d6a0951f987b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-win-x64.zip\",\n            \"hash\": \"e71f865cbd25f03d6975991da488ade449f315d71e1bdab50d2737a6e6f458ecbfe90addf44f24b56117af484175b6cd2f91d9583005167ea70e35be3e85cb34\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-win-x86.exe\",\n            \"hash\": \"6ab1c24d88ef3d929804afaa07a0279486aae720cd2281cb2f6b329b68750b3eb015365f79e008cbc515abeae62d59ed643346aaa070f94b11c45da1dde18a0c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/aspnetcore-runtime-3.1.5-win-x86.zip\",\n            \"hash\": \"d322d5a460f32e24df9d7da5c923bd72c14890625de2ebd5ee3bd50dd884e3b0867354e70cbb80bee8f5344ee98107d85d6b7585d6be247c3f81a99fb3a3d94b\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.5/dotnet-hosting-3.1.5-win.exe\",\n            \"hash\": \"d4965bc1b3c39759e4781248e4b57ba358697ac2c5bfa8a29ec07388cdc8dc64ef0debd6686a2ee264b08eab76dac1b7830f8bf0254d33bcf89d0626f5d89055\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.5\",\n        \"version-display\": \"3.1.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/86835fe4-93b5-4f4e-a7ad-c0b0532e407b/f4f2b1239f1203a05b9952028d54fc13/windowsdesktop-runtime-3.1.5-win-x64.exe\",\n            \"hash\": \"5df17bd9fed94727ec5b151e1684bf9cdc6bfd3075f615ab546759ffca0679d23a35fcf7a8961ac014dd5a4ff0d22ef5f7434a072e23122d5c0415fcd4198831\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/df7b90d9-b93e-4974-85ef-c1de418bc186/e380e58bbd8505ebaee6c3abb23baade/windowsdesktop-runtime-3.1.5-win-x86.exe\",\n            \"hash\": \"b5e7e49d5b6f4f83a665d1f4c7d83700540f9c888c3c36ccd44f5395138dc1e258a4fcb260845d8ac7e3e5a1513be1666521edeaf6dfd67669a04a1290cda7e1\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.1.5\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-05-19\",\n      \"release-version\": \"3.1.4\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2020-1108\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1108\"\n        },\n        {\n          \"cve-id\": \"CVE-2020-1161\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-1161\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.4/3.1.4.md\",\n      \"runtime\": {\n        \"version\": \"3.1.4\",\n        \"version-display\": \"3.1.4\",\n        \"vs-version\": \"16.5.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-linux-arm.tar.gz\",\n            \"hash\": \"d7a5d3ec2d7ee3348f4e4feffb2e4adcda6d5620e00120180c7cf0d4fd4da10d44ba36a04d4b9cf26132772dad419aa6450c3d21e597aa03fbfb6b0b86c9b05f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-linux-arm64.tar.gz\",\n            \"hash\": \"d0f6723e2e99bb05737ca71adc9d204f716bba918a29477d1df94f470fee76eb085df52a737fc2a0daa6552dfb555d7da30a3ec07563274d2431ff15af07cee8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f621f337b197b6ca06f6be4e98935372c866d7b6479f20d6dae084979294be0d16d9d615032018ab3cea9829df2fc744ef9c8aef3274021aa43819cdf4103a32\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"5bd3e7faa380809d67df58a218805c719e9141c19f599a149d2edd76f629d2fd96ae5dce79ec65f118bb95c6916ae9cc4fbe375aa58f910692893ab5ade2445b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-linux-x64.tar.gz\",\n            \"hash\": \"1869565558e5a85b6a898e792d7b5dece611b25f7f6fd8f015ffb16dccc7485f1412e04809da2e3f56744d24c75e1d3addbd2856c45ae7e66a2c7b71ea23e827\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-osx-x64.pkg\",\n            \"hash\": \"d2bf0a1b48f82492eb7ae61f5aa1f06dd5b142357918f7b11e885031eb639c85e0a67abd7b5ebbba4059e46d5ee16a2315a362a83cab9ce1fea15027f1059e21\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-osx-x64.tar.gz\",\n            \"hash\": \"111f7fc23167c6bf1351846dbe8ded799e76efd77e95e1e80d95ac79af27ca49a358c5a6e602b33cfc3375a912fd790d02ea0e0c75d26ab34bbb1c5fb1c127d1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-rhel.6-x64.tar.gz\",\n            \"hash\": \"cc04a466f975606610855244f15194bd189cf14bd51023e2851da0a04fe46ec3b6ab82366084f0401d822429964a271533df4ce3cc21ad8cc4a94bbc0ed2a321\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-win-arm.zip\",\n            \"hash\": \"83e276142d8285ca5037ca5db74311884dc5f7ed0d8dba72bf343f1bed25bdebf7e8d5f0b1f5c7a57587d611b72b0d94d0d289a08e7b32c64022adeb7a1e0456\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-win-x64.exe\",\n            \"hash\": \"2d308a2511f0831a5c3cfd95dadb869eb643aa36f670037fa8ed1ede3d5414031963b4c8514c9a6f2c6d783c0c005cf9cff76750d54cb4ca47d3602a6ecc9bda\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-win-x64.zip\",\n            \"hash\": \"99582efc923ceec8ac3cc46eb4bff1c6ac10f44806a5c85b498cde6a1f032096038e8104dc68015432df668f94489c2f71acdf50e8bce1efe04a6c93af933664\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-win-x86.exe\",\n            \"hash\": \"9e7f116f32e219bb81c6383142540a31022a27f3d9aabd3fcb55135e66e524bf7f36e410d7a99cc641ca5920200220e6c31633fc119aed2aca01ed4a88d55703\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.4/dotnet-runtime-3.1.4-win-x86.zip\",\n            \"hash\": \"488360fddc64577ce25388dbb12c5f127b737eb464f18b791710b4a4b41a44f48727625434b8fee66aac287f067efaab1f6b864c81845e9fb7c2b4185afd0879\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.300\",\n        \"version-display\": \"3.1.300\",\n        \"runtime-version\": \"3.1.4\",\n        \"vs-version\": \"16.6.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-linux-arm.tar.gz\",\n            \"hash\": \"510de2931522633e5a35cfbaebac255704bb2a282e4980e7597c924531564b1a2f769cf67b3d1f196442ceca3d0d9a53e0a6dcb12adc9b0c6c1500742e7b1ee5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-linux-arm64.tar.gz\",\n            \"hash\": \"b1d806dd719e61ae27297515d26e6ef12e615da131db4fd1c29b2acc4d6a68a6b0e4ce94ead4f8f737c203328d596422068c78495eba331a5759f595ed9ed149\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-linux-musl-x64.tar.gz\",\n            \"hash\": \"4546f5e2b88fc62dc186825fe8b84aa5b0769cef779c4cba988278a9ba8e23f87b07d232ae1ec51fc7f73b24c9234003a3e952c0da7ca0fd4b7baa2ad8cffc6d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-linux-x64.tar.gz\",\n            \"hash\": \"1c3844ea5f8847d92372dae67529ebb08f09999cac0aa10ace571c63a9bfb615adbf8b9d5cebb2f960b0a81f6a5fba7d80edb69b195b77c2c7cca174cbc2fd0b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-osx-x64.pkg\",\n            \"hash\": \"e0ce4f491ada5b80117312825d3675effa5568a3bc6474b05e92ea8e5f694b8eb100e9362ffd24d3350242bbb9a1c028e4f3e08dc834b1cff0fd9ff8d932b838\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-osx-x64.tar.gz\",\n            \"hash\": \"4455c6270e6f7c9dad3c606f7d49d059cd81d60a5c1ded912fa926a928ca52e634bd13ad2a3dd1e294646c18cbcf711be130b93a1b96009ff12ac8835d1a86f8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-rhel.6-x64.tar.gz\",\n            \"hash\": \"ccee0cd8dca19ecb4216eb5bf500e5372e853881e41f8e78a96f754b0a197780ac1c1f3b14993ab919718ce771c49d3f7eb1b1456448b4ceea113527bbade2cf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-arm.zip\",\n            \"hash\": \"001a0c1fb5fa62195f0b7de776da56bc7d0057bb8fd5d293690d572b06d6672163e8918d840cd43a93a854bc79a9c6bb4dec5242c5ea02567c1d75b805a91815\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-x64.exe\",\n            \"hash\": \"5087a7d693b22af92ca27d11d624f91db089fffcfa5f64aaeea9c8430fc07126b17566b70ce52939125682e5273f84d1ac77828e51c35d86597b05a4a4f6824b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-x64.zip\",\n            \"hash\": \"6fbce022ce87c706778a30b0b518bf3ae0fff399f9b7377e15a075100f89dc334de40571d67cdee879f1ddf168f93b5df8df2bcb7df4261ec19a0b4f19d3904f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-x86.exe\",\n            \"hash\": \"05412a757939ef54010c35d454f21a77aa70a2d19ca60ed32f920cde73cab392e5ae37bc0841f1df74fcb771bba3df8da48947832843f70a3a26aa92345bd250\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-x86.zip\",\n            \"hash\": \"7977150ac61fb1ccd217514a60d21218100c3507e479fab8483d77ab275d3f87f8eb1fcca3f1f6f3f81e65434d7cdc0e594dd05bc9130e4fcfda7dc2c796278a\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.300\",\n          \"version-display\": \"3.1.300\",\n          \"runtime-version\": \"3.1.4\",\n          \"vs-version\": \"16.6.0\",\n          \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-linux-arm.tar.gz\",\n              \"hash\": \"510de2931522633e5a35cfbaebac255704bb2a282e4980e7597c924531564b1a2f769cf67b3d1f196442ceca3d0d9a53e0a6dcb12adc9b0c6c1500742e7b1ee5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-linux-arm64.tar.gz\",\n              \"hash\": \"b1d806dd719e61ae27297515d26e6ef12e615da131db4fd1c29b2acc4d6a68a6b0e4ce94ead4f8f737c203328d596422068c78495eba331a5759f595ed9ed149\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-linux-musl-x64.tar.gz\",\n              \"hash\": \"4546f5e2b88fc62dc186825fe8b84aa5b0769cef779c4cba988278a9ba8e23f87b07d232ae1ec51fc7f73b24c9234003a3e952c0da7ca0fd4b7baa2ad8cffc6d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-linux-x64.tar.gz\",\n              \"hash\": \"1c3844ea5f8847d92372dae67529ebb08f09999cac0aa10ace571c63a9bfb615adbf8b9d5cebb2f960b0a81f6a5fba7d80edb69b195b77c2c7cca174cbc2fd0b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-osx-x64.pkg\",\n              \"hash\": \"e0ce4f491ada5b80117312825d3675effa5568a3bc6474b05e92ea8e5f694b8eb100e9362ffd24d3350242bbb9a1c028e4f3e08dc834b1cff0fd9ff8d932b838\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-osx-x64.tar.gz\",\n              \"hash\": \"4455c6270e6f7c9dad3c606f7d49d059cd81d60a5c1ded912fa926a928ca52e634bd13ad2a3dd1e294646c18cbcf711be130b93a1b96009ff12ac8835d1a86f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-rhel.6-x64.tar.gz\",\n              \"hash\": \"ccee0cd8dca19ecb4216eb5bf500e5372e853881e41f8e78a96f754b0a197780ac1c1f3b14993ab919718ce771c49d3f7eb1b1456448b4ceea113527bbade2cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-arm.zip\",\n              \"hash\": \"001a0c1fb5fa62195f0b7de776da56bc7d0057bb8fd5d293690d572b06d6672163e8918d840cd43a93a854bc79a9c6bb4dec5242c5ea02567c1d75b805a91815\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-x64.exe\",\n              \"hash\": \"5087a7d693b22af92ca27d11d624f91db089fffcfa5f64aaeea9c8430fc07126b17566b70ce52939125682e5273f84d1ac77828e51c35d86597b05a4a4f6824b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-x64.zip\",\n              \"hash\": \"6fbce022ce87c706778a30b0b518bf3ae0fff399f9b7377e15a075100f89dc334de40571d67cdee879f1ddf168f93b5df8df2bcb7df4261ec19a0b4f19d3904f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-x86.exe\",\n              \"hash\": \"05412a757939ef54010c35d454f21a77aa70a2d19ca60ed32f920cde73cab392e5ae37bc0841f1df74fcb771bba3df8da48947832843f70a3a26aa92345bd250\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.300/dotnet-sdk-3.1.300-win-x86.zip\",\n              \"hash\": \"7977150ac61fb1ccd217514a60d21218100c3507e479fab8483d77ab275d3f87f8eb1fcca3f1f6f3f81e65434d7cdc0e594dd05bc9130e4fcfda7dc2c796278a\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.202\",\n          \"version-display\": \"3.1.202\",\n          \"runtime-version\": \"3.1.4\",\n          \"vs-version\": \"16.5.3\",\n          \"vs-support\": \"Visual Studio 2019 (v16.5)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-linux-arm.tar.gz\",\n              \"hash\": \"6a978081468458fb08f405e11d39067f2dab3ec1b9ed9d033f7e74ddf8e700eb15c9c3d86d8fba5dbcf44f03b06c7f4a5d84b531e7d57a75d7a4f4cdc7f98992\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-linux-arm64.tar.gz\",\n              \"hash\": \"b570a423522de777d05de67410cea7d6d54461b7e2b82a18f4ca21093897836447f215b2737df909ee581508fbd1a61993f3ea1d9856b9a883caed3f7086f0a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-linux-musl-x64.tar.gz\",\n              \"hash\": \"4023c831c3ef95d6eca1c509ce95c69f52d676174b2defdd53cd47e1e448e664f324218584115232f88058aa504a77a74858ff0650c6812d28f2e077586ae009\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-linux-x64.tar.gz\",\n              \"hash\": \"c59265d42c7277e6368ee69cb58895f43f812f584ecd0b01b4045613abb74c21f281f5a851f012625064052cb79e0f84fb5385b5f7cb4dc4ac8970ee4ee4ba71\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-osx-x64.pkg\",\n              \"hash\": \"e38f6a1702038f989ae46544d1f82d16aa298dec0e6f3038ca02ae6b9d09eece4b7e12ac9a4646253a483debf99a3dce63347387f0b665c3124dfab072c7b0f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-osx-x64.tar.gz\",\n              \"hash\": \"da083520473e9f789b4c131d6cc72f26bfe0340dec3b102db8d5112210bfe32ca053a6aef95dc86f38c2ee892d10d0f589f319fdfc5ebabab14f75e30edf45dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-rhel.6-x64.tar.gz\",\n              \"hash\": \"2e2a6e30e0fec4460e00bd9eb08b3b10bbe5629e3766352625aab3f58f61bda0e21d12902fed63b69904d50c54147a3cf01cf2e52dc5eefaca7f04085f9ffd60\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-win-arm.zip\",\n              \"hash\": \"0d8c7589d98f55604b4a7221f9bc691da212a08931092fcaa635f6df120c60b9e46a912b910634abb417cf919f2f4cbc977a79f647187ada3bdc371f1e0f9209\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-win-x64.exe\",\n              \"hash\": \"272b60e92809b7182258594fcbe059c4a3281113d9ab41235343250553219788158b743f3695e829f5846d424c59b323bf977ade64a9a9785c1c0fc4a6baf11a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-win-x64.zip\",\n              \"hash\": \"4583691e7f30946ba5d70b913dc3cd1001b34945317412bfaee59a08688bab5a00dc30c892703fd4fefa5c9d6aab6cf67362468589a588dd6eabddd5e934ab93\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-win-x86.exe\",\n              \"hash\": \"1f7f1ce1d196d45a9ffe02b4a2bb39cb75419ef61fb0a0db0fb67b0d75c86589a6650621c1663e1df4211ecc57cf52bdd542312b3426de2048aa2ef12ca3b3d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.202/dotnet-sdk-3.1.202-win-x86.zip\",\n              \"hash\": \"afe6bd4d73e8b4b409b4006c07db3978f6084887ed99dd8fdd10d46930d7a50a160f656f61af38c9c72b8277c4632824558d1089629f1b1093fd66b4131170b0\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.104\",\n          \"version-display\": \"3.1.104\",\n          \"runtime-version\": \"3.1.4\",\n          \"vs-version\": \"16.4.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-linux-arm.tar.gz\",\n              \"hash\": \"18120f948651558f8b075017d42f075b97454c386ec9c7985f68169755a9b059110b5b52edebe8763ab0178ffd1bc453a70d9231d61213170b386ff899fc6463\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-linux-arm64.tar.gz\",\n              \"hash\": \"a8bd5535af395dff4130d47e288837bda036b73a074f84755d1224d2c703304bcd36593dda5eb3f139a051060030a100516b5e8a2fd2fcdbb192eb04c1a341a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-linux-musl-x64.tar.gz\",\n              \"hash\": \"d4d39a46405d442d90e43c75c28ca2b4464a487dca5f48aa94e02872820af3e50b28ee3fe836dc6d2a7f2063730e08716dfc6281d78f04720144c99ab4c4ccd1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-linux-x64.tar.gz\",\n              \"hash\": \"0a571958c584086ab89dc3b2ea910fa0e5cbf007c16553d7481c9c2340d2d5e06664bcacb9841486069b798851096818798b8dff6d11d6454082dea81b42cc5a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-osx-x64.pkg\",\n              \"hash\": \"a256dacaca5bd56435a50a21feff9046afc9d0186fefe0ce5f4edc7be958661470f08c057d62106bdea68f2f86cea0502b2d253d05a97cd7b87cb1597186b47e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-osx-x64.tar.gz\",\n              \"hash\": \"a70a18da249cd1efd978db3dacb6ee5cc95d07930680cb63346241bb6c94726c2809ad11c095119b3f3509fe18080821d13748c7c2a631af449d89f50b9dad5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-rhel.6-x64.tar.gz\",\n              \"hash\": \"024e40457ecf1fc40d66348b05a916e6c6aacac64a9500530453650df9c41ac6e53790502584b1f62cf0d052fdc432679d4fb28362429e5fb2853806ee04d708\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-win-arm.zip\",\n              \"hash\": \"6b4b34b9f86f85735a04fe798abbd192ef50c284667b1625046564ce43423cc42d96c697e8d6bd381dcc6801b4428d38fa24d59f5a8e519cd9b4f5d18d83171c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-win-x64.exe\",\n              \"hash\": \"2ae98176ad7d77b205eb384507f34dafcc77b815757049e2d331cb7aa0af6f067ca24935c53f2fc3b34ccc3fda7c4a59fc26ff6190bb42508b17073a74e4b5e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-win-x64.zip\",\n              \"hash\": \"a4993a1cd18fcdacc7e693653bf00dbc31dcee5a2bf876a11a03883a4937c24443b8b75efec5e1bbada5610960a846034fea00d8eff5dd6e1db666aa2232ee53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-win-x86.exe\",\n              \"hash\": \"60d75b42e1b27bdae641bcb469fd49d7f55f2c66b8d9763432a3a60bd9de6a2ee08b877cf7e6de82de5f4c8ebe063d82bac7e1759e9b560abe1a94b09d37f7ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.104/dotnet-sdk-3.1.104-win-x86.zip\",\n              \"hash\": \"c89e9aba78b9f32aceec6f955d5fe9e5b890f0908412256efa12fd851afe62911250e3afe72ee0c0a35abf0c651962e2b685f29b07c18b572ec413159efaa778\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.4\",\n        \"version-display\": \"3.1.4\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20114.4\"\n        ],\n        \"vs-version\": \"16.4.8\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-linux-arm.tar.gz\",\n            \"hash\": \"58fe16baf370cebda96b93735be9bc57cf9a846b56ecbdc3c745c83399ad5b59518251996b75ac959ee3a8eb438a92e2ea3d088af4f0631caed3c86006d4ed2d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-linux-arm64.tar.gz\",\n            \"hash\": \"db91ea66e796e3d27ee08d50cb0532d1fb74060d5a8f1c90d2f34cb66ad74d50d6a8d128457693c15216b3c94d6c1acb7bd342fe0a0fa770117e21211972abda\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dcb695a944cf75c33ca34bdc4e1d5dd78ee0239bfb4054a7123061ca7ca4e2f2dde9039db8a5097bbab723bcf542d7d8aca66abd22bbcde721e00e5f43baa377\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"f60e9226a5b399470479fd6fdebd03442b0440128be1090adcbe473dba46a3e7a57a9e59b4abff96214e0dd0b1123c67fe764b74c61de1cb35c8b8ac45767eb9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-linux-x64.tar.gz\",\n            \"hash\": \"a761fd3652a0bc838c33b2846724d21e82410a5744bd37cbfab96c60327c89ee89c177e480a519b0e0d62ee58ace37e2c2a4b12b517e5eb0af601ad9804e028f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-osx-x64.tar.gz\",\n            \"hash\": \"c28d66bbaf647dde84c078e7085ab6cdb3b67b8fa739284e4957b9812c3c056acd076d39a4fbde687c7e48d2ab51926f42342ffd452a62b2442550fbc24e4768\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-win-arm.zip\",\n            \"hash\": \"e9ad6d93b82d98fac97915beb1d82341eaaf4c7ad8bc6444acf3d8c1e1abddf50dd45bcd998709912e118ad0a330c87d1cca153aa30af51f5719708d7e63d1da\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-win-x64.exe\",\n            \"hash\": \"9118df588b3f80725daf1fa7a68441d5698063841bb9eda1c49ca577bbf6677a09dba979b75578ce9b5c7f40cfcf1d0e94d92a2698c92d1537a1228e956c33b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-win-x64.zip\",\n            \"hash\": \"8868ae5a3a3b8a42f18d59da273d235b4ee7b8a8525cb2d3e5c0d29715e33fe4bd9e9b5fc142ed15ef88b8b9427b3f324cf6b668f7bec72ea691f3c2ce723715\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-win-x86.exe\",\n            \"hash\": \"42b862f5b317f6f294d415dc06fd1388c3e412069ef38d3a7f8494f13cbc50f9dbf100eb965ed3d6c8842f4af02f3ae7f3e9865a88199ad476f71d354f0c3c67\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/aspnetcore-runtime-3.1.4-win-x86.zip\",\n            \"hash\": \"030e3a4514caf9b1e33655527ece4833032320def4e40e9f81cea7e8cda5aa8c5be362d8b6fa4ab32a90b25cc19abc4dfcefac30f1e66d66785b75fbb48141fd\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.4/dotnet-hosting-3.1.4-win.exe\",\n            \"hash\": \"c4efac485e527240dc0e5b806eb1d06bf70d22193d68090a17f68d09806275214bf23450385fb71e725a2eed8b09c3e91cb582979678186f66a6cb563e5688c0\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.4\",\n        \"version-display\": \"3.1.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d8cf1fe3-21c2-4baf-988f-f0152996135e/0c00b94713ee93e7ad5b4f82e2b86607/windowsdesktop-runtime-3.1.4-win-x64.exe\",\n            \"hash\": \"c410e768954df9fdb340a47e7cfe2421e19ac6ef362f5af336d8d68e513a74a7a33f50543abdbf48cbf277b0651bd08d946a8589bacc1ad138b35224769828a0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/2d4b7600-5f32-4a1f-abd5-47cdb2d1362b/7b8b7635e3bb63f6b2cc9a1c624b5325/windowsdesktop-runtime-3.1.4-win-x86.exe\",\n            \"hash\": \"616f7619d859d3c242e81313041bfd299dfbaa0514250d5f384d162a3e9ac74605b40dc971b6f8ad2ef5bdba6be4dd32c6f506241a3fe3634df05625f9f88ee9\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.1.4\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-03-24\",\n      \"release-version\": \"3.1.3\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.3/3.1.3.md\",\n      \"runtime\": {\n        \"version\": \"3.1.3\",\n        \"version-display\": \"3.1.3\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-linux-arm.tar.gz\",\n            \"hash\": \"982b05f95c2f5e4b8656a04839a6a18faaa423c7c14f0a41652c6d4eafa1edefdb06c9128490a4902ce672ab00a293fe62d9b85155f2f41986ed367de6c6e889\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-linux-arm64.tar.gz\",\n            \"hash\": \"e0c1d7f3dd33c02b52edf900c1c5eee9a221bb2a9170e4a88964ace853b7490ebdd10bb0933a9bd95b2ca0da7d5735a99d87c8554f4fe7dfeab5fd681dc96635\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fa749e49a8bfbf3bfdfa00ca51663960ad8712c177c6dd20b446e64ded92018cd4599af60a106e34e72c33d9f99e2c083e522edb56019c93645c6331630ef268\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"ce8bef0f11c552d18727d39ae5c8751cba8de70b0bb1958afa6a7f2cf7c4c1bff94a7e216c48c3c3f72f756bfcf8d5c9e5d07f90cf91263a68c5914658ae6767\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-linux-x64.tar.gz\",\n            \"hash\": \"e3f6f9b81bc3828b60f7da5a5c341373dc17f971f1de3f2714adcca180a630a60d4b681166fe78434d8b2ce023d2d08eff4f1935ec664130b7f856fa8e1cac2b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-osx-x64.pkg\",\n            \"hash\": \"7d51e9a844037eb4f0eb0bfcae5818f4b2e6f18b031fe167c9fd275ceb655537fafd85f6e5360574cdbc6ca107c9b4ba10a9553605ec65eda88338959a00c974\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-osx-x64.tar.gz\",\n            \"hash\": \"f6c50649cea1f168c573525e3fa95d94c9d263bb8d72a9dd5ba83cef6a6e2a9c5d516bb8e267a465ac84593da96283094e7e3e6533ec962b93f7300cab00514c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-rhel.6-x64.tar.gz\",\n            \"hash\": \"d56f2db667ac414f434252ac57e83f052ff4b103629eaf8d5430463d7d3622f41a4336ef667b5dffa08ca549b268a56c8b3f65ab650eb46728782dafd4e30ff1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-win-arm.zip\",\n            \"hash\": \"d22b1df89bc93c3df807d0d782192f9c1e41dbcbd2d206b94652e6b0a990b4faa57b829c7fa78c456ce76cd495463a87bcee451e90bd8e76bbce7f3335cac52f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-win-x64.exe\",\n            \"hash\": \"b254dee8985281858f441ee3d146290b5734ebba9209d70d0a0fb8a14555e24c6246ed141805fa28935a51c1a5af58b38f4aad80c589798624eec26798494775\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-win-x64.zip\",\n            \"hash\": \"62a18838664afd6f08cdb9a90a96a67626743aab1f0de0065eadfd7d1df31681c90f96744ccb5b7e40834c9e3c4952125c8c83625867c500692050cdd113ff50\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-win-x86.exe\",\n            \"hash\": \"5ab0211c5574d8649c564bc66b1de15570da2bdf4242e5fcde23a89094f5d1a8ea1f1feb1ba70605ed183edf4c2d5d6c5fcdcc9e97348d5662a35b4ca6cd3940\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.3/dotnet-runtime-3.1.3-win-x86.zip\",\n            \"hash\": \"caae5284d56a94139019aac2e363be1ec3d2db2d3992c5a217c6b33806b40e603bfa47f5af11f1801a2dac1486f0da0294174a79c43cfcdbf28eb752ce03ffe2\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.201\",\n        \"version-display\": \"3.1.201\",\n        \"runtime-version\": \"3.1.3\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.5)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-linux-arm.tar.gz\",\n            \"hash\": \"f37d0e55c9f593c6951bea5a6bb1ea3194486956efe08a2a0f266b419d912cdcbf4ac279358976f0bfa1fe560c333ca5d5437f8e8c718bb5963991e4395e0cd7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-linux-arm64.tar.gz\",\n            \"hash\": \"2f4f6b7ae55802b0beaf5d62bcb64f23ce132c9e08d8ce0f0af8d9b0b1b2c2629b1d4e805e83f831575c9968a86d1495dfa5292d2592af0cd1ae4a385daf42e7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-linux-musl-x64.tar.gz\",\n            \"hash\": \"9a8f14be881cacb29452300f39ee66f24e253e2df947f388ad2157114cd3f44eeeb88fae4e3dd1f9687ce47f27d43f2805f9f54694b8523dc9f998b59ae79996\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-linux-x64.tar.gz\",\n            \"hash\": \"934bf29734776331691a4724f2174c4e9d2d1dde160f18397fd01abf0f96f2ec1bdd2874db9f0e25dce6993d527ea9c19031a0e67383fd813dcfcb9552ea0c70\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-osx-x64.pkg\",\n            \"hash\": \"9247576bb5a3387b10b9389c49eee505fc4d5d5ba5861d94dcc69b950c13ef89035b7b3bf83eb532bd12c2f9328da35e99b07632c4529dc24ba4dba6147d12ab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-osx-x64.tar.gz\",\n            \"hash\": \"1af1da3ecc4a7f58f7090c88c0a2b5ec4ddf8fc7e4bba295fa9be263634adfee4ad2e7ff3932c8631576d67cb7ed2580d28a48b5f8741943b393104f54c14542\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-rhel.6-x64.tar.gz\",\n            \"hash\": \"9124036fe14c32a855236f83a36931962419bb8241c72b0e212bdf16dd4e60cfb4ed94752f7b0551a0eb7a3a848950f65f7cb85c87b616674d72e3339b0bc327\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-arm.zip\",\n            \"hash\": \"ac844dd463375c0baae5a728ed04e00027b599dfde69b5e7d21b9de0471e82f584ecebeba78abc57e816194ebf8893297c700b0a0fd95cfdb505a527ee6fbb43\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-x64.exe\",\n            \"hash\": \"893dc5f04f58f23b8b84ede4f7a4e9510de5cef277f28b768ca8bed05be024445e07029a79aec0ade3fd3741f1fd9f9b90c65ee992ba3d6238ac5649c9c8ce35\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-x64.zip\",\n            \"hash\": \"89936531faf24686fb5add6f6771b78df92fab6786398a692ae5930d812322b545199e3c9eec11994233887734a61943c74943f9ba4e491106a0ff794a0ce2a5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-x86.exe\",\n            \"hash\": \"3fe714903d42a3bdff13a9151e5f2b5e4d5c6b254d59401e42dccb22fd085cb78d9dd477d2e236b14d5285a866f3140bbaa419b52f859d4c59800c4e47ca2906\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-x86.zip\",\n            \"hash\": \"48aa1afaf7a52effb367bbb14a66e2c3bf8da468025795daf0fa0d18e3b9650ba3bd23800c9965a4d4ec1d891afecbce51b2487730f1b0d6040ee7cb73a15ec6\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.201\",\n          \"version-display\": \"3.1.201\",\n          \"runtime-version\": \"3.1.3\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.5)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-linux-arm.tar.gz\",\n              \"hash\": \"f37d0e55c9f593c6951bea5a6bb1ea3194486956efe08a2a0f266b419d912cdcbf4ac279358976f0bfa1fe560c333ca5d5437f8e8c718bb5963991e4395e0cd7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-linux-arm64.tar.gz\",\n              \"hash\": \"2f4f6b7ae55802b0beaf5d62bcb64f23ce132c9e08d8ce0f0af8d9b0b1b2c2629b1d4e805e83f831575c9968a86d1495dfa5292d2592af0cd1ae4a385daf42e7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-linux-musl-x64.tar.gz\",\n              \"hash\": \"9a8f14be881cacb29452300f39ee66f24e253e2df947f388ad2157114cd3f44eeeb88fae4e3dd1f9687ce47f27d43f2805f9f54694b8523dc9f998b59ae79996\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-linux-x64.tar.gz\",\n              \"hash\": \"934bf29734776331691a4724f2174c4e9d2d1dde160f18397fd01abf0f96f2ec1bdd2874db9f0e25dce6993d527ea9c19031a0e67383fd813dcfcb9552ea0c70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-osx-x64.pkg\",\n              \"hash\": \"9247576bb5a3387b10b9389c49eee505fc4d5d5ba5861d94dcc69b950c13ef89035b7b3bf83eb532bd12c2f9328da35e99b07632c4529dc24ba4dba6147d12ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-osx-x64.tar.gz\",\n              \"hash\": \"1af1da3ecc4a7f58f7090c88c0a2b5ec4ddf8fc7e4bba295fa9be263634adfee4ad2e7ff3932c8631576d67cb7ed2580d28a48b5f8741943b393104f54c14542\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-rhel.6-x64.tar.gz\",\n              \"hash\": \"9124036fe14c32a855236f83a36931962419bb8241c72b0e212bdf16dd4e60cfb4ed94752f7b0551a0eb7a3a848950f65f7cb85c87b616674d72e3339b0bc327\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-arm.zip\",\n              \"hash\": \"ac844dd463375c0baae5a728ed04e00027b599dfde69b5e7d21b9de0471e82f584ecebeba78abc57e816194ebf8893297c700b0a0fd95cfdb505a527ee6fbb43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-x64.exe\",\n              \"hash\": \"893dc5f04f58f23b8b84ede4f7a4e9510de5cef277f28b768ca8bed05be024445e07029a79aec0ade3fd3741f1fd9f9b90c65ee992ba3d6238ac5649c9c8ce35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-x64.zip\",\n              \"hash\": \"89936531faf24686fb5add6f6771b78df92fab6786398a692ae5930d812322b545199e3c9eec11994233887734a61943c74943f9ba4e491106a0ff794a0ce2a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-x86.exe\",\n              \"hash\": \"3fe714903d42a3bdff13a9151e5f2b5e4d5c6b254d59401e42dccb22fd085cb78d9dd477d2e236b14d5285a866f3140bbaa419b52f859d4c59800c4e47ca2906\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.201/dotnet-sdk-3.1.201-win-x86.zip\",\n              \"hash\": \"48aa1afaf7a52effb367bbb14a66e2c3bf8da468025795daf0fa0d18e3b9650ba3bd23800c9965a4d4ec1d891afecbce51b2487730f1b0d6040ee7cb73a15ec6\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.103\",\n          \"version-display\": \"3.1.103\",\n          \"runtime-version\": \"3.1.3\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-linux-arm.tar.gz\",\n              \"hash\": \"7b646a0e62b781f658862f3e6e2ada2e3ce5a3529b835d8c7fc1931c1b6654de89a152a7a033a3dc23352880684bd149bd4f6fda180a6da66d860ac25b578174\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-linux-arm64.tar.gz\",\n              \"hash\": \"f146fb6678262fa9214f02a0567a2bde2b2e56511fc9c2953b64aa4cfef11d9ef9a834324f21c64a497bdf347435db644eae999bc102c328bfbc1aaac062f24d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-linux-musl-x64.tar.gz\",\n              \"hash\": \"fd9d0a84432725e4f1f39fbfd93933a31b0cf216184d4e558ba6ffa92d254079e3da9a688a6080dd5c360ed6fc2edf4f170939c5119b9b4f9f9ce120fd4ac535\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-linux-x64.tar.gz\",\n              \"hash\": \"c0e0182fbe7c4f0c777951e05c149f8cd5abf4f519a7ab3081fb8f6aef00a0824a03d34fd52ec2f6dcdd7f73da5f0c22ede7819c2ed8f611970e0889615aa5ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-osx-x64.pkg\",\n              \"hash\": \"9638055009c95d8c8d02e6cbb65fadac9e251c5f4ebcf664706481b63d4ed8921b66a0622077ef3da47470567cdcbd52e64a873e2c361f94ab5c75b6a8f1feeb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-osx-x64.tar.gz\",\n              \"hash\": \"a97d11173890b7b22c19f5dc6e169815ee331e2b9f05d9857925f56e8cba6b32117359ab16b195330d7c77eed675b8cc0d576ac131ee958d5eb183860249d276\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-rhel.6-x64.tar.gz\",\n              \"hash\": \"9e9c242da1f77ee46d89a8ea4e7912f8ed41a866ed40280c622b3515f46250b48db4b65cd652a0378e9a8dcf7f6bbb8f9877e2bf5b1deab3f3996f2e4eeb3df1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-win-arm.zip\",\n              \"hash\": \"1498e5889b109004303e2086fb338fb4440e218b25d82f84c918fa73b9dbdd81d12e97b525de858f275d608079bc6def64fb761b53190446d17b8fa8b1f98bba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-win-x64.exe\",\n              \"hash\": \"b99799b76d5f091f4bf3f1bdad1d377235da8c660f7b90b0e922f9e615ce9e872b00762ed281c6edc1c2a419e8df74d7cc55fb43f4a1b6554d8c8487b77dd317\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-win-x64.zip\",\n              \"hash\": \"77ea14ef44640929703d8412b938d64273764e2308cb30dd1e6cfba9aa2165751d9e9960849ae92ad7b865897a913406e6c81575b4f500802db914593260206b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-win-x86.exe\",\n              \"hash\": \"8aa288f0725247a6de4fbd978d183405583a6497524e4a5bce720db3a3be7742df8a162bb44adf544828567148701c9fb03784aadcc745b4f66141d4428e88be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.103/dotnet-sdk-3.1.103-win-x86.zip\",\n              \"hash\": \"7ff2cd943ffc6a3b60b988130362fb134d909cc544174e137e87a45d7356f4346854314bfe40fa60e36cc3d20076d72ae22abdad23aee001a19054d4fc0316bc\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.3\",\n        \"version-display\": \"3.1.3\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20074.3\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-linux-arm.tar.gz\",\n            \"hash\": \"f45cce0406d8143a3c428a06f4a8c9aebb967615d5baa5d984b43dccb12fbeeb5b3d40eef2f6df815b9f78906d1ed631fd12ca2b731bae5286910d31dd256574\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-linux-arm64.tar.gz\",\n            \"hash\": \"1675fc5c801b0655e752aa91c132d6e4103f00ecc9b7f18fde378812d323462dbcf74f3d48ab63f863197b7aee33726286a37c3c5ed360f75278dc9ca677f035\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"92487acfd69b4a0bb001e3ef47cf624b8090a7f72a6b9264739b54998f582611447a3504ae7bc61917a49c5ccd5826547724c40b1dfd9b7ec84c258715a28dfd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"918bf1f2cd216d4bf337eb0e528d05c56c71e75f5452d8ad08f1ae53c9434a570f7608392872f1a2a55486b00b4d59216a5f7c081f332c707baba0c86e54efd9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-linux-x64.tar.gz\",\n            \"hash\": \"ced0b7c9faaf250fbee2c850e8941d47a17da06fa8e576d57063fa4bbc6c8435de6ab488b683d4a692cd622e24d9592f11608a1b358074167cf0b76024815611\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-osx-x64.tar.gz\",\n            \"hash\": \"1af95cce32907af1b7fc7d44804bc2062a79519deb2f17011fbcd0f1f298188ce36f7ca5d517e847aadd6aea89761232ee7c619adf117a726163bbe1259e7756\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-win-arm.zip\",\n            \"hash\": \"ebf36eca1a19a6461205a73ec0a3e8e09e805a830edb54a6421615b5e17ef499f143fdb909cf2e3e34f53db9623d4641248457432bf97d8b370c44c454161278\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-win-x64.exe\",\n            \"hash\": \"52d6d981194cca914e07f93aea7038b9ec1368368d8373348e46388692cb3ad0def98253f94148b5ae76c66ad8874383c64f620d17ac3f964fe56817dc956650\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-win-x64.zip\",\n            \"hash\": \"6d8a21a7420db9091fc05613ef0a923c7b86cc995360c9f0133d632020e042db0efac0343ee6516a28feb2c1dd004b33b74bfdcc1a687efdefa9db1a486c1ca2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-win-x86.exe\",\n            \"hash\": \"3e0e38f9cdfcddc5f62f658a816b0074d05ac958f2962f2ff543edf238562efc63eb001f3e9dba546950b4368c4372b12fca7139a109be58377713bbc65adfe9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/aspnetcore-runtime-3.1.3-win-x86.zip\",\n            \"hash\": \"d6d94793fd286e37bd8bdd529287adc9842b8fe0ce147bb0d6d7127d38b18c259dd5ec06dc61c5bedd5ca77c579f038a7011fa93b83e1df4df4f71b51390f47c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.3/dotnet-hosting-3.1.3-win.exe\",\n            \"hash\": \"a19c544bd6d4a81e87eedc6f08dff0be93ec761cdfd1daa7644743862f1549027221ee5f68dbb9a6585eda52623d9c36c5235e07bb518da741505746fed4790c\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.3\",\n        \"version-display\": \"3.1.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5954c748-86a1-4823-9e7d-d35f6039317a/169e82cbf6fdeb678c5558c5d0a83834/windowsdesktop-runtime-3.1.3-win-x64.exe\",\n            \"hash\": \"9e0c3ab51de6265d8ade1235f9cd6d5a9932459cfff6327fe09b9e9342f0b54c4d41bfc7bcc29c1e3e8994c5df7cfba530126a6ee06de3c32ea3cfcc36013a5f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7cd5c874-5d11-4e72-81f0-4a005d956708/0eb310169770c893407169fc3abaac4f/windowsdesktop-runtime-3.1.3-win-x86.exe\",\n            \"hash\": \"f56d72723864ad55b5a238d07a6b34ac3bcefe92c646aefb8b09cd00db54450192b88982cfc057eee7a6039fc41733da2ab9d626e6dde0240e009a494060699e\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.1.3\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-03-16\",\n      \"release-version\": \"3.1.2\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.2/3.1.2.md\",\n      \"runtime\": {\n        \"version\": \"3.1.2\",\n        \"version-display\": \"3.1.2\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-linux-arm.tar.gz\",\n            \"hash\": \"2bf9273a959033d070e2f36c1966e8ab4f106b00fbf68628717ae47fb62a5e28c340d8c9361bdbe05fc8213e9a08966b90a3437fec764c08726422f57d5e906f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-linux-arm64.tar.gz\",\n            \"hash\": \"dd2b2ff4442c12becf50e27c336c619933926e10b9439d5c4b28e48bf15ee31878e3ad7825b90f030d77f7784faf945c1836e35e7f8409c53be76853a505e3e0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"341a279c42fd1265a94eba7ee30ddcd8a938b2741b378ed15a6d6841a3621390801f1d43ea81524ded743ad7c39af1489a0bc2f73995fd06ce4eb89855fad0b3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"d0cf4ec3f7068fbd300c99715ca40cd6bde5566c5c0104437084a97a35e3a2c200d2c413ad1bb7e3b8f8433ac079b81793e750f7fbdc548c5841bca99742f8b2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-linux-x64.tar.gz\",\n            \"hash\": \"24a8154248ed2a95b1a6c8d72e4a92d1e898393d7950da2fa103e96684784cdfe74483f2a583f6c033d61c4f9dd090b0b6bcab2062bbac4fcd142dcb5685c7ff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-osx-x64.pkg\",\n            \"hash\": \"5875c8aba534babf2ea8b6f3557b2366210d6eaa2e39d9c47b0c6f02cc1824d03641d46aa6809cb1bc0ea917bba32d451f48db980c059416843440436778d990\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-osx-x64.tar.gz\",\n            \"hash\": \"a889d0936db19c41ce58cb81024c8ebddcc5e31b0a3a24f9dcf9aabc5cd10c393cea5323032731deb61ac5cebc46a65958bf31796ca896f59cc6ee2f3764eaca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-rhel.6-x64.tar.gz\",\n            \"hash\": \"59024cdb7eec0b1abb9188dac72f24a58de84e4ae1ba52c3a8d3a793e93648fa986cefc8e662d3be9dc53ca844d7f85072b32188d24dda9a61ad1e43484b0c6a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-win-arm.zip\",\n            \"hash\": \"29a3300d4afbbb1b7e7df597fd39c414195ce59442b9cb74f242df7196c13808cfc88b2ded7a30e150b1bb3451619493f9e8b38ad24b9a1f5f8680743570be2e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-win-x64.exe\",\n            \"hash\": \"3577f065b835487f682d27acb4cfaa55b2cdb05bbab5474c5e6663e5e0d2df2a333a62ea5d906cf94070b2ba70339c729452e1afd4c9179466aa269b4bd4e0e4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-win-x64.zip\",\n            \"hash\": \"2986d9f04640115cfa1ec478ac20d8e5c0f3b57f1d4e379300dfbafe8d20ec775ea1987045d611a1b2d786de7e1981c57ef52824a9d8dda64e1570379187b23f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-win-x86.exe\",\n            \"hash\": \"aa6c08467202a4f0bcc4bdd969d64943bbb0bcf8d44647cfb8e7bb3d20d043d88d13a77472288bde66846160d5bc125a9ce8693b94374abe649a47cb2737750b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.2/dotnet-runtime-3.1.2-win-x86.zip\",\n            \"hash\": \"7953ecd94bb63daef62da544930f7e16ce4fc3da1bcaf62ed98b146315579fcf05f8a1d3e323217489cb1ca0f6b1721353575ff01be9afa4651e42565445d3f8\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.200\",\n        \"version-display\": \"3.1.200\",\n        \"runtime-version\": \"3.1.2\",\n        \"vs-version\": \"16.5.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.5)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-linux-arm.tar.gz\",\n            \"hash\": \"5e8a5e5899cd3c635a4278c6c57b9f9c75ffee81734ccf85feaacf1c3799cc135fd24d401abb7e8783db40e2072769a1d2a012f3317ed39cc019d69712243266\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-linux-arm64.tar.gz\",\n            \"hash\": \"66ec47514d5bd5739db54c4469250e637f99e5792bca758783eb46722cab3a09920b02f7fe3873b1c430cd3ddea85075ce5e62e6f922a9be0c5f367ddf475b64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-linux-musl-x64.tar.gz\",\n            \"hash\": \"b568c3b8c2ebfe0bfad3212251bcc28123072cf4c719c9517d1f187acc81cfbe5db6cb8275eecf266e03e20bf34d9a28aa26a2999b7c4c0a67cc8e9444ead383\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-linux-x64.tar.gz\",\n            \"hash\": \"5b9398c7bfe7f67cd9f38fdd4e6e429e1b6aaac0fe04672be0f8dca26580fb46906fd1d2deea6a7d3fb07d77e898f067d3ac1805fe077dc7c1adf9515c9bc9a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-osx-x64.pkg\",\n            \"hash\": \"59d20fd3aeaaed280c36a0c721a227ff40b746e1fd42152eaaa046a9bea9b6a4070108fe0499d4393034c9253f97ac61da85a8875bb01276281f85ff43d2070c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-osx-x64.tar.gz\",\n            \"hash\": \"0ab419a9726abbea99120f068560c9bd37e8f9f8ec7bd103ad9c091020565a0443bf960bdb7d00b52d25e68f82dd769f0c06c0ae91180e05c32612149e5a8989\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-rhel.6-x64.tar.gz\",\n            \"hash\": \"995bdc1f7d7f3874ba8a21a71e8a3d1c4d7794ef88fab623a836b44769602125a06e1d7362757f1b9f869e2d259d5f183aa6a23640d76b151ad2b1b5194c3252\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-arm.zip\",\n            \"hash\": \"9254fc25627f209ebce6c58321f56e7c565e608ad0667a416aa721eac8519e89be5d0206facffefe079ca69d2cdba6d5edfeef021e119efeb27c843be7eb81fe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-x64.exe\",\n            \"hash\": \"0c2793fa4e334068c81329ccd0b3e8005fb527014aca7e174bf1887eb4097f58cc1df2a91d6c3b2f73e8bf0bd1f4f1acc68a4e85ab5f0e1e085d8f2dea4c7af8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-x64.zip\",\n            \"hash\": \"689c58b5cf8b8d3596708e7007ecd6bb0847d498e01e20af9f6b1599ad8588e2115d80bc5763275341be7d9312a993d165dde0a4758ca4b6b755f1fcd0b0ac81\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-x86.exe\",\n            \"hash\": \"952e0f044b5d78757f9441d686b08f84ff330c305f26daed2c00cab393d335c835c6f65c1bee88044a7500d3320da6321897687affc617ca805d8ee482c17c18\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-x86.zip\",\n            \"hash\": \"da239241efc2ffcbfca2343619cc5f11f65a64cdc79f1ed0a13e55c46913e0baf96a435502c15ef9da9f2cf5b068b702d04d53d6ff168583cad80628c04fcea0\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.200\",\n          \"version-display\": \"3.1.200\",\n          \"runtime-version\": \"3.1.2\",\n          \"vs-version\": \"16.5.0\",\n          \"vs-support\": \"Visual Studio 2019 (v16.5)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-linux-arm.tar.gz\",\n              \"hash\": \"5e8a5e5899cd3c635a4278c6c57b9f9c75ffee81734ccf85feaacf1c3799cc135fd24d401abb7e8783db40e2072769a1d2a012f3317ed39cc019d69712243266\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-linux-arm64.tar.gz\",\n              \"hash\": \"66ec47514d5bd5739db54c4469250e637f99e5792bca758783eb46722cab3a09920b02f7fe3873b1c430cd3ddea85075ce5e62e6f922a9be0c5f367ddf475b64\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-linux-musl-x64.tar.gz\",\n              \"hash\": \"b568c3b8c2ebfe0bfad3212251bcc28123072cf4c719c9517d1f187acc81cfbe5db6cb8275eecf266e03e20bf34d9a28aa26a2999b7c4c0a67cc8e9444ead383\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-linux-x64.tar.gz\",\n              \"hash\": \"5b9398c7bfe7f67cd9f38fdd4e6e429e1b6aaac0fe04672be0f8dca26580fb46906fd1d2deea6a7d3fb07d77e898f067d3ac1805fe077dc7c1adf9515c9bc9a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-osx-x64.pkg\",\n              \"hash\": \"59d20fd3aeaaed280c36a0c721a227ff40b746e1fd42152eaaa046a9bea9b6a4070108fe0499d4393034c9253f97ac61da85a8875bb01276281f85ff43d2070c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-osx-x64.tar.gz\",\n              \"hash\": \"0ab419a9726abbea99120f068560c9bd37e8f9f8ec7bd103ad9c091020565a0443bf960bdb7d00b52d25e68f82dd769f0c06c0ae91180e05c32612149e5a8989\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-rhel.6-x64.tar.gz\",\n              \"hash\": \"995bdc1f7d7f3874ba8a21a71e8a3d1c4d7794ef88fab623a836b44769602125a06e1d7362757f1b9f869e2d259d5f183aa6a23640d76b151ad2b1b5194c3252\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-arm.zip\",\n              \"hash\": \"9254fc25627f209ebce6c58321f56e7c565e608ad0667a416aa721eac8519e89be5d0206facffefe079ca69d2cdba6d5edfeef021e119efeb27c843be7eb81fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-x64.exe\",\n              \"hash\": \"0c2793fa4e334068c81329ccd0b3e8005fb527014aca7e174bf1887eb4097f58cc1df2a91d6c3b2f73e8bf0bd1f4f1acc68a4e85ab5f0e1e085d8f2dea4c7af8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-x64.zip\",\n              \"hash\": \"689c58b5cf8b8d3596708e7007ecd6bb0847d498e01e20af9f6b1599ad8588e2115d80bc5763275341be7d9312a993d165dde0a4758ca4b6b755f1fcd0b0ac81\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-x86.exe\",\n              \"hash\": \"952e0f044b5d78757f9441d686b08f84ff330c305f26daed2c00cab393d335c835c6f65c1bee88044a7500d3320da6321897687affc617ca805d8ee482c17c18\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.200/dotnet-sdk-3.1.200-win-x86.zip\",\n              \"hash\": \"da239241efc2ffcbfca2343619cc5f11f65a64cdc79f1ed0a13e55c46913e0baf96a435502c15ef9da9f2cf5b068b702d04d53d6ff168583cad80628c04fcea0\"\n            }\n          ]\n        },\n        {\n          \"version\": \"3.1.102\",\n          \"version-display\": \"3.1.102\",\n          \"runtime-version\": \"3.1.2\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-linux-arm.tar.gz\",\n              \"hash\": \"b279185fd245c3a254f4bbdd4f743d4309fcf8e2d3a1eb42df2f464e40df9954257209a666287ad3d924f863ca09d0cd8638d394da9f990477a2fc6d71198550\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-linux-arm64.tar.gz\",\n              \"hash\": \"7ad682935158599aeff1f04228df65ce99aa7d34fbe096422a55d6b0c6b38a7de4b9d0af1b667f63728b051d355f0c69526ffa90bb4c4d8ded53fb4ba63233c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-linux-musl-x64.tar.gz\",\n              \"hash\": \"21f7fab1eb4244f9ed89d1dccee4c67813fd1499d693a575e55d077049df14468905803ada814c5fc99ddfec748df453ae3d9d4b1206f9b1089044191e99a57d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-linux-x64.tar.gz\",\n              \"hash\": \"9cacdc9700468a915e6fa51a3e5539b3519dd35b13e7f9d6c4dd0077e298baac0e50ad1880181df6781ef1dc64a232e9f78ad8e4494022987d12812c4ca15f29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-osx-x64.tar.gz\",\n              \"hash\": \"e8054ef013014ff786b89bda7ce26e3f4653fc6a48a926ea6203b208823e5e28573206c84b61fa74985bc8b5f3f0dd4ecd65d12d9284ee267bb34992ff20dd01\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-osx-x64.pkg\",\n              \"hash\": \"c6d8f75e52acf4228c4790c619f2d09899dc56eb9922181e7cc4aa7587fca4f29b3804c591b717f7efd8dbd76f47acb45848ec8cccaa8b7517ee0869d9c2649a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-rhel.6-x64.tar.gz\",\n              \"hash\": \"09aaac40ef588a27d35925c17eb1030338bfad152dc87802a8b1b5af1760d1d21b3ec1116f65563a6d20dc0d17607f53d426dffa0c0e8d83a76b40d3d4f86069\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-win-arm.zip\",\n              \"hash\": \"f130313997e432917569157eca3b7bf26513473f02ea0f9edee70b0f43adaf4b2c4c232668ee4062c0798bbb29ff3fd4d8259bee8facfedd2b136524c9e25d72\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-win-x64.exe\",\n              \"hash\": \"361c805703812e1463e7660de99e569f476ea9164fd4267f314ce10b865321ba44d5afc3eaaed7c8617f7787845d08bcfbc2d3914441a16d47c87c88a1404390\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-win-x64.zip\",\n              \"hash\": \"4fc6efdf696d51c3c0651ab30c662eead668d0936ed2290c72a5d6a155a105c0e954f267924b69e61cffec53076630293dd810221bfac488d5961c243657ceca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-win-x86.exe\",\n              \"hash\": \"763ff189d55497accbdfb4b8745a9b76c92b17e99ec4a2e99c07e2f49ba8b3ad69b43135098cdce2a350cbe7b8bb91173af58f938074a1962afa558b399a3861\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.102/dotnet-sdk-3.1.102-win-x86.zip\",\n              \"hash\": \"78c6365641641f21c0879c3d9aff6882e758f99d3eef7b9a125e1adb403fddbc8d483b5e5e3d25d8279b1881b82b6bdb1deb39791b8eb4a4bc25a86ec5dc5e23\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.2\",\n        \"version-display\": \"3.1.2\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.20018.2\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-linux-arm.tar.gz\",\n            \"hash\": \"e2a9d4c53e7dcdf6ab1f3b782c57d162297401cff20b7784bd019eeed360ed2d3635eea869bb42e2fc5965cf0c8d4d1517d0988e475a5689685af77b63ff64c0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-linux-arm64.tar.gz\",\n            \"hash\": \"83f642f11f24f82e0bafa5298a86d8f6cdc39918bd79a721e5543295018198ed72408c518a8be107c77a5ab5a2d52590d80c4548b6de501fd456b839c3f952b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cfe565cd1bf112425decf9a4a9be0bf0a71c7a4180b9134a4103360ddcd0cf4ef166cab4327d57f72f5113edace6a2a9a6dba25b914d439ddb6018d96985a2cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"7a171932a99c10e003deb39cd2377fe8ef4486d75da372ca0aecefbd3c065816320573c9384fd3ceac1793acf06079a802999e479f3dff816651c043ed05a245\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-linux-x64.tar.gz\",\n            \"hash\": \"35e39d78f134f34f0430fbad995c987a44999e90c588fa9532e3376f8c09e9aeb3bd9b7b04f3af29b2fd1bd14ba4a124f0a32c10fd1bb96964f4232d7321708e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-osx-x64.tar.gz\",\n            \"hash\": \"d09d56e20654c36c3557e866ac168be5be66b7789b0e0736fa101b22a86b20f461cc70332afe989dbd36d74da1a6adc8fa8c32897ec1cfdec6d2c1fb12461dc2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-win-arm.zip\",\n            \"hash\": \"5bb8a4697d7a81399a1db8bf94a8eb950c98d34e7345dff457584b9b2cade7b4279a0e015f3d0347d2e4979efe07d87eec18cdac228ada2f90b04fdbbb9946d9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-win-x64.exe\",\n            \"hash\": \"192552b6f85b2a3535d6adb1d7bfaa96263dc329a5bec1054874b92246cbb42487b43806b12f068f6c173d20aeffabbd6b7d10f5486f83cd0400e4b15a677a21\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-win-x64.zip\",\n            \"hash\": \"2052f158ed37071ff5845ef7ea3f63853c513debd038563a78094425ee8126fa54080a3f042395d6aa862ae09b6139795c65bba3156c41c911294103cb05e9d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-win-x86.exe\",\n            \"hash\": \"5ce0c6bbc985f9f4a05493c3e7d9e1374d59eabfd8a21efddb760bc7b30fad55a4eb92c62b573fcd5aa7742d1bc6f6af1c6d1b100c6a32995c87fdb8ba2afba6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/aspnetcore-runtime-3.1.2-win-x86.zip\",\n            \"hash\": \"d500ad28c36a2708ee4d2cff2667a626077009be53d51163a88783b55572b803cc69606e1619555187531417e125bc49ec44ee4822cb1425dc25151a9a945670\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.2/dotnet-hosting-3.1.2-win.exe\",\n            \"hash\": \"913470ccc4a9c0ac4ef05c47d717e757a7fe594fcb2cc71cc852e478fb66b51840bdae23433ac149601cfea6ec8f4468e2bda1eb92ca0e3849f33c301cd561d7\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.2\",\n        \"version-display\": \"3.1.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3240250e-6fe0-4258-af69-85abef6c00de/e01ee0af6c65d894f4a02bdf6705ec7b/windowsdesktop-runtime-3.1.2-win-x64.exe\",\n            \"hash\": \"fe59f904f038b106f48ea96f8ed917607f667caa4f9ee358d7962296217689158bf8fce98067133545739a080bb365b72429ed0ff80642d7e201307d5498594c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/b824906f-bd6e-4067-86a6-95c61620674d/cfcdab84a01cee94fdaa31271c3d4d47/windowsdesktop-runtime-3.1.2-win-x86.exe\",\n            \"hash\": \"37da913ff39292448d810098c937ebbe33869558c0c79333ee8aabc5319dc149d23b0d9b001dd114fd5cd19b5b96a172b6a6a3dce12fadeaae0460b2f77b6f43\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.1.2\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-01-14\",\n      \"release-version\": \"3.1.1\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \" CVE-2020-0602\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0602\"\n        },\n        {\n          \"cve-id\": \" CVE-2020-0603\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0603\"\n        },\n        {\n          \"cve-id\": \" CVE-2020-0605\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0605\"\n        },\n        {\n          \"cve-id\": \" CVE-2020-0606\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-0606\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.1/3.1.1.md\",\n      \"runtime\": {\n        \"version\": \"3.1.1\",\n        \"version-display\": \"3.1.1\",\n        \"vs-version\": \"16.4.3\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c44fad246c0c6437f78e6fa8b29c17db6d78455a423ab255f0071c6cf6061697af5373fce746c78be7682630a575caaf1e77615379e9dfa6249bdcfcb326df35\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-linux-arm.tar.gz\",\n            \"hash\": \"553f09d35085f6a8ff7b2392fcf4e392102b5ac855590b9a806174521e9fdbd269c09f367fbbe036f69e54e40a9cd9940937bcf78150d68dd5c793102d304486\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-linux-arm64.tar.gz\",\n            \"hash\": \"93fe49f09a65217ba07439f5ddf0a92e312d662191cb02fa5307646c70f16bed168d9213d272d3ec0a5a02924cc6350689126926d9f1e2425d48594c4d879cd2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"73a29e7f6c662beabd70d20bb4331c7a4d3fe4096002cb802f2db08946fd918681151e1cfcda537210231883852364a5c7707e11bbc28d8613ff4ec1a8e98015\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-linux-x64.tar.gz\",\n            \"hash\": \"991a89ac7b52d3bf6c00359ce94c5a3f7488cd3d9e4663ba0575e1a5d8214c5fcc459e2cb923c369c2cdb789a96f0b1dfb5c5aae1a04df6e7f1f365122072611\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-osx-x64.pkg\",\n            \"hash\": \"d030cd231652fe1bcb5febdde51db5758c8d90998351f9c57d092a60320bff8bcfa0ef30bf5db97adb83787df9d39b97909fb271d12999b697e9a24b8f09a3b7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-osx-x64.tar.gz\",\n            \"hash\": \"6a69699e7092b501e3d5bce331cb7d1ef33ef69f9833d9c80bbac0d06021208c3ac6f799ad625f7089dc310f269f4e64fd000b47aea292b180dab393aa9818b8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-rhel.6-x64.tar.gz\",\n            \"hash\": \"02f27cab7efcd28f047b8de06a549ea3aa5dcc597e64c8dc9b57c600e740ff7079d9d9c8af7124aaf4c5d002ee7248d362aedf71d4b251d4371fa0c7c6563182\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-win-arm.zip\",\n            \"hash\": \"16d13204443af1169440ec0dc0bd07debd98f875d17ea69a959a6d6867e80dcaf57a3872722b8d25a093d0bcfcfb9414449c6a4750e6a561442a648452d27ace\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-win-x64.exe\",\n            \"hash\": \"5be4cbc2d8320edf6a5859e48e362d46ecbd478ec4620e7740c30b8b01d2a0861e44ac196f305433fdefe9941f23299e72c1d66c19f59b77bb560732d4e48490\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-win-x64.zip\",\n            \"hash\": \"1d1dd4a3fe49154b402f1836ffb6463ada19833fbeeac4e07da96665d970b19c5d37a188f2b6cb691322a65c7e3587295764129bcd93be799776c2ca849959c8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-win-x86.exe\",\n            \"hash\": \"a80ab56b00b98a358127ef46e89a1094436a72c4f58fef9e0e2ac4429680e7fe701a12c40c7e681dd33249e0cfdb555ce23b6c5f257c442f53b5c7cc8239f5ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.1/dotnet-runtime-3.1.1-win-x86.zip\",\n            \"hash\": \"583bafaa85f6d6709c21093bcbe4ad0dac77986298593c3c128abb5aebb532a9b0c708ae4d113f7de52aa06f1332b1a75d13ace10477981d42e09858973955d3\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.101\",\n        \"version-display\": \"3.1.101\",\n        \"runtime-version\": \"3.1.1\",\n        \"vs-version\": \"16.4.3\",\n        \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-linux-arm.tar.gz\",\n            \"hash\": \"bd68786e16d59b18096658ccab2a662f35cd047065a6c87a9c6790a893a580a6aa81b1338360087e58d5b5e5fdca08269936281e41a7a7e7051667efb738a613\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-linux-arm64.tar.gz\",\n            \"hash\": \"03ea4cc342834a80f29b3b59ea1d7462e1814311dc6597bf2333359061b9b24f5ce98ed6ebf8d7ca05d42db31baba8ed8d4dec30a576fd818b3c0041c86d2937\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-linux-musl-x64.tar.gz\",\n            \"hash\": \"ce386da8bc07033957fd404909fc230e8ab9e29929675478b90f400a1838223379595a4459056c6c2251ab5c722f80858b9ca536db1a2f6d1670a97094d0fe55\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-linux-x64.tar.gz\",\n            \"hash\": \"eeee75323be762c329176d5856ec2ecfd16f06607965614df006730ed648a5b5d12ac7fd1942fe37cfc97e3013e796ef278e7c7bc4f32b8680585c4884a8a6a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-osx-x64.pkg\",\n            \"hash\": \"8960356b66e5d5f4760bcc2fd0dc6638e6644c2ea350c772b51e0217fba0e9b31a7d40a1f85bb805cd14044be99ee876ee237cf7d2fc527ea8b7eb765675ebf1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-osx-x64.tar.gz\",\n            \"hash\": \"b20865ce6c53b7f3321b4d18ccab52307183e4f1210215385870baaaa814d0ec57c8d41aca9a64b7edca4da1dec841f006e07f2af78dd68465a55ea9f25ca057\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-rhel.6-x64.tar.gz\",\n            \"hash\": \"4813bd9bb530f1761a8514cb96ad8a9635b6895a5c5f4c2904c812fe345cb817d80250a19d67b10a3bd4f7ac8b529fc46462c85d6706852cc32d62591336c24f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-arm.zip\",\n            \"hash\": \"081096c3ab9f0335ae4a08bc6bc1176d81bdb13f4a699de4e1f00362597694d92bc8067585abfa14d8ca11c51b9146eae49017f18c8a89e99d1d03f565b74700\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-x64.exe\",\n            \"hash\": \"eec02a5434de65b36b481136db06cd10eba4ca5c4947b536d567b003a8cac4f29012b74ad131a1e0dd4a79611702aa660f57949f0761259d1050d2481e4929cd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-x64.zip\",\n            \"hash\": \"d9a77240c348f49f730697d1ec0389489a61a9472de43f47215bc61bd0a05ceca53e5e574a26c11a7c2e1d1d05d95182c6230e7488aab837729f5057e9adc771\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-x86.exe\",\n            \"hash\": \"71fef05e26f1c07c368ccb399f27bf3cd02d099b2e83456ae173c5fe1e6b945286c44897d9c8977d72f0614db65d097a291285e8bbb3b738e24f66354d2f8e6a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-x86.zip\",\n            \"hash\": \"98e5608ed9ac299327109090ac081cc93fa516f26ce992b3a4886c95b478ec2f326fab38e2be1e2c29d1c670fea74d742d80af8642dd587ca0284fc1fc6f5bb7\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.101\",\n          \"version-display\": \"3.1.101\",\n          \"runtime-version\": \"3.1.1\",\n          \"vs-version\": \"16.4.3\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-linux-arm.tar.gz\",\n              \"hash\": \"bd68786e16d59b18096658ccab2a662f35cd047065a6c87a9c6790a893a580a6aa81b1338360087e58d5b5e5fdca08269936281e41a7a7e7051667efb738a613\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-linux-arm64.tar.gz\",\n              \"hash\": \"03ea4cc342834a80f29b3b59ea1d7462e1814311dc6597bf2333359061b9b24f5ce98ed6ebf8d7ca05d42db31baba8ed8d4dec30a576fd818b3c0041c86d2937\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-linux-musl-x64.tar.gz\",\n              \"hash\": \"ce386da8bc07033957fd404909fc230e8ab9e29929675478b90f400a1838223379595a4459056c6c2251ab5c722f80858b9ca536db1a2f6d1670a97094d0fe55\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-linux-x64.tar.gz\",\n              \"hash\": \"eeee75323be762c329176d5856ec2ecfd16f06607965614df006730ed648a5b5d12ac7fd1942fe37cfc97e3013e796ef278e7c7bc4f32b8680585c4884a8a6a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-osx-x64.pkg\",\n              \"hash\": \"8960356b66e5d5f4760bcc2fd0dc6638e6644c2ea350c772b51e0217fba0e9b31a7d40a1f85bb805cd14044be99ee876ee237cf7d2fc527ea8b7eb765675ebf1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-osx-x64.tar.gz\",\n              \"hash\": \"b20865ce6c53b7f3321b4d18ccab52307183e4f1210215385870baaaa814d0ec57c8d41aca9a64b7edca4da1dec841f006e07f2af78dd68465a55ea9f25ca057\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-rhel.6-x64.tar.gz\",\n              \"hash\": \"4813bd9bb530f1761a8514cb96ad8a9635b6895a5c5f4c2904c812fe345cb817d80250a19d67b10a3bd4f7ac8b529fc46462c85d6706852cc32d62591336c24f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-arm.zip\",\n              \"hash\": \"081096c3ab9f0335ae4a08bc6bc1176d81bdb13f4a699de4e1f00362597694d92bc8067585abfa14d8ca11c51b9146eae49017f18c8a89e99d1d03f565b74700\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-x64.exe\",\n              \"hash\": \"eec02a5434de65b36b481136db06cd10eba4ca5c4947b536d567b003a8cac4f29012b74ad131a1e0dd4a79611702aa660f57949f0761259d1050d2481e4929cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-x64.zip\",\n              \"hash\": \"d9a77240c348f49f730697d1ec0389489a61a9472de43f47215bc61bd0a05ceca53e5e574a26c11a7c2e1d1d05d95182c6230e7488aab837729f5057e9adc771\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-x86.exe\",\n              \"hash\": \"71fef05e26f1c07c368ccb399f27bf3cd02d099b2e83456ae173c5fe1e6b945286c44897d9c8977d72f0614db65d097a291285e8bbb3b738e24f66354d2f8e6a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.101/dotnet-sdk-3.1.101-win-x86.zip\",\n              \"hash\": \"98e5608ed9ac299327109090ac081cc93fa516f26ce992b3a4886c95b478ec2f326fab38e2be1e2c29d1c670fea74d742d80af8642dd587ca0284fc1fc6f5bb7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.1\",\n        \"version-display\": \"3.1.1\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.19350.1\"\n        ],\n        \"vs-version\": \"16.4.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"34aa2507dd8f0be7f8fa3f92450a017d23a48ffcf16e67cd6f314b1145a48874e49b881928a497413e12cd21021af8c9c9955dda5f2b866f8c6e599fdd7d71aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-linux-arm.tar.gz\",\n            \"hash\": \"5171cdd232f02fbd41abee893ebe3722fe442436bef9792fec9c687a746357d22b4499aa6f0a9e35285bc04783c54e400810acb365c5a1c3401f23a65e6b062f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-linux-arm64.tar.gz\",\n            \"hash\": \"7f44e4c134fba9f4e41c4b0148ceaf1551cf06b534f27eaf3c4533b211b35faf793fc8cee8d39bee37c908cd0fa0f220aeca1c713d2472e95662048a9ee0bb57\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"865e08a6ca9ad83ad8475ecfe2383b746f5a228b9daaf88e4b5883afa1e50d3209568d57695b02f059e2038d70388d16fd754770fbd5868e9d8a20f88f83604b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-linux-x64.tar.gz\",\n            \"hash\": \"cc27828cacbc783ef83cc1378078e14ac558aec30726b36c4f154fad0d08ff011e7e1dfc17bc851926ea3b0da9c7d71496af14ee13184bdf503856eca30a89ae\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-osx-x64.tar.gz\",\n            \"hash\": \"42773bd11916f73cf333eaa57f513cf9046657c05b6a958e8e0d191b8010a1fe30172527ec9738b141d6c6d885932dc68a05f372cf6ffc1f91a3de5726375075\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-win-arm.zip\",\n            \"hash\": \"35d704b8ff625eb5fe2a17e1e8cc008639e5cc0b5a186f430fa2e00819e088a4d72dd764c980c01a92516ef9f12d7a73dd31ed3d5f50b6e1a0dd2a4504a9777b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-win-x64.exe\",\n            \"hash\": \"d25ecb63948ef81efa2a4983eb0637d26decdd809c6244edd5194f4b93a4515d39f9c06535b5404a7a6f059e84964ec74f22d8d005af17b22e93f1d7573d097e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-win-x64.zip\",\n            \"hash\": \"fcbea9f6515d4644b93996224ec8e5c4e25e6b67152ecfd3fd315a60ee2602472a083493b0e7a299fad5014e69001becce60cf65f71bfd7c725c064eca14b040\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-win-x86.exe\",\n            \"hash\": \"7f635248fcc2409bb662ab4c956192f7d10d25713dde6e98ec138b3b8f26cff84b1aa20785690527bb5eb842aa6b0a5aca126fb576a8eebd05836f982520f21d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/aspnetcore-runtime-3.1.1-win-x86.zip\",\n            \"hash\": \"3d7b0625d838c12b2a88a9a6dc2eec600cbeeb36122a1042f4b5630e61b61a40ac4ca08da26c416fabf45ede8e80431eae877ae189926e3fd84fcb9f40dcd07e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.1/dotnet-hosting-3.1.1-win.exe\",\n            \"hash\": \"6dbc505188db136bcda59e44ec55bd3f4a3c6194663f6029d91efc61269d924229401feeef31b5ae11aee9ac5ae55aec38f84aa05e8546bc7d1b753b5e895f5e\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.1\",\n        \"version-display\": \"3.1.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a1d41522-4da0-42bc-b3f2-e4b7d842974d/03101425368c87c55c1fe7cafbb4e0fb/windowsdesktop-runtime-3.1.1-win-x64.exe\",\n            \"hash\": \"af62dcd0a8aff2f5e8564d2ff53d5b370cf6c805c99760497661a392e1037d436b028c4ec327ca796918c965894004bf777d4922ca46824fbba303f3422a76f9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/662153d9-58c5-4630-a326-ed9e4e342787/1deb6ba6a2a5f5f694b784a6859b446e/windowsdesktop-runtime-3.1.1-win-x86.exe\",\n            \"hash\": \"94cc59b8237fd45f7cec15eef4be43b6e905fdf29ff52e96d14c2199907f278ad9f6ba4d025841e9d3a57f72ae511904f345da52be5560ab408727418138c324\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.1.1\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-12-03\",\n      \"release-version\": \"3.1.0\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/3.1.0/3.1.0.md\",\n      \"runtime\": {\n        \"version\": \"3.1.0\",\n        \"version-display\": \"3.1.0\",\n        \"vs-version\": \"16.4.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-linux-arm.tar.gz\",\n            \"hash\": \"a665ed66621e557db17c4b92a8db99e1b555a2d81e6764ffd25da39c94531888759eb1af1a209d2718fe843f89ce92a884c4b51fad55cf84d8001952ad5e7eb8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-linux-arm64.tar.gz\",\n            \"hash\": \"c3978544d3dec58fc522339788d743d4629ad087254231f93315935262d51cf6b3ce60747c06aa6e689ae5be9e21a8bf6d5a707b41a79f7399549756b3b6d340\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"040e55c341aa15357bd7e1ee4fd421f13056aac2eaf9f327c77fd1948fbe963d23a66cc5ffdfaa232407853fd250922327107e2878bf0af9a7652fd2c4c46815\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-linux-x64.tar.gz\",\n            \"hash\": \"99949807c00871d66e8ce7c25c14998e78a0ea60ba8cc42244643ed2e13aa360285df1c8d27729df3efb319f4af9163ea5626c1478a9dd4bed9d2a58e01d6343\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-osx-x64.pkg\",\n            \"hash\": \"5fa7013d990b81bfd4e52a2a5f65fd5899737236ea91156aec1b0c9dbd5e7bf7d718f6c05c5af57104d674712f8c06d4df35369c4ffd47d05ed30908c411de68\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-osx-x64.tar.gz\",\n            \"hash\": \"83d47d9ae040275cc4e677ffb8e00cd23287d2125b66fdadbc4f56c47432111f1ac6e85f15adea811b974bebf6409b7533085923eba1b17170879091d7e774d0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-rhel.6-x64.tar.gz\",\n            \"hash\": \"7f09a5ace580fa8138bbf4510161298f889f90f6852898a421944b6def82260a6477b1750e0fdd9dcd0af443b6957059000804dc1ce34fe4c7dd044308a5eb33\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-win-arm.zip\",\n            \"hash\": \"b410d2408c4ab2428f6688dabcf1a69641d423669be31794b0380cf8f0e9b4d38460512d71274a4efbaab2a851f3e9f0b5a39452711a0c8394cff00fff02d913\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-win-x64.exe\",\n            \"hash\": \"d4d6eef858776856482e23769f2a1653a941830d9ec8b6661d2f7b5e97c80a3172f00da0589ab2a5a23fae0858c38cd132403a8aa1e453b50370b0ad2c374a41\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-win-x64.zip\",\n            \"hash\": \"90a534dd82c99d659373a7549c87dad4dc1ff9d3074e355785ee0f9db6022d785913b019f42652b3a4906d2963f08d2c86cdd95fb77a7ad7ccfefd626ad51490\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-win-x86.exe\",\n            \"hash\": \"f9c1c8dabc46a28e07ae88b2ca94495c9b9091c15d82678e79b86bf02fa007ad16998201e6e308818c54891abff36afb6f5536994cec4ea2bb76bc61253e8f2d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0/dotnet-runtime-3.1.0-win-x86.zip\",\n            \"hash\": \"fdd9223585731a5bcc5540a5913f9578debad2339b41d9a1fdee09cbd6136ac7435b281f8f2c700346c235a96737b2464da164f4393861ab13aeb5b8465acb56\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.100\",\n        \"version-display\": \"3.1.100\",\n        \"runtime-version\": \"3.1.0\",\n        \"vs-version\": \"16.4.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-linux-arm.tar.gz\",\n            \"hash\": \"9f4848b4bca649cc6131032de4b0115549a3dafb6bf90250930794aa69f7939bba82cedda67578348a83b50b7057e452846a400589bb4e9d4a2d1b33ce57c71c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-linux-arm64.tar.gz\",\n            \"hash\": \"93634c555698ca5c3392332a93551b1548fa103328401c5c25e8955f085124b887b73736b70a139fc8eb8d622e47fcfc0aa25210b73a8f851906b32eaa8a9887\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-linux-musl-x64.tar.gz\",\n            \"hash\": \"517c1dadbc9081e112f75589eb7160ef70183eb3d93fd55800e145b21f4dd6f5fbe19397ee7476aa16493e112ef95b311ff61bb08d9231b30a7ea609806d85ee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-linux-x64.tar.gz\",\n            \"hash\": \"5217ae1441089a71103694be8dd5bb3437680f00e263ad28317665d819a92338a27466e7d7a2b1f6b74367dd314128db345fa8fff6e90d0c966dea7a9a43bd21\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/74af2107-4511-4acb-bcc9-ce771f53cf94/bfa74497df0516a76be07931ea1ddcd2/dotnet-sdk-3.1.100-osx-gs-x64.pkg\",\n            \"hash\": \"5fdec0c2d0145efe286bb3f2611df7fad6467f06eda853c29031e232a6b550addd9a72364701d7af0d952e6258fdff8e238121f5e3caf97b3dfa63f8285d4a12\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-osx-x64.pkg\",\n            \"hash\": \"5fdec0c2d0145efe286bb3f2611df7fad6467f06eda853c29031e232a6b550addd9a72364701d7af0d952e6258fdff8e238121f5e3caf97b3dfa63f8285d4a12\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-osx-x64.tar.gz\",\n            \"hash\": \"142922cfb98b0cae6b194c3da2478fdf70f2a67603d248bbf859938bd05c4a4a5facea05d49b0db8b382d8cf73f9a45246a2022c9cf0ccf1501b1138cd0b3e76\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-rhel.6-x64.tar.gz\",\n            \"hash\": \"26edd6409f893198486de3e7030cdbbf4a6b0dd2b74ada7df5640b914a493ccd996dd558f295a5ae7718ebb56610585400319a44e734f33a3d6c944f9a84a825\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-arm.zip\",\n            \"hash\": \"8c50c5ab35fdaafa2867904f92380b9e351ad2d7d02663d301cd12a0e95cc3ba2dcf3e216952fce9cb8135d43a27de13d63c524d03de1010c4063890c4d8a408\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e2967778-67ed-4884-a8fa-2dc04c1bbf71/b49836510d0ad06bb7fc0a105ad68fd5/dotnet-sdk-3.1.100-win-gs-x64.exe\",\n            \"hash\": \"4b73d5cc6cd1c98700749548acb8b3c6edc2ad0ceee7d9034766b434c5c70897d15a626e295788483f36f858ebd60f7ceb806380fca3a38138ab35db8fd867cf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9d1ea0b6-31c8-4a99-883c-4be62fb1c292/dbd1134c68875db3e6bd577146b04fe5/dotnet-sdk-3.1.100-win-gs-x86.exe\",\n            \"hash\": \"73c7bb7faecbae179c6967f06ccaf4b31fab61d4a190e150af5bef71c5eafc3f0aecdb3c2c04ed90ba5aef8468bae0f0fafac3eaf9facd4cca3586972632ce2c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-x64.exe\",\n            \"hash\": \"4b73d5cc6cd1c98700749548acb8b3c6edc2ad0ceee7d9034766b434c5c70897d15a626e295788483f36f858ebd60f7ceb806380fca3a38138ab35db8fd867cf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-x64.zip\",\n            \"hash\": \"94ee575d6104058cdd31370fc686b5d1aa23bf4a54611843c1f93afc82cad3523217b5f2eaddd4b5c136bca252d2c9047092f7054052c8683fa0f363ca28ad11\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-x86.exe\",\n            \"hash\": \"73c7bb7faecbae179c6967f06ccaf4b31fab61d4a190e150af5bef71c5eafc3f0aecdb3c2c04ed90ba5aef8468bae0f0fafac3eaf9facd4cca3586972632ce2c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-x86.zip\",\n            \"hash\": \"51da4337cb56e997d120b738f92a896f081dd43fe557dec22c7f5b6224a1867031193bcddf10cb22f5fb8da4cba1286e54ce0ffa60023bb93f6975d3985dd19f\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.100\",\n          \"version-display\": \"3.1.100\",\n          \"runtime-version\": \"3.1.0\",\n          \"vs-version\": \"16.4.0\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-linux-arm.tar.gz\",\n              \"hash\": \"9f4848b4bca649cc6131032de4b0115549a3dafb6bf90250930794aa69f7939bba82cedda67578348a83b50b7057e452846a400589bb4e9d4a2d1b33ce57c71c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-linux-arm64.tar.gz\",\n              \"hash\": \"93634c555698ca5c3392332a93551b1548fa103328401c5c25e8955f085124b887b73736b70a139fc8eb8d622e47fcfc0aa25210b73a8f851906b32eaa8a9887\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-linux-musl-x64.tar.gz\",\n              \"hash\": \"517c1dadbc9081e112f75589eb7160ef70183eb3d93fd55800e145b21f4dd6f5fbe19397ee7476aa16493e112ef95b311ff61bb08d9231b30a7ea609806d85ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-linux-x64.tar.gz\",\n              \"hash\": \"5217ae1441089a71103694be8dd5bb3437680f00e263ad28317665d819a92338a27466e7d7a2b1f6b74367dd314128db345fa8fff6e90d0c966dea7a9a43bd21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/74af2107-4511-4acb-bcc9-ce771f53cf94/bfa74497df0516a76be07931ea1ddcd2/dotnet-sdk-3.1.100-osx-gs-x64.pkg\",\n              \"hash\": \"5fdec0c2d0145efe286bb3f2611df7fad6467f06eda853c29031e232a6b550addd9a72364701d7af0d952e6258fdff8e238121f5e3caf97b3dfa63f8285d4a12\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-osx-x64.pkg\",\n              \"hash\": \"5fdec0c2d0145efe286bb3f2611df7fad6467f06eda853c29031e232a6b550addd9a72364701d7af0d952e6258fdff8e238121f5e3caf97b3dfa63f8285d4a12\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-osx-x64.tar.gz\",\n              \"hash\": \"142922cfb98b0cae6b194c3da2478fdf70f2a67603d248bbf859938bd05c4a4a5facea05d49b0db8b382d8cf73f9a45246a2022c9cf0ccf1501b1138cd0b3e76\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-rhel.6-x64.tar.gz\",\n              \"hash\": \"26edd6409f893198486de3e7030cdbbf4a6b0dd2b74ada7df5640b914a493ccd996dd558f295a5ae7718ebb56610585400319a44e734f33a3d6c944f9a84a825\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-arm.zip\",\n              \"hash\": \"8c50c5ab35fdaafa2867904f92380b9e351ad2d7d02663d301cd12a0e95cc3ba2dcf3e216952fce9cb8135d43a27de13d63c524d03de1010c4063890c4d8a408\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e2967778-67ed-4884-a8fa-2dc04c1bbf71/b49836510d0ad06bb7fc0a105ad68fd5/dotnet-sdk-3.1.100-win-gs-x64.exe\",\n              \"hash\": \"4b73d5cc6cd1c98700749548acb8b3c6edc2ad0ceee7d9034766b434c5c70897d15a626e295788483f36f858ebd60f7ceb806380fca3a38138ab35db8fd867cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9d1ea0b6-31c8-4a99-883c-4be62fb1c292/dbd1134c68875db3e6bd577146b04fe5/dotnet-sdk-3.1.100-win-gs-x86.exe\",\n              \"hash\": \"73c7bb7faecbae179c6967f06ccaf4b31fab61d4a190e150af5bef71c5eafc3f0aecdb3c2c04ed90ba5aef8468bae0f0fafac3eaf9facd4cca3586972632ce2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-x64.exe\",\n              \"hash\": \"4b73d5cc6cd1c98700749548acb8b3c6edc2ad0ceee7d9034766b434c5c70897d15a626e295788483f36f858ebd60f7ceb806380fca3a38138ab35db8fd867cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-x64.zip\",\n              \"hash\": \"94ee575d6104058cdd31370fc686b5d1aa23bf4a54611843c1f93afc82cad3523217b5f2eaddd4b5c136bca252d2c9047092f7054052c8683fa0f363ca28ad11\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-x86.exe\",\n              \"hash\": \"73c7bb7faecbae179c6967f06ccaf4b31fab61d4a190e150af5bef71c5eafc3f0aecdb3c2c04ed90ba5aef8468bae0f0fafac3eaf9facd4cca3586972632ce2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100/dotnet-sdk-3.1.100-win-x86.zip\",\n              \"hash\": \"51da4337cb56e997d120b738f92a896f081dd43fe557dec22c7f5b6224a1867031193bcddf10cb22f5fb8da4cba1286e54ce0ffa60023bb93f6975d3985dd19f\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.0\",\n        \"version-display\": \"3.1.0\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.19320.0\"\n        ],\n        \"vs-version\": \"16.4.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-linux-arm.tar.gz\",\n            \"hash\": \"d8ac48b37b5d239e08f68c9f56c7f8d8c3ef2db3b7f55aaa123c990bf19a4b4546d71aded53ce266ea77095a0b6bcc319a9e3c1a5be418a09ece501e59538677\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-linux-arm64.tar.gz\",\n            \"hash\": \"0a7fae3a4549b3954037adeafe0673728c7b4e765aa0a3952e58de2b6f746d3785434fe2970f6a4ff78c9228e2ffbda2e400e47917ef9da4dc938f4ef09e2643\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"fa5e4ae71134a8a6db4ad6a247d3e31406673e03f0a64f7faaad3d84cfb3b70d2cf69e9d9abc1f8688138907d4ddd37cd908669999d85a87892e164053c63847\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-linux-x64.tar.gz\",\n            \"hash\": \"7d14e4617413fd7939f90a4e283b7abedbd51ecfbc150938d4c52ecca8182cab8c4946408c1f6369944c68757c91b580796d9e0c62349c377c5e90b739a87d8b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-osx-x64.tar.gz\",\n            \"hash\": \"fed96ef5d7f08184bdb45e90da1913b34bf69d9193fac92c228e187f8453564b29a52a1eae8448f80045a3790b094c3d58c05d9f219e65744240b3c28684501d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-win-arm.zip\",\n            \"hash\": \"0cfc66ed6bd75da9b95fc929eb6715bf89559c4895689ff67b59aaa3a2ffb4f5f3ea6533483b6df44adfde925a640763c48dbb20ed9de422cec53932847cd745\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-win-x64.exe\",\n            \"hash\": \"ff3944eca228c8ab471b6bccdd782be9e01f8aa34304b4adb0077b11d20a7207e9266241bd10a25aecbff3ce773c0fcb0ad9d7d2d466c00bca8c3f903d3ea9f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-win-x64.zip\",\n            \"hash\": \"6adb4e332cd4a4f905130bd3715351f7f3e4426692a1522d274c4aca7ab3803ce34e2e7dbf57bb96be71eb6962819a465f78fcabe9c5046257ae330b96731eb6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-win-x86.exe\",\n            \"hash\": \"c5528a747d66f33ead9f6ed0b89068a288b162b016d2777ef323e94f491cf1a37e03afe712a2eb53eaaa9167145903bfa64df1bfdfaa02c061c5f115d1c60935\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/aspnetcore-runtime-3.1.0-win-x86.zip\",\n            \"hash\": \"72f8d85d5e9ef33160be4ecd52cba9c40900c1e8623bfa2f33560eafa4fe4f631071ba3b77a23b37805904dc3064efa33278b3eb44a37d9c6cf7ee8c5eee410d\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0/dotnet-hosting-3.1.0-win.exe\",\n            \"hash\": \"f831fefd7315370e68b6743b4511435a1bbfd0945ac1957e16e22ccd7cd56c3fa0da083b66d6528039b1333ab0c8d72f00a05592b359b9ef7bc0cc9fca5872c1\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.0\",\n        \"version-display\": \"3.1.0\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/a1510e74-b31a-4434-b8a0-8074ff31fb3f/b7de8ecba4a14d8312551cfdc745dea1/windowsdesktop-runtime-3.1.0-win-x64.exe\",\n            \"hash\": \"bf76dbd0e973e2923f78feefdfad1f40579c664ac857f251f44ed20780dfd68bf41494efcd11529d5be0b8afebed67a3d5ee9c9b3c25bfb8d05e1dfc18b517e3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e93147bb-7654-46d6-954a-bbd54da63b9b/cbdba4605fd04dc3886ca772d3953c53/windowsdesktop-runtime-3.1.0-win-x86.exe\",\n            \"hash\": \"fe3ab4d46f91888f979c63c368cb4b9de7f9820e0488ff6e81f9783af7bc5106290beee69aa74b682891d6ee7e3dd0984cc187eb01a09fd9fa7f75d6ee00795b\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.1.0\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-11-14\",\n      \"release-version\": \"3.1.0-preview3\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/preview/3.1.0-preview3.md\",\n      \"runtime\": {\n        \"version\": \"3.1.0-preview3.19553.2\",\n        \"version-display\": \"3.1.0-preview3\",\n        \"vs-version\": \"16.4.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-apphost-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-apphost-pack-3.1.0-preview3.19553.2-x64.deb\",\n            \"hash\": \"d7512c261144f1145cccaee726ed7b410235c6aa1350cb45e510a6e301fc44d87bfa8be628572c5d6d6892cd89d3fcd22123b185d63ff6827dd9028fb21d77c2\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-apphost-pack-3.1.0-preview3.19553.2-x64.rpm\",\n            \"hash\": \"1a9e14aeafbf6655ab7d98363b9061f69063ff9337a941cef897ea612ef297d951a2282966f25dd679776300095e1e9f63008a4833f32a4247b5824bdb6c3fa7\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-host-3.1.0-preview3.19553.2-x64.deb\",\n            \"hash\": \"9dcaed169d09690bb0a440e3e344eba7f90e578b8a86ef6b0704b66405bb97742343cac56803b97db62229f470c86475181e2d48e4274a1e20de841fea8b7dd3\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-host-3.1.0-preview3.19553.2-x64.rpm\",\n            \"hash\": \"40fde5edf8e85038b1c95ab0e6fbdc953920f8ef9755e94a7490249ba84e92f00a768268a4881839a7a162758f95d3a8cc873cd4fb2b4c7fe4028336a92e4bb0\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-hostfxr-3.1.0-preview3.19553.2-x64.deb\",\n            \"hash\": \"e8b8b8f3f650d339b5b11efae3fbd75c023155ddbb9995cbb2c501b5a3e530f010ee4707e9795a217b8c4eb434ff55eccf5226b22eec791f805363d2354c0b30\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-hostfxr-3.1.0-preview3.19553.2-x64.rpm\",\n            \"hash\": \"5e10a997589c12912104d2273deb0c6cd4d6227819d0a16145b304f5bce564751cbb5784db22cca4371e88853df2cc64203c3bfb37fa61a52a39c21fbdf63dd9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-linux-arm.tar.gz\",\n            \"hash\": \"d338db64acd721c6a903e19146c487e8182f3a466257bd45128d8f6f29ac45bd598e2c0cf641f82c0e7770ae6307fedf67c312c7ac80258b3b3c567cffa31f89\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-linux-arm64.tar.gz\",\n            \"hash\": \"0f43f3a6601fae9d6c1f56f0024debb9b12632b77a13e8b11c41c936f71629976e5cff59cb75f2e3ed3573431af13e4f4cb9cb5d1f3a9d41dfb4e10a917dd83e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"b8ad662ef806d961a7fffabe495b65bdab0fd8825c758e515149b55708f421e3599d0abd8159325f46da0daf95cf1868bb6637481c0c1315e07af3d5b19be545\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-linux-x64.tar.gz\",\n            \"hash\": \"e3c618fb1ed6314cc3387f84dfb89d95d807be60ab4ad0cd1712f145a1c3619c683f933ba2c39e0c683fcfc4a50f5d366c6ad9fdb584e75a326102e9da390342\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-osx-x64.pkg\",\n            \"hash\": \"38493e151f5e441af690552bbc8c3d93040a028f078afb8398c4fa0bafcc950ae296ccb6114fd64b622582093dc458e11d4b754a39f1f6d440f4e5815cd1b2df\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-osx-x64.tar.gz\",\n            \"hash\": \"23cb08c9b2311e4bd3e682da5192198b8958e7c71196a539ba874572b275534ee18ea32c6a16455ada74a1bbf5b88e22311229d42cc0df8218f1909746c89b25\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-rhel.6-x64.tar.gz\",\n            \"hash\": \"c86c156ea8486f3ad8e72d24558d5279b26b01329fd5002aff71b7b2abce5988ed75fc2721c04531d24404a32638d904e895f308b711cd4bb4cc8a6f31d3de62\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-win-arm.zip\",\n            \"hash\": \"3ba6883880784e4ed7bd1f48cbff8103d91ef8086e039584abd6f770f32b1ed23a06869ceb8b0e4321069d26825220a8479c078502ff51a68282a142039ebd7b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-win-x64.exe\",\n            \"hash\": \"f07546c9ef6cf9bc96c753cf1e57b6efbc30edc01e22eb1d21562c7269aa563c902eed26ee0faacf588953b60c1780b9eea5478a4f48a6a07bac430862c7be9e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-win-x64.zip\",\n            \"hash\": \"f245798a4fabc82525a6f05866cf363e9ba0c3c3ad7aca4613a80e9fb9dce9b5202ecfc6d3d37f2f00618d26c1b44f66bd821511185a6169fce1c9503a5ed934\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-win-x86.exe\",\n            \"hash\": \"b12c36d65893932a2d298604325d3309366908af822d6299aae36816593d0986c7584639637e83916bce5574c4b2ce112e1fbc6986883cb71e7826e99eb09fe4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-win-x86.zip\",\n            \"hash\": \"cd1bb12303c7910cf2dc6bf8b11d73c944c6766a2597e397a8c709a4bdb717e86c8d207e4db3b5910b19b0808710f488e4274d2048d5e2893d37921beccd3fa2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-x64.deb\",\n            \"hash\": \"ba4514ab7ec386586af00da39701253e18fe8003dbd756d6b572093035c0176af0f0ee54762837da37c60e09905016e1babdd5b68c5f5e0d7a84936661fac554\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-3.1.0-preview3.19553.2-x64.rpm\",\n            \"hash\": \"758722c030a3d04b20981eda6b470ecc1230c095cb82b32e57ba6bca6f3abc9e209c302dba0416ebe3c952dfb893b9c45c4f676eaa5c81eaab8ef7454c6003f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-centos.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-deps-3.1.0-preview3.19553.2-centos.7-x64.rpm\",\n            \"hash\": \"11c2935ce542784c529a9e9703cbe3bad3ef2d28e4d0d9ccc6b2ddf47f28891737bd3fbf3406447ad7349fbaafd370cb7162b3514f46db8eedce07c3f76a254c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-fedora.27-x64.rpm\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-deps-3.1.0-preview3.19553.2-fedora.27-x64.rpm\",\n            \"hash\": \"4a1de7f9f30ddf544d343c2e4e4363beb57d483a7a76ff7aa25033b350cbd67fa1a09fc4ebe38998d58a0336a678f44681de48eeceae6a682c2f89c3e6981b63\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-opensuse.42-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-deps-3.1.0-preview3.19553.2-opensuse.42-x64.rpm\",\n            \"hash\": \"89c74ecda23c415f2f030f5ee492fe007715c1187faf54cdc5446186133aa111e7a99e091b7afec4aa4dae4514ede83e6f4306ee08c3a043a6288a706471dc5a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-oraclelinux.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-deps-3.1.0-preview3.19553.2-oraclelinux.7-x64.rpm\",\n            \"hash\": \"83bb411895e5f20de8f23e583ade928f8b7962aadd2c39d73d68235d27b371cec2ae76dd8928abfdad3714d3b3af7b3ae4fc13e2e418acc9c677391bd2a9e954\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-deps-3.1.0-preview3.19553.2-rhel.7-x64.rpm\",\n            \"hash\": \"aff78ee4bb7631c9ee20456ef8a35f7893da008a5b0b705632f1c2991a768060f1bdb4f00cd99d5864b459ff19baea0453fabe85710a82339195fc28cfae26f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-sles.12-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-deps-3.1.0-preview3.19553.2-sles.12-x64.rpm\",\n            \"hash\": \"9929d2cf42918963c1141e86ef7f1046a981f7d1b357cac6396420eb78cbe4a6d662d8f95a3c10052de6cfc4cb7f3b154cbeaffce6d1389e40182443aa5f0bdb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-runtime-deps-3.1.0-preview3.19553.2-x64.deb\",\n            \"hash\": \"fe26b9dc59fa1a2c1f22155e27ec6805185ff1eda8f8738cd396c1a6800eccb77eabe645d31b6bb763fdc163fc31d6c81766e67866393db99c81c606f831b0df\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-targeting-pack-3.1.0-preview3.19553.2-x64.deb\",\n            \"hash\": \"923551aee937a9a2c52237d0a7fa8b7aac5f3e0c6f4288c80bb85a03485f3d1fb8f88f2783985d4559d8c297c5c90124a143372c74f6a6d018e9eea553f838bd\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview3.19553.2/dotnet-targeting-pack-3.1.0-preview3.19553.2-x64.rpm\",\n            \"hash\": \"c99b1d97eacc8603fb91014160846cb1737d2c8494cf8fadd7ac187b9e64a4ce7d77a075542aca2fda6447f39deb016ebff8f534aa2bc0676ce10df7979d5a54\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.100-preview3-014645\",\n        \"version-display\": \"3.1.100-preview3\",\n        \"runtime-version\": \"3.1.0-preview3.19553.2\",\n        \"vs-version\": \"16.4.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.4, latest preview)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-linux-arm.tar.gz\",\n            \"hash\": \"44d4b9d9daaddb32845fd946ff6cc5a2600928edfd9c1dcef602e0ed81f807ddb3e9d698f9b8fd661a195c5aa232bd92cc23ffeea8d1cf05f36bd8819d66f788\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-linux-arm64.tar.gz\",\n            \"hash\": \"9bf6478d1a1b249c8af3d449bc3e9ab144035d5ec247865c7d5a164071727fd725ac1639a6a8690da5339200cfc456911e98dc4b0b83bcc63d9bfe03aba91ebc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-linux-musl-x64.tar.gz\",\n            \"hash\": \"47f02feb163679e96db052de0c32cc7e8a12f8ac3e4d6a60abfbc0f270489a39e420f1c2c4ead5015f0c5c1b077ecb24056f78ec61b779f6166f7db4900e2843\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-linux-x64.tar.gz\",\n            \"hash\": \"df7252d0602d23152a557cbb6a6917ee48cba75a72aeeeb7647bd16405fd0747a7d9253c9bc1df6903d6d3504fbd35c87c9ce1567407070f4be06bbe04e03237\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-osx-x64.pkg\",\n            \"hash\": \"9417169595c1ab17dd00e20826205590d33b116343323996f9c1d69cff2d3cd2f744a955749a9a48047a7e7a4a5df355d35f6a75cf7eb30e0ae120e396639f8f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-osx-x64.tar.gz\",\n            \"hash\": \"5c934806a66c40855002088c0ba1af52772e756a9e54fc52882c40eefb865a5ecc7910b9f478120e40890a04c4da884e63427e8d5549ddbcec8e6fae3252b1ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-arm.zip\",\n            \"hash\": \"f900f6edef58b16f3a89203458eb8a18bfe9877aea1a7eb1bb062da53397544d68bab23b3536ff58c2048bae0f4024c012e313bbd4224b527999b7fb0f086384\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/dd4568fc-ed11-4100-ad42-794dedea6e19/42dfa752f635e81ad7d95180c20231f0/dotnet-sdk-3.1.100-preview3-014645-win-gs-x64.exe\",\n            \"hash\": \"f825fc838e6e4ed697ea3333d001620c24242f4f46061763d61ed6c4aaca630cfa727b9cc5dc2fca1c57c2157fabd6658b28a9ee39721fd86385a1bb5351056c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5f4af6e7-6658-4151-9916-5e08edc1200b/3d3e77a07bc84e304bab9834ecb9f8b3/dotnet-sdk-3.1.100-preview3-014645-win-gs-x86.exe\",\n            \"hash\": \"dbc74246bf0c4f1aedf21fd6965a568feff159851696478b75abdb9d3d985efa456c7e6128ca477650ca707a7061f19ec07bdad0354ca02b0c74456529e2c593\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-x64.exe\",\n            \"hash\": \"f825fc838e6e4ed697ea3333d001620c24242f4f46061763d61ed6c4aaca630cfa727b9cc5dc2fca1c57c2157fabd6658b28a9ee39721fd86385a1bb5351056c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-x64.zip\",\n            \"hash\": \"be60b824877055a706ee3d55c41bca3c4718cb1da61d25135b5514df43e1567cb7643cf9c7c77343b306b51270afbf7436b9365d01dc83685e36cc02c56be98f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-x86.exe\",\n            \"hash\": \"dbc74246bf0c4f1aedf21fd6965a568feff159851696478b75abdb9d3d985efa456c7e6128ca477650ca707a7061f19ec07bdad0354ca02b0c74456529e2c593\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-x86.zip\",\n            \"hash\": \"728f40eecc8d5e8be73921c8091fc293812c15e4f5c5f5e25d524dcdce9be14b4aaa5f91c9a8ada0cd9ba5d8cddbb26076e3036f67b8f211945718bc24714215\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-x64.deb\",\n            \"hash\": \"141fb478dd0798f7ac49341cace61772b9cad254981a81b587722c078a39ed4d33553d56ef7c53d83ab11ad716c3e8be1b0c587987b55b89eff0394a2fe3a368\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-x64.rpm\",\n            \"hash\": \"c639ea6d099d7de1c84c230ac0c5ff5b2bb23c52a9c64cd49d02dcf0b5fbb27bccc9b6262de704de6bca42c9326d70f89840f1812878da658b9044bfa26a958b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d5115e81-0f78-4bb8-b655-3ab4f46c45d1/bb708762351bb161fbb6e685bfeae1a5/dotnet-sdk-3.1.100-preview3-014645-osx-gs-x64.pkg\",\n            \"hash\": \"9417169595c1ab17dd00e20826205590d33b116343323996f9c1d69cff2d3cd2f744a955749a9a48047a7e7a4a5df355d35f6a75cf7eb30e0ae120e396639f8f\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.100-preview3-014645\",\n          \"version-display\": \"3.1.100-preview3\",\n          \"runtime-version\": \"3.1.0-preview3.19553.2\",\n          \"vs-version\": \"16.4.0\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4, latest preview)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-linux-arm.tar.gz\",\n              \"hash\": \"44d4b9d9daaddb32845fd946ff6cc5a2600928edfd9c1dcef602e0ed81f807ddb3e9d698f9b8fd661a195c5aa232bd92cc23ffeea8d1cf05f36bd8819d66f788\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-linux-arm64.tar.gz\",\n              \"hash\": \"9bf6478d1a1b249c8af3d449bc3e9ab144035d5ec247865c7d5a164071727fd725ac1639a6a8690da5339200cfc456911e98dc4b0b83bcc63d9bfe03aba91ebc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-linux-musl-x64.tar.gz\",\n              \"hash\": \"47f02feb163679e96db052de0c32cc7e8a12f8ac3e4d6a60abfbc0f270489a39e420f1c2c4ead5015f0c5c1b077ecb24056f78ec61b779f6166f7db4900e2843\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-linux-x64.tar.gz\",\n              \"hash\": \"df7252d0602d23152a557cbb6a6917ee48cba75a72aeeeb7647bd16405fd0747a7d9253c9bc1df6903d6d3504fbd35c87c9ce1567407070f4be06bbe04e03237\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-osx-x64.pkg\",\n              \"hash\": \"9417169595c1ab17dd00e20826205590d33b116343323996f9c1d69cff2d3cd2f744a955749a9a48047a7e7a4a5df355d35f6a75cf7eb30e0ae120e396639f8f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-osx-x64.tar.gz\",\n              \"hash\": \"5c934806a66c40855002088c0ba1af52772e756a9e54fc52882c40eefb865a5ecc7910b9f478120e40890a04c4da884e63427e8d5549ddbcec8e6fae3252b1ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-arm.zip\",\n              \"hash\": \"f900f6edef58b16f3a89203458eb8a18bfe9877aea1a7eb1bb062da53397544d68bab23b3536ff58c2048bae0f4024c012e313bbd4224b527999b7fb0f086384\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/dd4568fc-ed11-4100-ad42-794dedea6e19/42dfa752f635e81ad7d95180c20231f0/dotnet-sdk-3.1.100-preview3-014645-win-gs-x64.exe\",\n              \"hash\": \"f825fc838e6e4ed697ea3333d001620c24242f4f46061763d61ed6c4aaca630cfa727b9cc5dc2fca1c57c2157fabd6658b28a9ee39721fd86385a1bb5351056c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/5f4af6e7-6658-4151-9916-5e08edc1200b/3d3e77a07bc84e304bab9834ecb9f8b3/dotnet-sdk-3.1.100-preview3-014645-win-gs-x86.exe\",\n              \"hash\": \"dbc74246bf0c4f1aedf21fd6965a568feff159851696478b75abdb9d3d985efa456c7e6128ca477650ca707a7061f19ec07bdad0354ca02b0c74456529e2c593\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-x64.exe\",\n              \"hash\": \"f825fc838e6e4ed697ea3333d001620c24242f4f46061763d61ed6c4aaca630cfa727b9cc5dc2fca1c57c2157fabd6658b28a9ee39721fd86385a1bb5351056c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-x64.zip\",\n              \"hash\": \"be60b824877055a706ee3d55c41bca3c4718cb1da61d25135b5514df43e1567cb7643cf9c7c77343b306b51270afbf7436b9365d01dc83685e36cc02c56be98f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-x86.exe\",\n              \"hash\": \"dbc74246bf0c4f1aedf21fd6965a568feff159851696478b75abdb9d3d985efa456c7e6128ca477650ca707a7061f19ec07bdad0354ca02b0c74456529e2c593\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-win-x86.zip\",\n              \"hash\": \"728f40eecc8d5e8be73921c8091fc293812c15e4f5c5f5e25d524dcdce9be14b4aaa5f91c9a8ada0cd9ba5d8cddbb26076e3036f67b8f211945718bc24714215\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.deb\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-x64.deb\",\n              \"hash\": \"141fb478dd0798f7ac49341cace61772b9cad254981a81b587722c078a39ed4d33553d56ef7c53d83ab11ad716c3e8be1b0c587987b55b89eff0394a2fe3a368\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.rpm\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview3-014645/dotnet-sdk-3.1.100-preview3-014645-x64.rpm\",\n              \"hash\": \"c639ea6d099d7de1c84c230ac0c5ff5b2bb23c52a9c64cd49d02dcf0b5fbb27bccc9b6262de704de6bca42c9326d70f89840f1812878da658b9044bfa26a958b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d5115e81-0f78-4bb8-b655-3ab4f46c45d1/bb708762351bb161fbb6e685bfeae1a5/dotnet-sdk-3.1.100-preview3-014645-osx-gs-x64.pkg\",\n              \"hash\": \"9417169595c1ab17dd00e20826205590d33b116343323996f9c1d69cff2d3cd2f744a955749a9a48047a7e7a4a5df355d35f6a75cf7eb30e0ae120e396639f8f\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.0-preview3.19555.2\",\n        \"version-display\": \"3.1.0-preview3\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.19309.0\"\n        ],\n        \"vs-version\": \"16.4.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-linux-arm.tar.gz\",\n            \"hash\": \"d5162decae6a916ee7a9fadf356f461eda619bab87065e1fd7c3b38f5df52e5aea4e85c84109868185831712313d99c3af5bc112c7509278f32bf03a95b7b20e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-linux-arm64.tar.gz\",\n            \"hash\": \"1709ca4d3edc1f5330886c24046c92746ad270acd7fd24674cba08052d3c6080396d0a13eb5535a1e33773ea3497b40fcb29dce24b506dae592d0111b6f0e0a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"0611074ea3a3836e57561114548abb0f468f6fc5d6d09ffdb1ce15cfb150a28ccf644218e2610ad4c0603fcf42e57fe07e0be82db4c0ab25bd66011688c27a6c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-linux-x64.tar.gz\",\n            \"hash\": \"4005ceaecf160821d1f2df76c30661bd939e3a4ab0e73b5c7d557db8d1559b48f7afe4c1e7e4ca86ea47191d003865dc272a7acf761643fa060dfcbc868ba25c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-osx-x64.tar.gz\",\n            \"hash\": \"fed8b48cb2c16278e780752fd5a91c05d8fbda9148a608bd0e82e9fc2324b70ad9df19eed322c4a4c9f715340d59cf0b41f0ea5478bf8361cbc11f644d81dee3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-rh.rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-rh.rhel.7-x64.rpm\",\n            \"hash\": \"9b0326280396f51b7bd8efcb93970864c002a739ab5a0e1b3bde2b9215ac8bb0a68cd4bfeb054d993b8da36be67c9903f64df5c2a240203cfa9424fdff770a10\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-win-arm.zip\",\n            \"hash\": \"ecb209af2f2011390407356713d4d6df9c49711924b41a19544a5aa304c5d92e72b3f222481e8c427ec7976bf5819ed57f547582f88da8309972253927612b64\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-win-x64.exe\",\n            \"hash\": \"e542af6db47ce9e7650fa588861bf0fdd83f4188172064c51b5c9846c0a707fe6f7255cab822a4cfdfcd500be29ae6367dc2dbc4ac7e5ef80dd7f4a38cae1128\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-win-x64.zip\",\n            \"hash\": \"eaafb36636e9cee9e885075d102cb3aad50328ae02c0a9a11a1b45c4717158cd2c4fc3d1fe58e9a56dfbd4dc46521e5590441af0093b87d61aeb061e6939c46b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-win-x86.exe\",\n            \"hash\": \"733454ac3d678457539ba2b95f9d465d1b7683a0ce6eaeae0a3d09a6a2c582b033b644b9df7ca5fffe554aafce3942beea5db895d0783852b8d15c8c4420152f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-win-x86.zip\",\n            \"hash\": \"eb290dc7ef4fe9464a32520eee6fe1410b7604f620638aaf5d9f7717626fe2a576d7d0ee99148e4e395d2b61beef3e9f1cd53ed20722a291cea76c84566e362f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-x64.deb\",\n            \"hash\": \"79fffe1672956507377e5ccc4d5d7598b1d9401fd365cbacf2474e4978a9ef822c002f34725bca5f81f77bd7a44d602a37afadb1a3294c3f33164521a45d06da\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-runtime-3.1.0-preview3.19555.2-x64.rpm\",\n            \"hash\": \"66dc5e4c45c216f51944e587c0fcbd7639e02ec335e63b0695207a780fff0c3e91ae0c61f1e4dda6851711f156d83bec1ab02a5dcce6b5de646893f17147673d\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-targeting-pack-3.1.0-preview3.19555.2.deb\",\n            \"hash\": \"759f3be2d31af788ec19c9005ef07d21834a77980e62176d28298b4406c32e20234681275bc529eaada95bd6b4ce8287f642d87916a7952512637b9961fd29b4\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/aspnetcore-targeting-pack-3.1.0-preview3.19555.2.rpm\",\n            \"hash\": \"d9ecd5ba7b895839f30e10e04b372c109f39388a1b89ace59c5289b7548e1225107239f2dd11daa231019300e86bf664e938781aa39a0498e173994fabac42b6\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview3.19555.2/dotnet-hosting-3.1.0-preview3.19555.2-win.exe\",\n            \"hash\": \"30fa0bc1f9aad311c52aa3c6351006209f4e962bf00a7bba14c5ac957210a2f3c346402746b063e9094a134e5ede7d33ef33e619389b3071dd4138aef343d417\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"3.1.0-preview3.19553.2\",\n        \"version-display\": \"3.1.0-preview3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/00a9c6a9-9207-4ff7-a990-0df374f76616/b04ea6d4849484967ceca4d7d5b8ff8a/windowsdesktop-runtime-3.1.0-preview3.19553.2-win-x64.exe\",\n            \"hash\": \"7e4470849f4a887283f83d8e38ce39c6177198a83f8338dc759cc2284b8493108de50eeac1a80e1406cae21f8d41222897a7d2589c3316b27d3a47b5a0578c50\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9e223ed0-aeae-4b06-8a36-07ab8a5190fa/2583694e2f81584e7581ac72edfa78c5/windowsdesktop-runtime-3.1.0-preview3.19553.2-win-x86.exe\",\n            \"hash\": \"25e1ec93163a2a08a335eba8db1d585a91f4afbb7fb450ee6fc9e34dc6c5ab431f382aefc5827356ec46f0466d9b9bd02833a2f76ad2b024c988dc510f226c41\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.1.0-preview3.19553.2\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-11-04\",\n      \"release-version\": \"3.1.0-preview2\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/preview/3.1.0-preview2.md\",\n      \"runtime\": {\n        \"version\": \"3.1.0-preview2.19525.6\",\n        \"version-display\": \"3.1.0-preview2\",\n        \"vs-version\": \"16.4.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-apphost-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-apphost-pack-3.1.0-preview2.19525.6-x64.deb\",\n            \"hash\": \"b23012f5b67fd6a69ee914336f0d5523563446fd255d3ac1123d30aa1b4aa17e658e6420a963f3a69448278c25c9f389cdcfb49ca8942fbd655f1e9d228e8ece\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-apphost-pack-3.1.0-preview2.19525.6-x64.rpm\",\n            \"hash\": \"14cb8c776f2518bd07f6bd028d4e85bfc450443f0ebe627c29f9154edcaac2b413a024cfb9f0e3293ca06c56afe7443b5929d2b1038e6740465f0cc50afc4546\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-host-3.1.0-preview2.19525.6-x64.deb\",\n            \"hash\": \"4d3c6f29e15089299beb1e765921e3c1b715cb254f9642c353ce6d5a26b430ff224414f9023d74bf3e9026b592a38c56b213f56bfdb8d7cb331732ffd16c05b9\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-host-3.1.0-preview2.19525.6-x64.rpm\",\n            \"hash\": \"dc418c5e331790444f29dee73a8ba6cce88b15fad344ab58e0b6698dc9a5131abf2524da3dd0f27bc74e90d2ea54af03f1feffbe96a2792b8e19b57b7ff9497e\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-hostfxr-3.1.0-preview2.19525.6-x64.deb\",\n            \"hash\": \"f5454271a9223aaa8a8ad64a5d472c644b1ba986f61f42c16df35ff4b06ec5a5595bf6ddf9fa4e648d9c7cc540a0090d097c3fbb749f94910fdb0f16a5f6a2eb\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-hostfxr-3.1.0-preview2.19525.6-x64.rpm\",\n            \"hash\": \"e8deb9394341bd910721e6e40d0c3b85bddbf0756d3c154640519a0a6f490a2f417986edcf3c72fcbb6efb0661e076ea4b84ef6278453a9ce89f97cc468e7b63\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/7e27e2a5-9ede-4a0b-8387-a5c44fd8b50a/985a970be392d1bb4cdebc844e32ee13/dotnet-hosting-3.1.0-preview2.19528.8-win.exe\",\n            \"hash\": \"e9b78e49afed049aa16477faef729a8bdea88548a01ce038f00ca6fba81167e745d53f3acc441034781d0d25e6f951a2fce69991c387d627f64c9524de1ee3c9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-linux-arm.tar.gz\",\n            \"hash\": \"e1789750750977cd234044d55437bc0eb423538d01f6914af2ea8904932c7ad8381084e16ab998336b08bcc202be3cf8be8affec8f5cc1d9f4c8a4acaf90aebe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-linux-arm64.tar.gz\",\n            \"hash\": \"509298b953b9f11427c09137e1778d08a24f0f7eab42b9e920e889200815ab4ddb0d237971af8a41b521947573747932c111e3d5416f6623d8f0619c821d957a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"b4cc00661c6b470da2aea56ac9ccb12e64bb6ef26c388b8b1caa9c14dc7ddcd2c87d55fd7f46c83d352f08edb1f709b9d2c6a68688e96af0ce23ad115e2d0519\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-linux-x64.tar.gz\",\n            \"hash\": \"f40e1aae05bbaf5c83b1eb5e61e8cd68f0dbbbf84e4c14537ca64674db3bd90d35b5f009088b82cda41e57ccbb15dcc9eb5a5a0b87b2eaba94f82cc2b051b02f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-osx-x64.pkg\",\n            \"hash\": \"d1a23d66878a85737f75558cd820660cb1fb85d03e5aeadabffc031e17382ecf3812a4c685102c488431c92ad85fd7cf719c406d6c94daaa8119a8a2aad25746\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-osx-x64.tar.gz\",\n            \"hash\": \"211f31eb309cad92450b62ed51148186276fe2151a55aef798dc772aa5eed29d883dc1a15081a5e51cd1eddf7e9d3a619aaf8eaf39fc8108da2174480e682523\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-rhel.6-x64.tar.gz\",\n            \"hash\": \"45ac00d11a714a501d5fae399749b4f4786ae3a42551723c8c48b026807c87966032d8cc2becdd053e0aa05a27e29f9cf5744c36168ba24af3c82d6eb31dade0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-win-arm.zip\",\n            \"hash\": \"3f0e2be4268269c6824def5149a1d7f16a9a7e4cac88daaf538daf938ee854df1cd22fba53a7c3b15428fedf3622590767b303d184932680302981f4b21770db\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-win-x64.exe\",\n            \"hash\": \"534e26a08deb3e3c117c303b229c68246934b2b43d57f78dac944ccc1fd387d9fd4f33bbf14d56fd49828443345ed2cbf4f4d3a52cc5a786c70e0d6c12afe746\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-win-x64.zip\",\n            \"hash\": \"bc00e01db277e902dfb0dffd2dda34f7e79211ca54f15e263e2c272fe34d42197f33fc75d403b7dcafc685c3a05f311766748cfed71b0185dfeedefda9b55791\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-win-x86.exe\",\n            \"hash\": \"cbd4735fbc2303dc171567c27433f494ece416037f25d0682af42e8e3d3929631a238a24ea7dc377e417dacc287742ff78b391c142e14934ff02039d91859e9a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-win-x86.zip\",\n            \"hash\": \"1db3819ae7678541d4e38bb69e1ad7def97fb081098f98cda3ec7a8d1b4e64de1c9a2fe0810dda5bbd4318286bf439a0ccd5fbb79e39a224848902bf8daf019f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-x64.deb\",\n            \"hash\": \"6fcb18053f56d6a8d0005845645834e175ef96c9e83a41405bb75fa977d6062d3ffce2107f51ae606cd57f405291c1f6eab64dc5fabc9476c5bcc29911bf3ff8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-3.1.0-preview2.19525.6-x64.rpm\",\n            \"hash\": \"03cb11549a85bc60dfa14150a360a512c8784a774d6c61fc18ae3eea6822888096ff1593a521756c3139a0c84b185c702154cb614a77485bf6ed83c167f3942f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-centos.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-deps-3.1.0-preview2.19525.6-centos.7-x64.rpm\",\n            \"hash\": \"8379814e3a05555e3875abe8a8a1de822b1a9cb35d713aeda52c1ad69dedb09f099196bc1075d42c496c8db757685550c073af24c42eb0f50d49af91dd837a8e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-fedora.27-x64.rpm\",\n            \"rid\": \"fedora.27-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-deps-3.1.0-preview2.19525.6-fedora.27-x64.rpm\",\n            \"hash\": \"a0a40ad3a7ea8a47b6ce907bc62c54815d99ff5366a0ef1b93527e26cd720f9dd0e59c7d70cbd3b04ed6f93345888004364f40c4dcd73c725bcc228c709c36c0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-opensuse.42-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-deps-3.1.0-preview2.19525.6-opensuse.42-x64.rpm\",\n            \"hash\": \"15b80dbd7310d743922a1907f5cc4d20ea076372342025cba04a7fdc586ead318b6fbe81fb4aa8ed43217b3cc0f1f55e3e07cacea2d38b5e336b4d870782295f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-oraclelinux.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-deps-3.1.0-preview2.19525.6-oraclelinux.7-x64.rpm\",\n            \"hash\": \"636e075f2e674edcf53c28f57e4cbc791a8915c59aba3ffff6a3e8afccc662305222fb4b1f5e04c517fe909589955f19fc25b9691b8a168d4d243cf75bc9aab8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-deps-3.1.0-preview2.19525.6-rhel.7-x64.rpm\",\n            \"hash\": \"b77f5dff131342ef9fff1292a583530fadd7fa88436f9b816ddf781450c9bb0b499eaaf67c6634e8e2b2b55548e893b681f069859b103e2c7bd8529f95dec621\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-sles.12-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-deps-3.1.0-preview2.19525.6-sles.12-x64.rpm\",\n            \"hash\": \"4215d19636e8e4fb357ae20246562c12ff0171661475e4489525cf22095e8eb036c46c0ef9d38a4530d5ef66de343527e29edd178b3e056f60128ed4e4c089a4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-runtime-deps-3.1.0-preview2.19525.6-x64.deb\",\n            \"hash\": \"5df8aa0de5925415ebcaa13d6c700b3569246f6687fe5aafe15e1e106313de65aa7f89239e9e91d9d741e3de6a70fa7560f1438525e5902ab7e03a7f3cc509c7\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-targeting-pack-3.1.0-preview2.19525.6-x64.deb\",\n            \"hash\": \"9d2e0b86755738989ede687dbe8d35b3e95f1bf2a1f07c1751515f74845849ab8b5e95390226ec56d755b60fff2e7291aae87c05568087c3525039f3181af795\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/dotnet-targeting-pack-3.1.0-preview2.19525.6-x64.rpm\",\n            \"hash\": \"fe7c4ad62d0c36ebaeae7a17cf634cbe85f21f074573eec0407fb91c167ff52da1f4dfab4b6d4e1d5557301bd872a6a0a38d6c90e8c150814a6043f5ae102a56\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/windowsdesktop-runtime-3.1.0-preview2.19525.6-win-x64.exe\",\n            \"hash\": \"b5aebe0c20b739989b8a28c05ce61de3fbd38cc9a04f7e83907e6203eb26c5403c96ea24446139c1a013a388cd675358421d512105e60fafc8293144b6297007\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview2.19525.6/windowsdesktop-runtime-3.1.0-preview2.19525.6-win-x86.exe\",\n            \"hash\": \"7e12a38fd30e4072f9787a9b49cdc70e8d3171f1160e964541e43ac735dceb625e12c732853d0fdabeb61a210c0caf5de6dd775995a42c63dc1545dbb098d45e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.100-preview2-014569\",\n        \"version-display\": \"3.1.100-preview2\",\n        \"runtime-version\": \"3.1.0-preview2.19525.6\",\n        \"vs-version\": \"16.4.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.4, latest preview)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-linux-arm.tar.gz\",\n            \"hash\": \"fbb3854400e787392ae8c98a60276930535b4e93cb0332de1396fe5030d79c31eb30c70f53aa1b57b55346db130e1944d92f9a5582da616502a30c5e4991b186\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-linux-arm64.tar.gz\",\n            \"hash\": \"60a96b96271f77b57ebd30b48f46e6f2130c25dac678fd3f8599278368f941a3792c429a2ae0307f8c9ed2a690a4d7244fc2080d556deb66d633918d8d298b4f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-linux-musl-x64.tar.gz\",\n            \"hash\": \"a83a19d7e72982d72fa9e6e52815552945d37d863e78a9b79055164b86a1ad91fb4fe62ce1c41d8ca79955c580c9972231d847d68e5577505b40a41a46037d50\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-linux-x64.tar.gz\",\n            \"hash\": \"8c7b68efcf67cb365d79bf4481c7639305e158c1a7feb7fc88fd601e2200619fb43897603f4c4eb06b30f97b4cdb992e86bc85d03369a3bef55445ba1d200ba1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f5f89fcd-4146-4774-8004-ac68fa78f2a9/8523da107916288fdbbec6972b161f0f/dotnet-sdk-3.1.100-preview2-014569-osx-gs-x64.pkg\",\n            \"hash\": \"d130a0d33f064eead84c393eea5ca7b6e3e89d6773fcf471c91d956745f496d87653f5a1dc9482df8ad4706775bcc046c9762417305f8abecf06c1fe26a25e15\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-osx-x64.pkg\",\n            \"hash\": \"d130a0d33f064eead84c393eea5ca7b6e3e89d6773fcf471c91d956745f496d87653f5a1dc9482df8ad4706775bcc046c9762417305f8abecf06c1fe26a25e15\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-osx-x64.tar.gz\",\n            \"hash\": \"47d3959ccee31d29943ed1843815087114f9dcc7423c2e5992c4a61f7aa7d8b0be408b511b668e6379c03e6bacf3b10d0e7110282606d69cd9db3229c6fbe2d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-rhel.6-x64.tar.gz\",\n            \"hash\": \"1ec994fb08b22b951cd7ce5415fde0e54fcfde8a24640f974d869b4878fcb45e2db1f328d43d080f8398d5fe253d85830ee1dba90fa1540fd1b5fc4baa2bfd19\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-arm.zip\",\n            \"hash\": \"9c7588b6730116c947ae93a6a022fdb84aa509bd41bda4c72cf588fa0ee3aa992b6ccff69be7fbe1b82bed1c7e2f07b65432e6e7caf04ecf98c7129e0c630035\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/968a980f-8c39-4503-8897-376db1afe5af/f30517413bc3228a013afd6d80d2c6ef/dotnet-sdk-3.1.100-preview2-014569-win-gs-x64.exe\",\n            \"hash\": \"6e26a76755fd9e7eb956d54397249764fabfcc118c30d5e956a7aef312862611b8018db16752fadc12d6ed994159685383bf8eae8428d26215384958f34880ba\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f4315d98-c740-4b7f-bf2e-a2fd5f6972c1/d28950f1a806e4ec7602cf4ead1ddb92/dotnet-sdk-3.1.100-preview2-014569-win-gs-x86.exe\",\n            \"hash\": \"6e86138a245410902409b83019a01f0c3883f9531a1c80fd07cd79fecfe104eb6184f188d67df3235fb3089291caab5c345680bc14912ca430269b361eaf24bb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-x64.exe\",\n            \"hash\": \"6e26a76755fd9e7eb956d54397249764fabfcc118c30d5e956a7aef312862611b8018db16752fadc12d6ed994159685383bf8eae8428d26215384958f34880ba\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-x64.zip\",\n            \"hash\": \"dda707c3c7f3c02e6a33e96e4db0f1bc65fe25f27f402092f6cec1a69a41de688a199fbc229a0991ab1dc498a0fa05988856efcbfabdf81487e33875794a27a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-x86.exe\",\n            \"hash\": \"6e86138a245410902409b83019a01f0c3883f9531a1c80fd07cd79fecfe104eb6184f188d67df3235fb3089291caab5c345680bc14912ca430269b361eaf24bb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-x86.zip\",\n            \"hash\": \"d2e9dca382bf093cca3ab1fd15cbf212f8f9656e909a1654c0d97f1aaa515a1fcdda6701c92f91140568a65e2e75362ce01b8e9665fc911724b802e859c425b4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-x64.deb\",\n            \"hash\": \"94e7b5cd832904f56e85afbd6448e0c4f8b7d4aa99b0519e074e2f5694a1d2fbc23a0a160276db900a87b84d01d36bb25c62b3d359a7067332de8bcc7a7a7c96\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-x64.rpm\",\n            \"hash\": \"75c0155f503f361e215d14e239da8f17ba35d6f4bdaee9f040f9727d4c4936f6d80fd9f5154a54ea18607da4d4d4ca2a76afcd564f8e1e22c29e7b79e559e8b8\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.100-preview2-014569\",\n          \"version-display\": \"3.1.100-preview2\",\n          \"runtime-version\": \"3.1.0-preview2.19525.6\",\n          \"vs-version\": \"16.4.0\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4, latest preview)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-linux-arm.tar.gz\",\n              \"hash\": \"fbb3854400e787392ae8c98a60276930535b4e93cb0332de1396fe5030d79c31eb30c70f53aa1b57b55346db130e1944d92f9a5582da616502a30c5e4991b186\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-linux-arm64.tar.gz\",\n              \"hash\": \"60a96b96271f77b57ebd30b48f46e6f2130c25dac678fd3f8599278368f941a3792c429a2ae0307f8c9ed2a690a4d7244fc2080d556deb66d633918d8d298b4f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-linux-musl-x64.tar.gz\",\n              \"hash\": \"a83a19d7e72982d72fa9e6e52815552945d37d863e78a9b79055164b86a1ad91fb4fe62ce1c41d8ca79955c580c9972231d847d68e5577505b40a41a46037d50\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-linux-x64.tar.gz\",\n              \"hash\": \"8c7b68efcf67cb365d79bf4481c7639305e158c1a7feb7fc88fd601e2200619fb43897603f4c4eb06b30f97b4cdb992e86bc85d03369a3bef55445ba1d200ba1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f5f89fcd-4146-4774-8004-ac68fa78f2a9/8523da107916288fdbbec6972b161f0f/dotnet-sdk-3.1.100-preview2-014569-osx-gs-x64.pkg\",\n              \"hash\": \"d130a0d33f064eead84c393eea5ca7b6e3e89d6773fcf471c91d956745f496d87653f5a1dc9482df8ad4706775bcc046c9762417305f8abecf06c1fe26a25e15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-osx-x64.pkg\",\n              \"hash\": \"d130a0d33f064eead84c393eea5ca7b6e3e89d6773fcf471c91d956745f496d87653f5a1dc9482df8ad4706775bcc046c9762417305f8abecf06c1fe26a25e15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-osx-x64.tar.gz\",\n              \"hash\": \"47d3959ccee31d29943ed1843815087114f9dcc7423c2e5992c4a61f7aa7d8b0be408b511b668e6379c03e6bacf3b10d0e7110282606d69cd9db3229c6fbe2d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-rhel.6-x64.tar.gz\",\n              \"hash\": \"1ec994fb08b22b951cd7ce5415fde0e54fcfde8a24640f974d869b4878fcb45e2db1f328d43d080f8398d5fe253d85830ee1dba90fa1540fd1b5fc4baa2bfd19\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-arm.zip\",\n              \"hash\": \"9c7588b6730116c947ae93a6a022fdb84aa509bd41bda4c72cf588fa0ee3aa992b6ccff69be7fbe1b82bed1c7e2f07b65432e6e7caf04ecf98c7129e0c630035\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/968a980f-8c39-4503-8897-376db1afe5af/f30517413bc3228a013afd6d80d2c6ef/dotnet-sdk-3.1.100-preview2-014569-win-gs-x64.exe\",\n              \"hash\": \"6e26a76755fd9e7eb956d54397249764fabfcc118c30d5e956a7aef312862611b8018db16752fadc12d6ed994159685383bf8eae8428d26215384958f34880ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f4315d98-c740-4b7f-bf2e-a2fd5f6972c1/d28950f1a806e4ec7602cf4ead1ddb92/dotnet-sdk-3.1.100-preview2-014569-win-gs-x86.exe\",\n              \"hash\": \"6e86138a245410902409b83019a01f0c3883f9531a1c80fd07cd79fecfe104eb6184f188d67df3235fb3089291caab5c345680bc14912ca430269b361eaf24bb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-x64.exe\",\n              \"hash\": \"6e26a76755fd9e7eb956d54397249764fabfcc118c30d5e956a7aef312862611b8018db16752fadc12d6ed994159685383bf8eae8428d26215384958f34880ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-x64.zip\",\n              \"hash\": \"dda707c3c7f3c02e6a33e96e4db0f1bc65fe25f27f402092f6cec1a69a41de688a199fbc229a0991ab1dc498a0fa05988856efcbfabdf81487e33875794a27a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-x86.exe\",\n              \"hash\": \"6e86138a245410902409b83019a01f0c3883f9531a1c80fd07cd79fecfe104eb6184f188d67df3235fb3089291caab5c345680bc14912ca430269b361eaf24bb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-win-x86.zip\",\n              \"hash\": \"d2e9dca382bf093cca3ab1fd15cbf212f8f9656e909a1654c0d97f1aaa515a1fcdda6701c92f91140568a65e2e75362ce01b8e9665fc911724b802e859c425b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.deb\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-x64.deb\",\n              \"hash\": \"94e7b5cd832904f56e85afbd6448e0c4f8b7d4aa99b0519e074e2f5694a1d2fbc23a0a160276db900a87b84d01d36bb25c62b3d359a7067332de8bcc7a7a7c96\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.rpm\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview2-014569/dotnet-sdk-3.1.100-preview2-014569-x64.rpm\",\n              \"hash\": \"75c0155f503f361e215d14e239da8f17ba35d6f4bdaee9f040f9727d4c4936f6d80fd9f5154a54ea18607da4d4d4ca2a76afcd564f8e1e22c29e7b79e559e8b8\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.0-preview2.19528.8\",\n        \"version-display\": \"3.1.0-preview2\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.19302.0\"\n        ],\n        \"vs-version\": \"16.4.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-linux-arm.tar.gz\",\n            \"hash\": \"b1d4a271dc9ca523fcd97e17890984705223be9953328b749539cd26d0dd7eeb1c8c15ecce2caf7443e37ef2d1d177d72bc096602e38c3d4c9c056a6d335be59\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-linux-arm64.tar.gz\",\n            \"hash\": \"218d7a70dfb630bcba4614d13e2bab567754c4fddbffb59fe842b2985c4fcc0f4078802b7b174a364253c65588e7a8f6bc17f433989974cc55baf455cad4f4b9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"9e38b802a8187cb42e2fb2456b5eda4049d2401eb4842ca62395cf8361738441ca16d35e59eab4f4ea0acdfed32a06ce7d87c31466c814079db97e90f58a407a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-linux-x64.tar.gz\",\n            \"hash\": \"f6109e54e71bc784524ea43f2b27b2659e095bfbd98c585b4ec593dc5e009052a27a2426370d00c80fb35d57f29a00094fb44e0415e74308a08cb88304f053cc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-osx-x64.tar.gz\",\n            \"hash\": \"1eb45d2c534a06fb695afc40c02e4eaa2894c17097f429defba762ce63a76463b46e2c1cdd55f3aed32b1834dbdbdfe88e66dbe040cbb21f7dba4c721ce97b2f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-rh.rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-rh.rhel.7-x64.rpm\",\n            \"hash\": \"edaec320a16d7d0676e633a2a797d474fac803ec256e4e59b9929b84d1adf8702861357715463110908001b97ff48db4aae4f9264dc84ad82977b5a4c344c7bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-win-arm.zip\",\n            \"hash\": \"d508f651b6423a4c1a2a1f10209334beab12db41804b31bc0f42ffbdfec02d76a35eff3dd8dca9be2eef311b0aeae9a908aa3f95b0d1f4f7046d75673d76dc16\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-win-x64.exe\",\n            \"hash\": \"10dfb881340192c64452abe965d08c054cac77ca2d13966edcf0991a5bd286e5fb7d62eca4b0358cfc5441630275e7e6604f188a73a1f4b24fe670e7861d13c4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-win-x64.zip\",\n            \"hash\": \"44c8f588f206cc32a5e91d028336952c9fbcb4dab0010d777ecdc5f894c3f9603b17f494814f374ac502b11bf1f94b5efc67806095b7ecd5202421c5271d504c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-win-x86.exe\",\n            \"hash\": \"9494fbe353e3b2ab523ce026111d017be9149b8739c4b5ab3e6aa4bebf3867276bc4e2a706e0dc4e7bc3695290eeb07c5611ece112761e20ef769a12acdb64a1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-win-x86.zip\",\n            \"hash\": \"ab491d1e86cdc0e6da1e08095c10d6e9ea27d58514ee0034a6eca73ab0254072cde8b0dcaa9d7225a02743a7bc3a38175b8064ee51167422ee55c4f9858675b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-x64.deb\",\n            \"hash\": \"9f2088e604a7c3570cb5b0a0039550bd78db29423c44ee1ab6ce8d0ac5be56d3cdc5c888c48eb3a219c2ebfe42fc11733e133b50bcf394599ba90f0506997385\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-runtime-3.1.0-preview2.19528.8-x64.rpm\",\n            \"hash\": \"b5803cd1991d195f42e7e2db82213a917dc86852a9741eb828d370cd18b1abf2903f52a0b1f87ea91ecef242dd1eaef56f0d3c334434b4548fa36d384ba681af\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-targeting-pack-3.1.0-preview2.19528.8.deb\",\n            \"hash\": \"03e34295e02919f5f81fafebecabde54011ad32959c61e0c895c693a47918703555287379e1bddd50d5c3c27678cf7613cd47abae903572ef9cb0e23fb7e8103\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/aspnetcore-targeting-pack-3.1.0-preview2.19528.8.rpm\",\n            \"hash\": \"469123b514264a72e0c831b48891c1a22c58a178488071c6dfb3fbb4e64f258e6e664ed31c5c05086b905be591ecb6bd89d96127b9f4a8b6ec77ab78b29104e7\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview2.19528.8/dotnet-hosting-3.1.0-preview2.19528.8-win.exe\",\n            \"hash\": \"e9b78e49afed049aa16477faef729a8bdea88548a01ce038f00ca6fba81167e745d53f3acc441034781d0d25e6f951a2fce69991c387d627f64c9524de1ee3c9\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.1.0-preview2.19525.6\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2019-10-15\",\n      \"release-version\": \"3.1.0-preview1\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/3.1/preview/3.1.0-preview1.md\",\n      \"runtime\": {\n        \"version\": \"3.1.0-preview1.19506.1\",\n        \"version-display\": \"3.1.0-preview1\",\n        \"vs-version\": \"16.4.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-apphost-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-apphost-pack-3.1.0-preview1.19506.1-x64.deb\",\n            \"hash\": \"0ed169510069369dc0bb6ffcdf2ceff41963cc16ac461abaee3b9c11b50e26b826d1082f3f2efcd01f9770df2ba8014d84038763c1b5e8371e03f1d66071e695\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-apphost-pack-3.1.0-preview1.19506.1-x64.rpm\",\n            \"hash\": \"b4b81708210e055d49b94331b3930e54e9936cc944dfc14e436e730d5deff9fb68b3a674962007018298c8f14131862ec3269fe8e38064d553420a0310f01fa4\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-host-3.1.0-preview1.19506.1-x64.deb\",\n            \"hash\": \"bba559bc82e665b0710107c7ee55f0be11bbc8cacc4c7d1f5d0d052a82490074b5d272c0f4b95a78741cc25ca8fbe1fb65af6ecfce222e1ce84f141ea344aca6\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-host-3.1.0-preview1.19506.1-x64.rpm\",\n            \"hash\": \"41938b146d14a2b5e6246a9057deb5f90a21b0e0ccfeac3d182dc1f3ccd272adb8524a4538b8afc645f2db8ea9661ff0f64d5b187d95fc1c5f4022cea7f8da46\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-hostfxr-3.1.0-preview1.19506.1-x64.deb\",\n            \"hash\": \"799f2dc83225b222caf6c11e136f915e7690f74cf832bbe103abafcb0ff4a9abe3e90498802a2ac17c003a0052c43c2bf09d9639e875047413e9e605d5fcba79\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-hostfxr-3.1.0-preview1.19506.1-x64.rpm\",\n            \"hash\": \"fd0c32cb27198fc81729fbb57dbe313da2c95f680b5a342f208e0e60767ac19200f7fcc193a99f20d18bda1353c183b7195d2ac8e33d85adf47d2a4508652336\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/01ae3780-2579-432e-a8c2-481630062eed/6730c8e85750f19ae148d1afc0e72bad/dotnet-hosting-3.1.0-preview1.19508.20-win.exe\",\n            \"hash\": \"cb772605ccc7d00d455ee913b72a975c14da76421a8e19255a0aa9ab7b59d3e62efe0f1b8bcf212f45c82d6ff5ebeeafa3efcce249e0d735cd14c9997405f367\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-linux-arm.tar.gz\",\n            \"hash\": \"6ff6a8cb300464df754b10f929a1de2dc24ee92c71b49752a1f0a210698dea1c5f69bf32c9548c2e1f76a0b8666419b7f2f4eeba2a8bf1bcfd7580c9d9f03027\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-linux-arm64.tar.gz\",\n            \"hash\": \"983c2fa77c4106fbd1d9cac4988826fb0d2fe50b6fc67a33533cfc90155d1f491bb9dad239f6288547b9fb91172fa702377be02f8df95a87ec3cddd5c6da828c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"0e0631bcb1277f15073428618d9d597f4a41740e3d1462e4cb7cbc54d2eee9e176cacd13e41e70b1fa9f2ee295448530fcb02cfce93b9fe0b52c98f2bad8ca21\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-linux-x64.tar.gz\",\n            \"hash\": \"df33f6d517f8eab3b47b7d1e69ccb20f525a39e9f90d8e4b1710622d0375c0ebe6a51a857b5bc4433bcf501295152959f33711eaa12d342f7dddd385eb175a8f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-osx-x64.pkg\",\n            \"hash\": \"18ccf864b5e8d0245084fdb207683e3b63456889dce371e450fe0190c484b4b46402b831ac5c7f9d8729d2ded7afae9762c2c61a1016c6f1233b82199906a3d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-osx-x64.tar.gz\",\n            \"hash\": \"95d591fcb4a96a17cf01db3d7f91fca8194f62242b7061cf61a140b9bc7a9539f01592df049e1f8ce698b552c67990e86202dc03bea0d7bc1951af1b2a31a729\"\n          },\n          {\n            \"name\": \"dotnet-runtime-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-rhel.6-x64.tar.gz\",\n            \"hash\": \"4666f8cc731fae0494784a345821b1c5fe1cce5a305856a197bc239e5ba2837a9e6d75dd5ef434f1cd2729870034bfd2b1757180dabc90cb8b88cabc77e88c10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-win-arm.zip\",\n            \"hash\": \"2baa44a1abaece900639e2315fb4afc486b45a093b5d5075227a66e7e59fd64834b75b9649c26191838d10f65acba5cdc69b4988d609c556e3f9e9dd917b9ef8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-win-x64.exe\",\n            \"hash\": \"96c881e260afdffa3bcb8b56602caaced3952fe1919bcefae3763d2d9c8d70f6b75b7996c23db010bc525eae86a99ed8ac032a7762a99d27ab4e334b30d3f5bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-win-x64.zip\",\n            \"hash\": \"beea7f90e05e5d623e233159d2caf0ec4fba7747f898040f315d3f56e8f3d1d6d6f5e7a72ffa1bab5f518477bfbd72e870b5926a7edb081b1cbc4ef39ddb605c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-win-x86.exe\",\n            \"hash\": \"13dcf438fe066d011087d96a9c01ed547574249bffb8a24c5613cfb98de29cb17f35ca1539098140de76d9853ab599d21fd6ba49a585cbfc86f75187d3b71769\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-win-x86.zip\",\n            \"hash\": \"e6e85f49ef8978cc4035d4ada3716b3d20ff26f8dfda70b05b4650cdc1f0dbd5f4809a4ff15f0556e136f7ff89b9b0402354c062a5847e94a71f35cad605b49b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-x64.deb\",\n            \"hash\": \"983059162b524bbf99a17b8686f9343df8efa3bc1718992dfcc9f0721ff3ac93b10d712d594553d38dad05e40a4657acb19eb527d2cb95dc09f56108614f9d3b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-3.1.0-preview1.19506.1-x64.rpm\",\n            \"hash\": \"304f346dbb61d19e711215057b6e7f61c6bcba5d2399eded1020b9c34d508c54e803bbcf12e7ced8f7f6db09fabc9945dcfe9402c8dfe908358991ec3e9a646a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-centos.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-deps-3.1.0-preview1.19506.1-centos.7-x64.rpm\",\n            \"hash\": \"d45c2b77346f70511cc6accafb9467a1f906d81e83df6a843a6739f13ef21f982481cc8f65373f54e20f1ff7f86ee1a2c1f3c851b6ff624176a3a7a7f326524f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-fedora.27-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-deps-3.1.0-preview1.19506.1-fedora.27-x64.rpm\",\n            \"hash\": \"323b4335180657773857c91147e6c630f379377f69ffbe372611c0638f6b7d3708ad95a65b27fec0fc4452afb7d9295b2405eb7c35dd703ce96740f1a1dca840\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-opensuse.42-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-deps-3.1.0-preview1.19506.1-opensuse.42-x64.rpm\",\n            \"hash\": \"584c42fcff4a0fc8a5028da8a575ecb00499b8a6e9dfab254febcd27c47ae9db6d73ae9bd7ef7365d2b0262a67947667b79d41e9a508ecf0525fa4370dd310da\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-oraclelinux.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-deps-3.1.0-preview1.19506.1-oraclelinux.7-x64.rpm\",\n            \"hash\": \"484357fc2ddd47feb1f12207f79f3409930e248483284b8a42ffe98f9f56cef9dc7a16546b10e6a6eba2b6f008b4d17cbeaa039eb9653109b65ab0e21ce93cb0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-deps-3.1.0-preview1.19506.1-rhel.7-x64.rpm\",\n            \"hash\": \"de8350f6f564571d2d2d1118b80e4e0ab8f14e5f7ea4f8e9ae4d91ea21232f0dc6d66280c3692a5a3d475226040f7073f5779d255fcb4ffede8098c178540ee3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-sles.12-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-deps-3.1.0-preview1.19506.1-sles.12-x64.rpm\",\n            \"hash\": \"ab4694d343ba485cdf21148b3f8cf7214aedc957aaf102c5c24f5550b39b38ae3f842ce017e2ead2ced95875377cc7235982f377b634748083f0bad8192112e1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-runtime-deps-3.1.0-preview1.19506.1-x64.deb\",\n            \"hash\": \"f56babb33e20ce0ef885104754fcfb157406e100b26236e106cd0fecb957701512cd49106371995cb4c8f7cfbdfa121864b782b8a7c4f358f7802c38d25adcf1\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-targeting-pack-3.1.0-preview1.19506.1-x64.deb\",\n            \"hash\": \"3f5cf082e6b7398773e452bcd9a2febf1c28b71c741bf906a47bf97e7c904c4d3fd17811937e58e4b8a8c478ce3eab8d2fbd06bd6e7bb8a82cae76b993718657\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/dotnet-targeting-pack-3.1.0-preview1.19506.1-x64.rpm\",\n            \"hash\": \"049cdc552ea7da543b154cf336bd8633e427a25da34d7ee68b22ac6de52e2574167c862fbf342525fa49980eadbc34f2530c82261b4138def55378092639d3bf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/windowsdesktop-runtime-3.1.0-preview1.19506.1-win-x64.exe\",\n            \"hash\": \"ca87a40f4f40c975d83ebb46993615b3acf78eb60cf318cb24fd941cd12baa76fc53270bffd951e3f0bc4a3d44636fa9aef71bad634baa8e71432ae4aad98bb2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/3.1.0-preview1.19506.1/windowsdesktop-runtime-3.1.0-preview1.19506.1-win-x86.exe\",\n            \"hash\": \"e6f2fdaea13110e0ed321ce6a50e1997ffff2e19f7da8dc12c97bc2d62c369bf4bdf6e30852f377d2afefbf38bb505820d3d6b0db760a94503851447ea9f1d1c\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"3.1.100-preview1-014459\",\n        \"version-display\": \"3.1.100-preview1\",\n        \"runtime-version\": \"3.1.0-preview1.19506.1\",\n        \"vs-version\": \"16.4.0\",\n        \"vs-support\": \"Visual Studio 2019 (v16.4, latest preview)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-linux-arm.tar.gz\",\n            \"hash\": \"8414661dfc5d8e13f5bec2c71222b6c1af20f47a864d1998c2704dfaa6e337d3d3a2b29eee527802bb2c02e090a4b0cf21c21a4534a714ba3f40cfd8d156ccec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-linux-arm64.tar.gz\",\n            \"hash\": \"17e801fa10b86fe03b91777b0e10a21ecd9573442048221eb74997d89ba52722fdde3a616b9c6b481a08183e2959e05f11188c39665f7ab014cbe274acdc6275\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-linux-musl-x64.tar.gz\",\n            \"hash\": \"3652122944cba774130af8f878ab06a5b16a7bbe034156e14442b0b43a4344d087e8e19f69cf64cb8a3d4f9d3a3c07109746f39c4cd52fd74660b6119edc8517\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-linux-x64.tar.gz\",\n            \"hash\": \"2d0d4c4af775d46a0a3bf25d1ebb1f6ee51df07a82e53176efb1055cef746ca5074ab95e6dc65ae8f738c34f6a45eae42941c342b24efac5e04fa82ccbcf27d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e1213e6c-4632-44f0-9e0f-f1d0cfcbc66c/f1b9c7d0b0d57443b85860c34ef86ce4/dotnet-sdk-3.1.100-preview1-014459-osx-gs-x64.pkg\",\n            \"hash\": \"7b2992caef858c687812dd78d1cd864ac9223ed4312f17c8c3e7b0e51f8686f892edf50e3617dd4e05aea26d9dd0bcb87b7b6d9714a4005c8debd8db538a7681\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-osx-x64.pkg\",\n            \"hash\": \"7b2992caef858c687812dd78d1cd864ac9223ed4312f17c8c3e7b0e51f8686f892edf50e3617dd4e05aea26d9dd0bcb87b7b6d9714a4005c8debd8db538a7681\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-osx-x64.tar.gz\",\n            \"hash\": \"e13c00303a0de92f2260bf477bca5514c560494d6a9b79fb5f9b233f7de736b2948e4f06b8431f8cdb642bb73ef240f286433b73c2e141ce436cf29c824f9146\"\n          },\n          {\n            \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n            \"rid\": \"rhel.6-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-rhel.6-x64.tar.gz\",\n            \"hash\": \"f80e193b02508380ab9b6fe5cd4aa4ffa4898c4564c0d339fd028634e1af81a21498e78c3e00ca9d723df406594815d1b42e1c9ccd780597cab3202297faee9f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-arm.zip\",\n            \"hash\": \"21119f277e7d0363e2989f369756380e5ec6732acac423c343ef239c3038bd651fc272f10862d2d4a3ae13ecd6e7a4038767ea55f8813accece771074de7b1b2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/281fe4b4-b3b7-4274-9397-a2a1d3d0a0cb/b655c7198d14866c175d4282ae4a7e73/dotnet-sdk-3.1.100-preview1-014459-win-gs-x64.exe\",\n            \"hash\": \"3df7033d07fd95ace436541f6a8ae5e65d9b982b3bb10dce2544af46a0eb164867ef6015539a24c636554fc99596cb30631dcbc0b396cf8a487593a1cc4c375d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0147c4d5-b4a0-41cb-987a-2846fb2002b7/e6fa5a3bdbcbce2558f823b2e2e3d7f0/dotnet-sdk-3.1.100-preview1-014459-win-gs-x86.exe\",\n            \"hash\": \"824f4659eb5011128b97c7de9609d5a849d3d6bd232352d129f5ad0363cde98f3d51adbd86084abb432f8d593f1e25b07c261f1ecdcde72b3327a6c57f62b323\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-x64.exe\",\n            \"hash\": \"3df7033d07fd95ace436541f6a8ae5e65d9b982b3bb10dce2544af46a0eb164867ef6015539a24c636554fc99596cb30631dcbc0b396cf8a487593a1cc4c375d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-x64.zip\",\n            \"hash\": \"c2b2e5f856aeda280ce2d3dcf20d62530bb6e15b48762a35ffa6803701d68777c5841dbb9bc7cbab6f9806687223971e63be6d6bf88cd13f45a6cef3c38d41dd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-x86.exe\",\n            \"hash\": \"824f4659eb5011128b97c7de9609d5a849d3d6bd232352d129f5ad0363cde98f3d51adbd86084abb432f8d593f1e25b07c261f1ecdcde72b3327a6c57f62b323\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-x86.zip\",\n            \"hash\": \"601861f03a3831aa2a271d8fe94b7c4bea2d4286a1f51bba81c9bb7711de742229b687a304bdb2311edc36a0d2fd95beadd45d719a2ca7bbd624eb4d5d6bc0cd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-x64.deb\",\n            \"hash\": \"7cfd4d17a9bc7fae5fa9bda26d42adc9eb60fc783cf99cde097100aa02f8edf1f9eea5a9c4f3414c537f94d80d575f5b271c8824ba35dd2beff892211d6cd712\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-x64.rpm\",\n            \"hash\": \"be69f3d43c6a804804d238176d1d5fc362101d38e7e1692f6d4439e18169e9102637f4b56aaf3104f16d95882122d6ffe3be303e17b27d8aa495d114b9e0cb10\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"3.1.100-preview1-014459\",\n          \"version-display\": \"3.1.100-preview1\",\n          \"runtime-version\": \"3.1.0-preview1.19506.1\",\n          \"vs-version\": \"16.4.0\",\n          \"vs-support\": \"Visual Studio 2019 (v16.4, latest preview)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"4.7\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-linux-arm.tar.gz\",\n              \"hash\": \"8414661dfc5d8e13f5bec2c71222b6c1af20f47a864d1998c2704dfaa6e337d3d3a2b29eee527802bb2c02e090a4b0cf21c21a4534a714ba3f40cfd8d156ccec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-linux-arm64.tar.gz\",\n              \"hash\": \"17e801fa10b86fe03b91777b0e10a21ecd9573442048221eb74997d89ba52722fdde3a616b9c6b481a08183e2959e05f11188c39665f7ab014cbe274acdc6275\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-linux-musl-x64.tar.gz\",\n              \"hash\": \"3652122944cba774130af8f878ab06a5b16a7bbe034156e14442b0b43a4344d087e8e19f69cf64cb8a3d4f9d3a3c07109746f39c4cd52fd74660b6119edc8517\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-linux-x64.tar.gz\",\n              \"hash\": \"2d0d4c4af775d46a0a3bf25d1ebb1f6ee51df07a82e53176efb1055cef746ca5074ab95e6dc65ae8f738c34f6a45eae42941c342b24efac5e04fa82ccbcf27d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-gs-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/e1213e6c-4632-44f0-9e0f-f1d0cfcbc66c/f1b9c7d0b0d57443b85860c34ef86ce4/dotnet-sdk-3.1.100-preview1-014459-osx-gs-x64.pkg\",\n              \"hash\": \"7b2992caef858c687812dd78d1cd864ac9223ed4312f17c8c3e7b0e51f8686f892edf50e3617dd4e05aea26d9dd0bcb87b7b6d9714a4005c8debd8db538a7681\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-osx-x64.pkg\",\n              \"hash\": \"7b2992caef858c687812dd78d1cd864ac9223ed4312f17c8c3e7b0e51f8686f892edf50e3617dd4e05aea26d9dd0bcb87b7b6d9714a4005c8debd8db538a7681\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-osx-x64.tar.gz\",\n              \"hash\": \"e13c00303a0de92f2260bf477bca5514c560494d6a9b79fb5f9b233f7de736b2948e4f06b8431f8cdb642bb73ef240f286433b73c2e141ce436cf29c824f9146\"\n            },\n            {\n              \"name\": \"dotnet-sdk-rhel.6-x64.tar.gz\",\n              \"rid\": \"rhel.6-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-rhel.6-x64.tar.gz\",\n              \"hash\": \"f80e193b02508380ab9b6fe5cd4aa4ffa4898c4564c0d339fd028634e1af81a21498e78c3e00ca9d723df406594815d1b42e1c9ccd780597cab3202297faee9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm.zip\",\n              \"rid\": \"win-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-arm.zip\",\n              \"hash\": \"21119f277e7d0363e2989f369756380e5ec6732acac423c343ef239c3038bd651fc272f10862d2d4a3ae13ecd6e7a4038767ea55f8813accece771074de7b1b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x64.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/281fe4b4-b3b7-4274-9397-a2a1d3d0a0cb/b655c7198d14866c175d4282ae4a7e73/dotnet-sdk-3.1.100-preview1-014459-win-gs-x64.exe\",\n              \"hash\": \"3df7033d07fd95ace436541f6a8ae5e65d9b982b3bb10dce2544af46a0eb164867ef6015539a24c636554fc99596cb30631dcbc0b396cf8a487593a1cc4c375d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-gs-x86.exe\",\n              \"rid\": \"\",\n              \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0147c4d5-b4a0-41cb-987a-2846fb2002b7/e6fa5a3bdbcbce2558f823b2e2e3d7f0/dotnet-sdk-3.1.100-preview1-014459-win-gs-x86.exe\",\n              \"hash\": \"824f4659eb5011128b97c7de9609d5a849d3d6bd232352d129f5ad0363cde98f3d51adbd86084abb432f8d593f1e25b07c261f1ecdcde72b3327a6c57f62b323\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-x64.exe\",\n              \"hash\": \"3df7033d07fd95ace436541f6a8ae5e65d9b982b3bb10dce2544af46a0eb164867ef6015539a24c636554fc99596cb30631dcbc0b396cf8a487593a1cc4c375d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-x64.zip\",\n              \"hash\": \"c2b2e5f856aeda280ce2d3dcf20d62530bb6e15b48762a35ffa6803701d68777c5841dbb9bc7cbab6f9806687223971e63be6d6bf88cd13f45a6cef3c38d41dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-x86.exe\",\n              \"hash\": \"824f4659eb5011128b97c7de9609d5a849d3d6bd232352d129f5ad0363cde98f3d51adbd86084abb432f8d593f1e25b07c261f1ecdcde72b3327a6c57f62b323\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-win-x86.zip\",\n              \"hash\": \"601861f03a3831aa2a271d8fe94b7c4bea2d4286a1f51bba81c9bb7711de742229b687a304bdb2311edc36a0d2fd95beadd45d719a2ca7bbd624eb4d5d6bc0cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.deb\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-x64.deb\",\n              \"hash\": \"7cfd4d17a9bc7fae5fa9bda26d42adc9eb60fc783cf99cde097100aa02f8edf1f9eea5a9c4f3414c537f94d80d575f5b271c8824ba35dd2beff892211d6cd712\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.rpm\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/3.1.100-preview1-014459/dotnet-sdk-3.1.100-preview1-014459-x64.rpm\",\n              \"hash\": \"be69f3d43c6a804804d238176d1d5fc362101d38e7e1692f6d4439e18169e9102637f4b56aaf3104f16d95882122d6ffe3be303e17b27d8aa495d114b9e0cb10\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"3.1.0-preview1.19508.20\",\n        \"version-display\": \"3.1.0-preview1\",\n        \"version-aspnetcoremodule\": [\n          \"13.1.19282.0\"\n        ],\n        \"vs-version\": \"16.4.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-linux-arm.tar.gz\",\n            \"hash\": \"eb86a1989b62f6dd65499ee9846a9fdf3b81d02a6a5c88bf6aa94ef73a21ed23729fce6b10c5533d2dc33ed904d20b2bd4b8ea53ed9e1bf3dd79f614bb2c554a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-linux-arm64.tar.gz\",\n            \"hash\": \"e5cae49d17a4be64fc4306f965b195433172aa154b1ea05a66dc9bb090982b04c8910fe6c4ee4acd5458fde53ec0a17e1a7e5ddc678e591ba8f61dda88cb0218\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-linux-musl-x64.tar.gz\",\n            \"hash\": \"94f38dbe84a95b444371196ee88b8e3cd7b3885bb696c950a06f4b15d830e99ff22137e747ce1509bb3049a038e85b8a962274b3ce7c35a8518b4236cbab013b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-linux-x64.tar.gz\",\n            \"hash\": \"86d23197fcc8927b789643ba0bd553c7761b40457715b93752becdf7c196b5bfbfbe5be09aea9a49490c620bd80f7df52340f0dc6e779558f2fbb6b3d5e7b4f6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-osx-x64.tar.gz\",\n            \"hash\": \"7405ce25ff31c64a6714b37b1f3aa75ffc1ce0987359c1347c2646bd2f35fa8e454da3b90b43b36da41162cc9dd8072ce9ad06c56fa9b3f0dce76b770db426f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-rh.rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-rh.rhel.7-x64.rpm\",\n            \"hash\": \"2182fb92a4d2a5460bae2ad891cf1f6d3a267e310b092e904cb512856bf19dfee8cfdc8ed400284323a5ec21edc05841bcead09725155303b113a7675cebb0ee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm.zip\",\n            \"rid\": \"win-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-win-arm.zip\",\n            \"hash\": \"250dd12d9178aa2cb18522166ac345205d71237a4140dd87d66b95ac3dfbe99f82681f20a9fc21bf22bfbfef39f3d8438d24a52f97f8e841637cdf2f652868cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-win-x64.exe\",\n            \"hash\": \"90d98ed5e31c4dec52a5b5bf4602c5a0860b5841ba6b84d20152335db5ddf1a5a9e5a3fdaf4af4eceedfa3155edc2af4db6300ddf10641ebd3b6b2ab5a274886\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-win-x64.zip\",\n            \"hash\": \"76e763d2ebb363dd723b761b639cde967ec54baa0615f626453bed29533e74740748598184ec29cb44cdf4487951222559f7ea761aa5be426c916af03e01a5be\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-win-x86.exe\",\n            \"hash\": \"669ecf15ae72b53610623b85e8fc17eb050cf82c12e562627202e9245cda7db8e0c98248f970d2dafcef49e739bf021b6ec67760d4a674d24940e36d64200ae1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-win-x86.zip\",\n            \"hash\": \"cc83c8750ba4627ada550307adc4782f98e2a62e4060457905f64e4a1c96f3a0a90848c643571cb000e1be5e69b0eaf3495e1ffec90a43c57ccbd55a1cf11f71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-x64.deb\",\n            \"hash\": \"36b445826f40231047c22022b16446d99dd9d770f9d705eed1fb06f41843bb5e4c3f5f89639c2c15a3fe7841979c4fc048a57ed56340393ac00cd2b54c4daa5b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-runtime-3.1.0-preview1.19508.20-x64.rpm\",\n            \"hash\": \"a3cb32548d5d4c413c5f9052861fabb1a12c0f8b0ec4bb11c6016910579a18333e91ff384e9159136862de6899c9947190249fa0faa9ccd8a633108f9879a162\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-targeting-pack-3.1.0-preview1.19508.20.deb\",\n            \"hash\": \"a84cc1b51d22c105030e223f43fd62617eca026677bfe34f630c262866c1ec4a11a7b4e3798c91900354f19bbb854b9be2fab3548263a24f5c2e14bbe146615d\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/aspnetcore-targeting-pack-3.1.0-preview1.19508.20.rpm\",\n            \"hash\": \"f040682f48869a0b78d5a9d3a45c511e9c8a02ae9494306333d14e8d96467949bd9d639a1cabf541bc9196295c82e4dc052114d70dc248b9b7a28ce1aed234d8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"win-x86_x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/3.1.0-preview1.19508.20/dotnet-hosting-3.1.0-preview1.19508.20-win.exe\",\n            \"hash\": \"cb772605ccc7d00d455ee913b72a975c14da76421a8e19255a0aa9ab7b59d3e62efe0f1b8bcf212f45c82d6ff5ebeeafa3efcce249e0d735cd14c9997405f367\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"3.1.0-preview1.19506.1\",\n        \"files\": []\n      }\n    }\n  ],\n  \"intellisense\": {\n    \"version\": \"3.1.0\",\n    \"version-display\": \"3.1.0\",\n    \"files\": [\n      {\n        \"lang\": \"de\",\n        \"name\": \"dotnet-intellisense-de.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/0d737d50-c6b5-4281-ba18-b95e95583a51/d97943c62715baee2efc12be5f883ed9/dotnet-intellisense-3.1-de.zip\",\n        \"hash\": \"1667ca5aee0c23659ee0252079f147f7cdc805c9a6de2f5569c3edf3ea5f5eee5c51aaa11f6dfe9da1506e298f51bb90bac2ed489608a50bde652a7b22854146\"\n      },\n      {\n        \"lang\": \"es\",\n        \"name\": \"dotnet-intellisense-es.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/42b4fe36-2b9f-4ffe-805e-4c9fdd709c1e/55ce9a6e523a117095b1dbde974de93b/dotnet-intellisense-3.1-es.zip\",\n        \"hash\": \"89ca4e8c185a0ac7f1b4094de305af554342fd871ea6d50ff243ee1ac223368991954bff7800798ae5a184ec89cc9799fd31bc6fb275d1901317d3eaa1ab2706\"\n      },\n      {\n        \"lang\": \"fr\",\n        \"name\": \"dotnet-intellisense-fr.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/4256ca0a-efeb-4c01-8c0a-99a841d5aea2/2269b859d173cf8f6ffd7f94ae5e2d62/dotnet-intellisense-3.1-fr.zip\",\n        \"hash\": \"152ee5d4b7ccf24ecd47f25b3fc1e0adc69f2793e3bdccc2142ee7b91d0a4fe6bbee89de4abace6f9d8430a07f778008d0e5acc8eb626e3c70a09930691988fe\"\n      },\n      {\n        \"lang\": \"it\",\n        \"name\": \"dotnet-intellisense-it.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/f061a3ef-95b2-438b-b113-e45c0c0c284f/cdf442462566828f3c320d5e1b3168e3/dotnet-intellisense-3.1-it.zip\",\n        \"hash\": \"49ad015460281b18b432e74184a70b287dff6a0c9e6394c58f7f52130bdfd8a7ba1e335484fc8d2b2917d4ff21b299342439756c721fd10e058f2a34c06bef3a\"\n      },\n      {\n        \"lang\": \"ja\",\n        \"name\": \"dotnet-intellisense-ja.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/3aa79ca3-bfe3-420c-9050-1e526c800515/ec6ead303d18d20941621b1cf29473c0/dotnet-intellisense-3.1-ja.zip\",\n        \"hash\": \"5150fcd633c83cb9be5d76ad81159b885ed0bf8a225d2b0b54ed556c6ae68c8d715c3fd592c9e334a01acc7889fbfd3a1119c8caff5d2074483c75506c06f572\"\n      },\n      {\n        \"lang\": \"ko\",\n        \"name\": \"dotnet-intellisense-ko.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/9ed059b9-8929-48ef-b988-d8c3ff956703/f02ad29623697823fe3e4f348f0aa4dc/dotnet-intellisense-3.1-ko.zip\",\n        \"hash\": \"8f2ac1f126ab62aa20902353beed5cb8162a46f3a9e343f5bbfd7d31072f09f8c069a53ebca627c4ff7a44ecfa1a2a817ac74642d5b3a6b51dd35da73d3e9f3f\"\n      },\n      {\n        \"lang\": \"pt-br\",\n        \"name\": \"dotnet-intellisense-pt-br.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/447aef54-8ba3-4035-9d01-4b8f462e097f/56c67cbb6debb29902ffe020d54f677e/dotnet-intellisense-3.1-pt-br.zip\",\n        \"hash\": \"f80266fcd1101713dccb4efab0c7113e701157c20b65036697f80c7292009a0d56b385e0df10c41334b5137f3f957598de220029311c01f1c687e924c58f74c6\"\n      },\n      {\n        \"lang\": \"ru\",\n        \"name\": \"dotnet-intellisense-ru.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/21f9a31d-17c8-4cf5-9d6a-47c9a11efb26/64805992d41a1cc3e5cf1d24e8010643/dotnet-intellisense-3.1-ru.zip\",\n        \"hash\": \"f61e620c735da379312b799c4de004c282a4693bcc8c7a0d8cd85f7718a7b59f2fcd534840b4e9fb7a4d627da49f0f0aeeeeec8cbab07db62cc1fe1dad675ef5\"\n      },\n      {\n        \"lang\": \"zh-hans\",\n        \"name\": \"dotnet-intellisense-zh-hans.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/be05ed35-5e8c-48d5-a15e-3f919f47d2d1/488cec211e6926ff1de7834e4153538e/dotnet-intellisense-3.1-zh-hans.zip\",\n        \"hash\": \"a9d2659aab2fd6b11207546c1c296dc1edb9df525aeb44578b7e3f78e6fa994b858340c135fac8c147f3ce2c43b3543ec2146d15d4452de1ec65bc89508f8889\"\n      },\n      {\n        \"lang\": \"zh-hant\",\n        \"name\": \"dotnet-intellisense-zh-hant.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/efd7be15-625e-4b8c-a4e3-dc4ee5fd3a3e/68ec9b21ce21477608894733df91327c/dotnet-intellisense-3.1-zh-hant.zip\",\n        \"hash\": \"4d7b1b2d04828d4c5abc5228c7e1f630bdad8283f5d7a615203663316288fc40e978679ed5cec280c7e3daea72caa6cfd2f1f6f6421b0603225506b58e41afbf\"\n      }\n    ]\n  }\n}"
  },
  {
    "path": "JexusManager/Resources/5.0-release.json",
    "content": "{\n  \"channel-version\": \"5.0\",\n  \"latest-release\": \"5.0.17\",\n  \"latest-release-date\": \"2022-05-10\",\n  \"latest-runtime\": \"5.0.17\",\n  \"latest-sdk\": \"5.0.408\",\n  \"release-type\": \"sts\",\n  \"support-phase\": \"eol\",\n  \"eol-date\": \"2022-05-10\",\n  \"lifecycle-policy\": \"https://dotnet.microsoft.com/platform/support/policy/\",\n  \"releases\": [\n    {\n      \"release-date\": \"2022-05-10\",\n      \"release-version\": \"5.0.17\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-29117\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29117\"\n        },\n        {\n          \"cve-id\": \"CVE-2022-23267\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23267\"\n        },\n        {\n          \"cve-id\": \"CVE-2022-29145\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29145\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.17/5.0.17.md\",\n      \"runtime\": {\n        \"version\": \"5.0.17\",\n        \"version-display\": \"5.0.17\",\n        \"vs-version\": \"16.9.21, 16.11.14\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-linux-arm.tar.gz\",\n            \"hash\": \"b91bec9749838f31f0aa04d8f9c3ebbbb4dcce4ee4ceb30cfd1b901534bbe2c187ae9ed7bd0de64405c4fae99df839836fe68b9d9a2493d52301d7b16d6f3ba6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-linux-arm64.tar.gz\",\n            \"hash\": \"99cb11871924d3abedcc9c8079c54bc0c550203c7cbe4e349ed70d4355f40e4620b68d90b797e6461d898c06bed6953580e2cd4ad01483e5de107ca5a3409610\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-linux-musl-arm.tar.gz\",\n            \"hash\": \"ce5a53f465d91d7c1d0fb29bca2e17aeadd31b493dc94233f3807d41df939e739f6339a94719561ec40d2cfcbafba01e64e125b91ecd7c32afc9cebb4a3bcc29\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1c1495bf4a53a6d9b2be4c4b181946c3c5abd57ae6e10964924e3d650afba5e2986e555371b8134d0315a4054fc7d473ab4c8cc137f9e0569e8c67e46c4f559b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"e40ef40ebc7394cc7ef9eb9ce26b16a73bf99d597d98df009a06fff5d4fcec307e094ef6e780e8a2169351d9a93c92c18f20975fd1c6d75669218a29257fb6df\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-linux-x64.tar.gz\",\n            \"hash\": \"a9c4784930a977abbc42aff1337dda06ec588c1ec4769a59f9fcab4d5df4fc9efe65f8e61e5433db078f67a94ea2dfe870c32c482a50d4c16283ffacacff4261\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-osx-x64.pkg\",\n            \"hash\": \"986a95d6828b5edf1b5e5d83cf73d098021ec2448c0d6e9a9993013e9886834e2abd06615357638eab9795ac70e4576e0aa8dfe78d59a15a6d9199629282b772\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-osx-x64.tar.gz\",\n            \"hash\": \"31add512418640f98bc9511509db2049a2674c7725169d26be89218a02ac7972e03e5d6be5a3d45a0dfa764e6eade503a8f4957b7b198ec6ad412e423d95f1b9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-win-arm64.exe\",\n            \"hash\": \"91da9338c61a40f235240c5d1adc46bd939cd6ea6ddb6ac87e94fa210a457b7108fcfefa21dff1017d34171257c2b906f59ef1c2187d5887df74bd124a43fb2c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-win-arm64.zip\",\n            \"hash\": \"31614b5d75c5bf41d78390746980aa280176158c06bdf2db6f51fa323316807d1636d59a5999689d37ad6d5addc6dec4051709dbf3c229dce35346300acc06a9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-win-x64.exe\",\n            \"hash\": \"717ec8056cf6e0f9f7cb8851929b598e860f3962575a34e625e3bcf9a9ff1366965ed9cb0d4e93e7330c31afea9c8a727a18fb10f666dd5f43126da439be2ec5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-win-x64.zip\",\n            \"hash\": \"424df2b535f73c40aea164623a8a8f549bd18f89406eb2cb84289cb4cfceb3450db7762c5582756263d79ed628a574730e708d87dc906fd2c00d29f64942c782\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-win-x86.exe\",\n            \"hash\": \"fb615e36ac159b860b2a22b21570653137ee7ceaa3844204ad468b8a94e31f7ea70232cea3ab3f77a53d56c35d2a3e33e5d20049ef3a31bcad4bbfb3e8798f44\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.17/dotnet-runtime-5.0.17-win-x86.zip\",\n            \"hash\": \"8983fcdbc302f5e04cc76ce02f2e6c1f011d88534e85f461264e35ed303a072cfa05ca81a794a9aac396c0393d08d55567a7a9c3f7e50e05940e618b0064b9bd\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.408\",\n        \"version-display\": \"5.0.408\",\n        \"runtime-version\": \"5.0.17\",\n        \"vs-version\": \"16.11.14\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-arm.tar.gz\",\n            \"hash\": \"4f12b2c6cc242666450eb5f892430a956ff34b2ab30aa63ee444565327fbad569152506e153a550b4a45cad6d8346f37ca7bcca68e9d46540c7f170e24b26296\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-arm64.tar.gz\",\n            \"hash\": \"50f23d7aca91051d8b7c37f1a76b1eb51e6fe73e017d98558d757a6b9699e4237d401ce81515c1601b8c21eb62fee4e0b4f0bbed8967eefa3ceba75fc242f01b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-musl-arm.tar.gz\",\n            \"hash\": \"9ee91254b1d828b9047249e57b08b94b5dd307b6e197faeffab2fbe78403a0604832a0a09f7af21c44045b70b0cf79322ea1825852298a43174b4455a4dc52eb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4c7c47e887727aa072fa762e289a7c3135120acd2af1ebd591060476606058a387060d732aeece701b3e0795e0d73ef423284738094e6fe654d87641da1ee347\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-musl-x64.tar.gz\",\n            \"hash\": \"40514b07e90fff4911633d807a7eab4139c3755a6e2ddf92999f011445f0cfa99014b8953cdc249d62ea2f8a3b9e93708c3a6ff598f38b106c340b0955615c52\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-x64.tar.gz\",\n            \"hash\": \"abbf22c420df2d8398d1616efa3d31e1b8f96130697746c45ad68668676d12e65ec3b4dd75f28a5dc7607da58b6e369693c0e658def15ce2431303c28e99db55\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-x64.zip\",\n            \"hash\": \"a316f2daf9774a79d4505c096674f52202c639774d80dc93aa326534730af6d3430187101e7efb713a90b2381ca4672d1a33d295996d4cbce2c13f37c413e9a8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-osx-x64.pkg\",\n            \"hash\": \"f47eec03d2b6777e78e2a993306727fa6871cf7f6e295ed70f684745a9f9fc960f0068750007519733426db52afa10e0bcd1c58879019d5d8f1f5f295868e4f3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-osx-x64.tar.gz\",\n            \"hash\": \"3fdd4deac2809b00c0f669d5488000ac1b9a47dee6ab7b31167d7cec4759a10ee347fd4f52090a40684e5ecc1e1f57eb99c558e561edfd1436a2f77fc1c1a0b2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-arm64.exe\",\n            \"hash\": \"da1db302ff5707c5a35bb1ccd4668ddf09cc4412b955e9a3a2c52c549bc56c630ec96bc13d275be29cb11a63582702680652caf115ce1855737858e2ccef92d7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-arm64.zip\",\n            \"hash\": \"08ebadde7adf730ad35f0c6e4f5db3aa6b339208bbf2912aeaa32c651d5d801daeaaf72f7b6beea558cc251d8affbfb6cb8a1de82cbef995dc8f801f31b6130b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-x64.exe\",\n            \"hash\": \"09721d707779168484579d07fc76e5c29ada8c32b9533689f9f066da3aa98d4a615d825b7212aedf4744d017e9cf3ba86d6a570d00826b732bbc5dd6976a8774\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-x64.zip\",\n            \"hash\": \"3845485401695b325d9afee67e33c6b3a45902476e408dd74ebc8815ad2c4f4b5d70a6b993e87ff587d0d9b0e5a3d66eaf3dd6bf715b0012ffee70501a716485\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-x86.exe\",\n            \"hash\": \"0dcc610af9f0f9791b093eea3af9a4bb58c795f16f5085a046621b5511bbb9ab9578418530a2e2622097a939a9e6777b558f51164d772a8ba9971a6a0f008336\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-x86.zip\",\n            \"hash\": \"a942c354eabed62a4ceb8aaea48664235c9627e818c18504ea482a6a9eb8400b1744f7c40e24bae8e50a665aff20f66a7e378dfa4018c08fb76fa883ce85a8f7\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.408\",\n          \"version-display\": \"5.0.408\",\n          \"runtime-version\": \"5.0.17\",\n          \"vs-version\": \"16.11.14\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-arm.tar.gz\",\n              \"hash\": \"4f12b2c6cc242666450eb5f892430a956ff34b2ab30aa63ee444565327fbad569152506e153a550b4a45cad6d8346f37ca7bcca68e9d46540c7f170e24b26296\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-arm64.tar.gz\",\n              \"hash\": \"50f23d7aca91051d8b7c37f1a76b1eb51e6fe73e017d98558d757a6b9699e4237d401ce81515c1601b8c21eb62fee4e0b4f0bbed8967eefa3ceba75fc242f01b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-musl-arm.tar.gz\",\n              \"hash\": \"9ee91254b1d828b9047249e57b08b94b5dd307b6e197faeffab2fbe78403a0604832a0a09f7af21c44045b70b0cf79322ea1825852298a43174b4455a4dc52eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4c7c47e887727aa072fa762e289a7c3135120acd2af1ebd591060476606058a387060d732aeece701b3e0795e0d73ef423284738094e6fe654d87641da1ee347\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-musl-x64.tar.gz\",\n              \"hash\": \"40514b07e90fff4911633d807a7eab4139c3755a6e2ddf92999f011445f0cfa99014b8953cdc249d62ea2f8a3b9e93708c3a6ff598f38b106c340b0955615c52\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-x64.tar.gz\",\n              \"hash\": \"abbf22c420df2d8398d1616efa3d31e1b8f96130697746c45ad68668676d12e65ec3b4dd75f28a5dc7607da58b6e369693c0e658def15ce2431303c28e99db55\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-linux-x64.zip\",\n              \"hash\": \"a316f2daf9774a79d4505c096674f52202c639774d80dc93aa326534730af6d3430187101e7efb713a90b2381ca4672d1a33d295996d4cbce2c13f37c413e9a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-osx-x64.pkg\",\n              \"hash\": \"f47eec03d2b6777e78e2a993306727fa6871cf7f6e295ed70f684745a9f9fc960f0068750007519733426db52afa10e0bcd1c58879019d5d8f1f5f295868e4f3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-osx-x64.tar.gz\",\n              \"hash\": \"3fdd4deac2809b00c0f669d5488000ac1b9a47dee6ab7b31167d7cec4759a10ee347fd4f52090a40684e5ecc1e1f57eb99c558e561edfd1436a2f77fc1c1a0b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-arm64.exe\",\n              \"hash\": \"da1db302ff5707c5a35bb1ccd4668ddf09cc4412b955e9a3a2c52c549bc56c630ec96bc13d275be29cb11a63582702680652caf115ce1855737858e2ccef92d7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-arm64.zip\",\n              \"hash\": \"08ebadde7adf730ad35f0c6e4f5db3aa6b339208bbf2912aeaa32c651d5d801daeaaf72f7b6beea558cc251d8affbfb6cb8a1de82cbef995dc8f801f31b6130b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-x64.exe\",\n              \"hash\": \"09721d707779168484579d07fc76e5c29ada8c32b9533689f9f066da3aa98d4a615d825b7212aedf4744d017e9cf3ba86d6a570d00826b732bbc5dd6976a8774\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-x64.zip\",\n              \"hash\": \"3845485401695b325d9afee67e33c6b3a45902476e408dd74ebc8815ad2c4f4b5d70a6b993e87ff587d0d9b0e5a3d66eaf3dd6bf715b0012ffee70501a716485\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-x86.exe\",\n              \"hash\": \"0dcc610af9f0f9791b093eea3af9a4bb58c795f16f5085a046621b5511bbb9ab9578418530a2e2622097a939a9e6777b558f51164d772a8ba9971a6a0f008336\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.408/dotnet-sdk-5.0.408-win-x86.zip\",\n              \"hash\": \"a942c354eabed62a4ceb8aaea48664235c9627e818c18504ea482a6a9eb8400b1744f7c40e24bae8e50a665aff20f66a7e378dfa4018c08fb76fa883ce85a8f7\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.214\",\n          \"version-display\": \"5.0.214\",\n          \"runtime-version\": \"5.0.17\",\n          \"vs-version\": \"16.9.21\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-linux-arm.tar.gz\",\n              \"hash\": \"a338dad95c4935fb756b7dc24d1b8c06448233e1e9fa1a6bf3365999520f0ceb90fde1acb47d544edda77fb8168ed8e202c48f04bb34b65b91cb8eb4f4d1aa1d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-linux-arm64.tar.gz\",\n              \"hash\": \"78cc0c412bb63030682c10acb236b8f9ed08e217cd365fcd1136c342a548a90070ef9b27add70e3ca2ce1faaa6579ecb01d77d1239f93744e520e30141fd1ae9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-linux-musl-arm.tar.gz\",\n              \"hash\": \"bac49be66a5d5899b60fd5555ac7db509d332c30078731b9ae60d91fe040c4b1a60d4cf938247994ed54bf810c50a63b4f7e2a9163e993862b7f34cd893d37ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-linux-musl-arm64.tar.gz\",\n              \"hash\": \"92ce80320a73f742672c99318e66cfaf375876fb8320d053cd64d6b53a9c365bb2774fecbed3714646abf6f3eba72286246013cb8d80fc087b5908fcdfbfeffb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-linux-musl-x64.tar.gz\",\n              \"hash\": \"39261405f6c05216da2fbd6b3aaff1ac1ed4681bb017f0127edbf62935329acf4334ff889fce1273b65fe02d82efe4679dec050c74353717c16e7bbc10c3de24\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-linux-x64.tar.gz\",\n              \"hash\": \"86ae4d859577b24dc80dc3f9b477e8f808bdd6e0309235e6b681f8332ccc60b25eb302e3b74cf33eceeacff6bc711551cb763ab54880d68dd9b30f31ac7ff758\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-linux-x64.zip\",\n              \"hash\": \"62c27a2844bff2b7a82f083320a41c55bbcb1858e40f023cb91fa8b543e5a7f9c9e45cc26649b9009c7ce9a4f861bf7a0159b8a11530e82c2d1e09564adb03e5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-osx-x64.pkg\",\n              \"hash\": \"34be3b64850ed731a73791775855619fb7cd1a4ea4023efd59d938f996966d86bb3036bb58599328d1b3c8534ead45a5a165091e2502df6f03dcdb4ea3933b59\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-osx-x64.tar.gz\",\n              \"hash\": \"f5cfe8ca90a658b0fd3af9166ba633e373cbef368af321767657c1304154c36841a78a975d3b4cc29b9733ce9ed6990171a77e07ba6f1f52cc17c761377a31d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-win-arm64.exe\",\n              \"hash\": \"4147c3ed3d09f75529935ee506258a5ebaa9c38364cd1f78eed5e91c37d36189e9260e9afad69713a288e6a40c8f011a5d680b46809f865ff5191bcb2d5dfdb9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-win-arm64.zip\",\n              \"hash\": \"f0e89ff3ea1e20685f3df2d482791f1c9bdfc4620bf6e55c314ebbffa1924adfa25d56b5310a09a03e6bd2b444175f6c0a5da9845fe92464894d7a364efa264e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-win-x64.exe\",\n              \"hash\": \"52d40f848dc0513c476d33c8523035daa16ab0c5e4f526d7c3f7b733f2e62598c46995e73d2bc0e0131169309071bfd2918312fcbfbccb02b8bc22bc1c058a1a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-win-x64.zip\",\n              \"hash\": \"0363766758248a5014e485bea3ecaef5d01fa4faab6ae25812aeac7b3264e6f848030da39ccf47d9e3cc7c09a405c27dc0836f3e44067923d5c0c08b59b15ead\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-win-x86.exe\",\n              \"hash\": \"4f453c7a2c295926dc214869ca11419087723c12cf46a606aea215328d8521b5705cfdc80dfbdac3a4042bd2c9e2879cb5db766aaa2b3b4b58719fccc2daaf7a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.214/dotnet-sdk-5.0.214-win-x86.zip\",\n              \"hash\": \"7efcf1ffe9e3fbe06f124ef3bba890462d4b59452d03f7dadded60624932b1c13bc9c7f78875d2af8d6efa2d73472153d47b57980387b51c0c9160342ecdfbb8\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.17\",\n        \"version-display\": \"5.0.17\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.22105.17\"\n        ],\n        \"vs-version\": \"16.9.21, 16.11.14\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-linux-arm.tar.gz\",\n            \"hash\": \"466e5600e52551e31ef30b326a6a98e569edaca4d5fd7772a5d1f02a847e6192dc3f9aab4632aa27e63d85e4c53081139ecab4ffca65e9820a72a84916fd5065\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-linux-arm64.tar.gz\",\n            \"hash\": \"ac1a9d89f1b730dfdca9c2e48373ef21f8f9316014eefbe6b11516f8195d3b3efc4e482883774b74ea2ff1cb77174a2cb471bd1157ab5b7d71621e3026c38e9b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-linux-musl-arm.tar.gz\",\n            \"hash\": \"80223218db8d272d67f7627da7c3f7a9b06518a2e44f9c6d12f2438b9ea024ec91fb42426b3b5672204c643c122b786f0f0f8682c671eca6635d9644811e0ff7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"26f8a30e246c5527f03023e203e44dea1842e23ac587bc9872e6e60bd5ac98f57f7962d7d46c816690cb42263e9deedd896d0d3ad538a2d9dd17a06ba6f47fbb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"7df763553f6438c51f23542412830686fef82b56f1e3330fa2dfd86b894eff7d830b5ff51468cfe6e88d2eceebc0a0a2352c8762f65a0ffc6ca9f5b02863b7a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-linux-x64.tar.gz\",\n            \"hash\": \"d8e87804e9e86273c6512785bd5a6f0e834ff3f4bbebc11c4fcdf16ab4fdfabd0d981a756955267c1aa9bbeec596de3728ce9b2e6415d2d80daef0d999a5df6d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-osx-x64.tar.gz\",\n            \"hash\": \"bb0c43c723090fa2d8a0255e6fc8c004ebe7baf2d5d56e22ad2e6336a67fe415333d451e459c8857c0ccb5819d998232c9617bf45f222559d4b8891b0af41f20\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-win-arm64.zip\",\n            \"hash\": \"1efae414f2044689336979241501ad2e180ca2a5a4153f8c4a2f5da234cf8472931eb6e5bbb2f03790d8e0c14a1da76275e6454a21ede59e1bb3a7c20cba56e0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-win-x64.exe\",\n            \"hash\": \"85a4b4efa51d20fed86aa87576c1679a8123187116323cf8708ee904208960862bdb834d21ac2b1565b26afd7ce92c360e2f52f5067d20db3be76247f888b8e0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-win-x64.zip\",\n            \"hash\": \"ffa1ac15c489acde822981b4c9fdf69eb0e55dcb3e1bd3d9c23cceafba88388a4420f6b9ac01e5758c6162993ffa3a76350f0b50afffe9ad10eae74adffcbe0a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-win-x86.exe\",\n            \"hash\": \"04f9f5760d7fe08cbccc3a9274956129c634debcd2a51c2b7349a25a104528f49aad01bb66cdf790e793c5b03dcf1ec7c742656360dfb85b95f1ab9f15debc35\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/aspnetcore-runtime-5.0.17-win-x86.zip\",\n            \"hash\": \"c2ac25719b822ddec3cfd6f741c8f0d92fe696739cddb1c5515e28b4d858d4cca07f469d432fdf13fdab74da282078b7d74624bd0aa2ac3208976823ae3f8c31\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.17/dotnet-hosting-5.0.17-win.exe\",\n            \"hash\": \"e92f71edd6b594c76f8be81fa50d35b00c2d464c31cd10fa184685a1855147d3b28adf71096945768d3828ec18754500df5cdebf68a4744feca28c07dbaee180\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.17\",\n        \"version-display\": \"5.0.17\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.17/windowsdesktop-runtime-5.0.17-win-arm64.exe\",\n            \"hash\": \"f98015fa55565ec9bf9cf797e7762257c6178f8888c0f9d4a09df25530ded6dd9c39f43052f95316a0e8ae9cd6ce9523efe36e9794daf8dfb75fffcded5fa6f5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.17/windowsdesktop-runtime-5.0.17-win-x64.exe\",\n            \"hash\": \"f7eb69a953ff6346a180e5200075120b4b47cb89a75bc36c76a9e468c037bb2376f497dbf8e0bada152bc3ec35dceaad55d0a811586569575bf5b201d1e32baf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.17/windowsdesktop-runtime-5.0.17-win-x86.exe\",\n            \"hash\": \"74a379323e52172f563cd996880f58d58a19303ae59b3f55ff52625dfe8a4a602609785b1174b38f2da97282f90f1ade53194354f48773512943eae249926ee8\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-04-12\",\n      \"release-version\": \"5.0.16\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.16/5.0.16.md\",\n      \"runtime\": {\n        \"version\": \"5.0.16\",\n        \"version-display\": \"5.0.16\",\n        \"vs-version\": \"16.9.19, 16.11.12\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-linux-arm.tar.gz\",\n            \"hash\": \"2c4662a38a4ff5994ff5cddc4625208062f400c145228ede9a1608e136444cb0534dac614d1d551f9565524165c3dcd54097e278e1d272baa5501feb93176bec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-linux-arm64.tar.gz\",\n            \"hash\": \"d38a9a78052a29a8645558d60e621498d10abd11cd072bab9c66f98483ba55eec298fca830e186bdacea103e5f3ad10fa4f2663f1595e3be4fcfca4d1886c78f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"8cad41ed0ea493a6c0359dac4a0a20b5c7e52688d8172795935b91c5b9f5b05d46e6a0d61222cf1c6b56310b4862b246cc612f94cfb7b8294c4bbe62df52732a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6c7b5d83c6f443254a343d04fbd18a1197efece15c9b306fd26a4830ddfe16f8ba24e54e695ab1af25024b77668ed078884c0e5c7e4e579f0706d74146312a02\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"49310a377cb112375519477fe9a668fd45dabf560ed55659b56e557afc3e33e030ec683bc046314d86424f699c0987c55630a5155874351feffa91deefdf53f2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-linux-x64.tar.gz\",\n            \"hash\": \"42178cd448fc4d8fdb740bd0b03ff786966ccddfb582488a20d80f53d117e4b10485197125f5649e342bfb539581c66537697f8ae58b9acb48920859746e0851\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-osx-x64.pkg\",\n            \"hash\": \"b012f334426a61512b3edda8a6253f5d565cf41a9b7bec3a4091243838827655dd3ce576138313646d82958bba27d4fa040246df5f299ae7428ee308b4f8e8df\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-osx-x64.tar.gz\",\n            \"hash\": \"de47e74eaa7cc4acd34ba2ebc2f09beb5f7b7141c2c21482ec68c77a1c762861aeaae58b1f00c1dce3b7f2d019a7e862a0bace5241aac9fe1c503f5c4f24fcdf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-win-arm64.exe\",\n            \"hash\": \"b14f87bdbaadbabb25f1b8eadf5d7e9f8223dbfa40af9a13608547244681a7778f8493cbd8854697b2716374450f301b9c08f84e4bd082d170e7a77b53405f3c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-win-arm64.zip\",\n            \"hash\": \"f3aa539b42bf8853906a918cf54fedc6f8b27518fc0eaa80258d0665f66e7231ce73c8313b08ca46a6fb19d7b736e7e9cb732361fae48b8ab180d3189b2e6708\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-win-x64.exe\",\n            \"hash\": \"1fc4076ae60beb081aaf6fc1d99b52ae0acceb9d831ab97b1ae6348d4633decf6a91e15c5c7f29dcec1d7e0fd3f214799c63a2e97f049652bc455c98053a90dc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-win-x64.zip\",\n            \"hash\": \"b73976bc171421aa542221165c118b11cd0af5d6330515397e4a00058d2187337e194f7167168b1917a51185734920a9a4bd7187b8d1ce87f64ea5b04fd9a354\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-win-x86.exe\",\n            \"hash\": \"9ad6baeea2fd9a7f58a20d67634240637b229e3e4318a6decb04d3d7dcb735c2068e2d2a81a71a0c2c1a74aec240d49f51aa29f89577379b0e5acdd13fa4f960\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.16/dotnet-runtime-5.0.16-win-x86.zip\",\n            \"hash\": \"fc60799d3e79981d8331b803ab4e299a5f866ebb4ec50cfb8187bb13500ea609812c2f3561ffe4fa41c2d50091e98fefcfc0162869aa65af5896a1e530ab953e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.407\",\n        \"version-display\": \"5.0.407\",\n        \"runtime-version\": \"5.0.16\",\n        \"vs-version\": \"16.11.12\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-arm.tar.gz\",\n            \"hash\": \"37db60df90f9f43a5399c1b7929c545e3815d7a91fdea82c96a136dcef993b0f8c67568759ae24321dee818fd1501cea8e541a159e10ed1a08fa96dddf2ffb9e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-arm64.tar.gz\",\n            \"hash\": \"500428a6a99d3825400be5cc1a723283f21a98c15ef68914e9252fc872b625fd10c220afd9787b7db6b226a04e83d30658234d464ccdf838639920d1768025e0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-musl-arm.tar.gz\",\n            \"hash\": \"adc94a98cd71f6d11349e797be7a42cb32c484b95e75682f31bcddbe71158b11080538c3becd75d3c2bb54cb312e667991a35b2a4d803b9012cf2abe31e52aa0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-musl-arm64.tar.gz\",\n            \"hash\": \"92f493919acd6d6210ba0cfe1bc5889b500f058f6371f840a7b81011fc0a97923f761aa81b4ba6b7083079a198541089602f471bdf47d32780d956a83da031e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-musl-x64.tar.gz\",\n            \"hash\": \"0eab1963bf9a670ea51224d9c56c56bd3cccd32666130e41c70fe84087321d3d0ac9f7fb3eea4019a386af7544740e92ba85076a56408dff652f81dc8607be4f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-x64.tar.gz\",\n            \"hash\": \"b45f1bf086bfb5e0701c5e14534524ffc87d0195358ac4fa2cf36dac74537ca4c21c7177cfbfa7e121e77aa4106bb1e7039c9739ad73b942e2437bc5e39e6dce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-x64.zip\",\n            \"hash\": \"40a4d014ae2dd0a51e072ae5bf758f26492331f53673ab3079b66bd7de720bea333896f0d007da4a1cece71289a67b8b748046568f580c21d273561cfa86830b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-osx-x64.pkg\",\n            \"hash\": \"79d9958fd6d3438667be1900eea64d282652f3fe3c95d4e8ae956c587677b849c262edb840e1c5f39ff36c916857ebbea2fa71b5b1ab0825c7e4487292f72b10\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-osx-x64.tar.gz\",\n            \"hash\": \"476cfe9bce986d23f74317e1661e5e85fde144923bd0659623bce5fb8d09bc6c966299a133fef83ec65697f71b98bcfb4a11cc423e0b2653f4b5c2e78a60aac8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-arm64.exe\",\n            \"hash\": \"7e2bcfc4a9f2e56a723129136d3cce9ed47bc38307362627140d187684fcb76fcc6ac1df481a2f1f3f56111c79ce4ccd1124fcc58ee7423239461565a362906d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-arm64.zip\",\n            \"hash\": \"e95d4c93dfb38c8f17efc44930d3f1b20c62cd24cdf5a692d977affb678d5084698dad4ab04beb705e58b2586628104787484b011f2072cb8e973a138aa40fc5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-x64.exe\",\n            \"hash\": \"3f38a5dd76d50ee60c52b0e0beb9c074b77d157f73bfebff89af65143c84eb318a110351377a63ebe971681b3157c683e4fc75208b904a21efd400d4de81dd33\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-x64.zip\",\n            \"hash\": \"13ae5ecad3633844da8ad224445e2be9bc604c3adb80ccaf433c30fc0cce955492f0fa80a394831b41e30b7dbba3992b92500e10ba55a19ba1b8f95758610aa8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-x86.exe\",\n            \"hash\": \"6a765aacf5dcdeed8ca6d28e31dacf3fa60ba7727a97aaa525538301689035a8703aa599525e2cdd041299a25ccb003550a79175c413d203a88961267fbb8890\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-x86.zip\",\n            \"hash\": \"caa091439a238e8172253ad43c7d63676d49796aaee83377005c9f3626344c5a2fcb9289285c621041103c4f2b854d8fe78e95e700dfd5d913a5da2feb04d4c9\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.407\",\n          \"version-display\": \"5.0.407\",\n          \"runtime-version\": \"5.0.16\",\n          \"vs-version\": \"16.11.12\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-arm.tar.gz\",\n              \"hash\": \"37db60df90f9f43a5399c1b7929c545e3815d7a91fdea82c96a136dcef993b0f8c67568759ae24321dee818fd1501cea8e541a159e10ed1a08fa96dddf2ffb9e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-arm64.tar.gz\",\n              \"hash\": \"500428a6a99d3825400be5cc1a723283f21a98c15ef68914e9252fc872b625fd10c220afd9787b7db6b226a04e83d30658234d464ccdf838639920d1768025e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-musl-arm.tar.gz\",\n              \"hash\": \"adc94a98cd71f6d11349e797be7a42cb32c484b95e75682f31bcddbe71158b11080538c3becd75d3c2bb54cb312e667991a35b2a4d803b9012cf2abe31e52aa0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-musl-arm64.tar.gz\",\n              \"hash\": \"92f493919acd6d6210ba0cfe1bc5889b500f058f6371f840a7b81011fc0a97923f761aa81b4ba6b7083079a198541089602f471bdf47d32780d956a83da031e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-musl-x64.tar.gz\",\n              \"hash\": \"0eab1963bf9a670ea51224d9c56c56bd3cccd32666130e41c70fe84087321d3d0ac9f7fb3eea4019a386af7544740e92ba85076a56408dff652f81dc8607be4f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-x64.tar.gz\",\n              \"hash\": \"b45f1bf086bfb5e0701c5e14534524ffc87d0195358ac4fa2cf36dac74537ca4c21c7177cfbfa7e121e77aa4106bb1e7039c9739ad73b942e2437bc5e39e6dce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-linux-x64.zip\",\n              \"hash\": \"40a4d014ae2dd0a51e072ae5bf758f26492331f53673ab3079b66bd7de720bea333896f0d007da4a1cece71289a67b8b748046568f580c21d273561cfa86830b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-osx-x64.pkg\",\n              \"hash\": \"79d9958fd6d3438667be1900eea64d282652f3fe3c95d4e8ae956c587677b849c262edb840e1c5f39ff36c916857ebbea2fa71b5b1ab0825c7e4487292f72b10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-osx-x64.tar.gz\",\n              \"hash\": \"476cfe9bce986d23f74317e1661e5e85fde144923bd0659623bce5fb8d09bc6c966299a133fef83ec65697f71b98bcfb4a11cc423e0b2653f4b5c2e78a60aac8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-arm64.exe\",\n              \"hash\": \"7e2bcfc4a9f2e56a723129136d3cce9ed47bc38307362627140d187684fcb76fcc6ac1df481a2f1f3f56111c79ce4ccd1124fcc58ee7423239461565a362906d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-arm64.zip\",\n              \"hash\": \"e95d4c93dfb38c8f17efc44930d3f1b20c62cd24cdf5a692d977affb678d5084698dad4ab04beb705e58b2586628104787484b011f2072cb8e973a138aa40fc5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-x64.exe\",\n              \"hash\": \"3f38a5dd76d50ee60c52b0e0beb9c074b77d157f73bfebff89af65143c84eb318a110351377a63ebe971681b3157c683e4fc75208b904a21efd400d4de81dd33\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-x64.zip\",\n              \"hash\": \"13ae5ecad3633844da8ad224445e2be9bc604c3adb80ccaf433c30fc0cce955492f0fa80a394831b41e30b7dbba3992b92500e10ba55a19ba1b8f95758610aa8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-x86.exe\",\n              \"hash\": \"6a765aacf5dcdeed8ca6d28e31dacf3fa60ba7727a97aaa525538301689035a8703aa599525e2cdd041299a25ccb003550a79175c413d203a88961267fbb8890\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.407/dotnet-sdk-5.0.407-win-x86.zip\",\n              \"hash\": \"caa091439a238e8172253ad43c7d63676d49796aaee83377005c9f3626344c5a2fcb9289285c621041103c4f2b854d8fe78e95e700dfd5d913a5da2feb04d4c9\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.213\",\n          \"version-display\": \"5.0.213\",\n          \"runtime-version\": \"5.0.16\",\n          \"vs-version\": \"16.9.18\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-linux-arm.tar.gz\",\n              \"hash\": \"e999caefe4df776df49cb3f4bd671ea55ade03ca0d2b7e95370aa87fed2dd50af8e3146c6bdafd25bfb8ad3804f8ea54cb55e2c0b8836d962ed5a31d43e38d87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-linux-arm64.tar.gz\",\n              \"hash\": \"550d9337abe83589d16af1fa9e6e5ca782a235dec3a23e6fcd98fddd5e46ee159086b1e18e41e4cfb3349fead3bcd0d2cc4525ed2e90a51f01c12dbd1fb7b550\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-linux-musl-arm.tar.gz\",\n              \"hash\": \"c5bc577928410a281e5c33ae7dcf44da3ea1d12567d49c25df0d96f2a20e3e0cf33ebb2d6d62a352a069e1104e42b532adda3c34d1ef4146a8cb5e7d99cfdb5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-linux-musl-arm64.tar.gz\",\n              \"hash\": \"eeb7459b8e14dedf7a796da289f12a13e587bd22d488000e87b96a8c57c78b6aa19fd1002cd216598bb1dd73a753736e382025a94487ea00978fea2c64b291cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-linux-musl-x64.tar.gz\",\n              \"hash\": \"7f51b2e9bbb36a3b226e5c0025c5f84f8db6687e0b288545202858288d2f58e72d2fbb3bb7c4c2aa7637ed8e5a1272febfcf99ab930a36c76b7129b663e4f252\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-linux-x64.tar.gz\",\n              \"hash\": \"7b22a359e435de4f6b8712c30e3b45ddde9e1b62d087ba1429d6a7d89a2e4e52dc10500d81e20ef6e54d9c13480b169ca33290e8aa1100b54c4399f10d4e0367\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-linux-x64.zip\",\n              \"hash\": \"5f5f1ba995063b7fe3248cf4d6109e034c7f18ca84629d99d08e5380bd27267e2b5c71a9545f7d5dabccc337d8f08b52d7f61471d6cba736e593f029e2959550\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-osx-x64.pkg\",\n              \"hash\": \"9508370e9b5eb6c324b378e7923182ddfd97a9b912ef13977555f1858f373c6c43f1a4890790449ed8e405969d8b563d32d16b435200c4578f2f2ca8eb7e359d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-osx-x64.tar.gz\",\n              \"hash\": \"b07ecae6d2e3caf4da02da5957d3c07063b0045ce8ecdcf719d38723c9770f43418d463535964d3188bb46b371dbce8c4c54e39b5c01fcf702a2ae845b0d8d84\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-win-arm64.exe\",\n              \"hash\": \"2b9075f2b23ade0516e384f1d0838827ff397ae924542b18fabfbe38e0c29172fb9e08211e0496ae6948550c6b37d836813cd46f9ac3d451bf71664f5b117da1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-win-arm64.zip\",\n              \"hash\": \"81747f914a73059fae7799221b7626c0b1156c5e9bd9c0857ab3a22c7aea57406aaf145f70afe3e8cbc744acf8f0b9a22570ffff54443e6bfd58da15e74cd89f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-win-x64.exe\",\n              \"hash\": \"108ceaf44e2dcff0cf3d972977c7f45cabc9b01b550bb5e5db60cf0f0ee2b57b99f18a0872f8a426d688e68b402a1ce4631f85f6475b7dcbed2911e73f7d0443\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-win-x64.zip\",\n              \"hash\": \"8e3f9d1a14c603aef3712f9358c8d3e97fa21f00c3f66192b9905906d2bd8061e1d34ad9a932cce099cf4a224766c29317d945671953a4804b0f69cfacc1d27c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-win-x86.exe\",\n              \"hash\": \"9cbf137de388cba6e3376c3f1b8a62fddccd9f981be9d948e8539c90ad689cc19362d598ef19fae6248dbc9ed831849b82d77119f04b690a65eefd67cb29276c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.213/dotnet-sdk-5.0.213-win-x86.zip\",\n              \"hash\": \"ff35adfa54a5f618f516cd10de889560ad014930277ae10a9fc217bc83762de6a66bd0a2d7f8a8772e27599ad08aa320cebdec9b6a28a75f36686707d9043e85\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.16\",\n        \"version-display\": \"5.0.16\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.22077.16\"\n        ],\n        \"vs-version\": \"16.9.19, 16.11.12\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-linux-arm.tar.gz\",\n            \"hash\": \"d1572dc30ff345a43858a78676e33645f6b7a262e840aae6f4b996c6c26c1d2d59575c9d1da4b829d71b60b20edecd426352ab7cfac51935e41f2c8dbcc79b55\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-linux-arm64.tar.gz\",\n            \"hash\": \"624737bd29475b923ba7e3c161df4dcffb0463c1b1308442f4a88aa59940d9c943624d3bfc19ed3dad39347f093c82d269f94ce547cb59b138863d510cc2bba1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"b8546ede8ee4625ac237062b41c18ed3cbba440c99bd3083eae45aaf01efa822bbbedc68e96135556a1b4bec6ec5fe1cc62a0fcd4dba800779690a4c5db69bac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"72a82d95dfd5210653253c5d3d8ba4eedf67530f11d0680b547f31d77bde0d13a957a5af59ca71e86f70960facc7119a270ca55c050cf985e7e56b6b331d1490\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"d7aa3a3753505448cc3ba38bc17bf767503e328fade8e8bbc6ac5da8e12ec29737159ec75d327ee71e7f628282a272df0fb4b20e296edbb5f282d2db859a1457\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-linux-x64.tar.gz\",\n            \"hash\": \"051bcc3f801ab713eb8d883a1176e45e5842f56ef42ff66b643dcb233205ec377a8c66a58c9c1cbc2927eb35b611a8825af7d08f8432785d9b42f8423ee65d25\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-osx-x64.tar.gz\",\n            \"hash\": \"fa80ceb8cd45c4fd66022b163aafe638169de7f82e01a25dc309936e995b9f3eb725d799ca86c73f9893ecc62cdf53757283c439ea388ae4210e0c742798d639\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-win-arm64.zip\",\n            \"hash\": \"2ab87ce18fa970d7a5e85a3318d165069c0a1d86f56a62c213872e3962d489efeb4a70962a0dfad7662a686167fb85a125e36a0f7bd7e7c15aae34c471761b0d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-win-x64.exe\",\n            \"hash\": \"d54dacfa4dda13bed5f405b08741e0edb265dd03c502c9532919242acf5986140dcf804f7918e2dcb907371e20bd45dd702f91759b9ea9685e8f26eb129b7508\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-win-x64.zip\",\n            \"hash\": \"a9d4c34c8e734375f04be1c5e5241eacf323c807485460bbd7eaa2d65a385e2f6b37f6b0544eda952cede3f481b1797de182c2c4ac5e7fabe645b4ae5b6f2e93\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-win-x86.exe\",\n            \"hash\": \"e188fc07a8e2f46318cc5d2ecdfa45115cefd9f868c2e99f5f65800c6a854959c0c42f9539ed081315d4aac3f9840aea495bc0ee195d184bab943009655556b1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/aspnetcore-runtime-5.0.16-win-x86.zip\",\n            \"hash\": \"1798ed5f2f703a6f40395a03cada0722e55086a3b84c35e258ddf00663d90d20cf4436888f490d761429e4dd5cd60b8956aefd86c9038cc1acfdaf7bf275e2da\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.16/dotnet-hosting-5.0.16-win.exe\",\n            \"hash\": \"898fef7e35880c08febeb7438ded21913367881cc208aa232e80e307f968d73df9d5d1f8dac086c08619f813e7802a3054f0ddf6c19582148f37be10c71fd1d3\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.16\",\n        \"version-display\": \"5.0.16\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.16/windowsdesktop-runtime-5.0.16-win-arm64.exe\",\n            \"hash\": \"868b608bcc75b544ac0e377a16eef4edda94165a4f900de51c8336edc72082c9d3d78cdb4f7eb0fdd0334d68508a77c6e90062e3b7a76d5227b86a22dc59edb5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.16/windowsdesktop-runtime-5.0.16-win-x64.exe\",\n            \"hash\": \"87a80b3ddf837476300faad0d36c491f05d9343bc553ad76fa0c4b7c753fa3b435caba6ba1a920e732c0fc14f22fe1942bc6f59bfed834cf3b4d0c8f125353d8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.16/windowsdesktop-runtime-5.0.16-win-x86.exe\",\n            \"hash\": \"bc99476c311172864a4081269d1016eae306a120311fb3842ae8d726f553d7b987f2fac97e968f74a04a213e62ce324971b02d02aa5c8a828096625bf3a469a2\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-03-08\",\n      \"release-version\": \"5.0.15\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-24464\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24464\"\n        },\n        {\n          \"cve-id\": \"CVE-2022-24512\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24512\"\n        },\n        {\n          \"cve-id\": \"CVE-2020-8927\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8927\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.15/5.0.15.md\",\n      \"runtime\": {\n        \"version\": \"5.0.15\",\n        \"version-display\": \"5.0.15\",\n        \"vs-version\": \"16.9.18, 16.11.11\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-linux-arm.tar.gz\",\n            \"hash\": \"90942a75a13c508189780b5378830344c8bea43118c4a1ee72c30791cb84803be1327e6a19dd672b60f262abd0e880f4e7ede5c88e5a717a7ef4261719ff9f69\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-linux-arm64.tar.gz\",\n            \"hash\": \"2e53cda13100dd7b2f39b62e09d052770f3444025f379741ae7898c3e16a787d000dcec282d495dccfc0e6c0fef23db03d8982140a3447769e9a7034c41b59bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"eb2575bc9c45908653145bf1e5ca3b14c2f2a91b3a5e6856478779db6b538ee42f8cb81188a665feb047cd730a45238aaf80fd10e50c7120a0c4200639a0a982\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0c7ded4e35f267c2c3866532b40c4af2b047ff85c0e9f3aed5c022a1232d15dfc5b2703966f14f0c5a9662ddacf78f604627603b416c1e5e910821ea2c263eed\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"9ac891ea130e0cc6a718adf0c4f1e3da327e2fe8c69d7df9625ebbf6f91c6351a20e669ff47bb527c057d4a91a29c818c183ab026a0b50fa94d148b25d7065f1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-linux-x64.tar.gz\",\n            \"hash\": \"4c652a02d35bc8bafbcf15555ea319aba7c9077ddb55786cb27a11b5b16e70ef026d1d561268185e398afd16f6db1f02b4846cc83a7e0f1b0b1a07a12f84c7ee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://download.visualstudio.microsoft.com/download/pr/aae7783c-c033-4308-ab45-7edf78d8945b/bef03269b50362c36a56a6f21693dd26/dotnet-runtime-5.0.15-osx-x64.pkg\",\n            \"hash\": \"d31493b7727a755e695f0a7079c0a326cedd97c99c2b138202458e3279b80568e5ed859e1564c3d09bc3289ae7a51220c2794c66cd7207f10e349a94d2922489\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-osx-x64.tar.gz\",\n            \"hash\": \"8d5ae1f8af960577215e6e96a30fdb886c7f4b0ae0292263d46bdfa0bd67083d2480e03c4acd1b451a65b64dd9bd55c947c7e6367b936fe720c2cd7ddde75f78\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-win-arm64.exe\",\n            \"hash\": \"c0746f17770f52a9da71e1a3f30176cc0289ea68a1d453d1cee62950df8b8cb575eeae3f2038a11663becaac94ebf83e7a49ffea255c143deb053e0a5852e803\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-win-arm64.zip\",\n            \"hash\": \"3a99e9305250a8e490a140ae62b3e18b1f2972251b6efc984555572317fd194bb262a72d3ed5f292529581840b35897eb939bb46fb5ab9a784eb55d6c817a3cc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-win-x64.exe\",\n            \"hash\": \"f4f0961565af9d2b93cf12dc7e2e0489965837996abfca82f64fd76a079d50e26254ee1a33f9e8b320f254feb48a5b6536ff812b634773c9392993eb37743482\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-win-x64.zip\",\n            \"hash\": \"8aa6c6864fb9c4fa024f9af678284010fc4b9788f33a91bf2d0e4479c745f7f40bcc91cffd569e5d971fc99cfaf09c8a05ffca5ed1c70cf4a4b0ce0fe4bbad99\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-win-x86.exe\",\n            \"hash\": \"01546937e77709d8158c1c61e03218b1d347744a666d7353117b469ef7d65abf99fdcfa9b22e5c169fd1e455960080c8a1ad752c8fae2db84804fff830593dee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.15/dotnet-runtime-5.0.15-win-x86.zip\",\n            \"hash\": \"d099b9ebeababcd7d1c7292c6b5d0b63ec46cb8a43439051aa4b07858dea2f6d1b5b49c5f7cff072e60e657254ca1ae23649989d72af34f6d6984f99e9c3a083\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.406\",\n        \"version-display\": \"5.0.406\",\n        \"runtime-version\": \"5.0.15\",\n        \"vs-version\": \"16.11.11\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-arm.tar.gz\",\n            \"hash\": \"7ac3e2532de5a6b41f379fee445d85040bd033799d525d021b8d582e97c22cc24b3ddfac90e222944a36e6f01538b9906b58cb0bd3c09a8cc56fb82fed8f6a79\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-arm64.tar.gz\",\n            \"hash\": \"df52611b3135650322030d18c685fa6d0fc0adabae976ea9509ab3e4daa306098b3e4dca31f1950c573dbadf7cfcffacc6ad609c893ec31bbb4df897548651cf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-musl-arm.tar.gz\",\n            \"hash\": \"288721b334953ed275e48c62213fe806a7332a3a130ffabdd5e334352192dafac81d1a83a82d68d2218785fb2dfe620136988bc1772275d243e9a057d08f1c87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1920265743214d4870ea1af1239868e1f55d63222c1d8c89405dcff49c8b98d9ac02491b08fccb489b623757ff25b8f5449d91357108289d61975c5f583ec2fb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-musl-x64.tar.gz\",\n            \"hash\": \"04b9fda51cf3bd648101bc3eb7aded745da203fdbb801fb1a58013c32f7d5ff19392ee4bf68e7abc2a1ca4da1bc7bff888da124fbdeb9d874c718e8aec736f9f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-x64.tar.gz\",\n            \"hash\": \"21f0617d359d5c333a8925af71b359c0e9e371eaa6e4b20faf0f699296cebaacc56cb9660fa310b2ed99ca636f241f2df999698a883cf7899dd670bdf92bdd29\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-x64.zip\",\n            \"hash\": \"86d00f48d9b920bc97dd9215cc80ec3ee5a00a303cf0048333331aa9c6ddb9a4bd5faf241cf82a74d762f89995f72d41916cc76a0be39411345b6b320c5c693b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-osx-x64.pkg\",\n            \"hash\": \"83e3a2d403ad6ba90a0ab6b2d6920023917c68416835651d885f026b8f3fa4afc16ee20d0ec0e88471a4f4e93b107625db3c02d722de245234fcae37b6c1a59e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-osx-x64.tar.gz\",\n            \"hash\": \"56bb978949d446c3f0cc7255897ebdf42573793fbd4f8ceb544fc0343dc8375a5c0eb68e7527ad8e5e9fb00406529b06048795f1ee398740ce0356d393046989\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-arm64.exe\",\n            \"hash\": \"208537c41817223ffbdd3d9d7fd189dea42ef367e59d83db639f98c482c85be8c4bad0841a91f2599db6e9893302cbf72f65245ab4a294a94cc4c32777249d85\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-arm64.zip\",\n            \"hash\": \"3648c4fc479490c55b93d88edc4c69c1b06d45643a09db3ff1d1b0d59b26a64621d844fe14ebbc914652ca8f64a7f44757fce155d2abb7bdc7e10ff8da2dd576\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-x64.exe\",\n            \"hash\": \"181e14cf01213ae333911e7fc781cc86b5ed61a0fc14e2001c3cd0186b32a023ca4ca23d18eaffe450c35c7f0f2ce5ca3f787f46daff17e2ebed8a352d3e9fc7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-x64.zip\",\n            \"hash\": \"e63dd1c32e2bcd3e26bd5fa5c776b65df1f533eafa9a9d53287530eef62dbebad2411c82ea1f6b0b2c0e4db5cdce8222f9473529fd14649a6b26c9ec1b603793\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-x86.exe\",\n            \"hash\": \"20b7f06832f5bf0dc960043f75826f381dab2eb1fe77b7eb0abf8b86e2fe3cdbf0780fa93b2ab23c2f524b657260f86efbf0d88e042085c9a6fffa96060b3d29\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-x86.zip\",\n            \"hash\": \"c6b4e356922e1295e11e219308a9df900024a59bbf9f6dc86514d5d6d916c7b84a87558819f76704c4eb37b127c7cbdd3ddf918805537cc4a63075f7ba408540\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.406\",\n          \"version-display\": \"5.0.406\",\n          \"runtime-version\": \"5.0.15\",\n          \"vs-version\": \"16.11.11\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-arm.tar.gz\",\n              \"hash\": \"7ac3e2532de5a6b41f379fee445d85040bd033799d525d021b8d582e97c22cc24b3ddfac90e222944a36e6f01538b9906b58cb0bd3c09a8cc56fb82fed8f6a79\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-arm64.tar.gz\",\n              \"hash\": \"df52611b3135650322030d18c685fa6d0fc0adabae976ea9509ab3e4daa306098b3e4dca31f1950c573dbadf7cfcffacc6ad609c893ec31bbb4df897548651cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-musl-arm.tar.gz\",\n              \"hash\": \"288721b334953ed275e48c62213fe806a7332a3a130ffabdd5e334352192dafac81d1a83a82d68d2218785fb2dfe620136988bc1772275d243e9a057d08f1c87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1920265743214d4870ea1af1239868e1f55d63222c1d8c89405dcff49c8b98d9ac02491b08fccb489b623757ff25b8f5449d91357108289d61975c5f583ec2fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-musl-x64.tar.gz\",\n              \"hash\": \"04b9fda51cf3bd648101bc3eb7aded745da203fdbb801fb1a58013c32f7d5ff19392ee4bf68e7abc2a1ca4da1bc7bff888da124fbdeb9d874c718e8aec736f9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-x64.tar.gz\",\n              \"hash\": \"21f0617d359d5c333a8925af71b359c0e9e371eaa6e4b20faf0f699296cebaacc56cb9660fa310b2ed99ca636f241f2df999698a883cf7899dd670bdf92bdd29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-linux-x64.zip\",\n              \"hash\": \"86d00f48d9b920bc97dd9215cc80ec3ee5a00a303cf0048333331aa9c6ddb9a4bd5faf241cf82a74d762f89995f72d41916cc76a0be39411345b6b320c5c693b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-osx-x64.pkg\",\n              \"hash\": \"83e3a2d403ad6ba90a0ab6b2d6920023917c68416835651d885f026b8f3fa4afc16ee20d0ec0e88471a4f4e93b107625db3c02d722de245234fcae37b6c1a59e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-osx-x64.tar.gz\",\n              \"hash\": \"56bb978949d446c3f0cc7255897ebdf42573793fbd4f8ceb544fc0343dc8375a5c0eb68e7527ad8e5e9fb00406529b06048795f1ee398740ce0356d393046989\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-arm64.exe\",\n              \"hash\": \"208537c41817223ffbdd3d9d7fd189dea42ef367e59d83db639f98c482c85be8c4bad0841a91f2599db6e9893302cbf72f65245ab4a294a94cc4c32777249d85\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-arm64.zip\",\n              \"hash\": \"3648c4fc479490c55b93d88edc4c69c1b06d45643a09db3ff1d1b0d59b26a64621d844fe14ebbc914652ca8f64a7f44757fce155d2abb7bdc7e10ff8da2dd576\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-x64.exe\",\n              \"hash\": \"181e14cf01213ae333911e7fc781cc86b5ed61a0fc14e2001c3cd0186b32a023ca4ca23d18eaffe450c35c7f0f2ce5ca3f787f46daff17e2ebed8a352d3e9fc7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-x64.zip\",\n              \"hash\": \"e63dd1c32e2bcd3e26bd5fa5c776b65df1f533eafa9a9d53287530eef62dbebad2411c82ea1f6b0b2c0e4db5cdce8222f9473529fd14649a6b26c9ec1b603793\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-x86.exe\",\n              \"hash\": \"20b7f06832f5bf0dc960043f75826f381dab2eb1fe77b7eb0abf8b86e2fe3cdbf0780fa93b2ab23c2f524b657260f86efbf0d88e042085c9a6fffa96060b3d29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.406/dotnet-sdk-5.0.406-win-x86.zip\",\n              \"hash\": \"c6b4e356922e1295e11e219308a9df900024a59bbf9f6dc86514d5d6d916c7b84a87558819f76704c4eb37b127c7cbdd3ddf918805537cc4a63075f7ba408540\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.212\",\n          \"version-display\": \"5.0.212\",\n          \"runtime-version\": \"5.0.15\",\n          \"vs-version\": \"16.9.18\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-linux-arm.tar.gz\",\n              \"hash\": \"5c29669aed5303e417af8d6d67023e01dea4be6499bc1b570de486e61d827bc5981a8fb6e8b83e220c137d2d42e9d8d3cb46c1a85ca99b1c75b52e81265e4241\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-linux-arm64.tar.gz\",\n              \"hash\": \"5abdcda5a647d742664bfffe018d027bd3bc9dc5b3730472a86667a841aa5763b4c3b4f8f654912d170984b3a2d2d2074ba784a0795bad1174674e5e0ce624b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-linux-musl-arm.tar.gz\",\n              \"hash\": \"fda40f6b4e6012789f137d71a5d1813a429faa4c9dbcab5ffd27bf932a2e4d560b48ff2cf0a7438f646b547d19832bbeca7acaa7ad3d24fdfb049cef5fe97c96\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-linux-musl-arm64.tar.gz\",\n              \"hash\": \"a84ff994602532a76f9494a8c408a8f6b4623b2f750d72e366bf130a0f2b7cd5e33fa46a56c02dd832e01ec90cba70f5dd0452f73d71922879bef358f79274d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-linux-musl-x64.tar.gz\",\n              \"hash\": \"341282d1187f118ca00c2e908c053d8722cb880671bb5d01b5616a525872b34bf23d024e786e1cc00418aba0fb13558da4080b74deeb8cefc6a1b465ab9a44d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-linux-x64.tar.gz\",\n              \"hash\": \"c13eb20d2356374c266b983ec15c5b12e06d3c39b04839916affe758f757c64ce3854701cdb2c25b6e8ad3f2914f67e9dec3993e85e575d3085b32a6b9dd7f12\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-linux-x64.zip\",\n              \"hash\": \"1cb7d9d1481d46a94842ee490aa10ef85d6bcf025ce02624a4e62549fe883c9494e83b050591b9363b244f8166f466e9ace3491058657a7041f24c9f1c60b4cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-osx-x64.pkg\",\n              \"hash\": \"9a80c09924307e56dfdea430701be4640999f838359c8254d68991b8b1615f83b0b9fc70b0819b17ef1e04b645979c2bd89a87847130978afbfab875a0826610\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-osx-x64.tar.gz\",\n              \"hash\": \"8dc0d3a5760beafc45080d33ef618cd866ab57d0aa32b9b0e1c58c90743d9075e7d19e440a17e57e5bee4a1f503a0482ecc2a12a530f54936056658efb3eaf69\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-win-arm64.exe\",\n              \"hash\": \"913b8c781066cd264fe0b4c2cf0302dab7156cf6b214ef6d94b163092c95a0b7e689a9631f7ca99b02a5557427a261f16cd6f7a6f4ea5d55cf8802fb3dd7803d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-win-arm64.zip\",\n              \"hash\": \"601ecbbe2d2a03861eb76051228f5668517def3e17551842f87379e47245f8caaf14bcf63b886f9fde2defc8ba94504b784ae65d6281b8d2be3be6c6a15d49ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-win-x64.exe\",\n              \"hash\": \"ff6360fbbc1b6696866c5271cd558ed607662080df4ad0470054af3d3ffd1cfbd4b05576279aa886f99ae9b836241fbbb5bf7c8a235570702a054d4e61c5c7e7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-win-x64.zip\",\n              \"hash\": \"f7cc04dfae884fbfd715ac73c16888b230b8cac128aa8a8949116f5ce0b439f264b4b402a5e10f0f8ecc726d085c4b3ac4deca1283d8a22bdfaf4552ee749f41\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-win-x86.exe\",\n              \"hash\": \"7befcedbfc23985bca7276c074b0ecf45a9f7a0f521e4b54b650a3a2217e159fae61c11515fa06570a7a2d8b5ceeb2a9ea110f281f555913b1a4e7bb21710dd6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.212/dotnet-sdk-5.0.212-win-x86.zip\",\n              \"hash\": \"0dd6ec6716eae5f6a56223b79dcde7c4f36d75aaeb2ea5f2bd5439274e6ca7e23c7b2ab0c1caacc6f263a9b4e267c9ee01c6b29cc181a63c3f81a4c94f485108\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.15\",\n        \"version-display\": \"5.0.15\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.22048.15\"\n        ],\n        \"vs-version\": \"16.9.18, 16.11.11\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-linux-arm.tar.gz\",\n            \"hash\": \"15185d0a58e69db258ace42022076184815c8838ba195b405bdc3b4187e311f2d0f2f6876f752d5ba16c5e87ddb75299bfbf5a438d27df02d1cfe02463cbf5d7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-linux-arm64.tar.gz\",\n            \"hash\": \"df1037918f652b68d84639718ece0a726a6caeb977e125a3a57fe8fe146af43a892335ccf193efc1926962e4b1d8e05b8b7514303ede574478fe3e1c2f8f0d68\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"33ee1577c68a41aa9a0595e52a97e76bb389a5bbc573afd70d25244c8f908b3d0080dde5151fd7f29d4560c84355bcaeb1c83523bf80cbc8fc099e5d51683519\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4f47cb78509b3ef72d4000fe37d9ab54bae548db2d3458cbded4acb4e6170ee04888f55e96bb0bd3ffcc5415f7e66be64fbaf6b888a5b785de9a5eac4968394d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"efb8489cd56e8ea4b5a8c844193f68986dd5438c567157481b2fd6489540f3d67daab6656b335a72fea3220feb1d81009167db08ccd615c1c203a698019acebd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-linux-x64.tar.gz\",\n            \"hash\": \"e0d0f5150bac6234dda07da91983eb1a4cb13320d9e06fe83dfe4155abbb4125ce8053638aced998cd9d040a5a595c97773004d16123a9bff6da43a9c0e266eb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-osx-x64.tar.gz\",\n            \"hash\": \"443684e1672013824457c4dfd965cd88a9817466334b28ff2fa5d9150a0f7d281820158f1872faf68a1661c0092c32a553acd88405bb4d7e55d65e92bc52cee2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-win-arm64.zip\",\n            \"hash\": \"719cbc4652d1be4060782b48a0f785a3bf53398e53ed5cd40cdc4e070c9dde488eb4a4c1396cef6949b9570543b3098e804fd6011a8bbd427ad29864b958d240\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-win-x64.exe\",\n            \"hash\": \"9d796d21d2c79dcea3827eab27dae7709e80f1a9ae39b9500a9143610b876f5283ff4221255492371dd2726b4668af5b00f86758a020a56a11c888c62f5094a4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-win-x64.zip\",\n            \"hash\": \"5b483550fdb4fe3e056524a60411ccf1f36068ca89d252fb996ac8eea008292538916ba95b54c4a3789c9257167a79050c4b97cadc97d6de944457d510522d11\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-win-x86.exe\",\n            \"hash\": \"3ccffc9b26fb5b875cd5ce5fec83028b745b9b90751a6d5614cf808b5598e9f14ee4c508b18e5b811705e5cdb3c1e7b79deb2d4bbd3e8f83aaee7bd59530672c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/aspnetcore-runtime-5.0.15-win-x86.zip\",\n            \"hash\": \"b98e8d5b160ce04798e72e3931bd42839ffdfd99d24fd662c80693f5e60d7cb3599a92fd31b17f3c0d076f6da53a33e5fc1fb888083631e6f8f04133b2503059\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.15/dotnet-hosting-5.0.15-win.exe\",\n            \"hash\": \"cef2f406f336ac5d736278f09b8a6d232927215eb1f03a1430bf555770ba4febff53eac8100873d9025bb8467fd27afd6a54b180cba6a987fdc88ad6ab49328c\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.15\",\n        \"version-display\": \"5.0.15\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.15/windowsdesktop-runtime-5.0.15-win-arm64.exe\",\n            \"hash\": \"76a8d3b2bffb49886bf25b20522ec5ae3d272a85fbde3861db8e344328c738a1d16ca1c9b90e4516cacb13dfb9af137e3f47e0fcacd7c89f7e7af5d46b7abe60\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.15/windowsdesktop-runtime-5.0.15-win-x64.exe\",\n            \"hash\": \"99f5002ce96895c1562f3c4461ab9710e9585ff3b2a4f25a783bd0e27595cc709c5c1fcaf1d9fa04c7dcab51d05de7ffe1bf3e4b3af2e684ee62a3ff993defd0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.15/windowsdesktop-runtime-5.0.15-win-x86.exe\",\n            \"hash\": \"853b4a0210469b54e85d3d34df0985e91f2c660c7d5a6b2f830ec931631e7a9b6d7e7d70b2487f6f40fcf38f2dac404dc7ca04fec397183a53cc373be97b3607\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-02-08\",\n      \"release-version\": \"5.0.14\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-21986\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21986\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.14/5.0.14.md\",\n      \"runtime\": {\n        \"version\": \"5.0.14\",\n        \"version-display\": \"5.0.14\",\n        \"vs-version\": \"17.0.6, 16.11.10, 16.9.17\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-linux-arm.tar.gz\",\n            \"hash\": \"c6fa8c0218cdd98fee31cc24374f161c85a49415f21e227dfa24944e45fdff4087f6d865d21f0e2105618d76e95d2153d16a9521315a21e854ee3b0522c366a6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-linux-arm64.tar.gz\",\n            \"hash\": \"4de448bfe995042aec23a280ea1c5df53b5ebd2702da32885d5d9fd06fd64d06a0eee53fabfe4d21a40e2bdd9c01b69e8defe7697b0cb12fc052e2d1e7d3d822\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"485a4513a92aa98c7b62b7381fad9454ba778f90df4704fd27f70c2386d51aca306187b06b95cb13c745505e0589cdb837253783194884277c752e9f2f02e629\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e45f6f1442503cf8ec1d0647be1ab444dec81884f0ba2d45046eb5b3ee9095f35fda8e9f6efff2d8813bf6d4b22b87b9298c6f3af7d6618c984d55835f636288\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"1136ac2a2686a6a16406899b118adcde0aea0341c7d4e781b256543fc1517bb116128497103d7456dfac632c3e75a7ad9d00b570bfd77ed9fbc7ef239f67940c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-linux-x64.tar.gz\",\n            \"hash\": \"49d9046ecbe5881f8e29f0de787926b69ba2e2bd687b40b840da4139d42858b4ab1f93913dfa2cb28c835f81ab0eec0077e4652f1e0040be78c42d43e0ce6d6d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-osx-x64.pkg\",\n            \"hash\": \"0d6d05ebedd5beb7431d43e6b2a2e356624d6e685a878fddd6a48d3c1d33a4980646e57e6fdb8f6ad2af8798e48fd0f86feb8ea5c3009adf6f2c758503151199\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-osx-x64.tar.gz\",\n            \"hash\": \"a61731b0cc663e055947d90b3cfcb101c49898e06749e3745846a0778f650dd0af934638b4511455f56077fdd127fb47bbf298b55665cf7b915f6a61a5630a2f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-win-arm64.exe\",\n            \"hash\": \"7af6e14f7ac5e94ce7b714ce46d5a2dcf164ea59475dafa79369e7aa12be9a19fed527fff59e54dd44dd1dc6bd380a540f73560138582b6cae542d8e7e768f10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-win-arm64.zip\",\n            \"hash\": \"1ebd6bc62e89c36abb4757006c18b97010b46a93c1e9caaece0d3edcc69da84f7491160f248358e03f4d1a892cad3913426fe7bd6b46e74702e3014de928db81\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-win-x64.exe\",\n            \"hash\": \"6050c14fac546805fcc8252469dfa5c1e6c0b2ed10942b012396ac68fe56f27609b485aacc9510a04ec1c500c7d416e52d20ddfe4dfd896d1caf760df79217c0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-win-x64.zip\",\n            \"hash\": \"1e6fd270b462a312ebba8411149046b5e4b0a6e7618f6d595ce7d563d9f0a6ddf378f1f6d89152b3b5a64091af5d7b06f4949317e28e806cfd9c145b3d0ff711\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-win-x86.exe\",\n            \"hash\": \"08f6aacd43d7405a9840fe467a2aece3c0256f6ac24e7133be468f8dca58243d976a573ca9303ec10dac14cca654cd76a80a6717880385962e00ad5d2377316d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.14/dotnet-runtime-5.0.14-win-x86.zip\",\n            \"hash\": \"a2ed9fbb06494dff3f086767d0cb65c7e8a4d27adb7a6408ef4b5955fd32c1928782f9fa599ceecbd3cd387f49701eb3b4ec1e52604a9731bfc09eb4b1413009\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.405\",\n        \"version-display\": \"5.0.405\",\n        \"runtime-version\": \"5.0.14\",\n        \"vs-version\": \"16.11.10\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-arm.tar.gz\",\n            \"hash\": \"a84eaa3ae75377bf9c6853c58187888324ca412a51bf7f3f96b1fdefb4dbbc02d4d0e71e5e6cbd07b4124684cda054ec14910cbc220d1120845ec6219d7e0636\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-arm64.tar.gz\",\n            \"hash\": \"f53ee4bc1b5f79300072f4e8f71eccad5f9bd72cef7c792540309f98dd4fc175647422d16f2f48d0645474aae4a10e33646f0d4b74461656a49d34d765e71451\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-musl-arm.tar.gz\",\n            \"hash\": \"f9296088d1283135c874d0efb0bf6c4cd90c6e2dc1005377b08a75df819bb480c9cafca22e83393bfe1c45e9a2fbbf85ae3b7d5a26b4b84f17edc69ecf6f3aa0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a519d0455e3a786cb5018c75f1705d975118b5eccba15eba158c815ba05cef15bc1703c12e8d479e544136f6c5a7e260831159cdbd8b6e06c300ad770ce3433a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-musl-x64.tar.gz\",\n            \"hash\": \"b37393cbb6cb1cab4efe88741b29a70d9a519a21f9a0ba870a2be58e7fee30d6b9e7da57aa572df5d4f0c876dd43a1ad11517d4988b5ec26511215f6c362debd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-x64.tar.gz\",\n            \"hash\": \"be1b3b2c213937d5d17ed18c6bd3f8fab2d66593642caf14229d12f68ddfa304edb4d88ce735ee0347969dc79a9e3d7d8cddfb5ff2044177cda0f2072ed8bd47\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-x64.zip\",\n            \"hash\": \"cd0ae1ffd9540bea085f2a9bfd961a476c04e160721882172660c4f491dea4902d8999a95c468b0fb60456b1dabe871c8906697789bc9e261efcd2cc5cad8e12\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-osx-x64.pkg\",\n            \"hash\": \"9495c6c177ab066c9369c66490f53e97b3a80c1e61b333d6054bd0f4da76393c36dcdf74eb453f74b69b6305ca69241caad4a9335280b37073d8b625aa5d2102\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-osx-x64.tar.gz\",\n            \"hash\": \"125847bc5d66a7e1bad8a6c1ee6b897f7279d3aa772f746c2d9479813a07e4b0d444f05f1a4001f2aa8ec72679d653efac37dd0367729edc50fd34ba324c2103\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-arm64.exe\",\n            \"hash\": \"754c4df00611f4add5ead44f4459c45eeeff6b884368f4983b307bc8b885fe13d0b4fe4be75a85f0f68cb90a46cc86fcb96fcf1fea4e29d3fa49a2e1aee52dd6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-arm64.zip\",\n            \"hash\": \"39e98f4c8be7d4436079c783e3f5ad8812de533aa7756ca5d3c37d8362802e477170115df26ff80c61398cb21e3204be37eba7979a5a3cd4163cef6ed0555d61\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-x64.exe\",\n            \"hash\": \"a0f2d81ae353eb8af4592300f2b8a58c8e442f17244d76dff8f4d0bd7b7ccc845b1a74925bf000a1375ba9905601fa480e4e3ccd719448513ab09ee88894f7d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-x64.zip\",\n            \"hash\": \"73b5e17fa86965d720cb73d39a97975dd7f5f26190606567b373c19642e92ebd1a85c3fa5306bb9fc6d510abc2dcd9d070b0e22f551e414136c9e2de2bcfc92a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-x86.exe\",\n            \"hash\": \"5c9852299acf5bc688f903a5a2ec73a12199cdadacae384d13c337f21431fcf57143d2ab9e8ad930126ef9f84a19748bdf9cabc06ff66c63231247edfb46c28a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-x86.zip\",\n            \"hash\": \"15ef053fb824584db3dab95ea51d2008808c4c425e7e67af77c9ce97470c500b070afd581f4668ff4dd127565dad2dae49c25195d8dcf27d862f2ce4b8751ed1\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.405\",\n          \"version-display\": \"5.0.405\",\n          \"runtime-version\": \"5.0.14\",\n          \"vs-version\": \"16.11.10\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-arm.tar.gz\",\n              \"hash\": \"a84eaa3ae75377bf9c6853c58187888324ca412a51bf7f3f96b1fdefb4dbbc02d4d0e71e5e6cbd07b4124684cda054ec14910cbc220d1120845ec6219d7e0636\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-arm64.tar.gz\",\n              \"hash\": \"f53ee4bc1b5f79300072f4e8f71eccad5f9bd72cef7c792540309f98dd4fc175647422d16f2f48d0645474aae4a10e33646f0d4b74461656a49d34d765e71451\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-musl-arm.tar.gz\",\n              \"hash\": \"f9296088d1283135c874d0efb0bf6c4cd90c6e2dc1005377b08a75df819bb480c9cafca22e83393bfe1c45e9a2fbbf85ae3b7d5a26b4b84f17edc69ecf6f3aa0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-musl-arm64.tar.gz\",\n              \"hash\": \"a519d0455e3a786cb5018c75f1705d975118b5eccba15eba158c815ba05cef15bc1703c12e8d479e544136f6c5a7e260831159cdbd8b6e06c300ad770ce3433a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-musl-x64.tar.gz\",\n              \"hash\": \"b37393cbb6cb1cab4efe88741b29a70d9a519a21f9a0ba870a2be58e7fee30d6b9e7da57aa572df5d4f0c876dd43a1ad11517d4988b5ec26511215f6c362debd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-x64.tar.gz\",\n              \"hash\": \"be1b3b2c213937d5d17ed18c6bd3f8fab2d66593642caf14229d12f68ddfa304edb4d88ce735ee0347969dc79a9e3d7d8cddfb5ff2044177cda0f2072ed8bd47\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-linux-x64.zip\",\n              \"hash\": \"cd0ae1ffd9540bea085f2a9bfd961a476c04e160721882172660c4f491dea4902d8999a95c468b0fb60456b1dabe871c8906697789bc9e261efcd2cc5cad8e12\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-osx-x64.pkg\",\n              \"hash\": \"9495c6c177ab066c9369c66490f53e97b3a80c1e61b333d6054bd0f4da76393c36dcdf74eb453f74b69b6305ca69241caad4a9335280b37073d8b625aa5d2102\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-osx-x64.tar.gz\",\n              \"hash\": \"125847bc5d66a7e1bad8a6c1ee6b897f7279d3aa772f746c2d9479813a07e4b0d444f05f1a4001f2aa8ec72679d653efac37dd0367729edc50fd34ba324c2103\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-arm64.exe\",\n              \"hash\": \"754c4df00611f4add5ead44f4459c45eeeff6b884368f4983b307bc8b885fe13d0b4fe4be75a85f0f68cb90a46cc86fcb96fcf1fea4e29d3fa49a2e1aee52dd6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-arm64.zip\",\n              \"hash\": \"39e98f4c8be7d4436079c783e3f5ad8812de533aa7756ca5d3c37d8362802e477170115df26ff80c61398cb21e3204be37eba7979a5a3cd4163cef6ed0555d61\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-x64.exe\",\n              \"hash\": \"a0f2d81ae353eb8af4592300f2b8a58c8e442f17244d76dff8f4d0bd7b7ccc845b1a74925bf000a1375ba9905601fa480e4e3ccd719448513ab09ee88894f7d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-x64.zip\",\n              \"hash\": \"73b5e17fa86965d720cb73d39a97975dd7f5f26190606567b373c19642e92ebd1a85c3fa5306bb9fc6d510abc2dcd9d070b0e22f551e414136c9e2de2bcfc92a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-x86.exe\",\n              \"hash\": \"5c9852299acf5bc688f903a5a2ec73a12199cdadacae384d13c337f21431fcf57143d2ab9e8ad930126ef9f84a19748bdf9cabc06ff66c63231247edfb46c28a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.405/dotnet-sdk-5.0.405-win-x86.zip\",\n              \"hash\": \"15ef053fb824584db3dab95ea51d2008808c4c425e7e67af77c9ce97470c500b070afd581f4668ff4dd127565dad2dae49c25195d8dcf27d862f2ce4b8751ed1\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.211\",\n          \"version-display\": \"5.0.211\",\n          \"runtime-version\": \"5.0.14\",\n          \"vs-version\": \"16.9.17\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-linux-arm.tar.gz\",\n              \"hash\": \"909fd8b76e3e2a7673717b375942863ea1dc88a11fa120f5e7313369addfab8305eb449d6768a87d994b5e30a4348d74def3832c6d04d26c0cee1e2364cc95d7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-linux-arm64.tar.gz\",\n              \"hash\": \"4261bf7325eab90b9c1470e5e7e142a088c681d60071ce5786d94668511bb4e422737372eb650e7f52e9ba318bf7a45a86818c59250ac7c4660c22e76003ef29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-linux-musl-arm.tar.gz\",\n              \"hash\": \"71518da22067b741a72c0d88c7254be29691b4eebbe8aee293e354319f6dce30588a9ead2572832a363a495655336eac7121942481a3089d1002f1df1d22f587\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-linux-musl-arm64.tar.gz\",\n              \"hash\": \"6d6a9459b1f7578b8ab889b16010408f025672bbfe0d1d6930faeafee6a8e8cf350ea119211b73079cd1754884488e02f4ed54893de06fd2dfe9b1625e2e8b2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-linux-musl-x64.tar.gz\",\n              \"hash\": \"fa11ced281b85bf38ea63462f7296a8acd198a19979551c4966044a6e7380d42b183856f4492952af0a1b47426a8c35ade91cf87e3ce2a8ba848a12c0bc26812\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-linux-x64.tar.gz\",\n              \"hash\": \"ad73a3bc0c0aed37168194e94c0e09e1664a3693d09b270a4792e79bea0f2b46727113dd23558849e94fe817ab5abd6f430afdb9710cd21d9885aa1474c43084\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-linux-x64.zip\",\n              \"hash\": \"f1f94efd68e9b04cd68ea4bf4526fc7972a9b666554c14b50456a873b574af1f5d8c658fc938893a10067bcaa16956b9cc2d22d161688763b4ca3869036e3c7b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-osx-x64.pkg\",\n              \"hash\": \"12e5290a108bf4843c0e059d1c2cb614205ddebb249f27d7b15cd2a1c232ea61d0f44d5af6e90dae32540cbfb77a4e2296fd31ffccf6bf1f02a92b8836334e9e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-osx-x64.tar.gz\",\n              \"hash\": \"4032772469fb4fcf0babf241e210dbd1b36503203f2d7f27635cd4415b79a3e83637f240d2a9fb1d24ef6872a27870bdff7672e355359f0b1316a7543d94af55\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-win-arm64.exe\",\n              \"hash\": \"9914617686b64399657b141a1d4000f6476deb6c2334df7a8ee46536a2260626c2e96d2daf6986a29fc74d907a01fd9ce0d4ccb3dee0a1f5ca79ac74d6a3504e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-win-arm64.zip\",\n              \"hash\": \"2c90db0ff799fa101a0711efde95f9758aef9a5d6b135c1045a7d16a7b908b3f8fd9344abd36c5d29d033566a8d21be25aa9957a629954c54fa466289bf3db6f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-win-x64.exe\",\n              \"hash\": \"892ee62667c2154b5d745ebd9b6b99ce2b7b7b3aa3d7af7655107b257166be6e1ba61f65fd0e944a40493fb82b370dbcc837dbe1dd06b4b44467d394569a9909\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-win-x64.zip\",\n              \"hash\": \"6cbed9e26bb610be9c348ccc7e21e70adf059e768af9f72a159fb343dfc4e1055c7ed4da56d6e856e03a038631b37177e7d58ae02f8da633122a79313f3118ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-win-x86.exe\",\n              \"hash\": \"169a6ff243ff5814d4e343f6bf88210c90b687e717856865a698dad736e77f9d221ed2833cb5f9c2571b56a4c7f6a46194caefbc323cbcb928a127f0f95c5332\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.211/dotnet-sdk-5.0.211-win-x86.zip\",\n              \"hash\": \"cee105fdd3bec786159a39a8e08f90c5a05ff97e0a8d003c4d73245170467cc09ee041719978886c328338949665b328829cd5a19e9bd2ced735f29a82203660\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.14\",\n        \"version-display\": \"5.0.14\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.22014.14\"\n        ],\n        \"vs-version\": \"17.0.6, 16.11.10, 16.9.17\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-linux-arm.tar.gz\",\n            \"hash\": \"e6ca71e905d96d0812ad980429dde96d5363e5f5cd7bfb32990719d9bfb82f1517c404adf55f719c01703377b5db8e3252967969127a023f0761e3b72a564b5f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-linux-arm64.tar.gz\",\n            \"hash\": \"a7f2e3525226d87ecd52c7ee0e702523cd148c7d619d4d3ffab3d4b14bcfa94909016008791aee9b2d6c84adc25d22acefa2a1a6fb7ac60ef0951ff4aa018a66\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"353f6e4f29a9f1cd3b2e124494fdd17eefff27298bbd30db52789e39d9609a23cde850eed4f514ebc1dfa9c28524a6d9dccf64fe1500979c35ef1a60f39735e2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7be064ecc76dbb2c39b8821c6525d7726424ed5ebff9dc2352b13720bac4617511164e4308d0d6292748d77de03df7dc3f8e573de4f740ceb47c3fd8868a7319\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"fbde931a95063b3ca2bb264af8c3b19ef85ea4f5e2e09b6669a39f3c08c4eba43a89dd2c64bc9f4ffb49d41f678c6654d1b5c1dcc35430091773983f8bd97473\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-linux-x64.tar.gz\",\n            \"hash\": \"5f12f290e7800da808a2bd7deb654f56dfc0d9ed0f6a7f7f065a8f4816f3d334e145f909f016745d9d9c30438c0f69fe4e11c2fce253228a8cdf609c97d26eb6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-osx-x64.tar.gz\",\n            \"hash\": \"3d2953aac5c49e99d11aa870358864287344a88b70e17e4ec678843cdafc5e02786b81587fb67f7ea7280825e3c005926e3ff4fc1e4017651cd272ef987ef272\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-win-arm64.zip\",\n            \"hash\": \"9eac38a7a366b9c9246d79eedc4cb4fa15dca01c3860058b978d4045bfa67c70c44b7cc53bdef68c1b2674fc7d6f909db137370289c8e432ce531e82a6282976\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-win-x64.exe\",\n            \"hash\": \"98c68dd411b4157cf07d78edb79131edd647fa2c897a140e6cf362ab83c8624979e69732b86663476333d31fe2c5c9a02af73aa1edf3ff9782c0f3c01417a098\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-win-x64.zip\",\n            \"hash\": \"ec64366954b2f2a03080c88c7ddd0480e60f4083182df4d2b5ab7e5555d70af949acd9cc9aa4f150ae6da38fc0b0f1d5b38365d97a593cbf7cb156906c1eae26\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-win-x86.exe\",\n            \"hash\": \"7db7d1015d4ff83a956eb01e5a271db2f9d8128c199b91b91099eec5800cb3ddb027a4ae24d233774de50ed96bc93239135f892f5e77a52a344e29b82f2064c1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/aspnetcore-runtime-5.0.14-win-x86.zip\",\n            \"hash\": \"62b914fe0d66288e14a3b9cd7e80ebf53fe52a18cd6f5546e0fbe22dfbd8de41f78739bc5b60b667585fc2d2de9f690e787e5c470961b453faa8f105e55a38de\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.14/dotnet-hosting-5.0.14-win.exe\",\n            \"hash\": \"9af148ffb81cacab298798772f11882e9f107d7c40fbcd39e23311cb24541e951cc5640fed2e69e8e5eab3db126f5bf6011fec2b359c42982dda6e188fee6d92\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.14\",\n        \"version-display\": \"5.0.14\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.14/windowsdesktop-runtime-5.0.14-win-arm64.exe\",\n            \"hash\": \"a387c4e7cb75dbd156cae8b460711da6c50618a8a1086f617e1da500021712cb0da698d067d038fcf23a5466ccf0e77ebff7c15aa199e39a3ac0311589af44a5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.14/windowsdesktop-runtime-5.0.14-win-x64.exe\",\n            \"hash\": \"8a9f6e4d6e0ff7a6d5cac4bad1af2dc5421de39cbfeb5f88afe764aca5fe77be2102dc0a78806f9cb30f2b1b9e3b5418e6d68c2a8ca4ed52819a5a1d70cd442d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.14/windowsdesktop-runtime-5.0.14-win-x86.exe\",\n            \"hash\": \"871b7884c66cef3a5a4567509f4c85c08729283016f43eae800cd15e425b5d7ce45139d1b4a1f2f16e2467ec65d4eb4d941afdbf2eeec6845512dff7d8db06bf\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-12-14\",\n      \"release-version\": \"5.0.13\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-43877\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43877\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.13/5.0.13.md\",\n      \"runtime\": {\n        \"version\": \"5.0.13\",\n        \"version-display\": \"5.0.13\",\n        \"vs-version\": \"16.9.14, 16.11.8\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-linux-arm.tar.gz\",\n            \"hash\": \"3d0a10b51e89d5716ab284e499e0927835d7944d7a4c15a9294679a8c4af3ca99f51cad25c0d19fa4a91b8b76a832a9bb81afb67bcdc2385730b061d135644f6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-linux-arm64.tar.gz\",\n            \"hash\": \"428adbb6cd564b919333cf18b7245784b6a2e93740e31fb85c4344690519eb88038b220621f199ba2524eef0f4d0fd2e17bbea0851de0d0ec7dec4c092311d10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"1cd50bb756d17251f277005e3824cab36b3b6c3c5e62383fc05fbca4d0e346cd9ec7e93a528f413f47a11dc5c64a6d0689bc99fc1a25377fa79875023c93d03d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bc44e529db137a4df4f244de92bf6ff773be24ef1611a2648ed9119784fd77a202f64be21a269ddb2521c54797c217211271620fb7bf0ab62b51715ca1342371\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"86132e578da8f4a964ce10e9cf63e3acc982bdd3822d89225a938b915c441992e023803547f8bb852c70ea61b7a76e65733f64ae3e171bdd290d73f2705a0b71\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-linux-x64.tar.gz\",\n            \"hash\": \"32f574369975606da5e67ca7f8e709e73b67a98fa1a175f49c979f582be658132375663e6ad944a3a89d1186322a7a04cead043cf1d4526fdb7ff195ead6f317\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-osx-x64.pkg\",\n            \"hash\": \"66863a1741f9da807eb8cdec04fc71619cd63d0f7bd80357cbbc48a82b454a464bfe9b9078ba2b7f86b36aafdd82e4528ff0a6f504429d42844608488b3a619b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-osx-x64.tar.gz\",\n            \"hash\": \"4fbc6ccfb1532ea6545f3679fe7f4fd188c674a83772125d7ed2fa8b868b72e250c20529f8219e5cff7e4480a8b4df6fbf5f3607ef965c931da7a92391b2bb71\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-win-arm64.exe\",\n            \"hash\": \"5d97c5d4b53c56d2cdda4d832a16c4e0073e389b9416a1b2a692fe1929fe9b9e1e95814f98fec4e5ebae7c86f631ed7e2c2308aa3ced14e8aa65d56cadd72997\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-win-arm64.zip\",\n            \"hash\": \"ead18689c30471b35fbe673f759ff0ff63bfac126efeef3d33adb3b665e62c2b7017704d6af221a8ba1a0b1ae3190e7d312a604b5b6ff976e90b0152a2b4bce6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-win-x64.exe\",\n            \"hash\": \"0a0c6b6069307ba3c39dd6bc3998b1ed25e25c792eef9a4e07cab27bf918d5a66130b2cad5b55ae6f525eb5252707670a509dd5d719b790b432bb7aafe51aecf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-win-x64.zip\",\n            \"hash\": \"53dc994202801aca3b6f23b6489a10803224325ab723ecd47f560296f08e33813474708701115418c8b34239b53868a5a0e87fc3dccf86f4483598de98ea8981\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-win-x86.exe\",\n            \"hash\": \"c270d3d19cb91a4f0178a3698a7d46cda66242e7b0ab81de9063e556435bad072034e18af8a04e7ca9c638c7dc512a75fd102cd1b1208fbbf1f3498fe0ed04df\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.13/dotnet-runtime-5.0.13-win-x86.zip\",\n            \"hash\": \"14031244a1d673daff5a7d370a6cdf6f6454eef9b01320a16aa92216771a6e60c37878738a19b0bbf1cdb34831ad66237504582bb636bf9c1915c4a2072fff9c\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.404\",\n        \"version-display\": \"5.0.404\",\n        \"runtime-version\": \"5.0.13\",\n        \"vs-version\": \"16.11.8\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-arm.tar.gz\",\n            \"hash\": \"39e56d5966edfbb8e4e343c3bc97f71e809713f61d12afb0a6901a1dff6e29df8de0288c99246c638bb76582cd9523b529dacd981c37c2365e4d724738950851\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-arm64.tar.gz\",\n            \"hash\": \"d35abcfacb3da88eed82f9f7a0a9d3f8680d4c85839c8b348c247ddc9b3b99e7a3417d406976e3ac91d8d4bd31e0efb685ebaf4c33bb59586d00cdc731b59893\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-musl-arm.tar.gz\",\n            \"hash\": \"f9e52a3d80459807b1519d6eb787e2ea4a7c67f47fe2289d29622f055dc9c0b5eb261a4be31abebe851d939f4df18d7c8680d5c2dbc4af6437fdf11b3748c0d7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b07bac13180d6053e2199e020baed657d288a45fc1a9a171685432432c13271bbcd8a10cdf4b4fc56810062a1daf94d90033d153c685487002029e7f0282d698\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-musl-x64.tar.gz\",\n            \"hash\": \"f165e381f9496af0368573db7f4559041c53c0a00cf6c1a9fb104ca62b4f079014c26b2d4787d206ae6594f3969a24f90d90f81c876c8b5ded4122b651d95587\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-x64.tar.gz\",\n            \"hash\": \"6f9b83b2b661ce3b033a04d4c50ff3a435efa288de1a48f58be1150e64c5dd9d6bd2a4bf40f697dcd7d64ffaac24f14cc4a874e738544c5d0e8113c474fd2ee0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-x64.zip\",\n            \"hash\": \"295948aa817c924df8f8d4ad36c1fb7140618e49d29f65a10e005330c35170d9172032269918a75a18cb72fe4ef9fb71235f5569affe0793e77085fa5e86d8b4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-osx-x64.pkg\",\n            \"hash\": \"3ba0eddb48e9b6cc524a032c76f2b0324a52ca710bb3a477572882b4de4eebd477a58e4d05b28734f34c7a99611b4b3f574753d0950e327192bd5c1aa2e2a499\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-osx-x64.tar.gz\",\n            \"hash\": \"fa1c4686e491f6ba2b37c5497453a4955bafceb28e097c3d95175a78d6381201972e8231e315de0126480cb8917b784784125316ffbfe1470a62238211bb255b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-arm64.exe\",\n            \"hash\": \"c063205363e21ec6e9b0621933e3f3a9e43c9efbbd610aff6e819f800390a68c01c18b8c99e254d48c152db8d221a5f7fbdd69bd7dca478cd234df4200db7b6b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-arm64.zip\",\n            \"hash\": \"398cad80d2d98a2b0a8e2a97d9bfa3df87fabe115fe54936503dcf0395bedc19f7fed5ef6e3a7274aa0beb304d7bf524ce3369a02d47d790986229576ad50f0a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-x64.exe\",\n            \"hash\": \"a2bdf552bb09a1f8315e383ca7d65b876c505de3c94dba4c5f530eddd7f03370bddd0832ef7f3cb876bb31b90cbeb8dc770ca1ce0a3a0cdf6c7bed48b30a7065\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-x64.zip\",\n            \"hash\": \"a6d254a46e93a41bf41df34c941503cfc5f61af20ffc0abc571bbaf238fd66f0fcc879e7181e1e1af788e96912b31012e817bf1202e55b8f27c17352f3f5528d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-x86.exe\",\n            \"hash\": \"0e9f9b4a7d759349625311cd2eb64cd61d84a384f3c2e966ff4e5fd65a00bca9d5b964cc43ef5aa8bc8a75182a39f60656681a5fc3015ffff90863a621fb5c01\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-x86.zip\",\n            \"hash\": \"ede2c8cdb8a5d164f1f5095867195abe09ddf369be50a1a32aa6d1aa97746073f0388f8b7ac2ac3234ecda24af8bed6fdc2df3106090908b70b0c53d90ba729b\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.404\",\n          \"version-display\": \"5.0.404\",\n          \"runtime-version\": \"5.0.13\",\n          \"vs-version\": \"16.11.8\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-arm.tar.gz\",\n              \"hash\": \"39e56d5966edfbb8e4e343c3bc97f71e809713f61d12afb0a6901a1dff6e29df8de0288c99246c638bb76582cd9523b529dacd981c37c2365e4d724738950851\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-arm64.tar.gz\",\n              \"hash\": \"d35abcfacb3da88eed82f9f7a0a9d3f8680d4c85839c8b348c247ddc9b3b99e7a3417d406976e3ac91d8d4bd31e0efb685ebaf4c33bb59586d00cdc731b59893\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-musl-arm.tar.gz\",\n              \"hash\": \"f9e52a3d80459807b1519d6eb787e2ea4a7c67f47fe2289d29622f055dc9c0b5eb261a4be31abebe851d939f4df18d7c8680d5c2dbc4af6437fdf11b3748c0d7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b07bac13180d6053e2199e020baed657d288a45fc1a9a171685432432c13271bbcd8a10cdf4b4fc56810062a1daf94d90033d153c685487002029e7f0282d698\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-musl-x64.tar.gz\",\n              \"hash\": \"f165e381f9496af0368573db7f4559041c53c0a00cf6c1a9fb104ca62b4f079014c26b2d4787d206ae6594f3969a24f90d90f81c876c8b5ded4122b651d95587\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-x64.tar.gz\",\n              \"hash\": \"6f9b83b2b661ce3b033a04d4c50ff3a435efa288de1a48f58be1150e64c5dd9d6bd2a4bf40f697dcd7d64ffaac24f14cc4a874e738544c5d0e8113c474fd2ee0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-linux-x64.zip\",\n              \"hash\": \"295948aa817c924df8f8d4ad36c1fb7140618e49d29f65a10e005330c35170d9172032269918a75a18cb72fe4ef9fb71235f5569affe0793e77085fa5e86d8b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-osx-x64.pkg\",\n              \"hash\": \"3ba0eddb48e9b6cc524a032c76f2b0324a52ca710bb3a477572882b4de4eebd477a58e4d05b28734f34c7a99611b4b3f574753d0950e327192bd5c1aa2e2a499\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-osx-x64.tar.gz\",\n              \"hash\": \"fa1c4686e491f6ba2b37c5497453a4955bafceb28e097c3d95175a78d6381201972e8231e315de0126480cb8917b784784125316ffbfe1470a62238211bb255b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-arm64.exe\",\n              \"hash\": \"c063205363e21ec6e9b0621933e3f3a9e43c9efbbd610aff6e819f800390a68c01c18b8c99e254d48c152db8d221a5f7fbdd69bd7dca478cd234df4200db7b6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-arm64.zip\",\n              \"hash\": \"398cad80d2d98a2b0a8e2a97d9bfa3df87fabe115fe54936503dcf0395bedc19f7fed5ef6e3a7274aa0beb304d7bf524ce3369a02d47d790986229576ad50f0a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-x64.exe\",\n              \"hash\": \"a2bdf552bb09a1f8315e383ca7d65b876c505de3c94dba4c5f530eddd7f03370bddd0832ef7f3cb876bb31b90cbeb8dc770ca1ce0a3a0cdf6c7bed48b30a7065\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-x64.zip\",\n              \"hash\": \"a6d254a46e93a41bf41df34c941503cfc5f61af20ffc0abc571bbaf238fd66f0fcc879e7181e1e1af788e96912b31012e817bf1202e55b8f27c17352f3f5528d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-x86.exe\",\n              \"hash\": \"0e9f9b4a7d759349625311cd2eb64cd61d84a384f3c2e966ff4e5fd65a00bca9d5b964cc43ef5aa8bc8a75182a39f60656681a5fc3015ffff90863a621fb5c01\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.404/dotnet-sdk-5.0.404-win-x86.zip\",\n              \"hash\": \"ede2c8cdb8a5d164f1f5095867195abe09ddf369be50a1a32aa6d1aa97746073f0388f8b7ac2ac3234ecda24af8bed6fdc2df3106090908b70b0c53d90ba729b\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.210\",\n          \"version-display\": \"5.0.210\",\n          \"runtime-version\": \"5.0.13\",\n          \"vs-version\": \"16.9.14\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-linux-arm.tar.gz\",\n              \"hash\": \"a637e2a759ef6d8cfa5406f2aca4fb67c23e82e28b1d692b0c5f363fc9339f022bcffd990a94d473f6b1233b60caf07792f8f0bf9a3e4b7ec7b6400fe2c501e9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-linux-arm64.tar.gz\",\n              \"hash\": \"b15ec2d3fc68c2704d2418e7cff7ba75237205509b16c07d7fe4ee512949a913268713d6ca895f9b40335df92f0c3d17f0055eaa7f390ab790d8227e9d439553\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-linux-musl-arm.tar.gz\",\n              \"hash\": \"967b0d0738fb36da78ff48a7956ce99abb7bd75cea5a43f979355566ce36d4ca98a0842b60a9394fb56790baa73c2d62506dd0f75ed7c93c52029bd835ce8369\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-linux-musl-arm64.tar.gz\",\n              \"hash\": \"89c652903ceae5374f298411f4211703f9a401c7475bb5a3e4598ffb80bf7eafa549475007e6d5816cd5213f0630c51f2eabfce2adc6d07debbf8d36fa51454c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-linux-musl-x64.tar.gz\",\n              \"hash\": \"42b91267a2f0c38c8e3b8ef5c3932ae89371c1b47fde86a9a098c826666cf5fe10805fe6879ffdba0c17d78ff6bae4e894718476db847ad6adda53060cd3c020\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-linux-x64.tar.gz\",\n              \"hash\": \"6f201dc0e0756ab82520ee7578478c82d56f96e8192e1e3c76bfb4276c8263d1ed64a85ba04aec2cab7c391ae3f55be83ee96e74267c243400166559c34aa115\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-linux-x64.zip\",\n              \"hash\": \"19598d3e3009bf6ef351b98563b8723693708bd2d48fea499590fa41d2a7e8ffa4dfefb70e6129aec62fc5241bbc45b11c75ede354b8e9fff0d74639f9d88b0a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-osx-x64.pkg\",\n              \"hash\": \"4173fb52fffd5c0dd7871e5dea3a281aa7f012c4f75d2c2d8b2fbbd566bac1270914d117ee0fdb49bf991055a4bfc5990aadc2020fabcc7ae092c76bf8419eb9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-osx-x64.tar.gz\",\n              \"hash\": \"36193fa95ae7fa6bc537ecca044fc641e854d2511cad893b7c180077c542fdb6aa289cecbd6803b18fb513f1dc60bc57896a409bbac2cd779cfff553723bbff2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-win-arm64.exe\",\n              \"hash\": \"bc1f893eecea3a225f88c708cdb67a3f2d6ac03e86433682e40c4d01fdc35cc3eaf7b4383f701ff86db26c57c79e24479633b7b7f4b8b99f8d794f08c57b1aeb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-win-arm64.zip\",\n              \"hash\": \"58b5b24f25134b1ea4c659253ec37823b38a2362550adc151f14dfc602702eb22764d43016649a09e548fe79a819b378bcc32dc35ca64edcfc206668e35c009b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-win-x64.exe\",\n              \"hash\": \"abf4f5c94061fa4ce329287609de863e685fa69d880d9b2028c2c77773dfd8d06dbb537545451e36fabbfd4bc820756820cf59ccc8f92ceb6f02d852859279be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-win-x64.zip\",\n              \"hash\": \"b7a2627868e661e1047e148131f5e55f2929ae22ea85b56c7fb53e0bc8ae8b2ed99bec5c9563a0876c361a8086499f02180ef11c4f018e3a99d7bf6f85945f3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-win-x86.exe\",\n              \"hash\": \"35ea226dc54fa148a078c0862d0c9b0dd3f021f6077a01d22f9de65244a7c7b1bc078102e442faca8bcb607bf3e5153e476e27d5a45a5366d943dc1edf474750\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.210/dotnet-sdk-5.0.210-win-x86.zip\",\n              \"hash\": \"fee268210e5aca18df2285fc68e0944a0ef0a76a3ab198a82cc4fee4d60d63b0b48ce9eaed1cf0c70aef6b5c40316444524f64002358cc886da1da7552dd7dbb\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.13\",\n        \"version-display\": \"5.0.13\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21326.13\"\n        ],\n        \"vs-version\": \"16.9.14, 16.11.8\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-linux-arm.tar.gz\",\n            \"hash\": \"4b92e7a686c852149e228c777f899d2426d81691b2cbc0a2a8708b9c8ab5b504dd544c1c291c848339c7c59d139d9e91e8914059326b0e84e662bcf32d3fb472\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-linux-arm64.tar.gz\",\n            \"hash\": \"757ccf8a453d8cc9075a438d02bf95bb6d3738651100de8d4ae842a97dc10d8d7507597ec9d2806a3140d8000faec602748b4585b0a644816c74ebbf7ab98719\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"f081b9f59119508d21e5dff3e6adc7f69f037620b90614b8ac71fc6c7fa7293d6092a727789d6f6fc26b54c7dc543d427ee044d7b1909c0d13c3d3fe495609a4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2c45e5b4c6d4cbaaf95e616ee04662ec87f4fcc81d5710cb94063447fb2b3de1a120beea6c6e2784a83a6d2703f2ad2a3c3cad7dfdb28bde1f7d3761d3216e89\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"0ea8a945bb1b663b8bf65708d6cfd6411aaf6ac8cc2ade34dfda160c331230694620b8b0abf80c4266fc9a2444300bf9b58906e40c30e7aff7a27291240ca583\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-linux-x64.tar.gz\",\n            \"hash\": \"d3014d473b3bef0a9645908c768f1c458c53ebfd3ed6f2fd259b2921a6d7401f3c0403e99c0d80a6457ecc229dcf828a4031e17868538d831ae1394bb8aa0ad4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-osx-x64.tar.gz\",\n            \"hash\": \"9514eb76eebbfe00528bb1cc009647c34c75e38ae10f389a3a5e6b58ede625c0fbf6ec7e9fa2be0452910da467aab1936a76d906518833b77fc6f92eb545faf7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-win-arm64.zip\",\n            \"hash\": \"8b20dad41b0a6f2a603cedac1d5d95c9f2aae1b6f0397cd5f42204a3a1853efffb7fb2cde4c99085c63d85a437cfbce00aa3ccadd1a241ed6743d9509e792e02\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-win-x64.exe\",\n            \"hash\": \"e2bdd39a828cfe6246b72e8a4a45b63ae9a6c1e40e71ec3afbc3428525fa99b3e81f618f8f973093192c79f281d6bbde0a04466fbc5f81f95db7632b4aa2f56b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-win-x64.zip\",\n            \"hash\": \"480baa6a03e1b6a2d25afdd8da9cb0387a9be91a0d7c4ddda6cd7725a6d5805dcb35b65cd872871140da3442efae1ae53a0bf7b39c133049082ee6a3dffe627d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-win-x86.exe\",\n            \"hash\": \"59c5aa1d8b6124483e518bd67cd46ba54b3bfe4818b9a4d93bfb1d8a25907d3ab987b6f6d5e5b65b70aa931449bb97b3d3b3702bb1b7c0bd6b2cd41f55050bad\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/aspnetcore-runtime-5.0.13-win-x86.zip\",\n            \"hash\": \"e3a9132a5d05e47f2d1c59a7fc7c879aa39ba183900f770bd402c6b91c45c2e6315553cbd8050fe6d9feb400e5da1c0f52f753a28e95225977921c2c06bc5d4d\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.13/dotnet-hosting-5.0.13-win.exe\",\n            \"hash\": \"53bafd8ecb57210fbd84046e4aab9f14e739b25e05b8a61f52e4ed646d792e15db2e2c31985594a2fed9cda85c0cac27dcd3f286ca1e54ad512b2fc3c07693f9\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.13\",\n        \"version-display\": \"5.0.13\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.13/windowsdesktop-runtime-5.0.13-win-arm64.exe\",\n            \"hash\": \"07f56996940de408851c34f1f0fb5f8387c07c3265d2f90bc91f2ed2fb46ea36a1459c5421a1006c73f983685e045f735076b31acaa91dc9d9ee8300f33d4d47\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.13/windowsdesktop-runtime-5.0.13-win-x64.exe\",\n            \"hash\": \"0a6ede4133e52fce974a97690024f7a2188fef9330d87d07b2e1a4a2c44bb4ee309e2302ba685214b4f3cd5dc0276b786dee14bd1615d6f3e3622299ec13cbf6\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.13/windowsdesktop-runtime-5.0.13-win-x86.exe\",\n            \"hash\": \"a38ecb193722f709a8aa39ca8135e3b37a2c0080c67a4617284b0093bb403f55213208d1d448a45fb161c7da2064afc7a19c723f7c6eadda3baa024dea8413bd\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-11-08\",\n      \"release-version\": \"5.0.12\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.12/5.0.12.md\",\n      \"runtime\": {\n        \"version\": \"5.0.12\",\n        \"version-display\": \"5.0.12\",\n        \"vs-version\": \"16.9.13, 16.11.6\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-linux-arm.tar.gz\",\n            \"hash\": \"333d96c05e5c242407cc6ef9c003d796a61694980747b03266502d593d3e1c66d5e6147bfb41796df76ff0144617ee33c56afba740dd3eb4ea090a742b1c73d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-linux-arm64.tar.gz\",\n            \"hash\": \"a8089fad8d21a4b582aa6c3d7162d56a21fee697fd400f050a772f67c2ace5e4196d1c4261d3e861d6dc2e5439666f112c406104d6271e5ab60cda80ef2ffc64\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"ae831066550aa4fd3396177188e5c5e20b9144ad1e7fcf5ac5a185e74e7e3087992f7ad061810fe1a7c4eb6fe032e184e7770444eb2233ba89956046c963cd1d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"34b9117ca195968dfe4f648079f82bb97b6111c8f62f968176834ba886b474dcaa9e46679b0db3661b393842ec29c1626d5055028d016e390164b0588fe7f149\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"ce33b8b5ccb35ac636e37777a084881bf66ba67c32febc06c4829e37f86512eece0e6a689ce3184e0a70b23e0cf43110facfa39931a13e9e44899c1c5e296fe5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-linux-x64.tar.gz\",\n            \"hash\": \"32b5f86db3b1d4c21e3cf616d22f0e4a7374385dac0cf03cdebf3520dcf846460d9677ec1829a180920740a0237d64f6eaa2421d036a67f4fe9fb15d4f6b1db9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-osx-x64.pkg\",\n            \"hash\": \"93fe60362fee0e1d3e1685d16a12cc050bd7e5ff51944a2bb970782bf9b90356e5d18eb9ad107150ca05dcadf2495ebb45c1d34a5ce933ce110acb60db509f31\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-osx-x64.tar.gz\",\n            \"hash\": \"a3160eaec15d0e2b62a4a2cdbb6663ef2e817fd26a3a3b8b3d75c5e3538b2947ff66eaddafb39cc297b9f087794d5fbd5a0e097ec8522ab6fea562f230055264\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-win-arm64.exe\",\n            \"hash\": \"0fdbee88285da33bb3f38482d368a9128d2f9d0b8cf2f13c05696f5135c2520f08a95834e36a203da86d75d588bc63167c9d274095cac321d6c28a2f3f14d24c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-win-arm64.zip\",\n            \"hash\": \"f610e5cf07bf1e1ef71d5c995b5ca993c4b897976b37fd9af4efb8c00b4ae9abbfc67692177ea8d617e1fc9b44855325b9d8a98b95519108bca2fef2cdc0a2fc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-win-x64.exe\",\n            \"hash\": \"428d8a01666045b9b2d802fccdc6552a6d2eb575224cffa40c52ab854dfb9868309c5600127835cd10cfb6f8a36bcbd8a90eb94bd36794afa64ca2eb979c2b09\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-win-x64.zip\",\n            \"hash\": \"636f22bfbfd98c80c96f2fc3815beb42ee2699cf2a410eeba24ddcc9304bc39594260eca4061b012d4b02b9c4592fa6927343077df053343a9c344a9289658e1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-win-x86.exe\",\n            \"hash\": \"05926b28668c7d681934eea1f5331c401a87fc34ec6ae2002feb4e1a80aa1f03dddaf850567e53823ad8b159320658a92a02abae76a5580595cee9d7e24d4740\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.12/dotnet-runtime-5.0.12-win-x86.zip\",\n            \"hash\": \"405e725c746d6b2499970abd8bddfdeb14f49f572cae167cf552378500782b82d819ca9ea8a6cbae7aca5c4e77dd1bfa061966a970671692500e2bf0aaf02c70\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.403\",\n        \"version-display\": \"5.0.403\",\n        \"runtime-version\": \"5.0.12\",\n        \"vs-version\": \"16.11.6\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-arm.tar.gz\",\n            \"hash\": \"1b7b4a8aea62a7fd1e1919710b2b35b41ae31a64f79b4cc056a3e5f4778bb6cc0b92999321e1632f29a1eb88d734e44fc42eea52ddfb8aa0424cafd9796a503c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-arm64.tar.gz\",\n            \"hash\": \"6cc705fe45c0d8df6a493eb2923539ef5b62d048d5218859bf3af06fb3934c9c716c16f98ee1a28c818d77adff8430bf39a2ae54a59a1468b704b4ba192234ac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-musl-arm.tar.gz\",\n            \"hash\": \"2ad841acdf3e109b52b681c2b29fa387cc126fd69ae030943e5b4ef524b64b099be876f4b8838b3e366b4dd08c4b7df16afb30a33cadb2b3a6bf06a3d990d9df\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b5b12d827b745b63d712bf61a07577fe8c70ccfa19e0c5119101c7cf73e0b4fed36a6e94fc03951c9353f4e115f7b5142ff0f552d0b263a0c34b9213ff069c12\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-musl-x64.tar.gz\",\n            \"hash\": \"464eccae0e296cff3728bcf7e0dad98058d15c4972a5be71906355174918ed49e78ef28e7b24af3227b09a3fae05e86022499fd126131be6a008a86b1dbf16f3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-x64.tar.gz\",\n            \"hash\": \"7ba5f7f898dba64ea7027dc66184d60ac5ac35fabe750bd509711628442e098413878789fad5766be163fd2867cf22ef482a951e187cf629bbc6f54dd9293a4a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-x64.zip\",\n            \"hash\": \"d323093772a5e2824bd90f656b48f525464b56183999ecf26632eaeb300b9df94e5a2ce057b3faf2e73579861f4c74f9edf50f2f87d4a9d028e14a49d60aa770\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-osx-x64.pkg\",\n            \"hash\": \"2bdc783066ea09fca4ac47f4a28f728ce9b0cebfa9546304ddec92471761f0cfd7d789367008d49adec66ea9e080f276145d6abaf282ba94fcd033db0f48f1ad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-osx-x64.tar.gz\",\n            \"hash\": \"70beea069db182cca211cf04d7a80f3d6a3987d76cbd2bb60590ee76b93a4041b1b86ad91057cddbbaddd501c72327c1bc0a5fec630f38063f84bd60ba2b4792\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-arm64.exe\",\n            \"hash\": \"eb23ddb4c4f53d7f139deb6767118fd90f3013b22cb41c3450c28a5508cfa7b22d628fae3a16290144b64c0d0083286979e50a039955c94efc81f2d1a12d682f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-arm64.zip\",\n            \"hash\": \"74c6a28eef6cfb54e100fdcf617ff831d2305848729feef404e1c043b580a8fc73a1788b091a90443be1a6d11dfe678ce3fb49a5247b275c4141733dc5b19eab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-x64.exe\",\n            \"hash\": \"761feebbc9a2d762f5451b1abb8a305a33352a6a902a6dcc7ca15b9cb888fb63c83d31b312375ee13304c8f0b39b9793393bba8c1d37e8fd3dc4a0a3809fafef\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-x64.zip\",\n            \"hash\": \"4dae65d935d9a9cd022a38537f7678786517b82845dd010075fa2a1346d549cae80a1087f09668284e4aabc080673fe19b1607127e7ba29d0c40f037049eb101\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-x86.exe\",\n            \"hash\": \"e7c62522857bfcdd32b6b372f460c5cfc04e499df38e0d5bd1b0e50f61406bb6be3cc6275f12ad777479e50b91ba7a78746f5e4c7f1db06e35eeabb0c9b52642\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-x86.zip\",\n            \"hash\": \"32b78ce9615be079411507c46884479cfc5a8f3b8b95ab9a7753325249de020366686cb86259e3a6e468bd5d4d46e8aef3c5ad2e34d2194329e33e777ec4f263\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.403\",\n          \"version-display\": \"5.0.403\",\n          \"runtime-version\": \"5.0.12\",\n          \"vs-version\": \"16.11.6\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-arm.tar.gz\",\n              \"hash\": \"1b7b4a8aea62a7fd1e1919710b2b35b41ae31a64f79b4cc056a3e5f4778bb6cc0b92999321e1632f29a1eb88d734e44fc42eea52ddfb8aa0424cafd9796a503c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-arm64.tar.gz\",\n              \"hash\": \"6cc705fe45c0d8df6a493eb2923539ef5b62d048d5218859bf3af06fb3934c9c716c16f98ee1a28c818d77adff8430bf39a2ae54a59a1468b704b4ba192234ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-musl-arm.tar.gz\",\n              \"hash\": \"2ad841acdf3e109b52b681c2b29fa387cc126fd69ae030943e5b4ef524b64b099be876f4b8838b3e366b4dd08c4b7df16afb30a33cadb2b3a6bf06a3d990d9df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b5b12d827b745b63d712bf61a07577fe8c70ccfa19e0c5119101c7cf73e0b4fed36a6e94fc03951c9353f4e115f7b5142ff0f552d0b263a0c34b9213ff069c12\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-musl-x64.tar.gz\",\n              \"hash\": \"464eccae0e296cff3728bcf7e0dad98058d15c4972a5be71906355174918ed49e78ef28e7b24af3227b09a3fae05e86022499fd126131be6a008a86b1dbf16f3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-x64.tar.gz\",\n              \"hash\": \"7ba5f7f898dba64ea7027dc66184d60ac5ac35fabe750bd509711628442e098413878789fad5766be163fd2867cf22ef482a951e187cf629bbc6f54dd9293a4a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-linux-x64.zip\",\n              \"hash\": \"d323093772a5e2824bd90f656b48f525464b56183999ecf26632eaeb300b9df94e5a2ce057b3faf2e73579861f4c74f9edf50f2f87d4a9d028e14a49d60aa770\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-osx-x64.pkg\",\n              \"hash\": \"2bdc783066ea09fca4ac47f4a28f728ce9b0cebfa9546304ddec92471761f0cfd7d789367008d49adec66ea9e080f276145d6abaf282ba94fcd033db0f48f1ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-osx-x64.tar.gz\",\n              \"hash\": \"70beea069db182cca211cf04d7a80f3d6a3987d76cbd2bb60590ee76b93a4041b1b86ad91057cddbbaddd501c72327c1bc0a5fec630f38063f84bd60ba2b4792\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-arm64.exe\",\n              \"hash\": \"eb23ddb4c4f53d7f139deb6767118fd90f3013b22cb41c3450c28a5508cfa7b22d628fae3a16290144b64c0d0083286979e50a039955c94efc81f2d1a12d682f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-arm64.zip\",\n              \"hash\": \"74c6a28eef6cfb54e100fdcf617ff831d2305848729feef404e1c043b580a8fc73a1788b091a90443be1a6d11dfe678ce3fb49a5247b275c4141733dc5b19eab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-x64.exe\",\n              \"hash\": \"761feebbc9a2d762f5451b1abb8a305a33352a6a902a6dcc7ca15b9cb888fb63c83d31b312375ee13304c8f0b39b9793393bba8c1d37e8fd3dc4a0a3809fafef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-x64.zip\",\n              \"hash\": \"4dae65d935d9a9cd022a38537f7678786517b82845dd010075fa2a1346d549cae80a1087f09668284e4aabc080673fe19b1607127e7ba29d0c40f037049eb101\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-x86.exe\",\n              \"hash\": \"e7c62522857bfcdd32b6b372f460c5cfc04e499df38e0d5bd1b0e50f61406bb6be3cc6275f12ad777479e50b91ba7a78746f5e4c7f1db06e35eeabb0c9b52642\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.403/dotnet-sdk-5.0.403-win-x86.zip\",\n              \"hash\": \"32b78ce9615be079411507c46884479cfc5a8f3b8b95ab9a7753325249de020366686cb86259e3a6e468bd5d4d46e8aef3c5ad2e34d2194329e33e777ec4f263\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.209\",\n          \"version-display\": \"5.0.209\",\n          \"runtime-version\": \"5.0.12\",\n          \"vs-version\": \"16.9.13\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-linux-arm.tar.gz\",\n              \"hash\": \"ba153f8669b7fad45be7c133ebe557f03dec72158158920f5ac865aa897e22ca31a4268a896b4a745b7161f29bbd658644127cca48da163f1d619f75269f228a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-linux-arm64.tar.gz\",\n              \"hash\": \"5724e71c9e50bc142f355e1137fe067343b76abeed5876181b0e1e0e5451217c0196e2cbe63ffd8a83f78f972682c43ff4685d04506886b0a9afdde2ece9b260\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-linux-musl-arm.tar.gz\",\n              \"hash\": \"70eb819e43c9873329faa4f80f3a8629501257fdaa5574c53328733ba18eb1498b594aaaa364449ae6c943fcd447ab3b609aa50bc8653f3a1a57253e9be8602f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-linux-musl-arm64.tar.gz\",\n              \"hash\": \"39b54416070b68a3d3fcfdae792cc666c65bcac2cd2b53a545bab08e3440c66ed37dbf2d85095ec4a909a7047259e774ffbcfdbc5f6b904054217633c46b63db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-linux-musl-x64.tar.gz\",\n              \"hash\": \"129ad36d92a58a1bf549add5b2c9400858d31f4ae74d5d2b1f37831464a16a98dbaa1445a3179fffb3a8020a137b8302355e4a076522ca4a8217443f1b67d29d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-linux-x64.tar.gz\",\n              \"hash\": \"728947596c5831950da1a0be2e05d3a755662f775f472e6027eaa07eb296e0fa7373dfface4bca033c0ab71790f0f2e7cfc6f31b894d2a4f2f9ca9f8ec02bc7f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-linux-x64.zip\",\n              \"hash\": \"131ec76ce2fb4ecaed489d784d71558b2e9e8b4e26de893c671350771209d7955a3ec6bc40be683dfb54a4d5206271e199187fd3a7cc4e60acb15540c038441d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-osx-x64.pkg\",\n              \"hash\": \"19b68be189e2d2b3fe79afb9f2147a351e6c59dfafb59cd828f9924a07de719f61d2d5e1eb224c1069a67040fe8eaee712f3642af83b3d34030a90ab8232ed1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-osx-x64.tar.gz\",\n              \"hash\": \"bc7fa44653caaf6301ce54549b20d99a28ea8a42964f3df90106b95f821213a8f246982453bfd8ee9789dc25a1605918c08a2509ca282e7501f796ba85c9f077\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-win-arm64.exe\",\n              \"hash\": \"1be4d1fe606257c06214928172e9d7e018f2e27277830833f607d2b214cd9746fac15f5f446d5fcb482d971a0ae44ad83ba4b1be62e6e91fbe7d22a479f0f6d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-win-arm64.zip\",\n              \"hash\": \"78d3a259371cfddd63018ee6b2c6f2527a1f35c755a2cb7e56e060764a8ee035f2fb5ac11b3505b4fc0e2a31a755bfe17ad9be7bdc5c26a5bc61a069cd52097f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-win-x64.exe\",\n              \"hash\": \"7de9e9586e819c8cefc990e5a15ac7eb6a180352b132668497007ad2de3ab28794d2f52adf27b6aba1481c8f91ac7475a5700d010155c235dea0351b0ab82a28\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-win-x64.zip\",\n              \"hash\": \"b595edb4f4a7a51c9ef8599d9b76e8202ba6ba910ff0d2f0023952de6a8c110039603fd192e4d0fdf1703099854a715ec673be7c0347ed51434f28656ed7bf91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-win-x86.exe\",\n              \"hash\": \"edcb5331279ab6136142601423e2e08b831f568b1effc3c453fae7b16652b2935d27879ae572510366cd6fbf0409b611be608bba3d8fb9cc3591261aa531e3f4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.209/dotnet-sdk-5.0.209-win-x86.zip\",\n              \"hash\": \"9f2bc73c2e22158454ac8527a3d516eb62174c514705ea80fac34703e9b539621cd2b099d420bb6f73b69f3fd47b37cddc20fed4e3831ddf9f7b46a53e98f41f\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.12\",\n        \"version-display\": \"5.0.12\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21297.12\"\n        ],\n        \"vs-version\": \"16.9.13, 16.11.6\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-linux-arm.tar.gz\",\n            \"hash\": \"7bb48192b97569fc198a03deb9330f32ff7ba14a4d903a31fa66e184df1055ed7419f7975ad9104582ee4edb767064437ab04117128a80cb4f310d5a22193b32\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-linux-arm64.tar.gz\",\n            \"hash\": \"70570177896943613f0cddeb046ffccaafb1c8245c146383e45fbcfb27779c70dff1ab22c2b13a14bf096173c9279e0a386f61665106a3abb5f623b50281a652\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"16222fd605b91bd372e3b5f8dc7b8bfd2dc624a2d47b4032f93f5ac1c88da42e5011ee2387db392e889165a10f2ed55ed8f53c8e434638f8d2f04ca6d5c42b9a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f7a0d0462f9062e79a4dcafa9b3c4161cb7e44b137a515f93b98dee7cdfcf9e36d1dad6f4e6488c3aaaf0974cfa4b55f25571119f97324cb987d0eece1db83ae\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"f5f58aee8d497e39b931354357c14c654acf2025c71435273d1d3c086410366352c6814c39ce7d5752ae0bbf293d99fa351c30a56b95ebeb82dcc8eb5269f2bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-linux-x64.tar.gz\",\n            \"hash\": \"0529f23ffa651ac2c2807b70d6e5034f6ae4c88204afdaaa76965ef604d6533f9440d68d9f2cdd3a9f2ca37e9140e6c61a9f9207d430c71140094c7d5c33bf79\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-osx-x64.tar.gz\",\n            \"hash\": \"bd9e7dd7f48c220121dde85b3acc4ce7eb2a1944d472f9340276718ef72d033f05fd9a62ffb9de93b8e7633843e731ff1cb5e8c836315f7571f519fdb0a119e1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-win-arm64.zip\",\n            \"hash\": \"c56f2681482130bfa8ffd9f057114ff155cde62b107c67e8313b3100fb9b6e04809dfc62a54e90bb2c029ac27da351f1cbf2ea1dd8b8fa76e2a998c4883c2949\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-win-x64.exe\",\n            \"hash\": \"92ef0f7bf0ec3e3fcfe23cdb21533f201784dacaa08ddcac99d9cb31b1eb876fa6002c362c6e8f78602b5c03823cab9864a1d489e054b4e0c42229512b8957f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-win-x64.zip\",\n            \"hash\": \"c6b9938f029e4425ced6d9dd0612cfb0698045297eb257f0857bbf5b22481361fab3a19660e1063f41b6d13e9a367cb4d0d71fc23f84dd01c345b1f1aac647b8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-win-x86.exe\",\n            \"hash\": \"c388dc4804242d0fe911141829b35e2bd05a75d9f9c8f91f5d3d23870dd2e1faaaf0259ccd0ee2393fa63801fa36251cc669df5985a4eb26bf1fc7e8596a8218\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/aspnetcore-runtime-5.0.12-win-x86.zip\",\n            \"hash\": \"3d8da89802c6997f6d2e2886f4040b7f989d653a761d248aa937355921f2b377cb9d9785c572b33812aca3f1860b5f948b4e2f3f060a66965ec27828e9c54c47\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.12/dotnet-hosting-5.0.12-win.exe\",\n            \"hash\": \"9dac56e77df02aab01614b687e293d0ed98cfdb54dbfb9783007c70b96981ce5045fa107fd4916b2c8303ab8a41bcd9c2587d24e7aabe55771433f1aa2b52b44\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.12\",\n        \"version-display\": \"5.0.12\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.12/windowsdesktop-runtime-5.0.12-win-arm64.exe\",\n            \"hash\": \"100de45e94ed191e59f5d126b5df7289c760502fd693347d0620e42055d5937a6bbf89ebe74cc6ffc2205e70a5a9e56718ceabeec0140f309699129edfdcc485\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.12/windowsdesktop-runtime-5.0.12-win-x64.exe\",\n            \"hash\": \"174d9894ec52f1df21161af01a8db9b778d9270bc7471153e475a091a24fafb56bb34cd6a73afc3842061b48d5d31b34ad05364f4cae2da4538cab4fc54cc21f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.12/windowsdesktop-runtime-5.0.12-win-x86.exe\",\n            \"hash\": \"54fb0c958ecd9f35d1c5bc96a628e9d2d97bf4edb04c18a89a1091264d7e11fee2fb77b5aabeaacc29322194462483e01ee50d11e63f34d0da57b325b728c809\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-10-12\",\n      \"release-version\": \"5.0.11\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-41355\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41355\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.11/5.0.11.md\",\n      \"runtime\": {\n        \"version\": \"5.0.11\",\n        \"version-display\": \"5.0.11\",\n        \"vs-version\": \"16.9.12, 16.11.5\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-linux-arm.tar.gz\",\n            \"hash\": \"2b1aa807657fb195e15af18b96ccd14789cabe7375782fb1d5b4834d64057a64474c735743b8a9b69c70d55882e66be9c17e858f3dfef2d4567e7287fcf47943\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-linux-arm64.tar.gz\",\n            \"hash\": \"b296a79f655ad22db405f24c1549b6cd610c57dae917c89b91ddcb4b053a7613952261cca7d7c79e6fda72026fd4bbbcf74751cb6529a55504a67223cabc0451\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"ca7eae70ed71e02f1b109c5a920a436aa76eee8b240d1727ae1316991910e8d0235a99ce7ac49c7fa275de7fdaafa61e358c813ee14a76abf1d5fb1e06b2b074\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7e5345203679079c6875d0ede0198ab849a4b435afd58a6a13ed8f7e76a8be26d52c656f992bf928fbd541804a96757dc84738e8fc3fb036f3d0a1b2d503c501\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"86a149621e26a67ec72e8c7c11f8361d20a3a9043e5b66d8048317a43d8de834930fa4b6cf32804adbfb8a3c36875b8f69e0331a4133dc48ab3ac1c6409f2266\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-linux-x64.tar.gz\",\n            \"hash\": \"4eef891385288e5ab35beea79e2e6ca13615afe2e90da7a7a14417119bdbeb42980dda5f1cbe5b6d8e05a728d0db4256abb54cd00a63aa621a70090bddbe9f69\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-osx-x64.pkg\",\n            \"hash\": \"78858eb5f67d60fd123b5b16911b778aef035822f43a5cd56effbf8c627a4cdb9dd21cf5c7a54630879666f082f21b992984bfaf0b834342ffb6a3816c585f25\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-osx-x64.tar.gz\",\n            \"hash\": \"f1922031149c24f78fbe08c6dbf8a45b23e2c24e6a58797a8845bc124ea36d458b5c50fc2b4eac2b99cddf42129cb446dedd9b5cbf3cf8d9e05ded442b9c8956\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-win-arm64.exe\",\n            \"hash\": \"c17b0ac5bb854aa61e1a69c91f9eee7dbc69225c7d6b75fc2ac6b96bb17016edc7d75d08874b5e5c79abc4bcd65be5106364f0287c79912dfe3288b835d5e6e6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-win-arm64.zip\",\n            \"hash\": \"97007e92ced1d363ee209d114258bfa103a8ef61c010de0b89691f57a4bed6626c940d89a93ae3ff61db0bab282f9120cc50a9a030ac7a0e2633cfb6b6298943\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-win-x64.exe\",\n            \"hash\": \"1c0d1c4c7eed663a3b6ecac929ba8e6daf88daed76ea88b9541b180ea9f926227ce688f8ae7e819c94cf21b317ff580db22e76bdf3a86642c163b0e2730b7965\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-win-x64.zip\",\n            \"hash\": \"efbb08cf889136d1585dc2259408ad52148194fff68f8435a68712fb267cd41b9c787574d1ddefbe5c3831d9319aaebc484d1b1aa6e1150117f0733c7643fc86\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-win-x86.exe\",\n            \"hash\": \"3d613bd5add3c9e7a7395504f31f69aff6c6cea22de2d54eb4888c3dce1969d4c78ba0fd08fa7ff9f84415732d175994ffecf875fad6935866276a01c0740709\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.11/dotnet-runtime-5.0.11-win-x86.zip\",\n            \"hash\": \"a088d791cefa9ce013b706094dcdb8aca723c21af2ee531c1988cc5538808ecbfa2c78cc84671fe5398ce794966114d7d7d7a7e2220c1270cd0d4d15efbedbee\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.402\",\n        \"version-display\": \"5.0.402\",\n        \"runtime-version\": \"5.0.11\",\n        \"vs-version\": \"16.11.5\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-arm.tar.gz\",\n            \"hash\": \"5de1f0efff7f1fab3492f638cbbd1302de99917b6dbba4bf3ebbc0190cc325ed914b6d4494ca6f8cf6c626c6c0fb78ba2b286965e0c03b0f5b298ff3c731f107\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-arm64.tar.gz\",\n            \"hash\": \"9681da343f72998590541e0ee454a3d68aa4caff761ecc727c837fdbe8645c11487d8e8c4f6f9d3cda35373cee046b4857289a2307aa4929878633d13443e5bf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-musl-arm.tar.gz\",\n            \"hash\": \"82b5349dc2cd6c7f48125e639d3a76246b8c7560acd1e49dd8f8151e42e837bbd853f127a28e879b9663563349d36a690d3ff730c81b83d493e9ec51b8e87d87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1779ba9d6e3f6cf9fe2891113d370b8361e84c3178de3d640fe7d8d007c3428a3633e47e4dbfdc4172a530d0785bf0a8e81a6ca0ce86d1dcbbfd03e5845e3c08\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-musl-x64.tar.gz\",\n            \"hash\": \"6144ef0922c0bb67a2a1692d296df328ee8eeebfc631cc3774c4e87b352128a95ebf36419ce874151fdcc5cfd7d083ce26de998aa7a02be1eda58880baf2b845\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-x64.tar.gz\",\n            \"hash\": \"6b2937ad1f026fd91d0c8e6101b0422a8d19ead022055021b55a722c34dcc3697b592592eacc6def8748981bd996bc2a511d7c3f05b0ae431c00ede0376deacc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-x64.zip\",\n            \"hash\": \"0f90abec5bf542aa8988a36778ecf8e460ddc37c850e4c4feb9724cea83abcf0d07c6a7754ab8a983314fd106df3f3ba00cefdf27aa5db9b4e61a3b142c968d4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-osx-x64.pkg\",\n            \"hash\": \"017ddc732c43f862f454456091c640578bb4769686e403ca956ccf9b49c655c942021e5704db57dc1e3fa566069f6e2745ba23154b4356d8e96a0d9aad15b131\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-osx-x64.tar.gz\",\n            \"hash\": \"f51f9686f74331f625c2faf7e96d7f52ac3bc43a3a7fe7847870c4cda4db0a39963d9688884d91c3c52c172b20b2eb2b810594be6690751623fa229f7dfac759\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-arm64.exe\",\n            \"hash\": \"e6024057233eb82f85aa6a9dd4745d804201ef4166929389e827f10d1132bdb8ff43caa7a6a579bf139325af6520902d6ce6a1bbca6cac72994dd90530291c43\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-arm64.zip\",\n            \"hash\": \"a6c48966a8f1b9d5b21cd5e0d30a5373b728ce25ba2b111b7b4f41ac25dac63700d4b19622f4944475f4f1c75c216d1b39d98c79532e2261e47443e75d5e5b93\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-x64.exe\",\n            \"hash\": \"41762fe83456a2f2259c3348b9627428a5ecc8297e0089522bf54e370832336c0a66851bbc7352d83291da317991c17a8492bab35f3c94124bd1ffd2cceb8f5a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-x64.zip\",\n            \"hash\": \"bc6aacc194c10a1171a18ae2115887b6ffff2a501463a68a354390150afc3630cfb0c3606097c9f90c67709bcbc4dee27d94e045e79d1f046db5c25f8aa81ac8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-x86.exe\",\n            \"hash\": \"ead5aee59bdbc42a0626458413feb7ee5eb2034dca6fa868cc9eb58e6ec3b728a5759c601b07b43d3b68fcc84d607bcb3f54f00234ed582067dfe0012fe5e895\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-x86.zip\",\n            \"hash\": \"362c56652fc3570903dcb04cbcbfefb29818e17a3e1e7dc0833e554aa75fe1668efc7bd66de3db2de479c21497bbe8a975d0def96629771238efca182563f2f3\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.402\",\n          \"version-display\": \"5.0.402\",\n          \"runtime-version\": \"5.0.11\",\n          \"vs-version\": \"16.11.5\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-arm.tar.gz\",\n              \"hash\": \"5de1f0efff7f1fab3492f638cbbd1302de99917b6dbba4bf3ebbc0190cc325ed914b6d4494ca6f8cf6c626c6c0fb78ba2b286965e0c03b0f5b298ff3c731f107\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-arm64.tar.gz\",\n              \"hash\": \"9681da343f72998590541e0ee454a3d68aa4caff761ecc727c837fdbe8645c11487d8e8c4f6f9d3cda35373cee046b4857289a2307aa4929878633d13443e5bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-musl-arm.tar.gz\",\n              \"hash\": \"82b5349dc2cd6c7f48125e639d3a76246b8c7560acd1e49dd8f8151e42e837bbd853f127a28e879b9663563349d36a690d3ff730c81b83d493e9ec51b8e87d87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1779ba9d6e3f6cf9fe2891113d370b8361e84c3178de3d640fe7d8d007c3428a3633e47e4dbfdc4172a530d0785bf0a8e81a6ca0ce86d1dcbbfd03e5845e3c08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-musl-x64.tar.gz\",\n              \"hash\": \"6144ef0922c0bb67a2a1692d296df328ee8eeebfc631cc3774c4e87b352128a95ebf36419ce874151fdcc5cfd7d083ce26de998aa7a02be1eda58880baf2b845\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-x64.tar.gz\",\n              \"hash\": \"6b2937ad1f026fd91d0c8e6101b0422a8d19ead022055021b55a722c34dcc3697b592592eacc6def8748981bd996bc2a511d7c3f05b0ae431c00ede0376deacc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-linux-x64.zip\",\n              \"hash\": \"0f90abec5bf542aa8988a36778ecf8e460ddc37c850e4c4feb9724cea83abcf0d07c6a7754ab8a983314fd106df3f3ba00cefdf27aa5db9b4e61a3b142c968d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-osx-x64.pkg\",\n              \"hash\": \"017ddc732c43f862f454456091c640578bb4769686e403ca956ccf9b49c655c942021e5704db57dc1e3fa566069f6e2745ba23154b4356d8e96a0d9aad15b131\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-osx-x64.tar.gz\",\n              \"hash\": \"f51f9686f74331f625c2faf7e96d7f52ac3bc43a3a7fe7847870c4cda4db0a39963d9688884d91c3c52c172b20b2eb2b810594be6690751623fa229f7dfac759\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-arm64.exe\",\n              \"hash\": \"e6024057233eb82f85aa6a9dd4745d804201ef4166929389e827f10d1132bdb8ff43caa7a6a579bf139325af6520902d6ce6a1bbca6cac72994dd90530291c43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-arm64.zip\",\n              \"hash\": \"a6c48966a8f1b9d5b21cd5e0d30a5373b728ce25ba2b111b7b4f41ac25dac63700d4b19622f4944475f4f1c75c216d1b39d98c79532e2261e47443e75d5e5b93\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-x64.exe\",\n              \"hash\": \"41762fe83456a2f2259c3348b9627428a5ecc8297e0089522bf54e370832336c0a66851bbc7352d83291da317991c17a8492bab35f3c94124bd1ffd2cceb8f5a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-x64.zip\",\n              \"hash\": \"bc6aacc194c10a1171a18ae2115887b6ffff2a501463a68a354390150afc3630cfb0c3606097c9f90c67709bcbc4dee27d94e045e79d1f046db5c25f8aa81ac8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-x86.exe\",\n              \"hash\": \"ead5aee59bdbc42a0626458413feb7ee5eb2034dca6fa868cc9eb58e6ec3b728a5759c601b07b43d3b68fcc84d607bcb3f54f00234ed582067dfe0012fe5e895\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.402/dotnet-sdk-5.0.402-win-x86.zip\",\n              \"hash\": \"362c56652fc3570903dcb04cbcbfefb29818e17a3e1e7dc0833e554aa75fe1668efc7bd66de3db2de479c21497bbe8a975d0def96629771238efca182563f2f3\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.208\",\n          \"version-display\": \"5.0.208\",\n          \"runtime-version\": \"5.0.11\",\n          \"vs-version\": \"16.9.12\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-linux-arm.tar.gz\",\n              \"hash\": \"3307ed53f880bfd68f061c276c1021d9f43d251df60e6aebd46312a6c14a8ce497a4605ca81a43e250e876023044474d7ac7135e5a7d65b2e3cac37201ad51ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-linux-arm64.tar.gz\",\n              \"hash\": \"06a53ec69e9e2b806076ed85afe7b1b6481c183a6a1332d00c8f52a48791f2ba67750e312d44918bc3662ac587e0f37cdfb74b5c1c4e769cd66c9978a7776035\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-linux-musl-arm.tar.gz\",\n              \"hash\": \"3a16b27a192e5de89df20038ffbcaa4944de4451d716c86f5af4f6a8a636e99cc73360ca20c90d114b0b2bb94dcbc3044812e90e0529a5ffffa298b79776d9f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-linux-musl-arm64.tar.gz\",\n              \"hash\": \"e840de1ff47cb53fcb6dcbc69d57bec9a239688f39ca3f8f3d00c7f46b1e5af8ee1b19736720565c055ae4eca9ae43347f2bc030cb027ecde2a57351ce2ad451\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-linux-musl-x64.tar.gz\",\n              \"hash\": \"48ff49d119701f0f414536d43bf521a6f1cdbe70db808a213ef51c6e93343a000374d6bba87ea2e45b794a394888b9ecdc1e9c954a8a98823ca427b77b7608f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-linux-x64.tar.gz\",\n              \"hash\": \"d9240fed9339bbd7b7e0d43d55e01865921443123f53447599af5e2c21ca5fe475c5fe0573f95eeb88be800fc689118bacd11b93f88309e3f014d18cbfcf8fa2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-linux-x64.zip\",\n              \"hash\": \"add21e9a27810643e02d239ff1d629a3e9055915657dd01f1c1173a5de89f5d2857efe3a5eda617d4309dc642049420ad9304d5263144d734f15acc14d8beae5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-osx-x64.pkg\",\n              \"hash\": \"d98aa624f61ae7f545df5d4c48cecb04d931881226b4dab1146149f591ff68d2944e8645988a05ecf02afd9ae064b67832f2fc96b500fe31974f1c8178909e5b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-osx-x64.tar.gz\",\n              \"hash\": \"2dede73a57caf41dd4efd1838724aeeabc5b915008b5b5dd4d37984218fd05dc7cc4d17a1d64e3899d673e75283378810d09b4d9f82361fec28229d028698374\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-win-arm64.exe\",\n              \"hash\": \"651c6365b66c7ae74586811466c2533d35fb129ec181c658dd2e2ac85e106582fa7e89a3a3377a3ba4121746cb3e5dfac4c626d69b9fc0bf37856e03b464a6eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-win-arm64.zip\",\n              \"hash\": \"b43f104a8e88731290b176e3ef0c5c10f7c3c2dc19120c146b6cb5f0c28598e0aa9eeaa407e04ffdd3faacb1ae036ec429c7e92194e118f743ccad94bbeb3e7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-win-x64.exe\",\n              \"hash\": \"8012e53d3ee902fc506afad84f311b04cccb2440926c0fb17a8adac356c2f9e1f2533bd6f2aa0fe6314f30d8ca281354b3cbec413b9d1df64c80603c445e10ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-win-x64.zip\",\n              \"hash\": \"c3858147d505860bd08f469792df8b4641714bb73a408bf05d759de2a95f286368a77eff6e31c299abdef03147aba7de4572ecaed3ebc676031ae295552d83ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-win-x86.exe\",\n              \"hash\": \"6f689a52d49373fe085af9a049c9db74baf1145249cd1fd70092aff6171cf2b49773b0d8bd010cebf42dd3f5559e07371e43bfca1f158bf9c2800448102c909d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.208/dotnet-sdk-5.0.208-win-x86.zip\",\n              \"hash\": \"ed2130b836dd5771982479d79e94b0f85c837caa99553e5abcbf1ecc493fef9b4475ece7be7bcf16f02aa6924a89524f19fe5fc393db3390d4d3b33f4fc8ec3e\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.11\",\n        \"version-display\": \"5.0.11\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21270.11\"\n        ],\n        \"vs-version\": \"16.9.12, 16.11.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-linux-arm.tar.gz\",\n            \"hash\": \"3464ff4341e9e8642f3a204039974e5b959e4149c00137fa64452e9540a8132520e2d8ff19dab5fbdff40d22fbb94c006242d7602022fe94aaa5216cd4e3e438\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-linux-arm64.tar.gz\",\n            \"hash\": \"70844c1c1ca12dbdef3c459ce9a27d5ac91c893891473efb7b2184596210008674078c9d9833d6a2d5114b680a182a3e83d135b3d175bb373b439fcf22f4fc02\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"ce42c7ca6f5fc3cc9169df710393a4a9b9919d1b7e20907b4e0028a7fbbb0baa70210d12f6bfc2d05505b0b8d7111ff323e5df2a71ea4892026bd0940f9ae671\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"93e7db6f87eb7068726330567f277cc930ec3ff32d04b8ec3dd19167a58524d067dc78ef01614c0ba0d3421a2dd23bd497fdf01615f4a3884d5593298965eab2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"0df3cd63230702520bc5678c4e7c7baed27a0525ead160d9bee509d7c42d0d2fa5cab79bf527727a6d9deb464953522e8b3d5de4a37b52ff9ac678dfdff2789a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-linux-x64.tar.gz\",\n            \"hash\": \"2843b60a599fcb269bf700ea6233653264529d6522808c1b6ae0dc119e52e2c3203f3050dfef441dcb44130031a9ae03adbf25f1a51605ddc6f696b91433a667\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-osx-x64.tar.gz\",\n            \"hash\": \"e2f7e8d873b8e39c15f4fa40d2df24a3d086b00b0c8fbecc6fa72ac1eccc0cf484f82a4ccb2e513084f652196c5e36eee9b36eedbe8769369748cc03e8f7b578\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-win-arm64.zip\",\n            \"hash\": \"cf2392b4737b3cd968e681b572e10060960e9b8ea3acf13af2a1585170cb94fff424a54ecaf8f826fee64cdd3605c921386ab063952badffa1f79d2dcba9630d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-win-x64.exe\",\n            \"hash\": \"5a47b0d4ce223875c801c6b2dfb35a9a07d07a8340606558f583063e49518a15b5a5f5a95225e8076030d6aaa2abee4afdc2f4e21bfd3011bdcf546b17506b18\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-win-x64.zip\",\n            \"hash\": \"ebfdab8c09fbb17d9e49971c0e4927cacaa164187dbfc4df8fd1ed52656d97681486ac148a2f2543d88da7a766287d5570fc8686deea12fdeef2b57afa0e084e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-win-x86.exe\",\n            \"hash\": \"6e0df8fd2cf36b8208264a6c8a62fb24ba98910d75832f3fa45c7856a5caf80b179f3f08a866bb8a9fa0871246934e5f1e5e0535c2c0a011e471a73f0d559f2b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/aspnetcore-runtime-5.0.11-win-x86.zip\",\n            \"hash\": \"f9051f795cf640a23b8f4d7ee5ec8369f50148b1b6f8fb179f76bb46bf7a9646955f18a7278fcb20f72d4b95c79af02eab2b8db51a53a3f93506f08d06594298\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.11/dotnet-hosting-5.0.11-win.exe\",\n            \"hash\": \"9ff63db62398baee4394f9db5c0a30d33e3e2ca5d69bef2a6ef85d7581e9f7b58a33217bc763279557773ef30709a7eebabc12a5d2ab86c3253408378865eb71\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.11\",\n        \"version-display\": \"5.0.11\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.11/windowsdesktop-runtime-5.0.11-win-arm64.exe\",\n            \"hash\": \"0c9066914d728e5bff4f675f0112585d3b0cd6a2d7cfef29a772bdd1e2d3054e44a336f8d662e7680d3dce00d46dd0e686fa64be373d82356d2b93c7b6e11109\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.11/windowsdesktop-runtime-5.0.11-win-x64.exe\",\n            \"hash\": \"b3e00c68e95d5aefaaf366aef51f17d6dab4415890580fa0bc6ed29e3dfd3b2e9d3af477ffdebd5bd363b5d585e61e59f6296a6165d8b09f847dd03c87725ce2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.11/windowsdesktop-runtime-5.0.11-win-x86.exe\",\n            \"hash\": \"dd9a64f30c6e5b028a1070f538ec2c97ca8bc96d06834f1cfe07acc5db3ab0373f386ddc01eb1dd7bd8b4f52d1437a629ec5db962f7ca9c4237697b9fc7173a7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-09-14\",\n      \"release-version\": \"5.0.10\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.10/5.0.10.md\",\n      \"runtime\": {\n        \"version\": \"5.0.10\",\n        \"version-display\": \"5.0.10\",\n        \"vs-version\": \"16.9.11, 16.11.3\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-linux-arm.tar.gz\",\n            \"hash\": \"3f0e86f14fe8a9b8773a6078fe236e746ca078cb1deab36f4b770170d6a4322b1c870328148934dd4bd5953d5962de4a32ef487c6142079759512b8281d8c7a1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-linux-arm64.tar.gz\",\n            \"hash\": \"30861f2bd41fcd7c1d657be1eafa09f22886af0c3e09d1854c626b675a469347ce9fb79b2ea92b5ed4e2fd3d3457766ac03fc5393a690099e1d2b9b15f3334b9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"f72efa3397b6cdd0d4833ca228f4e7ff6eb1a874fde14737b68f39dddf4593ee859ad80210f9fa7e34c7e1ab0cbeaac5eaadc9aa5fe0a88e15064080b0f01c58\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c392afbee253e1bf98a83c543fb7416508ad3655add357fd03d2333f8e3b62321241374ba988a5cfacf4d0ff531bd7b15bd37f5d67b79a104d3b649b2f28c5f0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"d0ca3aef030a575daf09fcfb8abc3056dcb6567da661c8c18162882a8ae9af3de013053ada82e0ee3042a806cb10dd234f59aa5bbdcd229d5ead582464ad4154\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-linux-x64.tar.gz\",\n            \"hash\": \"421b00d5751381e6bf829dcba8fa0d781f0efd065be492739d60a4bef2b7b362dbec77fa3289e2ee45cab40616f95318fc214699ffe2f33aa15e77c2d163841c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-osx-x64.pkg\",\n            \"hash\": \"6ae9465c89e8c316b61164bda48f7c4370ae2c3871e83929d0c0cf986d286ef13c26f4bc384c419e691043ea0ec0a23094bed6f4aaede2a9b955780a0c13f89c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-osx-x64.tar.gz\",\n            \"hash\": \"2839f4fafa1f85a90b43a74a4898cbba915324f7363f1716e58cb9163d1415fa4d360703e27d0cadfe8495a370ccddbcfcc514076a880d6343a0bff76bb5ac2a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-win-arm64.exe\",\n            \"hash\": \"a047e073d2f1b17b47962690ad6ef7f3672dfcb8d2f1173b93fde0c9f67a6dcec7642a40f2b26135b23dfdafc6e7e45c55f055f1b46390838a4de1a5f1377ce7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-win-arm64.zip\",\n            \"hash\": \"4ab89368d46412fbf0d307dc3d57abc90c49bb07dd012d453c22166d2e6207f5fbdf7255a3157cf945df30cf88653a8e04112d51551f207e5787f9b312b553e0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-win-x64.exe\",\n            \"hash\": \"3cf978c8fea2a1ae6fd8eefbd7b7d14d3ebfbda8053305bc8da0df3df96e30a100145d16cb7f3fc4f1596d5812a96defe76903ff93539913b6293eeec4c85000\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-win-x64.zip\",\n            \"hash\": \"5ff6720d17af64a2a98907824504c913cc90d6eb31497d293f7ca581792769ce5d735bf371a2ddee74241a6f2ad7da8bfc74ac23d83aa98d0b3f5a6dd770ec01\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-win-x86.exe\",\n            \"hash\": \"960d256419e84abeb1989b4be5f2f645adc19240ea6f549301677eb19d4a8296a867d35739df566c981f29db1417d65f5f7c64a5bf5488029e695b13d799e950\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.10/dotnet-runtime-5.0.10-win-x86.zip\",\n            \"hash\": \"1f0babf92960d598adddc79caf4357f89a7a76e296a59183ce637410e501046764ab73cc97de0f09239d57b8dff2b8a301593cb3c9bf8e97b207d40545b192b0\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.401\",\n        \"version-display\": \"5.0.401\",\n        \"runtime-version\": \"5.0.10\",\n        \"vs-version\": \"16.11.3\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-arm.tar.gz\",\n            \"hash\": \"53c76be404587cd1a6ccbd150522220452ac6e11b8d2f8ab87b8119d1871f7cd6a38ba89f2cc5b6ea953bd900ffcdf5bfe947f0b2df6b442ce61ff202ec0db6a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-arm64.tar.gz\",\n            \"hash\": \"770dcf18c08cd285934af61bedc06ffcc16a74115d15376f72376cdfbb4ab9cc9f53537ca1fe5d906b4b3c30b960ffe1404d6f7e01254091b4b9d288e9e972fa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-musl-arm.tar.gz\",\n            \"hash\": \"67cd0d333b3dba30a896e7077501be811e440c25fe860f5b077ded6765b02b84fe7444ebeab8e42039790aed46e11e006da9cd2e3b7435feb14495b86ffa165e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fe0ab5925fa4d963c31b80d7f71a785773c021d2401bf3f61b19e63a1f9a722e551d95c601d44a1b7d3f562fdeeb969dcc24ddead8df948ef3b1ca58163e6919\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-musl-x64.tar.gz\",\n            \"hash\": \"a2077f4d1c9da9c69453b771cd239bad27f62379402cc5e1c74a1f2a960fd55efc85cc15eafbac11f17ea975895ce107fab4bbfc49880a0a14791e8ac13ca2de\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-x64.tar.gz\",\n            \"hash\": \"a444d44007709ceb68d8f72dec0531e17f85f800efc0007ace4fa66ba27f095066930e6c6defcd2f85cdedea2fec25e163f5da461c1c2b8563e5cd7cb47091e0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-x64.zip\",\n            \"hash\": \"b0370306838f93a13d144f0e34e34d021ece5639fd1438bc37df8d8f93d0b30d0d8a1510d08128c674e4ba8225afb6ecc487383e685cfe775b89faff0ba9ce25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-osx-x64.pkg\",\n            \"hash\": \"d886a6cb4edec54b80902861eb42407e8c15418a1dada4ffa6d72adb97dbe46a164a05211a6e616d3bf259017f96fd2f5662ea0e9fd52072fd6a1ba2a12ba58f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-osx-x64.tar.gz\",\n            \"hash\": \"eca773f407314123fd5b2017f68520c0647651f53e546583c4145b596c230c42898b3e56355cd5ace76b793df4aca3cd7ff9142718c86eedeabbabb70b393d0e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-arm64.exe\",\n            \"hash\": \"fe96229218da7ceb3cb4749d424de01c502c75e37766c5be18fca2c7fc87b2ee4b7f49f3b39e350355b281b1448ae70786740eb007c670cc84336b2a86c8778a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-arm64.zip\",\n            \"hash\": \"baba61bd5309a4428b6b366d8ee95876a0566d8cf734e5fd3d657588462b1e978d7cecf592a1fecea3755a426fffe4263e1662bc1c4b770d9a9c0bcec50f09c8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-x64.exe\",\n            \"hash\": \"68bed347233eed63efae7df7359d2af8d4c1eeeaf008de8f0979bc7ee9f7c21da427802feb96d9763a85270763c0fa1e2e4baba8b9550a8748435ee49fc68106\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-x64.zip\",\n            \"hash\": \"9838f0286afe3724f490c6686564dae3ab27c9fe0e2c41a48d8aaeaabd07d9a219e207206d88311241c66dde8c79a9dae7ec1f8103303aeaf6943a3a9f6d34e5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-x86.exe\",\n            \"hash\": \"bc5a90f2906cff26dd902b9149f83be62af9c372dd7bdd8fad770235ee82df0bf63b29c89690c51de386133d0f45d82d63be28839568da0f018884c3ba962d57\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-x86.zip\",\n            \"hash\": \"a5c406b7f198f109f9c0fda8cf9ec7dc14ad53d557090b7ceb85e1afbd8123b39987643f3bbbe8558fe51a2a09f51034a6d6dd19fe6635aecee5c29e48a0fc05\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.401\",\n          \"version-display\": \"5.0.401\",\n          \"runtime-version\": \"5.0.10\",\n          \"vs-version\": \"16.11.3\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-arm.tar.gz\",\n              \"hash\": \"53c76be404587cd1a6ccbd150522220452ac6e11b8d2f8ab87b8119d1871f7cd6a38ba89f2cc5b6ea953bd900ffcdf5bfe947f0b2df6b442ce61ff202ec0db6a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-arm64.tar.gz\",\n              \"hash\": \"770dcf18c08cd285934af61bedc06ffcc16a74115d15376f72376cdfbb4ab9cc9f53537ca1fe5d906b4b3c30b960ffe1404d6f7e01254091b4b9d288e9e972fa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-musl-arm.tar.gz\",\n              \"hash\": \"67cd0d333b3dba30a896e7077501be811e440c25fe860f5b077ded6765b02b84fe7444ebeab8e42039790aed46e11e006da9cd2e3b7435feb14495b86ffa165e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-musl-arm64.tar.gz\",\n              \"hash\": \"fe0ab5925fa4d963c31b80d7f71a785773c021d2401bf3f61b19e63a1f9a722e551d95c601d44a1b7d3f562fdeeb969dcc24ddead8df948ef3b1ca58163e6919\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-musl-x64.tar.gz\",\n              \"hash\": \"a2077f4d1c9da9c69453b771cd239bad27f62379402cc5e1c74a1f2a960fd55efc85cc15eafbac11f17ea975895ce107fab4bbfc49880a0a14791e8ac13ca2de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-x64.tar.gz\",\n              \"hash\": \"a444d44007709ceb68d8f72dec0531e17f85f800efc0007ace4fa66ba27f095066930e6c6defcd2f85cdedea2fec25e163f5da461c1c2b8563e5cd7cb47091e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-linux-x64.zip\",\n              \"hash\": \"b0370306838f93a13d144f0e34e34d021ece5639fd1438bc37df8d8f93d0b30d0d8a1510d08128c674e4ba8225afb6ecc487383e685cfe775b89faff0ba9ce25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-osx-x64.pkg\",\n              \"hash\": \"d886a6cb4edec54b80902861eb42407e8c15418a1dada4ffa6d72adb97dbe46a164a05211a6e616d3bf259017f96fd2f5662ea0e9fd52072fd6a1ba2a12ba58f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-osx-x64.tar.gz\",\n              \"hash\": \"eca773f407314123fd5b2017f68520c0647651f53e546583c4145b596c230c42898b3e56355cd5ace76b793df4aca3cd7ff9142718c86eedeabbabb70b393d0e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-arm64.exe\",\n              \"hash\": \"fe96229218da7ceb3cb4749d424de01c502c75e37766c5be18fca2c7fc87b2ee4b7f49f3b39e350355b281b1448ae70786740eb007c670cc84336b2a86c8778a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-arm64.zip\",\n              \"hash\": \"baba61bd5309a4428b6b366d8ee95876a0566d8cf734e5fd3d657588462b1e978d7cecf592a1fecea3755a426fffe4263e1662bc1c4b770d9a9c0bcec50f09c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-x64.exe\",\n              \"hash\": \"68bed347233eed63efae7df7359d2af8d4c1eeeaf008de8f0979bc7ee9f7c21da427802feb96d9763a85270763c0fa1e2e4baba8b9550a8748435ee49fc68106\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-x64.zip\",\n              \"hash\": \"9838f0286afe3724f490c6686564dae3ab27c9fe0e2c41a48d8aaeaabd07d9a219e207206d88311241c66dde8c79a9dae7ec1f8103303aeaf6943a3a9f6d34e5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-x86.exe\",\n              \"hash\": \"bc5a90f2906cff26dd902b9149f83be62af9c372dd7bdd8fad770235ee82df0bf63b29c89690c51de386133d0f45d82d63be28839568da0f018884c3ba962d57\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.401/dotnet-sdk-5.0.401-win-x86.zip\",\n              \"hash\": \"a5c406b7f198f109f9c0fda8cf9ec7dc14ad53d557090b7ceb85e1afbd8123b39987643f3bbbe8558fe51a2a09f51034a6d6dd19fe6635aecee5c29e48a0fc05\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.207\",\n          \"version-display\": \"5.0.207\",\n          \"runtime-version\": \"5.0.10\",\n          \"vs-version\": \"16.9.11\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-linux-arm.tar.gz\",\n              \"hash\": \"9c9703426ad04142c3c874606220e2f2c2bc129e7b0e2924cf79dce9396545f824564047280c9b8ccabc67e2df145a60ce4a1cee7970814bd718d9e83230dca8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-linux-arm64.tar.gz\",\n              \"hash\": \"8af1347bbff0cc35daa772efc5870951840c9ead3e85faf7f183f8194a68938d8d821a8fb23e006b262d5673566d2337e9320cdb38bfef6fc3a337b8d7a864f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-linux-musl-arm.tar.gz\",\n              \"hash\": \"6d70ba692620f471b12ba293c08d3fd6a268c4851b794c23a6d5e9bc2d3d8d92887103e9a0cacc3a1e7bc4e637851afd9efc4731150ced6d179c1049dab272ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-linux-musl-arm64.tar.gz\",\n              \"hash\": \"edd51db339c757ac8263c681d643a8d045cb45f4ab2882dac0b681cfb1201c041a1d47a28e81d3e11245918e1788177280466f1c6faa3fb2e628ea6bcf5e7218\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-linux-musl-x64.tar.gz\",\n              \"hash\": \"62fc63abc3128b1a491a5b0751dc0f2d5aaf9c76a5465d54cb83360e59ea4d681cd9c99b7ba736569ef2fb95e14d7f8d61432029240196a4453c6a56daa32809\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-linux-x64.tar.gz\",\n              \"hash\": \"57c3ec6e37144a6ce37bb5fb1521ca877f61a52693bf1f22940da166c4cf54701d9b96d8d584b7a4ed73fe896113c1cf3e328f25bee9228f9db461d1e961076a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-linux-x64.zip\",\n              \"hash\": \"ee893a75bd86ea669193b42ef6e9153990ebcb5781aebfb2e3197148096b6b2707d41b73114c9dbc3312553cc7e2ef1525a00df852f26786a12e67e5e189abbb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-osx-x64.pkg\",\n              \"hash\": \"8ac6f7d6d9dbd4310568fa8cd4ba5b691f79f5c24562b0cd88611acd9bf1ec9eb89b48768acbf2be407fc12d42014937ad951c84e5694aee71c0cbac926fa629\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-osx-x64.tar.gz\",\n              \"hash\": \"7b2f66efc45ede30164ecd4004de95887ad3a33bc6efb062dc5ff596e8169c1692c626fdae36878c6fd0814ace779026c620ab6c4ad4dd0d4a95df8c10170125\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-win-arm64.exe\",\n              \"hash\": \"c9cfb0e4afdbe578746b9a7e6d63780d0ba61fd2f643a88f161ac40e2aa82cc940aa707402639f7d8b1814db028b8f574d765a9fa400f4912e48d03c387a01a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-win-arm64.zip\",\n              \"hash\": \"bb443dcf1bcedfd3f6c7ec21c3397cfee93cdfeab232d5d8a39387549b30e50380395af9f500fdaeebdc555646cbbbce7a6e461873af6cdd2be2d4d5ab7541e5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-win-x64.exe\",\n              \"hash\": \"7ceced8c4dbe49160086de74a6496497012a1c04bdedab6ed07bf8db8ec6d4910911b50c03ccf87807d0766b856ab74a3dd46b10f52fd6127b3f580e519da7db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-win-x64.zip\",\n              \"hash\": \"dc57ef0b056eec4eb657b78bb3edab44c76a940441fef1107286c2d27a1b7bfb9ad0ff659a4ea6f3dbe7f0134321e6c3d41932247213b0a0234a1b435b8c2dc4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-win-x86.exe\",\n              \"hash\": \"bf9d8be546eca5453393f352a9604d753ff05331f3d73b9fa3a5e84798f6309b08d2d46180ad5eb78a23d190cae0d14a2677e3153b6d86c4aba84c10bc228dd6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.207/dotnet-sdk-5.0.207-win-x86.zip\",\n              \"hash\": \"1b5b3dccbb4b7b6ffe1b351e144d51058ea240c1737e028d336ee913f95c6b164ea7ae0bba68c2d831bfefc5de3cf905466e3586c36982ed59d211e49715b0f7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.10\",\n        \"version-display\": \"5.0.10\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21236.10\"\n        ],\n        \"vs-version\": \"16.9.11, 16.11.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-linux-arm.tar.gz\",\n            \"hash\": \"8227fce474bb349e2897a16a8dd7ac935c55b12881a0fae9806c161a6ff59acba14a475f02795838a8b516d639bc1bc2d90a7492ebbfa86f81ae5386c60def05\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-linux-arm64.tar.gz\",\n            \"hash\": \"e86dd5b26e5add2f35c3a029c78e3c447755a319c105d371da297f66db5eff260f3f55ccf23e508e9a33536876708ac2e358dc62a4a28518f88df3a9131adb01\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"3d1f46be14e7dd0881a736c30ca71ecdb80e843a5f8ccdc871d4d1fd4e091c09ebbb1baec820f88e4a68b351dc86d2b67fd5ad609c3209b5a218ccc07f557ee5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bdcd08174f9813b73d21c433cd6de76487167d3890953aea961c0275c16a70c1d871cfdfdd9cb4b46b446e638810c288ab3fc79fbdf4979367624dfdaf3f95ec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"0e995f892eca8893e211e9965b2378da263233ad92c5f32624c4dfbdaec1ad7b8b3c5496a27a81891b321eb12d7a08445cd86832e219584a31cad4baef18b9d2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-linux-x64.tar.gz\",\n            \"hash\": \"60fd41e42e07a96416baf2dd7ea8112a7c7d510bc6f4656274981777d2cf5e824cd519924cdf06215338d74e78cdc7801e1b24c39b3d67cd2d1b3c6fee6474a9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-osx-x64.tar.gz\",\n            \"hash\": \"124abacba27e26249d265d51fd7abc7ab0bed9859ce3a6a8e4f193031bff3f28dd81af639542b0cc043a3957e2a90a2f5b41c6ec6b4a50a4cb8fce12bc8654f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-win-arm64.zip\",\n            \"hash\": \"db1e19f09ca0c943c390ab348c344dd360b5d77aa1a648d294338904167b9a4a57a2e4b36995f306ba36eca7047e0d076be764d1e7e2c44ffab4ed895b574f2b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-win-x64.exe\",\n            \"hash\": \"ae3476f72ceaafcbc6414fa49790251f0f3a6b078951ff896ec00ca5fcc9d58ab89e3582d76d2135f5860e3842c41b390b771a07e9f5ef71b34679984c40ebe1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-win-x64.zip\",\n            \"hash\": \"6fdb4960a670f0aee52bf40a68339762d9088ecaee29c5a379570eb910cb6fe0f0eadfe971e1820ac713beef61363980485eae96ac7e10cc83384674a2071e27\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-win-x86.exe\",\n            \"hash\": \"763f580d780ff9f7be70890f6cea275a463a5cfc8b90982a0d40d60e86630b472d0439f806eedbdc540d10ebf9f5ba3a1861c3f270e87462bb7dba14ba95bffb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/aspnetcore-runtime-5.0.10-win-x86.zip\",\n            \"hash\": \"e8787c46873047046c5ebba498f4abdd64fd9ef9a8fc3cdc1ea55e4582f85bf1388b3f2581a18383f88c51d0cade80014765d49d32d9f38a0df1c17417381923\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.10/dotnet-hosting-5.0.10-win.exe\",\n            \"hash\": \"c97de7ca812b63c482e2ad5db1216db46e95a802487406b784a1756f3095d211f1903b16b9f908f388335855a509f6d49025160ae4e0767c194c4c2cb45080cb\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.10\",\n        \"version-display\": \"5.0.10\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.10/windowsdesktop-runtime-5.0.10-win-arm64.exe\",\n            \"hash\": \"240960f78db308e41e89cb2789aa4f699c5973fd0401abd8cf7209dfb5259e9a3229aeb951c9e17b6c3c1624b5e17c709fb03dbab196dd30e232cdfc161df3ab\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.10/windowsdesktop-runtime-5.0.10-win-x64.exe\",\n            \"hash\": \"71f5a21c44fb133a4778f72ec62fedd5b109b965303a466e67e615e075836f49573df4e32f9e6262f7fc2105a6e1a462f691fd92890df611cab49c338c81bb09\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.10/windowsdesktop-runtime-5.0.10-win-x86.exe\",\n            \"hash\": \"6ab85e0e2e034252abbe1a7642e679d22de44e3c5702519224378c6cdfcecacd2397b0c974ac83bccab6e632178dd001d4e2c3e1ea925c0d8f9b2cb40a9c17ec\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-08-10\",\n      \"release-version\": \"5.0.9\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-26423\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-26423\"\n        },\n        {\n          \"cve-id\": \"CVE-2021-34485\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34485\"\n        },\n        {\n          \"cve-id\": \"CVE-2021-34532\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34532\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.9/5.0.9.md\",\n      \"runtime\": {\n        \"version\": \"5.0.9\",\n        \"version-display\": \"5.0.9\",\n        \"vs-version\": \"16.9.10, 16.10.5, 16.11.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-linux-arm.tar.gz\",\n            \"hash\": \"9019858e75f73b5fd6ce0e04aeb060f61221391b6a55dbf8ed2e43f1011198252f651fb0e07b2b8e7d8d558403f2c86f6ced147c2501e36a90411bd21e521a4f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-linux-arm64.tar.gz\",\n            \"hash\": \"00f33e9c7f6ab653872952a3bf97bd51f8c764abbcb472218d722f6d5593a80b94a15c1a6fdefd0a4f8ed64874754903c3ab40e1761cff93bcaff3b5da82c47b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"de0b844c41b8ce5749de7e5c7caad0e4ae7b47e760de513c6e9d003210fa3be4573199150cdafec4768f42ee35ab79bf509f59ebc184789a25c8abc2f27c956d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"20c98d01415966476c3d8187625b9a44ab329dfa9d8b7db6540e62924c0e75ee610839a67efba3667f03e7f37962c08b2914561ec1c8d63b4b8d9e4245aad4c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"0b6e7ada8b07e09d2bbf2cae0d8667c0a0876e3d77876958dae3f95e2c98e74c078c663a1fdb326f9bc46abc3c2d86c518cce4a170ad1128e3f20702410eabca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-linux-x64.tar.gz\",\n            \"hash\": \"454a11d87199be6fcd5f97f28b0f9c2f15c0288dd0759dc96ac2c730697b9e6514a19bbfc06185ccb4289dd11681ea5e9cfaf6f3676040e36d21e9b90282af8d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-osx-x64.pkg\",\n            \"hash\": \"91a46e708d62ef7939abe822fb01e0b6d711099634c271ca78088e40749c87bc24639ddcd08bc0622f8459becaff059b9819c32f76722989689102c85bc4e997\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-osx-x64.tar.gz\",\n            \"hash\": \"4c3749fa0c64bed3ce1db05af3c98b2769b0d144977283fb887e9fa836fb6a7ec97e34591192c2c1fee3215b29e0f8e198e34a1b177c4e19ecb42743881ad819\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-win-arm64.exe\",\n            \"hash\": \"81879297d270ea0853a24c22f79b266cb5bfba1d9cda57d7379eb9c6e6d78ef991c7ee2772e948d6a857df2ce4186b39647a798ca59a154621d5ffc6be949173\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-win-arm64.zip\",\n            \"hash\": \"01f7f96bfff6394a8be2da382bfbdbc3687d4199c5dbfee2771f6fa6f4608f8201f26549ef0ce47ec6c22b43a66ce1a1e2be36914643fbe327dd58a3aa73e573\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-win-x64.exe\",\n            \"hash\": \"4df0402bac9092e6c5ad6369196214ec99efd8dfc4c005da0b6aa025e529a8fd892f0fd57fdf8fe46940f4384128732ec2bf560b0e61c2b8351aaca38a8eef8f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-win-x64.zip\",\n            \"hash\": \"3d0e3553d533725de7fc2a35ef9958f937683219ba8fa257213593ff31bd40beb8f5fdec8387603951a5b9679439ee0d94eea0bb399618802aeeaf332010640d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-win-x86.exe\",\n            \"hash\": \"732d82dcdfdb15a14b0d9c380708ca5ba9a6d2f46a46d92e316fb5cd77f4b1ff0bbcf56d462b6e9a55d4545561632b2b003a989a92931660f54cdfa915dc5f41\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.9/dotnet-runtime-5.0.9-win-x86.zip\",\n            \"hash\": \"d96ac9d430b4b530b81b481aceefae9ad17d4509ace50d930114ae5787233899c59c194ee0059dffdaf37bfb17fe56c4ccfe5b2861ceca7425f7af765c57097b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.400\",\n        \"version-display\": \"5.0.400\",\n        \"runtime-version\": \"5.0.9\",\n        \"vs-version\": \"16.11.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-arm.tar.gz\",\n            \"hash\": \"432802c0a37fcc005bac98f7a363ff1484f3c0721c5202c9ed7761e1ae0d8b8496fe7be09a640da55c34bceb9eb63dfe509c5397cbc7afd44cc84ad4bf9f5e16\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-arm64.tar.gz\",\n            \"hash\": \"de0cf29ba176529c142c7538ce557b8af1ca978abe3cc6e079ed9cbc8adc41779ad7e28ed519b37e9b16f54381d94fd7842572b3629d65f5494f1ce7bb2a3810\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-musl-arm.tar.gz\",\n            \"hash\": \"4ba03df05e6e79368fcc50657c9ed8d86782249520240390c2ba63f6bfb41954bd45cf7de14f6c4b8e475045a4b5d8ba996c498673b4982175e3952df3875453\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d969a5e18c22c53ed8868895f769d872cfffdd93a0112107eb1305da25251dca8eba358b54fc9ba5f7677fb1bbbdbc815cc665ca7d6198ac12634bac51ddc6f8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-musl-x64.tar.gz\",\n            \"hash\": \"11983f5956bdfb07cf19e74c8bd67c21359825a7fd14bacea12f2f9324d3255b93abbc8b6269402f7781ab0edf60a42f908e0c10f3446346dbcf01d076da2032\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-x64.tar.gz\",\n            \"hash\": \"4d1a92e0885ade03de0fdb41c27cfd948ab749a2f3e686c4a9dee314888c19d76efa6f8663a7aa7eb56cf36f508638c1a1f01c845d1acb19d8662d6ae365d572\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-x64.zip\",\n            \"hash\": \"e1a2ba7eec471f32fd8b743134ba56c9aed00fc1e5625b5e9b0e728417336f585a5bc4d92caae3a032738b1fd1d1527e5edd797482427066537564dbf15a91c8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-osx-x64.pkg\",\n            \"hash\": \"2338e2c7bf7de311f597d2e1681f7621aef12a0f4634470f473320f44944b9bd31f8e98f879dbe98e19bf9ad1b7672c6773a0a2a3fdc49c4a7c91586efdc54c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-osx-x64.tar.gz\",\n            \"hash\": \"8f4ad02e6e46f6dccdde18d06f41ab702f11833e76d2b0eadd245e22d9636ab49ee864b11e19bc1c20db00af58b60e0cfb6fb1e94f8cc18497c76a83d4aff3fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-arm64.exe\",\n            \"hash\": \"ff64691c370f8b46df98801892d42ced8204932a404b77abbd1b4c69dab50da4fea2bcb65204c305cb55ad636d2644329f6211a3fda6b2f12249d322ed5e498a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-arm64.zip\",\n            \"hash\": \"ce97ce1ebb1a925c85d024ba6b01591288c06077891f33031edd12d85ca582259a75dc89dd499a17e8c35dafbc7ee62271ee0dab61f31310bececcde371354af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-x64.exe\",\n            \"hash\": \"4c8887fdbab41015c00aeda179965e752c063284b88797f131617ee2c4246945975cf90886161d9e010db7d9a068f66ab37b66783b69129f0e5470f3225f96e2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-x64.zip\",\n            \"hash\": \"169640641622c76f3f78eeb33f369286b0b487be635685a7653e847a8cda8e5782d8803d5f993a7d36fb0d38dd03a0576d97413ed23b0e2cbbd67d4c65de9f94\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-x86.exe\",\n            \"hash\": \"981b41965c174c9cdfe078a6ddd6047f0ffdeb66f66d04e1d719cf84ceef0c7487885da99d42bd628bed93b80546ba97d69cb1f30d85c0c5fab6ff45a92c001b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-x86.zip\",\n            \"hash\": \"081afb22c49c44e6a2fe63d78afdf8398298448db2c21244567149fc41e617ef2ac51fd9a6c918954f3d6d2bb5e65967a46d61e62d546b14a3b5718eee792bc5\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.400\",\n          \"version-display\": \"5.0.400\",\n          \"runtime-version\": \"5.0.9\",\n          \"vs-version\": \"16.11.0\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-arm.tar.gz\",\n              \"hash\": \"432802c0a37fcc005bac98f7a363ff1484f3c0721c5202c9ed7761e1ae0d8b8496fe7be09a640da55c34bceb9eb63dfe509c5397cbc7afd44cc84ad4bf9f5e16\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-arm64.tar.gz\",\n              \"hash\": \"de0cf29ba176529c142c7538ce557b8af1ca978abe3cc6e079ed9cbc8adc41779ad7e28ed519b37e9b16f54381d94fd7842572b3629d65f5494f1ce7bb2a3810\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-musl-arm.tar.gz\",\n              \"hash\": \"4ba03df05e6e79368fcc50657c9ed8d86782249520240390c2ba63f6bfb41954bd45cf7de14f6c4b8e475045a4b5d8ba996c498673b4982175e3952df3875453\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d969a5e18c22c53ed8868895f769d872cfffdd93a0112107eb1305da25251dca8eba358b54fc9ba5f7677fb1bbbdbc815cc665ca7d6198ac12634bac51ddc6f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-musl-x64.tar.gz\",\n              \"hash\": \"11983f5956bdfb07cf19e74c8bd67c21359825a7fd14bacea12f2f9324d3255b93abbc8b6269402f7781ab0edf60a42f908e0c10f3446346dbcf01d076da2032\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-x64.tar.gz\",\n              \"hash\": \"4d1a92e0885ade03de0fdb41c27cfd948ab749a2f3e686c4a9dee314888c19d76efa6f8663a7aa7eb56cf36f508638c1a1f01c845d1acb19d8662d6ae365d572\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-linux-x64.zip\",\n              \"hash\": \"e1a2ba7eec471f32fd8b743134ba56c9aed00fc1e5625b5e9b0e728417336f585a5bc4d92caae3a032738b1fd1d1527e5edd797482427066537564dbf15a91c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-osx-x64.pkg\",\n              \"hash\": \"2338e2c7bf7de311f597d2e1681f7621aef12a0f4634470f473320f44944b9bd31f8e98f879dbe98e19bf9ad1b7672c6773a0a2a3fdc49c4a7c91586efdc54c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-osx-x64.tar.gz\",\n              \"hash\": \"8f4ad02e6e46f6dccdde18d06f41ab702f11833e76d2b0eadd245e22d9636ab49ee864b11e19bc1c20db00af58b60e0cfb6fb1e94f8cc18497c76a83d4aff3fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-arm64.exe\",\n              \"hash\": \"ff64691c370f8b46df98801892d42ced8204932a404b77abbd1b4c69dab50da4fea2bcb65204c305cb55ad636d2644329f6211a3fda6b2f12249d322ed5e498a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-arm64.zip\",\n              \"hash\": \"ce97ce1ebb1a925c85d024ba6b01591288c06077891f33031edd12d85ca582259a75dc89dd499a17e8c35dafbc7ee62271ee0dab61f31310bececcde371354af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-x64.exe\",\n              \"hash\": \"4c8887fdbab41015c00aeda179965e752c063284b88797f131617ee2c4246945975cf90886161d9e010db7d9a068f66ab37b66783b69129f0e5470f3225f96e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-x64.zip\",\n              \"hash\": \"169640641622c76f3f78eeb33f369286b0b487be635685a7653e847a8cda8e5782d8803d5f993a7d36fb0d38dd03a0576d97413ed23b0e2cbbd67d4c65de9f94\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-x86.exe\",\n              \"hash\": \"981b41965c174c9cdfe078a6ddd6047f0ffdeb66f66d04e1d719cf84ceef0c7487885da99d42bd628bed93b80546ba97d69cb1f30d85c0c5fab6ff45a92c001b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.400/dotnet-sdk-5.0.400-win-x86.zip\",\n              \"hash\": \"081afb22c49c44e6a2fe63d78afdf8398298448db2c21244567149fc41e617ef2ac51fd9a6c918954f3d6d2bb5e65967a46d61e62d546b14a3b5718eee792bc5\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.303\",\n          \"version-display\": \"5.0.303\",\n          \"runtime-version\": \"5.0.9\",\n          \"vs-version\": \"16.10.5\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.10)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-linux-arm.tar.gz\",\n              \"hash\": \"b2dc54572f89d3c995a2bea9d8b64c475f5af9eedab280149243c4efe3d71e04c78db8a94f62e4e692101996aa3a4fa5107252354af5ff8eb1c0e831666a50a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-linux-arm64.tar.gz\",\n              \"hash\": \"d7f698d359d59d3502f007a1f2d043172d871e6ed795a60ee41ec3dd41ff9e63a5734a760cf4f1f534035bedbc73f4f300615c7aad52c201adee9723dfbdddb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-linux-musl-arm.tar.gz\",\n              \"hash\": \"14d4b8273cbcefc07b3e5475661780b88bcf17b7312c219faf479c2e52eb7ff1623d5dfa003555d137268ac920a6b6c476a84fd886640a726cb3ee1c4b944265\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1201cf0361fee14f7f641616ba7869fe4129f639e215610d9384731cfbd728f8b5523baa76ad2f2b6ac3c33dee4e6dc1896a9d270a4004664c231298190f2474\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-linux-musl-x64.tar.gz\",\n              \"hash\": \"3d9d32e3287417e0135c8f5a4ddeeafd3698eabf6bf0558a7d48114fd129acb8b2b8f1652e9a56b27a4881a5d525f14a9bf1537a47caa56f6539e9cad8f2542d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-linux-x64.tar.gz\",\n              \"hash\": \"3550ddca26d553904f65e759587432c2f40755c143323e4367d44ce176913e8fdfff79cdc0470792b773f28aeffee751d79d7b5d0f9ea762537c8c44e711e552\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-linux-x64.zip\",\n              \"hash\": \"3514a93184177a2e99714cabdc2dc94e1900a20776d57ed16336781431632031d4b19452a00dbef00b33401f2bd527158289b45181801655bf3d64451cedd288\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-osx-x64.pkg\",\n              \"hash\": \"35c6fd926e8fff18b6d35cd3d852d2d480a8bdb3c80f883740c1d73bd5de9a70e33bb0b3df34dd085c680a4221d276a76c684c91c7cd59ad2674a63c598801fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-osx-x64.tar.gz\",\n              \"hash\": \"22717c133976fb8696ed649b2d8f127d54e9d21fbd564141e6334047c6705af70307dbdf704ba3365ce520ae2f0ba660bb84845a76031c02d141379ab78ffa04\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-win-arm64.exe\",\n              \"hash\": \"82d257dc0489fcb5daed6d20809a785d034ab44c415a4729d0456dc924e04e3c22654e0464d03d585febc2e26f40501cf13492e6e29ad19643c9895e7692f739\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-win-arm64.zip\",\n              \"hash\": \"28391c59dab0ff1e8a66d9fc697a710377b565001dc1e07bf7d6f6dcc9718c7a72b0d525464493dd8ebc468c085d19f67b3b623034ed303cc23b74248bcc8ea9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-win-x64.exe\",\n              \"hash\": \"8c5f18ba241a8730ae880a8ad3350c721f89d7f9aabf4b674f63c326c4578bd7ed958a8c0942c81c95e497a780f0f37076889a7ae88940040419b17d93cf3b14\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-win-x64.zip\",\n              \"hash\": \"8ce18ec56547bb377a608f634b7124639a4a7534278e1aacfbf2bc9121974ce095c1c5d6b54caad87362d50fc8b4c32fb80dd4611cf5627485356f9126966486\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-win-x86.exe\",\n              \"hash\": \"3cd7be10c6a3494d14456fa7d7d773a1b777f5447bb45ad66d4840b5e10e81c3abb4632318a9e738d1e8f5fb9cc4fbc5e08aa41fa695e2bfab12dc278d16cca2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.303/dotnet-sdk-5.0.303-win-x86.zip\",\n              \"hash\": \"fd3e9886f49ea2fb199420c285819fa9b1e9fd622b4f018b428003d46053dde437fcba04fcd123ecde09127733c630d7518f8db5623c5894423570889fe96e56\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.206\",\n          \"version-display\": \"5.0.206\",\n          \"runtime-version\": \"5.0.9\",\n          \"vs-version\": \"16.9.10\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-linux-arm.tar.gz\",\n              \"hash\": \"6a4c5aaa35b77aa3f4ca32b361f2c44d2138aa32be0825a076034574878e72c26f9102da62851960ab5eba1d99c27df8967c9f69dfc040f8307f3e0db43b6154\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-linux-arm64.tar.gz\",\n              \"hash\": \"6b0dc667c31217ac11202a82d63d378dbf8ddc17b7f5b8352363caf0f60873af69a3f598869d7baf9234ba8f6bd408d49e17682e975a20d7215ec92624cc5c0c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-linux-musl-arm.tar.gz\",\n              \"hash\": \"8decd18d4f1b70adac8b6bde1b68df6ce87eab9cd023039242b6db946a446b5a88c4335610e3cddb3a010040631c62b2f6b88c44b3142e84654cb4293dda827e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-linux-musl-arm64.tar.gz\",\n              \"hash\": \"70c6b97b91bf52c3e8d83e565eb49e5c7db2f9b050efaf09b4c7adbba457c5f39075eb341d4ae6f0289d1cdda18b1121670a856adeede1b238053e68fc114ba4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-linux-musl-x64.tar.gz\",\n              \"hash\": \"0268b8ec461a4ea1e794ce24ebefb7b5b0193e7b983fb9f19261e800d8f55e3bcb71c84fd96a29f4dbf266d8c669f59f0554a6e2a170028e6032e6b4439802a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-linux-x64.tar.gz\",\n              \"hash\": \"e3889cada267847317c8f8a4f2168be0782bd0740c710acddb358d1109c52abe894d44c85c9bc0efeaaf47d06ca3fb012805a85f84273ca77236993ac3ad2bef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-linux-x64.zip\",\n              \"hash\": \"dc29274a040c200dacf23a05f8f998163bf2c28fb7ddc25fcaaf8baaf586381095d69e14c5b9be99c659d938179375c713a1d7bfe0ec8e319d21e69364645e16\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-osx-x64.pkg\",\n              \"hash\": \"7dc3fa81df7e46c9021472edc9c7f687b01ba0aed157f9c2aa7fb721438968bd476123079bc8c2fbc487914d884acb0c1131001ce68bc4bd2812f35d8fd1043c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-osx-x64.tar.gz\",\n              \"hash\": \"2a1d316306d3825316b27559fc613ff3bddaf6a538a84714f5b4786c036285d5fb1cdf9bf93e1c1e63222c8af3d387264f0155ca365c7e04977e66fea417a44f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-win-arm64.exe\",\n              \"hash\": \"0963dfc3370ce68bfca4dd51e2bc576b16fc1b7c9c8d2d6a6e031f6fa218090ec1c51ff29aa7606f4df4da355b6a6a344ea11b812282502f8ad5b6464c0d43ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-win-arm64.zip\",\n              \"hash\": \"4b093cfa17ad859c74f374c27837f2e0225b425990a90376cba2f981b05bd6d1b24a8e69831041963e47b5413d608f6cdd7ac55adee0742aa7a9861b12afd52d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-win-x64.exe\",\n              \"hash\": \"7904408d8fb3d83f57457668ea3cf22f5f41d168e89c77d52b86df5e8abb1550ae5e781976a4096584a86bf7f085e99952d25413e3562e1974a17d511d20827f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-win-x64.zip\",\n              \"hash\": \"fba8799d18d4d084657bfe77cf5998b49a658b3b99480afc891a22ed5f52faabc88f4411eddf2120167b94334aae9b9232af86710db5be604f5fde8136357e92\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-win-x86.exe\",\n              \"hash\": \"76fb34405c0640499afe498508613e71c325fc4c039e636aa2d8b0497411c937dd1bfa407bbc2e2fd558da61fff8efd726c8314b19583a277afd156fd84d9fa0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.206/dotnet-sdk-5.0.206-win-x86.zip\",\n              \"hash\": \"20ac4fa46ef97138853e49d1bf726254704b22663f11a1bd8532ca925d70b677155e1030e629a563b1bac90990b8d5f206ea2063b901e215fb120ec8c9441af2\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.9\",\n        \"version-display\": \"5.0.9\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21196.9\"\n        ],\n        \"vs-version\": \"16.9.10, 16.10.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-linux-arm.tar.gz\",\n            \"hash\": \"ea8d15c3db26b11fe1941a15996532906a6eee3ee281ab9b3153cbac79d108f59979464741a3bfc5b7cf959a030e70cd2d3a2150f49c2334eb788f1778cd1b5b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-linux-arm64.tar.gz\",\n            \"hash\": \"7bad5fa5fb8dc7eba9babc06d68b170e127df8d5729adf26530b2858aa4f411ca35c4641da0b0b13c7340fc5843e3b1d70b2038eabfca64d598e06fcf1b47edb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"a98d3f035a610b7986bad618d124aff3128d7fd2eb05abe0806f9e2182001e3f2008bbdf4e944b6b9af38894590ce1cf927e5c3ae0aedf726ec4594d05e14d4b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d3145d3500747b39c7b1934cbc352420a0df9142bcb11dcac8b7144273c2e4dbb8d997d086b4fadd741239bde74062afd41539f7d75a57c1daf5d373e02e0e1e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"a143033b6dcc3de5f4ca44fa0f64bd72b93ae09184fb773d6e8d809fecd495b64040a15d9888f1209dab825adf21e76a741271ba16dd84312ca0640ae3683085\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-linux-x64.tar.gz\",\n            \"hash\": \"67ac99b8f631684961aa2e887ed5d6b9cc301b06a1842ac212791860bf6de145831228df5f57eca8a97e16e569e7b5a308fd20d82f11569c375c689fc932dfff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-osx-x64.tar.gz\",\n            \"hash\": \"422a509a36e91573a9c6122a08dcac40c8473cac5d5e5f3c6d8c66b50dab5a9d3713b8096314e1ac8c3fef67d4bd8082bbde2a3004df3caeac9b0b292714c8cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-win-arm64.zip\",\n            \"hash\": \"58bb496ec1eae464c5490afbb0b91a631bb46fa03d8c737c6eb4648e24816d4e194fe92665d88f75760574948f9de728efcdc9171190366eb17975dcef6e9bfe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-win-x64.exe\",\n            \"hash\": \"76edd81508c1306e3113a9eb4101081f689eba2e784751d21bb2d33c8c783b2d2899d69e12fa75fd34e05ec4c4ff51cfbd3a28678e91133fcefdb0d8f15ebef5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-win-x64.zip\",\n            \"hash\": \"a53a41683821e1c21a72966d9564da4961780b0cdefe80c9511a9614dd42677cd3ae74cfc2aa361c8910772aa5616a01321121ec7ea54e70bb1786e305df9bbb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-win-x86.exe\",\n            \"hash\": \"86a7d2c34f3f33a8123538e4d4dc150063f370f7c913d2def78f9ab7b25c48d7aed1d5a0e5422dd911d46bd38ec1b7eb798a0586c583ac301571ee45f71e393b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/aspnetcore-runtime-5.0.9-win-x86.zip\",\n            \"hash\": \"fdabdbb098798fda6fb18aad7c729dc06cf79300f8f892b9e7b9e35bffb874cbea7779f47306bf2ab144e259eded4b007411d27aceb248a9996249b1bf04efdb\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.9/dotnet-hosting-5.0.9-win.exe\",\n            \"hash\": \"8724268bb21cb2060ee55bf65bb72c744b59764f548fbff5d3871fbcf5dd055c12bed91318a4867a66d20fad2559c41b780cd6316d019788b51b0ca390e472f9\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.9\",\n        \"version-display\": \"5.0.9\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.9/windowsdesktop-runtime-5.0.9-win-arm64.exe\",\n            \"hash\": \"3784c340adedb8197aabf184c62719d2e09ca59dc36d8bbbce9d551f5a6933dbde4a8bab93e8cb7095f61a9cf2b1865ed3b35447851652ee10f5ead5dfb2ad5c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.9/windowsdesktop-runtime-5.0.9-win-x64.exe\",\n            \"hash\": \"132d91f0e552ac3074e222c12ef8c5c7fc5843fd55696627f0114ae18d8e00301eeacdbd2366345d646cf48dd1ca91c22a3206ce04202939e44849738e6058a7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.9/windowsdesktop-runtime-5.0.9-win-x86.exe\",\n            \"hash\": \"e17b6d665daea5d48dd1679f7b0049a8e18cb4bb3f9f5266ee72233cf76709b4f8a3eab82ea39de56052decc06008482a180d5a1978c821172a6e7edf7776185\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-07-13\",\n      \"release-version\": \"5.0.8\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.8/5.0.8.md\",\n      \"runtime\": {\n        \"version\": \"5.0.8\",\n        \"version-display\": \"5.0.8\",\n        \"vs-version\": \"16.10.4, 16.9.9\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-linux-arm.tar.gz\",\n            \"hash\": \"32eb73beb20e1bd4fa7eb35be779fa962df68921da14f9100a033911c40afc6c61ac99256b0d54cb35547f630bd7c0c7658b841224c9798e621bb7326ba0213e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-linux-arm64.tar.gz\",\n            \"hash\": \"032fe4ac40fea1eeef871316da55cbfaf787a7153a0a923359cd1bcd5411b367856fb4bc3dd8c4c65d252ae4be333277e8f613966e3527866ad18f162f718c6a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"94d9960b2b347f4ba7db86a528ae7fb62caffde84b77e6a3a6a4b363344122e9818855be7e2cbbceeb622df3b51160df5960e345d74642751de5b0a0ce63a51c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"38e46af7768b543827bf2547f829f37915d4b23c029fae51ac07673ae5bffa62e987c9cff0cbd0dae7213f1f5b0b4a6597cf53eefd4f8d8aebb73a3ce4e3a1d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"3763a6eb74c176dde843eeeebc37050dec8beaaa2e0d2205a9e010c6cdb1ed57bf0b44b6667badea5f9bee763c3fbd13904cdc4d4b156754fe488aef0502ad34\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-linux-x64.tar.gz\",\n            \"hash\": \"8789609f3039dca1d0dc19562f23bc9bfe5d513a2d10639a8a779afe7656447b7ee953f9a8d9d0b07ba6ca4a346770c0efb5a34e5240b5d355d4d8198220e9b1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-osx-x64.pkg\",\n            \"hash\": \"01e87a35d7c6656f53dbe01b95cb8e3a3b39193cc9815ca304bac4e39ae4d8df99a9cb63438554023491f260bd16283c62ca083cc0d7cedae1cf1a6a047666ae\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-osx-x64.tar.gz\",\n            \"hash\": \"886d13f4c4e05988d984e92743f05b8dd7b38b6a26b8c0f5b9490e6015d0ed7e4a923509ae6749bceaa1d24ac96fb137b566b99ed22ba20cec48eec9a3d26909\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-win-arm64.exe\",\n            \"hash\": \"bb0b05aa3cd76d06aad23267a4da9de0067355a4b794ffe22c45e8a189c872cf695defd4de45282043426a589e1c74d1283818133c569109b3a79248539888ee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-win-arm64.zip\",\n            \"hash\": \"640186064b6dd7066600c1004c425cb51d1ac6dc3b191f0dd23d63cd9ec89a6aa5f45ce89cfa487ad053bb27acc3075fee2a5c1b05811c449ac13c00e83cfc59\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-win-x64.exe\",\n            \"hash\": \"50668c4d087b6e03260e5f24f3494ddf701fd085dc6e257e7c7193d2384ac1669d5bf7dec19f6c1c087124d5faccfdd34076d792e882a5fead149c077f5d9cad\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-win-x64.zip\",\n            \"hash\": \"dc0d7ec2c033514d8e884bc00f518368f73b10e70d786bea445cc27df694f2d18aa34532b224657e440bed013fdd4f9ba35a44bf6ecb5d99252fe305f003688e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-win-x86.exe\",\n            \"hash\": \"ef317959a378768c68fe6b4eaf060f12289e6b79062b52d39d2f9aa645e20b66c1e4cc6a2e90b0bfb376821091c57aeb95e7abce4924f455d54a4cce3a694711\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.8/dotnet-runtime-5.0.8-win-x86.zip\",\n            \"hash\": \"be393726b5dc42be7ad35216331bacbc25fdd50dcdac903468fecdaf043fd9df221bc0a54737ee3c22d2fd271c3b9755297771105518c8bce3bd4d0bcbf5adf3\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.302\",\n        \"version-display\": \"5.0.302\",\n        \"runtime-version\": \"5.0.8\",\n        \"vs-version\": \"16.10.4\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.10)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-arm.tar.gz\",\n            \"hash\": \"31298ab7f165bb0c5be35de25d7f2eb09ae02422ccf23aa664a40c4828780d9e0f00a91dfce1e8a54bca9f88a90c361ed697343d92d467b7509c6612a8e25952\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-arm64.tar.gz\",\n            \"hash\": \"56bbe76febccdda15405d9c7037e73fdd3a7e39d7057d76b89899ebb32bf6f180dad0ecc9274f765439dee511629a87598d8c4d61e3c8cb93c703ed0430228ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-musl-arm.tar.gz\",\n            \"hash\": \"59cebe98d5a2e02c23ed01097caf96b69d577e4581467148084fe1ff64cde880183ec1616f3e90526dd51c3363d4519b3cf3204676cf4792249930fb595fd292\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ceebb77d4a0e6b833ebeb2b8e88d063f94bfa1a18a8d8fe761a52b10e15a18beb7fe61a3db2954385e92e3bd122d00872b98c703497f3ed44382ff99c09b2695\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-musl-x64.tar.gz\",\n            \"hash\": \"73ebd0acba0c3d4c8b55cbd9888f2793de074d89a3e413c3af24cb964e8a60a101d03142dcae6af50a240d065ce77993ded231f53020d681501a8a45bf003425\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-x64.tar.gz\",\n            \"hash\": \"c80df1f2208f07a76e6bc123aa0fe94879e202dbab9006a5bcd6ec8508e58aa9da5e2c7736f45a2c307016bb6356e8c5ce39cd4ca65d732091d7f46c7eacc397\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-x64.zip\",\n            \"hash\": \"d6ce4df4c22280c62122a937df3cb7134ea8b8a4d8204b93dffac3d7a690265cfb2d72f33ccfe1685d1032b2634f5b4c12d6a7f14570b197acda55395daeee3a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-osx-x64.pkg\",\n            \"hash\": \"a552742242140d37d2ee6260001b19a5835f27c18fd9cfbb4d371148f7f625fd66e8f41c343caabc684dd096aee46b087723b05462d22351dd2411c5d5c3f1e4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-osx-x64.tar.gz\",\n            \"hash\": \"19360f4b82422b768cb15268edbac9b2cfef77a31985a5b75a46222a20ef2434ad263fa5ef95f1dba000b8bf5e15d99a698575f8803052596a54a3d8c67b1f16\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-arm64.exe\",\n            \"hash\": \"89818b91d3488cb6d8ddd2f9296a639706d0bb84b2588c84cd63c4846d82d04bed7a453761c3cc0a9bd27c25bd97c7638c7e4d209f888081a3a73bdb632f4606\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-arm64.zip\",\n            \"hash\": \"eac0dc95ba2b3e3e382c1173f7c2f94bc679129c39080f485975defb616b28ccc3266a6df05c05ba040bda4a51c59a85d5f823ad206aa7513b9a386829580615\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-x64.exe\",\n            \"hash\": \"7d9b0bc290ec0972b4f870e3768fe3c76e5bfec3040cf66f6f10aa6b9de97cb3e2f256af4f6b2fdec40a9419e0619e7ed73c3de53cab880b7eb3be8578c593b7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-x64.zip\",\n            \"hash\": \"df29733e00d30abced40feb7b637fb45f2d9ac4b36e3d55e4a59e051bb15d0dd680ccd1317e59ad7bbbe51b04f802edb75c29b4aecc1a3db6cd7ed7e5d0cbbc6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-x86.exe\",\n            \"hash\": \"2e58ef0d439b8a243acb32a8e0c1a6e7b8431ec1439c5ddafcc83613d9f9ca1fcea2ceeed926ef54f4d4b5c8c400d49ce3de4ed388c993a1b111ae5aa8266332\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-x86.zip\",\n            \"hash\": \"1a97fdb386c67030cec36e4198dcd83b28b62acec5588b3732c86838b1f999c82cd12c99b276c715ab36db0fb270d0f7d70f796eb820a9cd3835b267e3da4e10\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.302\",\n          \"version-display\": \"5.0.302\",\n          \"runtime-version\": \"5.0.8\",\n          \"vs-version\": \"16.10.4\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.10)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-arm.tar.gz\",\n              \"hash\": \"31298ab7f165bb0c5be35de25d7f2eb09ae02422ccf23aa664a40c4828780d9e0f00a91dfce1e8a54bca9f88a90c361ed697343d92d467b7509c6612a8e25952\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-arm64.tar.gz\",\n              \"hash\": \"56bbe76febccdda15405d9c7037e73fdd3a7e39d7057d76b89899ebb32bf6f180dad0ecc9274f765439dee511629a87598d8c4d61e3c8cb93c703ed0430228ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-musl-arm.tar.gz\",\n              \"hash\": \"59cebe98d5a2e02c23ed01097caf96b69d577e4581467148084fe1ff64cde880183ec1616f3e90526dd51c3363d4519b3cf3204676cf4792249930fb595fd292\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ceebb77d4a0e6b833ebeb2b8e88d063f94bfa1a18a8d8fe761a52b10e15a18beb7fe61a3db2954385e92e3bd122d00872b98c703497f3ed44382ff99c09b2695\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-musl-x64.tar.gz\",\n              \"hash\": \"73ebd0acba0c3d4c8b55cbd9888f2793de074d89a3e413c3af24cb964e8a60a101d03142dcae6af50a240d065ce77993ded231f53020d681501a8a45bf003425\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-x64.tar.gz\",\n              \"hash\": \"c80df1f2208f07a76e6bc123aa0fe94879e202dbab9006a5bcd6ec8508e58aa9da5e2c7736f45a2c307016bb6356e8c5ce39cd4ca65d732091d7f46c7eacc397\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-linux-x64.zip\",\n              \"hash\": \"d6ce4df4c22280c62122a937df3cb7134ea8b8a4d8204b93dffac3d7a690265cfb2d72f33ccfe1685d1032b2634f5b4c12d6a7f14570b197acda55395daeee3a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-osx-x64.pkg\",\n              \"hash\": \"a552742242140d37d2ee6260001b19a5835f27c18fd9cfbb4d371148f7f625fd66e8f41c343caabc684dd096aee46b087723b05462d22351dd2411c5d5c3f1e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-osx-x64.tar.gz\",\n              \"hash\": \"19360f4b82422b768cb15268edbac9b2cfef77a31985a5b75a46222a20ef2434ad263fa5ef95f1dba000b8bf5e15d99a698575f8803052596a54a3d8c67b1f16\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-arm64.exe\",\n              \"hash\": \"89818b91d3488cb6d8ddd2f9296a639706d0bb84b2588c84cd63c4846d82d04bed7a453761c3cc0a9bd27c25bd97c7638c7e4d209f888081a3a73bdb632f4606\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-arm64.zip\",\n              \"hash\": \"eac0dc95ba2b3e3e382c1173f7c2f94bc679129c39080f485975defb616b28ccc3266a6df05c05ba040bda4a51c59a85d5f823ad206aa7513b9a386829580615\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-x64.exe\",\n              \"hash\": \"7d9b0bc290ec0972b4f870e3768fe3c76e5bfec3040cf66f6f10aa6b9de97cb3e2f256af4f6b2fdec40a9419e0619e7ed73c3de53cab880b7eb3be8578c593b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-x64.zip\",\n              \"hash\": \"df29733e00d30abced40feb7b637fb45f2d9ac4b36e3d55e4a59e051bb15d0dd680ccd1317e59ad7bbbe51b04f802edb75c29b4aecc1a3db6cd7ed7e5d0cbbc6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-x86.exe\",\n              \"hash\": \"2e58ef0d439b8a243acb32a8e0c1a6e7b8431ec1439c5ddafcc83613d9f9ca1fcea2ceeed926ef54f4d4b5c8c400d49ce3de4ed388c993a1b111ae5aa8266332\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.302/dotnet-sdk-5.0.302-win-x86.zip\",\n              \"hash\": \"1a97fdb386c67030cec36e4198dcd83b28b62acec5588b3732c86838b1f999c82cd12c99b276c715ab36db0fb270d0f7d70f796eb820a9cd3835b267e3da4e10\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.205\",\n          \"version-display\": \"5.0.205\",\n          \"runtime-version\": \"5.0.8\",\n          \"vs-version\": \"16.9.9\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-linux-arm.tar.gz\",\n              \"hash\": \"c77099d20d6cecb4b88289d7f8c094e9351c0407738759a2da49c7dab3468571b5861ab27d24b2a22f7619d0edced9d7646e089a41c83a9dc2fb6e7fecd41f22\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-linux-arm64.tar.gz\",\n              \"hash\": \"9fe20b39e396045fd2420b78f89b3a86b69754152968ea51198ca63cb4ba00290dbb12ff028e9ae601aa8d1b93fd82972ce621fea59dbeb22210aaf94e22d1b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-linux-musl-arm.tar.gz\",\n              \"hash\": \"a30b6bba51ca44d3b844e19b6101bb3789425fdc09e509c6fd00d5c904b7110bbf159a57fca3ef015e12badcfeeaa7823d79151b566da1b5c4366943a03ae54b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ba91c07563295c4f2aeb307dbd70a1eda92d7035904814928b34254b259b985e9190b58b233b0235d931cc0a1cde50999db1d464ca6f36ba9c8479ee6cc68e15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-linux-musl-x64.tar.gz\",\n              \"hash\": \"c16436ef5d7933b5afc695ad1ffd171ba37d076b4bf6d5c725f1ce709e135ea65c52c79cbfffd2d4d8b380c7d41d0138627093676a0ba6785187a42e4380a7e7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-linux-x64.tar.gz\",\n              \"hash\": \"baf0fa8090b3517c9695581033a2a8cb5c2ca269b77f5bfc9678a6ff2673295b1defd1e8f9f5771c6d7a794990418d6a8eff7e73a287f4839a003b6a8bf5fc4a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-linux-x64.zip\",\n              \"hash\": \"041d50e4997b3c44bfed7a1d1a66cff7efad904cac420cdd5c68481ec4480289a6f24ab5af38dd1c66f687bba4d0737b0e72eade9bb1698eb496405d3d91c736\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-osx-x64.pkg\",\n              \"hash\": \"973dc628972264f18cbac06c05b614123bfaafcf039f652ae86de780af55a1e65a4c113ef0fdfd3263f4908ee0188efc477bcc2b0802fee2492ae1c7d1bce2c1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-osx-x64.tar.gz\",\n              \"hash\": \"8037dc6a95654e2a12a4d7ceb2f092b9d38c7827528227dfeb7a21a720972fac44e38deb44f355f5457280b6005dd3f0c3d3344bccf2cc4f060b7caafa90c8be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-win-arm64.exe\",\n              \"hash\": \"d9461feb3c0aec257e037b2f415c0221de85c70cc88d77d69c0291016cc6bd48b6d5a8cf1d1f8aa11017c0b5f506f36dcb334a71b5881968e87ef87d1cea5af4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-win-arm64.zip\",\n              \"hash\": \"c4b9331463f55b8cd57fd692ea3d2ff21546399d480d9964f360db3b5e790b96baadbffa44859c8bac05107af36bcd4f13456d48ecfd83150a92a2b76b8affa9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-win-x64.exe\",\n              \"hash\": \"bef9f3d02b28102184faecc40b5630bbacf5c48e3f6920d966c4d9599aa942c3df650ca7885ddcc39416c6ac72f5b75618aed13ed9aefecbe1accdc0f5e03c29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-win-x64.zip\",\n              \"hash\": \"c111e04d7429faae36d77e18e86287fcdb5583542b87ed8a630abc27d90f6fffc657d272a5ecfb3695fe6db262cbab4e7ebc34654cde7817161d1a389fbd9463\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-win-x86.exe\",\n              \"hash\": \"6d48612ff492501be16322524553e030a257e6e1b141dc0d2656a95a30fe6d5777e9a44d1cd5efaf1450e1a293f0bc04da96033710a2e2946151a2d9b40f6a5e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.205/dotnet-sdk-5.0.205-win-x86.zip\",\n              \"hash\": \"3a9dfac92ec7934a81a6ad68809b06c478d22db9df24e44ef919e2af98ab28e127cc4f94dc45b0c2d72d38e48c7e6da2fc81fd03c205251b1a05293e78cd9dea\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.8\",\n        \"version-display\": \"5.0.8\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21169.8\"\n        ],\n        \"vs-version\": \"16.9.9, 16.10.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-linux-arm.tar.gz\",\n            \"hash\": \"c28fde026da0ac999dc82b63310e47e0b9f8979f8bc87a08f863a042f6957400ce7c6f39c223955a7aa094d916358c25fb64b69358feba98f87242ec76e50003\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-linux-arm64.tar.gz\",\n            \"hash\": \"966abfdddd43068fef72cdf3deaf49417a092437fa0ee829b6b3ced23a32246bf3bd0b85feb470fe6c326d54b9a2bee93cacffe603640faa0b935a3cde9e0760\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"daf2c5a59178df65d37397ca8365875d380fd6c410fccde713d72a9e2c28ef361937676336eba92ff17a034ae19c57b3a29780c69f70011a84e4fbfba879a0ae\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3a0c9f76a1879b335bba7015884ae57830e11cc0ec23149b92ab08a3dc28cbfb307446f593741cd32f20452199e691ba0af9d5395d3ab7ff1b8ff6327743024a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"ea4d787e68fb4ab61448aa26894696192329d4e3a98ba9c95da588ec299523cca2d3b0a4e6ea35354b11cfd4ce9da594969806beb34cee249aac76dab46eb295\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-linux-x64.tar.gz\",\n            \"hash\": \"77c9854f2bc947675025a9489baec2587cc9ef95e3be9351060c0d64fe0cede3e9c1395fe700715df520f106dccda9a21f7d21981df70653c49fd20418dc385f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-osx-x64.tar.gz\",\n            \"hash\": \"a51f2f7761a0aaabf1f20674304661161ce0e710c10fc130dfe666db9d9867432cd2f7d5ac3068fad63e725244205ef0a00e4808245c63ddfb8b6adbe145411c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-win-arm64.zip\",\n            \"hash\": \"6c0395644dab217dc569afa1042cefde7ce1c27f43d0c97766bee2420052442a35b1e706ecff3804175c84f545456fed5c96686a5cea9c91d80a4a67d573a43c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-win-x64.exe\",\n            \"hash\": \"db5c39d27dc7d652257bad19076bbc208a3c25cc62a4ab54edbd7149ab4925d0d8a43aaffb94421339bfb7a9a6785d11d3cfde15e3471c45c3c107fcd15a5d07\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-win-x64.zip\",\n            \"hash\": \"a6d2cea03f8c7b185f702d9c47f170d934a2edf955b632529bff404530600246b80e79bc9e1c33978668d63ebaa3058604f715873a3f9eb0912ed23fe0c4f368\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-win-x86.exe\",\n            \"hash\": \"cce4a7d2ae8812ae50777fecb60cb25b6d0a18e8967c331a38077151c8f881144ac9b8629a08fc45dcbbf1732a78609932b085225ae52777328919a52e8e4d7f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/aspnetcore-runtime-5.0.8-win-x86.zip\",\n            \"hash\": \"990de1faf7f1c916a62fe15b87e2a7170238407882b2fb12d277a48a75120929296bf35c2deaf5690206f8295382767e220e92576ea73fab57f019023a132950\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.8/dotnet-hosting-5.0.8-win.exe\",\n            \"hash\": \"ab9231ef77245ff3dbbd38db60ff04a1b7ecd7921ecd8f93c4974620d32a19d188c932ed578ec09cc9b78018df0808da797a91d7352c17d39373220bc50c52da\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.8\",\n        \"version-display\": \"5.0.8\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.8/windowsdesktop-runtime-5.0.8-win-arm64.exe\",\n            \"hash\": \"cd3add14712aac17fb1bdd203044f24d2afa219edaaa30d41513a221b2b8aaed88c9d8909eed7617f839e48a470102bead3fdd7269d04d53fb6839682d574b2d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.8/windowsdesktop-runtime-5.0.8-win-x64.exe\",\n            \"hash\": \"d812994f964d53141075ebee146975187867dcaf911c7fdfe5cebb61f87cc36eaeec0ac4931d958c18274750a247402efd2527e004fc82845a3c081c0940f484\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.8/windowsdesktop-runtime-5.0.8-win-x86.exe\",\n            \"hash\": \"561661909a31c9acb86ad00fbc2f4339bf35f32aa7af3b4dba32ae640d42e6d6ed702b319085e38b1f886da353220b107fc362fcfd52ee0f004e7d0b03c0e7a1\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-06-08\",\n      \"release-version\": \"5.0.7\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-31957\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31957\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.7/5.0.7.md\",\n      \"runtime\": {\n        \"version\": \"5.0.7\",\n        \"version-display\": \"5.0.7\",\n        \"vs-version\": \"16.9.7\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-linux-arm.tar.gz\",\n            \"hash\": \"9bda7ae3cd708ab5b9f3acfa502ff534edc01ed2b77e97ab384df11125092e11aa4c6db143f8df4fb19ea5a4e7d0024579362e1c14bbb6f422d766e43e99cb72\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-linux-arm64.tar.gz\",\n            \"hash\": \"a0c20d1530c29021fe4d483611f3f9b71a605f17b81b96aef5c07878795483ea5dae85a5e18c3ad54147a30897d389d26454298ed60d11944477ecd452c60638\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"a58f232638b142b41645855bbb648c07cc2d369ba680118e6e557139c572f464c5e76959e2f3817107077d043e54912ae7b614bc8f665097331454249709069f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d51e847a3815a5db966116203a512adfccd1d2e375090132437909981f4cda843ea5386c6a5cdb6975383dd9ce33290f1bf1b049514345bcd5f3dcc0ccecbda2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"df66e9915146ca018f8d62e118de190d16ee4db65c3373113168cda61632e5a65d39aa4dc76b0f95673d84c089135c8011f7ad0ea3c2a06d4491cfae810c23f6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-linux-x64.tar.gz\",\n            \"hash\": \"4c91122a69eeb1f840d78ded96930db77d0b2fcaed4c355223d7c45380630277b703fb07524a284f9c7cef008d964ee1ae63b17518713ff30b1b61d13e134c7a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-osx-x64.pkg\",\n            \"hash\": \"da450bd47f8a9fab5a97543b0fec853c833dc7871b798d95993618baa7ae5a57f80d45f253dc31a7221897147e8f59983abdb6800779d79be92f5ef80507bbde\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-osx-x64.tar.gz\",\n            \"hash\": \"3391503567ac3c8d4dc2a78bd7dd51c88f7964b2e003faca1ca0925a979701bca049eca963a029301300b96f5caf49bfaedfaf3e3eea80ced2cf90958f8377af\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-win-arm64.exe\",\n            \"hash\": \"94901c46ea74974a3b42cf3edefa95d949bf56d6c84a664d01761245e01436d85d02189ecfe438929814e1a3fefa20e5484f03efc0874081e5b6c7112b631ea8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-win-arm64.zip\",\n            \"hash\": \"e7d01c0dd04ea0d1c9a45a6bb0d61e3748baa94b41fae42c210e1d482d18710abc46333a3304d5e3eab36cf1f2b8b6dbaf7d8a85984900bd50cd66f66b9c6867\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-win-x64.exe\",\n            \"hash\": \"de7e67dbb0c94b247af6e3ff9c7fd2f0c4cc51762f0db081e5d5da2376e98877f794abbd8016f039324977ab2d40e7d02f8268e1b4cc9a81fed62b9d433d6ee0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-win-x64.zip\",\n            \"hash\": \"da39eae02b0e94d700808392fbb25f0db21584a0cb238ee4e9cb0726c181fd62dd37e6cb532e459ec0d484f63330dba7a7ed2bfea06717f48546d7caedd4dcfa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-win-x86.exe\",\n            \"hash\": \"bc140f75cd2df7f96cbbd870a210eb3387dd87b7bc9062f8f8f1f0d74b0685db41c36e3f3dcaabd72e0aa69b0d872da5f5dcbc7b102124305b19e98f1b111b10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.7/dotnet-runtime-5.0.7-win-x86.zip\",\n            \"hash\": \"1ba7136cc4351a2ef0be02738574dcdf17cf2e6e98c18b5a42ade9e7b5591e295829c19a395f9a09c487c5f5df3c57d9b1936bd9c22f88e1b602eeb157507ec1\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.301\",\n        \"version-display\": \"5.0.301\",\n        \"runtime-version\": \"5.0.7\",\n        \"vs-version\": \"16.10.1\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.10)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-arm.tar.gz\",\n            \"hash\": \"89663ffb22299ad626d3f1d5129e493fb8784e6ed854b128a364407a060eec2979cd7d3c9e4f3df8e47ccb72b98ff8b18e8d53c7fb65b3455faa7344f67417a2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-arm64.tar.gz\",\n            \"hash\": \"56e233b8f35abe80984bc8a60028f4f8dbc8543313a0711045ef13c693e11e706ee4809574518f57910ec2c93bed896da32760c8143a298556dc25478caca90f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-musl-arm.tar.gz\",\n            \"hash\": \"4b8ad2f93c7e5670129f803dcd64e950bf8d7a108cdcd8311a625eb703e0685ef05fb634a747f3904c5d55443f6d6cba0a7aac88d305f8d3a4e678b94ff995c5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-musl-arm64.tar.gz\",\n            \"hash\": \"487a17191594ecf039114231f2fe9cceefc12d33683f8452acc0998f970428d7b00fa1d899ffd132576d1adb5c099c6995392f25b81212dc8c688ddc45ba92ab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-musl-x64.tar.gz\",\n            \"hash\": \"bbb956082e252a204803d133d863e88ea62e732f1cc02483aa3ceeedbec03ef577bd175e4d99d70d19b2257f6946c02e2a7c759523a22c2c3ad7833830188232\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-x64.tar.gz\",\n            \"hash\": \"81cd7a3550a262d5c907030677429fa9a1cb515071274931ab760bd8bb2a14f40c9384c8757e1c1aa681b1de22035f16bf20b41ed208becd054cc9bb1f620322\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-x64.zip\",\n            \"hash\": \"3895394f1609969893d8e64c02864d8c29f19d02c62720e27e0edc3fc2d552ce508d3316364dae5bd75a7bbb6c2a74324bc0731dd0e84429a24942ce9a14e268\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-osx-x64.pkg\",\n            \"hash\": \"00211a592a9b7a465a2a2742871be4c04a44aa8af81787d8f1bf765fcdc0a8674c9e2bddbd432b2ed5686defd0cfc1c5d0fc74a15bc952868c82871ff9cc7cdb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-osx-x64.tar.gz\",\n            \"hash\": \"f0c50a9b2377e215b6a7633568434fe922cc5ed2967fa92d6f135f50cbf97d7703e16abd5eed0ec93397f269a5f940e51565fdf0c7bc775dd4908f2c568fa07f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-arm64.exe\",\n            \"hash\": \"ffa9b7d8326226e68941337c0fe5886e37f4d24204d7741ae1c2e0429d1461d08dba3855b257598c0f18d2508082ceb988ef0de4795ad3762debc5b52d040eb2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-arm64.zip\",\n            \"hash\": \"80a32ba9f2c97b457d34ef809f38001841c97b94d434e75305d29b9cfc70431ef5a87989b3943e01baff1f01b231927fbb153068312bb76dde7cc19b0b8fb482\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-x64.exe\",\n            \"hash\": \"556039031edfac8b3cf3d5432f12eb1e1f09c6c5b0c513bb2dd94086e510da740ba48ae744e12fc53252d6b3c5e1ba311c5b78400c5127496a3060cb7165e20e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-x64.zip\",\n            \"hash\": \"e16e06a9da022c2867aa3dfc0a3d0f278ca59a08991c066ebd3fb4fe8790639b74c9b352922e9b7a58cdce644b5ab0b15d995b8717426f3cd13053bc3d8c1dc5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-x86.exe\",\n            \"hash\": \"b344fbbadab6b71e35e1a5ccbe74c39e8f90feab282d378ad351908709aebbd87141214ac4ec25812978bbc6e49d26a37779004d47e17238b6b68ad1fd952044\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-x86.zip\",\n            \"hash\": \"8fd4b4e00d5506e12a3b214ce9f4142fef42f304d01c359f5551baba7e327768daaf236edf899be83f5cd87d36c9234b8329e97355fc5ea41cb5c903740ea5ed\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.301\",\n          \"version-display\": \"5.0.301\",\n          \"runtime-version\": \"5.0.7\",\n          \"vs-version\": \"16.10.1\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.10)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-arm.tar.gz\",\n              \"hash\": \"89663ffb22299ad626d3f1d5129e493fb8784e6ed854b128a364407a060eec2979cd7d3c9e4f3df8e47ccb72b98ff8b18e8d53c7fb65b3455faa7344f67417a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-arm64.tar.gz\",\n              \"hash\": \"56e233b8f35abe80984bc8a60028f4f8dbc8543313a0711045ef13c693e11e706ee4809574518f57910ec2c93bed896da32760c8143a298556dc25478caca90f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-musl-arm.tar.gz\",\n              \"hash\": \"4b8ad2f93c7e5670129f803dcd64e950bf8d7a108cdcd8311a625eb703e0685ef05fb634a747f3904c5d55443f6d6cba0a7aac88d305f8d3a4e678b94ff995c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-musl-arm64.tar.gz\",\n              \"hash\": \"487a17191594ecf039114231f2fe9cceefc12d33683f8452acc0998f970428d7b00fa1d899ffd132576d1adb5c099c6995392f25b81212dc8c688ddc45ba92ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-musl-x64.tar.gz\",\n              \"hash\": \"bbb956082e252a204803d133d863e88ea62e732f1cc02483aa3ceeedbec03ef577bd175e4d99d70d19b2257f6946c02e2a7c759523a22c2c3ad7833830188232\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-x64.tar.gz\",\n              \"hash\": \"81cd7a3550a262d5c907030677429fa9a1cb515071274931ab760bd8bb2a14f40c9384c8757e1c1aa681b1de22035f16bf20b41ed208becd054cc9bb1f620322\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-linux-x64.zip\",\n              \"hash\": \"3895394f1609969893d8e64c02864d8c29f19d02c62720e27e0edc3fc2d552ce508d3316364dae5bd75a7bbb6c2a74324bc0731dd0e84429a24942ce9a14e268\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-osx-x64.pkg\",\n              \"hash\": \"00211a592a9b7a465a2a2742871be4c04a44aa8af81787d8f1bf765fcdc0a8674c9e2bddbd432b2ed5686defd0cfc1c5d0fc74a15bc952868c82871ff9cc7cdb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-osx-x64.tar.gz\",\n              \"hash\": \"f0c50a9b2377e215b6a7633568434fe922cc5ed2967fa92d6f135f50cbf97d7703e16abd5eed0ec93397f269a5f940e51565fdf0c7bc775dd4908f2c568fa07f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-arm64.exe\",\n              \"hash\": \"ffa9b7d8326226e68941337c0fe5886e37f4d24204d7741ae1c2e0429d1461d08dba3855b257598c0f18d2508082ceb988ef0de4795ad3762debc5b52d040eb2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-arm64.zip\",\n              \"hash\": \"80a32ba9f2c97b457d34ef809f38001841c97b94d434e75305d29b9cfc70431ef5a87989b3943e01baff1f01b231927fbb153068312bb76dde7cc19b0b8fb482\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-x64.exe\",\n              \"hash\": \"556039031edfac8b3cf3d5432f12eb1e1f09c6c5b0c513bb2dd94086e510da740ba48ae744e12fc53252d6b3c5e1ba311c5b78400c5127496a3060cb7165e20e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-x64.zip\",\n              \"hash\": \"e16e06a9da022c2867aa3dfc0a3d0f278ca59a08991c066ebd3fb4fe8790639b74c9b352922e9b7a58cdce644b5ab0b15d995b8717426f3cd13053bc3d8c1dc5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-x86.exe\",\n              \"hash\": \"b344fbbadab6b71e35e1a5ccbe74c39e8f90feab282d378ad351908709aebbd87141214ac4ec25812978bbc6e49d26a37779004d47e17238b6b68ad1fd952044\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.301/dotnet-sdk-5.0.301-win-x86.zip\",\n              \"hash\": \"8fd4b4e00d5506e12a3b214ce9f4142fef42f304d01c359f5551baba7e327768daaf236edf899be83f5cd87d36c9234b8329e97355fc5ea41cb5c903740ea5ed\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.204\",\n          \"version-display\": \"5.0.204\",\n          \"runtime-version\": \"5.0.7\",\n          \"vs-version\": \"16.9.7\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-linux-arm.tar.gz\",\n              \"hash\": \"278f22a80c7a6f6b85fea65bc18b865856404fad37d50ca7dbb36028bf9a34be01e68a03ef597a81179b3ae35f286cbcab1458906e9484abc8fc9d9e0b69ef83\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-linux-arm64.tar.gz\",\n              \"hash\": \"e0be9c1369d46c1a11abbee1b9fe392abceda166d395aa61ab36eaa9bf11609a8a30648f960afd2f0c76d95bff5ee2cca0298cc2e979d15db9270dd7568f0121\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-linux-musl-arm.tar.gz\",\n              \"hash\": \"ea4d1732724d5f29f9801c3f37db0dbcd8feb2c5a270250ad59789aff9159af38192bb67746e7ea3cbdc700cd9608f4b27732fc91ea6f51ceb24515e2f7730b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b7e1de776312942eaa7e64eb77a2e1c4d042cd89850173e8056b5d238ab6b69c8f47a30324e2604ffadd10d2032f4be6b729ee8faddc533599bee8dfeb9603e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-linux-musl-x64.tar.gz\",\n              \"hash\": \"e1768b5591dae962a37c969cacbb54e36fa33bc57b964110e79a4ea184ea93b6593b546c03659c3844e14cd25617afd6ab71f6b5a64ce4a29e70e14de0fb58a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-linux-x64.tar.gz\",\n              \"hash\": \"b6113e62d6546b8d4002cdb64ff983720f3ab7c874c1e0b3017f80a0224936e36d8d40b67bf97b89deea9e39ac78d875a5a25fc576105d5ddeba6ad8a492b5e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-linux-x64.zip\",\n              \"hash\": \"115404318607b6004f917a63e5ea220d34cd9f130c7c4f24a50e9f2dde748296c85d0013ea41f15cc07ec3a8da0c517d2db993df7f56b0367ef178f44ce1850c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-osx-x64.pkg\",\n              \"hash\": \"e5a1a1188518e90fe857e4d53fcd2ccc3b9f713babc83fa93f3990fdd949dd37977f98ae4a359617f286593b94d8515bbecd709d1c2ee4bdb3342ec593e9ab2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-osx-x64.tar.gz\",\n              \"hash\": \"3ff710f974c0cbdaef402814a0531aa9b8b7dd07faa2e18afb3443936cfa66f5bb7a694233f0a63ae07a316acf53c2c71dbdc2d7e0d2943344e0d11033e644f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-win-arm64.exe\",\n              \"hash\": \"329a5f8e378151357c0474f9a941bb9c8cc4cc71e35ac38d14e4e29f6ed2e097709d0affb08ca8194fc787b12c512eae223f96bc9281e3bea6019e6a9e90dab4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-win-arm64.zip\",\n              \"hash\": \"2f45ca71d5007ee5ec4dbbdd5a165a9dcf750ceb388bda5aa1f5d0abc9811df5f1a91c3c0fd0cbee7ce87a2d34babc28d38146ce3637c40ecc2eeeb78a9f8ef2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-win-x64.exe\",\n              \"hash\": \"35f45e93c8dc241af3b767225175c0daf5d3e7116c58bddd17a214aba56288201ff3f2c2e4b946bf4f9a2621446de45ed65c3ed4fa97b0026598923543ffd004\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-win-x64.zip\",\n              \"hash\": \"e5d4184fc9730c8fc2a18c65be0140cc1ee977a81292615013f68ee1b4039f989b9e474bb20a3b51fd39dedd5d094f6b9758762dc98b7d55aa83923f1204a16c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-win-x86.exe\",\n              \"hash\": \"ec0d31c2084a761f4a74dac69f77c0a8cb84eac48dc610e1ec310874ecd896a19829fd53c0d1c3b4ac00711bcd12758758a97c3db2ab41ff7171c5d0545cc6bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.204/dotnet-sdk-5.0.204-win-x86.zip\",\n              \"hash\": \"9f10eda1c9d5bd80cdde0e1973319e0cf02d842fb04190481176e9fe3bb1fa80fbd9d3174c452c79edd702ad2b5d0d7d693129b46914a9feab0938a8d74adbd7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.7\",\n        \"version-display\": \"5.0.7\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21133.7\"\n        ],\n        \"vs-version\": \"16.9.7, 16.10.1\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-linux-arm.tar.gz\",\n            \"hash\": \"0e67d2e3cf594e7290b55d4a0281a5b729bfce96ab12d4c8ce73287a3fbb298c8883fba4d2f7e8f13a78e58ced3eb52933e9068d9ccc2688fbf8174b0c001d36\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-linux-arm64.tar.gz\",\n            \"hash\": \"fc18b588eebac0a40cac2abbbd2755b2e96e3c799fd6f51f10da096e3048f060d1473fe9fefe5269142d697bd01db65c55fb67cc823f8d4461ad195f0691a557\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"f9be0e8ad48f981b63391142193d5dffe25f58f35d0db1b69c00506280f61d543f9197a1fe5b15857571f72efdb222d666dae2751490715e3c03aee32e881836\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"eb976552dd3b6ea289648fb5c107521bf4ee6e53980fed6042207bb5ebc97fefe33f210e5213d4bbc4b1d415a8d8bc02d70e3ba4732c62c8241c0b35a9ec9a19\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"740665d3e4bb1a2c37ca2de9b6a91e2fdb83192927095678d57c3978892658f8401df56591795088d47dc1148b150aa9389277502b1dfc66e71479b16e0c7cd2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-linux-x64.tar.gz\",\n            \"hash\": \"03399412dfa6ec9b75125b38d7d4297e0cb8cb4ae37cfb27d6cc948942763691c61647d83c3a8a068291a389c35fc6a89d375c97253335c6a8985d55fcac8918\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-osx-x64.tar.gz\",\n            \"hash\": \"8610ba8cb8f33a8bc458af7677743d882e14575671ccff4903b3f05c8a8f49fee2221991ca6e6ac167935521580e3d8ab581e2e4edd3f4e7f3500094e4c1f873\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-win-arm64.zip\",\n            \"hash\": \"0c469141bfa3cab95e0841e4d93ee616ccb2641fe7c4e9491d8e7f3f58d413e6626f25af76800bacd478307edbd22b1b7913aaffb0103096250b29ed92cfb792\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-win-x64.exe\",\n            \"hash\": \"6c110caf547fb7354c16c55dd40a1c5e59d5626a45d915599a5ec42bd73901bc1d80ca9d52e0241fac1a7055c25eeed41c73a15f926146f8a0bb771b393356b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-win-x64.zip\",\n            \"hash\": \"e9986ac62e7b28fb09a7d1346b1b1c98e8e55979c4a51c99ff929200c843c431f6a2fea6441432a5f8de82c42692d44cfc69b4ff795806da2c7d4ab9ff460459\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-win-x86.exe\",\n            \"hash\": \"719dc4f37e9e14041bad5f1f4c7645024c18a98ece8ecb743507e824a9d50292ef695caa308d208d5a0f10bc4e8e93085141d763bfeb3a778a9744a45c8d6864\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/aspnetcore-runtime-5.0.7-win-x86.zip\",\n            \"hash\": \"b3151e23d5970fd458e8701f49e85a117107db398878320a5c4dcc92984fccc5642ab2d3babe048453ccba77152501eaedc43ef4402568a8a9c41b3dab906827\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.7/dotnet-hosting-5.0.7-win.exe\",\n            \"hash\": \"a388a3e6aa9f061ea65e8970f5a76c8afa7e429cab3f6e0ef6775f029a49c96e73606abe6a7e48c2d68485b74120d9daa10f5a6d66867aaf3a6afd8eab2f0936\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.7\",\n        \"version-display\": \"5.0.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.7/windowsdesktop-runtime-5.0.7-win-x64.exe\",\n            \"hash\": \"ff06980615041594012dc3882914f464f4844c0184aebd1973be08fc41b26aba077be1c0e8352089311ca084bfc007ebed758bb436f2aeba0f67e0607d7b1e8c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.7/windowsdesktop-runtime-5.0.7-win-x86.exe\",\n            \"hash\": \"01d07853a711f05c5c4e9a1baa557ea0cea60cf0def8bffc4868eecc053d66ca3d1d02e55087e1d04a3851b4351c1d8b1c6c30abd2cbb551c24c1d184d42c14e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.7/windowsdesktop-runtime-5.0.7-win-arm64.exe\",\n            \"hash\": \"82ece7ca80388c1fdda2b8394117f065254b95500ecc005dff720246b55b80c84cc2ca0cd5e68941713cbd34f384d36133b13459b3479b2642ad7b41dac31933\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-05-25\",\n      \"release-version\": \"5.0.6\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-31204\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31204\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.6/5.0.6.md\",\n      \"runtime\": {\n        \"version\": \"5.0.6\",\n        \"version-display\": \"5.0.6\",\n        \"vs-version\": \"16.9.5\",\n        \"vs-mac-version\": \"8.9.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-linux-arm.tar.gz\",\n            \"hash\": \"50fd448e7abbc2830015000e9e02549e3d511f4a098ded6d1948a8ca4684261e4fcfc9f2ef5f044b6f80ea536344025e17d57c1bdeb8daf65058b83ccd6fde65\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-linux-arm64.tar.gz\",\n            \"hash\": \"2f7e8b2654655d0d816e4d2e775098c340edf5edb458af9598f33a72e340268136fe6e2516ad4cfe941d0d419fe30357756f6585bcc151110e37c710284570d8\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"549671ea7a33f75314a3c9e52c37af1068840d64b1c62d9688ac522e9da6510eab23552b1b46357d8da65cc6d85c76c4d537f94379955f6b2066b6c805f6b42b\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-musl-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a8f3cd23cb4c6f4c0712be25fc43797b013981bd37adabbe7f20c53aa00b8b7db86bf692cfc5d2e4d8b3345b1c34e3a1e6cee356768d4f7bf1c20ad3a2a02975\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-musl-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"13316e039b04b04c9def1f3a17c6391fd2fe6a6264528eba24b9cf6967ab292e4c4c8adc4ab2e032586f94e5f0ef0dfcf7315cb5cc324ec672bede0f16713f41\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-musl-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-linux-x64.tar.gz\",\n            \"hash\": \"7aece6b763305fcf6e47e31540830797670287622ec424e689967c8974f80cefdb04961fc8cdf23c67588f3b0804b5e8291f87b06b10f2fc83d48ce0b9700d38\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-osx-x64.pkg\",\n            \"hash\": \"9cd4e1c996f03ef394408794d9fa197291ff524d94fa2b61ceff2964b2ec0bb62e6a9d451bd4f5ea2a67dbbbd1f255fcb767f5b00056bfc628bc8ca94b26fe68\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-osx-x64.pkg\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-osx-x64.tar.gz\",\n            \"hash\": \"a14f8c65d87470daf9a6cd2c0e11bf0b0927440d14701f644faf2169e33498e82c833fd29b84192d7dc9fe6ea613a928f70100a262fc7094b02b82d304faea08\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-osx-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-win-arm64.exe\",\n            \"hash\": \"f2031e170bc4c9fca1caeed1c4c31fd0c15cb473777119b543d3d847c02762eb975413e745f1ed326a102f5f54093970243203dc3b903e66f558da52655c1624\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-arm64.exe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-win-arm64.zip\",\n            \"hash\": \"26e2c591de760dc0e16e34310f76c7b1b7193b8255a500e27656eda2e0ad0aee6ac8ee7dcf89ab03d5623bd70f6f28dcf7e73c649d7c0a5e8e98789517c9a1ac\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-arm64.zip\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-win-x64.exe\",\n            \"hash\": \"3a25008dfe75fc87d96ea9e503d29c502dde9271a6d46cfb1de8c243f28b942db4571c7aebc076caeb16bce4948c85ea3579272f9750f8adabe6e920c3ceb91a\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-x64.exe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-win-x64.zip\",\n            \"hash\": \"93420194608a703e319e988c020e213b55ea331c2ec92ccf122c15bcfbfbcfe433fafe098c99db5033a1457b6d8c89a88b60d93baa04e59c51f6b665b1109fa1\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-x64.zip\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-win-x86.exe\",\n            \"hash\": \"fc60e1779ac91e9ca809c26cc8ef76972312e7104c61c78ef9dd47ae61189e80447b65b8d05eabe987a80b78715ae6864c5013380b592a5ef33adaac4b7f32be\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-x86.exe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.6/dotnet-runtime-5.0.6-win-x86.zip\",\n            \"hash\": \"b8d3087db130b57adfc920ec58a4789b110343f1b7e1b86515d7b198cd7c33aaea3f81e2d5c814005f159c227b040e207285987c5aaced40e737d8465cd25990\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-x86.zip\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.300\",\n        \"version-display\": \"5.0.300\",\n        \"runtime-version\": \"5.0.6\",\n        \"vs-version\": \"16.10\",\n        \"vs-mac-version\": \"8.9\",\n        \"vs-support\": \"Visual Studio 2019 (v16.10)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-arm.tar.gz\",\n            \"hash\": \"9e507eac7d6598188766d6281ee8102c8f2b738611a4050cc7cbce7723591dce4b6e8d35588561741852f46a6f9af4fd4b715c328007a461cc5fb468d7ab0d8c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-arm64.tar.gz\",\n            \"hash\": \"654e625627b35d9b8e4e5967c76485d0ff91769f5bb5429c99e0554c601426de1b26a5c37d32ab4bc227a15409c134757d5422944cf52c945b351c5927a28393\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-musl-arm.tar.gz\",\n            \"hash\": \"28adf6681a7913d3d94dbdd0c3b05c40add7dde2e3a35a78aebc6ced6355d53e31c6563cd67d142be3316c9b1ec124301b70026c117b02f4ff97cd78d80935ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-musl-arm64.tar.gz\",\n            \"hash\": \"167f3477a229d035c0e9f2ccfe5fd96aaf3065aa7ced908cef7f9079ac97e7302b0947d2fff941e45d2aaa05710694f7c4d9b92dac3e08788c7754e4a14a5dff\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-musl-x64.tar.gz\",\n            \"hash\": \"85e7b228150c7038ed57dab4bda2b3331374a93fdeae6cbb3a71b253c5dbaf4e7d7576b90f8c18524ef04e95f671b7785e442ef611255bc26a32e740a829cbf5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-x64.tar.gz\",\n            \"hash\": \"724a8e6ed77d2d3b957b8e5eda82ca8c99152d8691d1779b4a637d9ff781775f983468ee46b0bc8ad0ddbfd9d537dd8decb6784f43edae72c9529a90767310d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-x64.zip\",\n            \"hash\": \"3eedbdeac2f67e0e4f79bc642f8612506bd6290b7d71c7b3dd6a97531e84d313573f887f396e90e547aad7fc1b416c82b669672a3d019852d002818dd28f6189\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-osx-x64.pkg\",\n            \"hash\": \"3afd40d127b0d003cf32c8905d24fcc23d9c5731aa1e2b20d110478f8d24521d915f20b80f6c0d4f5216d64c0f17b40711130858d9897400e723178a1a630045\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-osx-x64.tar.gz\",\n            \"hash\": \"b3369628c2cab5e92954e3f78af0828321c15cab2fc2786d874e3dd3251d505c33dd65e7f7cbcd48c83ee81ae4ac6ff34439dd564980779b8b0f9790663d28a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-arm64.exe\",\n            \"hash\": \"46e5e0cfa4a8c938451043895a9d6eb408bae5787e6f07d824465e26b3d96759c6f9b9e6923f5e75323fd17bfa42204302958dfc513ab25718e858a6cad62c5d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-arm64.zip\",\n            \"hash\": \"dc926530944a8d5557337c7c77918648ba3d6c13cd5bd175a8dbce1a5a88697977b94c9fe0514bc8a4cd8e2ae93a505f44f8dc49ea508268f21aef3214dac21f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-x64.exe\",\n            \"hash\": \"cdea78a40ac248dba83e1753e955b819de5757be16e978b0b1ac1934248340e78e1c911aaacbb7c8b266fbdc06e3ca16aed83e3f22e3504a2c2d207ff5582cd6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-x64.zip\",\n            \"hash\": \"ce65040d669d7202dec81796b94b48c17a24f1097ff1fb8015ec8d14fe04c46a86df9436eebeffd0cdeb6ba64bd2d45aae66699f9f76f0771fd851395986d05d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-x86.exe\",\n            \"hash\": \"af226df34f55afd1ca1659b44067ebcaff63858de322c66ff67ef1d0ce47a787f40c76ea2db4a3e2294f0fb13203d919c2ecd0cdff9718703a3e9c0aa47f0a57\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-x86.zip\",\n            \"hash\": \"ed0c2e13d7acfebdf8ec45f688d5483238bdd32e8c866b72231a9cabd2aef9cd1b1f9d60bc87e54e9ab55999f644dc2042879cfe6e8df611c25573a6c1c00f71\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.300\",\n          \"version-display\": \"5.0.300\",\n          \"runtime-version\": \"5.0.6\",\n          \"vs-version\": \"16.10\",\n          \"vs-mac-version\": \"8.9\",\n          \"vs-support\": \"Visual Studio 2019 (v16.10)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-arm.tar.gz\",\n              \"hash\": \"9e507eac7d6598188766d6281ee8102c8f2b738611a4050cc7cbce7723591dce4b6e8d35588561741852f46a6f9af4fd4b715c328007a461cc5fb468d7ab0d8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-arm64.tar.gz\",\n              \"hash\": \"654e625627b35d9b8e4e5967c76485d0ff91769f5bb5429c99e0554c601426de1b26a5c37d32ab4bc227a15409c134757d5422944cf52c945b351c5927a28393\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-musl-arm.tar.gz\",\n              \"hash\": \"28adf6681a7913d3d94dbdd0c3b05c40add7dde2e3a35a78aebc6ced6355d53e31c6563cd67d142be3316c9b1ec124301b70026c117b02f4ff97cd78d80935ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-musl-arm64.tar.gz\",\n              \"hash\": \"167f3477a229d035c0e9f2ccfe5fd96aaf3065aa7ced908cef7f9079ac97e7302b0947d2fff941e45d2aaa05710694f7c4d9b92dac3e08788c7754e4a14a5dff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-musl-x64.tar.gz\",\n              \"hash\": \"85e7b228150c7038ed57dab4bda2b3331374a93fdeae6cbb3a71b253c5dbaf4e7d7576b90f8c18524ef04e95f671b7785e442ef611255bc26a32e740a829cbf5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-x64.tar.gz\",\n              \"hash\": \"724a8e6ed77d2d3b957b8e5eda82ca8c99152d8691d1779b4a637d9ff781775f983468ee46b0bc8ad0ddbfd9d537dd8decb6784f43edae72c9529a90767310d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-linux-x64.zip\",\n              \"hash\": \"3eedbdeac2f67e0e4f79bc642f8612506bd6290b7d71c7b3dd6a97531e84d313573f887f396e90e547aad7fc1b416c82b669672a3d019852d002818dd28f6189\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-osx-x64.pkg\",\n              \"hash\": \"3afd40d127b0d003cf32c8905d24fcc23d9c5731aa1e2b20d110478f8d24521d915f20b80f6c0d4f5216d64c0f17b40711130858d9897400e723178a1a630045\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-osx-x64.tar.gz\",\n              \"hash\": \"b3369628c2cab5e92954e3f78af0828321c15cab2fc2786d874e3dd3251d505c33dd65e7f7cbcd48c83ee81ae4ac6ff34439dd564980779b8b0f9790663d28a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-arm64.exe\",\n              \"hash\": \"46e5e0cfa4a8c938451043895a9d6eb408bae5787e6f07d824465e26b3d96759c6f9b9e6923f5e75323fd17bfa42204302958dfc513ab25718e858a6cad62c5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-arm64.zip\",\n              \"hash\": \"dc926530944a8d5557337c7c77918648ba3d6c13cd5bd175a8dbce1a5a88697977b94c9fe0514bc8a4cd8e2ae93a505f44f8dc49ea508268f21aef3214dac21f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-x64.exe\",\n              \"hash\": \"cdea78a40ac248dba83e1753e955b819de5757be16e978b0b1ac1934248340e78e1c911aaacbb7c8b266fbdc06e3ca16aed83e3f22e3504a2c2d207ff5582cd6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-x64.zip\",\n              \"hash\": \"ce65040d669d7202dec81796b94b48c17a24f1097ff1fb8015ec8d14fe04c46a86df9436eebeffd0cdeb6ba64bd2d45aae66699f9f76f0771fd851395986d05d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-x86.exe\",\n              \"hash\": \"af226df34f55afd1ca1659b44067ebcaff63858de322c66ff67ef1d0ce47a787f40c76ea2db4a3e2294f0fb13203d919c2ecd0cdff9718703a3e9c0aa47f0a57\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.300/dotnet-sdk-5.0.300-win-x86.zip\",\n              \"hash\": \"ed0c2e13d7acfebdf8ec45f688d5483238bdd32e8c866b72231a9cabd2aef9cd1b1f9d60bc87e54e9ab55999f644dc2042879cfe6e8df611c25573a6c1c00f71\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.203\",\n          \"version-display\": \"5.0.203\",\n          \"runtime-version\": \"5.0.6\",\n          \"vs-version\": \"16.9.5\",\n          \"vs-mac-version\": \"8.9.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-linux-arm.tar.gz\",\n              \"hash\": \"d90409e32bab33bbc52ebcf8387e1226808672982a8014ef4cbfd42f5e7d8164f88de107e9aaa5c62c0e05cba7ae40cc226bd2fc31ccb79618f1f0bd268e2fc9\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-arm.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-linux-arm64.tar.gz\",\n              \"hash\": \"a9d588ff27f62a73a61c1486e26046c5cd9030557d9f929617e779679e670a854e37b85fa3bbb35e768a72cd07d12b90e6ad30ae500f12303e2e9c883d07a8f0\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-arm64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-linux-musl-arm.tar.gz\",\n              \"hash\": \"6f20c623d9c19c427dc6465df63d0dd5750963859c36d617a17c7ceb991199b194330c30630ac6f283c5d89d3c88d424eb5900d8cf79aec7b1962b9fb6cfc7b4\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-musl-arm.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ab54f573cf02cb043cd55ea20a0b0162b5f4210d7a82f360475c9cc87bb68aa4be04c01648c3b91202676f5914a9a7e9e31b53793739febca3af5f8032303c67\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-musl-arm64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-linux-musl-x64.tar.gz\",\n              \"hash\": \"188c4b0259941a69787f8a619b44acea9443eacec04cbe3ed3bd93a35bf801ce41aeb9ae8078f5b05c422e6340b57dbe9ca7373e6a71e126812bff54062db507\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-musl-x64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-linux-x64.tar.gz\",\n              \"hash\": \"49d8f0414806a9c938192ed13e7707ac2609ca6c2dc408d616e56e98fc0a954b1aa3f569858f7ba38fb79b2ee36dc1920c7f08d1ba4f93da501542b1c8a1320f\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-x64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-linux-x64.zip\",\n              \"hash\": \"3041769e87c4df90c1e4eaa1fd2ce5f28fb9eaaa168955f9722f91f3d7167659c4d230eaca70581038a6e401bc825a34b4edf682fe2ce7c9b8e02d21df3fabc0\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-x64.zip\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-osx-x64.pkg\",\n              \"hash\": \"1c4194353a22939443081a7b51f977138a216d873a5ece010c9f9b65cd0221515bbafae65fcfbda83b46137fdcdb478e1efd7ccf617c698812441e2531b97e77\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-osx-x64.pkg\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-osx-x64.tar.gz\",\n              \"hash\": \"45da59e469b0d1abeb44094f630f46ba5316c1ede15f67fd0fe099cfbbb6b21679f1ec1b153fbad1ae5b00fb139d635a7908288666f6a81dcb947559b008b1aa\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-osx-x64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-win-arm64.exe\",\n              \"hash\": \"0f1104b5100c246e81183350556899caba31c92a3c4e5f7fb95143f59b204692137c0c8ed4e2fba531151f178cbebcfc0f972488bca42349848d971cce36d4b2\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-arm64.exe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-win-arm64.zip\",\n              \"hash\": \"3a609be556f264d246ae123f065f371e3daa3397e757252ba085d6d41a16a291084b7b66c07110ac6ad4c05f13b5504852a8b98b99e561cbd17e3d3b4b66eea8\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-arm64.zip\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-win-x64.exe\",\n              \"hash\": \"17ba8f33d8aa500032ff6bbc3c1f14f02f655e8a62780110651666ff204c69449332cee2cdd04230c6b25083e1b0e05a7dfc74c7d2eee8eb3e0c84b47fb41719\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x64.exe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-win-x64.zip\",\n              \"hash\": \"762ad53d66b893cb2cdf61540794a4a1e20b127e371f57f912ad8ebd4102aabf32366ebaabfe90aa362c1fae0bec0aa7ac6af35c6c0153fb913cd4c532149238\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x64.zip\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-win-x86.exe\",\n              \"hash\": \"5bd1ac6f9f379b0e567446d9f38311d434fd0347252fb312f3b57f6770d83687ec8e04e1157e96fea7d59483478c37314eabc80579a849f19139fdc76bf92cce\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x86.exe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.203/dotnet-sdk-5.0.203-win-x86.zip\",\n              \"hash\": \"270d97cba2aaf27da23a0141f7e5d9fa1debd4fe5eaa95375e49587e55d213e46aa554e35b7cdf045c3a1914acf5746ac2c94a2145a2825a9be327ef351e3d7d\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x86.zip\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.6\",\n        \"version-display\": \"5.0.6\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21113.6\"\n        ],\n        \"vs-version\": \"16.9.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-linux-arm.tar.gz\",\n            \"hash\": \"d00b6198ace6aa2b9b164297be42cd442099fd128d3409e17d20d3d1a67d2ab9e2350d3ceea7260101b60247402d828be09b714cd431e7211fd9dee49fba35c7\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-arm.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-linux-arm64.tar.gz\",\n            \"hash\": \"40a09a9ff07b078cff17da6d0bfeb427c99c64f15135111831eef94c9d8c6274e9c5f3787c7b7652113e93af2547ed41b26b9d59fb55f28f9aa69cf90e804d0e\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"df8d86e72b40fa7edde859984a882b6e718bc8dc307cb937c6c2cdfb21a18c8a0cc75c02c2054a2a62aefd3cdf96c183a8cac5adc8d5eb2f2fb82866db199e57\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-musl-arm.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d94f1ae721151c29eee382c0ac6d3c424ee7b1115025d1bf0779575af044c7f58f6d6bb069505ead8697b9153d4fa900ab54f6c3550c979a22bf98511bb3f708\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-musl-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"c4377df5b5b2e9d93e4a3c3b30bd42a17af86c1428e9a911a6e69a6441eca9f4163d05a9056cdeed0cf735819a6d01013b3ac35545f20f5a1fe87629cb3c3b18\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-musl-x64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-linux-x64.tar.gz\",\n            \"hash\": \"07fd5ab0b62e3d68a3099b76e1236550d86a1ec24150a09284d37b58055786595b182662671f0d4602545bfa404da8be0f9ab96036352dca28dbfef0048bb22d\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-x64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-osx-x64.tar.gz\",\n            \"hash\": \"9e8ed066fe8c580e64355b85408cd5207655c87dc7095e7d5f9cbfed399f4bba037fa8e140d22184a6905fc89070a715af156afc7bc2207d5071a45bc47e7f55\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-osx-x64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-win-arm64.zip\",\n            \"hash\": \"de1536edfa269fa388f91382c691a878e5f9d3f1584c25a2a7ad2ce6953f37a7b4892ee05d7fd406f779073fc72b89274c3af72156cb14e8942418f6c593dac5\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-arm64.zip\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-win-x64.exe\",\n            \"hash\": \"d03aeb2239e48b398903c0293528b3856d9a77b70779673ee5cd071ee091894ab98eb185e14421b5609af5bbfadcf2be081c524321d0d719ee16a07174c90b86\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-x64.exe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-win-x64.zip\",\n            \"hash\": \"7209135fba2fa706b465e0c1a5f1eee4fff526f282a536b30f2ac2466b697363f1d014524a83ddd90b8eb3d329f766e8476e45fb400aba2af2a77fcc9dbcb7b5\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-x64.zip\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-win-x86.exe\",\n            \"hash\": \"ac14ffa2e01c4b1d59c55f6bb9100b8c4b9eff384752dd0b9cc9d05811aaff8fc87c9bdc63c3cc75081c606a5fb0367e0340756fd9a4af3b9fed9be0045af4d1\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-x86.exe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/aspnetcore-runtime-5.0.6-win-x86.zip\",\n            \"hash\": \"8336cc9aff85dcacdd962340d74eae46c33d16de142d64906696862974f8ec648568b2848e652c73aaa974985d1882980376e487613dbdb538438cba572731a9\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-x86.zip\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.6/dotnet-hosting-5.0.6-win.exe\",\n            \"hash\": \"9f48484fe0c55c3c3065e49f9cc3576bfd99703f250e5420bb3d2599af02c0380cd2f42278b9ce86088d70f19d171daa8fa9c504e14534b36c01afc282b4de1b\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.6\",\n        \"version-display\": \"5.0.6\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.6/windowsdesktop-runtime-5.0.6-win-arm64.exe\",\n            \"hash\": \"598b40dc4933d69410842e8532d5575f59091cf9340b81b7e5dadafc36c622a7145122a3c6f79166b055314acfd5e32498e83bd42ade77d0f9b67c6ff7596b4a\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/windowsdesktop-runtime-win-arm64.exe\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.6/windowsdesktop-runtime-5.0.6-win-x64.exe\",\n            \"hash\": \"34b0d43e03b5aaeb987bbc9d6d6ee95b79d97587fecf39d8b8b653618cec4d8741c8d31c270662a0c8b59a18344be2a44b7c38e525505270b264d7dcc856761c\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/windowsdesktop-runtime-win-x64.exe\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.6/windowsdesktop-runtime-5.0.6-win-x86.exe\",\n            \"hash\": \"83ceb900805a33763df0a16e81f3f3d2a4b576802b335975177d77953bf9f0db60d36f257b2e018fe44440df2b8f8a8c44e767939bd9e4ff21230eb32f34db66\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/windowsdesktop-runtime-win-x86.exe\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-04-06\",\n      \"release-version\": \"5.0.5\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.5/5.0.5.md\",\n      \"runtime\": {\n        \"version\": \"5.0.5\",\n        \"version-display\": \"5.0.5\",\n        \"vs-version\": \"16.9.4\",\n        \"vs-mac-version\": \"8.9.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-linux-arm.tar.gz\",\n            \"hash\": \"b7032a935a808370b1eedad7d3e7204c4d05518d21be5aa0b990bf935b48cc89ed70d2fcb282a5ae191034722bc09dfcbc12e2ad674b37c8bd23db8811cde3cb\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"d3ea167e1877f6a30ed3e2243bfde572340db295cdc2fe91a6035bfaaab4b15a42023bbef79db3cdbc8cf32a24efd91d53975701c8068cbcc0a51965a70efdee\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"840193c670705e27c7ba7adf2bc9bab2cd58183fb08f28968c9624e8522ad215c35b42d2aef1ae6e45964b13d66a93aa3cc0f5fb626a6dd19ac119d205390e3e\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-musl-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f9d2b50fd921ed9775b1c679f8365b394bf7d89c81b571a1afd4611bceb4af725ecfe063a51701d74707c1e8e48fd8bdec744eebde88cd4d41e9a75932e0f972\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-musl-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"c0910f24938cc0dcf2f9f8277962eaf568b2be07c31ce5f3f2c1306c50012ed46fde1be3535f7ac7f5a3f63219a573c9ebbc4b7a2e869fcc435b14f0b79c0b13\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-musl-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-linux-x64.tar.gz\",\n            \"hash\": \"ce9d3778c9a331b35cf18d7b64f9eec8fc37d9088f1a2208488577f611b2ab0f8b3a82b7f559b331d584ac86e1f09153ee2e255e617239fe9a9382373f873237\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-linux-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-osx-x64.pkg\",\n            \"hash\": \"9d440ee44fff64efe34b8e9f98a3eaa1e5db68eab430b2613563e66da6b899b0468ed0efa1abc609d6bfb23cefa5c220ce97b3d7ee3873035f4f63b9291265db\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-osx-x64.pkg\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-osx-x64.tar.gz\",\n            \"hash\": \"5b949b7f4e6cacd46710ed136d4e64e352cc77221743d415e250b9276127f49c97fa7c71e90fc02adbc036cf23809462e31fac3eb1f65a551e0571bde5752671\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-osx-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-win-arm64.exe\",\n            \"hash\": \"37fd81ffb5191efbb11499e10b7fb9e7e9181cbc0f27a918fecbb59d3fe8cd8d16a474529f8b52e2823b59328e06194e74503cdb1a8be6c7566adccea87bdc08\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-arm64.exe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-win-arm64.zip\",\n            \"hash\": \"bc368317d05a150cac937aebda607fac53a3c8486a98ee0169ea355918e29c8a9930371da82effd1904b591a0f4944ed16d56ae0f8dc0a7036faf9cd343cdb59\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-arm64.zip\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-win-x64.exe\",\n            \"hash\": \"307860d3ccad7126f99ab909144506db2572849b6b20258e6dde9619f162073a07a64c404417fded456323636a527c1f64d037f1d1192f4c6b8d91f306a6b987\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-x64.exe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-win-x64.zip\",\n            \"hash\": \"42dd92ba8443ff28ab7b98bd88ac43b63b955d795df31376c9d6ab7c7a09f786634806dc28987df23c786298e18d4d63f0eaf45cfd47b83b48af63a309a529d4\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-x64.zip\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-win-x86.exe\",\n            \"hash\": \"b391752021a5189de96b7bc0db98184066ecbf38b0339c505d68a0e73d3f2a70f6eec9b0a1863606019c1c8594b89f66fe0b55283053c52089bb3e7d6babfcce\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-x86.exe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.5/dotnet-runtime-5.0.5-win-x86.zip\",\n            \"hash\": \"967b1d7a0112c7f8a4e4a4c0f81be42798c96ab3d30ac52a4861dbed9f0ea57ef1805a442cfa61055239e09caa452de22527aaaaac858cc7462c435d34c1d8c3\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/dotnet-runtime-win-x86.zip\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.202\",\n        \"version-display\": \"5.0.202\",\n        \"runtime-version\": \"5.0.5\",\n        \"vs-version\": \"16.9.4\",\n        \"vs-mac-version\": \"8.9.6\",\n        \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-arm.tar.gz\",\n            \"hash\": \"ac363bbc163100e49b2ad43dfded9bdd3444980d9dca1b51bcd65d6fab73a5fc2251f094fd5e6fa1c1c877251b2f26c684023c0e1b09d1956b9bb543f72c4f0b\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-arm64.tar.gz\",\n            \"hash\": \"26ec125a0637e71acad20386474df89a101e9ae948921b5de0cd343f4bc0e84b4e7b2318e15978723eb3b9d321e89b790c3f0424a43c29b0015fc6f2b9e3e9d9\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-musl-arm.tar.gz\",\n            \"hash\": \"bc22a6c33792b0557eaf28c75a09bd88dd5a6a857d9e48e3fc73240708d8cbe5726e88f7d4b4aa9a5024b718e582d2a299c6660b4f02ef889c63bc3d0c302e35\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-musl-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ac2dea48a07d8cc359e377c4b1b2397aff6218497e10ddd73a49f4b1f670491dd01d03b204e530ebd5812ed51b6432c5da592038c091244c27009c6e2f478c1a\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-musl-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-musl-x64.tar.gz\",\n            \"hash\": \"cb367c4b5d011a233465fd2c674e1259eee2a888e9dfc3ec674e59542111b6e0c559a128b3641b4b1872c16429c1b9be9052f8c07462eb4a6148eeb40a19d29a\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-musl-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-x64.tar.gz\",\n            \"hash\": \"01ed59f236184987405673d24940d55ce29d830e7dbbc19556fdc03893039e6046712de6f901dc9911047a0dee4fd15319b7e94f8a31df6b981fa35bd93d9838\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-x64.zip\",\n            \"hash\": \"5e0c3062d9b52705c0c2916061f50d30072b6861e598912af96a02d009c50e38055c246bcac1d0151a236f70682359fc6dabce4dd7c4c77a3fe100882ec448f9\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-x64.zip\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-osx-x64.pkg\",\n            \"hash\": \"f112dde7a02301a61c05db60800cf3d08989e7d47341d2b63d4d11510049e6bf4c6eebcbf70c767740618e7df0b51d831c8f327c55fb672e28e536de19d569a0\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-osx-x64.pkg\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-osx-x64.tar.gz\",\n            \"hash\": \"8f19df4db4146f4749dbf357da9bbc3e2fc5fdee046839b64dae54fbab12623fecea7369e8d1f1b449fb073850f7f1152ecce5fe85e2de52f477f04f6f395d10\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-osx-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-arm64.exe\",\n            \"hash\": \"f8edcca8822408f04228293ba7c7286ddd8a67ee34f117153e5cae408118ff234c708611b19ada941554992b4f1e90e94a3a157861cca58dd3236c83ec0cc38c\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-arm64.exe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-arm64.zip\",\n            \"hash\": \"2db05c689440b6317a6e99a9371820e603947a2628de2115dd673f5b300ef9ad940159c9c4951103ca3d69b34c6098ebe72bcb31fcdfd45d7a519807eb9e7f4a\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-arm64.zip\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-x64.exe\",\n            \"hash\": \"00bf9b1680e36e4baf7dd699acb7b6c7ed138281a3064e8261d6ff5ba1e04a6847f2a2819e861c66482cd521f1c0527d5cfe20d53ea127413b3fc7a80b01f8b6\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x64.exe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-x64.zip\",\n            \"hash\": \"ba76852b979ec98034d70a0c8012f7ec1c6638129d66121368766f3da423f46be942a6a4f2d8dafa8bdbd91218d7eeed89cd3c1818fb0df2656e9f9f6a7c6893\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x64.zip\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-x86.exe\",\n            \"hash\": \"cff026787e22e71dc786b42cefbeb6cff45f504221a92a00535e71213820a343c3dacde5196785496fe60ad5b849fd155a9be7ecebf47cdf9d872fa365ccbe14\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x86.exe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-x86.zip\",\n            \"hash\": \"273b93fcaeeb5facde39dc437eb429a66bdefee514b49b7e9d0f146630c1c32a207d879c4965d686fc4ef9f5d6d370b5b394b90908f668e5e70eb010a9efff74\",\n            \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x86.zip\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.202\",\n          \"version-display\": \"5.0.202\",\n          \"runtime-version\": \"5.0.5\",\n          \"vs-version\": \"16.9.4\",\n          \"vs-mac-version\": \"8.9.6\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-arm.tar.gz\",\n              \"hash\": \"ac363bbc163100e49b2ad43dfded9bdd3444980d9dca1b51bcd65d6fab73a5fc2251f094fd5e6fa1c1c877251b2f26c684023c0e1b09d1956b9bb543f72c4f0b\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-arm.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-arm64.tar.gz\",\n              \"hash\": \"26ec125a0637e71acad20386474df89a101e9ae948921b5de0cd343f4bc0e84b4e7b2318e15978723eb3b9d321e89b790c3f0424a43c29b0015fc6f2b9e3e9d9\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-arm64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-musl-arm.tar.gz\",\n              \"hash\": \"bc22a6c33792b0557eaf28c75a09bd88dd5a6a857d9e48e3fc73240708d8cbe5726e88f7d4b4aa9a5024b718e582d2a299c6660b4f02ef889c63bc3d0c302e35\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-musl-arm.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ac2dea48a07d8cc359e377c4b1b2397aff6218497e10ddd73a49f4b1f670491dd01d03b204e530ebd5812ed51b6432c5da592038c091244c27009c6e2f478c1a\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-musl-arm64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-musl-x64.tar.gz\",\n              \"hash\": \"cb367c4b5d011a233465fd2c674e1259eee2a888e9dfc3ec674e59542111b6e0c559a128b3641b4b1872c16429c1b9be9052f8c07462eb4a6148eeb40a19d29a\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-musl-x64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-x64.tar.gz\",\n              \"hash\": \"01ed59f236184987405673d24940d55ce29d830e7dbbc19556fdc03893039e6046712de6f901dc9911047a0dee4fd15319b7e94f8a31df6b981fa35bd93d9838\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-x64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-linux-x64.zip\",\n              \"hash\": \"5e0c3062d9b52705c0c2916061f50d30072b6861e598912af96a02d009c50e38055c246bcac1d0151a236f70682359fc6dabce4dd7c4c77a3fe100882ec448f9\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-linux-x64.zip\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-osx-x64.pkg\",\n              \"hash\": \"f112dde7a02301a61c05db60800cf3d08989e7d47341d2b63d4d11510049e6bf4c6eebcbf70c767740618e7df0b51d831c8f327c55fb672e28e536de19d569a0\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-osx-x64.pkg\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-osx-x64.tar.gz\",\n              \"hash\": \"8f19df4db4146f4749dbf357da9bbc3e2fc5fdee046839b64dae54fbab12623fecea7369e8d1f1b449fb073850f7f1152ecce5fe85e2de52f477f04f6f395d10\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-osx-x64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-arm64.exe\",\n              \"hash\": \"f8edcca8822408f04228293ba7c7286ddd8a67ee34f117153e5cae408118ff234c708611b19ada941554992b4f1e90e94a3a157861cca58dd3236c83ec0cc38c\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-arm64.exe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-arm64.zip\",\n              \"hash\": \"2db05c689440b6317a6e99a9371820e603947a2628de2115dd673f5b300ef9ad940159c9c4951103ca3d69b34c6098ebe72bcb31fcdfd45d7a519807eb9e7f4a\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-arm64.zip\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-x64.exe\",\n              \"hash\": \"00bf9b1680e36e4baf7dd699acb7b6c7ed138281a3064e8261d6ff5ba1e04a6847f2a2819e861c66482cd521f1c0527d5cfe20d53ea127413b3fc7a80b01f8b6\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x64.exe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-x64.zip\",\n              \"hash\": \"ba76852b979ec98034d70a0c8012f7ec1c6638129d66121368766f3da423f46be942a6a4f2d8dafa8bdbd91218d7eeed89cd3c1818fb0df2656e9f9f6a7c6893\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x64.zip\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-x86.exe\",\n              \"hash\": \"cff026787e22e71dc786b42cefbeb6cff45f504221a92a00535e71213820a343c3dacde5196785496fe60ad5b849fd155a9be7ecebf47cdf9d872fa365ccbe14\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x86.exe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.202/dotnet-sdk-5.0.202-win-x86.zip\",\n              \"hash\": \"273b93fcaeeb5facde39dc437eb429a66bdefee514b49b7e9d0f146630c1c32a207d879c4965d686fc4ef9f5d6d370b5b394b90908f668e5e70eb010a9efff74\",\n              \"akams\": \"https://aka.ms/dotnet/5.0.2xx/dotnet-sdk-win-x86.zip\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.5\",\n        \"version-display\": \"5.0.5\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21076.5\"\n        ],\n        \"vs-version\": \"16.9.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-linux-arm.tar.gz\",\n            \"hash\": \"962f02bd27a96fc577bd4a6e3763e50daace29479880a96386d863a5905ff4b081c9f12086b540b48a2df378919a1ae368032cc76a322f5bb602fb7bf48ad773\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-arm.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"f2421b16295f53b2796c604eb89e4cea0f238f376e4e3d4f348d8aebed6543fd605e76c871de049cb5328ec1fcea9a35d65b57c1c2c4d09a2614fd5bb2428980\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"839558a389c9a64ef7050c7b0426e3fa6fec638f31492dae2292f2cc990d6bb84a4f8ee523bfcfb74822116354125989b004c39ec0c97dbcda727e9fa04e72fe\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-musl-arm.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b46071e8b9e7b71d0ca57dbe524ab152ca1e3b5f75d443dff7dcdb80f61d5dee5044b8bde2a20e94d3d7f26aaf82a94bb0af9f5883446a929da3278eb55ffa27\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-musl-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"04057353d890e73f5fe93cf9d05b2e84bf1f972a401acc631fc7ee7b83e97a4e40343458f274b7e900f96b94fbd2b954bde89b8874367776c82cb17567091d23\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-musl-x64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-linux-x64.tar.gz\",\n            \"hash\": \"149b378b2377b60980a9bc0fa2f345293439f0da18bc75e8bffadc2faba8c3c175325fdd4edc9faaf898c4836f76a1685d55a0efdb679a5034b9e761450a88a4\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-linux-x64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-osx-x64.tar.gz\",\n            \"hash\": \"1dd1c8d08bc2a0987388cff40a9171e9b281b3f3a5d21cf2751917aca72d12d10ffff77220fc997f910ae2e2c93bd0d5adb81330d8db328f36a958bc6992b981\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-osx-x64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-win-arm64.zip\",\n            \"hash\": \"3a3728a983abb3ceca4a269a2b57930d497cc7dabfd4da2ab023ad18436912ba74865539b825c157a1ec92eb86c407f1fbc80a16c2949476244edfcce5d4ef0d\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-arm64.zip\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-win-x64.exe\",\n            \"hash\": \"c68d5fb4679bc5606d93fb17407e90b7357d40eb78aabc3a3ae9c6d8f24a527463955080a25fb3bc7d06e6e99917133f72006ff3f35baeb834aa2cd9d899244c\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-x64.exe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-win-x64.zip\",\n            \"hash\": \"1dc0fba71253374090a9e5b745e438c4f2d87b0558fc186ef2cbbfdf9c7869381d9b1cab1421759d12805f36870f40e88e5f0da372e1bf35081a2361f731bf55\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-x64.zip\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-win-x86.exe\",\n            \"hash\": \"871cbdacb83d35d842cd6c97d9e546791c0e19825980ac9d490788106c6165b1c3b7f27077dfd04fc0822e91eee06994a3439c0add5da6cd8e70d1c4d3c7cba6\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-x86.exe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/aspnetcore-runtime-5.0.5-win-x86.zip\",\n            \"hash\": \"a03e63336f39385fc7db91e752954062d73a8f208b29b77ea2a76e69052b36b905ea30467b9af1fae09d97657aaef94af3187c3032884ddb0744d78542ab9ed7\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/aspnetcore-runtime-win-x86.zip\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.5/dotnet-hosting-5.0.5-win.exe\",\n            \"hash\": \"ba54b94727260ab692790b258e24a49e3b1c03d18f947d6e4bad1eac20f6900d435028b49fe737cc979ea569c80cdd488b2867cb26f58bfc24e2955d921c15e5\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.5\",\n        \"version-display\": \"5.0.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.5/windowsdesktop-runtime-5.0.5-win-x64.exe\",\n            \"hash\": \"3925bc0b50b273296d0ca5f677b45cf1fe9aa11d29c6d7f4491c8b64d62058043cc61e10ee71ef2601dfa2c53b7cb1bc00747040b533712997a5e50c9bb72721\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/windowsdesktop-runtime-win-x64.exe\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.5/windowsdesktop-runtime-5.0.5-win-x86.exe\",\n            \"hash\": \"a6fddc8ceaa607fecb157a755b9a89b5e3e44921eed9128478139779058bbc24de2207f1af8fac358d02194e801b5d8bb8ff32e92aa30b88afad627cf16eea65\",\n            \"akams\": \"https://aka.ms/dotnet/5.0/windowsdesktop-runtime-win-x86.exe\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-03-09\",\n      \"release-version\": \"5.0.4\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-26701\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-26701\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.4/5.0.4.md\",\n      \"runtime\": {\n        \"version\": \"5.0.4\",\n        \"version-display\": \"5.0.4\",\n        \"vs-version\": \"16.8.7, 16.9.1\",\n        \"vs-mac-version\": \"8.9.1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-linux-arm.tar.gz\",\n            \"hash\": \"2307af8eba1356a326f95ed9ac604d8647eadc112d4bce890e2e0263c5692fbdaf13335345f3633a06cf2595b802201442265f413b2b2a6c0695fffd84bbc57a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"4162270e9fccbd890a51283186fd2aa2fc20812d3403aad662ad24d487afa432c9b1eaf784fbc0f57e60a0abc16941b245bce9a88be1774c4cf3f239e456b0d1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"f1b71f4e2f64ac97f5ff5ee9cbc013be6a7e70ace46671bd3b6ca0522f577f337ca36cff8c4408d60ef33a33a81ab53b9792d96c73c0492f1e8746deba7d42e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ffe0b81b5682685a53ebc325933348b71a7c00af15b98242e26e2bf5312275a8e725f396ce49e394a491b6fac8724c0ca1f04063bcf6cc2e57068f8807102b9a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"6354c3b9cd3a7f650282c621bffbbaf435d0d5b02e99ff2e95d0c8680c760eb62319b84def1bcc4459ec4761ffc53dd22ddc98358448d23c1f5028d1ea4bf3a5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-linux-x64.tar.gz\",\n            \"hash\": \"1f224778d81ca94d4246e9390d4d15f400eac527ebe50d1e92bd337b0a80bf111d15b0f187f28aa1c9218b2244aca00d3bb4090f73b6ac9ba484241111c74534\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-osx-x64.pkg\",\n            \"hash\": \"27cd36797fd887d07c73286cd4c08673819cb328c6a4a64a2a829d46d7727649808e0d90f7aa8018a7b340099b32857e8a123ff55dd3aa94dbd053acd3fabba3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-osx-x64.tar.gz\",\n            \"hash\": \"f0b158f2c78aee1673b728c41227f5faff2e005ad7dc7f30d79752c9daac47992b12f87be6397f07c20766dd3ee9b6dc8fb2a6b69a9f8fe1ff0352dd3b4bd7e5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-win-arm64.exe\",\n            \"hash\": \"cad5cbbcb1b9faef2e467a245eed75ef74bac1bb171bafd81b4d579e27806b0c051184b050285140925d7f69492e515825be5307a42cc04bcbc3c5cb6e852853\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-win-arm64.zip\",\n            \"hash\": \"9004034f82b815b98e09991a2782045878b8bf16945e818abd785844cb70ab35493d314015d831a4e4515f911053b54e9d46f73d0c750a8e5eacb67bc3638cea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-win-x64.exe\",\n            \"hash\": \"9085c01fcbe18d7282bf3470f377ced5fbb860d8c86f7de1df9cf83e9c45356a219e385ed25ceefdfd61c9419088dd95c3b625ab4ae173058327a935d9cea003\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-win-x64.zip\",\n            \"hash\": \"5a1bb08cdc7db05e7d68c05330579d801180bb624ab3eb783842fa7ac399c98fd1e5d53a95bbaba0af6654cffd09594e7775b1774cbfdba35c6034208bfa44f6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-win-x86.exe\",\n            \"hash\": \"90b588861d10dc35f40415abf7f3f27acc439731c042dee5be0a25f4dbdfaa170f3ac44a4c41ecbcd173eb25dad0dd8e8ed4397c02f4c80e999b8cd45195cf98\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.4/dotnet-runtime-5.0.4-win-x86.zip\",\n            \"hash\": \"0dad8237fc17b1b5e5b734e3d43f9c70c8f0c40cdbec6e515ccaae676f6594058cb7e667be4b7bb1f7e955b0afce32815c0d31915b94bf744bd95d26e4611de3\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.201\",\n        \"version-display\": \"5.0.201\",\n        \"runtime-version\": \"5.0.4\",\n        \"vs-version\": \"16.9.1\",\n        \"vs-mac-version\": \"8.9.1\",\n        \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-arm.tar.gz\",\n            \"hash\": \"1be5abc37284441f528987ed6d07a9a6b9128445a8f615ae3eb4b593e2bce2c0732ee91ec2d2087a982af467a230cc826f63d8aa21748651db83085687f43fce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-arm64.tar.gz\",\n            \"hash\": \"6d3d8f5f41931615dcea1038dbe1fdf3b767481b62422f2e91b67b433d949d853d68c5ed7bc0a63b2157d05b9e0139f747fe8377f16a9caf21e5dd5691548777\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-musl-arm.tar.gz\",\n            \"hash\": \"f3a3eebd98ce9d031b8085847a8f0d3eb4af9d4fcd25ce8315da9ddf18ab11ed0f93edd06d67ee6b18b453513cd71b2c1b9c10659d2bd98ba325cd880aa0313b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a455bac412c514a7533b3f9e776d2efa41b77b768a3a4795e5f43418acac6339bd6c5ecbb76cd0970bf0725f61659382c05060677c9caf30c804c6a6ca5a207d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-musl-x64.tar.gz\",\n            \"hash\": \"46341b38fb4fd3faff66ce74e24063d7fd189de6d5ed12ee2bdcea11cefbb1edf1ed3984df87a11f5222cf3d79aceaede7402650ff09a964a2e8b81c7bd4bf08\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-x64.tar.gz\",\n            \"hash\": \"099084cc7935482e363bd7802d2fdd909b3d72d2e9706e9ba4df95e3d142a28b780d2b85e5fb4662dcaad18e91c7e06519184fae981a521425eed605770c3c5a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-osx-x64.pkg\",\n            \"hash\": \"6206d6994fe23c3e7cc26543e5a5e231cacd0a6e14e86bbc0636054114144adc47c8a7cb6e99fa05c7414c34c47c935937b32d41ea9eeb794aaf1702ff2be74c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-osx-x64.tar.gz\",\n            \"hash\": \"28d1e55e9002e63a354f4b5994e83114229701fe84fee41d083f1de33af751a288cab0605da7d3b0d0c3bbc10979ca0a3dbe13722d29313031e7732ad7f8e6d1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-arm64.exe\",\n            \"hash\": \"a1cc241e3e91db98464284c389339a7d5a32e618b2fcb46fe89cd3c562b2f82865a54066ddb314403940acd729673c23f81a0aaa5e5ad519551d8c121b3638d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-arm64.zip\",\n            \"hash\": \"c4cfa9818832396f9bd455f52a3b0371538937efbacacb388b7b02f8fa0208162510cad7b575c2ec4cf73637f34dd4392bc85166bdbe35854d88d42b80103828\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-x64.exe\",\n            \"hash\": \"aa1b4466415129b1d6ce5fced473f2a4092d457e5f3e8d36546eb79ab515fb9683aef5e0162230986950a38da4ba27b6fb3caa75771348dc57793d4f4ca2065c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-x64.zip\",\n            \"hash\": \"e7e1a2e27a91226974804c3949d3ee097b7d7a7ff9ccdbfb1afad742eb5c1ea20487f580f8266aa1d1fb9fb90ab0643c2c3a14e30dedf9f3a339768654dd567d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-x86.exe\",\n            \"hash\": \"761d86868f6af57111a87eac05f7f25e945d69ea04b989f6d1d9b207823319a9280a07ab60885cff4a397d50e8b48063e812aef825a16001e51179bb855ae223\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-x86.zip\",\n            \"hash\": \"630d12d0f240f5f7abbc44dc8e702621b458b413723e554f9fe806f9dca33a601c80cd6cffe877cdb249a397fd7d417f4fde0bdc84ed55d40bd675c6241cb588\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.201\",\n          \"version-display\": \"5.0.201\",\n          \"runtime-version\": \"5.0.4\",\n          \"vs-version\": \"16.9.1\",\n          \"vs-mac-version\": \"8.9.1\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-arm.tar.gz\",\n              \"hash\": \"1be5abc37284441f528987ed6d07a9a6b9128445a8f615ae3eb4b593e2bce2c0732ee91ec2d2087a982af467a230cc826f63d8aa21748651db83085687f43fce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-arm64.tar.gz\",\n              \"hash\": \"6d3d8f5f41931615dcea1038dbe1fdf3b767481b62422f2e91b67b433d949d853d68c5ed7bc0a63b2157d05b9e0139f747fe8377f16a9caf21e5dd5691548777\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-musl-arm.tar.gz\",\n              \"hash\": \"f3a3eebd98ce9d031b8085847a8f0d3eb4af9d4fcd25ce8315da9ddf18ab11ed0f93edd06d67ee6b18b453513cd71b2c1b9c10659d2bd98ba325cd880aa0313b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-musl-arm64.tar.gz\",\n              \"hash\": \"a455bac412c514a7533b3f9e776d2efa41b77b768a3a4795e5f43418acac6339bd6c5ecbb76cd0970bf0725f61659382c05060677c9caf30c804c6a6ca5a207d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-musl-x64.tar.gz\",\n              \"hash\": \"46341b38fb4fd3faff66ce74e24063d7fd189de6d5ed12ee2bdcea11cefbb1edf1ed3984df87a11f5222cf3d79aceaede7402650ff09a964a2e8b81c7bd4bf08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-linux-x64.tar.gz\",\n              \"hash\": \"099084cc7935482e363bd7802d2fdd909b3d72d2e9706e9ba4df95e3d142a28b780d2b85e5fb4662dcaad18e91c7e06519184fae981a521425eed605770c3c5a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-osx-x64.pkg\",\n              \"hash\": \"6206d6994fe23c3e7cc26543e5a5e231cacd0a6e14e86bbc0636054114144adc47c8a7cb6e99fa05c7414c34c47c935937b32d41ea9eeb794aaf1702ff2be74c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-osx-x64.tar.gz\",\n              \"hash\": \"28d1e55e9002e63a354f4b5994e83114229701fe84fee41d083f1de33af751a288cab0605da7d3b0d0c3bbc10979ca0a3dbe13722d29313031e7732ad7f8e6d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-arm64.exe\",\n              \"hash\": \"a1cc241e3e91db98464284c389339a7d5a32e618b2fcb46fe89cd3c562b2f82865a54066ddb314403940acd729673c23f81a0aaa5e5ad519551d8c121b3638d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-arm64.zip\",\n              \"hash\": \"c4cfa9818832396f9bd455f52a3b0371538937efbacacb388b7b02f8fa0208162510cad7b575c2ec4cf73637f34dd4392bc85166bdbe35854d88d42b80103828\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-x64.exe\",\n              \"hash\": \"aa1b4466415129b1d6ce5fced473f2a4092d457e5f3e8d36546eb79ab515fb9683aef5e0162230986950a38da4ba27b6fb3caa75771348dc57793d4f4ca2065c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-x64.zip\",\n              \"hash\": \"e7e1a2e27a91226974804c3949d3ee097b7d7a7ff9ccdbfb1afad742eb5c1ea20487f580f8266aa1d1fb9fb90ab0643c2c3a14e30dedf9f3a339768654dd567d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-x86.exe\",\n              \"hash\": \"761d86868f6af57111a87eac05f7f25e945d69ea04b989f6d1d9b207823319a9280a07ab60885cff4a397d50e8b48063e812aef825a16001e51179bb855ae223\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.201/dotnet-sdk-5.0.201-win-x86.zip\",\n              \"hash\": \"630d12d0f240f5f7abbc44dc8e702621b458b413723e554f9fe806f9dca33a601c80cd6cffe877cdb249a397fd7d417f4fde0bdc84ed55d40bd675c6241cb588\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.104\",\n          \"version-display\": \"5.0.104\",\n          \"runtime-version\": \"5.0.4\",\n          \"vs-version\": \"16.8.7\",\n          \"vs-mac-version\": \"8.9.1\",\n          \"vs-support\": \"Visual Studio 2019 (v16.8)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-linux-arm.tar.gz\",\n              \"hash\": \"56405b06f95fb493e7dd5df40f4a7b0dcdd7019335de5722d4032396f554e56cc727c4ad811cfb45abdd41558775880a25114f29ac6f44e8a1e4463f2c6cce7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-linux-arm64.tar.gz\",\n              \"hash\": \"9f0cb4bdc70245bde541b26c67e4beb679923e9a68ba27585d9733f4a9f46c41bf0962c4bcd20027188f367ac6427e16e51ff6475f3be79deb1d9f734ecb7a8b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-linux-musl-x64.tar.gz\",\n              \"hash\": \"fa3f10034480d89bbcb1bc815ea6448c2f4b6188196f8675ab84e0ef569cdd5e7852650571019a5b00b1363fe926e8f29ff7915e72348325a0fca008635d591f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-linux-x64.tar.gz\",\n              \"hash\": \"7b76e0b3a67e0febdc04085b3b73c6a8799290ec935bafefe699c43f8a499c1d3d80d18090e62410d45e49620cfbb1c898259139a0f34e4a9c4db6307324cf7e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-osx-x64.pkg\",\n              \"hash\": \"242531d8817a256a494851822cbe4456831f56e4592520aa056e15916d415025792b54dc1417c78f70cec351c5dab904b9a18de361d06eab543d4d7182745ec7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-osx-x64.tar.gz\",\n              \"hash\": \"80cce19e46bb0c8e131b23abf618190c7c5a19bb3a15da0332307992f6dfeb5c830775f6e221fa250f27e4faba0302d11a41e6fd6ea2bc92efda94cf79cb4bb7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-win-arm64.exe\",\n              \"hash\": \"273b754305ad19d273da74fd6ba76a1818dcd95562a7709394c383dc3aa043ac80fd04b1fd4eac156e5e410a9a67c91642ec727f360154ad9b14c99702b8f789\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-win-arm64.zip\",\n              \"hash\": \"ce0d687be4f8fb84d5c1abf8502bc5003538266b3ab2f583cfd96e8684dea8d14e3fea1c2eadc09507c691f3d2d7808d3dea3cf147c9c42c6601d88b14a4b103\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-win-x64.exe\",\n              \"hash\": \"941676b2c48e1128167df614f10b5727a78bb79713c3de5afc599f982f8b12344bbbbb5dd84ed691b17e022090a15924945dbd6759eeb5a2792537a44690cbbf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-win-x64.zip\",\n              \"hash\": \"37ead89280700827c44619796d5898164dd94732395a2d39677f6d846fe63d7b5d4b796795184a6b775759ace2d0f2af589497cb6d322a179b5d318d02a2c4d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-win-x86.exe\",\n              \"hash\": \"552ee46b6106ee452f6934179fe3ab4580c92f4475e7ae19d479b9177e5d877f64e5fb8084ce3b1f6277a99015d019bbeac51aa80e05d5a951e3c2b398271f4a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.104/dotnet-sdk-5.0.104-win-x86.zip\",\n              \"hash\": \"11e585140b2209b6909693087b3392c7bf9d62ed596160a23e0dbfd4c9afdc86f55c178bb5f9cc396be6a3d7d2d4de2185dff31cb008835ec4e1dd0ae7fa7d6e\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.4\",\n        \"version-display\": \"5.0.4\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21050.4\"\n        ],\n        \"vs-version\": \"16.8.7, 16.9.1\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-linux-arm.tar.gz\",\n            \"hash\": \"0f5cf4bad4645d05d70560e990260efa76a7832de0d3df2fd1427227a96bc2166d1eafa424013873f734262254e790bf23fc26b51b49ff53ff22de22b73137e2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"fbe6970ef80f53e0d87e1d4e212e112bfd1961cb9aeeadc66fd5fd09d0ea965897b2e95207df7db83f760996a0ee53f1aed49f1c7e47136867fc6510f25a9fd6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"19645e9e429af96fdfcf378b2fd070de3ff9cb91c1b0ba9fb7b20afc11ac5645ae2ec2388d6a0ead9b37a58e20dd18cbf46b76c1e0e3f5358c59c1297fc83dea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"35dd93118b9d4f7a7574a1f7e5721a95a2b9d60b297347f98ffc9bd2675994222c36d653ad27e54c47703566630edee7b8aee6a1874b557035755e08b7f877e0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"73f713d64db2c91b21f835a8bacef33894fb636b8d091ceff270ef2aeeb6b3ef276c17936371b533211083990e97130a85ccabf5cc809fd41612299611e3f7b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-linux-x64.tar.gz\",\n            \"hash\": \"6075649abf4f99ff19f472a3ce6290cf277e7620ab9e65a09d5884a265c50884d50496d6ceb70011b9caaad09ff8428a149cb0aa0b965a17f0a4f5f5e02b920c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-osx-x64.tar.gz\",\n            \"hash\": \"8a984a67969d7e3329dbe710cfa581919180365c8994b7d15109da7c344ceb347c426f345b449de55940a8916ba96ac662d89c5e5a6094bff34e10455f1ab892\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-win-arm64.zip\",\n            \"hash\": \"128712dbb2d71c9159b59655d2606623205409291786b38d2285afbb65d0a6b57354391d5d6e598594773a4dd44f829e15a168f4a589b87ed00637d1082d711a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-win-x64.exe\",\n            \"hash\": \"08a6932cb0bd841a6eabe75e4725c532774f74ab02295b9a510ed02af9f4785bc37c63eac111eb1016fdd72b7bac815b8199f632147210e14e4d83fee0e80f15\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-win-x64.zip\",\n            \"hash\": \"16a08ede93dec91666f254d0fc935dc450bfd840787185b04d0836d0e278d74ee0f0d09912cfa5871eb919706cad2e337944b2e19542c555eee38a0a2cbb08fd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-win-x86.exe\",\n            \"hash\": \"43d2c0a67ca6d5851e399d265f141e39470eb5d09da59b8a1244e59425ddf480e7018305f4dd9bee0857f04a0fa34d9cf92da9af3577e0d15e6d5a6b8746ae54\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/aspnetcore-runtime-5.0.4-win-x86.zip\",\n            \"hash\": \"f9bde0cc590ccf7d8a9fe6cd1b3b2866e2406676130e7c720af5532f91808247740d6c1e9c685a04e96035a60c0ba1a3ef742f1ef9867667704a203a9d1f065c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.4/dotnet-hosting-5.0.4-win.exe\",\n            \"hash\": \"858b230f8f04f7d32ac5e28628c684fc056acf75c29f0c725619a569997ec32a44c685a108072398d6d5f45be8963f7621973eca7cf702bda324145893c41cd4\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.4\",\n        \"version-display\": \"5.0.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.4/windowsdesktop-runtime-5.0.4-win-x64.exe\",\n            \"hash\": \"69fcbe5458869246cbd0657764ec3fdbfd59f06a49808cb283a7c90271409b0266539d31cec9047c512f167cae8e2992b617b68bc9f93e4815a37a8f50524d3f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.4/windowsdesktop-runtime-5.0.4-win-x86.exe\",\n            \"hash\": \"f9dc79182c557751ad8590aa70fdf01e10b691d95910520e9323074ba6e3bae0df6dc60c084e01536e7b46b6617e4173300ad0d541d4ba6bc18b42f54bf0a051\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-03-02\",\n      \"release-version\": \"5.0.3\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-1721\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-1721\"\n        },\n        {\n          \"cve-id\": \"CVE-2021-24112\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24112\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.3/5.0.200-sdk.md\",\n      \"runtime\": {\n        \"version\": \"5.0.3\",\n        \"version-display\": \"5.0.3\",\n        \"vs-version\": \"16.8.5\",\n        \"vs-mac-version\": \"8.8.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-linux-arm.tar.gz\",\n            \"hash\": \"d89c1769dfdfe30092825a94aa0037ca99ef83a0935ba24755377813db9e4a2e49e41611d02cf24aa4a423fb44bc566cdd935f62db61fe04a5257932bed4abf4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"f4d176b48714121040470a25f76a1b3554edb358953c1bfb39bd111cf0dcc85cb8a5ebcd617efd207b3cfaef0a2d242f94e9f018a186828a750c5c0dc9bd7da5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"caccb6854393ca922aec23c10e3451787b445a2dac1e9bd8be2d33f70258e247ac9f97860570c8fc6438a17d938a7a8c026dffeecc914f3afe1981a198432b03\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"85e4063792fb9d921a24f9da221a2b69c1faa253adb10644cc5907c35af92b3204f461fd6a9ec936ae37cfada47937f1c2b67174eabc778bd7305d66dc67e340\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-linux-x64.tar.gz\",\n            \"hash\": \"263dbe260123c3d6d706ed8b5f4d510d9384216422e9af0d293df87ed98e84e1e0ffbf0c7dd543c40c5ccc95bd7cd006c8bbbe9f1cd1f060b1eaa2f7a60fea74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-osx-x64.pkg\",\n            \"hash\": \"4eb508f76a599b5b1a51482657cd4c42446a9e6f7f32b2441127182981e2682e6e13d47bd895a7ae34b7b1b7ee5aabcf28b4e7c817ba5606b3104758945780a9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-osx-x64.tar.gz\",\n            \"hash\": \"a29bc8ddcb15b4be141495cd937b75cb2c1d83cd3d65900f0a591997a834f2187ffd3c56d44e2b3017ef0d70e032468a6630b2e16527aa8913d1a9b88dbe4da7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-win-arm64.exe\",\n            \"hash\": \"0e95d7d7730b106a631a60c0195214f5f33978e9aff98712a6cd91c7c21b7fe8e97f620a9f27b41d0a521027fb92a19495a4062c0689d5dc6402e18e32d422c0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-win-arm64.zip\",\n            \"hash\": \"a8abc0250271acef6872f577844787d297310899f206f96d458848da1b22183fdcbdc8ff6af5f9bc63a41bbebfa724a16c23ceeb117ffac8fd866f15c59e0f25\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-win-x64.exe\",\n            \"hash\": \"ae69e34d0139b9d9232bde5ee9ec8e0f98d997344a9903b11f10dfa3bc07e965ef15f27f8b08befcfb07188f3dc6dfe1c638ef35dbd953fdcd0f548ef489a541\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-win-x64.zip\",\n            \"hash\": \"1b29d6f51c11c2eb3101eb1cfd259deade6a4575e555e5a93839c37a9a14d7f81e7bb57d3e78d8957d7537d95a5db6577320d8e5e44d3bc70f33769f4fdd0aa9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-win-x86.exe\",\n            \"hash\": \"159928dfa5204f7de9f118ea9781aaaac44ef2eae446d8dfe7d817692ad21bf4a550f1de7f423180d920aa9bf9827519c15c3b97071b2215b9493931b84adc53\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.3/dotnet-runtime-5.0.3-win-x86.zip\",\n            \"hash\": \"942088b89ef822a00c902433623144d460d8ae2e9d9973d4ca50fc8ce9db86b580dab14bf2267a2afb46cae98e39ab3b97d0ea7cf64edd9955a224126f44d39c\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.200\",\n        \"version-display\": \"5.0.200\",\n        \"runtime-version\": \"5.0.3\",\n        \"vs-version\": \"16.9\",\n        \"vs-mac-version\": \"8.9\",\n        \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-linux-arm.tar.gz\",\n            \"hash\": \"01544d37e118dbe2bb38c00947b11c64756bd69809c7b2a0c615df6d7d31d432b792c84d39709fb364f73c51a16349829e7331ccfb9307e569c39150e0b802c9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-linux-arm64.tar.gz\",\n            \"hash\": \"684b2f3bc59f090c5be14b993480c2600d7ac6703fb6af098f371f6404df7298e0be283ceef5cb28383ba334e3828bb92825269bf3a6ad4b8b37c2e0b15be3bf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-linux-musl-x64.tar.gz\",\n            \"hash\": \"2e73e524b1d61b9d69a1eb508e239e91aef8245b7947fdb9699ca32660674420239d6bd3d6c43dd8cad406afccda9bade01a8655170f046538aab45751dcfee0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-linux-x64.tar.gz\",\n            \"hash\": \"0d185e30fc2e81e5db452995e826b108f2bc90f7277a9dedc9a7539d9a9554d6f7e6a1e7b2527012c804d686acda6e6b4be1a0210c4d150486c07863b3b27f1e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-osx-x64.pkg\",\n            \"hash\": \"ea5ecb4687985cb05e1da5b2fa09e17e944b0d2e323ef547fb6dfad6dbbef0e6ecd48eb98bd2327d9c6afa6ac20a5b0b5be84e1177cb5941f4d2a22cec2d156f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-osx-x64.tar.gz\",\n            \"hash\": \"c655d35665698c6b1be9fcd5ebe9ee39f97f08552af8decf435dd7c31b273a4c8a1b90e6687c0add6c67148eba9650b2ef1c247a8bf04543cf12a153f4760fae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-arm64.exe\",\n            \"hash\": \"a705ff3f7424c43c0d6067ee414854056588b542eeb66f448796398e59b2a72570d1bad57018721a494d7dda52f8c277b710c80a8c752b5a088a6390070862c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-arm64.zip\",\n            \"hash\": \"4b72b107c45ee79392c8531526989363af39736b50d4b9c378c66c8686fdc91ac236cdfbc08788493e415ad03411a1e6b3ea903ff996a7f1a0bf3c34daea4927\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-x64.exe\",\n            \"hash\": \"ad82e39229f7c1b59578e86b29318a82bfff96831e7d845fb3044e9eed9c40d2963d1ccb8c23d02ace1be9f1591909a366dec9230332c6328875ab5dcc00f53c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-x64.zip\",\n            \"hash\": \"bed2ad5eb95f737687880c0d3903c1474f91c236faafbd541850bd3e0242b48ac213cf94fc9b911e62c40871861678d3cd589a3805890acf4b0f04d111723dda\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-x86.exe\",\n            \"hash\": \"773a81dabff01369b208d3234f526bddb8837b2307cb4d65cdad6e8b708655f6dbeb8e71001967d72270434fb36d74621d2ebe2cb85fb70182f60935db46a46f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-x86.zip\",\n            \"hash\": \"d52ec04a46f9349df254470bbd247323d0d723ed7f4cc90291acd816fa0412c4e39f071a3a6bd347c51d0f93692cfc15b740402326789c2c562f9ec56944ee0b\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.200\",\n          \"version-display\": \"5.0.200\",\n          \"runtime-version\": \"5.0.3\",\n          \"vs-version\": \"16.9\",\n          \"vs-mac-version\": \"8.9\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-linux-arm.tar.gz\",\n              \"hash\": \"01544d37e118dbe2bb38c00947b11c64756bd69809c7b2a0c615df6d7d31d432b792c84d39709fb364f73c51a16349829e7331ccfb9307e569c39150e0b802c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-linux-arm64.tar.gz\",\n              \"hash\": \"684b2f3bc59f090c5be14b993480c2600d7ac6703fb6af098f371f6404df7298e0be283ceef5cb28383ba334e3828bb92825269bf3a6ad4b8b37c2e0b15be3bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-linux-musl-x64.tar.gz\",\n              \"hash\": \"2e73e524b1d61b9d69a1eb508e239e91aef8245b7947fdb9699ca32660674420239d6bd3d6c43dd8cad406afccda9bade01a8655170f046538aab45751dcfee0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-linux-x64.tar.gz\",\n              \"hash\": \"0d185e30fc2e81e5db452995e826b108f2bc90f7277a9dedc9a7539d9a9554d6f7e6a1e7b2527012c804d686acda6e6b4be1a0210c4d150486c07863b3b27f1e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-osx-x64.pkg\",\n              \"hash\": \"ea5ecb4687985cb05e1da5b2fa09e17e944b0d2e323ef547fb6dfad6dbbef0e6ecd48eb98bd2327d9c6afa6ac20a5b0b5be84e1177cb5941f4d2a22cec2d156f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-osx-x64.tar.gz\",\n              \"hash\": \"c655d35665698c6b1be9fcd5ebe9ee39f97f08552af8decf435dd7c31b273a4c8a1b90e6687c0add6c67148eba9650b2ef1c247a8bf04543cf12a153f4760fae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-arm64.exe\",\n              \"hash\": \"a705ff3f7424c43c0d6067ee414854056588b542eeb66f448796398e59b2a72570d1bad57018721a494d7dda52f8c277b710c80a8c752b5a088a6390070862c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-arm64.zip\",\n              \"hash\": \"4b72b107c45ee79392c8531526989363af39736b50d4b9c378c66c8686fdc91ac236cdfbc08788493e415ad03411a1e6b3ea903ff996a7f1a0bf3c34daea4927\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-x64.exe\",\n              \"hash\": \"ad82e39229f7c1b59578e86b29318a82bfff96831e7d845fb3044e9eed9c40d2963d1ccb8c23d02ace1be9f1591909a366dec9230332c6328875ab5dcc00f53c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-x64.zip\",\n              \"hash\": \"bed2ad5eb95f737687880c0d3903c1474f91c236faafbd541850bd3e0242b48ac213cf94fc9b911e62c40871861678d3cd589a3805890acf4b0f04d111723dda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-x86.exe\",\n              \"hash\": \"773a81dabff01369b208d3234f526bddb8837b2307cb4d65cdad6e8b708655f6dbeb8e71001967d72270434fb36d74621d2ebe2cb85fb70182f60935db46a46f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.200/dotnet-sdk-5.0.200-win-x86.zip\",\n              \"hash\": \"d52ec04a46f9349df254470bbd247323d0d723ed7f4cc90291acd816fa0412c4e39f071a3a6bd347c51d0f93692cfc15b740402326789c2c562f9ec56944ee0b\"\n            }\n          ]\n        },\n        {\n          \"version\": \"5.0.103\",\n          \"version-display\": \"5.0.103\",\n          \"runtime-version\": \"5.0.3\",\n          \"vs-version\": \"16.8.5\",\n          \"vs-mac-version\": \"8.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.8)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-linux-arm.tar.gz\",\n              \"hash\": \"ad07c5921b79d3ea3fdd7af2d26f118dcf74aa8ab6e147e0cdfeef94e656606777df8832135d52d24f22b5f1ebe75f51ee78462aeaa262b675e89ad04d55c0bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-linux-arm64.tar.gz\",\n              \"hash\": \"179bcc4d280011a0d23f8f0d78349a372fe495e9c5aff106882c08025367ce49afe897f65c033c3f046bae2b1e49f7f6526edce273ab21e77812bbb8317d08a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-linux-musl-x64.tar.gz\",\n              \"hash\": \"0bb6fc1aa4b8486b437f28baeda3b810f7c38ef195761a5eb4c5236975efc505dbff7abbdf7549a34278d110c8a7cf283e52f033a404b300e0f96a8ae0fca4a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-linux-x64.tar.gz\",\n              \"hash\": \"bf452dbdaec7a82835cfc7c698d2558e7ac4b092e7ef35092796ba5440eb45dd880e86c1e61f8e170ac4eb813240cf83f9fc2e342dfa8b37e45afdf5cd82fb8e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-osx-x64.pkg\",\n              \"hash\": \"2348924b85e63887ecebb0f3b430db69163e180f8919fd21b2833b7af9f27222e8733ee989de180da8a54ff3c6d7735c36b514deeb517f0b1112e7e266b36920\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-osx-x64.tar.gz\",\n              \"hash\": \"fa0a5dac50e49bcf67e96f77ff9074204aa34b0e09c49c08cd9abaaced24f60d878f5fe782c5f01c6b0679e93f3f360aee7cc4687fcf89e92034db7ae38cf6d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-win-arm64.exe\",\n              \"hash\": \"ac40904adc990708c7e2e6771bab879d05557307e17ffd76ab828ef73b2ecb51948ccd66697bcbc16997071f53a1f311fd1e62a2b4c1b85300e527568b739746\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-win-arm64.zip\",\n              \"hash\": \"79a057a90880b3dd9a0c5852585fc532cf53322cf487286f6e845383a187e1967119bfd17bf176a2024d39cc24d925cd719cad4814ac846f9a83b1d13ae9ff2a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-win-x64.exe\",\n              \"hash\": \"8c944c7ee2e33e5bfbf0d95d0b26a5365d42a73f4a95d0b7bed3c24aca0b61cf89cc8539d3452204b82e1ab737a85aa404a9a254d6dab742918d97562006c8c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-win-x64.zip\",\n              \"hash\": \"7ff6316b2bf5219a794d86c716fefe6b80b0c8095f0ed98390f628f4cbd8c573c1a21369ac9aa9596826825ea595afccc14e207489c7346f074cfacf1be94d58\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-win-x86.exe\",\n              \"hash\": \"c55b0427d96b53fb5bf8e47833d486c2a8802123906bf3d92b2688e4cbcd77f6cb02fc61534e2054b78c7c5d5fe50d4e946700feaedd2f90bf7b93f85169aba5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.103/dotnet-sdk-5.0.103-win-x86.zip\",\n              \"hash\": \"08675887ed2ed6016be2581a94967316b4af5ea5a9d43d6ec1541a7925f2eba875804860a28f0e491fb17560d1fac197d8230b43f4e2fa95a98d0eaae6ef46e2\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.3\",\n        \"version-display\": \"5.0.3\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.21023.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-linux-arm.tar.gz\",\n            \"hash\": \"2e9ea5fdb15b8fe56890cfb635216b3c68afb12a48d40e2c1e58838baffb1a80aa75e6da363d878c3caaf9880c506ec12e316b93baae1e307ef04eb90d7d327c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"4eaf1b0120479102b342f1f3a8ad8f40b7326e3657d2b7359c09fd1951c5169ca02d1ead4d4d01f6e594adbe0cb21f135f4c61ff90613219596f6cc222161717\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"adfd3548e9b8bc826a5746edc9501a504912a08e5b397a71b940847ff1f86edf85b747ce261a80dffa95b7cd7265f3d7552921e7216f224f4cb409b45e207d64\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"cd4471a542b4883987c067ecf180bd1ccc414f54fc90dd134c59bdba58f8e102366494b4fffb242de57c248d3915f34953de5330a9664b318ae58c1e1c004905\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-linux-x64.tar.gz\",\n            \"hash\": \"188618b07cd5c97a34c77efccc7c4eba10a52681592ef711a005c82d243e601891418e0dcc27a22aae7dd6ae33d35e0bb7aa9b9fc022746c6c2414bd25cdb110\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-osx-x64.tar.gz\",\n            \"hash\": \"924eaea6a5331835238afc84ba7dd9281aabb4c2fedf0f5383820aebdf13e916720c5889e058e6c1da0261a1f828fdb241fff7a076bef6bc2719f9dc3dc92ab1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-win-arm64.zip\",\n            \"hash\": \"94ae7496317272cbd2f5a3e495e1b4c5e493a4c716fa82d8b19e78a1654510d1aa1bb5c5bed9f256e8064a1c5f37d02f15ce425fefc992c30c884d3465066621\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-win-x64.exe\",\n            \"hash\": \"69e8490ab8120ba4c076d4eea2e07e9660ebaef484ec5d7cab436e967574bb672bfd1e7571255b7ec8dda5be6540f530170688c5f68c3656ee45664f1085693c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-win-x64.zip\",\n            \"hash\": \"1188f9af667338bd1785246d1682876c10eabd584f1f8dc52a7cae06d2ad03c0b4236c4a603bd436d5fcf8f4221026b6a64cb4aa5ee13bf1f8e32e3b774e25d0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-win-x86.exe\",\n            \"hash\": \"b41d73e229b024eb89702fc8e11574ead23079b6443ee2a7e1050b982ede4c809e1e3e8f23f0a5bc9024fa07843ed74e2dca1ed29a92dfa794c415dc1b8cf9b8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/aspnetcore-runtime-5.0.3-win-x86.zip\",\n            \"hash\": \"60561070de7b4900099ab23f80b5ce18df6360ad1a3b09306b3fe8ed855d4c117284ba31abec0f10004300b4bed77ded6faf26797a2f418a8e22f37257206ffb\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.3/dotnet-hosting-5.0.3-win.exe\",\n            \"hash\": \"e4e20d60dedcfdab77b04b068b81d2d2f66a767f54db00fa71323850ed96e0ad6c141b6d83fea3dbbeee715c4ade2fb8b45b060cb42130c938e3e28e0a1971e8\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.3\",\n        \"version-display\": \"5.0.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.3/windowsdesktop-runtime-5.0.3-win-x64.exe\",\n            \"hash\": \"216875b7be2bb1991015bd2ad390dda43263db51e173484dd9abaa38ef62c510e446d3135d6a4d84acae86ba2237ceca0645fb9fa2588edf2801c00ef4a13c1c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.3/windowsdesktop-runtime-5.0.3-win-x86.exe\",\n            \"hash\": \"942f3348485fede89e339f4bc4f308fa9dcfaea92d54f805a420849ce37a0f4bcb812b56ecf04312c9dfa363f32ff637c07a72ccd9b8d0a6d131e69717a7e00d\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-01-12\",\n      \"release-version\": \"5.0.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-1723\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-1723\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.2/5.0.2.md\",\n      \"runtime\": {\n        \"version\": \"5.0.2\",\n        \"version-display\": \"5.0.2\",\n        \"vs-version\": \"16.8.4\",\n        \"vs-mac-version\": \"8.8.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-linux-arm.tar.gz\",\n            \"hash\": \"bfdfdd0dd176af6cdaa61c50b3fa8687031c6ff9e4dc67a6e02fbf24660ef456ad1946c00f9f013751ccc59f777b04ee535d8998996edc67101df17c3413fa77\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"4328bee854cabda54e9a81c9351b8b86291357b6b1cb7802a1b3733238afca5a0910329d0ede4ba5755766601c32694580622eacde62cd18a64144cbe270ba8b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d2b17c34cdffc70eca58bc139cdd38fd6ac998631f25cab145047e3509df5a9c0b8cc8a88fce32e5bf2982b6ef373a3d0ef3f41cbb88e270b9dce35aff7d67e7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"84e69846188689cf5ee1eddce77c6cf92a7becddac9cdd9b985a490446d5acbd5d59e3703e8da4241895c1907b85bac852735c756098774e3b890c1944cda64f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-linux-x64.tar.gz\",\n            \"hash\": \"e3ce93a74e9c69098e6767ac1b36b53ce71da53bce68c9b84bcd767c2015cf4f818640cb5311c2cf3934e9f39e59562cc83a533956d114ad446420b7c26f53a7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-osx-x64.pkg\",\n            \"hash\": \"1c73d94d53fcd469c7179a77ecd6d8aa9121f7303115e838dea8a2594a105f01bada39a7f1530d92da0121538fbfe3f4a1f90a2b37e3d7200f6d8b5a4b9a0afb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-osx-x64.tar.gz\",\n            \"hash\": \"08d77120b7eb9e8080d7ac11147d09fd725c022f49f297a01d17fb432fc104918811c9db6343fbfcda6894fab5a431dd54600b56e4bbb2aed2b0fe8a9592bfa0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-win-arm64.exe\",\n            \"hash\": \"59b915dee5f4865925598bdcebee3cee3117f7487908f933a1bd6447ea8fc9bb1e80b15c42908012e898f2500b340f7bafe0106a55d17f215da43e173b8ebbd3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-win-arm64.zip\",\n            \"hash\": \"d388f38c31fe35606bb5f6b2b1dd2d18d52ad64aef6cad493e1ba25a8b3b85a562dc55c748173ade0a836711562374c58be9fb0d172a56d6514057857311bac0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-win-x64.exe\",\n            \"hash\": \"3baee14a3e2ecefea9dfd6de20c35886af8542b43f27fe83c74f24ed188810d50cb8d06b1991a092da923e565b3630534bb8423c92c0d580be0ab752c7703b51\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-win-x64.zip\",\n            \"hash\": \"8b63aa1acbe0633aa50e491c52e7782d2f60ded441c99980a81f7479b57c10e660a9c2faadc4d860757f0ee55104688d4cd3c0f4f42e85d313fb1a64ae7a3cf3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-win-x86.exe\",\n            \"hash\": \"9b7408bce5940b386b431ae8df5f49c8864e1435f61c603f838f55650d2d07592c9e4c9700420b3f1eed680c4ba02e10ac420d9ecf5f746214f10345b1502cf1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.2/dotnet-runtime-5.0.2-win-x86.zip\",\n            \"hash\": \"0072f29192ad48d246ae187505b7413a61a61f3b0e69b8ca53ce0d37e88f58138bbdbadf4decb3ae20194aea6fd7d6003c7e09170f7f98e3c036e63cc07d2563\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.102\",\n        \"version-display\": \"5.0.102\",\n        \"runtime-version\": \"5.0.2\",\n        \"vs-version\": \"16.8.4\",\n        \"vs-mac-version\": \"8.8.5\",\n        \"vs-support\": \"Visual Studio 2019 (v16.8)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-linux-arm.tar.gz\",\n            \"hash\": \"23610a4193d8116109aaeebefa0bf023808f86d3e0a8ba52b89aa5b4b869385a5e57fc8458ff12f9ea8f359f6978498d47fd80d073ab79b2a7dfbc103b8ff903\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-linux-arm64.tar.gz\",\n            \"hash\": \"031272b86f435f88963b560c14342635d892345ac9a35d59ecaf6e425de8aab15ca5c3d0685c79027364e7a323927ba90568fe7ed8610f52ee5f961aef9fcf72\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-linux-musl-x64.tar.gz\",\n            \"hash\": \"91ac9ea608b38402b2424d7754a823fade38261904a0fbb087f982b324aacf322c3500b520507f21b4aaac40eb059d8ef6d1656fd4f161d5afde2950210e86e8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-linux-x64.tar.gz\",\n            \"hash\": \"0ce2d5365ca39808fb71baec4584d4ec786491c3735543dc93244604ea97e242377d0987cd8b1e529258dee68f203b5780559201e7ea6d84487d6d8d433329b3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-osx-x64.pkg\",\n            \"hash\": \"c7b6d24e86484fb692397da946509245e4b959ea1aedd49c1de7275c89ea9b61af29c88f3e40885ddd27e427d965cdf06f808c988b08c426cd797fb5b670118a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-osx-x64.tar.gz\",\n            \"hash\": \"7a3678b6b684797011d09447f6d66fbeaa42227cba8266f6a7735752d47a96be8a910fff0463fe8d021e83204f474659f69a6c192bd5f06141699e3417748554\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-arm64.exe\",\n            \"hash\": \"170e6ad7ad82a5c915a0808eecc916243f9a6330c166066e3c54ba33d4d574ff9af8f166368e4245c774056a3fb503264a900d219f95a4a6d4d737c496156202\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-arm64.zip\",\n            \"hash\": \"58eb25e69f161e7a6aa058b3a9cbaf0fdd4c605341cf6e4f2ce61d3108c252c7de0498e857c994ab1c27f6bb35504ee11b1c35a72c8e371f128f643d3266a744\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-x64.exe\",\n            \"hash\": \"378dd2a216f4274fdddea6c385dba859ed7dad884214e48cca6e088529e0082486866c5d5e59e30d15baca0ea638963b6e4fb72bee1cac77ef6e12d3bb6f99b2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-x64.zip\",\n            \"hash\": \"118056d7c60d9591b0a803fb4f8941b6fa5166553d1deac625279330b05599073231ee4c4ecdc3f179d57261290b6c62ac7f34d5f89c8b06274e2346a069f79b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-x86.exe\",\n            \"hash\": \"5ba01b2369275b02b6f62578c3fde0011fb6cd4e5e15e1c4d392cb776ae65ff5c2b3a6dac686837c8051e7d8c1c89231c49eb38497471a1d33b90ea5ab9f60d4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-x86.zip\",\n            \"hash\": \"079262cac8b88466cd077f3f54b9696ee1f6484764a5e6df6bd9a3cdcc9fd6e59c004f33923a9967a0efb0e3a4482034490ce3d4460a59611fe949d33d4186aa\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.102\",\n          \"version-display\": \"5.0.102\",\n          \"runtime-version\": \"5.0.2\",\n          \"vs-version\": \"16.8.4\",\n          \"vs-mac-version\": \"8.8.5\",\n          \"vs-support\": \"Visual Studio 2019 (v16.8)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-linux-arm.tar.gz\",\n              \"hash\": \"23610a4193d8116109aaeebefa0bf023808f86d3e0a8ba52b89aa5b4b869385a5e57fc8458ff12f9ea8f359f6978498d47fd80d073ab79b2a7dfbc103b8ff903\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-linux-arm64.tar.gz\",\n              \"hash\": \"031272b86f435f88963b560c14342635d892345ac9a35d59ecaf6e425de8aab15ca5c3d0685c79027364e7a323927ba90568fe7ed8610f52ee5f961aef9fcf72\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-linux-musl-x64.tar.gz\",\n              \"hash\": \"91ac9ea608b38402b2424d7754a823fade38261904a0fbb087f982b324aacf322c3500b520507f21b4aaac40eb059d8ef6d1656fd4f161d5afde2950210e86e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-linux-x64.tar.gz\",\n              \"hash\": \"0ce2d5365ca39808fb71baec4584d4ec786491c3735543dc93244604ea97e242377d0987cd8b1e529258dee68f203b5780559201e7ea6d84487d6d8d433329b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-osx-x64.pkg\",\n              \"hash\": \"c7b6d24e86484fb692397da946509245e4b959ea1aedd49c1de7275c89ea9b61af29c88f3e40885ddd27e427d965cdf06f808c988b08c426cd797fb5b670118a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-osx-x64.tar.gz\",\n              \"hash\": \"7a3678b6b684797011d09447f6d66fbeaa42227cba8266f6a7735752d47a96be8a910fff0463fe8d021e83204f474659f69a6c192bd5f06141699e3417748554\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-arm64.exe\",\n              \"hash\": \"170e6ad7ad82a5c915a0808eecc916243f9a6330c166066e3c54ba33d4d574ff9af8f166368e4245c774056a3fb503264a900d219f95a4a6d4d737c496156202\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-arm64.zip\",\n              \"hash\": \"58eb25e69f161e7a6aa058b3a9cbaf0fdd4c605341cf6e4f2ce61d3108c252c7de0498e857c994ab1c27f6bb35504ee11b1c35a72c8e371f128f643d3266a744\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-x64.exe\",\n              \"hash\": \"378dd2a216f4274fdddea6c385dba859ed7dad884214e48cca6e088529e0082486866c5d5e59e30d15baca0ea638963b6e4fb72bee1cac77ef6e12d3bb6f99b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-x64.zip\",\n              \"hash\": \"118056d7c60d9591b0a803fb4f8941b6fa5166553d1deac625279330b05599073231ee4c4ecdc3f179d57261290b6c62ac7f34d5f89c8b06274e2346a069f79b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-x86.exe\",\n              \"hash\": \"5ba01b2369275b02b6f62578c3fde0011fb6cd4e5e15e1c4d392cb776ae65ff5c2b3a6dac686837c8051e7d8c1c89231c49eb38497471a1d33b90ea5ab9f60d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.102/dotnet-sdk-5.0.102-win-x86.zip\",\n              \"hash\": \"079262cac8b88466cd077f3f54b9696ee1f6484764a5e6df6bd9a3cdcc9fd6e59c004f33923a9967a0efb0e3a4482034490ce3d4460a59611fe949d33d4186aa\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.2\",\n        \"version-display\": \"5.0.2\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20336.1\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-linux-arm.tar.gz\",\n            \"hash\": \"b62b97931ba457aa4c023e021c1b6bbc43bcba0544440a7564538372ec39e9ab4a6ecc964e046d17c8cd253f0f7e6ae72b4852b502f223dac4b4eb8f4e50b89b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"154b3745c412427c3a9c7c12ef94dccbd6193d88f676ed02a4036be19de6a53fb1b027a1455f97fbb0c0811713be3e33a0ac8d414ee6b1266a82dca65ff23456\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2759c590827124aac3b097449842fdc8c9a80676e3557955d317ff65950e2fbb50bda2c43c10e3cf0bdae79c2e4715a902dadef297519df6ac03a920ccaa9124\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"d9582bee1dc513288d386ee52bdeb9ed4d5d191d6843b68773f7979ea0d0527c35599722d700a33ce9d59752b44666b17ab7bb36da169c180965252a2742174c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-linux-x64.tar.gz\",\n            \"hash\": \"917978eb091f4af0c403343aee9bb0eac296bc3d67b7a0e2155d211f1c3f332c72f8867f1ea726387854bf26f06b745b8080d2097d4452f69606d01c11af3555\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-osx-x64.tar.gz\",\n            \"hash\": \"5807f7f269e7eff9d5c68220d209d48f1c03110fc7af9fa729cd8ba33734e0291e5bd52a3057a065b99ad6aba658b568df0f1c0cadcd378c79bcf3d3f2d07a4e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-win-arm64.zip\",\n            \"hash\": \"d3e9d765dfecc353e47a400515e15b2238185c959cc6923d2f5daba6f172cb7fe27ddee2560cf16a7c7398ae9c1ca3ff8be071a3f968e4c2baf677c4e50b2473\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-win-x64.exe\",\n            \"hash\": \"f404dd579b41d235178d26a8608281bb171d1554413b9ac53bbdca32e1f3e3c81f0bdc0048d209c5a5d09b9e822ad39a25eea574ac08b21fd02688f020c97052\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-win-x64.zip\",\n            \"hash\": \"cfa07a205973fa39f7722f00151210543181b7aa9607cb88bfc796efbe5ee8b6faef6087cb0a19eee28a957c115bfec75e77cb8bb2a2885f06f27f3022ecbb8c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-win-x86.exe\",\n            \"hash\": \"66d6fe4962607d2d5971723bbb778b1da96007afc6b06c7ede9d6a6e00dda3ccdcaaa10d3285012f00b8ccc11aa1b70017dca6beddf91d85d6d9f37b9e8b3931\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/aspnetcore-runtime-5.0.2-win-x86.zip\",\n            \"hash\": \"0741eaccb993515d8f4df4438de9d790796acc7a5414d5c080b94644659a56b39720e51a0612c13b1d2b50e2ed00cf15e122ae69dfe1348a597c7b592e6b5d31\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.2/dotnet-hosting-5.0.2-win.exe\",\n            \"hash\": \"194687f833d081288315ca87d2cf7aad3dbd2c8e24dfdb7552ae1637058c34a936fec3642952effe1b72aaf4380eccefdaecc9e4dc9c2306cd3446a7fecfb5bb\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.2\",\n        \"version-display\": \"5.0.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.2/windowsdesktop-runtime-5.0.2-win-x64.exe\",\n            \"hash\": \"6e48c1b6717040bbb431638d80cbf612c07316e9ca6bb23ee276e140d509236cdc1e8167b35148e1565a06d1f314bcdcf764597758ad3d9dbd589a6aa75d0dac\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.2/windowsdesktop-runtime-5.0.2-win-x86.exe\",\n            \"hash\": \"97f6313f40159086a544f3f52cc1f34a161bd988f12c4f31b2e86eb9ffec0a72d4c9690616d80739c9f8aa65476ab1c7c4a95e804e9333c810f9d2f6d6e7ad2e\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-12-08\",\n      \"release-version\": \"5.0.1\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.1/5.0.1.md\",\n      \"runtime\": {\n        \"version\": \"5.0.1\",\n        \"version-display\": \"5.0.1\",\n        \"vs-version\": \"16.8.3\",\n        \"vs-mac-version\": \"8.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-linux-arm.tar.gz\",\n            \"hash\": \"b6cf63b4d7025a468dfaa67b1d3f28f9eb5224b040f5729202d0c144c6bf2af01596aad9cc1841a7d4250e1acc83bd9563af78f371cae17901ea8234a210e85b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"4d6c76f158a812de60201d0ec26a802bd2f2b8250041eb0c66c81996969c532e21aab9d485398634288ab885235d0df60697040c87b6fc9000e185ae39ce0c78\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a09c5fea4e5ad30ae4d112290ab5bd88a5861bf3f7e1ef830e9eab8100aace3d81d4ceaa1fa34203b489708979a5f61792f26bd216d6f92ce59e0c87850960ef\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"9a6eef8077f2d1a25a1b4ee9dd9300ac6ddd51b59ce14dd80e105cb18c27f8337517548595b8081be959d4c4d40339997931ed14b4d43aeca8d335c58bc382de\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-linux-x64.tar.gz\",\n            \"hash\": \"791af58eb2a4c7e7a65f0d940cfa09cda3318cb482728dbf40848543e1d04aa9ffd7e8d4fdede1b4fbc6f54250bae4e0c4a5bf208e04705f5c5f00375ac009b7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-osx-x64.pkg\",\n            \"hash\": \"59870b0cd3d47805c2b95c679f3f9f8bf9da0a3710876d8a0b7f3c390b60a949c595781d0e3b3456e2ebc487bb2c7eff8d78909d67f2cc7cda91058ac3a6e56a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-osx-x64.tar.gz\",\n            \"hash\": \"6039b20692bc6367367eaa5a6117a1065dbc5c2b24cb8294eea4319337f8b9aa2907a9fc3d00125f1df48c0ef26ecec8c097a26ac5bbdf991fdef7173734b0bc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-win-arm64.exe\",\n            \"hash\": \"f3a41ac14660ec1a2ffb64e1ae7a899a4f6e9b291847480d0cae23fb45d2ace387de0bec97a46eb082462e84e61e90dff1f9d1a618f21fe7c6ec1563b134e139\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-win-arm64.zip\",\n            \"hash\": \"2aef1591228eb5ff08535542230f6ba128e4cf944363cd941ef700eb3e4b68492d882c93a0e54f67c0ad47cc5d885bc22c9770b8d3e248ebc22c612a268809b7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-win-x64.exe\",\n            \"hash\": \"c7f458c5fa4d3b9ee27c62bf792aeb4c6addcc4c757b2794ddf673c984e783715617fe164a2ec793f1ad8ecb5715bd957884b202723309cc731e92455fbd9d5b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-win-x64.zip\",\n            \"hash\": \"036a6f07982349cdc2ffc305387916216707118b7372dbd701c7a58a3ca04fc2648ed1c15b2d101b2c2ae36f2f83da345301fea809d93acfc93e34c66f0bc788\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-win-x86.exe\",\n            \"hash\": \"b8d8925dddbf7b36a30d183ea21b27eada9f2894de798d99cea9cdd45a2cc0c1584ed6d43a6981c35fb55698fbb0aedbf6f4793b74c20acc5dac98f779b877fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.1/dotnet-runtime-5.0.1-win-x86.zip\",\n            \"hash\": \"507ae7cc02c023ba14cceefeb7b7c7434836f3072da81a517886c446f2f1c690d30b1afa211e64493443aa62baf9ad55992bc12a0338fe04bdb2b3ac8bfa29db\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.101\",\n        \"version-display\": \"5.0.101\",\n        \"runtime-version\": \"5.0.1\",\n        \"vs-version\": \"16.8.3\",\n        \"vs-mac-version\": \"8.8\",\n        \"vs-support\": \"Visual Studio 2019 (v16.8)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-linux-arm.tar.gz\",\n            \"hash\": \"2b03ae553b59ad39aa22b5abb5b208318b15284889a86abdc3096e382853c28b0438e2922037f9bc974c85991320175ba48d7a6963bb112651d7027692bb5cde\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-linux-arm64.tar.gz\",\n            \"hash\": \"b26beafd7649fd9081a914909aca6302e8629f24d97ac5d7ac4c7aace007aff93e920510f3fa5a871c71ad42f2e38241115339ccf01d2399b2c9000b53607a86\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-linux-musl-x64.tar.gz\",\n            \"hash\": \"e874661647b530c58e78dad4fc0537739a30c460e31678547e9dc186858c5119730d4e7a6b529bf96655ff11e8fabcecec9eb24b5faf5348fe20b8c7f3080c3a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-linux-x64.tar.gz\",\n            \"hash\": \"398d88099d765b8f5b920a3a2607c2d2d8a946786c1a3e51e73af1e663f0ee770b2b624a630b1bec1ceed43628ea8bc97963ba6c870d42bec064bde1cd1c9edb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-osx-x64.pkg\",\n            \"hash\": \"bda774bacd838179dc917828056445663174d0cc811fb396bdcc0bb6d2d0d048f38a4fa2ce6f5c05d0db40ebfff5d3321ca8ac326ac07f5637ce7779724a2e1b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-osx-x64.tar.gz\",\n            \"hash\": \"7aea6d5b236f8e1c0388cd15680f0939f1bf22e58027fcadbbb8fbf70f7686e5ea0df3877ac686a5713db437ac6848a4ccce73d06738969f6c46d85a6cc758ab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-arm64.exe\",\n            \"hash\": \"bc9025205f632506a5590784d33fbff019010787fe14839939da26e9e68519980b79eb495c92fd1f109af49a20983dd99ab6611d162f9f31fc9595eb6d8eab0f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-arm64.zip\",\n            \"hash\": \"b3a458835f7f433eb96e8b8ddcdac7a6c42167e5aa243adc7a9a0d4a834967135b2b111af5841843ca87cc5c0ba176a1d98bc362b624ddf20d01736ffcf556e8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-x64.exe\",\n            \"hash\": \"1a70df36a57f2c45fe08741a9181a95c94aa93c765c787d4981646e17dd29daf2b2111f11a3a46cebcebc108d9e11bcd5b510f07160f43881abf49cfcf08ce9f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-x64.zip\",\n            \"hash\": \"7298d1b370b2055f95c03a628f78dce97470434a76907e20ad1ea14b55bdb0a67b2a78f5b5ec928b914df735e89ae9f3a8033d0fe2112a38998581598d35e931\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-x86.exe\",\n            \"hash\": \"d15f8a43ecc4d84744cec79374c70addc8cb91aa9b5625d7171314787f711a6d53292efe88bf1694b664e012a4c2a469966185b7aef5d7f260f51a3b817f3fdd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-x86.zip\",\n            \"hash\": \"d22252a378fc566c3e3209e463905e51cc7dfa9f5dbc795513889025b07fee927e681c3392a8778e44bed4d084ede949917b81aac5e6e3ec10b0abbf4b1c59c4\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.101\",\n          \"version-display\": \"5.0.101\",\n          \"runtime-version\": \"5.0.1\",\n          \"vs-version\": \"16.8.3\",\n          \"vs-mac-version\": \"8.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.8)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-linux-arm.tar.gz\",\n              \"hash\": \"2b03ae553b59ad39aa22b5abb5b208318b15284889a86abdc3096e382853c28b0438e2922037f9bc974c85991320175ba48d7a6963bb112651d7027692bb5cde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-linux-arm64.tar.gz\",\n              \"hash\": \"b26beafd7649fd9081a914909aca6302e8629f24d97ac5d7ac4c7aace007aff93e920510f3fa5a871c71ad42f2e38241115339ccf01d2399b2c9000b53607a86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-linux-musl-x64.tar.gz\",\n              \"hash\": \"e874661647b530c58e78dad4fc0537739a30c460e31678547e9dc186858c5119730d4e7a6b529bf96655ff11e8fabcecec9eb24b5faf5348fe20b8c7f3080c3a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-linux-x64.tar.gz\",\n              \"hash\": \"398d88099d765b8f5b920a3a2607c2d2d8a946786c1a3e51e73af1e663f0ee770b2b624a630b1bec1ceed43628ea8bc97963ba6c870d42bec064bde1cd1c9edb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-osx-x64.pkg\",\n              \"hash\": \"bda774bacd838179dc917828056445663174d0cc811fb396bdcc0bb6d2d0d048f38a4fa2ce6f5c05d0db40ebfff5d3321ca8ac326ac07f5637ce7779724a2e1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-osx-x64.tar.gz\",\n              \"hash\": \"7aea6d5b236f8e1c0388cd15680f0939f1bf22e58027fcadbbb8fbf70f7686e5ea0df3877ac686a5713db437ac6848a4ccce73d06738969f6c46d85a6cc758ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-arm64.exe\",\n              \"hash\": \"bc9025205f632506a5590784d33fbff019010787fe14839939da26e9e68519980b79eb495c92fd1f109af49a20983dd99ab6611d162f9f31fc9595eb6d8eab0f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-arm64.zip\",\n              \"hash\": \"b3a458835f7f433eb96e8b8ddcdac7a6c42167e5aa243adc7a9a0d4a834967135b2b111af5841843ca87cc5c0ba176a1d98bc362b624ddf20d01736ffcf556e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-x64.exe\",\n              \"hash\": \"1a70df36a57f2c45fe08741a9181a95c94aa93c765c787d4981646e17dd29daf2b2111f11a3a46cebcebc108d9e11bcd5b510f07160f43881abf49cfcf08ce9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-x64.zip\",\n              \"hash\": \"7298d1b370b2055f95c03a628f78dce97470434a76907e20ad1ea14b55bdb0a67b2a78f5b5ec928b914df735e89ae9f3a8033d0fe2112a38998581598d35e931\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-x86.exe\",\n              \"hash\": \"d15f8a43ecc4d84744cec79374c70addc8cb91aa9b5625d7171314787f711a6d53292efe88bf1694b664e012a4c2a469966185b7aef5d7f260f51a3b817f3fdd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.101/dotnet-sdk-5.0.101-win-x86.zip\",\n              \"hash\": \"d22252a378fc566c3e3209e463905e51cc7dfa9f5dbc795513889025b07fee927e681c3392a8778e44bed4d084ede949917b81aac5e6e3ec10b0abbf4b1c59c4\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.1\",\n        \"version-display\": \"5.0.1\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20336.1\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-linux-arm.tar.gz\",\n            \"hash\": \"a7aa5431d79b69279a1ee9b39503030247001b747ccdd23411ff77b4f88458a49c198de35d1c1fa452684148ad9e1a176c27da97c8ff03df9ee5c3c10909c8b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"794bba781849970be139090e0d9a38530358ad13ba701369096c417cef260b34543f56270c0628696ec33299a999bfbee6d8e6f52722eda845f01f61ea9bf0ff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"62e72900eb433c32d26efd975ad41bcc934959e67c34c8a6176056da0856ee6918dd526dc66d01316ac5773061bd0b691e224d5fd581c8ecbdd9255d5bb8b8d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"004fe94ba94b23eadd91ac2a95d175ee41b5550cdda9c5f48b0c090848562e1b5a33c9875517e9ff4d3c3a18b7c6f2c74d14c0860d3f4c68d388939412a72452\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-linux-x64.tar.gz\",\n            \"hash\": \"fec655aed2e73288e84d940fd356b596e266a3e74c37d9006674c4f923fb7cde5eafe30b7dcb43251528166c02724df5856e7174f1a46fc33036b0f8db92688a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-osx-x64.tar.gz\",\n            \"hash\": \"2471486939d71764dc1d5f2f26f7111481863aaf837142917ec4720eaf04f4a69c01efa25339da496cfa4f719d80be09cc659b4e4da7ae7d87469a3516e7ec37\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-win-arm64.zip\",\n            \"hash\": \"46bdaf5e454e58592be38597aaad5782fc819eb198463b50536380aa5b0818794fa73de3a6383c239dcde9aff02be1e3bf7467c87b8cd15327ed5b2dc8a98016\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-win-x64.exe\",\n            \"hash\": \"d0d9b178fc5dc645750ad45457817b032d7b4ba1bf319c828a6015e9d8301fe9d6f9b747c7224e48f33ea00dd239c4dd174b59cb662658d76fb2be8e87bd41d7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-win-x64.zip\",\n            \"hash\": \"b36513456f4cf860b8999c8831021b2b2b21611e4c66a81a8e13604270bfe4f741f1cbfa1778b459c17db60f3406083167f147ad1aa09c248a0e002c4ed2768c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-win-x86.exe\",\n            \"hash\": \"8eb37ea4f63c419236aad2f864012ccc96b3d9d4362d3ae32ed219f1403aee170e4d3b25454e2685255fd3e6ff225eae75b8d9b771582f35cc064530f6f0887e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/aspnetcore-runtime-5.0.1-win-x86.zip\",\n            \"hash\": \"c32957bbfc7536a56ec24bf6884628e2102bf9f25bb8f0336d328e06f9df8afc4e9e36523520e7687ce0d84b2cc72e668d416ebcfde769e605a9409e2df03116\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.1/dotnet-hosting-5.0.1-win.exe\",\n            \"hash\": \"776aa4d666c93024af8130ddf21e4d406130ea4ff8e4b14067178a994b67dc79d59792fa8909a52accfbd0a7b6ada60a922e108ac5f67e4cdc00a40c63ebd043\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.1\",\n        \"version-display\": \"5.0.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.1/windowsdesktop-runtime-5.0.1-win-x64.exe\",\n            \"hash\": \"ac1be00ce52296148a84ddbcd92c7a78b1c6e09cf65d23fb2859ef050c3ad87eacf70745deb1cea0c64832486eb0b3470219dcb80ed034419bf6673487f2bac6\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.1/windowsdesktop-runtime-5.0.1-win-x86.exe\",\n            \"hash\": \"c2dd979418e353940598ca721ea7927052f043282a219ca26244c0811e2359057719115a5b251cde98fd3a9bca05bdba551a57bf42df035a66de44a69a6e6309\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-11-10\",\n      \"release-version\": \"5.0.0\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0.0/5.0.0.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0\",\n        \"version-display\": \"5.0.0\",\n        \"vs-version\": \"16.8.0\",\n        \"vs-mac-version\": \"8.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-linux-arm.tar.gz\",\n            \"hash\": \"b186bcf68b1fb6fbad750e0716b323e6f474f1977ce413646ecf2b009e2590c66956c44b883cc26263e65d9356ae8cd6f738476cb66a9434cc50d1fc4b11e790\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"c7a5ae2bd4e0edbd3b681c2997ebf1633bfa1cd30a4333cb63fc9945b4e7c9278282516fb5bc22c710ce6fb59dc2e28230c07b0e99826165fa148406ab8afb0f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b2858df7e3bc9d45f2014e0d1cab4490b511694881c713dc5af8e472bca6b218d6a9fc94776727310a8e14a38a29d66475f67d3d02783132125c7e9d285d1379\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"c112bdc4308c0b49fa4f4f9845bf13bfcfe2debed9166e6e6922f389c043d6f7f55a7cc3e03778c08df3ffd415059b90dfb87ce84c95a0fb1de0a6e9f4428b6f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-linux-x64.tar.gz\",\n            \"hash\": \"d4d67df5ff5f6dde0d865a6e87559955bd57429df396cf7d05fe77f09e6220c67dc5e66439b1801ca4d301a62f81f666122bf4b623b31a46b861677dcafc62a4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-osx-x64.pkg\",\n            \"hash\": \"e41d5565b608e2aafc848852bcbf455e9c08023b5fe582bca921839ea79fb5e956916436b4f46cdc1b9a37ed32d322d77a96bcf6e6385a6e8e62f224cbbeabff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-osx-x64.tar.gz\",\n            \"hash\": \"eba97211e158a0c1c15b03a79b42027319d83456dc377a2513c32defb560cd43fcfa1e84154a43243b77ca6b454c4dbc32be4153f0ba9c954c7b1e69ab5d7c53\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-win-arm64.exe\",\n            \"hash\": \"b9f17c8a8683710b67e938e65aa90877f2631a54baf02ee1bf8925bf1b858ae9745052209fbdb8b06e4a7289842b44f0342dfe13300be15005a953d12b24830c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-win-arm64.zip\",\n            \"hash\": \"b44679eba929f66a488e0e47feb127ab4dba3102422c7df5d6c869440c309f85c5decd179a19ec5ba9897ca3b8592453bcd50ac2530cf4f2c8132562d8ab6a4b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-win-x64.exe\",\n            \"hash\": \"989d523afe64e927bef95386b06148e685ef387568dad61cd09ad1ce3805308d835ec765089b1fe622d81a5617ae721af5c9064f195524c1b2a9165111d05c31\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-win-x64.zip\",\n            \"hash\": \"968f2aff18aabc8f9ef0e1a6a3c0c3704d7a010ed453f0d56ded804513ccff913032461f1dbe0ce89522e85fbe5593d444f4310e8fdf7de7c7b72d01912086f1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-win-x86.exe\",\n            \"hash\": \"85e657528350fe95996b6f89ab9d836be91d47b82b3c3523c057f61b351c8274e653fef5e77562ef8ac049ed24cd22186b04594828b26dca69a3fcd792d17d72\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0/dotnet-runtime-5.0.0-win-x86.zip\",\n            \"hash\": \"45f31e5709abc69ba29647565ca1abc2a4d3512de257dd178d7efa4ad5715f0e273ae521a47046aaa606c255d007d2764fe02121fa21a9fbdd3ecd612e147534\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100\",\n        \"version-display\": \"5.0.100\",\n        \"runtime-version\": \"5.0.0\",\n        \"vs-version\": \"16.8.0\",\n        \"vs-mac-version\": \"8.8\",\n        \"vs-support\": \"Visual Studio 2019 (v16.8)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"15.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-linux-arm.tar.gz\",\n            \"hash\": \"c61a0910e34a5d7bffee46835242c24a153bf346e0ef1b048a47d12e60408aa722cec0a08fa1461ab615a4f0d09ef470c479d393f93929837f18699c745c1314\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-linux-arm64.tar.gz\",\n            \"hash\": \"5fceac0a9468097d66af25516da597eb4836b294ed1647ba272ade5c8faea2ed977a95d9ce720c44d71607fa3a0cf9de55afe0e66c0c89ab1cc6736945978204\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-linux-musl-x64.tar.gz\",\n            \"hash\": \"c6c7a505ca4152bdc73869f296b0d8d2f78fd764971656ab5a1d7df24904113280617bfe796b98a1b1cdfe81cb65ccbe0647d4faf3b002b3cc06d18e2b7f0d0d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-linux-x64.tar.gz\",\n            \"hash\": \"bec37bfb327c45cc01fd843ef93b22b556f753b04724bba501622df124e7e144c303a4d7e931b5dbadbd4f7b39e5adb8f601cb6293e317ad46d8fe7d52aa9a09\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-osx-x64.pkg\",\n            \"hash\": \"1faeea85cdeb0abe976f65939cd6a27ffd830c313f1e31518022568f9ecf4ad98bb0512fc39ac898a3d83d8d79d72fe44bad09ff80803f07d1dbdd34ef4a3a7d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-osx-x64.tar.gz\",\n            \"hash\": \"69ccc7c686ac06f6c658d118f59cf1a0e7284b4570375dd88d3e3043098e311745922301f2650d159624d09c4d39a1f3cbdd5daee0e408eef915de839e3bce8f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-arm64.exe\",\n            \"hash\": \"5386b13e10eb2a34be3ede870c9da145fb1b9259be8ed83a22a490f1bc829ac90c1671d328dca43d6d923278d9d1342fc69c5fc23d2407e6cc80d362d365d575\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-arm64.zip\",\n            \"hash\": \"d6f5057d5b31521219aa8c0a3e5195eae1892e5281109343c4f5605ef95553bc35471be92e0a68cd26b7d80b2b9c5653ddcedcba2a84d14a3b8f44457073e15f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-x64.exe\",\n            \"hash\": \"14c6a264451c48b6f7b0266adc9a0ffe0ebf9b954068531585e503e0c6b7ed4921822fb64de0bca31bf4065cd3ecf1d61bd6aa242c5e930affbdcb2bb6eaaf5d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-x64.zip\",\n            \"hash\": \"6836916bc6f3f9f7c183eb49fa1f6130640bcf623f310785466cb36c98f0554d656ec69ce3524f22d1e0d21528796182c7b4f0ed7c66e37cbc0ecbcd9f59bcd5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-x86.exe\",\n            \"hash\": \"66b2b126cacde2ac31f66aae091a472ab336b14802bb04c54d70f794ac67392c318644ea393e8dbc8b493dfbc5f0c6ddcdd13dc01f17d900650f32973558a999\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-x86.zip\",\n            \"hash\": \"66bb16f536d7223544c97a33499ab35d35ca0648b80012a9fa7ab13184ac84ecf4b0a2ffa9b2c7829cf525777bca873f62d57989a8c68baa1f0ef327b1b3763c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100\",\n          \"version-display\": \"5.0.100\",\n          \"runtime-version\": \"5.0.0\",\n          \"vs-version\": \"16.8.0\",\n          \"vs-mac-version\": \"8.8\",\n          \"vs-support\": \"Visual Studio 2019 (v16.8)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"15.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-linux-arm.tar.gz\",\n              \"hash\": \"c61a0910e34a5d7bffee46835242c24a153bf346e0ef1b048a47d12e60408aa722cec0a08fa1461ab615a4f0d09ef470c479d393f93929837f18699c745c1314\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-linux-arm64.tar.gz\",\n              \"hash\": \"5fceac0a9468097d66af25516da597eb4836b294ed1647ba272ade5c8faea2ed977a95d9ce720c44d71607fa3a0cf9de55afe0e66c0c89ab1cc6736945978204\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-linux-musl-x64.tar.gz\",\n              \"hash\": \"c6c7a505ca4152bdc73869f296b0d8d2f78fd764971656ab5a1d7df24904113280617bfe796b98a1b1cdfe81cb65ccbe0647d4faf3b002b3cc06d18e2b7f0d0d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-linux-x64.tar.gz\",\n              \"hash\": \"bec37bfb327c45cc01fd843ef93b22b556f753b04724bba501622df124e7e144c303a4d7e931b5dbadbd4f7b39e5adb8f601cb6293e317ad46d8fe7d52aa9a09\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-osx-x64.pkg\",\n              \"hash\": \"1faeea85cdeb0abe976f65939cd6a27ffd830c313f1e31518022568f9ecf4ad98bb0512fc39ac898a3d83d8d79d72fe44bad09ff80803f07d1dbdd34ef4a3a7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-osx-x64.tar.gz\",\n              \"hash\": \"69ccc7c686ac06f6c658d118f59cf1a0e7284b4570375dd88d3e3043098e311745922301f2650d159624d09c4d39a1f3cbdd5daee0e408eef915de839e3bce8f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-arm64.exe\",\n              \"hash\": \"5386b13e10eb2a34be3ede870c9da145fb1b9259be8ed83a22a490f1bc829ac90c1671d328dca43d6d923278d9d1342fc69c5fc23d2407e6cc80d362d365d575\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-arm64.zip\",\n              \"hash\": \"d6f5057d5b31521219aa8c0a3e5195eae1892e5281109343c4f5605ef95553bc35471be92e0a68cd26b7d80b2b9c5653ddcedcba2a84d14a3b8f44457073e15f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-x64.exe\",\n              \"hash\": \"14c6a264451c48b6f7b0266adc9a0ffe0ebf9b954068531585e503e0c6b7ed4921822fb64de0bca31bf4065cd3ecf1d61bd6aa242c5e930affbdcb2bb6eaaf5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-x64.zip\",\n              \"hash\": \"6836916bc6f3f9f7c183eb49fa1f6130640bcf623f310785466cb36c98f0554d656ec69ce3524f22d1e0d21528796182c7b4f0ed7c66e37cbc0ecbcd9f59bcd5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-x86.exe\",\n              \"hash\": \"66b2b126cacde2ac31f66aae091a472ab336b14802bb04c54d70f794ac67392c318644ea393e8dbc8b493dfbc5f0c6ddcdd13dc01f17d900650f32973558a999\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100/dotnet-sdk-5.0.100-win-x86.zip\",\n              \"hash\": \"66bb16f536d7223544c97a33499ab35d35ca0648b80012a9fa7ab13184ac84ecf4b0a2ffa9b2c7829cf525777bca873f62d57989a8c68baa1f0ef327b1b3763c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0\",\n        \"version-display\": \"5.0.0\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20300.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-linux-arm.tar.gz\",\n            \"hash\": \"998b4a4b6f8f945b7521f560b3ca330c1d6e5e7f60d31727389cb1adef45a818846bf083dd8735fc9996eb030ecd1cc93f799ed7ab531ce0d11ef01bcfdde95f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"13e174de1cf10135531468c2a76852de2c37253f4d8b487ff25d249c2d7a1c590475545ca246515338baff2950422ec6c5ffe2180e8327f25cb5f9fede696ccc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fb0703d66b223fed4d9d7d18c943e3a56fe7048b747a98edfce5abbebf37bcbf9e76bba50822704d028ecd004a48d72a1cab9a1ef4f2a99acb3f7fa6480349d9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"1f36800145889f6e8dd823deffce309094d35c646e231fd36fa488c83df76db7b6166eea1d50db0513e0730ca33540cb081f7675ea255135e4e553e7aa5ef2ce\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-linux-x64.tar.gz\",\n            \"hash\": \"402046ee144915ef7d75a788cf19552eea56cf897681721b74bfc403fd366f71eb7e56f6b83ea299b6b812c6b87378c15e7bfe249415427dcd147dfeacd084d0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-osx-x64.tar.gz\",\n            \"hash\": \"b47a9958f5412b22edb2cb47702ad442c389901ede3ca2a7f75d901f8ed608494431849f498c2191327065ff1db52a1658b1a8c0feb53aaec4c814fb0baf6818\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-win-arm64.zip\",\n            \"hash\": \"4a2b3739dc0b1dd8577cf68aa3d382a52bb9be0470552213b658f3a59d504823d83a903f774a34470220f058cdc3dd068318344a1104950ad5ffc8c0d13cef09\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-win-x64.exe\",\n            \"hash\": \"723ecbb1158d6b2878c1983b48f4dc4e8487b5dac15992ed1fe5bf1ccb5ee2c9332eb8cad8a452d585fdc2b99e38c337e87d03eec9616694f1e6e99825ba455f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-win-x64.zip\",\n            \"hash\": \"ead6b1e12361261124bb89de1e77dba9469ce00483d963b237ce1e2a17500e420c2bd078c2732e7ce269e23ee3922b880f88ade9c1426c7170045fec1818ece4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-win-x86.exe\",\n            \"hash\": \"594e013abc6fbe96f0d95f6c69be9522da985c8e627166492c39f5db0ffcffb445549ccfd61171ef6e8be374afcb477455ed7b189b91eb9aa6656ac7e0f65da2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/aspnetcore-runtime-5.0.0-win-x86.zip\",\n            \"hash\": \"a36b96c34c0c6a7e47f484a45c9ba02f1e7b44ea7dfed9289d0e37ea4af366bb0a8e0a4dd5a67efab5d1fd01a42d67ece1a001ea7b15b050ef35eea67094df60\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0/dotnet-hosting-5.0.0-win.exe\",\n            \"hash\": \"a887fa32615237d6174f5b8c537c25d2413f928d9f24c0414356b2d0a01bde7ee5874db45e344dbf7c8de4ce1c7034a175c29bfd0ce1f27820412098adc5b64e\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0\",\n        \"version-display\": \"5.0.0\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0/windowsdesktop-runtime-5.0.0-win-x64.exe\",\n            \"hash\": \"243986604ea7ec1332960536e6a534b7755d2bf29a585ca7e5bcd60570ab72c0f8ace0755b0e1a0a5972dc77c28bb3a5f152f8ed84d2acb2fa76c22916ac4376\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0/windowsdesktop-runtime-5.0.0-win-x86.exe\",\n            \"hash\": \"144df140b566aa76b4bbc6259288d832df36935325c90af4cb9c28027f8625bdddd8369b03787d78e7a0502597ed809fbd20411549b4b93b127e88ce94b36e27\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-10-13\",\n      \"release-version\": \"5.0.0-rc.2\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-rc.2.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-rc.2.20475.5\",\n        \"version-display\": \"5.0.0-rc.2\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-linux-arm.tar.gz\",\n            \"hash\": \"37b0f89157a748bca6c8d7a01f5e8d6438d60208e77b6734d4624ac3c1c29997aa28b7f01a86c5d6e1fb187ab3d61643a655cc6db6bb5cd01df3f6039e91103b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-linux-arm64.tar.gz\",\n            \"hash\": \"0ea8c2461262f27da9ff83877c9f53ba4bc043d829df1978cfdc6158cc58be678fd84f60935a02ad245d70c6e8fff05bb025cfd35419b3d335291688114c0021\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"015ed92c4a4766a9a2f0e2fd6d138be1a886d8ecef9b1765a4b3c24767d7326cb00cd3d4aabc04921d65827ce72bfbbf17097ebd2a7b3e3c12b9a8fc95970939\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"2e4baec3c3746210cae4e920046ec6bede9caed1cdf30382295fd1b203bf08e6bee5bee0da3067f0317b31d5d836b6ce63b63fd163d599e71d71fc30f0ef37f1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-linux-x64.tar.gz\",\n            \"hash\": \"945d35b5e375a722fba6ae2986ef70bf1940ea3ccfe16f5e2211250354e2585ca4211589e0d14c127675c46c0e66df28046ce8f820ef7a71c9712c19c3f4c13d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-osx-x64.pkg\",\n            \"hash\": \"cfe08de2fc74e6b429954c215147e412f2ca54b80c7276c987e05eb11fb608c355765477e3d6d2ee728d20151496e5485f3c431ea8d4ecbc7ba03c9aaaaf38d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-osx-x64.tar.gz\",\n            \"hash\": \"cd5ae708568ce888d2a846a61aeb07a7ddba3b4eb5325476465c07b6be3853f4f085d46136e43c8eed1591931c3409df3cd4c09b358efafffd7f0c9977d18d90\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-win-arm64.exe\",\n            \"hash\": \"fda592d6d227ed6a823e731546e4ffad9fae198a32e0f70b0830dfc600a572d95902c94f2ee110ff59d4265c04972e977663582b04f4119261c490d4c40ebc3e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-win-arm64.zip\",\n            \"hash\": \"3c85c0269ff67374b4fb3e1bdc5cc8ef5b100b4bc440860dc9c279211fb14139c1660fe2f2abdb311107f86ac6196c487b53d78523143dbb900efa23c40b7873\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-win-x64.exe\",\n            \"hash\": \"2949b61cd69261b736625a7e3772a153f1d6f9e0fac2a10527d39ca77dcee50cd52fa03dd06fd40bc961e3acbee7e4f6038bc222697ff95fd42ca89986a4d889\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-win-x64.zip\",\n            \"hash\": \"c30f33faacf5c2672339a29337984b7dbf64ba989a19396f9bb1858e5dfc4ce758787cae3c08580f864f30c491721d5a22a6f54ebd89deed1135b44181f901fe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-win-x86.exe\",\n            \"hash\": \"fbe2633fadf447850db137bdbd8fd55efb2918314b3f74d1c677b2f096ef4fd2e112931d2b33822807071a55c1dc6ec4ef3f69f5f74c1f911f88db51d776e262\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.2.20475.5/dotnet-runtime-5.0.0-rc.2.20475.5-win-x86.zip\",\n            \"hash\": \"aefde8e640b85a414e4624f81359df451bb7581cbc76098503df8f2ba1795274e16dd6687001f00bf7bf3c8acf01ba206556e5610bfe53513c4b639f9e3416b4\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-rc.2.20479.15\",\n        \"version-display\": \"5.0.100-rc.2\",\n        \"runtime-version\": \"5.0.0-rc.2.20475.5\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.8, Preview 4)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"9.0-preview\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-linux-arm.tar.gz\",\n            \"hash\": \"22e97c15393a4f986563f5e8b031b49983eb55531170b86594d7caab819b41032393a9b3db4ee96cb88fae3971ba243bb64187606e3a00fc64d2e434d906a637\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-linux-arm64.tar.gz\",\n            \"hash\": \"1aab49b2c328c4de8c40e790df99aa327a3aeba5d904696fa151acbfb7b5620ebf3d1e2e9726895d92b6146295840ffe3f2fb7208a81c7b73d2c92c9fcf50dbf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"1d44838a39810112e0c5b96ae8234e84f805ca4913888c18882ed7c0e291a7677672f593037a2dc94c6ad08c4d869394df72a4d42e0c668337df89327026aba1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-linux-x64.tar.gz\",\n            \"hash\": \"e705043cdec53827695567eed021c76b100d77416f10cc18d4f5d02950f85bf9ccd7e2c22643f00a883e11b253fb8aa098e4dce008008a0796f913496f97e362\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-osx-x64.pkg\",\n            \"hash\": \"53aec8d6486dd9f903ac59b68e711dbfc5eb4ad0250496098e96cbb2dce2a08244b61114faf1feeca6e343dbd510c16438852abbb693cc5a5d4db026bf17b3f9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-osx-x64.tar.gz\",\n            \"hash\": \"05a60dd57a0fc7a4d2cd517aff1c1685665009775a270e1e6ba2f632d24bd3439f026f4e287cbff4c22dd98f7713d8f34d785e3bbb73f6d0e530fd324b8c761d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-arm64.exe\",\n            \"hash\": \"fca159e140de6786b7290383356671424e2c15efa7b89b82826cbcb58c499fd3292dcb61f47aac026f57f93bdcd902309681b9aa434f16c3309d80e10ce300d3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-arm64.zip\",\n            \"hash\": \"6d1488d2cc4f8bb2a935f5e0ff501bc21210c601d4ca0faac9dd603675b03cd71c20d15fea8ded88ac40b0ca0d3824a9097c98e05a3edebe53ba42b861efd9ee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-x64.exe\",\n            \"hash\": \"c9668250d1bd1017d1d847e380bd28eaa6b967cc952c1933e8978e9fbeaaf9b9edc24d48cb932296a8c1749999345b07d8167ab1430930732921c896ca2dc27f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-x64.zip\",\n            \"hash\": \"49ea4f9e0fdc51bfd46b1269b84dd09f26be957c3a81c80203a0b0d521c8ec190d0d2d631a4e1899c83b604bf9a529698f19eccdf4aed3d0fd2f89102f6556e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-x86.exe\",\n            \"hash\": \"fd635f153c6bb4b1a4ed4839f50775dd3f4ec44dc6c3483b9640b1e2ae61c85051d52fcf774d815cb35260b35e11403ba7399520e6eda61442b64c16e4e9715b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-x86.zip\",\n            \"hash\": \"44d25f3c304b50dfabf03b21246432fee397ce51948675e0b66032e5d87d61820134cff353ef05125ececb91f04d0ed8b7b049936adfd7eb6cd975a259bc51cd\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-rc.2.20479.15\",\n          \"version-display\": \"5.0.100-rc.2\",\n          \"runtime-version\": \"5.0.0-rc.2.20475.5\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.8, Preview 4)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"9.0-preview\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-linux-arm.tar.gz\",\n              \"hash\": \"22e97c15393a4f986563f5e8b031b49983eb55531170b86594d7caab819b41032393a9b3db4ee96cb88fae3971ba243bb64187606e3a00fc64d2e434d906a637\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-linux-arm64.tar.gz\",\n              \"hash\": \"1aab49b2c328c4de8c40e790df99aa327a3aeba5d904696fa151acbfb7b5620ebf3d1e2e9726895d92b6146295840ffe3f2fb7208a81c7b73d2c92c9fcf50dbf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-linux-musl-x64.tar.gz\",\n              \"hash\": \"1d44838a39810112e0c5b96ae8234e84f805ca4913888c18882ed7c0e291a7677672f593037a2dc94c6ad08c4d869394df72a4d42e0c668337df89327026aba1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-linux-x64.tar.gz\",\n              \"hash\": \"e705043cdec53827695567eed021c76b100d77416f10cc18d4f5d02950f85bf9ccd7e2c22643f00a883e11b253fb8aa098e4dce008008a0796f913496f97e362\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-osx-x64.pkg\",\n              \"hash\": \"53aec8d6486dd9f903ac59b68e711dbfc5eb4ad0250496098e96cbb2dce2a08244b61114faf1feeca6e343dbd510c16438852abbb693cc5a5d4db026bf17b3f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-osx-x64.tar.gz\",\n              \"hash\": \"05a60dd57a0fc7a4d2cd517aff1c1685665009775a270e1e6ba2f632d24bd3439f026f4e287cbff4c22dd98f7713d8f34d785e3bbb73f6d0e530fd324b8c761d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-arm64.exe\",\n              \"hash\": \"fca159e140de6786b7290383356671424e2c15efa7b89b82826cbcb58c499fd3292dcb61f47aac026f57f93bdcd902309681b9aa434f16c3309d80e10ce300d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-arm64.zip\",\n              \"hash\": \"6d1488d2cc4f8bb2a935f5e0ff501bc21210c601d4ca0faac9dd603675b03cd71c20d15fea8ded88ac40b0ca0d3824a9097c98e05a3edebe53ba42b861efd9ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-x64.exe\",\n              \"hash\": \"c9668250d1bd1017d1d847e380bd28eaa6b967cc952c1933e8978e9fbeaaf9b9edc24d48cb932296a8c1749999345b07d8167ab1430930732921c896ca2dc27f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-x64.zip\",\n              \"hash\": \"49ea4f9e0fdc51bfd46b1269b84dd09f26be957c3a81c80203a0b0d521c8ec190d0d2d631a4e1899c83b604bf9a529698f19eccdf4aed3d0fd2f89102f6556e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-x86.exe\",\n              \"hash\": \"fd635f153c6bb4b1a4ed4839f50775dd3f4ec44dc6c3483b9640b1e2ae61c85051d52fcf774d815cb35260b35e11403ba7399520e6eda61442b64c16e4e9715b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.2.20479.15/dotnet-sdk-5.0.100-rc.2.20479.15-win-x86.zip\",\n              \"hash\": \"44d25f3c304b50dfabf03b21246432fee397ce51948675e0b66032e5d87d61820134cff353ef05125ececb91f04d0ed8b7b049936adfd7eb6cd975a259bc51cd\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-rc.2.20475.17\",\n        \"version-display\": \"5.0.0-rc.2\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20270.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-linux-arm.tar.gz\",\n            \"hash\": \"4e5b0babd454c321c67844a08111f7fd0fd1b594e61ee4b90b76fe05a51abfc8e0989758cf2b7260469e878f1911da22fd731db66dc65e53bcb74e3f82e35cbb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-linux-arm64.tar.gz\",\n            \"hash\": \"e3989a514d38efb4635beb745fbe383d89f7043d32272cd7760347a8d662013e1e2fcec6fc8f84c41f3421593c1922730c21829a8dc3b3246277c14fd8454305\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5f169b7497baa523cf6f7d1e8605619dc90886d7a9d5672d6226d77a9d003af3827481317c30992a0781972f78de191472a31bf10f58cdc81ee95b0d2b710099\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"35e85d3e822317a96dbba0aa239fe05e4f85e77031e3ba0c1fbd2a0800898bdaf377b800ab2a02510d2c0e0e6c51da1659b5afa919ebd0540fea2e02a8d7fa92\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-linux-x64.tar.gz\",\n            \"hash\": \"d60f0bd6218d00bb86eb0882fe0c823dbfca464d2647c01d0c8f128e9ca430c4d4fae47b3f961ac93115b0343300e58f8c81dec2f6dbe9f36accc5ea28d2cc7b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-osx-x64.tar.gz\",\n            \"hash\": \"18860b6f3f7770373b3c95926a70021b94b785cb41d267e77e55c38e1a107aa7ade99b2d0df0e95c8e7cda552b2bb78cfd2b323eae9780af612a1329a4f4354d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-win-arm64.zip\",\n            \"hash\": \"2a89545112a619d9becf621a00bcc5ae32e7ad58fa41414dfbcccab4b58aa4548cd200dfe7f54210cac7e2cb3b589365488fc09a8726ec7ef5fd4f799a833257\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-win-x64.exe\",\n            \"hash\": \"0fb4c3c92a034340393e8b8296351530a7329b1e7f71673242c4003df75fb47dcce35029a613aac7dcdbea3f6a6a99198731862f94381f8fcdbac5a784e90b8c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-win-x64.zip\",\n            \"hash\": \"0085b9fa0580a3e35e7bed3fbcce313750abed3acc62a2d9a295d4f2fa144434ef5b47e352d43586bb48fe356c4f3eb4eccb0edb8dd3e6f763dbf7e50963ea73\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-win-x86.exe\",\n            \"hash\": \"7db366209c25b544345d0c65e63118748a739a411ddaa4403a7f192fc667fa0c3c7ce0103f41853c607965bcc8db2246c89d6e6fb0ec64a9beb3d2c1e2a040e7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/aspnetcore-runtime-5.0.0-rc.2.20475.17-win-x86.zip\",\n            \"hash\": \"503dc312b8c04472d18ac639351b9918f34bc27af968d88edff55c101103c2deccc622d9ddef5af504078e6af85c4b7de8dd83a799902f6726c37a6f3d6ab7a8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.2.20475.17/dotnet-hosting-5.0.0-rc.2.20475.17-win.exe\",\n            \"hash\": \"49ac516fe6fa24bafcfb71be5fe8480d107c474a10bdd5d4da33c5d16e7e22bd42f9757f678ff8c681ccf82e579bcdda2edfd988a01e2c48940b21aaace86d6b\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-rc.2.20475.6\",\n        \"version-display\": \"5.0.0-rc.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-rc.2.20475.6/windowsdesktop-runtime-5.0.0-rc.2.20475.6-win-arm64.exe\",\n            \"hash\": \"94c958e7f6d30c032b7b4469f826f3ad77efe2c44ad9cf6aa8edc99dcd7eb860d348001ce4490346284383995b0aef96b66faf31b44fca0b35814bd0e1aae98d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-rc.2.20475.6/windowsdesktop-runtime-5.0.0-rc.2.20475.6-win-x64.exe\",\n            \"hash\": \"e3f2c851a9793b11b3ce6c8454804111301ff2254268556c9b00610973b4580d2849e85cad91996a3dc98454f9cf63cee035f8c8da1cdbdcc3ee57b7222d3081\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-rc.2.20475.6/windowsdesktop-runtime-5.0.0-rc.2.20475.6-win-x86.exe\",\n            \"hash\": \"9bba9c7fe5e76509df6f6afc985ae4cb5d40fac7338fa12dc56388777bdeef21aaed3f178168025ea56549e55392257f12ac0a1cd4fb13654dc60271f4973844\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-09-14\",\n      \"release-version\": \"5.0.0-rc.1\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-rc.1.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-rc.1.20451.14\",\n        \"version-display\": \"5.0.0-rc.1\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-linux-arm.tar.gz\",\n            \"hash\": \"5aab173d86f267f9a5b2ded5c9990c92c1f60ec512157390752f9f3ed5b64bdbd7ff9180db9398b09c2184bfb8ffb30fb1a54b8934fd81d11c15c53c1a06da7d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-linux-arm64.tar.gz\",\n            \"hash\": \"a03154f8a3e4a21685dc7f0d3d43bcd6bf7d590e67b2f232597cd360cd956261686c90cda0d871b4735fd2bdfee97b6e82828e41807091921c7cbee5f3720fd6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"81a1515131785746a92ccb5e592776b408f5c99c89d36828898efbd49b1fc88e56f77213d56b4f49fc69ab0eaa79931ff8f20c44b75be6ef71bf4281f49ac83f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"a7a393d31e8cc27def0f74ee743de2cdec3f8f8ae27e542c4517815e83dae7f5715f806fb169e8675126023efffbbb28d46cedac2c727b2bd1f8419598d25716\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-linux-x64.tar.gz\",\n            \"hash\": \"c8f6c24029c2d3ef07ea1781a6aac4d51a46aeb33886091df038b76b49830272afe7ac97484e0372e2d3ce2e6c32ba842142f0d1194791922c08445d7ff4cc95\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-osx-x64.pkg\",\n            \"hash\": \"e67deaee44859432274fa71f4b7e99c884729f3e2fab89980f00ca7fb7d0ec1880e6d6ecdfcca29df575caa89540488395e77bd706ce85acace748cdfb6f251e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-osx-x64.tar.gz\",\n            \"hash\": \"c14a1e1e069a346fabf5a247a5b71b9bb5c4ea78c9ae81ae7bc0eed1bf17600d347cfb10c7208e2b05dfd7a7efb2dfe28497058b881758c95f27d863d90bba3a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-win-arm64.exe\",\n            \"hash\": \"2331ee31fe8d14fddf9fa2822b3959089944e57b3c8a5fee65472c2294f3b42c84d3b2a845b85b0c719ac9d6874d798327b62d6b2a2bea6540cd37efac9edc7b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-win-arm64.zip\",\n            \"hash\": \"07dabeec549a7d18ccfc2b2ffab3f4d01427431822ff9ffd322824592c04094ce121613c560389efd546dae028c74c317986239572dcf31de653479f0110f7ff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-win-x64.exe\",\n            \"hash\": \"3ac337da864e1cde907484bb6ea26088ce9e1ce63fd3f0034e10f39337d5abf030a8bb2891c59b65695f1802aed3eb9c283ed5dad9e622ba98061e7e7f01ac1e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-win-x64.zip\",\n            \"hash\": \"7f21e60e173ef609b979550613a3d07ddf0541e59dcf2ac5f20270828142bb84c40ddeaae6177dd69888e8bc4c64642af5a8c3e3e7e037a79c526da2367cd180\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-win-x86.exe\",\n            \"hash\": \"487F80AD3E8F40950E744965507B4D2913CDA2CA03B0F7C4046410EF2CAFC0D199A17CE1DA66338B14ADEA4550DFEC5EA72A95BB3E2423099A6253AE7D0C2EFE\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-rc.1.20451.14/dotnet-runtime-5.0.0-rc.1.20451.14-win-x86.zip\",\n            \"hash\": \"8d1998a6222e5f570ddeda6bf1955c912b5dd591d69fae1d4cadcb0bf55cbf66958a4e727393bf5aa5a62d0a350cdbd9657fca48abbbd86b9b2dfe43d7740581\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-rc.1.20452.10\",\n        \"version-display\": \"5.0.100-rc.1\",\n        \"runtime-version\": \"5.0.0-rc.1.20451.14\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.8, Preview 3)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"9.0-preview\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-linux-arm.tar.gz\",\n            \"hash\": \"b0e6627497ced9d09fad9c48d266bd4cb94727dc254d8b4a79d445732669c14f5d9592a98c0452cb25ae5eb4f642373f544418e36873b33f0f3dd94f14003e26\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-linux-arm64.tar.gz\",\n            \"hash\": \"2d04890c71e845d1eb08f5dfbbb9c93024d7a52fb1cc3fd50bd51bc6bd44e455c5c82abc8f04eef23bd012984ae5f86143c600ceb49c4c733935d95d5b68785f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"68481e880bf0d5a46eaa02d6498bbd3b98332afd275f15ef7925effb2b01ea8a89e73b268299eadcb3d64dc3df7095a1fded5d405fee96b9fb1b1b09a5883eb9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-linux-x64.tar.gz\",\n            \"hash\": \"d7e709dacc4bb188c2380060d24bfb5b791240dc33af8499fb4a31e1885a9377dad1d1ebc76847432ea67d5e4ac832a31679dc293e09fa6dade28f5fbbe4db9b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-osx-x64.pkg\",\n            \"hash\": \"44bd8fefaadd3142adf84ca7cf7e7fd34022a65c8f2ca5735794266ff68d9356bc3babbcdf90b8a36ee0b9aeb6ff9cd98791691bded646f07283cd20917981bd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-osx-x64.tar.gz\",\n            \"hash\": \"06bb40273071f3dd1e84ebf58abc7798795d5f1ac298f24bf7109d1597fd52ff31bcbf2b81f86d91d37ae293678d07f8da0469d7cbd318d19a8d718b6629dcac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-arm64.zip\",\n            \"hash\": \"4a0340155583fafc5f67a761c0858f646dbe1f14c5c43377d1f8e625ec1a182994e4d6f9d831020426ab4aa777d5d854e793c31d3ea0884b2117d9af59f5cf00\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-x64.exe\",\n            \"hash\": \"5631F81D9F06D0199FD32F3C98467DBB4AE59F6160C3EFA6B2BF572509F4178BE50DB9557BA89BD234758F01CF38A26BEF85D24D03E36B0571C47A4394E2EE4F\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-x64.zip\",\n            \"hash\": \"299c1b232ba5a8bdcfd3b890816a3aad806cc22551f6a17554fd3a0220b2168af011431c191e2e33f9dd8a50194cdc207db5dd70708bef45b560af9eb0b20f5e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-x86.exe\",\n            \"hash\": \"6e44fd1ecc91b568f625f85107157ee75d7d9db5a1489e7d18e40be9251ad27ca48345505bd4c0c58c41a9dc67e6b7c9d5bc5e0d46ad8d9ade14adf847c40dc7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-x86.zip\",\n            \"hash\": \"1609b77e47c8237661d2861222a1bbbd9f13f886bf6bfc40fc48e546ba3502ffd2ceebc1a0e03b614c8d744db08bcbf9c7f835f51dbecdb5e862306e913ad66a\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-rc.1.20452.10\",\n          \"version-display\": \"5.0.100-rc.1\",\n          \"runtime-version\": \"5.0.0-rc.1.20451.14\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.8, Preview 3)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"9.0-preview\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-linux-arm.tar.gz\",\n              \"hash\": \"b0e6627497ced9d09fad9c48d266bd4cb94727dc254d8b4a79d445732669c14f5d9592a98c0452cb25ae5eb4f642373f544418e36873b33f0f3dd94f14003e26\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-linux-arm64.tar.gz\",\n              \"hash\": \"2d04890c71e845d1eb08f5dfbbb9c93024d7a52fb1cc3fd50bd51bc6bd44e455c5c82abc8f04eef23bd012984ae5f86143c600ceb49c4c733935d95d5b68785f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-linux-musl-x64.tar.gz\",\n              \"hash\": \"68481e880bf0d5a46eaa02d6498bbd3b98332afd275f15ef7925effb2b01ea8a89e73b268299eadcb3d64dc3df7095a1fded5d405fee96b9fb1b1b09a5883eb9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-linux-x64.tar.gz\",\n              \"hash\": \"d7e709dacc4bb188c2380060d24bfb5b791240dc33af8499fb4a31e1885a9377dad1d1ebc76847432ea67d5e4ac832a31679dc293e09fa6dade28f5fbbe4db9b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-osx-x64.pkg\",\n              \"hash\": \"44bd8fefaadd3142adf84ca7cf7e7fd34022a65c8f2ca5735794266ff68d9356bc3babbcdf90b8a36ee0b9aeb6ff9cd98791691bded646f07283cd20917981bd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-osx-x64.tar.gz\",\n              \"hash\": \"06bb40273071f3dd1e84ebf58abc7798795d5f1ac298f24bf7109d1597fd52ff31bcbf2b81f86d91d37ae293678d07f8da0469d7cbd318d19a8d718b6629dcac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-arm64.zip\",\n              \"hash\": \"4a0340155583fafc5f67a761c0858f646dbe1f14c5c43377d1f8e625ec1a182994e4d6f9d831020426ab4aa777d5d854e793c31d3ea0884b2117d9af59f5cf00\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-x64.exe\",\n              \"hash\": \"5631F81D9F06D0199FD32F3C98467DBB4AE59F6160C3EFA6B2BF572509F4178BE50DB9557BA89BD234758F01CF38A26BEF85D24D03E36B0571C47A4394E2EE4F\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-x64.zip\",\n              \"hash\": \"299c1b232ba5a8bdcfd3b890816a3aad806cc22551f6a17554fd3a0220b2168af011431c191e2e33f9dd8a50194cdc207db5dd70708bef45b560af9eb0b20f5e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-x86.exe\",\n              \"hash\": \"6e44fd1ecc91b568f625f85107157ee75d7d9db5a1489e7d18e40be9251ad27ca48345505bd4c0c58c41a9dc67e6b7c9d5bc5e0d46ad8d9ade14adf847c40dc7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-rc.1.20452.10/dotnet-sdk-5.0.100-rc.1.20452.10-win-x86.zip\",\n              \"hash\": \"1609b77e47c8237661d2861222a1bbbd9f13f886bf6bfc40fc48e546ba3502ffd2ceebc1a0e03b614c8d744db08bcbf9c7f835f51dbecdb5e862306e913ad66a\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-rc.1.20451.17\",\n        \"version-display\": \"5.0.0-rc.1\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20246.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-linux-arm.tar.gz\",\n            \"hash\": \"dbbf0e8e9f96f8c9257d829534932416f13f54023d205b4b68eb04ed9a1a02985902631a43f2e45b063590a39b3a54f0f38b72fa66e023845b75614532a27343\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-linux-arm64.tar.gz\",\n            \"hash\": \"0af8b2292f973ff6c2262f1d5bb2a7963a13bbd952528b931eaa1289b7c62625c896889b74885e55bea633f5f310617994c181a9a8f9cf2410a7de7b14ed80a3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"32a41290a049c891fcc52195be8f4e1f708a3a187ce5f3a811173a1b21433d8acadb7c69c926c4229a55f87598aac1e1ebc9ecf7a4a046c60273bdecbaad17d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"963ad9dbaa48e1224d53b7db3d8869de973e2d576368cb87ba95f3fafaa49cf36e1988eecaafe1e0efbd36f2cd3d9d171c39c5205ad93cdcdcf5a7c13860cef9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-linux-x64.tar.gz\",\n            \"hash\": \"7fd22ab229dd8b17fb086334843ec6c5d2aa5e15bdbc7a101f14426b497edef6e209eba5b103fb54fa56e3d4077589c774cf7ef1796d0b7e209ab39d6688aaf5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-osx-x64.tar.gz\",\n            \"hash\": \"332c971b19aaca0fefdd3838d297edd4c4982f4a50ed80b87b2dcc0a16bd06d72b522118d0ea94739703c3d1d0692407c8ef1011caef6390718a701122ca35f3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-win-arm64.zip\",\n            \"hash\": \"df9480a488b2be74331074397da1df02c4e2fcecc71e648263aef867114ddbdfd5dce9d2a6986a188b9faa5d6a266757f2edabc48808d4846fa3d9dfc9efbec6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-win-x64.exe\",\n            \"hash\": \"6e86df24ac7db8741605c92eecd6e47a618bd41a40cfdd5cefa6f8f4d6b3fbf2a14f820d56cecbe1e0478b3c8dfa482847e88368280a0d3ca9eabe46a8d33d35\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-win-x64.zip\",\n            \"hash\": \"f1c20497158c17541ffe07a4bc203e01ec14da71eaa70d69b184a2c10508ae5dfd2680d84f853c220a11c0ad35ddab6cca97b064e53aea43dd190138b95b57a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-win-x86.exe\",\n            \"hash\": \"d77506b22f2b035a1d54c5388a11f3e9723cab7a119510047b170519a9c7da4a993681e0c42c40ce036428e1dd6ad76f3e33ea33aeac44784af3a5994a749606\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/aspnetcore-runtime-5.0.0-rc.1.20451.17-win-x86.zip\",\n            \"hash\": \"e577dee573a25ed74380e2aa7e379623f46d6b6ca9cc1cbf45f32ef02a075b1363bb465444edb36e15f0ab54eec2444ddf155c6edb1962ecefde866f2052b8c1\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-rc.1.20451.17/dotnet-hosting-5.0.0-rc.1.20451.17-win.exe\",\n            \"hash\": \"db9850174d4780ea04319eafa219d916abb2ee124241ca756ce9a3937a966d1fbc14122629412973b73e6b5417288cc63dff7030fb7a00334e9b2ec607d70831\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-rc.1.20452.2\",\n        \"version-display\": \"5.0.0-rc.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-rc.1.20452.2/windowsdesktop-runtime-5.0.0-rc.1.20452.2-win-arm64.exe\",\n            \"hash\": \"ae7d4ba20c42de38d1205a7deae0cb9f659631437eebc0fdce51de9e19d2d8dd32d09190ca64a635892deb4944fd10fcac7b6913a296f52693930b42973ec642\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-rc.1.20452.2/windowsdesktop-runtime-5.0.0-rc.1.20452.2-win-x64.exe\",\n            \"hash\": \"7814723aeada9ed2f0c5d1f5df3db2e8c34933d497e0d831fbedd5f58999d64d1d5300e370128e3a302f586538244aafe36646e8285a42bcad808a65e505d0be\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-rc.1.20452.2/windowsdesktop-runtime-5.0.0-rc.1.20452.2-win-x86.exe\",\n            \"hash\": \"e74e8da2cf4d5ead67d43ba2d4ba21828e2694ae70ccd8c0bc02372089e4955f3b6cf129378751691ae52c97116b90ab546227109fd5cff68f00433ade05f259\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-08-25\",\n      \"release-version\": \"5.0.0-preview.8\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-preview.8.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-preview.8.20407.11\",\n        \"version-display\": \"5.0.0-preview.8\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-linux-arm.tar.gz\",\n            \"hash\": \"16c5407f377d923b0fd06e116586225bf8ac108d8b81227bc515aecbffd7f780ff89fd05afaa637a2dd77d09992b6dcffc5b91584cde43a441d6d811ac3b1041\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-linux-arm64.tar.gz\",\n            \"hash\": \"cf5becf396e6455358b1e662b722381a9f30125f23736e49f70b39b89d3a2b9c28f9632d2fa871cea6b2762e226dfa88f59b1ee41c9f620ea711a809fb3cd58a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"81d23a8d00203140356a29509335cf59ef00dc3062c663541c16f0d21db57f845195cc6012265903230ff91d9cd2c745c06e01a5adb77515f3f373d334f2aa27\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"fa301f0809a44f2ba6119ac2e39798ad004ed30bf92d1996ea848f50bf06fc9a18d53eaaf907c89690c763b8ab31cb300ff9bfc6dbf2fe115f77467ef788eb35\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-linux-x64.tar.gz\",\n            \"hash\": \"1b609d1bd928fc2015a7148c340d648f80f0e41d39284ac73a5a9e701425ec2c933958e3d9977e780866654876a7c7b3cb2af9f1ec1a426c6aed8538ab15925c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-osx-x64.pkg\",\n            \"hash\": \"d24e62a88591e82872fe253e84ddea4fdee61c6a48c6bc522e6146fe1164caf1adc18d5aee12b209f39ae909c93e46ab557e94c1d8ee20131e3e690cc49c7a7b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-osx-x64.tar.gz\",\n            \"hash\": \"c5d8c47bd3919c50641a3577a03b6364a620388d1f1e0ac2f1625c416781f13954dcd5db8f6d97b85ae1e9dc9ff16d83e6d9631cb0437f207af406e49ac5d498\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-win-arm64.zip\",\n            \"hash\": \"04338fb73396688d0ae9c2ebb430a950b9c5410f7901111cda287397f71b0e322d5d20d76a5e2f48c1f49193a668eb67f7e6ec0794f4124977f2f513f0919a3c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-win-x64.exe\",\n            \"hash\": \"9a5d138b21f2485459c9aa5926698f4019c795cb6ff8b9cf847d00193fd93fb010ee64388ca44052bc02fe1dded722fa3a93f92606b78cf887afe7fd38a8a6f2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-win-x64.zip\",\n            \"hash\": \"c88c804428c3e91c825c4c88e2fa8097740bb359cfdca6906f34939dfa6f3111f3a4b4753d5584aeeb4ef4ff127eab62b05a0b758a59813945e18177730d8d80\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-win-x86.exe\",\n            \"hash\": \"7ebd5ac02a84a4e2523a62ed00a46c2ea4f70f4a9dce791e3b60ccbf9b04cf4f0986e2710af8e8df10dff51f1ad07eb2fb5c5b473dde0de0b604499cf7787b62\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-win-x86.zip\",\n            \"hash\": \"83a5b1f398031362a5097fd1806d742db3694e2afe6b679aa52e897417403ce523ac9c683bfade23e3093b33b6e7b34104371c400e66eeffe87b8d5e10590665\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.8.20407.11/dotnet-runtime-5.0.0-preview.8.20407.11-win-arm64.exe\",\n            \"hash\": \"4c63c192fcc03fc765e410f292f92d83a09cfe85552a1fd488176c1a06d48d5ceab440da67841d0d7a1d305a4bcc48af7079d82bc76d1af13ae431f3923d9a01\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-preview.8.20417.9\",\n        \"version-display\": \"5.0.100-preview.8\",\n        \"runtime-version\": \"5.0.0-preview.8.20407.11\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.8, Preview 2)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n        \"csharp-version\": \"9.0-preview\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-linux-arm.tar.gz\",\n            \"hash\": \"d6ecc2b9d58deb758a5662b1f2234163375f5893f68a922bbff0764e8848c158867087733d4c1d7f056a9f3141200694c7bb7de5d3b044a89edaefa75e8416d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-linux-arm64.tar.gz\",\n            \"hash\": \"129e654636f84a23d486efb5064951128af6e691b3a00010a873721c28c9e88220e0f1e20b8c1c4515d36b018fabc1ec88cd496e6793d246c625198571b8b27e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"72f73241456c7dafa11dfa4611461a9d83903c8407f447f0a504da5a518063f5336fcf0efc1ba86f979373ea8eac20c75da5c05e4c992ffb8a5fcdc8f427bc00\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-linux-x64.tar.gz\",\n            \"hash\": \"0d86c9c2663b635154238fe39fbe32b498a75102851017f27152dccd856e9a1ed48ae44cf1a2b19a5388ea3c4c3f8f2c01a35cd978e52d2350c060394b924a94\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-osx-x64.pkg\",\n            \"hash\": \"d62fd95b984693f955882bfe6b86688590e3dd23d8d36d905aae90289a18a9c5ad0e3b406b1494acde1b53319260891f582bf22a96d72baca5921286b5c422a8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-osx-x64.tar.gz\",\n            \"hash\": \"db916df98a5cfd0753554d70cd1e1af2f2e86b4df9e2ca4718c9d4ccd454dd043d233ee38351cd72f8da69da33b92f6c55f98111aaaaeb4b674bd804cb485618\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-arm64.zip\",\n            \"hash\": \"e52d0cb02357c0256cf2a2f17bc49603ee7d779e9ba9ee05aa8b7fc4c92ea56dd1cf7eda297eab7fa1e9dc27bfbb45b47543b4080e133e9b9d3b757f64596d48\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-x64.exe\",\n            \"hash\": \"1a28a02904108654adc5a7772347b65394793a9148b780aa358416dfcfdf13b9d2d20cce4bd7f99e9fb7689eeec4938aea20d99d7b7928150ab615860c603cf4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-x64.zip\",\n            \"hash\": \"dab0eb2c2aa29fc8d952e155a9f744e48f6155cb2dfbc1240ade40da22c882df299274a770d3d4002a8e22cb17a45b1aa63baa4edd7bfb70d41f8bbeee4a105d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-x86.exe\",\n            \"hash\": \"b5976b76057c2dd99839e02e2b40633105503627d85083ec81648b04d2c6813888f2c895d92d29649eb09c983108d314b317664f220d0808d16b2d63cbb7f094\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-x86.zip\",\n            \"hash\": \"c7dd10d1ffb8d8edd29e6ca34c1964202ddd8d151be3dd60a13d2d73409b9834ebf923119f43e7d4fcf6ffcb9a3a1149b1c8e2f20b302633d3102b392a8c784c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-preview.8.20417.9\",\n          \"version-display\": \"5.0.100-preview.8\",\n          \"runtime-version\": \"5.0.0-preview.8.20407.11\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.8, Preview 2)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.8)\",\n          \"csharp-version\": \"9.0-preview\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-linux-arm.tar.gz\",\n              \"hash\": \"d6ecc2b9d58deb758a5662b1f2234163375f5893f68a922bbff0764e8848c158867087733d4c1d7f056a9f3141200694c7bb7de5d3b044a89edaefa75e8416d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-linux-arm64.tar.gz\",\n              \"hash\": \"129e654636f84a23d486efb5064951128af6e691b3a00010a873721c28c9e88220e0f1e20b8c1c4515d36b018fabc1ec88cd496e6793d246c625198571b8b27e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-linux-musl-x64.tar.gz\",\n              \"hash\": \"72f73241456c7dafa11dfa4611461a9d83903c8407f447f0a504da5a518063f5336fcf0efc1ba86f979373ea8eac20c75da5c05e4c992ffb8a5fcdc8f427bc00\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-linux-x64.tar.gz\",\n              \"hash\": \"0d86c9c2663b635154238fe39fbe32b498a75102851017f27152dccd856e9a1ed48ae44cf1a2b19a5388ea3c4c3f8f2c01a35cd978e52d2350c060394b924a94\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-osx-x64.pkg\",\n              \"hash\": \"d62fd95b984693f955882bfe6b86688590e3dd23d8d36d905aae90289a18a9c5ad0e3b406b1494acde1b53319260891f582bf22a96d72baca5921286b5c422a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-osx-x64.tar.gz\",\n              \"hash\": \"db916df98a5cfd0753554d70cd1e1af2f2e86b4df9e2ca4718c9d4ccd454dd043d233ee38351cd72f8da69da33b92f6c55f98111aaaaeb4b674bd804cb485618\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-arm64.zip\",\n              \"hash\": \"e52d0cb02357c0256cf2a2f17bc49603ee7d779e9ba9ee05aa8b7fc4c92ea56dd1cf7eda297eab7fa1e9dc27bfbb45b47543b4080e133e9b9d3b757f64596d48\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-x64.exe\",\n              \"hash\": \"1a28a02904108654adc5a7772347b65394793a9148b780aa358416dfcfdf13b9d2d20cce4bd7f99e9fb7689eeec4938aea20d99d7b7928150ab615860c603cf4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-x64.zip\",\n              \"hash\": \"dab0eb2c2aa29fc8d952e155a9f744e48f6155cb2dfbc1240ade40da22c882df299274a770d3d4002a8e22cb17a45b1aa63baa4edd7bfb70d41f8bbeee4a105d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-x86.exe\",\n              \"hash\": \"b5976b76057c2dd99839e02e2b40633105503627d85083ec81648b04d2c6813888f2c895d92d29649eb09c983108d314b317664f220d0808d16b2d63cbb7f094\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.8.20417.9/dotnet-sdk-5.0.100-preview.8.20417.9-win-x86.zip\",\n              \"hash\": \"c7dd10d1ffb8d8edd29e6ca34c1964202ddd8d151be3dd60a13d2d73409b9834ebf923119f43e7d4fcf6ffcb9a3a1149b1c8e2f20b302633d3102b392a8c784c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-preview.8.20414.8\",\n        \"version-display\": \"5.0.0-preview.8\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20228.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-linux-arm.tar.gz\",\n            \"hash\": \"e64f2a609d34cdd27c402fc4e303c4ce8a6ecd243d9343f3c4dcc76110f17f8c2330b4627c0c2635c677ded8b360f62dfedbb364f2d0d977b318b55f09ef45b8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-linux-arm64.tar.gz\",\n            \"hash\": \"dc08a7992478d1ab4ac882290bc9877a8ce2f4e67649b856804b4b8e8d702789defd950a57398d0c94682b0f7a813e8dc984f42abb91924bf62410085fa15dee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0ddfe6891b2a9782e3a173bb2bd95126755a62df11af4ddd7aeefc113b53f4373fd33a6d87322fd0ece6a99370e6cf63efe0fede6eeb7e905208d12ff8a6ef04\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"d1d4538373b353063cf3f7eaaea6a5aaada6c0b0fd20bbfdc34c38d0a1d0f4b5dabf559ec2add86aa4617122ec46fbdf8833b1b4e1de8df521b1d77dd484545e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-linux-x64.tar.gz\",\n            \"hash\": \"c32970cc75f337648c53c32c6c0ff1ef5b025ad3bc58ec23e5e931a4958fc8213fb5d8cb924664dc356aca782cea96066aad93b7f49ecb133ac7c00def01611e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-osx-x64.tar.gz\",\n            \"hash\": \"1fa620a7375da978226cff7a077b8c43031204c819d3eea31cf75a9a96d7563a7d92f52a23b791ed679d97b4d3dbcd7a8d60f33efc42920f93df8da705fce301\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-win-arm64.zip\",\n            \"hash\": \"cfbc630320469eacf506aac019e9fd4a9e6646b14e32b6ccf207556d5cb29d37be240df98ed5b0f9afed975af34ab157a3d4f6cc47421797259586b844fa55bc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-win-x64.exe\",\n            \"hash\": \"41da533bd2b9b3f5202247de65b5e7917785ade4ec27540aedebe777215af0f3f96d9b858333dd748be6738fcde9d91a925e38f941dc6762ee7afa93785c0ff9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-win-x64.zip\",\n            \"hash\": \"63badf80f0faf78ed6d4667cf832df48961d6b970b01439d029c17dc6391ddd435e11cda4d26abafc2823ed7dce6a5545a7b07d0fabd60fb518208403c3f80a8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-win-x86.exe\",\n            \"hash\": \"2f97435c0fb5b04e45294c638554a57ac12e1000fd4cb73e502231fc0e309b9c1acec829e796c26b5030489c6f8406666d0a20f857bebaa611b1dd838f8b511b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/aspnetcore-runtime-5.0.0-preview.8.20414.8-win-x86.zip\",\n            \"hash\": \"52a1b25442330b044340d0f554da0fb63035d87f84262d77d63af95918381b4c466124aeb5a255fe34ba2bbd77523366e86892910ba749c51c54674cb2af69da\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.8.20414.8/dotnet-hosting-5.0.0-preview.8.20414.8-win.exe\",\n            \"hash\": \"d6605ed3b498863e8fea05b132870c1840dd66324b6b89ab7b347babb034de10ba87a8adcf0ef2246463f17afbead2de1148fea7aa585581bc844d01f94ee323\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-preview.8.20411.6\",\n        \"version-display\": \"5.0.0-preview.8\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.8.20411.6/windowsdesktop-runtime-5.0.0-preview.8.20411.6-win-x64.exe\",\n            \"hash\": \"ebf8593f71ac130df9e2f67ee5aa2edc5e347f2fc65f200e1951c72f1f065ec6e69104f207e1d22b96e28afb2bb1ac99ec00860071caf6c1ed2093e7e578b4cb\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.8.20411.6/windowsdesktop-runtime-5.0.0-preview.8.20411.6-win-x86.exe\",\n            \"hash\": \"caf9e40055f0f97d7f90888c8b980b4386fdc4a482ab20a6384fede3c56f9aca88a74aa9ce4d24cdb11b9b0e5c2b0868a12cf58fb74eafe660b33e735420af16\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-07-21\",\n      \"release-version\": \"5.0.0-preview.7\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-preview.7.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-preview.7.20364.11\",\n        \"version-display\": \"5.0.0-preview.7\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-linux-arm.tar.gz\",\n            \"hash\": \"1d65f3e708da676c5b9295048af240143c7efdb34dfe616edf50fbcaea3747bb4607afb5af5dfda664a512004ad3c31aeae4c142cda3d06ef51ade1832655bd6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-linux-arm64.tar.gz\",\n            \"hash\": \"ea62c09ce3de2732dc94c3384dc7c6ae580703b671dd2670b53a587603c778ba5d399544d3a5c8cbcaad95f4bdc4cad905776247000265bbc6a6ee647f83a96a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"813b804b3a88aaee78b887e565b05c34e9c9aa3d2dd99f9265caa10639a3f53c999df0f6e3260ddd8c4784cb9fb8b1f1aa4bd1754978570ffba778108dffd10f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"8b68b7601ceddbc513272b3c80ba2439046b397e96ffaa07b24efcc5bb32c7854f5a4f851c4f08cc9201167d07f17427e750a51d7392cf2eb9f6e4d0fbbb41b7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-linux-x64.tar.gz\",\n            \"hash\": \"409802189c72820e67a5b064b8f2997095bc5b0be7a4c6734473c6aa56220ff60c758e4c12d2e99e2cf93cf8510e9bbe66e26e68abbe85085c28c5bc9428e77f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-osx-x64.pkg\",\n            \"hash\": \"5b28d31df77416b44450dd057aed57e1a6d54ab0504c330608c3c305b100f631aa188636757f054154b1a4d30ad74ee0b7bf514fa95c856d8ab438fda6f26dca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-osx-x64.tar.gz\",\n            \"hash\": \"867d9a30010dc8513427b24d50530a26b87ff68db68054cb01181b4d3c46c27479304cdddb005d75c8a998d5bbc7880a06dfc05a1375793ad474df52a614ca2a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-win-arm64.zip\",\n            \"hash\": \"1dcf95be852426bef33920b6a61052b560a18a229da56e6df8eceec01d41771342ece153d96a07a59cc64f88b566dc4879eab8cb136fcac79f56ba14b8f63960\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-win-x64.exe\",\n            \"hash\": \"b849e082dbf15ec0c5058e1a2fff96ad825ad60fa35f5fc1c263f63968f739d047e59742086f7c63d3fb83fe56681820cc99689237f13b49d4168b5ed103406d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-win-x64.zip\",\n            \"hash\": \"f4769be164dd465b957db9308a5478f5089f8d8736b08940ce9a09c5adcf03734ad5ba8dace9b5ca85604665afa0c20c5563a7ed5fc97bcc7c18971206bbe4c7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-win-x86.exe\",\n            \"hash\": \"60c5f049bb444a1f364f03d6d166bbc5a8fe47cfad44bb48b5861c473dc78a9d03ccdcd3fd8b31971a86217d8182b12b094949f2dfe876bd2b087b94cde3e1e1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.7.20364.11/dotnet-runtime-5.0.0-preview.7.20364.11-win-x86.zip\",\n            \"hash\": \"963a1728dd579104272d2b0b5bb906fa5252a4c11861cea676c9306661d9a27ec25709a8d8d714bbe0806f344725aa5c9d51dc00dd2d9d8b854a7902e9d52568\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-preview.7.20366.6\",\n        \"version-display\": \"5.0.100-preview.7\",\n        \"runtime-version\": \"5.0.0-preview.7.20364.11\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.7, Preview 1)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.7 preview)\",\n        \"csharp-version\": \"9.0-preview\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-linux-arm.tar.gz\",\n            \"hash\": \"2e473ba7d2ed706313a02438da2b338fa91785cbbd68d1c15268641b3d547b7183e9f5be02df8f6d2af537e02280dae94cee63a4d3dd42bfbfb3cb4ce5fade59\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-linux-arm64.tar.gz\",\n            \"hash\": \"34cc65a879c8dedf854e0bb5b8b3f415c7db1ea9281a868516b6c0fdbb6d356dbd41ca258c10aec0c33339a5bc3be6cdf4e4d96099b6e3f73abb841e9c8d2dae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"5dc8a07ed8964ed88588b7310ecaeb75be711604334ce6d06b6a6400a28780cbb92264a5022a7acf4b6dbf18c08110a263309dd3adfef3dd1aa20eebbe9ac959\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-linux-x64.tar.gz\",\n            \"hash\": \"a1369d4e9e6281a3656acf6ba8357fbb9b25824fa63b42b55700f4d7ab58b2dc355b91c356a13c7d76da92e30dd3a5ccefd1d3396eacc1ac62cbae608b5eed86\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-osx-x64.pkg\",\n            \"hash\": \"fbfaf8900fa35e4656a92981a2d14a578756a2b6fc6ec747d4460be316c6fe07efffeb1f842126b37111404a70f2c43aa516f97494a66b49801710553a62c917\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-osx-x64.tar.gz\",\n            \"hash\": \"eed62702c03a3011ccb534f75d4986d09948cf64d601c083759e6770f549cf159bb9adff9c34865e1caa15179f484d22772a4ca79c591823b1ac26025472bf35\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-arm64.zip\",\n            \"hash\": \"2c4bee81067deabb53f37935096e81483584f3b634a176824366a647ed1271b307a11ff34f3b0b280c7e2e19c12c4d1d3a37d19c87a51611348fbb04f48733ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-x64.exe\",\n            \"hash\": \"93400774be604fa238d86fbbbd52eb8488eab317085c6864cdc730e9ea572be46691fa633c5f46bcbe8f7245c5ca722fe23e5d43f654c6d7781cdd292cd2af97\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-x64.zip\",\n            \"hash\": \"a77458590193d71f4c7f483b765fc16495fbb9a83f79cfb943ce46a67c3e9049eef7da87398d8637a4f547cb57a64857584b2b43009593d24daea9f5af6d31cc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-x86.exe\",\n            \"hash\": \"d505ad12efc18d0a09ccb484136f9aeddde06a85caa37822a81aade1bb8f5b42369cdb4dfe67d62c197cc623383f5566f06be89e06ff5e8e4fdd1db96a4a02b3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-x86.zip\",\n            \"hash\": \"eba7c98457d91fecdcd303961866033415631f28088ebd3b43e49c2356aab89b77709c144a8c28939d53edeaab8bf26c9681de79e9df7fb73350f4b92529f497\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-preview.7.20366.6\",\n          \"version-display\": \"5.0.100-preview.7\",\n          \"runtime-version\": \"5.0.0-preview.7.20364.11\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.7, Preview 1)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.7 preview)\",\n          \"csharp-version\": \"9.0-preview\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-linux-arm.tar.gz\",\n              \"hash\": \"2e473ba7d2ed706313a02438da2b338fa91785cbbd68d1c15268641b3d547b7183e9f5be02df8f6d2af537e02280dae94cee63a4d3dd42bfbfb3cb4ce5fade59\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-linux-arm64.tar.gz\",\n              \"hash\": \"34cc65a879c8dedf854e0bb5b8b3f415c7db1ea9281a868516b6c0fdbb6d356dbd41ca258c10aec0c33339a5bc3be6cdf4e4d96099b6e3f73abb841e9c8d2dae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-linux-musl-x64.tar.gz\",\n              \"hash\": \"5dc8a07ed8964ed88588b7310ecaeb75be711604334ce6d06b6a6400a28780cbb92264a5022a7acf4b6dbf18c08110a263309dd3adfef3dd1aa20eebbe9ac959\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-linux-x64.tar.gz\",\n              \"hash\": \"a1369d4e9e6281a3656acf6ba8357fbb9b25824fa63b42b55700f4d7ab58b2dc355b91c356a13c7d76da92e30dd3a5ccefd1d3396eacc1ac62cbae608b5eed86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-osx-x64.pkg\",\n              \"hash\": \"fbfaf8900fa35e4656a92981a2d14a578756a2b6fc6ec747d4460be316c6fe07efffeb1f842126b37111404a70f2c43aa516f97494a66b49801710553a62c917\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-osx-x64.tar.gz\",\n              \"hash\": \"eed62702c03a3011ccb534f75d4986d09948cf64d601c083759e6770f549cf159bb9adff9c34865e1caa15179f484d22772a4ca79c591823b1ac26025472bf35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-arm64.zip\",\n              \"hash\": \"2c4bee81067deabb53f37935096e81483584f3b634a176824366a647ed1271b307a11ff34f3b0b280c7e2e19c12c4d1d3a37d19c87a51611348fbb04f48733ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-x64.exe\",\n              \"hash\": \"93400774be604fa238d86fbbbd52eb8488eab317085c6864cdc730e9ea572be46691fa633c5f46bcbe8f7245c5ca722fe23e5d43f654c6d7781cdd292cd2af97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-x64.zip\",\n              \"hash\": \"a77458590193d71f4c7f483b765fc16495fbb9a83f79cfb943ce46a67c3e9049eef7da87398d8637a4f547cb57a64857584b2b43009593d24daea9f5af6d31cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-x86.exe\",\n              \"hash\": \"d505ad12efc18d0a09ccb484136f9aeddde06a85caa37822a81aade1bb8f5b42369cdb4dfe67d62c197cc623383f5566f06be89e06ff5e8e4fdd1db96a4a02b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.7.20366.6/dotnet-sdk-5.0.100-preview.7.20366.6-win-x86.zip\",\n              \"hash\": \"eba7c98457d91fecdcd303961866033415631f28088ebd3b43e49c2356aab89b77709c144a8c28939d53edeaab8bf26c9681de79e9df7fb73350f4b92529f497\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-preview.7.20365.19\",\n        \"version-display\": \"5.0.0-preview.7\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20198.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-linux-arm.tar.gz\",\n            \"hash\": \"22862455eeb0061c2f7e2e976149be3f5e037128f226e0f1e080b5c75af84a45549e201dddc17a226994b460b8c243d401e0351f8bd7e5b48a6bd74c220b1c42\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-linux-arm64.tar.gz\",\n            \"hash\": \"8b153075d62e3cbeb0878f4af0dee2e8fd76888a17ff02ece60b98905c69f057236e8c9aa6e99d512f2e256513e111ecb1acbbf42d48c949e21c60d744812694\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"733d5ed7fd90eca31a85980dc64d1298a89d17157323b7eacc79e0e83592235de68b083ce03cf280608233fc3a5b6a27e8d52516ae543bf29d2d0258a3e156f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"ff63042916c597820fa93eac34a6c0d889b9498aae554067010a94af367b8291f59fcd0832227274bb864209de486ba1cff87967388147b6f9433be1b5ce0953\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-linux-x64.tar.gz\",\n            \"hash\": \"6a6bbe7848e835b6dbfc183eb30dad2f88aed5b7a4509584b5309bab5ef6f6f0b5fc4b09d7b557ca4e30b31a93a6583dbe904c185772b8bff58d3d4d7134053e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-osx-x64.tar.gz\",\n            \"hash\": \"12f41424c67b0fa557a214a6a21de6aedee8734b9a622ccc83c2093dce16dc1e7919242ec60ced50aa3695bc2330623ccf41c813426f04d742aec89ecd4012fe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-win-arm64.zip\",\n            \"hash\": \"e0bc8c07fcdca781ba6bf6783b4d6db5151883bc3be11a3fddaaa8a7a752732c04cf938c8a36a494cb7b0c9c517755eb350b36bee2671d8d8045ea8925a2c0b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-win-x64.exe\",\n            \"hash\": \"27795c11defee0ec1d3ca531e05a42e0369f8129cdbc9965c2f2f9dfd0173f58260b88a812677917f656395f2170541e7d6dc9ee99fb0d84126c9e1da9299d50\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-win-x64.zip\",\n            \"hash\": \"2d50901aa5329a00ed339b8bd683a0bfdf115bb6f9bc3b29f408e72c99a27c530812939e37ec467eb5f7756be6153bb314a9e13e10788dcb4d3a3b1377a1a73c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-win-x86.exe\",\n            \"hash\": \"dfbad08ed65fe4c9b6c098c4455b88ad12e6cf3cab242b4fef0d6f07c09f007385b51ef37741ff6e4c2a21e23503629641c30485cfb52fe2c29c957e83f17bcd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/aspnetcore-runtime-5.0.0-preview.7.20365.19-win-x86.zip\",\n            \"hash\": \"49d153656f367287b2763b74782fbec96a4391da067a6533d44b3ff204aec76cda3b723ce847af3be8f9be1f61b84e06a70ca8f5dc663f0c36b3380f703d223a\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.7.20365.19/dotnet-hosting-5.0.0-preview.7.20365.19-win.exe\",\n            \"hash\": \"8ab6111bf8e4905189ea69a72bd295e1fa6a14627d213f88f35885e71022d336ca544c4bffaf8c0a954b6240b8a9e61483e24294553477b13c112c4a5aafe71a\",\n            \"akams\": \"https://aka.ms/dotnetcore-5-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-preview.7.20366.1\",\n        \"version-display\": \"5.0.0-preview.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.7.20366.1/windowsdesktop-runtime-5.0.0-preview.7.20366.1-win-x64.exe\",\n            \"hash\": \"31bb3a26fed1ff39afc5308a52350bfb3a1bdb5d3a8cac33628ccbd8dd22291b193fcde79a76d8cd3bf69f4e58b3e53716b63fd8434b8ecfeb0e7d7ca3e3bbb3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.7.20366.1/windowsdesktop-runtime-5.0.0-preview.7.20366.1-win-x86.exe\",\n            \"hash\": \"cc464d76b8922ba8f8e5e97475f05b01123952e8410d3f8a7a417c5bc35cfbf60e984a760e8687dc72f40fe545ed24bc6e346bb7a9cd144393022f8de2e71dea\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2020-06-25\",\n      \"release-version\": \"5.0.0-preview.6\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-preview.6.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-preview.6.20305.6\",\n        \"version-display\": \"5.0.0-preview.6\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-linux-arm.tar.gz\",\n            \"hash\": \"7e9a70a13ccd56d282e336beb57e7714c4cc8dadf88cdc77c15be91eb3a24c10742651f07960aacd1ff84402120f7e75652403b2e00db2c5011634a30fcf5811\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-linux-arm64.tar.gz\",\n            \"hash\": \"0890f5e1f54d38a8e4cd99637eb9155da663ae4b466bf56fc36bb9100c688201d814547400859614e41c4946ff05e789a87575ecbe1f15e63b578c8ef4d765ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0db9e2b02d42557854d080dad21f027e2967ee2fd0c6a368952526e6b8af1c3f1768d99a642802166201b40ab084a4040588993b6231d65b6edba8e068ae9f72\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"416eeebfd90d66f68cb6e68842b3b89c080adf4a4773d3af822d1cdc4469c3e3f3ff1171bbcbfec0e4e1ca1f2357fa694fff97770bc72893cf375cf9c564e1bc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-linux-x64.tar.gz\",\n            \"hash\": \"355a0a3e02970a5ecd2bfa06f4690ed8f7ee23bf5544470787c79c80ec5ff7d3a0296fed06d311d2b970fe00db0345856b5cea4e8e0cc3abfab8f2e89d0755e6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-osx-x64.pkg\",\n            \"hash\": \"00f3beb35aab5b81bf9b72d0a96e15f8dc40afa1c34fd49fb8ab288d888799f818f332352eede62585122d3386b71d548456b1c6aad13d6217f8f57414cb9fe7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-osx-x64.tar.gz\",\n            \"hash\": \"1c2b545904528872ee0b8012903b7a42e8980de4296a72f102a2cf696ca6c79acd5710f81d919c81c7fa9dbb5e3f23b2989c4c7799414be39a3a09a5e9fe5534\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-win-arm64.zip\",\n            \"hash\": \"136a875a809d6d7bb54ae6b215ca96b6059504e9bd0cba0f29f8e1b660b52624d6c8ac77cf483131070039d6239b41614bdbd43aa591cd7e62ef209a63d5a76a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-win-x64.exe\",\n            \"hash\": \"6821be7a59b0d21521a33ca3841a4132ee1f471c779ed353ef766c340818140156befd636a4a15fc76ac5aa0436697c251cf2a97db3dab07172947784d53a683\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-win-x64.zip\",\n            \"hash\": \"eb7b8db4de0149ef14e367e7c8fc92f160be5aabf5380280b6b663afeec993595b674ccd4ece5032dd0187587cb97a1a39cc0d0b1284e913c537ad23aebe1ac7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-win-x86.exe\",\n            \"hash\": \"6053d306567d3c5098194375628d2613e304a0cb09e50d20d19345a05106cd98f20353717ec0f68d44034df8abee8ebdc0c1bc15d6feb3a47184352d206c52da\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.6.20305.6/dotnet-runtime-5.0.0-preview.6.20305.6-win-x86.zip\",\n            \"hash\": \"ae3bff284b855735a7589402d6c3931bc9a2d236a3fdcd717a0406b3d8e3a8dd5601983c205b99fc72e496def942f26ae89cb8bab57cf5ddc6cce699c2b71f3a\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-preview.6.20318.15\",\n        \"version-display\": \"5.0.100-preview.6\",\n        \"runtime-version\": \"5.0.0-preview.6.20305.6\",\n        \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n        \"csharp-version\": \"9.0-preview\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-linux-arm.tar.gz\",\n            \"hash\": \"1dd5c4f90d43983f1b6ccfa7631fd70afe99b26c1111d191dccb860bcfa232052c3589147f730b583b3f498bcd1116a131fae462267b68a00c10d7e7d832e65f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-linux-arm64.tar.gz\",\n            \"hash\": \"2a1039c4a94abd33949176407edee84dbd54053b56c7e2d8b69e7cf28e16f89013036cf662403ea8f2ea593b9b1b702e464762d9670da12507d1c1e06a58c04f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"e0c5283cd1758f921e25f4653c8c8a3076dd83602c8f036b347450695717ad3c071222b2467df27b8854c55e555f4ed095f9dc072d595caf6fe7b4abde6332d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-linux-x64.tar.gz\",\n            \"hash\": \"ae68221770e8f199880f00a29d72c624aaedc0c3ca61a7b543a6555acf27eca4c0c24fbd4eddc1322d7dcb4f342325b1d1521c590556bd95c3c2ec653b914dbb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-osx-x64.pkg\",\n            \"hash\": \"7c3f50b2b7fac2c41fe5074d706d67ee6e8edaa3eb464425ea884add51d92ae82f1a2571ff41ce3114abcdb91ebaa3df893bbf4f9ce2d666bb8a9577551004f5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-osx-x64.tar.gz\",\n            \"hash\": \"03bf06a62c040840825455abe6a94ee6833bc19fe8fb7a38012638a6d7e12dd2b0f0a5efb761c84152cbb09dd659821d2897153918a2dd3ed9d1b07de437e719\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-arm64.zip\",\n            \"hash\": \"8c0ec61a02daf5ad04b8286b50e90280b45179115400d2375b909d9241d857bcb73aeb929a5a9f42f6981de40252608a980e5118bdd7627686026653f891efea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-x64.exe\",\n            \"hash\": \"cc112b2d93337f70e490861c9f0325d55fea51867b1b53d0157778ec61e776e7dad99a929724aec2d35d809b2c4f80c47e4783150fd6f522dedebddbea71a9db\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-x64.zip\",\n            \"hash\": \"46ecc1e10aa9c9296675af55fe93bf003d3984b761e1c1d2af823a24b355ca99e0bce9ceb8856ec29ee1c3dd430c01c0b55901a853a1ef763397eadf9045e01e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-x86.exe\",\n            \"hash\": \"ab14ae0af4103083a4794ca514ba6c5e9ef69d110b099b0ef60df9ffec8a8f1bd5aad280138da9cdec36664f03b83804e1c90bc0c4a647731e190cb8847cad4d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-x86.zip\",\n            \"hash\": \"231a0fb7b959b8ea90e16fe03806920d6f60dc54eb537698c0acbbd68a30d92bfa1aa31b1c00798d08d2b0b28554907a0f467cda06fa78d398144f2468a596e6\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-preview.6.20318.15\",\n          \"version-display\": \"5.0.100-preview.6\",\n          \"runtime-version\": \"5.0.0-preview.6.20305.6\",\n          \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n          \"csharp-version\": \"9.0-preview\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-linux-arm.tar.gz\",\n              \"hash\": \"1dd5c4f90d43983f1b6ccfa7631fd70afe99b26c1111d191dccb860bcfa232052c3589147f730b583b3f498bcd1116a131fae462267b68a00c10d7e7d832e65f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-linux-arm64.tar.gz\",\n              \"hash\": \"2a1039c4a94abd33949176407edee84dbd54053b56c7e2d8b69e7cf28e16f89013036cf662403ea8f2ea593b9b1b702e464762d9670da12507d1c1e06a58c04f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-linux-musl-x64.tar.gz\",\n              \"hash\": \"e0c5283cd1758f921e25f4653c8c8a3076dd83602c8f036b347450695717ad3c071222b2467df27b8854c55e555f4ed095f9dc072d595caf6fe7b4abde6332d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-linux-x64.tar.gz\",\n              \"hash\": \"ae68221770e8f199880f00a29d72c624aaedc0c3ca61a7b543a6555acf27eca4c0c24fbd4eddc1322d7dcb4f342325b1d1521c590556bd95c3c2ec653b914dbb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-osx-x64.pkg\",\n              \"hash\": \"7c3f50b2b7fac2c41fe5074d706d67ee6e8edaa3eb464425ea884add51d92ae82f1a2571ff41ce3114abcdb91ebaa3df893bbf4f9ce2d666bb8a9577551004f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-osx-x64.tar.gz\",\n              \"hash\": \"03bf06a62c040840825455abe6a94ee6833bc19fe8fb7a38012638a6d7e12dd2b0f0a5efb761c84152cbb09dd659821d2897153918a2dd3ed9d1b07de437e719\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-arm64.zip\",\n              \"hash\": \"8c0ec61a02daf5ad04b8286b50e90280b45179115400d2375b909d9241d857bcb73aeb929a5a9f42f6981de40252608a980e5118bdd7627686026653f891efea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-x64.exe\",\n              \"hash\": \"cc112b2d93337f70e490861c9f0325d55fea51867b1b53d0157778ec61e776e7dad99a929724aec2d35d809b2c4f80c47e4783150fd6f522dedebddbea71a9db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-x64.zip\",\n              \"hash\": \"46ecc1e10aa9c9296675af55fe93bf003d3984b761e1c1d2af823a24b355ca99e0bce9ceb8856ec29ee1c3dd430c01c0b55901a853a1ef763397eadf9045e01e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-x86.exe\",\n              \"hash\": \"ab14ae0af4103083a4794ca514ba6c5e9ef69d110b099b0ef60df9ffec8a8f1bd5aad280138da9cdec36664f03b83804e1c90bc0c4a647731e190cb8847cad4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.6.20318.15/dotnet-sdk-5.0.100-preview.6.20318.15-win-x86.zip\",\n              \"hash\": \"231a0fb7b959b8ea90e16fe03806920d6f60dc54eb537698c0acbbd68a30d92bfa1aa31b1c00798d08d2b0b28554907a0f467cda06fa78d398144f2468a596e6\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-preview.6.20312.15\",\n        \"version-display\": \"5.0.0-preview.6\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20164.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-linux-arm.tar.gz\",\n            \"hash\": \"5243d7e3e68f5d0e4ac334d00405b3a4a81b6700f5897e3a68cc388c42f70ffbfe2bb41c39466c76ad98996591e88190c079c03dbf23704be6144d763020985a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-linux-arm64.tar.gz\",\n            \"hash\": \"8bcee151e9a0d41654fe641e9c949ba053394b345ff8250d591929ffb44e9163e800093d1eadfe810f608f87217e27051ddfb284969db71bb386db9ff8b2389d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2fc1bafb3963ee7f0a250f980434d47b81ce7bad41311eda1391c1d72591bb18b3e49f8aca1331fc4ae2a928d840c4b56809579bf835a427ac4a4208e3ce6136\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"157b73945e553947147622382fdacbc0649523c383a3bd5a1c65bfbb026e6fead39ee1260af41f1a8c574be0f87d462f18bca540c594422c1f8b4f09e52b2c93\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-linux-x64.tar.gz\",\n            \"hash\": \"237019e067d89f0b62d68793f17607fd484a2a9e06ab2423bd31d17fc42933f0d3e1112399309c93da243b0943bcd7317b389efcf83e6cda544dab1a82101bbc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-osx-x64.tar.gz\",\n            \"hash\": \"330e12e8c52bd4fe07756a6bc3871a5e8838be736f97a238e26d5d53a74d53069a6c330e475bcc38fa68b44cdd6be585d382d20a817a8823783db4428ee352d2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-win-arm64.zip\",\n            \"hash\": \"b576a35e31503b1b5d1c2e8b01f64bd4047b4ec76cd528ea6b0552be44318c50a4db276767c0e3852e162b6a286222302440cad57ed1599f83ce10181e023222\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-win-x64.exe\",\n            \"hash\": \"41380dcb37876ad7ad4111c872887e67343ad2087072ba634bec4e0544c68c8dd99a2f252530a711fa23cdac00a03528533ad5e305632fe8398df0e518b5a0fd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-win-x64.zip\",\n            \"hash\": \"d46f3b92142ed50ba9352bf36c100657028c67700f56617f3df5a050ce2015e8156b1739ec67e49c2d4fb425be2e08c7083513a2a950698027af6bd486e181c6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-win-x86.exe\",\n            \"hash\": \"2a75a810a696020a8fc8fd1d8a9d27b53cc3bcfd55fd318925169de8a7db0776032f81d074288d766072beab924108c7f70abec60a054d7bcd77d28591025539\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/aspnetcore-runtime-5.0.0-preview.6.20312.15-win-x86.zip\",\n            \"hash\": \"81b5f72b496b917d1b8977a9cdbf30bb305bd3d6f812e8180a80c20ca66ebbb12251ae549429a76c2a551b65f98b4e88766876ef70e81abc5da1e9113cf36a6c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.6.20312.15/dotnet-hosting-5.0.0-preview.6.20312.15-win.exe\",\n            \"hash\": \"8ca3235e36655127a0193d6c88a8a812c1795c1e254f0b41223759239843b5cd6275d026fc30ed7678bbe50fa4c90d2318e974a57f9e6394861f39d9879e8a09\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-preview.6.20308.1\",\n        \"version-display\": \"5.0.0-preview.6\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.6.20308.1/windowsdesktop-runtime-5.0.0-preview.6.20308.1-win-x64.exe\",\n            \"hash\": \"4328aad877464821319960ad5ec4795ce8c4f8a99be755c0757326a56e25b800fcaadbb255ed5e91cff018f25b89823bd4b424c0112535263dfc5492c95b47ec\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.6.20308.1/windowsdesktop-runtime-5.0.0-preview.6.20308.1-win-x86.exe\",\n            \"hash\": \"a14182c51ea60db77c0428a8b4fa2c8f4c18c48f3d282a67815b3e1929dfd1f5fc9fbf5d191033192a131688fb43988a7d0440fc27518bc1b1f4ad3d2054c7bf\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"5.0.0-preview.6.20305.6\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-06-10\",\n      \"release-version\": \"5.0.0-preview.5\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-preview.5.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-preview.5.20278.1\",\n        \"version-display\": \"5.0.0-preview.5\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-linux-arm.tar.gz\",\n            \"hash\": \"fbe871f82c7c61195fae789af415c2efd03dae982e131c10cacd95b744b0f498774b014bcb3523cf52153104fdad81759f84e2e72bcda7eec48e3530ffb03e60\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-linux-arm64.tar.gz\",\n            \"hash\": \"d081750334a49e9ed6b75468d937e02ce247d8a8f0c66505d048174591a35fd433fc0febb0b551dcaf8a823190cd92fb6578c140f0fa4af859c911f622963724\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"249ea41018c76972c2f3e54dbb515b75721a603435cfa9d1100e32a05c3c832674d110729f63d9cbb44768d8444e4799df1bab407f836eb10cd1b3c554259b9e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"4e1b8147d82045fb58812a90ae9e70810646dde335844be390ac6adb839f1219fd19811d63e345881532a0d27af91e633cc462218ca7a34d429a3731f7b5a686\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-linux-x64.tar.gz\",\n            \"hash\": \"1bed1c8ee4185c0ced69e415dc25a5040eed68d0d6a7c35c6a83fbe1eb3f71e99e8c9b631a34825141163b9fe105b281f6c7d5d39bbcf40f20b9d81fdb7384d5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-osx-x64.pkg\",\n            \"hash\": \"c4d17cce8804fce39e731bc6a95bbb08bb8a175b6c43bcc2e1bf73c8236b11cfd32cc8ac953a1c15c5f7e15da9013dcd3f25a0996697706316b4ae185ab0a11b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-osx-x64.tar.gz\",\n            \"hash\": \"d672ee9f489a10b33b26626b5959d9dcee8f54079004991615367492eb2c2232299bc3655b1a4f9270b717feffac54466d74a1a8d6e192a367b1e5cfe3a78d1a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-win-arm64.zip\",\n            \"hash\": \"0d8e5f049b5022d3ece6e2d8c244f819ade33bcbd4d251cdbfd97811fd2da271eca32cadea65f3d1ac99ec4b642ce16dae8b089b3869f5cc2e8db958490a43b4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-win-x64.exe\",\n            \"hash\": \"908cb1b453e4bf7f4f03e088f84ecae0ce20e4903527584a246fea75278b9eba48716bec35beef011718efb8518df1067c6937ac20606e41f206dd914b69610c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-win-x64.zip\",\n            \"hash\": \"6178f4ba6a4bd578eb0a3338621cb26bfb0d92936b1b9af2dbc66d9dd028d1f4e20e58f191eef5e52293b46e3e84a3332a123494bc572822ac68ec05345e8204\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-win-x86.exe\",\n            \"hash\": \"ecf24922e05b7e155356171b7e85393284a840d313e83ec9db52a804555d381afaf97759a9d6a59e2459ff20ef9071dcbfaef483485ba22f6895c53fb11cccbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.5.20278.1/dotnet-runtime-5.0.0-preview.5.20278.1-win-x86.zip\",\n            \"hash\": \"3da31d2e6e923b4d56b2920d68a8bb1463e0c733f0309835b6a54c15506be21aff64ecd35e762f9208eb2e001b512e3e32562f6a0dbbecd17a9d82547bc52b50\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-preview.5.20279.10\",\n        \"version-display\": \"5.0.100-preview.5\",\n        \"runtime-version\": \"5.0.0-preview.5.20278.1\",\n        \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n        \"csharp-version\": \"9.0-preview\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-linux-arm.tar.gz\",\n            \"hash\": \"6256e013e0e1a153671b9ac3afb49db2646d5e9710112626f52f91070e9832fd17c475414387c6d544dadf2b62df342400d7c34ac01e7a1807d53587ac2d0bc8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-linux-arm64.tar.gz\",\n            \"hash\": \"426caa42f586f5213169828c8ee049f10bb8ee0aa1c8961d006396e74c995f0cadc88c9dffeb13f573f3b21bdd9a11279adb0f00bccd20f38da66153b8be43d0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"441ccd3e724599d187363fcc3217e5077efa68218a86b2c7dc24ea776de6618ba9beef3ee2c856e4bffd39aeb4d7257c619af8f8db4ec94cacb2aab35f920b50\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-linux-x64.tar.gz\",\n            \"hash\": \"0ee982dd7b6015d05c04a33ffba77fa9f61863578c5fd7c4b3847043da2fd17c36b2f8535af53f46dee66e9e59a52f5e7c995af7f9a69fbd3abbc524aca5931b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-osx-x64.pkg\",\n            \"hash\": \"cf9f15e8a10fa44988efee31d6a5d610e088555c6116736528682ccbe4ace6791f68751efbfded7c55e1d8202abc77dc1c9a1656a5783b13db9acc95894a615e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-osx-x64.tar.gz\",\n            \"hash\": \"91b693142b8e7551cdb9cfd304cf62ec01dfc6d429fca9635976355528319199c5e072d8b62b2e7341ef449429fbe12ca992b9802725d4ebc7a8139b99203775\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-arm64.zip\",\n            \"hash\": \"007032f39d8e52b1e77a2e0f1a1829d51631ca6b6f1dd25b522dcba8abcc474f87e80d3eb4aa00ef3ae19caa8f13f2cdeac3b2fda2369477ef5efb2a188bedde\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-x64.exe\",\n            \"hash\": \"82fdb454f78f659dc43f94cbab034396e10bb1a16ac0101bf9bf473a5e88b3ce441f496a91a89e102deb3b356bd6717128c5a8fb7266896a823f22f95df65083\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-x64.zip\",\n            \"hash\": \"086927a537acd60cfe71cfb760d01659c77a7f918f1848b9b5776759043e45d3ead0f394aff6b45cc01f8c0f5f0fc22d0fca5a8ba478b9d514d56547492789be\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-x86.exe\",\n            \"hash\": \"87027008020a566c53621c6bc7b67a7ddc6bf621c11b5cbad01c38c4a74958ef904161e35d48b985ab0d5bebdbc792029ef8f62eb8a10b3680ba20c91ca97461\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-x86.zip\",\n            \"hash\": \"2a906c071d3c32f9f2be846675dc3a487ea6e9127ca5dc9cbcf35d3f57cfd4817df1b006360c0455bbb6cd2e711296ccf4250733013b0740ca04509186c8e549\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-preview.5.20279.10\",\n          \"version-display\": \"5.0.100-preview.5\",\n          \"runtime-version\": \"5.0.0-preview.5.20278.1\",\n          \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n          \"csharp-version\": \"9.0-preview\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-linux-arm.tar.gz\",\n              \"hash\": \"6256e013e0e1a153671b9ac3afb49db2646d5e9710112626f52f91070e9832fd17c475414387c6d544dadf2b62df342400d7c34ac01e7a1807d53587ac2d0bc8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-linux-arm64.tar.gz\",\n              \"hash\": \"426caa42f586f5213169828c8ee049f10bb8ee0aa1c8961d006396e74c995f0cadc88c9dffeb13f573f3b21bdd9a11279adb0f00bccd20f38da66153b8be43d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-linux-musl-x64.tar.gz\",\n              \"hash\": \"441ccd3e724599d187363fcc3217e5077efa68218a86b2c7dc24ea776de6618ba9beef3ee2c856e4bffd39aeb4d7257c619af8f8db4ec94cacb2aab35f920b50\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-linux-x64.tar.gz\",\n              \"hash\": \"0ee982dd7b6015d05c04a33ffba77fa9f61863578c5fd7c4b3847043da2fd17c36b2f8535af53f46dee66e9e59a52f5e7c995af7f9a69fbd3abbc524aca5931b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-osx-x64.pkg\",\n              \"hash\": \"cf9f15e8a10fa44988efee31d6a5d610e088555c6116736528682ccbe4ace6791f68751efbfded7c55e1d8202abc77dc1c9a1656a5783b13db9acc95894a615e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-osx-x64.tar.gz\",\n              \"hash\": \"91b693142b8e7551cdb9cfd304cf62ec01dfc6d429fca9635976355528319199c5e072d8b62b2e7341ef449429fbe12ca992b9802725d4ebc7a8139b99203775\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-arm64.zip\",\n              \"hash\": \"007032f39d8e52b1e77a2e0f1a1829d51631ca6b6f1dd25b522dcba8abcc474f87e80d3eb4aa00ef3ae19caa8f13f2cdeac3b2fda2369477ef5efb2a188bedde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-x64.exe\",\n              \"hash\": \"82fdb454f78f659dc43f94cbab034396e10bb1a16ac0101bf9bf473a5e88b3ce441f496a91a89e102deb3b356bd6717128c5a8fb7266896a823f22f95df65083\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-x64.zip\",\n              \"hash\": \"086927a537acd60cfe71cfb760d01659c77a7f918f1848b9b5776759043e45d3ead0f394aff6b45cc01f8c0f5f0fc22d0fca5a8ba478b9d514d56547492789be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-x86.exe\",\n              \"hash\": \"87027008020a566c53621c6bc7b67a7ddc6bf621c11b5cbad01c38c4a74958ef904161e35d48b985ab0d5bebdbc792029ef8f62eb8a10b3680ba20c91ca97461\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.5.20279.10/dotnet-sdk-5.0.100-preview.5.20279.10-win-x86.zip\",\n              \"hash\": \"2a906c071d3c32f9f2be846675dc3a487ea6e9127ca5dc9cbcf35d3f57cfd4817df1b006360c0455bbb6cd2e711296ccf4250733013b0740ca04509186c8e549\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-preview.5.20279.2\",\n        \"version-display\": \"5.0.0-preview.5\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20150.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-linux-arm.tar.gz\",\n            \"hash\": \"bb021d67206f48bfb21151181bed0f1b5455a2216c9e9852b0872f8e13d316bb389aeb3cdbe96023f0623d841f7eec0c12624af6749b431175034a883bfe30b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-linux-arm64.tar.gz\",\n            \"hash\": \"68491c16bed5f7fdebc5c806daae3857462b6589cfd2dab0d84f753eefa735a705f72beb1914fe189b40ff274bd658b7c3fefc6ff7c0f9178bdd46e88584c7a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0a25aabc07122423ad034809b2806b9322c4e32f965704cc34e828830ee1e6466d117617c37f9cb350d6fe4b7d6165d6eb2c974161949870274f4246800d9121\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"6377ac079540d502902b4ff621638400411f3411839cf711ac49c0f9be63c9eb408febea6e01ef9a81d2c4700263e5d5e57752226f3be0e7980894e9211e2ec3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-linux-x64.tar.gz\",\n            \"hash\": \"5f1b1475f27a07b4d1af2c4bb293f53dc517ed33208669f74f468cbb42773cb4cf01649a13bcefa7070532f5881fe2a61709d029c6f00233790a5205a355e9db\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-osx-x64.tar.gz\",\n            \"hash\": \"4e9a7ef33a18ba242c751a289ff67446ec7295bdf32df9670ffd4e4fb7fcdf4fb09318e8ebb0f3afe0743303f240ffddcf979f0f860054b6c7d08626dda37bbf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-win-arm64.zip\",\n            \"hash\": \"5783850847619a6cbb3a50acf9b2b6df0d9031b6c1a18769ffee44c320953f88e56e78ff5537a37f58ad0108009dff90a79702a463f90e6f2adc304b32e8897f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-win-x64.exe\",\n            \"hash\": \"fd5e74efd0c8ccddce9777f0425656b90b402d6fcf249afe4a0aa22492182819e34583b89d2725bcc682a919efd66b0d32c510a1e20891557dcbbf1f95198aff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-win-x64.zip\",\n            \"hash\": \"09646e89c04993ee42a5d072e5409fe6f389df41f20df30f6c3074d066725606b3958cc9ce07aaa444d4e3b5880800b69dcbeea2a9112059a8ab0b02b5cdbcd1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-win-x86.exe\",\n            \"hash\": \"c1afc15206ba8d3db205b8e8f79be31be720424377b4ea223b187f2b813310032906328248479e71d4f7826d9852985e876161d61ff1cc02fb889911674d7a95\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/aspnetcore-runtime-5.0.0-preview.5.20279.2-win-x86.zip\",\n            \"hash\": \"3aa29bc08ab2845e74d56957df90c8daf977a26bd394b75c274e465c4c3a9d678e950e98e444239e85cdeff6aa116242704ea9d45133955d8b53617e9ffe7440\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.5.20279.2/dotnet-hosting-5.0.0-preview.5.20279.2-win.exe\",\n            \"hash\": \"9b8074c8ae9d4ac511d765effddfc61f7f023fe1cad8158ee707c1b3db4e496de329449b95c1d32204986efe19e2d06626907b6848335bd8e9cd21bfa2f3b39c\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-preview.5.20278.3\",\n        \"version-display\": \"5.0.0-preview.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.5.20278.3/windowsdesktop-runtime-5.0.0-preview.5.20278.3-win-x64.exe\",\n            \"hash\": \"196cf646072177d62b964bb71c480eef7c25e91658e9a2ac4de885f058ea9068b6d05bcac0383a9f03c7c559838458ef01c3d1ed7309bc0e25127a124f9e8004\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.5.20278.3/windowsdesktop-runtime-5.0.0-preview.5.20278.3-win-x86.exe\",\n            \"hash\": \"83a54b3a503b2d27972fe96d9a4f7185e8857561f65c3b9d1733d015a66cf1651cdf5973d53537ba85b0cf75204e27038159431c94532f9c4db3a4872c05a63e\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"5.0.0-preview.5.20278.1\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-05-19\",\n      \"release-version\": \"5.0.0-preview.4\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-preview.4.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-preview.4.20251.6\",\n        \"version-display\": \"5.0.0-preview.4\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-linux-arm.tar.gz\",\n            \"hash\": \"1648b613453cfafb755cfb43bbfe81ad7102f181b3a96e2b4ee3b71065b59271f2a1461a90961d416efa098bae223fde0b56e06d3b44ff60b36c0ea3394080fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-linux-arm64.tar.gz\",\n            \"hash\": \"c691e817b72377027936311c7fc8a7a04867ad50fd5189e41caa9222178248d01ad69e8b0fe5e5400815d06c740d9f0ff207e46ad9655dcaa032ee2a2a0c0ec6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9c3a7b23dd4a0967c66807c899e3ebdc703d863f970ad98cb1ff8950f46a20304db5ba05218bd0b965b28cce5b07b2e790c3a8b89b2c787fdf93713ed8949151\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"cdceee3294bbf995b0ff78d6a498be158bcf19d6fb8d8f68d5ec07288e12abad368047298b299e367aa88e00fca796aab70dd3d1ac5b0310f8d1b3ee2476660a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-linux-x64.tar.gz\",\n            \"hash\": \"7b3e90ccab3abd95bc678551a1778abf8d672978c598974669ba84418adc37d5bf2393a8c194adece7e86998418713e18571953f8ff7bb5780026d8814d882cb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-osx-x64.pkg\",\n            \"hash\": \"47f022a71c21bd15c21eea4c0a47abb2ed92a117a9c89aa03cd2c7262aef2996102d228e8d0c8e5a7d93beb7cb9205cc8259056e2e402662f72ae2a2447dc0a4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-osx-x64.tar.gz\",\n            \"hash\": \"a7cff64708e6ac4432c485677650fb6e7805b24088aa448db9ebe0ff2b474e051cef87e6ef2e3ae8d45e84e3db98c082a90de677f9d95f809cc1f7c2b725576d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-win-arm64.zip\",\n            \"hash\": \"e636004e3970e86478b2986252a50e34a2c32d92d4e5472b214fba4f81bafd929e37354f0e01212a6ba9ffacbf76d6f73429452c4e90f7ce525eb0b3dad2506e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-win-x64.exe\",\n            \"hash\": \"cbb041821cb1cb8512854f1361a5c662ab1c680ef308ec7d15df7acf15fb540c4c68ef60453bc869661194b618fd27d98c85e03afb981966e0aec299161a24b3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-win-x64.zip\",\n            \"hash\": \"c666a02299e2aa6f20dd5718c90cea1f496712cb93fc7cc300d2184cdd84509647c60daa48f4db4ef4d2e3ac2718c9c50b5d1d8fc139f89e74f1e87649c03c42\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-win-x86.exe\",\n            \"hash\": \"fc921133a0e8b1f7a24993701f969f32bf9450659cb5c4bbfd5ea828716425887023ed507d938aef52db60e3d8d79cdd85e950e907e5d47c90bfc806a019739e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.4.20251.6/dotnet-runtime-5.0.0-preview.4.20251.6-win-x86.zip\",\n            \"hash\": \"ae6edf9a4b9c3a0d25f1e4445fd5fb5efff5caec602c004392b2e399ded86b1ffa05152efb00d9128bf6b32ee9ec6050dd3f7f325824c48c1f367d758056eb8d\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-preview.4.20258.7\",\n        \"version-display\": \"5.0.100-preview.4\",\n        \"runtime-version\": \"5.0.0-preview.4.20251.6\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-linux-arm.tar.gz\",\n            \"hash\": \"912f33feb15a00cc7d983e2ed7c42750de013f072e5c6f0162410cca5b2aaadb146bfd09f0f4cc7c90ccaacbc5a5301bc91cfbd964312d3e44d5ff6c944baf64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-linux-arm64.tar.gz\",\n            \"hash\": \"36e13d6cf4dce12d5f5aa6bf4fa903a2bbe1b816b896ced4ae388514a3ae7a40fdbd918893e7cacfb3f8c8e328995c5c0cce49973785e05568b00aaf6eafe9b6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"2da9779628928b896a4285494349fa55efc987633d918d2c136017db6c4179f9ffbce871d1840bacc2c9e06dd54023bfcacd1cc51fbbeb2eaf1ff2cd175a91c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-linux-x64.tar.gz\",\n            \"hash\": \"d84fc2795ae6128299d318485a5e9ed8717f38aff83cac57ed9baa95785c33db7153e1d44aebfb21ab128f73540d09a5ecd58983345656c33c77c757faa4f624\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-osx-x64.pkg\",\n            \"hash\": \"5db580ebe00145f73f881ce8ddec1263bc926d1a87eec7fd6209aeb18564c2d3ab415d547a2cbe28fd71b630de3877955e813e5011e3cc39050d2e1c039ea30e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-osx-x64.tar.gz\",\n            \"hash\": \"6d2d00d319ad496074aab863bc3156d564872ca46c54bf1b3ed59ed755071c533733a863120da5b533e9bbd5843e276bba6a535e2c7f93a57bb9e858f7fae932\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-arm64.zip\",\n            \"hash\": \"055144b345e3920318477e4eb7e1c14706612beb5dc05bdf97e81ae657a525a769cc364d6671ca3d7803bee67931d120d6e27a6b5960c6e4c227aa4e9f09ee99\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-x64.exe\",\n            \"hash\": \"d201ff295c76b41e7a20fef8a79d1a0135d98ee08af472d2e5f565b0163f10a2bf99faccfd27a79ea6e2b0b9089a1aaf4cbb7cf3450975f6ded64b7800ab9a41\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-x64.zip\",\n            \"hash\": \"45be2aea1c493c42db6f3a69e36a798e436effc686507a52588030cbc8a39b45445fdea85759f7b7f53ab862b4341da19ef9be1fe0519a4ddac02b2d057a38ed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-x86.exe\",\n            \"hash\": \"f56f11baee88e4706e049e31c64007bc7df1d8321c2b05c5a8281e6ca039d60b48422cb3a28463d280c0a458f3f4e2f9c10717dcce26d2e8980a27ecfdbf355a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-x86.zip\",\n            \"hash\": \"a64bbd3f0a6197bbc004c1845bc43f02595d5682839202e17146ec040727f920fff9a1f2866f65931bc9d5796f663c01ab3282418d4b72e5c7a217324e5258bb\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-preview.4.20258.7\",\n          \"version-display\": \"5.0.100-preview.4\",\n          \"runtime-version\": \"5.0.0-preview.4.20251.6\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.6)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-linux-arm.tar.gz\",\n              \"hash\": \"912f33feb15a00cc7d983e2ed7c42750de013f072e5c6f0162410cca5b2aaadb146bfd09f0f4cc7c90ccaacbc5a5301bc91cfbd964312d3e44d5ff6c944baf64\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-linux-arm64.tar.gz\",\n              \"hash\": \"36e13d6cf4dce12d5f5aa6bf4fa903a2bbe1b816b896ced4ae388514a3ae7a40fdbd918893e7cacfb3f8c8e328995c5c0cce49973785e05568b00aaf6eafe9b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-linux-musl-x64.tar.gz\",\n              \"hash\": \"2da9779628928b896a4285494349fa55efc987633d918d2c136017db6c4179f9ffbce871d1840bacc2c9e06dd54023bfcacd1cc51fbbeb2eaf1ff2cd175a91c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-linux-x64.tar.gz\",\n              \"hash\": \"d84fc2795ae6128299d318485a5e9ed8717f38aff83cac57ed9baa95785c33db7153e1d44aebfb21ab128f73540d09a5ecd58983345656c33c77c757faa4f624\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-osx-x64.pkg\",\n              \"hash\": \"5db580ebe00145f73f881ce8ddec1263bc926d1a87eec7fd6209aeb18564c2d3ab415d547a2cbe28fd71b630de3877955e813e5011e3cc39050d2e1c039ea30e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-osx-x64.tar.gz\",\n              \"hash\": \"6d2d00d319ad496074aab863bc3156d564872ca46c54bf1b3ed59ed755071c533733a863120da5b533e9bbd5843e276bba6a535e2c7f93a57bb9e858f7fae932\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-arm64.zip\",\n              \"hash\": \"055144b345e3920318477e4eb7e1c14706612beb5dc05bdf97e81ae657a525a769cc364d6671ca3d7803bee67931d120d6e27a6b5960c6e4c227aa4e9f09ee99\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-x64.exe\",\n              \"hash\": \"d201ff295c76b41e7a20fef8a79d1a0135d98ee08af472d2e5f565b0163f10a2bf99faccfd27a79ea6e2b0b9089a1aaf4cbb7cf3450975f6ded64b7800ab9a41\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-x64.zip\",\n              \"hash\": \"45be2aea1c493c42db6f3a69e36a798e436effc686507a52588030cbc8a39b45445fdea85759f7b7f53ab862b4341da19ef9be1fe0519a4ddac02b2d057a38ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-x86.exe\",\n              \"hash\": \"f56f11baee88e4706e049e31c64007bc7df1d8321c2b05c5a8281e6ca039d60b48422cb3a28463d280c0a458f3f4e2f9c10717dcce26d2e8980a27ecfdbf355a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.4.20258.7/dotnet-sdk-5.0.100-preview.4.20258.7-win-x86.zip\",\n              \"hash\": \"a64bbd3f0a6197bbc004c1845bc43f02595d5682839202e17146ec040727f920fff9a1f2866f65931bc9d5796f663c01ab3282418d4b72e5c7a217324e5258bb\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-preview.4.20257.10\",\n        \"version-display\": \"5.0.0-preview.4\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20129.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-linux-arm.tar.gz\",\n            \"hash\": \"368b5ed98f8fb6a80142564ff705571f037143036ed36ef95f235fa67c94fb86038e60601ad1d82a0ee32b2c17fbe33e5cddf358124be30f09ffb452830d5654\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-linux-arm64.tar.gz\",\n            \"hash\": \"5cfe08a85af590d05f1a384938f13bb471b07d85a2572b622bff77e004f95366c9f347fe384a682480d7fe1547aabbadcf8d82d16605dfd8cf4688a3e082e676\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"71fd4f2cc5e3dcd41821be6a82675ce7f3f83637153d438160de51dce48540aec494ee4907f7e48e952bb05db8b746d357308419e6ea9355a3fd430e7dec4708\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"8ca2409c6a44d2ad5949d7107b5855ece12cde95b159f6eaf051f9eb991359fc6c47ec146a100e4169c34f1ee5f98de4b2afadea285ee74748f2cd373b0908cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-linux-x64.tar.gz\",\n            \"hash\": \"4e1fcba63e8ed494e29da789a6f737d59769b5be8eca038c070ec1a26ffb6601a14fae53be9e463e45b36957dd3b2e425d02d77c36d8682a93c3e3d9ef2742dc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-osx-x64.tar.gz\",\n            \"hash\": \"55a3c09c2ed29013ed70b25c76f6cf88002a291a6dfb6d0442dd49f6c1ef86ac7667ddebb4907a938722a26daaa6e05f631191857829d39f797ed53ec18f8177\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-win-arm64.zip\",\n            \"hash\": \"3e04855b0d57743aee5980969eceabfd95dda5b4554924cd48a9bb6d67598e4b372588fc582485e082a9aca0dc7a87cba6bf79fab24e923b1f2d8292188b9c9a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-win-x64.exe\",\n            \"hash\": \"e8173192d7a27380b0b8ae1647a07da21c89eaf15a7f2e0ff8389ace9618bb2cfa00a73dee5bdacd0ee77f35eabf51e2d1915d671707442ec45568f3796f4794\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-win-x64.zip\",\n            \"hash\": \"eca3ecb2d6bc2af36a514adb3cf7031c0183a0358d2b4b0092716513faad848d118b619e7f710b90aa0854ffb3b324fe73d4d19f451422a694e8bd4fa95ca480\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-win-x86.exe\",\n            \"hash\": \"356b63ad570bf07f08bcc686badcfdecd5a509b04746ee72e359d5fb76ab697937b59986aedc15636fda17702a1cc22e4829a9c8ca7253ccc4754a7c1ac5a5be\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/aspnetcore-runtime-5.0.0-preview.4.20257.10-win-x86.zip\",\n            \"hash\": \"ea126d6cb4147e70fb5aeb0c6e52cee6e7ca78eef48975e1fdbc0112557235e0ae16845d51981a4ad8c88443c9d773966d5818d9ae9c22ffc0cafc9d5545d70c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.4.20257.10/dotnet-hosting-5.0.0-preview.4.20257.10-win.exe\",\n            \"hash\": \"9241e9020cf06bc70b44677a6c562676649833edf4edc02e359d0229fa8e28f06ad9ee3294434815b385ede7f7846c4d0abf0d52ba1d80c139ea7ea0555b5b27\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-preview.4.20251.1\",\n        \"version-display\": \"5.0.0-preview.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.4.20251.1/windowsdesktop-runtime-5.0.0-preview.4.20251.1-win-x64.exe\",\n            \"hash\": \"f720f676df221e74280899e9c58774b97797d91b9dd2bffc9056ce4e8fb14b57026730d350dec03deb4c3755417046aba37800c2943b3a2ac05dd3a3b28510cd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.4.20251.1/windowsdesktop-runtime-5.0.0-preview.4.20251.1-win-x86.exe\",\n            \"hash\": \"cecef9c570348f31fe66206726b4db444fd71e24f21c65eca749f483bbe8d8c8cb5b2f701306b1db0f6b477821fb3ab3dc93bee3a582ceb2d3d80e561e3f6a42\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"5.0.0-preview.4.20251.6\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-04-23\",\n      \"release-version\": \"5.0.0-preview.3\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-preview.3.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-preview.3.20214.6\",\n        \"version-display\": \"5.0.0-preview.3\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-linux-arm.tar.gz\",\n            \"hash\": \"ebcb583f3900dad27555461a0fe2a871d047004d6feba1026d540d3887b3d9f116533d1f3247d90fa943a9d819e6bc78f084a248574ec33e6d57e2079b18b397\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-linux-arm64.tar.gz\",\n            \"hash\": \"392a9550b50cd01b3a33ff67022dffc6827320a1036a923c513ff87a9a4166c85c4a93fbede1608db43cf3083916268aaf4e782842b7618b99d429ca0762862e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"91f27c9d67ed88b54f0fe5869222fedd081ed89c227d2fadeebe48228f501b5bf36b98b84b9926eaad6d8a50bd44958e1fc30d0cce3ffb7d3deef6cf7a57e677\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"bd6ff3556e4096842a582511beb216a91b2576c6b6b12ab668e581d610611ec682bf1c00181a330a0117a068883f043b51d54e8f3fe00a0f1bef49df74ac84d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-linux-x64.tar.gz\",\n            \"hash\": \"459a5aab9dea6d27e15a55f8fdc4e44e6ed05b20c6d1bd9aba4fbc3b9176ffe79d9ae57b7757401e7c4ed0a11e483c6729b8a25f5af8dd6346dbb0fd025d0f2a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-osx-x64.pkg\",\n            \"hash\": \"5b8bddfb1406974c5ad328f9689b2a692edefb821d743aa3dd5148ee6a53b93f21aae3d6f781a7a593f9ec3db86c746f72dfe5e48d7fb3299bf0cc782bd42a15\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-osx-x64.tar.gz\",\n            \"hash\": \"78a6fa0b9bae717c945e58ae04f30a64d015031f9a474e2dbf23e54625f615d55adf377d334b7fb9f78caaa6cab9a6722d78b66e44faf73878185c3e73864c7b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-win-arm64.zip\",\n            \"hash\": \"3e50ff8d24154e4140003fbd255f4f746995590bb8b19939025d795a5927e9ce5c9dce11ed51a94f2cb97faaf7724ae11876294c5273087211e3b2952075199d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-win-x64.exe\",\n            \"hash\": \"7f9fd0452ef178f6df58e5de619dad7effbfd1985acc4fc6dd718bb26c228dd1df999af2482d80a925fd84e8f22f6f74a38f0d1c801c8417255abd766438d3c8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-win-x64.zip\",\n            \"hash\": \"d7660d441063e6eb2a289e9953d9102742efc88d1de73ede25cce0df687b02b9db2b89e61423c5fa90902b2d001e1e81b3ebabaad69815049a2641ba7b36b6dd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-win-x86.exe\",\n            \"hash\": \"72d90cb5a1317e1a9f939f5341fc396368a99c528074d689cdcb6082a60323663ce59f4840f47c94641ce8184195135ca81f2ee6bcad83b34c601fc3b101f1a9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.3.20214.6/dotnet-runtime-5.0.0-preview.3.20214.6-win-x86.zip\",\n            \"hash\": \"fdc8c090bf98f481e28d34f0ee0b61400e65f3ec1c1b56fb5d7105e0d500ead7e6afbd34cc0da7682ffcba2c9c5bf2137c9b212543a4688a28de593878924aaa\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-preview.3.20216.6\",\n        \"version-display\": \"5.0.100-preview.3\",\n        \"runtime-version\": \"5.0.0-preview.3.20214.6\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.6 - latest preview)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-linux-arm.tar.gz\",\n            \"hash\": \"608c204bced8e6c6d315c0e1f418b7c7b9bc794a2c2eb70e1bd55f0ffec5782a1006175f1a50f23e2cd2d004fb22a5bfea61dd7d0f573c2352c71e322163b02b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-linux-arm64.tar.gz\",\n            \"hash\": \"595ed5608ef0c7ba1cae7298ea540b9c165f135afc7126b46e3263de3753f8da6edd6459b5c4a8ec5edb5b00964c5228a2d070cb9b037106260d5b4a9bf8962b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"4466be190e90ffd85b4dd0a2abc5cacad188ea8f29d7019a2915f98b281a06840a1636f464e6a4a4f871399ca7e1fe00f937cdaa1dd11a27753b606c76c28bdc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-linux-x64.tar.gz\",\n            \"hash\": \"0ee4a4f3eb082dee321ae4fbd61c3d425225dfe3c0947108bbb2df9f3644e0eeebd0fd4db237cf6b06aa56b0a7ca10eb45c481558ffe4e7422e7e7c4f7369804\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-osx-x64.pkg\",\n            \"hash\": \"78cc44d2af20e7278d5cd5dd11ca8cc957c225023555f060e2e54d11a3b5add2c2d9c8012552d45aa27eafcc20c10579fb15180e7c906b1382c583abb4fe2316\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-osx-x64.tar.gz\",\n            \"hash\": \"341462f073f3642291a65fea8e7af98655aababb7b5c6e0574b7d0e16ab38f20f4bf84cbac24120f1bc22df12e426c4dec5d5353a3f69f748d4f68215dcb081b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-win-x64.exe\",\n            \"hash\": \"ab652850ca80fea4491888c114802fdfd37715805fd297b842dd087828119b17c332adc388c2321de5cb9dd5f091f2fa22ac2c46e76bc33ee0dd377c8a5f1415\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-win-x64.zip\",\n            \"hash\": \"f9268b2007e5f7df5048b3e9e3f1edd5dc63d5aa3431b497285cf5c5c90dca93dcc247b3b6eef5966671431d0f11419584ff25c4a8c0b9faf210df61bf8553f6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-win-x86.exe\",\n            \"hash\": \"7f52de73342dae67ac09d362b87087d2dc6de59e6470ab67065ee95da9d97dc8863cee62fa1d425814aa9ea622e16e02a49cb962295fdfa917e26b6846ea4f47\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-win-x86.zip\",\n            \"hash\": \"bf89fb973a9b37f7ffb6c37ed9ff513bb13f786f7225ab9eaac3ae16a43f90b249881926e1bf020fcdd7db94027586811b21002e374be3fed613424d7e06f328\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-preview.3.20216.6\",\n          \"version-display\": \"5.0.100-preview.3\",\n          \"runtime-version\": \"5.0.0-preview.3.20214.6\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.6 - latest preview)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-linux-arm.tar.gz\",\n              \"hash\": \"608c204bced8e6c6d315c0e1f418b7c7b9bc794a2c2eb70e1bd55f0ffec5782a1006175f1a50f23e2cd2d004fb22a5bfea61dd7d0f573c2352c71e322163b02b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-linux-arm64.tar.gz\",\n              \"hash\": \"595ed5608ef0c7ba1cae7298ea540b9c165f135afc7126b46e3263de3753f8da6edd6459b5c4a8ec5edb5b00964c5228a2d070cb9b037106260d5b4a9bf8962b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-linux-musl-x64.tar.gz\",\n              \"hash\": \"4466be190e90ffd85b4dd0a2abc5cacad188ea8f29d7019a2915f98b281a06840a1636f464e6a4a4f871399ca7e1fe00f937cdaa1dd11a27753b606c76c28bdc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-linux-x64.tar.gz\",\n              \"hash\": \"0ee4a4f3eb082dee321ae4fbd61c3d425225dfe3c0947108bbb2df9f3644e0eeebd0fd4db237cf6b06aa56b0a7ca10eb45c481558ffe4e7422e7e7c4f7369804\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-osx-x64.pkg\",\n              \"hash\": \"78cc44d2af20e7278d5cd5dd11ca8cc957c225023555f060e2e54d11a3b5add2c2d9c8012552d45aa27eafcc20c10579fb15180e7c906b1382c583abb4fe2316\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-osx-x64.tar.gz\",\n              \"hash\": \"341462f073f3642291a65fea8e7af98655aababb7b5c6e0574b7d0e16ab38f20f4bf84cbac24120f1bc22df12e426c4dec5d5353a3f69f748d4f68215dcb081b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-win-x64.exe\",\n              \"hash\": \"ab652850ca80fea4491888c114802fdfd37715805fd297b842dd087828119b17c332adc388c2321de5cb9dd5f091f2fa22ac2c46e76bc33ee0dd377c8a5f1415\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-win-x64.zip\",\n              \"hash\": \"f9268b2007e5f7df5048b3e9e3f1edd5dc63d5aa3431b497285cf5c5c90dca93dcc247b3b6eef5966671431d0f11419584ff25c4a8c0b9faf210df61bf8553f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-win-x86.exe\",\n              \"hash\": \"7f52de73342dae67ac09d362b87087d2dc6de59e6470ab67065ee95da9d97dc8863cee62fa1d425814aa9ea622e16e02a49cb962295fdfa917e26b6846ea4f47\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.3.20216.6/dotnet-sdk-5.0.100-preview.3.20216.6-win-x86.zip\",\n              \"hash\": \"bf89fb973a9b37f7ffb6c37ed9ff513bb13f786f7225ab9eaac3ae16a43f90b249881926e1bf020fcdd7db94027586811b21002e374be3fed613424d7e06f328\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-preview.3.20215.14\",\n        \"version-display\": \"5.0.0-preview.3\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20077.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-linux-arm.tar.gz\",\n            \"hash\": \"d81b656b357b16e9a4bfbf095c0641f56fe5276a0ce587ca8b31c4792f8b782aafc57d4cf97837901ff1dca8f6eaad462ba137967a6c2f36d90f277fbf4aa8c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-linux-arm64.tar.gz\",\n            \"hash\": \"01e30fc2ee685e1f2bfcff9abd862d353796a25757cdc60598060dc84cbce8b057ba070626f0e96385c0a34d00f9e41861cfd12a782a9ea2a253c32c7bca9d5e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"35efa93b5dec1184510bcb1ab454770f577c163967933257bfce56be5596633f6873671350819044b737e4fd6f6ff19d5904164f496ad633068a39efe77070d3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"ff46d723137d1b60717027035ee597ae993bff17a43f88e00fb44e8f271c7267f1e639079cfe03a717b9e42baef84cacfb464b25791165f94573f504d8ce7b89\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-linux-x64.tar.gz\",\n            \"hash\": \"1839e36b03c7c1da497f8ee6f2b484591513742a8aae897281a4be17f22d1d7ca5e9d877e4b90ab6100136564efc41c47287ef9fa071441f7d2e203816e0f1b7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-osx-x64.tar.gz\",\n            \"hash\": \"d269cb1627a175e6d33486c4f8df8873b9af5a67d8f6794fba7b8bc320338bdd2e29872120e0a86ed5f5de081dc87a025d46c0c0b6393b92ee0ede127b061d5a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-win-x64.exe\",\n            \"hash\": \"7f99511598257374de2f05c9eb2fc2ebfccee6bf1638408106f0ec15b6e8741ed614948f54ed63178d9c4a96439d5be30605a32effc7da1112fd56216efbaf65\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-win-x64.zip\",\n            \"hash\": \"d26caa3490f4a62921733a28a464f049fa812d94b19332c5c4106ac86b044e28a625ce5d966cdcb5ba3a4929845bb2cbf847f95714e4efa253dbc92d16d55128\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-win-x86.exe\",\n            \"hash\": \"cfee7eb241919c56db6b099c768b2835274f4a42a866c79f5dc572c228fa0393e6b8bd0cfbe50f37fcc99bef6f65dec49fe49165ce5a1b4f5fc2c90b10fbba33\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/aspnetcore-runtime-5.0.0-preview.3.20215.14-win-x86.zip\",\n            \"hash\": \"1e954e62fe4c64805a5b9b5c3ff1eaf2b5f707b93394da0fcee7f40cdf8425a9457fe8e00336d3eadd060faec5816906fe5df1d333634462659f07a546724af4\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.3.20215.14/dotnet-hosting-5.0.0-preview.3.20215.14-win.exe\",\n            \"hash\": \"460832918ab1ecb158f5c756e7c6eda468d0b997ec0467e946c6b64977485ab0470f54297164c6f182348eaac77b3b371382024f06f94bd3b26fd49cea5cd139\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-preview.3.20214.2\",\n        \"version-display\": \"5.0.0-preview.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.3.20214.2/windowsdesktop-runtime-5.0.0-preview.3.20214.2-win-x64.exe\",\n            \"hash\": \"131ceeae5b4b00baa572865c7402dfd5432a865bf493b46db61f196679d14847b64afee73cffeb3a7d19db5d3886921987d6b5080270ec4ff08dc64d29df9a15\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.3.20214.2/windowsdesktop-runtime-5.0.0-preview.3.20214.2-win-x86.exe\",\n            \"hash\": \"6fda214d9d80feec7867fa0d9285400fbc9fde0fc263ab2d00924a4f8386824adfb7be8dd7f6ef17a902a33cb8f68dae1a4486a089d101270eaa09950919653d\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"5.0.0-preview.3.20214.6\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-04-02\",\n      \"release-version\": \"5.0.0-preview.2\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-preview.2.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-preview.2.20160.6\",\n        \"version-display\": \"5.0.0-preview.2\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-apphost-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-apphost-pack-5.0.0-preview.2.20160.6-x64.deb\",\n            \"hash\": \"979220a6468bcdae67a0886d1ae8b4492b30d2e24ae3795087214c33bee4c368a58febbda7194fa9fed471f8d74e8b3107062ecedd38138ecf159f9ed31ad17a\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-apphost-pack-5.0.0-preview.2.20160.6-x64.rpm\",\n            \"hash\": \"14dd10bfb83f20b04306188f86bd75c27c2b39d6f4bf2fe49b2343cfc265c3e71a71757ca2765f79895791d4026cc480f92de938dc127a9fd3224f03060955e4\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-host-5.0.0-preview.2.20160.6-x64.deb\",\n            \"hash\": \"8a470a4e0336d563edf447373c40983360f513e5f08b44747c67c851acfb162d5d6c9c427edc67e5c5db3a44f367fc9b64294a8cf115bc9a085b8dd1e6eaf1ad\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-host-5.0.0-preview.2.20160.6-x64.rpm\",\n            \"hash\": \"f6aa1db3b7b2ee706aacaef43cc0c4e6872243be7de3afd9bad7774929004c66693dcbcb1b2ccda39f371c20fcc338a2b458a242fe2df195ee1161ce7addc7b1\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-hostfxr-5.0.0-preview.2.20160.6-x64.deb\",\n            \"hash\": \"bf04bdd0fa17a3b197da2360d36cad723898fbacca53fc614b0154a9f60c37a1e314daea1291757d187a4a54dc424fcb223572585d516e0e10d4c337d6f6e9c0\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-hostfxr-5.0.0-preview.2.20160.6-x64.rpm\",\n            \"hash\": \"edcddb1da7aaf6c2f68c0a9a0e3a606080db9c9a51150782050ad1153b049cf4f0aa278041cb8c3c40a3e8c12ccfe7a5aba8365ff1e0f942ea1214ef3128b9e9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-linux-arm.tar.gz\",\n            \"hash\": \"4c8256f03d3d1185801cb8d58cb456eece964e9d0e87c57ac1ba09316ae0808929f63cb73dc029eb2519ffda7f6204c2c40c154621c2dd02d32164b2860f8080\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-linux-arm64.tar.gz\",\n            \"hash\": \"f06dc6c0166b154d87eaa581691bb8cdbace4c38eed25faf23f21fcad29688d45cc9b6905bf3de9891bcd2ed1ac85e571c799174d480595e6821e7d9ed0fe250\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ed87ce53b2b22c8e4b407657546182217905e39d7ee43cf9baa31d9598303e1bebddba1f57f77298c6131e413334b58c62254a0c7c7ce27f622367430b1f69b9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"f8dcf9f498feffbca4b0649086cffd298cd98189b2950c32dd52b07179b7f33e1acfe14ae59a266502a3518089ca55f224e007628d16194f94be7dc419c1b2b4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-linux-x64.tar.gz\",\n            \"hash\": \"4454d8cb79f9a14ee9f0aa5c6b91a2d26de8e3748add0396f65f59a78b5c96e8ff2fe5bc0156915a7eebcdcb71bfc3b60d7a5cd66d28b96cc043357c9b07f106\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-osx-x64.pkg\",\n            \"hash\": \"acb3a49ca2f20b320f427951886971ee810cb9e66a1ab525c826dba3fa4defc55ea59547b51855038c9b1f440a856fb99b33c157b64318eed50606fd86d4c0b7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-osx-x64.tar.gz\",\n            \"hash\": \"970d045fc325b1f74d1f092280b320a0c800f8632bdf16cc1f7e29a3145135dc22a2a05709bae2ab3c2ed7e7ecaa18253628fe1bc2b25665fe20fb3c9015f3c0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-win-arm64.zip\",\n            \"hash\": \"9461a367ea1c550552be08fb09f1eb352793e029bb13073761860ae738b9561d1ed51c2a4892226347a51cc189e6ddd376e09fd27eca973cc5bf8c3a15cd73f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-win-x64.exe\",\n            \"hash\": \"6d0b38f55014111755982bf71f9cc2d071018e1230279abc3ac2ecebc73ba8d4f7182b97cb35b829cd533fb23d044ab53bc05b04a60e6e480d8e54e826374b3b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-win-x64.zip\",\n            \"hash\": \"db4f24db1e20dbdd0242b8c5730a98612954e28ebc18db655147d80cf4865ecad7ad6a72952750638b4205870ec86eee5a1073fd2f13b98811fc4e8b420f5082\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-win-x86.exe\",\n            \"hash\": \"24373413835460e0c972318b11692b4cbe8e6cb997d108f6ec45d9b0b8af16328ef99e08cbc2b42337c48aee1caeb7461eee06c0c0445ab575b65f89cc2d2d84\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-win-x86.zip\",\n            \"hash\": \"ecb6323acbb0dbe340fd11e1a19b339595c26063b75be3a7cbe2cb5ad8dc15e62526d827e7f9e64a3333a02a6c01f49813bb16950744fe589b4e513a9996d5f0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-x64.deb\",\n            \"hash\": \"a927d064084e0081d8603e8d7d934fbd19768e305f0f9f0c589c2b9902001277ee523df4e928a6dca26304f461a965d5fcd9c75456b267a95053473f92af15e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-5.0.0-preview.2.20160.6-x64.rpm\",\n            \"hash\": \"7cec60a908e3dc8af3805a915894ee39c0f2c18fadfd039b6dfa57165c9ba713ba972710396d36c69a4655cd14b9aea148bf60d9c698057f8e50e750a21dbc74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-centos.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-deps-5.0.0-preview.2.20160.6-centos.7-x64.rpm\",\n            \"hash\": \"f312459b881887b189e6ccc839bae4a29ec2d5f4520f789fae27e51ff2112aa32afb4fe7160c3526b825ac2a07ce691f810655d17b2f85960b865c2b6e54df7c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-fedora.27-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-deps-5.0.0-preview.2.20160.6-fedora.27-x64.rpm\",\n            \"hash\": \"4d29ded139c046d7733a530e1a8e995dee65c0b5b1b8dea4aea5e42763ae0a4f5979a96920856ac1e23b2ee008ab216a54f78d2f29b860572d7deca8221ae4fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-opensuse.42-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-deps-5.0.0-preview.2.20160.6-opensuse.42-x64.rpm\",\n            \"hash\": \"c2437ceb83413aebf1505e4018a3077da701159134a2da9b23a77163217178f2e1c8b723ccb416e1ad0bbf81719240331211c031f8ef46e49003b71ddf3be112\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-oraclelinux.7-x64.rpm\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-deps-5.0.0-preview.2.20160.6-oraclelinux.7-x64.rpm\",\n            \"hash\": \"64a14417e0402796f6242bcab6306b07da015dd9612280cce068e9e78f40035d4a9ec3a74d06cb03a91e476f6c60a55a5baa9ac3a720320b55f9f92723caaf51\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-deps-5.0.0-preview.2.20160.6-rhel.7-x64.rpm\",\n            \"hash\": \"afd2c1b50828c644bc289faf982106a3c753fb46281256f8a4b8d3ef26475838ad3db9870721925117420ef64728fc843e37b8269fa4acb6d133b2eb959f6250\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-sles.12-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-deps-5.0.0-preview.2.20160.6-sles.12-x64.rpm\",\n            \"hash\": \"8e9109572fe21308f202d8cd338773dd52bef7c8c802e2b2c7fa6a6a9265757045a3f328e58918e8208c44a7b412fb67e77896766dc371f8dc1527355333bfb0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-runtime-deps-5.0.0-preview.2.20160.6-x64.deb\",\n            \"hash\": \"1a59f6efe4de5812c421356118215fd82b9d8e75df3d2ae92dcfaf6a824366c25fcd689db0e2fa1d3a2570e77649e3e750a04842a74fc8aead4805f9ee09352b\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-targeting-pack-5.0.0-preview.2.20160.6-x64.deb\",\n            \"hash\": \"247d7c0da1ce5e82e56965e82cadd03cce22ec32e6a041ec3a261be707718350926389c58b6843a61e08694d8c41c152182593d132ea7632fcd9cb91e4cef267\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/dotnet-targeting-pack-5.0.0-preview.2.20160.6-x64.rpm\",\n            \"hash\": \"21de82a79f02465896de9b10f487354931f3e9f207599180fe7bbde28516b5b3c0dae040f0028207c37e45848cd3cbbd6f18a1e32362ae5f301cc675cfe33670\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/netstandard-targeting-pack-2.1.0-preview.2.20160.6-x64.deb\",\n            \"hash\": \"483d0091f151677d5407fdd9fd718a606ba33ed25f895f4b76b45b020e2434b9b4f8a660783b031b022a1d1e6d877c5e8159121915c0e0fd158081afb4d5727f\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.2.20160.6/netstandard-targeting-pack-2.1.0-preview.2.20160.6-x64.rpm\",\n            \"hash\": \"25374b1deb14bba20d1b97ab557274aa58278957d271c046a7ba41f84a073aa6b7c5bfac5337f7466f3f0b562748fa512a8c56fd8576870bb6ee32fb4a8dc759\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-preview.2.20176.6\",\n        \"version-display\": \"5.0.100-preview.2\",\n        \"runtime-version\": \"5.0.0-preview.2.20160.6\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.6 - latest preview)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-linux-arm.tar.gz\",\n            \"hash\": \"0d11dc0dbaa68278021491ee1327a736e353be6891de48e276283f9ea74ccc171250df170f5981737e9826bd49fdaf80d0808dd7c1c939e3defb2cbdc5dd32db\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-linux-arm64.tar.gz\",\n            \"hash\": \"53cbf213e2e97b909b256d931f061178f26e5647424f144266d4af2e12d6443ef7398207a8f4e6f220c61db9ce49de3dc09d88417288a6a61d9b05e1def6b279\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"83b65c6d95d04213685761cbb36a65c1b4c2a2991deeee421446f8e5956acfd1275243f3bd1ce95726b8564d7d88c6a48aa1f7f728b406a385c41e506fb13d29\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-linux-x64.tar.gz\",\n            \"hash\": \"fface8ff5facdec10d11f8249b426a71cd5bc17aa4e4b1fbe85f4a462e55bdb648a456973a3257f0a700be1aeb0f9bb41639ceca12c2e67d1571e4544ae62bd7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-osx-x64.pkg\",\n            \"hash\": \"895f31e3c46081f66a24704a4483cb76abc2ae2c4c790f134650c02be9aee7477a0e0de2329e36c05b6267bb19260e7e32b5b8b7b7a9be36d9d06972d43db7ab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-osx-x64.tar.gz\",\n            \"hash\": \"7359a8ae35265c47a8e893e6b32f13063e4d139ad4a9e89f4e08e01acff2aa92b32d40c19e1b117b5e24e2eda132ea46bfb4a9ad3f409c7b60bc70f9a97a492f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-win-x64.exe\",\n            \"hash\": \"c3f511623b89662a95ce08ba00d0b7f588591eed62fd0c205c4916c8e540fdbfd9dead85da31b50aa085702dc5dbe98f8629f99ff4bcc49a2e115d48b7534d38\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-win-x64.zip\",\n            \"hash\": \"94ec391e19232abc419e4327bbafe9e1f1b363bdda8c280da97f8cdc9f511747d3add76e0fb9909080c554f5acc61ebf7292d84ec5a81acf22d49760bf36ad72\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-win-x86.exe\",\n            \"hash\": \"d9a4241a782913a0e371acf25744e40f16a469e19b80054387c1eef911aceb7d71794910a0e9629d593b0d16371a7d66ea19651701c6ce1d8d1db52f036774d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-win-x86.zip\",\n            \"hash\": \"0ea68fa63d537252436cd2721a2b0fbb256549b5f0d093536d5aa1692697fb17e62df36a22fd19daa47f8b20bbe1ee85aafb5a8c47298c45ddafe27e56223fc9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-x64.deb\",\n            \"hash\": \"d3527bbea25ce0aa6eeab39d997dd8c2fba8a7b0c9b07d8a523205edb4dfaa5bc4c15c018354c4f812a5c26592f3becaca80bbb793d9535ce49a0ae8c2fac832\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-x64.rpm\",\n            \"hash\": \"31f3ede22c545003bc371806eab559bba5c5d5ab1816a5e9516cc80540be77997094db690ba0493e8b3804c6fe474995d2a5ae343db28961b3e60651fada8350\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-preview.2.20176.6\",\n          \"version-display\": \"5.0.100-preview.2\",\n          \"runtime-version\": \"5.0.0-preview.2.20160.6\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.6 - latest preview)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-linux-arm.tar.gz\",\n              \"hash\": \"0d11dc0dbaa68278021491ee1327a736e353be6891de48e276283f9ea74ccc171250df170f5981737e9826bd49fdaf80d0808dd7c1c939e3defb2cbdc5dd32db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-linux-arm64.tar.gz\",\n              \"hash\": \"53cbf213e2e97b909b256d931f061178f26e5647424f144266d4af2e12d6443ef7398207a8f4e6f220c61db9ce49de3dc09d88417288a6a61d9b05e1def6b279\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-linux-musl-x64.tar.gz\",\n              \"hash\": \"83b65c6d95d04213685761cbb36a65c1b4c2a2991deeee421446f8e5956acfd1275243f3bd1ce95726b8564d7d88c6a48aa1f7f728b406a385c41e506fb13d29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-linux-x64.tar.gz\",\n              \"hash\": \"fface8ff5facdec10d11f8249b426a71cd5bc17aa4e4b1fbe85f4a462e55bdb648a456973a3257f0a700be1aeb0f9bb41639ceca12c2e67d1571e4544ae62bd7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-osx-x64.pkg\",\n              \"hash\": \"895f31e3c46081f66a24704a4483cb76abc2ae2c4c790f134650c02be9aee7477a0e0de2329e36c05b6267bb19260e7e32b5b8b7b7a9be36d9d06972d43db7ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-osx-x64.tar.gz\",\n              \"hash\": \"7359a8ae35265c47a8e893e6b32f13063e4d139ad4a9e89f4e08e01acff2aa92b32d40c19e1b117b5e24e2eda132ea46bfb4a9ad3f409c7b60bc70f9a97a492f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-win-x64.exe\",\n              \"hash\": \"c3f511623b89662a95ce08ba00d0b7f588591eed62fd0c205c4916c8e540fdbfd9dead85da31b50aa085702dc5dbe98f8629f99ff4bcc49a2e115d48b7534d38\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-win-x64.zip\",\n              \"hash\": \"94ec391e19232abc419e4327bbafe9e1f1b363bdda8c280da97f8cdc9f511747d3add76e0fb9909080c554f5acc61ebf7292d84ec5a81acf22d49760bf36ad72\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-win-x86.exe\",\n              \"hash\": \"d9a4241a782913a0e371acf25744e40f16a469e19b80054387c1eef911aceb7d71794910a0e9629d593b0d16371a7d66ea19651701c6ce1d8d1db52f036774d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-win-x86.zip\",\n              \"hash\": \"0ea68fa63d537252436cd2721a2b0fbb256549b5f0d093536d5aa1692697fb17e62df36a22fd19daa47f8b20bbe1ee85aafb5a8c47298c45ddafe27e56223fc9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.deb\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-x64.deb\",\n              \"hash\": \"d3527bbea25ce0aa6eeab39d997dd8c2fba8a7b0c9b07d8a523205edb4dfaa5bc4c15c018354c4f812a5c26592f3becaca80bbb793d9535ce49a0ae8c2fac832\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.rpm\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.2.20176.6/dotnet-sdk-5.0.100-preview.2.20176.6-x64.rpm\",\n              \"hash\": \"31f3ede22c545003bc371806eab559bba5c5d5ab1816a5e9516cc80540be77997094db690ba0493e8b3804c6fe474995d2a5ae343db28961b3e60651fada8350\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-preview.2.20167.3\",\n        \"version-display\": \"5.0.0-preview.2\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20077.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-linux-arm.tar.gz\",\n            \"hash\": \"f3397ddab68b19c0fb479835a98275315250c09ce0e2445d322fa743327bce3fd21580bdd6f480a650d9f0019afdc04df68ff689623fdc6b367589c840ac6c4e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-linux-arm64.tar.gz\",\n            \"hash\": \"d8c08a4b104b1d9aaf7c88e09c48cc2b17af7fa218c895d6dcbd9bf5c3afd2560ff8d647389ba7d8d5416e178897e128bd14c3f4598e821beb3bb8964dc862e8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3d40c20c865dc7a686cad0f30810052387222f5840e81a3b1f352294722335aa44ca29b62106f8161790c7a92f663a934197b5890d641cacc05e886d76f1f7e7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"029ed32f8a7dfdb258438177b7fd40c187830db35b3d973dec296d8948f99d30a74269c45d31876c9b4533b8d7b6af65dea319299bd9a7081c6881cf026274b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-linux-x64.tar.gz\",\n            \"hash\": \"c155a94b463020f413b9cc6650219b27c08f331f9d1926966e4c4471b1a3cc79e199fbbd4747e8ad89bd03d66cd90cbc68a5554c54e931ac59f7508810303327\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-osx-x64.tar.gz\",\n            \"hash\": \"774911ba77a3c7868a87ba34784f71f3ff7899d806e1cc1d7e1f5d53bcd7d9031addf75d062efbc5f8a5f38506c09ff8ae17deae191c8b8dfcb708a9b28a4fa1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-win-x64.exe\",\n            \"hash\": \"ddc7128e48440faced3081367f506d9b85dc26ad2f3b2655ab5059769702762fffd36efe086d3215be21fbd44f8fdb0118776322a0de53ab58ead006b282e426\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-win-x64.zip\",\n            \"hash\": \"559adef282a0f5f70986a27672bc209278791952307cd0442f85cb249ee330ba3998cd4fd57333b057f1cb4149ecd2c1036db09cb8af78d6139ed45665722548\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-win-x86.exe\",\n            \"hash\": \"de1ae921ed53d01eed636cde1894555d077d97299d3736416a4e861216c47ffe90e19bc3634431addd8e8c96b057fe8c79847c4ab6fe862ed96daaa2348c838d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-win-x86.zip\",\n            \"hash\": \"cb9c9a0b15e514fc8c65ef22e56eec4a82b1d95214a997c2d353f6312df6602086968e057a60ac1f5fc18d9bdafa4cad2975cbbc5bed38babe9531f064dcf0d9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-x64.deb\",\n            \"hash\": \"5f0445df666983228431744dce9919523952fa4ce3a4fddd41bbbfc907202d6d9a39cf52b1f5879b11e0bce9a820a415028757a2ba803e694e90357d04993b2d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-runtime-5.0.0-preview.2.20167.3-x64.rpm\",\n            \"hash\": \"346303c4384afabf5367b748415721ed9262e3af7b1ed0de62ef453161a69f35a553fd66e38c18e06269172870a799bb9dd1818a9abef9cd0afc06193a9a06ba\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.deb\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-targeting-pack-5.0.0-preview.2.20167.3.deb\",\n            \"hash\": \"3b1c444f0e0e2adbf4f338c183ddd631d6694c91118de30c2d879ebf1e4b00b8a8a0afb6783c7cc31b3481d5a183a9151234804d6efc88b3b47061d6ecde2ecc\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.rpm\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/aspnetcore-targeting-pack-5.0.0-preview.2.20167.3.rpm\",\n            \"hash\": \"c6c0c92ec89244ff10daa92e559746f2e3364659c343e318bec64c5dc4f3c4475dd6c67d33e7d0de90c751f9b273484d4703583980c50e0f3f79a9728bf72603\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.2.20167.3/dotnet-hosting-5.0.0-preview.2.20167.3-win.exe\",\n            \"hash\": \"d087a4e6c25608bb384e032cc1cd37bf8ea420fa2f249f5279755cbda9ca6b6c8f3ebb7cb7bd731da8440d758aae2f40ba7a5097da371da1035cb34e66076b8a\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-preview.2.20160.6\",\n        \"version-display\": \"5.0.0-preview.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.2.20160.6/windowsdesktop-runtime-5.0.0-preview.2.20160.6-win-x64.exe\",\n            \"hash\": \"1b083768f30518cd63748a026c19d2624324f4438c4c00118d241d2b6bc5236cf0308cb366938dd748d68d3956091ab996fc3267666c71d70827886c7054e4cb\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.2.20160.6/windowsdesktop-runtime-5.0.0-preview.2.20160.6-win-x86.exe\",\n            \"hash\": \"4e16206556e3944899807bfd914962e9422b5916dd794bb67bf11997fbed78525e20337f0029f66f01687b17492d97feb5f93b317c09d12a23fe6a37554184ce\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"5.0.0-preview.2.20160.6\",\n        \"files\": []\n      }\n    },\n    {\n      \"release-date\": \"2020-03-16\",\n      \"release-version\": \"5.0.0-preview.1\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/5.0/preview/5.0.0-preview.1.md\",\n      \"runtime\": {\n        \"version\": \"5.0.0-preview.1.20120.5\",\n        \"version-display\": \"5.0.0-preview.1\",\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-apphost-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-apphost-pack-5.0.0-preview.1.20120.5-x64.deb\",\n            \"hash\": \"ed117b0c19b53641c960e16f028c1fa17fadab377ffb7fae6de75b8d23f15ad22f8f5f124093a723cb3a2d7877963b4264a316aa3ca6140feedb4f399050b1a7\"\n          },\n          {\n            \"name\": \"dotnet-apphost-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-apphost-pack-5.0.0-preview.1.20120.5-x64.rpm\",\n            \"hash\": \"6ddc9e4cd7ca7bb78fbb9d88ba28acc978e4a2abf7ac01a82b0ec842c51df63679591cde194e3ea28e1655054248c044c2d6f0e0cdcbfbc85f60586f250c6b12\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-host-5.0.0-preview.1.20120.5-x64.deb\",\n            \"hash\": \"350f664500eda05fbd207c3260739291b7ef5aca24f19d9de4d0126d843805de59f6774c75b55727f93f4a4bdda64ae6333c7e41c17a97671f1b2b5e5803492b\"\n          },\n          {\n            \"name\": \"dotnet-host-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-host-5.0.0-preview.1.20120.5-x64.rpm\",\n            \"hash\": \"aafb470c8f29a4db82f8fc36f3a5b840016c6e87e11de12b606127f931328e72a6fb193b6164cf51850bf6206e314dfee6f55f74968f7590ecdf09ff6d0a1c9c\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-hostfxr-5.0.0-preview.1.20120.5-x64.deb\",\n            \"hash\": \"605103f3ed2ae03b4d32d65102e84d3ed363e5ddcaaa72caafd9c08885e1317bc76df499e05fa7ecd29f42e3dc52f307400c045028467a52c7bc786479bd6b2c\"\n          },\n          {\n            \"name\": \"dotnet-hostfxr-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-hostfxr-5.0.0-preview.1.20120.5-x64.rpm\",\n            \"hash\": \"e6592b38ce4cbbe087eb0075990e7b3d9c7ed6aeff5d5164e86b0e6468d4a0c9af3ab67a5b1880354131dbb219c49b8e434fb19ebdec6645a727c9c3c711b2c1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-linux-arm.tar.gz\",\n            \"hash\": \"4dac1fee28b385c4e9fb133eb5ab7cf281f72c99d8cae3ba1f1b8b077c9424878da4a6d45cc72a3c09e5a37e1c93ac2f78dcc902838ea9f9875848dca78b74de\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-linux-arm64.tar.gz\",\n            \"hash\": \"bac5b22fc5ad2b633d650fb779e37b29339cbf2a4a764583e58927e95d9ac627f75e532e45ca775ec94859580fb865431abc36efcf7aaf3c11eb373a607e0e05\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8329ac14d78f119ab905d8770f52f0ad7b17a8c6a0c880618318aba1106fbdb04a3f7769c76708c5603101c575acfe401df002777b5ca8e4ea7a0e3604cfe05d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"a6dcbfc86a65e1c7fa58155df7255c5bc8387361501dac79827f98c92146194b18872dbf2d6c75402ffb08bf7b8111601733cfb20edc8f1e037e108f5b127042\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-linux-x64.tar.gz\",\n            \"hash\": \"488f96949f8835b99a688a6ff1699702f476bfd12d2aed5063d89ceaff801fd63e77160838ea57ce9b97f0770e29233e271948f69c790ef5daaa84382ab3d2c3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-osx-x64.pkg\",\n            \"hash\": \"ed395dab0cbc6036cac52d9c4cc269558263bfe86f49cb36971c130960f6374ba8834ba25b5de1a2bd7cf34d94cad56136ee69c486a26c8d9a4b2cfb0c1585a0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-osx-x64.tar.gz\",\n            \"hash\": \"934eed60b76428a8a16cfe4dd46b72e39a0d413a8155072514a409957a099318a38ffbd2c08330d94fb8d5dd0176d502cfa6c3fb0d82e5908aa368b476b988e4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-win-arm64.zip\",\n            \"hash\": \"18fc835f51f23d090460b197f08b3262386d9b9037cac93440a6311e65ec77558e15a52f7b9e5514ddb2f1808b736bf379fcd5bfa99e424024ba2e103e49554a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-win-x64.exe\",\n            \"hash\": \"cef89a83d64aa4ff9b17549439686b40527a0b1e019592b83bb46c641060cfe583fb8889b0ae9ea009aead27673082f26776690685f08798f35e9e6363a391d1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-win-x64.zip\",\n            \"hash\": \"6c3afe3b51b85b53a03b448d6fe122a5e7d7da60d904b10040e99a218092e2632ea25bf58b5c9a3cb40151c41ec0fad158ce3487265df4d7eae67e3768408fb8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-win-x86.exe\",\n            \"hash\": \"09c5ef8a4f4fa7e7437bc870f47f7e2375ff52b57560076b5f41c58205071b3db478c1779baac02a2bd633a28ee3878634da05bc50945145a7a31244e6203782\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-win-x86.zip\",\n            \"hash\": \"09006d52e8d9f95714c3a2a7a8523f08d4bb44ea99a04db2a8432d986c39b871fac79ec8419727410a7814bd21d64f7282595fcc3db1df5262f8de2c9aa0f916\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-x64.deb\",\n            \"hash\": \"3f5bcd7c487532caca918ff433eaeeacb7339a87019735285b93546d7cbf0d64825007cb8cec9e6d7923f810b886a812238cc4ada2dd77b7768c61b367d423d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-5.0.0-preview.1.20120.5-x64.rpm\",\n            \"hash\": \"49407155f0dc672150464ca20dedc87e6085090426fcc65b57b5f99fd255ad951d5adfeede8868762805ad05a4784c51f4b957fd802cc3544e9c0580e50686b6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-centos.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-deps-5.0.0-preview.1.20120.5-centos.7-x64.rpm\",\n            \"hash\": \"12950ed76f3f352f4a7b8fc8cef6320e4f0968ee5db0d67a8f57b66ff3ed44a46d92f83856e8e55dbe601136d5c80449dd75636942651848bcaa0bf098639747\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-fedora.27-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-deps-5.0.0-preview.1.20120.5-fedora.27-x64.rpm\",\n            \"hash\": \"c4eae900802004f63c076abd5d2eef841f19bd04c14983cd9576febde92d9b76a0f4d81d9f6c5aec32e72652a8ff88eecba974e50ed17999073954ca75ac8c6e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-opensuse.42-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-deps-5.0.0-preview.1.20120.5-opensuse.42-x64.rpm\",\n            \"hash\": \"20ae5fc88c113047eef5a65bb86ff2f4a663acc2466451de66fa758c66213e89cb15c31bd0b5c33a6f0a51ab766dc94ccdb7275ae6cfad6e615f2790d0c822fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-oraclelinux.7-x64.rpm\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-deps-5.0.0-preview.1.20120.5-oraclelinux.7-x64.rpm\",\n            \"hash\": \"d4343571ebd7cb391c4a87320817880abf70375ce1f3a633c2549253ff891746cf209c13a25f1c8b44f6871a044c248552682f553b3dbf63d95ccd138cb86eac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-rhel.7-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-deps-5.0.0-preview.1.20120.5-rhel.7-x64.rpm\",\n            \"hash\": \"4352bd9d2f1154167493c27a16fa6cbbe4b0e0956497951af86c4ed3643502ac811422cd65125add042756b78ab5498120d4bec1d0948e99bdc042a2ef95589f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-sles.12-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-deps-5.0.0-preview.1.20120.5-sles.12-x64.rpm\",\n            \"hash\": \"ac5c52035fe0816909dbe82d562e21d87e6a0f29487318cdf72e5399b51d481b999c06514fc5dc8f082d2a808f62d3835ec80e5b7f7b0639b17f10eeaf92a20a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-deps-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-runtime-deps-5.0.0-preview.1.20120.5-x64.deb\",\n            \"hash\": \"cf9934aeae86f9a12003cb577e395ebd11f0d73369f1d964f08ba382de7ab876bdf5af92fc2c28ebae55874bd4785c6fd23607fe68adc639bfac90d37aa44da6\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-targeting-pack-5.0.0-preview.1.20120.5-x64.deb\",\n            \"hash\": \"cd7225363d24162561e8b14c83f03bfaf1174b7e9c2e2ccb15ef8f2e4ec43208b0314646069a85332313e34b1628cb976d84cdc8fa2b5e9e03a6eddbe1b03401\"\n          },\n          {\n            \"name\": \"dotnet-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/dotnet-targeting-pack-5.0.0-preview.1.20120.5-x64.rpm\",\n            \"hash\": \"4a429a1397615bdbc420ddbd195b3053c8c171105c92815496394dc43de28c4fb69e0ddb1957c7d973bd8b169c1a424438e1aae5d9ff39f0b197230efabd4eef\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/netstandard-targeting-pack-2.1.0-preview.1.20120.5-x64.deb\",\n            \"hash\": \"1085b801e774bfc9c286a33c11983738febfcaedf611791f34285de8ded20f9ed7046dade34fc6a0278d55ea6715f93fe8492dad9bcfd2d96cef758466c26cc3\"\n          },\n          {\n            \"name\": \"netstandard-targeting-pack-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/5.0.0-preview.1.20120.5/netstandard-targeting-pack-2.1.0-preview.1.20120.5-x64.rpm\",\n            \"hash\": \"39956a7c90516e58c0a6bb19c69f5b4a1ee510042c92715914922b8ea67fd47b484c202c564cb1490bed59ef2f0d0bf2155f8cc7b140c9793dfebee66836d72f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"5.0.100-preview.1.20155.7\",\n        \"version-display\": \"5.0.100-preview.1\",\n        \"runtime-version\": \"5.0.0-preview.1.20120.5\",\n        \"vs-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.6 - latest preview)\",\n        \"csharp-version\": \"8.0\",\n        \"fsharp-version\": \"5.0-preview\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-linux-arm.tar.gz\",\n            \"hash\": \"40752321856230ec4be50b3900909d002d28415e3ee6b499c605c922713b2867a736bbde9337c8a7e4e84260a5216f644c15d1660a74923ee06aae75bc62a54b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-linux-arm64.tar.gz\",\n            \"hash\": \"022a1f8cf19361f5ac1b7e0635864828266abbaf7bd26955c751a004ab9b5176a71567cba902ced0d2d48265ee0d3468af9ec931c6c9f5375f2d5c33ca14a439\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"a346eeda7140c2d674b5a9b1f777d3d4803d340f28466072c5662fcd0c8f002a411f5525845aeefc7e02ada9e22e05fce387f04260f9c3ec2c352a8155553489\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-linux-x64.tar.gz\",\n            \"hash\": \"e768641ef12604400edf4ba25bd7ea7a2e64c69fa447661b478ceff89f3c77c07ec69f3aa05b966400e88caae4f548a7bfc5a0747f511b5a10e88dd616f73b21\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-osx-x64.pkg\",\n            \"hash\": \"b3807b8d3b8780146c801d8ed0bfd878b5bbdae3a6dbf89e4d97f29c2de4ac1b3cb8017e67174221ee8f4cac8a232060bd99e94a614143d4f47682838e227a4a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-osx-x64.tar.gz\",\n            \"hash\": \"243e84d0c1b61bde82c99c603fc2ef78e556850329772a828095bbbaef8f151c90b5474152fca57a25329517a0513dd22f591cccc853cc2525ce1aa10175cb41\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-win-x64.exe\",\n            \"hash\": \"a485ace9750f845f4037d7ac7c8cd3174f8db4eb2a8b7ea690a03be611fe5b0a2b3d37a696f8c38ab829e63af7a829a84aec3dd46a88ef5f993daa4dca1cc2a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-win-x64.zip\",\n            \"hash\": \"7f3ac46d09df12788061cfe3fd0ef32eaeeb5656e727f20888113d6028f035b2b724f10b9536eb968c4579b65571c7aba01c8b2b1c5b98ef141cfb5f9c063c91\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-win-x86.exe\",\n            \"hash\": \"d47dbf9e46075050a10a0e78830ca901fd667a2a4691bf5fe41ebb805cd6298d5f558178bd5aa5ad07ca2b9205fa4077a548f1a9060cf82f4ae5ebb87d5e0aee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-win-x86.zip\",\n            \"hash\": \"8b2d7269fe8ae3a70b1776d102c4a84e3fc742be12e548577344146ff9d43193c5addeb847ec0e2c87618ca88721f54787e30d55ea9e970417c8c91e6f0db7f2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-x64.deb\",\n            \"hash\": \"77f01a7fdddc80cb92521fc73ca618f1631f7c90a5c1d3531f5876836ce0576567bbf31dfa232b88755c46fb230752a393c8344b238c98b7c143654b0d816468\"\n          },\n          {\n            \"name\": \"dotnet-sdk-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-x64.rpm\",\n            \"hash\": \"54dfbaa8b63cbd79b7e64f6f9ee11e9d22f789e600bd69eacdab3e4946e1136056a9e17a71dff9f913ef62c80559a3e15e6eb05c988413f5275ab822ce7442b1\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"5.0.100-preview.1.20155.7\",\n          \"version-display\": \"5.0.100-preview.1\",\n          \"runtime-version\": \"5.0.0-preview.1.20120.5\",\n          \"vs-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.6 - latest preview)\",\n          \"csharp-version\": \"8.0\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-linux-arm.tar.gz\",\n              \"hash\": \"40752321856230ec4be50b3900909d002d28415e3ee6b499c605c922713b2867a736bbde9337c8a7e4e84260a5216f644c15d1660a74923ee06aae75bc62a54b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-linux-arm64.tar.gz\",\n              \"hash\": \"022a1f8cf19361f5ac1b7e0635864828266abbaf7bd26955c751a004ab9b5176a71567cba902ced0d2d48265ee0d3468af9ec931c6c9f5375f2d5c33ca14a439\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-linux-musl-x64.tar.gz\",\n              \"hash\": \"a346eeda7140c2d674b5a9b1f777d3d4803d340f28466072c5662fcd0c8f002a411f5525845aeefc7e02ada9e22e05fce387f04260f9c3ec2c352a8155553489\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-linux-x64.tar.gz\",\n              \"hash\": \"e768641ef12604400edf4ba25bd7ea7a2e64c69fa447661b478ceff89f3c77c07ec69f3aa05b966400e88caae4f548a7bfc5a0747f511b5a10e88dd616f73b21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-osx-x64.pkg\",\n              \"hash\": \"b3807b8d3b8780146c801d8ed0bfd878b5bbdae3a6dbf89e4d97f29c2de4ac1b3cb8017e67174221ee8f4cac8a232060bd99e94a614143d4f47682838e227a4a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-osx-x64.tar.gz\",\n              \"hash\": \"243e84d0c1b61bde82c99c603fc2ef78e556850329772a828095bbbaef8f151c90b5474152fca57a25329517a0513dd22f591cccc853cc2525ce1aa10175cb41\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-win-x64.exe\",\n              \"hash\": \"a485ace9750f845f4037d7ac7c8cd3174f8db4eb2a8b7ea690a03be611fe5b0a2b3d37a696f8c38ab829e63af7a829a84aec3dd46a88ef5f993daa4dca1cc2a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-win-x64.zip\",\n              \"hash\": \"7f3ac46d09df12788061cfe3fd0ef32eaeeb5656e727f20888113d6028f035b2b724f10b9536eb968c4579b65571c7aba01c8b2b1c5b98ef141cfb5f9c063c91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-win-x86.exe\",\n              \"hash\": \"d47dbf9e46075050a10a0e78830ca901fd667a2a4691bf5fe41ebb805cd6298d5f558178bd5aa5ad07ca2b9205fa4077a548f1a9060cf82f4ae5ebb87d5e0aee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-win-x86.zip\",\n              \"hash\": \"8b2d7269fe8ae3a70b1776d102c4a84e3fc742be12e548577344146ff9d43193c5addeb847ec0e2c87618ca88721f54787e30d55ea9e970417c8c91e6f0db7f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.deb\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-x64.deb\",\n              \"hash\": \"77f01a7fdddc80cb92521fc73ca618f1631f7c90a5c1d3531f5876836ce0576567bbf31dfa232b88755c46fb230752a393c8344b238c98b7c143654b0d816468\"\n            },\n            {\n              \"name\": \"dotnet-sdk-x64.rpm\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/5.0.100-preview.1.20155.7/dotnet-sdk-5.0.100-preview.1.20155.7-x64.rpm\",\n              \"hash\": \"54dfbaa8b63cbd79b7e64f6f9ee11e9d22f789e600bd69eacdab3e4946e1136056a9e17a71dff9f913ef62c80559a3e15e6eb05c988413f5275ab822ce7442b1\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"5.0.0-preview.1.20124.5\",\n        \"version-display\": \"5.0.0-preview.1\",\n        \"version-aspnetcoremodule\": [\n          \"15.0.20055.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-linux-arm.tar.gz\",\n            \"hash\": \"0592fdc197b07151970fdc64e3f40d5551bb2d0bc821241e1068ee1446606d5f7569bdd74a4744efa29b86b01a6600807c6c31630c6651d44281ab38767fd172\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-linux-arm64.tar.gz\",\n            \"hash\": \"bc4d66c2c81ba81afa63226444bad97d590b08c35a4f13e2bc972fd11f313bc524286384925c1db0d882acd5ef17ea9cc7715331cfaa2394019cd5bca461d6f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1b989ff55f0d63be0f512db1caf1b7c571fcf1c30785a4077f43b4ebe9646088a85ec929fb2242bd1f6f16ae236278aafa9827b10420a81d0466eb83d791c2b7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"05bc089d6587b7d4afda29c793b602b549fbf2eaa631ce7339167f5f5f572267e36414f01755eb34dfc89bfd4081ef1b61b56e322aefccfe1b1c805ad77d5a15\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-linux-x64.tar.gz\",\n            \"hash\": \"4ec2c9e8ed5e8ddaa52ed291c263412b754691ae2b95362ddc6fa75cfe087dbe59c7e4f65f21b0f096bc93967d04f4ea612a0c42c8a124ef4583d0de8daac01c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-osx-x64.tar.gz\",\n            \"hash\": \"79b48ab04f28e173d561bfe0ffd8d1099ae98c6a3a927c68a774a98b123c660cdcd68ea654c3baf3c87e1109a6e48a9fe54d9bcbed17655673789e8bc5c35225\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-win-x64.exe\",\n            \"hash\": \"9b1d72c312b773ca4d7ae5193f2d52123d784186e1bbbe62050887418425201cec440cc0cbf0e7cf398f5bfdb1266eef98270b232d8853cffd20f6bf15274eab\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-win-x64.zip\",\n            \"hash\": \"47ca5820673f38c4ba6760ea87495dc016d832028b4eba3dc087dce3be6c6bd9dd21293eb564870e349e72dd4572cfce442daaec9785ebfec8a3d1cde9b26744\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-win-x86.exe\",\n            \"hash\": \"50c6d8c4e6ab321c613056a7f84bef8f6f6877470b488a8ecac6466c2d99e200a66d07f78109828bf884fb1ab1c924181d8d0d1ad58e3f04bb58b3e7d025b814\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-win-x86.zip\",\n            \"hash\": \"2552ededd8e11ca1d16066351d91abe93ad85f23e9e79e8b855574df160964dabad537356c0e034ca03ad351799610b63a032e32ab0bc65d07ae7104b5c1ce2e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.deb\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-x64.deb\",\n            \"hash\": \"8928f0056c579984e63ae13ee980441f34a8d050dbd4ccaa0968ddf56816b74e2ba001df2582746970eeab4d7850522015355642aa0d8b4901f46ccd50d76238\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-x64.rpm\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-runtime-5.0.0-preview.1.20124.5-x64.rpm\",\n            \"hash\": \"c69518e3dceefc79db961359f5c284e271e22a0a9f348f5de5ee7a72dbbe6001d81d4558671d595d473421e9a6c10dee42a3ce72fa836b708b8864e08c44438f\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.deb\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-targeting-pack-5.0.0-preview.1.20124.5.deb\",\n            \"hash\": \"4c901f7162b9ffb4dd8ab40f3be346c1001f5cbcaff692a23d0bcdb30aa5fbf8803973ee37be6526291d9d54a2e2c76aaaeb7f3a893c03f80c9ef59835e1c6d1\"\n          },\n          {\n            \"name\": \"aspnetcore-targeting-pack.rpm\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/aspnetcore-targeting-pack-5.0.0-preview.1.20124.5.rpm\",\n            \"hash\": \"f9dad74b74f0dc824554db41ff195d12f7a611be11b873fde9b8d80155ec5108c5d98a8473d7e963cf90ebfa2be5889ba704a716bad3ab29303b5c1f8abd6398\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/5.0.0-preview.1.20124.5/dotnet-hosting-5.0.0-preview.1.20124.5-win.exe\",\n            \"hash\": \"e3bb2502552ed73ff48d7b2cd58c59029321c1b49fe93b43eb37ab7fa90f4cf8a91c01af67e3a46c7991db8d5c0cebab1e6cbeb95e49e0f6f49b5bf2846d7535\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"5.0.0-preview.1.20127.5\",\n        \"version-display\": \"5.0.0-preview.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.1.20127.5/windowsdesktop-runtime-5.0.0-preview.1.20127.5-win-x64.exe\",\n            \"hash\": \"15de7de22fa6c19c06053a8a88fdde52c6fb10fc7e0bb2703f30c42406a28feaa56de9b11fc295269eb4297c0239c9b558640e9963fa891d803a2072baa64387\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/5.0.0-preview.1.20127.5/windowsdesktop-runtime-5.0.0-preview.1.20127.5-win-x86.exe\",\n            \"hash\": \"dfb97c3c85b35ae00b95ad6a60bfdffb9244ec807012d55f0b5bd7696c3600acc006be653ee2045fcf1f368ff4cce26761e504d7cdcf85d94863aa48ce77f4e7\"\n          }\n        ]\n      },\n      \"symbols\": {\n        \"version\": \"5.0.0-preview.1.20120.5\",\n        \"files\": []\n      }\n    }\n  ],\n  \"intellisense\": {\n    \"version\": \"5.0.0\",\n    \"version-display\": \"5.0.0\",\n    \"files\": [\n      {\n        \"lang\": \"de\",\n        \"name\": \"dotnet-intellisense-de.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/1b564d34-d4a5-41d7-8c05-7cce04240209/1fe34c510fab8d0519ed864db08d29b6/dotnet-intellisense-5.0-de.zip\",\n        \"hash\": \"1667ca5aee0c23659ee0252079f147f7cdc805c9a6de2f5569c3edf3ea5f5eee5c51aaa11f6dfe9da1506e298f51bb90bac2ed489608a50bde652a7b22854146\"\n      },\n      {\n        \"lang\": \"es\",\n        \"name\": \"dotnet-intellisense-es.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/537b8862-8ab8-4436-a0ac-5f0ae5c5e057/4ff37ab9681636e50df259a3f854abbd/dotnet-intellisense-5.0-es.zip\",\n        \"hash\": \"89ca4e8c185a0ac7f1b4094de305af554342fd871ea6d50ff243ee1ac223368991954bff7800798ae5a184ec89cc9799fd31bc6fb275d1901317d3eaa1ab2706\"\n      },\n      {\n        \"lang\": \"fr\",\n        \"name\": \"dotnet-intellisense-fr.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/81313591-3cc0-4656-bea4-9b94635c1fad/f2d2ec3cc994db0ba6d79ce8bb04daf2/dotnet-intellisense-5.0-fr.zip\",\n        \"hash\": \"152ee5d4b7ccf24ecd47f25b3fc1e0adc69f2793e3bdccc2142ee7b91d0a4fe6bbee89de4abace6f9d8430a07f778008d0e5acc8eb626e3c70a09930691988fe\"\n      },\n      {\n        \"lang\": \"it\",\n        \"name\": \"dotnet-intellisense-it.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/d7b17452-50b0-47b4-b267-38fad379ac9f/735377318efc6e9872758a0cfe3b3de4/dotnet-intellisense-5.0-it.zip\",\n        \"hash\": \"49ad015460281b18b432e74184a70b287dff6a0c9e6394c58f7f52130bdfd8a7ba1e335484fc8d2b2917d4ff21b299342439756c721fd10e058f2a34c06bef3a\"\n      },\n      {\n        \"lang\": \"ja\",\n        \"name\": \"dotnet-intellisense-ja.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/ce8844a5-3756-4a30-bbc4-6145c7ca1641/65f2a0e2895b11bfab278bb56b10db19/dotnet-intellisense-5.0-ja.zip\",\n        \"hash\": \"5150fcd633c83cb9be5d76ad81159b885ed0bf8a225d2b0b54ed556c6ae68c8d715c3fd592c9e334a01acc7889fbfd3a1119c8caff5d2074483c75506c06f572\"\n      },\n      {\n        \"lang\": \"ko\",\n        \"name\": \"dotnet-intellisense-ko.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/be274342-9aa3-4a48-a25e-d18c775647dc/ba605d02aa521fc040ea92e7526c95f6/dotnet-intellisense-5.0-ko.zip\",\n        \"hash\": \"8f2ac1f126ab62aa20902353beed5cb8162a46f3a9e343f5bbfd7d31072f09f8c069a53ebca627c4ff7a44ecfa1a2a817ac74642d5b3a6b51dd35da73d3e9f3f\"\n      },\n      {\n        \"lang\": \"pt-br\",\n        \"name\": \"dotnet-intellisense-pt-br.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/82150755-fe54-4f16-8ac3-08863a36a435/199031d5ba13352c819820f5d4870055/dotnet-intellisense-5.0-pt-br.zip\",\n        \"hash\": \"f80266fcd1101713dccb4efab0c7113e701157c20b65036697f80c7292009a0d56b385e0df10c41334b5137f3f957598de220029311c01f1c687e924c58f74c6\"\n      },\n      {\n        \"lang\": \"ru\",\n        \"name\": \"dotnet-intellisense-ru.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/73168f84-ea81-443f-be83-84e56eaf4116/732d5441e0ece404c503803e16c38ae1/dotnet-intellisense-5.0-ru.zip\",\n        \"hash\": \"f61e620c735da379312b799c4de004c282a4693bcc8c7a0d8cd85f7718a7b59f2fcd534840b4e9fb7a4d627da49f0f0aeeeeec8cbab07db62cc1fe1dad675ef5\"\n      },\n      {\n        \"lang\": \"zh-hans\",\n        \"name\": \"dotnet-intellisense-zh-hans.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/42239244-de7e-4018-b6b4-f7e4c15ddc82/2856eacff59637019ff16b017504f8e8/dotnet-intellisense-5.0-zh-hans.zip\",\n        \"hash\": \"a9d2659aab2fd6b11207546c1c296dc1edb9df525aeb44578b7e3f78e6fa994b858340c135fac8c147f3ce2c43b3543ec2146d15d4452de1ec65bc89508f8889\"\n      },\n      {\n        \"lang\": \"zh-hant\",\n        \"name\": \"dotnet-intellisense-zh-hant.zip\",\n        \"rid\": \"\",\n        \"url\": \"https://download.visualstudio.microsoft.com/download/pr/c96c3958-a360-40b0-85a1-9f4a349afaca/781241cc39c988e6d27345eadab7aad2/dotnet-intellisense-5.0-zh-hant.zip\",\n        \"hash\": \"4d7b1b2d04828d4c5abc5228c7e1f630bdad8283f5d7a615203663316288fc40e978679ed5cec280c7e3daea72caa6cfd2f1f6f6421b0603225506b58e41afbf\"\n      }\n    ]\n  }\n}"
  },
  {
    "path": "JexusManager/Resources/6.0-release.json",
    "content": "{\n  \"channel-version\": \"6.0\",\n  \"latest-release\": \"6.0.36\",\n  \"latest-release-date\": \"2024-11-12\",\n  \"latest-runtime\": \"6.0.36\",\n  \"latest-sdk\": \"6.0.428\",\n  \"support-phase\": \"eol\",\n  \"release-type\": \"lts\",\n  \"eol-date\": \"2024-11-12\",\n  \"lifecycle-policy\": \"https://dotnet.microsoft.com/platform/support/policy/\",\n  \"releases\": [\n    {\n      \"release-date\": \"2024-11-12\",\n      \"release-version\": \"6.0.36\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.36/6.0.36.md\",\n      \"runtime\": {\n        \"version\": \"6.0.36\",\n        \"version-display\": \"6.0.36\",\n        \"vs-version\": \"17.6.21, 17.8.16, 17.10.9, 17.11.6\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-linux-arm.tar.gz\",\n            \"hash\": \"f3f9199a97db81d3e3ed249e0e9b8f17afb785e8b9ebad00016576382d3d0f2029a31eaf760be2509fde796a42efeb727b156488a42f48cc08013f87479cacfd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-linux-arm64.tar.gz\",\n            \"hash\": \"aa9a35f181204199ac6c44863c4773f8967b25adce218e23ce2822b40b26c38edc1e4e2ff323dabb81ae049bc187f14d209ef1365e68970fd6c32af21f0a1d44\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-linux-musl-arm.tar.gz\",\n            \"hash\": \"3dd539816405ec2d818f611a7cb98fe4069960e8ac4664ccca04ff8b2e0679387b0a3f2cc5045bef95657626ac1045bedc4e502da304ee54678afbbe83dcc3b3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0830715511ab602242487c5fae0dc7a5b75e0c9d7705e624181ec13cc4726a06d7935df952aeddda0dc2c46db95ab14af9d8229a2302b1e6d2fd7e892b42267b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-linux-musl-x64.tar.gz\",\n            \"hash\": \"56c2161c52901706fd769d2c9168cff5959576bd1a72d89f7c27858f467f59970624ea9a0559368462bc178e7c9ef7d86d0fda08c7dbdb72dd3e9084280823eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-linux-x64.tar.gz\",\n            \"hash\": \"afb6018fcabec468ccd7ae2f1131d8c9de7f4de7645b8f0c223efbbdbfdc515fb0642a399ebfe372c02044416c4cae463c9c802cd156b9da4181efff0e33ee94\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-osx-arm64.pkg\",\n            \"hash\": \"67f20090ab71d1b7fd85f984228028d80516439c626746ec8610427875fda9683c8fedf342eb0a5c3d42d015d202ddad21671339d8454509a15b1f176f40efbc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-osx-arm64.tar.gz\",\n            \"hash\": \"d13fa060270c376307c7086da52cff71a02f8550a3a21812e25127308970c99a32d3c4834e342f23365869600c0b51fce03236906e13fe76456fc78964c531d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-osx-x64.pkg\",\n            \"hash\": \"39f6a9351aa3e083e5594dbe5c538b496d061a80bb9c9d7baa52964943e0cf156003cc10d36d18b209a4c88ca45ab8a4121412400782daae8949e7bd33fec63d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-osx-x64.tar.gz\",\n            \"hash\": \"8121a98ac7bc936074c2eb82aa45dae1ba8745c8808870ffb400302a267df71bfaf394e5c6273ad6c7a2ec408740ab369a03ac80aff2d49621ae131f7490ad50\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-win-arm64.exe\",\n            \"hash\": \"c30e4655a4548d2e27fa09711e085828775aa4fdcab0ba1b71923430342c49b54d91fe929d07ff15f777f86b7697d03bd666674f6745673d6b53aa2bb49d1228\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-win-arm64.zip\",\n            \"hash\": \"a8e19612f4fb7166459c7d44a9014281504e1de6ccd6e4d54d1ad1c4caff66ede0c0299d9cc500b847a9ecf063c583c205d661c9ceed98aa18a29f554fd19424\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-win-x64.exe\",\n            \"hash\": \"a8e493587d741dfc5ab3aeb548e8abae1bc180dfa28cc0aa4ddaf159bdd990644a97d5e987a17e25def1a41947938b0fabcfe35cf9d81df29b2619b54ec3a86c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-win-x64.zip\",\n            \"hash\": \"935db5c6cee19f2c016e67168bfae7b491044735de76c673abb3b125dd325fd5e779d7efe12ba80178d46689ae70a25e558a3fa846417d44c5f4ca256e7f4bf2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-win-x86.exe\",\n            \"hash\": \"53b3ad92bdb61478b3c96d85c6c54edfdb472da33c44f9d173ee309bbb92c67fd089c2cd10249c9562118876d033e0d55794eb98ef3641c1532bb5a42926a4a8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.36/dotnet-runtime-6.0.36-win-x86.zip\",\n            \"hash\": \"1d7ecca39d4d14c27b067358c433ebf90dde716e5c4bdc244861dc7268b23f172d61bf910a4e16b46e4d629f23774b8311ba8d5a45085d995da4ef25b74c75ea\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.428\",\n        \"version-display\": \"6.0.428\",\n        \"runtime-version\": \"6.0.36\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-arm.tar.gz\",\n            \"hash\": \"c751881dd27ef098428e616b99a9c16e8bf82526484f76987dac1efcb5177534749c8f943f6d9daacc3a91bb086c9cb9c8d535c9881c0be3dc19c647065968fe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-arm64.tar.gz\",\n            \"hash\": \"cb8454865ecb99ce557bd0a5741d3dc84657a45ea00f9b2a0f0593e94e4e661e898a5690df90cf0175bf5982973c19985a168998aaa975b7ac7a3bef2ecd05d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-musl-arm.tar.gz\",\n            \"hash\": \"ec82839acf12d26c68f65dfafc9465068b23fef509d3203e7d490e7701a21fdde1ab65bc98272b539d14074b3a20668ad72ad52148921f61c1c22e7f20685319\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-musl-arm64.tar.gz\",\n            \"hash\": \"56ae5480b10886649aac4bb9ef1ee4a5701638483f366b7d4f43108838dd9df8e0199232196dae1dd500c7be3e175ce6de2641a1d2e078de2d106ccb44342c27\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-musl-x64.tar.gz\",\n            \"hash\": \"f57123d1465ccb0a1533b51d0995c513abeb0ffc15788bff8af4144e0dd30a2659db41bd2af4328ad637588156e2e649a0518247eefdf8942403939466561786\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-x64.tar.gz\",\n            \"hash\": \"04395f991ab50e4755ce1ae53e23592a7420b71b82160883bae3194dd1dfd5dcaed78743e4e0b4dd51ea43c49ec84b5643630707b3854f1471265dc98490d2f9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-osx-arm64.pkg\",\n            \"hash\": \"012a237ce9339631130b694568e2cb700d71e78d8bab2a0013e3479b73e3033e65dca49957c58b16435250916c48c2fa8997e2fa809ccdac9cd6f1ece06e4879\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-osx-arm64.tar.gz\",\n            \"hash\": \"b60e74b56efc5bdb05be9c954bca6fddbc6baa79213b120fd803c75252c54cf4a6f45255b532c18ceae8c4c1c2a60d2702309156f9ab1436bd71f68947c37215\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-osx-x64.pkg\",\n            \"hash\": \"bd75f35e93f65394f5a6605dca84e99d6612e3d39d2833806d6e6bbb43a0835dc28b3277c52d7d4fd7b794e196da4f67bc2ca48046cbbf64e79b2c939958f16d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-osx-x64.tar.gz\",\n            \"hash\": \"ffd6d342cc700cad4fe8fd6a29896d55f8bd7f687f5c2ef9ae68449c3c1cee4897d2318505075bab2a92538e0db8605df13559923d861d9123ba59c5fb0e5bd2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-arm64.exe\",\n            \"hash\": \"cbeea2c4406dddadf0cfcf71b08400d18ad7f732f7de9d0c3830eb1963dd844a25c9d1b143879e03ccb43ad79c560ef3978276381c8a098cc8530fbe7e8c7fbc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-arm64.zip\",\n            \"hash\": \"9f3a83a30e22ec49b85aaff4b34ac7708613a92f9fb8b2d9872f701472ace5f83578064f5557b474c6aaa719d692070f69a681586eabd9ae46645dc9ea2db79f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-x64.exe\",\n            \"hash\": \"a6706b5c03187922e92fa9307b155255139546d081bf1623faff496035eb707440f13c21798aae06fe8fcfeadcfa046c8606dd452db92e5ed48e2005eb421842\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-x64.zip\",\n            \"hash\": \"c027cb47b264a13e529f8c7f3ba33ac91152b56749c8681fede1d6cd48723ae1e5f04a43bac1302ee81e35a5383f3e169654e5bb7c1d331dc11cce5a95052e32\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-x86.exe\",\n            \"hash\": \"873919c467377229cffc856a6ad14dde80bcc3d05546f7c8843e61f72e9b208fb88e26ec4591cbf9166c181608864dce685b445355ed14e573e0cba42ced8c7d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-x86.zip\",\n            \"hash\": \"281884175c983463d4c5d41e7ae548a4e0a2344fc219368a3c017ed74c8bccb81a0eb72ec8565d228ded30f39951b437e7c52979a59125e1d6f78f25bce0f5f0\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.428\",\n          \"version-display\": \"6.0.428\",\n          \"runtime-version\": \"6.0.36\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-arm.tar.gz\",\n              \"hash\": \"c751881dd27ef098428e616b99a9c16e8bf82526484f76987dac1efcb5177534749c8f943f6d9daacc3a91bb086c9cb9c8d535c9881c0be3dc19c647065968fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-arm64.tar.gz\",\n              \"hash\": \"cb8454865ecb99ce557bd0a5741d3dc84657a45ea00f9b2a0f0593e94e4e661e898a5690df90cf0175bf5982973c19985a168998aaa975b7ac7a3bef2ecd05d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-musl-arm.tar.gz\",\n              \"hash\": \"ec82839acf12d26c68f65dfafc9465068b23fef509d3203e7d490e7701a21fdde1ab65bc98272b539d14074b3a20668ad72ad52148921f61c1c22e7f20685319\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-musl-arm64.tar.gz\",\n              \"hash\": \"56ae5480b10886649aac4bb9ef1ee4a5701638483f366b7d4f43108838dd9df8e0199232196dae1dd500c7be3e175ce6de2641a1d2e078de2d106ccb44342c27\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-musl-x64.tar.gz\",\n              \"hash\": \"f57123d1465ccb0a1533b51d0995c513abeb0ffc15788bff8af4144e0dd30a2659db41bd2af4328ad637588156e2e649a0518247eefdf8942403939466561786\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-linux-x64.tar.gz\",\n              \"hash\": \"04395f991ab50e4755ce1ae53e23592a7420b71b82160883bae3194dd1dfd5dcaed78743e4e0b4dd51ea43c49ec84b5643630707b3854f1471265dc98490d2f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-osx-arm64.pkg\",\n              \"hash\": \"012a237ce9339631130b694568e2cb700d71e78d8bab2a0013e3479b73e3033e65dca49957c58b16435250916c48c2fa8997e2fa809ccdac9cd6f1ece06e4879\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-osx-arm64.tar.gz\",\n              \"hash\": \"b60e74b56efc5bdb05be9c954bca6fddbc6baa79213b120fd803c75252c54cf4a6f45255b532c18ceae8c4c1c2a60d2702309156f9ab1436bd71f68947c37215\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-osx-x64.pkg\",\n              \"hash\": \"bd75f35e93f65394f5a6605dca84e99d6612e3d39d2833806d6e6bbb43a0835dc28b3277c52d7d4fd7b794e196da4f67bc2ca48046cbbf64e79b2c939958f16d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-osx-x64.tar.gz\",\n              \"hash\": \"ffd6d342cc700cad4fe8fd6a29896d55f8bd7f687f5c2ef9ae68449c3c1cee4897d2318505075bab2a92538e0db8605df13559923d861d9123ba59c5fb0e5bd2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-arm64.exe\",\n              \"hash\": \"cbeea2c4406dddadf0cfcf71b08400d18ad7f732f7de9d0c3830eb1963dd844a25c9d1b143879e03ccb43ad79c560ef3978276381c8a098cc8530fbe7e8c7fbc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-arm64.zip\",\n              \"hash\": \"9f3a83a30e22ec49b85aaff4b34ac7708613a92f9fb8b2d9872f701472ace5f83578064f5557b474c6aaa719d692070f69a681586eabd9ae46645dc9ea2db79f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-x64.exe\",\n              \"hash\": \"a6706b5c03187922e92fa9307b155255139546d081bf1623faff496035eb707440f13c21798aae06fe8fcfeadcfa046c8606dd452db92e5ed48e2005eb421842\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-x64.zip\",\n              \"hash\": \"c027cb47b264a13e529f8c7f3ba33ac91152b56749c8681fede1d6cd48723ae1e5f04a43bac1302ee81e35a5383f3e169654e5bb7c1d331dc11cce5a95052e32\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-x86.exe\",\n              \"hash\": \"873919c467377229cffc856a6ad14dde80bcc3d05546f7c8843e61f72e9b208fb88e26ec4591cbf9166c181608864dce685b445355ed14e573e0cba42ced8c7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.428/dotnet-sdk-6.0.428-win-x86.zip\",\n              \"hash\": \"281884175c983463d4c5d41e7ae548a4e0a2344fc219368a3c017ed74c8bccb81a0eb72ec8565d228ded30f39951b437e7c52979a59125e1d6f78f25bce0f5f0\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.136\",\n          \"version-display\": \"6.0.136\",\n          \"runtime-version\": \"6.0.36\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-linux-arm.tar.gz\",\n              \"hash\": \"f4e5fe2abd475c22ed484c59480eb60d7a82666f9b71a4ca35abb0824db637901aaf62a7deff50e669d9e60f800b827396c5b1bbab29b209455914396c07a647\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-linux-arm64.tar.gz\",\n              \"hash\": \"516824d8272ade670fcc2dd0ee33154a00738b5eeab2de1532ee3e0529f670a6e5b30a55423ae75f02bd4aab9a75264bddecf735be0305d3b7e7fb6697ec8f17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-linux-musl-arm.tar.gz\",\n              \"hash\": \"edba61b2f0a2b28946a6e389139b168091db9220aa7681310fb937241f60220e13743e8d69b1ee63b85504b12154bd33fc2bac857e16c3ba9e7ae23a0d336b3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-linux-musl-arm64.tar.gz\",\n              \"hash\": \"2ccb4e58f9dfa0a09dce1687a60ae4911cf8c864abfc7d63cdc113bd228a253f9545d699e8709d1403ff28ce7cf8db0935e4796b05b0aa80eef6ae43d38b8537\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-linux-musl-x64.tar.gz\",\n              \"hash\": \"a93ba846501707808c6b8ea51aa763faf82cc215325aa310aa05d084caebd2c40f74048b384624a73988ba418bf72a71b57883c2a05a0a087a112d2c26b4266d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-linux-x64.tar.gz\",\n              \"hash\": \"bf9d5a4a8868f6806e7c4a2b13d081fc9c0a1475b52751ca211bc85faa2003fbf63e658e1158911ff1fe25fe3aab691e5a2181b14da919c9114ffdcb9b3c90be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-osx-arm64.pkg\",\n              \"hash\": \"c8f7e0fc66ed6d8099d7ab3ec6ca958c0cfa2f85508c688232ed8cdbdbc96e52e5f4de8b3e63acff5692427a32f9a67df17fc2ccc528d60e784173a51fad2643\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-osx-arm64.tar.gz\",\n              \"hash\": \"5831dd13195d805b300e5b35bdd8a925d5f53f112522ad418cc8b0753a650626927315321ccd90247df52582612271257698c14e52f26d1b3216688730c01704\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-osx-x64.pkg\",\n              \"hash\": \"fe5086f4093639fcab3377c883ade21d54b5b898b42fe23472c09fdf33d36aa12cbc094ac20168ef0cacffe6d34cc8487846e101aa8f05028b5f26c155c24451\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-osx-x64.tar.gz\",\n              \"hash\": \"a0fc78867c7af7e3b7ecd1d37a858a2df96327ef005ac786537a19403fb01251ab11102319670b19e76b3636a3fd08e5ea01339643d06a044e1752d13ef2cadb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-win-arm64.exe\",\n              \"hash\": \"0d29e9fb680b5a1b6e428e0f015ab3ed40a90a0f8b5868a9b45610e645c8f70a5c79f905632969e44250c519a7d9836f174684f90f9673eff44a56f1981b5c7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-win-arm64.zip\",\n              \"hash\": \"c7f20a5a4c5fc2cad358ee02cb46ce81a19266d7a97dd3ecc5f2f75063c37c747591854afedde61df418c51bc0670fa17fe7d0506b0384f910b4806afed6c00c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-win-x64.exe\",\n              \"hash\": \"a8ae2bfd30a3a661c2cdd9a968a41f91b035792638834e12214e9a1f2877a2dad05db48caaf019e29fd7c5ce8a81b4134dbd4e8693c3576d12083c92594b0bd9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-win-x64.zip\",\n              \"hash\": \"75db535b45a079731759c0c85ff997e299fa979350a444ca3da3b908663940ea7c20d6989f5d68cdf935243a007cd82ae08d7c0c7487456a85d1cd80d7abdbbb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-win-x86.exe\",\n              \"hash\": \"f64c09b2dd2e8e035d4a456168f7debdaabd45ea45c7e325aadf05dcf1decad94f88fb5c1be238aceb499782b2f7fb0de777030cb6b5b00a85f4b4ea95cb4bc1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.136/dotnet-sdk-6.0.136-win-x86.zip\",\n              \"hash\": \"2dc9d6502e07d1dad9b7046c6351e6638c34343c6c3f90d4927f7afa6cdfe934b1c4198dc283f072b7fbf97700a0aebc0a28958c342cddd1589f59acf365d197\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.36\",\n        \"version-display\": \"6.0.36\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.24290.36\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-linux-arm.tar.gz\",\n            \"hash\": \"5186c654fbd649af0760bfb3be29328df280e04f2128c53157e6c550d06b31970a508ac25cc038c9e1b129dc2a3c002599739c8fadd381cb888f6abbd188ce5c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-linux-arm64.tar.gz\",\n            \"hash\": \"2a6a2dde7ba3aeee9145686ee32f1901a7aa6238ae8395ea3bad51770e227069272be83959b711d238210c377b66661e3cf039965f019b58cd44c08a982404a2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-linux-musl-arm.tar.gz\",\n            \"hash\": \"0f772735acac7258c2af4a67c881d5afac2f841f9ab691a06ba1e34abd81d5831d09fe8886e025f7d1fbe84a1e93415fb8e35511c4bb988dd94cb823c18d0078\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cf3dbc687acd27220560baf52d52dd42f4773ddd642487ae84e7a298ac30d9640af86cd0c5ee28ecd0364b35892194dbdfd1df302451367d7472c3bd00202f26\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-linux-musl-x64.tar.gz\",\n            \"hash\": \"18d33df408b7e21fcbda8e1c6d67e745a374062d195467a826032da679784fb30b55fdad2de75497dd0e917b213d788ceb3f1b3481276e26e103f991c7553a93\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-linux-x64.tar.gz\",\n            \"hash\": \"0e3d1dcc715bffbcb8ab8cb4fd72accbeed79ac40b7fd517961797a168f4301505044d2c1494a49b0e68103940bd6c178c8ae7bacf75f4b40ce82cc85624f6bd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-osx-arm64.tar.gz\",\n            \"hash\": \"c3b569f600a02fb354c851675d5d3fd26d3f8759fe9a9f457f29b8316c5ae4fb47484f354b9a15f3508c9561cfdf36dbdf8af99144e3103a2d9d58581b7e024a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-osx-x64.tar.gz\",\n            \"hash\": \"8a3b73b75c5ba03ee025921639827805b95b6e5e5c920c544f96769bc04e36f4b5c4807b40fec0c1d6d1a8291afaf6f5e1ae5e8da891d5ad91f8ee4841ef8f83\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-win-arm64.zip\",\n            \"hash\": \"4ad722f12b05e4f3e577057186d8b43cb40737ae2246590bec55434ca42704a46822bbb4a57a7246ad634a9cf2882e99dd6f909d1e7cbd0c6bbcc3bfcebfae19\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-win-x64.exe\",\n            \"hash\": \"339731656db435c1f1aa375f90537f7509a8129f9501fbdba16e85a120ea1c5cb0b193fff171dcb4d9744d5b6a5a0eea1d2128a28cbbf637a68e4c3422ffc53e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-win-x64.zip\",\n            \"hash\": \"9e43b70aaf6a706894682aa5e0d151d6b60e95dc695aefc68cdbfb850dc77acdf5bb64381c4acc03e98240412087093ce26e94e6f1c38ff00670e31c1fbed09a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-win-x86.exe\",\n            \"hash\": \"dbd5029cdaa86ca5cf65e25a0e7ef1746150f90651ccfdccef1a8bf7e415524950273abd073c33c1865586e8b172852972a5d3b25cffaea5c2facd3a5e05512f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/aspnetcore-runtime-6.0.36-win-x86.zip\",\n            \"hash\": \"954785c36d38f1994fc96feda3488996ac6cd874319a7d414772964e12028313a03b04350d7de053f524d3a52bfc4146c18c6c8ab48067c407e76613dc7a58da\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.36/dotnet-hosting-6.0.36-win.exe\",\n            \"hash\": \"f2d20a6dc4fd1d923d06838ad118ea5c2aecefdee0004af00db78f2e82a1046d0d8a7872c84d3f5e5a3802ab7d087148eb879c2ebe3fc3a81ca0f1c0f5d64690\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.36\",\n        \"version-display\": \"6.0.36\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.36/windowsdesktop-runtime-6.0.36-win-arm64.exe\",\n            \"hash\": \"0d5fd97a305960851ff8527a7db65fadae661411d7a9b6e8dd972180cffce7bfa1b842db2baf1b8affd1843d317a2d640ab465a5876177505a34c75aa4631d66\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.36/windowsdesktop-runtime-6.0.36-win-arm64.zip\",\n            \"hash\": \"113707f617e1eaa594f02f71f14fecddf1a3127fb4766ce9454638fb5131836ace07305cce031d11b31c01af0394546379268521912863b8e0cafbd41d6089b2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.36/windowsdesktop-runtime-6.0.36-win-x64.exe\",\n            \"hash\": \"86fa63997e7e0dc6f3bf609e00880388dcf8d985c8f6417d07ebbbb1ecc957bf90214c8ff93f559a0e762b5626ba8c56c581f4d506aa4de7555f9792c2da254d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.36/windowsdesktop-runtime-6.0.36-win-x64.zip\",\n            \"hash\": \"cee88fef07643dceb3d34ea71b64eeae85b8e39e7042bc4d35bc3a1f1df29373681dc48e31c01c9f593ec412699f6762b6fc5817433283c89df35a27ce8885bf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.36/windowsdesktop-runtime-6.0.36-win-x86.exe\",\n            \"hash\": \"a18351aabfe1590e58af79e57ac2414254ba80cb7a1fef19545a6b8418575c735fc1dc164c3c7fed426c4698f099991487fa4f443bab93afd41d1563845fbcf4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.36/windowsdesktop-runtime-6.0.36-win-x86.zip\",\n            \"hash\": \"c137de6e19760936986fee027696c824e904b4094d5fc882a22593819c8d08715597d89004dd97042b8e89e4e49eb1052c5d79cb0002f0f5fd057f198686d0c9\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-10-08\",\n      \"release-version\": \"6.0.35\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-43483\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43483\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-43485\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43485\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-43484\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43484\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.35/6.0.35.md\",\n      \"runtime\": {\n        \"version\": \"6.0.35\",\n        \"version-display\": \"6.0.35\",\n        \"vs-version\": \"17.6.20, 17.8.15, 17.10.8, 17.11.5\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-linux-arm.tar.gz\",\n            \"hash\": \"5f41c00f8e60ce2ad07bef75a3ead8986b99b706a8c4bb2cb0fa8cadfa2fabdae3c17501aa9c77f634aad02a28c8c8869235907baf0b9d723d650213952ce924\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-linux-arm64.tar.gz\",\n            \"hash\": \"945e24f9c2d677e65fddaa06cafe8d518ee599ce98883b60fd9d734320fa2f3e1ccbfb46ea26ee925e319fb5430c2e18d64269fdae96030169c4b6d3d811ea77\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-linux-musl-arm.tar.gz\",\n            \"hash\": \"c9af975cecddf45d855fc0e7535764a24b28d64af43a66ac25bffd6be9699a7e5db20f56acdede99e96e46e9f62135e51af136e722559d0c77fbeb87d26deac6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c01365b0e5cc72dfc7bf3c1d512edc74d0ef959cb7a6137d67e9ed9d8a26d8744258ea3005df009842cbaf46844c913626e3dcba15830118acd95e14d3c2e670\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-linux-musl-x64.tar.gz\",\n            \"hash\": \"b2a3fa2656cb255235d886da74753c78c3d6d52b62e10d69053b9c08b66265867d6f369b4a6e133abff21d2b2912722e757438e2e9dbad10b9db6a55545cd415\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-linux-x64.tar.gz\",\n            \"hash\": \"d8d10d600fb664336949576f8ec0534dbffd573f754b9e741f20812221fafcac5f509a7e1ab44e9e63fc31a7b5dbcb19e4ec1930ffd29312212dc7454977090e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-osx-arm64.pkg\",\n            \"hash\": \"51e25b186195a1ca5f822ac4eb1e4cee82c2f0029c349f7c1f712b6edfca64a18eba588241eb3e973673f7eaedd2eacb81a0f3c78ae459f9bfca1f506f90d325\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-osx-arm64.tar.gz\",\n            \"hash\": \"4880cb3c69674452831c130e02a4a12826534d605b1159c432ed3ad04e618e0da076037484c3c34bd8c7391c17305eb76b6957cda14600aef9e72bd47da5bd66\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-osx-x64.pkg\",\n            \"hash\": \"65d54f55d1079f87aa76f48e44ad44256afb83d2b2a03608cf3b38dfd2c9c6ffdf010b676cdf7bf0ed8d9a2e2440749dbd1224d7fe3ef6baba3b42ef09a83f5b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-osx-x64.tar.gz\",\n            \"hash\": \"7334dbf6e09bead6ef2703dde69e6a5a8d9bf43d3ca2d6fcaf393f5c4f4ae5aad7c803d0c4547d01d6f08060f8666fcf2c1fbd5439579d58d9287086c0dc1f4a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-win-arm64.exe\",\n            \"hash\": \"59e2e186ebbb57fcf82ba5de9e5d07e39557d75a056adc2858f3248c30a08678643674ca9237fbe3203efad17f5125427aae8e81096be96579b8c9049754168d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-win-arm64.zip\",\n            \"hash\": \"e66b99d24405b9eaead4bd4825a79e4fa9992a071787cf6efab22f9f7edb0ba98ad665c2b913ca862e5921890230d301f7fe3bcfd0e8873638221dfd61040e89\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-win-x64.exe\",\n            \"hash\": \"0c3291253123cf3f887b5d964b77f886e2414a2cadc4d0e9051e88cc4c737777c0a0a879532d80d26f49f14e1e5f255bab11dc834c379da62611d484c4bdf416\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-win-x64.zip\",\n            \"hash\": \"4a0396bd3c201e9015a161de3d4e4e685151eb1b75ad57ec65c9289369b90ad55c7e9704aa553c32e2d5734b642a096a9b9a6797757dde6974ab5ead2bba5b89\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-win-x86.exe\",\n            \"hash\": \"ee6200ca5a07ca51d35088c79f0b16c9437e51ee2363bca991efaadb794c946b061e2506e689a5aa62bd43f6946fcf0af8da45d5c650656079228be63b99ea73\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.35/dotnet-runtime-6.0.35-win-x86.zip\",\n            \"hash\": \"7edfbde12c19d1087bac7ea44ae94672c6aa564ca2ce27757ea12e2678dffebf7178c5c702788cb490e44edd3e31782f84f23c6534d0d3380fc601679d96842a\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.427\",\n        \"version-display\": \"6.0.427\",\n        \"runtime-version\": \"6.0.35\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-arm.tar.gz\",\n            \"hash\": \"4c76654d8d2ae98c73b4df86002df07c549a411cf7fa13f11e811501ba47e5ee04282eac75a6fcdacf3af3a33f87f5ab3a8c1f2cb4de6d25e091397979d0f2ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-arm64.tar.gz\",\n            \"hash\": \"9129961b54ad77dac2b4de973875f7acd1e8d2833673a51923706620e0c5b7b8c5b057c8d395532ad9da46b1dcb5ab8fd07a4f552bd57256d5a0c21070ad5771\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-musl-arm.tar.gz\",\n            \"hash\": \"4297c488fb0cdf72c4fb3bad057413c173a07066bf651fc8c4075b86c2231612e694947b7ecbec0d43cd6921b83df206ba528d387a36ddd6c670b38afd9395d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-musl-arm64.tar.gz\",\n            \"hash\": \"670e8c949439aa6d75348d2fa61018c6621d821ceb5f8473ff9b81bc1b21dc293d0b16fa8044c6e5729aadc04912654d1ae0a4a84af4dca0891571311e9d4cf0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-musl-x64.tar.gz\",\n            \"hash\": \"38e63bc2e94b5dfbaa5ffcc31e96eaaf9889a86ae03b2bba72ed73434d79857d56566345c65a20c7a5e62f444b8f13a3ed6a3e7e568a3c34c837cfcecd1ca68f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-x64.tar.gz\",\n            \"hash\": \"a9cd1e5ccc3c5d847aca2ef21dd145f61c6b18c4e75a3c2fc9aed592c6066d511b8b658c54c2cd851938fe5aba2386e5f6f51005f6406b420110c0ec408a8401\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-osx-arm64.pkg\",\n            \"hash\": \"5fbe2e94337d3f8f3fd03e7be369c932bc4fb2b18435bbbe0c1f335508b9a3943fee031f1854b29589a815409befb83ccea36b2de52a24cc728fc1d8d1225cd6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-osx-arm64.tar.gz\",\n            \"hash\": \"8ad7314e1bb816fb4198842931220e9ec8c8885b43596ec890af3c2177894101353afebab63f2b870162304c6a2a20d1a45ceef419f72d904d598a2e4e8d9ce9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-osx-x64.pkg\",\n            \"hash\": \"77e36f86f3b344d0ab29856ce39f0f25096dac25ce437ac12d33187a60907b78c131d3f4fa611493606122882a5231ac09edacbe51dea137eaa4810f9968e406\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-osx-x64.tar.gz\",\n            \"hash\": \"1d5660dd1ece6dc697e467981b2f69c6b339ab93c976d482efa9b42f6b5c83f12c192e5b420f73a9a8e46fbbed935f8364217aa410bede0f032ac992b2d3ea7c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-arm64.exe\",\n            \"hash\": \"0df71747d23b41e326737ad0482fe09ce548b110d5c6254b31dec8d992cb492a3e5d87d0f3b0a06cd53bb431e8968eadf77c1153ea0ffb45c8f6f88455afbbdc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-arm64.zip\",\n            \"hash\": \"cb421e68bde7e06a9f1e3db3c15906b2acf1255aeb520f0654c95cb149cfa97e5c7b93cf5381a746279efc62c45a4fc956a9c4b277f95e774e6b80d5a6224cac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-x64.exe\",\n            \"hash\": \"4b4e1b16fe0e15bf09cb1a524d6ec1582fabc81b9e16990bc6c55fab615e8fc9732dea0b123f73fc6dc87b49ae0488309f1b7a788ffa95bae56513635b122a40\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-x64.zip\",\n            \"hash\": \"e92c21f13bf34d8f5892b966950d1f2fe08839e23817a7f8268af36361161b3604a79edab493f7f44033bad2829f4ca57f6afc8e8141aa468c367efe3ba44b38\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-x86.exe\",\n            \"hash\": \"378db35fbe23d8786a0718a0795410d51521ef798c9b0718828995c7472703788173c83392f6189697067e41a0d5812a3357f9bfd49f43a191df994dcc541be7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-x86.zip\",\n            \"hash\": \"794e624cc80c7f5c387e3f2ba00d022f5f32adc7adabc2e2136db1faa737054fae49fbfc45b68bf1c52c5e4b63755ae8aca9cd4f9f1796d551f3bcfa6ef4c4b8\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.427\",\n          \"version-display\": \"6.0.427\",\n          \"runtime-version\": \"6.0.35\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-arm.tar.gz\",\n              \"hash\": \"4c76654d8d2ae98c73b4df86002df07c549a411cf7fa13f11e811501ba47e5ee04282eac75a6fcdacf3af3a33f87f5ab3a8c1f2cb4de6d25e091397979d0f2ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-arm64.tar.gz\",\n              \"hash\": \"9129961b54ad77dac2b4de973875f7acd1e8d2833673a51923706620e0c5b7b8c5b057c8d395532ad9da46b1dcb5ab8fd07a4f552bd57256d5a0c21070ad5771\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-musl-arm.tar.gz\",\n              \"hash\": \"4297c488fb0cdf72c4fb3bad057413c173a07066bf651fc8c4075b86c2231612e694947b7ecbec0d43cd6921b83df206ba528d387a36ddd6c670b38afd9395d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-musl-arm64.tar.gz\",\n              \"hash\": \"670e8c949439aa6d75348d2fa61018c6621d821ceb5f8473ff9b81bc1b21dc293d0b16fa8044c6e5729aadc04912654d1ae0a4a84af4dca0891571311e9d4cf0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-musl-x64.tar.gz\",\n              \"hash\": \"38e63bc2e94b5dfbaa5ffcc31e96eaaf9889a86ae03b2bba72ed73434d79857d56566345c65a20c7a5e62f444b8f13a3ed6a3e7e568a3c34c837cfcecd1ca68f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-linux-x64.tar.gz\",\n              \"hash\": \"a9cd1e5ccc3c5d847aca2ef21dd145f61c6b18c4e75a3c2fc9aed592c6066d511b8b658c54c2cd851938fe5aba2386e5f6f51005f6406b420110c0ec408a8401\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-osx-arm64.pkg\",\n              \"hash\": \"5fbe2e94337d3f8f3fd03e7be369c932bc4fb2b18435bbbe0c1f335508b9a3943fee031f1854b29589a815409befb83ccea36b2de52a24cc728fc1d8d1225cd6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-osx-arm64.tar.gz\",\n              \"hash\": \"8ad7314e1bb816fb4198842931220e9ec8c8885b43596ec890af3c2177894101353afebab63f2b870162304c6a2a20d1a45ceef419f72d904d598a2e4e8d9ce9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-osx-x64.pkg\",\n              \"hash\": \"77e36f86f3b344d0ab29856ce39f0f25096dac25ce437ac12d33187a60907b78c131d3f4fa611493606122882a5231ac09edacbe51dea137eaa4810f9968e406\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-osx-x64.tar.gz\",\n              \"hash\": \"1d5660dd1ece6dc697e467981b2f69c6b339ab93c976d482efa9b42f6b5c83f12c192e5b420f73a9a8e46fbbed935f8364217aa410bede0f032ac992b2d3ea7c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-arm64.exe\",\n              \"hash\": \"0df71747d23b41e326737ad0482fe09ce548b110d5c6254b31dec8d992cb492a3e5d87d0f3b0a06cd53bb431e8968eadf77c1153ea0ffb45c8f6f88455afbbdc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-arm64.zip\",\n              \"hash\": \"cb421e68bde7e06a9f1e3db3c15906b2acf1255aeb520f0654c95cb149cfa97e5c7b93cf5381a746279efc62c45a4fc956a9c4b277f95e774e6b80d5a6224cac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-x64.exe\",\n              \"hash\": \"4b4e1b16fe0e15bf09cb1a524d6ec1582fabc81b9e16990bc6c55fab615e8fc9732dea0b123f73fc6dc87b49ae0488309f1b7a788ffa95bae56513635b122a40\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-x64.zip\",\n              \"hash\": \"e92c21f13bf34d8f5892b966950d1f2fe08839e23817a7f8268af36361161b3604a79edab493f7f44033bad2829f4ca57f6afc8e8141aa468c367efe3ba44b38\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-x86.exe\",\n              \"hash\": \"378db35fbe23d8786a0718a0795410d51521ef798c9b0718828995c7472703788173c83392f6189697067e41a0d5812a3357f9bfd49f43a191df994dcc541be7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.427/dotnet-sdk-6.0.427-win-x86.zip\",\n              \"hash\": \"794e624cc80c7f5c387e3f2ba00d022f5f32adc7adabc2e2136db1faa737054fae49fbfc45b68bf1c52c5e4b63755ae8aca9cd4f9f1796d551f3bcfa6ef4c4b8\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.135\",\n          \"version-display\": \"6.0.135\",\n          \"runtime-version\": \"6.0.35\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-linux-arm.tar.gz\",\n              \"hash\": \"8b9c70b2490161bcb50bd8ce8bf822b3e4e856feb6a55257552cc111a68105bd872641c1048c132805848492e84bc472737cea664706fccb790eebbffc049dde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-linux-arm64.tar.gz\",\n              \"hash\": \"6939ca94a91d6862a7f3eb2155e45720c99eb441c1cd1f2a22ded8351c5fea0981c2ef433b0573c1ed2e43375646666a9af2c8e0a51ac1a6c303dd91e1876761\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-linux-musl-arm.tar.gz\",\n              \"hash\": \"79f1bd78be5b9777b2afdf89f92572d329158dae00faa54f4e7aae471641cce90d431f039a9350da258fcfe3218c5eb6a2f2676f3976e51a8ba74281cb9ab8e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-linux-musl-arm64.tar.gz\",\n              \"hash\": \"dc9c3b959fd66424fb9c37557ff65db07edd5ec816bcd0524cd60f8a879025ae1b40ecb775792da377adcfc2230e5d20f72e68946414f318bb33901d5e628969\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-linux-musl-x64.tar.gz\",\n              \"hash\": \"e60f244b2c26d40bab9b7af4e5105c42d337f76f1d33371093db2c7ec0118ba665d95a09cd94a5de324f22ca445806b20fe10b30684406387323ad0fa222a057\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-linux-x64.tar.gz\",\n              \"hash\": \"f990fa0636385a3a4ea6b0e1ccaa45613fef442d3610015236fc2474895f2c2446559f2fb942c901171bb847cd825fcc575fb82d120cc5d1cf175d5c0ae01cff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-osx-arm64.pkg\",\n              \"hash\": \"82cab99287c02c4084122bd382de95514dac4c74273c7dd189d5177abd8e9aab42c8bb3ca603e012fd5ef9d72515cbbb7e63229f73e82c4ccb17bb3841b5f0bb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-osx-arm64.tar.gz\",\n              \"hash\": \"4766ce954fcc09b0c04e1b3e19e559dc9cddc0553c80f2a16a77fb506a2ab610040eed390c9153f3eea76271bb5bafcd696ca1bc7af2ec9cd9204f46ef669c4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-osx-x64.pkg\",\n              \"hash\": \"11626f88d5a6d75d4930cbb3c566786a276228c0155b5f4adf07e9550d8faa9500b9df4b7d111e340b9d744491eb9b8992939c2f083985b66fa4daaa07af356b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-osx-x64.tar.gz\",\n              \"hash\": \"8f22e6da90ecdaa8b05eee443fe6089fe89682da3ac4e8d3ee2ee2c9fe60a2b5f165aa744ca12a0a71b71eca125d53dafc648be82d1aec4ae33a1443ce9663fa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-win-arm64.exe\",\n              \"hash\": \"83da375376f1b39e0c214e4baea3bef81614c49557df2ca15b1c089d87c0432a8473e3433a9f65dbfa5055ab7a01edf43638a3fe52efc9129edc042ba7f2ebf6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-win-arm64.zip\",\n              \"hash\": \"aef38d38a9586c11144c9ab9fe6367e4355912989ee6ae1ce2e0e38ebf0cd7041271b81b70f83f3b5961d2517ac35f010b054f4b480f138692f2e630aa581771\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-win-x64.exe\",\n              \"hash\": \"4bd4e75de8a3788b7a890028ae276232c99cc9a2921db38e627aa0948ac354938a0edb8752335fe1765dbee4f4ecd22a3e74f83fe980176a0acf383f7573e1db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-win-x64.zip\",\n              \"hash\": \"1ca1ad41d545af36c355c07e1fcb477fc728e225be661364d5a3fb6aa54d5a2e30bb5c0256b42b7c3409e29ac3dec4d683f8676dfdcb6c9f0bf0433a7216fd31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-win-x86.exe\",\n              \"hash\": \"ef90d00495794d30c8b36352e46d053afa7e915dbe05fe02320a44b8a610bcdc5b43164e554c6467443e0304d868d97ce5f5bf8126fa7ff0e5a672ce5ad775f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.135/dotnet-sdk-6.0.135-win-x86.zip\",\n              \"hash\": \"19f51c1b762aaeefe208a7cd612e739062a6c474a5b7fd1a352f56b8eb2be9e339d02613597e2cf20d539021f9ca64af118750e0d2641f63ed771ea584090f3c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.35\",\n        \"version-display\": \"6.0.35\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.24256.35\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-linux-arm.tar.gz\",\n            \"hash\": \"2d152301b9bfc5f9cedabc6c9890187575e90c2362bec709fbbde8a423da6f533acf778f34d55fe174906eaef2dc09da570b5a9d25dd7a8a54cbe4e73f745f43\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-linux-arm64.tar.gz\",\n            \"hash\": \"c949fd1b9efe9231e4c6e006ef3c4a5aedc1d4ce64ca9bc1cd52f1ce9884ea23837b49f1e6a7ab4b6df0c6f60a32573e2aefde4e14f205812d004b7b9ebe0f76\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-linux-musl-arm.tar.gz\",\n            \"hash\": \"45ba3c29aa95e4810a710907bd93da7c3e3a09c7972d7b19857aa47ae4fd5fad19bdac2c5e037f9abd1996a27d0e39acffc3278f2e7782474140070f355d888a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4e99263938e9de1fa508fcdf0a59e7f61a234f8bd60a4947d043c5ac5bc3108eb46254bcb7148ca0a0391f5e9cee74db1ea617f576d7e37af22ba108e9433e1a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-linux-musl-x64.tar.gz\",\n            \"hash\": \"50210ced90d17ea8370fbbcade3fbfb9be92690faea77d5516dc8ade4eee83408b2d37f812cca020087441d2f3146507086792cff17f7413308eb12fa4abd66d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-linux-x64.tar.gz\",\n            \"hash\": \"d86da938338a6d97250436d49340e8f114c05b46512ca562aadca6f3e77403d36468d3f34ed5f2d935c070f9e14aedf7299f5a03d2964dbd6576b9a2d3e776e8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-osx-arm64.tar.gz\",\n            \"hash\": \"54487321b4710d822dd56df5069d6afcdd1f98767277dc89e1b3035ab1bad5028b45793e9b8f9ff57e32d6332b5bfff3b686c65086ec4743a02761b4295793b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-osx-x64.tar.gz\",\n            \"hash\": \"cc80ba59a8da4112389e842cf3db2f3aa2636544759de4d270fbb05c700ec91da062bad34984989c56e5c1a79c2ff60cb8347e8e67a2f14a92a859b6a52547c5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-win-arm64.zip\",\n            \"hash\": \"302d46255465d209fbde5226aefa3af1bed868769d01687c8eeabf19959598eabe942dddfb27a950cad379b970cf362724ae28d156d4a1a61a75dd0b68ac7c08\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-win-x64.exe\",\n            \"hash\": \"ae7c939d9bab86ac710f415c79e0c4411ee7c380183304594f99fecd46c29e93405b0ec145a2818bf0c344227177b426338a58a4d261c99842312b04a29bcfdd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-win-x64.zip\",\n            \"hash\": \"83678ac457a8b604c6b622478860f926ba05649847d2a2fdab65ce8b04a7939857372788e77d23514bb967c8bd058b50bb0e1981772ace8e7efbd829bd94314e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-win-x86.exe\",\n            \"hash\": \"40897ed897d5df5abd63cf9ef84337d86c02eea4bc466fe81973c3ce281600d5c139cb27107eadda489f6deac0d79d7cce568aada792f66df4f05b8b4e0dd374\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/aspnetcore-runtime-6.0.35-win-x86.zip\",\n            \"hash\": \"b8ef1f07055a79253b4faeca0ebe33b65863ecc7ad7e243a0b14adb264f33266e2f6a862d5351945acecf70cb9dc9e9ba7578fb4fd8e52cb29cc7ce993d7355e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.35/dotnet-hosting-6.0.35-win.exe\",\n            \"hash\": \"50a59503069a515bbc934bebe0caa08cd35cc94e815f3cdbf1a4e718b8084fb0c2ef796cb593337861f0793d10504a476dd21b4ed9634ca1ca7482f0125aa55d\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.35\",\n        \"version-display\": \"6.0.35\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.35/windowsdesktop-runtime-6.0.35-win-arm64.exe\",\n            \"hash\": \"c9a40b603c669a621e92ef58ecc9a2c48f26bb9c6efa4d9e7f76a1743b2b957a79828dd8ce71a4647caa7444d07b71d102e7eb61b6439a17215fa136d52bbe3d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.35/windowsdesktop-runtime-6.0.35-win-arm64.zip\",\n            \"hash\": \"29c7d614d66a13887542dadde6d24afac104e1308a988ce0a8f1ea875e486ca43b93ace43ebcfbe5ad64e9e311c03cf890a17c823d9b9ce940c40a16bf44b6d2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.35/windowsdesktop-runtime-6.0.35-win-x64.exe\",\n            \"hash\": \"2e264fc6e3b1619922c1ab81071e64f5608bbe74be5546b18ffaed24ed0198f64d5334fad9a250889b9f619da0a4d8d589596c1541f9dc965eba738a9e5f9232\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.35/windowsdesktop-runtime-6.0.35-win-x64.zip\",\n            \"hash\": \"ac7e158f26d4069fbd8ef59c21aac7a10bca9abd8af5b1281fae91a77218c92c1a66af01a956e980a2a4a7915d7416c0f9332c3ba03db834eb2bc390b6ec0be1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.35/windowsdesktop-runtime-6.0.35-win-x86.exe\",\n            \"hash\": \"2bc9b299eec071c6220ad11a6e9578dd68bea87cefaef625f1f3f5b51b9fdac5941ec66ab4094228c60d75edfe9225fcb0a940a251d944bd50ce237767611d3e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.35/windowsdesktop-runtime-6.0.35-win-x86.zip\",\n            \"hash\": \"8c086e8fafd6f0865afa46cf4e434271a785ac44aca17e8158df3686403854a0b8731433c0baa6c371315b28da785da17bd317ba7fb43a4d5119192cf025f80b\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-08-13\",\n      \"release-version\": \"6.0.33\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.33/6.0.33.md\",\n      \"runtime\": {\n        \"version\": \"6.0.33\",\n        \"version-display\": \"6.0.33\",\n        \"vs-version\": \"17.6.18, 17.8.13, 17.10.6\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-linux-arm.tar.gz\",\n            \"hash\": \"c3349b1c98bf8d0b79d0d3de5c12792fbdd4aef1c04b6d0c115d5aa651cfd2e8642521170b312db0cb6facd057958b387c60eb6ae5b828e2250300efbd6f3195\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-linux-arm64.tar.gz\",\n            \"hash\": \"c700d4ae3e361fa2a390a8fcf294a2277931b0ea60bd4a2f0ec2bb982bb6c618ba002e5955c3ee96807207b256e10289cf1cfa372029b758aefa6bf1268d45fb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-linux-musl-arm.tar.gz\",\n            \"hash\": \"a9594a489f8634af01e7c60acab5f7ee0ac544b98ce73ee671359becd6f6b29f4d9e64dfe3166822c0506157731ec44fa6db02a8be1b17a279af61a6679cfd38\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e5707970b2a852b80b1fd77a3883e50dec925d91eb89012c166e4a45e917064c24040a6e444b054767033cb9b9e8314b6b5117ffada6d248ab7f90c8e40fe555\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-linux-musl-x64.tar.gz\",\n            \"hash\": \"3bfe4f9dde02bdaf35db07271cf56873b508c3229318bbe7d478eed855417ed3941d9d9a8ede2fd1cc5ce5f7b73c4e5ae4666d2cc47fe2ae09d5f8625c46e982\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-linux-x64.tar.gz\",\n            \"hash\": \"0892015544d8903999f8e0fadab6b4b91eb180e495fa5e36c1a755b1d42e134858b7bdbfd60d1880650d9c528d07e31b9ccfc73e650e5d890a955902a89139cf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-osx-arm64.pkg\",\n            \"hash\": \"88ad3c974053a66a2607a42a31dc399dab6334e1474588c3cd7cc0225e31df07facc7303024ad168569eec0a899c993be417b465386d9f12ba37f102eb63ea5e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-osx-arm64.tar.gz\",\n            \"hash\": \"95d0e646f688e6f46545625dfae46d8325c7aee4661d3f0e59044acced9c6192ff51524355696e8f868ebd112e9a036d01c951f7249d863c300d07c1a0913d1a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-osx-x64.pkg\",\n            \"hash\": \"72b7353c0658c4e537be6cf6ce59542e0ad89cb2d3eb42cfa75cb2ecc1610f4689b42a567610b696719b6a88d4fc523ab509d767ec294fb5dc1d917e4c28c00e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-osx-x64.tar.gz\",\n            \"hash\": \"a0ad81d4bb361d91edc7b42142828fb5ac5b75376e6ad0137f7f28bba5c0d0b68c67af708bc85c15ebb7aac5f98df20bd83a56144a1bf9ac5aeaf5caf84e4128\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-win-arm64.exe\",\n            \"hash\": \"1e5536c0daa32e7c1c3a8cf7cdf723d2a58968ddb11213b0ac10599e5d5feb031bef4ffd814e9608074a3e46ded16ef37762fd4904c458ce875ed3163cc5c11b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-win-arm64.zip\",\n            \"hash\": \"bc118c3fb1943bff53f12b3c757b8a44b293061063aef55fa72a30c5b7c0cd65d0874c6266259e0fdb44be25dcca67a06f973e6c34c87c46c470e2c939e16fd3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-win-x64.exe\",\n            \"hash\": \"302216d6ec3c433abf79bb97feb869f3316eb82510d6411280f5444ee469e9856ef136fd4cee7b468d4b30590893ff92bec6aeb8a41dcd6d16d42df5bd46be5e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-win-x64.zip\",\n            \"hash\": \"6cbad445d7b06ecbd031b43b1b44a04636676908f2e14af6a399ca2c2b163cb4add3f6e70b7b1089dc8d1a89ff482875391b3868ad2703359eb62a3d87b8953c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-win-x86.exe\",\n            \"hash\": \"6570145679c619caf99b55d31d71c04850724217503a271c056dd132b48d616790e484021e1bc85dc7b50c3e794eaf92956973f32ecea7ed47dd9b421c8c75ae\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.33/dotnet-runtime-6.0.33-win-x86.zip\",\n            \"hash\": \"a0dd2d4dbcfd8d1bf8659209a2541d7efd3a5223dab904e1d9a28d29b452dee104be2716f2e385e2e4cfee4b03ff4a03abfa03f17f34d608b72a25ded0a902e5\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.425\",\n        \"version-display\": \"6.0.425\",\n        \"runtime-version\": \"6.0.33\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-arm.tar.gz\",\n            \"hash\": \"e0cbb3a3874fec76026d5ce11acdae07a720eb02b500c87882aaeba48e6ec290d62373e51b53367ecaaa1bd4bd770f2ca1aaaec3a8499bdd1c114894daaa4daf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-arm64.tar.gz\",\n            \"hash\": \"c15f95664fd0570d5b0cb94c7af6bba5fe830470004f0e958e49d53764714cbf8ddd620b38d487b60a27dbfd467a955856aab3df9c958cde17c942079fdaa55a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-musl-arm.tar.gz\",\n            \"hash\": \"c59ea0ef6c80f80907aea223dc7a9ad69431b1e67234dee4fee0f9109ee7ce8bd58af6b102ad117889f4e2cc8ef7cceef9a6ec80b10578c6ea4b84412f2b1e06\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d58aace5b021fc730a0da2233e85e3ae473256a7de9334b8932cc2e0d050543c1eb1b16dcd3475f777cdf59e42971c85d27def497fe5cf06a6b6046ce8d23ec4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-musl-x64.tar.gz\",\n            \"hash\": \"cd9572358102b8214874ff353bbe826ac9ba0f0d26d49493f312a8a3bc7c0faba2fc82bd5dfb740289d3242dcdf78b341996d38623723c691be469375a72df9e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-x64.tar.gz\",\n            \"hash\": \"a04b75af7c5850238a8d99a6f60b37753467db615831bb3833c14aec86faa2d6ee9b8643885798924a01e28acff44ac9ed39c89f7cbe53c5cb8753c802e85039\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-osx-arm64.pkg\",\n            \"hash\": \"58aceae66c5d3a143b580cb79698656699c059fd0553d962713275fbc5ed52d10e4cff5bd44a246b6f228a0bb08e22b4509b133660236ed4deab282e6c8aa2aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-osx-arm64.tar.gz\",\n            \"hash\": \"7383b188c8500ab8625cd34f69f7ec5a4d9ff4ca715f95ee020f2bd082d5023697b021ca4b3b1e6a0782fae2ff89586e541e454fedacdf1c49b42f6e47d12011\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-osx-x64.pkg\",\n            \"hash\": \"81c60f9be1ab1013bb08ec7b43e9f604eb01c8667f179a22d11059da0846ca792cabec1c768005c353f4b4597b53e0b45cd954092f855d6d41abe3d758fde9a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-osx-x64.tar.gz\",\n            \"hash\": \"5757c661d82408680a6e45efbca260bb9da145bd83f8275280e9ba756a2827ce35c7ae77cb248e9ee6c6cf46730c6e50152b98c0a082c0de764f5e522dfb6ca2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-arm64.exe\",\n            \"hash\": \"f81915abcd08f08b45e654c9797726a19508a58e5db6283fa9c3e438755328835e50ddf613c53dd2f28b65e1b565b5a534e1f17881ba45f6df0a98e913740f16\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-arm64.zip\",\n            \"hash\": \"7b82c2f8d8b25ea02672bfc86178198798203d81176fcbadf655dd213d1e4c2f07b63756e50592b759bef637871edf842122170630d7b6eb80d1e62d1d7f090b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-x64.exe\",\n            \"hash\": \"9d220b643e0925fe1fdbcafd60aef2af57ac0a9aa0b4cb57f63de61df8f04ace0eee342395b0c3090823391ed9bae510a0212cccbd432db16371271b81d892e3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-x64.zip\",\n            \"hash\": \"8bd8e396bf451e90114fc8c039eae21b96ffbe5a2d04238d58712c754f4fce42039140680dfaa121b2c12174ecf192309c6eecb4525f3282ad18b756e30157a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-x86.exe\",\n            \"hash\": \"ef030d9414545fb7053602a9aa902cb6dd4cb220599fc82e7a0eba779fd687df835e226188b3c33788339956f73bfc94e454aec2ee0e9da3967275e0a41ab8cc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-x86.zip\",\n            \"hash\": \"a9cc5e30e6b75ca9ee6f283e996fb58b7ed11ef072aad62c341ab9e32f29ed1c0f518f8cfc1be69fde815ce1f51998c1d0c2e8be3c549392a54ca940a4e33929\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.425\",\n          \"version-display\": \"6.0.425\",\n          \"runtime-version\": \"6.0.33\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-arm.tar.gz\",\n              \"hash\": \"e0cbb3a3874fec76026d5ce11acdae07a720eb02b500c87882aaeba48e6ec290d62373e51b53367ecaaa1bd4bd770f2ca1aaaec3a8499bdd1c114894daaa4daf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-arm64.tar.gz\",\n              \"hash\": \"c15f95664fd0570d5b0cb94c7af6bba5fe830470004f0e958e49d53764714cbf8ddd620b38d487b60a27dbfd467a955856aab3df9c958cde17c942079fdaa55a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-musl-arm.tar.gz\",\n              \"hash\": \"c59ea0ef6c80f80907aea223dc7a9ad69431b1e67234dee4fee0f9109ee7ce8bd58af6b102ad117889f4e2cc8ef7cceef9a6ec80b10578c6ea4b84412f2b1e06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d58aace5b021fc730a0da2233e85e3ae473256a7de9334b8932cc2e0d050543c1eb1b16dcd3475f777cdf59e42971c85d27def497fe5cf06a6b6046ce8d23ec4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-musl-x64.tar.gz\",\n              \"hash\": \"cd9572358102b8214874ff353bbe826ac9ba0f0d26d49493f312a8a3bc7c0faba2fc82bd5dfb740289d3242dcdf78b341996d38623723c691be469375a72df9e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-linux-x64.tar.gz\",\n              \"hash\": \"a04b75af7c5850238a8d99a6f60b37753467db615831bb3833c14aec86faa2d6ee9b8643885798924a01e28acff44ac9ed39c89f7cbe53c5cb8753c802e85039\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-osx-arm64.pkg\",\n              \"hash\": \"58aceae66c5d3a143b580cb79698656699c059fd0553d962713275fbc5ed52d10e4cff5bd44a246b6f228a0bb08e22b4509b133660236ed4deab282e6c8aa2aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-osx-arm64.tar.gz\",\n              \"hash\": \"7383b188c8500ab8625cd34f69f7ec5a4d9ff4ca715f95ee020f2bd082d5023697b021ca4b3b1e6a0782fae2ff89586e541e454fedacdf1c49b42f6e47d12011\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-osx-x64.pkg\",\n              \"hash\": \"81c60f9be1ab1013bb08ec7b43e9f604eb01c8667f179a22d11059da0846ca792cabec1c768005c353f4b4597b53e0b45cd954092f855d6d41abe3d758fde9a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-osx-x64.tar.gz\",\n              \"hash\": \"5757c661d82408680a6e45efbca260bb9da145bd83f8275280e9ba756a2827ce35c7ae77cb248e9ee6c6cf46730c6e50152b98c0a082c0de764f5e522dfb6ca2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-arm64.exe\",\n              \"hash\": \"f81915abcd08f08b45e654c9797726a19508a58e5db6283fa9c3e438755328835e50ddf613c53dd2f28b65e1b565b5a534e1f17881ba45f6df0a98e913740f16\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-arm64.zip\",\n              \"hash\": \"7b82c2f8d8b25ea02672bfc86178198798203d81176fcbadf655dd213d1e4c2f07b63756e50592b759bef637871edf842122170630d7b6eb80d1e62d1d7f090b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-x64.exe\",\n              \"hash\": \"9d220b643e0925fe1fdbcafd60aef2af57ac0a9aa0b4cb57f63de61df8f04ace0eee342395b0c3090823391ed9bae510a0212cccbd432db16371271b81d892e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-x64.zip\",\n              \"hash\": \"8bd8e396bf451e90114fc8c039eae21b96ffbe5a2d04238d58712c754f4fce42039140680dfaa121b2c12174ecf192309c6eecb4525f3282ad18b756e30157a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-x86.exe\",\n              \"hash\": \"ef030d9414545fb7053602a9aa902cb6dd4cb220599fc82e7a0eba779fd687df835e226188b3c33788339956f73bfc94e454aec2ee0e9da3967275e0a41ab8cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.425/dotnet-sdk-6.0.425-win-x86.zip\",\n              \"hash\": \"a9cc5e30e6b75ca9ee6f283e996fb58b7ed11ef072aad62c341ab9e32f29ed1c0f518f8cfc1be69fde815ce1f51998c1d0c2e8be3c549392a54ca940a4e33929\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.133\",\n          \"version-display\": \"6.0.133\",\n          \"runtime-version\": \"6.0.33\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-linux-arm.tar.gz\",\n              \"hash\": \"e946b75cd1aabb53399aabfa441082d9cc0f324db371d960792bcf5ab66445a16302f11f91e6ba34c699a6bed645ee4f17cec55d9b7119726f0011000e2c6e37\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-linux-arm64.tar.gz\",\n              \"hash\": \"6820d62ced6d9770ebd3667a64a74e2249471ee5920e4ce4101f21e55950f8d44ebe4ffbf20bc66260fd5d1edc5e534a6f0b70522fc41a5e48e75b0bb00e6ea1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-linux-musl-arm.tar.gz\",\n              \"hash\": \"c6669b229dec64672195afd7a18eaac30a513a86a70006eab570edaf8a967e8529bed310f4e91076fc4cec7f0b50b4b26bb1a9d61709aaf3ea487edd32e17640\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4e4cf91e1ce9ac057638b2a323637528c89866da8f88f6c70ffc88d54b6b7281781ad17e62cdf03f5f68447ae4ecee48b15fb97c908bc9a55c38c75bf075c24e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-linux-musl-x64.tar.gz\",\n              \"hash\": \"f52babf2f80867535937468df76e71ef7db650a586133309a10b4d8a04ca2053cdf8e7a426f6ff34a3e673437f73cd5169b1a1c376bc09935fca34a8cf212337\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-linux-x64.tar.gz\",\n              \"hash\": \"7b4fe0095bc6d3ea43fc3b32f2fc2ccc8fec83b0c50ff74b9e9a019ed40721f46c60d7b3ac08841a5f89d0802d8c347b14a445032a00f3d9a8661558b9c74794\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-osx-arm64.pkg\",\n              \"hash\": \"dcf85fd31beac4e5b718943afdb571c2a0160510a429af3776e7a3f0ba6bbe2909265a2d5bdaa16e32d4c922c9a531401c1d25937f8b94d579dde3018c2186e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-osx-arm64.tar.gz\",\n              \"hash\": \"c0193152166cefbe60a7cbdb4af7e2df365c9e67a0ce0ff5cc1aa06a46d4ffd6cccda3bf026a47116f02e4c52875fdd704aa380817dbc3eab653d30f4f5ffe20\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-osx-x64.pkg\",\n              \"hash\": \"043089ee304f53585de2327ea388295e971b0f1e89da003431288d5d8fb231d85a85d7babf262d5009a08ce9b1e070e99b0722e3bedb6070e3f5a063b75c579c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-osx-x64.tar.gz\",\n              \"hash\": \"e142785256b731abd6f7bda79b1422ba6eb9135f61526d6f687be67146253403cbec85d3ee66f49e577e7f296b32f94fa705ccf048292b1c00f981d2ef4fd52e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-win-arm64.exe\",\n              \"hash\": \"59dc6a54ca4b6c15c8877744dea9e79c076f3df95b83db5daa9bcfcfd695b0e60ff4f81ab00277f16820d3bcf3f2b7ddf94c17c45ccedff526636e9607e951d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-win-arm64.zip\",\n              \"hash\": \"2cac18f4134d6713ad9099d5b6a1286957be3da7c5260ebd2a07c65877c1ab3ce847b7d95499ce319b051b3cf05f1ccf37092664d427f227303eba9e8119c8a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-win-x64.exe\",\n              \"hash\": \"56d978dffc96cc9ee9ee0a9faaa6acadb24a527e39a06573434f14db20b17a9747354b930282fc506b6b0eb4cb2506b5ffb98d988cc245ea5c81d304b8370cbc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-win-x64.zip\",\n              \"hash\": \"2fba83e7a710a59e0e89507dfb00c432ad3d24d94af18da4bb50da70a0b488310b49d3911bba30c0609ac8c1cd24e4cb72427ad67a2a7954ed635667eb3c64d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-win-x86.exe\",\n              \"hash\": \"193f67f9ba2db8f7820cfff4f52a4cfcbafbe65f55c09a8b31c0941dbdfc30840899d187cdbf23a4366f8dcbe9f24a61afefa6c71a9d8378a68ecff7b631ebbe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.133/dotnet-sdk-6.0.133-win-x86.zip\",\n              \"hash\": \"1cd028eb65171b7b4b03a80d59784ecfac589a8049308fc6ec8c416ab5d6b264e9756ae5c91c982e8bf24d15506d2d6d081c14a5c02385773ca58543f285d64c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.33\",\n        \"version-display\": \"6.0.33\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.24211.33\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-linux-arm.tar.gz\",\n            \"hash\": \"7fa8cce31c9aa0c83dfd167b7a116c8b4a34d21b1154efc781bc2a38c14d350e78b5b9ee6fb8e3814e64dec6c92e0f2bf5c5cc9af90c73ea38ccb66540604176\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-linux-arm64.tar.gz\",\n            \"hash\": \"7a60a77a306070a3b94db1acfa73938b6880cd079bdac3e5cab174a47af467b9208e9f41d8e12e080831d528151cdaa5b660bea5aa6fe537ec144543c0fffd95\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-linux-musl-arm.tar.gz\",\n            \"hash\": \"574abceb57f26e15f4e2ceb4837661e192c40898684880e078b8ad4cfc8f506e25a50f3cdc7276e17a9556e95e2b92ebc6d41a74a656244180d27341485a9ceb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3da57b3de134db38f17094518d16653356491cf5d67222b2c37d720ec100644decb8fb3ad8dca645134efba7b57bf15aa25fe84b9a12711aa80c7de0c60861b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-linux-musl-x64.tar.gz\",\n            \"hash\": \"f5a43b0bc1c832fd70cdfa4fe09849602760831133a2412f5f7d259496ccd0dc65999ba77a4e8d4b06a7614b851d4797f92d5c7c5c1c26f39642b75edcff13c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-linux-x64.tar.gz\",\n            \"hash\": \"12b34fe1d0a679ff63db4bf002a2988194d9e64d0e107d128c247821dd939a86eced0fe453c0638d3742dac3a32e533792c26299400fb4fd5566b75177e66875\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-osx-arm64.tar.gz\",\n            \"hash\": \"26a2f1d6cb3ef9df5b6abc16e025fc2e9aeda386b5da53428abae67d76ff007bc921aec60cff9675dbb7291db7b75c5a7bcaadb54e8c04de59308b02dde924cc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-osx-x64.tar.gz\",\n            \"hash\": \"f8dcf3d6de7a34d7fb402fd1ddf55bd810cccb95831d12312bc7607c6c7de8a46200c66d7e753250103961ba2e97fa6a85206b49442e1aeab1e290ec69bb55c5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-win-arm64.zip\",\n            \"hash\": \"813cb41c9df7332b5eeb12424bf59c9bd10b629ff302eaccddd2210aa333d5facf3f46b173deddd6223578c50a625009506db5ecd4750b68b0d3aa0e173cceec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-win-x64.exe\",\n            \"hash\": \"f00fb12a849345e454eb4ee5f4eca5daeb3d7d21cce12a3a25b9335b77a4cc91dcfffacf7c2048add63231675369f1e50fef1da0a208727ac4f3d7ddcab89048\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-win-x64.zip\",\n            \"hash\": \"abbcc5bec5e4e17d90dfbf229bad311ef07d90ec4ee095da06881760d5d6639273041930a7dc64897c1bea23b405171441386f33196e38d8940f04597d6e205b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-win-x86.exe\",\n            \"hash\": \"5adc639df95f430ed475f3c12154debf35cb3275f04f0809e8d83a2d7f042759329ed1b4a48b8323fcd7c3aaa0ea6f274cb4c77128d9d1dad6a0de02d05d9f93\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/aspnetcore-runtime-6.0.33-win-x86.zip\",\n            \"hash\": \"85adcc62325686a3426bf8126f622c14c83a569f84c006edb1f9472086356a52190452f32cc5f3c6d06064fee05633db0d4416281d1f9495a9a484010a5bbb3f\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.33/dotnet-hosting-6.0.33-win.exe\",\n            \"hash\": \"b9335c78b05abea33793611fa012e88f030f68a35291b00970f43e4d3e4dba5bb6817b3c149d27cb81ad36af888871a847c7bf4f1898d3035a9a9664a870b322\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.33\",\n        \"version-display\": \"6.0.33\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.33/windowsdesktop-runtime-6.0.33-win-arm64.exe\",\n            \"hash\": \"f673f4641022d34ed3245e57105fd37efbace6ad00eb647e063de9f1f7796c963daea4d8f30c407cc72edd0c520107738f542125a7861d3998a619d5f1bbd92b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.33/windowsdesktop-runtime-6.0.33-win-arm64.zip\",\n            \"hash\": \"5d7e9ae039360cd5d779175d2ef9b89b8378a1b7abeac06b01320771594f3b0699f21852255e1bc7d7620270d0d76a1f88a686d1a7c3d61c229076f3a52cd9a2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.33/windowsdesktop-runtime-6.0.33-win-x64.exe\",\n            \"hash\": \"da106b70df99f89d2353dd9d2ac6edb6e53ce16158c1c949038b76f0cd2661e76599f40c0c67e2007488f2219f97757239cb76e175078f7774f29d1b3b737f51\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.33/windowsdesktop-runtime-6.0.33-win-x64.zip\",\n            \"hash\": \"4882871869227144ae5d2c2d6237f853dd086d3b75ce5bcb63406952f8849742c16f110816ace4b13e632e498e06d9694bbd5fbd4128d923d5cb1d8595937da0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.33/windowsdesktop-runtime-6.0.33-win-x86.exe\",\n            \"hash\": \"c493bb1e668cb6042a074f454a2ccc6738d2f76c60a1e5d322da360d3e32799162ca861bb78eb6ece930b2773f6be31016fddff6206f46c3fdeba6e168f43fcf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.33/windowsdesktop-runtime-6.0.33-win-x86.zip\",\n            \"hash\": \"446eb77cde39667844b542a17fae192404735e535c9795d5b12f717560396029b3afadaddc45f643de86c9fbc11e9e2d6a802830ff616e09308722fe53b9e7f0\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-07-09\",\n      \"release-version\": \"6.0.32\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-38081\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-38081\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-38095\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-38095\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.32/6.0.32.md\",\n      \"runtime\": {\n        \"version\": \"6.0.32\",\n        \"version-display\": \"6.0.32\",\n        \"vs-version\": \"17.4.21, 17.6.17, 17.8.12, 17.10.3\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-linux-arm.tar.gz\",\n            \"hash\": \"f46bbf92bcf442eed0dd943735a86e9e44bf245775d933d2226716be7b05d521fb804f7da83e1b9ebf9a1d03130f891bdf6822c988ca8b0d52c593807b8722e1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-linux-arm64.tar.gz\",\n            \"hash\": \"dd9807d0e8872956602241bdc06e33cc6d7cb5519bf7d7864e1671c8608adab28b539ab910778a5f2543e8cd06c9db64f8def044180f29167ac82bc36ee258e5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-linux-musl-arm.tar.gz\",\n            \"hash\": \"b5a667e875a5f7e247dc4c9a5e2084a4162e20631dcfdfec10359d0235f271b65e95ce4b0b7aa5213a0cb023a84208640e13b6259b5edcb26e0e19b406114e6a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5ed3da55a27f9dacfa6fdb9c555e797edb36613cfcd9f5fc4290da2a82736436b18f448afd15d980ef11a33bf5013cbdaf87e821dc88198b76d723482c7c12f5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-linux-musl-x64.tar.gz\",\n            \"hash\": \"01832b7f6359bdb21130486a1d40098e4bcba0ef93afa0610d25bec3295cfa8e2e930d284b9ca2f2bba30e0c2ddd6bdd15190003a2751ffcef5947c52d8886a5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-linux-x64.tar.gz\",\n            \"hash\": \"9babfe66f4a4261dd454f3220899af0a19532ab93575b581cec838f1c5f130d98b6fb1aaae5ee8e5b2e70deb55b619a0d55347f014ace72cb84b78d61faf0a59\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-osx-arm64.pkg\",\n            \"hash\": \"9371559cfec40a7b10807368bded287da539c774d4193e9df18ecd6a99ba39e8e7e69894b217d6d2cef90416940f33b193a956fcc03c460de38cc4078ff0e8c9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-osx-arm64.tar.gz\",\n            \"hash\": \"cf9ec72bfb89124d12a359725689b5d4539ff6a8235fafada93d71b7e1c9d836592e6edecb2e1242a23298b0489050068322d2b9356b5d2e59f7dc519f2c5cfe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-osx-x64.pkg\",\n            \"hash\": \"eaf98b0b240e2699110261f7d51b5774e989aa70450fe81417296cef17095a865ffa7b27558910b1b1da7ad32e4eba3589d2e9f11572cc5d7ce9a2800a124581\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-osx-x64.tar.gz\",\n            \"hash\": \"d9e29d9b5fefd1b431135c6cf504dc16400920eaa1d7b67ec5b24d1ab672a9d573a6c55750abb116facd2b228ed07a73951b7feee1982d5b24ba3cd025b4e6d5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-win-arm64.exe\",\n            \"hash\": \"c319ba9a569f1ac63338d87160f288a3d92d0150ad5ffc747a790ae05d343eb3f6a04236ee2a8ee7cbe3003f331cc0b4ced5faa4061f3281c3d73daceb7ae744\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-win-arm64.zip\",\n            \"hash\": \"9d2b1b57d71bf05144e5c096cb9bb47f5010e6d258cb87db5450911be11667cd21a75a82d3b4ebb5426a8c3293da6c69091f01157db19c11b96946cf75d8680f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-win-x64.exe\",\n            \"hash\": \"e46fcbf574776ed1859296a18734af102a921e8aeec0069ee94bc8f24d4c69aa28b1b15dcba3754ac1ad3efe099c82bc4653942931eeeb854b2ed0684d52ea85\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-win-x64.zip\",\n            \"hash\": \"94788c0586735d12b99a4853a5ce7f4b93a43db50d0564096adb7af6d6d2ad183393998c5d16ac323e6c8b26eefd4d5f6ad902917d7dcd2afb2db892d997a0f0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-win-x86.exe\",\n            \"hash\": \"49e36e23e1cb8b7e3f04ffd5269aa3a1a672542715295b1a0069a35bdb9baf20248337609742a57380a73a272030ba1dc6e494a8e4724c89866197852bd2e699\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.32/dotnet-runtime-6.0.32-win-x86.zip\",\n            \"hash\": \"53d276338098c5a54e3a3e334c64fa2c9034ce2cd55fde201687cf6bdc692685b64f1f69a79a5e853d48bf0c492d4c63c3ddffb17269e51ab70f0de25b36c6ff\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.424\",\n        \"version-display\": \"6.0.424\",\n        \"runtime-version\": \"6.0.32\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-arm.tar.gz\",\n            \"hash\": \"671c39af0b0fa658b2c55b32923b90122074e0cff3070588134d50625ac0dc52c9abb93e5c872b7c84231128d5ef8aa213133df7fba552bd9aefb8e83f93e778\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-arm64.tar.gz\",\n            \"hash\": \"6a24dcad251016aa82ea11d3c665b250d5f86e7f8a82a6ec0f01d250e9cd671fd0746812757c023f28d4929248d326b2a5dc13ede8d5b5486671ea1452954aed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-musl-arm.tar.gz\",\n            \"hash\": \"24b6ef9e2a92f74ec354fcb05ac44532adad96a2d2551a3f49999eb298b3f8a9fbbbf21780b79f281933b3a8f1a93e1f9c87e1a022209715e3864f4e93d100ba\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-musl-arm64.tar.gz\",\n            \"hash\": \"64fd8d52a46003ae3763a65f9cdef817e753d27d3f6e721fefc90743ffcd5e72d6695097f88f91fd1a3f7c038fc5976ec49dbb0d11a7868b45f8850c2a19cc2e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-musl-x64.tar.gz\",\n            \"hash\": \"352f08327fa8b830ae75f28d0f9cb438c47f64b9af61bbde202dca67f3753489703e9e0ac8001217ce7062e7330ca58b5dae9e921e1923a9c7fa925a3a535336\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-x64.tar.gz\",\n            \"hash\": \"e9823aa2ad261199f8289fde8721931c1e4d47357b4973b8c7d34c12abd440bb932064ac151b0e0d7b3d5b72a5dfe3f20d5dafa19e6f56f1a61ad54b7de5e584\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-osx-arm64.pkg\",\n            \"hash\": \"c4ccbdc43757bcf974aaf6d5e383494b1ffc254259b27cecfc600138e5a7b3a7cecfb44e5b5ddc63a9ab508e7eb03c47f69c1cef4adb0d32e5772a3c6b1678d0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-osx-arm64.tar.gz\",\n            \"hash\": \"8de0b5aa92445a366807e3ba87d7b9de3b7dc035d96f7070f03197a6e6b78881d1dc279a619914140cd9025aa9084b35526d6db2c2db396cc07ebc398cbc6e71\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-osx-x64.pkg\",\n            \"hash\": \"c1ab3dd804d6e19c6508e50feae2a42f2a8c189eadcd3aeb65244b03492640f721e3fe1a524b86605c343ab5f083cb178769d3ceb4b2795de2527cf99da3c418\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-osx-x64.tar.gz\",\n            \"hash\": \"611a226f16d2dc6c5cfdac1911f116d159d65e1e0d4189afd8db8d88faecd92e32244e96c8d3cfa7d094a6d8ba086323b8d1d038bc0efffcd14795d197cf91a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-arm64.exe\",\n            \"hash\": \"698435a90841aeab8f8682f77e3c7b16aa71d2efcb83d3e8851eba964cf4c7163776f95457d697aa4f300274a526c5981c2153c8ce307c5c69d72312acb93ffc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-arm64.zip\",\n            \"hash\": \"812996c005760802764ccecae31153a743fb469fb7d7b4ad7528ae4e5bc1443679ef723ae0363e3541865de39d78e370ffdb22cccdf8e49598628cfb731aff58\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-x64.exe\",\n            \"hash\": \"7fe3cc5b4dae375aa7c1b1e46f8f84bd59dd2c985dcfec3c92f5626e1d42890375d8808ae16dbdf714f204f8ad23e2d49dd7f081590477828af04e6e4801cdc9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-x64.zip\",\n            \"hash\": \"309dcfdede6c723c8a060e2500a6b5622818f15c55352de10f9870fd52975acae20fb0d513723a8ab833df70834dc8dfbe335012bb86638d86bf94f1ce42353c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-x86.exe\",\n            \"hash\": \"9b173820df5472b5a745f5404ddbb43c33edb0cd14e54e04611c67d2b5d01f33c4b27376e7da056d106ee649dfeb1bf0fe3dc4533c4542d997c88217ab1f7084\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-x86.zip\",\n            \"hash\": \"eed1f01bc31f1bbc255a7c8287619259b55ef441640a9df393fafd1176232d8679ab7c7c3c38496b733c6fbcd19bb72c9ca4d362f8084472e4bc3ecfa24c61a3\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.424\",\n          \"version-display\": \"6.0.424\",\n          \"runtime-version\": \"6.0.32\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-arm.tar.gz\",\n              \"hash\": \"671c39af0b0fa658b2c55b32923b90122074e0cff3070588134d50625ac0dc52c9abb93e5c872b7c84231128d5ef8aa213133df7fba552bd9aefb8e83f93e778\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-arm64.tar.gz\",\n              \"hash\": \"6a24dcad251016aa82ea11d3c665b250d5f86e7f8a82a6ec0f01d250e9cd671fd0746812757c023f28d4929248d326b2a5dc13ede8d5b5486671ea1452954aed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-musl-arm.tar.gz\",\n              \"hash\": \"24b6ef9e2a92f74ec354fcb05ac44532adad96a2d2551a3f49999eb298b3f8a9fbbbf21780b79f281933b3a8f1a93e1f9c87e1a022209715e3864f4e93d100ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-musl-arm64.tar.gz\",\n              \"hash\": \"64fd8d52a46003ae3763a65f9cdef817e753d27d3f6e721fefc90743ffcd5e72d6695097f88f91fd1a3f7c038fc5976ec49dbb0d11a7868b45f8850c2a19cc2e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-musl-x64.tar.gz\",\n              \"hash\": \"352f08327fa8b830ae75f28d0f9cb438c47f64b9af61bbde202dca67f3753489703e9e0ac8001217ce7062e7330ca58b5dae9e921e1923a9c7fa925a3a535336\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-linux-x64.tar.gz\",\n              \"hash\": \"e9823aa2ad261199f8289fde8721931c1e4d47357b4973b8c7d34c12abd440bb932064ac151b0e0d7b3d5b72a5dfe3f20d5dafa19e6f56f1a61ad54b7de5e584\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-osx-arm64.pkg\",\n              \"hash\": \"c4ccbdc43757bcf974aaf6d5e383494b1ffc254259b27cecfc600138e5a7b3a7cecfb44e5b5ddc63a9ab508e7eb03c47f69c1cef4adb0d32e5772a3c6b1678d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-osx-arm64.tar.gz\",\n              \"hash\": \"8de0b5aa92445a366807e3ba87d7b9de3b7dc035d96f7070f03197a6e6b78881d1dc279a619914140cd9025aa9084b35526d6db2c2db396cc07ebc398cbc6e71\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-osx-x64.pkg\",\n              \"hash\": \"c1ab3dd804d6e19c6508e50feae2a42f2a8c189eadcd3aeb65244b03492640f721e3fe1a524b86605c343ab5f083cb178769d3ceb4b2795de2527cf99da3c418\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-osx-x64.tar.gz\",\n              \"hash\": \"611a226f16d2dc6c5cfdac1911f116d159d65e1e0d4189afd8db8d88faecd92e32244e96c8d3cfa7d094a6d8ba086323b8d1d038bc0efffcd14795d197cf91a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-arm64.exe\",\n              \"hash\": \"698435a90841aeab8f8682f77e3c7b16aa71d2efcb83d3e8851eba964cf4c7163776f95457d697aa4f300274a526c5981c2153c8ce307c5c69d72312acb93ffc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-arm64.zip\",\n              \"hash\": \"812996c005760802764ccecae31153a743fb469fb7d7b4ad7528ae4e5bc1443679ef723ae0363e3541865de39d78e370ffdb22cccdf8e49598628cfb731aff58\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-x64.exe\",\n              \"hash\": \"7fe3cc5b4dae375aa7c1b1e46f8f84bd59dd2c985dcfec3c92f5626e1d42890375d8808ae16dbdf714f204f8ad23e2d49dd7f081590477828af04e6e4801cdc9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-x64.zip\",\n              \"hash\": \"309dcfdede6c723c8a060e2500a6b5622818f15c55352de10f9870fd52975acae20fb0d513723a8ab833df70834dc8dfbe335012bb86638d86bf94f1ce42353c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-x86.exe\",\n              \"hash\": \"9b173820df5472b5a745f5404ddbb43c33edb0cd14e54e04611c67d2b5d01f33c4b27376e7da056d106ee649dfeb1bf0fe3dc4533c4542d997c88217ab1f7084\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.424/dotnet-sdk-6.0.424-win-x86.zip\",\n              \"hash\": \"eed1f01bc31f1bbc255a7c8287619259b55ef441640a9df393fafd1176232d8679ab7c7c3c38496b733c6fbcd19bb72c9ca4d362f8084472e4bc3ecfa24c61a3\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.132\",\n          \"version-display\": \"6.0.132\",\n          \"runtime-version\": \"6.0.32\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-linux-arm.tar.gz\",\n              \"hash\": \"a486fa55d2618aa9b4c74111592a42278bc4f5a7656b2265c8f69789f2952f742a3b89b46b95787ce3d9f778d65bf877478c726bd13d61e71a9aa93506531100\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-linux-arm64.tar.gz\",\n              \"hash\": \"574e63f1de4620f7f62421acf6c0f1971089b10b08e81125582d81fb23c0fca5c7703b79c0d7627ab743ed8ceb5d2948fdb606a9e8c6cf7628fa27d510d4719d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-linux-musl-arm.tar.gz\",\n              \"hash\": \"70849c27473b2f4daf58a8db4dc694c70c748a285106f002f7aab69a8db45778625be1c475c91933a6cb98e1325ab184bfb41be3cf2bdae1e67bcf0fa0117231\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-linux-musl-arm64.tar.gz\",\n              \"hash\": \"73caad1f5dcd287c095c29789a824df308ecbaaa1313dbaef703280ba2af72cdf2d63cdc3a1f80a5fa8a21407a0d031552c44f10e44ea3b55d3da80b49642c7a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-linux-musl-x64.tar.gz\",\n              \"hash\": \"b216b9338ecd595f9a6f49cc3c33d621df110cffa0cf54f270a102397a78ea0843805994d9c437b07b8e1eb4b790072d9cd7eaec87d48b78593e01f72238a15c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-linux-x64.tar.gz\",\n              \"hash\": \"71e23cb50ee342d23797f0b9d8ad524b42b3be664b20730da7ebb7cb85c0ec5c69efefa3a68907190328a693f6e21bddd7b9e7ca3da2f48434be1a736b3f7ccb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-osx-arm64.pkg\",\n              \"hash\": \"b14de62b79f7d8c4d5928e303709fb3eaaf96b2cc5e13977be6c5d5a3c4a2ea9239f42f775919424dde43b350878dee6f4cd95d99c10b02a641dbeaf5d2182ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-osx-arm64.tar.gz\",\n              \"hash\": \"076f890802a0446b43a6aecad0efad939f100e70ed7b5f4ceeab87b0781598b23d647bd77773ce8d895a1573fe68e05cffbcc0d5368cdf954b0471abcdd2780e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-osx-x64.pkg\",\n              \"hash\": \"c9ba1b85ab9ca7a42937cf880a060ae825572af3fb5fe169e4cf8ec33826e864fc4644f2cf0b2861c4f3b5d1fa37c43db028f61f6e8724b40207c0bd43b0bfbc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-osx-x64.tar.gz\",\n              \"hash\": \"479a45792663144f386ac9ce7f387e2c6d04024dd85de07a83956b4aeff7e91e062937e6e5c341fbc447566284145a491a2faaf6af929cf1940c09ef4966f7bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-win-arm64.exe\",\n              \"hash\": \"cb0131b29031e8fd84c432b3350bad0f899f6b3c7d4ae5ced2b6310c0fd6f77f6c905716d47c8adbed222993cc10891bc5aca0c1ce400bc796e991305263c550\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-win-arm64.zip\",\n              \"hash\": \"de601e4b9b441bfa9d7fcde0a648b2e589736568124675c6586fe071f8c8628d1cdf9554b50e5e75a49cf3fdefc43648c18692d6c5a02924052bf70920cb3ef9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-win-x64.exe\",\n              \"hash\": \"85d0e607a6a74279bd25f863d6c2947f217c804bc0d195cc3c11c0e17c29fcc7178238d73f121efd9611c3d4f63c154c04fca1a7211b97a43a7343bd59f7fcfb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-win-x64.zip\",\n              \"hash\": \"eddd4b74460ea8c53e21745e412a55e6a5319bfc6cec4e86fc98768dab23cff23b60c02cbc18b62a38704cf20554b3321d1d8ef8078bede74d6361d989d703c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-win-x86.exe\",\n              \"hash\": \"a247c2a07332116a0dadf0267faadc6eeb12fdc35aa3991e8018976425948de870bd23fb29723c2525bacbb191c39dbd674ad7982c05425953b9eec1f5030ba3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.132/dotnet-sdk-6.0.132-win-x86.zip\",\n              \"hash\": \"f18acd447c90ad96d32ac9b4541826b17bcfa164b02ddf064beedcd995008df6b0a7177a6bd5c7e3d921fde9287b8e8a45dff3fc7094ef3702da8618df8dd012\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.32\",\n        \"version-display\": \"6.0.32\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.24166.32\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-linux-arm.tar.gz\",\n            \"hash\": \"c145756c875420afd86038d39ed13706e8db4a668041f3cf9ff7412c37ad7e9cf2c20499946098066166fc298fa0a4c63f00ff7ca7b83a100528a27c20497213\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-linux-arm64.tar.gz\",\n            \"hash\": \"7b420354821f30809a6e8278f6e9c0654599d3e3b578b777da0f8e387612c20f28ddc49d5baac09627857297648a53ca847bc1237bc30275db5b661253f67523\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-linux-musl-arm.tar.gz\",\n            \"hash\": \"b475c5880c222ef0c3e1a54bc7099dae7a26c5f21aa40984534502db0d384c72531e414536d12970183e052aa5b8ba289ea32ab011096347bcb9f1275df48172\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d479d7534192a8a936cc751c885c48512453ce51e2879866b26bbf354181f0cf053b8c8258eb76927f204aea6d639d10dfb1c4db80e7b35c592e00ec0b1eb4bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-linux-musl-x64.tar.gz\",\n            \"hash\": \"8faf9f49c86adac4a09defeb4063ddd2cc2da7a3812afd5b9a6cce8d17d7b5496b737bbf213864c89d5654c83c5574fbc9ae117668252ccbb593d4dce53af71b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-linux-x64.tar.gz\",\n            \"hash\": \"1849c0073f12477b94357a1afb1cbd4ad67764263528b66037c19d554df41e681e4b41c0804b106319fe661d0bc3bae9e29e4913c0d0df33861cf6f32ebaac96\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-osx-arm64.tar.gz\",\n            \"hash\": \"63de1906b3217c8e42dc6da3c5d1dd0f02ec7c8c1f988e2b5df1ca4e2e9220d6ff306e5a1d8f2af1bbc7eecd00790799bf847097e9054f96cd460cb22d3e5ce0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-osx-x64.tar.gz\",\n            \"hash\": \"7a91b051b6a48fff6838dc7565ccab11bb16ed0cddb1ce8bdb870d7b1a8978e544047541c2ff3b5b08272768e4dc8edd193cfb2acbd3a6e8cfd5b441dee24b47\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-win-arm64.zip\",\n            \"hash\": \"d49360990474a0620b53bc95495c75d202a7cdfaefa9a86a82696d434485974ac11d045610f726aa749a5cdb42b5612f7ebbd5a4663d2a7bd1b6dde292c38521\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-win-x64.exe\",\n            \"hash\": \"e03993dec0bcc44c3ada0f2e1d4a51dd50a6b3467f3bf894da0d1ec9d8e876b246a48d60b1a7117db0593a088befc5134e9b6888f99fc801e27e69942d942d7f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-win-x64.zip\",\n            \"hash\": \"4db7a0736bd1266245f4edeff852ebc09e00648f632f39c4c59df768935f7147a1d95dd66ca97f175eaa04ed1322470944dd958108fb008c0dc8c9a918c671b2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-win-x86.exe\",\n            \"hash\": \"fcdefaf145779a25b3ecbbaf3cd94a6b4e3353985aa748e89d928801b93ffe1d7664fbf5139518f4424e9771f8ff1910949477c7234ba61a8aaaa7cd83173592\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/aspnetcore-runtime-6.0.32-win-x86.zip\",\n            \"hash\": \"7b8f05e8e39017b1e07fbee00e44022402fbc206f85876796d11e093403a204c66aea3224b06ebf836f29a9da1a9d09aa2b8489a717b3f67638b333b7ae43c3d\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.32/dotnet-hosting-6.0.32-win.exe\",\n            \"hash\": \"85260f75c56d0eaff6de0aa946641f5e626f1604bc84900030924cbb194f5fccca7899a54449e9eb7c6b0aff488200f4c71139b5db255f2584957dcce9565bf4\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.32\",\n        \"version-display\": \"6.0.32\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.32/windowsdesktop-runtime-6.0.32-win-arm64.exe\",\n            \"hash\": \"fd9e945e599668b0457cbb2fb03682176e9524e49dcb183a24e4dc6d1e150545db3aa82a2236fa37f99ae080a7130efce49d1bb4bfd83765087e40f79dd9822b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.32/windowsdesktop-runtime-6.0.32-win-arm64.zip\",\n            \"hash\": \"24c0e1f125aa70bc07c35c0c3fce62a87e6822e34c10212b9eb5d1e52cd68737b9613fca44e031dc62adafb7486b4d6728655151c1faaacb22915eaa369a4fae\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.32/windowsdesktop-runtime-6.0.32-win-x64.exe\",\n            \"hash\": \"b9e35fb820b86f217c8ea8121511ca17eac042d19e630fa5d2371326567d4110eee4d1bb5a78671e7ae983eaf8ea54a5278b77431f25ac028d6061440b5b02f5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.32/windowsdesktop-runtime-6.0.32-win-x64.zip\",\n            \"hash\": \"3f270a53947dc865c8f400ea27119956d6682e7c4c4af365416becc076d9acd0a378672914074dc3edccdf1c0cbade1eea4ca2fe84b1b7f05c79d633a4bbf200\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.32/windowsdesktop-runtime-6.0.32-win-x86.exe\",\n            \"hash\": \"2b216f2bab1bb5d52dd3c60105e92256fde990955208d20ac4602d74b8723aad827527c9243b619b752d456da08129be00110a8838c24290755be6494c6e521e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.32/windowsdesktop-runtime-6.0.32-win-x86.zip\",\n            \"hash\": \"393e1968e054ba607994019c47455c01539d6698506919235b616bd85ef2bd36827bcc8b4520da0a6aaa380c9ddab6337912389c20d7b9ad028e66c0ecfc6ec8\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-05-28\",\n      \"release-version\": \"6.0.31\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-20672\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-20672\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.31/6.0.31.md\",\n      \"runtime\": {\n        \"version\": \"6.0.31\",\n        \"version-display\": \"6.0.31\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-linux-arm.tar.gz\",\n            \"hash\": \"d1e3a8ffa90fdc6ce9df9804d0e80f4cbfb9f9a1debf3f26ff0b3846ece4591cea73caca3d5dd3ea999f9d4d37afc5935b4befb74422f3cbf40f1bcbf8507fcd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-linux-arm64.tar.gz\",\n            \"hash\": \"022c7fc8878544f8abde8cf13ef661327238381c8f4731b4975be294616fda00a4b093036a896baef99eb58b881890d3fa951cc51b0212e766a8a7ce95d2c440\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-linux-musl-arm.tar.gz\",\n            \"hash\": \"e8b74decfc8b818dba00802cd697dfb6195cd8791a54e711b99fb87f3850b576d6e3887301fe1c7b8837e549acccd5e7be01e7df0a818c5325544938dcbda157\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4aaae1b7b28a417b6c37dd243e4b2519859e718b64eea29cdfa96b9e1f1b11a06af8c45f0eb33e5fbf55711f2aa8c6dc31791faa28bc75e727b29ac8c75bbcc4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-linux-musl-x64.tar.gz\",\n            \"hash\": \"be9022f66c2edeba71584be94a35133b524c3bec5a9a1e773e9825004f80e047bf65bd6ddbc1c609d118ba80094585622bd0ffc146518b58814f08d69c68433e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-linux-x64.tar.gz\",\n            \"hash\": \"8df8d8bfe24104f41cc9715bb04fdc1811426c4d16f29336607c68a30d245fb8f36577d639e7da4865204fa85280fb5cdcf47e93183afe6b9e946e0c53df32c8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-osx-arm64.pkg\",\n            \"hash\": \"702d618b7c5fd757e64efbeea9fe5b48c2f3b0fa8925275f29582c390bdc8adaeee20a90623b2c8eb72e5a365eda4b0c9a6e48712dcd16350f7addfabe992429\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-osx-arm64.tar.gz\",\n            \"hash\": \"57d89d189fd7c33ae9627a06dd543d4783c1e04376173e4a2868a342ca864323e41d5a4050dd82fbd9d7947ca1ea12185e80294c70857b97e3d32eace15940cc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-osx-x64.pkg\",\n            \"hash\": \"5a47b0360c6c1542f3d5f355ae6ce346d920eaf1ddb2acfada04d7765d0b5a60d0374106c8f1b02328e1b3e91fec06886c8f19916dfb91fb6d1e8264026f167d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-osx-x64.tar.gz\",\n            \"hash\": \"fb6ae3a5f5f31078cbc98d06101ed53b6a23e9a5582c3d660850e7315fe21d776ad2c3ec716ce27cc0ac87c37d99c6dd9bc864d9410917aa4c73cd885010980a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-win-arm64.exe\",\n            \"hash\": \"ee50ed52db05628231793e5b77530d9bc9b485a75e0d10d1690e9398e87c9f02cfc970ba26372ecb7920d51c9e074b1dce01d877116f4e6e3ae49e6717482587\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-win-arm64.zip\",\n            \"hash\": \"e7f88e2fa93457ed16df07f9db13be341347c3616139b5b92cea5ab68cf5855f6c607774cb9aff8068b4bf85abd6503432b3d224e5ff1e0ce4d0c1189f1e5ffa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-win-x64.exe\",\n            \"hash\": \"e0510a794cfc758b1eaa9b4b98e547dc45c5d327e7b5dbb6042e45cee5b862037ee08608b43aba59c1e8ce99943fa061442d527eaa9aac7cef72f638bb7a8ec9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-win-x64.zip\",\n            \"hash\": \"0729e991d6b644596c4dcf07378534e181603941a11a8ab8c61d3a5ba4b414eae5151ae9c53a4f381ac53d636c3784042de230037c5ce4c45276865203aecfe4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-win-x86.exe\",\n            \"hash\": \"94861bb9124310a8edfcb126f56699bdd58fae0b5cdca1e86b2233de5555e666b42431e83a683a170f7823cbe7dba2a21beb66ab5353e6d7f43e49c4f2470f69\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.31/dotnet-runtime-6.0.31-win-x86.zip\",\n            \"hash\": \"eefd913e51f3d931430ca5940ac780280969ddef5c11fca90cfa529ab77f7e2b5cb9e659eb1062b329afa210e4385ebeb3ab94017e9e5328981afa69013b740b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.423\",\n        \"version-display\": \"6.0.423\",\n        \"runtime-version\": \"6.0.31\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-arm.tar.gz\",\n            \"hash\": \"4be68c3f50fe9f04839bb2226ed5b5c98577a4290a3d627c672fa24968fb267e9186d611b3f8332cb4545ac86a6acea4e0b1321af5cb6973623b0ee83bd743c4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-arm64.tar.gz\",\n            \"hash\": \"42f5e89d6d9a9923bbc20398a6272290b5f693cc767aa540233630f849779daa8cc7d8ac87655f6b2c8e0250bf5be986a8e8ae502b6f33c0b3e474d041b77625\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-musl-arm.tar.gz\",\n            \"hash\": \"d37fa2001d563411e911ec1820224991116ed628939fde4a98687a37293a36c7114ecd2d1a70c2e40890f5dce0d494c9d1b7d23745463f1899a36d5aa1a78102\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-musl-arm64.tar.gz\",\n            \"hash\": \"701827824c27688ac3f4834b379261c5c78a0727880b279cf90a425b9476030782f9b0162497757674ee9f154a6c81b1e4054f338be73f1bb70a271280855cd5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-musl-x64.tar.gz\",\n            \"hash\": \"64806b7ea059403e8e66276cfd05f72551371ea3a6bc3ba5d4638bdf7ec19eea793b4e4cff1bf3aa0c305801cffb7dddf9020491ea9eb859d858b8e01f64b3f3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-x64.tar.gz\",\n            \"hash\": \"4b4a0e66634211ae04fa030e18ae9e22640f5828307ba85c4bae596ab2d31260519197828dae3b2ec73d6772635e0b375536ea6591b03c67c2b7a5566f016952\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-osx-arm64.pkg\",\n            \"hash\": \"e5d36b69155d3f54a613baad37be605251cf4b7abe1fba58fc2e5db417c1713e14163468bdc376a8d2b1ec5af712f99563f50bc15843631b18c5336fdc103ec2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-osx-arm64.tar.gz\",\n            \"hash\": \"fb31894ae43764c518d7909859a2b598134bc03bbb7996ad0badc1088cfcf4d666f25746f77cfef1aa042c2f9fdb348e6975e1c4a98ff93c1b206a4a0429f995\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-osx-x64.pkg\",\n            \"hash\": \"2aa490eb616d17aa8cadc91a0ec86a4ebf4ec8819e7831e92fc9de55b26565aa8b6913186b7bc3a3839eba82f63cc81854500a1b65253c64d242c54483806e1d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-osx-x64.tar.gz\",\n            \"hash\": \"31d8f5aa5b0fc5de1c6f809920cc8ffa0415059daa12ed21888795e600b528376d7b14da5b946ae5493af7214543e6494d9afc8ca017d05ee56dbfd10e2fade0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-arm64.exe\",\n            \"hash\": \"5f3403b25b9c3504fdbfbf0cd40a7e2e9f3002993a94073d9afac0dfd3b349454a5b229c15aad7e2fa5906ac8b910a64933cfc06f47991add937635f2ef1cc84\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-arm64.zip\",\n            \"hash\": \"16f8be3df06766bb6e285665e3542c5ad857a5efc5e9239754d235de11ac71f2e15612bb96d702c84a354923ff2b9c1ceac057fd7cbd3edbecd7cf9658ef3e9d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-x64.exe\",\n            \"hash\": \"cb61a0e3f6cee3d5c073ba16f7eb020b58a01ded4481c2ae970cb54cef9b3416af1217bd949d77e56ea3e343171de8360d688dcfe60aaa679274852727cf499e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-x64.zip\",\n            \"hash\": \"2fae66117bca22d76afde89e91bf8a40b4602254db4f831b0647e69e3ced23f972f335521847955069e6b8a74e7320ffe2af1f2bfc48842216451216845c3301\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-x86.exe\",\n            \"hash\": \"5c7ede0c9d09dff69ac314ec3b4fdc41d5f31f89ec2d75a677ff8bd68d7b733ccb84c9dd51382ea4bed32712502dacfaddeafc7a9b98a18b676f4e3c588bf3ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-x86.zip\",\n            \"hash\": \"b2777bc77406a97318f68eae1d8ede40150b62a6983dcb4789da7609c977a84f883979d59c553ef201f3245ce6a57c3f760c275e52bbb83b8e1649ef1c0b9f6c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.423\",\n          \"version-display\": \"6.0.423\",\n          \"runtime-version\": \"6.0.31\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-arm.tar.gz\",\n              \"hash\": \"4be68c3f50fe9f04839bb2226ed5b5c98577a4290a3d627c672fa24968fb267e9186d611b3f8332cb4545ac86a6acea4e0b1321af5cb6973623b0ee83bd743c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-arm64.tar.gz\",\n              \"hash\": \"42f5e89d6d9a9923bbc20398a6272290b5f693cc767aa540233630f849779daa8cc7d8ac87655f6b2c8e0250bf5be986a8e8ae502b6f33c0b3e474d041b77625\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-musl-arm.tar.gz\",\n              \"hash\": \"d37fa2001d563411e911ec1820224991116ed628939fde4a98687a37293a36c7114ecd2d1a70c2e40890f5dce0d494c9d1b7d23745463f1899a36d5aa1a78102\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-musl-arm64.tar.gz\",\n              \"hash\": \"701827824c27688ac3f4834b379261c5c78a0727880b279cf90a425b9476030782f9b0162497757674ee9f154a6c81b1e4054f338be73f1bb70a271280855cd5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-musl-x64.tar.gz\",\n              \"hash\": \"64806b7ea059403e8e66276cfd05f72551371ea3a6bc3ba5d4638bdf7ec19eea793b4e4cff1bf3aa0c305801cffb7dddf9020491ea9eb859d858b8e01f64b3f3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-linux-x64.tar.gz\",\n              \"hash\": \"4b4a0e66634211ae04fa030e18ae9e22640f5828307ba85c4bae596ab2d31260519197828dae3b2ec73d6772635e0b375536ea6591b03c67c2b7a5566f016952\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-osx-arm64.pkg\",\n              \"hash\": \"e5d36b69155d3f54a613baad37be605251cf4b7abe1fba58fc2e5db417c1713e14163468bdc376a8d2b1ec5af712f99563f50bc15843631b18c5336fdc103ec2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-osx-arm64.tar.gz\",\n              \"hash\": \"fb31894ae43764c518d7909859a2b598134bc03bbb7996ad0badc1088cfcf4d666f25746f77cfef1aa042c2f9fdb348e6975e1c4a98ff93c1b206a4a0429f995\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-osx-x64.pkg\",\n              \"hash\": \"2aa490eb616d17aa8cadc91a0ec86a4ebf4ec8819e7831e92fc9de55b26565aa8b6913186b7bc3a3839eba82f63cc81854500a1b65253c64d242c54483806e1d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-osx-x64.tar.gz\",\n              \"hash\": \"31d8f5aa5b0fc5de1c6f809920cc8ffa0415059daa12ed21888795e600b528376d7b14da5b946ae5493af7214543e6494d9afc8ca017d05ee56dbfd10e2fade0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-arm64.exe\",\n              \"hash\": \"5f3403b25b9c3504fdbfbf0cd40a7e2e9f3002993a94073d9afac0dfd3b349454a5b229c15aad7e2fa5906ac8b910a64933cfc06f47991add937635f2ef1cc84\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-arm64.zip\",\n              \"hash\": \"16f8be3df06766bb6e285665e3542c5ad857a5efc5e9239754d235de11ac71f2e15612bb96d702c84a354923ff2b9c1ceac057fd7cbd3edbecd7cf9658ef3e9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-x64.exe\",\n              \"hash\": \"cb61a0e3f6cee3d5c073ba16f7eb020b58a01ded4481c2ae970cb54cef9b3416af1217bd949d77e56ea3e343171de8360d688dcfe60aaa679274852727cf499e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-x64.zip\",\n              \"hash\": \"2fae66117bca22d76afde89e91bf8a40b4602254db4f831b0647e69e3ced23f972f335521847955069e6b8a74e7320ffe2af1f2bfc48842216451216845c3301\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-x86.exe\",\n              \"hash\": \"5c7ede0c9d09dff69ac314ec3b4fdc41d5f31f89ec2d75a677ff8bd68d7b733ccb84c9dd51382ea4bed32712502dacfaddeafc7a9b98a18b676f4e3c588bf3ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.423/dotnet-sdk-6.0.423-win-x86.zip\",\n              \"hash\": \"b2777bc77406a97318f68eae1d8ede40150b62a6983dcb4789da7609c977a84f883979d59c553ef201f3245ce6a57c3f760c275e52bbb83b8e1649ef1c0b9f6c\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.131\",\n          \"version-display\": \"6.0.131\",\n          \"runtime-version\": \"6.0.31\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-linux-arm.tar.gz\",\n              \"hash\": \"77ce97693c77ba120e7f29f7d87dc6f599fa97696a74a6e94b72dcbfd5e9e1fd47afbbabc3a8fd180c2c301a2da9895d19e3d3262aa4e1b4a941c8f7c930e661\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-linux-arm64.tar.gz\",\n              \"hash\": \"5815bc11dbab9c8be4c9b0d20903d3b6df2e825bbb2789f2d90d1b7d7fc3f4de28a450f5906d82675e8f67d34da8b28526bfbd5dfefa109bd895d2ac03f08cd3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-linux-musl-arm.tar.gz\",\n              \"hash\": \"d1bbee2812f825b326c7f2aa3e6e0073f0f9658d06740dfe7747e409e64f3940e8c01b708a1f9e13dfc8441a6f5482123ea209d95792ebb0ef4edd406bf47e52\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-linux-musl-arm64.tar.gz\",\n              \"hash\": \"84187610dac06c287f9aee2c0fb642a53486c02565e5fec9acf3b1a2508c9eeb5e31b18f6f475c6ec775865ec1762ba98f5b4b44963a943ecb507288ad2009fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-linux-musl-x64.tar.gz\",\n              \"hash\": \"1ee4aaf20c35db9b0c40940dddcd390c45053fe3c4fe5d95dd038c065a12202b6bfd50e9cd9208bf73ff376678848e9391d4e826259288a82ed55da62b93a982\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-linux-x64.tar.gz\",\n              \"hash\": \"3df39fbce2d549a258163588a7205bed73dd39a69c6ba7fee785bd8a663e679a4194cb7e20a2e0c289539e1e412ab3a7ac019cd92cac13d219dfb50cd25740a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-osx-arm64.pkg\",\n              \"hash\": \"ebff9305b72d0145767cb74fda7468385e2cc47fbe2b9b8bb03cea8f236646945223c169659bcd21315a79d0fdb0dcd63666c54a7a39ab5b1793c965273419bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-osx-arm64.tar.gz\",\n              \"hash\": \"ad4563ada153b3d9f11bec8514f97999b31772089150856e46278638caebcf84b51f1413e49cce2c1e4aff266b91a72c1685b6df6546b9a8a2a415e78046587c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-osx-x64.pkg\",\n              \"hash\": \"7646c18b85b91e3f899edb93d155aee5c2fc306560b10dc985b69a42d371b23dee2ab7622424ea34fcb6c6677d242c35a6fcc4d448558b5e51c1d604f531991a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-osx-x64.tar.gz\",\n              \"hash\": \"eaf8323e2ebadbeb30bf610700b46814bb42efe17cbf7d0ee7322e7cf089a41cbf87e184226536ac580dd60f04009e3dda5878427df788727d065ae3e9f908ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-win-arm64.exe\",\n              \"hash\": \"0e778d0adce27120dddfdaebe17776301d5927d6f806d3327890f6873bd7e474a192b157cc85f1c56012d7eedc993fc5161578cf17b2bb87f2cb66c53b2a4f7a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-win-arm64.zip\",\n              \"hash\": \"25c5bdbba37577f4865359eb9bc666957f1410999f004c802e3f21738493f35fe23ad3dc1c44d285c257b592721921c94e0b768dd42fa6760208d2125ef83e4e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-win-x64.exe\",\n              \"hash\": \"c32bb1f6731a8b5858a714d418e99c65eaa8f720ffefe47cb0c19db74a1fceb416285d2e28fc6f9d2677fafa0521f06e563bd4872f9ddd02bbbe01cdb52576c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-win-x64.zip\",\n              \"hash\": \"2655938bc0e94e788b847c45adcc87a8c4afd160294a0f374c7306a1015ec83d300c1092f11f386958686b70431cec109257ace163a79551f5be797fb8b6a0ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-win-x86.exe\",\n              \"hash\": \"d7954f8186c1c8fb2673107a9abe73d502a95aa429b9610b119f4ed8698b0a611d4a2b2ba08e40cd1a15e9f07b32b1fe9e646fbc1d173f931875f64799d29219\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.131/dotnet-sdk-6.0.131-win-x86.zip\",\n              \"hash\": \"1e9ed6a78aa2aa6ac8084fafa8b5c2710346ec951340445bed9151e5aa2b78f032684a14c300c4b4ed538cf6da466b65bbe7047a716763cd410be9cb143cf10a\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.31\",\n        \"version-display\": \"6.0.31\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.24141.31\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-linux-arm.tar.gz\",\n            \"hash\": \"6ea99cf607c055dfbcc33d50b933835f887a765988eda8d6d5d385189f926140e8cbd09b8dd4b55987370fd686db7972e38cbcd2017121e4b85ae2294c47de3f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-linux-arm64.tar.gz\",\n            \"hash\": \"5d395554520a62c81e01f045245749d771d728a353631879462ac499e78658377e475bca756668eeafdd65ac55ad55f244f778809c127a553c5c330b76ef9dd8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-linux-musl-arm.tar.gz\",\n            \"hash\": \"3af78b991970d7d524e769e14ccb7870a8a7d52b4cb40526a0b92b8d85c4e676eb247e7db9f5995d5f73a55d0db92fbcfd667c3991e80d0543b4e91d107c5da2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c0defb7cb37b708211f7c9823ad7f28605403cc0028bcf37a7ddbc801d59b4fb24e6ffe4422cefe57a0e2a45f1a0e71f8583ec48465307ddf7b96f65444b20fb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-linux-musl-x64.tar.gz\",\n            \"hash\": \"6c79053842b907b2a5d79432e363d6d1fa45e59b73d469cbd8821e854d72dfc46b43e69156e608254e9815daf80ea534613ecf65cbbd6d8ee65789db99bf805b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-linux-x64.tar.gz\",\n            \"hash\": \"ebb20a3461bf9d1e3a5c91761452f5ef2e60873826ad3158493768a18d207319bccc40d6c1a64fd61dd8c22bad51c26689394b0e6a40c4bfe4cca00ce4c00db1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-osx-arm64.tar.gz\",\n            \"hash\": \"f19e54b4a4e42db7aae880b86a6dde57dc988aebf852008b70ae56f89ad130e0aba73903357f4e97ead10d013ae3fa7fd28d197ef88f0742391f601ff136951b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-osx-x64.tar.gz\",\n            \"hash\": \"79ced204af5aff757fc7680298121269bdc770b62411750f913d3129dad79c8b2eabd54b2986073c219b3aaa4b49f7188ab7694b99361fb725bff8e32db07dc3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-win-arm64.zip\",\n            \"hash\": \"789af435d98c00202db65b59aff249dc453c6ce8310bb00829fd02be1538f99c1e1ee16009e051bb62b615aeb669651aa6cf1f15b82db45924bc22a745b38895\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-win-x64.exe\",\n            \"hash\": \"a4c657a448f361d3bc915e9ec4dc01e9fee60a3ead14ef7d7fb5fcdcde02aaf339127ddae2c918b7de74646c99c6802fbe291d632d893a9e5db35d0421998663\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-win-x64.zip\",\n            \"hash\": \"68876fb8469fda214528ca74dcde67cc08f6babf07768d528616e44a84221f3522b9dc496b572f4a67b227404b4ea666a2cd2cef73c5ef36dedb12120a21ffd7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-win-x86.exe\",\n            \"hash\": \"468d59c89fc907c519c93aae8471402b62d6631589bc89f6d4866dfc4f42f6f2c78e97c558cc6102c577b28f3c3bd152dff9b8ffaaba1c976c41d85470196f47\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/aspnetcore-runtime-6.0.31-win-x86.zip\",\n            \"hash\": \"fbb081a80eadecf07597cd180edb1b9d054f82f249af396e074439a8885457881b8636dd79d04120420edb24b5aa1c9d60547cfcf1a606bde1eb7bab71654abb\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.31/dotnet-hosting-6.0.31-win.exe\",\n            \"hash\": \"e79f7b9e36da97977ee9a29535803dfc94136d3b56d25f0e9da0a1f43bf40b194fb008ac023fe3e0f3647f23ccc3cbc0c357ca6fb0ec14a76cb0f0514e85304b\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.31\",\n        \"version-display\": \"6.0.31\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.31/windowsdesktop-runtime-6.0.31-win-arm64.exe\",\n            \"hash\": \"4b4f5e6616d0c0d6b28b9bd8fbd45c8300a3e45da97bef888196d562c4132c16f81cb1185101207b5cfd8bcf5aced1f15a60d90e7ae8d0ef466d8aaf79fe18e4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.31/windowsdesktop-runtime-6.0.31-win-arm64.zip\",\n            \"hash\": \"3df13a3266a6a6bb29f6c7f30f9c9cbdd51a8d6d8a9e38b6e324bac9b68057f9c193bc5d6aa29d5463fa75a7e29e94347ba46888322d935933492ca6bbc35c00\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.31/windowsdesktop-runtime-6.0.31-win-x64.exe\",\n            \"hash\": \"5202b008e0f885c2c78cd23a8dc0970e1281e905e3c6c796e2d77e5aad15eb312661a6b459b0b29b7b16979cd6c8f29d0ac52b0573a60da4f9e032c17a8acd9c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.31/windowsdesktop-runtime-6.0.31-win-x64.zip\",\n            \"hash\": \"931abbcaac883c72e46a3e081b512fba445919a1f1371af7c3b8cc48fa908775dc54a11d12609b948e9acf2809816ee417ef9414238d384be205e47ccd72cdd2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.31/windowsdesktop-runtime-6.0.31-win-x86.exe\",\n            \"hash\": \"ee2d05c49c5c8a4981529ccf67c5554bc39c7fa1562ecd56f0b3b2c92367fc0646f87ba742955a61b744c6d2754a35775182932e511229528798439147875a01\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.31/windowsdesktop-runtime-6.0.31-win-x86.zip\",\n            \"hash\": \"df459a09544e62986060990d8e117ad4e04919bd8727673adedb609d64be6b5d70028295ffb27ea411a5391709104fd3acdad45ca31d75529d7015fd1e95cc96\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-05-14\",\n      \"release-version\": \"6.0.30\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.30/6.0.30.md\",\n      \"runtime\": {\n        \"version\": \"6.0.30\",\n        \"version-display\": \"6.0.30\",\n        \"vs-version\": \"17.4.19, 17.6.15, 17.8.10, 17.9.7\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-linux-arm.tar.gz\",\n            \"hash\": \"2a8e470886009a8626a7cace3b6f7ad5cc36c5e440be5d1eab792ccc51653bdcf4ba82d94dfd86bcfbdd9f41eef15161955fa2a6fd68b7a9c6ea46f3c043fe39\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-linux-arm64.tar.gz\",\n            \"hash\": \"75fa6de07e5d8e5485af910de522c1d0afed0532008ded1e80ec3f576c9a78c6e5759dd4d1331159263c02121a4d8f1e532f0533c11524c2d782cf861be13c09\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-linux-musl-arm.tar.gz\",\n            \"hash\": \"0f07c9afac935a2268c979f98c2e49f2d96f146d2d253ca017fe01493477708de21ff82f8e3aaa5d207a27ea17a3b501d4631d10cfa08f41522461f0a5982c81\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3d642720dd7420d1431fe5ff7b2f445e8db8cb0c9ad87b03046f22fa0e369707af9e06aca6d2edd844ec989ca2cd0a92fc9b68e8435bdbadb8a58cfff04cf5c4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-linux-musl-x64.tar.gz\",\n            \"hash\": \"0bc940279c45704114ab29b94867d1262e7376a22436c94d4c662af6923159bd2cb891cd822f1d559ba06d7ee06c83ad0cbc6c8eb184d837eb9d39a4bb9fe230\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-linux-x64.tar.gz\",\n            \"hash\": \"b43200ec3a8c74475f396becd21d22c6a78a6713585837707c2a84bbb869c7e551a05c4c1c1cdba8083baebdd09bc356de5d5a833b8bc84b83421d3ecfac71ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-osx-arm64.pkg\",\n            \"hash\": \"75488dceb340fd841f4f558846bffe174ca097a9149803a49abcfb976bba972e74b2c2386c13af938e514e94fdb902b53c697e47bef34acb086bbee729e470b7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-osx-arm64.tar.gz\",\n            \"hash\": \"b33a38f4e41455cd88e23f6c0fa76797e05af25bcd94d500557fdd5ce10071ac16789ddef98ec9abef113f2aa487fc7d5c22f329b8a7941a79d7768ca176975d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-osx-x64.pkg\",\n            \"hash\": \"f394660f482ab69880f5358d788bb2528defb567a591494ef0bd1bda482a52732b4498c59c50184d17506e56f362be88c675097d2b0aeb8ad9790c0c744135fb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-osx-x64.tar.gz\",\n            \"hash\": \"8cffba5feca56bf11b38318564c45ae18a58ec48223963ee46105f71bc07661457e562d51ea0e8b626eb69b7635565244a5cd1575b6fbac52b776145c533e784\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-win-arm64.exe\",\n            \"hash\": \"88d95bcab0d77efe044948a32bcdbd6d46a168da390b71aefd25a780a0a4dff2465d3495a5e6bb09d92318c2d8f45d43a50c9a168d0945dd4fe38ae2c2790853\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-win-arm64.zip\",\n            \"hash\": \"f18c560ce36dbde65d9a48a86e62765a264c0bddbcc907dc8d1eb0380677a8ecc9e6b68708dca32a2f2c9f07aec51b5f3e256a806a4968144cbca036b19ec2ae\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-win-x64.exe\",\n            \"hash\": \"04f25d1cf7d4b07add194978250d460d5dd56d2683a6bcefedc8f4c14edc933a7b284331acdd4e4076c7d585b2e3ff6d3e54e409babf1afe97e4d6d078c9abde\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-win-x64.zip\",\n            \"hash\": \"4c126ede9c8449c035162bccec49b7689c4618a0434db3b4e4b632dab7b1bfc9338649cfd6bbf4045697a1cae1324f6050b9b050bb043a9e498a0815e667e6f5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-win-x86.exe\",\n            \"hash\": \"16152b3e3701c4d52f51649fc5aff3789892c5e1576ccd734c56eb9594b9a70766b9f4d4ee3c7b716987aad0a11d6860c5db12cc277c63b8cab1323f8f8a2f9b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.30/dotnet-runtime-6.0.30-win-x86.zip\",\n            \"hash\": \"2b2533d647a2a447cf98f5771778e64203115f3781c6602af302da68b730d29b8bd216e93ae78c869c409a05ada234e9e6fa35fb81bbaf7dac6121fd61510569\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.422\",\n        \"version-display\": \"6.0.422\",\n        \"runtime-version\": \"6.0.30\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-arm.tar.gz\",\n            \"hash\": \"b81fd26a92e16b8e9545f2172bc35651c1787178a0a50ef9edc1b98a9e6176b2289e0e0cc29aa57b3c188d3017a4120f9be47068e36dddc4540fea17424cf4a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-arm64.tar.gz\",\n            \"hash\": \"c03c3708061f266a3d7fb5bf2240f5bdd00be4d877dc3dc62b95a857f2ad62c80dd4c54f5257737ef7bad3cb458685d7f2bcfe71c3562075ac3aed660df8ae41\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-musl-arm.tar.gz\",\n            \"hash\": \"da4acafdd4c10ee3fc8a993099f38c1a1d93811cb10db4f0289d4fd5685f6d4df68cd81245a4c8e658467e95048edede1dff792acb2f8572562785f06601adfd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d85df0405a6b4f721e4bd0ff15ded204172f5b2cfb5e9f6eccbc5ed494961b0359a7aa386f9a0a844b7fffafd978abe286f999747de0707b57899470499f807f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-musl-x64.tar.gz\",\n            \"hash\": \"25ca31a27a8f830a625cd58a4f6fe29148c6fd49c4ff86a795f1954da2c09ca3a7750c248b09001a847114db9bc294d427a358b30fc7ac36c3d9c39e5a9e2b99\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-x64.tar.gz\",\n            \"hash\": \"e0e6ea234a5aef29c2571784c22396115db292fae8f859f4642f80f873807140bb7bbc009be568e8e34288b46b2e3e7732115b5f02bbc8ca0aa723e183bc084a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-osx-arm64.pkg\",\n            \"hash\": \"547dd5d2db0be6d533b2fa7e336d446716d11afe123075c5c540be3e0a261fbf5ca014fda7585a59ab64ba24699ca21eed1c6445d4f5c0bd78dfb9e0677f4d18\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-osx-arm64.tar.gz\",\n            \"hash\": \"7bb885b605f51cffcb235a6bb6f0eccef7a211e67480fa6243b0cb8899dfd60c4c0501579c0c1dc7fb267aea5db5a6d35cf9e2a35903772797a66360fa171b3b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-osx-x64.pkg\",\n            \"hash\": \"bb01a9a3beb2099d5fe844cfd41adb7b36d0f35444026dccd5169351f437450699328a2f8e2551ae1629e07ff77a427481c7d9309427921905651b3141eb4dd9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-osx-x64.tar.gz\",\n            \"hash\": \"a301982e64a18cf06577463fc3e2e179c06a31597b1b32127b1196dba755bcc3323edb618f6000c9f4f9ed902c671377a459e9ac90da2c761744fc1d57e220cf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-arm64.exe\",\n            \"hash\": \"d8c649215def0b72458f2c4d3db2a3e0d2067b78f7ddf973629846b01804d4b98206e6cd4d70aa89d4dd6734d0f634df5c74757af65639b2d06ba60dcca0ba21\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-arm64.zip\",\n            \"hash\": \"501fc28174cdb1037b9297923c7545dba7e56f7945ff32c8e41d76cbf559316d60c1066c17512effdfdc325c67e62b3ccc8c46e3a40bf26d4c2515d9b40bd522\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-x64.exe\",\n            \"hash\": \"9ef9f83eaff52145d91d48b4326bfd7926eb20b25e069461ff4f132fbe5d534e7271c719a848b5766635cdc31d0f67a4820d60438e9db5f384d1ca82a627f315\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-x64.zip\",\n            \"hash\": \"3f764f7f5a0ee80382a321a98509a50746a4cf5e8d30fbbaddbeffbdb48a34a1f60b9735d021d56c15a42038cd7276e170e3932b42f7c7fba97e541381a21865\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-x86.exe\",\n            \"hash\": \"fe6071783482f49ab544d988faa2264603e2d70ab24430fb7ce1a73ded222caed6e869826ae23da5f2b3bf2df12791399236961aad7ca1be2ec07d9ca610102a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-x86.zip\",\n            \"hash\": \"6df1d604536183f213447321f918bbdc57be42e59426cc231b5d5090712295bba649656719ad53b10f1a7ca024303091f78639af5ee131de980ab00d78c87e15\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.422\",\n          \"version-display\": \"6.0.422\",\n          \"runtime-version\": \"6.0.30\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-arm.tar.gz\",\n              \"hash\": \"b81fd26a92e16b8e9545f2172bc35651c1787178a0a50ef9edc1b98a9e6176b2289e0e0cc29aa57b3c188d3017a4120f9be47068e36dddc4540fea17424cf4a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-arm64.tar.gz\",\n              \"hash\": \"c03c3708061f266a3d7fb5bf2240f5bdd00be4d877dc3dc62b95a857f2ad62c80dd4c54f5257737ef7bad3cb458685d7f2bcfe71c3562075ac3aed660df8ae41\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-musl-arm.tar.gz\",\n              \"hash\": \"da4acafdd4c10ee3fc8a993099f38c1a1d93811cb10db4f0289d4fd5685f6d4df68cd81245a4c8e658467e95048edede1dff792acb2f8572562785f06601adfd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d85df0405a6b4f721e4bd0ff15ded204172f5b2cfb5e9f6eccbc5ed494961b0359a7aa386f9a0a844b7fffafd978abe286f999747de0707b57899470499f807f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-musl-x64.tar.gz\",\n              \"hash\": \"25ca31a27a8f830a625cd58a4f6fe29148c6fd49c4ff86a795f1954da2c09ca3a7750c248b09001a847114db9bc294d427a358b30fc7ac36c3d9c39e5a9e2b99\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-linux-x64.tar.gz\",\n              \"hash\": \"e0e6ea234a5aef29c2571784c22396115db292fae8f859f4642f80f873807140bb7bbc009be568e8e34288b46b2e3e7732115b5f02bbc8ca0aa723e183bc084a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-osx-arm64.pkg\",\n              \"hash\": \"547dd5d2db0be6d533b2fa7e336d446716d11afe123075c5c540be3e0a261fbf5ca014fda7585a59ab64ba24699ca21eed1c6445d4f5c0bd78dfb9e0677f4d18\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-osx-arm64.tar.gz\",\n              \"hash\": \"7bb885b605f51cffcb235a6bb6f0eccef7a211e67480fa6243b0cb8899dfd60c4c0501579c0c1dc7fb267aea5db5a6d35cf9e2a35903772797a66360fa171b3b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-osx-x64.pkg\",\n              \"hash\": \"bb01a9a3beb2099d5fe844cfd41adb7b36d0f35444026dccd5169351f437450699328a2f8e2551ae1629e07ff77a427481c7d9309427921905651b3141eb4dd9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-osx-x64.tar.gz\",\n              \"hash\": \"a301982e64a18cf06577463fc3e2e179c06a31597b1b32127b1196dba755bcc3323edb618f6000c9f4f9ed902c671377a459e9ac90da2c761744fc1d57e220cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-arm64.exe\",\n              \"hash\": \"d8c649215def0b72458f2c4d3db2a3e0d2067b78f7ddf973629846b01804d4b98206e6cd4d70aa89d4dd6734d0f634df5c74757af65639b2d06ba60dcca0ba21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-arm64.zip\",\n              \"hash\": \"501fc28174cdb1037b9297923c7545dba7e56f7945ff32c8e41d76cbf559316d60c1066c17512effdfdc325c67e62b3ccc8c46e3a40bf26d4c2515d9b40bd522\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-x64.exe\",\n              \"hash\": \"9ef9f83eaff52145d91d48b4326bfd7926eb20b25e069461ff4f132fbe5d534e7271c719a848b5766635cdc31d0f67a4820d60438e9db5f384d1ca82a627f315\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-x64.zip\",\n              \"hash\": \"3f764f7f5a0ee80382a321a98509a50746a4cf5e8d30fbbaddbeffbdb48a34a1f60b9735d021d56c15a42038cd7276e170e3932b42f7c7fba97e541381a21865\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-x86.exe\",\n              \"hash\": \"fe6071783482f49ab544d988faa2264603e2d70ab24430fb7ce1a73ded222caed6e869826ae23da5f2b3bf2df12791399236961aad7ca1be2ec07d9ca610102a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.422/dotnet-sdk-6.0.422-win-x86.zip\",\n              \"hash\": \"6df1d604536183f213447321f918bbdc57be42e59426cc231b5d5090712295bba649656719ad53b10f1a7ca024303091f78639af5ee131de980ab00d78c87e15\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.130\",\n          \"version-display\": \"6.0.130\",\n          \"runtime-version\": \"6.0.30\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-linux-arm.tar.gz\",\n              \"hash\": \"0760afce4415e9e5f69dbc17fe4b883d5b1417c9108601ac69bb7f2957207fbb6f143124a35bf3e8635c53a21183e9ccd453ba46f20f8d0729d4f9de254caa9a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-linux-arm64.tar.gz\",\n              \"hash\": \"95767eb4da8e3fb50992ec48df178fba9e2a7beaae26c5fdd8ecd4dae605ec048b83180a2bcb72c836468a99607179f9193ce0e1980bc95484865f559cc91789\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-linux-musl-arm.tar.gz\",\n              \"hash\": \"e10e1c22463f6b478dd33939bf7305a1f804c11538cd10dba953c731832ca080849433381bf557026e36d5674988a39e296969b80ffb5d24d19e6d5971cf0c78\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-linux-musl-arm64.tar.gz\",\n              \"hash\": \"14b9926e723451bf2fad5a7634a430be7fd782a7f6f40025bbb70e5f43d0dbd65f453e5329a02c654cefd05f71d41d07511065b626f517752671eaa77272c128\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-linux-musl-x64.tar.gz\",\n              \"hash\": \"f938b1487c04bd90d8594c9266c4c04141b98cf3035ee487a15e34eea939852db90a1d8b7633b0129c3d88e074e19b7e0b964616ef68f23f5a189b72507accfd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-linux-x64.tar.gz\",\n              \"hash\": \"dd4e3e5e24c0bc387dc6ed3fa833236d3f444efc0b12a256dcd73f5f4431488b516143d63019c6e9430173adebb07406b52e78a102f9e143a7e3f16361228b32\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-osx-arm64.pkg\",\n              \"hash\": \"3459f3804081367d7ca56ce2b427862f9f51d6fc0a5fb9da0624765cce1ec4268c38eb54cba1cdae347d79c1f6b24c1b09aabfb2dbc06fb63d1381de7b417168\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-osx-arm64.tar.gz\",\n              \"hash\": \"9d8273f73e842a3a1a71a2ba5c2f0dce74821e1302ef34843817a3f5c49df83d662bf6c7031dba7a8362903a870f759c7976176209781a3c4ade6c66e6824c41\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-osx-x64.pkg\",\n              \"hash\": \"dbfe550815450bd7c242aae1c2ba07ebe911288c8985439470b447e3ab793415842e23373fe9c8507eeab128cae63aed32c2b6cc1fd7a56b77b67d8ffddf7f43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-osx-x64.tar.gz\",\n              \"hash\": \"8102f1432343538f45d0d49e518edb7ba0000d1ae7f7306611d2e17a205baa4215281250b45cf11900f45db0622fd190bf7d57f2b63cc8b1b4bd106128564522\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-win-arm64.exe\",\n              \"hash\": \"b33009fd6f133d73ea965f16affa789759cb95ce48192f15770939e4ea064ac54650270597bda0a83c2269e6aded79919ead0044adc5076b734928116e69398a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-win-arm64.zip\",\n              \"hash\": \"d7f9c74b5b396ba5d5aab2eaf18b5ff3e5553b1accb476b5a130270063ff0366042c60b16fc97ec58082d7d3c295ba8bfc7c202adfd3403c3f9631f66b2f5b78\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-win-x64.exe\",\n              \"hash\": \"9f3d299be4cc20beed63fa63d7be491c22e448a5de093d58bd0127375115cbf56c58a2039f1685d044a4ab8145b30547b8aedd8b801ac3054283bfb2d949f4e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-win-x64.zip\",\n              \"hash\": \"251d52d1bd813e93ab083989d9d955eaecacd6ac2a263931050de93ffec64b0d41500fae5d32a2f1d3f04bdea0fb0175e8ee7c82419c177bb74b578833b6e57a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-win-x86.exe\",\n              \"hash\": \"7953c841b842f2c6072e51a3492d242e5564ba6339c098ed5151a31319eb63dc91e497fec29ec20e1a364d6ac3dd3a9121c78dc54603b1ebb4696ce546f33879\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.130/dotnet-sdk-6.0.130-win-x86.zip\",\n              \"hash\": \"c376aee99345fa23fc68c44451666fb3af62f8445c438c6c1f53c15e1675639dcba2906f33ce855ac17d724883708def34a37f24da9bc1717faf480ce1a788fb\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.30\",\n        \"version-display\": \"6.0.30\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.24107.30\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-linux-arm.tar.gz\",\n            \"hash\": \"2ba7f132f198558ffd30864829d2ed71ade1cdec87092df3c6467f737475bea4acb82c2c366cd1e84fd6eccedc302294b408397c482580ce93cc9f534fea08de\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-linux-arm64.tar.gz\",\n            \"hash\": \"de0921903ba55e21195107b126e271457550543fd6a9698ab3c2b1e2b95f7fe2d6fb2f067e08ed10c9e56940c247733dd9a2f9775e7993e033a945899461e130\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-linux-musl-arm.tar.gz\",\n            \"hash\": \"4aa584e1d7a281ee0ee49e678239331cb3ed04b292284c09a1359ee09d2dcc86cef211db373854ff6250cf5d71d9c0c88d5c2eb0ef2c8d0d61705c5e3f9023e0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cf698e2185311aa9e481534b8d8632e14a4284dd9529db62d2984e4385217358de3aa0a8e1c6851c6943ffdc2adb81afcee99dd92e08092d9536838f132b7df4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-linux-musl-x64.tar.gz\",\n            \"hash\": \"05afa6c27d1e8ffc2722ba6ab9f0f0a9aded82812399323b0e723fcc85bd9864969031378d92e7d993b9fd80fae7276d5d1366c7050f5c175540b1416b1cd230\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-linux-x64.tar.gz\",\n            \"hash\": \"757d017db28b8e34c4b242c082aa51eb85bce8fca16af37a0beabedb271c9bd13e1631868faa131745d7784db48974567f82275da09041ba434dcb7abe821a2d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-osx-arm64.tar.gz\",\n            \"hash\": \"a74d44c399e06c9ce19ec10d4be53444bf18d981fe7ede62a69efc24a5af5898d4ee63542ffbedc3b906cf1ac3f7101ecdb69e45dc0fbb1336bf151940fc2204\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-osx-x64.tar.gz\",\n            \"hash\": \"0a0c4c9255ed29db1c1911fa0fc6c8a9083f777c04a3939b2087d80bba21fbd864e6c92c62aa566a930a2b30024b1fdbfdcf34d034e2734c0a9b3d45f7c63445\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-win-arm64.zip\",\n            \"hash\": \"4fff5b1df08af4b1195a740ad9fb5bff79afa8872c2439ad2107a662d509626bb1de4f062691e474197d75664217cc6334782f9d39ef1802794527ff4a58167c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-win-x64.exe\",\n            \"hash\": \"ade3c8e9cbfe56cb87d3752421f1d627ac32bc740eaac1e4e1a4ee5326382e9a5898f6c79f5ce3a777823608efa1a894dff552b1a520bf37dd1b50f50f8b3ef0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-win-x64.zip\",\n            \"hash\": \"f34be5a8712c4c41555bb8bb44feea48ac9642d3d432b23bb5af59d1b91209c8cc7a8b52318757f9a82248cc017a2fce77f7a4d1e9a593ac8c14a47eece60784\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-win-x86.exe\",\n            \"hash\": \"821edb0a41c71806855f6ec3fd4381a87a86110397bf39969fd068385bbfad83ba6e98b69269fd69c79f004983f50ad28af92b94a5d03bd8745608cdc82aebfb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/aspnetcore-runtime-6.0.30-win-x86.zip\",\n            \"hash\": \"190bef9447709f3fa18e9cb01c9d255139785382fbb194e2c2146349adfbdb18003e6d0f7e916107ce47cc8d9c92681212956801f99fd94e33129512693ff056\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.30/dotnet-hosting-6.0.30-win.exe\",\n            \"hash\": \"2183c84114d08020b1f263987d98bec69a5ba63cbe915b4b0e70611c9c24e64238aa1c6401f47cf40cfaa8db88394e5f82cc69f956d70ae4c6a967c30bc16f31\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.30\",\n        \"version-display\": \"6.0.30\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.30/windowsdesktop-runtime-6.0.30-win-arm64.exe\",\n            \"hash\": \"fbcc9577a2fbfd069d0c83e97a628b9c8969b23948743c7eaff76a78a02bb43f62fab4222d6290e04dcf57b1249434b9524fe64bf3823933fe23cdd74d0e5ef3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.30/windowsdesktop-runtime-6.0.30-win-arm64.zip\",\n            \"hash\": \"9aa6c04d9f09455820fc6e2f5fcdce943f270bd380aeffd583a3db8a4cb6db21b373dd5456a748356af984f6ff3fc1c9f6fddf4c282bf7bd831b286b94617ffc\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.30/windowsdesktop-runtime-6.0.30-win-x64.exe\",\n            \"hash\": \"fe6ba997ccafb5d8405e0ff4bcfc5b9ca07a425173f49d3bc043b3fd71833f7547837d80ae1d2aaa6f8f13bcf333d9814f0d9a4a5e1e7222b404fe1d08882a6d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.30/windowsdesktop-runtime-6.0.30-win-x64.zip\",\n            \"hash\": \"494f2cc8dde49b2bdb9815c7f4fa942105162202cec0ccac9849969696a6aedcc14e1d69be42de9e1b8b95fce949eadd089dec55ad43b9ec275f9e5cea5bf6d5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.30/windowsdesktop-runtime-6.0.30-win-x86.exe\",\n            \"hash\": \"4ad73567c8bab8c789009a81137d8f05a27e9c21b6b89dfd58d5ed356d447b94694e047272b43eba2a16100fa0fe681adf5569bccdc4a3bf243af33ccf4f0a62\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.30/windowsdesktop-runtime-6.0.30-win-x86.zip\",\n            \"hash\": \"1e238580ada3a6e1f7eb52ed5edc7dc6907507649d01e6fe53471aafcf50753d4aeee772f791bf1cde7e1c3370d9efb2ea1c2cd8cecd298cfa56733112cd1746\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-04-09\",\n      \"release-version\": \"6.0.29\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-21409\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21409\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.29/6.0.29.md\",\n      \"runtime\": {\n        \"version\": \"6.0.29\",\n        \"version-display\": \"6.0.29\",\n        \"vs-version\": \"17.4.18, 17.6.14, 17.8.9, 17.9.6\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-linux-arm.tar.gz\",\n            \"hash\": \"5975b391498e829524deb69a827ed84f7b28c9dd16016a31848857af1549194b7c9b7d82d85376595eb656e6558250e18cb97ee5bb4691cf244965a37e984dc9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-linux-arm64.tar.gz\",\n            \"hash\": \"27c7121a4953b51bf29a15ffac4155cf86609ded15948f91ecdd19970ff7e19276c528d875f547c2877245767adf1be1ca0eaeb45dc8db460070637bd5ee1ec8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-linux-musl-arm.tar.gz\",\n            \"hash\": \"e2241fbc220a2b0e6cbd2d0c208315c290008fe9c6d6dcaeedab7bf2d3bfb572cc268f6b845db012e3868662de1dea3995a6b4a3b764904d1d3a26ae4d045e26\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5162effcf3e34f9a5c4320d007dc4f322bb816135c5dc3dec5f692c84f111301b14b2bef352112da7f1df51c31c8706c480eb854b0256c388c402ff3b41ed627\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-linux-musl-x64.tar.gz\",\n            \"hash\": \"f093e16317a90dabc125bbaca5933956fb4a786bb03bebb56ccaebd36c799e1e9a3b43a80a6471505ee4ed725df4fd54ac29ca53f033642a6e72388d33493aff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-linux-x64.tar.gz\",\n            \"hash\": \"c9fc66d47e7c5ed77f13d03bd3a6d09f99560bd432aa308392e0604bdf2a378f66f836184dca4a678052989e6e51a5535225de337c32a4a4e17a67abdc554ffa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-osx-arm64.pkg\",\n            \"hash\": \"5e747f8428949df97d647dd8bbbecabc61f833aec2a150b656475871700639f662932914bb814745411efa2056db7e79298e84818737a82165609cbcec85e74b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-osx-arm64.tar.gz\",\n            \"hash\": \"baf9b30ab7fcdb16878a05429a98c20079e8a5e081f910ddabaee70298dd3d976f3c56569af4efa544533534be50920258982cb97d98bc85f31ce44e6ccabf52\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-osx-x64.pkg\",\n            \"hash\": \"e6dec12970d14122582208dcb2f0ff4b4e089967d490a275f152bbdd469085dd8ed1ff47b8aff1ab5f6695685024633e7cab72d9a6741e3d149290fa409a5895\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-osx-x64.tar.gz\",\n            \"hash\": \"e04207993febbd8593eb5474016e90910491f4c5b23cfec39498bc6d5ca2c3ce427da4f5f14ff4160766daab1e35dd2d324d0cfd7ffa83c4741a25f9ac811f00\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-win-arm64.exe\",\n            \"hash\": \"5a2ab42a4c7dc2243b800c3a8a8db34ae68cbdb576f504fed489c8fc9d3b9a7a78f1dcd27ef572b91b70910d6ed1b50200881eb87520efb9c445791a71000e28\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-win-arm64.zip\",\n            \"hash\": \"d4fe639508609e4ee73c8c09845adf96b3129991ef5e250a5947dc23f0387c360755c43b0f9e2fe33cdb9473f3ebb88f8b4b49f70f8926599b01c35bf8e8347a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-win-x64.exe\",\n            \"hash\": \"f878ca654a67cbfd24ee86cdbec80e745aee60a0a9e46ea3ed6915f2b8550790a3966169bb7310c2da9619526be8579c21e831f800019a58caa289b923341966\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-win-x64.zip\",\n            \"hash\": \"09f3f19fb422f2dc3a48b17c9036b5d68d8725a81baca8826f24fce228fd4dca4cd67f1231b844e0c82d40e53c67fe0496771f03b2863c03376e8c8ecfcf5c4f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-win-x86.exe\",\n            \"hash\": \"c15cd3e5849dd4c6b60222106f367856038b2e9bcabf6f8880cc4d8db6fb5630b13daed18afd49f3e3ca76f8afa3654788724f806284e0abef88451e0a92e0ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.29/dotnet-runtime-6.0.29-win-x86.zip\",\n            \"hash\": \"8465c835b5baeabc30bcf558ae6892ee2beb23364ec56ea0952ef2119368e68f913c0ed21f156215f7b803f6c2cd5f30a15e4534948ac1424d2c8833638b872a\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.421\",\n        \"version-display\": \"6.0.421\",\n        \"runtime-version\": \"6.0.29\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-arm.tar.gz\",\n            \"hash\": \"2c6728e52656051e31999811a7d2648244b03d5a5882fb07b14c214211fa233944f8da7da1f35b73f43a579dbc3949d6426502fef26f795e73de8adab9b8ba9a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-arm64.tar.gz\",\n            \"hash\": \"2713e16d70d9cb5bd6d3d2da385c75c8cfe6ed3187225efe6715d595b1b1b17d0a48fc7044cb514add8918875c5f281196f09686c11c7524fe9397d8bbe1f8aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-musl-arm.tar.gz\",\n            \"hash\": \"788fbba5274f7a01d67c4bd99f53f1d3769c65b1e6337109f53356b0a50a2e53015b1694a6e4b557405193889d7fe89f04fd73a9557e88c707df599628243d4d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c3a5c20a1495d0af5fd3e6d1f62bfbb84cd7fcab545a7b75bd1321f0ac6a1c1ab4fbfa2b7411544440dbd260a2e02ea744dc95973c798f8554b0741b6f22136c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-musl-x64.tar.gz\",\n            \"hash\": \"ddf3c6f35a5e319329f4aaf10e5e7789a3777afe6f77f0c8bfb7ed0329eea6a19636b8bc156b0f16780f1d7dd85b4299eeb3a7d345f90d3a273147a086f98c29\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-x64.tar.gz\",\n            \"hash\": \"aa2c1fdc06c477acbb8ca938895f22373a96e96bb75028b496ddf3d433a1e347f3f765b414e8e09fbf1da1cc50f575e28572e701693bad2a33f9b92437a7d3fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-osx-arm64.pkg\",\n            \"hash\": \"005e1693d263938d3ed7c658563fadf363030f163619547832020f4e1365da872ce4b770d39c49dfef33827e91cb53ed4dfa49fef9f2d6f51fb2c8899685535f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-osx-arm64.tar.gz\",\n            \"hash\": \"83870fbe802cdea4ca014eb5dc0cd899deed952d8cfeb862f74bf68d80bfa81e814a3d90381615bb6e26dc39bfcbc82f975462665bf65294d25249e2ea365332\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-osx-x64.pkg\",\n            \"hash\": \"d71fecbb358bae9ee10e8561f56463513e6a15e385b2b80242deedb8b190b6682e68066d5a6102f41efc81df31b3ea78b03b9b1d11044fc1ebc1580c617c83f6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-osx-x64.tar.gz\",\n            \"hash\": \"93570a4efc929050b36ad53adca2be803c4cd8ebd9f2553b0f3e325af0629f9854ed39ec8ed0bde4302985c74143763b3a7bef89b1bcecbcec99e137777181d6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-arm64.exe\",\n            \"hash\": \"1c38167fcac951f641602e7ead6c5c387304de706e9afe344e7ae06f3388136bc1ee17a375730275d53709be467534fb2d27e282f185a25bc3fd0c52f0a0ff33\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-arm64.zip\",\n            \"hash\": \"4e35f553539b791c9cc4965104c81d7292f32382266a090c5fc8f482d25527bf8c4f4ca64fb746f3772d017940b9811b96680d34c441abbd90d9396316c1d752\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-x64.exe\",\n            \"hash\": \"39a32b6ade5d5ba369332d3be61edf92695ba536319b1e04f50fbbc30c2b4731635887a260757849aba4b3c1e13beeb7e88adddbb05f8b4916f821451d54eb7f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-x64.zip\",\n            \"hash\": \"e4ef642a5f02245a44424559f186d26a4e9a6ffa9bea83dda7d439d86eb97419f618bb5479572dd7f48a4fa981b3f88125e74c14c2a7e1ffb04cb8b083bb245e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-x86.exe\",\n            \"hash\": \"468bea332a0fe41590b9a6e274c9b9bee25f3b1350a1261eb563b9f704f3bfb5efa8468629b7b27839328478f9e5fd7a7a492e7dc2dfaf8da8a9af4a0ff0fcb0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-x86.zip\",\n            \"hash\": \"cb301f9e380c0223b7930dabf86faa3430465eeee73fd7a3cbd36af3759109a54f2028089a4bad233d3a2bf9ec107e0b20cb55f708bb263ac890a223dc942d22\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.421\",\n          \"version-display\": \"6.0.421\",\n          \"runtime-version\": \"6.0.29\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-arm.tar.gz\",\n              \"hash\": \"2c6728e52656051e31999811a7d2648244b03d5a5882fb07b14c214211fa233944f8da7da1f35b73f43a579dbc3949d6426502fef26f795e73de8adab9b8ba9a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-arm64.tar.gz\",\n              \"hash\": \"2713e16d70d9cb5bd6d3d2da385c75c8cfe6ed3187225efe6715d595b1b1b17d0a48fc7044cb514add8918875c5f281196f09686c11c7524fe9397d8bbe1f8aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-musl-arm.tar.gz\",\n              \"hash\": \"788fbba5274f7a01d67c4bd99f53f1d3769c65b1e6337109f53356b0a50a2e53015b1694a6e4b557405193889d7fe89f04fd73a9557e88c707df599628243d4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c3a5c20a1495d0af5fd3e6d1f62bfbb84cd7fcab545a7b75bd1321f0ac6a1c1ab4fbfa2b7411544440dbd260a2e02ea744dc95973c798f8554b0741b6f22136c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-musl-x64.tar.gz\",\n              \"hash\": \"ddf3c6f35a5e319329f4aaf10e5e7789a3777afe6f77f0c8bfb7ed0329eea6a19636b8bc156b0f16780f1d7dd85b4299eeb3a7d345f90d3a273147a086f98c29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-linux-x64.tar.gz\",\n              \"hash\": \"aa2c1fdc06c477acbb8ca938895f22373a96e96bb75028b496ddf3d433a1e347f3f765b414e8e09fbf1da1cc50f575e28572e701693bad2a33f9b92437a7d3fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-osx-arm64.pkg\",\n              \"hash\": \"005e1693d263938d3ed7c658563fadf363030f163619547832020f4e1365da872ce4b770d39c49dfef33827e91cb53ed4dfa49fef9f2d6f51fb2c8899685535f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-osx-arm64.tar.gz\",\n              \"hash\": \"83870fbe802cdea4ca014eb5dc0cd899deed952d8cfeb862f74bf68d80bfa81e814a3d90381615bb6e26dc39bfcbc82f975462665bf65294d25249e2ea365332\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-osx-x64.pkg\",\n              \"hash\": \"d71fecbb358bae9ee10e8561f56463513e6a15e385b2b80242deedb8b190b6682e68066d5a6102f41efc81df31b3ea78b03b9b1d11044fc1ebc1580c617c83f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-osx-x64.tar.gz\",\n              \"hash\": \"93570a4efc929050b36ad53adca2be803c4cd8ebd9f2553b0f3e325af0629f9854ed39ec8ed0bde4302985c74143763b3a7bef89b1bcecbcec99e137777181d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-arm64.exe\",\n              \"hash\": \"1c38167fcac951f641602e7ead6c5c387304de706e9afe344e7ae06f3388136bc1ee17a375730275d53709be467534fb2d27e282f185a25bc3fd0c52f0a0ff33\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-arm64.zip\",\n              \"hash\": \"4e35f553539b791c9cc4965104c81d7292f32382266a090c5fc8f482d25527bf8c4f4ca64fb746f3772d017940b9811b96680d34c441abbd90d9396316c1d752\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-x64.exe\",\n              \"hash\": \"39a32b6ade5d5ba369332d3be61edf92695ba536319b1e04f50fbbc30c2b4731635887a260757849aba4b3c1e13beeb7e88adddbb05f8b4916f821451d54eb7f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-x64.zip\",\n              \"hash\": \"e4ef642a5f02245a44424559f186d26a4e9a6ffa9bea83dda7d439d86eb97419f618bb5479572dd7f48a4fa981b3f88125e74c14c2a7e1ffb04cb8b083bb245e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-x86.exe\",\n              \"hash\": \"468bea332a0fe41590b9a6e274c9b9bee25f3b1350a1261eb563b9f704f3bfb5efa8468629b7b27839328478f9e5fd7a7a492e7dc2dfaf8da8a9af4a0ff0fcb0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.421/dotnet-sdk-6.0.421-win-x86.zip\",\n              \"hash\": \"cb301f9e380c0223b7930dabf86faa3430465eeee73fd7a3cbd36af3759109a54f2028089a4bad233d3a2bf9ec107e0b20cb55f708bb263ac890a223dc942d22\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.129\",\n          \"version-display\": \"6.0.129\",\n          \"runtime-version\": \"6.0.29\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-linux-arm.tar.gz\",\n              \"hash\": \"45f4c5ecc038ef2a2fce4d62cb1a1b8d9f7d0208c42364f9b63494ffe667254b95373665562f18a1f42a7c0814b013f14108118b8f24e3b56d81e5c932ce1574\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-linux-arm64.tar.gz\",\n              \"hash\": \"58185fa68b9a7bd373b8c4ad9f2d14d0379e6758007bfbe52a640cb432eec91267ff7df94fc57ec0d0d16b8ab5a0838a623c31d3cf36384b3a77697d3a8cfd86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-linux-musl-arm.tar.gz\",\n              \"hash\": \"6a97611f0af53eae49942d6dae08fff105deaaab4152137d90a8d616db418a17c9a197a30c8707cdf349c62eacea4a7ad5cbc019535741deb1a2b4ef4b023844\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d194ec0946ba3bc05cdd1ebdd94df6e0e62303f268e2ba897991c5bea315f0b4e008c4e543c5aed23fd34d6655c03640d4772eef8f4ea6e5d7f006166ebd8011\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-linux-musl-x64.tar.gz\",\n              \"hash\": \"151fc0dedd858c37dcbd1b2f813dc5a1d78eb66cc0d680f9595c26cd6f6f52ee8baeb1a4beacfda1437beaaa46d781faebe54e770fda20249f13f8f65ad43dde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-linux-x64.tar.gz\",\n              \"hash\": \"fb4991e5b0297ea0c65dd84300f0c11bef4589b19012556f67eb10970bd3ee50a58bad59023e1d266a8d9688a71c23458e0d21b8cd9adb75d21c47b59987aabe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-osx-arm64.pkg\",\n              \"hash\": \"ba772ba4b719220feeb7dec5335c0d1082ec880d1e3850087ad4ea6164929d56e1d5cf73da960940a3aea50cddb907ec9d3b19a86b98a117f201e16dff73bd4e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-osx-arm64.tar.gz\",\n              \"hash\": \"065a6b54fc5044d335371c6244c633d3a64d6813ebcef9db19fe0dce4f15c381109b537efab8ff1a9850d83721b0783b4f5f58c048cd6e8f05a32d12eebd430a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-osx-x64.pkg\",\n              \"hash\": \"8798d5c32384288789d65ae430fd54a6eebf21c2d18caa822ddd807bfc097026697e9c60ce6114f8d0a6c435365389ad646e11e58aa5dc15502d64f96fdcc03d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-osx-x64.tar.gz\",\n              \"hash\": \"b4b70a211eaabc9b3a34fe197ca4c69e4a167484445fbbc6df326c972047c813a6ef9a89830d0105ffa00bc8754f8b728e102fba35f89fd9caafe139d45b4eef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-win-arm64.exe\",\n              \"hash\": \"29ff714eb6af9a429f592e8e30b7af541db9d365a8712243d4ac6f68d1616ff88f1ba520d4773b6221aa0d77bd8b552aa265465ea227fca585c6513e14a139cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-win-arm64.zip\",\n              \"hash\": \"1fab6161b5776efe044affbb60ea2f40b713be1cb1cc19fd9b99f925326690e95c2cd11f7d3e75732fbd99a2765a590ecad6940fdbd13ae67c01138773103e80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-win-x64.exe\",\n              \"hash\": \"84916c7c105a56218ad04aa19345f5c994b6439bbcb5566aaab9c68f3950e2ecb5a6927f76d7d8c7e6f6c28325f142235d7cde035a3eb882afd9b45f92d46abf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-win-x64.zip\",\n              \"hash\": \"d61d7dd528de072e5af49c3e630e3626e4a14705b220959a94be519cd08bd306a2445f1971fbf5dbe4b2e0aee622169f739020e8fdab5673eaaceae1877b0224\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-win-x86.exe\",\n              \"hash\": \"ab132690bd634dbb30ea09cb90bfc2e69d2e7ca9988bc0f11dfc6920890b687aa1ae6ea3eb247aa194b3c2240bf42ba51461d96bed547b4f52ce3ae2621b54d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.129/dotnet-sdk-6.0.129-win-x86.zip\",\n              \"hash\": \"68af5c1e4d76545675ec844050defc498fba4fd9b727f9c42ab2c001644f92f80f5acd8266ced015bc53ba6b2e5911e14846a4346c952b779e6c9a537e8dd1e0\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.29\",\n        \"version-display\": \"6.0.29\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.24081.29\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-linux-arm.tar.gz\",\n            \"hash\": \"82efa016bf977649c907bfcf192684a4bbd9bc1f5a0b3f46be8aa7aea4965b570c72552a2617926ccd0624a74f9aa04ab2298aba8ebe4594b85f3b36d4ec7eec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-linux-arm64.tar.gz\",\n            \"hash\": \"6e4a504f37ba4bf7d0316d2a3077c5088962c8b8445b659fa05844697bd11427afabacb6fee34094aa4313dd6dca70c862c1c68b30731b12b4451bd59067bc8f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-linux-musl-arm.tar.gz\",\n            \"hash\": \"a22b41e57b80e075d23d4e0d0dfb3df3c9ec6df43c033fdc69cef9d5de41e8fc2bc9ca56990b5880941acede83599c93f79e46c2b10b71b067f227a7182414b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6eb6cdec88728aef28655b3b15161be5ec2871b9a7dbfdfe2002d02aa4682558871dbc78f1521639f7097b314476850f716955ee8d815a24c1cac10cd2d4bcf8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-linux-musl-x64.tar.gz\",\n            \"hash\": \"320680311296f39782f60bd3ce8cac802219b9ae0a53dac243ce995f0ed91b3235bc172f06960dfae0229dcda42e6858f1a1f4c0cf12e8cf936323f6628f72f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-linux-x64.tar.gz\",\n            \"hash\": \"6dc21e1a8dd597df9c1135065f7350bbde9cc040c3079ec7850b0e5f254051b883c6c6e0056682d2963ec74dadff8eb32d82c13b35c9088f3d7c055d3d3f0863\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-osx-arm64.tar.gz\",\n            \"hash\": \"a9ecc77db6f0fd8e5ff70ac58ae3549b766694d30a93cfd41869ceaa298178fd2c0e86e4e763d8d7a5e2236d42faf2e87d798d2853f8391a73a40f5193f4fa71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-osx-x64.tar.gz\",\n            \"hash\": \"f4405bcf40a075a5acbd8f4ced424efb0b2de49a5f81481c708a1942c1e92e3a69ea8a4d59b55c025092a59e2715d260521fda56618f250d1484fe18dc4cadf4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-win-arm64.zip\",\n            \"hash\": \"364859dc777b6abd66625d4069ea5bb4ce7fff27a6ca4b3aaa1345f81e860a9c88dbe45e8553e2d6de466dcd9b1403bc4a1f7eca2c0fa3d9be943cba10a0ebe8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-win-x64.exe\",\n            \"hash\": \"e0a930eeb88c0ae6eb8f0ff964a3d2480d0d3b0c5a0d97553ed2ccb661b3c2d6d2e3302a294731d45d158488825e38310a0a59da91cc476ffe72ff2d9194c0a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-win-x64.zip\",\n            \"hash\": \"3e34dbf53cef758bbf6fd6eacc63d209f35f96977be6dedbc7bec2aee9dd442d97d2bab03999b452119f0a67a31da58d0e01075a257f5cea22ad995f93d0bc6e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-win-x86.exe\",\n            \"hash\": \"e7d86eb3cd7803fdb00b7f4779a7e353d3ffdd3371548c81dbbecb174858619a77d3bc887f5e3bf124d67517e3d6f8327d742def284ff4dc8f7e9d5a9e3d1d25\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/aspnetcore-runtime-6.0.29-win-x86.zip\",\n            \"hash\": \"a80f691ce9f76426e2d01909d9273219eef42765241d97558ca73b64fa3459ca0e83281276727442b8870a32b8fb398bcaaf5d6ba5385acc32bad92b5981b627\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.29/dotnet-hosting-6.0.29-win.exe\",\n            \"hash\": \"62d5a25c2a8812ef2b77528617c3698f4cb5d632e87740c8ae850348ef3b87e001b38dbf8b08d67e446360a550f652c9508cc9ac69f0068abeafd9557b023b1a\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.29\",\n        \"version-display\": \"6.0.29\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.29/windowsdesktop-runtime-6.0.29-win-arm64.exe\",\n            \"hash\": \"bc5870d1916c6061e82f1cc3869cb8f303ba943c9928676b241843d167b37d3a411a22e1305e06360ef47bb35e8b6148b065c66e0a2b99f7a71941fe827efe56\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.29/windowsdesktop-runtime-6.0.29-win-arm64.zip\",\n            \"hash\": \"c58b098ff25feacbd9359eaab9a9796aba5bd5491cdba71d094aaec7c32008cabb8c05b6d7cf18a9759f77d6f53462eb894bcc3afbfee110fbb9d054cf0d4341\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.29/windowsdesktop-runtime-6.0.29-win-x64.exe\",\n            \"hash\": \"63a285e8f00f7f408dc88fee512fe51b3905bf4c381fe933393450c479bafcb38ea9b8144c394bdf0ef3ee53326e4ccc059b0323e2b7def57076bddb990f3854\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.29/windowsdesktop-runtime-6.0.29-win-x64.zip\",\n            \"hash\": \"42a13b8b4c6c815fcb1052cce4b9aab9116c0cd7c16db70695569dfe77988ac771ae61b7ac9f4013cbcac13fa9ffa5f79d0c8d04d7acedc463375f9cc884222c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.29/windowsdesktop-runtime-6.0.29-win-x86.exe\",\n            \"hash\": \"b3c1b30a003e72839bd60cf30a70d01c0a13369b226c418d20d0c4e8493fb6187d093150095b212ae6e33bb4a3b282ea371809ee57a74fa35c76eecfd978458c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.29/windowsdesktop-runtime-6.0.29-win-x86.zip\",\n            \"hash\": \"732ea8b63aac52e2e59f96a25d4baf53d7015aed2374e5e75fd6f1f8910ab6bb0134ac5da935f55851ab9d7cad683e14446318d8a646da264a2308569069231d\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-03-12\",\n      \"release-version\": \"6.0.28\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.28/6.0.28.md\",\n      \"runtime\": {\n        \"version\": \"6.0.28\",\n        \"version-display\": \"6.0.28\",\n        \"vs-version\": \"17.4.17, 17.6.13, 17.8.8, 17.9.3\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-linux-arm.tar.gz\",\n            \"hash\": \"7f1549bb1e5c4c760b4b89b5860bad1ab94426e480ef57dd16e29ad6dfc540115275476791a388f3bc18c580a9ee2449b9bc0403209a1149b29315b04d5bb083\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-linux-arm64.tar.gz\",\n            \"hash\": \"84b9b2d9e2e9c8f1f8a35b184fbe6883c469224e72635efdd1802fd4c24a56b672427ec016d8f57b7c1bed4342cc77b7af1a613b225b1259ccbe634e75799d58\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-linux-musl-arm.tar.gz\",\n            \"hash\": \"506fae33908a93bcb4d6d9ac3515cbf7b29b772c5ae6cbdee202b72a02db6fe235193af0c8bef939a896720b4e63d6802a556f994a70020c26d69b8578f96dff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-linux-musl-arm64.tar.gz\",\n            \"hash\": \"881d19337236d1680cd33ada05f6577787bc0d4b8b80037e18b871ea7bbe15971d6b6c635c5e14b1c4f3d47ed753cafc3bd468b2d426491cfcb7b8be2029561b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-linux-musl-x64.tar.gz\",\n            \"hash\": \"751ba56cc0d83f589930292260b9dbab3ff13774e1415f9bb6be4c94f8c46f98e0a6336085d7cf02cbea09bd690f5ca9e642adb73385fa8afb42e4a91b965f29\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-linux-x64.tar.gz\",\n            \"hash\": \"5e9039c6c83bed02280e6455ee9ec59c9509055ed15d20fb628eca1147c6c3b227579fbffe5d890879b8e62312facf25089b81f4c461797a1a701a220b51d698\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-osx-arm64.pkg\",\n            \"hash\": \"c2a3f2a1656240f0935a5b185b62a5f28fc519a8c4d361df4d5e1a32ee4bdd1be84a8c7754138aeb5482aed71595a36725edf996e006e60c530c0803927ad98c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-osx-arm64.tar.gz\",\n            \"hash\": \"708a1421995e3e64457f91685463bdddd6df22d21b6fbb430fc2c830f48fb6e785e6a575e923eb5fb21483a0f956b93c2c4905d149fa62c08bd4426b5e2e459c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-osx-x64.pkg\",\n            \"hash\": \"3cc8f577c351fa1c04e848e6131d8abcab78469024420379c58556bb820dab8937e1c7e0ff3a5b8f7af1d04abc84cb44f26ea89eac5643a7c058c50f16b2a747\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-osx-x64.tar.gz\",\n            \"hash\": \"29beaa0d6889163cb8629d276961650e230d6393aa735a36865d6746caf8c5bfdb827bc382821418b5ed6b3db5411497ae7b85e99413e189e754719c55ed7bd7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-win-arm64.exe\",\n            \"hash\": \"9e7d927dbd2ce758b4c17802dcede7c4af5a068ff7fb19c5bfecf20b9b1bbc6afb308ca53f59dc56d270272fdc10994c06d9afa4e5555bf7f0387ac4d300d153\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-win-arm64.zip\",\n            \"hash\": \"abf4d6925e95c8b4bd0a79d5e10f4b2db438ee3ccfa253502bc1cc3cd5420f41725de4f36e79c5e6c028a845a40a0c9d7376adec81645b73f856d9b5f7981c4d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-win-x64.exe\",\n            \"hash\": \"9f6a09abc5402ef272ef45697637faad63a5d8787e0a147ce68a855a635b02fd6d5ae6696fb570eef3e741ce1333d0d058450a23662d76cf6c0226c8b3595bf2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-win-x64.zip\",\n            \"hash\": \"dd1b9bbfd97385c8486039782046279e23d36d7ce2b2ee33432b5e8c1d504e5cef3fe774fbc954926284a757e6b131700a4b136c41f3c66cd270a3af149f40d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-win-x86.exe\",\n            \"hash\": \"b767537d7223011200184efca5c90a6960529623724dc7404b8be8e09323960907adb9bdb49d376f08b9d017315f9ea081109f1477aa90620ad21a4730fceabf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.28/dotnet-runtime-6.0.28-win-x86.zip\",\n            \"hash\": \"5f7170480e314ddcf008da941bc915861199e064485643cb2efff84e0997e4f8b930ddbcbb9a57bb4bfed7898880b51e6d7c1f57b64b44899f688cde0733d853\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.420\",\n        \"version-display\": \"6.0.420\",\n        \"runtime-version\": \"6.0.28\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-arm.tar.gz\",\n            \"hash\": \"226a4bfeb1238178c56a7c9ff37ae21bb59765b8ee7d05b09148208bcdd3a98db78a3cbf346de70c8d20a34c777a8475c3991f3ed1bd47cf8f41e658216229c4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-arm64.tar.gz\",\n            \"hash\": \"6625ab63705bcdeba990baf21a54c6ddc0fc399ee374e60d307724febd6dd1ca4f64f697041ec4a6f68f3e4c57765cc3da2f1d51591ec5eec6d544c8aee4f9cb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-musl-arm.tar.gz\",\n            \"hash\": \"0b2f4aae7c5762b5e9adec59fefea1265880bd2c6ad282e33de3e99d9d837e15e9b1a5e7939ddf6868a110bce4e473c84b01127699d247ca12fc89cd9c729fde\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0f83cdaf9919f0710b9a92c2c2e490d9051fde38ba8b09fc9d9c7a9a2400557c00dda57f5335cdbbc36836bd13dd5dc8b382510d078dd8d05b0fd42ba8ba166a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-musl-x64.tar.gz\",\n            \"hash\": \"5e302668e6b36414aa6c78d8ca2e1052e3fc857e359a3e28c6d2cb85174bb43d75e9565a8f2621467a99a634896bcdf4bc6733b6f6f1fed4dbaf6239d5c5e595\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-x64.tar.gz\",\n            \"hash\": \"53d6e688d0aee8f73edf3ec8e58ed34eca0873a28f0700b71936b9d7cb351864eff8ca593db7fd77659b1710fa421d2f4137da5f98746a85125dc2a49fbffc56\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-osx-arm64.pkg\",\n            \"hash\": \"b07c218a2ff54fc66af291f18c7fd1c3f660c772288110d1e8407f55c414e0d5eea3f3f4a7f1ec24e6525f0a433412fd663ab65ea3516b7ee254cc10137d9aeb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-osx-arm64.tar.gz\",\n            \"hash\": \"b19ef70a71a5bfe78520bd790e1490b541791e02dc5331f9a00ef14abed7f5b0c3bdfa2f4595d0c312256431aa6eef0af63e6dc2b1d140408d3e7285bf452701\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-osx-x64.pkg\",\n            \"hash\": \"0335aa7154081ec3a619bc0b764afc54ae2f999198174eb73dd2353d492749447c7f8514d2b1407865f2453d2a0ffa59599ff09a7295f910fc411c0ab88b863c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-osx-x64.tar.gz\",\n            \"hash\": \"611c7a8b89575fa4ee4fbe345d002e953eceb208c7751d72764d9347c67a49b019d4e0150cac84b0b51e181c61efbcdb66a10e836ba4d94b89da875acb99a556\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-arm64.exe\",\n            \"hash\": \"4c00262437f89ee88c9c8e21796fafabcbd5106cd396c068456d7f4410261d90e87f002e7fcf89621c6bb3406c1fb0812661580c9396b13031a7122df387de3d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-arm64.zip\",\n            \"hash\": \"82559e35052de846165e7b16ffdd067f2361024f1c7d6cfebb21262241c7bc337cfeaa25b5c173547b4ea7d2b66107c0ec8674119dc5e53a5d515d24f71e82f5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-x64.exe\",\n            \"hash\": \"bd7118b96faaea98d79a55163f858b1013ea4754bb89892052bdcc1da5e1c16c395da842cc6d6b6384ba39a29ea7fd3f2465e7876f819377d6a2f41b292d50f6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-x64.zip\",\n            \"hash\": \"871406108ff51ffce161cfbbdd778f3410041b270ecaaa03dfaa5a5315e2c546a16fb298a2daf7a04d92c30317e101bfa90efc4a2d0123de74c8b6a46db18654\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-x86.exe\",\n            \"hash\": \"e3e7cb257e89990f1f38b42291bae2c110e99f134e3ee3ee57e8bd5573846ec3b2aef2cfc4fee08fcc1f6b964e4a0448413f076b869744d93f49bddc358c6389\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-x86.zip\",\n            \"hash\": \"2c4969eeaaf8cec52cc0200d2c7d02adf3f490d0a8d1672cd97b308c8a136f08699fe8c86ed5fb52a2e87375afb4471c578ea1fa9debb8052a44e6dc63b223dd\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.420\",\n          \"version-display\": \"6.0.420\",\n          \"runtime-version\": \"6.0.28\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-arm.tar.gz\",\n              \"hash\": \"226a4bfeb1238178c56a7c9ff37ae21bb59765b8ee7d05b09148208bcdd3a98db78a3cbf346de70c8d20a34c777a8475c3991f3ed1bd47cf8f41e658216229c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-arm64.tar.gz\",\n              \"hash\": \"6625ab63705bcdeba990baf21a54c6ddc0fc399ee374e60d307724febd6dd1ca4f64f697041ec4a6f68f3e4c57765cc3da2f1d51591ec5eec6d544c8aee4f9cb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-musl-arm.tar.gz\",\n              \"hash\": \"0b2f4aae7c5762b5e9adec59fefea1265880bd2c6ad282e33de3e99d9d837e15e9b1a5e7939ddf6868a110bce4e473c84b01127699d247ca12fc89cd9c729fde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-musl-arm64.tar.gz\",\n              \"hash\": \"0f83cdaf9919f0710b9a92c2c2e490d9051fde38ba8b09fc9d9c7a9a2400557c00dda57f5335cdbbc36836bd13dd5dc8b382510d078dd8d05b0fd42ba8ba166a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-musl-x64.tar.gz\",\n              \"hash\": \"5e302668e6b36414aa6c78d8ca2e1052e3fc857e359a3e28c6d2cb85174bb43d75e9565a8f2621467a99a634896bcdf4bc6733b6f6f1fed4dbaf6239d5c5e595\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-linux-x64.tar.gz\",\n              \"hash\": \"53d6e688d0aee8f73edf3ec8e58ed34eca0873a28f0700b71936b9d7cb351864eff8ca593db7fd77659b1710fa421d2f4137da5f98746a85125dc2a49fbffc56\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-osx-arm64.pkg\",\n              \"hash\": \"b07c218a2ff54fc66af291f18c7fd1c3f660c772288110d1e8407f55c414e0d5eea3f3f4a7f1ec24e6525f0a433412fd663ab65ea3516b7ee254cc10137d9aeb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-osx-arm64.tar.gz\",\n              \"hash\": \"b19ef70a71a5bfe78520bd790e1490b541791e02dc5331f9a00ef14abed7f5b0c3bdfa2f4595d0c312256431aa6eef0af63e6dc2b1d140408d3e7285bf452701\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-osx-x64.pkg\",\n              \"hash\": \"0335aa7154081ec3a619bc0b764afc54ae2f999198174eb73dd2353d492749447c7f8514d2b1407865f2453d2a0ffa59599ff09a7295f910fc411c0ab88b863c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-osx-x64.tar.gz\",\n              \"hash\": \"611c7a8b89575fa4ee4fbe345d002e953eceb208c7751d72764d9347c67a49b019d4e0150cac84b0b51e181c61efbcdb66a10e836ba4d94b89da875acb99a556\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-arm64.exe\",\n              \"hash\": \"4c00262437f89ee88c9c8e21796fafabcbd5106cd396c068456d7f4410261d90e87f002e7fcf89621c6bb3406c1fb0812661580c9396b13031a7122df387de3d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-arm64.zip\",\n              \"hash\": \"82559e35052de846165e7b16ffdd067f2361024f1c7d6cfebb21262241c7bc337cfeaa25b5c173547b4ea7d2b66107c0ec8674119dc5e53a5d515d24f71e82f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-x64.exe\",\n              \"hash\": \"bd7118b96faaea98d79a55163f858b1013ea4754bb89892052bdcc1da5e1c16c395da842cc6d6b6384ba39a29ea7fd3f2465e7876f819377d6a2f41b292d50f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-x64.zip\",\n              \"hash\": \"871406108ff51ffce161cfbbdd778f3410041b270ecaaa03dfaa5a5315e2c546a16fb298a2daf7a04d92c30317e101bfa90efc4a2d0123de74c8b6a46db18654\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-x86.exe\",\n              \"hash\": \"e3e7cb257e89990f1f38b42291bae2c110e99f134e3ee3ee57e8bd5573846ec3b2aef2cfc4fee08fcc1f6b964e4a0448413f076b869744d93f49bddc358c6389\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.420/dotnet-sdk-6.0.420-win-x86.zip\",\n              \"hash\": \"2c4969eeaaf8cec52cc0200d2c7d02adf3f490d0a8d1672cd97b308c8a136f08699fe8c86ed5fb52a2e87375afb4471c578ea1fa9debb8052a44e6dc63b223dd\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.128\",\n          \"version-display\": \"6.0.128\",\n          \"runtime-version\": \"6.0.28\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-linux-arm.tar.gz\",\n              \"hash\": \"e7a6428044e86da8f570df3335462062e322e8fc4433e3b6e08884240bb7897709eefc633d93a5ccc9503d1abecf13cd0fe801b81451f390a5af1b38bfa8de91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-linux-arm64.tar.gz\",\n              \"hash\": \"3bc341f842346f0fae948c4ff4d52a14c7ebe09aec8e76afd19f8441e52456f66fb32998ea19354053fb4994d38ac7b0572df39708d6e7ba53623a73138cf6eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-linux-musl-arm.tar.gz\",\n              \"hash\": \"b04fa55e17e4cecf680636743b078b8781903d0c7086bc85bfdde3a0f50c557e8d29c4213b916d1bfd735beb8525dd5cb47b1c1f24235a8c729aa8a69d559c10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f1a5e7b6654cbcbf78d1af958199c101cf0f72031e7633a0c9ad5f19ab6c0662cc5b8ea971383ea8fb16342480f9d08076c6cc096fe4596c3f59b56f3a9bf8c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-linux-musl-x64.tar.gz\",\n              \"hash\": \"ca11d57726faab4aa3bfbed5ff26befd6f9d7992f54601cd939b19af7a2e0ddb426a17fd68e7945a06712c354bcfc24643d16c768172256c3a897fd9de68a0b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-linux-x64.tar.gz\",\n              \"hash\": \"0f282e8b801e37b762a8e0a8d98df8d0a566973f60b8d99d1f08622ebf00655d65d682d971ddeb0d3594ea3276382dc6e2a96de22e6b22e4122b57f0054906ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-osx-arm64.pkg\",\n              \"hash\": \"c84a0744cc0a159bd3235a3fbaf62c802d835b5cac442106dbfd49fbc615ded9b2bbe998e787dbc53f128d247df73909f2292f05336f828469d29e1604d2ef7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-osx-arm64.tar.gz\",\n              \"hash\": \"7bf615a8ee80839a46c1e6d70b34774ffe049f3a5a5d1a215eaf94c50a451e5c31e4f3bdfa5e42772f2735d541db78a68bed6330a2c68369237876ac31be238d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-osx-x64.pkg\",\n              \"hash\": \"ce67514dd73fd3d20270533023d29251cfbccc29658c90cc71ad17bf2dde61949c9fa3ef8df53509985fd886d25f0853b8fd742e0b5ea081fed2ddd179ebc0fa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-osx-x64.tar.gz\",\n              \"hash\": \"eb696e628a92ca18a841c23958e5efb0e0881299062301340786316db28f9e5b4ac60ea2d135f7b39933fbc88b37be315707c5dedec73792958ece299c5cee39\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-win-arm64.exe\",\n              \"hash\": \"7567f58718a96b68c85b4078480f44be0031e13174c8a949cdf2d3c06121630c145aed50b3027d0d96bcca918b6ab08e1f87238af6814ba5546c00cab8fa35c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-win-arm64.zip\",\n              \"hash\": \"2f881ec651389558f114542d00875e1beb14763039e0f5f30a7d2be1d22e633560ac425442291c497c7c7c6f7740dc88fa754fa384a8cc582ddbe7b7d3da0890\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-win-x64.exe\",\n              \"hash\": \"f021cba314e257b3c2a7064ad912cca858ca6367b142d448e2dbd0771dbcf19bf3f531207d65f9e013d231ec5a1337a240c9c665d051f561afa677f5eee32624\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-win-x64.zip\",\n              \"hash\": \"1b8c21ebe034448bcc5e320ab468ccb3ecee0342a7c0c7293922db26533e3a9d47596c838b06f6d6e151b3a1a6d27e636c807876e7b58762a1f7cdd64eded135\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-win-x86.exe\",\n              \"hash\": \"799f6d5269c7f4e3de914d466431d00f588c16a38ee17304f4b8d073365c2db4d4009481ff9f539c54b2757e4d2515e942878bc8d072340fcb56cc91dcd6e5a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.128/dotnet-sdk-6.0.128-win-x86.zip\",\n              \"hash\": \"c806fa1e68f3eaed93a9dc5119d3f0c361cfcc114ed771a1f2e0ff772acdf21d58f08a25368038f1db28290f2c932d9245e8d04946dc0d0ba4144d6ad64ff16f\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.28\",\n        \"version-display\": \"6.0.28\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.24052.28\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-linux-arm.tar.gz\",\n            \"hash\": \"6a6787f692f27fd8e437787cbc69840c7e19723db5d155802b2ed86917d6e8ca7d114782839a167dee0b23c3af09c9d82f938aa7fbb6c66a10bd510e577e40b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-linux-arm64.tar.gz\",\n            \"hash\": \"932773d9aecfe3918c0479f44d5ca7d643cc7bbe632421ea78326605dd374e9df904f49a2c4279cab0af16be55f41c8fb8e04590aef55ce13c728f9a64d3015f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-linux-musl-arm.tar.gz\",\n            \"hash\": \"a2e8499f4e9171b0ff6dc9048c1bf7a6974208f0f8bddc3af5b35da17b275f5b58479a543f974be875fda295fb9b00c87f760358b854edfe0bb6ecd893488539\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0166ea4b46dd483dc17023557524d6d554d96c0955c44f565e11c948c4c19285ef806973ae4660999e78637709b73754d1eb91c0ac6c8e05b9c71e5d4ac7a979\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-linux-musl-x64.tar.gz\",\n            \"hash\": \"74cf511026f5d5926bd4a16b88c711b87810265d85d5c9ed54b12b63c06f584fd4a4053c77d71c4818e8eff187ea31682defb001c19d8176e326afb42f8af255\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-linux-x64.tar.gz\",\n            \"hash\": \"52675b81e026b4b673aedb2d9ee99a79ccb47eab090a059ef9b95615befc034ef7fbe674b01ae813870f73dcdbcfa32906969860a464aa5d356c004b6bfb201b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-osx-arm64.tar.gz\",\n            \"hash\": \"a713927fffc0335c9b25febbae1f75e8436e9b3d4b36fe4860bc104cac393e72164551260bb4804da282f3658c9c32a88ded87c47d1e2e83d436f932dda6cb84\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-osx-x64.tar.gz\",\n            \"hash\": \"40f8a76d68a89e62c4300f4f111a9001be0e4664ab6bc07c6718e33a31768e6b8e2bf130ca561628c85e9e1718c26140a8b98465d78fd13471e580148cd1ae39\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-win-arm64.zip\",\n            \"hash\": \"5ddc2f96c5535bf371d01d0d4b09f1daea1cdc32464283a8a181536d0859b643d02330292074763160d54d4abcd9f65ea3dc0bf43d88d04a079a2b5de3320bea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-win-x64.exe\",\n            \"hash\": \"8bffca6a8c92ea2b438e01857028cc8fd2904900f6e069b976eb1d246221190e05cafb223491ffdb469038034c2934662a5715603b0623662756abb4e3fc26d8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-win-x64.zip\",\n            \"hash\": \"8b9245c6dfd0e9d5603e29822675ad162ac80b161bfa2b74340f1a86e0481a65c7d98bb0060f4eadb4f3a16c2b56aa8a298eaaca06a3dcf1929c67c6fc866899\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-win-x86.exe\",\n            \"hash\": \"abf39d5ab7e1e9cfc927f0b18a16235810e2851f86f239abc674023d1da14bba534f641a44616e0fc3593a780d19d0cc5d833186cea2f386f9ec2d80bf136516\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/aspnetcore-runtime-6.0.28-win-x86.zip\",\n            \"hash\": \"2b75146cc8b5a6d733593df60bd27acd38e124d66772ae8beb0cdc1f27bec1bade5466be47da39aa27f5628ecd504dc451954d61c5a54b90b3c766bae59e5144\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.28/dotnet-hosting-6.0.28-win.exe\",\n            \"hash\": \"740e0e2e60fa763f67b981ca061733929ed08fce1cc0660cfefcb85c30d0b607cb94c9ac3877b1c015050726170e1e47b718e8a0cefc968a29fdf5bfc4da7ce0\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.28\",\n        \"version-display\": \"6.0.28\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.28/windowsdesktop-runtime-6.0.28-win-arm64.exe\",\n            \"hash\": \"ead47113e3eac7009fd8224b869d09531f6226cae55b3325f23b0860b83a3dec30df02c8fadf04d8fba476ada1ac65b3c2c2d9bcdff6b1728161fd4501d73723\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.28/windowsdesktop-runtime-6.0.28-win-arm64.zip\",\n            \"hash\": \"6bb595a365a31a8d4dbdea78a7998bc9a2a75fda786106c6e80b279d408b1c3806005217cb074c4e1541a60424926c74072cc02fa27672fa976d463879e94b5c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.28/windowsdesktop-runtime-6.0.28-win-x64.exe\",\n            \"hash\": \"984ff5f50f0b59e1edde0926858ac63a5605ea9f2c3e55bdb4fe81aaa805f033a70e43474858187c0c3e7358d4dd9b06b8aea1fd1b15dd0d0c3fc9c1d20cbdaa\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.28/windowsdesktop-runtime-6.0.28-win-x64.zip\",\n            \"hash\": \"572c94cdb0e9a7ea8e927f918521237081cdd857446a23bf9299798d890347c493c30b5854ccf035b97b1f2fd950bcbab2746d1d8aadcd4160b7534dd3b93501\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.28/windowsdesktop-runtime-6.0.28-win-x86.exe\",\n            \"hash\": \"4d6f5addb5ec088eacead3d6155d9124770be5f60a779e9f159ea5d19a66de2dbd62ec834eff242d821de81f0aa68f7bf4cfbbc8c916613176d56662c6619dd0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.28/windowsdesktop-runtime-6.0.28-win-x86.zip\",\n            \"hash\": \"7eccd570d4623145dea52d5938cec96ed5809b80a1078e2161b95c95a1876f9b8e0d403b4fd0c035abddf8cff8f7b0637143bf7a635e579b0527cb98562f4d0a\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-02-13\",\n      \"release-version\": \"6.0.27\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-21386\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21386\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-21404\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21404\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.27/6.0.27.md\",\n      \"runtime\": {\n        \"version\": \"6.0.27\",\n        \"version-display\": \"6.0.27\",\n        \"vs-version\": \"17.4.16, 17.6.12, 17.8.7, 17.9.0\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-linux-arm.tar.gz\",\n            \"hash\": \"fb0f964ba5086ffd9bbc1467d97deb057db3c07c911a42eeee60cd6f35c3575efe45fe073648d803636f642fefe04774eab5e62a3f3b6afc4aa97087962d2c60\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-linux-arm64.tar.gz\",\n            \"hash\": \"2e9772089ca8d548201d02542ba2013506530183ea6f52e8907afa608662ae967579add6d9704b75c22f2639667ef87682a7ce92aff05d51670e9354e52df1ee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-linux-musl-arm.tar.gz\",\n            \"hash\": \"2eabd2cfcac1061d93b0ff45891a95cd74dbf0959f5281609d763f48ca97f4e97ba32b02820f9c3b5a18be757666d2781fb6eca12623ad2b6ede3297b074a937\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3efad6050ec2bc3a2df40aaf8d16761be204ea866728d4b2c09e0ba4f4dc46225ba683c1c8a1ed446d2aed80e6d9c8eb46892fc6f28f2b2107bbc4d277de2d76\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-linux-musl-x64.tar.gz\",\n            \"hash\": \"b090b5499954ad246f136e64fbbb6ff375fceee7f0933d758ec2c595275c54aea353453b755f42d9ed300449c9d7b24dd13ff27c325869eaca2f01b8dba880af\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-linux-x64.tar.gz\",\n            \"hash\": \"448c4419e6c5b52e82eebaaf8601bbe668a0c8bb3293a6004125c7305b38072f7d2236ebffcaf4a71901b61b22ce66ae8b077af6321ba14729be385f228be04c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-osx-arm64.pkg\",\n            \"hash\": \"5291d1e71df042d2a0a950f1a4f55b9fd2e752e722a9d67aeaca7e1d80b66d442e8f86eee6ccaa41cd4b45553f0551881a1aa680c9753a8f25a3c8cccebb0811\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-osx-arm64.tar.gz\",\n            \"hash\": \"5394fb21a6c4748ccf12c47c3774ad3a193ab3dec263161bc90522bf3b2de3dd65c0102a33a9c946c2b88588fc1d6083ee4c9c683d173d7f371a98ad78591705\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-osx-x64.pkg\",\n            \"hash\": \"78c9d676521a173d02ad9d60061fe74f9512fbe9c0074368a95ddafc541b10af6d717e29b6130e6500fda78dc97886d1466151f7db70f753dc17d748f262da96\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-osx-x64.tar.gz\",\n            \"hash\": \"c15275726882d2cbbfe8e76b05a9dd6e6764a5889c54b2e40eefd057e39f4c44c2da0909b890e27f463b47b08755a8b83657b6f67c77a460e3009554e85b4942\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-win-arm64.exe\",\n            \"hash\": \"fafcaa8d9c76ede6e0259e9ce126de93930eac5b6e5154759293f230e7fbefd2935bc23b6cf308fdbbceb3edd40e1f904a8eb7e12332f32128da9217f2e8f1ef\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-win-arm64.zip\",\n            \"hash\": \"5a21cc73334da4e913e8fdb60b6dfefe566ab677e475f614444e6e50cb9ff8811e5b15b601dd1a4536780826749d56aa18609f6660e407b939af027101dc2238\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-win-x64.exe\",\n            \"hash\": \"15dec7681699b394f4309da6f4754ff724f330ec5bdbb5cd562699a441993cdcd49b20c96b648bfd47f6a2cbbd0ed14b90c221d3f868c0644dc84707978006c0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-win-x64.zip\",\n            \"hash\": \"d1e68a924c45bbde48e0b3a0ce0f14fe061a231dd6ca55c434a095f4c779f2cd3331f8b5d2d845864ba51e71a9877b9af4b22e435f4fa2717bef7be9b8674054\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-win-x86.exe\",\n            \"hash\": \"a3a215dab0a5034d4e346ec5e7287a95ebe89c64948cbd2c1471a719e6cca50d2601b7dd30a7155b5f474658a6e0ffaf677e424c97daa564bf2e4388a2211892\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.27/dotnet-runtime-6.0.27-win-x86.zip\",\n            \"hash\": \"ec81c2f33dbd7ec40122116f0c187e92b001794fed351b9130feb5566beae64f4d5922b4bebc1508c5559f2768f31fd0d15bf795731fc562c2c130594f1de878\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.419\",\n        \"version-display\": \"6.0.419\",\n        \"runtime-version\": \"6.0.27\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-arm.tar.gz\",\n            \"hash\": \"ebd3795b6b9e828fb6735156d9121c2858fd225559f2ecf93f0c65280e8bc18197249f3244d8d6a6f0cb84d14f9c3718acd01cd5457441c2836aca4101335392\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-arm64.tar.gz\",\n            \"hash\": \"c249e5c1d15f040e2e4ce444328ec30dd1097984b1b0c4d48d1beb61c7e35d06f133509500ee63ded86a420e569920809b587ff2abe073da3d8f10d4a03a9d15\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-musl-arm.tar.gz\",\n            \"hash\": \"6dbbd9607a2a98766c7dc900d2fa7aa8e5fa734f6c052bf5f2bdb0bcfbf63ff20f4ee4a1dce56e9de84da8c44c2ac803cfd0f650ef9e4a9c1a2c5827aef0346b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-musl-arm64.tar.gz\",\n            \"hash\": \"428c594cbb04f0ffb2413ddf50f0a6aa1f66506ef231ca57089f4275fa51a4742ca4130172b57cb40d75b4252705cae232183b4db675c3b67fa54b498c6afc9a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-musl-x64.tar.gz\",\n            \"hash\": \"2a31055f06769ac9495d6d77a913d67791a98094c9ca9730ae66c725386cdfca42e9d3a3b7cfdb327194200afc38e495dab867908773e60a9b92ee99c7c6b92c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-x64.tar.gz\",\n            \"hash\": \"155a9ab33dc11a76502c24b94dbcd188b06e51f56814082f6570fd923cd74b0266baefbcb6becdd34e41c3979f5b21ca333a7fa57f0e41e5435d28e8815d1641\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-osx-arm64.pkg\",\n            \"hash\": \"a73c941be5ee8734d2ff8eaf738132c55b28dd69ea3601bc2c035170cfb452b17b8d801b99506e41227bbec141c689db848d76d90e07533ebeb0aebdbcc5f16c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-osx-arm64.tar.gz\",\n            \"hash\": \"9db6455c2bad80f8c8b312630c77700fd845203ba20cb7022671cf6a22b1663a1742e47eed7a384142a1d58388d8d736b4868efc5ce80b205c949e4ed5d71fe9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-osx-x64.pkg\",\n            \"hash\": \"978e0ef30940c647be4efca48c00e40b9a0ca8ff03490e525723ada8da99b7fa46ebd7413676e58782b3ec8928d4972526f2cb7a46bfb79b1b7e5cc5aeb65566\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-osx-x64.tar.gz\",\n            \"hash\": \"43d9ee7f63131138b9a8aed10ca6797256c029168a07c340ff7a5b2fb43ebf62efcb62a4bcfe669de2b57749223d89028e68bb45e9dfbc0d5341ad5f1bd0516d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-arm64.exe\",\n            \"hash\": \"0b484736a930ddc13e5380cb56d98b3c1e63a983627f2053820de4f26f0dbf7923f9523b74acaa4a7c5b63a6887946b6703415ed7b5cb49639c9d52ea418831f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-arm64.zip\",\n            \"hash\": \"dd4c90996f421aadf71eae7026776353c70b88f695da1da3ba92530607f66ed92f19c9fd41f5326994b61591b704778f8aa9ee56e7fc83d5980d4414a11f62d3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-x64.exe\",\n            \"hash\": \"65a4f4fb78aed9fc7d7e997ab609481b34079b3d1f130f231aa1b82f25381e89e50f3affc894027d7dd6b2c0687d3749b06f7eed26a25155f68d4ff88451309d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-x64.zip\",\n            \"hash\": \"102d1e2ec71b7a1caf169b83f3004d30f1684eb77777a3c8dffa929e0e05d04ce21e585f670c212d4bd840928909605e2d580989cef9bb3f000e790b2da73eeb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-x86.exe\",\n            \"hash\": \"58c2da39735de228ca9fb7f36de505bf50aaeb759d03bbfcfea509b35a7b70a61a6c30ae028bb98c6f208b0586ceacab6132972e9d97e1e197ada15676e23815\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-x86.zip\",\n            \"hash\": \"92abac3bcfab97f4d24454ae501677687b79d677b6f3a421a047761e0e77a00e0647701622077029282c672ad4e515099b23529a3499f1d1dab99483891a5365\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.419\",\n          \"version-display\": \"6.0.419\",\n          \"runtime-version\": \"6.0.27\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-arm.tar.gz\",\n              \"hash\": \"ebd3795b6b9e828fb6735156d9121c2858fd225559f2ecf93f0c65280e8bc18197249f3244d8d6a6f0cb84d14f9c3718acd01cd5457441c2836aca4101335392\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-arm64.tar.gz\",\n              \"hash\": \"c249e5c1d15f040e2e4ce444328ec30dd1097984b1b0c4d48d1beb61c7e35d06f133509500ee63ded86a420e569920809b587ff2abe073da3d8f10d4a03a9d15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-musl-arm.tar.gz\",\n              \"hash\": \"6dbbd9607a2a98766c7dc900d2fa7aa8e5fa734f6c052bf5f2bdb0bcfbf63ff20f4ee4a1dce56e9de84da8c44c2ac803cfd0f650ef9e4a9c1a2c5827aef0346b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-musl-arm64.tar.gz\",\n              \"hash\": \"428c594cbb04f0ffb2413ddf50f0a6aa1f66506ef231ca57089f4275fa51a4742ca4130172b57cb40d75b4252705cae232183b4db675c3b67fa54b498c6afc9a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-musl-x64.tar.gz\",\n              \"hash\": \"2a31055f06769ac9495d6d77a913d67791a98094c9ca9730ae66c725386cdfca42e9d3a3b7cfdb327194200afc38e495dab867908773e60a9b92ee99c7c6b92c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-linux-x64.tar.gz\",\n              \"hash\": \"155a9ab33dc11a76502c24b94dbcd188b06e51f56814082f6570fd923cd74b0266baefbcb6becdd34e41c3979f5b21ca333a7fa57f0e41e5435d28e8815d1641\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-osx-arm64.pkg\",\n              \"hash\": \"a73c941be5ee8734d2ff8eaf738132c55b28dd69ea3601bc2c035170cfb452b17b8d801b99506e41227bbec141c689db848d76d90e07533ebeb0aebdbcc5f16c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-osx-arm64.tar.gz\",\n              \"hash\": \"9db6455c2bad80f8c8b312630c77700fd845203ba20cb7022671cf6a22b1663a1742e47eed7a384142a1d58388d8d736b4868efc5ce80b205c949e4ed5d71fe9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-osx-x64.pkg\",\n              \"hash\": \"978e0ef30940c647be4efca48c00e40b9a0ca8ff03490e525723ada8da99b7fa46ebd7413676e58782b3ec8928d4972526f2cb7a46bfb79b1b7e5cc5aeb65566\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-osx-x64.tar.gz\",\n              \"hash\": \"43d9ee7f63131138b9a8aed10ca6797256c029168a07c340ff7a5b2fb43ebf62efcb62a4bcfe669de2b57749223d89028e68bb45e9dfbc0d5341ad5f1bd0516d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-arm64.exe\",\n              \"hash\": \"0b484736a930ddc13e5380cb56d98b3c1e63a983627f2053820de4f26f0dbf7923f9523b74acaa4a7c5b63a6887946b6703415ed7b5cb49639c9d52ea418831f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-arm64.zip\",\n              \"hash\": \"dd4c90996f421aadf71eae7026776353c70b88f695da1da3ba92530607f66ed92f19c9fd41f5326994b61591b704778f8aa9ee56e7fc83d5980d4414a11f62d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-x64.exe\",\n              \"hash\": \"65a4f4fb78aed9fc7d7e997ab609481b34079b3d1f130f231aa1b82f25381e89e50f3affc894027d7dd6b2c0687d3749b06f7eed26a25155f68d4ff88451309d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-x64.zip\",\n              \"hash\": \"102d1e2ec71b7a1caf169b83f3004d30f1684eb77777a3c8dffa929e0e05d04ce21e585f670c212d4bd840928909605e2d580989cef9bb3f000e790b2da73eeb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-x86.exe\",\n              \"hash\": \"58c2da39735de228ca9fb7f36de505bf50aaeb759d03bbfcfea509b35a7b70a61a6c30ae028bb98c6f208b0586ceacab6132972e9d97e1e197ada15676e23815\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.419/dotnet-sdk-6.0.419-win-x86.zip\",\n              \"hash\": \"92abac3bcfab97f4d24454ae501677687b79d677b6f3a421a047761e0e77a00e0647701622077029282c672ad4e515099b23529a3499f1d1dab99483891a5365\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.127\",\n          \"version-display\": \"6.0.127\",\n          \"runtime-version\": \"6.0.27\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-linux-arm.tar.gz\",\n              \"hash\": \"a5d5496060cc0a733bed2e9a22efb0a1a817fdceb92dedca0a30c24c6476ecf5f4bdbf44c21919c4ee014e31c9702bdd78426aea494f896cbc081ac42d9c331f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-linux-arm64.tar.gz\",\n              \"hash\": \"eef319d517c3347ddcb0bb2d36a8cfd2bcb2b1a8c5cd5901534569b43c8c46874e9366598b3659c868f261275814b21521de8d5c45d5b82b3296c008fe0f3ee3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-linux-musl-arm.tar.gz\",\n              \"hash\": \"fe888e453adf7a7e5410e1edf334c50829f2d97b5f907298f23af0443df63de0397cbbdc8247fe5ac36f3b3191f67501fd864fb0b0e18526754673752f219330\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-linux-musl-arm64.tar.gz\",\n              \"hash\": \"9860965b11738f7dd443000e6ba37bf6c5ef46dbcd389d09e945b8c6965fda84f1d7e809987641e6a0c1e1a3a40bd4e4f0eedae2df98ddfbf9023aded0785138\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-linux-musl-x64.tar.gz\",\n              \"hash\": \"ef18f4e29b5730f158e677e66eba4bd9575c8c04470ea5c056a8491f72cee0e0f6673dfa94cd674cf6959a188c3ddf0870442a763b813228a915387442c8285f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-linux-x64.tar.gz\",\n              \"hash\": \"f5b90d85276ae0e570a4487f0d56d18d2a2b903d9cea95a6f626cab48a01ebf5a810d97d176bb9da9ac7a6256cf58b201e6a42ff87bc0abcf7679b827d8f2d10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-osx-arm64.pkg\",\n              \"hash\": \"ac52cc44b2368a44844c0cce56e9ce44073b009fee58f282699b8ae3ba06d3b82c4a2a2b8aac1da1a9db9c8587b2bcacd3b5676ee8e537f500637e3e82617e1d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-osx-arm64.tar.gz\",\n              \"hash\": \"c8408b0404477f14c901e6d68ee5a67935e6a7520ef5f62895f4ed82e886361b3fdb7cd353b187a4f92ccc206339d39efa1b3ebb5df94e1e9e564e1489919d5a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-osx-x64.pkg\",\n              \"hash\": \"b340739dd318584f1447356f15c3ee8186e316bd439a4b4ef13e0228b477a950c003290423b787966d841bb40d445684e13f4b5ec7841eb3819fbc79e2518476\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-osx-x64.tar.gz\",\n              \"hash\": \"4d135086844e42aeaacf3780a56a2dd4223405b1e2b09b63bb0d7842a32da52130d26fc6bf6c7edd982bc03496f8951857144467ca3683035a049fc6dc912100\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-win-arm64.exe\",\n              \"hash\": \"089c85a41e04dd84fc57485893fa13c2340fe1195f06d404878ad9a8f991df069bac094c4b9bc38a01e13ac5474140d9a7a2134dcc278c6bccf8fa5505ee591c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-win-arm64.zip\",\n              \"hash\": \"442194f14ee93f7e175084cfc601bf240fffa666669aee201ff9dde85963121d6107854e995096dbb19b2d995ba9e02e99aedabe8fad0cfa07020c83c0300df9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-win-x64.exe\",\n              \"hash\": \"d850a425bcddd48edbcda549593888a50c176405431f6386767eed65fedc4e3db43cfd6bce9109117384dff18ac07b12b9e3e7ebfe98c2cb29ee96b49d5f3258\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-win-x64.zip\",\n              \"hash\": \"78d220c03a0c28000a92e089c54377828dadda9c310be32c2bcb6694e4f6d04a381756a2bc2716cfa26c1d66c07152f5a72ca451a9e5fa09b8ae48243cd86782\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-win-x86.exe\",\n              \"hash\": \"19ced52ab2f3a299fe6992fb2e236c34b10b0a763c735aef97b0104b5d1d639b092a07adbd242e15093f7eb162ab306edde492978d26e36a232147286a547d9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.127/dotnet-sdk-6.0.127-win-x86.zip\",\n              \"hash\": \"a241bf06d13e54aeedd11c2a05e01c569cba6caf23d571822ae94529565f4d17b3f76c37d2b9b44ad76b462ede31b75244f09749545285e4ea556749a1346118\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.27\",\n        \"version-display\": \"6.0.27\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.24020.27\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-linux-arm.tar.gz\",\n            \"hash\": \"c3128b9ce739328c462db220488e604fd119b0cc148e43ce7661ea27e4ed83fe0fb860f39acae83de6b74f7b847431008a37dcc00cd6d80564eaa47e7be881a0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-linux-arm64.tar.gz\",\n            \"hash\": \"cafb52efb2bb646459c3d133a6968105867bbe0ef580318def47ff83770e1f180431f53c5a7899563b5c8d7fe44a58d423c8c7a4b3f29054010230fb47b1fa89\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-linux-musl-arm.tar.gz\",\n            \"hash\": \"2c7456b921a03ee42ea1b5b5772f826a79af42ddcbff6a328072345a2d4719e1d36781be335c0607f8480fc879062a30a94f09dd4425df82dcdce5abbddf6d2e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a4107fca7905f498608287d64bfae67c927669a6cd98b12abc48f9ff15f66ae244f54c1d546b6fa1d9a90f7a15b5787101be6995fa48e1d8b346a6b033aaf747\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-linux-musl-x64.tar.gz\",\n            \"hash\": \"8e496db5141524a67567f7e24c21bd62c88543d7d3261cbedb60b9bab29f91093fed50812555fa15c741b79c612bb825a4b43acbf2735a71480056e795781cfb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-linux-x64.tar.gz\",\n            \"hash\": \"47495e387c63b10f3b52065f40738d58b5b60d260d23cff96fe6beeb290f2f329a538c8065443fa3b10ecbd3456bdae58e443118870e7b5774210caf07c3f688\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-osx-arm64.tar.gz\",\n            \"hash\": \"1cc3d27ca26edbc30f24ea918a44414f0098481c6ad5ed5f19a5db1c1ea1ec3c412804233cc3e7aea481aee351be4512b40c554fd5b1807204a9dc22a479b9ba\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-osx-x64.tar.gz\",\n            \"hash\": \"4cf70618e2f01401a26b05fd287867ba9b23498629d87bd61d3418a0d5191c0e07a16090e149e759072b00ee9860a4cf7260e6bf36e2d10ee19d0d4c2a39a5e2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-win-arm64.zip\",\n            \"hash\": \"cfadd070ededf6c6fedc719552f48a2d9282af9a366d886cf150571f121fd93841f3e0cb33a20eb74411d09ed77b374b3f1162a38d32f1bd44fdce4a26fddee3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-win-x64.exe\",\n            \"hash\": \"03dc5198461e62518f63aee7065da207f682e92adf8764a05c0c3646d7a293352bb1f98648fbb056317f42fe9463bc1305b7a71b22ec198689013f9bf9902b72\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-win-x64.zip\",\n            \"hash\": \"be99c0a6b86298b4851f02d1766146a081f489529391266a98c97d5b4774b9c2fe93bdbc73e457e79e6b31343233df3a5225b01b50f43c37c9f19ae6b29e9e6f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-win-x86.exe\",\n            \"hash\": \"d30faadf9462e58c78bd44c63f1a4f1798442313998c21f31ecf0446428074c2a05cf41b14869d00e537e71994f8e95753f862f5cd2b575efadc5d9c0906ded6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/aspnetcore-runtime-6.0.27-win-x86.zip\",\n            \"hash\": \"bdce6d8c04ff81de89bef7785e95734a5861d040863bf67a386c6bcb57b6c401aed419fe8fbe8d0fe488320445ca2cc364947c472651e3c7d318151c6e967ac1\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.27/dotnet-hosting-6.0.27-win.exe\",\n            \"hash\": \"45de2ba489b974aa2d65317d1f415208dd1869841b25d592b737d0a1fd003e40e8afee216f74783e7f4db304f17917f623abfe8b4d6373b8b405effa522cac98\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.27\",\n        \"version-display\": \"6.0.27\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.27/windowsdesktop-runtime-6.0.27-win-arm64.exe\",\n            \"hash\": \"0b040a3b8e7055fbc981e959a4694c815451512e6f5e5055ec2b4207428f53120bce156fc6ca286cb2a88b610b788131c1b147cae52eb4ac30b9a6862b09a5f2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.27/windowsdesktop-runtime-6.0.27-win-arm64.zip\",\n            \"hash\": \"5d2359df62f99db32e66440b5a936d54c728e3de8a0af612d45782d37e5860d810c79c20171e70de12de85698e3aec2126bc9f6499251147e77fbae9d54790f0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.27/windowsdesktop-runtime-6.0.27-win-x64.exe\",\n            \"hash\": \"8927e3bcda1f439af84af0cb41fefc38c4386297eb463ddc7dd835d98502e63e0ba06a0732b02939a981644d8afad1d77036b6ac38d348c1cd29cf691cb80da7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.27/windowsdesktop-runtime-6.0.27-win-x64.zip\",\n            \"hash\": \"a13eb53b7a1c9dda0baedf47e585b3e338752525b96a25f2cafbd0df4955a1ac8b3196e4bf754279642314f2631ce5d47cb25878adc8d68767d6df829a67198f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.27/windowsdesktop-runtime-6.0.27-win-x86.exe\",\n            \"hash\": \"b51ebd7eb998a47e2f40016527bded5e2ca845e771ca1cd718b4ec58cea2bdded88a038cf3520594cee9844dbb8d2d246e9daec570964daab11d3b59c0bfbe12\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.27/windowsdesktop-runtime-6.0.27-win-x86.zip\",\n            \"hash\": \"bf98e6af50cfd2116a2c8fc81d6ac241fa391c6825edcd18a646816d712da49c9d5560a2b09037a2dd42194f25bdbf79298d452fa14d2097aed622b2a142a3de\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-01-09\",\n      \"release-version\": \"6.0.26\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-0056\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-0056\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-0057\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-0057\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-21319\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21319\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.26/6.0.26.md\",\n      \"runtime\": {\n        \"version\": \"6.0.26\",\n        \"version-display\": \"6.0.26\",\n        \"vs-version\": \"17.2.23, 17.4.15, 17.6.11, 17.8.3\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-linux-arm.tar.gz\",\n            \"hash\": \"1477b17ea63a87f54d08d7e2f2f083fd6ccfcb650833285e862a7dbf75be8db71cd59476696d62e8f3b6043f245b29d2546838790f50538c29280dcf942190a5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-linux-arm64.tar.gz\",\n            \"hash\": \"775d96bb3dfa6f5e7f81829e7eedf0744aeb75d5e1a613622debd1f285f9eda694ae79effe531558dd8367dc4fad5d682039aa24fb2bbb39fb561c67aeeb4a18\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-linux-musl-arm.tar.gz\",\n            \"hash\": \"e6d3996c83bcd5b13476102743b6fee8b1ff11088dd176464b93ff324afada0eb639cf75d804022c25175458dfc6a070d3f72c2b2649e91ffd6e4d1f7d3bb2f8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-linux-musl-arm64.tar.gz\",\n            \"hash\": \"52d568a745910923a3fbcb51e3caa8634096ec8f628587c76699e8b4fe7593822cd4c1b386484f42141afd1662c124e3f449d10be6c0ae237dcf4fba891e6a66\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-linux-musl-x64.tar.gz\",\n            \"hash\": \"ae4c0f714a5b3c686f703825fe9292d02feb0942c5a30eb98fd431714929aa0eda096d24f458aa9c66926538d147e19b2e4839bdf1bd960b48076abdc7d88bdd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-linux-x64.tar.gz\",\n            \"hash\": \"7336f71f7f99ffc3a44c7d730c6a1e08c5c0b6e05d2076a1963776f174f8588d31c9b783d1c4f645f7e7cc6a54077b798c6bde35ed4a812ffd9b2427d29b0b34\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-osx-arm64.pkg\",\n            \"hash\": \"fa881d722bbddea8ccf5063fc6185f398aef18eae5efe1a3b3445eaaee96c5912a44e721cbcf4455aaa734efc7821f4fe3b1947e3f6cfd9130a0507e07684b9a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-osx-arm64.tar.gz\",\n            \"hash\": \"fba964511efd71b87aad92ac8a31d7a86cde605fc0eb9d57ea270067b22cd540a67451d8ff3a079fcec8fffcdcfcbd74cfcc89123c2b11096dca78cbfc891be3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-osx-x64.pkg\",\n            \"hash\": \"0cafe2acd3f3eb0800eb9b090b39c50fc96e9ee4ce0f8c4fcbc4705bef3bcf5ede48e048ff62aa8fd42e1050543bb31b121b2b3d7250dab891f21fbfa228b289\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-osx-x64.tar.gz\",\n            \"hash\": \"e2d51f955c841299fe6dabe1abce15ab2ffb2b9c624f5c2ad12685a14451fa62ed9452ae7d7d579f1beca784e4d4e3b532cf686e58490d44bbd0e022ddabd667\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-win-arm64.exe\",\n            \"hash\": \"948bb8e56e3307b76ec36f0069355c271f2401bfaae8f839fe7573ac4ca08b50470175a5c1a9d29d6314b76406c0124d686e8c68329529270bb941f1bc3f3138\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-win-arm64.zip\",\n            \"hash\": \"13473154108f7f575cefa89a413c93e7c872832f5921ad9e1ec80b7c8b359553a0eb53b6f9fce63d595cb8ee806f94c78a01e19d3bb35c21db7122e99a404d91\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-win-x64.exe\",\n            \"hash\": \"3ca5c85db44c19e8b96cb7d1e40cc6cd8303c81450fac7e1036823bd2321dba0e5cb184642b396ae9d41abd10b4c048daf69c5b9632e39c8e93768bb65d97bf7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-win-x64.zip\",\n            \"hash\": \"94c3f6d22e5b47066bcf4abe85279dc2f0bff05031adeaad4a3ec9600f27959d3e56d40c5a23b0b8565e028207473ca0383e686f1f198994e2b263b9825d2d35\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-win-x86.exe\",\n            \"hash\": \"2dc212f6db2ac43f1bd69adbad48f1d38d5714b92ba1e1a9aa5bb3b76efa4a359851ffdacff74d5be2258ea2632a56c0bdd64d63d44c6f7a6854488fbf4baa28\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.26/dotnet-runtime-6.0.26-win-x86.zip\",\n            \"hash\": \"70d455eb5ac1baf7ad7115cb67dcc104c1957e42ff8285a095907895fc82d16e965d06831eb91ce023a5b6fa764437d19c2a73c6c8bcd3cc582aec15e3c7e4c1\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.418\",\n        \"version-display\": \"6.0.418\",\n        \"runtime-version\": \"6.0.26\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-arm.tar.gz\",\n            \"hash\": \"f9e978268753d58c6b33b295f48b91a47e81b520ea89c29d561cf8247a709ce67efb2a7e4cd7df32a8d6b938606566e5ab9d2c99babcaa5b68662b1e27b71e30\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-arm64.tar.gz\",\n            \"hash\": \"2848db109c65dc284320f680c13b498789f944f3474788548c0bf15d333020cf9b8286348bacda9af56e1dea6b56590ff24669de7ed5eaa31906f4710cabc6e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-musl-arm.tar.gz\",\n            \"hash\": \"6a6967a94ca704f659d47b47e179cdd2336bcf9446d3a78bd84148eb122f0a56b85ef8a35052b297780d498138d9a58e87778d61f808500567a981e97aee0c19\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f9534a747826ca653910d0180ead9cda04e803aae49eadfea21fcc09f8aafc1b39dcc64dce5e8d561f899605df260962a917b00ecc15866fc606d08aacf09b75\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-musl-x64.tar.gz\",\n            \"hash\": \"4815072e8f9680df72a8ca84b11d109a092ae50cefb12e96613a62216136784b9972d7aac8a5db3ad0ca7b4fa630b4694fb72d926382ea798ed8bdaffe591cfc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-x64.tar.gz\",\n            \"hash\": \"24d705157ae51ed5ec5ff267c76474d2ff71b0e56693f700de456321f15212a7791291b95770522a976434f5220e5c03b042f41755a0b6e9854abf73cd51e299\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-osx-arm64.pkg\",\n            \"hash\": \"5b0aee369176623bc9a466990556d01415252ec9cb30677a3aac1903381e9ca2a685d9aaef46278d68c3e10b80b2e5c537f3ea3b6446670c66d854a3bd75bae0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-osx-arm64.tar.gz\",\n            \"hash\": \"4328aa334e5ddc2dc53c2602e5cd7718e7bc7750a3a44993ee1e6b052251d570882592f24a89821bd261c42d235e3f0213f060d36c7365bd6d2d5eca60231524\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-osx-x64.pkg\",\n            \"hash\": \"e3127a0ad2a14d803a3c1afce8a91dc6c06b9dc121dadb7cac7a627789fc8130c5e7c6c8bef95daf5a4efc3003dbda64c6798dd4a52055770c6b89f090d29989\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-osx-x64.tar.gz\",\n            \"hash\": \"62eb6c792e90750510395a4e5796bd72b0b6806633b220ead6f54505edbabcc9216c52a4346247b20fe2c6b5b31de23432afd2687a0a6aa38727c4cad2c96e93\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-arm64.exe\",\n            \"hash\": \"98bdb5942abbfb74c7f106d148b4794867a7194e7516b5acb5c0d3001cac7c392f22d1ad9ee648d173ebf417c62a9935a45f184fe1dafbbd648dd1152cbc9e82\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-arm64.zip\",\n            \"hash\": \"12236e6365b5568bd8e4db52cfcdaa0209f134e98b4754a4631a42a1fd237c7d6c82fdadffe720e9bcc8200a8194bd1f945aafeecf8814a6314f3937bc8aca5c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-x64.exe\",\n            \"hash\": \"5ab8c87cf3a073dcd9211251065ffecebd7c130faf59f338dbf17986316aedd5fed1ab3615e93a4bd05fd1abf43f2518d0e3e17383bf1da19eeea38bd23c295b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-x64.zip\",\n            \"hash\": \"a768a6d2420e2794d2a8de9b029a8d9e8b9cdc61e261e1652678f1de761d6455a2d37d232b4ce6c2258121cef704f2211b1c20f1047a410b605331d8f010ac2d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-x86.exe\",\n            \"hash\": \"9f69e4c38783a319a7eaaa097d4f89f37764d938564eccafee363d44446678cc8f8cefdb1d614467b67d5c1f4f0ce8ee303848cafa9e2aeea83d2866584aec86\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-x86.zip\",\n            \"hash\": \"10f5755ec77936870e9f1d739acff8e17986ede74b5863bac9ba12edc2523085036912254f4de2fea20d423bdf46e443e93adf84a5af1144199b90a058c72915\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.418\",\n          \"version-display\": \"6.0.418\",\n          \"runtime-version\": \"6.0.26\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-arm.tar.gz\",\n              \"hash\": \"f9e978268753d58c6b33b295f48b91a47e81b520ea89c29d561cf8247a709ce67efb2a7e4cd7df32a8d6b938606566e5ab9d2c99babcaa5b68662b1e27b71e30\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-arm64.tar.gz\",\n              \"hash\": \"2848db109c65dc284320f680c13b498789f944f3474788548c0bf15d333020cf9b8286348bacda9af56e1dea6b56590ff24669de7ed5eaa31906f4710cabc6e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-musl-arm.tar.gz\",\n              \"hash\": \"6a6967a94ca704f659d47b47e179cdd2336bcf9446d3a78bd84148eb122f0a56b85ef8a35052b297780d498138d9a58e87778d61f808500567a981e97aee0c19\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f9534a747826ca653910d0180ead9cda04e803aae49eadfea21fcc09f8aafc1b39dcc64dce5e8d561f899605df260962a917b00ecc15866fc606d08aacf09b75\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-musl-x64.tar.gz\",\n              \"hash\": \"4815072e8f9680df72a8ca84b11d109a092ae50cefb12e96613a62216136784b9972d7aac8a5db3ad0ca7b4fa630b4694fb72d926382ea798ed8bdaffe591cfc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-linux-x64.tar.gz\",\n              \"hash\": \"24d705157ae51ed5ec5ff267c76474d2ff71b0e56693f700de456321f15212a7791291b95770522a976434f5220e5c03b042f41755a0b6e9854abf73cd51e299\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-osx-arm64.pkg\",\n              \"hash\": \"5b0aee369176623bc9a466990556d01415252ec9cb30677a3aac1903381e9ca2a685d9aaef46278d68c3e10b80b2e5c537f3ea3b6446670c66d854a3bd75bae0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-osx-arm64.tar.gz\",\n              \"hash\": \"4328aa334e5ddc2dc53c2602e5cd7718e7bc7750a3a44993ee1e6b052251d570882592f24a89821bd261c42d235e3f0213f060d36c7365bd6d2d5eca60231524\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-osx-x64.pkg\",\n              \"hash\": \"e3127a0ad2a14d803a3c1afce8a91dc6c06b9dc121dadb7cac7a627789fc8130c5e7c6c8bef95daf5a4efc3003dbda64c6798dd4a52055770c6b89f090d29989\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-osx-x64.tar.gz\",\n              \"hash\": \"62eb6c792e90750510395a4e5796bd72b0b6806633b220ead6f54505edbabcc9216c52a4346247b20fe2c6b5b31de23432afd2687a0a6aa38727c4cad2c96e93\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-arm64.exe\",\n              \"hash\": \"98bdb5942abbfb74c7f106d148b4794867a7194e7516b5acb5c0d3001cac7c392f22d1ad9ee648d173ebf417c62a9935a45f184fe1dafbbd648dd1152cbc9e82\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-arm64.zip\",\n              \"hash\": \"12236e6365b5568bd8e4db52cfcdaa0209f134e98b4754a4631a42a1fd237c7d6c82fdadffe720e9bcc8200a8194bd1f945aafeecf8814a6314f3937bc8aca5c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-x64.exe\",\n              \"hash\": \"5ab8c87cf3a073dcd9211251065ffecebd7c130faf59f338dbf17986316aedd5fed1ab3615e93a4bd05fd1abf43f2518d0e3e17383bf1da19eeea38bd23c295b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-x64.zip\",\n              \"hash\": \"a768a6d2420e2794d2a8de9b029a8d9e8b9cdc61e261e1652678f1de761d6455a2d37d232b4ce6c2258121cef704f2211b1c20f1047a410b605331d8f010ac2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-x86.exe\",\n              \"hash\": \"9f69e4c38783a319a7eaaa097d4f89f37764d938564eccafee363d44446678cc8f8cefdb1d614467b67d5c1f4f0ce8ee303848cafa9e2aeea83d2866584aec86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.418/dotnet-sdk-6.0.418-win-x86.zip\",\n              \"hash\": \"10f5755ec77936870e9f1d739acff8e17986ede74b5863bac9ba12edc2523085036912254f4de2fea20d423bdf46e443e93adf84a5af1144199b90a058c72915\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.321\",\n          \"version-display\": \"6.0.321\",\n          \"runtime-version\": \"6.0.26\",\n          \"vs-version\": \"17.2.23\",\n          \"vs-mac-version\": \"17.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-linux-arm.tar.gz\",\n              \"hash\": \"4963d1483c65f0628f13b1c920ef05bc2eb5824e0d42b554d89cf88ba5f4c1ef3180f09127bcd3e67341779dd7257f2fa4a9ee56d4c10bb7721c3746062e8062\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-linux-arm64.tar.gz\",\n              \"hash\": \"cab0baa6bc40acaf5a18f647f0e2b018043ad9c74bd07902c4bc2d128f0b6e0e5f268a2517b94d7bf8a75431e797b26d5d82c9988aefb620875ca299ed7e8523\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-linux-musl-arm.tar.gz\",\n              \"hash\": \"518b360323f4b91c0dc835ea36c309e445369a999823c372c5bef47f1ccb2c6253fca401804f4a44c8e5a6f9f3747c23e1e2fe95bf6410efa3f6a3bf72b7d78c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-linux-musl-arm64.tar.gz\",\n              \"hash\": \"538d884d9d8fb6339c141664deb57e9b3de9db19e55537d1893ba4984c16ffbffbd2ebac4a2f4e3e1805ddd4f0bfabc78b7966d6d547aa4bdfdd08465c0d597c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-linux-musl-x64.tar.gz\",\n              \"hash\": \"82689bc9f29d62e0bc0000e9b66e258463547600d325bbd5bca7585f21df63a2f516d6cf77e36067efec3b6273fc72a32fda12c5dbfd63deb4259fa488e87d2f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-linux-x64.tar.gz\",\n              \"hash\": \"a20c4fc908b4bf9a61ea788488cd8a1530f081674f14136f23990c65740d39e45fd95fe70864652abcae225bea3d9f3ba28bc90d05beea94eef7949b905a0a36\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-osx-arm64.pkg\",\n              \"hash\": \"aad0f11caea3e9ca45a6103b5e222b0c77411e81ae3525e1c4835993fc1ceb06aa8683fb3769fd7e5e35869e822b6e28399ad05c13d535610a63fd24b8f0d067\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-osx-arm64.tar.gz\",\n              \"hash\": \"8d3f4829e2f0cb0782b24e6fbc24debd68da661bac397fea36bc406da1577c5fefb4dbda8941d751792415b81a806bb5cc97d92ac263a258c250dfcb1a3d463d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-osx-x64.pkg\",\n              \"hash\": \"b174fe178905c84aa18946de061228e9456e141736df68ed5831c7b68c1b791af13c2aaed6aa7230277965f0877f24ce4babf1ccce1b48221bfde0f8625d88ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-osx-x64.tar.gz\",\n              \"hash\": \"1ac2947bb6a07a4fb2f1ccf5a03d385ada3bef1d0a3bca48526711ce08d8f488d9f517588018b7ad70ee25293737a422955d6435b6eedc851b47c3a34cc3c34d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-win-arm64.exe\",\n              \"hash\": \"7c35a2a971632f09f704463e3dde3d7b8ef5cf1c83a728e5e0ed2aedd61413e042b56c5839521ca8293a6a801461df559c959c0b06952cc73ebc94b4f0d29d0e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-win-arm64.zip\",\n              \"hash\": \"d242e09c6181fcaf2896111537fb2e07ab36934e0d1c337bf9e3a9ae621f2dedf3eea07c301924daa48527efca28e78a94b07d8e5c0d2b9c8ed64a7159325641\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-win-x64.exe\",\n              \"hash\": \"bbc05346fc41e30c5d1ae0ab83e0ff91eacd42a009e849f3f04c63f2b595c9e770952e14645fc9450e80858569c33f4a3c6086e528dbe94221971fb208520589\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-win-x64.zip\",\n              \"hash\": \"17d2ce90b1a21b3c7ebb0761d4fe6d82dbe83406d6d280ae128779e555cf864a95330e0e63a5a9154299c08cf2d8f764a427ab1bb50a1e78401bc22e968b713e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-win-x86.exe\",\n              \"hash\": \"a6868beebb4b5f7af1301aed611da27d8556a95b3ed6d3e33544adbe907c6e5dc4cf25cc1873146e0bc82c3e1339b140596a85903608fa67651090b9a140c18f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.321/dotnet-sdk-6.0.321-win-x86.zip\",\n              \"hash\": \"be3bf3dc803231d34aed7340c1689ae86e38fe834549c245352cdfed1c8c4bdc439e7e8612f7e76bd538aaba292f743b01fc08ee0d527ee8049911eb7e4af042\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.126\",\n          \"version-display\": \"6.0.126\",\n          \"runtime-version\": \"6.0.26\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-linux-arm.tar.gz\",\n              \"hash\": \"8153265f7ac85c4997a365679df03174234ef22236a4b944cb8faf1d1a1aed7f3fd6cf406d0a445ef29945d941ff97fcd3b44bd6f4a484ef406ef824e6fa3d3f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-linux-arm64.tar.gz\",\n              \"hash\": \"11cf9b4bbd8639c4feb8674923701b6c6be3a15dadd6656bfb66b06ef97a10637e08d6e6c1c81e700b03dddf0564b19299badc0f2843794ca6b84b049f0b76d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-linux-musl-arm.tar.gz\",\n              \"hash\": \"b3cb63e4fd21c88d1c2ffe10d6b75f5d89d8a24bd93c46e78fc22a5c1df5458926461f9fcb35b990898993414d0ae16edd1679a6974b591d53703d4c351f4748\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ca4480524c0e0d8620e71d64f7a14a4fd47c0a5399b6bb8b070a2c4fb430e0c9745a53798c86d84b649884f060fc3cffcb3bbffa10d112db9b6215b130924ee4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-linux-musl-x64.tar.gz\",\n              \"hash\": \"3fd1a4d998da254e2fa347418353266da84ff468687044b918dd9ad4b2d189990237452f29019a80ba84d9a2ba01a4474042e30f925981bd93c8de7029c60821\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-linux-x64.tar.gz\",\n              \"hash\": \"82a9fd6545835b82f8561d4401c1142a88921ea3743079544ec64deb544ecb8647512cc5dca488228878a619146d0b975aa0e977d2f149f2f56ac2c6f6826b8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-osx-arm64.pkg\",\n              \"hash\": \"35733a80b148309f4c7ccc6035b76188ac30f41ea17e364016c4f868a1b6af214234f7fce96114c9ecb3b6b8d2a15216627a86cc5599beb599a0e0cc67f2134a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-osx-arm64.tar.gz\",\n              \"hash\": \"0cbcf5942e72fbf6e661ed7fe29528a76ff9d27b12a79c38dd0f0933752ac864dc4c4034e92ee086a9498d7c93e0c994f658ad939cf3efd0241310c94c9e94eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-osx-x64.pkg\",\n              \"hash\": \"30b7e34057c9e71ae9944404c4e06dd31a060cb956e92cb3b16fc4c31d5a5e00572af166b840c505812c4b6356680fd2be62869ceb31efbdc872b872353819c2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-osx-x64.tar.gz\",\n              \"hash\": \"6747e0204c6c3b1268c039f6a9ed689632e204bd10984acd33a51f56724e4293b179104cc9165899cf5566d4262c0d4e61d49cf90db0e62fdbcee02002008833\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-win-arm64.exe\",\n              \"hash\": \"5a4f2822b88f088ced1480d7971a9c8abef6e909692ac31e320430423879d542b2925c3b11f079b071348300107f06f5c315d5a6a0f8d711e64dc49c9c148c21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-win-arm64.zip\",\n              \"hash\": \"99f0aca92206b7902363fb1de6bc028911af1b4cbeab15c13a8d9fc6cc581a0f3440845214ebb8c3ab4174ef752e05c247de1f4a1650221baaa7830200b0728d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-win-x64.exe\",\n              \"hash\": \"52a5046b9e57c2f04c3b930566af8d137e0c1c2c9eac76f22ea33f152bef76862b2a9814257a08886ea11ef1be11205af82f0360f9eea2e6884eb14a5ac12672\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-win-x64.zip\",\n              \"hash\": \"93304e981d296664df8954c4c7815dbdb0d2dd6e8a2a07051196aaee4ecc8a3e2e864e159238c5407699ba41f8b9735c827255b1e876106e4f2d2ca0eee276cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-win-x86.exe\",\n              \"hash\": \"f60acabc5b6786fffe44d762b644507e8fe6488d2b4a5b8543b99a9e6cb199b9e53dbfeeb75c4effe3d9539df68f267483b0061cbb398b72d6a9a816d885f768\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.126/dotnet-sdk-6.0.126-win-x86.zip\",\n              \"hash\": \"5e4f2ac41726a0c060008510b17d891c97a73d9539eeef159ccdde70f0caf9e214824cd15b855b0e6afac829bdc5b6f77e3e260c736236a044f0b8ee1fd258b3\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.26\",\n        \"version-display\": \"6.0.26\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23339.26\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-linux-arm.tar.gz\",\n            \"hash\": \"1e994b745afb5a9cfaaf8c4a66154e9ef81d8c25d6bc9703134a62400242660dd55da0ebed96dfb81282d85161178425b04bebe2b1ec1f7e38ed776b1c001b7b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-linux-arm64.tar.gz\",\n            \"hash\": \"48330ea4d98fc565c9553ea119f56e3e485ca30a0986f43e78335e263d9cc82d17b7ced8115480d1adb33298cbc5cb2b0759bc89d516659c4c59eab9520a2254\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-linux-musl-arm.tar.gz\",\n            \"hash\": \"5878c2adedf912ef7100e42549706b8e17d202e220bf31d8056386ce3aa28cc939e79709aeebd743f8729770ab28feb40f59dda3ddc1261a9083d9a41544343d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-linux-musl-arm64.tar.gz\",\n            \"hash\": \"06e97db40cf6a2d439bb79bc1bb3adc04737dd849e02f8800f54241918a561db48a7e0df8f092209d58fa36fdbdc937bcbfa2da322f1830d936fb9bdc0a574c5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-linux-musl-x64.tar.gz\",\n            \"hash\": \"a924c0946bd5076a9c36622148dfe9b7f0da5a583265276c796d0240932b19c95ca26d0d60e09f3018d902ed2c6ecff178ba21d343ea8c148d02688b962b04d6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-linux-x64.tar.gz\",\n            \"hash\": \"51a0091ffa5abb2a6f2f968f76848e475310fbb33126238bc1358ee86e24bfd3f046d32af2f39dc7a30b14becdd637d1314ca4f4b771fe5fa0954474a605e4fd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-osx-arm64.tar.gz\",\n            \"hash\": \"641cb5542c5d4b0103a2ac0154e2a99d755a4987fcdad854cda1fc75bdde08432eab73db69c444628e7d68496ed6e36fa52eda5033e118ed4b5140b8d5c47d96\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-osx-x64.tar.gz\",\n            \"hash\": \"9ffb209f2f07392935b9627e22b44260803cc5e21ab8d09152d5499ebae51d6f488992664bc44a23334332a1183c444b47cada319cf4d461dd95a6b78f1cd825\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-win-arm64.zip\",\n            \"hash\": \"be31ea0d757b9bc917df2a97fc74093f091dba24a989b2038ead3e5bdb8f50e4666d996c593e413e265fcd7980107456ab69409fbf43bed3918f404e5916a0b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-win-x64.exe\",\n            \"hash\": \"d444d22a2f5105aa60464e47e2afc67d35d9a1e8482da739b654e1b4bcd377e84653f46146dfcaee4fb8405f821971212f4a75c5678c25d49a628bb4adbdc383\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-win-x64.zip\",\n            \"hash\": \"8b5c498f7c0f6188c721261e5d5a2d406aa65f7fc02b8fc4f8e7716b8dc9628aed5798236d2b37abcef4e40adbfe2eadc839b5e7d2a080a5744390f6764ebdd7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-win-x86.exe\",\n            \"hash\": \"7106df0967bb741942147715b14bb4cd43fbdcc76e7344ae6a843e02cc0d66371f186248d99881fb5b8124c68103a681609b6b7da048a6377cdb9f9e6e2a9e91\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/aspnetcore-runtime-6.0.26-win-x86.zip\",\n            \"hash\": \"cc05422da3e03a62062d8a3b16bb76dc1bb583ab099dc596075d7b4aea06a161c09ba6e2877ed5e703fd2b65b3dd9aa29ef3c349a99f7cf901429061bdb0d615\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.26/dotnet-hosting-6.0.26-win.exe\",\n            \"hash\": \"59569c27b73f80969616d7b818523c84fbe4a850e2bc3c09af4c89d9ffa080fe66cbc82289d48089d2b1ee8c40d74eab08f206c38f4b43ab50c4b71544a9f5f8\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.26\",\n        \"version-display\": \"6.0.26\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.26/windowsdesktop-runtime-6.0.26-win-arm64.exe\",\n            \"hash\": \"dec20be2d9a5b4a0ede6a9ae733f1eea7288343c4749565eda3b276ea6aebde55b096e4e69676001e131cde3ecd0086cc64bb9debe6c6b6f236933f956a2ad2a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.26/windowsdesktop-runtime-6.0.26-win-arm64.zip\",\n            \"hash\": \"2c869e33e25feb491951d5952852a4b7ef907f12c6871dc87b2a7556994eb6ac35b163d3ce1d25c9c8302d0a02086824554e7cb2c842d31be1a59577f0a0ae7b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.26/windowsdesktop-runtime-6.0.26-win-x64.exe\",\n            \"hash\": \"7dd45e746fb0b82c13b91559ac25a39b66b9c94c22e5f9bd91b1dceaff96922b1da2fed152ec36e15f2c7a38e0180508f81807930928c5d0aea225f117a108c4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.26/windowsdesktop-runtime-6.0.26-win-x64.zip\",\n            \"hash\": \"f5c666e493f9a7b0a0eb0d0d4c122402d5bf7742794e019d6874a72e486c2553c6e88dd3278bfaefab519bf174370c319ff1544cf37a8a7e29d8b6e69b768549\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.26/windowsdesktop-runtime-6.0.26-win-x86.exe\",\n            \"hash\": \"bd0878b65750173e2d99479ae051daa9e71a0ee1949c600ed4a33856e4bdd2b658ebbd1439977d17c0d2fd8f3bb37c1592c4f46a4def9c534addac3a9f4a72a2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.26/windowsdesktop-runtime-6.0.26-win-x86.zip\",\n            \"hash\": \"69061a56d1c7c79583ca907803d3cae75f23cdf8e023d3397bf7c3c719c4592880b1936e7e2e4054d13a65130d8ec10d949db3740ec80ba6847c4edbd735a4d6\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-11-14\",\n      \"release-version\": \"6.0.25\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-36049\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36049\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36558\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36558\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.25/6.0.25.md\",\n      \"runtime\": {\n        \"version\": \"6.0.25\",\n        \"version-display\": \"6.0.25\",\n        \"vs-version\": \"17.2.22,17.4.14,17.6.10,17.7.7,17.8.0\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-linux-arm.tar.gz\",\n            \"hash\": \"dd5ae17bfa2d5445326b48e186bb3f9f693cc1753cb7192677601ff1383b898f2ea7d85807c4398f27108b6c50cc7ab7118fda6aef0ba76a32fa8e06f9acf619\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-linux-arm64.tar.gz\",\n            \"hash\": \"d7d5d9460cca02976b01b233e3bfca32f7739910dcbdab34ad035e7e0314204b84289a1ab11f82c36dcd517657749ec1fc4d4ead2c9ee0ab2ffabfc886f0e87a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-linux-musl-arm.tar.gz\",\n            \"hash\": \"99235f8efcdcd5148cc40ae5f43e5546ba73bffa410d17ae0880be96f819b4afe4ff6676598df95f3c873dd49965379343b44cd3d5ffde7fffb77c0142aa65ed\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0466e251a07262c9796d4d67f61247f6c7c6c998414cc789dda6e4f927ab7ff9463ba226f0141f71bc27a1e55f97ed6d313220e008806be3045929b709fa1175\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-linux-musl-x64.tar.gz\",\n            \"hash\": \"bee78309422930d7c3cf7880fcacc7d130b936fde6c16162448869ae7516321edc145b0a53087a5d206d07fef8844d7f06eafe6db90b035ab4957ccf3ff80d26\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-linux-x64.tar.gz\",\n            \"hash\": \"9d4cd137353b6340162ca2c381342957e22d6cb419af9198a09f2354ba647ce0ddd007c58e464a47b48ac778ffc2b77569d8ca7921d0819aa92a5ac69d99de27\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-osx-arm64.pkg\",\n            \"hash\": \"9faf740b260da9b647aa31c725a48997e36ec2d01a837898c24834a48a6d81f499c02eb0a84ef6046b8270c8e08751c4f63ac57dc4b57e6e17b26bc241cfdfb5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-osx-arm64.tar.gz\",\n            \"hash\": \"b12e4e08d6f305e88bb7af385e5380b8bffbe190c4a17929d1bec18c37feb21298512dd24aa5b0f19b7cc775e9f54fa088ed0b22bdb05200f95ae6ca04e7d63e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-osx-x64.pkg\",\n            \"hash\": \"7c711a2d9edeade7ab4beffd9eb7f42381773034c12a98424f70b53889c5b4bd272086ad37386099ac36ef3a36276d8e1dfaab491b250968b59a1d08ff57aebd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-osx-x64.tar.gz\",\n            \"hash\": \"b9241a03aaa8ea56d54e3f1b13baabad9e3d6b2b16633f0c6c01d3513ec6ec7aadc455dc1bb7b096c7df75efcf54ef467e1fb8ad9f3777ad3b5236bfb0db0133\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-win-arm64.exe\",\n            \"hash\": \"8fdc6864abcf61857f847183465f1f13b3cb36d102f841efeb70d9b1651583218e610468f1df2d9c87017d784f11e483562520296d7283ab4b8312f7683110d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-win-arm64.zip\",\n            \"hash\": \"06e8063c8f98fd337381e72ea9b5e30f784ac3eea2691b44ebafb965983952664826c0176e6540c2de3cde68e15e8d1b0443d92d55ceaa597940c5e0b500e198\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-win-x64.exe\",\n            \"hash\": \"b46d67db5fbae7b8247dfb3b9253d858296ad0e14eaf5de670467d997a14c84feea259e5d748ea8e45e06d893b2d081950ffb6f2cad81f440f7c0157d0169851\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-win-x64.zip\",\n            \"hash\": \"b0ea0369601410b3603236830f668d7b338ae6f53e33f7e26ff0e8954a5fb0ae1636fb26230dac6b575b7a9e75de770dd22e96e6957242f614fd4bee1e49be96\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-win-x86.exe\",\n            \"hash\": \"b4136a404dc390649395788cecff1974dd59aa9a0f91ee8f9455aeb18352f7861dacb1ed29cf58d78b6958c5c20eef0f73f71a0ef753c0cb822cb9a24f425ecb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.25/dotnet-runtime-6.0.25-win-x86.zip\",\n            \"hash\": \"e6d4854aeacb4d6b7295e0e8e17286f4b2d1b4f48b8f5d93e1911bab8800f248613c677226ff89937be7765e89bec5144f5eacbafa42732564531d8e380b3814\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.417\",\n        \"version-display\": \"6.0.417\",\n        \"runtime-version\": \"6.0.25\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-arm.tar.gz\",\n            \"hash\": \"f14d5d24d6611139cff313275599923856307c3afe57d2439eb95e2a89da5fb54fdb6ce5b0d7a243f2d031af4eb0c277ce1914725f8b9dcff4002fcc05489f08\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-arm64.tar.gz\",\n            \"hash\": \"39cada75d9b92797de304987437498d853e1a525b38fa72d0d2949932a092fcf6036b055678686db42682b5b79cdc5ec5995cb01aa186762e081eb1ed38d2364\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-musl-arm.tar.gz\",\n            \"hash\": \"86bff3ab8cecfd16f3d9d26da87b6cbeffd2041d474c56602ee5d77f6883fa64cfe85a19291fdc5afaab438fa5871e366f754b211ece161887f53c637473b661\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0b3504a026d580303d4524ab3558e9e45b8785d2b7c3f4c7dba52ff4e3abe9fdc8d186227f7f3327b698c5799f38b8743ad7b14517395b5c7ad38d858e0e29df\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-musl-x64.tar.gz\",\n            \"hash\": \"caa0dbe8e9ca3ebdb5d98dd68b7d5606b70a0d8d586ff906f0a9e761155f26a2c7d70cd71eb5d48901342913985f862ac01f7142c717eefffb98fb5576bb1067\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-x64.tar.gz\",\n            \"hash\": \"997caff60dbad7259db7e3dd89886fc86b733fa6c1bd3864c8199f704eb24ee59395e327c43bb7c0ed74e57ec412bd616ea26f02f8f8668d04423d6f8e0a8a33\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-osx-arm64.pkg\",\n            \"hash\": \"df1894ef6b23143f5a4e73d0a45a546e27a36e8690f57d97f952aac5ceefdf45b9a9cf9c08788726d0b8646f600b05d3e58cae136286cf8b50c855eea2eb8157\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-osx-arm64.tar.gz\",\n            \"hash\": \"87aaee2a4047510f2267bbdafd226703066700131e25da95141e77b2725b7d1ec549384c763e0936c7f3162199144072c1b3fedb4cb58bd6864565e98ae1b955\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-osx-x64.pkg\",\n            \"hash\": \"be23d43e7b4528976d1812e69efbdef8b466b3d00ee9bf33e5d4d0acbda5dfb49d3bff6b277236501774356798792d187d559b91227e04668bd0b2505052fd73\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-osx-x64.tar.gz\",\n            \"hash\": \"f252050409f87851f744aa1779a58ebe340d45174aeb13d888068ffae053c5bcd261a89bcc8efc2d9c61751720bb4ca61cf19ac5346e8d23e7960a74d76cf00c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-arm64.exe\",\n            \"hash\": \"0faaf59c6e3764c7634b03879327a037c57f77bccfe23cdcd608a8c02721a8b3a14f6856d7afaded536b6d819669646f2fec438aaeb21867c957165008093aba\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-arm64.zip\",\n            \"hash\": \"85fae92e406faf01041162217d13df827422cf783f0bc4a83c37c8dfd13bd6c96537c62ff61220dba40624c9912391a79177477b53ca5d9b889c96d6718e9121\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-x64.exe\",\n            \"hash\": \"705dc6a108ee7866b8250b25eac790b74137894abe877edb06a6061d48c14e6fa038fbce05b573d69dd6fd436de936d3d46f0e968d175696f3b3f5127f90508d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-x64.zip\",\n            \"hash\": \"0780c6e551c397e56ef13728593adcc1ff940cd5e9e7b8ed43197c6c9eecb0b882bf76f26fd3ed84f3cf2cf32bddb2bf65e94aa52451df55d4908364986234b7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-x86.exe\",\n            \"hash\": \"d2e0e217f436fb921e0ee3e14fb47c756414d7b7d14854ff26f6b358bb0ea9c2b4b030b25461478203b43912b5dcb956ce53787856c59503de7605aa37ff1d5b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-x86.zip\",\n            \"hash\": \"be9968e10d6cb8e47fb5b5c3afa3cc3731372467da842ff844aaaf73f15b7a7ba78ca19abd94cfdb6884248f16dc3adae4cc0f560ef3738354eed5bf9e52bc07\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.417\",\n          \"version-display\": \"6.0.417\",\n          \"runtime-version\": \"6.0.25\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-arm.tar.gz\",\n              \"hash\": \"f14d5d24d6611139cff313275599923856307c3afe57d2439eb95e2a89da5fb54fdb6ce5b0d7a243f2d031af4eb0c277ce1914725f8b9dcff4002fcc05489f08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-arm64.tar.gz\",\n              \"hash\": \"39cada75d9b92797de304987437498d853e1a525b38fa72d0d2949932a092fcf6036b055678686db42682b5b79cdc5ec5995cb01aa186762e081eb1ed38d2364\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-musl-arm.tar.gz\",\n              \"hash\": \"86bff3ab8cecfd16f3d9d26da87b6cbeffd2041d474c56602ee5d77f6883fa64cfe85a19291fdc5afaab438fa5871e366f754b211ece161887f53c637473b661\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-musl-arm64.tar.gz\",\n              \"hash\": \"0b3504a026d580303d4524ab3558e9e45b8785d2b7c3f4c7dba52ff4e3abe9fdc8d186227f7f3327b698c5799f38b8743ad7b14517395b5c7ad38d858e0e29df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-musl-x64.tar.gz\",\n              \"hash\": \"caa0dbe8e9ca3ebdb5d98dd68b7d5606b70a0d8d586ff906f0a9e761155f26a2c7d70cd71eb5d48901342913985f862ac01f7142c717eefffb98fb5576bb1067\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-linux-x64.tar.gz\",\n              \"hash\": \"997caff60dbad7259db7e3dd89886fc86b733fa6c1bd3864c8199f704eb24ee59395e327c43bb7c0ed74e57ec412bd616ea26f02f8f8668d04423d6f8e0a8a33\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-osx-arm64.pkg\",\n              \"hash\": \"df1894ef6b23143f5a4e73d0a45a546e27a36e8690f57d97f952aac5ceefdf45b9a9cf9c08788726d0b8646f600b05d3e58cae136286cf8b50c855eea2eb8157\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-osx-arm64.tar.gz\",\n              \"hash\": \"87aaee2a4047510f2267bbdafd226703066700131e25da95141e77b2725b7d1ec549384c763e0936c7f3162199144072c1b3fedb4cb58bd6864565e98ae1b955\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-osx-x64.pkg\",\n              \"hash\": \"be23d43e7b4528976d1812e69efbdef8b466b3d00ee9bf33e5d4d0acbda5dfb49d3bff6b277236501774356798792d187d559b91227e04668bd0b2505052fd73\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-osx-x64.tar.gz\",\n              \"hash\": \"f252050409f87851f744aa1779a58ebe340d45174aeb13d888068ffae053c5bcd261a89bcc8efc2d9c61751720bb4ca61cf19ac5346e8d23e7960a74d76cf00c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-arm64.exe\",\n              \"hash\": \"0faaf59c6e3764c7634b03879327a037c57f77bccfe23cdcd608a8c02721a8b3a14f6856d7afaded536b6d819669646f2fec438aaeb21867c957165008093aba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-arm64.zip\",\n              \"hash\": \"85fae92e406faf01041162217d13df827422cf783f0bc4a83c37c8dfd13bd6c96537c62ff61220dba40624c9912391a79177477b53ca5d9b889c96d6718e9121\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-x64.exe\",\n              \"hash\": \"705dc6a108ee7866b8250b25eac790b74137894abe877edb06a6061d48c14e6fa038fbce05b573d69dd6fd436de936d3d46f0e968d175696f3b3f5127f90508d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-x64.zip\",\n              \"hash\": \"0780c6e551c397e56ef13728593adcc1ff940cd5e9e7b8ed43197c6c9eecb0b882bf76f26fd3ed84f3cf2cf32bddb2bf65e94aa52451df55d4908364986234b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-x86.exe\",\n              \"hash\": \"d2e0e217f436fb921e0ee3e14fb47c756414d7b7d14854ff26f6b358bb0ea9c2b4b030b25461478203b43912b5dcb956ce53787856c59503de7605aa37ff1d5b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.417/dotnet-sdk-6.0.417-win-x86.zip\",\n              \"hash\": \"be9968e10d6cb8e47fb5b5c3afa3cc3731372467da842ff844aaaf73f15b7a7ba78ca19abd94cfdb6884248f16dc3adae4cc0f560ef3738354eed5bf9e52bc07\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.320\",\n          \"version-display\": \"6.0.320\",\n          \"runtime-version\": \"6.0.25\",\n          \"vs-version\": \"17.2.22\",\n          \"vs-mac-version\": \"17.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-linux-arm.tar.gz\",\n              \"hash\": \"7492530e6ecda9bc55cbd82f3f5c171af134458f0855906cf5abe8c758973126ada5c5e2bad8b0958caba43d6c488eeb33c820f1de840e218a9eb5f6103ab003\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-linux-arm64.tar.gz\",\n              \"hash\": \"764cc833755f2ed147545dfbde98146eed4316a5fd930d509f8c579f023fab30d091ae329f42f46600430337ec31964d7e76567e178af7f8d30c046bb05ac806\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-linux-musl-arm.tar.gz\",\n              \"hash\": \"5b2865a0b6ffccee64eb6fe716322fe58fc5a834ccf6fc2c3b215179ce6737a80bdcd51cb3c3519dec17cd216d0503c51cc43761e6ddd57713b569bf3b73b8de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d537b06e6ff70ca87defba9c7e21461013994760e79799a0e68e3958d688abe456b52702bb54d3710b611251d1a21c56d7975895f2b8f567775c57972c92d504\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-linux-musl-x64.tar.gz\",\n              \"hash\": \"b0feb5f10d7509408ed813345d7e7488439ff04acda336f13b556db8457525438c5703b0230ae970650b4d26aefc4b143724c41c6a1dfaacc1f17d938e9dd653\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-linux-x64.tar.gz\",\n              \"hash\": \"c7d28aed6c6412915a094cc6b0a9267cacce391bc7eea5b733c60fb968ecc01e846f0b3a1cd542c75c3ed12f57d22e3431593cf0589f7e426e9293d6491fdb97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-osx-arm64.pkg\",\n              \"hash\": \"f6aa470b8e24c5f9e71d01d795415f48ba21371b3423779891cc68fbb357d72fb1259c113e63ab98cd5b4aafb66300f846042dda3bff2055642d00b99c1b143f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-osx-arm64.tar.gz\",\n              \"hash\": \"6014ddc61a1d80d600542e957a52ed31ce2105758557342e51287450ea7d36ffe2e00746010bfe070c0dc3e7c9d65bb3fed214855a1f0e64fed94a823f60d42d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-osx-x64.pkg\",\n              \"hash\": \"20a4a436c5f256749f07cb8c0e87b5c453f008f1bd547f67ca26e731e78968510e771340ba33cbb76f1a05d8c3f9e8a60c30ed151a50c2fac0e7f58d1d519a4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-osx-x64.tar.gz\",\n              \"hash\": \"342178f3204f8a9417737270f06d1929c9ca01e5dad984533b4181f66ddc4086e03d7ed096bbf06dcb029b75bcba339159f3e529cd7dead5ca0b0e0ffab230a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-win-arm64.exe\",\n              \"hash\": \"c5b86584cda1bd8971e3b1819e6718e98444f72e24dee4f88b7bb2e4bed223462c6293391695101fd275222b0fbf8317e0bdfe5985008641cead0ba9d9acb1a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-win-arm64.zip\",\n              \"hash\": \"244e7b540af0c2318b60761b65f57cadbcffcd8dcf78ecdf3e0857b8c90cd090443b2575226ffe12e9650907455a6c1131247f4c1b99c76bc0f74d6180d592d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-win-x64.exe\",\n              \"hash\": \"8f189504435e54909d882e94bba3c8a94465459303e4a8d60943d69ec63fc1f30521a4cef784fbadc146d784ab6f33dce41649b7ad2222392db23a02ca634556\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-win-x64.zip\",\n              \"hash\": \"75be96bdfb07ed3b760e4f7e9a8b3571cd0078300397bd09559c0a3c7435bee03eb849e3a710caf344bb50f38b82c8c0bd2e2a021ba017c3300cd2ef66b887d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-win-x86.exe\",\n              \"hash\": \"2b1365d004bbf24a1cb30a67bd3ac28df127efcf78d6177c47eee60779bf5098cf3cebe565e0f874350792320d82b37334553e8932ea11e3969589fd4f9b9386\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.320/dotnet-sdk-6.0.320-win-x86.zip\",\n              \"hash\": \"9646e2895e5ebcb13bee11edd280db1787e05eaefadd821a00be25dd691260524b9df88a26ddd8a4124fc2b5798668cd85cea8c8443c6d131895dcb385eb38d7\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.125\",\n          \"version-display\": \"6.0.125\",\n          \"runtime-version\": \"6.0.25\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-linux-arm.tar.gz\",\n              \"hash\": \"296920a7f056892565936db575e4c4c91532664c9de613ac2f93c3f78012388f4dee42695d9d1cad5af9aabebab557f53b8a441d86246310034afc5fc485a947\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-linux-arm64.tar.gz\",\n              \"hash\": \"c9a5447423b7849d643e03c4d9c602b68016114a366cb0b04e31eb95e1f994b455d27c5a34ca80257cf860b1e4c63cd3d6ec244977414f93247392c9df8e2534\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-linux-musl-arm.tar.gz\",\n              \"hash\": \"5d89754a58ad18a500cd8fa39b7e371d23e797b7191e5c35338a573318b87b0382751e568dfe77c55d5bd4ebe30bd0dec7e74004f60f260566c7c3a251531ca7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-linux-musl-arm64.tar.gz\",\n              \"hash\": \"37504e7d1e7a2d54fbe040a8b790c5a13d949fd98604afffef92a286e6d241e167312211e678be6277bb2eb6c822bdd3845861965fa5cd7090a570dc14b119d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-linux-musl-x64.tar.gz\",\n              \"hash\": \"7d40ef89f44b75154e58a5c89ff32e100cadda4bd9e4302808c545881a2d77e128bf6c31715817af4a0e41ee1676970ea7dc95c73498c9a8c9d3082c1d768c0a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-linux-x64.tar.gz\",\n              \"hash\": \"00b8ae7cf985918c03788db2f03d5655441be9cb054e8e97dc3a69fb1a4979bd9aa1bf373d56554cb37d5395699736b0b73a29a2c7cff0b2776db72d353cf4f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-osx-arm64.pkg\",\n              \"hash\": \"807876a9db67da9369e08ea9b9616997caf0fd3139caf793c09dc59c78ab489496b64877057acdd5b95814b73f341c175de052979114662920ade6269afb005a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-osx-arm64.tar.gz\",\n              \"hash\": \"0b143696763cc185cd5e6490f8b732e06394a1d61aad80d68151dcab925a4b0e6260a06aa318672de0daff79e659499a041d7f64825f41efd0790d7a32796728\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-osx-x64.pkg\",\n              \"hash\": \"db6d4acbe4aeeece0c698968a81d4e4921abb419da008ecc41604a75ab00dbb91f9b6ff239d89d61eff4c720ec9488b4fa150b82229b07527aba39eb1f689925\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-osx-x64.tar.gz\",\n              \"hash\": \"4452b57309f228cb3144313138016d8efa32935b7eac5be007339de5b27e567f87190dc301ea6c553ba7d0013d50873b4af6f652008d2f1afcebe6df7b8bcf70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-win-arm64.exe\",\n              \"hash\": \"f2bb41baa76208d0c296ce39539f82ff2ca3ef5966709de38d731db73963333f882b1561d6f1dabfd66e3a858a6a36d349b425e8c55f67eb35f4ef286c11ddb8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-win-arm64.zip\",\n              \"hash\": \"3cb0f23af34cc430f62894269acca50e892fc471567b405dd0ab6aef5effcb56ae814c7949ba658b2060662f17c9be03348ef0269f6a0e3465d26e0b7c82cefa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-win-x64.exe\",\n              \"hash\": \"12231654d59dbb01c9cbcc98682b4b98394ffca7effdc333ea44042f3c7cfd72d184880867940b19422861b9d162556324e5783f27e56438324d962ff11f59a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-win-x64.zip\",\n              \"hash\": \"c9b5b5c7d1b45cd24f86e16d9a8db3319d549a93e9f82b262aa887dc4d171150d34c8b9523c88ba399c405e1cb0395a1377b5d8d5928fa5edc8df4cbe5abfc90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-win-x86.exe\",\n              \"hash\": \"388ef28c08c1bceacf4edafa58bb8dd574997e91ccd0b1c69173fce667b24860dd4b8c8ea606f777ce3ceba1a109f0a6a2c744c7fceed58cc6230d547721a178\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.125/dotnet-sdk-6.0.125-win-x86.zip\",\n              \"hash\": \"c6cb1d4aa32b3abf9681ee7d700f365a7a8f4604bdcfce86c2d8dcf79c3bc2120c10ccd8845b197ed0e80621455921ca5fb3477a8402250a465627b87616e6f4\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.25\",\n        \"version-display\": \"6.0.25\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23296.25\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-linux-arm.tar.gz\",\n            \"hash\": \"917b3207a20382d863dd33ad19bc075df49000726dd55908cec506f96d6ba406d5b60cf15bebc6559f128bb83f9dbce208e7f44ec87a8d183704a9314e0dc4ec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-linux-arm64.tar.gz\",\n            \"hash\": \"fdd2e717963f213abbab6dcd367664ebedc2f2ec9c2433fca27c4d2eb7704a73d3f4ec5b354b24d5be77f3683605a56f5675d1d543c5f76d042a1353deab8d73\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-linux-musl-arm.tar.gz\",\n            \"hash\": \"cf325dc954bbcc1476899fa6716cb7d474cf98eca12ae555425336e6277e638e93c2d186f61a93a2ccf19e33ee440a15980f5180b54fac1a2aa68121df30cab6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c0f827ceb51e39a0a78d82efad03a43adf1c6a9ca3e411ace69be2dac4faad56c74775381517d676154b3a5e0d972ba5ad05593623c7af945643d518749e0426\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-linux-musl-x64.tar.gz\",\n            \"hash\": \"2730ef44301f0926ba8edf41180351f7f145843fd37eff8e2845eab02a5c449281bbbfdd21f1710f7773d93627f514298a46706801aef0063f920c752e063ea1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-linux-x64.tar.gz\",\n            \"hash\": \"ea1e9ce3f90dbde4241d78422a4ce0f8865f44f870f205be26b99878c13d56903919f052dec6559c4791e9943d3081bc8a9fd2cf2ee6a0283f613b1bdecf69e1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-osx-arm64.tar.gz\",\n            \"hash\": \"ab9ccefa4d0249aa1ec313e02aa7dfec9b048f3db42881c808050efe3956749fdcadfbb937cfec19ac37fed70c81894dcf428a34b27c52e0cd2911fd98d29e9a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-osx-x64.tar.gz\",\n            \"hash\": \"d58721d8f0a7cf6538446b37ff6399c285e4fbbbc30ac0b550cada361ce2cbc981039e8c90e3d038de1886e91be5457acd5c88bd72008a208c62dd533080864d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-win-arm64.zip\",\n            \"hash\": \"8e14f72f1be989f0295872e31155b8aefdf20b6d71bf2c4628b62c76727d2b54a15682df8e218ec4dc8d17ebc8b6bcfb812daaa296c29797d8ee3ce1bf5f8526\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-win-x64.exe\",\n            \"hash\": \"f8ff2e8344d788b5e07cf615074c3fda07b92d0a949b12adcbc92ff6f7dd3ac6bac13cf95a90540e31d6c22f78f7421fa3a1ea296dd1c02564b5f9789eb2c2be\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-win-x64.zip\",\n            \"hash\": \"8a72dd7e3308cd2eb60d88d80a3475dc1be23d1909844a10e7b11af806ce6d473172ff9fe141e89e4ed6e2ace9ce3bed78952e711c2d4f655c49b7f767248b63\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-win-x86.exe\",\n            \"hash\": \"15811fa02f486599187ef87d4c6ed0d6d70c57ec75ea98f4e9d5342b061242048111b384605d3c4c57adfc43f4a1ea3349581031f40fc0476a83cbb262fa0735\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/aspnetcore-runtime-6.0.25-win-x86.zip\",\n            \"hash\": \"109018ecdd9dd87fc1806a9855ed3ad0b2a519ca97dd41a5fdcec8ed0cbbbeb685a70e4a65a8fd27db8239db00ecddc90d14a1c553f3b591f74daf426dcf7b22\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.25/dotnet-hosting-6.0.25-win.exe\",\n            \"hash\": \"2d0f527383f2d13cae85d3b8136949484bfc96bec7c23421ce400ffe82b46c6acaac420a59db49a8d7c96e42f54777eb5958c9c11c34a9c3d671697242b3280b\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.25\",\n        \"version-display\": \"6.0.25\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.25/windowsdesktop-runtime-6.0.25-win-arm64.exe\",\n            \"hash\": \"46d2811411a6b9eac0026b465efffc9d2c8c32925e3e4cac6e4b40eac1516e21c8cbba5f8a797ca5329d15e53e01bc1bfd4a5489da569d033306864d2894f641\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.25/windowsdesktop-runtime-6.0.25-win-arm64.zip\",\n            \"hash\": \"6a1357504a12eaf9e56ca85c1d0ba0fc4c94355f95570e79001d8fba919824b39ffe3fb8165c503e45fe4be897f4f59f25b17ce5d7363bcb1f042d275ae5a03a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.25/windowsdesktop-runtime-6.0.25-win-x64.exe\",\n            \"hash\": \"fdf1ae329d696bf280f3fee7c989bfc4678c640608e3175f7c26b3018ac58dc22d8f1618201cc209a8f28940fc94dcb144d98c8c91b072916f8f531f6aabc28f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.25/windowsdesktop-runtime-6.0.25-win-x64.zip\",\n            \"hash\": \"3b9b6a97bafc7138657e4ef484560215aba47fc2046a1a9048967c9492594c1bbba4ad0820b2cdea858d31fcad3e675c7c18f30e9c9731b2f915aae75eac474f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.25/windowsdesktop-runtime-6.0.25-win-x86.exe\",\n            \"hash\": \"fb83dd96a7ea4654f7bbd8d2e511df50dfc4633346b78ec317419bc9536b2d13cd71037fb80bdfefc87162fbb91fc9fd978751511877ace1a8788f2bbbaa82f7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.25/windowsdesktop-runtime-6.0.25-win-x86.zip\",\n            \"hash\": \"0b5f985f6a7308e57cae10f9a1118ad591e759091691acbeb6b4deeda48e0df75be23f522ea55890b931b0a595c31cc2c3c7b42616b179fb5aa9c50ad6af5a73\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-10-24\",\n      \"release-version\": \"6.0.24\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-44487\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-44487\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36799\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36799\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36796\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36796\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36792\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36792\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36794\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36794\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36793\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36793\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.24/6.0.24.md\",\n      \"runtime\": {\n        \"version\": \"6.0.24\",\n        \"version-display\": \"6.0.24\",\n        \"vs-version\": \"17.2.21,17.4.13,17.6.9,17.7.6\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-linux-arm.tar.gz\",\n            \"hash\": \"b616c9d71779a6ddf454a853bebdb1ff3828a17aac23457e8ec0be7647bad3a3e785e963b4d839c9479d381777741f0eaac8269bda4ff5d9eff52b0bf96659d9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-linux-arm64.tar.gz\",\n            \"hash\": \"43ec6b177d18ad5dbdd83392f861668ea71160b01f7540c18eee425d24ad0b5eee88dfc0f4ad9ec1cca2d8cf09bca4ac806d8e0f315b52c7b4a7a969532feacc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-linux-musl-arm.tar.gz\",\n            \"hash\": \"f721ef071ad6371a500bf2b23fb13fd8c1bf75c2787fa06f5b52e99c659599df70d74c893f9815bda4d718377e9ef699a90c3e65fd4d91394e1202be359199c2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-linux-musl-arm64.tar.gz\",\n            \"hash\": \"730139f03959449207670d4e1db4ea63d8935de7529f60bcac39c89c2dd4bba4e50fc2b0964698bec8be15cf2623e411dadda3ccb73d1bbe76d4f1be69d8c942\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-linux-musl-x64.tar.gz\",\n            \"hash\": \"7689d744353b1ff96953d517e6acce3e4a9f69649edfcf98d7fd73091a5b5dd9d22af48c1c806af77d1e14e1347cc15a760ce77ee3e0417cdb42b3595a4f5685\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-linux-x64.tar.gz\",\n            \"hash\": \"3a72ddae17ecc9e5354131f03078f3fbfa1c21d26ada9f254b01cddcb73869cb33bac5fc0aed2200fbb57be939d65829d8f1514cd0889a2f5858d1f1eec136eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-osx-arm64.pkg\",\n            \"hash\": \"2432c43ec53713e66a11a76949a3d3b0d64b19aee198ba39926309f9bbb2a9da49637ce70d264e0c3ed05ab3853bcd0b714fc086041a515d47518542747c3822\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-osx-arm64.tar.gz\",\n            \"hash\": \"fbbf6b385172700e4864db9db6f85bcec6fe447d504d181878ae7a3d7b4e06f19920c7aecbdb4c4700bc65f51abb7409cb68e99dda4af14319909bb2816c22ff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-osx-x64.pkg\",\n            \"hash\": \"cabb28be4678056ddf195772112fffc8fbc4c6eeee4cf77c312bd5a787ad2000c92edc041fa5fb4110520ce7315bbddea37b635ca880284e2733ba82f53f4bb6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-osx-x64.tar.gz\",\n            \"hash\": \"25afb6eb9d9404332efe32407e1dcef080a79372b8631b7720daf62bdea42c4fd36c1fdc12c6333c9c1754a1cb29f5ce64a1436e6392db396a9dce647a8f2c16\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-win-arm64.exe\",\n            \"hash\": \"107181c95647094a87a32e605003313e2fb0d713f6a706884a72cc2a9bc175fb15ba399ebc3107b62f00596288a6b15f605635f43afd26cb59b9daef2cb09cbc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-win-arm64.zip\",\n            \"hash\": \"309097669decaca8ad3ae8974a46f4613c3bef39a07cf6c8e9b3bc7f9001c9bf33a6fb22ac70ec96c7ab49349b115d6cf5192ef711933716846f2d44c23b4895\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-win-x64.exe\",\n            \"hash\": \"1759d5f7ccdfe046e0dbae1328e39547974e884ac8e98e33f96ca67b8f4dbc3d9ba04d9832a82c457665a7f1aa8b43ba71b547a4919b680d8c7031140953f58b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-win-x64.zip\",\n            \"hash\": \"bfa517496af8393cc44d9b91aa5516c2043258f9492aeaa24cce3a16ec52b6211341927d0de93ff858c9f41dbbc32a62b83d56433597ced4cb747ebf727a811f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-win-x86.exe\",\n            \"hash\": \"dbf54c6d97845ae18f58a45c2fc505138f1b1d48e765672a1477a96402846905bb945a248a53be781ae671f2bb3e11dc204be5e9abfc30ce027c150fb9c2aed1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.24/dotnet-runtime-6.0.24-win-x86.zip\",\n            \"hash\": \"b7ce7cd14189cf2c5e5b9540643f27165d3335f2711de342b90a4908232756891f0fcf79603a6c0628d24f09344af219d5d0ef705a788de736982ccb50240a91\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.416\",\n        \"version-display\": \"6.0.416\",\n        \"runtime-version\": \"6.0.24\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-arm.tar.gz\",\n            \"hash\": \"b9adf8bd6e7f882ba2ab154cc149a7f3ba01becc34aa6815b7ac62454f37f282f1502c499de33bf3d450014fda8aa65fd3708406143e2048f821bd9d0d74e444\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-arm64.tar.gz\",\n            \"hash\": \"b121ba30bd8bab2f8744f32442d93807b60dac90f8b6caa395d87151b2ffc335f93a95843f08a412d0b90c82d587301b73ea96f5a520658be729c65a061a8a80\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-musl-arm.tar.gz\",\n            \"hash\": \"c74cbfce68b1a5bea9d5c6ca3517bd0f8c237eeb5b9a7b6bd477aa87c4280596941a969937fa9262a24104837021577d564c5b89565220d4eac6c536e909caa7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-musl-arm64.tar.gz\",\n            \"hash\": \"99a4248382fd531fe80c219683edab854478db0baeec4f5ba7378e41f7ec3c123f59449fa0f7be2d573161901cea246c6f0b282baf057e37f36a540bf0b8b5a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-musl-x64.tar.gz\",\n            \"hash\": \"fc524499efa915bc1e5dc706b7b4d857fb1a521308a0e0350087bde826facf76c3e22e36afadad9e37e78a4b051fad4456deacd9fb00f97be6ab14d65dc85434\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-x64.tar.gz\",\n            \"hash\": \"5a3c60c73b68e9527406a93c9cc18941d082ac988d0b4bfea277da3465c71777dded1b3389f0dde807eda6a8186fcf68d617d2473a52203cb75127ab3dafc64d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-osx-arm64.pkg\",\n            \"hash\": \"ebff8a905b390d37946d3dc9d2845cbc5db4e1bad052df96e2dd2976f12d101c27dfdf5d914e746e13f6902903133723761f34d44ff570f20d5f4c77b212693e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-osx-arm64.tar.gz\",\n            \"hash\": \"7099b3dba1137e1f429adebc3ebb4cd002d6528dd74426a687c2919b7d01acea49cb65c2cff1f1f2e283d96159440c60d909258d2350b8e76df3e513152b23f6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-osx-x64.pkg\",\n            \"hash\": \"23a11a05bfa201f7d30b506417d0d3dc89dacb16ad2bb66b0db2539bc7977064d5c1c079b4d7731912a8189d650355d2d594249e249f0683bb4edef35fc62a25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-osx-x64.tar.gz\",\n            \"hash\": \"cccd47ac03198f7c2335abbf9ebaf11d76e229cd2690f334bafd70363de7045e600c33057d16689fba6ed95bb2f80ee8cd8258152c07c1972323471dcc6f2df1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-arm64.exe\",\n            \"hash\": \"5abd7a9b8343cf16eb29b4638f5e521f1ec8662dc900edd4301581866fcc57d3c77936394a1b33fc3592fd88c64aa35118e457b0f5004ce686db3ae66799e0bd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-arm64.zip\",\n            \"hash\": \"1d630c5e880986eee708faf09d64472a1282238b15f9b6042a48be331a08f6dd6cc8ff6a600c8bedee0eeaafe71ff5708740c655cc5519265d0b580fbe044593\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-x64.exe\",\n            \"hash\": \"b140bb7acec7c906655f15c9282154282457f829baedd14e907ad01d2d7614f17ed2a1a8aa61c3bb76c2322e35896ba93350e4c4980f72dc15dec4d61168d17b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-x64.zip\",\n            \"hash\": \"6823fd137d788db7d8cf4e05b88db7e451b993d41f2a2902ca547447c9def6cf840bf1e2a6a1ffd8a2d9ac66d26f3d4686c20b76f463af49f10e9715931e9d93\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-x86.exe\",\n            \"hash\": \"e2eea8b29743d8b7a12bf07a072801c0239f75f3809c387ad03fa695816c421364b913e8c589f8c2301e12adfa805471aa50c978f4b2d81153018847c59ca5e8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-x86.zip\",\n            \"hash\": \"39913c77abc0c925caa786fe9f4586ed93a3695383e6d3e12e50620b2d48c583dfc932d20179622614b32976c4ec22c9c8460ae08f50403c1537b1ba05653a62\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.416\",\n          \"version-display\": \"6.0.416\",\n          \"runtime-version\": \"6.0.24\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-arm.tar.gz\",\n              \"hash\": \"b9adf8bd6e7f882ba2ab154cc149a7f3ba01becc34aa6815b7ac62454f37f282f1502c499de33bf3d450014fda8aa65fd3708406143e2048f821bd9d0d74e444\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-arm64.tar.gz\",\n              \"hash\": \"b121ba30bd8bab2f8744f32442d93807b60dac90f8b6caa395d87151b2ffc335f93a95843f08a412d0b90c82d587301b73ea96f5a520658be729c65a061a8a80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-musl-arm.tar.gz\",\n              \"hash\": \"c74cbfce68b1a5bea9d5c6ca3517bd0f8c237eeb5b9a7b6bd477aa87c4280596941a969937fa9262a24104837021577d564c5b89565220d4eac6c536e909caa7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-musl-arm64.tar.gz\",\n              \"hash\": \"99a4248382fd531fe80c219683edab854478db0baeec4f5ba7378e41f7ec3c123f59449fa0f7be2d573161901cea246c6f0b282baf057e37f36a540bf0b8b5a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-musl-x64.tar.gz\",\n              \"hash\": \"fc524499efa915bc1e5dc706b7b4d857fb1a521308a0e0350087bde826facf76c3e22e36afadad9e37e78a4b051fad4456deacd9fb00f97be6ab14d65dc85434\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-linux-x64.tar.gz\",\n              \"hash\": \"5a3c60c73b68e9527406a93c9cc18941d082ac988d0b4bfea277da3465c71777dded1b3389f0dde807eda6a8186fcf68d617d2473a52203cb75127ab3dafc64d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-osx-arm64.pkg\",\n              \"hash\": \"ebff8a905b390d37946d3dc9d2845cbc5db4e1bad052df96e2dd2976f12d101c27dfdf5d914e746e13f6902903133723761f34d44ff570f20d5f4c77b212693e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-osx-arm64.tar.gz\",\n              \"hash\": \"7099b3dba1137e1f429adebc3ebb4cd002d6528dd74426a687c2919b7d01acea49cb65c2cff1f1f2e283d96159440c60d909258d2350b8e76df3e513152b23f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-osx-x64.pkg\",\n              \"hash\": \"23a11a05bfa201f7d30b506417d0d3dc89dacb16ad2bb66b0db2539bc7977064d5c1c079b4d7731912a8189d650355d2d594249e249f0683bb4edef35fc62a25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-osx-x64.tar.gz\",\n              \"hash\": \"cccd47ac03198f7c2335abbf9ebaf11d76e229cd2690f334bafd70363de7045e600c33057d16689fba6ed95bb2f80ee8cd8258152c07c1972323471dcc6f2df1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-arm64.exe\",\n              \"hash\": \"5abd7a9b8343cf16eb29b4638f5e521f1ec8662dc900edd4301581866fcc57d3c77936394a1b33fc3592fd88c64aa35118e457b0f5004ce686db3ae66799e0bd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-arm64.zip\",\n              \"hash\": \"1d630c5e880986eee708faf09d64472a1282238b15f9b6042a48be331a08f6dd6cc8ff6a600c8bedee0eeaafe71ff5708740c655cc5519265d0b580fbe044593\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-x64.exe\",\n              \"hash\": \"b140bb7acec7c906655f15c9282154282457f829baedd14e907ad01d2d7614f17ed2a1a8aa61c3bb76c2322e35896ba93350e4c4980f72dc15dec4d61168d17b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-x64.zip\",\n              \"hash\": \"6823fd137d788db7d8cf4e05b88db7e451b993d41f2a2902ca547447c9def6cf840bf1e2a6a1ffd8a2d9ac66d26f3d4686c20b76f463af49f10e9715931e9d93\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-x86.exe\",\n              \"hash\": \"e2eea8b29743d8b7a12bf07a072801c0239f75f3809c387ad03fa695816c421364b913e8c589f8c2301e12adfa805471aa50c978f4b2d81153018847c59ca5e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.416/dotnet-sdk-6.0.416-win-x86.zip\",\n              \"hash\": \"39913c77abc0c925caa786fe9f4586ed93a3695383e6d3e12e50620b2d48c583dfc932d20179622614b32976c4ec22c9c8460ae08f50403c1537b1ba05653a62\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.319\",\n          \"version-display\": \"6.0.319\",\n          \"runtime-version\": \"6.0.24\",\n          \"vs-version\": \"17.2.21\",\n          \"vs-mac-version\": \"17.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-linux-arm.tar.gz\",\n              \"hash\": \"fbb78ff5ae0887a09d50d0c675d66f315a2accffc5933e2b31cd9f08ceae5025185e5da3e51eccd2420a2c8a3b8838683a98fabe5b01620a6bee49ab8d636791\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-linux-arm64.tar.gz\",\n              \"hash\": \"58450a19b236a5076c21b194db06fa53c4b0840fca79a555d2ef5304525720319f5dbd0f227f566492524d9e236b39aea902e746d35ade654730928fe77a0779\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-linux-musl-arm.tar.gz\",\n              \"hash\": \"723e4e2dfdddb027a3faf3c9426e19b61e836b464c1415f9aa2b2b8dcc11dcc642cb7f7c460ca9192b7b41c82f8746606dda1f9e3f224a815e75459539f87af0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-linux-musl-arm64.tar.gz\",\n              \"hash\": \"5e1f23c97d9a235a78ce37215904ae766607bf96a9279fd8dafa590029466ef488b7634024845cac2dd8bd719eef18fb12fb2e3eae4fd85d0a459c2d788db3ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-linux-musl-x64.tar.gz\",\n              \"hash\": \"173b91d80dc5588463dc6f9182e41260f5f14f2dfe09d8c540b5a87b4521d8fe212b7d8c062d61d4d76bfcaecead0adbf5c134206804df5f0b45a9e477ec3e36\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-linux-x64.tar.gz\",\n              \"hash\": \"bcb280e57470b061a090d562d369226acc5aeb3903e735130f80cbf1dde79a99641542bf72632db9d409e5c36dc78737cf452e7d078de64ca8c2d937978fb764\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-osx-arm64.pkg\",\n              \"hash\": \"e880e4ce30716df7f2aba980ed6ceb8342df5ec25b4f817f004c4cb34b5c841dde22ad35e4f71ca098e1be4a8c259a7d060c7e57bf63ca9734c70dff259deaaf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-osx-arm64.tar.gz\",\n              \"hash\": \"3baebf0bf619f18102918c5b336f2c2d1149323c2b1f32fc923edac3a1463774230d91300b1e0c5c1df4fd0e5a6bc8e6bab8c4604c5705208448c778c7edb113\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-osx-x64.pkg\",\n              \"hash\": \"6961101d78516d06f02dfc28c24577d3b186934b533864c9e5bb0becaaaa49865cb45f8cd2adbb0b3bfcf5a0ad7da873bdde6686d695a978961d1c5001737c1a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-osx-x64.tar.gz\",\n              \"hash\": \"05d816b9ad79db474fd84c9e87334ed829dfc5f3b262b0d8ea75026733c3deb95bca2e14a8ee81cf41f5aaf98e4c178ca4783cb7289c2669feac759478ebf2bd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-win-arm64.exe\",\n              \"hash\": \"eac4c52ae1bdeb3134d256dfa0939089d349148835998e92e0a71c8ae8cf02a349e147f4be7ca601fe8b68aa8ebcc3f623a02d9325316c1cd56281a170e6d72d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-win-arm64.zip\",\n              \"hash\": \"f9809476f9d59d3ad1a257cd519757b6d7d7326bc3f055d659753888a5319edee8673f5ca36b9089c7cf91da769f12b87e7ad0979e7ececb5bd5a64d4f0ed14e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-win-x64.exe\",\n              \"hash\": \"982c707e7013d213e300434a996bb137e77458eac21f4a13f7c80e27926360fe3e2a50c4aadd55fede0c0d6adb83f7f3659f784e19ce1021d24a349336bbcd30\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-win-x64.zip\",\n              \"hash\": \"d7547a6cf3bdb354546b07cb5dde27e425e0fd07e4f0678522f55e9b409980e02efbc4e682162fe7adb5c5886eed379eef614f96d4432cedfcf9d52f9cb6613d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-win-x86.exe\",\n              \"hash\": \"b5a16b15b398f55384fac0c0fd06cb3842434bec3e15f673708a668c6141a82d6fbd58e66d6a44b1f9da56df4ab90171c940a1fdcb155a9de1c38a085437fba6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.319/dotnet-sdk-6.0.319-win-x86.zip\",\n              \"hash\": \"1d3e5555a7eb76f6e0ac37307cea7dfab22f2cc2ef59c7fe402f629368649233d51fd013d96921217c7be23fc6959dcaabcd60e36d1f39f2c7257f5ccf90d27f\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.124\",\n          \"version-display\": \"6.0.124\",\n          \"runtime-version\": \"6.0.24\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-linux-arm.tar.gz\",\n              \"hash\": \"9006a6e4e4c5f1da21e9ec25f207a3ceabbfaae529a496ce2e886b7bd2e6d12b9bee1b740b80051b73451b7f9375a53ab8ecb335a7a2b4c6f08db8fed29080fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-linux-arm64.tar.gz\",\n              \"hash\": \"f682166bacec8b73f20581e8616454b5d09efa277df6831eca28f51c828d6280ee188a81fd080e997e3e3c295ea505fd3a91b5dc1fb7c3af3954dcb7be5e296c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-linux-musl-arm.tar.gz\",\n              \"hash\": \"976ffa785ed3da1031bff465afd33d9e753af37ee13ce33e02131800a08a75ad842340bf916348c3c567aa4d4a91e29217d809ec79c9041a31278f6038e51929\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-linux-musl-arm64.tar.gz\",\n              \"hash\": \"957b6afb5ebb69a8a3160d4c949edcc530584842f8532c6e76317b2c3fab0eb42d00acd2cb4d127c54f9165983d4864e0a533aa8456dbc3b5a9cce8c9efbb266\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-linux-musl-x64.tar.gz\",\n              \"hash\": \"3604277105a5565fa7c246a52020afecb9876a5652efab30cb68a5889820bdf5e0e385f7967bc920d990172ad9c05f43fa7bc5aa73dc579505f17795c2bd2c34\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-linux-x64.tar.gz\",\n              \"hash\": \"7ac7f2600ac769f2448376b314da84c893dd3239bd34c440715568e8fa8b4dbda97b184173e0a1e5d65432c13876b9a52f0b287c698cc1118b3c647cc12a1148\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-osx-arm64.pkg\",\n              \"hash\": \"cd693ee4b7b1be0ddcb8d2ff66dd7887f766d384aec755454ea3a55202bf0d0b461543adfcea35782d5157e601d0790ba64fae85ef3e4537943c2b63d04cc6a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-osx-arm64.tar.gz\",\n              \"hash\": \"d14f168543816d127405e68d8781ead9ec62671f7d97dfe29c054fbb33266de64766d8e968dca73b282e0900d9497112601ce1066841a0577ee3b59c42347532\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-osx-x64.pkg\",\n              \"hash\": \"d2cd7174cdb4635f9ab2c52fa21da93f7e76f4bf0a923063811e9d7e99d08e93dbe4d4d6ca5b615bb8872a097e1bb0c85f31e2c082175742976c765f9f73942b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-osx-x64.tar.gz\",\n              \"hash\": \"bca0e52b86ec664cf1ca6179915080ada4620ff2bedf36bb1e1c8985201d934b8c4db99d3b05079d278e7bcaeda7006f7b50eb0398420381f2e1f725d22cf6bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-win-arm64.exe\",\n              \"hash\": \"7394a2e251ecec9fb91e223d1ad5ae19fd6b28b9911e6b77d751a248d016275be15c33c21cb75d418d556d757f5dae8c7de64f98d01d76b0ea6aea5d662e59ef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-win-arm64.zip\",\n              \"hash\": \"7d7ceded924a1b024a00560534a76e1c3fce198d8b9835f88393a5d6eb6457c7cd908dd035b313d639d4effd082f271e4ddc87a3220676e7a93ff66d81ac64ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-win-x64.exe\",\n              \"hash\": \"72af6cc19db15f6d760795a55130ef3dfbcbf9e7f7452735fc39f30fb911e3dab469e39495b5a54d9d66486e9ec795777099f8caa359d7486d79b32d81c258d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-win-x64.zip\",\n              \"hash\": \"0118d8fb7d67ff3ac1a43d9864440c294b566834a5b9d82657497d544708da1ba712a53e11e436fbd61ebab4cd63c35037f55b575c007d43437bc409963f63ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-win-x86.exe\",\n              \"hash\": \"8e9c3a01f03ce5d66ace7ee06fa62d993d20bf63c95cd21b82dec0071a24bd135ada3e5f939596cbe34a796b0228dff6cd5e82caeff7d0da071ed738c83c79d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.124/dotnet-sdk-6.0.124-win-x86.zip\",\n              \"hash\": \"a483330183da2438d89be4af7cc455132b920518e79c5eb0a60fdfd84e4523988805aae9c7d8c81e58eddefa4ed3c7384b4860444ef4c308241c35dc27a0c6cc\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.24\",\n        \"version-display\": \"6.0.24\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23292.24\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-linux-arm.tar.gz\",\n            \"hash\": \"c762222a8ae5621b0874d323f3e29027d9a08afd0673da67eff2e11b4e909b8581ce7b106732e1b833da857fc441cb203b07f96173a04b734c75823b87c78ee9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-linux-arm64.tar.gz\",\n            \"hash\": \"db5de0888441e93466f84aac459d5ea0c9079c9b8e00308abb0ccc687922bbe48ace22b5cbdeb0f38d89cd115440deab5d0b4f1499611822dfb8a0e9f13c4309\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-linux-musl-arm.tar.gz\",\n            \"hash\": \"0df571355d92599dca3914830339cdb725097795acf29829c471bd88552264246419b8529c151278538c902890b584cd8e95c0229ef335b0e0cf2cdb857c76e5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7447920d52a511eb89768f85a13f7eacfb8d72a16b0aa36ba9835bf18305bd5c23f3d19f82cd9533dd43883b8004533ac21e891924dcf8c4966b07494d7b5c2a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-linux-musl-x64.tar.gz\",\n            \"hash\": \"4f493a2ac2047611ce2145685c87c0013edb79972f43747cae15de3581391ebb5ea98d4cf77f6c06fd45e2ef13e2b4bbd355d73d73034951178fb25543f3a3b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-linux-x64.tar.gz\",\n            \"hash\": \"b14ed20bb6c2897fb05cf11154aa22df3c68b6f90d2e9bc6ccc623897a565f51c3007c9a6edcdbab2090c710047a3d8eed0bcc6df19f3993d1be4c6387238da5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-osx-arm64.tar.gz\",\n            \"hash\": \"1590236034ca91d347b045843d790288024b19939d34f356c6914bdc7ce000af9ceea63a9ce69fa599d126fbc6dae405a3a42cd4a02edf5ffa067388da8b4da4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-osx-x64.tar.gz\",\n            \"hash\": \"8cfab4466ab5a82c7e0110541708b08f894427036f54e2e8add649b9777c86b856f7d5fbd4c2709bc74343b5b1de937b13bff2f0b7e68726072f93b417632603\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-win-arm64.zip\",\n            \"hash\": \"5731bb1bed3990c1450af6f559e9322490921e571f4a0ab6377f22ba14acbb5f2b062cd0807046b2730a0c7de3b5d593e73b7051ed31f8faf7680f2bb21a1b58\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-win-x64.exe\",\n            \"hash\": \"da6289aed11536dfcfb4e114a5daa34ea215779eefedd3511d37ed344ef40ddb502e1540a57ec1a443f799c429e7b322c1399f1d5076d95d75984750949195b2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-win-x64.zip\",\n            \"hash\": \"dd23f5a6c2823ef9aac9f68cf2a8e18248f497f07c549dc585c9e4bde8753ded42cae465a717f556d3072b5f5cbabb0f0ddf7cd930f3f1c6f331707e591d96c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-win-x86.exe\",\n            \"hash\": \"9364aae7e1426e0b354cf5bb46d30830b804e28e3524ebf7a9a14007e34f3e126ef5efa3e7708258c9f11cfc88f60ad9d60bdb462e1e03417de4cdb4bf4d0022\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/aspnetcore-runtime-6.0.24-win-x86.zip\",\n            \"hash\": \"a4f74b34e94931d27f9c0151a958e2e7aa74c87ed199676d3642aeaf34f3e7815476993d1a91cf0326c75810ad0afd4409647942a5c7494615f62f45cc69369c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.24/dotnet-hosting-6.0.24-win.exe\",\n            \"hash\": \"55f380969e6afc4dda074c5a652d7199c7f26c69455b5137eeef0cf2e222304a824af6d11ec8fe0bb5ad33b668d1fa08f7a00fb71b559aa683f52e54b8223a81\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.24\",\n        \"version-display\": \"6.0.24\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.24/windowsdesktop-runtime-6.0.24-win-arm64.exe\",\n            \"hash\": \"8bef31e14549285acedee79e7163f4884f66e8bd8dde53193cb1e2e7cef020832447a0e8ff7549adc16f283f58d53c18376cb9cc6a2cccd17053ec3c67120e39\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.24/windowsdesktop-runtime-6.0.24-win-arm64.zip\",\n            \"hash\": \"28ca73bb273d1a79c9301bf3583ecf66fa143c423b8a9b61610fc41e11a4a66298adf02c74669420c17d6811a13a7c6356ee0697f49565eec3fba3f5ccc61ec9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.24/windowsdesktop-runtime-6.0.24-win-x64.exe\",\n            \"hash\": \"033e522bf27761173b76f65a77b4723574bdce81a8e3e5021ff4f156c7e221d44bd7ebb332ef56d3e8d9ac3fa2d250dbc98cfcdbfd5e27ce1516510fa816dcb9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.24/windowsdesktop-runtime-6.0.24-win-x64.zip\",\n            \"hash\": \"8375b16d6382b2fe53bf6a6ad6d6b49acdb9dad402735ea1c8752141b39d94f25d7839884f66b231749e1a87f7630ba5cb099df26d268f01be0beb788a93f9f5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.24/windowsdesktop-runtime-6.0.24-win-x86.exe\",\n            \"hash\": \"a2679007256c82625dd7acd06f00a8d4250395dc04da4963a9beb1817868464141fb817b15e23319aa25a6ed8b1dd7f55770f5c76a74d6a74fc24bd28e70c0d5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.24/windowsdesktop-runtime-6.0.24-win-x86.zip\",\n            \"hash\": \"2f0b2fc28c824e511fe6ce4759b51f60845694f9e6bf2634b6cb8e1eb4c1b2af5796d8b78dbec12f641ce7605ff878674b3f1ba7e922799521b2802fe01d129c\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-10-10\",\n      \"release-version\": \"6.0.23\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-44487\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-44487\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.23/6.0.23.md\",\n      \"runtime\": {\n        \"version\": \"6.0.23\",\n        \"version-display\": \"6.0.23\",\n        \"vs-version\": \"17.2.20,17.4.12,17.6.8,17.7.5\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-linux-arm.tar.gz\",\n            \"hash\": \"e949827cdec9a9129dfe1cd202c9b9426056bfe98f0000296ebeb0848f673751e1ea77ab9a3a782ca82651373620fd530ce68e399ddb541df31177813eaa79a7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-linux-arm64.tar.gz\",\n            \"hash\": \"f8a4ddfd6bb07d3303b722a0ac04c23545ea3020698b96308e8a4264149e15e3201d113ea431de69a8a8921a0e30364182ebe3ba263f6b1d24e3167b8d33adeb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-linux-musl-arm.tar.gz\",\n            \"hash\": \"a6d04786ab6824c571046a29d81fbf50c400fc8d1530948018742cf78870090f46447f0313148becbbf3ab13106c934c2836bfe33f4fb9f6d7093c2190725570\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ddc9a8d9a4bb723f83badd0e849d65f7138125207e4bcd17264ead839483687afee70ee1e1d01e6fab2fef95f85d552d950a9fe814416fbf8feb32842bbed2ff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-linux-musl-x64.tar.gz\",\n            \"hash\": \"9e0dd5233c4d69b77e3852f31f8e535d86d3381115a3bc7340e0642aa2358f7b7d8ce1cf5186126d238637d0f98186d7b54307f96c560d4f2356916962093e58\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-linux-x64.tar.gz\",\n            \"hash\": \"8182a852bfcd387343a589b71b0e51197b6b658e42dfa35b2e65ccc23d67677d974b00e748183ce61e9a9123e28ff43c9252d8308236c80679bfed16b6dc65af\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-osx-arm64.pkg\",\n            \"hash\": \"75e5b4b801ce67b261136aad3a42302ccb83dd083cd72ee35d6f3a948b50fc848579902a2a87b53d0aafc8a638a54fbd850774a7f93d8217ffe89497871e6746\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-osx-arm64.tar.gz\",\n            \"hash\": \"5c4c4398385f030b26a956c0935c4dd35ce8f17b1dfca7b04ba4dcf86d8c7569634404d076f7f392c7921543ccc266467bac7928347c53d3ec1af0e636b47aca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-osx-x64.pkg\",\n            \"hash\": \"318d42b58140ab8333004c0060ced62c4dc1d2a1bca03bb3b6533cbef058cc0d186a5fbc2980ec22afbe637cdccbdcbd52c2bc47c3aa2ef94b9665db5e1f65a9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-osx-x64.tar.gz\",\n            \"hash\": \"d77f1aee8337db4e95e7946ae07a27cfa78a13c998a8c77c09721b3c1ecfcd26c50cf376e39b3979ebb73e360aa9bbe0858ed4a72a2b8001edd0d55986137f77\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-win-arm64.exe\",\n            \"hash\": \"67cdc939112545ad6aa264ccb347cc21225664d63929ecbb7f000027dc881b655d4b647c7d6c623e9602ba6ddc583e302c7c2178afa17caf036359b1cda4f7c3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-win-arm64.zip\",\n            \"hash\": \"414af8a50be0a20627323ec1b1fe0520f9d18a8fa0190aa572951f8b6b20c4956bc0cc47c0ef01214d12c045dcbbea98e4ed5cdd2d8309de167934e98b49d85c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-win-x64.exe\",\n            \"hash\": \"59ae7105b565a6e71ad5e0dd000e33fe7db4ca8abe0b702ec87cd9fe79d1a41e91140e0d6e99732a8009b656cd287eaa8ccf3b31dcf2920eff609da73cf52413\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-win-x64.zip\",\n            \"hash\": \"051794f415fef0356889068cfab9bbb1b2e8cc5c074a5044dfe6a5359e8798b79194c3d961594ada78cc18fade20d30bcb1ce8cf88bddd60494ed43ee7e53a1d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-win-x86.exe\",\n            \"hash\": \"cdc9127ede2edcaa4fd13e9d6f7681346096a3c21cc59126cf81805b620a3d4986fc9a4e6b7fc430c8568efbe4ce1d3c2fc9cd41abded04ab30a2964f40106f1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.23/dotnet-runtime-6.0.23-win-x86.zip\",\n            \"hash\": \"394564e0ea4531f1654df412be2cc4da5a51a49095041f91e53ae2da7389d931772cdfcbabdb1920ca3e3669671ce5144f642e2c6feca936cbb13b61a1ca5c5e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.415\",\n        \"version-display\": \"6.0.415\",\n        \"runtime-version\": \"6.0.23\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-arm.tar.gz\",\n            \"hash\": \"47b4427d56b3926ec13343253d4b73488c2eb298b5f29b1f4eabb8258975b511de3a99041acb540c304fc362feff6cf84b820bb13b738cc463f4dc5a637b4425\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-arm64.tar.gz\",\n            \"hash\": \"b4f27faed674545cc139c87361889a1849750a34baea6b1f195aa25d35f53c75db38e9b9551e1ff794c54e5965d9911ef6a04206d7a963519dfe346b9a5a9cdf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-musl-arm.tar.gz\",\n            \"hash\": \"eb6036061c50c6fd0ab532aa0ea0d2571f09955f0b0dd7ee59e66bafce30b7beb869b48c46bad53af72f64a2bf2eeb813a492c44688293c02e7a6a7496ff62a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8911bdf9817ae994e9dac67bdcbf366bc544f9df151f2f32525706cc25a088c03a927642db97b25519ab2f02fd4a7775d8d8295c664d3c920e802a7d49707a6c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-musl-x64.tar.gz\",\n            \"hash\": \"841d46a789266c8d916402095f52a102e937ea36ac78aac7c92f0b66f602f7f55dac6f61711ca55bc8a79c953b06be7a4826c82bc28397da750ad4c7129c35fb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-x64.tar.gz\",\n            \"hash\": \"b1a3f84b50faf5840f5151bc8e41550f4c5828ea6a8df472e802fae8a00dca1a141ae620e2c20eec90935c322bc1fb082b38dee90a625766df1ec66b0f640d02\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-osx-arm64.pkg\",\n            \"hash\": \"25197e3c881e29cd0d2567ad8fa7f0e2dd40a7f9c0d1410910fb4fe751dfaa94fbd6b31ab3d4d831992f55209452783c77d4703fb0977a8a30d29e2b1aaa653b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-osx-arm64.tar.gz\",\n            \"hash\": \"fa5e6c19cbbc7ed431ce08d84ed6c37a96a225df62a0abe4c70c81d5bc563ba5a84e4672829d3278ae5f8ed6e2e02f98314e6a287b5c5faff34d7f887c6c31fd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-osx-x64.pkg\",\n            \"hash\": \"53953fc3abef0fa5e149369c6f409d209d5c3afa2eabf248a8d437c7dd6fe6aaa0db93ba3af3e9b54f0447796c29ef25e04d59442c0e65729c2c5395e55ecfc7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-osx-x64.tar.gz\",\n            \"hash\": \"545e2241f083942d907b6b9bb5f45ecf5a678568c85be49924ca797457d57ce9ff0486614f2951999a22d3f97828ea67e9fb5790ff68ccb13fa6751d8477aae9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-arm64.exe\",\n            \"hash\": \"c245191bc91c5d0d4dae88f7f2d0e5883e6579f900a7fafd82e5b9b0834696ee4c4785f2328aa546e644d605a607cfd26abc6640d17a6c4f0f316c4c9f4fcace\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-arm64.zip\",\n            \"hash\": \"4db7c641eb5f8bff73a9724cd593941f44b5b04409c8340522287da792ec11d9dc33eef7083d9f1c4ba4494ae5bf6a14037011c4232df1fd4fcc2f72744267e0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-x64.exe\",\n            \"hash\": \"350f1f2208e6ea6fd4b64bf2b5a97f49a0616b9d6462f243eeffcd0728116553be4d8aab1cb474546b36422f12cf140941138484c1f869e51aca82178b6a9d57\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-x64.zip\",\n            \"hash\": \"5e8f8e5bafc7075dc183cddd8c643d55777859fbcd0d8cdc8dcb5921b97de508ce9b87279e8d26ecdc1dac3b451c655f4953cd6575197aee5bee525b9da4ef18\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-x86.exe\",\n            \"hash\": \"9e5fdff19e986e799f748f2b0308acae87c3649346d8adf48b393aeba48f09fc76a9e179a6dec8e7556b7d51668325831cf70321bef0755b96d493f4e31f130e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-x86.zip\",\n            \"hash\": \"f1e2c552801f7ced79831bf0ebddcb227d5157ae3422663ca6c6743ab2e5e34c7a0855da9aac1ea0c8f4510431bbaa8dc2d416e90e12043182a1b6ae0658bf4e\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.415\",\n          \"version-display\": \"6.0.415\",\n          \"runtime-version\": \"6.0.23\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-arm.tar.gz\",\n              \"hash\": \"47b4427d56b3926ec13343253d4b73488c2eb298b5f29b1f4eabb8258975b511de3a99041acb540c304fc362feff6cf84b820bb13b738cc463f4dc5a637b4425\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-arm64.tar.gz\",\n              \"hash\": \"b4f27faed674545cc139c87361889a1849750a34baea6b1f195aa25d35f53c75db38e9b9551e1ff794c54e5965d9911ef6a04206d7a963519dfe346b9a5a9cdf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-musl-arm.tar.gz\",\n              \"hash\": \"eb6036061c50c6fd0ab532aa0ea0d2571f09955f0b0dd7ee59e66bafce30b7beb869b48c46bad53af72f64a2bf2eeb813a492c44688293c02e7a6a7496ff62a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-musl-arm64.tar.gz\",\n              \"hash\": \"8911bdf9817ae994e9dac67bdcbf366bc544f9df151f2f32525706cc25a088c03a927642db97b25519ab2f02fd4a7775d8d8295c664d3c920e802a7d49707a6c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-musl-x64.tar.gz\",\n              \"hash\": \"841d46a789266c8d916402095f52a102e937ea36ac78aac7c92f0b66f602f7f55dac6f61711ca55bc8a79c953b06be7a4826c82bc28397da750ad4c7129c35fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-linux-x64.tar.gz\",\n              \"hash\": \"b1a3f84b50faf5840f5151bc8e41550f4c5828ea6a8df472e802fae8a00dca1a141ae620e2c20eec90935c322bc1fb082b38dee90a625766df1ec66b0f640d02\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-osx-arm64.pkg\",\n              \"hash\": \"25197e3c881e29cd0d2567ad8fa7f0e2dd40a7f9c0d1410910fb4fe751dfaa94fbd6b31ab3d4d831992f55209452783c77d4703fb0977a8a30d29e2b1aaa653b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-osx-arm64.tar.gz\",\n              \"hash\": \"fa5e6c19cbbc7ed431ce08d84ed6c37a96a225df62a0abe4c70c81d5bc563ba5a84e4672829d3278ae5f8ed6e2e02f98314e6a287b5c5faff34d7f887c6c31fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-osx-x64.pkg\",\n              \"hash\": \"53953fc3abef0fa5e149369c6f409d209d5c3afa2eabf248a8d437c7dd6fe6aaa0db93ba3af3e9b54f0447796c29ef25e04d59442c0e65729c2c5395e55ecfc7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-osx-x64.tar.gz\",\n              \"hash\": \"545e2241f083942d907b6b9bb5f45ecf5a678568c85be49924ca797457d57ce9ff0486614f2951999a22d3f97828ea67e9fb5790ff68ccb13fa6751d8477aae9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-arm64.exe\",\n              \"hash\": \"c245191bc91c5d0d4dae88f7f2d0e5883e6579f900a7fafd82e5b9b0834696ee4c4785f2328aa546e644d605a607cfd26abc6640d17a6c4f0f316c4c9f4fcace\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-arm64.zip\",\n              \"hash\": \"4db7c641eb5f8bff73a9724cd593941f44b5b04409c8340522287da792ec11d9dc33eef7083d9f1c4ba4494ae5bf6a14037011c4232df1fd4fcc2f72744267e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-x64.exe\",\n              \"hash\": \"350f1f2208e6ea6fd4b64bf2b5a97f49a0616b9d6462f243eeffcd0728116553be4d8aab1cb474546b36422f12cf140941138484c1f869e51aca82178b6a9d57\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-x64.zip\",\n              \"hash\": \"5e8f8e5bafc7075dc183cddd8c643d55777859fbcd0d8cdc8dcb5921b97de508ce9b87279e8d26ecdc1dac3b451c655f4953cd6575197aee5bee525b9da4ef18\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-x86.exe\",\n              \"hash\": \"9e5fdff19e986e799f748f2b0308acae87c3649346d8adf48b393aeba48f09fc76a9e179a6dec8e7556b7d51668325831cf70321bef0755b96d493f4e31f130e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.415/dotnet-sdk-6.0.415-win-x86.zip\",\n              \"hash\": \"f1e2c552801f7ced79831bf0ebddcb227d5157ae3422663ca6c6743ab2e5e34c7a0855da9aac1ea0c8f4510431bbaa8dc2d416e90e12043182a1b6ae0658bf4e\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.318\",\n          \"version-display\": \"6.0.318\",\n          \"runtime-version\": \"6.0.23\",\n          \"vs-version\": \"17.2.20\",\n          \"vs-mac-version\": \"17.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-linux-arm.tar.gz\",\n              \"hash\": \"421811f0ebfc6411ed26c1607f97aca626b724785fd13f1b8ddb3801b1fca349abf48123acb07405a81eee43eeae01a6bf282e9bfceee10ed6e4b78afe78e188\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-linux-arm64.tar.gz\",\n              \"hash\": \"cd388dba7837a5936b58034d0b0f8162719f0035e357a14222727f8806c741b833fe24293c9e01c4b5c1c8a1811fc8eccb54eb2a8dd1c4c5d089285f12466ffa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-linux-musl-arm.tar.gz\",\n              \"hash\": \"08a6e4f4c7bb05df85941f4ab7d2d3eba9f17aa2ac3894558892b8e5b25be4ab347f9b99e67d191df08dd962bd4d76004fbe084dcc07356ab4f8e084fe0ee645\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-linux-musl-arm64.tar.gz\",\n              \"hash\": \"91c15b17002557d04dbdaeca8d3cecbf9e6c69d246c80488a6d22d6a75fd4003453b3f0105020bed8e1db0d4050175c5890818a23e95b1bbe478f9ee3427931e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-linux-musl-x64.tar.gz\",\n              \"hash\": \"ea62d3b52a59345d01256a1d357230cade04f461734ebfc202a893f6d8b8a838d2f42a2ac0a1585cf3d1a48de3787f640fc90238953d4e08cb9a7dd1973c913c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-linux-x64.tar.gz\",\n              \"hash\": \"387409ec54eab90d8e511fbc0482131fdb5e31c042d8aa72beadae5c09f8900a4f4568becd70f274210d6b2ea68dbfbc50ab69ad05c4d801c378adafd7ced2b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-osx-arm64.pkg\",\n              \"hash\": \"7cbc87b3279283f0df4c1f986f7686377d73a83cb6d7b762f585ee0b880f1e4fc54e5dab9bede036499b5b68d8aff9eb3ded901347923e73fd16b94c84ac9afe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-osx-arm64.tar.gz\",\n              \"hash\": \"6faaee57ac26cecdefc5dc4afb08f86bd220118df9c6cd01a3782809de3b08aeb7ff5e90f0f1b6a70ef8b9af604b41fcd0bfe14bcdef11e4135df786d53db9e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-osx-x64.pkg\",\n              \"hash\": \"f14df31223aba09fb8f2811a6603c6503c9505c7ce03a28d403ee7dedf26cb42ca5a8bd965a69b25b16d7f1a47b91c933d424300e9176df5ae046e3defa869b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-osx-x64.tar.gz\",\n              \"hash\": \"c9a6aac5a981bf1c10d9c136583df9fc3d34687ea7db0232804796e17e176655f9ae9b42611abdac77b8747c14ba37b09b7c9542a621353e25fe98c314dd0ec8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-win-arm64.exe\",\n              \"hash\": \"528da87cedd7a414aa73e70d20943ad04b346e4de134bc246287428a05963cc8d64a40c54992af519bfbe06b6a9b2b2caf2794acd4681fea85376fcab3e745ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-win-arm64.zip\",\n              \"hash\": \"de014db9ef5259be7e0ece0c42532a4e7ce01b0fbaba1c84e683510fe5f56c6e495d59edb51c901207f65f4fbcbbad22cd25266cc81afce1f40fef5358a19b0f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-win-x64.exe\",\n              \"hash\": \"1fb5a4a677b676ff5cf08a4d41a339d95b12fe789a86424f8e2c85ed4bbd6a87f22c7e9c68097dc1be6fb827c43a150e01b3a8e8eb5afdc4542e438ea4b53168\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-win-x64.zip\",\n              \"hash\": \"2455589dd4e63034cca4200c07ef82e77bd794a6e4d46f98015e7323125ee3c715b3d05805b218ec26d7d2c58916ad55e846b1bdcee0c80a725a671b492a1d91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-win-x86.exe\",\n              \"hash\": \"3966a710439625c7408c2c1e872cb0841b170b0f170eaf26c85451a85162913102f7e9ffac058ec524b8f889446bb0661620a57e1b92442bcab26d978c3995ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.318/dotnet-sdk-6.0.318-win-x86.zip\",\n              \"hash\": \"423f82a4f9622f7374d647c6c8129e315a80908e06eb98e428fe347dcaca0369ab0b1fd1f75ec55d4197b8ffeae5c7da8d885bfc738f8a5806485a3ccbe52dcf\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.123\",\n          \"version-display\": \"6.0.123\",\n          \"runtime-version\": \"6.0.23\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-linux-arm.tar.gz\",\n              \"hash\": \"f2437fe0aa68aab89132600dabaaeed5854045a82673f775acf9f1c274d09af13016cfd1b9a9bb5615689251cb5c3822492f8972a6e4fac236f9751b779cad58\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-linux-arm64.tar.gz\",\n              \"hash\": \"cd6c33105fd9a6fa0b6ce124e9a1aaa16555903ce5ad5b01e7c7bac6725885069fd6436c5abb050911c64bc27b1cc31ccc76b31e78b4ae897bac5a77cc790320\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-linux-musl-arm.tar.gz\",\n              \"hash\": \"ba7ed66189a501a662f1ca963210bf21de5f6733ac833c7c2806ba11225f0762624e009660e884d35db8f651b1510e853322feb7375a1016cdd0c630ade0a53b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b4272eb98b2a1cd09fc9303eee33c175b2c1985e1f038455fa00e4c19da068426a50a3a4c8bd96a12d947255d2a7c3f8a5ed1c26cfea8968fba1a542bdf60700\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-linux-musl-x64.tar.gz\",\n              \"hash\": \"1ad5a65fc427acefb2209f771fc94c9967d3f99251f3b44b5e484e7f1f2a292e542b071d6a84fc630a044e61cc16c696d7734d872e93584b25006cf90a76e8b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-linux-x64.tar.gz\",\n              \"hash\": \"547d8043511df68c94f0f821cec8cdab8d603edbe8f51021d56b4f8e4666c0c1900b4e91ed20b87d611d2da21d4e9453903902be82941f4ac7bb9c94f88dfebb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-osx-arm64.pkg\",\n              \"hash\": \"01b975c4c964d2cc0c4196a09b64fc3b9c41dc68e3c0e069648c1786fb7fcd85bda5b03c03aa9f1db177672a8052ea57aef76c84873e11e8c7ac60832a7545df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-osx-arm64.tar.gz\",\n              \"hash\": \"61329bcb26979cf3c804aeff836ccd82ff67172bfe1abb12dce30b8c5e03f28c989c2874eeb04118da94a6634654e2b2bb4443a26191dd078124e209ed8e9197\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-osx-x64.pkg\",\n              \"hash\": \"5a2a97b3e03bd0d3a79a56d6c07b9b36082e4cfd589777ce0de6b7aeeee383ceec31ee7c13403b82b39e3f4ee4825646430da2891674e6995300092a2ee1f0a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-osx-x64.tar.gz\",\n              \"hash\": \"8b33862753011fb9d013debcb13733c192ba04e37c5697d2496973e354168b374830091a2e17cc92de6b88124e1af4dc0af8207db02f8fcaadc87c5d1b5f40f1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-win-arm64.exe\",\n              \"hash\": \"6b8d4743931c96989796dcb3fa503bc6805693b2461f424e42a65069e2507115ef371396e19e633c88410aebfa0c11705dac466c3cb013f723cc198316e6d497\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-win-arm64.zip\",\n              \"hash\": \"728abfb8a9096d8ac16da2a30ca6f93e88087513bc8e7fd38dbe5921de173a2ebaf6a752948eb362a9be377436c1d00856f334c1f94f88fbb05f3d5d2cc8eabb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-win-x64.exe\",\n              \"hash\": \"cc08766c968ca36a666ee6a1415fe97f07676313d969b43d04ecfa394375f11477f28b79eb4a8b54bb34a61f99d035b78612b33fb1887b8bb6e774ef28aa5aff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-win-x64.zip\",\n              \"hash\": \"32c73440d2b17cbda1a26df06d58866453876be444e0597049b76bdbf45dc1cc1b5b98f4eb441de1736ea73a2f2e84a263b05bc09c21aee1e1eec8316976e91c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-win-x86.exe\",\n              \"hash\": \"52971e0436e88b31d57982639db52745d750eeb20238d764fba1eb2afbabe5d2b45d8a986f8c4cbb47d11d5f14062543dfb28bd4ec5c816837b02190c875a009\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.123/dotnet-sdk-6.0.123-win-x86.zip\",\n              \"hash\": \"e8c5780dffc8e80a9503d72a5241666fd45a8b43acff1463305673dea46a932bad5cf9c614300eab8fe355bc6fed0b87df520ab6f853cacc4eadbe3142277748\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.23\",\n        \"version-display\": \"6.0.23\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23273.23\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-linux-arm.tar.gz\",\n            \"hash\": \"ccfa4c0ae99eaef029f7f52c7c0154475920c9df8fcf39b84b238acaeaadfa0333e6ebefb67e9b8249d876ea79b25a605e094bb1fb28397ba38050bf13e1f3da\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-linux-arm64.tar.gz\",\n            \"hash\": \"b9624ae5cffec0ed95ff66263ad471993aeafc508856d26cac0f23f7f3e0f66b8680c3ed738f7b097d54a404196e624777731f4e199a698262d47c892c5f8ecb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-linux-musl-arm.tar.gz\",\n            \"hash\": \"558f085c04f73ef740f9a43c8dffbab6c7fb463cbf0ddeb551bce138808389acc1a0d2f7c858fc815a5b3b8bc56fd561237830633db810ca9ca7265b7303cc10\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f47d4b1699c36d87db4297e86cf62222f7c89ed0341200df4e7dda6e63e3c1afa255e874501ed2cdf2a9170c508df54b27d88f0be72e8dfc760c02d3088c8c43\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-linux-musl-x64.tar.gz\",\n            \"hash\": \"e4b5f6447d498e352348490e70a7f6c0abf9339f7a1d326f32b5f96cef166833b1e0e942c913795a2d90b203e02f44f77be62f7898c17eac7b6c665cd4c13227\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-linux-x64.tar.gz\",\n            \"hash\": \"c2f0d82fd0dbfdd56c889d435af20f3b1d55850605df892251b4679830dc5b3466c7734912b7073bfca803e5a75a59e929fb36cdc7d4978d7eb0a563da83d08d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-osx-arm64.tar.gz\",\n            \"hash\": \"33aa672c4ecced027a37ead440146a1ada5020741b1565983d6a7482be429baff5323b8063b64213013547ca62877ac1f4e28323714801e5259bbaae8961abf6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-osx-x64.tar.gz\",\n            \"hash\": \"4c092c32f9717491e9f8107b2f30b4054048d9d941583fbd522908560b922e768dd8801fdb3f0e0e0dcbcb17a4194a037d88963b88daa999cd148074b6c1e396\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-win-arm64.zip\",\n            \"hash\": \"188ca8d270a26e858c70e2e5bb2261aab76325a913c935f2413008f4bd3f0005bb968cfbe876ba2939717bf928d4ba9d3cf669a3767cd4e479d39e14da57ffd6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-win-x64.exe\",\n            \"hash\": \"6183a8aaad0af1a026fe2d6f66cf9e0676ae3f417659dccab3f8dde1e0f8bc1d7c6dc33fade29ae3b0cecbdb09e53cfc469473a20e000a85c6c98b2423c8a2b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-win-x64.zip\",\n            \"hash\": \"1dc5781bc3bdf633a4141b12fee25673c3448bae89d119d8f59c792f39eef84a505035f2526dd624ed6cfac1f7da7e02d3a23f19f3d5e1961876102472212bf6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-win-x86.exe\",\n            \"hash\": \"ac8ebd88cb5b947c06b1e5b44d53a7cdec823d0de8e3f1959556a90ca43b2fb5b19c265b6e011ad8b7a27b13115cd818be6a95b01121de1c5a480b718c4d1970\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/aspnetcore-runtime-6.0.23-win-x86.zip\",\n            \"hash\": \"4bc6c6e2828c2d4e126585a3af45273ef94ef5270480f4b3be403fb42108e1ee3f12cea2c85c05bf311ad23a6b6d08addd980544c493dddf48427226f15d7e5d\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.23/dotnet-hosting-6.0.23-win.exe\",\n            \"hash\": \"b0fab7d01aac899623fa5dc79940749ee58b29980d82d16e6aca794e323de46234b2263d70ba7e83cf989cb6c48d07e293f25a39b748e5a88874791566d38616\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.23\",\n        \"version-display\": \"6.0.23\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.23/windowsdesktop-runtime-6.0.23-win-arm64.exe\",\n            \"hash\": \"1a5e7999bbfd3619792523478172e549bb5385c87dea934fd78fe6cecd488426a3bf0a91d1b1f07ebf5884dbfac0fd3eaf74613113cff39acf630f1ce1cf230f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.23/windowsdesktop-runtime-6.0.23-win-arm64.zip\",\n            \"hash\": \"d7287c76336d6d5b58ab44b02fe6c24a3640d61414b211f2b2e40052a06c881812064ccd6f5f8dcbbd2c207e9d4f06167ea7371e1afc87db40f16ca63f726452\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.23/windowsdesktop-runtime-6.0.23-win-x64.exe\",\n            \"hash\": \"73d07cdcd8a876ba8608490d34e6513c05eac9a70ce0057ff53008f733d3615d57ddf33ea9afc736d4c8d4b19fe38d5cc132c2c472c5f1e38bc7650777b4041a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.23/windowsdesktop-runtime-6.0.23-win-x64.zip\",\n            \"hash\": \"91bed4faeddd9e59939dad6051809ec83e1015668d7e9cf69d2a228c4291c7e6154824c86579d9832668a83c25817701ee11058f7d14d4f420af463f8cb74d0c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.23/windowsdesktop-runtime-6.0.23-win-x86.exe\",\n            \"hash\": \"4cc01bb5d2d52bffda533f447aa8bafa73ad5c127d6f440803f0350abacd6119e408e68aea8f155ae715c3427c9ca1ec8acd262f563e2592e86eccb09fd29de3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.23/windowsdesktop-runtime-6.0.23-win-x86.zip\",\n            \"hash\": \"5a9c28aebad54b1708baa66c421be49e40823a6a534645fdc117e1a4cb8fd1b4ff7122ab546c6507419ec2e04731dc68408e966f6e1d7a21e90975688ee3402d\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-09-12\",\n      \"release-version\": \"6.0.22\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-36799\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36799\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36796\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36796\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36792\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36792\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36794\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36794\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36793\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36793\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.22/6.0.22.md\",\n      \"runtime\": {\n        \"version\": \"6.0.22\",\n        \"version-display\": \"6.0.22\",\n        \"vs-version\": \"17.2.19,17.4.11,17.6.7,17.7.4\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-linux-arm.tar.gz\",\n            \"hash\": \"efaac74d49c3848a55b861ddd4b411dc667a649c20d2f9ef0221eb48054bb669ba0875613068676fcb1e13bec8866de9d8873472dceaf6f33559f540df62512b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-linux-arm64.tar.gz\",\n            \"hash\": \"bef57f12a8f9ad3c41767b85158f76c996f38db56bd4b8d800d9ccd107be3e1d47a3d2917a252bdd937e3c30547e431dfbc295c7ffce8eb4ab072ade426c53f4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-linux-musl-arm.tar.gz\",\n            \"hash\": \"4cf517b9c726358ad1cefebc2a36d327a5f4d1f7e25f4d6e0d07329eeb3ea2954433af2b7172bb4d0866aa12e6fdc0c4e30f7b1e64193d36be6bd05c6a074ad9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-linux-musl-arm64.tar.gz\",\n            \"hash\": \"72ff1a7faa5ba8af941456f830a8d09514fb63d9d30a352193480919c19dfaa60a19b7cbcb3d29ba0f6d8a3e3bc24450520509dcc043b769cc42c3562ad17255\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-linux-musl-x64.tar.gz\",\n            \"hash\": \"89ed90be247136f205ae1f51ad932fc9ae04ff6b235a08564902f1327074704935850e573f550c404c5c53abde77fc51c222a2a5d94402d48ae379a42a004d88\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-linux-x64.tar.gz\",\n            \"hash\": \"c24ed83cd8299963203b3c964169666ed55acaa55e547672714e1f67e6459d8d6998802906a194fc59abcfd1504556267a839c116858ad34c56a2a105dc18d3d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-osx-arm64.pkg\",\n            \"hash\": \"c04f1196e8a80c75c54cdd29ded919181bb248455b8c993b14957e0e0369022a05ea4956870b3791264a874088b6bf07a4e5d5eabf41312130d0caeb6676af9c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-osx-arm64.tar.gz\",\n            \"hash\": \"5038b29e5794271284d8316cbc454c8b1f1e54c30fd15305051008ff005a79ae22367bb2a50b03ffa4ce00228d1d82a3361d675a1a1a2c8ffaee3dffdd7c4eac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-osx-x64.pkg\",\n            \"hash\": \"0b082d3c6819cf76d8a3f2f8fb9c94a7c97b045ea73cb585d327c3a2381291014108451f0c73151fb550c7ef66cdf4e019ee37b530538534a0b5f48befb3a603\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-osx-x64.tar.gz\",\n            \"hash\": \"cea7d3de081cdc6053861398700211561e2c7990be2e8d982b007f485321c5b6255622069d4c4adf2c0ddaefbd2438625617b10294d7c05dcd36d283bae40567\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-win-arm64.exe\",\n            \"hash\": \"1a885e849fa42e82d67de49a1d5034e9bd13bdd9b8feacc4eeb23d109ee964cc218d5598f1fdb37005543d808dd6a1284c090e3634ddb92f9f9c695c1696794f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-win-arm64.zip\",\n            \"hash\": \"be15e393b58ad33c5c27824fd5c5c5932fab288a702e331a9a9a3dd7b7af03408c9a4337d276f68beb6b9c0692947d00e791ddda4029134f0adf81791803db77\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-win-x64.exe\",\n            \"hash\": \"30af32eb50f70089cdf206b31a7274ad30ad81ba25cf72fc6e16108d647e3f279f5073313f60809715ba556a041b005c3b3ded297d54e0d8794a3e407f31cf0d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-win-x64.zip\",\n            \"hash\": \"459620d832ceb111d98997c3842ff3b76d5e6df27d108680db2e64525b0826ea2203dbed1a619b4eafcb6136fab37e1b5ce9dead9220cc30f9309a0b9a94d88c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-win-x86.exe\",\n            \"hash\": \"07648a53028d2377cd742433102d972e190db48ab65590227403f2e7c71ae46f3693e83aa692f0d845ace57bd6ac9e997076fc81ca46d5eccb93c6d88c67398f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.22/dotnet-runtime-6.0.22-win-x86.zip\",\n            \"hash\": \"2d18503ed8b2ed43fd35ec6dbdfb57ba2215104b3f5473154b2ffd2b0429b4c37b7fe892f3168dc4ceeacf98ac1c5e06fdd4c3b0a0ee8603e15bc4a36c632e92\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.414\",\n        \"version-display\": \"6.0.414\",\n        \"runtime-version\": \"6.0.22\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-arm.tar.gz\",\n            \"hash\": \"254be65d003216cd11adb3f383bc1144201f9721e0b8eb1244b612bedbcc1e60d308c27aa2fd3ff972004dbbcdd4be04ec14910bc6287b5782f9f020a43ce6e6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-arm64.tar.gz\",\n            \"hash\": \"225367725fa2af00240654863c4dbe2370b95542d8c411a78017e37e13031a67049bcf570b94d9fdc9f61b1d13db7bf7ff9772bceccb70f43dd468302a47016c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-musl-arm.tar.gz\",\n            \"hash\": \"b74c8d0266919d4ed9f7b67734ba99d5316cd29a645d7ed695d63d9af72f61e525e8f4e141e782a99e56aa6f374dd3a1678d54e97ac5d225032e45f07aa72ebe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a7cf98e577b6525beb60fbcf8d5f641e30d66f97c13b817d3c47f3453be1c1187628033d70e12fc2a466c29260a86c3bff1725da6d4641b971a82d8a6c4fb36c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-musl-x64.tar.gz\",\n            \"hash\": \"b6ee69731118f8492ae80e6a3dc238755c1944d1ae4e74ce35fe231a067bbfab81b3a8cbf0cd14ae73c0912bde4054727b6885ad5009b2284d471a463d587cea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-x64.tar.gz\",\n            \"hash\": \"79bb0576df990bb1bdb2008756587fbf6068562887b67787f639fa51cf1a73d06a7272a244ef34de627dee4bb82377f91f49de9994cbaeb849412df4e711db40\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-osx-arm64.pkg\",\n            \"hash\": \"5b8ff039d90d1c8331f3ba5c10c3622ff94cda9c6c7231240eb45ce8c14c0fc527d2ab2bda1fbbe4f3aa6ce6336d0bbdd18289103d7dca00bbd69e9d46d7fc97\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-osx-arm64.tar.gz\",\n            \"hash\": \"02c65256834ed5cb947089ae4f0b2f5ad0bda44fd3abd06d9f5003e2090017a384a569ef08fa7f4abfdb368345c34242569cb81980c0463529469e522e742042\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-osx-x64.pkg\",\n            \"hash\": \"024b0c97314c524e663ba7e664f5f850a1d9cd17f617f6ed72b6c1c92fd299de44e98f6ea3faac48aaf37092b2c5314e1aaf046a631ec124fb34356d2759dcc7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-osx-x64.tar.gz\",\n            \"hash\": \"399c9fcef1ac858685f67d33079a49fd814d90926d47161680eda23820281acbd3b0a98fc7dffedeb9e2072f68880d74de3e4ff4d369046af157817dce61d5a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-arm64.exe\",\n            \"hash\": \"31a6332c0847becccdfc957bc94df253939f721940c852696f3e98a8d93b2ea126266582801d3ccb80bc5f658909f2633ccb18e613dd36db93d2fe1a7dd67e55\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-arm64.zip\",\n            \"hash\": \"4b81d0299bcfa43a05b2f65d8fad35ba4876631776d4569d8e093ec3512f08ba833a399efb193283f414df3384c49a4ef3ab9e9fb8ce871c1021329d0e2cd723\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-x64.exe\",\n            \"hash\": \"e24ab9c5d29f42685afb4ffe444dde03329ed1c76a339dc0dd397057f8392c719855fc2883ffb146ab5bac668e3bfc2692aacdfa5bca11191b41ce31edb5ae38\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-x64.zip\",\n            \"hash\": \"6f9cec518cd1c39ab0a161e890d486a920d553f2011d9b0f68ad962b0f5e16a4c14124c99c5bc09cae007ba01603118a3f0f2aaaaec7f4578e7e57f8d3d43480\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-x86.exe\",\n            \"hash\": \"a08a723e62a4917b3c7cd57bf809f2f9100739321b6fb8c267959c95929fd9acfaafb70bc838adcef39fba2720b1cae7f821dd2a11e54c95b5800426fbeb5e16\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-x86.zip\",\n            \"hash\": \"e2e94d4baffcba62f3e3fe94556998f893bbae1fd9abf8ec4325a6bb52d26fefea512512b0205047afe42520e623d5b68e952315f37287df53c6d922200dd4f9\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.414\",\n          \"version-display\": \"6.0.414\",\n          \"runtime-version\": \"6.0.22\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-arm.tar.gz\",\n              \"hash\": \"254be65d003216cd11adb3f383bc1144201f9721e0b8eb1244b612bedbcc1e60d308c27aa2fd3ff972004dbbcdd4be04ec14910bc6287b5782f9f020a43ce6e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-arm64.tar.gz\",\n              \"hash\": \"225367725fa2af00240654863c4dbe2370b95542d8c411a78017e37e13031a67049bcf570b94d9fdc9f61b1d13db7bf7ff9772bceccb70f43dd468302a47016c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-musl-arm.tar.gz\",\n              \"hash\": \"b74c8d0266919d4ed9f7b67734ba99d5316cd29a645d7ed695d63d9af72f61e525e8f4e141e782a99e56aa6f374dd3a1678d54e97ac5d225032e45f07aa72ebe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-musl-arm64.tar.gz\",\n              \"hash\": \"a7cf98e577b6525beb60fbcf8d5f641e30d66f97c13b817d3c47f3453be1c1187628033d70e12fc2a466c29260a86c3bff1725da6d4641b971a82d8a6c4fb36c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-musl-x64.tar.gz\",\n              \"hash\": \"b6ee69731118f8492ae80e6a3dc238755c1944d1ae4e74ce35fe231a067bbfab81b3a8cbf0cd14ae73c0912bde4054727b6885ad5009b2284d471a463d587cea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-linux-x64.tar.gz\",\n              \"hash\": \"79bb0576df990bb1bdb2008756587fbf6068562887b67787f639fa51cf1a73d06a7272a244ef34de627dee4bb82377f91f49de9994cbaeb849412df4e711db40\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-osx-arm64.pkg\",\n              \"hash\": \"5b8ff039d90d1c8331f3ba5c10c3622ff94cda9c6c7231240eb45ce8c14c0fc527d2ab2bda1fbbe4f3aa6ce6336d0bbdd18289103d7dca00bbd69e9d46d7fc97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-osx-arm64.tar.gz\",\n              \"hash\": \"02c65256834ed5cb947089ae4f0b2f5ad0bda44fd3abd06d9f5003e2090017a384a569ef08fa7f4abfdb368345c34242569cb81980c0463529469e522e742042\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-osx-x64.pkg\",\n              \"hash\": \"024b0c97314c524e663ba7e664f5f850a1d9cd17f617f6ed72b6c1c92fd299de44e98f6ea3faac48aaf37092b2c5314e1aaf046a631ec124fb34356d2759dcc7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-osx-x64.tar.gz\",\n              \"hash\": \"399c9fcef1ac858685f67d33079a49fd814d90926d47161680eda23820281acbd3b0a98fc7dffedeb9e2072f68880d74de3e4ff4d369046af157817dce61d5a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-arm64.exe\",\n              \"hash\": \"31a6332c0847becccdfc957bc94df253939f721940c852696f3e98a8d93b2ea126266582801d3ccb80bc5f658909f2633ccb18e613dd36db93d2fe1a7dd67e55\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-arm64.zip\",\n              \"hash\": \"4b81d0299bcfa43a05b2f65d8fad35ba4876631776d4569d8e093ec3512f08ba833a399efb193283f414df3384c49a4ef3ab9e9fb8ce871c1021329d0e2cd723\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-x64.exe\",\n              \"hash\": \"e24ab9c5d29f42685afb4ffe444dde03329ed1c76a339dc0dd397057f8392c719855fc2883ffb146ab5bac668e3bfc2692aacdfa5bca11191b41ce31edb5ae38\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-x64.zip\",\n              \"hash\": \"6f9cec518cd1c39ab0a161e890d486a920d553f2011d9b0f68ad962b0f5e16a4c14124c99c5bc09cae007ba01603118a3f0f2aaaaec7f4578e7e57f8d3d43480\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-x86.exe\",\n              \"hash\": \"a08a723e62a4917b3c7cd57bf809f2f9100739321b6fb8c267959c95929fd9acfaafb70bc838adcef39fba2720b1cae7f821dd2a11e54c95b5800426fbeb5e16\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.414/dotnet-sdk-6.0.414-win-x86.zip\",\n              \"hash\": \"e2e94d4baffcba62f3e3fe94556998f893bbae1fd9abf8ec4325a6bb52d26fefea512512b0205047afe42520e623d5b68e952315f37287df53c6d922200dd4f9\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.317\",\n          \"version-display\": \"6.0.317\",\n          \"runtime-version\": \"6.0.22\",\n          \"vs-version\": \"17.2.19\",\n          \"vs-mac-version\": \"17.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-linux-arm.tar.gz\",\n              \"hash\": \"d028b34601d24e4a4c6ceab12ae701cb76c3064f7080fa0cd599fcfba11236eebc1af57bb60fe363ff14028fdd5e53abc1d9eae66bd328dab70e437f96ee91fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-linux-arm64.tar.gz\",\n              \"hash\": \"3fcba3a3f18311980bcddf05455ce37a715d435afd7e1b6acb8924b49ec13ef3f141f5caa52ce295041880d2a8b9c7daa64aa024d8d319ebdd1b6427863fb67d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-linux-musl-arm.tar.gz\",\n              \"hash\": \"6ae7e78044e4ef3686225f884a69877a14e0b0d4d85e8297217887648e793969c463b4bea735e3e31f539792176a9da5e004eda4c63bb52042bc89097cc9a8a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-linux-musl-arm64.tar.gz\",\n              \"hash\": \"8bfc9d904d1b3c5576bf1ed03dbcaf08d3e8a0d4838171ef1606139396f08c0a72ec2bac6150937477a2274a5bdb5379c7aaab1c107c7f2e0e73c8dd3f0846ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-linux-musl-x64.tar.gz\",\n              \"hash\": \"0442546b9d0308fbe004553164522de8b13eddc3daf076514a6002ce4fe66290c896584e9fdd845be4acf52d35bcfc9d60dda4aa23e918b01de438821785a35b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-linux-x64.tar.gz\",\n              \"hash\": \"df393d4b1689285824088702e09205fb51c535941458b8264e7a62f0fffee9125df008d28a1ff01a9f652a5882296cbcceec39a85e3d2ab6db0822612c7cac95\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-osx-arm64.pkg\",\n              \"hash\": \"4dbf9490d0756885f0fc3838b38f2fd3d7ebb48b8be982c6c50f306fd81ec15b00d070381719c5577032600b4d50d7dcf45e9bc4efe4b9fa0267873919f0097c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-osx-arm64.tar.gz\",\n              \"hash\": \"91368141bd3842b6276b47fe9e2428dbed3305e163785a55189ed215e44f60a540c60309380ce1f498c2df5c71217723e09d7028ab8277a4be9694ff72a658c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-osx-x64.pkg\",\n              \"hash\": \"ad0b9cbb9d607fe648424b9d6ff3480e212ad06fefb5e79d0762111207e5cbbb61cc50adb6d8e5a9dbbcddc73c32e6fda1e1da9835d5b9122e6c3ad73b42e3e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-osx-x64.tar.gz\",\n              \"hash\": \"70c3e9854ef8585aa78554b594229698e91a3369954ac96a25501eb23e49c1a8a62dd7aa896b8ad9596ce815bf0589b7b457acbd7eac3f64f2308e76e8bbc951\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-win-arm64.exe\",\n              \"hash\": \"72d2b61b3318643e25ba65cc235cacb82e51a01988ed0de71ad982ba73e9bada5056b0f6b3672ab761b4f7ed959a6462295fbb4cb4398a1d64c10bb8a64f39e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-win-arm64.zip\",\n              \"hash\": \"eba5764d1a6a06d29662b292ac108fd1b199c9778b75f457a7e782880aafbd31052892697e31edde2c74af99f9ccdac3ad713422ed3ed29be99fb5aca3cce70b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-win-x64.exe\",\n              \"hash\": \"35ef54970dc04fe10aff3a28c995bdb1a1023d034ecbd41aa009811f6dc65049c6a5f784ba7e9cf58f1d4444135f76a1043ebf31055bad73c130f2d074964354\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-win-x64.zip\",\n              \"hash\": \"c3b199b33290473e1761876206bafea7d28da3727f5518587e5bae4e0cde279caaa29f631df0fc21aae81f980df9e21811929e9be2dfed9e2faeac6b53874302\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-win-x86.exe\",\n              \"hash\": \"a74c5a875b92c6007c53e5c8f2a654034b566d5ba0879a493884d9b0cfca2bcf97508f4ddff17ca96d7c34c0c685ce7d2da98bc107bc212a40dfd0994f7b15f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.317/dotnet-sdk-6.0.317-win-x86.zip\",\n              \"hash\": \"d69c355bb3dcbc3d43106816fcd19826576d9f9e2dc566f563c2abaffa2f280ce499f17e3950b64ed60a0a06aa9272c0727ec8a634ba9f545b8659064d4b2e20\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.122\",\n          \"version-display\": \"6.0.122\",\n          \"runtime-version\": \"6.0.22\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-linux-arm.tar.gz\",\n              \"hash\": \"d8370227f03a0da1bb4774298e863612ebd736a83417002329e1edc57e6265be3a74c8e384224982e3cece5acfa12af2cb67265c765539544d04370a04ab7145\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-linux-arm64.tar.gz\",\n              \"hash\": \"b11799d959d06f0897471cd3a443bb7a94040b4e508a7537fb198561e6ee17edbed36f4e1606592d98bf4f51143363c2df2db874a7e3f4ddc67b442a770bdf61\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-linux-musl-arm.tar.gz\",\n              \"hash\": \"b09c0df3a2d054155ab0aaf3eeb5cdad5668d8b92fd84acf6bc9a6a43a1fa783873a1a1968685f22b257d0319deb24f319c0ab38b45f92083511c3c3e45f4268\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f6a6f95ae4250812ed9de8221904f2cfdc2b31649d507f35f632e686898ff66ad7e8a2849254bae7d277727a20467e4750b9491d515e2ab83d416496a9ed7be8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-linux-musl-x64.tar.gz\",\n              \"hash\": \"473bdc160ae6a3b184dc4b44ab4b3792bb2e23a8b5598e855822169a5f548b459c8e07bd368ab3cb1dc8bf1ee5bfa08220a9b30f0aa4f519354392c76a4ed018\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-linux-x64.tar.gz\",\n              \"hash\": \"b46dabc77048aea42a4dd06c003c3f13a15d90a1e62128773aa2082aff10e4d14ea90ad16f714244ccfb1cedecd25e1dba1e5bc51438c85373a183e1659233b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-osx-arm64.pkg\",\n              \"hash\": \"568851528b02389f71c22a4e28ea9fae793cc6e1532dea4ff49ac702173e5b06e6e6b8863b0f83d81a97fe4e4886c2d685e0243e2ad20e885c7b8fd12bd23c84\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-osx-arm64.tar.gz\",\n              \"hash\": \"cccd071747755bc3cd5c10b9080c18158762ee10d8fc5469d082b809f54b5f41fc55df6f256030bc8b62d578465a62109a78af0c262e8f3e46aef55776e68961\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-osx-x64.pkg\",\n              \"hash\": \"71c2937a19e36899c4a7ed23f281eb5f8504404607bc14009db4933c801ce73151a6a97c01bc396de819b550a55f59c1ab983d92636c145ab1f045e707e678b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-osx-x64.tar.gz\",\n              \"hash\": \"9aee0e610cc987a045facd33c80acb70fd86660477c8a01442f9293b217bd621a747c5526761dc60def05dad390fc66cbf3dd01ee3625a43b652dcbe4e379d86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-win-arm64.exe\",\n              \"hash\": \"b8764686e8ba8e327c69c35743eba8fb3523b4dcd5bc5fd30f237e5e7df60e318c310350f098961dbbda55f8444b341ea31d5acd084329e7b1f68c08d1f5ac9e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-win-arm64.zip\",\n              \"hash\": \"8725b8c3e20bc6a67687bcdaf115f1114f16f32f1fe9e46666da1b17db4258e9073cf92321b37f9466231aaa83c8fe56fec28f1764bd13d4a13223cccb477753\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-win-x64.exe\",\n              \"hash\": \"c1513382b8fb42bbd8c2908f3769f452901c06e7c784cb42eea79d6cdfad322f4e07423d3f56deb443bce1d0f463764c2dd258393c2dc1f2a274da370e952c56\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-win-x64.zip\",\n              \"hash\": \"d45dbd9a22a97fa88ef24609c51893e6b4d2ffb932531f187241e781122e1ab942890424290ed6eabeb66aecb6862eff2455d11d4107fc2613aeaf1c948a367b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-win-x86.exe\",\n              \"hash\": \"f397435367ef06ef6404dc4719efb8c91e325883a7bba04880210cfac5aeb2207a5e9f0a89e4a568552fcc75a14c9b2234c97454aa851a68e0711ba296e98277\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.122/dotnet-sdk-6.0.122-win-x86.zip\",\n              \"hash\": \"b95df4deb02875d90fad5d54ef1b5e48eeae35fad5d85f3641b7ca8bdf0b73763f0dcb6667da4bc14acba8ddff521b3654d360f47dffd76cefb23717804f77aa\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.22\",\n        \"version-display\": \"6.0.22\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23237.22\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-linux-arm.tar.gz\",\n            \"hash\": \"ac6d2d13a75377b1c78c10ebcfd51765a846465125e40f01c7ff5dc627e56e8e2cb664a06ff379f3ab3feb956614e099985386fd4d511188a1f3010dc743ff5a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-linux-arm64.tar.gz\",\n            \"hash\": \"bd3dc49cd2b637edc3797206a0b6b07b40f774a25c3c6932bc86d345cfb90f4af7c0927e1b39cf4fc638ce67a5291b0ab7a5bfb030c629f8e4e0d9ce76715532\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-linux-musl-arm.tar.gz\",\n            \"hash\": \"0606bbc501f0fe7eb86468113ebc33e1c2acd40d1c107b63b17104046d95b8a3231cb6f0685e965f55886bf7363c08b328dfefa3dc7f8068ba9682e1363e0cf1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2bfc3f590399fbb97f22ecf35c2421c11e81102aa4a6c1fe660938be89af9ac3911ba679dd6d98366739703b31aca7e75f49f92b50e3e4b5caa482acb9fb1e66\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-linux-musl-x64.tar.gz\",\n            \"hash\": \"1dace8bc0ec8ebd8634dbdaf7deffad93d7ef7bdd842e0ba66cfe8947857014c203d6811ad5acfd2cf6974d511c0d4b409d4e0aa909b1d7fc292a17662d0838a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-linux-x64.tar.gz\",\n            \"hash\": \"a42f600823e19611ddb202bde1a8da8d0e9dadb22262cb2122f8c85af12bddee8793524d9e2096c188b267bdd852ef90bf93533c2d4f2f3151742cfc20fdc244\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-osx-arm64.tar.gz\",\n            \"hash\": \"c39e137d351125fefc078882311eb7de37ec8188444767a15b56d6f242bf5855e0e79cfb205a45c5083e86f039b5e7202727a1f8eaab92706e5c705ba782aafb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-osx-x64.tar.gz\",\n            \"hash\": \"c899865b0c3b409273fc9d4eec1e0d37406021acbc40d34aea8566fbd1cdce541bf0f1011a625ec0f61798ae334d244f72874943da790dc3d4b98611b140a954\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-win-arm64.zip\",\n            \"hash\": \"01b5b7f58a61e401223f80d549fdc87ab6761c471667303e541033ed244de5b24b8932593881e9456d175b411136edab189812141a35ae51cc6e66d5d8345db5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-win-x64.exe\",\n            \"hash\": \"8b751251e16cc6e396fc0afb7f159360bd1a1c971087ee8d27c0b112e940b5cd1f4b3cf775051df9231c991e555e4d592b031c458d9a7ceff6e5b9f5e0277313\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-win-x64.zip\",\n            \"hash\": \"70b366ea204b323da447ddb444a589247712926bf9f5b4b6fa479117c70c2aa3d6b07215d8c7eb7550e9cb5524c2c1ae9e65b07dc7ccfbfef89cd0e339d25380\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-win-x86.exe\",\n            \"hash\": \"5e6aa0e7a781b2e916360695cec503c73a593fc0d57cba2c530a203161b6b4a94ffefb5bd060276f07bbb8b626a8909c27b40557a0618cc2e817306242ae12db\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/aspnetcore-runtime-6.0.22-win-x86.zip\",\n            \"hash\": \"d21cae5ca0b3e00e2818b4f404dbca9c365b49e46480acb60729698fcd3c9eeb02c7f50d0f6ab0f03b9d81f466ed4f5d1178c73eb6311b226768c3cf6ac84548\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.22/dotnet-hosting-6.0.22-win.exe\",\n            \"hash\": \"19df24fe6272e6a162a701d8b96c505be560b19b4d13d73fa9ac2a94148187f666cc123d2383efd18e2857af27db3c580f16c8045ddbf1ac2f1507bec8a52fe3\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.22\",\n        \"version-display\": \"6.0.22\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.22/windowsdesktop-runtime-6.0.22-win-arm64.exe\",\n            \"hash\": \"2a5617d5ef77e89d650c192b9d48a7cd0cee8d722ff5d8a03aa8bad8af0d26104295627386aa337f1de79df2728a5bff85bacbad2004c5ba114a535bcb9de50d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.22/windowsdesktop-runtime-6.0.22-win-arm64.zip\",\n            \"hash\": \"032507b55b690c6b925015bbfbb699041cddeb3706aefd5132ec3478cd36c775dfef5d3f18ac4669960d72e4b91aac3b6764c7520d267301452616f2d247220e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.22/windowsdesktop-runtime-6.0.22-win-x64.exe\",\n            \"hash\": \"448ee5cc3dea9c3c99c5a1bc8895c1a043f9be1c8a23ea4e1d9a4261b46d21c85de5d11a81866436c6216ec2df12de34a86061682c3856045fab5ed06571b25a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.22/windowsdesktop-runtime-6.0.22-win-x64.zip\",\n            \"hash\": \"901a525d2a2bb84ed7a734b3704a038abeef52b16a1d373b255ec141cd8cc7625c8387c8d6160b460e4b9a91173cd4e43f3665c276778ae56bc6ff99e8c291bd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.22/windowsdesktop-runtime-6.0.22-win-x86.exe\",\n            \"hash\": \"8dacb27082abde25cb981021339f2592167efe8688b4c9a3b76082d0a690097459589d155a8f262a4e5d2495fb960f3f54433580de94e43ec8746fc0b54edcd7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.22/windowsdesktop-runtime-6.0.22-win-x86.zip\",\n            \"hash\": \"6c03daad4655891657e510c0974834403ab1bf115a4bf7c9d35ad9407f436ad796812d6c26842ada41441d88876b4cab745fd639602cd191962e3939b0cb9d20\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-08-08\",\n      \"release-version\": \"6.0.21\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-35390\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-35390\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-35391\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-35391\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-38180\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-38180\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.21/6.0.21.md\",\n      \"runtime\": {\n        \"version\": \"6.0.21\",\n        \"version-display\": \"6.0.21\",\n        \"vs-version\": \"17.2.18,17.4.10,17.6.6,17.7.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-linux-arm.tar.gz\",\n            \"hash\": \"a265c05ff50bee5e6d2b46f6117bab812e5348f56914945d09694627a2ea6f309fbd9f5a2656ff90c566fa0208a6119bb87a3fcf26417d64de5549d650c262b6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-linux-arm64.tar.gz\",\n            \"hash\": \"f34e1319ded1e1115ceb63eab16a4ac7096e36e3236f8117f61ec9f0e19dd50adb473e1213a1018abfaedc4da57519b85058e7b14187a33e0b91e79af4dabf63\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-linux-musl-arm.tar.gz\",\n            \"hash\": \"e021f7a2290358ffa130cfb356831ebb06cf6582dccec85a8b1e6004c100972dfb60854e0a2d7f31d09a579ebfa125d4c44e7a150a89e9040f08c06f963624f5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-linux-musl-arm64.tar.gz\",\n            \"hash\": \"827bd3b6117ed674ae290b2b80598551b91e67766533895fbd375b121e813f9d7927797fc91aafe3bf2cac927173703c7dbb4fd18dcc6a2648bf1f973dc86fec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-linux-musl-x64.tar.gz\",\n            \"hash\": \"f5205bd0703a8c6db5dc4157849a734103bf2495ae10b15dce38cc03f12195b1a615367bc1f87a2ec4a05472753cd99858b8be2b74adfb93c3b558ebe1f045a1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-linux-x64.tar.gz\",\n            \"hash\": \"9b1573f7a42d6c918447b226fda4173b7db891a7290b51ce36cf1c1583f05643a3dda8a13780b5996caa2af36719a910377e71149f538a6fa30c624b8926e0cd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-osx-arm64.pkg\",\n            \"hash\": \"c6705dbb484fc652659737bcd3c5d52289ab1103a6b89eb6c0097b147ee2f8d9a8d739d9256f4375215e816ab701986a5d2f8bd6185543fbe4b17ed3bd35205e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-osx-arm64.tar.gz\",\n            \"hash\": \"e5a853ee04890e0466489fc46e3cfb8c665aeaacda8646b6958337cb16aeb0edbcf6d4131d31510b12852262fdb466f4d9352e0818a7ecb7e00e4e3a5e5755e1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-osx-x64.pkg\",\n            \"hash\": \"931ade855822419440150facb6273e535b4d21dbb6c049e5fa29f0ce3233c653b9d1f0d8b1d4e749ac4a3c6beea18351678c07a11f4b02bab2161cd74bcb27d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-osx-x64.tar.gz\",\n            \"hash\": \"f34a597910eccb84eec683f75f3ea8b6bdfc33a81388face050e33df679863465c905c0c99cdbfc54b3eb2b2a58733f7185a18234e562b1af5c925fa44dcb84c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-win-arm64.exe\",\n            \"hash\": \"8a986777778775c242ab6d3eb5370e89c7f0dc744967b8c70b892e5a8be1d6252ae29bb7521268c17ad7fdb5d5a62b0bf3df8f9e17a88d27f9f1f3422e1bafae\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-win-arm64.zip\",\n            \"hash\": \"43e46937cb6b82737410528750c7600e5c2af1c41fd292030b71247a30803a055637dfe9e9c108c48c01d8c5ab50dd8c146593f46bbcc657fa021d9733af8d1d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-win-x64.exe\",\n            \"hash\": \"cc0e698533dcd41bea79ce37f62709d59d389726c0718d036ab1ca1420e58011b78e29fa0378b7ea265a87f83879528935a823a8a021c68764c11ad3fe10a135\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-win-x64.zip\",\n            \"hash\": \"3012d9403a30b6bc5dbc81dcc661d33c22284e6b7685949a521ebe7a96a5843b41bc0da659563a58f88a071783ba68df7c640f1465dfa6ce24bd78385de8247b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-win-x86.exe\",\n            \"hash\": \"5e9f3c52a790d206f5173d035da5438d8a90e20b824b3d69632974e5a0397db11946390f7645c9be483147d975d0609eae74b3af956103cbac995759d8d5c975\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.21/dotnet-runtime-6.0.21-win-x86.zip\",\n            \"hash\": \"8b78969edb2d6dbbe156f910d9a9c605c7e2618c159c1b5d7a58666f0b0bcc45f4a6e0acf3236b00324b684d2fefe704cdb4b1b0b6029deb2b59592f798da32d\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.413\",\n        \"version-display\": \"6.0.413\",\n        \"runtime-version\": \"6.0.21\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-arm.tar.gz\",\n            \"hash\": \"3268e0d401bb1d6b189b780a5a88502b3a1140c6d9176a98bca0c468839d1a1802f3c89c7559314a79b53a940cf6312caf2f11e494b9d98638f32e437a125e47\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-arm64.tar.gz\",\n            \"hash\": \"7f05a9774d79e694da5a6115d9916abf87a65e40bd6bdaa5dca1f705795436bc8e764242f7045207386a86732ef5519f60bdb516a3860e4860bca7ee91a21759\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-musl-arm.tar.gz\",\n            \"hash\": \"6b88eca7b3caca24049afa1ec8f625ada07d3a32f250d19a0b15ef2c08ab2d6b9617b63f52957f165dbc58e51e2df2d22a12f1c9f9df452e58e3471fd35a349d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-musl-arm64.tar.gz\",\n            \"hash\": \"794eae58a7ffa8c28b690dc950deb6603630e87e9d853d7ba566a4e7d87cc399229bf054239408b165599fb9e71ed6ae9c54fed02dcc0d830971df1dac89adbc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-musl-x64.tar.gz\",\n            \"hash\": \"6cffebca6fe29d1f848df9aa0b08a92d780680a02bff964a50d39919e9841b002fa954a8043d6a985885191b0bd55ae3bb7a6e6470a8d3d7ac98eaaed1fb4e56\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-x64.tar.gz\",\n            \"hash\": \"ee0a77d54e6d4917be7310ff0abb3bad5525bfb4beb1db0c215e65f64eb46511f5f12d6c7ff465a1d4ab38577e6a1950fde479ee94839c50e627020328a702de\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-osx-arm64.pkg\",\n            \"hash\": \"f643aa993a0b52808b7869a13697d4ca21259cd814f08fe1bf0b9d80e4baab2ec0af1d9367eb9750c87a211fdab41f73f0ab5570d1970ca946acbb748a2b2bcc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-osx-arm64.tar.gz\",\n            \"hash\": \"e3a24cdcb80b2e283cd93ebb0af4ad891ecb5f2002d56b82a379d5d99b934a58f5ae60d07d21052360f525692fcf7bfde0c678c5d7f9908101fdd2096bea4458\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-osx-x64.pkg\",\n            \"hash\": \"4390ba65e592c4f770b247f11228bbd2ed70aab30fbe6613c2bf7ec0c7c54d09b5a47ff160d4424dacc59661613fd4c9460d62f141a64def02a7228dd160f916\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-osx-x64.tar.gz\",\n            \"hash\": \"605b28135dbc8c34f257ea1d10d02edb16569957e554ecc49c2a9fbb4200960b2fe21a06f2b770a9907fa915ebef0e6260704cc9e05a81af931f10dce7f46165\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-arm64.exe\",\n            \"hash\": \"f48bdfb5759d8a4a57a82b338820d8191a4a8f25a1e5c81b82b340d7c781af1e7e5fdbbcdf47304d7a847a74b69491a16d099ca2fa197ad641a97a7c3a847fa4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-arm64.zip\",\n            \"hash\": \"4b503275d9dc8890e54bdfcf8608eb49cc227b603e6e994a89a768fdb9b0d65e0373f058f95977de372412eeebb33145e24e5e64e643f3911cbe1a308bc2265c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-x64.exe\",\n            \"hash\": \"d3e8273d451b3bc15cd8f656ffdaaff4d1b0d17059ada578967063f4b9882b74926af61c6e0919f66b5bdeddd66e5047743544ac4768026b60de7a7591e1fab5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-x64.zip\",\n            \"hash\": \"a9e1bbb52484ad0667b258451ebb6b47ce6c7b788c015aee8a86c5e0c4dcf4ee8c82d796921869d64c92bb2afef2c7ceea09cfe255d8519d48f2471a098c361e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-x86.exe\",\n            \"hash\": \"e767cfa0664630dd325ddf045bbee5e562c8e966a588a711f0dfba0e6458430ac3f2062c400dabc9d1e94fe7a2a592340593f6fabbe75e951fd6a31cbfe10727\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-x86.zip\",\n            \"hash\": \"8f680fc5d49ea8e9c0f24cf1fe10b0243233a40692807036d2a9b05d37f0b5c143bd5f30f7c93409550b01c566216152587d45942fda5a5bee60144cfdef03a6\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.413\",\n          \"version-display\": \"6.0.413\",\n          \"runtime-version\": \"6.0.21\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-arm.tar.gz\",\n              \"hash\": \"3268e0d401bb1d6b189b780a5a88502b3a1140c6d9176a98bca0c468839d1a1802f3c89c7559314a79b53a940cf6312caf2f11e494b9d98638f32e437a125e47\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-arm64.tar.gz\",\n              \"hash\": \"7f05a9774d79e694da5a6115d9916abf87a65e40bd6bdaa5dca1f705795436bc8e764242f7045207386a86732ef5519f60bdb516a3860e4860bca7ee91a21759\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-musl-arm.tar.gz\",\n              \"hash\": \"6b88eca7b3caca24049afa1ec8f625ada07d3a32f250d19a0b15ef2c08ab2d6b9617b63f52957f165dbc58e51e2df2d22a12f1c9f9df452e58e3471fd35a349d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-musl-arm64.tar.gz\",\n              \"hash\": \"794eae58a7ffa8c28b690dc950deb6603630e87e9d853d7ba566a4e7d87cc399229bf054239408b165599fb9e71ed6ae9c54fed02dcc0d830971df1dac89adbc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-musl-x64.tar.gz\",\n              \"hash\": \"6cffebca6fe29d1f848df9aa0b08a92d780680a02bff964a50d39919e9841b002fa954a8043d6a985885191b0bd55ae3bb7a6e6470a8d3d7ac98eaaed1fb4e56\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-linux-x64.tar.gz\",\n              \"hash\": \"ee0a77d54e6d4917be7310ff0abb3bad5525bfb4beb1db0c215e65f64eb46511f5f12d6c7ff465a1d4ab38577e6a1950fde479ee94839c50e627020328a702de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-osx-arm64.pkg\",\n              \"hash\": \"f643aa993a0b52808b7869a13697d4ca21259cd814f08fe1bf0b9d80e4baab2ec0af1d9367eb9750c87a211fdab41f73f0ab5570d1970ca946acbb748a2b2bcc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-osx-arm64.tar.gz\",\n              \"hash\": \"e3a24cdcb80b2e283cd93ebb0af4ad891ecb5f2002d56b82a379d5d99b934a58f5ae60d07d21052360f525692fcf7bfde0c678c5d7f9908101fdd2096bea4458\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-osx-x64.pkg\",\n              \"hash\": \"4390ba65e592c4f770b247f11228bbd2ed70aab30fbe6613c2bf7ec0c7c54d09b5a47ff160d4424dacc59661613fd4c9460d62f141a64def02a7228dd160f916\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-osx-x64.tar.gz\",\n              \"hash\": \"605b28135dbc8c34f257ea1d10d02edb16569957e554ecc49c2a9fbb4200960b2fe21a06f2b770a9907fa915ebef0e6260704cc9e05a81af931f10dce7f46165\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-arm64.exe\",\n              \"hash\": \"f48bdfb5759d8a4a57a82b338820d8191a4a8f25a1e5c81b82b340d7c781af1e7e5fdbbcdf47304d7a847a74b69491a16d099ca2fa197ad641a97a7c3a847fa4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-arm64.zip\",\n              \"hash\": \"4b503275d9dc8890e54bdfcf8608eb49cc227b603e6e994a89a768fdb9b0d65e0373f058f95977de372412eeebb33145e24e5e64e643f3911cbe1a308bc2265c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-x64.exe\",\n              \"hash\": \"d3e8273d451b3bc15cd8f656ffdaaff4d1b0d17059ada578967063f4b9882b74926af61c6e0919f66b5bdeddd66e5047743544ac4768026b60de7a7591e1fab5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-x64.zip\",\n              \"hash\": \"a9e1bbb52484ad0667b258451ebb6b47ce6c7b788c015aee8a86c5e0c4dcf4ee8c82d796921869d64c92bb2afef2c7ceea09cfe255d8519d48f2471a098c361e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-x86.exe\",\n              \"hash\": \"e767cfa0664630dd325ddf045bbee5e562c8e966a588a711f0dfba0e6458430ac3f2062c400dabc9d1e94fe7a2a592340593f6fabbe75e951fd6a31cbfe10727\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.413/dotnet-sdk-6.0.413-win-x86.zip\",\n              \"hash\": \"8f680fc5d49ea8e9c0f24cf1fe10b0243233a40692807036d2a9b05d37f0b5c143bd5f30f7c93409550b01c566216152587d45942fda5a5bee60144cfdef03a6\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.316\",\n          \"version-display\": \"6.0.316\",\n          \"runtime-version\": \"6.0.21\",\n          \"vs-version\": \"17.2.18\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-linux-arm.tar.gz\",\n              \"hash\": \"498bac749688a56a902958ab905cd85ba4b628713655a6e135bf03f6089a4dd42bff271acfa52313936847966306de77f769f51e9cbc4d6eb4b64d83b2f0ea38\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-linux-arm64.tar.gz\",\n              \"hash\": \"e298544486473fca05605931074656edc6025cf5429a455641627b054fb5f6a24d5626fe962413781c13b91c9b7f8cf27dfe2cf093141b259012c8640a79b0ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-linux-musl-arm.tar.gz\",\n              \"hash\": \"04c7bad5edbf75c625cf377d6f7e6985d91bb33047e95f555ecd379554f2fb152a20facd0b543bdd9b96627f52999cc1a94c95150f9fb412f81696d897858e97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-linux-musl-arm64.tar.gz\",\n              \"hash\": \"7d29e8d8a0df057c078a5947bc31ec7c76a3fc04aefe65aaa0e9969913df97c1d4843ffe7cdc3e03317ecaca13a7172cd5102ab68a0226769aeb8dee97007ef0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-linux-musl-x64.tar.gz\",\n              \"hash\": \"a3ec48fcf0cc05f9c6a16d78948524021c696b39c405c31df71311a7aab25004a17a04e62c5e15c7c75dae3caaf732f4e92169a5acc96850baba29b360d74534\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-linux-x64.tar.gz\",\n              \"hash\": \"f528bd63fe3529d17372c0f56f000198812e5b4ea14ad502c4be9a27632387df42a4b94a96f7255146baca4b468ef1c7e7211e44828b33c84caaf2bac3982ff4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-osx-arm64.pkg\",\n              \"hash\": \"f71c1a0280432ba3165e0cf14e768872e76f9c1a39048c5c251ca577eabda2b95a39629a5a6da508ea4a2afd9cb770f75595110a0e37a932db8649ce262720a7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-osx-arm64.tar.gz\",\n              \"hash\": \"94197a99693e96b0ed172b53764395a1f907be04ee7c1c01cff509c4bca351cc5e99ce750e67f4ae13f4c4e7621798c3213f197d9bd1d11bbcd684c3c04f9aa1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-osx-x64.pkg\",\n              \"hash\": \"aecf7d49f986add9d972dedb960c3490379dbc313c7b209096b5f832f93068fc737bac7c904410de243e7be7c773430f4060c88cfcd1b6e1c1377866031a35a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-osx-x64.tar.gz\",\n              \"hash\": \"33a558e02d599f93170399dad2c61af6cca89214a2b012ba838e221d7209c4aa61c45e1df2a20e0844d97846ceb3ff455f430dc32f415110577c31e431746f4f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-win-arm64.exe\",\n              \"hash\": \"8cfb86a6cd13fd61cdfc65c364652fefc1cab089ffbcd947a6ff63a71574bf95b2df9e418c1132bdd626347e8ad3272763c4f01fe093ca813251379ae844509b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-win-arm64.zip\",\n              \"hash\": \"d480bfce2c44ce1334b31b6338ca8324e1099ed59c5f3d000284267ae31344b79e2a976a8178cdcb242762150f2793ddff616758c7df7edd4550f9c2d3ce3c54\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-win-x64.exe\",\n              \"hash\": \"7d0fb2ee972dcb4133223281f00a21f580d47252d5e640c3fbb6a67cea0b85120ea24060d641cd4fdeb615cdb2f068515b88156a115e6fd987d6d6494f2acedd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-win-x64.zip\",\n              \"hash\": \"668fba8e0a4b0ed45c626d839f712dbf6750fecad8d55dade8abfeb015fd5d3a9652922b16f480275427cbf6a1da92f5637b25b268f4ea39abf5f017ab29667c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-win-x86.exe\",\n              \"hash\": \"15c5046fc6354565cd2cc74ecd1b171e2eed8b13abaf729876a752852a681ba36e9fc34783b8023e3c2f4b5a75e881b7df2736c3f8beb9b7fc0a55c5e16bd1cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.316/dotnet-sdk-6.0.316-win-x86.zip\",\n              \"hash\": \"572fcd04a9c1de4156031fdfdf22f69fa19a31666665ae3f698c5b8286328ec3726ee68d167f8d81dc2eb84e2507681c4df6b14a76f97fcf79d79ea2307ef9b7\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.121\",\n          \"version-display\": \"6.0.121\",\n          \"runtime-version\": \"6.0.21\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-linux-arm.tar.gz\",\n              \"hash\": \"041dc5cb9a5afef4a096e870bd2b6b7e4f2799ba48b025e3107a9d54efa45a35d10040dacbe8c0ce1f4734b91c2d55b792d3e1cff8a88a683af8792091ac51dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-linux-arm64.tar.gz\",\n              \"hash\": \"f654bfd76851e3373fc9cc2f71fc8c1096115e078d3d461fd438cc0e0b36d261f7f7c66e67ecb3db862dd75ef487e280976f98206fa7c45c8845b9f7b085f5ef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-linux-musl-arm.tar.gz\",\n              \"hash\": \"61aa0c2edc81eeba509518119c6d2c811c686f0d87825bdadc5e398a5df8629f27fa688d546a48bf867bd285c6884a6f1d2e5139159d6950525dc50c68226e8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-linux-musl-arm64.tar.gz\",\n              \"hash\": \"875d9e1b73ff4670e619214d019ccc00e67d72e8a2aeb7115f7110b967396fd426b4a3f3d623f52fd55dc5337d2cd937ecf69ecce74c9cc4dba207cf5a631ff7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-linux-musl-x64.tar.gz\",\n              \"hash\": \"f4deadb4c2bab65961f7bd80e0d83f07736fb748f5ad063e0cc18188bf9ca72dc991a9a36cfacfcbcc3832a7bdac17b8954e33691334156976f5d83754e43a1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-linux-x64.tar.gz\",\n              \"hash\": \"d3eb3b11588a504384ee435e583eb302d7d94d02fc50b253934dc7f12b87ff49eb90724e2942a6ef6c695df58be46132b1eaced63509984566ee518fa4bb55e7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-osx-arm64.pkg\",\n              \"hash\": \"ce5be5abe85db1220e84dcdf394f8436bd9c150d43e91dd50d5f5f99f325ebbca23f1c9ab5d50abe81a2e3e091591b3f7422fd0f0578acb998f1a9b9648eaf03\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-osx-arm64.tar.gz\",\n              \"hash\": \"e87ecb0787cdfb9fa2e91f7ebd1bcd9be239f246ef2d5750a03dd45d62bab357b82bcfbf5886e300fffc56abeec18ca8e567484fbab6a437cb33ab4cf90d2bbd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-osx-x64.pkg\",\n              \"hash\": \"25815bbe9ebfc30472226f5f2ad86d0015d5d785395d8601245bf548a57471180b04bd896775ec34ffb47151ee152012ce92343704afb565d44a51d81d20ea79\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-osx-x64.tar.gz\",\n              \"hash\": \"aefcf46b7a1e10f4bb31374d78f93321dc14e5b02745153fcc66a07882a625e6b7826b80ec66fc3bb3f35833a89961019b90e3ceecd64a93e7f1d18238a20641\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-win-arm64.exe\",\n              \"hash\": \"4c43238ca63ec79a41ccd714697a236d79baf584d0c365541128d48734c0c758e7de315ff1e744d6bdaf32f9d6b6b05580e2f5597cba66a9ae6ec039ecfee65f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-win-arm64.zip\",\n              \"hash\": \"c4bfbee934e82a4a74ae074eae3d489ec64fc0775a18332e9311d42f915d516e821e5f48968ac5f757985ee1977a35b3f0e6563b589318e182eda3ecdefd1662\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-win-x64.exe\",\n              \"hash\": \"de96667f3a3a284728e3e63348d9deecec5ee311c0ba4ba04642721071e24dd49de9aeee4e4772b2ad4f05701d16145868af3b52e3329075425efcb4fb20b101\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-win-x64.zip\",\n              \"hash\": \"10434a43d7bda8f029360348862e6aa36710bdc72013fccccf78a12477d10b6fc14176325ed84ee7e1136c3b17d56ed2572aa19e0a5779136e57f890b56d7529\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-win-x86.exe\",\n              \"hash\": \"dad618e1e1ef0737f27a617d9a09b188ea5e045cf13bdff26bf5b6ee814ee01fbb43ee31816ddbbb1ea4fe35ee7902305b31d915b8d834f851ffb4053623cdf9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.121/dotnet-sdk-6.0.121-win-x86.zip\",\n              \"hash\": \"6aa0c683c5baf72ebcc73335b33b42065b6e6786d3b7ed35eb0b886cf4bd3fd84c3a76adc056ef50237374a8a76e83a552e9d0dfcea22191fa7d30be3f9b729d\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.21\",\n        \"version-display\": \"6.0.21\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23196.21\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-linux-arm.tar.gz\",\n            \"hash\": \"11b3db008c07f4ade98307edeb90de269c70d9296c2a0ea36628c4b46dc27ab5f4c0bc3a90e56ad55dacb0a88b7ae6a38ace3bb3d1841ae8c6428a3822da2b3d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-linux-arm64.tar.gz\",\n            \"hash\": \"3d39f458831c2e2167c06eb85205a764e9aa497ccc26cb19968f03cb3102daaafde391a707f08c3010bff95cfc0e9586ea97c0fe7d8ef885b4aae009748591c8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-linux-musl-arm.tar.gz\",\n            \"hash\": \"fd19d959470c6304237dac0d20082391fcfa123aa604b734fa152a12695acc73647605e521badb5b49c4968659bcbba1b5aff60ca4a279c2d29535985cc51287\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ee720c88d3c77c9868a427e57a09ac57eb0c8529a281bb16cef6eddf574ef5084de9cc80df0f6c8371717c2df2392d11384fb0eb682909f3a5a1e2e6849b0ab9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-linux-musl-x64.tar.gz\",\n            \"hash\": \"3beb72a24c2e2b91db929da38a3f0b975f8756f67a8302964321bcba93bdfb8bc407615b046a98b2daa8a755a3eaf6c8bab441a96814ccc22f8ff1753a7774e0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-linux-x64.tar.gz\",\n            \"hash\": \"3a74b52e340653822ad5120ec87e00e4bc0217e8ce71020ad9c4a0903b87d221b538c3841949be2ca129a45f8105def0ea5152e44e7cef8858958ae04fa0dd65\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-osx-arm64.tar.gz\",\n            \"hash\": \"bd1cf2252d61ab88e39d7cf6e7b57168363f599de7e2aafafa9f2373976c97653e83cbfff5d1708276b6503f8a21f60af8c8601835c4d6e0b603b3c4bb90902f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-osx-x64.tar.gz\",\n            \"hash\": \"b7d604bc11224b32960f11ed2332cfe5cd595655dad5c2cae1fba40e73ec637f9f6e4246659296d90f544d7aa7c5248b0c7999cf82b4a325acef7368416c1dde\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-win-arm64.zip\",\n            \"hash\": \"daf0f9596eb65dd4ae5b7f4ff910ae0286457b8f225515b5871dcdf8d54c1a82ff78cc7686816f8e03eebc9da150345075979155cabf1ff87c65f0f0d0cd71b9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-win-x64.exe\",\n            \"hash\": \"e50f4f1406c9a6a59f37564156a646ba82938bbdc6270654f5772a40658197ac7f25e79c5a1be7de36c87da6c68330278ac70b3a1aa624cd56733eb8bcbbba69\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-win-x64.zip\",\n            \"hash\": \"5a9d9d489f1f1d289cf38ac7a2ba90729af445729bb6d71a8c76830a28e9592c8d4733ee7d3a029e06c17d23cf89ff29740915758cb848727caf7aac7b59cb1f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-win-x86.exe\",\n            \"hash\": \"f3f63a6af46a4af29188a2e35fc16e7a065e3a369ec546a41e5ac05682acd9a60363741235942f15641b21b609466a2bcf34905df6b4fa8dfdda521ac9fe3734\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/aspnetcore-runtime-6.0.21-win-x86.zip\",\n            \"hash\": \"759536157e403112abbd857c4e084fa232c16d0a07721b4b4c070b7376deccb52cb6200a315587ef8dbd97237ca2d59294403a472f2aa258b528bc562931fd4f\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.21/dotnet-hosting-6.0.21-win.exe\",\n            \"hash\": \"4b8210de16166d2431692e9a5fecd3d3fe2ddb3db4ce59fb4f2ff0cb4c1063fc61140515b0c540eb744c336d758f0a2d4d5adddeeef113bd9c966de33d955025\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.21\",\n        \"version-display\": \"6.0.21\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.21/windowsdesktop-runtime-6.0.21-win-arm64.exe\",\n            \"hash\": \"f6ce5d828c9f4ef593c9b40bab2210c689cd331d11b972e32fb089e2064bcb435fe5913e8b4de248ee1d94b6bb25df75712fd7832bbab45e9e1433a57fe446c2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.21/windowsdesktop-runtime-6.0.21-win-arm64.zip\",\n            \"hash\": \"6da311ec4c2640a94c2f76ea8fb3fe0cb745076d2d8172a72e9c58c01a2f1f1c9afa84c95ce108dfaf5d0b987afdd8284fba5d487607aaad04c32337a86f83d7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.21/windowsdesktop-runtime-6.0.21-win-x64.exe\",\n            \"hash\": \"49192c5141bb04dc19483e8b1adec9c6f56fa54ef8c55e2f4fa4aae73abf9119bb7b1dff3d8f9b3307c50de8989669398a5f6d8dc4323b81b6a1def5ee6c6e79\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.21/windowsdesktop-runtime-6.0.21-win-x64.zip\",\n            \"hash\": \"2354cbf447b7faf180ab5c6836c51d1c9f6458e77a0da2f0b1096d9307262651ca0696bd9dda12455492cf739b0465698a9e2dedb10c7298822e57e79ab38ed1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.21/windowsdesktop-runtime-6.0.21-win-x86.exe\",\n            \"hash\": \"e1a19dcb47dce660d17d459c4283b5f44da4d62c88c6d7ac967d791a6fffb10ab3946b1637423a19615190e85d3d88582d9c786d867f20b7cf0873a486ca95c3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.21/windowsdesktop-runtime-6.0.21-win-x86.zip\",\n            \"hash\": \"1f5b9b6069acf16d7b336e4be798c8846ec5da4c680a9cebd7e4c79922e197cb09a88b938581791cd91a887cf47f67bfcae09a771b2bd7bb1d9a155ba90e00f1\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-07-11\",\n      \"release-version\": \"6.0.20\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-33127\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33127\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-33170\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33170\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.20/6.0.20.md\",\n      \"runtime\": {\n        \"version\": \"6.0.20\",\n        \"version-display\": \"6.0.20\",\n        \"vs-version\": \"17.0.23,17.2.17,17.4.9,17.6.5\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-linux-arm.tar.gz\",\n            \"hash\": \"48dd2c78cf873c87b2baef65211bb5af293bcb23248d7d98e8c6fd5e3c7cdae6fc7ce8a8f857b11580a68ddb905825860645aa26ae123ade7ac9ed093d4e2670\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-linux-arm64.tar.gz\",\n            \"hash\": \"bf9cd8b13ebe15bbe41d4f3229cc902c3de2eb4f0008f4b239f3d0ec5aa01254adb8a98742c0e32e98f4ba95923611ed9f54963225b462a829c184301bc98ef1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-linux-musl-arm.tar.gz\",\n            \"hash\": \"092c14a32269fd19ad412e88c28a66e9e93fc15e5def97549504640bdd5fe12a740c34c06b3c2597f1de43825dc9047493b8e01ba35f20945379e0c6483ff639\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-linux-musl-arm64.tar.gz\",\n            \"hash\": \"64e16eb79ceeabf3510689ff8390a10d487a89308aadc1c950f4b1cb6f8fcdc95c477508dadc342180d954aa317a09e71aab73d1abba3c5a91d15837ea56bb1e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-linux-musl-x64.tar.gz\",\n            \"hash\": \"373e08d7bfc8cf990305f72dfbf3e7b5ab191809375d564d55f0cf1351ad51eb1a5d6bedd3090acb03054ab10cf0fad7b92f94452ba1fe02cd10fdd68646aba0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-linux-x64.tar.gz\",\n            \"hash\": \"3688d7170a59015c36d6a5532db67bc22eff66b3eb0a7fc28e1f425791e27a5f467bc7dc593d7f455d72d08c7d27bfcc92b3c8bd30ec3c7c583a8aa82b5afbac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-osx-arm64.pkg\",\n            \"hash\": \"88f1f17829789e078d0b2184537911af9f80ee4dccc5f75a7229f8dbd782a3000a0790a99067b5940f710cff7adf44937366fc9e787cde3b30a584453fbaf741\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-osx-arm64.tar.gz\",\n            \"hash\": \"27297a16bf1eec0e5a4154d8575b66008227a595cdd77277ae9796a53522b143ff51e063a7aa53a6c57717061cb2e5836c314ee43eeb86d465341fcdf834d773\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-osx-x64.pkg\",\n            \"hash\": \"cbc1f38a3611893978af15d5303c30796440fa3d0610690ad60b271594e4c6b773f4314d4f878761fd10fc45d98c26947f23d0233cc9e771db1ecf4f336c0fbf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-osx-x64.tar.gz\",\n            \"hash\": \"f21cb044df7d1f57ad45b7ed65893a103cd6fe15b78ed3865380044207136d42deddde29872458e70fae9c8e7f254dd032f7539b4b9820995a075d92b907d49f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-win-arm64.exe\",\n            \"hash\": \"f1ff435a82d37aa922a1a3cb594f7fe073a63677cf04fe40b160fa4be522c7588123ced159f277f3138fc504bf4a8465c30aa4c43dadc5abc6eea4a5ecb03ce4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-win-arm64.zip\",\n            \"hash\": \"308d680fe33747fcb1933b939ddce709426bcd3e78f46e3eb3242d4b1d84c48088892f746c355f10eaaf0f97efb8ec73f0382126f91d4f8c89561baefc3a9565\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-win-x64.exe\",\n            \"hash\": \"e57c9445e595107a5d35f1d885d2c36c0c9779ae0ceb942244a942ccfda849e7ce089e36d77ef6a9d705501b4764ffce4662ee9dacfe89dc9a2cac636561e64b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-win-x64.zip\",\n            \"hash\": \"8bc4a152d929df153bb545cd74828a450fbad7c4a80f305e1b922c7e1c4856e7627654a9a26e4459dfc1cfff048bcb17b3cd4f34fde3d600de16f5a4d352153f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-win-x86.exe\",\n            \"hash\": \"c8bec3d8b797003497c6005403415b48c16ff1dc55108a2d77c09331668e2a60f17c84a4b34e44e20b6bb0b60609a715eed7eeb79e4103b8d019a4073cec5222\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.20/dotnet-runtime-6.0.20-win-x86.zip\",\n            \"hash\": \"40a8f889d1db8672bc81323df37fdc186fa3f8eee1e9fef6a9d0c60632ae363d4f22a940eb863d63307e1e704687d730560e3a01312365ca815d1913cfc2716f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.412\",\n        \"version-display\": \"6.0.412\",\n        \"runtime-version\": \"6.0.20\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-arm.tar.gz\",\n            \"hash\": \"4a22174875ae06a48485aa42353ef61e6c424c77d34139bbc2ad5dcbf72bda6625e748af98df54e7677b1b3fc804267b8828ab1c5caa45a693f3f7bf4d6a3306\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-arm64.tar.gz\",\n            \"hash\": \"669c19665f657de00fda41e5ffff8d80395618dc1cc7d6ec50cd06668b135b5fcca193919172c65394210b7c060eae146fd6d8d57deed889ca8fafddca66d06d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-musl-arm.tar.gz\",\n            \"hash\": \"8e39ccea1481e6588e9c2c52292d8a9a66615f7fc73f91a30b350d854bd3ac4d5245c75fdb3de5877f6eda73b2bb5ad1696ea925f7b9d14347964603db89bc68\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-musl-arm64.tar.gz\",\n            \"hash\": \"936a120f3f514ac20c1d616400d9655b1f6af75b7e026587c9598f07e213176393bb3a590615649604956af6f7dc35685665474cff900f0c0bdbf41b5ea60cbe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-musl-x64.tar.gz\",\n            \"hash\": \"0cc7a93fbe53b4b17e877e402386e9b552ea4c9fcaced8f138e149403db1f3e358cc1be86d2a20408e3c3f82045bf897e2f6ccf0225cca49c834a52697f8d412\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-x64.tar.gz\",\n            \"hash\": \"ee97aa5258e05aecadc66e844fa8eef97d51e5035492999b974cc8272e4db1a862a1f88a925f38be9e95c71d2e961b56459dcd614475895df608945c8057c311\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-osx-arm64.pkg\",\n            \"hash\": \"a6a2a546466e542ecd115ece22ece78cae1011625114126a46d3d0d611f31855e692116fda52e80ef0133f520f89d92e5349fd9e6d528c42335917517e5ed035\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-osx-arm64.tar.gz\",\n            \"hash\": \"3086e027b94ab8bc5b27e2dfaa7d16484efa2f6a7c1e291f420313021b3e6f65a5208de4b0d86271c3b83d05d784f29e231176dc6f5ba04e567336b7d7b7b871\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-osx-x64.pkg\",\n            \"hash\": \"36bcee4d85f3f4389468b35b246957adcb075a8ad2388608bbf2417b2cd92791fc8600cacc4ed264e72ef16245026707c99b62edbba879b4cb74a719f596078f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-osx-x64.tar.gz\",\n            \"hash\": \"0aa713780c4b7f4e0ea72a0813715883f57174f04386b85f3a6dda1a66d9cf6d24c76cd1e0fc0a0991b80b7868b39c719d5b98254e4f683b6bc89a9b4043be9c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-arm64.exe\",\n            \"hash\": \"b2c071f0a805b68aab8b017e71efb7b90057d40f0ef155539e80d3b197c280ab3e2ef685cea33c6c5bc46471f4671500752ab158b98333bc3a0aa8f9716f647a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-arm64.zip\",\n            \"hash\": \"0591fc394ca5e8cd52d4ee7dd6884b57b0d46678bba4cc95e6582eb091eb34b53ee7f7fdd8d1aee3d6cfdeb0a09cedb66761852fc4d7a8954e0821b35f6305f5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-x64.exe\",\n            \"hash\": \"7465163a2681b37bf164c6a257fc72e3865c98ed56a6a1a378302c91a0482a9c3405ca5adae46d3cd93859751b8724a0f67aa942e8a982e52a65306556c2a3ab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-x64.zip\",\n            \"hash\": \"824f5dd4390cad4ac7ddc344a6cdecda3ff9f19adef0ac77430302a2fa8df57e1e044c2c3ea83545ff25223b856873364239067b448707bb009788dce7f0c732\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-x86.exe\",\n            \"hash\": \"6da206814c925456e00853d9697c11f8429ef2f9488a79ebf7888109e56429cc44a1ec5403b4bb3c0dbe7b4234d2b509d71f02b2cc4d14ea852d0644a388c969\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-x86.zip\",\n            \"hash\": \"b25b8e7aed9996babeffaf5361c6931c6742a37777589a4bad313517082e9d7145839d3fe18f847c52aa58426e5701078f100e5146c509877940b395a5b3b718\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.412\",\n          \"version-display\": \"6.0.412\",\n          \"runtime-version\": \"6.0.20\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-arm.tar.gz\",\n              \"hash\": \"4a22174875ae06a48485aa42353ef61e6c424c77d34139bbc2ad5dcbf72bda6625e748af98df54e7677b1b3fc804267b8828ab1c5caa45a693f3f7bf4d6a3306\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-arm64.tar.gz\",\n              \"hash\": \"669c19665f657de00fda41e5ffff8d80395618dc1cc7d6ec50cd06668b135b5fcca193919172c65394210b7c060eae146fd6d8d57deed889ca8fafddca66d06d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-musl-arm.tar.gz\",\n              \"hash\": \"8e39ccea1481e6588e9c2c52292d8a9a66615f7fc73f91a30b350d854bd3ac4d5245c75fdb3de5877f6eda73b2bb5ad1696ea925f7b9d14347964603db89bc68\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-musl-arm64.tar.gz\",\n              \"hash\": \"936a120f3f514ac20c1d616400d9655b1f6af75b7e026587c9598f07e213176393bb3a590615649604956af6f7dc35685665474cff900f0c0bdbf41b5ea60cbe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-musl-x64.tar.gz\",\n              \"hash\": \"0cc7a93fbe53b4b17e877e402386e9b552ea4c9fcaced8f138e149403db1f3e358cc1be86d2a20408e3c3f82045bf897e2f6ccf0225cca49c834a52697f8d412\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-linux-x64.tar.gz\",\n              \"hash\": \"ee97aa5258e05aecadc66e844fa8eef97d51e5035492999b974cc8272e4db1a862a1f88a925f38be9e95c71d2e961b56459dcd614475895df608945c8057c311\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-osx-arm64.pkg\",\n              \"hash\": \"a6a2a546466e542ecd115ece22ece78cae1011625114126a46d3d0d611f31855e692116fda52e80ef0133f520f89d92e5349fd9e6d528c42335917517e5ed035\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-osx-arm64.tar.gz\",\n              \"hash\": \"3086e027b94ab8bc5b27e2dfaa7d16484efa2f6a7c1e291f420313021b3e6f65a5208de4b0d86271c3b83d05d784f29e231176dc6f5ba04e567336b7d7b7b871\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-osx-x64.pkg\",\n              \"hash\": \"36bcee4d85f3f4389468b35b246957adcb075a8ad2388608bbf2417b2cd92791fc8600cacc4ed264e72ef16245026707c99b62edbba879b4cb74a719f596078f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-osx-x64.tar.gz\",\n              \"hash\": \"0aa713780c4b7f4e0ea72a0813715883f57174f04386b85f3a6dda1a66d9cf6d24c76cd1e0fc0a0991b80b7868b39c719d5b98254e4f683b6bc89a9b4043be9c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-arm64.exe\",\n              \"hash\": \"b2c071f0a805b68aab8b017e71efb7b90057d40f0ef155539e80d3b197c280ab3e2ef685cea33c6c5bc46471f4671500752ab158b98333bc3a0aa8f9716f647a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-arm64.zip\",\n              \"hash\": \"0591fc394ca5e8cd52d4ee7dd6884b57b0d46678bba4cc95e6582eb091eb34b53ee7f7fdd8d1aee3d6cfdeb0a09cedb66761852fc4d7a8954e0821b35f6305f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-x64.exe\",\n              \"hash\": \"7465163a2681b37bf164c6a257fc72e3865c98ed56a6a1a378302c91a0482a9c3405ca5adae46d3cd93859751b8724a0f67aa942e8a982e52a65306556c2a3ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-x64.zip\",\n              \"hash\": \"824f5dd4390cad4ac7ddc344a6cdecda3ff9f19adef0ac77430302a2fa8df57e1e044c2c3ea83545ff25223b856873364239067b448707bb009788dce7f0c732\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-x86.exe\",\n              \"hash\": \"6da206814c925456e00853d9697c11f8429ef2f9488a79ebf7888109e56429cc44a1ec5403b4bb3c0dbe7b4234d2b509d71f02b2cc4d14ea852d0644a388c969\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.412/dotnet-sdk-6.0.412-win-x86.zip\",\n              \"hash\": \"b25b8e7aed9996babeffaf5361c6931c6742a37777589a4bad313517082e9d7145839d3fe18f847c52aa58426e5701078f100e5146c509877940b395a5b3b718\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.315\",\n          \"version-display\": \"6.0.315\",\n          \"runtime-version\": \"6.0.20\",\n          \"vs-version\": \"17.2.17\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-linux-arm.tar.gz\",\n              \"hash\": \"486f2eba046ff10a5c35a1117bf384039d6d9e666c555c7a958d4c04714ba0b4fc68e0bf20d9a0246358df1a2db5921f00bbdff921790b382197dd2cc13c43f1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-linux-arm64.tar.gz\",\n              \"hash\": \"14734480bb92948c811deefa447075478bfd9ac82c856a45036ddfe3bb3c45bae6be57aa9b61afd3a68551de0e4facaac4872007ac835a98b53c37f2206cc4a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-linux-musl-arm.tar.gz\",\n              \"hash\": \"f8bfbb74eafc490c67002ddf6ee2be9049b8bb3f94fc787aceaa4ace67712b816ca6967432e55314dd4563907d0485edb268ee9da508c358217e02d372e1d378\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-linux-musl-arm64.tar.gz\",\n              \"hash\": \"69165b4e66f5c723a6b36cbcee0c427f37cbd01e90c20c7789a54ad65c7f23a0601f0a1f4364a42d1b946d9952123bda4a114d09ce16031c7b359c100bb07e94\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-linux-musl-x64.tar.gz\",\n              \"hash\": \"5dd90ffb508e8fccc1966886c8d3f22a11d3a3dd7f3e224e010acea26a843fd9877dcf6ca468fb9c5a6cb7a7b6fd0b565574f3499005638b985c0eb1e2895979\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-linux-x64.tar.gz\",\n              \"hash\": \"87a1004bb9acae2571b70203c1379b297adcad5ae230e9736fdb82d2be64df5627ab8680b12b9652da24937264a1463064a901425445a75691b940f0e53b9dde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-osx-arm64.pkg\",\n              \"hash\": \"95825a77065243a6b42285bc285546880da94fe9bd76a2720ae6e4ef7c7a520009eb8bc925e2d28fb5638b816986ce2b038111aca9f9c03cbcca308f0d0e0fa1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-osx-arm64.tar.gz\",\n              \"hash\": \"f4531255abb9f0fbfd16024506c3df8c8779964db300734fcb246c22809387f380b6c2eb2743152898b95e2afb5c79d6fa7e68988ab785535a17283ca799c08c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-osx-x64.pkg\",\n              \"hash\": \"189cd383f55e2707a9ffef1c79c23d3f8b6c078f4e4612a8632ed4f738e3045c978790c1bfa4649fa8873ef3d58ce222643967047fe09cae1dc11a4947177491\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-osx-x64.tar.gz\",\n              \"hash\": \"e2ad9e14f84c44c99be876fa38fe5a4da9d55e8cc90d35c353a37192df779b75f19982e1a119757a45906a87925759b3e2c151add83a99a37abe350ae95d2446\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-win-arm64.exe\",\n              \"hash\": \"52e06697c883c7406de2a8dc4f5a4bf06e9c40c42b36c19796a8e9feb02b156833869ce25311a6ae59457dfbd3478707473f4338f24932d6ed659f894287baf9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-win-arm64.zip\",\n              \"hash\": \"bfea4c09295027cbf190db188dd9fff9794436d04a4388891f48f9d81dad104c791d9f074e7d5d6764a65c502c632a33c9e211fddea1314be1f49e91a8950e21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-win-x64.exe\",\n              \"hash\": \"b1912c6ea5372b0ee6bc607d7e281d5719e2a31d58cab571a4a6b0501d501e3eac3d83e9d61c6cf0ef1a7c05df8f5a48eb28577068b22f51288f07899899e8bb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-win-x64.zip\",\n              \"hash\": \"34ad781f16fbc8b238ddd779dc115feaea7dee0de6b4e09e771b6880e7dfa41598a65cd6ed1b95a2dd69f733fedd5daf2aa767c25b0a23fbb57743102757da18\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-win-x86.exe\",\n              \"hash\": \"2a02f33ea752afcbec6a1b69612c25f5ba8b61b59395c53a67b968c3b57520bc1c93f436c6aac6b3b92db5710cf0a34be572a91973db6ebd61ba053f90ededd2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.315/dotnet-sdk-6.0.315-win-x86.zip\",\n              \"hash\": \"2e70676106d9f6e4c588b621e0546372a0ba21844540a5e66abef3c54cc73718767a4cd7713c65e6f47df13120bf9a957c9aa380335f4413b3d3a27bd022ca70\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.120\",\n          \"version-display\": \"6.0.120\",\n          \"runtime-version\": \"6.0.20\",\n          \"vs-version\": \"17.0.23\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-linux-arm.tar.gz\",\n              \"hash\": \"37e2918fcf1abee5ca7d6d229887cde20d6a6a078a81114b2df5c9a146e6514208a3b2c8aa64d2ec4c9578ac80dc3adcddb6441cbe6dc2e83d3e75344473adef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-linux-arm64.tar.gz\",\n              \"hash\": \"6b9d4d65a1a9f9fedb8302254455165680e1fde4620880dfe051818492f98f1c404cff682946ddb251be8063a6f3b5ad3c22be6cc3aa8df940526818e4d51ecf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-linux-musl-arm.tar.gz\",\n              \"hash\": \"81d3e63983f2768e31fd3aaba35dd3f5a6d5321f830045fa8f000089439be8f4e9a02b940c325c2e7be1d87709fd5890d76230ce399dec64ab6fc60d86a777e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c3e9a469346f48ab27042ff96a467d19a5f71d928233e7feca3853905aa27083ce93432b2126cd5ae8f2d95728c747afc69ab67605dca0248e568bf579c71ada\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-linux-musl-x64.tar.gz\",\n              \"hash\": \"9fb8f03c764305a78d180b8f91f17754ca28fe006cfc21ea8fcdc2ebfa94e19502b25d3a31263dc505043cf9be30c1628756588177c353317d9303f280880d16\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-linux-x64.tar.gz\",\n              \"hash\": \"1e643a659ca53aa0e6e4e69c215d07919d8c611532970094d0460aedbd08f790b455d88e5b3e5ca7767b69af98be190b2afb8c959dbe9ffef205b0c910684df4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-osx-arm64.pkg\",\n              \"hash\": \"dcf30348098dcca3634982147cc232f030d6a3899157fa82e5727bb366da874e9989426f1a214e92a904131652c6f324f1572067e174a342983eccd067c9a657\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-osx-arm64.tar.gz\",\n              \"hash\": \"a3c1d976d02c0716228e4154aa793c221656bbfbd244adb39ec9735fe404f9b0680d60b40252527b9a89ba0489387109ab49a7e4d2da0035ddbdb0ad4e7c12d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-osx-x64.pkg\",\n              \"hash\": \"1282b7fbb34a4f110ff7d788a0575d93b39f855981d89808cd61f9abda24bda8e88e1e68aa33acad7d9b7df8c4ec915880b275732f9e9ad406353b7f8773ba63\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-osx-x64.tar.gz\",\n              \"hash\": \"6509ac01e97c2426cd1a2812be593bed80290e38dacf9304f38fe92c9d18c6004d1951b18f14aac689a85278c2883bd9cce2dc3ecc4daac06338b00b8b780cb0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-win-arm64.exe\",\n              \"hash\": \"6ebf85517ad4059b510ea93f36fdf275553b77082cb58fc105937717ef488be55f2270ddfb407148ff710295c3213dcd0dadd27bcbc2165b00ea4d4ed3e8471f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-win-arm64.zip\",\n              \"hash\": \"fd4ccacbf3748a1580c08be36a4ba03c45fb0db2f8ea6199f6ba2d3b264fb43051501e21cd45b2cfa1abb7405f557be5d0502f065b8272b25e4445b03d3c2745\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-win-x64.exe\",\n              \"hash\": \"bdcb4883b0c8d384bfbd8534f30ce2669b2fe0e1ca71c05791e22a6cb74855abd651c2129d90ece3da9e41c9c986bf9c69ef9992c8756433677aa9726dc889b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-win-x64.zip\",\n              \"hash\": \"743a3c972e16a8ae139fd3f828ec7e2d3bc6687a266d2dcfb0f6373afcfcd1f88cac4b9e410461fcb341a34bd772e41c688a459c94bdac26c22f99b3e8e85af3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-win-x86.exe\",\n              \"hash\": \"00db86bdd488674dd6f616dc0de21bab8da35b03f36339b18b563327d2783d1a11a5b8fc41b137028a9ae6b1b007eba7b540a3c5ae0d2fdb4e43280c17173f7c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.120/dotnet-sdk-6.0.120-win-x86.zip\",\n              \"hash\": \"b3e9ce2918e6b434a6acb6a67f080d42513c1105ee635ed2543383935bb9121c92b77278e2acfaf2ab71205377077e3a81f840b15513a62a2c2ed9e8a86e7f77\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.20\",\n        \"version-display\": \"6.0.20\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23172.20\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-linux-arm.tar.gz\",\n            \"hash\": \"5ef3e8a629e5759947e9a7260c3d4359144bf02210831c23d8595c4176cc55419ea5f9c222439d79a6d1dcbef19095a0d2594d65ca09548869f94ec1ca95d7dd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-linux-arm64.tar.gz\",\n            \"hash\": \"83b1825c80cabfa5bbbd8c3e69b3525fa5cebef773957f96fee9319d60285155817973a176d47348c9b22bff5af24044f0f06b59229c067ce8adad4f3d4123de\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-linux-musl-arm.tar.gz\",\n            \"hash\": \"87584beaed502c020849337a1ba059eb7aba1dcf880cb3d56f4d1cd70c452645f053dcb64e0da0d7bdc58b28c84ab2110a7b1a32bcc0616bb4d2b3efcf1f68d6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-linux-musl-arm64.tar.gz\",\n            \"hash\": \"18532b56c42ea75039e4194ff0b12bdfecf8dd67443c50f22102e3bc5449b25dce15d1fe6fb330a8756d510fbdc257225c7e3ec86b93e6653442f19a0e4ebf46\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-linux-musl-x64.tar.gz\",\n            \"hash\": \"fc615ee21591bffa97c5eec8c34aacbcd8a769d6e4b245578add58207f13bae30e70d93b89052493e228ab32eaf2fe529c04dde5a0bac6249ca709fd644009b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-linux-x64.tar.gz\",\n            \"hash\": \"891bad6a52a7bcd5afa2a784fe68044d282f6d53fedab4bde6dff8d7d2138a484e947f7a6be156094324b37e9d7e07e87a67622bcf2ea197c2924389edd1d185\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-osx-arm64.tar.gz\",\n            \"hash\": \"fbc4033b79a651923dc205b923ef6c9ef048c862113ebcaeb8fa6388827245039369e261e89ac371e895c538aa78fdfc07a5a1c1cbc41713f54a15bdc0ffdf5d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-osx-x64.tar.gz\",\n            \"hash\": \"5f6efea102c20805430815228070461216d8c5b928d090ec9d6d245eecbe23298920d1834276a0ce77bba524a14c83d97464580c72660bf3a2367a02f1872e31\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-win-arm64.zip\",\n            \"hash\": \"d5c042d7d63a5262761ce955be68cca9f39e17d7d9e7cbdc3659408e7fff27c62c65eddd7401f7affc819c246b4fea19a2e4bd815c338babc9d177affb7cc67e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-win-x64.exe\",\n            \"hash\": \"94099d52743928ce6f659865ca519e86131305750b1abee13948596e51780c91737213b5785661a59abcbd7ed5ecca2dd976ea056ea14c46f28eacac59974705\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-win-x64.zip\",\n            \"hash\": \"b3b837fc32c33196fc9b5332f258be80b651db2393e921f1169b8703ab2d2507ff4bb34057f43878a48bae27e82d2340cd1da94e9a3b6ef6ae8577a89e3f9345\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-win-x86.exe\",\n            \"hash\": \"9b10acce1bdab389e4f71dd72c3ff79aee0abd6631425162e978218c2ad03506a99470d45a574c016a03e395084cef34e4be850aa3c091a20e765f78d91c15f6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/aspnetcore-runtime-6.0.20-win-x86.zip\",\n            \"hash\": \"c41bf936e6a677ec138d81b794c12d93bfef2a2efcbbc46a1a5a3206e20d80b044eb0d50badfc02fa8aa49b687bfb969a70e9b617763be6a9f8eafbb8c2953a8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.20/dotnet-hosting-6.0.20-win.exe\",\n            \"hash\": \"0b1d92a5161c9a2665085c90fc48567e0e9b92973b4221ab26c215d5520b3a83dc1014102c31cf99e67a875fe4f0069dc27a5b5b7ce08b0621230bb78feee88a\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.20\",\n        \"version-display\": \"6.0.20\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.20/windowsdesktop-runtime-6.0.20-win-arm64.exe\",\n            \"hash\": \"a5798928573622d3641ba14889809cdaffce4014ff5861da205d8da71618a77106e87a25e28913911f35d6744cb2ca139686d7e1a84e3c707adbf5d29616f4d8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.20/windowsdesktop-runtime-6.0.20-win-arm64.zip\",\n            \"hash\": \"aada348b6fcf8c681d5cf49ef211f2c7bab88acc84e74efa8f9bf7a55cba7cb3b791ad360e719bf4f230cf00f7d040da2445e167bf31bfbb4df1dde0b506db2d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.20/windowsdesktop-runtime-6.0.20-win-x64.exe\",\n            \"hash\": \"eefd2e2dabb633b0d6c7e523dbdf072c9634088cc6d38c63aaa17c004e38366bcf2dcf5305093b5279a7366c11e177366ceb9d48c14600e140f2efef6caa6308\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.20/windowsdesktop-runtime-6.0.20-win-x64.zip\",\n            \"hash\": \"4aea0d7aaf77ff9b43f31de571bbf979769a5f00cb652d346cfb0c860a12d078422c6b195c5965997bea1aec0c30633874d409cbf2fe3f4e6f1b5e0328df75dc\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.20/windowsdesktop-runtime-6.0.20-win-x86.exe\",\n            \"hash\": \"d9288d30122891edc2be5a9e65e00bcff678ee1bc9b125f7e5cb5aa1df91514a8f409f5a122e8751bbb122b35450b69c796ec94027e4a5c443c645fcb8aac29f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.20/windowsdesktop-runtime-6.0.20-win-x86.zip\",\n            \"hash\": \"b38adb6ab546897a6af0b85e8f5910bf1202510b01a99ce77edba59a0027eda61930f432f75daf339f607afe978c15893cd7d40d47fa33ef078bd2fe5eedc75e\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-06-22\",\n      \"release-version\": \"6.0.19\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.19/6.0.19.md\",\n      \"runtime\": {\n        \"version\": \"6.0.19\",\n        \"version-display\": \"6.0.19\",\n        \"vs-version\": \"17.0.22,17.2.16,17.4.8,17.6.3\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-linux-arm.tar.gz\",\n            \"hash\": \"d1ca1d87c05c4e5800f06dffce0cea5b095af1348898676bb7e64ba3b7d97230464211279e9bee3b52be794f7990b258f8f474baebc7470a3599b2f1090cb7e4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-linux-arm64.tar.gz\",\n            \"hash\": \"7698ae2a9f7bc32f99cb2a945cc58b47e173720412604807c09c682cc03edec8e4a7cf19d73e087733437da77e7f05ecc8618296f7f9165ac8ff5dfe51dda346\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-linux-musl-arm.tar.gz\",\n            \"hash\": \"efb0b0ed5b1b518ada7ed309a9bb1d758a66ab95ccf150db20a8c329ea927ecbecf8916fb479710095c8d0bd692e58d1c6f5de993d141848008c5bbfa0bfc013\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2f418a830cfbe3c2b458f3ca4c8db5bc0200c8971ae8148dc5810a537c05b2e298b6373fa20fbe796196aac4954383b8c03a29e4ba3cabe35ad2eb0c1700a576\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"ef1bbb20171723d9fc4b45a19c4d1bb0ddcdef362f006c1cfd8e9b3b56ee23a749b2c571c7ceacc763e028b91a6fb4b4b168129ca45b9f4117e2ae6bc27a0746\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-linux-x64.tar.gz\",\n            \"hash\": \"6e8e1db8b247c92c8de4b476e06ad464b0bd664919394afd5fb3962db477490e54865abd2510c29457efdef3be23f0ea4683d6caabcc74a6d7abddce4b4a154d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-osx-arm64.pkg\",\n            \"hash\": \"2512be3c37de3ff6ab605dfb371ea055c6afff8e0cdf487a77a71b834286f4978385a01b4e838ccdaa79e72557cc375de9fb12118033711b363fd22b1a5245a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-osx-arm64.tar.gz\",\n            \"hash\": \"9a7d0d2c493dcb0cccfd2ff9dcb234a6886f7c261a1a403aa896ccb3e6d76be6d7ad865e18e8f040f769833cc41f1caad7cce2909f9c4ded5ba3bba219c76071\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-osx-x64.pkg\",\n            \"hash\": \"36b6a8d27e973c08b789e5428d7d7e2fef9da4a3303c8baa9cb6e4769a6b2cf00c8993465475625f863a09e1d594a8263829da1c2ffb5eed11c51d0d62353cdf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-osx-x64.tar.gz\",\n            \"hash\": \"c0b7738b198789ba0fe4e2b301aed2b129eb8b09e826c35b6e56b9a205d4d7650841cc0870bb3629c3aef58e03b59cbc37da6495bea4ad674b62d81240639b4d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-win-arm64.exe\",\n            \"hash\": \"6a3c96ac49595b0e8fe17e8c82b3425c96675db5e634d41f7454458afad7feb93de6ac3293ae775875ebd1a5f9dd64c265622b7fcd7d4df6abeff3ee3901afc3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-win-arm64.zip\",\n            \"hash\": \"20b912e0553ca7e391f10dca3fd2e45dc840b6edbcc1cd70a98b1b40d88165da18049600bcfa6443685ef1f8fdebbfefc8d702d2ea13e1e47c2cf7a7a748c4ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-win-x64.exe\",\n            \"hash\": \"42c0df6a0d852dbae1305ae32752a7f9982e9206a87588f56518531432e69dc7af3c89110f9074210c209b31712d736344487d8576c0271cc94258eda52fcd78\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-win-x64.zip\",\n            \"hash\": \"93f3b6061bee3326d591dd257c594c4aecdd7cbd76c3dd722253141830221ae78bd3e45e846139182ce9e01fe53f89e92c5887994e54ad639daaab7cfef9e22e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-win-x86.exe\",\n            \"hash\": \"80c6267efe2c465de6d1688bb0caf4f5edd63ea9d6b904efb18df9995f1f97b7a1d50a87d29ab9e8b5672a53aea90ab09cef9de36aebd5c95bfbcbd4c84eedbe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.19/dotnet-runtime-6.0.19-win-x86.zip\",\n            \"hash\": \"577b0fec09365a694bde4733755a1b043a713cb45d302f210af34e7f7b643a80c96b09440ab89a302f708e883a335a8cfd1d7a56217e40afc0620db61ff608c9\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.411\",\n        \"version-display\": \"6.0.411\",\n        \"runtime-version\": \"6.0.19\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-arm.tar.gz\",\n            \"hash\": \"c0b4e0229b0e1b536a995c64633e4ff5e2659b1a0127466035f8c11c9acc72c2ca22b1967d2792502dfd0c0f2f6a3d29d9936cf00da1d7ed64df8f90a0046af7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-arm64.tar.gz\",\n            \"hash\": \"e10aed4470087f30e48bf2c3d7e98a680cb7b5f5cfaaf2f7e5029c648e4df9ab140bfcef3b84195f6f8984b56b4156b7afde957b3695e68e9ed24934414a62d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-musl-arm.tar.gz\",\n            \"hash\": \"fc91104e58fbe7963ebf5ac4e9780d62feeb50a688220cd4c8d1e1b3f4c8a3145854c55c1aa69a4822d979767feee3e01aca7825dd830f4d1cc6a8dfeb4ffe8a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-musl-arm64.tar.gz\",\n            \"hash\": \"404634907cc174c5d357562852acdf1f82f07aaec5b6f8abbfdf4b251f394166a498024a3181d675346f385418074783c0e9cde71b624fed31653983daf00d53\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-musl-x64.tar.gz\",\n            \"hash\": \"ed5a1525a360bd6278eaa29dc528a4d50e10310d550caee234e5b31d13a9df776c4b3d904f3fa02ead4f759091f21c250943ee1fe4f6c41cc9cb1e4f8af13f90\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-x64.tar.gz\",\n            \"hash\": \"dc8aa1f84ad97cf25a979bfc243c200b7a8e73b930b68d5eed782743d88aad823c32c267c83d7a19d3c4f910a8fae7f12d07ea5a35a1d3a97e13a8674d29037b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-osx-arm64.pkg\",\n            \"hash\": \"e516b665e7cc172924708cff4617da339d677d17a26f811e5719501588440e5a2fb73c535de741251ab6c1fc296d13756dbaf638b4c1de9e2ce32e8d9588a8eb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-osx-arm64.tar.gz\",\n            \"hash\": \"0095606938cf1b6d5c54516ccc4d9ff276c567e569d2644dfc2f00c8a20c88ca8b09cfa1bb1254c04463887cb9c2bc057e62afde026948ca326998048c4d5d0d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-osx-x64.pkg\",\n            \"hash\": \"f1e734daa9b38ab18ad52ad91cbbdadd5bca2c4cbed1b286b4559efaf955a97f7031aec0fb1706741396fecb6609da1157e107fd672deeea857d6deb49112d6b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-osx-x64.tar.gz\",\n            \"hash\": \"11068da9ae996d0f0c2410ab2fc0a6637d5daa25ef9c152cbd509ee9ef51e452134a787b5214e8122a797b3cd00771fa3bd54c2e4aacbb3cf8ef103dc85b0a99\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-arm64.exe\",\n            \"hash\": \"e872c6af619b152908887a6739ee9d21c24f66aa4e51460e9e3293598bfb6dc89dd6644e0d8bf05805d7fd501365cc7bf00810667e437306bd91aa8e1242dcff\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-arm64.zip\",\n            \"hash\": \"8c8c5e4a33d9e2e57607df4e33088925d9d1fec9f84deef4ba7f86f154f324ff7d5f5ba47263277f69532407b79660c07e19cd6ab876117dd423c25f94cfe0ce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-x64.exe\",\n            \"hash\": \"22d44afd53349e5457f537eee1382c373586a1934f9ff4b0680c99f7dfe564d57330b43ac3948491d9f02c3df875e4c3826b39cef84ac1776c84aa5ea3a9b8ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-x64.zip\",\n            \"hash\": \"96efc948434bdb88aa2d609c65a8eadd9df750fcdf156b0384caa004e170e16113d5bcb719de423e4f0b184a36004ea86bac8e3d553047485001976740d59bc9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-x86.exe\",\n            \"hash\": \"4a67e8bc9eff5c6aec93e46d443b67dfe611a9dd33c54513de962abaeef03b80335725f3e085103064c11f3e55a89033c43e8244f04267057ad5f585898efe95\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-x86.zip\",\n            \"hash\": \"4549f8a992da3c3e0e311f1a4178ecb8fb5831e9f5f5dc7d4ae699a46619c61ecd02613cbdc9443fe76ab3e86d5d4b4df4a99db034fc370381b832c73225096e\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.411\",\n          \"version-display\": \"6.0.411\",\n          \"runtime-version\": \"6.0.19\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-arm.tar.gz\",\n              \"hash\": \"c0b4e0229b0e1b536a995c64633e4ff5e2659b1a0127466035f8c11c9acc72c2ca22b1967d2792502dfd0c0f2f6a3d29d9936cf00da1d7ed64df8f90a0046af7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-arm64.tar.gz\",\n              \"hash\": \"e10aed4470087f30e48bf2c3d7e98a680cb7b5f5cfaaf2f7e5029c648e4df9ab140bfcef3b84195f6f8984b56b4156b7afde957b3695e68e9ed24934414a62d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-musl-arm.tar.gz\",\n              \"hash\": \"fc91104e58fbe7963ebf5ac4e9780d62feeb50a688220cd4c8d1e1b3f4c8a3145854c55c1aa69a4822d979767feee3e01aca7825dd830f4d1cc6a8dfeb4ffe8a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-musl-arm64.tar.gz\",\n              \"hash\": \"404634907cc174c5d357562852acdf1f82f07aaec5b6f8abbfdf4b251f394166a498024a3181d675346f385418074783c0e9cde71b624fed31653983daf00d53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-musl-x64.tar.gz\",\n              \"hash\": \"ed5a1525a360bd6278eaa29dc528a4d50e10310d550caee234e5b31d13a9df776c4b3d904f3fa02ead4f759091f21c250943ee1fe4f6c41cc9cb1e4f8af13f90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-linux-x64.tar.gz\",\n              \"hash\": \"dc8aa1f84ad97cf25a979bfc243c200b7a8e73b930b68d5eed782743d88aad823c32c267c83d7a19d3c4f910a8fae7f12d07ea5a35a1d3a97e13a8674d29037b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-osx-arm64.pkg\",\n              \"hash\": \"e516b665e7cc172924708cff4617da339d677d17a26f811e5719501588440e5a2fb73c535de741251ab6c1fc296d13756dbaf638b4c1de9e2ce32e8d9588a8eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-osx-arm64.tar.gz\",\n              \"hash\": \"0095606938cf1b6d5c54516ccc4d9ff276c567e569d2644dfc2f00c8a20c88ca8b09cfa1bb1254c04463887cb9c2bc057e62afde026948ca326998048c4d5d0d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-osx-x64.pkg\",\n              \"hash\": \"f1e734daa9b38ab18ad52ad91cbbdadd5bca2c4cbed1b286b4559efaf955a97f7031aec0fb1706741396fecb6609da1157e107fd672deeea857d6deb49112d6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-osx-x64.tar.gz\",\n              \"hash\": \"11068da9ae996d0f0c2410ab2fc0a6637d5daa25ef9c152cbd509ee9ef51e452134a787b5214e8122a797b3cd00771fa3bd54c2e4aacbb3cf8ef103dc85b0a99\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-arm64.exe\",\n              \"hash\": \"e872c6af619b152908887a6739ee9d21c24f66aa4e51460e9e3293598bfb6dc89dd6644e0d8bf05805d7fd501365cc7bf00810667e437306bd91aa8e1242dcff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-arm64.zip\",\n              \"hash\": \"8c8c5e4a33d9e2e57607df4e33088925d9d1fec9f84deef4ba7f86f154f324ff7d5f5ba47263277f69532407b79660c07e19cd6ab876117dd423c25f94cfe0ce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-x64.exe\",\n              \"hash\": \"22d44afd53349e5457f537eee1382c373586a1934f9ff4b0680c99f7dfe564d57330b43ac3948491d9f02c3df875e4c3826b39cef84ac1776c84aa5ea3a9b8ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-x64.zip\",\n              \"hash\": \"96efc948434bdb88aa2d609c65a8eadd9df750fcdf156b0384caa004e170e16113d5bcb719de423e4f0b184a36004ea86bac8e3d553047485001976740d59bc9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-x86.exe\",\n              \"hash\": \"4a67e8bc9eff5c6aec93e46d443b67dfe611a9dd33c54513de962abaeef03b80335725f3e085103064c11f3e55a89033c43e8244f04267057ad5f585898efe95\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.411/dotnet-sdk-6.0.411-win-x86.zip\",\n              \"hash\": \"4549f8a992da3c3e0e311f1a4178ecb8fb5831e9f5f5dc7d4ae699a46619c61ecd02613cbdc9443fe76ab3e86d5d4b4df4a99db034fc370381b832c73225096e\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.314\",\n          \"version-display\": \"6.0.314\",\n          \"runtime-version\": \"6.0.19\",\n          \"vs-version\": \"17.2.16\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-linux-arm.tar.gz\",\n              \"hash\": \"9ed8ec979dc87811d4b5be0efd1b5ecb22c1402b82f3c6b76c7aa3b6b813d02fc105c5dc083d32a994b6a81f882e342d17db00a3748f288d9c4938a9616ad1d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-linux-arm64.tar.gz\",\n              \"hash\": \"696c71df9d97749eb0f5e0ae57f60779153e8b1897d8b8c0e4fb7d6052fed2af33a64eefb60d636ea94bc826f7aca08cef64e507d2b83405a65e8e5f20a987a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-linux-musl-arm.tar.gz\",\n              \"hash\": \"4f65b711a24d3762c0fcadd91b01dbb4f1b7fcddb90ff33b234858fedf36fa58ccba8e3c022afc8ca60ce1e04c515e44c7dfed412357f39f6e69e6d80aeb94bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-linux-musl-arm64.tar.gz\",\n              \"hash\": \"265dccf7ff99d97d8f951a403362a424d7f5cce3bc9b374213b99470674275f52374ca628c3908a55cf8861968f0cfcfb5aa3dad642b2d4649d4ab79b8576987\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-linux-musl-x64.tar.gz\",\n              \"hash\": \"43570b3000bdda5035647a9aa62fa152deee50e1cb1ce235e713280b52d100e054c3b2ac238ab4f1c168d80bafceff4bbd96a6defb5081ed3df568a5571ba485\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-linux-x64.tar.gz\",\n              \"hash\": \"c22d1acfb440a060cb955699da651fd69e041f73d96299136b104256507c8ab45dfc302689b6a6900db0f17ba1d9d788dee7e6cd8f4635bca1f777a4217eda6d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-osx-arm64.pkg\",\n              \"hash\": \"e98d8cf7c4fa3fe995c22e9b98bf685afc9b5b30e567c815e1e9c6ebd141fef407a464e208378d6a1ca2521cee9d956b515cb977556d3d20456f5820e2ac6852\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-osx-arm64.tar.gz\",\n              \"hash\": \"0f50fe1bb2845d947cd44e12b831011cf7ec2644f772920ff90bae5cca36a265624c1742ce05ea46635216a636b66611c2fe96405bf1a90c37e5e21ad51a3b8e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-osx-x64.pkg\",\n              \"hash\": \"999f28f8a4bad35e5be4884ccc9eda4baf8d2b6456c0e5c7bb19574d7084dad8192f1b62dead6c6074072647e8e517e4cf1ce391961566b93371a1e5a31ea001\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-osx-x64.tar.gz\",\n              \"hash\": \"ca7c6162975cba3b603c95f50ba04aa18615d61a0008f928f1a53d59c7c654fc237459e006557b4d5925d00942123ea6b39c59f5d2636872017a37380869c5e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-win-arm64.exe\",\n              \"hash\": \"ed6f961522749d34a5f994f8e7894a7e605f59a5371c6e577e5d19ff227f9b2775cfa9786341a64d5bacdf756b214fc6fe8bd4bd38777ad668766a0e5d73b1a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-win-arm64.zip\",\n              \"hash\": \"82fc147e2304115e9eaa02b37f452102b422cefa6fc71932a4e886c2ff10c8994fd5ce7985c90235d06dc27af1afcc4f0204dfae3119491da43f897e429004d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-win-x64.exe\",\n              \"hash\": \"6697423ce4e9133411da1d79dd1069df817b980c6700f6b6269296c5622d511567ef5bd132c2281bd78b8dd11df008c14ad2eb6dadc9c67d1f1b83a8dc03b2bb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-win-x64.zip\",\n              \"hash\": \"2b2f1aefeb385648931ecaf54590fce1da629f6ff05c51a8be6789e76f9f258b96ddf39fd4208e7062a94d70d2f31a7fb80d487bc17954fbd9ac3f112f2005c2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-win-x86.exe\",\n              \"hash\": \"e810a80ffc4c7f2b886f059e1b0bcd505bbbc8ecc1af349218e01e46f88b1f22a8c57087b6152193b6f6d5567b7b49ec2fb7358d0b77948aedd9be2cb4f4bfd5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.314/dotnet-sdk-6.0.314-win-x86.zip\",\n              \"hash\": \"670934462f42eee244a5aa51bd8a128977a81816fa9c32340353269f81bb0dc271b600460da4797a55322ccb0e315ea78905b2a30fddf42b8a54de69930befde\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.119\",\n          \"version-display\": \"6.0.119\",\n          \"runtime-version\": \"6.0.19\",\n          \"vs-version\": \"17.0.22\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-linux-arm.tar.gz\",\n              \"hash\": \"ea677df2acb53bd2822df44e3ab8c6e7700c7fe9878b535fb09e0b0d25de37daffb05bacb42a1d8f075639689e94fce063d5a58a3a372128814f13af733112cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-linux-arm64.tar.gz\",\n              \"hash\": \"82780dd9b3205f9df2c90cf19075d72646c814820c93806a39639457bc33ae7e5f06162cc8845e8a1a12d71b190ab3d2f81a03db4e41779c348e626e079e292c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-linux-musl-arm.tar.gz\",\n              \"hash\": \"61cb84cdbdc2c559dfc6a50a48724443117c0ee52bc1906ea4e5dde5a2f0713e0b99a96016aade2dfe88368004ecced15916be23443c1ee15d75417cf84996a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-linux-musl-arm64.tar.gz\",\n              \"hash\": \"dbe7779136acadb8bff7e6256d27b095d44accb1af29480f53bb52acd3e6de594a3718cfeba8426c30f7bf08571d2a88dd110c6431c3c71295084b2d03ecf0c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-linux-musl-x64.tar.gz\",\n              \"hash\": \"16e72176357be34daa2ce7bf6d9b8c5b159b9a0b31244b1d358fe5a5ca7d88f8089cf02091f587d721400ae3a85a169f86968641b4bc25873fc42bdba1514047\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-linux-x64.tar.gz\",\n              \"hash\": \"16eea6bbee81062d2580e6465acf3248cb3c436b88f875d7eb2d44a1cc1aa73db3b5c9426e95e36868067bb2cfee7f595a2c8a91d098558b0f0e76d2b5225ef5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-osx-arm64.pkg\",\n              \"hash\": \"a60eb9966539e79e7ba84070577a4e2d51fc9d00d490c39af689b9df768eea08777b3b556c33034f2e2d182e15c8f0daf81e5f3079eed9a14f2c41d4211827b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-osx-arm64.tar.gz\",\n              \"hash\": \"7ca75812542e96712dc4c730756ca67baa9246377f57c318acd4a342422b3c61a45a645819c54031224a9a859ac8c0ee05b25cda7e1019596534dd0c0b761ac4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-osx-x64.pkg\",\n              \"hash\": \"18681ce91bb6ca8e5084565fa775e7bcc4a70da65a4d40b0c7d1dc1ad2006e59260835038804882cd0f2853d076b6f101ae80546c26b16906e24622dbf147307\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-osx-x64.tar.gz\",\n              \"hash\": \"ae425feb43fa225b6ceaae9fdbc18ebeed5798e671e5066ade1db907c5e735efe9196ea125a202f536ce99dcd6a9905a1e436ae371c74b36b96e02f92b466ecf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-win-arm64.exe\",\n              \"hash\": \"18c5bab07ff3e83b1c9d60f430ee0420743d5b9d448ece6d39344022f62c5e91f63b8570477be21c5ed02f28c0f5a43b9a715d5c23713ba88b38c9e9e2b1cf58\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-win-arm64.zip\",\n              \"hash\": \"540fe6d86b14d2b5691fbf344ace0489d99d4d2e4a62b505badaf447ae9b7d0ef00ddcd272712b8bfae9af65e28fb78b1530e065655a43283e3790c9cb59bb90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-win-x64.exe\",\n              \"hash\": \"ddeb13f1641fa67df327045f82020878cfd6fc5335c29413f475bbd2423e908ce6be562cbf2bef50c52d5c96dcb86993a18b153a86e67febcdb8a9f727385839\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-win-x64.zip\",\n              \"hash\": \"32002ac36ff30535c5e6e5b89e5ca2599edb24409ba7e5c51b0412b06fbce9d33a83c6038ba76887d81d980cbef007d41667f0faf642c4b19afb8589554ef10a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-win-x86.exe\",\n              \"hash\": \"1d3115d493dc71390a043808aa6533c1a4d75de0acf7de20948a6a022227d4564df361e9ef17ce2d3476d37a349c9aee1306a16e3597f3b7d3932110bef8d0b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.119/dotnet-sdk-6.0.119-win-x86.zip\",\n              \"hash\": \"0f9afce787f1bbcc2073a0f9c26d84db91c94654755c624ad8d1815eeb71efd039b2c7202459c4eed034d6643697e5fdaac75f9ed8a8d7bda1c7f1b85529501c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.19\",\n        \"version-display\": \"6.0.19\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23170.19\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-linux-arm.tar.gz\",\n            \"hash\": \"0601f72178b962fb3f2890a7e5a1f609398894e94d6d8a0373df842a69214d5e78d7196217a28116b1a18b1d673c80400c048db10cda46edaf13de24f6f22d75\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-linux-arm64.tar.gz\",\n            \"hash\": \"739acf3966e32092243f9a2ede241a16b2ae7c26bccdbcd53e63149429c4fad7d7166beca8c54ef1e79f18b43d3a5334bab42128a534aae7499cd137b833e888\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-linux-musl-arm.tar.gz\",\n            \"hash\": \"6e694b98df81df78e947d5ad6eb20b24afedbcfcd187b3a87b29166a8c438713a0dfd2c69324ab72b344305fbb4b9979ebae6c35aebaa927f9147e4b5db69e55\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b684520eecec5bf9d6c0945f68ff49fa75253c6ef05e6987f5860013ca56360bc73b898b8d2782390e6e1a98d80621145d7c1c67386fb46c7d7a5a125fccd91b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"041ef64cf271470ef94014214fef6ea0123227f4dbb2554ded6e8c1a3c979be96725f685a9679df3127e067a5ef783fab21993015be176bb6ff3f6da2418c0da\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-linux-x64.tar.gz\",\n            \"hash\": \"537e4b1be4fcaa5e69013b99c86808e0a13994c87d7542367b3eb18196206d1c27e46a865d89784229a04f69dadbe0b283d7adf1e7848c8d3c7998ee80c9e765\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-osx-arm64.tar.gz\",\n            \"hash\": \"6cff56c4da0d55eafb334775792b92ff22d1b3b6aea85375f90e55e4f850330f70eccab3d8bc8755c8a5895df4d7db9c3099f63982a1ec58ada196d2fcb574f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-osx-x64.tar.gz\",\n            \"hash\": \"405f3ef158ae0d8bbf755628b6d3131618255170885164422107955d94ee8483adbd6cedf4e5b414413cefcb15945efa2b44675b1f851647ffb4d92eea7505b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-win-arm64.zip\",\n            \"hash\": \"640cc404ac647df8e602d80f56970aa85490a424c8fd2e2e437e59e2b93fe3a1b11de7563628ae5fa908710cf375b9dd3d0a7771edaa5b7988c1bf9d72734094\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-win-x64.exe\",\n            \"hash\": \"e0762ac40c9e2456eab835d47d5486e8c16f8070743f0b4df79b18b91c4f20bb6d76f6b96dd8de009ea8bdfcbad44df41c874946c34f4c7a7a4f2310d9054eeb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-win-x64.zip\",\n            \"hash\": \"3fd28c0d352a420d4e7b79f7faad772919081f1cdb315379ffab0a2e6e29941d130077932b0aadb222b2657325bee93985b1a48d08aaa3eff24955c9289f707d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-win-x86.exe\",\n            \"hash\": \"5990c40673d40a0cc56220168591319edc467dcd01c338f6f0c5b1db0f5cf98ffb51ce5919fb05143ee80ff3ebaf7e8f7b02d97b827a878bfa6d863614cfe885\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/aspnetcore-runtime-6.0.19-win-x86.zip\",\n            \"hash\": \"d0104e799ef46fb980ce9c4d1e6f7f6048f896007e2b35c2bdbd6d9ec19c35efaef096395d4239c8f68c674f5ac109ebb6b19404b23b78f390c8bdb680a40573\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.19/dotnet-hosting-6.0.19-win.exe\",\n            \"hash\": \"fadc48a76561a7abd5cc599db737afc2b1638013c95e29cfc8955caca1d57004bd9078c6ef9696becfd75baa2983fdc2ff4382c9ebdf833a11316c2dec218884\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.19\",\n        \"version-display\": \"6.0.19\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.19/windowsdesktop-runtime-6.0.19-win-arm64.exe\",\n            \"hash\": \"ecdc0bcb63d9f4047110dffd3a7c9f60e1cb4bfc41e493f7e1d0c6eff74bd81d4cc246a2b4c60a97328c927dd4f5ed311aa75f57f60f1845d7b7de66da32eddb\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.19/windowsdesktop-runtime-6.0.19-win-arm64.zip\",\n            \"hash\": \"f704d01bcb44eeb90bda47c0fa5b2e0f7a7103f19906795541ad93c5fcfb5585602bc192ec890928737ed04b782fd6098cfb279ca407e956047e5ef9ed509e5f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.19/windowsdesktop-runtime-6.0.19-win-x64.exe\",\n            \"hash\": \"ee214705a57e0da2f31dfb4a4ce2368898eef10bbe024f2e0b05889a85d472d3acba9cd935fba5391b84463c1245f641bcc3cbeb9a48334fb6d41e7b3a2a9d61\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.19/windowsdesktop-runtime-6.0.19-win-x64.zip\",\n            \"hash\": \"48815f30fb5a23ce301a3b64bd1a6699d6d1393e73e770f1b8da51aff94f402a5f5c890fa9c5a24168ec12221f722c74f13b849eedc927eb055dea99efc61fd2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.19/windowsdesktop-runtime-6.0.19-win-x86.exe\",\n            \"hash\": \"993422cec9e7aabf884c6030c855e62c674d85f9ec81eeaa63e9d0f8c395a75d142e8c59eeba57916e2a95650fadbe9e01d7dbbc989b784979dec442171243bc\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.19/windowsdesktop-runtime-6.0.19-win-x86.zip\",\n            \"hash\": \"4cb2885aa448349ba36dbe532c4787e7ae0e237e75be764c83a9e871ee49198db23128bcf67405c7a4805ec23e9a759088604ed987db5ebadf17bc40bb9a8e18\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-06-13\",\n      \"release-version\": \"6.0.18\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-24895\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24895\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-24897\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24897\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-24936\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24936\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-29331\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-29331\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-29337\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-29337\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-33126\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33126\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-33128\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33128\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-33135\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33135\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.18/6.0.18.md\",\n      \"runtime\": {\n        \"version\": \"6.0.18\",\n        \"version-display\": \"6.0.18\",\n        \"vs-version\": \"17.0.22,17.2.16,17.4.8,17.6.3\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-linux-arm.tar.gz\",\n            \"hash\": \"3ae9533357db02a4d697a83b6f58a3686751558d3be8bb22d097d1d53b176d5d935a2d0bac11d63b64343aad55ab4e08ca99805f129e09b3928123b73b23dc04\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-linux-arm64.tar.gz\",\n            \"hash\": \"7c9006feb7fcc22510ef99841e55b0737fc3cb7404f3aa0f56eb4dfd82da62dcdae3fecf0125ba1f1b5d17607ed595741e802dc2234c79ef1047a9e99e61b6ec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-linux-musl-arm.tar.gz\",\n            \"hash\": \"bb60749f3ce8ef78e34ff48a401b99931f4989f9badb477d123d043cd493bef94c9c84a40216952ea9a6ceb409f9dddcc4a15cbd1e1035dd2ebd705c2af6bfb0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e37376a0c723fa9211ae904b34c1c35517dfc95b27078722c2b3b9e0aedd771551e3bcd1e1f502ae54a55843ed57236ba57c26110b537df7de77d391d9691bf8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-linux-musl-x64.tar.gz\",\n            \"hash\": \"3265ca274799e4de33fa0f60a9b88602c2245aa28da7891ec1343d1193d1f57f0c4b1cb5c561cc51bf73aaa92a4d5f382b8f63425fb32451b99837ccdb5d32b1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-linux-x64.tar.gz\",\n            \"hash\": \"bcfc88238f901c14d203a33eff036106fcbcfc40de7e3717f61434dffd86b5444c176dec5beeddcf80e7193f77bf793ab1e2284c91d54b93931a4668ba77c634\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-osx-arm64.pkg\",\n            \"hash\": \"935945ac5b3ec79317f754b9b52f937c18e640719191a9068ef2cacced6007cb6c8f307a1759ce9786fd837032e9a8faed78c44148620a156246f35440e0cc90\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-osx-arm64.tar.gz\",\n            \"hash\": \"3183a2ac94c2e33637e8e193dacedadafd49e7b39b10a9429f0d9b4f1b7beca1eb72539574edbc2a9c6f97b36c157635bb4b765adb791fdbc4a477ed890aeeab\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-osx-x64.pkg\",\n            \"hash\": \"e303522dad7b23d814e3dfc81f5a4f2a6214102ba765d64a2d13dc924627be0da3f87304bc254e41e648c240e1429b6f864167fb1edd998860a4e5d507c71358\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-osx-x64.tar.gz\",\n            \"hash\": \"67d7a3a5ef59ae16c76c82fdefbdf5dad8920500f03bf868eed30aa21029ae06e3951a7a5337638cb7449ffe643a6e7307bf94984ba7dcab5c50f4194c484ca2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-win-arm64.exe\",\n            \"hash\": \"1e06777ab250e27e1796cb7a24537e8cd062a535bba2ec9f270e563da50646ef928ab333365e6fac89fbf0a911f45adb684b897e86535275287548c93a6cffc9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-win-arm64.zip\",\n            \"hash\": \"bb6a82d791fadf2af1d609b104d8b4314e5757232956131020ee262fc40f1c6824670fb31ed5549d9a36d1974fa5d7ba356dd846810dd7f188864d898f32c5be\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-win-x64.exe\",\n            \"hash\": \"f32d5e244567db4b4e605b374e995470a2ce5215c618219159f238ae8b32d0ac6b05ece9b82dd11e316085756ed658e2985c64af3430c0d51e692acb8f5c0a08\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-win-x64.zip\",\n            \"hash\": \"22192997e474d22a54edd39fe2a8b688b775a02e9064bb0ef4dc24b81b5064727c2f42fd59b2a9351ea2e59d15410d3a71e276b6b9fc599c90b3092bf32db498\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-win-x86.exe\",\n            \"hash\": \"5fec30e96fa9a99a8a8798e3fa608920c18f12c1c6b3ff8c509c1ef8eae5517957cbb6c6f71177a47190266d644c2d6f54f17d09577d1624512822a4f4c815db\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.18/dotnet-runtime-6.0.18-win-x86.zip\",\n            \"hash\": \"b6f576a8d44b94b85a938aa4891a0e28c2b5b049971cc0c81776a79fe0b0b66c764419015088fd593389cfa9ce20882a71705880ab0dd024ac4e3596f234291e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.410\",\n        \"version-display\": \"6.0.410\",\n        \"runtime-version\": \"6.0.18\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-arm.tar.gz\",\n            \"hash\": \"3869ed4526c0758999a11cab20ce943239d0c45b330cc28c24c6b6917454b5a417aeb75a02ec974a5e638103554d5e8b839c2eb3f436591ea018b4a8abdc336a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-arm64.tar.gz\",\n            \"hash\": \"75776b101672714f4e919b71313c3abba6f9b8a14d36751b31fb5400106e87d55e3aa45c1bf25be26a40847637f583815e40d61a837bebda66f30b88294f7e49\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-musl-arm.tar.gz\",\n            \"hash\": \"22dcf706adad8d8be3eff2131b9ba64ac040e28f945f626dfc8a9427b5e117224c3bc157845d4cb9e951d44bc91cdf80919921d2440312ff71696abca5705e49\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3684cd7cda7d8e4e15b09608665904a1118384570853b64b7d79bf9ab5404ca05f6d05dba32557dbad7dd0a97d0877123cd7b19418296b6e2cc5b99199e60f28\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-musl-x64.tar.gz\",\n            \"hash\": \"8d9485377388f17c6220e72f6a9a55f7e37e552b01dea5cc67cf560584e00cb1e309376d2fc0fcbba5501c2adda0b69110547104dae5c694c9c5b094783b4b1a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-x64.tar.gz\",\n            \"hash\": \"8c85f5b10eb786c8cf31bf268131a2345a295d88d318310dc8457d831f0a587ec1600e43beb7f55aec2248483b9a95e905a468b592f0c910443b4aaa9baeb2e3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-osx-arm64.pkg\",\n            \"hash\": \"4d29d2dade8193f0bd249707da1d0ff5c37d3fa881fbccb8949c2c9c3678e25a313345c183bf3c577a3e9f96dcf5bedd59898ae0d930ab0c8ac6b327fb9a5340\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-osx-arm64.tar.gz\",\n            \"hash\": \"c52d9bcf96605b2cd76eaa7c09455d8fea29bce119c7072c94b4c51dacc171ffd3ee3d38ffa4a84f1d1c750ac8d957447aa4c77c71c4a90af4407ac9a1afa6ad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-osx-x64.pkg\",\n            \"hash\": \"53e86e3446bb1a8a8aab5b0977b12b3281a06916374398d012342a0ea70ce48b269909a44f5a9dcfda65f1c349c28568b37130a61cdf89d9990f8c975c6c96d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-osx-x64.tar.gz\",\n            \"hash\": \"dc9aa3a04b3da513311b385f28e2982879432a79e6de3da8d7e339fcb02e2a6684e12be35c6b193cda1ce02a9979c91eda5d2e7295cdd264f1e09ae5651d1b22\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-arm64.exe\",\n            \"hash\": \"234b63752353f7f509473bb9b210fd55080c29f0a7b2de58f2324d3e21d6b801929d8ade110350cacbd3f2831e4865bdfda6d71c93ccdd83b99dfdcec282eb87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-arm64.zip\",\n            \"hash\": \"9cc28a64e6737678cc5d44c95f3731929a5809b74bd39d5bde63dd3dfb636f3504719913b172db6408d3efd454b49fd88d465990ad2d3dfbeeaca50c2deca963\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-x64.exe\",\n            \"hash\": \"7f6d2f3e95c3da25699bdc6482f75b0526f40c36ba96b6aa86a89605ecf50cc1ed1a00a9aeeb0eed2981e0e2d3f3351535e6ee24fb5f34631f36fade65724ac7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-x64.zip\",\n            \"hash\": \"dc9a8f001c297481bf82a721cc6133341ffc1c375f483bee63a93760e4e3349e38580cf56a693ae52cfe36ebe78f47c4be770c8fc244ac606f529cdb4b5137df\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-x86.exe\",\n            \"hash\": \"74386db19ed93698d9117bf887a800a478dd02ba74cf7d84051b7cdb01b74fbc0aac13751bec9cbc732f851590786fe6aad6c57ca32d794f0acc959da7cf18ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-x86.zip\",\n            \"hash\": \"c0cd1f12c9367f2834d1ca19c224e55cae2b854c79b95d1bea990e3443d1b8b8d94cea526dd195f277ac9a76a5650ed2c2b2ee0e399a4dfb44a3149325e6f731\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.410\",\n          \"version-display\": \"6.0.410\",\n          \"runtime-version\": \"6.0.18\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-arm.tar.gz\",\n              \"hash\": \"3869ed4526c0758999a11cab20ce943239d0c45b330cc28c24c6b6917454b5a417aeb75a02ec974a5e638103554d5e8b839c2eb3f436591ea018b4a8abdc336a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-arm64.tar.gz\",\n              \"hash\": \"75776b101672714f4e919b71313c3abba6f9b8a14d36751b31fb5400106e87d55e3aa45c1bf25be26a40847637f583815e40d61a837bebda66f30b88294f7e49\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-musl-arm.tar.gz\",\n              \"hash\": \"22dcf706adad8d8be3eff2131b9ba64ac040e28f945f626dfc8a9427b5e117224c3bc157845d4cb9e951d44bc91cdf80919921d2440312ff71696abca5705e49\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3684cd7cda7d8e4e15b09608665904a1118384570853b64b7d79bf9ab5404ca05f6d05dba32557dbad7dd0a97d0877123cd7b19418296b6e2cc5b99199e60f28\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-musl-x64.tar.gz\",\n              \"hash\": \"8d9485377388f17c6220e72f6a9a55f7e37e552b01dea5cc67cf560584e00cb1e309376d2fc0fcbba5501c2adda0b69110547104dae5c694c9c5b094783b4b1a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-linux-x64.tar.gz\",\n              \"hash\": \"8c85f5b10eb786c8cf31bf268131a2345a295d88d318310dc8457d831f0a587ec1600e43beb7f55aec2248483b9a95e905a468b592f0c910443b4aaa9baeb2e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-osx-arm64.pkg\",\n              \"hash\": \"4d29d2dade8193f0bd249707da1d0ff5c37d3fa881fbccb8949c2c9c3678e25a313345c183bf3c577a3e9f96dcf5bedd59898ae0d930ab0c8ac6b327fb9a5340\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-osx-arm64.tar.gz\",\n              \"hash\": \"c52d9bcf96605b2cd76eaa7c09455d8fea29bce119c7072c94b4c51dacc171ffd3ee3d38ffa4a84f1d1c750ac8d957447aa4c77c71c4a90af4407ac9a1afa6ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-osx-x64.pkg\",\n              \"hash\": \"53e86e3446bb1a8a8aab5b0977b12b3281a06916374398d012342a0ea70ce48b269909a44f5a9dcfda65f1c349c28568b37130a61cdf89d9990f8c975c6c96d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-osx-x64.tar.gz\",\n              \"hash\": \"dc9aa3a04b3da513311b385f28e2982879432a79e6de3da8d7e339fcb02e2a6684e12be35c6b193cda1ce02a9979c91eda5d2e7295cdd264f1e09ae5651d1b22\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-arm64.exe\",\n              \"hash\": \"234b63752353f7f509473bb9b210fd55080c29f0a7b2de58f2324d3e21d6b801929d8ade110350cacbd3f2831e4865bdfda6d71c93ccdd83b99dfdcec282eb87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-arm64.zip\",\n              \"hash\": \"9cc28a64e6737678cc5d44c95f3731929a5809b74bd39d5bde63dd3dfb636f3504719913b172db6408d3efd454b49fd88d465990ad2d3dfbeeaca50c2deca963\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-x64.exe\",\n              \"hash\": \"7f6d2f3e95c3da25699bdc6482f75b0526f40c36ba96b6aa86a89605ecf50cc1ed1a00a9aeeb0eed2981e0e2d3f3351535e6ee24fb5f34631f36fade65724ac7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-x64.zip\",\n              \"hash\": \"dc9a8f001c297481bf82a721cc6133341ffc1c375f483bee63a93760e4e3349e38580cf56a693ae52cfe36ebe78f47c4be770c8fc244ac606f529cdb4b5137df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-x86.exe\",\n              \"hash\": \"74386db19ed93698d9117bf887a800a478dd02ba74cf7d84051b7cdb01b74fbc0aac13751bec9cbc732f851590786fe6aad6c57ca32d794f0acc959da7cf18ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.410/dotnet-sdk-6.0.410-win-x86.zip\",\n              \"hash\": \"c0cd1f12c9367f2834d1ca19c224e55cae2b854c79b95d1bea990e3443d1b8b8d94cea526dd195f277ac9a76a5650ed2c2b2ee0e399a4dfb44a3149325e6f731\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.313\",\n          \"version-display\": \"6.0.313\",\n          \"runtime-version\": \"6.0.18\",\n          \"vs-version\": \"17.2.16\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-linux-arm.tar.gz\",\n              \"hash\": \"a9c1704120446e72835640246557e4cd63b7a682391c81d434477a93533bffaa2c1d2e1e195c89cd69b2f904887e019f7526653ba077486be1c6feaf697f0d8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-linux-arm64.tar.gz\",\n              \"hash\": \"022bef4eb46c9d7046dd8df159eabb90ae25efdbb718ffa51d24ba1f34f89ff59efd944a005398a345fbcfa229398768f5c7031bee86ce6e3261bb20ac76d929\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-linux-musl-arm.tar.gz\",\n              \"hash\": \"707237ba5ca07a2a8d1a2687f6985ad3043ca5125e78ac874724e0d71cb8373429c47a142653152f71135f4c60da2f68a8c8a37712e324d498cd789b2ab30eb6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-linux-musl-arm64.tar.gz\",\n              \"hash\": \"585b63173fe11173602a347c07a108b1f5c689461fbe95a25419a60092ea15e466ba0d25e40d0f7a8f3326911115607353f8619cd592103f33b7f7b4c4244dc5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-linux-musl-x64.tar.gz\",\n              \"hash\": \"a3cc635ad261da218908d91e051bcf8e3807e65883c50fea25661388b40309f9be42082ba848a2065031341c11f92aabb365b1f626b0f047ef1f5333746b3bc6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-linux-x64.tar.gz\",\n              \"hash\": \"8200ba40f559899149d50c0918ba9e31f4b101a7b5ec3d0f576d7a285a5470ae25ca59b81a4dd1eb62984cffe6a7ed6024263fb03d0fa4bbcf2cc9871e3a5add\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-osx-arm64.pkg\",\n              \"hash\": \"c560982d82c6fde52532e3a3c3b0d43f9cc4bf99335fc96f0189d40776b479e1a357650e8221f1903df8bcc32cb8bcd2d1b4ada03be92a84c30fe4c9e054d5dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-osx-arm64.tar.gz\",\n              \"hash\": \"4cc870ac6103d7ded80c17e7f4515b5ddda80e2c35a87670caad0543723dbd27c13105a2222f8ecf718034155f6dbdc3b8e7e004fa10c14cdfacb04dea67a24b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-osx-x64.pkg\",\n              \"hash\": \"347ead06cd49d423dc468d7a6c72c25050436b7c509ba2c648aec6f67138bb2894b65490305f7ec742418c767d64e314b6ddf6459b193be9c7c9f68f0c3250d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-osx-x64.tar.gz\",\n              \"hash\": \"e2791d1750b4e677620bed78ad8070c6883373d221664d42ec2da6c60e4ba2ba01a54c9671b4595b3c121039753cf4199809e839ca45198ccf73867e47533d9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-win-arm64.exe\",\n              \"hash\": \"e1b722b1e0551cb8474b6c7d910f4bb5c4bc52f63dc543228807e45891afce34fe70e5b318fc1123a853b5811371ef2a1c298cc0fbe59a074934330a20d66773\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-win-arm64.zip\",\n              \"hash\": \"a38a5672b2f72afa8d5b5651e8c92d537daa37e074c56208016136bd33ca13c7a4216f3f26ca2276d6495343cfba0fa300c2ba19a95d799e207405fb64cebac5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-win-x64.exe\",\n              \"hash\": \"cab2bde4aba0b65c1b4453e09f7d82a74e3ff44d9f03021d73a4464510d5240e6f534379ff13eca71f8865dfc78eec5845679162afd1e1bff9cb80931ed68718\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-win-x64.zip\",\n              \"hash\": \"d3ff4205bc07648660b1ac0ad2b2e8f861056272bbc72fae317bb9ed7d36d0f3c67d3ad818f238a09c8abbb4e879c0b377f1743aedf17699a42887a1a33f7a2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-win-x86.exe\",\n              \"hash\": \"6779336addd399b022c211d811cc1c97d8c258bd767383148f757e6517eca87b0eb993e9ff06e4ad77bbb97c6ac8eb8e942a0adff234be1093e5d71dc9d3917b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.313/dotnet-sdk-6.0.313-win-x86.zip\",\n              \"hash\": \"a5f50812ff4e55e8df184d7f3e21f72fe743258ea1762e40f225271300f498678014c7900a21c612b0e76a1d1890a8d86a77feff197f5e6e822654dd6586c139\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.118\",\n          \"version-display\": \"6.0.118\",\n          \"runtime-version\": \"6.0.18\",\n          \"vs-version\": \"17.0.22\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-linux-arm.tar.gz\",\n              \"hash\": \"e85cfdf29664ffc2bb7088febc7c739a937e0e918171e5e36fceaae50dc0e056fd772e1fab75248570c8dab251edc66a3c903594c698eb0c46d98dc28a0cf6ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-linux-arm64.tar.gz\",\n              \"hash\": \"4b79146813642dc0926d2d0ffc0f063cef95907117505588c9e8e812ec8a07afc9c1835187c596d287cb7e369b34ed8862da8c0d47a0dcac9ebc491d55d54b06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-linux-musl-arm.tar.gz\",\n              \"hash\": \"b15d8137508f916e78a006990db2f4cad890545db608334061cb83cf9e4bede30ff5accff39d32dbc109ff2a5928ac16b6d08887149daf4f213587641cf0e283\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bf4a6c73354c55e3dd04e59482172e1683edc9bf0949b8e2ffa61e25c82cd2273e189089d877fd82b5182881a2dd98ca19fc313344a8de0f6bd6a48beac1431e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-linux-musl-x64.tar.gz\",\n              \"hash\": \"4258f2fbacb65d15e84d41342af672ce2879ba0fa84338cc131f998695b3f2b5cbc408b0617cab3df7bb4f1747070434146ca7ca447edeb187922ac78877c4ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-linux-x64.tar.gz\",\n              \"hash\": \"191b3eb1f15b924c2dc494a1e1c58f3d38c82bd7a58abb26830d130e63c005c2e1293bab792c937f49c23f36df70985cd09a1afb488ca3d99c359ec253a11a5a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-osx-arm64.pkg\",\n              \"hash\": \"1c70310639ba0c1ce1b4aeb2408ed9c71fb112977a0a68cfff6e80650498408a93f1cecf398c69be5ffa319be966049af7829dfcd52184a74a7478850e8459b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-osx-arm64.tar.gz\",\n              \"hash\": \"7d65f02085b67b9aec04d1dcef4154a55630407ee6817ac989bbbbe70b0d3a5768d9c35ebf90d4eeb068e24db1d0ab830d0554e00d377729a71d07c7c3e76f9b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-osx-x64.pkg\",\n              \"hash\": \"b65f345ae2c7a9b91a1fc0dc4945a6348887364f5fa2726d622484c21171c51c71ffbc254267d45b571a301570109fc1756e34341c860ceeb8b15462ba456f5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-osx-x64.tar.gz\",\n              \"hash\": \"abade287f221610fd9d28499193c79d26a8687dc65310e3ed02d101895c159d9a9dd946f9d5381524d8c5fc0d43d24d552364b727636086f02a049b5f0b3b8f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-win-arm64.exe\",\n              \"hash\": \"8e47923730291d2400eb622c89cc5fa8d5f27a5f650d72563f037d9db53835de3561872000624590c83d72f0b18b0407dc5903e6708a35ca1c56bf5b99f7d939\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-win-arm64.zip\",\n              \"hash\": \"e9f40d9313736729216ef6012f8d5fa960face92c09304e2f2d3fc28b7165f2de7b97f782556c57987edd38dbde57f2648f20ea209ea58d8dc16e6651afdcdbf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-win-x64.exe\",\n              \"hash\": \"995eaa6ce815310135bffc17231a4b03a89cf1bd8d43763d7cdfdd50096797bc0d88792680dcacb4ca241faba72a45d587a344c8189c5d6e3994cae261bf0eae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-win-x64.zip\",\n              \"hash\": \"b592badc423bc09abc9921fef598a631c8f70bb58c0280b72dc8d41b0390e071a2c28533bebad0b29092bac90561c871e250727d298974f8ad86e11fe81ae505\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-win-x86.exe\",\n              \"hash\": \"5e35c4dea1b3e048953b2e14071ef335f4d0520026296061c52b7bc471a86c8a64c257ee26c145fd116bec4f3fd8b6bd71c3a08f65fbd2d44d59f2f9c75e35ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.118/dotnet-sdk-6.0.118-win-x86.zip\",\n              \"hash\": \"89deeca7701b9fd740f84d66309455ebdb7d1b07a5d81a468cb3afec8d42c0c67c8ef03215ecae440bc8e7bb87f8c566908afcdbfd69aa0238751705772e040d\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.18\",\n        \"version-display\": \"6.0.18\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23140.18\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-linux-arm.tar.gz\",\n            \"hash\": \"16a1834d46cd8208221fa7d7f1b1e57a6544e855915e58e859b34bd7af2bc0dff1e94726356cee5302f1baf5a5bf6f25c0401cc8f904e13ca38a1175e406be73\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-linux-arm64.tar.gz\",\n            \"hash\": \"f39b5d333eb096e681fd2b6481a41fe3a1b794c2655d56d84dc79321f767a67d968718b6cf08cf14574af9ff7625c76728be5c70a860fd3df14e40463a8ac6db\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-linux-musl-arm.tar.gz\",\n            \"hash\": \"63a3091cefae4640bdd11db23a97b03998cdb17988d4f5064fa90ac25e61a84804186c620218924b914221651c4577ed8fff0ffa7688871b08d00fe34942a5bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c8b91eedab034176d1dd5e9cf329f71ad42d2c96086fbf97a80d65e2d8154a8e15db339c9109d571e12460dfdc62f192a7249be0d7f17ef9c4df2b549ed785be\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-linux-musl-x64.tar.gz\",\n            \"hash\": \"d19bdf6c9cbb1ff74866307c3c2914a025d918122c61cb2153562ef16c7ab2896d74ddaabb719d4e22675a8a0c3d8a67ffad71e8642297dd18f1c3bd345a54aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-linux-x64.tar.gz\",\n            \"hash\": \"8adbd7c6f303d69410c34ebc4a8df0afb340c6283ee18ca5e213ad502c8df15ef4db35023a5f9ef88a20ec41c733ec5006ad80dc4d31df5c32e5665f7f8b0563\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-osx-arm64.tar.gz\",\n            \"hash\": \"ccdf62da6470d1b74f0c866a69503e63ebca2f580156a64a3f82c1a8663e9003088eab0740654f2f0119107ec25d204c5b279cf036b1067ef110fc3eda84794b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-osx-x64.tar.gz\",\n            \"hash\": \"82205097e4d2c4a17ce3d6997bfc05c3aaa28359dd71807eb0d2bf3f4c5b2142e05f21a50e5b2f994b62836cd5f4c73d1c98b1f8f2662afc43b5e70040d9ef3f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-win-arm64.zip\",\n            \"hash\": \"b78864b40e71cdf6e2e5a2912c0cb358be09aeb61423a9415503c7ca92dbd08111b764947f0c5f097618a86216400923d4f5355ff615f0d0a3aa14943d4ae595\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-win-x64.exe\",\n            \"hash\": \"f92e9b80beb758fd5b44c5a0b191bede49145078c12636ef80ac5f46c73311a3484680a5790fdacd271464a09d1936136ac150950e4492aceae1d1a762d45a5f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-win-x64.zip\",\n            \"hash\": \"e2da4a5fd8aa5bd76033a6b19f98c9e8e0895a568dfceeea3dad4b3376a87c786e89b617b7a74a1851450165561449a8865a1c1c5190fe736dd6b6ec5f09b9f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-win-x86.exe\",\n            \"hash\": \"f60423750b6803b09cdb4b0bdfea99e781495813b004eb020c2c7f3668dc4582ff70959a23740b440ddd1614cc15c006efdf5dbd1d3bd1eefea4721dc5d4ad7d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/aspnetcore-runtime-6.0.18-win-x86.zip\",\n            \"hash\": \"be46d4f26bb3cefb5bec41e507c58e7fb13358072988f9db51ee6635373f233f9f94f7947786ad1514d51460d25ede53755c6fa7f67869818a23cb50b2a6db5e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.18/dotnet-hosting-6.0.18-win.exe\",\n            \"hash\": \"efdec0c6b46e7998684dad691f6d9c80c77363619e20c6d22d4785ee897e6382a37806883d9a15a928cdab8c5ff4b996a607db7d8f1b2f7f7f1cd7541bda812c\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.18\",\n        \"version-display\": \"6.0.18\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.18/windowsdesktop-runtime-6.0.18-win-arm64.exe\",\n            \"hash\": \"cf05e58ee98251150d3c66fdb7d1b75b377241a396b822ff8696abced4fcf16d778ef83c9c848c6bb2df7f017c22c4026455766754efa4bdd581f2d48c5cd4c8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.18/windowsdesktop-runtime-6.0.18-win-arm64.zip\",\n            \"hash\": \"92975517d500ac4674294f5a7a496eda252afdd1a12fede7ac9cbc7c695175360aad768b6a35658bc86239071cf7b03a0679f5ff6030f0ad2bcda4a600f74de7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.18/windowsdesktop-runtime-6.0.18-win-x64.exe\",\n            \"hash\": \"8e9ea3c67c3e8a910de72f12c30e472e8fa26c05e0927fc533f04fa7547dc88d63ee2239c29dd45e6e515ca355a1539c03b46365f8ac340776e14cbb3c6914f9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.18/windowsdesktop-runtime-6.0.18-win-x64.zip\",\n            \"hash\": \"55fc61661031c9bba5ab7b35e2a302b7bdcb802b8d5b256783b1a191c1ad5c7a2b3538f17db99d632ce81769b27f263ddc18930ff9e7248eb7e169fbbc45e708\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.18/windowsdesktop-runtime-6.0.18-win-x86.exe\",\n            \"hash\": \"d876144f90b631f859c8112a463e9e3b9a8fec2bdb1688fc8156f9cfbf4e058b13a41465f573ffe89c90bede4031b1a864d547239551abf6167ded6c44626a33\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.18/windowsdesktop-runtime-6.0.18-win-x86.zip\",\n            \"hash\": \"ef1d54639e5728369a29aa3f20a78c7c70d7d0b0f1b42a56439a986f9364741aad7856854fa081b969859189fb35f022fac87b01b3edab6ed46310fbd36decfc\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-04-11\",\n      \"release-version\": \"6.0.16\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-28260\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-28260\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.16/6.0.16.md\",\n      \"runtime\": {\n        \"version\": \"6.0.16\",\n        \"version-display\": \"6.0.16\",\n        \"vs-version\": \"17.0.21,17.2.15,17.4.7,17.5.4\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-linux-arm.tar.gz\",\n            \"hash\": \"0bb21a92dc7b4a7bc1ac2fdcaabf8e8649b2ac07780e119be987c7d0ce7881f4292a1a2e932c2d719bbe85a323aeafcd188ac39cff42ccf84907bd23745ba76a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-linux-arm64.tar.gz\",\n            \"hash\": \"f670ea542d34e5f63b6b497a23f9d3f8d9e2fa8292ec3234ee08ef0eb706f339c2c11811857ad83624ae4a7827b449d4cabbe41c566b2b51faccf58be44af598\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"162cb92c20433b467090712bffbd29b8c6908d793b10eb102049be860e98be28af9ae114969874907a9f7f4ba7639853d02fc6e42490bd9df50ab41d544aaa84\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7c2e8c164cc8faffc7c3aacf9547bf825857b9d428063a1999f41bd579ea5579a06899fd4e0c13bb45514d2c5bcf849c7d999196f56c0cd6af5bf93f0de01117\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"df9edbaa98011ef3d15ccc291a826c60e304908ac1495b7a61f1571718a9c8d8e94db3f88aacd37c6b94ac397115323def32fafd9cc16d41bfebb05491b0f7db\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-linux-x64.tar.gz\",\n            \"hash\": \"c8891b791a51e7d2c3164470dfd2af2ce59af3c26404e84075277e307df7dcd1e3ccf1a1a3c2655fe2eea8a30f8349b7adbbe5de4cedfee52da06729a505d8f5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-osx-arm64.pkg\",\n            \"hash\": \"27dd903e4aed15e7b51dbe00a3b79b0f3618ed6e258e84a9bb47e0216db873f8db3cb4b575274c3c9a1b7aaa67a1afa7132ccb97450e2c61286d61e614645672\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-osx-arm64.tar.gz\",\n            \"hash\": \"c7389000b353729af7229017cab4b02d9245d39983b00744e3439ac846e6669368648b91574d46eff7807882c6961f76884447411314dfab18e74e8f3824dca7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-osx-x64.pkg\",\n            \"hash\": \"980aaf1f6e8baca6837b5dfa969cfa68e98d17b6ccd38b6d86bdc03f09941672099afaf26863a10b3e60b65404b2c78d97d26f8cf3dadc3f246256b3f168676d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-osx-x64.tar.gz\",\n            \"hash\": \"662084f66cf2983dbfb756f319baa2c1221f183b9d10101ca970fa3ccb2cfc49a7513af5926c843d3bd472b49991284bac5275d8f5e8671b9e96995ad2815571\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-win-arm64.exe\",\n            \"hash\": \"632b2152f27f59a75231586192d4d82ed7b66cdf6fc6924461467dfe70830ed8cb9127fad5333bae19096ae1e3345329eb8c7bbbc06d7a77cfe39deb82774227\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-win-arm64.zip\",\n            \"hash\": \"d5322ae18208f4ec28bfc49e14ac242ade9dae4b6fd90df426ebb33adff8a946013b81ae7c67dddf159a00488a138f2742058fdd6fed40d64d1597b5af0e8d15\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-win-x64.exe\",\n            \"hash\": \"3561b89550cd0b01cc3e4c33deb0d9e17bdbb8723143d444340a5390ea48a6939b7334d0f34a5cc196876cebc7fb0d433ccf8b623d2e3b10a49672b7324680e5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-win-x64.zip\",\n            \"hash\": \"8fdd6bf9d957faa8c6da7c441a9d5d288345159ef352c991a3a4e9d45a8d90a575b54b85ae345fc1903e61de9f7ca9923fc703853adc200687041a364526bb2d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-win-x86.exe\",\n            \"hash\": \"3330999941183e8bec4327f216fe5f6cf7f1f897e0ef039e3d1403a3681ffa7c4f20d06457d7f60073855a7d1c8ce054b0fe75811ad3e64a37ad42b8a821b25e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.16/dotnet-runtime-6.0.16-win-x86.zip\",\n            \"hash\": \"e1810b3508870e6207bc3fbf7096ee102a650054aa1d7ec5984fdc2b69dfeb90e55e7a7114d8fc7143c2e3b0adfb0cd01ab99b2f0c68e426f3cc6a2e44ba8c67\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.408\",\n        \"version-display\": \"6.0.408\",\n        \"runtime-version\": \"6.0.16\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-arm.tar.gz\",\n            \"hash\": \"a86414ac2cd417cc477e39d02348223644cb1f006fab537d3a4d002ec3c7b35af8c006736dd4206040c6a58d2b3a71f18678b492e7d18510b69deeb730c673b9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-arm64.tar.gz\",\n            \"hash\": \"40ad715ffb059df03eeae4ee4dff9b8998928e90dc0103b38ef671acbcfe4ac40016220e6b1214f0f77757099dccdf0fbaf1690191b350dbbaf773a01be8d25d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-musl-arm.tar.gz\",\n            \"hash\": \"849f3e65e33df026979e076d8240112d2d64c6ee7b5a89b09dee1ee7ed5235e4f1d4eda9693f493029323b06f1d231aa605ce37249516717e4f75ed309088bb0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4485a1df46d15f971c1a14a27b7495c03af62a8fd557dd398f30585065c855269bbabd3bfb3c8bde78d959bc19f3b82c3aa4bf0e3fbd4057607035bc5c18186c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-musl-x64.tar.gz\",\n            \"hash\": \"241f1ef5c32a277bed881443de2ff17ceeba100f7191c4929108b65fde42d267aa4ab53f45fde728009185d4b5ac061d1e276d14e56b964d1b3104db0608fafd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-x64.tar.gz\",\n            \"hash\": \"d5eed37ce6c07546aa217d6e786f3b67be2b6d97c23d5888d9ee5d5398e8a9bfc06202b14e3529245f7ec78f4036778caf69bdbe099de805fe1f566277e8440e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-osx-arm64.pkg\",\n            \"hash\": \"563a6366a5bd7173ff4271b2dad55d1ce04acb4418c22aba59bb2bfff158b7c30c36649f4a0eeb569fd944004e0ae660de03b8c06fc440b86db97be9337fb78a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-osx-arm64.tar.gz\",\n            \"hash\": \"2dea66a67ca21dca2b3a12593c7249949af6619551fc265ce33c45b5366ce98eb55aa84a6c5cf0fa9bb8ef7f5ada89bc9cf3c96d34ad208cd9bf0178a80fbb97\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-osx-x64.pkg\",\n            \"hash\": \"4b9dcab9d341225e71bf86ef5bc633d83fc877fa7d8e91ac6c014e0e95eb02f0adbed68ac210ad2bb9cdc4d0e62fff81047fc3c89e7af0938c725f615a018641\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-osx-x64.tar.gz\",\n            \"hash\": \"98599e2b6d85267cc414cba0da26258251499f62eadfad341d0df4694b261b28ab5a7a97db0b2b8c0f215d03340dfb8a9f984a1f0eeb110a128c982336c1e110\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-arm64.exe\",\n            \"hash\": \"9844920629ba5340631dd0d43ee4e71e0b5d4fc9e0bdc2b7a588163486258f1be53d3fa46ffaa24c7ae89a9c267bc5817965be7740e75e322c749751dd5861b9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-arm64.zip\",\n            \"hash\": \"01ef5b98170aaee32f0e64549a9e12d0b1c99bbc1b82fd9438d55d77393ab46a630116f7396f4f5397dcd041d43a5a5b634e40bfe892fc7ee8f251991ee79358\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-x64.exe\",\n            \"hash\": \"11b65567cdf90c177deef4d1762e193f7c3eb3d1d6758b0bf8c250e2338ac44421043f0eb7c3690354120a5af1c6a1685ac3fc4888aea23a5de95bca9a2248a2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-x64.zip\",\n            \"hash\": \"0136fb34ca9f8966c981238bc4156b76bbf4a1a266885497b87937288d2285fc97c5520e97e4114ff14f9cb43d20add117202ab2fda6f30435be6e42f2643902\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-x86.exe\",\n            \"hash\": \"969242caf98d06ee9820fad81a382c63d517c38c9686a34fd58217b4a77689a68ae558a8af328f103831a3bfb1d8ee3266057f95994d4558390922504f40dc43\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-x86.zip\",\n            \"hash\": \"98e427a566a2033f8ded8b223c155a6c053db074ebd4e8155b33fb63aa44ac0d5a9a80935aff4c30803c3f6917a841d1f3501bb860ddde37d285be3120ff25b3\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.408\",\n          \"version-display\": \"6.0.408\",\n          \"runtime-version\": \"6.0.16\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-arm.tar.gz\",\n              \"hash\": \"a86414ac2cd417cc477e39d02348223644cb1f006fab537d3a4d002ec3c7b35af8c006736dd4206040c6a58d2b3a71f18678b492e7d18510b69deeb730c673b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-arm64.tar.gz\",\n              \"hash\": \"40ad715ffb059df03eeae4ee4dff9b8998928e90dc0103b38ef671acbcfe4ac40016220e6b1214f0f77757099dccdf0fbaf1690191b350dbbaf773a01be8d25d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-musl-arm.tar.gz\",\n              \"hash\": \"849f3e65e33df026979e076d8240112d2d64c6ee7b5a89b09dee1ee7ed5235e4f1d4eda9693f493029323b06f1d231aa605ce37249516717e4f75ed309088bb0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4485a1df46d15f971c1a14a27b7495c03af62a8fd557dd398f30585065c855269bbabd3bfb3c8bde78d959bc19f3b82c3aa4bf0e3fbd4057607035bc5c18186c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-musl-x64.tar.gz\",\n              \"hash\": \"241f1ef5c32a277bed881443de2ff17ceeba100f7191c4929108b65fde42d267aa4ab53f45fde728009185d4b5ac061d1e276d14e56b964d1b3104db0608fafd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-linux-x64.tar.gz\",\n              \"hash\": \"d5eed37ce6c07546aa217d6e786f3b67be2b6d97c23d5888d9ee5d5398e8a9bfc06202b14e3529245f7ec78f4036778caf69bdbe099de805fe1f566277e8440e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-osx-arm64.pkg\",\n              \"hash\": \"563a6366a5bd7173ff4271b2dad55d1ce04acb4418c22aba59bb2bfff158b7c30c36649f4a0eeb569fd944004e0ae660de03b8c06fc440b86db97be9337fb78a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-osx-arm64.tar.gz\",\n              \"hash\": \"2dea66a67ca21dca2b3a12593c7249949af6619551fc265ce33c45b5366ce98eb55aa84a6c5cf0fa9bb8ef7f5ada89bc9cf3c96d34ad208cd9bf0178a80fbb97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-osx-x64.pkg\",\n              \"hash\": \"4b9dcab9d341225e71bf86ef5bc633d83fc877fa7d8e91ac6c014e0e95eb02f0adbed68ac210ad2bb9cdc4d0e62fff81047fc3c89e7af0938c725f615a018641\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-osx-x64.tar.gz\",\n              \"hash\": \"98599e2b6d85267cc414cba0da26258251499f62eadfad341d0df4694b261b28ab5a7a97db0b2b8c0f215d03340dfb8a9f984a1f0eeb110a128c982336c1e110\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-arm64.exe\",\n              \"hash\": \"9844920629ba5340631dd0d43ee4e71e0b5d4fc9e0bdc2b7a588163486258f1be53d3fa46ffaa24c7ae89a9c267bc5817965be7740e75e322c749751dd5861b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-arm64.zip\",\n              \"hash\": \"01ef5b98170aaee32f0e64549a9e12d0b1c99bbc1b82fd9438d55d77393ab46a630116f7396f4f5397dcd041d43a5a5b634e40bfe892fc7ee8f251991ee79358\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-x64.exe\",\n              \"hash\": \"11b65567cdf90c177deef4d1762e193f7c3eb3d1d6758b0bf8c250e2338ac44421043f0eb7c3690354120a5af1c6a1685ac3fc4888aea23a5de95bca9a2248a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-x64.zip\",\n              \"hash\": \"0136fb34ca9f8966c981238bc4156b76bbf4a1a266885497b87937288d2285fc97c5520e97e4114ff14f9cb43d20add117202ab2fda6f30435be6e42f2643902\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-x86.exe\",\n              \"hash\": \"969242caf98d06ee9820fad81a382c63d517c38c9686a34fd58217b4a77689a68ae558a8af328f103831a3bfb1d8ee3266057f95994d4558390922504f40dc43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.408/dotnet-sdk-6.0.408-win-x86.zip\",\n              \"hash\": \"98e427a566a2033f8ded8b223c155a6c053db074ebd4e8155b33fb63aa44ac0d5a9a80935aff4c30803c3f6917a841d1f3501bb860ddde37d285be3120ff25b3\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.311\",\n          \"version-display\": \"6.0.311\",\n          \"runtime-version\": \"6.0.16\",\n          \"vs-version\": \"17.2.15\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-linux-arm.tar.gz\",\n              \"hash\": \"5c67bb0d82d8d6a5b2a8ef3a4f4b4ffc17432f7807c766881a2aa7ac6156a8f6bf80444cb2426649e7efa9a5b9908cb56d86589363590c15e76a021361509b5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-linux-arm64.tar.gz\",\n              \"hash\": \"0b1d12708b07c7fc761fe9d305a5731bf6d05412b7e801eedf8a95adcc2849b746860cedb02a24531269f224f4c75dc91e7c3de59a5d3bf47c9e2fcaa05aecf3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-linux-musl-arm.tar.gz\",\n              \"hash\": \"88a9b00870b1c2e03609a86d90b85207b0749e0d31865639973018ef91c48921d1c783a646fab03a9a30e2c8075b6100ae96929576397d9653024f49b3cd0239\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bb736a6efc875a47b9b54fd577058a8e65f482154409537eb746822001ba0ac18fd6fa89a544ee2d291129e877bfcf14d2548e2aa09d1f259f70f40cca55a939\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-linux-musl-x64.tar.gz\",\n              \"hash\": \"4ecba919514d9f12a50756b37fe6a3c3eef4c43410d41b85ced956f361ab0f73135c32c9e39099aa582b75a3c0d5c883dfe948972020fe33d8ded85abad22746\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-linux-x64.tar.gz\",\n              \"hash\": \"6f7dcbb35ee3c4105aba4f7e00bbf98211c1fc28b6909249cad57e22eaa8acb7994a5730e115a11303ae7fbf3087e76158db5c93eed002925a94750dbae923bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-osx-arm64.pkg\",\n              \"hash\": \"2611baee4b01327d8f1db7971ab115eaeea6cca3b71a7fa1ef6b1e5f1982655ab8963bb29e9ca6b5ae4490d60577d0c7f0cad6f0a31c9c46b57df225d1ef8abf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-osx-arm64.tar.gz\",\n              \"hash\": \"88fa737afbf1660fe9997bca99351991f30eebef691237548f88f25d056f7472daaeac203d81be22d173b9df02e4137d7fb2fc9d5abe327ac4eda56d9787593f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-osx-x64.pkg\",\n              \"hash\": \"7104d591c34f67082cf9b5ab4d3efc91cf4528ad1de3ef4d821b97ebf7a86bc1703defd76ac4980c3582124cc572aa5f7157749a58640aeea6094f87d2f91566\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-osx-x64.tar.gz\",\n              \"hash\": \"5f0cc65ad0092441cbdfd2874d7e79eb5b824950a19709916ed2d84d3aff976f0ed6c79b50ddc03ed1c66e4d1a1e26bd81716dbbcb2778d30d658e472efbd654\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-win-arm64.exe\",\n              \"hash\": \"b037544ceebeb3acf7588858441b84e478a424a68d4f4f9443696573c68d3362febf2dcf43012de55702abbe3af9d8b39349945cf09ed76a5e1b61d8a49c2676\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-win-arm64.zip\",\n              \"hash\": \"2b6d4f61f3ba77f2458d6b0d86d856afcc09c8fc27a93071d6cf59ec046850d82abbaa17b49915bf086926f58df8f8fdcdc2c572510b494f962ac8360a4efd58\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-win-x64.exe\",\n              \"hash\": \"d18d7f3de09a0794c85db9c436cbdd732d965c87e1590dd3dfa8433bcaeb5e51b4d8d189597077ad61b6add30b6dddec3a19dccf82c12138221810e68e10e84b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-win-x64.zip\",\n              \"hash\": \"237be1666516322f40466332c2e8a07aa03bf4e0976095c36412a06738d380da6df319b33df0a244dcac9dc63079e59adbdc0cdbf48232af5554e4e44a97f1a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-win-x86.exe\",\n              \"hash\": \"d11431662a15d5b79f1e1c64ef8f1c80c3199aef154d93d19e98b2579d07aabe3d684087be1ac148d07059c5d3aed08b64814529e14f2883668a4186dffb859e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.311/dotnet-sdk-6.0.311-win-x86.zip\",\n              \"hash\": \"01dd409df19ccdc1583bd05c48025596dd30150ade0d3fa29e86578f23098cb97a73589e89e3939cca4c1f95049afe6eb25d1a5f4462ab565253ef0671db78e6\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.116\",\n          \"version-display\": \"6.0.116\",\n          \"runtime-version\": \"6.0.16\",\n          \"vs-version\": \"17.0.21\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-linux-arm.tar.gz\",\n              \"hash\": \"7cfacf44b1f7f955b72059bf58ecb7fa7212531a7ec6db0e4b14505cd8bb6935294e83728d828b94770fd4bc8fe789afedbb4442cb2425538deecb18bfae417c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-linux-arm64.tar.gz\",\n              \"hash\": \"eabf20e6ab121419651c7a476c453eeb542fc6a85c57abe8ac1856e1896a91acd635be88e711665f17587ccff0b586d4ea6abdbbfc223610c53b3ea26d25577f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-linux-musl-arm.tar.gz\",\n              \"hash\": \"a35480c68e9f156a33225e80dc166db3a2fbe860f0f35497357fa6b5594df16dad9cbc8b5a7569ee4b6262070e100bf3c9d57721c68bac5bfc83abf61e4ace5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-linux-musl-arm64.tar.gz\",\n              \"hash\": \"dd3ec888e0d6644f2d6ef17ca7ce540d62226bb459cc0bbfe938229e757a8f4a10fc314a078f9898143c2271b8a70de77ffbdaecfa8c4c87921421e729f53a64\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-linux-musl-x64.tar.gz\",\n              \"hash\": \"3b6f37aee5698d7ef794c74a6d914b914f0220346a2f37e66e4a29db63e284747d02856ea6cd461c76f2a9e18ab047f40cc739e7f8227d69ea7316bce2020201\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-linux-x64.tar.gz\",\n              \"hash\": \"7294b767482647ca89d4198345584a2a3bd81e6e67ca151924e9ded268091a2e4146c09f9b53061312dcf2a087535afa7ad039d84cb6d221a2108040b0b45dbd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-osx-arm64.pkg\",\n              \"hash\": \"6205eff90adaaa79c8198dae4d3ed0d6bbef6fdddaf5e299f5a92f8f248d9e7ee6e1fa897e81c3146a6e11112fdc0f29faf6089eabbdb6300c1ce9d01147349c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-osx-arm64.tar.gz\",\n              \"hash\": \"2c73d4da0514ae7cd24e1260764504bb98f76ba99d65ebed510a6397e00fd0039f126c7a1828223462576d6d26b119f5d5760960e1a58790d377a747f744878e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-osx-x64.pkg\",\n              \"hash\": \"ab23238524d1f0ccd4bcf7d89abad08384291f7607ddaf946530e465ca7931243bf2f94f60480bb99641081d294235c004480fa5e692bc0dc8a334028ff71450\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-osx-x64.tar.gz\",\n              \"hash\": \"2992be5b16bbce60e25db6276a876661272b38a298f5a0ca4fd23cf3bb178fd0a23a27fe53e8932fcdf33e12ff0a2e98d96a2a5c422cc61d1f1909db99d7cf3b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-win-arm64.exe\",\n              \"hash\": \"b4c999ac30b423a0792c13b9e55041e5a6083ed709ba084983d68a5dcdb1d46abf07c8233d7af27b498db5c6e1651c21cfa74f1c7fdba32e417779a5d09a0277\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-win-arm64.zip\",\n              \"hash\": \"2169e76cde075d2a0ffd0531b68a6fae7166591411b1f61aeca7994e532352e9948f10228cb5cb6c4a02aa47dcad733dad4b30444415df90a59a8b582dd5c9be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-win-x64.exe\",\n              \"hash\": \"edce85e711ba96d5f4b580b0ccda67bf750f8a5453c255f9fd62b7c98e1c50cb8694fd22ecdd4b592ee88154d3c00e225bc3555f66d4859caed34082111e424d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-win-x64.zip\",\n              \"hash\": \"4337f27c77656365a94b7430cf605d73cc635b1296ef4e60dcd5b5b4fdf9e2f15289bb81989bbd89ed3e6dc6eea7cfac596816a93b42143b319424d23d1f6e41\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-win-x86.exe\",\n              \"hash\": \"a723069fd979c4ac1891c7c0cf324c6db5dd2be8251ea9313edcc9485b9274116b7b19653ac1b6dc9d70f55160bb9210b9da818024b65213a06c5bc2284a5975\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.116/dotnet-sdk-6.0.116-win-x86.zip\",\n              \"hash\": \"01dc4a88cbf083fc7283580625dfe49286d5e003c33d9c2b75d5e5566fa2ff327783f2c33ce93cd7c0e285632719bb51ff762f82debcafacb64dafc22dd9cd31\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.16\",\n        \"version-display\": \"6.0.16\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23083.16\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-linux-arm.tar.gz\",\n            \"hash\": \"8d328f9e92c7c467ede243433e1bc6d6797461172ef2cab6a8b5a44d2a747283709ee643a02b5a7460fc6507351f0d2643f826585e5dcfcae16c060f1ad1882f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-linux-arm64.tar.gz\",\n            \"hash\": \"c08159a811d20003bfa32ce4b5657522433fc134f6dd1a391dc82004edb0e92dc2d75880d057e8467171a91ae2c344e90a679e40b5c5fddffe6e9ed0bf26810a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"f61db19865f57b00feb2acb8be6a7797b9daf780e5e0550f89d39b81f6eca22645aa5d8716a6e066d5523ae76fe41ebe09c0456126ae9a095595b3a76e58bab9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cd44da7f6766cb2d07cef549270d0b010b106ec31553d7e5a9d0979cdc1be11045e03cf5d6bde584cfcd2da392392315c9c8f70bedc93c451483c413c118f1e2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"f20de3e9af088dc038e86445e32a226397b93c701e62a06e4e8e47e1392fc1dd80dbcc750870eacf87a42e1c54d764c8f01691a4666167c65922ab54e3b3414d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-linux-x64.tar.gz\",\n            \"hash\": \"62f25ed054868155b351b98fdd04c27aebd913d92844430a002da1346e77a8e86e61833f7b81bdc3d733ff2ae60a21d66533cdd7003b2fee47b8d0e8746ad504\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-osx-arm64.tar.gz\",\n            \"hash\": \"b5eda3aa1394821b4607453cc639e49f92653fac6a7b381c8f33282185513ae606a06c63a4381153371354b94c9289e72287f9a25bdc8aca45efb5a8654d4af8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-osx-x64.tar.gz\",\n            \"hash\": \"eeb99268be3c8dcb0d0c571944e01f22b3dbf0825e28cb1c9bdc0faa8f584fedf6d280f767609c5d91688897c185a21840f59cc91f7e1712c05a24a70fff26bf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-win-arm64.zip\",\n            \"hash\": \"586fa1076d16f9f9ccbfae12949164a56a103d9cd7cb426dd8d641543a4a2583098169bb9688a6f522876c06dd4168c93342c7d0e4ef49e4f8165e86582728c5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-win-x64.exe\",\n            \"hash\": \"4f9a9eaed6aaf5e71571fd5839dc934c8053dca7a3ecf5502e9004226171274623cd0713e9d2ac89e1e8e5d19dbd7d45a6fe58e536274a9b10d22432698c5cb9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-win-x64.zip\",\n            \"hash\": \"f6145be8efdd75bd044e05d9cd08954009183a1ab5c45b03a5bd8a360336d5c7d49718db5847ad080950233197968a5068ffd5b0725a126ccb5ab5454dfa10a9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-win-x86.exe\",\n            \"hash\": \"61797d278391c02f559c72e959ff6b0a6efe77e6af31f3f6e2facaa6bdeda7cbd8f36ff892db766ff0d202fa28bc9b99d6c10c3e1b2969ec0b57acbdc91b54bd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/aspnetcore-runtime-6.0.16-win-x86.zip\",\n            \"hash\": \"cf576f47e97f6e770098d9c446fe9df8cb010c197d1e7fe860c28bdbe4a5676a6a7b8a3f6fc3f5892708cefe54bc24e8cf4ed90268870a6fbc5865e8f6cd72f3\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.16/dotnet-hosting-6.0.16-win.exe\",\n            \"hash\": \"5fafc4170dce11f52d970d14e737f5b85491b5257bb7eb5b3c5e9bd275469ac2482185e3d3464a18cb522dfb7f582287451e2f24f86cdaaa3de017e1c8300711\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.16\",\n        \"version-display\": \"6.0.16\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.16/windowsdesktop-runtime-6.0.16-win-arm64.exe\",\n            \"hash\": \"5f8b5e5d3ec71b7857b434115448e4c7211c643caab8657d173de31c2d636f943b698d0bd6f53b6caa7b586fc9b5823ff100b7b3b8b2c27d895a8300f412ab88\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.16/windowsdesktop-runtime-6.0.16-win-arm64.zip\",\n            \"hash\": \"516a3badc8d4dea81877173e5daa08ae34781ac7310b21495418f0be6e27d412a0059744333330b5ce909fb9ef131caea618d3a2cf88ff6d545d106b55223752\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.16/windowsdesktop-runtime-6.0.16-win-x64.exe\",\n            \"hash\": \"2bc06b086a7189ad3e2cd0e57158b720c617878a0bd6cf97b510ce37e0b2eeb24463d4b74b0f17ced8b3b606ebbaf860a124517243639072def90a3f0034e35f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.16/windowsdesktop-runtime-6.0.16-win-x64.zip\",\n            \"hash\": \"10dd7bb61cc2b7ee0821564ec0770e5b24b1fdc8dda66e19092a93b534df5d8e082a7ec6e17070fe1bea3341ad9d1ed5113de28901e27b5da9b18b485183730a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.16/windowsdesktop-runtime-6.0.16-win-x86.exe\",\n            \"hash\": \"c412bc0ef80a05fa3ec9211405c5d6127ed535fec4407826a62b9fdfb17479888ae701d8265714463fa0efb4d7fc6825ac10bcaefad9dfb902f0054751d7a59b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.16/windowsdesktop-runtime-6.0.16-win-x86.zip\",\n            \"hash\": \"76ec68bd03d64cf473f44e1faac3e1c36d5e1d98cc199f327d6a92151763ccdec1b020ed7e952dc4c2d9bd304f5c4e3b38cc4e9756e3474f56372fd9463428d7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-03-14\",\n      \"release-version\": \"6.0.15\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.15/6.0.15.md\",\n      \"runtime\": {\n        \"version\": \"6.0.15\",\n        \"version-display\": \"6.0.15\",\n        \"vs-version\": \"17.5.2, 17.0.20, 17.2.14, 17.4.6\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-linux-arm.tar.gz\",\n            \"hash\": \"e2494f2df0315428f85db39156ddf9f09132f6fabad51814600f9953882a6cb0b47397249d600ec74cda3daf27de0713dbdcf81197971cafca5d90b08053fcb3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-linux-arm64.tar.gz\",\n            \"hash\": \"639153616c316832970b57faebb95a405d52549d60588a2e515323640a9ec0b7d5826a8434a7759ac890c841541f52551ae21895320749b80ab5ce29290d0c8f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"91103ba73fdc242b4800d9e0985e179fe8d96d10f50253a71347ef20cbcfeb20b7cb7d9bd351b930df898310bd403a696ac39f7cdaff5ff6b9a871ade0391f4e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1ca674dc6137821d5403fb856e842f39e1b04bcf38521a9e0ba34adecbe0a1d658826a8af5e8ef365c2fabed4e62a42b603b3f38472cc5208173e1162f79f289\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"18e2abd9d3e2d4ed1d78588976b31ec75c34c916f0680423889e7778ad80b91a3e92ff7185cc3d405db13e851276702ffc3a079d6d0705450515a27da63da483\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-linux-x64.tar.gz\",\n            \"hash\": \"681928ab5050da89302518445f4e7e00738530b3941434fad363724ad5b1f9bcdc52717332613d2e33733ebf835eb550628e87cebba1a12ffb4f881c8e767749\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-osx-arm64.pkg\",\n            \"hash\": \"d8a7135d384db9cbdf2202ccecc9a4396bfe7fb785f2fc3600d4392a77b96f6ff93efccc69d8426d9fb5d687ebec446370b4493542756c5e5d52f71bec18d76a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-osx-arm64.tar.gz\",\n            \"hash\": \"23043de9e69ee01570d7a99be997a38d43da69dc77a59945df780eae772b9f02d8d427062a3c9d0468a41f3783ce9755c1ebc5986f3e02bd661113ca3a3051e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-osx-x64.pkg\",\n            \"hash\": \"3bc9a8629c28c684f6ee5e403c458fadfab209c95cc86e0efbe80f8b6e4c0261b9e8556a63272600dae55298d4d464ab55d57e60997e280c3675a782e61eaca9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-osx-x64.tar.gz\",\n            \"hash\": \"7aff9d90424433d35f4152dc6e31b974d35bf636547d4d1c93e7ada25703023a915a232010267842defcbeec95be0a0e0a11f568a07b225ee23dfcbff85cf898\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-win-arm64.exe\",\n            \"hash\": \"af0df4f84de32469ede5c4609f658d36489c0babbd916b0066daeb976bb43361f682d675e8ea15e3c31fbe76513c692b5fb0b8f729c459f46005bea51460d56b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-win-arm64.zip\",\n            \"hash\": \"9af6c77e22beb3b1d0be5972d809093a33c9460207deb6de25bfbf6ebb23f433629b17b78f22337a09a1bf5ea691dae580a88d953e4d7d9e845c2620eb258eeb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-win-x64.exe\",\n            \"hash\": \"af8500cb1f7baaf8dc6a54f07e7e5660f9aff66b75c65735a5d8412ee69e7218a5f0bd1d776c9556283e7df8e8cd6bb61ea4937729c1cfdee536840573526955\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-win-x64.zip\",\n            \"hash\": \"e42f29e7ed6b46e4eefcacb8db99809f696ba7f4e3dd98f30ca6e0ea4346d43de1870a4622ae4d775b0a3204cb9a76a0439dedd4175150de553f18e8b4bae4d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-win-x86.exe\",\n            \"hash\": \"1725f40d2ac76544159bc262d6a30dffe2e7aa5e1e54229523d75dd89ef27acc4fb9800792d3e50b773cbcd0ead416e473be682ef6aadb9226c90079711b5c8f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.15/dotnet-runtime-6.0.15-win-x86.zip\",\n            \"hash\": \"e4091494c6e347cb7bb43c65dcdc22b319b4e71da61674e43bcd2d687081bc6c255808bb25dfadc03db297a6a9ee1dc526d98faa4f2e6fe57e4ec891d556918f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.407\",\n        \"version-display\": \"6.0.407\",\n        \"runtime-version\": \"6.0.15\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-arm.tar.gz\",\n            \"hash\": \"3f9ba3b05e4c1ef61a6afbdf97a61c42b3eff06ef9189f0f11934fa399674440602e51823190cdf1c43deba3fef7a3ebe7d1ea92933d1d07f59516aefd399aae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-arm64.tar.gz\",\n            \"hash\": \"7d48d8a3814694a978b09a7c4b61c8e0dae9b5efe8195c15339d2f777fa4b85084d386117ee03b05f543d3d64b9484942e1e212001382b2e67277b30f5254b9f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-musl-arm.tar.gz\",\n            \"hash\": \"02bd32822afffdbb30250ac68fe4f9ce61c6db53b7730adde190a6801342b3578702c8704774840459fbc7818b1d33b8fbbf34b68415f297c013a1d5f6294c26\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bfe6a034e4620d2041dc1239d9195c3349ab61701f8335b332212fee537200050bd7836b3e4dd71c483ca903612a65eceaa3b872bb65991db128e78f6fb70579\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-musl-x64.tar.gz\",\n            \"hash\": \"4db6099aad0852b498867ffce09c03afc5ae4c4b30e768e996697a02d7ba2f675952f4d64cb073da0e02461d1473703abaeb3d1ae8617088ab1f8158482ecabd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-x64.tar.gz\",\n            \"hash\": \"3cc230f21c0d60ffa4955c01d79cbb41887a41f4e97d0708170e4be8e4dc5bc261269c788c738416c28bbc7e8c6940a89cf3d010f16d1dc4cf25bbb0e2c033c1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-osx-arm64.pkg\",\n            \"hash\": \"f3fcd7f2dc6748bec713c442f8b6b346ba26a7638d8f9f998aafdaffb24402650ed928faf9aad5b2e2fde5062d372c8213e5ad3c243dabaa3fbb83bbccc0f2fd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-osx-arm64.tar.gz\",\n            \"hash\": \"75b2cd3a679c3d156ec9f7fdefa9637f8684be17254636acfdddb3bb3d56da4dbac05e9f178acf46a631a21ab96a270aa20256bb3518d89fdcdf6a8d3d21e73d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-osx-x64.pkg\",\n            \"hash\": \"f895adadd38bdcee8571ca20e5fab9aac8e1dfb20143446201639b52035b0d051449d2f7f97f30f838a7701969b594a3cb975eb2b7f0418b318a7492008f5dfd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-osx-x64.tar.gz\",\n            \"hash\": \"3e4cfbd15ee138c8d1582ebd33a443edc7d8e055d579abc0335a288b2c26bac15d7e4fe3b80f91d56513c82318b6a62803558e3d41a28b6716d2296d12d3003c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-arm64.exe\",\n            \"hash\": \"37567d0145e6b8c0698d19ffb53efc23b4f289478ca2364fa9549485e395503107e2c676365cec79355228ca1d8e986f04024161a8669e4d005d72349cdd55d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-arm64.zip\",\n            \"hash\": \"c824ad3110f4b35e526ce1b1410a21ba1baa1a0cc3198b0cbba78490cf4347bdee16bd1516f160ea30947a62e748b55f22de8aa9af85bc577d12a960a3bec505\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-x64.exe\",\n            \"hash\": \"80b05ac0009ca99a690edda4c4ba59b66e1025aa94a002638317f3aa9007a993e27a30d1f48ebbdc84b9ff511535745021550bc759dfaf2ef4c48fbf555682ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-x64.zip\",\n            \"hash\": \"9a5d7119a209c8b86c5c395819a5e0795eeb4eb96692c8d70cfe5ea271602c780dd8b1e3386dc5e56dedfb411b2810f7e98717cdf77ca80131ca22bb9a01a0bc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-x86.exe\",\n            \"hash\": \"02c22e3a0056702a07132cccd425c211556a1d6905978f9e1c3c3112a65563d37f2de737089c58a946d4874c9c5e23598203a9a4bcbae46de26b8649d87fd52b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-x86.zip\",\n            \"hash\": \"b8c315699d39ea178600a220e503c8af9713df4dfb42a24bf279171a5c1ff2782ec8e180eb8ef5dec420886d785c3498acc440f4e5776b26859eaeb2bfe57498\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.407\",\n          \"version-display\": \"6.0.407\",\n          \"runtime-version\": \"6.0.15\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-arm.tar.gz\",\n              \"hash\": \"3f9ba3b05e4c1ef61a6afbdf97a61c42b3eff06ef9189f0f11934fa399674440602e51823190cdf1c43deba3fef7a3ebe7d1ea92933d1d07f59516aefd399aae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-arm64.tar.gz\",\n              \"hash\": \"7d48d8a3814694a978b09a7c4b61c8e0dae9b5efe8195c15339d2f777fa4b85084d386117ee03b05f543d3d64b9484942e1e212001382b2e67277b30f5254b9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-musl-arm.tar.gz\",\n              \"hash\": \"02bd32822afffdbb30250ac68fe4f9ce61c6db53b7730adde190a6801342b3578702c8704774840459fbc7818b1d33b8fbbf34b68415f297c013a1d5f6294c26\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bfe6a034e4620d2041dc1239d9195c3349ab61701f8335b332212fee537200050bd7836b3e4dd71c483ca903612a65eceaa3b872bb65991db128e78f6fb70579\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-musl-x64.tar.gz\",\n              \"hash\": \"4db6099aad0852b498867ffce09c03afc5ae4c4b30e768e996697a02d7ba2f675952f4d64cb073da0e02461d1473703abaeb3d1ae8617088ab1f8158482ecabd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-linux-x64.tar.gz\",\n              \"hash\": \"3cc230f21c0d60ffa4955c01d79cbb41887a41f4e97d0708170e4be8e4dc5bc261269c788c738416c28bbc7e8c6940a89cf3d010f16d1dc4cf25bbb0e2c033c1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-osx-arm64.pkg\",\n              \"hash\": \"f3fcd7f2dc6748bec713c442f8b6b346ba26a7638d8f9f998aafdaffb24402650ed928faf9aad5b2e2fde5062d372c8213e5ad3c243dabaa3fbb83bbccc0f2fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-osx-arm64.tar.gz\",\n              \"hash\": \"75b2cd3a679c3d156ec9f7fdefa9637f8684be17254636acfdddb3bb3d56da4dbac05e9f178acf46a631a21ab96a270aa20256bb3518d89fdcdf6a8d3d21e73d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-osx-x64.pkg\",\n              \"hash\": \"f895adadd38bdcee8571ca20e5fab9aac8e1dfb20143446201639b52035b0d051449d2f7f97f30f838a7701969b594a3cb975eb2b7f0418b318a7492008f5dfd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-osx-x64.tar.gz\",\n              \"hash\": \"3e4cfbd15ee138c8d1582ebd33a443edc7d8e055d579abc0335a288b2c26bac15d7e4fe3b80f91d56513c82318b6a62803558e3d41a28b6716d2296d12d3003c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-arm64.exe\",\n              \"hash\": \"37567d0145e6b8c0698d19ffb53efc23b4f289478ca2364fa9549485e395503107e2c676365cec79355228ca1d8e986f04024161a8669e4d005d72349cdd55d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-arm64.zip\",\n              \"hash\": \"c824ad3110f4b35e526ce1b1410a21ba1baa1a0cc3198b0cbba78490cf4347bdee16bd1516f160ea30947a62e748b55f22de8aa9af85bc577d12a960a3bec505\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-x64.exe\",\n              \"hash\": \"80b05ac0009ca99a690edda4c4ba59b66e1025aa94a002638317f3aa9007a993e27a30d1f48ebbdc84b9ff511535745021550bc759dfaf2ef4c48fbf555682ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-x64.zip\",\n              \"hash\": \"9a5d7119a209c8b86c5c395819a5e0795eeb4eb96692c8d70cfe5ea271602c780dd8b1e3386dc5e56dedfb411b2810f7e98717cdf77ca80131ca22bb9a01a0bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-x86.exe\",\n              \"hash\": \"02c22e3a0056702a07132cccd425c211556a1d6905978f9e1c3c3112a65563d37f2de737089c58a946d4874c9c5e23598203a9a4bcbae46de26b8649d87fd52b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.407/dotnet-sdk-6.0.407-win-x86.zip\",\n              \"hash\": \"b8c315699d39ea178600a220e503c8af9713df4dfb42a24bf279171a5c1ff2782ec8e180eb8ef5dec420886d785c3498acc440f4e5776b26859eaeb2bfe57498\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.310\",\n          \"version-display\": \"6.0.310\",\n          \"runtime-version\": \"6.0.15\",\n          \"vs-version\": \"17.2.14\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-linux-arm.tar.gz\",\n              \"hash\": \"1584e8ce9205b45ca4656ad62cba432e01eeae521f621189bb7ff95dc6da5979b441fbc23678e4c538e80846d1b25399cde7137c0b825c720cc0d84e3653a313\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-linux-arm64.tar.gz\",\n              \"hash\": \"bff911090f813b54981ae6cf0fd4555dd034b55efbb8dc4a42923b18755c90c388f447b425b93b37e27da5aca46db829bff3e415868c9fef2e1f1e113a7b405b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-linux-musl-arm.tar.gz\",\n              \"hash\": \"9f80da6ae9bfa264d54f9aca55aff15cbc9765c0807568b19c36b783071f1886c1dcec44182cf697c9f36c96a4efc0388bd8f05cf6a2317c182c4560ef673c8e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-linux-musl-arm64.tar.gz\",\n              \"hash\": \"894f9f76fc50213c43816638b7a992aabdef287848d701dbf1c4a8dd30baa5d7c989b80d75e53ac973b4386ad55c30f121d17b27d0a660698f6147170a2ffbb0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-linux-musl-x64.tar.gz\",\n              \"hash\": \"a98c9146127d13479c2492f1c5c941e1df2f28ac2267af7aa9002b05b37ee045822fbfc9108abc20229d5d8385c01031ab47c0206ebc104b6e33372f216d998d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-linux-x64.tar.gz\",\n              \"hash\": \"5c62346ce66e224df655b458e57e5fd841164407d9f6be68431f942dda299a4645c5b7c7f5d0a8f28cf1a2a21112d064c335138bca20dbe3cdf73f239b64217a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-osx-arm64.pkg\",\n              \"hash\": \"6f17ba516a75882d1f7176af6d442c870057c254ef7838fb59c6f931477f6345f82de5d45b260556b04d67beaf2f6dc13fd64e754d2e4db9147e5a5a590268c2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-osx-arm64.tar.gz\",\n              \"hash\": \"c43fb686c39b3a4671b0a75b28a650db19a4d198194d3018a19a016dfa07963a681cfbc76755c3dd2e6788f1c86cdf4ac06592ecf355efd40a6f547589668b9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-osx-x64.pkg\",\n              \"hash\": \"04a65094777537973f0eb9cc53628df5173ef334514a14be4e42765a7e760d248e5b28e9e9e88ac4ad30a2c474f09b12c4e82bfe12617e4c16664cbf7597063c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-osx-x64.tar.gz\",\n              \"hash\": \"e093270062d7827d8ace6f4cb487370bd6029076ebe8305a1de81512ecb79c809144d6959347e5cd24da99fd2cdc9dfe2c918d4ee4112e73260facc11835ed7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-win-arm64.exe\",\n              \"hash\": \"76b99a60cf4e25cd001a2ff2410a87e9599299d56e3235c3d0435ab00b9e8147e2fa06240a110c935cc1e83a592541a3f26412db3d5c12c03e4af63b58f45183\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-win-arm64.zip\",\n              \"hash\": \"9df61f1d1ff4a74e0976be29d42c7f027637f74b9d255a7aa4b7d90c54931c103ad610e489a3a42233287ccd4a8d9953b3b8e79ae5ea1af748f7e5bb83396b91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-win-x64.exe\",\n              \"hash\": \"619b4acb1150cec07accaccd6de96ae0fd9a3c999bcf8d31fe37c34f3109bd9cadad74c364fb348c3a353deaa0f64ddca921692146a1250410d5324a02f41f20\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-win-x64.zip\",\n              \"hash\": \"3adb1b75a490f113908366cdd6c9d151d9df2f0c0ab41e6e410cdd8bd0906e0994b9289370848414f1c9fc3f038db4baa5bf5603a352d219106a8b709113243e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-win-x86.exe\",\n              \"hash\": \"d4e2b7749c65e8f4e48ad8f1f6ee6a78a01f2bf070aab0a58fcae53594838d92696578779291a9870fcb97830433b0ede06d82311563e3b8aeb4ade4b845196e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.310/dotnet-sdk-6.0.310-win-x86.zip\",\n              \"hash\": \"29355ee3beae5c6838c500d3b116da475935087a590b06462de8cb6823e4c52b65012d1a8a1f2dca418b566cdf2b7c6a71b5657e7667241912dc1ce48eff6e5c\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.115\",\n          \"version-display\": \"6.0.115\",\n          \"runtime-version\": \"6.0.15\",\n          \"vs-version\": \"17.0.20\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-linux-arm.tar.gz\",\n              \"hash\": \"c18f6a9da7117c7faf1f5bfd1725eb9d08672552f5b25a9b9e5f110b146e488f2f251fc1565c6470680ac7e37879560767ef3d004c33bb3b5267a5e647490740\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-linux-arm64.tar.gz\",\n              \"hash\": \"d3919dec6cdbb4e0ab065c3d7216c0eeb31e856e73ee951fc6ad46c9511a20b7c890436370d43e6d7d0a51e0801389a6303f02ce008f9e205cefa5c27e17655b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-linux-musl-arm.tar.gz\",\n              \"hash\": \"4f693041514bb1344b1c1a5144bf0aa1fd5a2965db768df79f6d0760208944eb98d281af080e4c181a29ecaddedcfdde82f03678204cc27895cef5c5e1dd5bf1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ff98fe117814e2e623be5c5d273e1d9cc22c0694e7e042212e4cd91605fbacc9a37cb5ca62b070abd520769511c52e9887ea3c47e9ac7d7762088787b544cef5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-linux-musl-x64.tar.gz\",\n              \"hash\": \"025f21c494ed0c63e3c5acb17d4c95b51d049b9ecf6c9bde0700368fe63cf0067d74777c020f6e497cd148c68ddc0c1d807cb074aff7b520be88e6309ad1cce3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-linux-x64.tar.gz\",\n              \"hash\": \"821f2b3cad08162910324ed3433b7edc521f09f4f36a34f7afc766e796bc46be03fdfe7499b21ba9a885999d5f78b08548993b06b4d9bf1734d06aedf4bc2e2a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-osx-arm64.pkg\",\n              \"hash\": \"88b58664859261885664ce0883216e1cc47033050bcd66b173be0d91edd6a54ede4365fae6cdd4ca72050d83bccc65492b23e6684f52605a4db52d9316843f1f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-osx-arm64.tar.gz\",\n              \"hash\": \"ea58bde1d68ae345db3af142ee953ae041e77cfa909c510f8e0d87701a6e57436a9c1353a2f11af722a0c863e1e2656801d2d2d614cfc13c80af160751cf1095\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-osx-x64.pkg\",\n              \"hash\": \"53d4c58d215795cb6b79b75b5bb9dd408479915d1eac3a2ddadf663493b42888025089d33924821d3239ce9ba4e15641816d093b4d80ec24a78ff8ed0fead157\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-osx-x64.tar.gz\",\n              \"hash\": \"a17c1fe4435ff6d95c9f5304c976b593e8cd6634a4d6e7cd61517d9db3d0faa321b3dc6f1f6b2109b9370357f38502ca5d61326d8c99c448eff0b469be121a90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-win-arm64.exe\",\n              \"hash\": \"5b3b649b8da9569b60be1ee6d3cd1d23e6eb5dc902e6388fe509aa8571f79a5f1ef2f514cc98d7c3f17802b459ef9cd046a379873c895c3e107849465f3d6be9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-win-arm64.zip\",\n              \"hash\": \"44befa517bae5f8de119442a55781d516164433c0669abed61b85b207bc235e30a426ef823a86ff20cf4a6ccbe4d18a8af4a4e93988bef7f010ed17f3d3a574b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-win-x64.exe\",\n              \"hash\": \"a25dda8e69bca2bdc8ed08f2b32bfb8d952b09ac83ef4ef6bb4a65cd4fd9c0a869bdea19377470e27d12d9e95c325a5c008001166f6f2b8a18d8c3e131efe70e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-win-x64.zip\",\n              \"hash\": \"db01975cf3c5ab30767d73a5a61d0951cdcd6aacd3b83fcf611461539ba3b09771db90e52934024f4d3536795f2aef6a17101e008ef867010bf3878a777c92c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-win-x86.exe\",\n              \"hash\": \"d46aa97c376867174e87d80010315d348ebcd5e9e061ac2bc31a1351d28555ed5c3ebcceead32aedddc61871040b54780c02f94ee6019d7634d605c1c07a80b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.115/dotnet-sdk-6.0.115-win-x86.zip\",\n              \"hash\": \"06c4a2403983cd2fe8bae33c1ecb79bfd6923f8c616ccc9b3ca01b9bfb5eac54ddfb66c8f09a2c0440602a9e9520685b96e67bc52cd6b09eee000e68bcc73cdc\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.15\",\n        \"version-display\": \"6.0.15\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23055.15\"\n        ],\n        \"vs-version\": \"17.0.20\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-linux-arm.tar.gz\",\n            \"hash\": \"72a64479d009674233607cc88c79e11c9d3955e80b1c7e549acaffd38ace337fd84c24982c6991c4437c766fc3eee3a035f9130406cd4071ef6b0b481f695642\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-linux-arm64.tar.gz\",\n            \"hash\": \"3968cc6984627a521e68658f61dd0d97caf061a2582b3a133e4d13ff90718954e881f1dd1180f48458550fb02e2122a71fb2bc0463bba38f6812e173202c2c68\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"cde3bb818da5fd57279cea5518a5d93c0c811e90c181f188c5b1d1e9e7ab7c5875ee0f7932ab081f1419a0d1dee9413616481840f99f81c789c68b5446a978e1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c6c70694ad30215c3b1758a9e11846e3b26920d81fc0a7973972d1b085c7a131a40e3cdca3b92daeeeee5638915348091075f9f18fb18d8a0933f30985b9d2ad\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"6673574af4c5d45a3a78e64da3b2ad04fe15f4b68310711fe54dc5017f3ab82088ce731852164e6a8a266692d4cfac01540810344e00679289a868b7abc6f038\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-linux-x64.tar.gz\",\n            \"hash\": \"db41bbd6ffb061402acee12f498f41fe5987d355c9004091ff63010303cc9ea969ab233986dc11556bc6def5194883f50fdf216e1c50b26bb60cacd4f2ecd98a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-osx-arm64.tar.gz\",\n            \"hash\": \"9295d3931af3b7b74c5fa2c61d49f0c270d00fbf0ab15d130f5b70e28297051341b390d36a1f09cc79a46f044099a3830f652d8a294239821d473f946d82ee25\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-osx-x64.tar.gz\",\n            \"hash\": \"2e73fc14f85e6cf01fd53439fdbb451496391530cf9af0b4775445383b6f70b5bacd78a0408a8cd6fda23569999fec5809a5cb6325f353fcf72cbb0524e0444e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-win-arm64.zip\",\n            \"hash\": \"dbe3a34d53b6fa7a08cdce9c1c0c383416c7529933a6f38a27ac78bd165e9bee97de591ad130010acc85960a69fa7b904e6c8735829253bc5d0eb2d207de0967\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-win-x64.exe\",\n            \"hash\": \"e883cf20145aad8a71113fcfdf9675b50f21d5e6bd68c632dcd20bf834a45496f2b69f727998820214515ffb8efcbea3065119443f75acc534b776d82501836a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-win-x64.zip\",\n            \"hash\": \"d35a8c55f7c44a21ff82a0264e395986a30133fa7561820fcda8228d2af45d5c48a58c27deead2bc7ec41db4b58aa18b40891e71c259cc3ae2ff7f21f27bdfb2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-win-x86.exe\",\n            \"hash\": \"38eb2dbb35bdce221d5fe3485b482e98f14dd414d99a9763a64577dcb8de6f5d5ac1f0b6513cdf0bcdc46d21e90179da6cd76dd96f28f5412eafef8148f52c8e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/aspnetcore-runtime-6.0.15-win-x86.zip\",\n            \"hash\": \"6a9ea08c65d4092cc042a763d5dd619af2ca5a76e998887aa2b22c5c89736d7580f8bb33a245ce985d8ecae71b5a63e84f25ed1ca7a60cf0de15c8050804df17\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.15/dotnet-hosting-6.0.15-win.exe\",\n            \"hash\": \"0fcec40e3d4ee131dcdf8ee606a603274e71921fbaa3c0f3a7b5fdb4a1b001ce86e46ae0840b2e58ce1a930797ff68b274a46630ab7995e01633c8a6dcee15ba\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.15\",\n        \"version-display\": \"6.0.15\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.15/windowsdesktop-runtime-6.0.15-win-arm64.exe\",\n            \"hash\": \"880344f57b4d5b97855eb8d8ecd7dea0101f33e9a8ba944c5e3e2a4566cd9a917839e6ad17ec28ea3365c8bc992a8f873ff456c7e7a2315af007fd527e689d6f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.15/windowsdesktop-runtime-6.0.15-win-arm64.zip\",\n            \"hash\": \"25eb9d3dbfa1e82aa5f4e87c77e6c68d92ad352a4d82dfa671c2969794ef213b89e67ee337174071b7b36b8c83e1b855e329cb99538ca6dcfc33abacfeb8fca9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.15/windowsdesktop-runtime-6.0.15-win-x64.exe\",\n            \"hash\": \"62412c45ba5ebf89b0ea2c3d9dcce3a7f05198d4db368f63956f7ae58b368baa059343a2de39d24e20ffe126145f31c72131914cb2793f002921a975e69c3bb4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.15/windowsdesktop-runtime-6.0.15-win-x64.zip\",\n            \"hash\": \"06d0a8391710ecd531b20f11fbeb9e9d782ee247d595cb5dd2692dfcccdfb35032134f6120491845ec012d391b23aaef1f3303e3cae29399788591865c5b5190\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.15/windowsdesktop-runtime-6.0.15-win-x86.exe\",\n            \"hash\": \"5959fdc7260479d57cb9a9c842d7ccc4fee6b0bb52554c7b066c5822344ab0f2efcdb1494bb427db810d8f4e7b209cdc726dab18875eecf3253bf3a9a0f1de56\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.15/windowsdesktop-runtime-6.0.15-win-x86.zip\",\n            \"hash\": \"b10c6be82c2f5aa84cef1b7481e7c1ecf43efdf70a038e58ec202b5977e63b596b6915a2cc4c65d698fc39f89ed0ac6e5dcd882008d1f117b72ba4c47ae6040f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-02-14\",\n      \"release-version\": \"6.0.14\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-21808\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-21808\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.14/6.0.14.md\",\n      \"runtime\": {\n        \"version\": \"6.0.14\",\n        \"version-display\": \"6.0.14\",\n        \"vs-version\": \"17.5.0, 17.0.19, 17.2.13, 17.4.5\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-linux-arm.tar.gz\",\n            \"hash\": \"31272eaca24237e0b4d4ada5f38cd57071419a8e86896fbb1f218a812434e8e347574ebdee950063b4de7b96b921052a51616ab05463768c75ee6c828644800d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-linux-arm64.tar.gz\",\n            \"hash\": \"4f559d5da668c67ed61c3e342e5ca77f2059b45bfa84f8c35b5ab4d5acb56ce75daf05713ef7b3ce299c1084fc863d5e43a4c14b1e04ce86db084b1fdd465a1c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"8159444062812db6104a072a0d18ad26aac32a968fc08c9ddbe88dfdb84a7a740931f0e9b66a39ab9b99bccc5e2bceb96595a58b1a8a64f451413756a5dc2f7c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"61bf31dd2e13d9b4de7474b776eed6af8624fe30fce040638e677cfcdd3ae0650207a9805fed4f6542e908636a9d598235127e5b03e082ddc19294353ccb8735\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"126b22ce50bbdae2cbcfdd47dd6273451ff5e80fb3318d4fd1fa5cf9fd79aced6b9683f68fb02130a699808eb0c380ae0d8a400a04f24a286d21230d7df02423\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-linux-x64.tar.gz\",\n            \"hash\": \"2eb1d0a35b21c1f03c0dacce94923d77e85c929a813fa9fcc885c7b045bcb6d6755511dee58f41e001aec294ba6e2163934b451c8c66065bb0bd1723c236e470\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-osx-arm64.pkg\",\n            \"hash\": \"b19d05c6e839e8efa0c5bdbad28a440726015861fad838d3ba2de53a98a740e4f561564603fafaf60096d692ad1707cba587fd556ef78164efeeb52f47e96936\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-osx-arm64.tar.gz\",\n            \"hash\": \"7c1cdab62768c293e2ba0de73400de9f4cdc061cefefcdb22030c367147f979dea241797400768370a68449270222955753d6df099236836889863915d38de7c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-osx-x64.pkg\",\n            \"hash\": \"fb514f5646b301db938a90f88e071744ba279a6e8727c1c95ef6d076527cc053206e35817be3d3961cc95b17a84131c344fa57d7fc3c14d6de957ab3b90b925d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-osx-x64.tar.gz\",\n            \"hash\": \"dc6ebb5d005c9e524ce99cb2c189d963e4399bbe8845c3c517282c601a884d62b126581e6238bbd83c173ca3fa45aeff119d6a91900780f7c4b1394f28bff803\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-win-arm64.exe\",\n            \"hash\": \"f8d46383d888443c8c87d4ae54bd42c5e431708179feed069c4244cb48f11ca68b22958fe05381d9462b33ffcc2dd2f2b7bf80b4c81cef7e5d46545a97173965\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-win-arm64.zip\",\n            \"hash\": \"8d2df4df20549ca5055bb0870ad5b511c4e9a112824d88e46375d7d4c98ec22a0e1faa66dddee2b74c9c9c4db1c28e5a9cfdf5f3848c6ed765357f00c01a8a57\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-win-x64.exe\",\n            \"hash\": \"aad50eb958272ad89627e0460cef165757bfd25e3d17e7f74f6ef5d5c0923b36143dd1aab1c309829db43217344a0848b42dc9e6d273f5293c840f98b7a2a5b1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-win-x64.zip\",\n            \"hash\": \"78940d4550c8370586e6bf9c20f3266aa42b1134337b0fa78e9c4c9fb01a4abc9237afe42b96e364c561e87b810a8bb5a16a44e0e62f2c626bd86655009bb1fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-win-x86.exe\",\n            \"hash\": \"5926ae3c7d37f4fed3989cb52faa1841086a9516012e9eb05720c4c4ea114e6d641224418176ca8a8c41718de624489c2e829a1412d259d8761c31dd5c3509b3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.14/dotnet-runtime-6.0.14-win-x86.zip\",\n            \"hash\": \"49b83d85713499679067d23130f664a5f755a4ce203a0b235d73095da17e59f771673c977e3cc94adaab5756acea6a85c8907b0f5ed467a8d98d6e29bee7fd3e\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.406\",\n        \"version-display\": \"6.0.406\",\n        \"runtime-version\": \"6.0.14\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-arm.tar.gz\",\n            \"hash\": \"dbbe12b5b3760817d097c5cb3984540a0ddccb4a06f8dbbfa0cb94b2292bf251d8a76b63fa5030e3a895f772371bf99e2ce81a0476401b04968a968140980b26\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-arm64.tar.gz\",\n            \"hash\": \"7653939414bfbd06b4a218fe17c0c8e0af20f7b5e6929949a0adc23ac515a76622fa863bd6c46bbcc0128238f4c1aba6b7ff5ace331fde43e89921737a20eeee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-musl-arm.tar.gz\",\n            \"hash\": \"adf59727438c87eeeab815bd99ee82faba8ec26e843cf19e1bd554ce55a1aac640cfda6982bf4fcf609df53f5343ee7b3575f4c1870ec170a980c40cae727d12\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3efa9fa21b7336721324ee5e5fa2bf6876a09633b561313a6d580155884e299c5f1629ed8c58bbbb949c26676b36f2f14e00dff69afbe57ed1409b43558cc8c9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-musl-x64.tar.gz\",\n            \"hash\": \"1a858c291f87581d6cf5c816e2f6204d4bb1703242d8fb0945cd15ea46afed25f337bae13055d9f49704787cd632d0f3aaab70999f56deb75dbd75ac7e9b1e78\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-x64.tar.gz\",\n            \"hash\": \"4553aed8455501e506ee7498a07bff56e434249406266f9fd50eb653743e8fc9c032798f75e34c2a2a2c134ce87a8f05a0288fc8f53ddc1d7a91826c36899692\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-osx-arm64.pkg\",\n            \"hash\": \"a6744c3fce9e5bc9b2f274d7975993917ed56ffaed68950b07dab192328dd229c31559d6e12379255c8514c1285d363b779c9e93cc5d84ce208c3922436df956\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-osx-arm64.tar.gz\",\n            \"hash\": \"1eb56eaafaef3b81593169374e44aa19e16606ec14e24dc2225f9e79466f08f904be052f24a6d2ee231b2f89473922c4386e3f0525570356817b90f9990b7a87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-osx-x64.pkg\",\n            \"hash\": \"85952140bd216f20f4db41e5b68571513f0b410950a9e1382ee6a1665065a3af1da214101c1c2e66134040c9522f3590c8b2dc5d2d47b97f21319668c663eec1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-osx-x64.tar.gz\",\n            \"hash\": \"e0249710b8dcf380179b4f57559e2f6745b855d387d4bbda861c94605763bf1f4c09293edb31e33b6271395c0211aed9b2b83f9cf5cc1831ccb1bc34b45e58c0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-arm64.exe\",\n            \"hash\": \"5ab1438329d2cada89289a8b5c393523da03ada3a9abf74f6acbf93b7ece690d9fb836198923087ae41284ca3c0960910471666fa0b9f6dea2070fb2a890a849\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-arm64.zip\",\n            \"hash\": \"53d4ea1c0946bb24f9bc0e462f6968fad4efeace61b0d14ceae1870a3b53847184e18d0630bb4c4dcf61fadda601967de6e662496676d39b553f620d28b458f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-x64.exe\",\n            \"hash\": \"ebe7e2d4ea3bde3e5a6d4da111d87ab92764ae1bcd6b96ce14183090c641858571210d87420b079bee3bc870e6ffed4f09323f23162042d08bef582dafbc2a81\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-x64.zip\",\n            \"hash\": \"d7ff6a0b03a68122810ae310d4c4d7425fbb8c03a01e07965983cf5d3c28367dec540d1654144eb2579874c05044324b2595f489560b840e779f8f955be4850e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-x86.exe\",\n            \"hash\": \"c0dab4e1f640eab089d0d309e7a3f39280abf3025fb2a09dad43cc82002b228fd9fc377d94027cbb72417bb51bcb06873eb5f39b09766969432e2af80440054c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-x86.zip\",\n            \"hash\": \"639d2428e7ef5f39608a5c04f81b72c2f90caa8525457280cb6aaeedb2e6925b8329c6a31d15ddf2d226e47c96cfaf50c95cd9a92a7b1f2860e4c4a5bd8f3cbe\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.406\",\n          \"version-display\": \"6.0.406\",\n          \"runtime-version\": \"6.0.14\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-arm.tar.gz\",\n              \"hash\": \"dbbe12b5b3760817d097c5cb3984540a0ddccb4a06f8dbbfa0cb94b2292bf251d8a76b63fa5030e3a895f772371bf99e2ce81a0476401b04968a968140980b26\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-arm64.tar.gz\",\n              \"hash\": \"7653939414bfbd06b4a218fe17c0c8e0af20f7b5e6929949a0adc23ac515a76622fa863bd6c46bbcc0128238f4c1aba6b7ff5ace331fde43e89921737a20eeee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-musl-arm.tar.gz\",\n              \"hash\": \"adf59727438c87eeeab815bd99ee82faba8ec26e843cf19e1bd554ce55a1aac640cfda6982bf4fcf609df53f5343ee7b3575f4c1870ec170a980c40cae727d12\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3efa9fa21b7336721324ee5e5fa2bf6876a09633b561313a6d580155884e299c5f1629ed8c58bbbb949c26676b36f2f14e00dff69afbe57ed1409b43558cc8c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-musl-x64.tar.gz\",\n              \"hash\": \"1a858c291f87581d6cf5c816e2f6204d4bb1703242d8fb0945cd15ea46afed25f337bae13055d9f49704787cd632d0f3aaab70999f56deb75dbd75ac7e9b1e78\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-linux-x64.tar.gz\",\n              \"hash\": \"4553aed8455501e506ee7498a07bff56e434249406266f9fd50eb653743e8fc9c032798f75e34c2a2a2c134ce87a8f05a0288fc8f53ddc1d7a91826c36899692\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-osx-arm64.pkg\",\n              \"hash\": \"a6744c3fce9e5bc9b2f274d7975993917ed56ffaed68950b07dab192328dd229c31559d6e12379255c8514c1285d363b779c9e93cc5d84ce208c3922436df956\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-osx-arm64.tar.gz\",\n              \"hash\": \"1eb56eaafaef3b81593169374e44aa19e16606ec14e24dc2225f9e79466f08f904be052f24a6d2ee231b2f89473922c4386e3f0525570356817b90f9990b7a87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-osx-x64.pkg\",\n              \"hash\": \"85952140bd216f20f4db41e5b68571513f0b410950a9e1382ee6a1665065a3af1da214101c1c2e66134040c9522f3590c8b2dc5d2d47b97f21319668c663eec1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-osx-x64.tar.gz\",\n              \"hash\": \"e0249710b8dcf380179b4f57559e2f6745b855d387d4bbda861c94605763bf1f4c09293edb31e33b6271395c0211aed9b2b83f9cf5cc1831ccb1bc34b45e58c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-arm64.exe\",\n              \"hash\": \"5ab1438329d2cada89289a8b5c393523da03ada3a9abf74f6acbf93b7ece690d9fb836198923087ae41284ca3c0960910471666fa0b9f6dea2070fb2a890a849\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-arm64.zip\",\n              \"hash\": \"53d4ea1c0946bb24f9bc0e462f6968fad4efeace61b0d14ceae1870a3b53847184e18d0630bb4c4dcf61fadda601967de6e662496676d39b553f620d28b458f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-x64.exe\",\n              \"hash\": \"ebe7e2d4ea3bde3e5a6d4da111d87ab92764ae1bcd6b96ce14183090c641858571210d87420b079bee3bc870e6ffed4f09323f23162042d08bef582dafbc2a81\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-x64.zip\",\n              \"hash\": \"d7ff6a0b03a68122810ae310d4c4d7425fbb8c03a01e07965983cf5d3c28367dec540d1654144eb2579874c05044324b2595f489560b840e779f8f955be4850e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-x86.exe\",\n              \"hash\": \"c0dab4e1f640eab089d0d309e7a3f39280abf3025fb2a09dad43cc82002b228fd9fc377d94027cbb72417bb51bcb06873eb5f39b09766969432e2af80440054c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.406/dotnet-sdk-6.0.406-win-x86.zip\",\n              \"hash\": \"639d2428e7ef5f39608a5c04f81b72c2f90caa8525457280cb6aaeedb2e6925b8329c6a31d15ddf2d226e47c96cfaf50c95cd9a92a7b1f2860e4c4a5bd8f3cbe\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.309\",\n          \"version-display\": \"6.0.309\",\n          \"runtime-version\": \"6.0.14\",\n          \"vs-version\": \"17.2.13\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-linux-arm.tar.gz\",\n              \"hash\": \"43c4727c89724ae3a38e8f21b694ae80fa60f38b36fca7a25b5163886645f9a4e67f04af6e2f9711102cf0e6c67ac1a60e05d80297715f282b3ace1300e044e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-linux-arm64.tar.gz\",\n              \"hash\": \"8917a8471df7d872e1cdb93acf81cd8d2b9b1bc027ac9255e940f27df28a237d4a105b8a21b9295b55ce3e4e8ec3401edf5e5a5a4ffb58bfadb22531b4ebd377\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-linux-musl-arm.tar.gz\",\n              \"hash\": \"df5e5fc912039b57b42b9490db625dc131f2dfcb3da48b3bf2e93ebfd4e6fed157867dc3df69fad3a395f1f7fe17ebd5994476832be6f5bf1681ccf81d5bdd6c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f7475d8df272fda76d555657746317cb2d1a926fce1500865f58193cc4f64008aaa66c1f596c1873e2355ccd5d2d3357195213edd5943365bb05e08cdd2b8369\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-linux-musl-x64.tar.gz\",\n              \"hash\": \"352252f9226241605232ec1474dfd992f7cfba2eeca1de7df294739ff426fbcb97aaf8fe34e6c67e4585eb88831c317b3345f7cb36710b01199512d1ca666a9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-linux-x64.tar.gz\",\n              \"hash\": \"c849d2d825e7054da2a9c34ca6dac0d9c8cbb54956b8d096455afc37fe648609f28783ac4214dfe9629be8df3c3e00372784481d72bb155b338c13a9877bbd88\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-osx-arm64.pkg\",\n              \"hash\": \"5547e5c8eb1b381a1adb6aafbe5ffdbb94485ea5a431e2473efff505aef7af7d1206f357203e5ccbeb8a4bbcd6780ef7345c8ee2768744dae6db2b74e4a891ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-osx-arm64.tar.gz\",\n              \"hash\": \"b083d4605a70fa790dbee9c18be7173df478a6aa94a3f84e0859cc9e04dd4eeff3e2e0aa89884920f3320a97b9f77827315d0cad49d24c312a5b1a108fd3f144\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-osx-x64.pkg\",\n              \"hash\": \"cd87d7eb2371ebd37e5df38302c949a0e002f1e8e9773f3a7a9ab05194e6dd9bf85a69b39961fded066624f87e3c24f3e5071d5d7b28e1e19f7fc32ddc4d4427\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-osx-x64.tar.gz\",\n              \"hash\": \"c50f3f1dea5b3f02fbf8d64b7988112e9cf76b32955737b13429895c1688f8ded45d86efd8d537f3658b21a75bd63a4573f6cb55692feee0a9be8a003a45439a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-win-arm64.exe\",\n              \"hash\": \"cb71d158520b8b47d7d4ac71551d7fd4d552d4fdee7293ab11055d63ff0085df0d1f31c3018a0352cf2e1dc63c14aae35d39995fc8017a46d90b4d1466e0026a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-win-arm64.zip\",\n              \"hash\": \"c8eadeff8417a0ead037f27f72171d711d277fabcabc34a02fa1066c5c024048cb89cbf242a550c455649286a9d35e0c855cdde1225d93f869a3db890712edf2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-win-x64.exe\",\n              \"hash\": \"6e2e9e4d74e9ca1ec66ef2f8b7017d1599e3fa7bd629c2894126122e16d07b62b0b07bbcb65052665a3bc62efdd3f698af04bb650fb2a3830faa44bcb3d99179\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-win-x64.zip\",\n              \"hash\": \"a79e686733779ec0e7e35827a4b65f13e8eec1876bef5d1433859e0042726e553f31889ae122c24e95e4c6bdb78f477b53ac5d055f190ba5b6d7cc1b8222d58c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-win-x86.exe\",\n              \"hash\": \"e7bf7860422b01feec414288675e1fa0291b28ee8aedbf29975965c28f03816ae0e078f72325969ad0f00e4a93e7476625cbe757c793af66e9f2fa04d9963ce3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.309/dotnet-sdk-6.0.309-win-x86.zip\",\n              \"hash\": \"8862781de9c418d7ae87c7dcf23a0f0b37215d21c36b6ea701307389e269d22faf3e185d9b49bbcec88b0eeb94c92c91bbd4f583eda8aef33285235968542804\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.114\",\n          \"version-display\": \"6.0.114\",\n          \"runtime-version\": \"6.0.14\",\n          \"vs-version\": \"17.0.19\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-linux-arm.tar.gz\",\n              \"hash\": \"2dfea36628acbdfdbaefb4ac02c4b741a4585830fc3cb2ac774f235bd1589ddd246b660e73a4e83577c045d327fd16d1422f665bf37a0fd90cf2345c3d9d696e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-linux-arm64.tar.gz\",\n              \"hash\": \"1c55c38ffc96a9fdb092fd9d1c31921d10f40fb4d02be0e8a76c958af79225053214664bdfaf6de1dfc683b435da0aa35f51dba08347d0765bbfce21226de165\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-linux-musl-arm.tar.gz\",\n              \"hash\": \"5c78b66a786201768991a934b5efdce44bb85aa838b797bb3536b12cba899c24210342769923866dd0167ff435b62ed993442842edd33dcb519bae2022388736\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c2cbaf8c378ee59f4852737195d050c2d93d2836c21b3961b33f5bbf095e5c1ff2d9b86c16cc11f8b9140eb3c7229bd583589a5f8c7f3a644a15f8dc3032459f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-linux-musl-x64.tar.gz\",\n              \"hash\": \"52c2ed644120e94b953996b433aa1b8467fe7762a27bf3cb4c75a64c63cf41d0086e44302d7ea453508c6999998d5b1e1d83b74fc860bc2ec1300d3d714144d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-linux-x64.tar.gz\",\n              \"hash\": \"e952046cdfc61632effbb37cd109dc3b1f16fd3a82d506da03f0f528e11560195eb132838e569c428d03bfcfca0fdc76bc1be284556e636757777216a800ee37\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-osx-arm64.pkg\",\n              \"hash\": \"b799b28f507caecf33b60587edf3ba56ac68af23ffb7842c00a01c5347e55153a75a2f1e4a06d31f2645958f2f7b89701fc3e872ea87770f1cbd71afd26332c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-osx-arm64.tar.gz\",\n              \"hash\": \"d35824cd41a5db1b848b13c4e25a4ea51eaf6733ffd9112c1832425faa5b85bf9f7eb44bd78687c453d603bce3f464c61d3c5f93c8b6ce96e34c13f962d74b22\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-osx-x64.pkg\",\n              \"hash\": \"f37f26d8cdc078755b48bd43efd65e64b427a69d1d0a306c2dd70fd8f7ac2b7d1691cee905dcab704882583c114e4e026a41e4e9d7a3de2fc76453b587696474\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-osx-x64.tar.gz\",\n              \"hash\": \"f00a75c298cf08a1db28d84e9fcc650dbfc219bb293f7c73e3e2f601d155df65dc67872a6168b2bc000cd21ad5010d9001614381aa5bcef9ef7c415a9999661a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-win-arm64.exe\",\n              \"hash\": \"4d7129f34733939ea4d490c0e80798868f7d171059b102f2999cf72337d0d43358c7273d062da3b5fb9ebacdc53e4ec6a37d0845d4f9688036270040484419b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-win-arm64.zip\",\n              \"hash\": \"a99f69d9b2cc1ba686f55b6a55ae1ddbd7294c6836f86ea0998f1e8a0bb3ac9139d912fefb7a7996665e8fd7e7d7f74bc617d1f40d86d712b37e7fe2a19ee7e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-win-x64.exe\",\n              \"hash\": \"3c92189f32e24c4944d000b721e0fe96e3c80bd04ad86c6af8c7bfd3a610c522741c56dbad77b4211409b4b2bba678323fddd2c27155ac35b7caeafc30076ec1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-win-x64.zip\",\n              \"hash\": \"12c06d2c6cb9f630a94649d4ab439c23dcf3b8a05bf209f0d61d2852b27500acddec84b995f754efc30de39958aa6ad0213f6e3f5628630aeada9e302962a8d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-win-x86.exe\",\n              \"hash\": \"9b0af4fb48920e21cc378e2321304b255433e373c56c4bca719a26582c5082ac9a3408fe935f1dd3b01297814f3d08bb5b2bb214dec9c41891ce2515f5a51275\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.114/dotnet-sdk-6.0.114-win-x86.zip\",\n              \"hash\": \"abefc7b0794e3da925f06ebed0f65014b89495868309244770ec8b16301533fce35c4c2f062401a90fe3ffe14e34d5c0c92135aad12fdceb72f870f36e2b1491\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.14\",\n        \"version-display\": \"6.0.14\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.23024.14\"\n        ],\n        \"vs-version\": \"17.0.19\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-linux-arm.tar.gz\",\n            \"hash\": \"a127b1e0cf2384a50286f389c6335a2c640cb9204114a47d7978e1cda7e50982be9c7da764d0463237f393b24fbf05a57a4658c80cbf8ab168d95b86a9fd0579\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-linux-arm64.tar.gz\",\n            \"hash\": \"9f60b61c7ff41d4635181f8a361796ec390041a307b131e8b29a97776bf0539ca8991159123ff4bc80e0b88d65d245e0d311c320bca29285d5499d255ff4372f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"5649ee77cf4ea65893cf1d824593b4875fdf97a4d1fc9cf42ea668e50e9cebd4d2dacc231c4f2ed22c0529589736e73a9d272affcff2d3a5746f103a78e6dd29\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a4bcdf642bcc837c26d9d90a94e49318a579475f60284b89b824dff29f26d346d2da14ca6b5ad57df089b4b7174a4c9596b97dfae620a1a19f7afb23cedc0910\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"35fcfb6ba2048f1f942f667ffb333b0983347b8adf7b7d3db5152a222931f8b86fe5c62cb2fd45bf95a89e752056a946465ef546de295d32a911ac2c21acdbdd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-linux-x64.tar.gz\",\n            \"hash\": \"87f22bef951d00f6d55f30855e947f37f19a44b93e52bebe568d0aa0ace01462e9e6081140a0e771712ef9f032e7ab806d122ff99247a5725ae382828e8b394b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-osx-arm64.tar.gz\",\n            \"hash\": \"8801c5e80a94d19daea21e30d3365b39124d26e106582814a1d9c06a4d6b27e9e277416acabc28f135b1c95a88625e33521902039a1f56c88520578529842c5e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-osx-x64.tar.gz\",\n            \"hash\": \"71d1d293e6e1812bfa0f95f0acfd17d1f9cc0545dda3b70e2188c8b2214e94f4b2af2976d71691bd1636bb4c614a55cc9ca1041a56c2902266a12b3285de8dcb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-win-arm64.zip\",\n            \"hash\": \"9dc273826bd0906d0d941f5f439c76c620e6bd452254cd27324e1b3b400a7ec6f4d41f6810ba71ec8bad602a0ab72bf563386db8de3fa6038af434c54d83396a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-win-x64.exe\",\n            \"hash\": \"8b94e16f132299bf79b63cd688efe2b5fa56a387139a29d3a6c66a433e0ae51e1ac822e1f1e4093ad16fba7495ceceb7a6b0463da946660c66ea0ee0a2a05060\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-win-x64.zip\",\n            \"hash\": \"5daf8e2e9cb8e310e2c9690bbf13c3920b9fb4a1c9e4f34d2aebb279bc9e1df83f2c1a588fa9fc39317c9e8a499925409936f2ae886ec85fb322ee618926571a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-win-x86.exe\",\n            \"hash\": \"b1c29ab498af9e9c430f9dee12f87c8db91c2bdfcd6772841f8cef979d598c3bd1530d011575dd460648a79f0a418ce9a785e045098e543bce88e7a5d129d68e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/aspnetcore-runtime-6.0.14-win-x86.zip\",\n            \"hash\": \"93a787501c6377cad12fc3ddef36c340d373f73a1887538ef099afdb2d2e8f041e46b8b01d33c3c0ba8a0677719fb041ab7f84e5da81c41462a03c56d09a6a42\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.14/dotnet-hosting-6.0.14-win.exe\",\n            \"hash\": \"03146627b15d82554147f24559eb08bdb41f155658cdd04a3a33b8a12f4f92822e5e8407e6823cbbca36ad46911ee764c646b3c272c11a57b08672f9e4d7a660\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.14\",\n        \"version-display\": \"6.0.14\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.14/windowsdesktop-runtime-6.0.14-win-arm64.exe\",\n            \"hash\": \"fb441825de7c2d671eb4c10f909ae4a075652d99eac71eace573af0937da72d1af235d930e0607e07f2167744718cc9b6e441547b17b2990eb6d5211b43de495\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.14/windowsdesktop-runtime-6.0.14-win-arm64.zip\",\n            \"hash\": \"1987e17dc6e11ead05123a48c5311fd04ec825dac0bd4635cc5aa124b4ce2eaa22a9666741e9e110975cc8820acf08f685e0507ee54648bce58896fe2e33a1fa\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.14/windowsdesktop-runtime-6.0.14-win-x64.exe\",\n            \"hash\": \"5281e817571afa6c5d848ed9a3fec4cb568ad8c05633cbd97e65e52f4a929d9947c390b9b3a72da6464c89450576d318b253d190776bd357327fc27031c7acdf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.14/windowsdesktop-runtime-6.0.14-win-x64.zip\",\n            \"hash\": \"5f2db749213cd155a51b4c5e825da78d4983d065c5c1cde3ebd21cad57c906a24ee2e25ca4c62c97ce82a09a39325f0a1c066e318c59ec545ba744bcf29bb12f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.14/windowsdesktop-runtime-6.0.14-win-x86.exe\",\n            \"hash\": \"3758549cc8d942885a8cda9223a63a795110f73483bf9674f7f8c3ae4d943e8aaced49cb2f452989cbcbf0b5bd62865b8a51d5bb72ac2c4a404cf60722c21127\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.14/windowsdesktop-runtime-6.0.14-win-x86.zip\",\n            \"hash\": \"a43086d34b5760cfa4305429c03f124c0755b1b06b01658a11660dfe6727b57df13e4cedf53c4ee7cb0c20756a6ad3b5da13573df0958b0d790d9ed6a823b3bc\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-01-10\",\n      \"release-version\": \"6.0.13\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-21538\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-21538\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.13/6.0.13.md\",\n      \"runtime\": {\n        \"version\": \"6.0.13\",\n        \"version-display\": \"6.0.13\",\n        \"vs-version\": \"17.0.18, 17.2.12, 17.4.4\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-linux-arm.tar.gz\",\n            \"hash\": \"12468a63224f2d13925ac9a8f8337d166de81cb0afc2a1f141b2990f605a67ae0aa1d31ee1374b25c541abb400fa82af3ea74a2df6b77c3f6b3ade870c12aeeb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-linux-arm64.tar.gz\",\n            \"hash\": \"f70c8e51c06f9563f33a9a1486fba1487c7ca8f2f77a2de02d382f82bb041b6c432b9cd3a399a4a4e0188b8aa96dc4cc78e9147fa0d0c4fca7fffaec55c38903\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"02f816b20a58b196577928ef053b15a5aa3c862395d3eccb5e5fa97e94faee89addc313b5d0beffe6ed3763df169d3ba4b94744fe376bd570b4e09d176c5e82f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8c18fabb3b1418915cffbdabcd3b04398f45474818128997329de3a22f7cdc9e894993a958a7a497dc6c335ff56a80f4c2b6205ae0aa16b4dbb8fe3c15bd7088\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"58ca9a0e4fda836f6034a175cf970a722786e97778883519a034c3caa0f6916491a0c03c4ffa9f7b1f346cd7de0f66533ee9d12132aa474c3d8902235f60e98c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-linux-x64.tar.gz\",\n            \"hash\": \"af52e1df5e48a1b7465f8137048e9ec292104526c65e415055e5f4630a13f1d4974ae831a143dd4f17e2a813502d90e2c0aef37c6b1eb7a23d01af7ffca5400a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-osx-arm64.pkg\",\n            \"hash\": \"4b9638ad22b65648a6836c0c887105781ebb7bd6b41dda21a4cc0d16e2c420b8d68923d5cd7f89dce3d1ca21180627ef17ee27b318b9fac1e7d3472da8cc10e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-osx-arm64.tar.gz\",\n            \"hash\": \"73df25201ec16156ae57569308e1d620ccc1a28c86c2485c337a3a793e00e2ed2e2eb991ddbabf6e5db310c8e492eca5f0e8297144c4e10afb5b8c323bb75390\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-osx-x64.pkg\",\n            \"hash\": \"e23218bad86c2f9f2fbadaa275db05d8c882b3e004d13eda5755f4fb63045d24422d6b608f72edd887af7aa822b9012549eab942e2dbae70dc1e9425122c02c0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-osx-x64.tar.gz\",\n            \"hash\": \"39ee6b678cd6cba46acba9a616df18814e1cb4bd94f276efc5e6e87644f48ec427b155a8e31e63383b3b9281b2f7f6fa73e3be682df65984b11338c5fb12fbd9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-win-arm64.exe\",\n            \"hash\": \"77fd1e643c7f1121cebee0b910326e376f758eb21e6ee24cc1cb8b95674af23b5b99d9925cf71a5b48bcf8e76d6e9a7f461a12d72ec7fdff5848c83385439cb0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-win-arm64.zip\",\n            \"hash\": \"0b09eada28e47856caf35fcb5f3c78323b598e8e665e189b9f2b8953f2b44d715dbc1663701e1304ffe906952582eb2c174b7dd0e266aec5ca97d7fa746bb426\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-win-x64.exe\",\n            \"hash\": \"b0fbe2077b8f0195839f0695877bf44c971a753d9c2a41add6e3000bd734a4cb0c6f09e0307442c1f95c7bda9071c2b633ea0f477933e5931f86ed8fe4982852\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-win-x64.zip\",\n            \"hash\": \"948ae03aec80f4cc1caf96dafce4a443c6f82a03c265ee61204ec1201ba61a4d9c9a2114ec5ba4ec4c56131bc3104d11ebfb5ae6f03429e365d30fa57a1163b4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-win-x86.exe\",\n            \"hash\": \"ab5e91eeb4ba8abe301265f5e87011690f265f4af8ddacce1fce89f731c90a25bd7d921a29e5ff5e8981902961aafa8af07c799f9d3a188f35d0e8c37e59ed73\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.13/dotnet-runtime-6.0.13-win-x86.zip\",\n            \"hash\": \"8b36b4ee8f1abe4be6e48f7d17a815ef4a7c591fef8d5cec2e8d33905cefa91f5f14448f7e33393c8c2268782f255ccd6a6b6eb10a7d69efa986095ae862b3ef\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.405\",\n        \"version-display\": \"6.0.405\",\n        \"runtime-version\": \"6.0.13\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-arm.tar.gz\",\n            \"hash\": \"c35fb905495f6eaf8b26ea6d61bcc59a56da8e7f3ac70dc8e620553d4baea81f65412bbed1099a724b22a118e09c4e290510434ac593d2cf6cf18db7cf370268\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-arm64.tar.gz\",\n            \"hash\": \"6c31666a95817a7049bd47717c9cf9ab159e94e90987f46883e272dc6dee92fb0d890f4e590faca4458cd2b3943133fb2fa58c2fc175db98d4c6c531f6b2c3c3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-musl-arm.tar.gz\",\n            \"hash\": \"3e9d2ddc087900db87c2d149e59a7036c656c2c2ecc449bbaee1d92ce0d4186458d4dc8d666f8274fcc870b55569d3575beb03f9b7010ead9d9f6ee525020906\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2eb9cb54ad58a008424cdb954a62c510f0466682c0bb907584db27d2de370706704a61798177f3dc9c447d8153bef2eac8417ebab07c65807a19d23d5468a037\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-musl-x64.tar.gz\",\n            \"hash\": \"ca98ebc5858339c5ce4164f5f5932a5bf8aae9f13d54adf382a41f5e6d1302df278bd7e218ecc2f651dcf67e705c40c43347cd33956732c6bd88d3b3d2881b84\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-x64.tar.gz\",\n            \"hash\": \"44e719c67dd06c73a8736ab63423d735850bc607adf4b8a9f4123945b13014f8144b4fb2c4cfe790d323106b7ce604388cc5d617bc153fd7820878b9187a2cd4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-osx-arm64.pkg\",\n            \"hash\": \"d371e3c64bc2c3f797a2f240db33a17e38607f903b546a1bece9fb7e10601a6e4d730373bf475e14b327670097ae31f8863c9c144e0dd9d9947f414045349ccc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-osx-arm64.tar.gz\",\n            \"hash\": \"fb1a66189cf54b14d1176ca9178673bef55aebcf16ce7616ba6b2d988b3152be7ad6d230d8369fd3a503f46d1f22d9074da8a48837118648821f7160f1c5533f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-osx-x64.pkg\",\n            \"hash\": \"3b97ef97880a062ed5436593d0fe8a68d3b906bd1ce4ff8215fa67b185ea25d782085beab9472b8bb6dc1679358e2bbc6dc896113fe4d415fd99e2eb260d2f24\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-osx-x64.tar.gz\",\n            \"hash\": \"2a6050d72b3b453e8f9fbf73e40c1fc10b148c7cf6b5e6c30dbcd322567dec1450813b514361015629ec952718a61a5f3b8d67db9f0e7a32b149fbd874511c22\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-arm64.exe\",\n            \"hash\": \"9988866b43640824dd7ec1bf0f890ad9442b074f356810c436198a3e482592c4898d31239254528a89b522b4e0f55a380a8ad8d81a00b946b5b01417a2c30fa8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-arm64.zip\",\n            \"hash\": \"e527f46aac53322029b499b5395209906fd8816200e6870a87261c56b0d78002f4b160333d2a7546e9ff54e47e1489a02971de8b6da6c6f1f07d9c74bf23f8f0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-x64.exe\",\n            \"hash\": \"3939fed60bc9a19f237521f31cf6a48b5d5cd612b70f4aad30e93a12dd4a015519ce66674eef6473a4393a7926d7ea1ab5d5723bf746da1d8cf7fefd8040731c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-x64.zip\",\n            \"hash\": \"dde215d2021a5b099d464667cd1e9b200ebc38249e29df9129cc5f9cae657471ffb8fb2238d7d7c4d1385a2bf73cc63944404ce65715099e983552865195b005\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-x86.exe\",\n            \"hash\": \"506a531862ed2738f925eb1f6ad69fe6ff65388971e2ce10a663710f0e43068f2b9e3d5f845bd670f5e712f4696a86c385b6d57c86652ef2bc2d1de930924b2d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-x86.zip\",\n            \"hash\": \"45ab06d95e41584cff8644aa49b296f2483bdfb0948f28e330b557288983d45ee9350bedaeed722a9cab925033a4997dcbef9648b54140efcc5b858ff741aee6\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.405\",\n          \"version-display\": \"6.0.405\",\n          \"runtime-version\": \"6.0.13\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-arm.tar.gz\",\n              \"hash\": \"c35fb905495f6eaf8b26ea6d61bcc59a56da8e7f3ac70dc8e620553d4baea81f65412bbed1099a724b22a118e09c4e290510434ac593d2cf6cf18db7cf370268\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-arm64.tar.gz\",\n              \"hash\": \"6c31666a95817a7049bd47717c9cf9ab159e94e90987f46883e272dc6dee92fb0d890f4e590faca4458cd2b3943133fb2fa58c2fc175db98d4c6c531f6b2c3c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-musl-arm.tar.gz\",\n              \"hash\": \"3e9d2ddc087900db87c2d149e59a7036c656c2c2ecc449bbaee1d92ce0d4186458d4dc8d666f8274fcc870b55569d3575beb03f9b7010ead9d9f6ee525020906\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-musl-arm64.tar.gz\",\n              \"hash\": \"2eb9cb54ad58a008424cdb954a62c510f0466682c0bb907584db27d2de370706704a61798177f3dc9c447d8153bef2eac8417ebab07c65807a19d23d5468a037\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-musl-x64.tar.gz\",\n              \"hash\": \"ca98ebc5858339c5ce4164f5f5932a5bf8aae9f13d54adf382a41f5e6d1302df278bd7e218ecc2f651dcf67e705c40c43347cd33956732c6bd88d3b3d2881b84\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-linux-x64.tar.gz\",\n              \"hash\": \"44e719c67dd06c73a8736ab63423d735850bc607adf4b8a9f4123945b13014f8144b4fb2c4cfe790d323106b7ce604388cc5d617bc153fd7820878b9187a2cd4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-osx-arm64.pkg\",\n              \"hash\": \"d371e3c64bc2c3f797a2f240db33a17e38607f903b546a1bece9fb7e10601a6e4d730373bf475e14b327670097ae31f8863c9c144e0dd9d9947f414045349ccc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-osx-arm64.tar.gz\",\n              \"hash\": \"fb1a66189cf54b14d1176ca9178673bef55aebcf16ce7616ba6b2d988b3152be7ad6d230d8369fd3a503f46d1f22d9074da8a48837118648821f7160f1c5533f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-osx-x64.pkg\",\n              \"hash\": \"3b97ef97880a062ed5436593d0fe8a68d3b906bd1ce4ff8215fa67b185ea25d782085beab9472b8bb6dc1679358e2bbc6dc896113fe4d415fd99e2eb260d2f24\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-osx-x64.tar.gz\",\n              \"hash\": \"2a6050d72b3b453e8f9fbf73e40c1fc10b148c7cf6b5e6c30dbcd322567dec1450813b514361015629ec952718a61a5f3b8d67db9f0e7a32b149fbd874511c22\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-arm64.exe\",\n              \"hash\": \"9988866b43640824dd7ec1bf0f890ad9442b074f356810c436198a3e482592c4898d31239254528a89b522b4e0f55a380a8ad8d81a00b946b5b01417a2c30fa8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-arm64.zip\",\n              \"hash\": \"e527f46aac53322029b499b5395209906fd8816200e6870a87261c56b0d78002f4b160333d2a7546e9ff54e47e1489a02971de8b6da6c6f1f07d9c74bf23f8f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-x64.exe\",\n              \"hash\": \"3939fed60bc9a19f237521f31cf6a48b5d5cd612b70f4aad30e93a12dd4a015519ce66674eef6473a4393a7926d7ea1ab5d5723bf746da1d8cf7fefd8040731c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-x64.zip\",\n              \"hash\": \"dde215d2021a5b099d464667cd1e9b200ebc38249e29df9129cc5f9cae657471ffb8fb2238d7d7c4d1385a2bf73cc63944404ce65715099e983552865195b005\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-x86.exe\",\n              \"hash\": \"506a531862ed2738f925eb1f6ad69fe6ff65388971e2ce10a663710f0e43068f2b9e3d5f845bd670f5e712f4696a86c385b6d57c86652ef2bc2d1de930924b2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.405/dotnet-sdk-6.0.405-win-x86.zip\",\n              \"hash\": \"45ab06d95e41584cff8644aa49b296f2483bdfb0948f28e330b557288983d45ee9350bedaeed722a9cab925033a4997dcbef9648b54140efcc5b858ff741aee6\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.308\",\n          \"version-display\": \"6.0.308\",\n          \"runtime-version\": \"6.0.13\",\n          \"vs-version\": \"17.2.11\",\n          \"vs-mac-version\": \"17.4.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-linux-arm.tar.gz\",\n              \"hash\": \"487434d26d95981b7573bfa466f4290de1e58ab331ae13a9c411a8da48db33bded20f913d403959358f85d15f39758d09561daad6d622884c77e7e04c3521ad1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-linux-arm64.tar.gz\",\n              \"hash\": \"b327e8b60ea604b82732e45d1824d889c18e68cd75cd745fc7a83acc282a6934d34ac241d8ae1fb17b4477403f9fa535c6150ea17efa434a6948c5727a927ffb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-linux-musl-arm.tar.gz\",\n              \"hash\": \"a57dfbde7d37f78546a22b8895d79142b3929870404a86125933eebc08b15b6583037948392bb6aa63537054f784695da5b8a8f902bddd3be19d0db499a4ea93\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-linux-musl-arm64.tar.gz\",\n              \"hash\": \"38b2c4424067c058520fa073ff6fc6a3bee2beffd3bf9f0c7939572f49283f6e49081b020cb46818793fbcae881a5d3f0d96c947fb865cad62d1a782f96959e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-linux-musl-x64.tar.gz\",\n              \"hash\": \"0b0001340eb6b2332cbb4576c97d8292b5c345e6ce6432f9344dc2e1a0c7686b9017c03d72cf9c1bfe704129c753682ed3fbe06f183ba2da0b35e546a3b6d046\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-linux-x64.tar.gz\",\n              \"hash\": \"98be42c7606eeecd91fb51ce0f9106e292754d92eb4e4c6068e53f82b4fce2cd09d954bb32a5ebc12c3df3802a7b0a7047dbcd978d6ae7c7708c7b4a373fbbd2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-osx-arm64.pkg\",\n              \"hash\": \"f54914097ce9141933953318191268f74a0ec37af1de23823f8ba20aa953c3fafbe29c1ada8ced1747904482bb2f187ecc94058ad7285c0244291214d47d164b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-osx-arm64.tar.gz\",\n              \"hash\": \"86d353b42b13c9b5cecb2a92ddf9b66a1ae2d39cb9c6ec0b93e603c6b2feb84f36190471f63fefe78a3effe8b92719b919e69f95c44a92a8472566a097e4dd8b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-osx-x64.pkg\",\n              \"hash\": \"ea89f374e2c049062e41910ef75ba04c5388e20762268c190318674c8a58a64898fe9e3fc3846a7ab2f002cae1553fa891e463a7346616c77381e496f42be388\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-osx-x64.tar.gz\",\n              \"hash\": \"246494004f58f017b23e2ea063da78508f99aae1896341cd08ec1af1d8220f8ad8aaa390836bd2f8c415eea55dd5ad0c7aed2b477ed618d6a0f402ff7cfae5aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-win-arm64.exe\",\n              \"hash\": \"99605de056440a5bd06dde9c07cc3fa3e9e5d834a50e836e567c111255bfff9f691494ed610d327f60c4f1caf97f8092211a972b740ce7973673ed256949b6d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-win-arm64.zip\",\n              \"hash\": \"0b5dedac60221ab82d2c081a18e1ed84aa3e07f8f7b892f189a15f729e904ad435d0fd60cacece478a5686e4270889cad520e7f0cc759ce3051ad3e6d5c68735\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-win-x64.exe\",\n              \"hash\": \"c94453a2fc1881f968ba1e1e4578853f91d3f30a35ffe8f26a508aa81ab894b06f89bb477f875006c1be6c23507255c83969d530569077fc3c61e5044df79ddb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-win-x64.zip\",\n              \"hash\": \"efd727b050729459b6f859baa116e43b183ec9a0a4a06b1c6feec08a6e66b1c9a4eae88b0429540480f06d4ca9f3694a16cfbe2cd91fc31fddb82d5e7521d103\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-win-x86.exe\",\n              \"hash\": \"64a58a1cae893c92296513c6b5b46cc1e0fbd5c01bd5de5ef9e47e178266c31e9b2b7818857aa6219ec55fb1236d87fb0ce4aa1faf81fc55aba4c74c19d4dbcf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.308/dotnet-sdk-6.0.308-win-x86.zip\",\n              \"hash\": \"872f0178f4133cc95900760c69781e34765247f5bd26167817d7a1146d97578b42c492931cc67cc9f3127e7072e7f1002b326ae89a49265d55af00f072c1e84c\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.113\",\n          \"version-display\": \"6.0.113\",\n          \"runtime-version\": \"6.0.13\",\n          \"vs-version\": \"17.0.18\",\n          \"vs-mac-version\": \"17.4.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-linux-arm.tar.gz\",\n              \"hash\": \"98b69de67d7f35e674662a1b942b70823dd946db969b9ecaed2a92395f07df925fce5901cbda70393061172b44eed4967efa4ec3f223c8d7725cedd9c33fcbe8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-linux-arm64.tar.gz\",\n              \"hash\": \"136c4b518ed5e382d5772317e556965669ca5b511cee8130468b0fbf1b3c436a72ea4e13b226d37236af1714dfecff6bf6ac88f6ac2bb07dc19a280569bd9cf8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-linux-musl-arm.tar.gz\",\n              \"hash\": \"78c10d1445ce9f28a61da19bb2a5ecf6835376596cefa6a1bf855fba9b6e2b4d74f5abe8a44626b93392c8f23fe45a7fe0f22da5a382f84ebc5d1fcf49278316\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-linux-musl-arm64.tar.gz\",\n              \"hash\": \"5e13bc9a3a0aef8daca3658d48798aff34604d2e58f7823246ccaf29486aec059b4b529e1a4642d4de6f485d2afa170071bb018afa9f6a042a94c9525277a4f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-linux-musl-x64.tar.gz\",\n              \"hash\": \"7d5bbf8e7cdb1a03a8ccbfe9478f5d547d1b3df1c005efd60a1fbb5c04f66ef72ff8159491ad052889581c2ced7c0f78068faf40ed8bb7a541076131d64aca8e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-linux-x64.tar.gz\",\n              \"hash\": \"15c0ce0b84e27072bb3c59e6f14ceb3d01481030fbcedc560fdc2ad5140b90492886fa17ca4572d945a051088bb514cff500bd68716f4538ebb5e9e049182cb8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-osx-arm64.pkg\",\n              \"hash\": \"ef698f5dcd65ac5ea50a0624a4c7b2332340b4560aff7fd7d8d5a547b356c15f00494d96a92e24d5c2a426cc2ec06cd41f33bb94a5053b3f719df06b5ec7efcc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-osx-arm64.tar.gz\",\n              \"hash\": \"dc370ecee73b4d4a1a3d3016072f5103ba5f68ebaaa366f20cbb36d77ed2cf15ea63173720ed7d1a76f03a2a44725f94a173a45c91c432848e467342276bca94\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-osx-x64.pkg\",\n              \"hash\": \"c8b6ea1fa0395c586d2623a6a2423b7a4c0e47411c15ccf925d944542e519cfa966cef2db4008b0ed6a76dda4e79aee7d8c91d13d198d88d2bc9dbe14328211b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-osx-x64.tar.gz\",\n              \"hash\": \"d61b1bf59d2fcb22cbdae59ac5685229ac310851b563cd1dc1ed92209342e59d69a8d69493f5c67a01c6a6baa159ef550e973911ded585b996d9313324e13bc2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-win-arm64.exe\",\n              \"hash\": \"42f6a6433f25d6ffa6b9d8bff5182cdf8176d7e67fb611883effbc785726e15937c316ced00e67e5793032ce679c6f39e43555dcc7b04023c63ba3931b2e306f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-win-arm64.zip\",\n              \"hash\": \"358773024cfedfe38e1999185702a5f705b368cb3c698ac5c287d510e53dc42f84159f59179d371ee66307cfaaf7292b578ade67365695f2eb6fe8a9ea4e5abf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-win-x64.exe\",\n              \"hash\": \"524ceb167686885c66dab3000b67097876afa5d74a124568c9510c3a25357fa8e86f8adf4c0ea3b7ef9cd74e4fd26c158b4a9988791bdcb64caf4fdf35de73dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-win-x64.zip\",\n              \"hash\": \"a4afb5799573639e34144f41fa8bb0fd16fe4063037f2401e09e39896085f78fd0a91be8311fc052a9f2ba4d70ce8f3698f022c10861e113a99fbf520d1507f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-win-x86.exe\",\n              \"hash\": \"09d0733e0e00331f491e067b4d84f2e70e7b223cfba85376dc37b8da93e8a2bd7282242b0eccbdc84e17abb9f18e1a8b7a6d6de16ee2ccb4e68630400c33d2e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.113/dotnet-sdk-6.0.113-win-x86.zip\",\n              \"hash\": \"86364407ed809271f1e25de0fc152aa3d47d33eb9f43dd560e9ff54535f88a6c2f6bf62d9278706cad4da30a97e1f26acff6c7ee10edd48dd4e9569c83901563\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.13\",\n        \"version-display\": \"6.0.13\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22335.13\"\n        ],\n        \"vs-version\": \"17.0.18\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-linux-arm.tar.gz\",\n            \"hash\": \"dbd1391b559d4ecb8370cb25ae06b908a3e25739863f4837f03a508d8aeeba4accf125bf7a097fa78ef37eb34cd9c306f960e8674fde46bec07429ce2c5336bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-linux-arm64.tar.gz\",\n            \"hash\": \"72bb5a366fda26eb820c181dc76e43d3fa040feedcc76dadc9064b924c98e2c31c4d4f53e6cac5c325bbd3640b71adde2c605c4cb488435515049ffe9221864c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"6d7af133caf74a3b2e025bdb77455fd60a7bf08ca39fe4de1ca692b515880ecb18148dbf1925005a2125936e0f5c913d303d1779ae297c7d6bbe4c09dded078e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d109183b5f4ce91a6b4c9d6a5e4e3ec8969ffee86a88bf914cfd11bb08754405daadabdcc96fe0e6d7f3dd138d111d7ee342795699fd33142bc37206ba59d720\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"896ea62763519a2c7cc8c426553718aec5975ee98d6d6ff3acde6f6e1918fb2cf5c6c11827d3782bd1e220a58085f0892620b1c0dadeb167b04f6410543c23fd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-linux-x64.tar.gz\",\n            \"hash\": \"96239951972a04021b1953581c88a3e1e64553d05278fb92729c62827f38eeecd533845d6b0d3e9ba97e9d19701b9ee8e5c02d1ee54b8c14efe54c08c45c15a0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-osx-arm64.tar.gz\",\n            \"hash\": \"869c2cbda288ff97f470e3c79bf63f33fac30c8ae2740f849254c0f14c7e694d4dd0e3cf283965d620fe86ab8742ea00e606da0455d683fee4dddaaa15d658d1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-osx-x64.tar.gz\",\n            \"hash\": \"9e3608fcc6e8d9f6139d3ec186b253f13d9027eac322b9cbf8ad8f9e72439a95abd0bffc4d63f427b76186f4386c8ffe613a9bcc44cb2448e9ec9be31a2fdfaf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-win-arm64.zip\",\n            \"hash\": \"318b2248799821e664bdd05d551b1536ce7dc123a56ad3af55865b0cd6643efea011ee669f950fa10ba9b5056b5cddb3d3c0f29c16d65003826f8672c681798c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-win-x64.exe\",\n            \"hash\": \"92741b33b960ae238e844c8b0854fa2a70fb120115cd383d8479ef1ea83468ca9b90aba8c80ff7a33b6b6c095446ea8740bebe7fedb0c2acd050b97f56ba2fb5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-win-x64.zip\",\n            \"hash\": \"99de5977123be3b9234a1518dcf6c5d4afae10cf3ffe161327bfea3bce52dd78f73b113aa3fe4c0798342a2f9b7cada885dee997945ab65687eee730ce173f78\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-win-x86.exe\",\n            \"hash\": \"9bd2b73d87b43f52ffd1480947ab1a44491a81bc284e9045b72ea63f07663964ce836afca2f83e595d437ab8e73cdb626da9a839bc4654f9a0594bbc46a6d871\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/aspnetcore-runtime-6.0.13-win-x86.zip\",\n            \"hash\": \"a72345b4612c342d8a3cdb037d90799e00f9c6c5b2a3dd35300d187fe9baccd016d0651e414b2cf9d99bfdb3faf6a69d04f6afee94e3f4d4f0cfb18040916b9b\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.13/dotnet-hosting-6.0.13-win.exe\",\n            \"hash\": \"cab22b918fe7c0e1821ad4114aeec4030ae42d4709d61ac0da8d5998f377dcc8bd096653da5a78961615f5d1a133da4a64d29d2b015a6a3e849ced0a753baf60\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.13\",\n        \"version-display\": \"6.0.13\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.13/windowsdesktop-runtime-6.0.13-win-arm64.exe\",\n            \"hash\": \"31fc944dbb77f3d88a7ca197b586514e46dd9d9ed5be84d3151c83243f20bb7579fd4ca45ac0c3dfefd2067397a003bf0be397553f528afa32fffdd9f686e6f2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.13/windowsdesktop-runtime-6.0.13-win-arm64.zip\",\n            \"hash\": \"e809712915c32ba66604b7ed2c0463bab6926165b1e9e8ce3bb559122d2f563fb54cebea57edcc7d675d118243054adc0635091a0fc6da3618df3b6ce66c729f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.13/windowsdesktop-runtime-6.0.13-win-x64.exe\",\n            \"hash\": \"1b44717a2784c6597aa2e1ec9e6bb54f295eab09457cd41e61ca917d45fd1797fb160765111a85cd7264efa392230ee45477a1d95bee0c108c41e8375cd51afd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.13/windowsdesktop-runtime-6.0.13-win-x64.zip\",\n            \"hash\": \"9e162b1d148375432a680d071c0dc3b11d93ae25780b1ce875e3f466d466441d594b674900951ec1646ee82ca57debea3ca9b79a6f8bc167d57fa18d60705857\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.13/windowsdesktop-runtime-6.0.13-win-x86.exe\",\n            \"hash\": \"4b4458212b159f37a9f369d6034a6a59796513582a4114c309337cb1989a0e3acb6a9bb67ac5cf0553d8473fef46777e3bf2f37cefae20d29888044333acba27\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.13/windowsdesktop-runtime-6.0.13-win-x86.zip\",\n            \"hash\": \"6ba5fecb5785d73e57e73484cb64452ce047ed8c354279a37d398d2dbe8944aaadd492b4c4a895065dd8c071ef7d247fc2039c98c6a3fb267f6b9a936c61c917\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-12-13\",\n      \"release-version\": \"6.0.12\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-41089\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41089\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.12/6.0.12.md\",\n      \"runtime\": {\n        \"version\": \"6.0.12\",\n        \"version-display\": \"6.0.12\",\n        \"vs-version\": \"17.0.17, 17.2.11, 17.4.3\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-linux-arm.tar.gz\",\n            \"hash\": \"c3bf5d831ed36a42f8b775923eb7f039fc2bd36d87f13228ef2005dad74744c8f49f1359bcd34bba244eed64d365eb40d35e76bd3dd41faa47428c1c652ebef4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-linux-arm64.tar.gz\",\n            \"hash\": \"4fc1b7ca6429abcf586a2d106b2b7e345d024c174a303a607c21f7a00071362ca9f7f85e2c583db18caa597a0404af379a740c0fd180045051ab081d571a9a25\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"45d9156f2a36a9a5ff6016acdb0e1454379e418d886320695995f9a5ce008fa3899e18df06213ddd62328e0eca629bdd0f90a9afd6bc97b8011a15b39a3d1b12\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3b981fe729d623758b9430f6f52d6dca6598923f49b55a9f12a94e9eb67bb6d88a872aab7df511d9627c951829fe0606b97239e5f393195551e58889263e3a2b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"13faef12fe0bd89bff41bd284a461a2785c947a202a391879bf20521d1d705f5f19a293b5ca943d41f575d3f3a3f25c0234f4f282dac936b6e7b22e13b5cad1f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-linux-x64.tar.gz\",\n            \"hash\": \"74fc12712a1ab29f864592c21252db9710bebc965f502d0eb2ae5473da1d9bd3381195859cc452e3beec0ac91094e1c034c6a51c0378dada65fb2581efb73f13\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-osx-arm64.pkg\",\n            \"hash\": \"e0cc8cab95494492afbf5dc3ac4df4147b95fefd8aeb3e73176a68fbfdf49cbf8f8caa221b7f75d51f2c5527fe4705113a427cc2401b849f155e8d661ef5ee2c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-osx-arm64.tar.gz\",\n            \"hash\": \"3acf77bfed61fc7ed9cbdae53a3349224425277be68e32c3e9dd59eaa56154cc7f705ea8f2412fce0951c0170c6e9b51d54bc838ad46967662aa7d7b963c9d8a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-osx-x64.pkg\",\n            \"hash\": \"0fddf272948d9a4a15b0403063b8387c175aca4b4e4c846b274f2de1953918c33fa1a114bb38679b0503a2e0befef598c75634d9c19817fbb1691cd7389b0e48\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-osx-x64.tar.gz\",\n            \"hash\": \"5e78259029205a973bc5eed2bb91f8b27efb5e39b5933630665fff6c707615d178bd5aa6d7c3529e5c77471f133954e6d4ed400973f1f64c4856e54f6acfeb21\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-win-arm64.exe\",\n            \"hash\": \"ed742300e8f81269e8eb849105c039601c626bd979f39c026d69805e6e843f159b01ce9bc0415b4ebb0aac25ed3fb69a921e3dbc5bf60b3e95e81f2d93d03c38\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-win-arm64.zip\",\n            \"hash\": \"14d490d493067d6338a68d5508cccf10b1040896e7acc5e01a12e2b314bb0662168137f156f739090b55bcbe49eaeedb0b340f4205c0d3ef408a5b2c1f23d1aa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-win-x64.exe\",\n            \"hash\": \"f8c6d7d379ec9ec8e39e6ca20c6015d7c2d049eecd06045818fe95e87b3e515adbdf445f83b79241248fa5a3f3093ce4bf6f7f67cb9f7e6c74e03523a70d9fd5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-win-x64.zip\",\n            \"hash\": \"a7bab56bf94a4bcce11d4aac922be927701587afdeffd11a8026200d316fe9de35fcfb68a269170466ff10e02f39083481c86c825b770cbdef76d6a107eb73eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-win-x86.exe\",\n            \"hash\": \"8f4e4387b79072c15e04086c8b3eb48ac9e239881b002f9d66d3c8f1d0b9e5c07856705ed863272232fe3396fac2b13b7694a4a9a93f2cb7a784b38b144ac717\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.12/dotnet-runtime-6.0.12-win-x86.zip\",\n            \"hash\": \"0b3a8f5f660a53a38ff59ca8b2fdd27a486440293dbbcc8668bb7bae275ae848d36880f5ef087120cb9f6c11a993a9376a6ec96a9dc9fdc8688973386b7ab553\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.404\",\n        \"version-display\": \"6.0.404\",\n        \"runtime-version\": \"6.0.12\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-arm.tar.gz\",\n            \"hash\": \"1b9b5e0c45f90a4c752bf6990e5dda4110403a62392dc78abf9145c69b1d329b2630945a88cb4d7756322b188b7f4a9334bfc376067edff5dcfabfd85098d7d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-arm64.tar.gz\",\n            \"hash\": \"7c58595aa57b655ff5a268ae4fc680ff3fb15a84dcc0ce84ae7eb25ba27bf66f0c5273c985f15034583f5b05437a5354db68c4064953030dc4caebb11339ac76\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-musl-arm.tar.gz\",\n            \"hash\": \"d7818ea567db81832cfeed5057c42255d2f19750a741a2cbc57e2d7134267a27e9937f86846b30f393c6f0ad2dbf0f4c73a902ed78b0de56138f077f62f34686\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-musl-arm64.tar.gz\",\n            \"hash\": \"999220f7247881d44c7f5a429b25c04d31044a1b91af5ede3f899df142af2d9f056a4ac6058c9e56f14b014a479f3a7455bd499f42f8e0f9b4fcacfeabc023b5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-musl-x64.tar.gz\",\n            \"hash\": \"5313d8cbb41e27f462a141914f852e3d3e729886ce063be82778e1444df2d44dadcd2829f60ae97ae300d19798fab9d3b3932a7d9b9d00e948a80ccebbf5e106\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-x64.tar.gz\",\n            \"hash\": \"7a0f4b308d3fe98df9b426b0f8f8fb7bd7247244af3570e867a3969349c62c7ea4c6da81a1a2280788e300784167a2933db523f461985aef0681e0cf14bf8f0d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-osx-arm64.pkg\",\n            \"hash\": \"bdbe99a63cd0d4a3bc99df749ea75c5ddb79f561f2c2c3dfc0c4b6f0c01f3e09e9c31be857d783e4be337b23105fdcd650d97279e4dc99aa1aac472021dca2d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-osx-arm64.tar.gz\",\n            \"hash\": \"e6847c080862d67eda4bfe912665164f0455fb30089fa07e2076f75fb0a65037c2bd6c213fde1ef9be59d142ba8f3bf41c272d916e5c67f2fbcdc2e1f077064d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-osx-x64.pkg\",\n            \"hash\": \"606ab0c21bd5caa7aa88899f07c0860cb05330b6ce45abae1e63034a08f47942b4c4252abc0866e67e7c07c080978be4573793dac7cb52e9a2fa89347e993053\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-osx-x64.tar.gz\",\n            \"hash\": \"1b0268d9043946d306bb01aecda2857a031f182078ab853da9347ebe88de13147aec13273bd38e4590ad1805c091e694547997941c7c5fd6007d265318ed0ca4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-arm64.exe\",\n            \"hash\": \"e7348fb73d420bafcc7177dd519bf83c0fd8428a8351c723fa2ecabf957fc6e9e12e045fd65a445c01239a6668d3c878dcdc60e7af02dc16477aa798e8003b5d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-arm64.zip\",\n            \"hash\": \"fe8645f6c595e118a2e50747ef85472061b5ca52fc64b0512bdbc8491bfd41b8ae52244facb16d5dce47de32c33ee8f65d7a59b4c54923aed2b79e401459ad09\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-x64.exe\",\n            \"hash\": \"4e4f9f2ad0c74aa69f488e50c8722caabb55bf8cdeca7bd265713dddf2870d2ba0978798b55d44b0f5ba2ecdd979a6d5faae79cf9645270bd5fd2a21d1fab35d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-x64.zip\",\n            \"hash\": \"af6cf26ca940605c354f537635a24f7f8b82200171bccfeefa993c51d56039f0a0e298fba9bcc44a569f8c612e681fe14de5778c892d43b1c7d69d38bd98893d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-x86.exe\",\n            \"hash\": \"2a6e53d0c3a80d4f9d0f381aaa424a0e8a0e9910b93fcd4614941707e832dc29cefa0c86a4f71e1f6db8ab386ec28bec9dbf3b5c5eccacc384a02549cbc42df9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-x86.zip\",\n            \"hash\": \"b1bafd271b519e908e54de986d2c8da7390cd50609a7c38bd2e9d12ded98e6991d858957cc5f62a980fa3b572150a60ddefe7c8d27405c07b9bb8d97088798e7\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.404\",\n          \"version-display\": \"6.0.404\",\n          \"runtime-version\": \"6.0.12\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-arm.tar.gz\",\n              \"hash\": \"1b9b5e0c45f90a4c752bf6990e5dda4110403a62392dc78abf9145c69b1d329b2630945a88cb4d7756322b188b7f4a9334bfc376067edff5dcfabfd85098d7d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-arm64.tar.gz\",\n              \"hash\": \"7c58595aa57b655ff5a268ae4fc680ff3fb15a84dcc0ce84ae7eb25ba27bf66f0c5273c985f15034583f5b05437a5354db68c4064953030dc4caebb11339ac76\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-musl-arm.tar.gz\",\n              \"hash\": \"d7818ea567db81832cfeed5057c42255d2f19750a741a2cbc57e2d7134267a27e9937f86846b30f393c6f0ad2dbf0f4c73a902ed78b0de56138f077f62f34686\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-musl-arm64.tar.gz\",\n              \"hash\": \"999220f7247881d44c7f5a429b25c04d31044a1b91af5ede3f899df142af2d9f056a4ac6058c9e56f14b014a479f3a7455bd499f42f8e0f9b4fcacfeabc023b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-musl-x64.tar.gz\",\n              \"hash\": \"5313d8cbb41e27f462a141914f852e3d3e729886ce063be82778e1444df2d44dadcd2829f60ae97ae300d19798fab9d3b3932a7d9b9d00e948a80ccebbf5e106\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-linux-x64.tar.gz\",\n              \"hash\": \"7a0f4b308d3fe98df9b426b0f8f8fb7bd7247244af3570e867a3969349c62c7ea4c6da81a1a2280788e300784167a2933db523f461985aef0681e0cf14bf8f0d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-osx-arm64.pkg\",\n              \"hash\": \"bdbe99a63cd0d4a3bc99df749ea75c5ddb79f561f2c2c3dfc0c4b6f0c01f3e09e9c31be857d783e4be337b23105fdcd650d97279e4dc99aa1aac472021dca2d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-osx-arm64.tar.gz\",\n              \"hash\": \"e6847c080862d67eda4bfe912665164f0455fb30089fa07e2076f75fb0a65037c2bd6c213fde1ef9be59d142ba8f3bf41c272d916e5c67f2fbcdc2e1f077064d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-osx-x64.pkg\",\n              \"hash\": \"606ab0c21bd5caa7aa88899f07c0860cb05330b6ce45abae1e63034a08f47942b4c4252abc0866e67e7c07c080978be4573793dac7cb52e9a2fa89347e993053\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-osx-x64.tar.gz\",\n              \"hash\": \"1b0268d9043946d306bb01aecda2857a031f182078ab853da9347ebe88de13147aec13273bd38e4590ad1805c091e694547997941c7c5fd6007d265318ed0ca4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-arm64.exe\",\n              \"hash\": \"e7348fb73d420bafcc7177dd519bf83c0fd8428a8351c723fa2ecabf957fc6e9e12e045fd65a445c01239a6668d3c878dcdc60e7af02dc16477aa798e8003b5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-arm64.zip\",\n              \"hash\": \"fe8645f6c595e118a2e50747ef85472061b5ca52fc64b0512bdbc8491bfd41b8ae52244facb16d5dce47de32c33ee8f65d7a59b4c54923aed2b79e401459ad09\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-x64.exe\",\n              \"hash\": \"4e4f9f2ad0c74aa69f488e50c8722caabb55bf8cdeca7bd265713dddf2870d2ba0978798b55d44b0f5ba2ecdd979a6d5faae79cf9645270bd5fd2a21d1fab35d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-x64.zip\",\n              \"hash\": \"af6cf26ca940605c354f537635a24f7f8b82200171bccfeefa993c51d56039f0a0e298fba9bcc44a569f8c612e681fe14de5778c892d43b1c7d69d38bd98893d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-x86.exe\",\n              \"hash\": \"2a6e53d0c3a80d4f9d0f381aaa424a0e8a0e9910b93fcd4614941707e832dc29cefa0c86a4f71e1f6db8ab386ec28bec9dbf3b5c5eccacc384a02549cbc42df9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.404/dotnet-sdk-6.0.404-win-x86.zip\",\n              \"hash\": \"b1bafd271b519e908e54de986d2c8da7390cd50609a7c38bd2e9d12ded98e6991d858957cc5f62a980fa3b572150a60ddefe7c8d27405c07b9bb8d97088798e7\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.307\",\n          \"version-display\": \"6.0.307\",\n          \"runtime-version\": \"6.0.12\",\n          \"vs-version\": \"17.2.11\",\n          \"vs-mac-version\": \"17.4.3\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-linux-arm.tar.gz\",\n              \"hash\": \"584630393e81a1f26e2b75d21f2984db78f2de7f899a13ba480e46761624e461a23b4467eb06a1679587acb7c22fa8b0a7012bfaf85a6db393050609f609db8b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-linux-arm64.tar.gz\",\n              \"hash\": \"c021ca82ef65aabc5a02a1ebcb117b05583b7ab8bd04a8514e2adc29ac8f0d4916b83544d1ceb0cab089e6b3e6ba541abd95f69fb0b888e04ceb76a9d4912e85\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-linux-musl-arm.tar.gz\",\n              \"hash\": \"263cc04a47d902fdf7743023756d5fbc05f2608ec796f0896a9aa77dc1af40f51cafaf51be19dd1cd3ad6cbbec44c0849280e8fbde9af5b9b2c1e51b86525838\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3b00fe14bbb6d0b0f02b3fa78d88854b907ac5809b53b3d3b69f2663f77c8d7721afb3dde6a71db5ddfd42f8e3095a4f4ab48773d221d6da53da7b649d3a48a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-linux-musl-x64.tar.gz\",\n              \"hash\": \"0b9628c6b27d4efc1992eb326a94f08b220f965b483fe4dd874283e3b53f7d2a1071ec5190dbfd081dd3d2ed5ac8ab66779e0d039683956bf7d50be3ba3ad334\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-linux-x64.tar.gz\",\n              \"hash\": \"7fff3c356775bd0fbcda53344983f18bee2296a13a514f8f4cff92dc9aa2207c165495304d7e08855f35f360adfd64d9c27fd10549adb9ff7183297bd7940d62\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-osx-arm64.pkg\",\n              \"hash\": \"d6e8ca48324781a863346e25997f652545f4f39e2f0bf7afc3ff1228280f9281872e532177f1b0306d4b8c4d96d8fcea564a5d587d0d49a36dcc0c6a53261919\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-osx-arm64.tar.gz\",\n              \"hash\": \"c7119491de7c2b724b1f59c99ab457245c81b4a1a94407ad928927abbb5fe9fc61491d27cfde2ffa3d04593c2f5fc91afc1df7c6da215dac9e1303f363aa7c98\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-osx-x64.pkg\",\n              \"hash\": \"71413011f549e82dd100ef2cf88b44dd5c2ab0ef6c557bd12ccbfcc2d20ba38acf279c4e33927cd25958c4116ad4d3fc2bc5cb6a703b6d75d876a8b8eeca898e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-osx-x64.tar.gz\",\n              \"hash\": \"35efd15ae197996c2a648e366192ec719ee4a526899831c76e160c412dab3ce5390a4bbe838ee1f072f67f6a61547f465c98f9570cc43ce3b2744d007378ca80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-win-arm64.exe\",\n              \"hash\": \"3cf940ab63aa87ae97dbfe7c96467d9150dcea7a0969a1e60b8a1236db6ecfca1c0e6b6c2f46c55fd35b7de12cb2c33e73135eba7812bbf6c5daa388cf49014f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-win-arm64.zip\",\n              \"hash\": \"87e2e066c50ad4921e265810fa54a1f0933bf35201420cac305a2f8a0fc9e4a8fb592872dea4a16c09a53858df92b6ce75b45ab8d462dc315053b04b76d6d95e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-win-x64.exe\",\n              \"hash\": \"f0a2ce36141834a25b19fc0736684228e111b51d3c69860895b7950220fdc693e1046306932508a9001fe62e5dcf6566169bbcef8d29ae1d4bbd671ce4673b28\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-win-x64.zip\",\n              \"hash\": \"dc99a4000b69ac3b04b65204733cf2fb1b18f8814a9783e56a061eb5a5d5f5d0254fb5b4f2283b380310f8ae1e642ac4a0da6ba910f0f77a88d6e553338d356f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-win-x86.exe\",\n              \"hash\": \"8020c16916c5921b7e1f6b3c0c8601f79db849683e832264089b3f73dd08ae4ba0a1c200ceebfc7bc03d3e28843ae76665aafce6cc5265e47841e227d957168a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.307/dotnet-sdk-6.0.307-win-x86.zip\",\n              \"hash\": \"20edacd0fd81c0b1275f64bcc31f90169ba3a4e90c14e18a9873ac006a5201c9d33d25ba9f36dc8b0f141eae0b5a0d67d25835fb0eec33af43f4f8556356faf0\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.112\",\n          \"version-display\": \"6.0.112\",\n          \"runtime-version\": \"6.0.12\",\n          \"vs-version\": \"17.0.17\",\n          \"vs-mac-version\": \"17.4.3\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-linux-arm.tar.gz\",\n              \"hash\": \"47f255e6c167ba0534559c2d189a73178a6bc6ddde813a6dd2e4e328f598181119fe7c159732d4e65255fc2d4fd731ff1b0ee929979084ffeb2730ad7ed74d75\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-linux-arm64.tar.gz\",\n              \"hash\": \"55b8b0b71971ed65f9096d3d55d8474c6768da188ee3f7c1c6e1051934926430869f058dd45c9dd9789563acdfbee973657ecea31044c587b4a87a95ab4ae800\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-linux-musl-arm.tar.gz\",\n              \"hash\": \"2d0bdbc564853ea9c6daf4a1fb7940c28bf3a766ef857a4fcccaa42f8b3ccda53f8b968b83187e1387a8119502175a8f92215a24eeacd843c018a01b44e140cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-linux-musl-arm64.tar.gz\",\n              \"hash\": \"6000baf38c8b92ea4c71ecc6b3f2dcffbe6e0b3d3e8846f7c296180d0ac1d94905542df3453dc8fae16c3ae351d6380f053017d86207c2e58affdc67c93fff1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-linux-musl-x64.tar.gz\",\n              \"hash\": \"6d23a7fe8dbddb0785811271326aa3f0bcd68db85c1a148c4e21eb6fd7347a1381dac9c077e4d01c17b08570cffea4b4cf43f78c3f83c2177e66a8c4531c237d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-linux-x64.tar.gz\",\n              \"hash\": \"0215268594196931c038c0957e41ce73a3b12501f7a15ea3f9a6bd73c1191747cbc42aeedfe96ee0f7f3a2f5811c7840dcbb230797ef47f659794fe3113bddca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-osx-arm64.pkg\",\n              \"hash\": \"10d8f91163cf89853a7baf24e3d4ec5b9dea8b788e9caefeb8bf5b91c684bdd776a0580914bb45963ede89f3f4070f04033d7e2100f44ffcec53e6e5a21a7ac1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-osx-arm64.tar.gz\",\n              \"hash\": \"eeecd33983e405910c028a2eaf6b1e4c3f87c4b51b3b73582d7a282a55854602eafe23e5b2983e58249d2b03a05373b63bc3cdf9a6f89e2b82a986fd23181abe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-osx-x64.pkg\",\n              \"hash\": \"fab63c44c1baf47bf723d68665539a8dda10c425564101ea5d10fdee8d05dcecf43813cf747bd8fdacb4c5bccb6b5132381742c8bd2c9c9c6697e981e228fcee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-osx-x64.tar.gz\",\n              \"hash\": \"40042d3df1832186041ccea2ecc62c48a0677580f6484f302f972b4af1c20f9a1e2a7cee400136561e16102b087b9621c8fe3aca8fa3f74777e6c22f1323612e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-win-arm64.exe\",\n              \"hash\": \"f6e634353e4cc2927568710bb934838b763880cf89c0d29cde13d98d81bf8137418713bf37cb0219f3963c2f95f41471a74e3feab58379ca534fd6ad8cb2c2cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-win-arm64.zip\",\n              \"hash\": \"4f7ef35bc00f9d501a716eec27f167213b9ed176d92c48374605b73ea59393a0b684f554283a92bba79da2fdbc5e0fe9b3a050d0fb7e0c36537d96470428ac03\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-win-x64.exe\",\n              \"hash\": \"a12b15eaf4c6cc7aae89f52e04f3f261bfb4e1c571359fbf4e52aab7ff476c1065f4dfd50add40f8dd1e03205fc1f465f7baa972478da3dcc2198b4d52a448a7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-win-x64.zip\",\n              \"hash\": \"be377a8cb28ff902b0189dc407a434aa243d1431006d87b32ea4b6ddebbe53da1f44849a86410e8147fb3cf0b64f922d27ff4a96ddba131550f9c6c3566e8a70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-win-x86.exe\",\n              \"hash\": \"c2e990a62dda1d01e9148f78e7406da111c29d60936b1b700641a0828cb90f6faf9be0ada4f0d4687565ff96ab42a47417b692080cf16accdfc59e1a08194835\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.112/dotnet-sdk-6.0.112-win-x86.zip\",\n              \"hash\": \"d0f203b80db37373c6958542041f986e87667952d5610e3c689f40b16b9f725bd357bf28809713536affcfce21278b60cf01122235dc3086a52c2d3ac131dfca\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.12\",\n        \"version-display\": \"6.0.12\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22325.12\"\n        ],\n        \"vs-version\": \"17.0.17\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-linux-arm.tar.gz\",\n            \"hash\": \"5d9f82149017b32cd4f0c5b5c096020d9500090173f43b6cf18c89e731c2d48d8d54bf888485c2e53c50b8df638d3ab881a28ef3e20fc2c6388a03f2313ca57a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-linux-arm64.tar.gz\",\n            \"hash\": \"0e8af3a78b25e93e679665552c1b1d1e9ce9c141fed41494304bdd8da45cfd404a53cc692defd24e6629c3fde0f58c0eb09b1c22edcb22f04b77072e8a57bf79\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"033b029eb949dbd663dbbe7254a7f8e967ed85935736d2529aecc720324ad8ac4e34231fe0c3d6b84f0b9e01fc62839095fa8a33033b4e49da91ca00af7e87cf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fdb4a5df648429977e4152de49e009bb16e812143288b2a76c5ab8e4f95002dd2b911b4a08fa7cd03df25cec2e81c7a365eb608ccc5803ee902c742ba5c0dc66\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"081f1cddb00d8c86877d594ba09d38a2af51184bb253c33a57ed0893c828a44a1d68c2c244ed6f846f4732c2903aa576a3d3caa5c30ed03c6d2aa59f332e5ac2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-linux-x64.tar.gz\",\n            \"hash\": \"4ec1d315c434b4be9d01b07f12be7c5707c12703a48c26ea2fa00fd43502d89a28c4eea27940165c0c607209e8a6c5805233a8fb576309f2e6662d026aaebb05\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-osx-arm64.tar.gz\",\n            \"hash\": \"70c495bb839fa4d5b4c7a20c5fd5afd5be9235098b06a3711e3b3cdba0473b53ca27704f9c74296249f60f2d59da8c13b17a5b554e8abd83f898b8374ac806a5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-osx-x64.tar.gz\",\n            \"hash\": \"cb0b09cd252e14b8ec3823aebbc4eb092d635ac6d50d3218ecda61feceb8897e561595c9c449c92f572f9e54a56775a71ab0524682cbe58fa32fbf38297ba10f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-win-arm64.zip\",\n            \"hash\": \"ac019608aaf066c4ff5b0bb77e2dfc41d20924cc0314f7ef1713055beb7977d6ffa94dd1d8cb7b36348585f9b38ca5a06c7bc97d3fb4399088b220245aac6756\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-win-x64.exe\",\n            \"hash\": \"9ecc376194cd5e1479cbd5dc45f2bdfe215b1780d98f1098dc34fd98ac6cf106f19dbd0c610c27aebef5897187b9ec216a41dd60070519871eaa4eb4cafd0abb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-win-x64.zip\",\n            \"hash\": \"283d7ea3bac595dbffb7bba8c7bf6aa8553666bab88f6313f0999058a0ba54943ba33f14639517110f9544b27e9bb9ee0fb933bad3d82d950f3262223ecc1659\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-win-x86.exe\",\n            \"hash\": \"60faa13a92854062c8edf8237eb59470ce4644206f02505cabc2a2dd0b979433f14a3c1f30b3935459536b55f039bc4d59222659fc8ce7b0ff2ecf1eee55b293\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/aspnetcore-runtime-6.0.12-win-x86.zip\",\n            \"hash\": \"58f136be353fbcfd305c438c131b2b6826dd3d1b70dc9107f06a010ffb9735f24f1c60bae9b3e5928e88fee78df7333a45ef077ceac5b991b62125a2fd082c95\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.12/dotnet-hosting-6.0.12-win.exe\",\n            \"hash\": \"ad27f7dd47e0e0fc7d5b45785a8b4943c4d5bd36bb566c4974b60cfd4837f591987e405a22005169d3d494ff6dbbe196f4f9529847e035b0ef780ca33ee46d7a\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.12\",\n        \"version-display\": \"6.0.12\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.12/windowsdesktop-runtime-6.0.12-win-arm64.exe\",\n            \"hash\": \"0faa82a4bd2dc4a45205225eb1e00e757f83ab7b81bf18f74b4d54fbe822f1c4ad93006994b2fc795952536ade75395c97bbed9471dbb3d302fcffe6e5c2abf0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.12/windowsdesktop-runtime-6.0.12-win-arm64.zip\",\n            \"hash\": \"d5d3f6ed53dd02b64fa1379bb8b7ad68b734c2b4670851d4f673409460bdf635110be0049fc264df5c2c8985fdb659d52e5e89ba5e735fd82cefb5b80e9806ed\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.12/windowsdesktop-runtime-6.0.12-win-x64.exe\",\n            \"hash\": \"7a827acfb4c982b05734db73a1e46f8f50536bc34e9b57abff46e5b907adf5dcf67331764cbe17ba17a1bf9dcce598f7c88605bf3dbed7111ad5a1ef1bcad42e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.12/windowsdesktop-runtime-6.0.12-win-x64.zip\",\n            \"hash\": \"dee03d92a049f2f05fa63d0ac22378d877874ade236b32d70424825b800cacb8d46382dea09dba4e285e633f56bfd783335a7c54fb26961cd250221e9a8f0acc\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.12/windowsdesktop-runtime-6.0.12-win-x86.exe\",\n            \"hash\": \"962fdbb6b17a0e668c30948a7808782dd6672f78e458624c5aa69617227cdf5bc69503937b5ea6c027f7010da9deef6ae7660ee5fa6e86f7b59ee81df2f570cd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.12/windowsdesktop-runtime-6.0.12-win-x86.zip\",\n            \"hash\": \"4ad9ec4a01d098ee1143e194d701760a816027ac0b206e152aa873717100624927a12e31a946587734e915954d94aa393a5ed48c8502057c903079c6dedce6bb\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-11-08\",\n      \"release-version\": \"6.0.11\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.11/6.0.11.md\",\n      \"runtime\": {\n        \"version\": \"6.0.11\",\n        \"version-display\": \"6.0.11\",\n        \"vs-version\": \"17.0.16, 17.2.10, 17.3.7, 17.4.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-linux-arm.tar.gz\",\n            \"hash\": \"a23ed056a95787c18ad95e7c3fa85fbba074536bad167e6aebf26136ab633fe491f2eb3bc20eafa62418e74a90bcee55f6dcd5a7cdc8d3dcc17ba66cd7059f3d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-linux-arm64.tar.gz\",\n            \"hash\": \"c889e70ea0b2224eb9163cca6a57cbbbbb8213a551770dc5c9f08d8d49fec1f38ac4802435cc9509baa03970823666fe1dd80621e6ee8592c27b7e639643e5d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"8bb033accd7dd35fb528aa0155c2fc1fff27fda86e66dcb02d267de4e7193b20d0af9d63fd7796aaafb5f2845e95f6be329f2138d24684bf8b72c9507ed83ee2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d1d74cefec7075ba9a1fb88cc53afa677c88275b1ad431df4fda78c7e239a42e1fc14f3c7dce50d8f5505419540062dda21537363d9797ae71317b6206a4e906\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"8bc10a7a6e08783ce89d047477828a001b7b12a959cd3c46d1013d2ab8dc65cda35b466924006f63b317e0d7301641097fc3fdf262c5e72990376ab34956ea92\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-linux-x64.tar.gz\",\n            \"hash\": \"9462d73fd3f72efaa2fb4aa472055f388da4915e75cfc123298b3494f1dfd8d48c44bfa6cd5c41678ab7353d9085d05dd7f1fee0eef20c11742446e3591e45df\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-osx-arm64.pkg\",\n            \"hash\": \"d5d626abdd964ccfed85cd50ab31343d620398823633d05d6b5d6cf91869fecfe2ee5d42c241d3c88d93b512836e62fafae73b4fd680a2b5cc1cb963a91efaac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-osx-arm64.tar.gz\",\n            \"hash\": \"0fe0a7f88a1c99b682a0f60d60d6d1954b9ce185450fc21e3700f1e0b2b1b58ae7412cd43636bc7e7ef9d1412d38661df772c946524c5659d05b8945fdfb468d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-osx-x64.pkg\",\n            \"hash\": \"d78149b896aa06a1d1b36bd3a5c68c33c2033437b979d525924d416d206c750acdcf135d9b750f472958ae8ba017bce25a3ba1b012bfd774af7bb5fa8d176170\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-osx-x64.tar.gz\",\n            \"hash\": \"d8df6aee071b9c59672df6c67cb56c87796d9204a5fb044bd9e7a6fc7d5f83c84e0ee5ec871d57f38a226f57c70d18e52cb35a6520d26d94b335c97a860e6c01\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-win-arm64.exe\",\n            \"hash\": \"8a2801c0d259f078ecc27a6e398e4e49dc302d46070c11b27f2fa3bfb4c49947f780c8f7f88f9590e3cb505dbf2ce15d55fbf35261b71f278fed8c50e4f98dfb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-win-arm64.zip\",\n            \"hash\": \"b84ee80c69a6568c93082f5b7cea35fe91b891dee893bfb18c7095c2507e230836a4bd21771327e44d02a0ee9ee19778369cb8461c562a0cbe7be4edb4d38a35\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-win-x64.exe\",\n            \"hash\": \"52833b37bfb8076cb1c921d3e2ed6d56d38d75c4b69f5ca6f2f49d9d1ad7910504b26e4e0a7953c58040eab365cce8e77d8cbc33d84b2307a920cf40efb25238\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-win-x64.zip\",\n            \"hash\": \"63f33c7e4995c8aecd68148f6c6eb41ed72df8b7668fc510ce205cdf6060d398068657c3a392b799a8bba704a8f10ed1700fecffe932e6f13d3a44b18180e8ff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-win-x86.exe\",\n            \"hash\": \"0952373e828ed1300645d83d671258bc7ffd920808afaf1884ed9f2876740d08948e3273fb3a381e29d3e718de0d178616236e338d686e17dc69abd82cba2aaa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.11/dotnet-runtime-6.0.11-win-x86.zip\",\n            \"hash\": \"4ba1065fc57bcff8fb0eb0042239583bd23b7edc4681173a80eb16259f21fb9b3b7f277b87d7aad6e62e4dfdf87f6dac433f4dd8eca4dcb69649fe259c0e2e02\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.403\",\n        \"version-display\": \"6.0.403\",\n        \"runtime-version\": \"6.0.11\",\n        \"vs-version\": \"17.0.16, 17.2.10, 17.3.7, 17.4.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-arm.tar.gz\",\n            \"hash\": \"b07423700a92e3cc79f4e9e02c40e923352c09958e3307fd2ce7fc882509460c65a4404e8080f1b3852af98458512699ba43b37683916756666b4e2532cc8f46\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-arm64.tar.gz\",\n            \"hash\": \"fe62f6eca80acb6774f0a80c472dd02851d88f7ec09cc7f1cadd9981ec0ee1ceb87224911fc0c544cb932c7f5a91c66471a0458b50f85c899154bc8c3605a88e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-musl-arm.tar.gz\",\n            \"hash\": \"bdbc32779eac9143daa8ed930278245ea2ea940a335d4b09a54d80d4ac07c4df8d71fbc06b7bbd531737f3770746dd9db98d469bb5a292ab711c2905c2832a81\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-musl-arm64.tar.gz\",\n            \"hash\": \"caff2f691958a049c1c70ca24f62df2cf9824314f05f1e0cf1d935c1bd9288ff08a3e70cc605e532ae91a12140edc472768cf4510c9a3c73c0c1c9d56e5a1dbf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-musl-x64.tar.gz\",\n            \"hash\": \"c59623a6ca6f012da5e584ae538a5106d4e59a9f3198c259cfbc992d163a5e4676d24c43efb533ffc70172d8ef584e90675043555c02bd9a31f3781c77c81672\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-x64.tar.gz\",\n            \"hash\": \"779b3e24a889dbb517e5ff5359dab45dd3296160e4cb5592e6e41ea15cbf87279f08405febf07517aa02351f953b603e59648550a096eefcb0a20fdaf03fadde\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-osx-arm64.pkg\",\n            \"hash\": \"1333788247c86df49df2466d0d0152a07457f2c5dc0c899df4a2d84d721530a9897d407113145df0b41dedbf69b51e70c4732988c7e8ea44b8206b8ed70db389\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-osx-arm64.tar.gz\",\n            \"hash\": \"1210ec9341f7ce192b2a006b1e5d98385e1108d016b0db3c6eb5ac5a1ecd6c9384fe26b62363d3a885e5ba26ec50cbe483970563e897bbb274568990aa43810b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-osx-x64.pkg\",\n            \"hash\": \"54df2010f93922a7f41b7e3cc8ab4c502900a7e8735df0101b5f678216b07b6addc0f693a33736d7798f150b3570cc280d91d9314667ae12c1d78a09a27b575d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-osx-x64.tar.gz\",\n            \"hash\": \"8a8b6f86f09d0c5a8dbc35f6adbb14cbb2ed10d1bcee0a15e717a416c759f824b2453fab0b76e0826c149612fe2fb8bdfc3f8827383dd3f8f01ef5497b85d589\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-arm64.exe\",\n            \"hash\": \"fb6d04c920c49d3830d9477d93ab49ca9eb7d51f5ffd4f3872968e789a623a1d6a79f2379b0e723fb0c5a92df6ad027dc078b3270688145af1b4fe9643860566\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-arm64.zip\",\n            \"hash\": \"f3213ac5e7551102be48ca5c65fe098714a79a03ed3111d368ad07eb85ac22fea4c05a356fe742feb231e76f4d3e510954d4235631e0686d19bb0cb2f02b7e4a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-x64.exe\",\n            \"hash\": \"cc30833cee9cf74cb3c0ac16eab5a96345daecbf73be9d8de1e9ec221cb270a319374fc8b35f28432379f35b39b6e3306e06ec93696be7d4a6c69afc3d676884\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-x64.zip\",\n            \"hash\": \"8f0c99249f34724d99fe2e7b8955098b5f5531dd9c7199453f1a5f066981de58b8324a5dbd92548e665b1c208c241f9603d8a18ea51b27fd4fdf0c17abc7392b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-x86.exe\",\n            \"hash\": \"5748cbae31661853bd0e459ef80f3767f8c925aec90b43c81dd44c21f591f9514b39dbf13a12edd34287ab90a6b0007aa92e6e80ae01b510abc058930b47a884\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-x86.zip\",\n            \"hash\": \"a37400428f755929bc75a6f8b0aa0aea7f631b1ae3727a38682c7dec312d586d21357c071f3180a0333ed339e7e1b3dbc9f7666a8a3d12c27fdc35f821e5a849\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.403\",\n          \"version-display\": \"6.0.403\",\n          \"runtime-version\": \"6.0.11\",\n          \"vs-version\": \"17.0.16, 17.2.10, 17.3.7, 17.4.0\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-arm.tar.gz\",\n              \"hash\": \"b07423700a92e3cc79f4e9e02c40e923352c09958e3307fd2ce7fc882509460c65a4404e8080f1b3852af98458512699ba43b37683916756666b4e2532cc8f46\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-arm64.tar.gz\",\n              \"hash\": \"fe62f6eca80acb6774f0a80c472dd02851d88f7ec09cc7f1cadd9981ec0ee1ceb87224911fc0c544cb932c7f5a91c66471a0458b50f85c899154bc8c3605a88e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-musl-arm.tar.gz\",\n              \"hash\": \"bdbc32779eac9143daa8ed930278245ea2ea940a335d4b09a54d80d4ac07c4df8d71fbc06b7bbd531737f3770746dd9db98d469bb5a292ab711c2905c2832a81\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-musl-arm64.tar.gz\",\n              \"hash\": \"caff2f691958a049c1c70ca24f62df2cf9824314f05f1e0cf1d935c1bd9288ff08a3e70cc605e532ae91a12140edc472768cf4510c9a3c73c0c1c9d56e5a1dbf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-musl-x64.tar.gz\",\n              \"hash\": \"c59623a6ca6f012da5e584ae538a5106d4e59a9f3198c259cfbc992d163a5e4676d24c43efb533ffc70172d8ef584e90675043555c02bd9a31f3781c77c81672\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-linux-x64.tar.gz\",\n              \"hash\": \"779b3e24a889dbb517e5ff5359dab45dd3296160e4cb5592e6e41ea15cbf87279f08405febf07517aa02351f953b603e59648550a096eefcb0a20fdaf03fadde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-osx-arm64.pkg\",\n              \"hash\": \"1333788247c86df49df2466d0d0152a07457f2c5dc0c899df4a2d84d721530a9897d407113145df0b41dedbf69b51e70c4732988c7e8ea44b8206b8ed70db389\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-osx-arm64.tar.gz\",\n              \"hash\": \"1210ec9341f7ce192b2a006b1e5d98385e1108d016b0db3c6eb5ac5a1ecd6c9384fe26b62363d3a885e5ba26ec50cbe483970563e897bbb274568990aa43810b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-osx-x64.pkg\",\n              \"hash\": \"54df2010f93922a7f41b7e3cc8ab4c502900a7e8735df0101b5f678216b07b6addc0f693a33736d7798f150b3570cc280d91d9314667ae12c1d78a09a27b575d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-osx-x64.tar.gz\",\n              \"hash\": \"8a8b6f86f09d0c5a8dbc35f6adbb14cbb2ed10d1bcee0a15e717a416c759f824b2453fab0b76e0826c149612fe2fb8bdfc3f8827383dd3f8f01ef5497b85d589\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-arm64.exe\",\n              \"hash\": \"fb6d04c920c49d3830d9477d93ab49ca9eb7d51f5ffd4f3872968e789a623a1d6a79f2379b0e723fb0c5a92df6ad027dc078b3270688145af1b4fe9643860566\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-arm64.zip\",\n              \"hash\": \"f3213ac5e7551102be48ca5c65fe098714a79a03ed3111d368ad07eb85ac22fea4c05a356fe742feb231e76f4d3e510954d4235631e0686d19bb0cb2f02b7e4a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-x64.exe\",\n              \"hash\": \"cc30833cee9cf74cb3c0ac16eab5a96345daecbf73be9d8de1e9ec221cb270a319374fc8b35f28432379f35b39b6e3306e06ec93696be7d4a6c69afc3d676884\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-x64.zip\",\n              \"hash\": \"8f0c99249f34724d99fe2e7b8955098b5f5531dd9c7199453f1a5f066981de58b8324a5dbd92548e665b1c208c241f9603d8a18ea51b27fd4fdf0c17abc7392b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-x86.exe\",\n              \"hash\": \"5748cbae31661853bd0e459ef80f3767f8c925aec90b43c81dd44c21f591f9514b39dbf13a12edd34287ab90a6b0007aa92e6e80ae01b510abc058930b47a884\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.403/dotnet-sdk-6.0.403-win-x86.zip\",\n              \"hash\": \"a37400428f755929bc75a6f8b0aa0aea7f631b1ae3727a38682c7dec312d586d21357c071f3180a0333ed339e7e1b3dbc9f7666a8a3d12c27fdc35f821e5a849\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.306\",\n          \"version-display\": \"6.0.306\",\n          \"runtime-version\": \"6.0.11\",\n          \"vs-version\": \"17.2.10\",\n          \"vs-mac-version\": \"17.4.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-linux-arm.tar.gz\",\n              \"hash\": \"9ea0273b8e9a7ba0650aa6d989933d959a75f0c6c2cae46b1e6ba23913ddd25c6546275d9a21d540b760a9202fa802a484f713cacd0312405345142dfe452c6e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-linux-arm64.tar.gz\",\n              \"hash\": \"cc49223db9c6309c4f0f7e208dfa07a1e9bdde032c2047b9aa2711e03d8aa0da91da22d728b332c2c9adbc54f423bb7e1dcdcb3888ed9ceef899d6e74bd308b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-linux-musl-arm.tar.gz\",\n              \"hash\": \"e0631a82488262d70ed7b46a4572df636c77616306b35964e79e418a37bbb39a341115c780c0be918d23006e1115b9401f789c930ddf6053552af944a3b1c659\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b7c1ff95d35c1378b4811aa44fa42c72cf94a17e237cc19a7f785b427f888aa841ca3fc0de10792f345c6f56ebfcad1d99be4babd7acf75d76654805e6e466d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-linux-musl-x64.tar.gz\",\n              \"hash\": \"bac8f2c353297bfb4ca71852a282aac7903a87046f565b66f54730d40b9913e7156f1773f83656c74c7bd10fb8ebed8a43708285da6d7ecb2b24cf97d1f0a8d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-linux-x64.tar.gz\",\n              \"hash\": \"6278cedf0183d51dafe58a11bd71612e4b19d10e725e442d57ba45819a55bf4d86caca0c3d2a0ef0d32469a828ba85342e0d3ce23eb8ef1444bff228f10cec31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-osx-arm64.pkg\",\n              \"hash\": \"28880d13232a7a86094615f677ca36a1421423812954023c10be9220ff19cc12cc2b90c9c139202b58d751bbb822d94492307226691d4d335b37fd2c9f21664d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-osx-arm64.tar.gz\",\n              \"hash\": \"ab6a9620d53786e5723393e991c082bf6bf73069096ecbf2c6e7e5eeef39aa434e17154140644561db12ac1f0cf1d2265c6c39608088750d4add74b3409360b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-osx-x64.pkg\",\n              \"hash\": \"9e7f744fdd8b4a1d1c5a237b59acd23c92f64789bad799c91ce9874ee4f89cb5bd43bbb0010acf0aa5c05e58c48ed7a4d823845afb367cbed438dbe4e3b55dba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-osx-x64.tar.gz\",\n              \"hash\": \"df319f562b20c1fceaccd0d328fbfab3ac5f2363adbf63038a9332869b32cf7090d077ff3a783f3d7c12a9a00f1b15412d01f33d586b2ab815faf088f9c76685\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-win-arm64.exe\",\n              \"hash\": \"bfbfcab99fc1a6329601fe4e186aa500aa196527feb906fe11d81dde91f7a20159982b5e37c15ba6afe43aad454a3b9aaa103783c6e258fd9c156dd02d6d87cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-win-arm64.zip\",\n              \"hash\": \"40a59da6264e30bb03a837d46f3c8a14e894be25e6f1e60ad293c53430af36c455caffb93d91be07c6c2ea83f9a1e3e6916ab167021ac4fe2afa00e8a4ad1492\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-win-x64.exe\",\n              \"hash\": \"3f40daa9688cc4c3c437a0d9441c11c6a3ce6333e0271d912066f2ee2e31d292e05cbf53e66a9050487ff515c7ba6cd8bdfeb465415753c9f961028438442952\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-win-x64.zip\",\n              \"hash\": \"0fc8df00fd30665c7dc36173c16b39cd0110638315771defd2981a595018838c045df23c1247ed1e1fe766cf20112fcebf59a3f62d3926b73f6585d3405aac30\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-win-x86.exe\",\n              \"hash\": \"8f1636eb7e1f211b4c278de17e79a7a18fd84aca548c6aad9170007ea70fae9e066052b8fbdb5a6cd767ec4ba9c9d58f444eac4adc4a62070292a4330a53d398\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.306/dotnet-sdk-6.0.306-win-x86.zip\",\n              \"hash\": \"14a2623518c35e9c7ac3efdd86805790992560240aac2304f57b2627fc9017c3c8604a9cb21b9355a92c233ef7483ef2554d84aaa4acf2d73a0de450b09d82e2\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.111\",\n          \"version-display\": \"6.0.111\",\n          \"runtime-version\": \"6.0.11\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"9.0-preview\",\n          \"fsharp-version\": \"5.0-preview\",\n          \"vb-version\": \"15.5\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-linux-arm.tar.gz\",\n              \"hash\": \"44388611a84620e09e3adea7ada8ce4e04ef675d54c3a6ef12017bbed25e7c5d100089a700c503e9edc8605f9c0f48995f3b4595bd3179910a6cf4e2c11b1a53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-linux-arm64.tar.gz\",\n              \"hash\": \"7473eef3715c83ff399adaaf2605ae28f0144186024e3a4a5661ca978cc376262203147d77c51476cd88b5d7bdd7b3700221f214083eb77838a41a1357766b7c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-linux-musl-arm.tar.gz\",\n              \"hash\": \"1a1f03e9f75f5003a4afcc2a0299f1920dbecb4c72829a3cd63bd8cb70c722cc20f1d4a58e2dc4c47340d3eae15ac36027197202d68babe40643d5aa617891ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ec555164acb4b27cb7a5e8b7192fd4b8aac4dec1f68758cf1e24da17987c0be1b8cc84c131713d31bf90743d2a84cc2c9b8288097742efa5c14e3dfa0602b4c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-linux-musl-x64.tar.gz\",\n              \"hash\": \"140de0d27b4247f3a7cea7fd03d275dd03be4362ea309114540deb0946a388bbbb62658a885146b76ba13860360976e983eecd7dd048c437e2a80740aed8ce19\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-linux-x64.tar.gz\",\n              \"hash\": \"d61e568890023e984bd414d35308717c1092775a33a90a1ba2f87b0d5f70e7087d264cc61eff29356255b54ec2c2e3b2f48676572a0170289b0448b0fb843be3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-osx-arm64.pkg\",\n              \"hash\": \"425a79fdbd155ba855fbc8e48b4a2fff69ba27d1fdaa9e41a789e41d0298ab4f1ce3b571c53507cdf3053b782c2855706e53d974e8dbb8c0f9ae8327795a0ad4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-osx-arm64.tar.gz\",\n              \"hash\": \"f8bbce55d29fab015e334b32de33a25f5316508567b543323e7e62a0b34de490d4e8fa9ab633bafa29e29ebaa9e09023004b8911f56448990b485c49e6640b7a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-osx-x64.pkg\",\n              \"hash\": \"4760b207a01fd04a9fa1071d786ae28df4d1ed1053b4cd0fee3ae7035d1dca9ea20eb6f2b8592e11b1c7f53a8171d8ee84fe52addfaf06724ecab37ea3218e70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-osx-x64.tar.gz\",\n              \"hash\": \"249774d5e9d952b15206a4c4e5c20548ec6572202be977d514c517e11e93f2a36c2aa636b5201f7ce690f555fd79aa3e52aa6b5f4520293ea52b3d2d36b3e70f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-win-arm64.exe\",\n              \"hash\": \"8449166aaf5d097d0d4f404d80c323c237ed02681ed805226286d43fdb071be2a9af521a8392646193e587ebcdf33d0426a54016b3e07af27874d6831d327ea3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-win-arm64.zip\",\n              \"hash\": \"64db98efeded1a1d10d25dda48f4707dcebfaa462f22bf84f5f2c5db8d47b7b6166818c4008db6620616546b5b638af18590fb0b5193603ca5d507dbe68062fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-win-x64.exe\",\n              \"hash\": \"1cfd3b9eb33e31cf2da1bd6a28591faf092427da4ff67ae2b2ae9007403f036835802276429910b2831e1ab967bccbde0cc1bed34538f633dc8138800dd948ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-win-x64.zip\",\n              \"hash\": \"ec0608c05dcd226f08cc1d1fcd2486d5a9c7c281e181070c2411dd24e344541d244c1560d65fbc3a12894ee0b48e686492b8f104789b740c056f79a6cccf0350\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-win-x86.exe\",\n              \"hash\": \"b029fe705c4d7f8735e517a9c867cd54be57b03a5b64c70dcddbccdbb41a42ee78cc039726993ab80e4c53baf8f44d9aebb0d4e3784fc82ffb74ba005cd6c0a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.111/dotnet-sdk-6.0.111-win-x86.zip\",\n              \"hash\": \"a4dae83202c5cbe3d12178989dfac29bf4fea1fdc47dadc023ce7af870b2e3f62cd4be064f87229dcbd5fb6d29a72759b8bc3500fd16d0e2b6c03fac817779e0\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.11\",\n        \"version-display\": \"6.0.11\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22296.11\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-linux-arm.tar.gz\",\n            \"hash\": \"f690860acc135675b817615a5db624276bf90eeca1b0b941271068aaf2aa350ec4f76cc4ecebcff7fb4c450be1ea8073279fb933eaf6f2505babe2307b46d35b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-linux-arm64.tar.gz\",\n            \"hash\": \"cf2a469cc2364358e0cd51640e9a614747e60724a99d5151dbd346eaad3779939f741f0cd0a752774a6df51c3e2af5a49ba8e4c5ba7ac02eda192cb7b73d85f7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"89f0a447bc2083228bd5ed59fdc7c113608266f23ab9e793458a2ab1afc13d201c1b476792d6841e29ebedcb86c6a1b064aae041aa1e37959f41079929f0aa4a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b068d87b9b848971f2b18dba841c651d59330e72e3b8259a657d67606dd03808482d80393a8da82c452dcdf90c8d7a5213764d420ac956c94cf69f2d5825ae30\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"6415d01659656435767833f2f19d1f969940710bfbad3ffddf8bcce8b7130b1d5761fa4f0b3167177c8bc91d7fcb4bda6a7ab0014b80a27638f62ced48febb2f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-linux-x64.tar.gz\",\n            \"hash\": \"12a30719aacd5b3dd444d075c13966a4bb1dc149c36bcbc0e685730f08d1c75eb3929749b89a88569ddb48bd8104db84aaee2ee097ac3a5fe6fff60c9f09f741\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-osx-arm64.tar.gz\",\n            \"hash\": \"e52add6045fd30482d3ba1703b41d354f38661ac9f88b1b70aa31d4ff5bc685b8767579b172519a4471beaa3cfdb346f46298da369a5714923937f1af03e353c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-osx-x64.tar.gz\",\n            \"hash\": \"cc5d76404fd1a352404597cfa36def6c06018aac9f53c938d96264fa057534364057531d91c8b0ecfb2aed6c2816ce32c0a67bcae39da241c3ee36cdd35ebe9c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-win-arm64.zip\",\n            \"hash\": \"c8ad6ff3152fc8addebedc0e13c4c251ede096bfe29c699a1e92825e45017c449ed805b4b96c1c9ea86a13207ccc800e581fe572e5668cf7e80f128e0c015aa0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-win-x64.exe\",\n            \"hash\": \"e3d80d5b94100e3333a42b73d9ad362056d95b1bd4dfcd7264a56e9563a9d772aa793912eb8d40c3183aaead8c995eed493a6d6028fcb5f53ea008d1f1ce0441\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-win-x64.zip\",\n            \"hash\": \"d577c00083aa6d85cd6bd92747676285f2a064730f81ad77ce061808f97cf1c5911b130b6b4da0cf83626fc970f8467a7f6361a069ccc2f47bcd9859f654c1fb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-win-x86.exe\",\n            \"hash\": \"11293f57a05d4bdeb86ffef6f0d9816de0eaae08fbeba65ab0bf6514b98b6b43539bcd7e4893e76162e9d0b3c2a5cc1ca1c7cacb7baf603adad7f0e8039b4a69\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/aspnetcore-runtime-6.0.11-win-x86.zip\",\n            \"hash\": \"3e886cb296490044a18774a6bbf21d1a4efefd3d996ae0f9d732d6cf1b94f4e2b88b401f6a2ba15d10012b0775c4e1d39ff33859f96738ab1d3a71524abfd1ca\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.11/dotnet-hosting-6.0.11-win.exe\",\n            \"hash\": \"95183f2a3a017954f5cc7b7146ad79eacea6e26869fb4e780f5bf305d47663d9de993211ad467d070122903d91e340d961445c5634495df9a073ed6e2f05d8d5\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.11\",\n        \"version-display\": \"6.0.11\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.11/windowsdesktop-runtime-6.0.11-win-arm64.exe\",\n            \"hash\": \"19e73b88b417cec96624074f2f6b12ac6cee2bd9524060c64ae5b2d215827f5d4159dde2ba158137afddd2382317314f59cf27bcea1342421116dc2038b3110c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.11/windowsdesktop-runtime-6.0.11-win-arm64.zip\",\n            \"hash\": \"2cf2dfc7de088adc5665aebdc507ebbae53d9a879f0b4079d4de3bb546d281b02b70820bf2d8fcbf22fae2c338b70ece4765aa686c84d39a236d401e6a5c8af3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.11/windowsdesktop-runtime-6.0.11-win-x64.exe\",\n            \"hash\": \"37bef9107a069edd977c135fc54bf84f1b46862ef2636caeb9c7ddd9f53627f83cb69d6ecf79cb640d7979c7ebe80c03b1222c6c52d7a991e6c399c91fe902c0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.11/windowsdesktop-runtime-6.0.11-win-x64.zip\",\n            \"hash\": \"765dce85155e8b5ab5a2ae3a9f5ac18783df0f35b0c7da1900321987499b1c26bacb7df338520c523584270959329b4a2d974e74ead86eb9a32fc9d6e06ceee5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.11/windowsdesktop-runtime-6.0.11-win-x86.exe\",\n            \"hash\": \"b642a16325053b266f2f2475c31e124987dcf0e010076633cfe174761a1ff736a5047019de3cc259d88775bae6ffb4b0f907e0818895fab0e2962dfa0ee66641\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.11/windowsdesktop-runtime-6.0.11-win-x86.zip\",\n            \"hash\": \"6ff0d67b23f7bd2e3f70919d16d1dade5199ff316f7caf34ccd5b17aea5824ee6a55c94aa4e5722a67a6ece8b8cff40fbec277184ef83cfa4b08a401bbe7f3ac\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-10-11\",\n      \"release-version\": \"6.0.10\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-41032\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41032\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.10/6.0.10.md\",\n      \"runtime\": {\n        \"version\": \"6.0.10\",\n        \"version-display\": \"6.0.10\",\n        \"vs-version\": \"17.0.15, 17.2.9, 17.3.6, 17.4 Preview 3\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-linux-arm.tar.gz\",\n            \"hash\": \"75e6c380a00f253d06e33aae36403da2e31bdb4c41705455cbdb4aecee6cec05d7ab95ae90493f44e34360ffa00265a10e8295d780db8ae37225578afbcbead7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-linux-arm64.tar.gz\",\n            \"hash\": \"94d182d2d80f3cc9caabbd12e3afeef4af93269a331b64276985496e4a77040785c25b85c58cfc8093f4199e8c6da6de8128157dadfed41c82d991f57df7afdd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"cac7100cab3eb35e76867fb6a7a2b7b361355d634205f2d6669757c9091d844a332b74c184f0ce566457d1548c2a490563dceefc584d64c2db3fd9d2c9b58797\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4f00918771c56856231c715ad9f1febcdc39127ac0265c97da76375ba20cbc7109ee696dae72e5f5d8fa1998588e697a4a6785c919e96a7bda7408a500cc59e1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"0277e5f81ee0b28b262ee4b0de5e62d4599acf95f65dba12a562ad682675e9aa9d1d4fb5b6d3a49bac481afc405fa2596a48407ba5225093e5d6effd69aa0105\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-linux-x64.tar.gz\",\n            \"hash\": \"8a074c93845416f69f035f2d0e16251dd2bd5abcdfcb7863afd59a5ddc78fa03aede8f79b42c7ca857fc19c8dea53d43da4e4a311f35f6f2eaf9fd64afc8f9e4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-osx-arm64.pkg\",\n            \"hash\": \"2fec69c2413d7437b1b180d3d8037e8369fe8d90cb56ca82df52177847847c56d707c6d781e3d014ffa54e7f9e8eb9b46b829dc3b21a01ad2c8895c54475ad69\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-osx-arm64.tar.gz\",\n            \"hash\": \"0b9eef6d820b86b64969de1d45b8201fded72b4a6339883c3f7180c1a97b19e1962cfe8664c7868fd1a20998deba7cb00f8f35f6b2d6ff6d414f1cc4ff2fcf07\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-osx-x64.pkg\",\n            \"hash\": \"ed948c9376d748b39bcb73f0de779d2d76c70917568adc683371320ec5f41a85f66dbdee93a27a1fc8a92f1477965be454b4b5290b5e05ee0d4356dc2a59fc26\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-osx-x64.tar.gz\",\n            \"hash\": \"dbd077f32b2fe22a6672f702f42b1f0af963082d9e4f4907d60951b16b70fc9827ba29773728870b1d59c9c538cbf4092fc823641677da96476059dcace57d5c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-win-arm64.exe\",\n            \"hash\": \"75059b9edb5efddd6660a1475227fea8ed0a487d7226e1147984bb3d57754cc1cafc8cba9409e82e2fb0b43508dcfc931e7f39953a43903ce9a45f81ddeb5ddb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-win-arm64.zip\",\n            \"hash\": \"6e13d21b03fd688e1bbf9b4fc26708dea637f080ecf9fa4113db2b2b7c0e179f18af79bf594fcbba12063cdbf9db4d0dafa64cb19415682cf8fee84b1c74708c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-win-x64.exe\",\n            \"hash\": \"23e4c862afef34a2c0d6476a93274ce0158d28f1609e0404737663e4be17263e61e5a8760382fb125d288a0965394e3d04b9e1c77f99de80a2c590dd295b8732\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-win-x64.zip\",\n            \"hash\": \"2adffe00d6d905bc61435c7a1a56ca901d7489521ef28d8593e8573cff223dac6a92839c6119e0bd1bc06dcd9a407cdd7d90fe55edb3fed3beea7b4a311f91cc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-win-x86.exe\",\n            \"hash\": \"8b9a8b8922bdffb2ca45333e9d516c3d77cf1439e5d40890a5769b83bc2b39511b164e5902a8c4092e632705eaa062dcaad405e745a134cc6b435db11e502372\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.10/dotnet-runtime-6.0.10-win-x86.zip\",\n            \"hash\": \"3e9a28ce5b5bb93d293689b2b00f47455bb3c890f7fbf21fc4cf52e6d23b27d49aa5777712d7c4716ba84a044c1ca36a2388f8369f09503aa9ee006aea8af9ba\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.402\",\n        \"version-display\": \"6.0.402\",\n        \"runtime-version\": \"6.0.10\",\n        \"vs-version\": \"17.3.6\",\n        \"vs-mac-version\": \"17.3.7\",\n        \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-arm.tar.gz\",\n            \"hash\": \"98b275af781ac7be20e22736d601ea667161640703b9d430340e517fb2c1bdcd6d06d5eb4f374cab1f6e29c9135005050ec89dd8dcf0ec97e7b0d9912e52f988\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-arm64.tar.gz\",\n            \"hash\": \"2f5351192e87c2dd196d975e7618bd7b0b542034d0b1bc932fe944d8cbabb0ed2599e98e88d9757e68f198559961ab3350d8eddfacc2951df00fbf6a7e44f244\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-musl-arm.tar.gz\",\n            \"hash\": \"8301b4bab44aa0f0f16ee69f0ede5ac56bd1ecf802d1fc30b12bd0da48050b40c994ac3fd4ef3fb11ab0ac4803f71301bae6a9f5f3340cbd6d2af1cb01f8c0c4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-musl-arm64.tar.gz\",\n            \"hash\": \"78aa8493421c7debbe8446a1a46bb2733c27d59f8bac4eb7dc00268092ee4f5025d56914c45b3169b8fb466aab2f8274980dc3b6639b6bac5122559f607ffe49\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-musl-x64.tar.gz\",\n            \"hash\": \"534eb3fa37c5dc5131cc542e95c8372571690cdc404da630734e90e87a93080c7ea9ecf29d8fa1e0a956f0599007271cae4e57ac0879cc94df08ad36aba8fdcd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-x64.tar.gz\",\n            \"hash\": \"972c2d9fff6a09ef8f2e6bbaa36ae5869f4f7f509ae5d28c4611532eb34be10c629af98cdf211d86dc4bc6edebb04a2672a97f78c3e0f2ff267017f8c9c59d4e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-osx-arm64.pkg\",\n            \"hash\": \"4659d681910602e4c06d395cb9673d0d70cbaf504f59acab09e4c5a783781c1cad6e9fef3c30d8fe8d801879c9c1c983d6b73059c50985382ec80467f6d07aab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-osx-arm64.tar.gz\",\n            \"hash\": \"e9e73aa815f4af93ba7325c2904c191bb731b5a4048db2529da7b2472f1a140603f22d2a7d4e35b2f301d046388109116af2c9efb33e1ece43fe39cb96b83d48\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-osx-x64.pkg\",\n            \"hash\": \"38ae9c0aa84079f52339be7ba5d4206f7efe392b40a1e7b2a427eaae6b924302f2a62f5a8961cbcc00d47bd6c6465b98cb4835cbe00f1541e058ac201b98a70c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-osx-x64.tar.gz\",\n            \"hash\": \"b6cbb3fefdb43282f83f69cf5a7c4cc9f74bf64f1008a4a33368cf9ee1d5fa186e324549005942c1ec48778efc2ba0b33a19b5b802920c84aa636b663697cf6b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-arm64.exe\",\n            \"hash\": \"3439f8178c216465ee30112fce93d6cc8cde369ea51304c9d28a5c83eb19c7e0b8a1620152ed3e6889636f081240df997c93a205fc2de53d892399e4972a8c89\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-arm64.zip\",\n            \"hash\": \"223d64cf3103ae0aafc9f833c72f452277aeafb35cf197edf18884dcba1fc5a7e16de0beb21622cd967564e87d91d9eca9355c86f1cf1a4fd56c9d0e891253f3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-x64.exe\",\n            \"hash\": \"6cf89974261e6a12cbd5531bc2b16231daf56e438325750b381dacfd5d09c80a9addf739c1a3e28f652a7adf13971e37acaf255cd8c61ac39e903ff8ba2655c0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-x64.zip\",\n            \"hash\": \"609217ef0e1baecc250db94cf0a0255301220d8f6a443424c0bd912b07c1fdaa5eef89b28907a70e05bee5b76c4792afdbf3e5399dc609a41c05319e523b96dd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-x86.exe\",\n            \"hash\": \"ff7a4145a7fe4540585c62e75e58eb104acdccb4d2ce2d905f355670a20c6c3f4878148911fccbe68da2608e8c8ac4f1df09f3cb9d5cba07d025ad6b57b83c82\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-x86.zip\",\n            \"hash\": \"a00d256379cc9bda550c5eee632ac16bae6b3beb385efc9d22f5bbaf414405a27ce3f24ecef335ae3b470104f9a28ef0a89cbf87fede41e1d7493c83b8b209a8\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.402\",\n          \"version-display\": \"6.0.402\",\n          \"runtime-version\": \"6.0.10\",\n          \"vs-version\": \"17.3.6\",\n          \"vs-mac-version\": \"17.3.7\",\n          \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-arm.tar.gz\",\n              \"hash\": \"98b275af781ac7be20e22736d601ea667161640703b9d430340e517fb2c1bdcd6d06d5eb4f374cab1f6e29c9135005050ec89dd8dcf0ec97e7b0d9912e52f988\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-arm64.tar.gz\",\n              \"hash\": \"2f5351192e87c2dd196d975e7618bd7b0b542034d0b1bc932fe944d8cbabb0ed2599e98e88d9757e68f198559961ab3350d8eddfacc2951df00fbf6a7e44f244\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-musl-arm.tar.gz\",\n              \"hash\": \"8301b4bab44aa0f0f16ee69f0ede5ac56bd1ecf802d1fc30b12bd0da48050b40c994ac3fd4ef3fb11ab0ac4803f71301bae6a9f5f3340cbd6d2af1cb01f8c0c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-musl-arm64.tar.gz\",\n              \"hash\": \"78aa8493421c7debbe8446a1a46bb2733c27d59f8bac4eb7dc00268092ee4f5025d56914c45b3169b8fb466aab2f8274980dc3b6639b6bac5122559f607ffe49\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-musl-x64.tar.gz\",\n              \"hash\": \"534eb3fa37c5dc5131cc542e95c8372571690cdc404da630734e90e87a93080c7ea9ecf29d8fa1e0a956f0599007271cae4e57ac0879cc94df08ad36aba8fdcd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-linux-x64.tar.gz\",\n              \"hash\": \"972c2d9fff6a09ef8f2e6bbaa36ae5869f4f7f509ae5d28c4611532eb34be10c629af98cdf211d86dc4bc6edebb04a2672a97f78c3e0f2ff267017f8c9c59d4e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-osx-arm64.pkg\",\n              \"hash\": \"4659d681910602e4c06d395cb9673d0d70cbaf504f59acab09e4c5a783781c1cad6e9fef3c30d8fe8d801879c9c1c983d6b73059c50985382ec80467f6d07aab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-osx-arm64.tar.gz\",\n              \"hash\": \"e9e73aa815f4af93ba7325c2904c191bb731b5a4048db2529da7b2472f1a140603f22d2a7d4e35b2f301d046388109116af2c9efb33e1ece43fe39cb96b83d48\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-osx-x64.pkg\",\n              \"hash\": \"38ae9c0aa84079f52339be7ba5d4206f7efe392b40a1e7b2a427eaae6b924302f2a62f5a8961cbcc00d47bd6c6465b98cb4835cbe00f1541e058ac201b98a70c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-osx-x64.tar.gz\",\n              \"hash\": \"b6cbb3fefdb43282f83f69cf5a7c4cc9f74bf64f1008a4a33368cf9ee1d5fa186e324549005942c1ec48778efc2ba0b33a19b5b802920c84aa636b663697cf6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-arm64.exe\",\n              \"hash\": \"3439f8178c216465ee30112fce93d6cc8cde369ea51304c9d28a5c83eb19c7e0b8a1620152ed3e6889636f081240df997c93a205fc2de53d892399e4972a8c89\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-arm64.zip\",\n              \"hash\": \"223d64cf3103ae0aafc9f833c72f452277aeafb35cf197edf18884dcba1fc5a7e16de0beb21622cd967564e87d91d9eca9355c86f1cf1a4fd56c9d0e891253f3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-x64.exe\",\n              \"hash\": \"6cf89974261e6a12cbd5531bc2b16231daf56e438325750b381dacfd5d09c80a9addf739c1a3e28f652a7adf13971e37acaf255cd8c61ac39e903ff8ba2655c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-x64.zip\",\n              \"hash\": \"609217ef0e1baecc250db94cf0a0255301220d8f6a443424c0bd912b07c1fdaa5eef89b28907a70e05bee5b76c4792afdbf3e5399dc609a41c05319e523b96dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-x86.exe\",\n              \"hash\": \"ff7a4145a7fe4540585c62e75e58eb104acdccb4d2ce2d905f355670a20c6c3f4878148911fccbe68da2608e8c8ac4f1df09f3cb9d5cba07d025ad6b57b83c82\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.402/dotnet-sdk-6.0.402-win-x86.zip\",\n              \"hash\": \"a00d256379cc9bda550c5eee632ac16bae6b3beb385efc9d22f5bbaf414405a27ce3f24ecef335ae3b470104f9a28ef0a89cbf87fede41e1d7493c83b8b209a8\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.305\",\n          \"version-display\": \"6.0.305\",\n          \"runtime-version\": \"6.0.10\",\n          \"vs-version\": \"17.2.9\",\n          \"vs-mac-version\": \"17.3.7\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-linux-arm.tar.gz\",\n              \"hash\": \"ae7ab7920e1ba2833ce55c44116e4400fdebd8ce48d3b193b590b938e25909a647a34706f32dd4fe2a8468ff61a8bc962d7c8dfde5404293b6254c5e980f46a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-linux-arm64.tar.gz\",\n              \"hash\": \"0d7eb35dc1b2ee8c31710bab2eeb1f6871819168bcdf7aff257074cd0c4eafc3ad52875a45cec38ad799a12e8c81bddc6267f6b608aadfd9607d435cb3e6ba6f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-linux-musl-arm.tar.gz\",\n              \"hash\": \"633b16bb333fdf0cb22b2b2962f00239bddb9f332be450e250c9faca5d656003b948d25b4283acd820b66132a64b7a4b5e728c19030b12b12c73b013c71f8b6f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c41194f78e46aaae941df95884268101d2b54eae6db605c9bb168d5a4a84a2cfecd9b1bc02db8c4ad35fe127608bdfc67fc4107d7cab934e80ca87ec49822722\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-linux-musl-x64.tar.gz\",\n              \"hash\": \"7f25cc8966fed34457384ab3616047dbf0c4a4b5fa820189d82e4fc4c14f0495ae00b8f56c652ad29b8252cf5887c360aaa7dac4990b7d93063fd8a898b98d3f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-linux-x64.tar.gz\",\n              \"hash\": \"783859f84ca572c461392a6a42a6ae05d92a5a28741e2ed829bb5d9a3bfe122e343516a9d56b4aa6bff9190f15c229574b06033999e02feac59689f567c8a80c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-osx-arm64.pkg\",\n              \"hash\": \"e751bb9522b61e6728a788b714d9ed6edd734e3e60c455fb16c2fb6fd2f934ecd9c9054a716b1d12238eb542bdf59973289120eb1d673752055e9e24b86f9514\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-osx-arm64.tar.gz\",\n              \"hash\": \"18cd914a6809d0ab783596c7a06318fea39d7c198e7171f39ba29ee1e87114c1d68a7483d9a7d22099d2e712b815d92b77c13beef9ce9f203949df26df0df4ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-osx-x64.pkg\",\n              \"hash\": \"2ccd8b30ca9f5fe0907415680c7161db7509606a873b3bc9fb4399f3bdb47bfde8cb10acc42f36c2aff39c36914eea76e2b3ff520231f9fe6c6f953bb89fbcff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-osx-x64.tar.gz\",\n              \"hash\": \"a548e0dd9e5e869f358e121bbd03a36bd7af3b753e08f32cf99957e5e21213046547eca1cbcfe256d9d53d25231a3643021fb34f1f8ab5221f233875bff6d1b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-win-arm64.exe\",\n              \"hash\": \"fc2e90b4e0edbf5c83022495614c2d5b96177cde79fe27e0bd3f9652456d94516c541cb88123b2e6cf1e63cd465d0f3617026662ee99b87cf078271ede275436\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-win-arm64.zip\",\n              \"hash\": \"6250672e5b80b1c402da5f87cacfaad48b4417fce9ba68dddd0d50a78ebccf77325c6ee4c99c935fdaf659d6b3cbdfe315cbefdc3c5eb2fa7f50a720d59aaac8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-win-x64.exe\",\n              \"hash\": \"4a4703a1eca27333a4781eb61263c2acaad6e3542e96c18b1bf38d51f2516964919225af22ea7b3dc01bff64c3a86e0db298a7dab349763b0a109475a156eeb5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-win-x64.zip\",\n              \"hash\": \"61ecb688b1a6c3213874dda92b1eb38ce8b199c7f4d78677e60c2af0b0a58a686d29f5d56463a57af863230a81a73c792df8b8b9b55dae51bbd58796e1d1de95\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-win-x86.exe\",\n              \"hash\": \"543b8f89bb9e50b8167e6dc634b0363739ec030b7e76e5d2bc66ca7ee9f19fcdd45579be50463cb90a3e5508ea842c68f3344ab179e2897311a7bb370643b3b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.305/dotnet-sdk-6.0.305-win-x86.zip\",\n              \"hash\": \"5a7ab58a0b22c8216e7d0c025b1d518af1e6b96b914ba9361d3ab6267c01edf496e67220ed181a542bc03a50ca5d9d465eb489f0a2d874138d22c9d67c6d5fc8\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.110\",\n          \"version-display\": \"6.0.110\",\n          \"runtime-version\": \"6.0.10\",\n          \"vs-version\": \"17.0.15\",\n          \"vs-mac-version\": \"17.3.7\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-linux-arm.tar.gz\",\n              \"hash\": \"ed8a0a3c5edc42b6e82dc925c35ebd3ba0ddf94b98c97febb0f4ffa758b369b2c063935fa62cc5e18c1f26e64e0618daf2600d8a9946a0d44f6103d725d99091\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-linux-arm64.tar.gz\",\n              \"hash\": \"da312773a6def29612ea6898c489b86b2546e5e52c7c890134712c64fb3c0e52dfab88d8589858f9a9b39c3d2c9fc39406d6da251e3cfca399eb93df0c9ad5c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-linux-musl-arm.tar.gz\",\n              \"hash\": \"1c96d40960a1a79248bc0cd1ab92b38df38a8a5832a22bb0baaccf6e861b492475aae2067bb75ad2a66862dd2b7273c3d76558f410a9c29d7d1bd58d514963ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-linux-musl-arm64.tar.gz\",\n              \"hash\": \"59523820da71f0e799df5971736b5814034edf58c1874cf8364ff112307e0752dcf8246d10923c7564842eb34e8a7e0728d0debd491cd0104983ded1e7b72d27\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-linux-musl-x64.tar.gz\",\n              \"hash\": \"68e4b9aa0d428603f01f0a8b5c151e4a775021bbbc96c2f59ce80a1acd59909ead4de9052b045b8fd388c6681dd5553207cb4d4fdde1aeaa6dbd04bf4060d33e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-linux-x64.tar.gz\",\n              \"hash\": \"104da00b7bfe1f564723e2314d432ad9044cbfa9ad851bc99e06e730a032c6178e487a8bee3f28f8309a32652df0143301be0b827a0c7ad00614a1ce850495e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-osx-arm64.pkg\",\n              \"hash\": \"95a6b0f8194e3b2b2bf89fec61341c63e24de130a2c42983671fefec118bc1d0eec5e769eade4aae00d03a2d2bc2087a112ef3b64b9b3e7607c1c8d9f168b553\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-osx-arm64.tar.gz\",\n              \"hash\": \"66be3a01d07ba93d881172037b8254c988ed457b002a4f5b536b68faefbe82778efebfc2c43a1db11df4aeec104c2d856821ff1c342ae27f54dbb9ff2a9a2efd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-osx-x64.pkg\",\n              \"hash\": \"ecead3a270135bfea545dbd41026039d4b3ce8a3552c32a1f4320a23cd712891573bc2c9d40a2ab1a45418a81243a6a054dcadf78df792dfd5032587c32e511f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-osx-x64.tar.gz\",\n              \"hash\": \"9b8937bd1e4cfc9cf867f8512ded8f293f59da4a00f3c35f4f869dfa99ef12da39fa77f620d0bd71431371a776f4c9f8c7898d591aba3dd40e9e47116f99d1cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-win-arm64.exe\",\n              \"hash\": \"6245dda85c05c343ed88cef2d82e82d4dab16e7c16b4c97aca7afad28c57bad62d9322ea11c5fc1a461b89bdcb1d4b709213237a53199caefbfb1c015436314c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-win-arm64.zip\",\n              \"hash\": \"12e3dfd9960406c37ca2d344d7eeb6d33f20121edc4184072a1cc07c9238e165521cbfc26b8902800b0b9b47bd6618d8696390f377f8282a73cefe3e623c2737\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-win-x64.exe\",\n              \"hash\": \"c02f5f4f3616fa8ae686119a35feac093ab36d2ca088851ee2024531e6386c3e84b159a4c8cf88034bd84a93f1d64090ee6d021066eb2594b80f95bbb24db751\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-win-x64.zip\",\n              \"hash\": \"8534f4f7cda24f197f422525ae3e6b0111ea5e6a8d0d24563a1560cd701ab10341db4e80c87ccd09993492f9446be6471b3f4f8f5858e73b31d1aa76698f6f37\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-win-x86.exe\",\n              \"hash\": \"82c095b8efe3759ebfc83af49a6d1b53e51c157d075eec307fe95a0b8ed96e73764ae109fb14532f55afee32640a51bd6438427f1fc8e2944998c63f6f07e687\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.110/dotnet-sdk-6.0.110-win-x86.zip\",\n              \"hash\": \"ac759d3f50e31f2b40a2b73ee0b9ebf5dd214cb4b539224f4f3e52723c409cb9099e27ddecce36f482ea4301e5e0cd35baa00f7e861dd6f010c220e1b2f9ad9e\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.10\",\n        \"version-display\": \"6.0.10\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22270.10\"\n        ],\n        \"vs-version\": \"17.0.15\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-linux-arm.tar.gz\",\n            \"hash\": \"48d590741a8d648c20e130d3934e6e4a8a4d7ce750c7c74cf4eac77fe969798c36d8780c006baa1514e0b341d3e3cd5a6a3860f484762fc703577d35b1b92202\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-linux-arm64.tar.gz\",\n            \"hash\": \"254796814f5810c416361046aada833a151c946b0dda12d10d1ac792db8528b64eed4bb8195d99081639f22b2114489df0d4bae20da3fe6c63987cafe0349b2d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"56a8b2ee654ca040d448a7c0ef09a310d713a892de90df1146d1748db87f6aca86ec95f1db182937b2b99186a2bd3ce14d9d37e172d68552720b149041b4051b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1cc24cf179bf391945fa78ed1311e90d06451c9ba918d742f3e0338d3a0aab1374a167e781c40c8e421be8369c55936c051ab59459298dcdeaf91df6643b35cc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"55cfa0419965dc15127fca3da0f567dd64dc4ca3981f5e3366e01f88c670f91b361548be99c507fcf9fdc51078387a230c3d09d399d7b0345ae4b6e60ae2615f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-linux-x64.tar.gz\",\n            \"hash\": \"85fd0e7e8bcf371fe3234b46089382fae7418930daec8c5232347c08ebd44542924eaf628264335473467066512df36c3213949e56f0d0dae4cf387f2c5c6d0c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-osx-arm64.tar.gz\",\n            \"hash\": \"549745d9d41329f12572025317ad40addd00bce64cf15181df5c0c5f5b29c96830397cf97eec315770c8e1b7dfce5909368b213b359f465d679390a0b741a021\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-osx-x64.tar.gz\",\n            \"hash\": \"9449b3f71813d2af75c3e2439aa22a639140f0c3f58c0e55fd1d66d660a603fb71f9f538d48087c113301d30f373be7aa8683e79af66427d3c70bc1713ae305c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-win-arm64.zip\",\n            \"hash\": \"96e541929de5b98756c2c5a88d9e0544ee64083d5bef15cb993aa124965d6c95714f5eb83e5fe73ef10d6d297e0c076e039e98bfce861e90271969662d0cbc1d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-win-x64.exe\",\n            \"hash\": \"4af8da7de85bcb1d079a85cd3f4aafdfc4e4d441b87dfcdffc27c820d9f69513341be5acc987c47cacdc597cbc0cc89c7d746050e6d40ae02db7391e8214352d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-win-x64.zip\",\n            \"hash\": \"e5767f8d7599a0efb91c4187afb94dc7ae3119244383aac4945acdc32fbe39171631dec846b6be9d53317779445ae55ce1c2915c2fbb7740a5ecb63d2ae74219\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-win-x86.exe\",\n            \"hash\": \"dbe4e28673b460c21477a1a6258fcc21e3f372bd4fe928ed46832dc5d768ca8b07aec6e543f15a091cf061c368154c0810a83df2c98f28724e31c056fe7e7caa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/aspnetcore-runtime-6.0.10-win-x86.zip\",\n            \"hash\": \"ac419d808351ec3f39ec145670dbaba89b01cc780eb0a43e9821ddaa3ac0c827ec660b406b7e694fe33944a8ef1579c286080e936f5b214042a5edb77f845d84\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.10/dotnet-hosting-6.0.10-win.exe\",\n            \"hash\": \"fbb8653545c426ff62788b9493074b48e8590dde33fb0912a220e0f56589785229ad9f3fda7e9c3b3accde2c0221fe3c62b302a50898c3d398a32f9ab6d1c0d3\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.10\",\n        \"version-display\": \"6.0.10\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.10/windowsdesktop-runtime-6.0.10-win-arm64.exe\",\n            \"hash\": \"eb43bfe09bc185a6e97454892c98956eb044ef40881d646ee4e2a934bc0ba0054eb2d2472b33dee3e7d64ad4cdc2a4efe0e6bb9cbcc6751a87886639e4b70c6f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.10/windowsdesktop-runtime-6.0.10-win-arm64.zip\",\n            \"hash\": \"717ece5dc85ad732ea8844032b2758733791ec22bec59cc1065a1324e1261ed0470c07e682230f3107eeef13563dbb84f054a57a58dab49b7920d76571f495c5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.10/windowsdesktop-runtime-6.0.10-win-x64.exe\",\n            \"hash\": \"8fdcfc318fc0a90ad633813764d5a6ea48a6d0e4abc9c0584954b49cf0e1611b0904fd1cc066bfc55195f6424144c8020d9f00c6307cee516ec2072de728ee6e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.10/windowsdesktop-runtime-6.0.10-win-x64.zip\",\n            \"hash\": \"b2ccfc46a90eedf52faa9f6e12d0b6eb9aa44f9eb2a5c5c6b2766745c0fc32b6ac63edeee8eb881b0579ddd02cc487ac9d7f5277d330aba90e20f331fe079299\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.10/windowsdesktop-runtime-6.0.10-win-x86.exe\",\n            \"hash\": \"ac4a0b971a2829e0c16c18d37567397a89d56ce1c14b52414484982d467eb1f950a44047c27090dfd408a3783e2878777141ba7d3fbd97a7d52a5b899b030737\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.10/windowsdesktop-runtime-6.0.10-win-x86.zip\",\n            \"hash\": \"16186da269bd836e3278d5725d7d4fd7c519e02a256c32eaaa4855912ee8b67f949c52be85a9304e4e5bf7aeff4515db3dbdf68d7573b0d1175e3cd61ffccf77\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-09-13\",\n      \"release-version\": \"6.0.9\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-38013\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-38013\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.9/6.0.9.md\",\n      \"runtime\": {\n        \"version\": \"6.0.9\",\n        \"version-display\": \"6.0.9\",\n        \"vs-version\": \"17.0.14, 17.2.8, 17.3.4, 17.4 Preview 2\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-linux-arm.tar.gz\",\n            \"hash\": \"9b1bc18f86d03e3c80dbc7fb1e8d091fd9b8346deaaca810f8057f6940f60facb9592297bdd8e7e9e3df0268bd0c46f1f7609e04ba0595ff489867665df535f9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-linux-arm64.tar.gz\",\n            \"hash\": \"a4ce5ec71c60690e577e96a2cd821c05d5f05b7c1754fb753353db77e938349a53d4cc55596f7384813bc44f74eac8f991a1c00cbee60483f552663cf4d8ac31\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"f8baf7dbda54b29c37082f604e6b96ef3d5d6e22bc46cc52d6e8226bb6fc91449584f3203f4f2f5d20df11caa3846e46d6d6c80adddf49577d7b29d405a31d4d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3f5ca6d2e498e11bf1b46cf9ba456a4788a4dcb7ba4b0e52301bb9a3e2d511a8a9bd173be0cc8639c0297d90ad911a259da53ac2f6fd066313d79025ca42a5ef\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"e3eb4804dddbc34be37e3d984c13a668605ef7eea6b2daca95ea3fa7ca51b2fe4845df1ad0d343de9075796bf0d4474d7e14e5b3b4b515005d0e24ec53237ad3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-linux-x64.tar.gz\",\n            \"hash\": \"a6df2cfef73047247bd36f51eaf696f616c6aa9b428e42f219bf91dcf05c03dff817a8ec826740002c8aa83df2fce8a7ace562ad2e2956789542f0b8ab8b1173\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-osx-arm64.pkg\",\n            \"hash\": \"c1c00cf02e5f278103a3ba9712803073db1167af0cd9446f69fc92d90815e495cec019ed889d1b1e74ffa3aaa6c843744f7ae6302838ebd027f93f5862f15514\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-osx-arm64.tar.gz\",\n            \"hash\": \"07dfd194fdc67bd096db0edc691fc2a2d0e41d8a3023582ef1ff7348eb0fca3a58d97b79c454e5c67339f6d9c9b0f3b997d68f6ec7bd0e8c86d584da6d94cd8c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-osx-x64.pkg\",\n            \"hash\": \"d482655facc229dc352ceaaa14001b5e813285bdb1a4f83beb402b02b8ff6fa150787104a28440d8251f0d6cd4bff088c9cab877fe71dbda12d1ef65e4da07d0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-osx-x64.tar.gz\",\n            \"hash\": \"b52542c1850c14b409c0938a31188821b428199a7f3f55779f4986867a78eedfe06478f8ea79e8b20d078fcfd9201dc10d4a73146ef8fd56753f0cd23c5328ac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-win-arm64.exe\",\n            \"hash\": \"da44838b878dcf642c65d84df6d7a24107dc5f05ac2b3a321203346759958a98dd6bca3017c44b4073bf7d3d016f1bd5035aef5ad62d2231dbd4f65128b68659\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-win-arm64.zip\",\n            \"hash\": \"e17c582badbfaa572fb87db2440b923e6f8cb3b44149c7feefdc41a90dda04f971d89d8e226f54941c96c0939526554da86d85464869b318293fe00fcc3e622c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-win-x64.exe\",\n            \"hash\": \"5f4a73342b3563937f2efb576aa101c29c0ad4908413ba87c415a733239b9af196ff04778f2e8bf5845508b069812c13ca281ea5e912552aab5227e7841e502d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-win-x64.zip\",\n            \"hash\": \"09bc63373b1dd73cd6a8c1429136597b1b1e4971f5467aa96770837b925e8e6b8e03333be71053ce0e5cf97b447f34205de8b67cf75b178a3b04a5f6643686e3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-win-x86.exe\",\n            \"hash\": \"4a5ee2e0297140fb4b6064540cbb9d520c1b3bef474f8342dfc5aaed0fd85b7fe26c49f85d17686e85540d421da57eb2ae4d2b402c5184a6ef2eaded33b097a9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.9/dotnet-runtime-6.0.9-win-x86.zip\",\n            \"hash\": \"09847079dc9c1c6eae7bd64dae46e3b667bea7520d0c6d47ea497ee303acbf0251d049b09ce505f5e678f3ddf54747f2b019632421d735cb17cd6ef4ef256831\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.401\",\n        \"version-display\": \"6.0.401\",\n        \"runtime-version\": \"6.0.9\",\n        \"vs-version\": \"17.3.4\",\n        \"vs-mac-version\": \"17.3.5\",\n        \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-arm.tar.gz\",\n            \"hash\": \"7d3c32f510a7298b8e4c32a95e7d3c9b0475d94510732a405163c7bff589ffda8964f2e9336d560bd1dc37461e6cb3da5809337a586da0288bdcc71496013ba0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-arm64.tar.gz\",\n            \"hash\": \"8c05f9e02e0a48fcc3e4534fa7225fe5b974c07f1a4788c46207e18e94031194e1c881e40452ee6c432764e92331c50ae47305d4aec5afa363fab3a8a6727cdf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-musl-arm.tar.gz\",\n            \"hash\": \"059b7780896ee5af350a4c8342e0262d58046f78bd2310e585ab879df1c99e2a5b1bb3254d91e9c358a0ac82fc4df25b7f34bc08bb77e16cc695990445c36ad7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cf4cc55e8d877913960d510d99f4c4034ba1d4eac98f50298c33c08854199a369b572b25954a939eb2ba4994d6fb1b41614781260af9abe7f27e2f76c4962d88\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-musl-x64.tar.gz\",\n            \"hash\": \"acdb7c08d4fb290d3aac2e212c51840f6d9ca787aca94dffe85317a515c541670456ffe37c2365541f18edcd7b39243d72e7d8e5ab4562a2896fd96bbf6cf6b8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-x64.tar.gz\",\n            \"hash\": \"6fce5f29e6cfc80da1df86d2de3a637108023397d275e0dcfa0b79ef36eb85c2c3433db467aa5d8fda7e32bc21205a126636b53d56c4eb4c547d9d3b2370cb31\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-osx-arm64.pkg\",\n            \"hash\": \"2f99d959b5a5f480bb159a05ad26861b22f03e4e7c6147cecc161223c0142be341520bd36dab6fa81cd4efaef254cad5ea819bc0465943b4801e6a608791ad89\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-osx-arm64.tar.gz\",\n            \"hash\": \"0e1974a99863afe0b2c03fe52874ad388c3e019e34c7e0a1dc29955dfa9783a946082270fbd767272817509b30d1928d0c9f12cda43777292587693e0b0fc604\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-osx-x64.pkg\",\n            \"hash\": \"c4af91f83bbe731d8b3240443cf7167b72e63434ffb448de81e6c65dc706655ffa735dfe7a11effc8633d74614f6b21543d65e8c6c22c05c512f25257a91db66\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-osx-x64.tar.gz\",\n            \"hash\": \"6cc47bd279ba3d5e2df9f41b14b25662c8a3d61d5dee0fe021ad54a8709aa8a34430deb644c3525d66124a6a1bdf6a273008ea5fcbddccee238f4c470bac3e05\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-arm64.exe\",\n            \"hash\": \"22106ea345999269312a5c87b7076882c2f4d611a6866b5fb0e0cc39bba35d292ffba733024eadcbc62bfdcb68b481a073e88d5a65d026c3f7b61314d38be48b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-arm64.zip\",\n            \"hash\": \"be17ac736f9ef448e5c5c9ce42ace78b167fe9a489ae725f10f935860cf52c6708167230fb8eb2372816c6c02eb7fc74be4915033124cdcc5cd7a98639669cd8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-x64.exe\",\n            \"hash\": \"aed1b2ddcfe8056d4a4c3bcbed3ff508010e3a1e4a40e82302c8ce30133f1dd55d93fadd19c8aa6114d7dc6c374764401845f1bd38bec26e9c4e6cd482e5e438\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-x64.zip\",\n            \"hash\": \"bab1b1c753536bfd24ad0066bb1c193c7c473442a7891499a1c265b882ae75bcc245c3dccde7f6c5b3d3db70f5de286fcc70c0837d7922104a233bc323907867\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-x86.exe\",\n            \"hash\": \"1661c82829c234b5af5c9742e9eb04ca0f0725a83c80f386a7a1743579b4268b2d92946360f0af183d793258d5cb210c1e981e72244c26949d6be99c512a55ff\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-x86.zip\",\n            \"hash\": \"5273425d1a240f5355765827cd425726c5f7e617a6d201cafd41953d5d7cfb6be701c7541561859d8b74b4dedba37ceb245e3f99a7c570963cfc18842d9b96b5\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.401\",\n          \"version-display\": \"6.0.401\",\n          \"runtime-version\": \"6.0.9\",\n          \"vs-version\": \"17.3.4\",\n          \"vs-mac-version\": \"17.3.5\",\n          \"vs-support\": \"Visual Studio 2022 (v17.3)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-arm.tar.gz\",\n              \"hash\": \"7d3c32f510a7298b8e4c32a95e7d3c9b0475d94510732a405163c7bff589ffda8964f2e9336d560bd1dc37461e6cb3da5809337a586da0288bdcc71496013ba0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-arm64.tar.gz\",\n              \"hash\": \"8c05f9e02e0a48fcc3e4534fa7225fe5b974c07f1a4788c46207e18e94031194e1c881e40452ee6c432764e92331c50ae47305d4aec5afa363fab3a8a6727cdf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-musl-arm.tar.gz\",\n              \"hash\": \"059b7780896ee5af350a4c8342e0262d58046f78bd2310e585ab879df1c99e2a5b1bb3254d91e9c358a0ac82fc4df25b7f34bc08bb77e16cc695990445c36ad7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-musl-arm64.tar.gz\",\n              \"hash\": \"cf4cc55e8d877913960d510d99f4c4034ba1d4eac98f50298c33c08854199a369b572b25954a939eb2ba4994d6fb1b41614781260af9abe7f27e2f76c4962d88\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-musl-x64.tar.gz\",\n              \"hash\": \"acdb7c08d4fb290d3aac2e212c51840f6d9ca787aca94dffe85317a515c541670456ffe37c2365541f18edcd7b39243d72e7d8e5ab4562a2896fd96bbf6cf6b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-linux-x64.tar.gz\",\n              \"hash\": \"6fce5f29e6cfc80da1df86d2de3a637108023397d275e0dcfa0b79ef36eb85c2c3433db467aa5d8fda7e32bc21205a126636b53d56c4eb4c547d9d3b2370cb31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-osx-arm64.pkg\",\n              \"hash\": \"2f99d959b5a5f480bb159a05ad26861b22f03e4e7c6147cecc161223c0142be341520bd36dab6fa81cd4efaef254cad5ea819bc0465943b4801e6a608791ad89\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-osx-arm64.tar.gz\",\n              \"hash\": \"0e1974a99863afe0b2c03fe52874ad388c3e019e34c7e0a1dc29955dfa9783a946082270fbd767272817509b30d1928d0c9f12cda43777292587693e0b0fc604\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-osx-x64.pkg\",\n              \"hash\": \"c4af91f83bbe731d8b3240443cf7167b72e63434ffb448de81e6c65dc706655ffa735dfe7a11effc8633d74614f6b21543d65e8c6c22c05c512f25257a91db66\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-osx-x64.tar.gz\",\n              \"hash\": \"6cc47bd279ba3d5e2df9f41b14b25662c8a3d61d5dee0fe021ad54a8709aa8a34430deb644c3525d66124a6a1bdf6a273008ea5fcbddccee238f4c470bac3e05\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-arm64.exe\",\n              \"hash\": \"22106ea345999269312a5c87b7076882c2f4d611a6866b5fb0e0cc39bba35d292ffba733024eadcbc62bfdcb68b481a073e88d5a65d026c3f7b61314d38be48b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-arm64.zip\",\n              \"hash\": \"be17ac736f9ef448e5c5c9ce42ace78b167fe9a489ae725f10f935860cf52c6708167230fb8eb2372816c6c02eb7fc74be4915033124cdcc5cd7a98639669cd8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-x64.exe\",\n              \"hash\": \"aed1b2ddcfe8056d4a4c3bcbed3ff508010e3a1e4a40e82302c8ce30133f1dd55d93fadd19c8aa6114d7dc6c374764401845f1bd38bec26e9c4e6cd482e5e438\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-x64.zip\",\n              \"hash\": \"bab1b1c753536bfd24ad0066bb1c193c7c473442a7891499a1c265b882ae75bcc245c3dccde7f6c5b3d3db70f5de286fcc70c0837d7922104a233bc323907867\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-x86.exe\",\n              \"hash\": \"1661c82829c234b5af5c9742e9eb04ca0f0725a83c80f386a7a1743579b4268b2d92946360f0af183d793258d5cb210c1e981e72244c26949d6be99c512a55ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.401/dotnet-sdk-6.0.401-win-x86.zip\",\n              \"hash\": \"5273425d1a240f5355765827cd425726c5f7e617a6d201cafd41953d5d7cfb6be701c7541561859d8b74b4dedba37ceb245e3f99a7c570963cfc18842d9b96b5\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.304\",\n          \"version-display\": \"6.0.304\",\n          \"runtime-version\": \"6.0.9\",\n          \"vs-version\": \"17.2.8\",\n          \"vs-mac-version\": \"17.3.5\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-linux-arm.tar.gz\",\n              \"hash\": \"4cbcb1fe9d9c3be643d3d0247e5cb4eff95778429a4eeae38060d268b3d31ef4c51cd47357c03a4d4281c5eb20feaa07ac140d430ffe4270c0f37aba3af546b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-linux-arm64.tar.gz\",\n              \"hash\": \"69dbd86331002990d7f6c915b0fb832c5d8ba55bb4dacbd6a4065ca7d59e92902fb5052f6cd905a453e42355a655d526b5c12be8fb5d12255af2d345d5b12846\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-linux-musl-arm.tar.gz\",\n              \"hash\": \"2f65c701f7cae2b056ee43ceeb2db7203c1e4afd25d4ed3902c284d333cef00f0d5e6540ed496507cb90fb0fab16b72c4dcb45fd6b253357e0b1d293b0e661fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-linux-musl-arm64.tar.gz\",\n              \"hash\": \"03ae13643f3b3b86b001a49a150a0214f37602c4dbb5574fb12e79868663d263f078f5af3d87ebb62e76e119bca860133cf47ee3387756511839844a2bfe692b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-linux-musl-x64.tar.gz\",\n              \"hash\": \"e7bb801863e4abe9d246d8272892c35cb31c518dc145472d456daa36eeeaa6bc95b62a612dfa6fa6e6ebf813dbe77c71793191b46a0ecf9621b9867a465a265c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-linux-x64.tar.gz\",\n              \"hash\": \"56cc230bcee184b7d661433183b4fd31a05e5a1922c7b2e612581e6e59552cfba5ff10a02192f97c96758888af096288ca972674763a3c5409941593a194d5c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-osx-arm64.pkg\",\n              \"hash\": \"b26ca98f397c72ca6e1f6292fd9ab89964d347de8377bac936ce0d9b75da748f51c2dc76e8f7d71918cfa77ed7f5847815a6f0e33afdfcd1f7246fd39d2c53ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-osx-arm64.tar.gz\",\n              \"hash\": \"84db8eaf1ea3ae9b8b74609989a2d67367533ebe1ef2d39db5c3320c488b3cec9106a4f89b826c33d7bae2e44124e1f6b8093b8156c5f08fe80c1d6d8f961f10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-osx-x64.pkg\",\n              \"hash\": \"58514a7b283f452803a551315339202dfbca032c2b33427b590b4dcc3611cfaabe1ece2a3e3b6a7d4531fb3e7214e25a714212324d732074acc9b6c68a7d0450\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-osx-x64.tar.gz\",\n              \"hash\": \"6ab14abb005b9d9704291f342d8d9bdf2095c780bb443216b220d3e78be3ba8b03b7104b6b3dbb69e24fb45cac8b719ec9bd92a93bb5635de77dba54cabc3e22\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-win-arm64.exe\",\n              \"hash\": \"baed7769e6f63508cfcd1d0154045e17ddd371475d5456621e7577708a2b0fa3d9ef63b1e2e46cbe5153659848dff10635a60a58979680b1b139efb143fb5b4c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-win-arm64.zip\",\n              \"hash\": \"01a8e2a72badebc96b6efa4f3e5df04feb01870a1a709f01d52b192983eec430436470f15cbeb0cad1ade42262ef757838608b4ab0bd0b692897d9925cf30cc1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-win-x64.exe\",\n              \"hash\": \"fcb5284621030199c876ae408f8ad5dadb6c539d83ba89c574d0d5bca76ef67edfaf814cfa5afa14f465bf5d9db36e69e9f67b70b66440ef1ec81d36b7e7ca04\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-win-x64.zip\",\n              \"hash\": \"702246b6767f9aec2ea788cc4b3446a1a09afd4559c4419cca0047830c4a07dfb50c744746effa516eed171b3cd47202bdae83044725b687c9442e19c048372b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-win-x86.exe\",\n              \"hash\": \"429ea31961a8af3e5ae79c21edeccceb433582e93c66f121ec589eb70aa15a57919586af3cc342f3497a4fc1c48d68d58f3ddda4d3d4bb2a65ae293dc686fb9e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.304/dotnet-sdk-6.0.304-win-x86.zip\",\n              \"hash\": \"df0d99f71b30431d90d79d65e0a05256fc5b363a8279e06fa90db473ddb0c750dedf22336efe6d37a348cf04ab38514634ac6bcabe3b919932a0432a878bc23b\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.109\",\n          \"version-display\": \"6.0.109\",\n          \"runtime-version\": \"6.0.9\",\n          \"vs-version\": \"17.0.14\",\n          \"vs-mac-version\": \"17.3.5\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-linux-arm.tar.gz\",\n              \"hash\": \"b757ffdef4b87a9394ce0a367f5563b2900e9720eba6b071ce22e454eaddcb7983bde182d90ef552b5b903c2b5505af5ab642190c982dfc18649ea8ee8657886\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-linux-arm64.tar.gz\",\n              \"hash\": \"eb4a42a45cbf8a92d2f78d4299ec34ab11d6d8dbc28dcab9dbe95648e40895a0dc56675a99b4df9e1f5a42ab0f3368322ae17381810d9bac5cb8623066120b80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-linux-musl-arm.tar.gz\",\n              \"hash\": \"4b567f08847298b0f390c5ff3ad874fb8ec193923f4d3145a3f076b345b4c746f4b5158cca25ca9934f6634b05f1b645ff05114348555162600e0a81cf33564e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bfcb8c3e9fb70f0dd10d87c33c338b56399d453ea508455d84cb9010cc41774d1766426360953b4b209adc4a27750b598dabc3fa3c65ebe357db2fd6d9d486cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-linux-musl-x64.tar.gz\",\n              \"hash\": \"7620f7eb93f77e03ab24a00521085d4469978e9324af1be6fb8fa05bd8fcbbc6ee869ddee995c717f4bb00a2f582756a17450301def4f4c392186cfd803af13a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-linux-x64.tar.gz\",\n              \"hash\": \"3bc9f437a512a72a4ee8e5502f425bb7bf9f3d91db726fcf8052217eec7aea8bd68bfbf17db7a1a4bf3a7559cac85f0fc5e5893f27f8da83719930f65f563022\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-osx-arm64.pkg\",\n              \"hash\": \"478d4c1614d054dfc4e5be8cba8782f015f1903ca226ba059c5024e00ee50a930190946b2b16d90d64616c95b91defd9f17459b107ed4d5f2c6d8f31d9bad730\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-osx-arm64.tar.gz\",\n              \"hash\": \"94dd6696b25f5362e5a24175396d29cc39089acaccf41801e96a137b8276227802eb7eb17e92f20050b5b6a8c264cd3673c55b6bb74c5c6d11a6b181d058615a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-osx-x64.pkg\",\n              \"hash\": \"9a13ce6a2fb2190820be85be3f820cdd537c96af11db4a51a84e80b969f14bccba87939f80e272c46fbf0e3d103b370fcf62f584b497518de3928abb2dd5546d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-osx-x64.tar.gz\",\n              \"hash\": \"36a9b82fc04cc83cf2efad689d5063056c12d8823e50b24ef7ae452860909e81c8c7f82df2d8279d4bc0b960d401621e39a89191937b0a47b02cb3722e39e920\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-win-arm64.exe\",\n              \"hash\": \"8c73c4f7990965f70e11fa81436c434e3676dcd982ee57daeb334b0840af76ba4edcd019f8eecbaf28f3fbd3f3416173b0a7f6820ec86438ec4fbcef3ce48098\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-win-arm64.zip\",\n              \"hash\": \"f5ea5d74abb1df516b74e46fb4255cb5244066eca9b845dfc1acc14518448e7b2f8ef2b28ed0a000abdf8ea29191128c456b8237e6d5d81685292edd8f95f23a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-win-x64.exe\",\n              \"hash\": \"0034730f01718788a993823bda1d536c97224494c0211ed8d952f83e8fc6fee1b78425a97df45c7cd0848d9e5313dd6699bffee766f53673c7fb95aa31a4a2fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-win-x64.zip\",\n              \"hash\": \"c581624af3590ae63d28f8041aba1c79f2c58c3cdd600cfe155de9da85a17748a1a8c40657a2a4f580664f8f2d28df20a14d15d4e4ed30c05bc0b2296aa69e53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-win-x86.exe\",\n              \"hash\": \"f14892c024ad12ec808d0ea9306f647cfbabc30537053a4700d14ab2f52714c1ddcb8806613629cefb31fff40ba5e318d245b58de5bbfefca19bb07cbc7c0ab6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.109/dotnet-sdk-6.0.109-win-x86.zip\",\n              \"hash\": \"20d6bc74e5077b1a9ceaaf8da40defe5bcc3ead8fc155714445f2a451396a89d5d14a0567b19386ae96acb9bbcc69980c1130f4f707111f8fbb2160679e9cec8\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.9\",\n        \"version-display\": \"6.0.9\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22232.9\"\n        ],\n        \"vs-version\": \"17.0.14\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-linux-arm.tar.gz\",\n            \"hash\": \"c301b948d5121b4363c8ee9df2915c6c4d588fc0969cae2761f20fb8770bf93e2807b307acca3e313e41adee3f426c47af800b0394700564a480740bd12aa746\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-linux-arm64.tar.gz\",\n            \"hash\": \"ed3315276f918f52188430b0d84d843e938c770e0be06afaec6de0b398a1268bae0195c71a29971923b5b7331b6bb64a623a27f48e21a4c8538fde2a543b2dd2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"03703940ddcbdb45350d09cea211380660f831be68c1d50492f98d97e77ff0aad706ca59cd15c260164d5134f92b724d45846f79edc0dea049da18b8e43c1052\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"55945e23e2f4140af61f785a47ee15ec94880d52683e1881fb184b2341a1ecf8e04650e1fd896dd44d9493fe0fd3a9365f10dadb897560f42f1bc4cf5b7b9924\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"eb8013608488e7a15dfa847229b7a3d0771312bcf63ddd099846c0ceaf7b506b8a2acb41de40affc8e72adb0526d5c6daf0a059e19e73436f4b3bdc258e153a4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-linux-x64.tar.gz\",\n            \"hash\": \"e808036155bc324335c309aaf948b2be1940a62eaf0135752989644698653c8f3a5ce310c3ee6742e3af73dbe175c6e529298eedf6eeb31cc38bfeab628f6d7b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-osx-arm64.tar.gz\",\n            \"hash\": \"d47e828c160b7e162f26d0074a47a1646863fc63fde393758d020546d03843e3f98adb92e3c0041a9088ad31043314317a2e8be616f8079d8c98754f94eb55cc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-osx-x64.tar.gz\",\n            \"hash\": \"d67dd72cfd0fb9d96077bc6c3518fabbde107d97b4645c13dc82ec99abdfb4030e10638e4fb0c52aa5246d90628348fd877625469f14fb45e4467934229749d7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-win-arm64.zip\",\n            \"hash\": \"6267cec00397d83347760c23051220117dfd7431003c9065f5d3f7d34d1e7129a7c2065ced76ad0f3f9a8eaccc5ff8e4ba94a5e9a32b208387f2451ab82ab9bf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-win-x64.exe\",\n            \"hash\": \"e3fae121878e5d98f49aeaa0a20b03ece760fcf75429256b7af13b78608eeaa2d2485578ed952a410cc590008023e62584233bad0e34e9fa632d445bce7fa1f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-win-x64.zip\",\n            \"hash\": \"87a187781cb0b5cc364ed52d240feb703855698cfc6c24e49d331ddaa759cfcb135813292fb9d18dc92d182531d8eccf3a50c0494415ca5776afe8cc5230b650\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-win-x86.exe\",\n            \"hash\": \"493d9a5388a0e6bef4fed091465b58a5cc6d9c148478e5a9822d76eca61395cffa93ebadaec78c9f7e1da5ccecc00881baf10b757ca9c4eb9d475fb8ede7fc53\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/aspnetcore-runtime-6.0.9-win-x86.zip\",\n            \"hash\": \"de25ba89b7319c270085aea53bfacbf8d13bcfaf499528649af1f3a9ed37f0c543ca468e3527398a3289ecd41c36b87ca00d646dd3ca128ade2f0ff1359775a7\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.9/dotnet-hosting-6.0.9-win.exe\",\n            \"hash\": \"fb8d8099fbe193e37629c01dc1727f6ed8efb27e47321738cba9db03e733497eb0c8d69bd99b6723a56178f8d049eaf60064ac8bf089986e859f34707a17c0fa\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.9\",\n        \"version-display\": \"6.0.9\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.9/windowsdesktop-runtime-6.0.9-win-arm64.exe\",\n            \"hash\": \"a741c4af559526d69e00be8d0d954d365d67f30739af9d142fef28b0197ebaad9f169108b71c4cfa9ba94cc86fe2f0900f8a3165aa1cd0349c74defdf9f6157d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.9/windowsdesktop-runtime-6.0.9-win-arm64.zip\",\n            \"hash\": \"d982d1500578ed7c3fcc7d7e284779a229458b3c53609ce65f5ef0ac8a86513c9ce07c0232170cf5ec343ee3818e82d951f1b1ed29d67c8bc5d2d6ee3cdd0a47\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.9/windowsdesktop-runtime-6.0.9-win-x64.exe\",\n            \"hash\": \"28cc3d88e6fa54938177937118260e9129967246e30d2140fdb7a4a8e9e393efec689d6282edb6982853fd3ba27701239a8d1ee81a2dd28c93b186f1a3cb1b55\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.9/windowsdesktop-runtime-6.0.9-win-x64.zip\",\n            \"hash\": \"e66575bcb2cd5227f6d53dd96e4b57052f47cfba56c73ee6a475b846c420e03f36592156c5a8c2a4bf76fafde6a81ba3b7a02557f76caed09eebf496b892dd27\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.9/windowsdesktop-runtime-6.0.9-win-x86.exe\",\n            \"hash\": \"6b45a936a15710e22a03c64ad4f37ee4a934d957d31e78f73533099109bbeecdb8eab7ec0749c2ecbcf90b72c9d6c7462252885f7c502f68e636167cacba3de0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.9/windowsdesktop-runtime-6.0.9-win-x86.zip\",\n            \"hash\": \"5c2e86f566511d5c712b6afd01cb4b14c068bb29cb5c7c381e7c0e9e0d51d03b792e3c338b59897176af0497d2930c9b74ca236da445dcda09163e7f1726033f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-08-09\",\n      \"release-version\": \"6.0.8\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-34716\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-34716\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.8/6.0.8.md\",\n      \"runtime\": {\n        \"version\": \"6.0.8\",\n        \"version-display\": \"6.0.8\",\n        \"vs-version\": \"17.0.13, 17.2.7\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-linux-arm.tar.gz\",\n            \"hash\": \"15720bb8dbd3002bd5058f86f05122be56805d7e22cc189acd34a97602ceca13aa832ccdcb171741b9507294bff84e9a190a69c1ed5e4f50bdf562fd93f006fe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-linux-arm64.tar.gz\",\n            \"hash\": \"7cd60eda5219a6b882e53e85e2b6543dedc91605503ce8085f447835382fd1b6abd7c8810e0fd865ecaa33167cedf2a33884dd4eb2bdd2857fe69d509cd62a9c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"c50eb9781eb48f958ae286ff06f7c9a85959c8793d91d389b6f1d162bd8eb50d0014a0f8a34a623d7b6fda686717558eec9b59fe4fb752c27baf43524dca83aa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fca50a3dd625d5f430edcac9186f0ce3b0690e504c95cee83221b4b3c332885392e854cabde1557940a71e3decc260cd4a79a4e45ac41c792297a4c35f2ecb52\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"3e627b704f291311c7c54251745a0dac294259fa7984cb0e6c99103ce012aa724add3be883679895aa3e9692b6166639871ba62830165a120759a98bc03eeff8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-linux-x64.tar.gz\",\n            \"hash\": \"c776813bf87c25766b31a3a514d124d0526086ceea514a10f104d70ba435c91a6bd3c8bf10c6662b4df2b13ffcdf385518f3418e51d05cccec6a2cf2c26099de\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-osx-arm64.pkg\",\n            \"hash\": \"096481fd7e5588952efa84a2243e540146d70773032dc4fd77679839613a4c84df433c332d6de9cc09ab5fbd19037edc66fad357da56daa43cdea102caa7019a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-osx-arm64.tar.gz\",\n            \"hash\": \"99264f4e34e2b6e1a82f3716cce5753967f3386348593e7f51085d96dbec4acf1400a451e9320afbfb45a9b777df1f8bbed8e78d7c4810336f3d226bdfd4343f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-osx-x64.pkg\",\n            \"hash\": \"17621b72b75e0a68c5e4ed3046d2a3e1ceafb927fc39d1532d87d17443eddfd177ed1274b4d75a4dadc4df27faddb76ef0cd8b51c0657de41dc41b0d0fa74d95\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-osx-x64.tar.gz\",\n            \"hash\": \"8100003430b073e9f1f16910eef8af5a5ea806754a1818971ba15f4ba44e12455330334bd1488088880f7ed3ff67c2a4c4a3d8037f4202c95e6bc029806c8b15\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-win-arm64.exe\",\n            \"hash\": \"3190abc32f625234b6f7bd05ca6e5f9c8e1919b6409c668712b4542dd247b04b33a4169e4e65d6ae2313ed10959416da98521cb42a87f8e5d8cc6b9cc2470288\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-win-arm64.zip\",\n            \"hash\": \"50ae5abf60cca9c62fcdd7d45d64982bd3ab5c3c5fba5cb905bdf075f63981a8d52635edf36e2090ac16980af6c02543de3411c449fbe32f9282242646673ce6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-win-x64.exe\",\n            \"hash\": \"c839f650460a7d89e6d7ba5e074885d25abaab882c94dc8dc8ce88347b23afcf5b109db6c800922d0b36c20fffa0ecd40a506447789e15473da22fab0d86a176\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-win-x64.zip\",\n            \"hash\": \"365503c27d555c687ff7fbd36434fd4c71f2bcbeaf16f7761cd6ee2355c04b9bf54129595ccf13087cde8c2e177439d7f4cf0e135b470a7ce1b4188a6cd80e6e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-win-x86.exe\",\n            \"hash\": \"439a0f6d92af686d30641c8efdaf3adbf4bdeb0720441d90931fb12e0589b82b052d94adcbeaf8713865832e2ca670ff37b36eaf6099799a8a781631f47a0fe7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.8/dotnet-runtime-6.0.8-win-x86.zip\",\n            \"hash\": \"8f1a330e2b8d97b3c9481ae77671f283a5e27f1a799ad8759c73c0e4d08e38d307f66c67017a143f8ce8fc9fccaa92644e653c33fc3ad820be3452c343c85778\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.400\",\n        \"version-display\": \"6.0.400\",\n        \"runtime-version\": \"6.0.8\",\n        \"vs-version\": \"17.3.0\",\n        \"vs-mac-version\": \"17.3.0\",\n        \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-arm.tar.gz\",\n            \"hash\": \"a72aa70bfb15e21a20ddd90c2c3e37acb53e6f1e50f5b6948aac616b28f80ac81e1157e8db5688e21dc9a7496011ef0fcf06cdca74ddc7271f9a1c6268f4b1b2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-arm64.tar.gz\",\n            \"hash\": \"a21010f9e0e091bf0a4df9dfc4ec9893c056c2b07b10be093ea392a4fa5c8a38bad9535f66e570b45dc25165b685199fb729434b845bcfb35f8b79cceb22c632\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-musl-arm.tar.gz\",\n            \"hash\": \"43688531b305109c2862288a60e923a43e694b88e7af9779f1ec1144587b8aca475ddc7f29a5364d8a8719c7816f98c3e56c436f37fdbd5a968d2fffb30c6dfb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bc19c8217b48000a76b34ec0ece60fd9aacd32ad0de005144abe83702816ba98c32421cfbc7bd78f0cf1d1dbf2779e54fae07939422e1ba7b3d0a82553bf9ab6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-musl-x64.tar.gz\",\n            \"hash\": \"e5f27cc44cfdfa3237cac49127288b357d7351c36dee7202dc1d15239e25d6da770679d2d7f1e01a6d1b89d18e7bd44b196f6a54e87ac564b313c49dc4828055\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-x64.tar.gz\",\n            \"hash\": \"8decbba0a6b09501daede52cbb5a9ae9e5f31ade201918c03efcd1b4cc345ec934f88321704ec3beb1f90f2204934be7259c76f66d9204cbdd15933582602763\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-osx-arm64.pkg\",\n            \"hash\": \"53faacfdf57fa722f278992f61122fcf8383b2811a22948ac70331cb870344f4193cb67950786b99eee389f64f63851747c19d16ec4a34e0db97a6e545559655\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-osx-arm64.tar.gz\",\n            \"hash\": \"c3b016bc558f42fba29a8aebcc04be7b3aa3b0290755b6ee2fea1f48f921da78b86cb31913c4b7e32c0421b45a617b551ba593f98f349fae43ea1faa38348412\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-osx-x64.pkg\",\n            \"hash\": \"1f30e5e83b74fcd86230a2999f656634eba02892fb0d5ac12fc6e8a9aeac76e27fe22368d069bb1f17d4cacb0b5c5234ad0cbbd21d7a0670fa7dc9ff320aa155\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-osx-x64.tar.gz\",\n            \"hash\": \"35b80347e31baefdbd42e7434ffa0df1069367a4f8deec8b4051a44658b3ed531832f0e92357887a2f5a27c6433304537c846cdd4793aac874bace82a899053e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-arm64.exe\",\n            \"hash\": \"0e0fcb82aac11452b0d3f86f9b3799f81ff4a5c5a49563ade0ce01183265c81e9bf368ea1a4359aa94fb45022e52943d0beea14a3ba9365c8d47a6d5771d3887\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-arm64.zip\",\n            \"hash\": \"1c26a05aca21d0289cf1f306c6281d8950296aace8f6a6e0ea93502f927705c2c272b77a3ab901b26ea18da1c8f6e30e18216c33e9d77200e50c8291e05ace4c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-x64.exe\",\n            \"hash\": \"2ef178ceb63590e548fb644d265c4e1f8fdc319fa7d9f31442a958ac901198e4d1edc1b6ea213527bd9f5fba7925d7a12ce9a37d0fc791862518df70fa597f61\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-x64.zip\",\n            \"hash\": \"382d0ea5d78e18691a4e5789db174df1ee0d64062a7198793776db1b0857e303bd23d12008dd87d952fe8d5a4d3fd2eb58735a46db7c26b5b9e3fb51f3435c66\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-x86.exe\",\n            \"hash\": \"a9a163b6613fd8287deede5901e8a66b2def51b0967c6acb9e3c0d1db81e5d23b797542d728c86976024c6b448ba900ada5e999bae17eaec3d02ca7531a7d030\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-x86.zip\",\n            \"hash\": \"3388f18cdc52b84d1502fd5727dcb3f10477556e5b4cd4c1731b087ba3aaa4669876c119e58ec3b0b78054d295a92210948dd75a9d19ed96249e54b8b1c7fcac\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.400\",\n          \"version-display\": \"6.0.400\",\n          \"runtime-version\": \"6.0.8\",\n          \"vs-version\": \"17.3.0\",\n          \"vs-mac-version\": \"17.3.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-arm.tar.gz\",\n              \"hash\": \"a72aa70bfb15e21a20ddd90c2c3e37acb53e6f1e50f5b6948aac616b28f80ac81e1157e8db5688e21dc9a7496011ef0fcf06cdca74ddc7271f9a1c6268f4b1b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-arm64.tar.gz\",\n              \"hash\": \"a21010f9e0e091bf0a4df9dfc4ec9893c056c2b07b10be093ea392a4fa5c8a38bad9535f66e570b45dc25165b685199fb729434b845bcfb35f8b79cceb22c632\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-musl-arm.tar.gz\",\n              \"hash\": \"43688531b305109c2862288a60e923a43e694b88e7af9779f1ec1144587b8aca475ddc7f29a5364d8a8719c7816f98c3e56c436f37fdbd5a968d2fffb30c6dfb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bc19c8217b48000a76b34ec0ece60fd9aacd32ad0de005144abe83702816ba98c32421cfbc7bd78f0cf1d1dbf2779e54fae07939422e1ba7b3d0a82553bf9ab6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-musl-x64.tar.gz\",\n              \"hash\": \"e5f27cc44cfdfa3237cac49127288b357d7351c36dee7202dc1d15239e25d6da770679d2d7f1e01a6d1b89d18e7bd44b196f6a54e87ac564b313c49dc4828055\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-linux-x64.tar.gz\",\n              \"hash\": \"8decbba0a6b09501daede52cbb5a9ae9e5f31ade201918c03efcd1b4cc345ec934f88321704ec3beb1f90f2204934be7259c76f66d9204cbdd15933582602763\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-osx-arm64.pkg\",\n              \"hash\": \"53faacfdf57fa722f278992f61122fcf8383b2811a22948ac70331cb870344f4193cb67950786b99eee389f64f63851747c19d16ec4a34e0db97a6e545559655\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-osx-arm64.tar.gz\",\n              \"hash\": \"c3b016bc558f42fba29a8aebcc04be7b3aa3b0290755b6ee2fea1f48f921da78b86cb31913c4b7e32c0421b45a617b551ba593f98f349fae43ea1faa38348412\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-osx-x64.pkg\",\n              \"hash\": \"1f30e5e83b74fcd86230a2999f656634eba02892fb0d5ac12fc6e8a9aeac76e27fe22368d069bb1f17d4cacb0b5c5234ad0cbbd21d7a0670fa7dc9ff320aa155\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-osx-x64.tar.gz\",\n              \"hash\": \"35b80347e31baefdbd42e7434ffa0df1069367a4f8deec8b4051a44658b3ed531832f0e92357887a2f5a27c6433304537c846cdd4793aac874bace82a899053e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-arm64.exe\",\n              \"hash\": \"0e0fcb82aac11452b0d3f86f9b3799f81ff4a5c5a49563ade0ce01183265c81e9bf368ea1a4359aa94fb45022e52943d0beea14a3ba9365c8d47a6d5771d3887\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-arm64.zip\",\n              \"hash\": \"1c26a05aca21d0289cf1f306c6281d8950296aace8f6a6e0ea93502f927705c2c272b77a3ab901b26ea18da1c8f6e30e18216c33e9d77200e50c8291e05ace4c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-x64.exe\",\n              \"hash\": \"2ef178ceb63590e548fb644d265c4e1f8fdc319fa7d9f31442a958ac901198e4d1edc1b6ea213527bd9f5fba7925d7a12ce9a37d0fc791862518df70fa597f61\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-x64.zip\",\n              \"hash\": \"382d0ea5d78e18691a4e5789db174df1ee0d64062a7198793776db1b0857e303bd23d12008dd87d952fe8d5a4d3fd2eb58735a46db7c26b5b9e3fb51f3435c66\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-x86.exe\",\n              \"hash\": \"a9a163b6613fd8287deede5901e8a66b2def51b0967c6acb9e3c0d1db81e5d23b797542d728c86976024c6b448ba900ada5e999bae17eaec3d02ca7531a7d030\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.400/dotnet-sdk-6.0.400-win-x86.zip\",\n              \"hash\": \"3388f18cdc52b84d1502fd5727dcb3f10477556e5b4cd4c1731b087ba3aaa4669876c119e58ec3b0b78054d295a92210948dd75a9d19ed96249e54b8b1c7fcac\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.303\",\n          \"version-display\": \"6.0.303\",\n          \"runtime-version\": \"6.0.8\",\n          \"vs-version\": \"17.2.7\",\n          \"vs-mac-version\": \"17.3.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-linux-arm.tar.gz\",\n              \"hash\": \"444b8055f6814d5282e320ae243244fa27fe8afe76356c7d06e03a399ae2d41806cefc523a7bf12f36931931da88964d6797f1758a9cf23671aae318f41d3167\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-linux-arm64.tar.gz\",\n              \"hash\": \"b6eed880882873a35fdda99f8cc4a3d7b72851004244cd9a2e8656b475c4e766da78cfb33e0f034e742da39200b583ae9970c284e1401f1a4645c9d9d4429282\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-linux-musl-arm.tar.gz\",\n              \"hash\": \"f29f3fb2422fd4ff1045e75a949da19ff980780e34f2d6e27ff4c3e78e9d68dce8de6f509e7006b58ae2bb85cd5e5d53af4672e1abb84d66b21bc8051cc7463a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4ecf2182f710b628a4cb2ccc72befee3cb504848291d8ed3457a5b8fe6690ea5a9936226b7583acd0bbe05fbdc904e79b78fbb1cebcb21d2645e40b246d5fb0d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-linux-musl-x64.tar.gz\",\n              \"hash\": \"b8204b5cb80b1f7b937eb8d498bab68c1fdf97eb54e2692e882c254523909266bcadc84a2ac54847bafc7be68172fe57c0b8de20adf107504b1e91a0153e2fc5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-linux-x64.tar.gz\",\n              \"hash\": \"f4ad1bce2d677c4068a32290a1cbeb32f2784c258c0e569547119ccb8ffed04b42d163ed9795acefb2116bc20b91cee5493556f399dad2853641b0403517dcaa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-osx-arm64.pkg\",\n              \"hash\": \"1a6292b531f658eaa3ca2c7af4ef04cbb552c791c8a82a9baf4c1d43cc104837cc1186bff6e68c9b0927619839148ecdd92a181aa98e84bcc66bb0fac4517ff6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-osx-arm64.tar.gz\",\n              \"hash\": \"43a7d600b6e19e27e588d038691289846f42c7fc988e60eb4c7cbef946d3f12c15b4c2fb85b3153bad7bf94a08a3ad340871e992b88bb7a099d9e88c307a28a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-osx-x64.pkg\",\n              \"hash\": \"3d752937c3eda788ffd74a21eff2f2025e3f80ce0ec17f64858727ef92a45482f717f47417dcb094f1d8671569d11a682b8a7218b0d6bd2771ce54126997f9cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-osx-x64.tar.gz\",\n              \"hash\": \"671ad0d7e77ea86159fe798616c0fda8e817e1a28ee4958258da329adcb8f694ae4476d93236d63106b8bf4fd2b533a622254cf105d74046bd87ea71c3680537\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-win-arm64.exe\",\n              \"hash\": \"435394bb60013c34f529f2eb85001246fccfcbc5b5fe465bebbf9cc11034463d33a192902dfa8f1b7869a40dafef46bb5718e967e3e44571323526e3960e522f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-win-arm64.zip\",\n              \"hash\": \"0927bfb57ca6e7dad39c71269e812ee0babc7bc58482f7a54a6473414dd3596373f02240fba48679b0c924198dfc6113f12824a9fe3f3a50c03c6dfd84023fa5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-win-x64.exe\",\n              \"hash\": \"fa0d0f31ed17333261d1871fd3a76e68d6367417b3973418205a2a66a28aaa384b7a450f10e3bc42d48911eb72899809add46651eef0809b1ca8ee40baed1b66\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-win-x64.zip\",\n              \"hash\": \"aa0d0c9b0ae6d0c95a00094bfc86f6d43723f23fda4b9e22d99d6ed349ff98041dd4d83fec968583d4c7b015ac0889549eb6c089841d61e101da03019d2131d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-win-x86.exe\",\n              \"hash\": \"9e9f27d98d807da234c24c9c464df2c448dba33f5c52e7f9a74650d255f5401ec3bdc963cb7e484fabddec4b0958a4220560c228f7ef75628db963117ad00022\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.303/dotnet-sdk-6.0.303-win-x86.zip\",\n              \"hash\": \"fb3d8e80bd08fb030ffee87ed734a3de78098d7f74dfe2cd8fb27ecc6c313c903bf5da5539b400a38770142fcd0a3d16aa8bbfbaf429418f96b6d0b4b0bc4682\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.108\",\n          \"version-display\": \"6.0.108\",\n          \"runtime-version\": \"6.0.8\",\n          \"vs-version\": \"17.0.13\",\n          \"vs-mac-version\": \"17.3.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.3)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-linux-arm.tar.gz\",\n              \"hash\": \"c3726e053b447e7baec21e015a91dddb884a79a483c7d2a247f2fe143a5cff25e5d7e822944c6b12f0b030d39b4e71c1da437e2ee4c094dd1bcdeccad3c44568\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-linux-arm64.tar.gz\",\n              \"hash\": \"95f5c47fb27882f5554b0ee0befb813357875d6bfd19447c7c902ce225ed394bbb6cd945c5f7d5233fe0d3a16a1c006f47eba9d6be51cf8578fc5fbeba2806f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-linux-musl-arm.tar.gz\",\n              \"hash\": \"c3df5c67338a035445d5447801f631baa579dbbf2eb8abd236baa1e4c18dee46cff66ddd1dafe1a29d45f1d329b89f78cac81f03c0edc44aa9426496b6197d86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-linux-musl-arm64.tar.gz\",\n              \"hash\": \"38136f1257df79049d90f6dd34dab74ddc3644c6b7cabd1f1cfc58dd23faab0b151484a6304f728b5ef789e70be64632f2eb7c47c8da1ba2961a84bb7613f9f4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-linux-musl-x64.tar.gz\",\n              \"hash\": \"c9a6712efd48f5213749b7898607475d8efef847f67688cb8fb8f2f864e77316f76ddb0c13c6d5315d7527af06197664c817bcadebb3de891296fdb1c4fd08c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-linux-x64.tar.gz\",\n              \"hash\": \"a0c9bdbbe5a47bb11a547b2351bd37d2febb52c684ef2af82849bab274a10e876456519807845b52cefa0a72f5555f6bbaa254d810999726f4b3b9a761b4aa18\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-osx-arm64.pkg\",\n              \"hash\": \"509a3703cd907cee5489cfe1e56f7b3349fb309d34346a2358975cea571196e84232f1901d9c3b63c247dedfe1623cd328260390403de90e0e71451b81201a91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-osx-arm64.tar.gz\",\n              \"hash\": \"fb2c6da786214cb3504f59167f86f32965ce962040463d5fade71edb4454bb15083c7e9d823f8a513fdcd267c6c66bafa40a7957bd69ff0ea42c3fef85951601\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-osx-x64.pkg\",\n              \"hash\": \"9c3b06e1a3bc0677e58fc59797bb224c77b9d38c122895894a633eebfb9f3372762f7028bd67f4c55b8bc11f7433cc111edf3cdd7123171cb1ac620f86e9306d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-osx-x64.tar.gz\",\n              \"hash\": \"56d2946b9d10ba7bc2d91e095ff18c3e576d84ca24b6307524def867d2b222e3f729ba6f74e986960018307599f6790f8fe3476603accef83a9443b8f5c8b61a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-win-arm64.exe\",\n              \"hash\": \"203fd1d4742ce5abea25d9fcf8bf0750e0a31471b2aee9598bbf25752a06d98b1a1346458b3b51b3885954b017da0682311cf7209647086a1ac9fc359f07fb03\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-win-arm64.zip\",\n              \"hash\": \"a6f7e0d9cf93ebcfbbaa4973d71217e92785d85c9cbc7e11ffdc6bda1aae3c1c8dc293175b2174bb5c39ee9868dc5aa0a91589793e294ceccbc72633c8399121\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-win-x64.exe\",\n              \"hash\": \"0ef49a5cd1c70e448d1cf39e69882e650972c888c103ed7babb2a20887ec5d975650526bf4299f423f410285e79d1e50067348dc3ccac360abf72e4bbf3dcd5a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-win-x64.zip\",\n              \"hash\": \"90611fb657036e0bec930d7512022a0f60eb62bf3b2aabdba4f89958de1ddf033ce0255a1ce8c3e3f2928ef04cd05b807a20c298cc1583667e4f7e5e6b795720\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-win-x86.exe\",\n              \"hash\": \"9a8f0f7521b21808b40bd83bd10d259f915ff299fab0a7d8ba25d4eab6fd5f165b117c9ed8f894d21537b65e0c48b9b1a78c2f0182eb58c8b08cad5f1c86f433\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.108/dotnet-sdk-6.0.108-win-x86.zip\",\n              \"hash\": \"636a128c4ac8956fc13f935c34e6885b719d592ecbb8a66f151a9e4352c2a03147ffc12c5c6b1bc8be0ab66201535a1a9f12f732f7fba0506dcdac3a6e6c0203\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.8\",\n        \"version-display\": \"6.0.8\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22195.8\"\n        ],\n        \"vs-version\": \"17.0.13\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-linux-arm.tar.gz\",\n            \"hash\": \"db0416b62a4fb84ea660e9157caeeccd4b44b75f07a0a0086edf5d26c2ddcf6837f06b4a009b2e66687656b37e403b037036455a89f9bc021ea302faa20ac858\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-linux-arm64.tar.gz\",\n            \"hash\": \"07babe85c8872ca303a17268b0d23c382a9ac49f8b923c45c496db039f6c01094303cd18cd31f964ba7369bb993c896eeadbb7e458a77d5b86992222b91db52c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"458830ae8c2cc00d5da0f6bbb59e1f7f452aebff1035898cd8ca2338f120a0a2fb126de97b0a92371ab0cdd2d21cdc3f50bcb2f5018ac5156f31010498c0ac9a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3f1fa3ab0947f4f38836e37fa6ba4a5611c5b7c491677b2b72345115a29fc46431538d095dfcf36204dd116deb458ba2c10404a9ab741c2dc2d497d494212356\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"28655f1769477e62cc0eb776283d55bb1a921c42aa4e772612bb42d4441f425e792e236934ceb5e6bc880e71ba30cdd8b9cc290ded81a6a96739cf07ef72ecdf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-linux-x64.tar.gz\",\n            \"hash\": \"b74676ca0d2f47a95533739fd36977bb1552890a81820ee51b29b3d6514398f0952362417bbb31fad4bdf031803cb3e8d2aaf065dfb154a78a1b471a536d4abd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-osx-arm64.tar.gz\",\n            \"hash\": \"a6cabc3b4c7350deb141e122c194c7eefaf99127cee726ee227e4218add7155b8decdb2a5cd217f757410e267f2370a78806c22a0294098f245105cea925a7b2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-osx-x64.tar.gz\",\n            \"hash\": \"73d3569c13965de927e9d1eb02ce7d31b44643335a351ddc6392be1a693837263287d9bc5e82a89f2456b7a9cf1bd6c217d9f98cf9fa8da1b6c820e9ddf43933\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-win-arm64.zip\",\n            \"hash\": \"4a3af285ccd24e051c371cb1c703ffff013b3dfb0f85b94ad40293e4e612b48e9aff493e660db0fc73b56eeedc629bff371f8989c93e2e31108cd398865b21a1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-win-x64.exe\",\n            \"hash\": \"de8ac0c44b71407221454f2ddc8d667ad956dda6288f64a8c1b8211383a3a7ce3a205c6827668c8e79dee787f4c252c1b4399345c132bc07059bfbc523589caf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-win-x64.zip\",\n            \"hash\": \"9d3f71cf99bc82014c78eef0c3149247b469e7a991534a73e764a5be4954fee26bc081443e0d2d273d86440c16762d20b7ab7ddbbd9bc99f95e2bb45a2acf0c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-win-x86.exe\",\n            \"hash\": \"151ca062ff13ea551433b56d118f7a9ff8020b236c087c590b1c16e4e3a7a08828efc53d47bcb0676b929fbb707008746d24a58ddacb0fa59a2ba8a50f4d0264\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/aspnetcore-runtime-6.0.8-win-x86.zip\",\n            \"hash\": \"b8d751501bbd289553923c41e1e821d889322d7432c504e1a2be673c5118737ba049b4900039429980831998d9c41b4ff6ce626e03fc1a8b206b6be145e5803a\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.8/dotnet-hosting-6.0.8-win.exe\",\n            \"hash\": \"5835cca327c6c7788e1d87ae5b310300424b866f6618181fe67691b47938732ffdd5444ae2ca425344efdaa6e454299bb2b67af0063e470eaa24a3cafeaea7bf\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.8\",\n        \"version-display\": \"6.0.8\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.8/windowsdesktop-runtime-6.0.8-win-arm64.exe\",\n            \"hash\": \"0cb088c6f3ab8f901019c3a6d45d90130fae090c1e530a12788f118377b0c54096530f4bc1fc868fb4cc8f5c17373a5106f6fcb77a4cb8a7d3bc6ff69792f277\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.8/windowsdesktop-runtime-6.0.8-win-arm64.zip\",\n            \"hash\": \"97c182e8543e91c3500d299bcc6b4ff954f2b71ea882934e911478348ca6369ba25a358a912e8299a7ec4af626e956090653bac9700a9af8866fca6e778f9b67\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.8/windowsdesktop-runtime-6.0.8-win-x64.exe\",\n            \"hash\": \"53d5f38ebec2675d43c618c32533f3b8684384839b4bfa83902d06be535a56410255e26ee0a4844c170f7536be9039a126eebec8577a781b8a0c30c00a7ad20e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.8/windowsdesktop-runtime-6.0.8-win-x64.zip\",\n            \"hash\": \"17a689da1dd9ec47c1ff5c62a93fe9bed01c15a30f60faea136b997c809a978004d8bcec7752d2acb9995a6d31d1984545dbfa2ca0292e38248360bcd1b5172d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.8/windowsdesktop-runtime-6.0.8-win-x86.exe\",\n            \"hash\": \"74738784718eb1f6db893ec084b7a9b590f8490b1976df536d20d7b145767217f6a5c2cb7fb923e917e20e1f0e8ed3d835008e15147b53c3c0e3b6fd053a4190\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.8/windowsdesktop-runtime-6.0.8-win-x86.zip\",\n            \"hash\": \"691d80f809175eaf4bc4737839bd1a3b4045ff98a8c891537fc13116ffc0afa0f098ba94ccfdfaaac187ec24f6dae34b3ad469e502e1040e96b41b59cacef858\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-07-12\",\n      \"release-version\": \"6.0.7\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.7/6.0.7.md\",\n      \"runtime\": {\n        \"version\": \"6.0.7\",\n        \"version-display\": \"6.0.7\",\n        \"vs-version\": \"17.0.12, 17.2.6\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-linux-arm.tar.gz\",\n            \"hash\": \"afc44cb3e99df350a53eebe6e757889047d4bb6da417a8c73c97d3a15d66efbea2ccbbd4f272a280bcdcb616ef13607415900167592b0de930476cbf4e511408\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-linux-arm64.tar.gz\",\n            \"hash\": \"a63e100fe80cb64febfd2920e4065b3cc99f759c3de0897928a42cf14fdc963df324bef1354a7734420078d16e52fd8257dd480da465d865c4349c29cab1ef91\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"dafd7efe1f9a47b72a4b89e15c9d662420dc22071c547603894386bf2ba8eeff2b793b56b49f0db4f78dd039e875654838228476ede2dbecf76ffc4e7298ad8a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"815dbe96eb4ec34c7cfc2856d6e3a98b8d8bbc13aa698c96e6ff69bf8f403df589c6dc54d465fae5692dd0ac198f66898f846ffdf6b22dcbc9566fbf99430f3b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"dc8374ff31d4ae29094815a8df48c777614153820a0ed47454c882fed596aa485010eeb852543e3974bb8d3b37df143bf1c6a3a22305835907c350c2d40017cb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-linux-x64.tar.gz\",\n            \"hash\": \"996bdaf33be0a9c0f1e2d309b997e3a84a31e28d2424853d7fb1600212f4ce600ebe1b9615de5e46c17652f08ad0d7ecd4b3619217c9624b875a26a553f370d8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-osx-arm64.pkg\",\n            \"hash\": \"46b67cbb67246127aca2f641bbc8f54cc41b7a9702de4748e93d52f1d68843a3b7d016d9cee2fe220a3dccf2e869bd33f09d6d24bad2140c41657a282851370d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-osx-arm64.tar.gz\",\n            \"hash\": \"9f08a535921df7c1ce837ef27478f2381e8132a9ebfec7630465fb3243ef2ec9e982d008faec69e0899675dc3a50b379a96967d1eed3c04dada40cb211489127\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-osx-x64.pkg\",\n            \"hash\": \"88537768a655134b2d4e52b548af44c9aff672ce31c52f0438af14e6a0cc335fc4d34d6c5d70a2116b33eb95cb7d738522688ba359f5c0496630e33b528de1a6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-osx-x64.tar.gz\",\n            \"hash\": \"9c53d16971f0366d6d69fbfe37e92eea806faa1c3502cc1050c0e6d2cf394cf886761146e344862a30d0cb131105f387c05d8ea207be8aa87c81cd4c8f962110\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-win-arm64.exe\",\n            \"hash\": \"8e868e1af18a8dc8e9fbbcb71b767a1e18d1e1921233a7eb5056cdf108d7388951e031e1a2a9d99814f9b01dbebbe0f82be471f612fa6924c35c0ad234a0d0c1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-win-arm64.zip\",\n            \"hash\": \"e835fc3a28c336f98aa66d79441430064c5c22dad6310669782090ed7111a9738b793ddec62afb432f5fbca0ec1bbe0ace565e87422bd4a5369a8b5b04c3a3ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-win-x64.exe\",\n            \"hash\": \"ac60eb4d4caa13050b05539e7ea45b0703457144dc127f981cccb8465b60ed058a51feb8682f95032f0a7406f0af70a224793c10062521eb37775d64deda61a9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-win-x64.zip\",\n            \"hash\": \"8124484bfe21f0cf7c2bb4b15992afc8cd9fdb676f7c3f36cb720c3f1459107b2bb8a5ced770fd40292a0c42f5fe24cb39bcb064d06e4f20fdbf11ef5dd55140\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-win-x86.exe\",\n            \"hash\": \"3dce55b6b44be3f0fd55d1505ce4760cc805cfd8e1ce36f128280ed7a1d15b0bc18aa1c81b420f28092cb0f7094130f3ea06aeb5fa0dc34a1bfb6277b835088b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.7/dotnet-runtime-6.0.7-win-x86.zip\",\n            \"hash\": \"ddedd5a75b1aec67bc0a5972951e9a4c3adb6ce822bb89bf6de5451411daaf221c089098116d276cfdba670853d12614679d29d690d68bfc376efb2dc521af38\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.302\",\n        \"version-display\": \"6.0.302\",\n        \"runtime-version\": \"6.0.7\",\n        \"vs-version\": \"17.2.6\",\n        \"vs-mac-version\": \"17.0\",\n        \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-arm.tar.gz\",\n            \"hash\": \"0d31c7e8ccf02c8dea92d7b60bcb15e15912d74e7ee2ab8fd88ee03c4fbd8f292c356357d08ec23c2aedc5e3e0803d42ce16f3fff36245739d0cac6634bc3387\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-arm64.tar.gz\",\n            \"hash\": \"26e98a63665d707b1a7729f1794077316f9927edd88d12d82d0357fe597096b0d89b64a085fcdf0cf49807a443bbfebb48e10ea91cea890846cf4308e67c4ea5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-musl-arm.tar.gz\",\n            \"hash\": \"ad9c16342b13c18c3d81f24bcba304fc0d86dfc0c868227949761828cbec5099e425e15a0371c9422c3da12571a4c7c9e321dd297951c220b3842fc3cc89f067\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b8a740e1643d2b089063f7bb6966223ecf62f898fb8c45c22f89243883e0ebbdc66188b18c77d2b166481a675511a9c437dad43c957d94559155a882f9cbd9db\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-musl-x64.tar.gz\",\n            \"hash\": \"badd3f9c9cda1529235c0894e697ec4e0088237c6b7dbb6bb10e124f2d610a3a143a52f2d6cb6b7f197c70f34a88c555397a786dae45200dad1f2e3a18247da5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-x64.tar.gz\",\n            \"hash\": \"ac1d124802ca035aa00806312460b371af8e3a55d85383ddd8bb66f427c4fabae75b8be23c45888344e13b283a4f9c7df228447c06d796a57ffa5bb21992e6a4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-osx-arm64.pkg\",\n            \"hash\": \"0fbcc2a47186ff2cf00c527097353e1519d15410c7fdb80ccc271be4dd558ddd2e4a422d231e5ecbba8f284de79d6524ff1fc75bef7f016bfc5f7e61137155d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-osx-arm64.tar.gz\",\n            \"hash\": \"59caea897a56b785245dcd3a6082247aeb879c39ecfab16db60e9dc3db447ca4e3ebe68e992c0551af886cd81f6f0088cb1433f1be6df865afa357f90f37ccf6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-osx-x64.pkg\",\n            \"hash\": \"56f74dac49c5729744fc6e2997d04d58fe807d4e28bdc67b2757d7c21978805cb2e7bc6c78e4f33ba2d591ce4dee9757837a275d9928e6e1c68874f753100dbb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-osx-x64.tar.gz\",\n            \"hash\": \"003a06be76bf6228b4c033f34773039d57ebd485cf471a8117f5516f243a47a24d1b485ab9307becc1973107bb1d5b6c3028bbcbb217cbb42f5bee4c6c01c458\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-arm64.exe\",\n            \"hash\": \"f4ea89be4b38a7c48ed0bf4e83c56ffd675a35129df6683837f654255d3347653f1e40d6c6fe033891d7d7c8a94dd5ffa291e4c661629b9782fc50dc2b80e43a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-arm64.zip\",\n            \"hash\": \"175a76307e1f8aba0ad196c17c1a0099c265d0b3bcfd2410ee4b13afc27139bf7e563a97b388c1f02aa880389b6f45f37d4728d6b304eab27ce6ae19c38a2387\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-x64.exe\",\n            \"hash\": \"29866c4eb29d3238acd168d668fcc35933bc9e61367104e893ecd3d648990792fe928fada230885c7a2fecdf02a056edecda22d25cdbb9f6773648d287bc1ff3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-x64.zip\",\n            \"hash\": \"45d476c2c286a55930800c2a0a095374e0bda6df907163c82f73ea79debe9b29f82da0a76bdb3d415d28973a009d84f45edba22bc91777985d24e88216f3332b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-x86.exe\",\n            \"hash\": \"eaf426203d91ccb8a073584563d486e03c016ebf98048c1a15af226d74f7e2a03aabd0d05f95dd62c719dbad6dc17142f1b6696b50465addb00dc211de0d6b5c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-x86.zip\",\n            \"hash\": \"300607e3e952d31c733214aa77d650f43671519b7d536787ffc46401c349926410c670c2a57c7bab5fda989b6e3c5c6b37e42a98c8f581be9fc771fa66ff6fc8\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.302\",\n          \"version-display\": \"6.0.302\",\n          \"runtime-version\": \"6.0.7\",\n          \"vs-version\": \"17.2.6\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-arm.tar.gz\",\n              \"hash\": \"0d31c7e8ccf02c8dea92d7b60bcb15e15912d74e7ee2ab8fd88ee03c4fbd8f292c356357d08ec23c2aedc5e3e0803d42ce16f3fff36245739d0cac6634bc3387\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-arm64.tar.gz\",\n              \"hash\": \"26e98a63665d707b1a7729f1794077316f9927edd88d12d82d0357fe597096b0d89b64a085fcdf0cf49807a443bbfebb48e10ea91cea890846cf4308e67c4ea5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-musl-arm.tar.gz\",\n              \"hash\": \"ad9c16342b13c18c3d81f24bcba304fc0d86dfc0c868227949761828cbec5099e425e15a0371c9422c3da12571a4c7c9e321dd297951c220b3842fc3cc89f067\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b8a740e1643d2b089063f7bb6966223ecf62f898fb8c45c22f89243883e0ebbdc66188b18c77d2b166481a675511a9c437dad43c957d94559155a882f9cbd9db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-musl-x64.tar.gz\",\n              \"hash\": \"badd3f9c9cda1529235c0894e697ec4e0088237c6b7dbb6bb10e124f2d610a3a143a52f2d6cb6b7f197c70f34a88c555397a786dae45200dad1f2e3a18247da5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-linux-x64.tar.gz\",\n              \"hash\": \"ac1d124802ca035aa00806312460b371af8e3a55d85383ddd8bb66f427c4fabae75b8be23c45888344e13b283a4f9c7df228447c06d796a57ffa5bb21992e6a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-osx-arm64.pkg\",\n              \"hash\": \"0fbcc2a47186ff2cf00c527097353e1519d15410c7fdb80ccc271be4dd558ddd2e4a422d231e5ecbba8f284de79d6524ff1fc75bef7f016bfc5f7e61137155d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-osx-arm64.tar.gz\",\n              \"hash\": \"59caea897a56b785245dcd3a6082247aeb879c39ecfab16db60e9dc3db447ca4e3ebe68e992c0551af886cd81f6f0088cb1433f1be6df865afa357f90f37ccf6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-osx-x64.pkg\",\n              \"hash\": \"56f74dac49c5729744fc6e2997d04d58fe807d4e28bdc67b2757d7c21978805cb2e7bc6c78e4f33ba2d591ce4dee9757837a275d9928e6e1c68874f753100dbb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-osx-x64.tar.gz\",\n              \"hash\": \"003a06be76bf6228b4c033f34773039d57ebd485cf471a8117f5516f243a47a24d1b485ab9307becc1973107bb1d5b6c3028bbcbb217cbb42f5bee4c6c01c458\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-arm64.exe\",\n              \"hash\": \"f4ea89be4b38a7c48ed0bf4e83c56ffd675a35129df6683837f654255d3347653f1e40d6c6fe033891d7d7c8a94dd5ffa291e4c661629b9782fc50dc2b80e43a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-arm64.zip\",\n              \"hash\": \"175a76307e1f8aba0ad196c17c1a0099c265d0b3bcfd2410ee4b13afc27139bf7e563a97b388c1f02aa880389b6f45f37d4728d6b304eab27ce6ae19c38a2387\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-x64.exe\",\n              \"hash\": \"29866c4eb29d3238acd168d668fcc35933bc9e61367104e893ecd3d648990792fe928fada230885c7a2fecdf02a056edecda22d25cdbb9f6773648d287bc1ff3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-x64.zip\",\n              \"hash\": \"45d476c2c286a55930800c2a0a095374e0bda6df907163c82f73ea79debe9b29f82da0a76bdb3d415d28973a009d84f45edba22bc91777985d24e88216f3332b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-x86.exe\",\n              \"hash\": \"eaf426203d91ccb8a073584563d486e03c016ebf98048c1a15af226d74f7e2a03aabd0d05f95dd62c719dbad6dc17142f1b6696b50465addb00dc211de0d6b5c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.302/dotnet-sdk-6.0.302-win-x86.zip\",\n              \"hash\": \"300607e3e952d31c733214aa77d650f43671519b7d536787ffc46401c349926410c670c2a57c7bab5fda989b6e3c5c6b37e42a98c8f581be9fc771fa66ff6fc8\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.107\",\n          \"version-display\": \"6.0.107\",\n          \"runtime-version\": \"6.0.7\",\n          \"vs-version\": \"17.0.12\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-linux-arm.tar.gz\",\n              \"hash\": \"05364e5f3c3be3f66420310c1fe26550d639c6e95b43ed004ea79017ee8c973d73349ff87c5eca4c560f80fea55a435c1c22f3889d5c015b85474533395245f4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-linux-arm64.tar.gz\",\n              \"hash\": \"946b43f0da3e5d94d20163d6a94fc4fcef66c1c18d6fa02530e769201d96c9e2125c0f35532ea87e0c5b4f3a491daa6d4b8d6dd23f4eb9da32625ca0a4065e14\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-linux-musl-arm.tar.gz\",\n              \"hash\": \"906ce7c142152c297f8b88c697e80c3a2a532365244b5774860f48aa9d3e9dd5aee08c9f41ca8594146720474300dca2ef7a48f81ef797f1a11bbb1b60e98c38\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-linux-musl-arm64.tar.gz\",\n              \"hash\": \"31dd771c031655d7786491a3940f706d2dde0a8a1f6dca40f68977abfbe4d36e7e4a7fe0addcef08d031271ac10d8c3378145754978cd8939cbcef2b10a35a02\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-linux-musl-x64.tar.gz\",\n              \"hash\": \"171de172825103635229bb7870a1aa86ab30943ad82fd423693264735f5af8c54bdb2f1669cfbca51bb0327266e66885b42382539ca68754cebc2a5ed26521f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-linux-x64.tar.gz\",\n              \"hash\": \"cd03b0a04230371c5c6cc9368722123771a80e38f9a7dad9f831263b319821139d68e37f6e0321487f5fde86e96985965a12f0b3a74fe05d1e917d587775950f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-osx-arm64.pkg\",\n              \"hash\": \"375d8f2ca7ac2dcadb9c9ec3defc1d902052e8a6fae4611fbecfcb16f533d8ac734720a547ec09cc396917fbbc8bb920a0dbc07c9500cfe15a943d1cbe1ecf88\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-osx-arm64.tar.gz\",\n              \"hash\": \"0e317c33b2f88d34136d25a7419e5989a853e5728d9a4d378e1fa8e993e96e86cd03a46b8b5091cf0e0deb598f6ae8046ec2272d0a333f97db5bf6d222437a8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-osx-x64.pkg\",\n              \"hash\": \"89a0101cb2cb87158b72854252077c73b0e86ff322628be5d6cfd2b2182b6bd11dadcb216d1badaa400791c8932ba398f1f2097a096e5d10c2de6bcf24ce8a19\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-osx-x64.tar.gz\",\n              \"hash\": \"9fe4359eb8c97c0198f044d0d5963d4e334ed7754cbe3985933a79eec917e62c81ccc44cd9f76df3732b3818febcd925bcd0a5f78bfeca7666e6c52f3a821df9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-win-arm64.exe\",\n              \"hash\": \"d0633ae2e571090d86d04874b0c99c56d9c669738a988c11a12e6a939f0200f55348fd9f7d3f210e5808cbe9f7f5e8c20ee73718dee10a57c8a57137dccc58c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-win-arm64.zip\",\n              \"hash\": \"0ad65d407a24cea892192868e7c4c5416e747626616d42b3b2b76f6717f9b2a4ef5265e399555fc350c7311e232988515243acb6a282f4cee6eccdeb53dd4ac5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-win-x64.exe\",\n              \"hash\": \"5a6826ef13bc4c76b61efbbb5fe498d4c9493173791335812b4e7faf0616deaed08b031484cb9679aa8af2087800483317cdaca2a56275d7ad380dbc487e7042\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-win-x64.zip\",\n              \"hash\": \"8607e122c4827b3c0f178cc6cabf38bc5efe7dcb52c535b49e5dd006650769ceba09e94f31664f1d58523e613709b7437c7167bf65b71ddd1f3e002f6100535f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-win-x86.exe\",\n              \"hash\": \"23b1b6ad927bd6b2c89b0824576e7e62f876e8166446e9d701bfb4c3cbe49f6cbd702888600bd6fd6115b02628b7aa8080e337fd1f24b52f19ab1d66ab695a53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.107/dotnet-sdk-6.0.107-win-x86.zip\",\n              \"hash\": \"8aa6c470747b6df24c97a95c5fc4237a33fa0d7fe2ab77c7c9ccec8ec686d795c8a1b5d5697aa12f2c6ac9c67bbf8db304aafd4108d361cbbc7a72af587bb86d\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.7\",\n        \"version-display\": \"6.0.7\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22173.7\"\n        ],\n        \"vs-version\": \"17.0.12, 17.2.6\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-linux-arm.tar.gz\",\n            \"hash\": \"db6bf23ee6b475dcc0eb9c1040a660310bb2f020f4162ac480ac898c3984e5f6a9982aabac63d10ee6d6e6aea6f4d1f300270fc8fb08af9fef3daa618c9adfee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-linux-arm64.tar.gz\",\n            \"hash\": \"0c7317d2170f2632afd7c7c3e5bd84075071802e901de1ed5e54178f8a56266fe0770ebd84502aff9384b06908d4d5bee9d464d215fb20d841de177174f55f93\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"653b59738d70355deb4d8b364ee2465001c761dd6c4f22538438632ee58558471f8a8d55d5ae759453e83150f62533b8987a3489210f4cd5ac1c15f87cffdaf2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"efac4d9f91a8f442f6223f77e09eafd4fec4d2daac395f968549ebba37285804c77617919c9cd3b900805e3a876d4d8aae2ade31140a6f278598aca4fd0c5995\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"676864175e8ac286b83ce231a5a218050998e8f0903521c7667e1e8b58b035dba45f90c8894e164f70480fc55e32a623b0fad229f28f59d692c53ca97b695092\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-linux-x64.tar.gz\",\n            \"hash\": \"d210e2afd009746d2c4d98c07077b89ce174f462c2bdaae9afea107a5b1c9c4ab63460ae3d9ae38c5388f591c0a95d8712359326013b23325b7be19b51835455\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-osx-arm64.tar.gz\",\n            \"hash\": \"4d9dccaeabc1490fb9261f0be0702c2f5b4e96b840edee94d50f9a4655aa4d85bcf5a16d21d43b0a543e5a90cc631510aba35000df465a4ffc6cca7de37907fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-osx-x64.tar.gz\",\n            \"hash\": \"6c05250d2affb61a1f34ba297e3c9bd0ddc42d64b1580f5e8cfa218a079cc455aa183f683869ba52e7b9ce58fb223dff8ef9776d4b2e2421ed7e2058d4af0750\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-win-arm64.zip\",\n            \"hash\": \"a2e62f329fca498c2e3d16c9023cd9914e780fbe635fdc42bd2f66018989e6e38bf1a1cbaf833abe0fa855a786feaef3defb6fd886c03e6cbeb4ffca4c6eeb25\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-win-x64.exe\",\n            \"hash\": \"7f42e5ee589a663aeb0c816f2e4172187189d92bc3c29fafc14523074bb793d58b238e64be8b001350b6dcbc111a5c9514b0def7acf6b6534290f5502206cd22\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-win-x64.zip\",\n            \"hash\": \"e2c52af3361fdb9d5897a238e8275f7f9df8b37bd2b7d6f24c7b889111d1f1fd80f30b1a68022dee3e7378c6973a37f1ad0c96cea4c22d73d3cb5068d1cb3efd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-win-x86.exe\",\n            \"hash\": \"8b99a164e67aca14227f8eb90165e16189cc2ffda21c276e1ba100fbdfe6d83bf87bcf89f2423ebeef21c9e6eca6dcbf8896690a6fb9235fef7bd7f02b3494ef\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/aspnetcore-runtime-6.0.7-win-x86.zip\",\n            \"hash\": \"db43cbde0e6f33acd9e6d8107b330de5f1f8c7e13fba86ba281c74af2b6903ecffc6067411db89b90c3b051b13c5d325c7c6e9553139f669d1f75c11c3116cbf\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.7/dotnet-hosting-6.0.7-win.exe\",\n            \"hash\": \"e3f8a2ca63eafb2429f9db1a430f1019e7915c0fc6b866110e3c71e10ce470e79bf6926e695cf3ab08bd816e5d61e7d3aa8c998d33ba102f1c3bfb225ad29ced\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.7\",\n        \"version-display\": \"6.0.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.7/windowsdesktop-runtime-6.0.7-win-arm64.exe\",\n            \"hash\": \"1ab666244683bdf5c8297e52d6e2553f20b110b063ddd016e82998568ecf818f4d756f1a78fb8049ad25f9ff75f6ed2ad862f8b0576df32f7d6d344588815615\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.7/windowsdesktop-runtime-6.0.7-win-arm64.zip\",\n            \"hash\": \"c38d6518111187e684c6f9867b60ae78867f0464951a57a59855bc7d6502d5a1b1e9b9600440db62047ec4efb0a003e992c75421160a05e58c565d690ce8c7c3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.7/windowsdesktop-runtime-6.0.7-win-x64.exe\",\n            \"hash\": \"b38fb7edb21348b1cf6ee7310dd7fe03a10844f47418d993aa8145d7232a4e2d22a3388b591bdb9c3bfbd9c7456a538ac299beb93f180f6cca73cb41f1ef6596\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.7/windowsdesktop-runtime-6.0.7-win-x64.zip\",\n            \"hash\": \"f2d6653ff1c0af81a6ba8b240d4c42464d5d8859e0dd85889829d4fb682b2d0a820e299abfe32ec22bb98e77ac266e0d736b7e71baf8b13c0432f2604c3f1243\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.7/windowsdesktop-runtime-6.0.7-win-x86.exe\",\n            \"hash\": \"33f65f54f979689122cbbbab700b7de90226088d29a6069f31f69b980c023fcaea4b822562018f8b450509925c5ea295e06a2424366f75088522d1c3d5409852\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.7/windowsdesktop-runtime-6.0.7-win-x86.zip\",\n            \"hash\": \"fdfac60c65109fc9a112eb8613bdf99f845d2d08286f9bc08c74bfc81fc11d6874c4780c5e3313c081d72e5c94c95e3bf38a8f7e91614dc8c551d6fa1834306f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-06-14\",\n      \"release-version\": \"6.0.6\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-30184\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-30184\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.6/6.0.6.md\",\n      \"runtime\": {\n        \"version\": \"6.0.6\",\n        \"version-display\": \"6.0.6\",\n        \"vs-version\": \"17.0.11, 17.2.4\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-linux-arm.tar.gz\",\n            \"hash\": \"92026b23ed3125fb93cdbd7c790a3f160f58a75122561950374e0ea7da2fa0efb002fbdfdddb9f26763ac92df88b6aa4c2e482ba54a0a7b4649517182f87957c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-linux-arm64.tar.gz\",\n            \"hash\": \"659bf64c5f2e11f2b8cf01dc595a4280d1960bf484fc379d3a382660eea7adb6e69ace49d84522a85920ed53fa2ffb95a3b0ca0ebf63dc909b865028174ed29f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"8bc37b9a22c6ffb944d511f757d5ba43359ffe9579f09b5a618a70004b615c87310b31f546ac3e76b045244a65177e7546b7715536ea56e831299e52de6c91d5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3fc7e84b45f2cef2e6d0b6d36cde21f4925cfdbff09606e7380f253d7949c34c63292f5afd143fb32f39fd633394de6482cded2614e5fa14e9653aac0e61b315\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"c950e64d7d95e979032cf2eccbc41911380141e8fb529aca5c05f23c4eb480d0182a8f26c64305efbfe409af3ad7ed66197b10e861ac795098c653ce6b1aa41f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-linux-x64.tar.gz\",\n            \"hash\": \"4fe090f934f0ba4e64a63dfccbac97d49b19a913f2a7d73abe85efd604ee5577cefd65d6e0dc02086e9fa28be4ce2bbaecb33ea70d022714138ed54deea58c72\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-osx-arm64.pkg\",\n            \"hash\": \"1ea80ef2419ba4fe373e0df8571f7fe53f3b3a4a04cb87a7b55d9ed8386d2a3e00f0741a50de6923489294554522697da95be666323d6192900c65806308dc72\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-osx-arm64.tar.gz\",\n            \"hash\": \"0cb4f3c808ae5476ebdbc18840846fb625a51ac5ce53688e83c3ae22a062095f9012c066dbcce231eca50ca3f057d7a29721d4b9cd04c9891ca26fc0c1c4a481\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-osx-x64.pkg\",\n            \"hash\": \"e15b0289a643314f2fbc803d48a808751599bfe749514aafe06446c14441e9a415c0003540d3e952a83f35f36c4f2b275d9c91f3438b5282af428effb3d2b3ba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-osx-x64.tar.gz\",\n            \"hash\": \"efe5b6287c4a62688bc94aae2d4ed8831ca5d62280ba477bb3efa49666c9fdbb9b091980837882b1b52ddfba566a8ab0071746cbfa63efea99a0bb3ebf19a2a1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-win-arm64.exe\",\n            \"hash\": \"352c5502ba070b7f8613b51c777446ab1434b3e7a4345adcd1088120402b49466e349e11b4dd9dcca274b265591ac494de485ce83f3822132ad003d438f9f1b6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-win-arm64.zip\",\n            \"hash\": \"75f05cb6b411613da4f1b20cd50df1bd4f7d2e29f2195edf3741d94fb2deaea6a0f41f542cac7a3fa3c3e1ab05dda406f036f8a416a8b17b76b5f4dd4bae3612\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-win-x64.exe\",\n            \"hash\": \"ac180f361b74af4145d141726f40e5d3d854f18f3bd96e7e4eef015e208fb1af04f12b285d3c18bb5d7abaf47afa5ab6609b66e78551aee1b6327dbb504c1edd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-win-x64.zip\",\n            \"hash\": \"d92bfb6ae6d06475a2fe5bf0b45d1a11a617a63a1df5ecefc822e455aaf08fa42c2f5331561f38b2c88118ee3078c8a0b5a79957cf713b150b41e8c944e0557c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-win-x86.exe\",\n            \"hash\": \"293df8c1efce6e3e7c03023fb581aa744587a43f98c64fb63300cdd8bfa26822cbdb88a4c94ac04959f0fe1e561b20a8a7ad0cfc240223e7022dcce5fca2024c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.6/dotnet-runtime-6.0.6-win-x86.zip\",\n            \"hash\": \"84455d621a5f919c5b4fe91df9cbbe264996763438a9a92940707554d1c7793070a9bc71f14bb37992973688435ee83bae8d8a359cb2dd8af0873a49b9f6eb11\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.301\",\n        \"version-display\": \"6.0.301\",\n        \"runtime-version\": \"6.0.6\",\n        \"vs-version\": \"17.2.4\",\n        \"vs-mac-version\": \"17.0\",\n        \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-arm.tar.gz\",\n            \"hash\": \"ef7d028b80eaaae18b71195e89e00dea2186d455f7b72f373fc0a57074e8320c8e9245167c06e30a2ddade4ab21ad5e8b05d04a6ea11c1de68b7c9a6f9807d25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-arm64.tar.gz\",\n            \"hash\": \"978dd04f78ac3d6b594c47f1482bba0abe93f0b37379c1c46a2b9b33bdf5188576b055250546295de39bb22cba93ea9b31c31bb026a319ad1b3fc507db44481f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-musl-arm.tar.gz\",\n            \"hash\": \"bd0558f10b9a112258a969afdfc14d770293b75a49b1d8aa15a2a71a492b18643d6a2a9570e055a0fa6a89dab11cd3532c5e02844dffaff2c2aca4aee25099fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-musl-arm64.tar.gz\",\n            \"hash\": \"63f2d1e84fa4e62d617e82ae3d9e51fad78d6fda78b481e3342925fef3d1166637841155baf3884d5730bc00b5b0c59d5e8b64bb6b478c0dcbd3d47ef40816aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-musl-x64.tar.gz\",\n            \"hash\": \"28e57adc8ac4a82bcfb2d3e623e43b04dc3f2327d7bbc130ecf122cb7d9d1a2f109f51fd14e9be0970e9ca4657d83d4771cc02e791c1e6ff4922d51b89af5f93\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-x64.tar.gz\",\n            \"hash\": \"2f434ea4860ee637e9cf19991a80e1febb1105531dd96b4fbc728d538ca0ab202a0bdff128fd13b269fac3ba3bc9d5f9c49039a6e0d7d32751e8a2bb6d790446\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-osx-arm64.pkg\",\n            \"hash\": \"f389a0dd8e0a83457b71ac34a2b77453f56d7959ce522f927a07a458ea34f13a5efe67a3ac0446aadbc6dfcf1b1b96108ab6e2bbbee19edb3ca048d6fc8ba060\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-osx-arm64.tar.gz\",\n            \"hash\": \"899558be856769ad6ccc4606f3a9f996327a7395a72acb18a5fb0899e0c4c4ba8c90b94f16771439193f87a974e1e884dd55a9fc6649fe929ebe47ef19cb4efc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-osx-x64.pkg\",\n            \"hash\": \"2c022addf200031e323816cb2e1f2ef56caa25318d82f30ca185417b8cc4bf70e6a8d6e9a66fdb56ea40fe6cef0a8dd42ef5ce9ac24bc5013ecc242b4efd1994\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-osx-x64.tar.gz\",\n            \"hash\": \"027328a353b65fad0618d1e5abeb973c9f05787d9432631bf9ab5fafe636ea2f494f70c0704e81a1664fe7a3519174bd269dbc795b651b14e9a86c83f8e3adec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-arm64.exe\",\n            \"hash\": \"fc3bdc0301c41336904405bd13a6fd2e6496f8ce9c41492e3f2492978db4a63b1ceb9b8b413b579aa1e9489bd9024eb4b2ae4115bf221ba1a786f9db9341f186\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-arm64.zip\",\n            \"hash\": \"9e32717f5bfd890e50a01b731d3b195bd66cfda6fb27c6267ad38fcde43bfc112231ae38ef6eb12f5293fac9da4bd9bdb5e299146c8305bba843f14abfb7e90b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-x64.exe\",\n            \"hash\": \"75f24e6836588bc0a866cb226e94b16780719296288261278c99d04a3bc6bef3431e3f0a48b01074c657fbec1db15bee64f0053b7eca1514121e61355bda49f2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-x64.zip\",\n            \"hash\": \"cc45e91a04850a175f1c6bcab104f1230067f3ead61d4fb4ddad19c641cfffcfe019cb38faad4b1f16367b6f67641fd2913184c09a8bb83abc51959003b48a6b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-x86.exe\",\n            \"hash\": \"1dd3da8df8efdf1c5658e809f941dfbf353f3394fb7aafc63725928aa813b0f50c89677a86711bae07a4ece5b5db69e1d3df21fff46e6c484736e1f0b2b60fad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-x86.zip\",\n            \"hash\": \"3ad48f494c64cf64ed3b8d7cc10b18dfbb3b3a7f77d4e40c6ad5b02ec17b4a9c83f1b2f5d9840113b313009864da254e98715a647b2db0306b0b47f088ec6a83\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.301\",\n          \"version-display\": \"6.0.301\",\n          \"runtime-version\": \"6.0.6\",\n          \"vs-version\": \"17.2.4\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-arm.tar.gz\",\n              \"hash\": \"ef7d028b80eaaae18b71195e89e00dea2186d455f7b72f373fc0a57074e8320c8e9245167c06e30a2ddade4ab21ad5e8b05d04a6ea11c1de68b7c9a6f9807d25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-arm64.tar.gz\",\n              \"hash\": \"978dd04f78ac3d6b594c47f1482bba0abe93f0b37379c1c46a2b9b33bdf5188576b055250546295de39bb22cba93ea9b31c31bb026a319ad1b3fc507db44481f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-musl-arm.tar.gz\",\n              \"hash\": \"bd0558f10b9a112258a969afdfc14d770293b75a49b1d8aa15a2a71a492b18643d6a2a9570e055a0fa6a89dab11cd3532c5e02844dffaff2c2aca4aee25099fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-musl-arm64.tar.gz\",\n              \"hash\": \"63f2d1e84fa4e62d617e82ae3d9e51fad78d6fda78b481e3342925fef3d1166637841155baf3884d5730bc00b5b0c59d5e8b64bb6b478c0dcbd3d47ef40816aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-musl-x64.tar.gz\",\n              \"hash\": \"28e57adc8ac4a82bcfb2d3e623e43b04dc3f2327d7bbc130ecf122cb7d9d1a2f109f51fd14e9be0970e9ca4657d83d4771cc02e791c1e6ff4922d51b89af5f93\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-linux-x64.tar.gz\",\n              \"hash\": \"2f434ea4860ee637e9cf19991a80e1febb1105531dd96b4fbc728d538ca0ab202a0bdff128fd13b269fac3ba3bc9d5f9c49039a6e0d7d32751e8a2bb6d790446\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-osx-arm64.pkg\",\n              \"hash\": \"f389a0dd8e0a83457b71ac34a2b77453f56d7959ce522f927a07a458ea34f13a5efe67a3ac0446aadbc6dfcf1b1b96108ab6e2bbbee19edb3ca048d6fc8ba060\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-osx-arm64.tar.gz\",\n              \"hash\": \"899558be856769ad6ccc4606f3a9f996327a7395a72acb18a5fb0899e0c4c4ba8c90b94f16771439193f87a974e1e884dd55a9fc6649fe929ebe47ef19cb4efc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-osx-x64.pkg\",\n              \"hash\": \"2c022addf200031e323816cb2e1f2ef56caa25318d82f30ca185417b8cc4bf70e6a8d6e9a66fdb56ea40fe6cef0a8dd42ef5ce9ac24bc5013ecc242b4efd1994\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-osx-x64.tar.gz\",\n              \"hash\": \"027328a353b65fad0618d1e5abeb973c9f05787d9432631bf9ab5fafe636ea2f494f70c0704e81a1664fe7a3519174bd269dbc795b651b14e9a86c83f8e3adec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-arm64.exe\",\n              \"hash\": \"fc3bdc0301c41336904405bd13a6fd2e6496f8ce9c41492e3f2492978db4a63b1ceb9b8b413b579aa1e9489bd9024eb4b2ae4115bf221ba1a786f9db9341f186\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-arm64.zip\",\n              \"hash\": \"9e32717f5bfd890e50a01b731d3b195bd66cfda6fb27c6267ad38fcde43bfc112231ae38ef6eb12f5293fac9da4bd9bdb5e299146c8305bba843f14abfb7e90b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-x64.exe\",\n              \"hash\": \"75f24e6836588bc0a866cb226e94b16780719296288261278c99d04a3bc6bef3431e3f0a48b01074c657fbec1db15bee64f0053b7eca1514121e61355bda49f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-x64.zip\",\n              \"hash\": \"cc45e91a04850a175f1c6bcab104f1230067f3ead61d4fb4ddad19c641cfffcfe019cb38faad4b1f16367b6f67641fd2913184c09a8bb83abc51959003b48a6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-x86.exe\",\n              \"hash\": \"1dd3da8df8efdf1c5658e809f941dfbf353f3394fb7aafc63725928aa813b0f50c89677a86711bae07a4ece5b5db69e1d3df21fff46e6c484736e1f0b2b60fad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.301/dotnet-sdk-6.0.301-win-x86.zip\",\n              \"hash\": \"3ad48f494c64cf64ed3b8d7cc10b18dfbb3b3a7f77d4e40c6ad5b02ec17b4a9c83f1b2f5d9840113b313009864da254e98715a647b2db0306b0b47f088ec6a83\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.106\",\n          \"version-display\": \"6.0.106\",\n          \"runtime-version\": \"6.0.6\",\n          \"vs-version\": \"17.0.11\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-linux-arm.tar.gz\",\n              \"hash\": \"9973fa26f7129e4f148e65123512ba02644b78b47a7d4b1fbeeafd09038beac66664b285ace5e228a7818f0c35a357d31ff1d580795182c872c514fdb3b90e35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-linux-arm64.tar.gz\",\n              \"hash\": \"86fabee178d16dcf9b5ff3d2f786c72be6bea5838b69c9e02d3a356703799378094a87f3ae4cc3ed6564f2c762a1837c4d8f91a228ba94cf58546d5ba7363f8f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-linux-musl-arm.tar.gz\",\n              \"hash\": \"e860bba7ec61f83e1070700dee719f565c42e91dcc7a680f8f21d3571c6eba0e1fc4f62b5dc478a291e91d03d6810b24fcf66399c4005fceb5b3ecafb37a72c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-linux-musl-arm64.tar.gz\",\n              \"hash\": \"75b78c906c7b6613db37ff5c758f2006174c98fca336b1e682da2e07a858872f407b3c5bf57ee8c347c3a35b6af2eb2a56e05bb29ff7b4f26efaf758f6345649\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-linux-musl-x64.tar.gz\",\n              \"hash\": \"f8f5019ef265add53f1c26042e5abb2681c96e4b4bac82c29668b48b6952635b5681049b4e3fd49b56f864fec80f0bdd14618fe603da70fe0708a95b394d0112\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-linux-x64.tar.gz\",\n              \"hash\": \"baf66ac51feef61c16557cc87d54d5e347f175922098aa45fd1e03dbc2669b97f602c4de378884d95da25968df4700871a82484d8882b5cd0f9a2b049c15212e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-osx-arm64.pkg\",\n              \"hash\": \"37238a9cede87db14911e18456385179f72bafed8409d8a6fbaa205b38841424b017e2850b994cbbb798fa19be56a4c7b255e643ae5f03f63136415df953372a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-osx-arm64.tar.gz\",\n              \"hash\": \"51ae7a02bff806499e5c1a5a9ef6378e68fc6c3bcc3d68fdd83f992cb77d0a1468b4c532a4be1cf3c6966a186748361fa74f796dd59c9899413977fea84b165f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-osx-x64.pkg\",\n              \"hash\": \"ef09502c80c9c3a26fdcdce80ab0c42f42327b931321ca5acc29b273aaf562a52b03b1d12179e8124d12d88f58560dc4a5667fc78b59a651c02bdae4c2b15bec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-osx-x64.tar.gz\",\n              \"hash\": \"e17d2bd7b686ca924ddf30a25429369a5ec396ffe3a63bf2d2070078a01aadfd9f4184a1d66bbca01e96dc54a70cfbf7bfe506f8941d05bab99e8f8277eeb3b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-win-arm64.exe\",\n              \"hash\": \"830c69395d6b14f69f4643b2d3e121e7b16421f001a6fd559dc2b16665607571c4dd20cd6dbbeb44f81e3ec47fcf74cd08ba81660965f7bcb69bbf04942f451e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-win-arm64.zip\",\n              \"hash\": \"65d1854027f61d5b35e8cfed64bf8260075d9f09c834fd134bb8736ef56c4ebd4fc1dc7f1f8ff387dbbe22e640d6e52c288187b1a36cceff00a7b83da4af390c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-win-x64.exe\",\n              \"hash\": \"81ee133c927daf3c02d07699450dcf0e83efebf268a883eae3d3e23b97d8f1e59c00fedceddaf041bb6b6e89b23f0a849fc46617579778a8e40dc57b2034a0e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-win-x64.zip\",\n              \"hash\": \"a7f47c233d32b4cd0c446491f5afcaa99b7e69c82c65e3bbd17e372244e5f6ed6eb0484f6c3f50fea8680fbee1dcfc504afa3b7a3302d8f2a55ea50b42197dd9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-win-x86.exe\",\n              \"hash\": \"2b9e64f67fdb4d39a3b4e0160c63a420d179e52394efca21dcf1f495d1359e3424dbb23defb90a81c3c6a8d431e72d318df2dd2bbc5c75139a39b43908785daa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.106/dotnet-sdk-6.0.106-win-x86.zip\",\n              \"hash\": \"30fbc989ced1a016feb9f740d0d1139581398b4dc21120c6dc7202f4d3eaaabe2ae232e6e57c2cbb90f95dd3293f233f17143b217a46e534c3cdda9b72acdeca\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.6\",\n        \"version-display\": \"6.0.6\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22138.6\"\n        ],\n        \"vs-version\": \"17.0.11\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-linux-arm.tar.gz\",\n            \"hash\": \"311635857dc99d75f6fb7b002fdc0fbc89289cf56650c7e5ecb0c7ffe6016924146df798632d1148c23ce3dd613f3a206b3ffda3d94015241fa558ff4180b270\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-linux-arm64.tar.gz\",\n            \"hash\": \"a3bd7ce99ffb9b87766c49fcf28d802f4072af1d55f1d53ef4043a1a0b038a0fc8046669bbd82f64fb37e4c73703fa8f54a460caaa473d952baf941d23341c90\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"ae31eb4e06fc182c799ce41822c3bf03ddd4a948f96691b7559a5669dbc481d5177c6ed383c9d86baf3362ed297911f5f7cca22f14b945a7b20e90f6052621bc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fe7a33e2ff8ff78bcf3877dfe4d5b41ca6e5113cd926777fe2d3d0b4ca7a7dd1e205b515bbbce724c2e41ee544cb7e18c8cbe3caa52e4a91c7a4a43e7bdbb30e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"0ecaf750ecf0eb1da601baed2c71a7a09994fe82ef11c4896c57e07d480e5820fb9f92b5fe55e35bf72f067894b85d7d33d3955f15b670d4282ec5049e52f124\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-linux-x64.tar.gz\",\n            \"hash\": \"1a5c0f85820f0eb589700df94de6dbff45fe4089a37f1cd5b1fac33476a2cbd8d5c6f129e55b3716f5a7a2616f1a5a720c52238f21b28a510a3e5c8bcb8c516c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-osx-arm64.tar.gz\",\n            \"hash\": \"0d62c151b4d25d606becbc0a99d4ed3988aaae97a95990a8d5b6e0e220bdf661e3f7fad64dad6a479f8c9bbd42971d6e5fab7dca43b74ca7ccbc423fa5b200af\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-osx-x64.tar.gz\",\n            \"hash\": \"d1a469a5d27afd2f035f9865a295b8948bb2fcefd0e734c61ea8d0fe1b272fd1e0ba3aa4ad414aa68491fc611695c8d94064d1bb02d62cf1e7ea071a73a844da\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-win-arm64.zip\",\n            \"hash\": \"c8718f76f2c7e81b4ebdcf54e5d4a2278cbcf1fc899339a0769482ec26fe1de349016c1c814e025d94e20b23e98d5613e5257ca3e2c44f33832596e50e0f4d76\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-win-x64.exe\",\n            \"hash\": \"f82a64e442fb4db7133df64c53e7a69b57c904ad1ffde66219cd4e87138452f5860abd5c42ce8281ccf804f780f4583243218099491a3324e9dd55c9722bf5b9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-win-x64.zip\",\n            \"hash\": \"b5d72c13b9ca157cffa2a6b53f80e8cf4d405a899ed29313117f64d33ed59b4307316379bafce013645a14c58ef15804bb1149fba88818b73c076fce3c352ae4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-win-x86.exe\",\n            \"hash\": \"c092c5a459876a549577c43d6112fb584f855877afb615d6adf1dcb902477e30bda9bbe680a6965e6532fce1159923043b4687dbd8bcd6ef072604af3be84253\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/aspnetcore-runtime-6.0.6-win-x86.zip\",\n            \"hash\": \"e8bf2c894cb5fb33659002275ec5e0cadb26ce42a462d1b463e3b04853ddbbaf60694926bd1dad9c13c23450e0d6d034456e9e0ece153f582c855ba7c9fa4d6d\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.6/dotnet-hosting-6.0.6-win.exe\",\n            \"hash\": \"44db96cb9b22a10eba3b61daa9eae2080a21da751253ad8e56f964015944ec7430ff895f29370a56a091b8048ca228b1fecd41e1a88f29145b2b8f13efcb9dbc\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.6\",\n        \"version-display\": \"6.0.6\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.6/windowsdesktop-runtime-6.0.6-win-arm64.exe\",\n            \"hash\": \"176f8d10e890d253cfdc19b65fef83c6df299d10262ee3298299b1545b27ba2143ebc76a15f06ae5d6dace6a01fa2944b19af01fedb42bbac309d173b996ed71\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.6/windowsdesktop-runtime-6.0.6-win-arm64.zip\",\n            \"hash\": \"414c37303481514ccedd4633c51c1395b4a99b0a9852cf509f17e31045698e3ed939e758c399708fac8605efb89715b292757f9933a5786ddc384e299e9256f5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.6/windowsdesktop-runtime-6.0.6-win-x64.exe\",\n            \"hash\": \"b4b5d989fdfca6c160fbd769660f91aec47b0cc0764de1d2fb3de9d1b86d5c789a84376497574ebd86fb6fb1c7a2a6aaf52661932e8be4f4c2efe8a47a60e469\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.6/windowsdesktop-runtime-6.0.6-win-x64.zip\",\n            \"hash\": \"18e2b249e68ea61b5e3f73b0b82aed515c3ffe8e99925700ff8e399e42cccafaad618bfed9f9a6112b864b6219be9c9e2b0e4519a64bb18d9331dff39a0a6215\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.6/windowsdesktop-runtime-6.0.6-win-x86.exe\",\n            \"hash\": \"8de470e216dd3066976e916f887697817e2245e7ea3db68326356c959abe0bb5dd408f889d154718cc316f046cc8b592ed9022c164a8f495448b6deed3cd9d24\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.6/windowsdesktop-runtime-6.0.6-win-x86.zip\",\n            \"hash\": \"5de9b960208577caa0fdb618b53b09ebb97c30f28aec40d6ef2b24934ad2daeeb28eb7b62e66d0223e51d24377ba5359f9c679fda2b4e3983388e7d9f7284d6e\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-05-10\",\n      \"release-version\": \"6.0.5\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-29117\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29117\"\n        },\n        {\n          \"cve-id\": \"CVE-2022-23267\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23267\"\n        },\n        {\n          \"cve-id\": \"CVE-2022-29145\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-29145\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.5/6.0.5.md\",\n      \"runtime\": {\n        \"version\": \"6.0.5\",\n        \"version-display\": \"6.0.5\",\n        \"vs-version\": \"17.0.10,17.1.7, 17.2.0\",\n        \"vs-mac-version\": \"17.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-linux-arm.tar.gz\",\n            \"hash\": \"5180bc076629afa91096ed500ce966d1d62e7b1b6248a6a33d6e758a3bca8fdff382d90793d847f049a330f4a0964dd29b18ac8cbd374492f19d74056a608252\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"bed49b74ad60d2701ddd638c61c215ad48f5c6eb88df140545d29901df60c6667474ca9d3bed6583dba605282ec64989ff2b431f098f0afc6ed155af59f7126d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"bcbbaa72b6bcc667d735f42107181eb8943f0138d0093cac78a5ee24b167a1577b5224f0ec399057eea84bcddecb810f22cd307687176c3e2db3796b2b25fd8b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4b576997e7cf56f362db70d77ecca0b2dcf4f5435926eb0157242c99bac576112dde06b5aa396ba9b9d199d9d2427a10a273509f24685e5a2ac34dd5098a11e9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"de0224c5cb933ff557d19c4293a7a3591a54ae1b5d2de1f663195a1cab34c89986999fd63d43fe6d31fc5ad467d5f5cbd15636fa672c34303fc7eddb1708db7f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-linux-x64.tar.gz\",\n            \"hash\": \"c228f0ba0ecc4ccda708e97529b248dd6d70f7f747ead6453623be77e8e1529b54db52f5df1b5e00b5b7f92b73389560832f80607fc07e50879d55ce905afcf7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-osx-arm64.pkg\",\n            \"hash\": \"42321b4f814d18d751939c6ef878ed2bfa2a47338fc8d497488c4bd618905c0cc0b1376bf30221b6f636cde4260661a388951fb5b288986e0b36a3abf06b1521\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-osx-arm64.tar.gz\",\n            \"hash\": \"3222c366e7da30e39f00eb27c7ac75094b7f294daf105a5ba85cc7f046eb35bdda1c561f3234da3ea2aefbbd1701940557d4e3b31a1e03eda890c9b0b49effde\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-osx-x64.pkg\",\n            \"hash\": \"198b6ba1178691730b645e5ab5034538ac5b76bdaac6859f2af8072953f9fa6bfc77dc6e10490e597e6803d30164048530e1489084ef80ad0aa763d526282c8d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-osx-x64.tar.gz\",\n            \"hash\": \"fc26668071b989739fc139a06db9895602c179779f5051a01dc3543285239b0c50da0003f0daac2215b502c8a91170f55b748440fe711817ef3cad08266af9d1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-win-arm64.exe\",\n            \"hash\": \"48421d20f3939863ebd07300c231f36a2be43e55550662f589883f70c1493d971d2eaa437ebfc969f35f22b348fe0fe875838c336d351516cea5b29500008e00\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-win-arm64.zip\",\n            \"hash\": \"bc1c083483cbe5f6c31716d772de58cdbf76850f3e6cd7b90feb03969beef6a3624a621a25bc6d5ddc6e10edaa4488fa63917767c6ea42f8d6311111a60d7c9c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-win-x64.exe\",\n            \"hash\": \"2c4ea305b2deac4dd44616a994c78502c365c9789ad28d87359022a186a01bd00fda17faff96ce16ac8e4132f2d5366f677c02255f084748025b355e245b5d5d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-win-x64.zip\",\n            \"hash\": \"3e99e10e45b54f625f7a615dde83ac55149a53373cc576eaa586c2fb4822614d505f01972d384cdfcb7c996f5402ded491d187caac143ec75e74ee4b48eaf8cf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-win-x86.exe\",\n            \"hash\": \"1fc29711c4bfbfa7a52479eb588e078428ab2fc1a2781da06b20068ec4165da75770d1253689277c43ff752189f8d40c0fe653f174f06cb1896118558784e2c3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.5/dotnet-runtime-6.0.5-win-x86.zip\",\n            \"hash\": \"fc0b8745d07149e8728ee3c9a09866336d978ef1625277e1ecc91913951ce2057b90c6a5bb9d763197f642fae0f7c1802d16e891f534a8c78ac6e8c7bf82a2ae\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.300\",\n        \"version-display\": \"6.0.300\",\n        \"runtime-version\": \"6.0.5\",\n        \"vs-version\": \"17.2.0\",\n        \"vs-mac-version\": \"17.0\",\n        \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-arm.tar.gz\",\n            \"hash\": \"362e09bbe36a827beacbf36af6d66f7a6eb6da92e002e9a466a597f2fc181754e8893840c68c67a6c5e94b39e2dec1da360c72814bd904b325171ff7d06c56eb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-arm64.tar.gz\",\n            \"hash\": \"67eb088ccad197a39f104af60f3e6d12ea9b17560e059c0f7c8e956005d919d00bf0f3e487b06280be63ad57aa8895f16ebc8c92107c5019c9cf47bd620ea925\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-musl-arm.tar.gz\",\n            \"hash\": \"515762d63d070e5a0b01a442dfdfa9df02b683b2624ceba81617da4cb21141df47a469c50457962bb5ad6801eb529ca1bf845fc713357192b09201d6db349619\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4213881a029f6624011e3ae1082d4bb43783cbffac0a2bdc1865cf1a802884c416b9b7faee17099d689d0d18a2a1c1a03b9bdd0c42de27b721e05d872e4affc4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-musl-x64.tar.gz\",\n            \"hash\": \"c7a443e8e037be1b10d803f083832d7ac329006798c45d40d02a316009c886070c1ffc2033bdbe816df66e3840bfd7977f2f9a61e28235857a69c552a8d9c2fd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-x64.tar.gz\",\n            \"hash\": \"52d720e90cfb889a92d605d64e6d0e90b96209e1bd7eab00dab1d567017d7a5a4ff4adbc55aff4cffcea4b1bf92bb8d351859d00d8eb65059eec5e449886c938\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-osx-arm64.pkg\",\n            \"hash\": \"7c2085ec15565c67c8254b49596b5475d80fecf2ecdec4ac58fa532efa2130bace1afc5898a823d1ae7e77fe1e29a27ad6d51a79c31fa667bb39b25d421a3b85\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-osx-arm64.tar.gz\",\n            \"hash\": \"174cecbfdfcd1187ca71e5b741eadacc0e103cea75262f7dd15fdab6845226cec8def75cf4cbec3dc07bd085d003ac456670115b2f2a4a88f902be8a5c3bb3ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-osx-x64.pkg\",\n            \"hash\": \"3c0146c65e3cd2ecf4a60caa94553ad3978af23c0f90a3e5638e266631e945f94d5bc9d0d9947506c45b3c65e48fca97f34a4bb94dc14c391f2d604941eeeee4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-osx-x64.tar.gz\",\n            \"hash\": \"36118673ce1a49cf31658444f29b67dfc338b78eb46847a43f38de0ae68cf2e4d72039b1813a8972de31cd8cfea13a9861d075384e67b86f98ff6abb90f4bd2e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-arm64.exe\",\n            \"hash\": \"dedd832c7645fad3e5e270b07997b4dda117ecec44b05c276ae7e4c740d083e194496c914dc6d97c13eb74f60c192699f4397e2f0a4b359bb81f45e375053ec6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-arm64.zip\",\n            \"hash\": \"55f58f99afbdde247504b700594389fe5a95c95b2c0cb4a8c7ba45f6c57b74fe801803a918c704e1e84329d97e95cbb53b9f914e62f57af443c2dbf440b940f3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-x64.exe\",\n            \"hash\": \"8ab7f23e6dddb43349467a815a4b84b8d66c378f8da78cfe62c2654f5dec55abc42ab92bfbed8a5a38ad87ff0be70418a38ef4ea937010d7c1c40595a19f1df2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-x64.zip\",\n            \"hash\": \"579d886a6778540ac36098b511322fb99e9d5bdc07dd4cc1cb840da04286422019c091b133d306abd4dff9fae1154abf6e996625895db853c9140e6d9dba560a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-x86.exe\",\n            \"hash\": \"0943b0a9976f769aa354c04cf29b409a19881aace9100b87d75ef3955fb06a8798d6d4c4a714684c8413977f15ce922f1895e3770dc3285e0f70febe2cc86fb1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-x86.zip\",\n            \"hash\": \"c5065cd5cb872cebf66a11aac8731e8b9ece01c30c2fcbde6fb1f6839008590134486acb2f4038cd88baec0f90a784d5163753291b11b5f3e2f68e4882b7abd6\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.300\",\n          \"version-display\": \"6.0.300\",\n          \"runtime-version\": \"6.0.5\",\n          \"vs-version\": \"17.2.0\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-arm.tar.gz\",\n              \"hash\": \"362e09bbe36a827beacbf36af6d66f7a6eb6da92e002e9a466a597f2fc181754e8893840c68c67a6c5e94b39e2dec1da360c72814bd904b325171ff7d06c56eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-arm64.tar.gz\",\n              \"hash\": \"67eb088ccad197a39f104af60f3e6d12ea9b17560e059c0f7c8e956005d919d00bf0f3e487b06280be63ad57aa8895f16ebc8c92107c5019c9cf47bd620ea925\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-musl-arm.tar.gz\",\n              \"hash\": \"515762d63d070e5a0b01a442dfdfa9df02b683b2624ceba81617da4cb21141df47a469c50457962bb5ad6801eb529ca1bf845fc713357192b09201d6db349619\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4213881a029f6624011e3ae1082d4bb43783cbffac0a2bdc1865cf1a802884c416b9b7faee17099d689d0d18a2a1c1a03b9bdd0c42de27b721e05d872e4affc4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-musl-x64.tar.gz\",\n              \"hash\": \"c7a443e8e037be1b10d803f083832d7ac329006798c45d40d02a316009c886070c1ffc2033bdbe816df66e3840bfd7977f2f9a61e28235857a69c552a8d9c2fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-linux-x64.tar.gz\",\n              \"hash\": \"52d720e90cfb889a92d605d64e6d0e90b96209e1bd7eab00dab1d567017d7a5a4ff4adbc55aff4cffcea4b1bf92bb8d351859d00d8eb65059eec5e449886c938\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-osx-arm64.pkg\",\n              \"hash\": \"7c2085ec15565c67c8254b49596b5475d80fecf2ecdec4ac58fa532efa2130bace1afc5898a823d1ae7e77fe1e29a27ad6d51a79c31fa667bb39b25d421a3b85\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-osx-arm64.tar.gz\",\n              \"hash\": \"174cecbfdfcd1187ca71e5b741eadacc0e103cea75262f7dd15fdab6845226cec8def75cf4cbec3dc07bd085d003ac456670115b2f2a4a88f902be8a5c3bb3ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-osx-x64.pkg\",\n              \"hash\": \"3c0146c65e3cd2ecf4a60caa94553ad3978af23c0f90a3e5638e266631e945f94d5bc9d0d9947506c45b3c65e48fca97f34a4bb94dc14c391f2d604941eeeee4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-osx-x64.tar.gz\",\n              \"hash\": \"36118673ce1a49cf31658444f29b67dfc338b78eb46847a43f38de0ae68cf2e4d72039b1813a8972de31cd8cfea13a9861d075384e67b86f98ff6abb90f4bd2e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-arm64.exe\",\n              \"hash\": \"dedd832c7645fad3e5e270b07997b4dda117ecec44b05c276ae7e4c740d083e194496c914dc6d97c13eb74f60c192699f4397e2f0a4b359bb81f45e375053ec6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-arm64.zip\",\n              \"hash\": \"55f58f99afbdde247504b700594389fe5a95c95b2c0cb4a8c7ba45f6c57b74fe801803a918c704e1e84329d97e95cbb53b9f914e62f57af443c2dbf440b940f3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-x64.exe\",\n              \"hash\": \"8ab7f23e6dddb43349467a815a4b84b8d66c378f8da78cfe62c2654f5dec55abc42ab92bfbed8a5a38ad87ff0be70418a38ef4ea937010d7c1c40595a19f1df2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-x64.zip\",\n              \"hash\": \"579d886a6778540ac36098b511322fb99e9d5bdc07dd4cc1cb840da04286422019c091b133d306abd4dff9fae1154abf6e996625895db853c9140e6d9dba560a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-x86.exe\",\n              \"hash\": \"0943b0a9976f769aa354c04cf29b409a19881aace9100b87d75ef3955fb06a8798d6d4c4a714684c8413977f15ce922f1895e3770dc3285e0f70febe2cc86fb1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.300/dotnet-sdk-6.0.300-win-x86.zip\",\n              \"hash\": \"c5065cd5cb872cebf66a11aac8731e8b9ece01c30c2fcbde6fb1f6839008590134486acb2f4038cd88baec0f90a784d5163753291b11b5f3e2f68e4882b7abd6\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.203\",\n          \"version-display\": \"6.0.203\",\n          \"runtime-version\": \"6.0.5\",\n          \"vs-version\": \"17.1.7\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.1)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-linux-arm.tar.gz\",\n              \"hash\": \"e6cb656e4acf450023413cd0e155e9c4f294887dec1fb6c87d4e9951eb29d0ad697f50719e42fe3dbea0a34f9d297dce9261c541a7e43e6e4a359c8db215390d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-linux-arm64.tar.gz\",\n              \"hash\": \"552448b13cc77fc1e6189f4954eab16e8a87822189f3e488e6bc73ac099a8fbe6f34b667dabee637522e35edad30661ba32cdd4b94d57bb5cea9441e2f4abf19\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-linux-musl-arm.tar.gz\",\n              \"hash\": \"e8c226460c2a124afd9ca4ab877a081cd07cdd1d33b2d3cef9e3677321c8aaa2bb8c272966f4f65763ac7a949d81c3a78ca1bc6e602bd4d620503e00bd4660f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-linux-musl-arm64.tar.gz\",\n              \"hash\": \"15e1aaa9e0b5b28a8fdc32e963c1d346a53d3a5ece09e91d59d021fd8e0fb08c22f3eeccc43777d14a6d05bfdda32d075c65563420b9854aa466fbb3a796a7af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-linux-musl-x64.tar.gz\",\n              \"hash\": \"6d16711b06fdabdea151b9878e64bffe571055d7fac0f7abfaa990640d819fd67d5f1ea7ade05bbe91659012f9dc3900f24137cba1423e0e2fba116f8e87b9a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-linux-x64.tar.gz\",\n              \"hash\": \"08b97f34a74c9605eb2fef414b9df89e0bff5c0564672a1a7653fe37fce4e10c272aa0ddc1121d981bca04a3e98cd2346c679a18b6052f2afb08d767f49626f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-osx-arm64.pkg\",\n              \"hash\": \"60eb5c7e16ae6d29191d27e816ae6adda393969a39dac4b852eae5cb9fb0a417dfb736e0d5081e583736cb8db207cd526b1ad807f3fbb2408146c8b3c3243f3b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-osx-arm64.tar.gz\",\n              \"hash\": \"fb7841f78f658c863f88e82eda9694454ad2c8ddd01d81faef46a94cdc93d52b6a35d22e49ae28e36d205d3a915a924b6dbb7d16766e25180be597639f0ead28\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-osx-x64.pkg\",\n              \"hash\": \"40f364cd16593e2b78e4277985b7e8d840bb33dd61431683649d7f8b2e86a61e8315cb7c57492bfd36908a64627282c0223f1a01c634f7548f7a20193903a0cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-osx-x64.tar.gz\",\n              \"hash\": \"656cb5286edf4c21857ff2831d8650556569f5e662d41a9ee09d668b35cb4eb9672e0c67f6c9537177d20a7ff0573d1970b6d6c80bc11ce79a4decc0c3c55433\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-win-arm64.exe\",\n              \"hash\": \"d3a43b1091042d3ad9f84f88cd5682d95536fee8bcd9d7cf7817f35d1cda9794c6aca96102908f4741d5f294820cebfc9069c8820a06c5c03629e78a74673fd9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-win-arm64.zip\",\n              \"hash\": \"a84da4178bbc4ac36c9f44b3a7bc54567bab092b767a47b5c0f3a1a0e66c84f3d574f42de67b85d52c8a084832599c9c39b9749abf30d15c5a9adb34e96003b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-win-x64.exe\",\n              \"hash\": \"bbfcfb10dbee48bfa507870d86cdbf5611264694d395457de08f196be9415ac0e91ca694ac52214b2c38ba6c88587848328e8ba6056fec5bede30146057d40c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-win-x64.zip\",\n              \"hash\": \"71b5b2d99ebe1fe025bb341e463b1f6c459d1725e12e9dba14327e958849fa2f8e0dd310f77a705d0926e560f77df40476b9f9f5002a63bde43f07bc082b1715\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-win-x86.exe\",\n              \"hash\": \"8af6430b8ea043fdf1b902d183e3c8c9383f35625a8d5e2a441d936db12f9ccb3388138eda46005857785d2ccd0c3da8a9b710becc26266c95924707fee505ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.203/dotnet-sdk-6.0.203-win-x86.zip\",\n              \"hash\": \"e49482c3efaddb8207bfa9980d4cd03cfa7ab727e74e6366e29336493d8bfff03a4b87a5c749b9c3108526e964d9172fbb4b5b2b620b71a14844b26d49a88d94\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.105\",\n          \"version-display\": \"6.0.105\",\n          \"runtime-version\": \"6.0.5\",\n          \"vs-version\": \"17.0.10\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-linux-arm.tar.gz\",\n              \"hash\": \"edfb33b0956cf1398f460847505cebd8571b82ae870f64e48de54b67d5cbdb5d3cdcfe2328ce9f096d665751bae844eb5a1f66fb707da2ad888d694016444adb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-linux-arm64.tar.gz\",\n              \"hash\": \"e995bf3da74b2b9b0cb17339be5cd34299e2d5471cd72e923919e9ac22badde369d23357f09c3dbc121c10da366f6650ee8721adec3a11911ef5fed223b9accd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-linux-musl-arm.tar.gz\",\n              \"hash\": \"02b03d424411c9be1679fce10073e072f7eeb2064a7418cc18ceb1c9825f73ad63123ee9a7dc02dc1ce80c29adff08d6d787a0a3162e521ff8643d570d69436c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-linux-musl-arm64.tar.gz\",\n              \"hash\": \"e14f37173c082e5e0d6f8e8c650ef89b12127fa41570cc4a0b49e3d868a2c3b07a2aa291aba1abca56f477bd64685469b6d6feeca7e1f1921d06c85aa4723dde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-linux-musl-x64.tar.gz\",\n              \"hash\": \"d0d603efcc2db1e04898afe26a17bc0af316cc0d3965abd0faf5e45fa2b994fc38d177dfd17e8dd5f4f34c759607a44be3d1d2bd2a1509b276b706e4eaa22de6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-linux-x64.tar.gz\",\n              \"hash\": \"a5a45994e30b390a91110989d725fd5c3e639d0a79183dcd0f49a49909036195b694b413a85b935adfb2b22bb8ff7d6a6b6294fd7a633143cd907218b3285ad2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-osx-arm64.pkg\",\n              \"hash\": \"e65666c976b6f687e4871be861ba828a241b0d5dc74a249e07926f93435c64f8e9db370b19cdb07835a8373789d09fc916dda7a76a2a5ef421a9180e288af386\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-osx-arm64.tar.gz\",\n              \"hash\": \"e96fd4034a2dc25bd2ddccc29a2d7d8696708d2a9806e287957547e1694be48d1eb62d01eafda08b5a7f5f2d0092ddbccb9211cd62aa3f1915c5117ca12bb398\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-osx-x64.pkg\",\n              \"hash\": \"13e6ab876606c0bbd29446888f70d23876eeda2c0f9d456dea9d80090dca87ed2e51e240bdc74b1502d26df0ca44d80d2a1715b0299fc60b9dd39f933774400c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-osx-x64.tar.gz\",\n              \"hash\": \"b56eb3290738e7f6119d46916f2f1b9888f9db4c1c4dc02a5ac265aeb7533e82eec072f100856945fb1e1211a52bf37c2d48efce7ec04f96ae1d4c1ce6bb9c5b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-win-arm64.exe\",\n              \"hash\": \"b7ec7c6e76171c8b300ea9a0a3bd6a9cb8c5efdd8558c59d82098f323a151e17461faccb40f22ed47d126043803eca00a8474984b8a99f4cab62eff5c7d3c3b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-win-arm64.zip\",\n              \"hash\": \"77cdb15fb8eef1eddae375d691ea2a3e79f798861c0b5067fd0022a6ad077e154da788dc71518184406765968c8409c502a5009bcf8751e7234a66e8bd9090bd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-win-x64.exe\",\n              \"hash\": \"eee66b393acb3c2dc682f8bc2ffe827528be1dcf112a437e17a9208819553d1ceb7e99999818349b45cc4e0639e90c182efd0a3dd9e975473c706276926e2294\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-win-x64.zip\",\n              \"hash\": \"8407515bd7fb9b3a5f9a3abd33e2d282b90d49a904a28434ef7c90a4be8f8c45aa87b98d4b261503c7121ba299eeb500032a69d52fa961fb39319b661156ba31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-win-x86.exe\",\n              \"hash\": \"1bcad5bf49ac77381bf841695778f4a797302a9a74528cdb6e212f9db0a808fcc7c1ec270d53aeaa65c84be8cf5d4b13ae23c11c6ed80175001dce625afb5408\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.105/dotnet-sdk-6.0.105-win-x86.zip\",\n              \"hash\": \"3bb4cd1102a8f274b0607ff0979c8767733a29bc8f61604c73cd1ea57c5502105b1306cf2f7bf3d6094f24dd99ac9df14bf1a9574177622b749ead3ceb68d8a6\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.5\",\n        \"version-display\": \"6.0.5\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22108.5\"\n        ],\n        \"vs-version\": \"17.0.10, 17.1.7, 17.2.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-linux-arm.tar.gz\",\n            \"hash\": \"8a56d232607aed4d2925438c25f93e1770c4b19f05c29e8c0f866349315fc0da3eba89416ebac4b55f947190d7433463591f436781e6a7729aeca1c77b64bf05\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"fecc864acff305550944fc20c18570d8323b56eefafd07cacf7f03169700265af7c3b5024fffb5a1742b8a7e792a849319e9180a92e04b79644d674f883e7578\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"5985538ec6d0071d850a1b003808feec72281e6b89dcf13595dfe541ad982833615761057491675cb6084fe181c2a14cb66fbe2ca54bb8d5d6ba52336b3c1d2c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2f00c9960a7aeeb84cdb932de886c9843c7ec7c1cd4ffc82c5c5321f6da0239796bca8a5651f54a4c92b9c094d48e19244eb6c7f14489e53a522c8977d1c5658\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"b9f07997e5a930e096772a182fcb8f44826cf5fdaf4a5f8d5a9eba4f157373c694a50f57ee1b799fb0e6d4c4d8389cb45409d928e3fc5ea6f56303a190e1941a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-linux-x64.tar.gz\",\n            \"hash\": \"3a2169051da22f3faebba319101c3fb86b1cf8575e3715ebfb82b673e14417370d00b958a252c740a6b0e11a8624e4d4ee41fbfd29a4e73af79752dbbeb1477b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-osx-arm64.tar.gz\",\n            \"hash\": \"862afb12e3755adf7db3c774ac5fbc6b5fe0c005c8b46378c12120a0604492fa17a226e21fe1b542601c15543644442438b9a0a7b1a756e495bff823e45dde6d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-osx-x64.tar.gz\",\n            \"hash\": \"44985a9c47d63d2b9cadae66bd81f73775301a7d1708786cc3b7ac31b7ad2164dc5cb40682836c2e5e7d1a28bbf199c9418d0024b576962dd4f220db238e82e9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-win-arm64.zip\",\n            \"hash\": \"5f4146d0936c52b0b4ebb47e14dd78d5f612135eb9cab4a681ea4240b090ee880ec0760e4165f7cfaf87b42f7e016cf47615dc789d0aae31c29554dfbafab927\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-win-x64.exe\",\n            \"hash\": \"f931b430e9934f00146a5b09df4eacc781163d86f105a872165d2d95991b8fa1134f4902a27c459e7f8bacf3391a594ea1d4a449f807fe378cb9b3d1035776d5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-win-x64.zip\",\n            \"hash\": \"2fc6768f863679a182063e5f33adc10e0e30cd1df380c4e43caf4f45091661a2341eaa6898da5e735bf01a8018f537e8fce25b288705c1d368be0b7a7cf74b47\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-win-x86.exe\",\n            \"hash\": \"54d05c34ded7ea7e1e8780da3d0d004ed459e264778b76779ced87b4dbd5ff40d3ff24343ae1825dceac40645f1b5f0eb7bfe1de32e05e37d88d50be34d871b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/aspnetcore-runtime-6.0.5-win-x86.zip\",\n            \"hash\": \"79d55add4e32ea92601d78d41a5b3ea827e61417d7e8fbc6f7b77099b754a4792dc1d97728ddfcc1d7ccdf22ffe248776ac6b2ce2220007959590b6b97159f63\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.5/dotnet-hosting-6.0.5-win.exe\",\n            \"hash\": \"b24d769c6d82fc2ee8e752789e530c41958ddd0c5d201ba1112aed292413e1f20c4548574d78adddcc19691e6907f4118ffe2ed65997c9d0d7ac2a06a3bd84ee\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.5\",\n        \"version-display\": \"6.0.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.5/windowsdesktop-runtime-6.0.5-win-arm64.exe\",\n            \"hash\": \"93a13ed9d11bf5c53958c17d9ab0b6da10376742c14e249b28b5e2412d6273e2b0dfcd71d44de479e13155b6d417f49343baeaf3297406d842e03af6505cdaa3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.5/windowsdesktop-runtime-6.0.5-win-arm64.zip\",\n            \"hash\": \"c77ac50b300e475178202744298b42b1c5a123ce12156a98ae2b2d5ac2f0812a7bc44aa9b5a58216bfa9022d74afd587c4673d452efa384ecd2534b3176410a9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.5/windowsdesktop-runtime-6.0.5-win-x64.exe\",\n            \"hash\": \"5eb1537295cdb513197419c311777229fd43af6cea0ef6134f9990b32b8ac26aa51139f2c0b63d9cdfb6d753dd9db6f243b887ec511f15866157aa9e127b5cea\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.5/windowsdesktop-runtime-6.0.5-win-x64.zip\",\n            \"hash\": \"6c98eca0da3dc37283d461072a0142218a9e36ca4a15ec47274a33524df0c27f90b130f48f370cb5e26ab408b06a63e3ad598f89ae9d2bb414f2cb5acacef99a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.5/windowsdesktop-runtime-6.0.5-win-x86.exe\",\n            \"hash\": \"c62dfcd8f51ba6aa8d7fcf963aeb3e0756e06c2b106587b4cb0820d06ecf9dadb43555f94986941d1bd8e9d8a61fe2b2bb58fce48f9ecfd0783c0763c40babcb\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.5/windowsdesktop-runtime-6.0.5-win-x86.zip\",\n            \"hash\": \"492bd615a200b1b1b394d45ae48326af75da8a368649c9d7f3dace9fff1cc96c5616089ef2cd08feeaa2bcbf9e0004bac178bddb1fdc60907d3911dd5201361f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-04-12\",\n      \"release-version\": \"6.0.4\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.4/6.0.4.md\",\n      \"runtime\": {\n        \"version\": \"6.0.4\",\n        \"version-display\": \"6.0.4\",\n        \"vs-version\": \"17.0.8, 17.1.4\",\n        \"vs-mac-version\": \"17.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-linux-arm.tar.gz\",\n            \"hash\": \"688b6c6a35786fd36fb8468953d69e5713f8b62e7aace6b836b70051f827a78565c841cf7913412b6319980aab2dab7e52755993cae36fad676d70ffdce968e4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"acbb50f2a1cde2bb8f59ec2059cd90f669748ce0da519ddbb831d8f279c4b896cc7a8f4275fb2c4726c5caf3d6430ee6d9823baa6f65238c7017ecbc2b8a6444\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"d4b7287461448fbea1587acd8e8c4a7a39d0f82970d0657f821ffc4d9491b04d3c18c35a091cfd21e2c583f1bb231dac1af9f206488125cafb8045eecd0c7573\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"65d79da43cbda980a72d6cc4131059dc36f322d1c8ce8e8e6c1729486b5eec7569d4f416045d8a3fa647f8ff684f9ee5ba84ce898cd227e2b615d635b61da8cb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"e5b538482f10a667bee3b7482db0ac0cac27b5bddab9f3ab68bd5c5d7c18c5bec2bdcb8cd288052c3f3e186291ee02190ff01896c2835ce32b87e18cd817759e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-linux-x64.tar.gz\",\n            \"hash\": \"001487bfb337d0f737c4e3dedc4bc41b3185922c07c07e8f1d47e4578914fdeeed7421d7af2c4bb5e17ebddd05fde4cb9aea1e8145018dcffeaca70c1fa49bbb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-osx-arm64.pkg\",\n            \"hash\": \"4ed9480eb844ac7de4a50cc8f691bcd8e15df729ac55c1f4664b8d44f589dfb17cd1ae2134155efa0da2b5291e605e680fc25732394909e86affbc1a34dc531b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-osx-arm64.tar.gz\",\n            \"hash\": \"3070af5d9dc44820dc93ca89489f1dfa8024958f64a9d62fafddb49fa16325f0845cc53027703495dc524515e613f3e7701ef148da06653070cb2e3928fb0aca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-osx-x64.pkg\",\n            \"hash\": \"46eb9326f3a3d92143918213ad4974d8ffd853dce212bc1ee7150566c5e117bc33e9ea30c01233f1b2e4c4bbf9c8e82b87d8802c98dc7f1daaf87aad25822c38\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-osx-x64.tar.gz\",\n            \"hash\": \"7a798ce54880533151cc9290129e1a6224e81e657026e5be580ee24742d54e8e8e5f8f3bdee2cb94d5129082e3a2ffd1460f490abb848aaf3558e584e2e2df43\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-win-arm64.exe\",\n            \"hash\": \"0dc66719b143d9ebbe9d835fce93da04ea53baf67eb2f80755aa0bcd1df6fcde88aca50bd41a45f3196360164a203970d054c8db6a38eaec0a47cf3d66aa445f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-win-arm64.zip\",\n            \"hash\": \"fcf1b1b14fc8bb2a094b4d1340b2c861a3d2a913b6b09ed272c98cbda9634e9dc26220bb663b1d726a779191de9941f0213e16bc845f26a34e6b71de7c7aff43\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-win-x64.exe\",\n            \"hash\": \"175fd36104c2e5379cc2769da6cb0290407ae06f0fda28625c80f5c099b5f0c6ad26769a8e51347e292b8305dca9681840c24335598cb64759c8ca865f0d66fb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-win-x64.zip\",\n            \"hash\": \"c6e7b48352496a299ccc9602fe5b84894aa18587acdb1bb4474a9e3197b0dc76878d0c067d6d3c31354ec36932c3870fa34eb5ca14905b1a9338205df261b709\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-win-x86.exe\",\n            \"hash\": \"e13e5ed4e9fecc4374aa4cfa746d42d8573ce3f84b93273b49930b13f9b66fce61cedbf983889189bbdfaf89d71c49b693abf4d3ce308ccdb82fe7b17da3f7d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.4/dotnet-runtime-6.0.4-win-x86.zip\",\n            \"hash\": \"7189cd0eb035296eb8dbd2ba15cc193663f753de2698052ab14ddaf789530913fe5cbdf6a1b6532c2d232bb919325d5113f0bd2f9b5a6f8c1c0d8e71f8535808\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.202\",\n        \"version-display\": \"6.0.202\",\n        \"runtime-version\": \"6.0.4\",\n        \"vs-version\": \"17.1.4\",\n        \"vs-mac-version\": \"17.0\",\n        \"vs-support\": \"Visual Studio 2022 (v17.1)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-arm.tar.gz\",\n            \"hash\": \"8c2d56256f4bebe58caee7810b7689408ff023b1f2e68f99fa375f0115db41ef0c3eb160b9ab84dc2764443a045801a4b03f6bc9090e0c1583fca2587ea0d9d6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-arm64.tar.gz\",\n            \"hash\": \"2d0021bb4cd221ffba6888dbd6300e459f45f4f9d3cf7323f3b97ee0f093ef678f5a36d1c982296f4e15bbcbd7275ced72c3e9b2fc754039ba663d0612ffd866\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-musl-arm.tar.gz\",\n            \"hash\": \"03517eca1a996755d80e3ad4bab49f37cea63fa1924a5c8b1a35de9c49e7e37fa8f0c40dfa79c5b3b46e9f586d97f508806005b7f9b28d25bf4f49d65901dc19\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-musl-arm64.tar.gz\",\n            \"hash\": \"89f8dbdad4e9949dc21260b8c7147156ca3374209a41c145a79a6536b585b8ee1786fecf084fa534f4b6284508be6215d92ec2c3ff9d54118acb42853e5ff2a3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-musl-x64.tar.gz\",\n            \"hash\": \"ccf4f6145d3ea10ce56cd89775f607ac57115f63e3ad7f9804b4a0bceb86e579aeddf5b81636bbf3fcb79dd9b1c082a10b7582e6c8c490df55ad287d58c63870\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-x64.tar.gz\",\n            \"hash\": \"81e9c368d445d9e92e3af471d52dc2aa05e3ecb75ce95c13a2ed1d117852dae43d23d913bbe92eab730aef7f38a14488a1ac65c3b79444026a629647322c5798\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-osx-arm64.pkg\",\n            \"hash\": \"d679a8a9b5b03e255fc906b73c2e62e8b4844c358e8a88e2cb24193ad987aa6693c242880314c39dcecdfb7ece8ac874548fd435679022302c6288ae0ac05869\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-osx-arm64.tar.gz\",\n            \"hash\": \"8bf9ff3f89ac0f2d04b09d3f5df72efeac8007b9e33980c9c80eb735d050275a5594b11d902d0304ac9967111971bcd690be3adf34d4acbef6d247e8f2071f60\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-osx-x64.pkg\",\n            \"hash\": \"265b56f211f20584a57195006db93adca614818b2eecb4c6aa0cc993af169d6b6e2a2fb179fd39890c7310b638882a9f85ce605bbf7338c2138912788e252a3c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-osx-x64.tar.gz\",\n            \"hash\": \"ff7df20ce9054ed50d521eba88e063422efa4d48cb3117cf733cc6ecea24012c2ac34f6df10d88f64fe7a952bb96455a3c2eb877f1d50c0b7bcaedf11f98ce82\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-arm64.exe\",\n            \"hash\": \"2ca8cabceeefa254889eaed638808c3de8737bfacaf9d6bf50eab3c2fcc32371c3bf5d658e544faaa6e62e56396252e255e9cd3fea6080be2328efcc70ed5937\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-arm64.zip\",\n            \"hash\": \"b08c6d560089bef162c80b10fb8a3c26202b918a1abfb5c571aea5d78dcf8e92f252e28ad841d68d801ed179605945bf9b15d398f2a23997fc9658efe009651e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-x64.exe\",\n            \"hash\": \"54e9a70cfcdb69f4e442fd8822c1233f0672599cbb91664ff7e31c4d2d93538f5de0a2287f385cce87aca8268df9caec13c4864637ed10501e8b6fcf83743f52\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-x64.zip\",\n            \"hash\": \"fc3299972e50a26ec7d2485b25afac7a5c345076eef35ff1e8de02fac01915f4e33deaf3c94b92d4ab6a446326339fd121b6f45f796e899d980c0ee27f4e2ffc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-x86.exe\",\n            \"hash\": \"e6d6cbc851808f20153ac4c2b5c6fd1170f62ce2d4ad878dac01a800a7e2c9163764e20beed9196d0f545d370c04aef68106cebbc965faab2d90047a3c37e2a6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-x86.zip\",\n            \"hash\": \"e6c8ffc3a5c68638a8e4a6e7d69a14c2c3158329db647e04e0b08b086e97222ba1d2594273433a8114297a7141e37f71d8ed5b11b6bc3ef4daaf7efca9047372\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.202\",\n          \"version-display\": \"6.0.202\",\n          \"runtime-version\": \"6.0.4\",\n          \"vs-version\": \"17.1.4\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.1)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-arm.tar.gz\",\n              \"hash\": \"8c2d56256f4bebe58caee7810b7689408ff023b1f2e68f99fa375f0115db41ef0c3eb160b9ab84dc2764443a045801a4b03f6bc9090e0c1583fca2587ea0d9d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-arm64.tar.gz\",\n              \"hash\": \"2d0021bb4cd221ffba6888dbd6300e459f45f4f9d3cf7323f3b97ee0f093ef678f5a36d1c982296f4e15bbcbd7275ced72c3e9b2fc754039ba663d0612ffd866\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-musl-arm.tar.gz\",\n              \"hash\": \"03517eca1a996755d80e3ad4bab49f37cea63fa1924a5c8b1a35de9c49e7e37fa8f0c40dfa79c5b3b46e9f586d97f508806005b7f9b28d25bf4f49d65901dc19\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-musl-arm64.tar.gz\",\n              \"hash\": \"89f8dbdad4e9949dc21260b8c7147156ca3374209a41c145a79a6536b585b8ee1786fecf084fa534f4b6284508be6215d92ec2c3ff9d54118acb42853e5ff2a3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-musl-x64.tar.gz\",\n              \"hash\": \"ccf4f6145d3ea10ce56cd89775f607ac57115f63e3ad7f9804b4a0bceb86e579aeddf5b81636bbf3fcb79dd9b1c082a10b7582e6c8c490df55ad287d58c63870\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-linux-x64.tar.gz\",\n              \"hash\": \"81e9c368d445d9e92e3af471d52dc2aa05e3ecb75ce95c13a2ed1d117852dae43d23d913bbe92eab730aef7f38a14488a1ac65c3b79444026a629647322c5798\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-osx-arm64.pkg\",\n              \"hash\": \"d679a8a9b5b03e255fc906b73c2e62e8b4844c358e8a88e2cb24193ad987aa6693c242880314c39dcecdfb7ece8ac874548fd435679022302c6288ae0ac05869\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-osx-arm64.tar.gz\",\n              \"hash\": \"8bf9ff3f89ac0f2d04b09d3f5df72efeac8007b9e33980c9c80eb735d050275a5594b11d902d0304ac9967111971bcd690be3adf34d4acbef6d247e8f2071f60\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-osx-x64.pkg\",\n              \"hash\": \"265b56f211f20584a57195006db93adca614818b2eecb4c6aa0cc993af169d6b6e2a2fb179fd39890c7310b638882a9f85ce605bbf7338c2138912788e252a3c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-osx-x64.tar.gz\",\n              \"hash\": \"ff7df20ce9054ed50d521eba88e063422efa4d48cb3117cf733cc6ecea24012c2ac34f6df10d88f64fe7a952bb96455a3c2eb877f1d50c0b7bcaedf11f98ce82\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-arm64.exe\",\n              \"hash\": \"2ca8cabceeefa254889eaed638808c3de8737bfacaf9d6bf50eab3c2fcc32371c3bf5d658e544faaa6e62e56396252e255e9cd3fea6080be2328efcc70ed5937\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-arm64.zip\",\n              \"hash\": \"b08c6d560089bef162c80b10fb8a3c26202b918a1abfb5c571aea5d78dcf8e92f252e28ad841d68d801ed179605945bf9b15d398f2a23997fc9658efe009651e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-x64.exe\",\n              \"hash\": \"54e9a70cfcdb69f4e442fd8822c1233f0672599cbb91664ff7e31c4d2d93538f5de0a2287f385cce87aca8268df9caec13c4864637ed10501e8b6fcf83743f52\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-x64.zip\",\n              \"hash\": \"fc3299972e50a26ec7d2485b25afac7a5c345076eef35ff1e8de02fac01915f4e33deaf3c94b92d4ab6a446326339fd121b6f45f796e899d980c0ee27f4e2ffc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-x86.exe\",\n              \"hash\": \"e6d6cbc851808f20153ac4c2b5c6fd1170f62ce2d4ad878dac01a800a7e2c9163764e20beed9196d0f545d370c04aef68106cebbc965faab2d90047a3c37e2a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.202/dotnet-sdk-6.0.202-win-x86.zip\",\n              \"hash\": \"e6c8ffc3a5c68638a8e4a6e7d69a14c2c3158329db647e04e0b08b086e97222ba1d2594273433a8114297a7141e37f71d8ed5b11b6bc3ef4daaf7efca9047372\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.104\",\n          \"version-display\": \"6.0.104\",\n          \"runtime-version\": \"6.0.4\",\n          \"vs-version\": \"17.0.8\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-linux-arm.tar.gz\",\n              \"hash\": \"96c3af8b9c920b542a4e9fc3ce26242a0d193404d74b7e88d223d44b2e597da83d44892d89f7fed5385acad1ff5f787bbd81381f01c3cd1b0d89888d14688750\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-linux-arm64.tar.gz\",\n              \"hash\": \"91fa1114a656173a988aafd65c657c9498c34ef9145eac60b6feacc8a08f68538defeb38af472e2626ffd0669eb62140fdb1408771db0e2b63501baf2a646f29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-linux-musl-arm.tar.gz\",\n              \"hash\": \"252bc96ee054c9ac2e35641ca9920df9d3e3503989ca8d8be44bec49fb6917c71158d1c6e0873d23d20ed487b135b691c63511dd84e2ddb50043c601b4001204\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-linux-musl-arm64.tar.gz\",\n              \"hash\": \"a32b1c526715a43bef186b6839bb8865995cb16dc3bba4067c3e1cbe23fa210ad47adbf47531a839f29be04da3e1e4ee3ddde52e801ddefa114643108cfc0632\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-linux-musl-x64.tar.gz\",\n              \"hash\": \"994e276b23d4a274aec49955025adb2637235deb586c8d3cd6d00c7ed91b79ec0f3641c7f3b6a0680603a46b12efca5d825432c95f0a72d85d432d4baf2808bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-linux-x64.tar.gz\",\n              \"hash\": \"126f22f48cdbbf59ff21ac1a6cd354b4dab500cef372c42a7e4a9546c755ab6d1670a096be3c66f5fe80b6e2a5c31b16901a2c3ccbe928b501e25bb86339ec6c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-osx-arm64.pkg\",\n              \"hash\": \"0c7fa3f54fb514a3fc4a053af169fb94eb34bf56174af0b32d52e71b77798c64c38c8e529773affe5b0b5fb83ba64d6f8e7e087489c956e1deb3fa0840914f8d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-osx-arm64.tar.gz\",\n              \"hash\": \"7ba0a39336045617d04a7befcf67e9af89444d819ef21ff7fe11f7da03a54e52458d1d6756f113c3ea52407417d8f4d9b533e22cfd6cec0e65e250e8a1a85757\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-osx-x64.pkg\",\n              \"hash\": \"1586e9cafca5737bd90a3e49b8fa20b1900042aa2a1d317ffd52c25b84efd178fd48b275799793e5f19ec44b091e2f0b1ae88010af0bd2e02d769b6ba7df8392\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-osx-x64.tar.gz\",\n              \"hash\": \"6d3041ba4c3ee3cd1b8875ac419eeb6b2c34278df8a95a1f1621f7256b47733a3eedd09358a2f3b219e69ae7f08cb2df2178036476a3083896fde280328df6af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-win-arm64.exe\",\n              \"hash\": \"1dee656a2a686e24aa239054901374acde9cd4ebde79ef52efcbc0b4ec2baff464e347477a7b7f8c33a3f72040492e9c66f2945d416df140eafeea5daa4d3772\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-win-arm64.zip\",\n              \"hash\": \"cbbfb63d2be9ab3155eef00e55a83d0e95880fe44bc1b109e9684d76b18f2c659ba951676989d74d0a67db7c3c3e8c98ec6abecd6786ce8f37df568954f57059\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-win-x64.exe\",\n              \"hash\": \"07b7cf6230c03110f4564acdba35f3d8a478fe284da8df429387ee894ea4dfdcf5b99c0874a56587f2cf0ccb396970d1ffd45e155eed84d7a1f29a43a414836c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-win-x64.zip\",\n              \"hash\": \"c9b9a6c1eec2d2e663df21dc2b650058cb5af882504c10f63f6c4bd52000ef95c7fde4e8f687c1e04b0c09ce759e778a00b83a37f751082dbe6fc59067d67f10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-win-x86.exe\",\n              \"hash\": \"2827ac5d57ef67ef4c23c6c6c673f93cfa69123911fb19e2a15a85fc4388e4b7148c6bcebb6eda5814be2cdbf3cab350b0e16d6d6f483625e4a1c404e3fd2913\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.104/dotnet-sdk-6.0.104-win-x86.zip\",\n              \"hash\": \"139f6952764354670df49766e43ccf4727fb4554617951f41a59ac346d3479232f4b472047246ed249f0a68c94c1a80af917ea83864a65008dfb9f1363044d42\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.4\",\n        \"version-display\": \"6.0.4\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22081.4\"\n        ],\n        \"vs-version\": \"17.0.8, 17.1.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-linux-arm.tar.gz\",\n            \"hash\": \"944bb52352ff7ba79867466117eaf6909847080574d15629c7149b27a4d1685ec2eb024e2dccc2e5ad2251b6143d2bc3c1597ecd668691ae719903887158062d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"18ffa72b38dcd01bbfd9f656996e994dbcdb7b6b196771fc498bbaea774ad844f7fd5418487d0a5a7f83a76b3683f8913e22275bc25d66ee0c0d84ea4e279971\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"4b8d19c9f0637479b524517ed1cadc191f1851c1be22c212ffdc9ff738a77e11197822233fa0012f61c95a47c04978c7b0bb962268fb97134a81ea6268680c7c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f7c69af61947c6d5a6f5f91a1e3ec3cdcb20d37d0839ef47d6cdf5da13d8109479084363b826585395599d636f5df34f56f5f5751f7ee166a63790104f256ec7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"f54624306b74d9be0a670c2b1d465991b2c1ef67a4c216532fba9dc85f525a68d9ba6e1405945905dc834e073e676f0234d18edc5c9507d5b6c420bb2d073a40\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-linux-x64.tar.gz\",\n            \"hash\": \"eaff93db0a4cc0adc2fc54de5e9a6e4b0844398451c06bcf6b2867471b8ed4fd0528ad04fe7150aa5ed306d5e08a5e4219c6029b96da03ad2d1c58e7a0ddacaf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-osx-arm64.tar.gz\",\n            \"hash\": \"9ff8ecc60f70d8cfa53396761610282358aa7bcbd3f013aedc639be7b8f502a8cb121777c7e8a0a7d64d74b99211751ea8a8c1819861b72ad11d80590ba9ed2b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-osx-x64.tar.gz\",\n            \"hash\": \"33b1b24496296242dd78714564e52e6be575f46d681a5093a0aca842aff5e29778cbf31259f11ce395fc9a2368fa6bfde2e12a074ccf310f9b661c0bdaf39d2d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-win-arm64.zip\",\n            \"hash\": \"22b37ba8cc388385a0fa42b8ca89e449d139abdb141d3a28ef3d6b18fabe4c53be604091c764a50ab5628a1b1b9741af42edceda66a629d44ccf57100e8e6137\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-win-x64.exe\",\n            \"hash\": \"2ee7c786ad0b2ff0c562cfc0fdd8d7b2a03f37fe26ec1f17976b4f709d26e112e9d47da63f59fbd321964031165b9bac3cb22c05dd19ac5739e6d464f78af4ad\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-win-x64.zip\",\n            \"hash\": \"df8e443636ecf45f1ab3bb346ab2ca30dc1b70f3964623ed82f8e5accc3b696b52e5d403141775637c47f4441c5d86b65e271bcc23bc948af6553a716c8e91cf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-win-x86.exe\",\n            \"hash\": \"f1431d89161afc8a00ddbc177529431f2fcddddaeb2b0d55fc0e062edc78ea9883ca331232aaac09c5ad6e6c0254d844166b3f5b969bc0516aff340a27d03a4c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/aspnetcore-runtime-6.0.4-win-x86.zip\",\n            \"hash\": \"c93a2117e0b3b2a663514ddf52ae3fd1491891fa3f43a5d2efb57615c8f870079ac3047df49a53e2dd55ea15cff6892efddcd98e965a91f442bcfe00af5b6edf\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.4/dotnet-hosting-6.0.4-win.exe\",\n            \"hash\": \"a03a798060f1a7044042e96e7f4134c6b090da5e3e6ea5acbe225dc979a4cbbf931db76306719e7029e09664f178e980d0f5d41f54e8deaa4d0febecb4634a4b\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.4\",\n        \"version-display\": \"6.0.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.4/windowsdesktop-runtime-6.0.4-win-arm64.exe\",\n            \"hash\": \"d6d83d7bce6b52a1bd1f6401e8ed0bd3f33a14aed51aca4a0a464d0f228073a79bf371536d8fc0b7e316077fb81a5767aeec5e3bb3da81f809f9b16673d8ee75\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.4/windowsdesktop-runtime-6.0.4-win-arm64.zip\",\n            \"hash\": \"eb72a69774961a643713d5268c675afeac9ec8d8a8eb2eaaf16d27dfd6d4c9a006f6e6cba444f7691927b627232d15a8e8f0a4bbfc1d369175ba3e5c4d51ca89\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.4/windowsdesktop-runtime-6.0.4-win-x64.exe\",\n            \"hash\": \"209e596edd7ab022241ab378e66703912974e7aa6168f287c9ce036fb31e58029ad304c8182b4b62a08e8d5ae4db74de277e298ced6d2746ef08da2352a2a252\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.4/windowsdesktop-runtime-6.0.4-win-x64.zip\",\n            \"hash\": \"1a11cd8ff4275791cbbe92afa3f29d080dd129c0cda58376928112f0abf106118925471de06ec6381b58fcb0dffe7b2850880f874e4402b449c69c66cb29e8ce\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.4/windowsdesktop-runtime-6.0.4-win-x86.exe\",\n            \"hash\": \"e3e52096d09782b35d6dfe15c8ed8eed978d7def198696f2e6f3ce7c83e7526b5e74955de2ca68ae94bbbd6c1d01d4faf2f4a5252c1e7c99b0746e2716a0a8e5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.4/windowsdesktop-runtime-6.0.4-win-x86.zip\",\n            \"hash\": \"59ea3b5e9f1dc6f995f6f491b1a57ad0b4649841cd65ab89537921c3fcc8f716d52612028c9e08395f3d769c157405c221c22a0ae2225c82b1bc1e1d5053d0c0\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-03-08\",\n      \"release-version\": \"6.0.3\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-24464\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24464\"\n        },\n        {\n          \"cve-id\": \"CVE-2022-24512\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-24512\"\n        },\n        {\n          \"cve-id\": \"CVE-2020-8927\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8927\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.3/6.0.3.md\",\n      \"runtime\": {\n        \"version\": \"6.0.3\",\n        \"version-display\": \"6.0.3\",\n        \"vs-version\": \"17.0.7, 17.1\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-linux-arm.tar.gz\",\n            \"hash\": \"98f70499f75d8128e4817911be963d0cfe78f89955f3c78e55a6b589dbfab082ffd69832fc14786367391c38d8f674a071254167ac5a1ace99c4f213d29ab084\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"f0f9fb191054dea2e4151a86c3de1a11ce574cc843cde429850db0996c7df403dfa348a277f1af96f13fec718ae77f3be75379ed3829b027e561564ff22c7258\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"c3ba734dc2f815d767d87054f0cb0876776467f2af3fbed6ba457b05a66fe40a29079dc18845cbe359a3a8127d46ca9d899a9fda14ddc7ba72debd5d15dda7a8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"58a8990c273041ad7ba133c57f6b1b986a8ff5b314e774cb36805c57f3e11ee8aa823cd03fd4c02dafa5847e5cd9760fdace46045e5ce4dd70965ff8731392f6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"ad82ce8e1f670188d0d7f384546c88c963aaeccd91f9d0fcb3fe7cf5bfa972b8c9a7a4eaf8e1cdbb8a6ff4257a5f27e7ea4d33e6b0555acb33f8cb791a352290\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-linux-x64.tar.gz\",\n            \"hash\": \"083d9e6e72f0d8f175b341f5229277374e630c5358cfd3602fe611aeef59abec715edbe18d62135a5d13a650e99ef49f19b17e8c81663d0b5bee757519bec894\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-osx-arm64.pkg\",\n            \"hash\": \"c87b67d0656b9748e8db839b3731d3f66b46fe9fa128f93fe6f6d6b3eb0e4f84d44dd13245ab604916e8c93ce80432435d5372654d560f2d8c934bb6edcd4590\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-osx-arm64.tar.gz\",\n            \"hash\": \"1debd4acab3c6408c849323e6dfba28a626850c40f93a0debe46c54f0c0b39526f4118d5b2bcf0307efeba0bc2656a92187a685400095ae078227698a0aabfb3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-osx-x64.pkg\",\n            \"hash\": \"846bb481e0ee3e1378d3e88ff6b29bef508536a0b26b7b9394986c03b1919d822becfa5e2a471cab0e0c627b4c82adc04c25747f3b25fc9a8dd2c7e517c77f28\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-osx-x64.tar.gz\",\n            \"hash\": \"98c457cbc0ac8f5f0acd7807bb45726b78e87d4f554fd30123cc8d9568b5341cc5bba16c8e4c85537ec4798d7e4d7f2f11701d2045b124f1b36bca75d80458e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-win-arm64.exe\",\n            \"hash\": \"122d97cf6394d8470efccb90ee0f4e14d38e14ff0fc81dc614479065036250c37f119857dd4febc389c1f7996c1277c538dc548bd4d7eeeabfc7650b2d1262d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-win-arm64.zip\",\n            \"hash\": \"e38f13f0504b6e39b0493b5360b6b1a3c62574bc74c64f0552ad780b56f1afba51ad4b7469f9ea5f1d560cf1b02a654e84e61d4c94140f69159a6d6f792cdf01\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-win-x64.exe\",\n            \"hash\": \"d06a29c5c4620f3975a68ea814b33e748eb61449536d8ba3f0c8c8b749bebf90c2956c9a3d6f7d34089d9c1a9c4fb9e4d068a1a7476982cf5d71e44eafa394bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-win-x64.zip\",\n            \"hash\": \"24bb230a3721a3ea8fbde9f6e648496124b4de0ecba6b58918fc3f7a5bde8d818415e46531dd1bfa399ed3847a7f519fc94cf4d41896ff77652b6a615b79f54e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-win-x86.exe\",\n            \"hash\": \"161282e9f3e315fffa35d8ad6aef5f12bcbb8734e5c5c00d4de1f754afd93659180c25de73ad131d0959525a3cc8960dfd8e3446e007ee9df94441359b044918\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.3/dotnet-runtime-6.0.3-win-x86.zip\",\n            \"hash\": \"ad85798c40e81ffa641f186876298ab028f05dc501fb8d7b35857ca03f34d0c46a1ec0e51d81918539231f561c0f6d5194ebdc4ae8fda73c6f209711f827ba58\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.201\",\n        \"version-display\": \"6.0.201\",\n        \"runtime-version\": \"6.0.3\",\n        \"vs-version\": \"17.1.1\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2022 (v17.1)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-arm.tar.gz\",\n            \"hash\": \"5a683430325a90dd1d8e0071a1868939fb01268f9eb389ca1dc40956fde6b9f45bec086553ad3333139e530dfe5afae48195bcdfec388b0b568989924a1f1dd7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-arm64.tar.gz\",\n            \"hash\": \"2ea443c27ab7ca9d566e4df0e842063642394fd22fe2a8620371171c8207ae6a4a72c8c54fc6af5b6b053be25cf9c09a74504f08b963e5bd84544619aed9afc2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-musl-arm.tar.gz\",\n            \"hash\": \"80a7a34c1b0696c5ab9fb52920982fd529e93c09b1c1fc0222ddaae569ea488cdcff380fdede516a25a165b195d52c162733082af122b5c07191a900e5ca1e86\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-musl-arm64.tar.gz\",\n            \"hash\": \"95cd26bcd4d312a6b88cdbbffd3154ad8e76ad313838ff386828b9d76f0536e32add86671ad967033c204b6c493b7a27591cc48726007a4cca1c7e0a9daab976\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-musl-x64.tar.gz\",\n            \"hash\": \"6e39c14ce7b2e874105351f5a4d26eea91f9772bb302b39e0697db1e776680ae37c199b820763ce8ff25a2ff84aac45e0f282919e0d5a2fcd3d7dd8d1b2a94ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-x64.tar.gz\",\n            \"hash\": \"a4d96b6ca2abb7d71cc2c64282f9bd07cedc52c03d8d6668346ae0cd33a9a670d7185ab0037c8f0ecd6c212141038ed9ea9b19a188d1df2aae10b2683ce818ce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-osx-arm64.pkg\",\n            \"hash\": \"482dfbb627b8278c8e7c100830f1378775b6ca7426df8ccba36281e4e7e5f6a70f7180d46948216b76ca66a312fe85c88ddb8b53189c5cd2471087c19e647555\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-osx-arm64.tar.gz\",\n            \"hash\": \"0796a81339788fbc160885548983889dcffd26a5c0ac935b497b290ae99920386f3929cebfbef9bb22f644a207ba329cf8b90ffe7bbb49d1d99d0d8a05ce50c9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-osx-x64.pkg\",\n            \"hash\": \"41bef6c3bfd21d04b5dfca0fcb569b17cc5f45ea45112e92c3443536e881f135a036f347796eff372bc60390f9f836c4fbe8a8df7a85a4bec7c3db1e302521cc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-osx-x64.tar.gz\",\n            \"hash\": \"1df27ca5a1db1a8712acd95083aa00ec7b266618770e164d6460d0cf781b3643a7365ef35232140c83b588f7aa4e2d7e5f5b6d627f1851b2d0ec197172f9fb4d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-arm64.exe\",\n            \"hash\": \"649c5452801c48cff8e31370035baaea70681737375ddec115d829034413fb3ddafc6848565584cc626affaf7d8c09f3b8de85e7a380de7089c75b0febdb7182\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-arm64.zip\",\n            \"hash\": \"5fc62e24c804e315eeaeeaf1bc5d2a283bfb4f3e122405661dd1002f3b02b7ba3b8cbdb0e35e3eacc5fdbe901a546a07972a55b5700dffa07fda33e9f3fd051b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-x64.exe\",\n            \"hash\": \"7fcd52d520a82c8b2dedc6e3074e2201643ea4d8897b521bfa9e5e9af39a2eadcae9836cc5e4f6707e1077bbeab67159735b67fedd87bd8de3953b94e81ba1a2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-x64.zip\",\n            \"hash\": \"8b7e16202cd67f8a2eac251b33fcb9099bc8113c5d76a0eff99c74a768dd2cda5db7c70aa3224e9731d94b5d7f2c46257f64b6a4a613679266bf16a733f79e01\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-x86.exe\",\n            \"hash\": \"9300a674529152d8457d89f657084b8ac4b001bae1b5d7ffd3d5c27c1e82e4a80b84946971601ff86748f422cdaf6bbd66d12bb0112dc248b83f369b1dba9ae9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-x86.zip\",\n            \"hash\": \"bb42be5cb431d27ac1414a977eb0da7035b651643feb452deb0c6c17f23dbbfd5c7c2bf54a8c418bcaf08e8b496dcb000af60b2e2de343b3f643b919c15a693a\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.201\",\n          \"version-display\": \"6.0.201\",\n          \"runtime-version\": \"6.0.3\",\n          \"vs-version\": \"17.1.1\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.1)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-arm.tar.gz\",\n              \"hash\": \"5a683430325a90dd1d8e0071a1868939fb01268f9eb389ca1dc40956fde6b9f45bec086553ad3333139e530dfe5afae48195bcdfec388b0b568989924a1f1dd7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-arm64.tar.gz\",\n              \"hash\": \"2ea443c27ab7ca9d566e4df0e842063642394fd22fe2a8620371171c8207ae6a4a72c8c54fc6af5b6b053be25cf9c09a74504f08b963e5bd84544619aed9afc2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-musl-arm.tar.gz\",\n              \"hash\": \"80a7a34c1b0696c5ab9fb52920982fd529e93c09b1c1fc0222ddaae569ea488cdcff380fdede516a25a165b195d52c162733082af122b5c07191a900e5ca1e86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-musl-arm64.tar.gz\",\n              \"hash\": \"95cd26bcd4d312a6b88cdbbffd3154ad8e76ad313838ff386828b9d76f0536e32add86671ad967033c204b6c493b7a27591cc48726007a4cca1c7e0a9daab976\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-musl-x64.tar.gz\",\n              \"hash\": \"6e39c14ce7b2e874105351f5a4d26eea91f9772bb302b39e0697db1e776680ae37c199b820763ce8ff25a2ff84aac45e0f282919e0d5a2fcd3d7dd8d1b2a94ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-linux-x64.tar.gz\",\n              \"hash\": \"a4d96b6ca2abb7d71cc2c64282f9bd07cedc52c03d8d6668346ae0cd33a9a670d7185ab0037c8f0ecd6c212141038ed9ea9b19a188d1df2aae10b2683ce818ce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-osx-arm64.pkg\",\n              \"hash\": \"482dfbb627b8278c8e7c100830f1378775b6ca7426df8ccba36281e4e7e5f6a70f7180d46948216b76ca66a312fe85c88ddb8b53189c5cd2471087c19e647555\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-osx-arm64.tar.gz\",\n              \"hash\": \"0796a81339788fbc160885548983889dcffd26a5c0ac935b497b290ae99920386f3929cebfbef9bb22f644a207ba329cf8b90ffe7bbb49d1d99d0d8a05ce50c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-osx-x64.pkg\",\n              \"hash\": \"41bef6c3bfd21d04b5dfca0fcb569b17cc5f45ea45112e92c3443536e881f135a036f347796eff372bc60390f9f836c4fbe8a8df7a85a4bec7c3db1e302521cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-osx-x64.tar.gz\",\n              \"hash\": \"1df27ca5a1db1a8712acd95083aa00ec7b266618770e164d6460d0cf781b3643a7365ef35232140c83b588f7aa4e2d7e5f5b6d627f1851b2d0ec197172f9fb4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-arm64.exe\",\n              \"hash\": \"649c5452801c48cff8e31370035baaea70681737375ddec115d829034413fb3ddafc6848565584cc626affaf7d8c09f3b8de85e7a380de7089c75b0febdb7182\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-arm64.zip\",\n              \"hash\": \"5fc62e24c804e315eeaeeaf1bc5d2a283bfb4f3e122405661dd1002f3b02b7ba3b8cbdb0e35e3eacc5fdbe901a546a07972a55b5700dffa07fda33e9f3fd051b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-x64.exe\",\n              \"hash\": \"7fcd52d520a82c8b2dedc6e3074e2201643ea4d8897b521bfa9e5e9af39a2eadcae9836cc5e4f6707e1077bbeab67159735b67fedd87bd8de3953b94e81ba1a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-x64.zip\",\n              \"hash\": \"8b7e16202cd67f8a2eac251b33fcb9099bc8113c5d76a0eff99c74a768dd2cda5db7c70aa3224e9731d94b5d7f2c46257f64b6a4a613679266bf16a733f79e01\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-x86.exe\",\n              \"hash\": \"9300a674529152d8457d89f657084b8ac4b001bae1b5d7ffd3d5c27c1e82e4a80b84946971601ff86748f422cdaf6bbd66d12bb0112dc248b83f369b1dba9ae9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.201/dotnet-sdk-6.0.201-win-x86.zip\",\n              \"hash\": \"bb42be5cb431d27ac1414a977eb0da7035b651643feb452deb0c6c17f23dbbfd5c7c2bf54a8c418bcaf08e8b496dcb000af60b2e2de343b3f643b919c15a693a\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.103\",\n          \"version-display\": \"6.0.103\",\n          \"runtime-version\": \"6.0.3\",\n          \"vs-version\": \"17.0.7\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-linux-arm.tar.gz\",\n              \"hash\": \"e1ad50651dbd80cd9a089a5032f32c110b47b74935813aa3cbd8a8473ef65f139e5bed61f4952c9ff4ff95fff11c51a12095dd33e228733208222c13c95034c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-linux-arm64.tar.gz\",\n              \"hash\": \"e9efdbbb36a064b2cddcadc7b8c3a92dabc0da5c9491a6a39580720739d9a7517fee8e9ea2073d2dbfc91685f093a950bcb80713ba77413da07c17cddbbbfe55\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-linux-musl-arm.tar.gz\",\n              \"hash\": \"f16673dfcecfff028781e507e6ed39f8fea9bb168a4afba6d07983d4d9f8e9447d40752fab722cf79f4f6224554c77be484144c019851631a1b51fef2d0d4c35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-linux-musl-arm64.tar.gz\",\n              \"hash\": \"8d5fca2760674f1e1b0dd44c0929464b785d877887c64d73b1627b84c1409c5050efd9255039a6b6d7c2c9757a824aadebbd8ee4927a05015dce98627a4e66ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-linux-musl-x64.tar.gz\",\n              \"hash\": \"b61f6ad200d13d38b87c9a3588db9ca20cfe88092117941a5a18ddc76515a7e95de58f4abf4d787df4c0213997eff6920aac2750466aa5f789e276f5eb1a8f56\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-linux-x64.tar.gz\",\n              \"hash\": \"359855c21c602315c254651b975625670dbde91cf09b7e05ae9a7542d509d0d9885bd3c07f1343e9a117afe2872f18ca8a3d590deb1a6cdf347e97a72c464b51\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-osx-arm64.pkg\",\n              \"hash\": \"01f4df285d8446e8593846f124afa7a1b4f860002393572c0b97326e96467d1d02629d93f61b51a5e2a98c8b312fc0881eaa93035e81dca82cdacbbe3c96c259\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-osx-arm64.tar.gz\",\n              \"hash\": \"a14547f3538ac5f859b138b8d0674fba1ea79ed12f5daf9e7cc1eeb41519610a5ffd353fd8ca5fd3284ed6594becb2909bf4616633ea315354a66e15345e2a7e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-osx-x64.pkg\",\n              \"hash\": \"6d77d547ba1d72784f00945dac80a6e576949eea2a58581c42f2fb592ebca4b6cabb12e1b44e0710683115279a06f2db7852c25c68b3c08fd43d4f1ff8a446ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-osx-x64.tar.gz\",\n              \"hash\": \"5bbfc0cd384c978d427add5058edbed2bc7c53fec15416f228aa09b66bba0a1580b992b8350490036df75f9098ed68f28910713af8cdfa0ad58572471caa4cd8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-win-arm64.exe\",\n              \"hash\": \"ab5e711f78b54548f3e1f414a7e2fa872de01115da56d291ad255f52fac33694ba92511f9dc942061e720075a046071e531849be541b787f69f375a471ec56ce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-win-arm64.zip\",\n              \"hash\": \"15bc2abc93df11adae1ea46f25f2ada891cd4bea0c5b7c468e28b2dc3f47cc0b8cacd13ea8e5d9fdbefecc075c414eb66cc78f08c7d31fc549a1e37e53b876ce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-win-x64.exe\",\n              \"hash\": \"483fe525aae813ff93a034d4672e0cc8eff2376ea17c9ec35804110b9790f1c8ac3cacddd46894ad6214e7965a8d34c5ea2de0e60164da8d90781cb3634f8c3d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-win-x64.zip\",\n              \"hash\": \"55ab27e22b04f37ef86d8e239885e48fb0148a362c028b4969410938fa469a166e3fba9f82325942ab0b21c4cbc2b5a4dd2756742c8ec5257f449850ccf62317\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-win-x86.exe\",\n              \"hash\": \"0cc9165b4a840d5f12046291e548c45e715f604f2c0106854b7154016ae077e136d8a70080ad1975527509cea23f1d33f1e41435ead2e4f4d0a4e3ec47ba8cd2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.103/dotnet-sdk-6.0.103-win-x86.zip\",\n              \"hash\": \"5fe44e77c05f55c2b514470744236150682d427f1723e26484f1f170dc2b78b06589c9bf73088588bd0b18aa6451043b10751f64d5f18a81e18dc1a05d6b2614\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.3\",\n        \"version-display\": \"6.0.3\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22055.3\"\n        ],\n        \"vs-version\": \"17.0.7, 17.1\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-linux-arm.tar.gz\",\n            \"hash\": \"7d3ca660a6a64c79d5c49c1ced1123dd2aed1cb6b8067627e640d81737f0a946ccfe3d5169d6cc797b6ec17821ed465a66620cdb1eb43470b403efcb9734a430\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"745586b64d3e01f856c366821f6fb8ca97c55b2a90ba36d528fdf99c98938574805153e7d4fff0560afe8382bea14b35ddeba391a2dc2328285f02e125c9b702\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"396ab8d31687a4169e146b84e34f862bcfa177814245dbc2061daab9a6e98a34ef6f17599070dca81eb768b31d55cbfba06482ec64d0e574970f0e8da3450ac7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3b51831c58e070f799eccaa7b44aade14541d2f26e9929e11f303f250b62b6e798ed93d4063617d6a96bedb14c8f7c30b2ebd6e20c0d5bf940484988df037916\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"9d334a62e8f591f4cac70b970b20a45d7557a75aa1bccc34891ee4ea9a0ae9d7b046b3dd8ba4a922398198eb7275f9f50177fe8287f2dac7e99a883a448b63d1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-linux-x64.tar.gz\",\n            \"hash\": \"9ea54220468d922ef2c40433c4b8c70df6c60d8ea63a3ac1ff5e5ce712606ae5cfe1e57d321b87eff1b5dc34d7823a4b4b964180587383f22d9a0ff5bb3a8c88\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-osx-arm64.tar.gz\",\n            \"hash\": \"03d1d4e8a8370856120e045ed4a83b3383d00fb56b5fdaf7db0de8bab5e3de60d03c02deaed6f72bde0d6b0e12511fe1202c4e2c25fdeeb489ad61a5902d71d3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-osx-x64.tar.gz\",\n            \"hash\": \"bda83cf36fc9aa62ff3e16a26b5f8f37efa3221ab826467fe26f3072517a428c64e44bc52f8a90f5c77bc60eeeddb8c3d59d2a509999edce3b51b835dd7edf83\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-win-arm64.zip\",\n            \"hash\": \"3cd0823802852162dabf31553ce964c0bd3130fc85cbae295b01d4052fe912d7690183885e4ea238267d81172cff0cc76941698a31c775867b2ba54345495dec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-win-x64.exe\",\n            \"hash\": \"677e6c32197a3e8d3dbdc0c27621006db3a4f484a40ed417d932be3b1d933f51429bf225a9f462793cd9903fa8b4e70f3762ea5df6517e42b88268877bad02ed\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-win-x64.zip\",\n            \"hash\": \"aa3f46d3049dac94ea08cfa6145fd3288378b870e73b6163d5a6fd5f189b206a94156f6526efc7ca56af754f5a1191539a8cf1863dd15d7e3292175c83de7054\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-win-x86.exe\",\n            \"hash\": \"2d5aa3cd1e57969ca327afd428f7ce06a5cfb54e650afd65e075dfd0a44b1e23e5c52ea78437a9e0528d056ec199abf44a521089ca021fa46893a0d8405dfbf5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/aspnetcore-runtime-6.0.3-win-x86.zip\",\n            \"hash\": \"e2806164a381e38b0b932feaea2aafc90e9afeafcc0dcf5b2393b4399f73ba023324219c67ed27e38e3a8db91bb634a6616b98475716800526c8774b51380226\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.3/dotnet-hosting-6.0.3-win.exe\",\n            \"hash\": \"1c52efadd3792f2d8a595400add3ad7744e9b6ab94d40df0844841a90b8175ea4eb7b54c24c5d700e537533870e1cb0f7277bc4649cc707d236c0af0d4638aca\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.3\",\n        \"version-display\": \"6.0.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.3/windowsdesktop-runtime-6.0.3-win-arm64.exe\",\n            \"hash\": \"87724837f49c1ab2f255f3c33c94858ba65ed642ad781f7d66b20f23dfe9bdc22068db5ccf6780bd5a9beadf8d7021a54abf1b69c57801ef3d4f815ed3ae1c35\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.3/windowsdesktop-runtime-6.0.3-win-x64.exe\",\n            \"hash\": \"089cb2d98057f6193e2ec9aeda28dd0081b6f2c4b13c6d037903f35703fd84148308a85d0e233d17258bd48d44ce3698e876b858fbb241812d5e437524b34b2f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.3/windowsdesktop-runtime-6.0.3-win-x86.exe\",\n            \"hash\": \"ec57c188acefd1f9ff284e9bdee9c978f88651069b7c7a4a7503e2343fd017ab6967d9a4d1b4afd4532e7acc94d6e900aa0b5805a7c3788068a7db1f740a877b\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-02-08\",\n      \"release-version\": \"6.0.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-21986\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-21986\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.2/6.0.2.md\",\n      \"runtime\": {\n        \"version\": \"6.0.2\",\n        \"version-display\": \"6.0.2\",\n        \"vs-version\": \"17.1.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-linux-arm.tar.gz\",\n            \"hash\": \"0628b24971e05ac69c39a6526f6ef90ef65e72071a4be430e028958c33e484e7b95584a4a23716dd8eb70592b8b29266bfbd18c730f39aad8556ee87ca316aa7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"5cca54e18332b3297960f21a1b523382e2e7ad6fff477548ac0964451a7db5fadb2acda7cc39bceab184250bd9f81f84162aff4a2ec1d2c4ad278985ed157f4d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"a9b804e1925d93d32aa0913fea7ce662a1e53eacbc8bd5da7fb6d9c2723d7f495f3134ceaef9f94a7a1a1b689a84080cf89273c6c314666d3e70465dc7a8ba87\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3b2943a5d0c416814cf4427515638f9abe0e09444d34c8535a4dd3caeb10900c332ebdf128153c1fc8448f77190b0670c40566d2564192732f21accf180fe546\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"fd298bb310f86969f88807ea907cb20a38d6ab4b24493800bdf026933634a5145aff076dbfe9acb3ab6aa3a48747eca3149e05334847871889a8312e6e8d706f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-linux-x64.tar.gz\",\n            \"hash\": \"fa42a686122655a2a7dedc2415bdd618ff06b0a57132d7d98ad79f25c40f3f9edb953ef1ac93fa1a1ff64cffb4c5276dd7586ba5d16c5a7960913e1c5dd646a4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-osx-arm64.pkg\",\n            \"hash\": \"726761d6794ceec8ab9f21482963e1cc76b851754e7572fc6d5d21941c21a690976fb2d62434ea1decdc5727659c9a51054a53647540250acfb504e23725c230\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-osx-arm64.tar.gz\",\n            \"hash\": \"baca2588b25cddaee87e45fd347c5e305dc68604045827213db18221e20f545d81824f411502ce29c93e59094e0f18d66eaa6212c4dd2a1b696ace543adcc0d2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-osx-x64.pkg\",\n            \"hash\": \"b611b0819b99bb46b7cdc5fbbf644ea0a5eaea7212e314a2024c7817bc949d9f37e4703eea9c7de240a96e5c5e4b9fab3ee0dd1986d0e08192e34d930924c79d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-osx-x64.tar.gz\",\n            \"hash\": \"7b86ce31759717eab5cfc6ca36c57ed080e3f50817f8057f4d43afdd28519f0231445d89274095af5cc5d3ee26e9f2fcbc4187f749b46edc64c793a15cd6b26f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-win-arm64.exe\",\n            \"hash\": \"efc7ad7849c3c80b145390edec4dbaa639878727a90def4f169d5eebebaec087ba5e62b30de08c25a209ccfccd4ca4569bc11f96f53efba54dce2fe15291d3e5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-win-arm64.zip\",\n            \"hash\": \"350e84f404d01cacf7660a1cfed6ac23b2bed26a9db4a378eac5007672ed5e73e0b92641cbb6b7944fe347300032eff388b25584f737586f44ab1dd3384a99bc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-win-x64.exe\",\n            \"hash\": \"b41ac08e8e90ce01fc7d89319a26d184393fdcb925763c90bf536bfbb7257a40548f8f060c538abe32041d0c82e693d4a263e93724c132d420e04bf9c4e67da8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-win-x64.zip\",\n            \"hash\": \"420e07a6df3bdbf209551cf1e563a5e2c1112ec06752bcc4c254c51e4f23ad50924a20a09e4061aa7802cb1d0a0c516327ef9c87974cd7cc31f00da7190f9f56\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-win-x86.exe\",\n            \"hash\": \"b4614ee4507a7c30e7a01a385446c19fe0d252ebf8902456af686da68870dacfb6f467699ef211a2d4a6db0dd9d5aeca5f9d4b383ea65119b9297b803a819270\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.2/dotnet-runtime-6.0.2-win-x86.zip\",\n            \"hash\": \"19c25248a883cd30796791cad3e10f206ed90098971408a0a03924c4efa65d49f7f8d8ac316cd94c29c5478d126da059115dcdd973d16f9cf14404cc083a0e72\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.200\",\n        \"version-display\": \"6.0.200\",\n        \"runtime-version\": \"6.0.2\",\n        \"vs-version\": \"17.1.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2022 (v17.1)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-arm.tar.gz\",\n            \"hash\": \"c2950d5da671a50c955d07997b288c02076b1d69014d3ac3f5941179e29a67b4d56fc5acbde85fe13ffd46efa95ead05b39d90dc577d2a668f637e6a9547944a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-arm64.tar.gz\",\n            \"hash\": \"4e2b8f65f4cd9d1e54233b377e7efef5202eee3fa5e4592131ff03ecab032bfccdc91f4e8c806064fb769c48f946634bf1e420afecd7fcd2d981d40eeec5a881\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-musl-arm.tar.gz\",\n            \"hash\": \"ff85504645e33e34c3bef849f8257320d9aef3b1d3f961b2ad49a7d9c1e082bc219d5550cfc3e3755e1dd5bfa84880267b06c3c52512d3f7fc160c87874f2a0c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-musl-arm64.tar.gz\",\n            \"hash\": \"395d1432f32c8c471614d0651bbe761160d5b559ba7e93167b914a8e1ea9f5c699feeaeb817b29cb0123c498000f2e40901679eee6dc91694645ff19d67a2b8f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-musl-x64.tar.gz\",\n            \"hash\": \"a715084395d5a280f1a058b9e6d1064921e1114c2aec551f081d93c83b710ee1289b1790030ebbbbb704776afb4a94ada75de9ddab44ff62979c14e307aacf3f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-x64.tar.gz\",\n            \"hash\": \"334f3ea4bfeb736bed61c5896796a09d640b0ae74605c514edc5869c395befb7cfc795b58c922f14560e7d41c89c073c62ed01eefc6d9f13aa916e3478949c24\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-osx-arm64.pkg\",\n            \"hash\": \"db4d9555725dcdf84d1af63868a0a78b8b565dcce636a7ac2e79e11b69d9a347f1fc54e93df4e0da4b7dccb5cd118113f2da373e682d5d3a10f06aaf7fbaa081\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-osx-arm64.tar.gz\",\n            \"hash\": \"29ff786f9ccccc66a7bf6919aa552a0bcbb9c945f0b99778af5da2aecc4cf712a927fc28bb6c7da257d5ea91a82cf992f30f0033832f1be66ebb5a85478361a6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-osx-x64.pkg\",\n            \"hash\": \"ebaa048f50d320ef1bb0e423574806b0392a34169fdb331eb7cd9132452ea3c272f5632b7306f06b3dd5a3b0944480789fc9ca2985564b65e021eff380dbd0bd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-osx-x64.tar.gz\",\n            \"hash\": \"4dc3414c0d017d3f9bc1c3cde5dbf0341a6c5c150f8800ef56860700795a40afa375312c4e3057546fb7664e8d0acd773123698d52b790f5fb82325bac3f1afc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-arm64.exe\",\n            \"hash\": \"51713d64abeeb59338d413393afa05785859559d7931f74ba7f304ccc11899ab157b3b341aceb8b0a1ac8258b8cf6f5188d69a1683cb760450ca0c3e2f0200e6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-arm64.zip\",\n            \"hash\": \"ae467e44de46f94bd7b0aa1014d91f03aa32c79fbaed2ad47573348ae9fddf6e7c9bc95d07c3ee35afed6aeee478c44149faa12191f42b9317fc7f350a90e54f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-x64.exe\",\n            \"hash\": \"101de40bf82fb8e17e966e788b7c80f560fa6eb55dce98d959f3671092cf4be1e659d9d11debc6fd7d3b6f09f5c5d5c3adf55ee79a038071bb60e144211180eb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-x64.zip\",\n            \"hash\": \"442ea9bb696005a9646aa02e10b0b09809c5b70acd91b08fd489aa8915f8b2a925d73843a742acb8f1068363d3db96137017ca478a6a69ea28b2f17a411eb5fe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-x86.exe\",\n            \"hash\": \"b25aba0a2662cfb16124741a0ae4c14b279f9056ffb2f7802463238a0508e0e33c5d912664fd1a05e3f7d21ec02527b480fd5aaeed3d7e3acb0f3bf323ca73dd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-x86.zip\",\n            \"hash\": \"bb6dad05e6bb2daa857caa5b059666d635c5e652e2c63e4775c6a2f392e239e00ea3bf042e4c124362bd9ef46e10e8b5bdcf8d889f3a80cf1b339a1bb58cf024\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.200\",\n          \"version-display\": \"6.0.200\",\n          \"runtime-version\": \"6.0.2\",\n          \"vs-version\": \"17.1.0\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.1)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-arm.tar.gz\",\n              \"hash\": \"c2950d5da671a50c955d07997b288c02076b1d69014d3ac3f5941179e29a67b4d56fc5acbde85fe13ffd46efa95ead05b39d90dc577d2a668f637e6a9547944a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-arm64.tar.gz\",\n              \"hash\": \"4e2b8f65f4cd9d1e54233b377e7efef5202eee3fa5e4592131ff03ecab032bfccdc91f4e8c806064fb769c48f946634bf1e420afecd7fcd2d981d40eeec5a881\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-musl-arm.tar.gz\",\n              \"hash\": \"ff85504645e33e34c3bef849f8257320d9aef3b1d3f961b2ad49a7d9c1e082bc219d5550cfc3e3755e1dd5bfa84880267b06c3c52512d3f7fc160c87874f2a0c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-musl-arm64.tar.gz\",\n              \"hash\": \"395d1432f32c8c471614d0651bbe761160d5b559ba7e93167b914a8e1ea9f5c699feeaeb817b29cb0123c498000f2e40901679eee6dc91694645ff19d67a2b8f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-musl-x64.tar.gz\",\n              \"hash\": \"a715084395d5a280f1a058b9e6d1064921e1114c2aec551f081d93c83b710ee1289b1790030ebbbbb704776afb4a94ada75de9ddab44ff62979c14e307aacf3f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-linux-x64.tar.gz\",\n              \"hash\": \"334f3ea4bfeb736bed61c5896796a09d640b0ae74605c514edc5869c395befb7cfc795b58c922f14560e7d41c89c073c62ed01eefc6d9f13aa916e3478949c24\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-osx-arm64.pkg\",\n              \"hash\": \"db4d9555725dcdf84d1af63868a0a78b8b565dcce636a7ac2e79e11b69d9a347f1fc54e93df4e0da4b7dccb5cd118113f2da373e682d5d3a10f06aaf7fbaa081\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-osx-arm64.tar.gz\",\n              \"hash\": \"29ff786f9ccccc66a7bf6919aa552a0bcbb9c945f0b99778af5da2aecc4cf712a927fc28bb6c7da257d5ea91a82cf992f30f0033832f1be66ebb5a85478361a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-osx-x64.pkg\",\n              \"hash\": \"ebaa048f50d320ef1bb0e423574806b0392a34169fdb331eb7cd9132452ea3c272f5632b7306f06b3dd5a3b0944480789fc9ca2985564b65e021eff380dbd0bd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-osx-x64.tar.gz\",\n              \"hash\": \"4dc3414c0d017d3f9bc1c3cde5dbf0341a6c5c150f8800ef56860700795a40afa375312c4e3057546fb7664e8d0acd773123698d52b790f5fb82325bac3f1afc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-arm64.exe\",\n              \"hash\": \"51713d64abeeb59338d413393afa05785859559d7931f74ba7f304ccc11899ab157b3b341aceb8b0a1ac8258b8cf6f5188d69a1683cb760450ca0c3e2f0200e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-arm64.zip\",\n              \"hash\": \"ae467e44de46f94bd7b0aa1014d91f03aa32c79fbaed2ad47573348ae9fddf6e7c9bc95d07c3ee35afed6aeee478c44149faa12191f42b9317fc7f350a90e54f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-x64.exe\",\n              \"hash\": \"101de40bf82fb8e17e966e788b7c80f560fa6eb55dce98d959f3671092cf4be1e659d9d11debc6fd7d3b6f09f5c5d5c3adf55ee79a038071bb60e144211180eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-x64.zip\",\n              \"hash\": \"442ea9bb696005a9646aa02e10b0b09809c5b70acd91b08fd489aa8915f8b2a925d73843a742acb8f1068363d3db96137017ca478a6a69ea28b2f17a411eb5fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-x86.exe\",\n              \"hash\": \"b25aba0a2662cfb16124741a0ae4c14b279f9056ffb2f7802463238a0508e0e33c5d912664fd1a05e3f7d21ec02527b480fd5aaeed3d7e3acb0f3bf323ca73dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.200/dotnet-sdk-6.0.200-win-x86.zip\",\n              \"hash\": \"bb6dad05e6bb2daa857caa5b059666d635c5e652e2c63e4775c6a2f392e239e00ea3bf042e4c124362bd9ef46e10e8b5bdcf8d889f3a80cf1b339a1bb58cf024\"\n            }\n          ]\n        },\n        {\n          \"version\": \"6.0.102\",\n          \"version-display\": \"6.0.102\",\n          \"runtime-version\": \"6.0.2\",\n          \"vs-version\": \"17.0.6\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-linux-arm.tar.gz\",\n              \"hash\": \"a72a0e81c62478b0dc662ef0aaeb7f96e7dd534e90b3ac1bdab1ca98dd93a4605881dba6e9ed2315781fdf71f5b33acb1aa5e28090c7a1693405bebed5853094\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-linux-arm64.tar.gz\",\n              \"hash\": \"790cbf322ca8fed32eaf574f19d0bdc05656c5a88a65aa4dba8269cfce1443cd7cdeecdd3a40e353c368f055490b70592ca7f15f981a66c5b3a9517d0b09e4cb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-linux-musl-arm.tar.gz\",\n              \"hash\": \"b5fe2f9b29de220d94ecfd23036c89d046c71edc8aa6918f2f9c5543d20e9537add15aaa941f632e0c25562b29b1ef061a4887623b0a13ae65d20e8a9ff136ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d47657df5640016cf84479ff1f895cbb03e6b0811c71fa73b6769c6a1e55ad2a9b130c759fdfa634367e906de12ab56cf6ab185168b3d2e396b613a4c065afb7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-linux-musl-x64.tar.gz\",\n              \"hash\": \"921ada7b90a87a06dfe5353defcfff0337b696a246daf7898802342f45c3b5ffa03ab8c0edb3cb6f0e0971b533457f41e96fe7655f94f2ee8b6292b0fe9c8fcf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-linux-x64.tar.gz\",\n              \"hash\": \"edd79ebad3327032ea0aaa8504c14e3270050bb459b098202676776b41a3a1d282aaefd1e5e8aa09ef7f7cf7c4601c4783a57112ff6e3d427507e8eec2bfb748\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-osx-arm64.pkg\",\n              \"hash\": \"e4e2738a87ad097b1e5f6eb7b7526d713ba80a479e545c52ddac8413db026f7bb611e2803d4ae7a49780c7d8479c16533723f4f6b2f7b291312ffcb915388c61\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-osx-arm64.tar.gz\",\n              \"hash\": \"85b7208cb19fc91a75a4a447065d09069ff007974ed3543848345710b55d29e343e3f72bccae821da5b18c2b7c5e7901bed26a39501f6baa0fa1e54549045627\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-osx-x64.pkg\",\n              \"hash\": \"5bdd536faf05b54f1252106856b26ee725c747c794075877d75f423449e68c4505cbe6e037ed6c9737772d2fe6c4a6945fee69f9124c17e84e86ed78bbd693cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-osx-x64.tar.gz\",\n              \"hash\": \"2306e62c58eee6e568fd1993ce559b68b0f35be88bf6896a3f60c1e53a65c2dd32d6e107681195fd27758c46caace3a2694e9d4c3b8ae0eb43a896a6f48b3af8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-win-arm64.exe\",\n              \"hash\": \"d52b51c41f9cd7e2fb614cc043f54b83572469f3c13ad11d48117c921d6ab8f78526525631187cf13972893541cbd70ab4d48d53c98f76bee3e6acd6eae34aa7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-win-arm64.zip\",\n              \"hash\": \"61494b452c9d09ba8db584d32166777e75cde7a2091ae862d854cac417f84b164192c88ef8aeb28315411b0e64e3a0661a8a10e6652d2df238e76c66420ce015\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-win-x64.exe\",\n              \"hash\": \"5c999a3871473d1a5bb767f381d8fb216571955f59d93e9e579a3ef415906c2fc731857eb8faee4fbf47570c4eaaa8dc2de39553492f4e8d000ec3d12686b0fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-win-x64.zip\",\n              \"hash\": \"df6df12efee231848a993c3d96210b40134e900e6cdc5f6c2c19e55cdeb52c1130f8a217790f016a9d9371d199e75188da6f4d5c9e613d74643fb7a5899c1948\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-win-x86.exe\",\n              \"hash\": \"dc979f055fbbda1badcfb0bf6e01924b79703fc20c98d85a6872a9585a5b1259baab4a0b186071eb16e6723cf59ecfe111a981d7d8ce4e8a92defa8299010e5b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.102/dotnet-sdk-6.0.102-win-x86.zip\",\n              \"hash\": \"c00fc0897053bf44626f4e86c0fe918a34744a50f6a25a93599c6e3e73fce80a13fbecb088c9ddc8fe623158aa58f4d4d2be53080c9d1d3dc2b231f3e0834da7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.2\",\n        \"version-display\": \"6.0.2\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.22015.2\"\n        ],\n        \"vs-version\": \"17.1.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-linux-arm.tar.gz\",\n            \"hash\": \"5e9619f839da39c46f888493d761af6de1c02bdacb0ba47025ba367d9d08b230d2c85d75d6e3cf5045a23a3b6029d4697f671ce0c64f9e4fd8a79813b90a2727\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"00ecdb4343d6f42861157aaef7d892bb3d0e0c0ccd8035305708aaf6bf7095fd6daea2e80cf4fa773aad063d6e510e70cd84d6c1efbd2e3555af6cda0f4b5d31\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"d693c2fbd952e7a1e53943acb7af91895b1dde405f7b66c689da675de39140cf20460cabd27382ea1b73d2fc17d1b04985447d2dd0992a50ba7fbc22899d1a9e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c1009ef634f1103bbb89427bf25b541f50670c9817cc0d36fbf854de91291a5360abe338e0f627cb05ec377f792876a8e7c39a5585ec47892024fc0b12c9d295\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"8fb985bf79039cb1848604f08976ad82ff9582b0379cc7047f5bc95fa9e2a50f88b608efdb1b39d626b5e2a4615e38bee720a83f2d263f4dfb6716e65c74fa73\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-linux-x64.tar.gz\",\n            \"hash\": \"190959576342542bfe51c48808011236e86dcb12779c8e9e444a71f1b778302972ab291adce0c185f6b9790b11867173934968ed88ccb9530266faaa1a05829b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-osx-arm64.tar.gz\",\n            \"hash\": \"a47717e2655413c7db90a9e33894183222855078af277c06630bf6101ada2eac31a8d3aef7e9b5d1d75bf8a6548752f3c4532bbb84f49946899e8ae25949a753\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-osx-x64.tar.gz\",\n            \"hash\": \"12ccc0cf1e05cdce5e052b0d60db61fe59bcdc7e07c15465c22caa7604e9b16b8e51f502abca0ca0bfcf000ac4d74e64aae5577685a238af87f12718ec75fca8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-win-arm64.zip\",\n            \"hash\": \"209b3b15058ce908967d11a51cecb468d526d715e9863c07f12582138176739b0dc09bb8eb063c10f1161183ba003d6228aba6a231d2b2ce4fcc402cd4befe4e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-win-x64.exe\",\n            \"hash\": \"04c540ef795318255dd5ee8d3b90d0da855180d0d576c3a406efc9396daea989359b9059acc88409eaa554d0804097f9669ab1890f9e29f55ca65a33417ea930\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-win-x64.zip\",\n            \"hash\": \"3d1869ada5816df75cd336798278609b08fcc878459ad6fb02f4eabe0c20329d8d7605672404ea77440b55855b4c2d03f12fb39e8d0ddc0d919d49c2fa113aaa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-win-x86.exe\",\n            \"hash\": \"d317c6be4b3bcf483a8394f9c6c21dc98e39eb55ecaed78bb9581ae46ba0425352609604f4e1666ac1301af4b961c587858e10123b076fe020f127352ca1ced5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/aspnetcore-runtime-6.0.2-win-x86.zip\",\n            \"hash\": \"70a5ae766bff7030c87106cdad9de6474bb9965a6774629f16205a04db0140277995a6cbb2cf9d1bb27c5adfb9162758518c31a8b1f9c86163177acdcaeb3772\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.2/dotnet-hosting-6.0.2-win.exe\",\n            \"hash\": \"fb80d1763ac26077ddf4dea41d4d59515792cfef60a1ea580cf53cceb61abc536826fa1bc477a7b8c715fb10262ea14946113f0b9eceba3fd81befdc28aa8169\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.2\",\n        \"version-display\": \"6.0.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.2/windowsdesktop-runtime-6.0.2-win-arm64.exe\",\n            \"hash\": \"de3fbb4cafb010590e7658c5f3d5aa13e93bf399d205f610cf3b78208a3aa463ec341cd26c3d40da4e159b7fba1096547d6f5bdfd5298e52d67947555d04a94d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.2/windowsdesktop-runtime-6.0.2-win-x64.exe\",\n            \"hash\": \"3bbc786c0bc25074ce430a5c7e2d8257888d21128d4c0a905b772fbc12a1e2053feb57e3d9535e7825d5bcc93440821a5264c91ccab41d6b791142b39f896187\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.2/windowsdesktop-runtime-6.0.2-win-x86.exe\",\n            \"hash\": \"741031b9a2348bb9abb65c85b6728b6d67d36583503cf07af32c5a7af105161d5556543e049eb99ef5c58fefe6d329c1a38c6cf1f2c85ef4b2918c79586e597b\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-12-14\",\n      \"release-version\": \"6.0.1\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2021-43877\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-43877\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.1/6.0.1.md\",\n      \"runtime\": {\n        \"version\": \"6.0.1\",\n        \"version-display\": \"6.0.1\",\n        \"vs-version\": \"17.0.3\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-linux-arm.tar.gz\",\n            \"hash\": \"a6bea3289279ddfaeda4c46bc2cae82c662e2b2cfa13abefa18baa8db747bd1be9fabdd8c0103310f89d4c9e356235551af5354742117d2cd58abf5727883609\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"10b8775d44088ddc1ae193ce41f456d1bbaad21f2dc993de75c2b076b6ffcb07bca446f52180c9a175715a1e47ad42a4862c43ef11b5cbc1023cb4da3c426146\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"97d011df17d97db5ac6f5b5ab541f8a0428bc699a8a04ac92da5cb3865f200031cde07a34430ff492a5a54af41ee4fd4c5628093c2b7a0f4895a8326f4f63d35\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d18a059cabe2581054d9e9a2ef83c7b11159954726e2bc15e7e6b8f01cb5d7eacd34ca28dd12701286810bb52712129927471933fcd77bc062b7c892e46bca83\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"bcb328eb00ad53ae2f8ebce8802dda1329de68cbba120311d69a5f235f81ee59316728289f7797f23f657102d50751e3cff641538d4670ac8fd85da1d57feb97\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-linux-x64.tar.gz\",\n            \"hash\": \"2a316e8cba20778b409b8f2a3810348e2805f35afad8aba77a67c4e6bb2c2091e60bc369df22554bb145a5fad0c50e20b39d350b98a85bd33566034a11230da7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-osx-arm64.pkg\",\n            \"hash\": \"120dd524407e6f680bae783eaf5f33065fa3774cec49bfeb9a122571daa013209e23c4fcbf50bc4157330b6e5181656fe38ec49e0a50eb547d29a060c41b4b09\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-osx-arm64.tar.gz\",\n            \"hash\": \"35419a4340fbdd6e4ad15700a00687e163ee17234f7fd059df627db89efb47bb66a5194c96849ce65eb6fa2faaba5b5f7c53d0f169b3d8370e775ce865b745b8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-osx-x64.pkg\",\n            \"hash\": \"d8a0888afc608d3f27fb1da90801783aeb223646e24f3a51627e555be6c8da599cdbe0d8bbdf0ec09e8e238f75dc08e3119f05889ce1280e949d303d90b59674\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-osx-x64.tar.gz\",\n            \"hash\": \"45ed27f5cfd1674c4cb67a1242730928699608f6523a7fa7150c9a1b1e2ae972d32f7eae2fff119bccedfbfe1c7666ac8db882b442624157355e2f5e452b3900\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-win-arm64.exe\",\n            \"hash\": \"aa0534c0c6289e867dfabd46cf47fc9f359d2a4df64069e2bfa106841fe0b091a7b338f5210d285b3939e0b2ee1b8416013052c74b6e7af561bc811c876a68c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-win-arm64.zip\",\n            \"hash\": \"07f5706f7e1bc1818d72f97432b618a254c2b5945159d01828e290255f195fdbe077889e657e9d99243b8986b30598e3cdc76fcaa77159f561144c76fcd0c57b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-win-x64.exe\",\n            \"hash\": \"f84244e65899e1f7f1f821c873945be76e9f7320463578117d5754ae5add396ad919b0b76337707425eb72c2d711e30af9a99b842f05bfcea6dc19bacde1a41c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-win-x64.zip\",\n            \"hash\": \"059ef7dffb1e421a764779f1e75eb804fb61e32a75855964e426d7e0e8d7dd171b26861b8655738bf887efcd17657cde1b6386cf844c55e63d9822527e83411d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-win-x86.exe\",\n            \"hash\": \"4966f32df2c702642cfc4aa14d049bf077f2afdaf4a496810241ded865b36c0b6445c38fca9fa74e3f57d6c064f7e53e8b4326c64ff0abc531e5c7b07b50c9d0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.1/dotnet-runtime-6.0.1-win-x86.zip\",\n            \"hash\": \"595205f3bfa2d0f77b90b80df4f5b5a827dfd44efb476fe7151d1438407f486151d7487cfc0a72eec2afafc9f87c337a37f1925191d480d4e7077daea0367b17\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.101\",\n        \"version-display\": \"6.0.101\",\n        \"runtime-version\": \"6.0.1\",\n        \"vs-version\": \"17.0.3\",\n        \"vs-mac-version\": \"17.0\",\n        \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-arm.tar.gz\",\n            \"hash\": \"f9e212dc4cccbe665d9aac23da6bdddce4957ae4e4d407cf3f1d6da7e79784ebd408c3a59b3ecc6ceaa930b37cf01a4a91c6b38517970d49227e96e50658cc46\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-arm64.tar.gz\",\n            \"hash\": \"04cd89279f412ae6b11170d1724c6ac42bb5d4fae8352020a1f28511086dd6d6af2106dd48ebe3b39d312a21ee8925115de51979687a9161819a3a29e270a954\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-musl-arm.tar.gz\",\n            \"hash\": \"9f6ca3c29ce1ec948b69e1bfa0f40f30451d6e998b59bea8ad96701bb0815800e7f44aa91259805e9294f903e9f6264966e76a9e8918e5593d69a417385e999a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4d1ef2a941f7be3c73fddda9a129707e1f71c50a7df99cf67dca2310eb7775e98898fa18e017950df39cee2600a87c8c546b1dbb9bb6c2d0550e56cf5ce9e764\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-musl-x64.tar.gz\",\n            \"hash\": \"113428f918514d9be657e18ec454281d1f86b7e6a3214b4327379b4ab679dc60569149e943e894a169c0523f9513f3aed02ddc252daef66b67e514d3501f17a5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-x64.tar.gz\",\n            \"hash\": \"ca21345400bcaceadad6327345f5364e858059cfcbc1759f05d7df7701fec26f1ead297b6928afa01e46db6f84e50770c673146a10b9ff71e4c7f7bc76fbf709\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-osx-arm64.pkg\",\n            \"hash\": \"8a8fb781e8304e4699045fa11e46db58a9b44e2903949d6798f4d2ecca0a7e54da94681f36be3c2879d82aa25f4fc4829ad7c3f1b0ec8b94498482de4d1a08d3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-osx-arm64.tar.gz\",\n            \"hash\": \"af76f778e5195c38a4b6b72f999dc934869cd7f00bbb7654313000fbbd90c8ac13b362058fc45e08501319e25d5081a46d08d923ec53496d891444cf51640cf5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-osx-x64.pkg\",\n            \"hash\": \"00354e7031e046dd15df37980f8ebc9cd679212ffab2c43841f9790743b35a5499e4d83343f7081a1d2057d8d37399be809425945557fa1fb579460a03cb258f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-osx-x64.tar.gz\",\n            \"hash\": \"36fde8f0cc339a01134b87158ab922de27bb3005446d764c3efd26ccb67f8c5acc16102a4ecef85a402f46bf4dfc9bdc28063806bb2b4a4faf0def13277a9268\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-arm64.exe\",\n            \"hash\": \"006e943a7531b965a0551a4dee071255b64b53fa44084c47610f600b831ac057e54ab079a4d12fb51c6ef11212c83acb929e1c4e29482cc046ed7e20089c99ed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-arm64.zip\",\n            \"hash\": \"881a60104d3c546d938b21cd9aa85257c8f52e0dc7647b547f85d16cb473bf8bc3ba523e9513ba6ac762a45853692bd692497009d4e5ddd36e82a380b1940e9d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-x64.exe\",\n            \"hash\": \"695b2ddc8d5338eb0d08d9781930e578c129d55173708e1a5da993f2f1d783750d29d0d482fb2fb0253df2ba280bcb2cabba5c78fa9601b5c1f9631f94b7b65a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-x64.zip\",\n            \"hash\": \"7259dc349861d68878f19ba1f4f72ee47403adda2e8814882c5096a44bfd42e475fc2b9eb16d819bbc61c166e13b9b5b97cfc16a36190faa88eeb6eb61693f12\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-x86.exe\",\n            \"hash\": \"b52f0eb94c48a813c552cb526d9b46e112176ee9cf47552a419627516b62e4c1288c95f574c2f1f1dda515ee458b609d4bb633bae46cab2d4ade4e15d6b33f2f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-x86.zip\",\n            \"hash\": \"512e5ca6e4df0cecb26a733575ab0fa3acf196b70c323a51ba25c5f5df5da39ba8b92b534128be1627077e2f3e8b21dd8c90f0a086b189296e94f333954abc8b\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.101\",\n          \"version-display\": \"6.0.101\",\n          \"runtime-version\": \"6.0.1\",\n          \"vs-version\": \"17.0.3\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-arm.tar.gz\",\n              \"hash\": \"f9e212dc4cccbe665d9aac23da6bdddce4957ae4e4d407cf3f1d6da7e79784ebd408c3a59b3ecc6ceaa930b37cf01a4a91c6b38517970d49227e96e50658cc46\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-arm64.tar.gz\",\n              \"hash\": \"04cd89279f412ae6b11170d1724c6ac42bb5d4fae8352020a1f28511086dd6d6af2106dd48ebe3b39d312a21ee8925115de51979687a9161819a3a29e270a954\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-musl-arm.tar.gz\",\n              \"hash\": \"9f6ca3c29ce1ec948b69e1bfa0f40f30451d6e998b59bea8ad96701bb0815800e7f44aa91259805e9294f903e9f6264966e76a9e8918e5593d69a417385e999a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4d1ef2a941f7be3c73fddda9a129707e1f71c50a7df99cf67dca2310eb7775e98898fa18e017950df39cee2600a87c8c546b1dbb9bb6c2d0550e56cf5ce9e764\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-musl-x64.tar.gz\",\n              \"hash\": \"113428f918514d9be657e18ec454281d1f86b7e6a3214b4327379b4ab679dc60569149e943e894a169c0523f9513f3aed02ddc252daef66b67e514d3501f17a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-linux-x64.tar.gz\",\n              \"hash\": \"ca21345400bcaceadad6327345f5364e858059cfcbc1759f05d7df7701fec26f1ead297b6928afa01e46db6f84e50770c673146a10b9ff71e4c7f7bc76fbf709\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-osx-arm64.pkg\",\n              \"hash\": \"8a8fb781e8304e4699045fa11e46db58a9b44e2903949d6798f4d2ecca0a7e54da94681f36be3c2879d82aa25f4fc4829ad7c3f1b0ec8b94498482de4d1a08d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-osx-arm64.tar.gz\",\n              \"hash\": \"af76f778e5195c38a4b6b72f999dc934869cd7f00bbb7654313000fbbd90c8ac13b362058fc45e08501319e25d5081a46d08d923ec53496d891444cf51640cf5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-osx-x64.pkg\",\n              \"hash\": \"00354e7031e046dd15df37980f8ebc9cd679212ffab2c43841f9790743b35a5499e4d83343f7081a1d2057d8d37399be809425945557fa1fb579460a03cb258f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-osx-x64.tar.gz\",\n              \"hash\": \"36fde8f0cc339a01134b87158ab922de27bb3005446d764c3efd26ccb67f8c5acc16102a4ecef85a402f46bf4dfc9bdc28063806bb2b4a4faf0def13277a9268\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-arm64.exe\",\n              \"hash\": \"006e943a7531b965a0551a4dee071255b64b53fa44084c47610f600b831ac057e54ab079a4d12fb51c6ef11212c83acb929e1c4e29482cc046ed7e20089c99ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-arm64.zip\",\n              \"hash\": \"881a60104d3c546d938b21cd9aa85257c8f52e0dc7647b547f85d16cb473bf8bc3ba523e9513ba6ac762a45853692bd692497009d4e5ddd36e82a380b1940e9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-x64.exe\",\n              \"hash\": \"695b2ddc8d5338eb0d08d9781930e578c129d55173708e1a5da993f2f1d783750d29d0d482fb2fb0253df2ba280bcb2cabba5c78fa9601b5c1f9631f94b7b65a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-x64.zip\",\n              \"hash\": \"7259dc349861d68878f19ba1f4f72ee47403adda2e8814882c5096a44bfd42e475fc2b9eb16d819bbc61c166e13b9b5b97cfc16a36190faa88eeb6eb61693f12\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-x86.exe\",\n              \"hash\": \"b52f0eb94c48a813c552cb526d9b46e112176ee9cf47552a419627516b62e4c1288c95f574c2f1f1dda515ee458b609d4bb633bae46cab2d4ade4e15d6b33f2f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.101/dotnet-sdk-6.0.101-win-x86.zip\",\n              \"hash\": \"512e5ca6e4df0cecb26a733575ab0fa3acf196b70c323a51ba25c5f5df5da39ba8b92b534128be1627077e2f3e8b21dd8c90f0a086b189296e94f333954abc8b\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.1\",\n        \"version-display\": \"6.0.1\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21322.1\"\n        ],\n        \"vs-version\": \"17.0.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-linux-arm.tar.gz\",\n            \"hash\": \"e1d9f0b2357ba637ee33bc8f8428b9ff0b3656ac28d1f7727693444191cc8a0a078c2e864547d58668cf3767f0b6df5b804e2743b6fb0906106d2877cdb687dc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"c1cab4bc800bd507ca6046ed1af900a7f1a7d28fa564615b8b93803139affc7f5fe6824c2b161ce635047862d644d724181424b44281b30a77f7159d6769c83c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"f613fb9f30ff2f0693aeeceaf1160f925467f33a2c2308f39c198a128713ef19c1d743aad63b381159a420689d06a60a65f8b99fbeab1220f27463e8c112a92b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7624ae6b63475c4861e1d48aa85151a8f1e506513fe3dfd3fb95ae9a1067a77ad8ddd3e44bf8d27baca62c9c2b3cb425dbaa8d8de346f45aecb5b40870f3334c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"763a9895e20ac19012b6fb6489be45a25879c3717e47b7c8f13e38e5c8a33e9ccdf5fe0a90896bd4719324cc24397c62f06426e9dd43c9cdf42296fcb08a1f26\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-linux-x64.tar.gz\",\n            \"hash\": \"9e42c4ac282d3ed099203b9a8a06b4f1baf1267b4d51c9d505ca7127930534b60d4e94022036719133b30c1b503f66d7d4571bc24059d735e510f5e455ec6c51\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-osx-arm64.tar.gz\",\n            \"hash\": \"ce6fab613172b07546f83885906c16eaf56b1de0744d326261222189466debd3ad901e95ff2916f51d7241321a31b2828f4b1fb6ce192224ebab2543dc652c64\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-osx-x64.tar.gz\",\n            \"hash\": \"e21cd7ead260038c820a2697d415d81ed9ce210e9d04e70ac87924f639cf5a37b2d8de400d0d3966fc6921100bb879e8d6fb9fcec9b67b02cecf180bc2f46865\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-win-arm64.zip\",\n            \"hash\": \"7009bc29d02c88c1146950aa56d64d58289d4b9f3678d48ef0d5126f0cf7208e525fb735c362b16ceffaebac55bbcab2a9f866ba7f244536d58345e2b1a2d384\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-win-x64.exe\",\n            \"hash\": \"d73cee3ef2138c3160e30b9db2f1725a540af1faf1a0d9b59e2482b5c1fe445566db8420dd298749fa9f1121d5a14255ca6e7b7c88f7dbe854f05f28738614aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-win-x64.zip\",\n            \"hash\": \"a5c5e6b7249101bb3cf309255ee0c33e509783406e64bd3c132afffc7895061a83c4760a1c15297ba0153beca53196b28f81eacb4552481f53d5d7c21b21a30b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-win-x86.exe\",\n            \"hash\": \"2b285d548f84510a365a46eab0d54aca936c69d88848f3bd5cda19f0a4ebf8cff5b9ccdc0c7927df446256ac849e1c2dbcf1ced326beabe1772b2240711bdec2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/aspnetcore-runtime-6.0.1-win-x86.zip\",\n            \"hash\": \"4efacf582489f01b8bafc3240fe8992b5ab05bc858e37764d3840bd4f9f9c5ffadd87d7d741b35e4790c408198ff54988c7315d8d16d10024ca9f25508eb0d6c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.1/dotnet-hosting-6.0.1-win.exe\",\n            \"hash\": \"0a641778e544c75dd339f2a77e681e7d1d92c0ca0e79d132eca9d462612ebdd1bafb081a2d6f1cd05d618abc539ccbae7b61a5b9b2e539ff335a0d137470095d\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.1\",\n        \"version-display\": \"6.0.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.1/windowsdesktop-runtime-6.0.1-win-arm64.exe\",\n            \"hash\": \"d9a270611d4faca24186f5984f9d8ea01531b4f9513dd129db9f523d98920e24aaf08f0379c01a8edd36877ed0545178fc87b82636ccb40057f64e6c5bbbba45\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.1/windowsdesktop-runtime-6.0.1-win-x64.exe\",\n            \"hash\": \"36dc038f6ed20b964238d6f1cb8d2248fdf120f53ab412c23d77981a0bc4133be731df7b4d5fec7d29a127ab6d3f0e93a3062eeb3691837d7442e085ee884ebd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.1/windowsdesktop-runtime-6.0.1-win-x86.exe\",\n            \"hash\": \"69d5ebc7e8421cd10164fadcf41f05e79c4c5e4fa88107b682ff44e2081e7d7c3427f775ffdba568f532aae24f9773043cdb6354828a8379e54a5404b1739f79\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-11-08\",\n      \"release-version\": \"6.0.0\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/6.0.0/6.0.0.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0\",\n        \"version-display\": \"6.0.0\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-linux-arm.tar.gz\",\n            \"hash\": \"575037f2e164deaf3bcdd82f7b3f2b5a5784547c5bad4070375c00373722265401b88a81695b919f92ca176f21c1bdf1716f8fce16ab3d301ae666daa8cae750\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"b0f0f2b4dc0a31b06cc3af541a3c44260317ca3a4414a5d50e6cf859d93821b3d2c2246baec9f96004aeb1eb0e353631283b11cf3acc134d4694f0ed71c9503d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"b71b2dc2067c130a7855430dce51cac701c5c03f1ce86e76c45413efa1ee5529161c11107ca7f09e83c149558545207efb4140d441e773a2d63ae9f37ed76420\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e5555d81b06f4617569cbe183150f03e483da7b0d2d7da7da4fcaa80decd1ae2369efc4122eb3c6e59a0631c6a51559d8458a022680074f2548df534685ff2cb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"1b6b5346426e53afd7ea4344e79b29a903b36bb1dfbc88d68f3a17a88b42ca9563d8af7c086cc0d455cb344c7d11896d585667c76e424b2e2760e7421018c1c7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-linux-x64.tar.gz\",\n            \"hash\": \"7cc8d93f9495b516e1b33bf82af3af605f1300bcfeabdd065d448cc126bd97ab4da5ec5e95b7775ee70ab4baf899ff43671f5c6f647523fb41cda3d96f334ae5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-osx-arm64.pkg\",\n            \"hash\": \"e9043d8d073a02ed5cbed9f5804d0608c168d800aea5fd9debfc963010cee855ab8439946fc092ad880adcfb84777465ca572f85862402b6875a758e41d343b8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-osx-arm64.tar.gz\",\n            \"hash\": \"5cfc3c8a70f0e90f09047d3eeccd699e7210756b60fabbf1a30d6fdc121df084e5d8c3210557273739d5421f031dc9e4d07c611406734ca0671585de6e28e028\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-osx-x64.pkg\",\n            \"hash\": \"d3244837766f2f2b0ab5172d3ea6bab149e2bea716d4f7be0d122fcd867609f3c694a9c4fd4cd7180bf5348209e414809c37ed2327804ca76b5bc269187b04e6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-osx-x64.tar.gz\",\n            \"hash\": \"d6842bddd9652dd7ad1d8156c3e9012f9412b3d89b4cfc0b6d644fd76744298aa5ed2cde8a80d14bb2b247ee162bae255875ee2ca62033a422dacb7adaeece2d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-win-arm64.exe\",\n            \"hash\": \"88e459d006c6d7ea46f0737421bf479f3a29b2f5bf273b9bbbd6919729c67293df3bfb3066fd04a58d1809b43bd6d9091fac58ccab43b107c4bcba9a606e447a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-win-arm64.zip\",\n            \"hash\": \"a223bbb3dd09b5f49bce1165c1398123e573a524f8ee9fa808f29e361bea85f94e2eaa9a8ab0b4bfb4b5564bf0d70b27a994dfd5c47c79b2fd5d6501c9d1620e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-win-x64.exe\",\n            \"hash\": \"95be7c91cbae40f3faf29329bf741f3d0670003bd3316c2cd7adf1653b472b0ca6b0f40713b84fd3855d9ded7d4e7f6b0ae67aa900ea04caada24e524b94bbe1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-win-x64.zip\",\n            \"hash\": \"db8ad4e70b2779886f9e8e2aa89c40461f94ec4291786b2c4f9fdc5df1c707acf0bf1fab8fb99d42abb0d8010949e39175d39dea7ac154ea0ac2cf5761f539d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-win-x86.exe\",\n            \"hash\": \"50ff4627573abc80731515573aa1e4b5a8c05c1ace868920d22edcdce803489d4070022e3a4359596a935bb68932c6e53932886a8336ef2220d640cb1b7328d2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0/dotnet-runtime-6.0.0-win-x86.zip\",\n            \"hash\": \"0950abc1ddec8f8429ec46e29af78f019ffd32f66c0fcfef88e0356cd61dd91b70c4ac19d5be938cf35c791154992228a94f2f3297c46cab490a3a1c9552f266\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100\",\n        \"version-display\": \"6.0.100\",\n        \"runtime-version\": \"6.0.0\",\n        \"vs-version\": \"17.0.0\",\n        \"vs-mac-version\": \"17.0\",\n        \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-arm.tar.gz\",\n            \"hash\": \"c1e555893c48c4f4256d3e6b1d36b31d8a4d7763a6e958fb63dd31436c660648d481612b5e25d79a613e84a1954f5eac2c9c2b740bf410958172780f7bbeaeb3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-arm64.tar.gz\",\n            \"hash\": \"e5983c1c599d6dc7c3c7496b9698e47c68247f04a5d0d1e3162969d071471297bce1c2fd3a1f9fb88645006c327ae79f880dcbdd8eefc9166fd717331f2716e7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-musl-arm.tar.gz\",\n            \"hash\": \"4568f18912431cf1ffff0ae6ead281999dfaf594a3a59ef7d0492e687069cc988f9809c51cecb9c33eede863dda45868072d98c0aa52d3941fd1783590e7eb73\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0f7a03ab2d090658623dc4bba3ece420cdf1976296f812140c152a399513cfd53a0bd5a6b0833c29860f035121b53bc38d9fa348434963a0bf6e6a3945547273\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-musl-x64.tar.gz\",\n            \"hash\": \"428082c31fd588b12fd34aeae965a58bf1c26b0282184ae5267a85cdadc503f667c7c00e8641892c97fbd5ef26a38a605b683b45a0fef2da302ec7f921cf64fe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-x64.tar.gz\",\n            \"hash\": \"cb0d174a79d6294c302261b645dba6a479da8f7cf6c1fe15ae6998bc09c5e0baec810822f9e0104e84b0efd51fdc0333306cb2a0a6fcdbaf515a8ad8cf1af25b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-osx-arm64.pkg\",\n            \"hash\": \"d7ff82c55eda5844c8869b63646c75a0b0a34f30fc23bdee3c0c5f3bf1666fc78f0ded86356ab21fbfd04f1adc0a60008940e726620a3d42e4a4343ea9134544\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-osx-arm64.tar.gz\",\n            \"hash\": \"92ead34c7e082dbed2786db044385ddfc68673e096a3edf64bc0bf70c76ea1c5cb816cde99aab2d8c528a44c86593b812877d075486dd0ae565f0e01e9eaa562\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-osx-x64.pkg\",\n            \"hash\": \"109076a315749ae37f2f6085f489101f9ed538caaba6bf9f7e5c00ad713185b2d254296139d486a56c16401c56f00ba1d7c89bd991f18cc715a8ccc85353eba6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-osx-x64.tar.gz\",\n            \"hash\": \"6e2f502a84f712d60daed31c4076c5b55ee98a03259adf4bdc01659afcac2be7050e5a404dcda35fdc598bf5cd766772c08abc483ed94f6985c9501057b0186a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-arm64.exe\",\n            \"hash\": \"811a786a433ced4bd6ea5b87016d066bf90972db00be021f752ba8d91a7cf732fc10c90d02553e7146023ea11be7bc36c5aac6b9009d5b9dd8493b3c4c7c8637\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-arm64.zip\",\n            \"hash\": \"a785cab6ae75187fccdd8276e4c961cc7cf8ff03fd49fdc36d251560909a53b4f4767f94ca1f007a672e10f0053f87d33fdd107661f718f4e969c740970ba974\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-x64.exe\",\n            \"hash\": \"a3bf940482214add94b20c741cf5b8b41467ec730073eed67dfdcf42ba8ad918d63d44322a29e8dd47e12dbf4617298ab3d331147f40efe21158ccf229fa2727\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-x64.zip\",\n            \"hash\": \"d2fa2f0d2b4550ac3408b924ab356add378af1d0f639623f0742e37f57b3f2b525d81f5d5c029303b6d95fed516b04a7b6c3a98f27f770fc8b4e76414cf41660\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-x86.exe\",\n            \"hash\": \"8161389c3d4ffd9c7487a6be5f42634a20c0bec88ff07f4259ff1f085f1e776f5137570c336c9fbade17005ad5e656cfd4b5bab2c9bc941eece3d45a2a5eafac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-x86.zip\",\n            \"hash\": \"22ea675797425bd4c65baecf4e0549b648377d74fd2df0d7bbbb2a5802160a7e13dcbb7877f12c7a77d08246bf3378846a20669c2b69db11a32a08ab7e722784\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100\",\n          \"version-display\": \"6.0.100\",\n          \"runtime-version\": \"6.0.0\",\n          \"vs-version\": \"17.0.0\",\n          \"vs-mac-version\": \"17.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.0 latest preview)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-arm.tar.gz\",\n              \"hash\": \"c1e555893c48c4f4256d3e6b1d36b31d8a4d7763a6e958fb63dd31436c660648d481612b5e25d79a613e84a1954f5eac2c9c2b740bf410958172780f7bbeaeb3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-arm64.tar.gz\",\n              \"hash\": \"e5983c1c599d6dc7c3c7496b9698e47c68247f04a5d0d1e3162969d071471297bce1c2fd3a1f9fb88645006c327ae79f880dcbdd8eefc9166fd717331f2716e7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-musl-arm.tar.gz\",\n              \"hash\": \"4568f18912431cf1ffff0ae6ead281999dfaf594a3a59ef7d0492e687069cc988f9809c51cecb9c33eede863dda45868072d98c0aa52d3941fd1783590e7eb73\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-musl-arm64.tar.gz\",\n              \"hash\": \"0f7a03ab2d090658623dc4bba3ece420cdf1976296f812140c152a399513cfd53a0bd5a6b0833c29860f035121b53bc38d9fa348434963a0bf6e6a3945547273\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-musl-x64.tar.gz\",\n              \"hash\": \"428082c31fd588b12fd34aeae965a58bf1c26b0282184ae5267a85cdadc503f667c7c00e8641892c97fbd5ef26a38a605b683b45a0fef2da302ec7f921cf64fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-linux-x64.tar.gz\",\n              \"hash\": \"cb0d174a79d6294c302261b645dba6a479da8f7cf6c1fe15ae6998bc09c5e0baec810822f9e0104e84b0efd51fdc0333306cb2a0a6fcdbaf515a8ad8cf1af25b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-osx-arm64.pkg\",\n              \"hash\": \"d7ff82c55eda5844c8869b63646c75a0b0a34f30fc23bdee3c0c5f3bf1666fc78f0ded86356ab21fbfd04f1adc0a60008940e726620a3d42e4a4343ea9134544\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-osx-arm64.tar.gz\",\n              \"hash\": \"92ead34c7e082dbed2786db044385ddfc68673e096a3edf64bc0bf70c76ea1c5cb816cde99aab2d8c528a44c86593b812877d075486dd0ae565f0e01e9eaa562\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-osx-x64.pkg\",\n              \"hash\": \"109076a315749ae37f2f6085f489101f9ed538caaba6bf9f7e5c00ad713185b2d254296139d486a56c16401c56f00ba1d7c89bd991f18cc715a8ccc85353eba6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-osx-x64.tar.gz\",\n              \"hash\": \"6e2f502a84f712d60daed31c4076c5b55ee98a03259adf4bdc01659afcac2be7050e5a404dcda35fdc598bf5cd766772c08abc483ed94f6985c9501057b0186a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-arm64.exe\",\n              \"hash\": \"811a786a433ced4bd6ea5b87016d066bf90972db00be021f752ba8d91a7cf732fc10c90d02553e7146023ea11be7bc36c5aac6b9009d5b9dd8493b3c4c7c8637\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-arm64.zip\",\n              \"hash\": \"a785cab6ae75187fccdd8276e4c961cc7cf8ff03fd49fdc36d251560909a53b4f4767f94ca1f007a672e10f0053f87d33fdd107661f718f4e969c740970ba974\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-x64.exe\",\n              \"hash\": \"a3bf940482214add94b20c741cf5b8b41467ec730073eed67dfdcf42ba8ad918d63d44322a29e8dd47e12dbf4617298ab3d331147f40efe21158ccf229fa2727\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-x64.zip\",\n              \"hash\": \"d2fa2f0d2b4550ac3408b924ab356add378af1d0f639623f0742e37f57b3f2b525d81f5d5c029303b6d95fed516b04a7b6c3a98f27f770fc8b4e76414cf41660\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-x86.exe\",\n              \"hash\": \"8161389c3d4ffd9c7487a6be5f42634a20c0bec88ff07f4259ff1f085f1e776f5137570c336c9fbade17005ad5e656cfd4b5bab2c9bc941eece3d45a2a5eafac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100/dotnet-sdk-6.0.100-win-x86.zip\",\n              \"hash\": \"22ea675797425bd4c65baecf4e0549b648377d74fd2df0d7bbbb2a5802160a7e13dcbb7877f12c7a77d08246bf3378846a20669c2b69db11a32a08ab7e722784\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0\",\n        \"version-display\": \"6.0.0\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21299.0\"\n        ],\n        \"vs-version\": \"17.0.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-linux-arm.tar.gz\",\n            \"hash\": \"36be738bb40a0cadacd4531c3597a25fd45deb7c48090ffb61c79a5db7742a5b8e13051b06556e15e7e162e4a044795c0ca5e6da4db26b63b05c37b39e74e301\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"e61eade344b686180b8a709229d6b3180ea6f085523e5e4e4b0d23dd00cf9edce3e51a920c986b1bab7d04d8cab5aae219c3b533b6feb84b32a02810936859b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"f68bbff22e24d4e4b95fdafbe0615f0877233cca43709430cf999556c158c4f26ce0f1624853d367c9756ac771992aa05f01fa4d6bbaf45c279a0184c35b0661\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3d8f3f981b5398fe86582dc7119d490401924fdea4c20a96495f87e0082461308d1a28f8777616d2d303f01f63ce9fed78c1ce9600601f9c65a6ad6f914cef3e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"7273e40bc301923052e2176e8321462790e3b654688f473dc7cac613ad27f181190dabbba79929f983424c9b5b5085b8d4be9cc9f0f1d0197f58ef3bb9aa8638\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-linux-x64.tar.gz\",\n            \"hash\": \"6a1ae878efdc9f654e1914b0753b710c3780b646ac160fb5a68850b2fd1101675dc71e015dbbea6b4fcf1edac0822d3f7d470e9ed533dd81d0cfbcbbb1745c6c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-osx-arm64.tar.gz\",\n            \"hash\": \"e459ddf33243d680baecc5378b9c4182daf42b8c36a9a996205d91146a614d048a385f953c43727350ad55b1221c5f5d43b383d03e3883e862bf12faeaa02dfb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-osx-x64.tar.gz\",\n            \"hash\": \"76029272ff50fbf9fcc513109b98c0db5f74dbf970c1380be4dfac0dae7558824d68a167d0a8ceb39042ff4a7ca973cdcc15afed2d1ffef55b0adba8e40c9073\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-win-arm64.zip\",\n            \"hash\": \"34f1f2408c2fd231411dd6711b2f0dac2369bde2ed21738cf18fe05bea8209ec6cebfac7739e1268c7a812f1ed9d7fbbf6c7e9f0060499364b57c3a4e9ffe104\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-win-x64.exe\",\n            \"hash\": \"2e589f40a5538afc4aeeb0af106f683e294cba2e1e2624769735efe1468e1e6649b6e5f4bf9af3e7034a9e040e8bc2d7c68632b7aa1db433067f4b7c3b8c0741\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-win-x64.zip\",\n            \"hash\": \"2b6b630b4f0d86f4decfd1a8c2186f14322c792bafb024a8e71919ac8918e29dec99004a5cdf8b22479e0f16af582a90ed521d312a0a67a75ed5bd4adbb7594a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-win-x86.exe\",\n            \"hash\": \"e146f55451bc3a3f9f3043868ce73f4a14d516fdb2a79a62befe5375b2a4ce9cabc669cb5de6345d697049657afc3f134ca8106c4c266d3d91d624b3d23bdd60\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/aspnetcore-runtime-6.0.0-win-x86.zip\",\n            \"hash\": \"69fa95e74b4395e3fa7a67f17a8a955621ae353dfae18a08d5d42efa7cc785fac44a6bc283226fb91987559fae75be160d94cf12fbcce113a60128b1dc52ad6b\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0/dotnet-hosting-6.0.0-win.exe\",\n            \"hash\": \"39d76250b2e3a640a30519008c88353be18b85914878ec9eeee742e9335f0b3597970e8f33bd71f01c13808a52ffdc94295d1ca5c90ed234216a770fe24d92ea\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0\",\n        \"version-display\": \"6.0.0\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0/windowsdesktop-runtime-6.0.0-win-arm64.exe\",\n            \"hash\": \"b6a6fbaf7a4a1388cee4daba707ff6e44b12341192d78bc9f7bfcf28d6f15183a0e28758c01db844824b8042d8fa6d24f8c055dc96e788d1bbd3c22b28d315bf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0/windowsdesktop-runtime-6.0.0-win-x64.exe\",\n            \"hash\": \"6b9b230579b1e5825d3f5db0a209d8c0f1c42bd94b00907aa3a314e257c372a81535244007e3496d712dc04385c3247b2614001780cd27e832598404e754660f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0/windowsdesktop-runtime-6.0.0-win-x86.exe\",\n            \"hash\": \"af89b1d0bcb9b51376fa181b2fe1918ca1dd6a47f928c9b3cafaf0972ba8b2faec4f15150ebfe54c5497570e4abdaee4c9e94d4928965194d232483cae34498f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-10-12\",\n      \"release-version\": \"6.0.0-rc.2\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/preview/6.0.0-rc.2.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0-rc.2.21480.5\",\n        \"version-display\": \"6.0.0-rc.2\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-linux-arm.tar.gz\",\n            \"hash\": \"50447f1a5d121c7b5cc34678fade10933711f2a14f9f8be6930bfaefadcd31d7d20518ba48b4335ac69eeec24586eb00c239157eb8df139cfdde23d8820b1e76\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-linux-arm64.tar.gz\",\n            \"hash\": \"b0f8128d994b0de0c72b9dd8083a7350218adfafedc643c59b497fa605420602004d9e21e8acb488d92bc498f9783a3240cfcafa77443eb6f08b66aadc4f5b65\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"3ce96ba48e87ddb942ef7927c66b899ff535f2ceed1fc8e89f6f68c4d5cb2745a5e31737d6cb65fc0569e5695ce7c291102501f5ab0561afc26528d3afebfcdc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8a301cc23db700d5188f29b1e63c3bde1631cf1bdc02d1070923532733d7a030be17dd4391d6d1f4596c11b1009aa38efbfa8335219bd1fac989158ba7e2a728\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"ee3fb0c0311e0d88ae3f8b0d150f8d98da4fa24d77c429438fad04393b24e214db49bfbc4c9e89918e99061004d63f40ec7b76cb1c0e1c2b12414be29ab63238\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-linux-x64.tar.gz\",\n            \"hash\": \"45062417c6111af4d635868927e8f69d43f66c9e0f111cb71c1861eaf5ceda4aefa99d97c6ce3b13fac2bc7c57c435e6f8b2d43c51a3bb3304b42081d98f7047\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-osx-arm64.pkg\",\n            \"hash\": \"41c3154efcc5269ddcac3b877b59b9fec310654cf8238868a1f4a71b48e660d65ec2db6d2f1a1977f9c2147f84c7c9f677e24fbcc210eee3aa9e77ed1e20f94b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-osx-arm64.tar.gz\",\n            \"hash\": \"747abb8eaad53e0ca7e5b2908b620076fa68a75c5e822361483ed13f7544e31def26bbf67bb85f47633e2dddde9cb095503bf70d1a4b0b2f33c6ef6f887d95fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-osx-x64.pkg\",\n            \"hash\": \"1807214afa00c9ff4f947f63bc01df3e7f7495d8d3f403aae62f74a8d4ef8cb9090e2f6c18ea7197dd4fec2d6c4b26f87357e59dab1d16aaf819c95940176616\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-osx-x64.tar.gz\",\n            \"hash\": \"0f702645719af5a4f1e720c0f2a0c67c7a4a84fac525b3ac6ce6357ca6d44405aeca674d04d8a976a7338ddf8782350debd53dce85e614c837106ffadf84cfb9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-win-arm64.exe\",\n            \"hash\": \"4725ea7abfde572dcba6b2a04b1bf32273ff2ef9001c92a63f39ead5a6ea0142488cf5426d7bf856622cfebbae34d989c4600fcc884979adf71870119a9bbc6d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-win-arm64.zip\",\n            \"hash\": \"76d56cff06751652dc7d6e89523dd775191695d74c8f96239191059a89cb35d85867ce940bc2f27e7cd8a47029579fc0d56e142404c37913f8387573e386f77a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-win-x64.exe\",\n            \"hash\": \"bff7726653f820b518b55d4e07a1b74a0db17b4e03bcfab78d87a94565766517c83468b199ec00bca23e1ee2a913e16a1e05c6bf32149551470b2232dd39c10b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-win-x64.zip\",\n            \"hash\": \"46b96bc4cc05918ce91a1bb77227a219e2dde5b90ae99e99180f8ff3455e9731029bcab6fdece926f289e7993f9ca160b737f9a4eccc533304ba83b9842eec11\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-win-x86.exe\",\n            \"hash\": \"4c33f17a59f01ea439cff6ac8ba87393d02d916ee78c57c25fe0eaef5e13015d64b172538c02f0b4923e5f553f4f4b8b889fa69ff6bf3a452116132f0cee712b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.2.21480.5/dotnet-runtime-6.0.0-rc.2.21480.5-win-x86.zip\",\n            \"hash\": \"db92d96c40f02bb1cd04a27f21c2d6f7164182bc894901e39a0e75eef681f56206358390d9935a43d1bb331706eb98ef3c919c0abac470c560c2e29b787c0c73\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100-rc.2.21505.57\",\n        \"version-display\": \"6.0.100-rc.2\",\n        \"runtime-version\": \"6.0.0-rc.2.21480.5\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-arm.tar.gz\",\n            \"hash\": \"2396998b8f21527f979b84460aee8621ca5fa275e4a1ee83b11fe9f12b42479931e56787d7dc82640d72470df185cb02d0bbc5e0e3e920bb6abb2d270051b188\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-arm64.tar.gz\",\n            \"hash\": \"14aa96f47f7f3520075e41753c705bdbf7f84fd7cff7cc2add1095a13e3e3c44eaaf2d822551902f05a6ad0c9acd7f7424190b7c09c397004c632eddc8acd5ac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-musl-arm.tar.gz\",\n            \"hash\": \"6e74874ad38946cb4d8ddcacf61171c440c49b4a5262256ac9b110d7d7981eee1870731df82b6d825117bbb799d2b780b7509a1bd2f9aec8c6fa71edbc745dee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-musl-arm64.tar.gz\",\n            \"hash\": \"286231a82a5c5b2262049b02875ba3f7569dfbefee8b96dfebddd5c98a45918679a28879150286d9a3c1fa02536effab635c27451748a69e36fcf1e71b57b3a7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-musl-x64.tar.gz\",\n            \"hash\": \"088de76a319ccc11e2d06310d096540100a76a94933602a614fb1f2b71ecaadcb573f2db71ef61cca339ce28caab07827bdb3eb0d7cd3199b0f4b8917f0bdfc3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-x64.tar.gz\",\n            \"hash\": \"0a8f85a2757f61ca7f9b8c546af4554c2aac9cdb06f6d62879a60de6f2a3d37ea7136f48896c9c85828a2d55df354e7b9b5b4dc22896c927f0c6370a5ade1b9c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-osx-arm64.pkg\",\n            \"hash\": \"ebb2971340d3d2a8e2ed4d48dde4f6ac7f49fb37e05e56c8be395b4b5564e0e05b7337a153d9d4e7b79994a5b75a38a3af4cfd78251678162a6fcc1754d08c04\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-osx-arm64.tar.gz\",\n            \"hash\": \"c96c8a86e36ca16a0e10f635250472d5c8eda290dc505ed8eb4bd6a68b8e6ae6b2770236f5bda1573bc3124229531b3ed7dd71f60a821e39aaaa6697a82fdf8a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-osx-x64.pkg\",\n            \"hash\": \"c9f759880c416aeb3d5c786447b1e26fd339f60fbf1bf17e17a5a24cdcea7feed7b895a7cf57a2e5404f0351b9fec9b8db75c058e9fb560afe2f3930f9d2b560\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-osx-x64.tar.gz\",\n            \"hash\": \"6a896f2d1e8e2d00b52641e8b1aee88888a2b30e0f18e499b1eaf4ae7dbdaa24ea5af0dbd4a6a1cee715738e6e91cecdbc02c2c7d3d4c71d4c9af3e04f1b4fc9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-arm64.exe\",\n            \"hash\": \"ef62eb2de12f4eb74b3b867d605387d7540686bb0647723178283631567a15df4f864d46faf398b86bbe603984f27ec3a6b94419eda4051758053dfb1302c0b6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-arm64.zip\",\n            \"hash\": \"b7c7f90faedc4ce88b52a622b21c0815d4092e75cc9dd0dd423400d3dd505c22c1123cf780f1b8df5b634a6e0951cd5d71a7b50323b43f60d817d551d40ae25d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-x64.exe\",\n            \"hash\": \"0fd961dcdb07e659b2cc9a710cef12db9acede80268e24d8a48290ca0851a6dca96705445f31f37b8dff9f30139a67744cbbfc2ebeac86e2adfdaac3d944168d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-x64.zip\",\n            \"hash\": \"072f581b679a85c546c3ee198332f63a5867933b845dcf5ad1938b3abef169ca34e88755f44282c165cc5e3aba63bb75830a6557397b97ef33e38c478e016a25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-x86.exe\",\n            \"hash\": \"051492d275c00a059aa223a679d06c435188aae3d6bd0702d3337d8734682b8d3424125fa86b87e5900e518d8e7cc0753e14bb4819f2f1d1d60f84787e44738a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-x86.zip\",\n            \"hash\": \"e03399267d9d24014fefa106332e41beda378fc8fdf7dd1d8d747e53a74d30f7515b113a4972186ada9127bc9977a4aeb89e49dbe5a1788e3bf6d515a17ad366\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100-rc.2.21505.57\",\n          \"version-display\": \"6.0.100-rc.2\",\n          \"runtime-version\": \"6.0.0-rc.2.21480.5\",\n          \"vs-version\": \"17.0\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-arm.tar.gz\",\n              \"hash\": \"2396998b8f21527f979b84460aee8621ca5fa275e4a1ee83b11fe9f12b42479931e56787d7dc82640d72470df185cb02d0bbc5e0e3e920bb6abb2d270051b188\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-arm64.tar.gz\",\n              \"hash\": \"14aa96f47f7f3520075e41753c705bdbf7f84fd7cff7cc2add1095a13e3e3c44eaaf2d822551902f05a6ad0c9acd7f7424190b7c09c397004c632eddc8acd5ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-musl-arm.tar.gz\",\n              \"hash\": \"6e74874ad38946cb4d8ddcacf61171c440c49b4a5262256ac9b110d7d7981eee1870731df82b6d825117bbb799d2b780b7509a1bd2f9aec8c6fa71edbc745dee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-musl-arm64.tar.gz\",\n              \"hash\": \"286231a82a5c5b2262049b02875ba3f7569dfbefee8b96dfebddd5c98a45918679a28879150286d9a3c1fa02536effab635c27451748a69e36fcf1e71b57b3a7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-musl-x64.tar.gz\",\n              \"hash\": \"088de76a319ccc11e2d06310d096540100a76a94933602a614fb1f2b71ecaadcb573f2db71ef61cca339ce28caab07827bdb3eb0d7cd3199b0f4b8917f0bdfc3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-linux-x64.tar.gz\",\n              \"hash\": \"0a8f85a2757f61ca7f9b8c546af4554c2aac9cdb06f6d62879a60de6f2a3d37ea7136f48896c9c85828a2d55df354e7b9b5b4dc22896c927f0c6370a5ade1b9c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-osx-arm64.pkg\",\n              \"hash\": \"ebb2971340d3d2a8e2ed4d48dde4f6ac7f49fb37e05e56c8be395b4b5564e0e05b7337a153d9d4e7b79994a5b75a38a3af4cfd78251678162a6fcc1754d08c04\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-osx-arm64.tar.gz\",\n              \"hash\": \"c96c8a86e36ca16a0e10f635250472d5c8eda290dc505ed8eb4bd6a68b8e6ae6b2770236f5bda1573bc3124229531b3ed7dd71f60a821e39aaaa6697a82fdf8a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-osx-x64.pkg\",\n              \"hash\": \"c9f759880c416aeb3d5c786447b1e26fd339f60fbf1bf17e17a5a24cdcea7feed7b895a7cf57a2e5404f0351b9fec9b8db75c058e9fb560afe2f3930f9d2b560\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-osx-x64.tar.gz\",\n              \"hash\": \"6a896f2d1e8e2d00b52641e8b1aee88888a2b30e0f18e499b1eaf4ae7dbdaa24ea5af0dbd4a6a1cee715738e6e91cecdbc02c2c7d3d4c71d4c9af3e04f1b4fc9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-arm64.exe\",\n              \"hash\": \"ef62eb2de12f4eb74b3b867d605387d7540686bb0647723178283631567a15df4f864d46faf398b86bbe603984f27ec3a6b94419eda4051758053dfb1302c0b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-arm64.zip\",\n              \"hash\": \"b7c7f90faedc4ce88b52a622b21c0815d4092e75cc9dd0dd423400d3dd505c22c1123cf780f1b8df5b634a6e0951cd5d71a7b50323b43f60d817d551d40ae25d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-x64.exe\",\n              \"hash\": \"0fd961dcdb07e659b2cc9a710cef12db9acede80268e24d8a48290ca0851a6dca96705445f31f37b8dff9f30139a67744cbbfc2ebeac86e2adfdaac3d944168d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-x64.zip\",\n              \"hash\": \"072f581b679a85c546c3ee198332f63a5867933b845dcf5ad1938b3abef169ca34e88755f44282c165cc5e3aba63bb75830a6557397b97ef33e38c478e016a25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-x86.exe\",\n              \"hash\": \"051492d275c00a059aa223a679d06c435188aae3d6bd0702d3337d8734682b8d3424125fa86b87e5900e518d8e7cc0753e14bb4819f2f1d1d60f84787e44738a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.2.21505.57/dotnet-sdk-6.0.100-rc.2.21505.57-win-x86.zip\",\n              \"hash\": \"e03399267d9d24014fefa106332e41beda378fc8fdf7dd1d8d747e53a74d30f7515b113a4972186ada9127bc9977a4aeb89e49dbe5a1788e3bf6d515a17ad366\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0-rc.2.21480.10\",\n        \"version-display\": \"6.0.0-rc.2\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21273.0\"\n        ],\n        \"vs-version\": \"17.0\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-linux-arm.tar.gz\",\n            \"hash\": \"28883aee0acf670b2099db7b5d69f74e9853ec0e02d2fafb3aee135f987a117d3a32eca04bb9213e4e39d7782d3cd37e25cfabfe6004269ac3eb20cc5d931cd1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-linux-arm64.tar.gz\",\n            \"hash\": \"3a92e93a8cb0c186f1c4a822d46a37604bc470599dbcbe05a7f1ea7c7d1dd9c0e6571de524de8729d19d237078742a0b4e3a1daa11b5eb5f8cce74b69710ada4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"8fde5df285a852cfa37bc026983357cac8fdc77c5f9e2fdb242f1c967375e43bac9cc6f9ac6caa684a9bb3aab94c0f98ff93e8e9650399b44917c9e51d8e545c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2a8bbd4d767864e5cf87ad2f7cb8b94065af325b72b1c626f4b1791b091e818b6e54cae302293815e5739d198f791bc1194efc21117234536752d7b13ad2a4d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"bb85419cdc2cd6d5f357737230038d3ab685832a48964ef9e8a9f783e1ed6cba0f293ed47e187f05209f3d4c919d81de27c5add5c2424e15bc1b0600c92ed390\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-linux-x64.tar.gz\",\n            \"hash\": \"d48895237644a3999663b2e16baa2303d8b77f66385a04d8edb5601fdffacce18b1b1318827d09f74f6b133ff2c179ef659bd21cf8460289b5f81f404fa8b326\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-osx-arm64.tar.gz\",\n            \"hash\": \"688879db73aa6b7556da70907920f3e443dff54bf8624030352ed5ba3896cceda69040ef359dacf55d50cc52fc2c75057d259a1cc11a2258d4446ebbd2200820\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-osx-x64.tar.gz\",\n            \"hash\": \"ed1cad94acf207d0f18201af1e0e6c386466f94b8fd0474dc8d59f47d8f3c456f3a55de392dda126e0e1f4f934249b0e17b7b86f6bc7c510dc475324ee1395f0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-win-arm64.zip\",\n            \"hash\": \"01cca4811f4f8afea78509c381e9134c93ac4dce51aaef171dba7326b10a3333fc9d51078138b08979dab3dbeaa85bff5121ce6b9007984e2650bcec26358aa7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-win-x64.exe\",\n            \"hash\": \"2ec43899ddbc16a2f70be20965a2de6d655ea84e18d3e2c933e2551431292085e24e19b46967d1f60eb5f6ecc6c0eee289510a98549b5e8f57bd4c0439c5148b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-win-x64.zip\",\n            \"hash\": \"453ed645205869fe933c5071cd97b267031d0e21f961df7509840f923ad15a2cb8ae09bfb7083333f6fad5236aaa08b7964dbd9784c2f54b9607fb451efec5d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-win-x86.exe\",\n            \"hash\": \"de20f09e6378f87abab9e414d677f2d950b760be56c3983a286103b98eca2356238ffd68b440e9daa03746049f741c5b278044ece8ace47bda43c774a6b098ee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/aspnetcore-runtime-6.0.0-rc.2.21480.10-win-x86.zip\",\n            \"hash\": \"6b53d1f40be0191fb80119128803eab7246bc38636a58f36502f8730f4932fc80f7a6557727157025e22777d8f24bf9161f219b5e57b583cb2a46873ac6fff9b\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.2.21480.10/dotnet-hosting-6.0.0-rc.2.21480.10-win.exe\",\n            \"hash\": \"f7118fa95cd51ca4ec479dd10578c55383eb9ba58c00cfad91b6f3b7b6d77ca0454411c0e17293093c785ff179328abeef725515c12245a005ca9913c6ecbb9c\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0-rc.2.21501.6\",\n        \"version-display\": \"6.0.0-rc.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-rc.2.21501.6/windowsdesktop-runtime-6.0.0-rc.2.21501.6-win-arm64.exe\",\n            \"hash\": \"c36630d1bbd895dfc853003998ac389f417a6583657dd9061012bd362181fa83e4f81ab140a2f210440c718a56dc9cb1a8caf47a22c1486474b99129b4b69d01\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-rc.2.21501.6/windowsdesktop-runtime-6.0.0-rc.2.21501.6-win-x64.exe\",\n            \"hash\": \"940ea45b052c8c26001c0b9a6d87af337ae25495f7d681dcfd0c5b445fd62ace15154e2bc30c49dc23a41b8289c3643849e7626139651cb4ad2e98a8509a8685\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-rc.2.21501.6/windowsdesktop-runtime-6.0.0-rc.2.21501.6-win-x86.exe\",\n            \"hash\": \"46c849edd2b3fc966369af0fd75f6911eb5b1ac2296c318f987bc884544100b834f9d10b9941c55b1aea2916d0459163734f0f2fee274a342db45c008260bec0\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-09-14\",\n      \"release-version\": \"6.0.0-rc.1\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/preview/6.0.0-rc.1.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0-rc.1.21451.13\",\n        \"version-display\": \"6.0.0-rc.1\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-linux-arm.tar.gz\",\n            \"hash\": \"6a5786fb0fc10cbe562350c56c35fb4745db18dbf3b299e3d86bd0c0e1bd43b95cd54561d78f1d53f3c41639a4505527e8fc0cf37e4f9da469ac0f521cec279b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-linux-arm64.tar.gz\",\n            \"hash\": \"a18ab20932e36820407058ada417941535cb51c0f6c68ff8830f43c9521fdd89f31553832522bad0918779e87387ef484d2e414c07923db4ad7deecbdcbc3a52\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"8c0694e75c9d72a0b402eb3cfcc9d3944f0c0abb7e4ba097c4f7ee525d2d3daba588836a34193f34288049597c04ca6ec362574e6c7bdb4223e1707b288b5f6b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5a718a94e065d105f2e056672f8a0a7f3486626f253360ca0945dd468d9276e0c33c5a28b82dda9f3928b86967777af780bc2932d07ccea9b7a497dd9d90356c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"41d6b4f68a7bdef7e91b5a153106f7767afa9a0a76e8e5f724a2a44aaf3d7cb6eba8981fbb2426dd4cb669cbd5f071901d4893b4f22760641c94e2dae9ea74cd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-linux-x64.tar.gz\",\n            \"hash\": \"6c101a93766747deddc97dd3ae9cbd0d0babc292dff2897006e1df8ad6af100aa74063d4961d73e67c82db66662f760cf83f510617559a2538210fc89694d9ea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-osx-arm64.pkg\",\n            \"hash\": \"c7b3041db85cf3f58078fb9ee3fa5facd81816d9d7605ad15034f293d515461525f51ab1c4cbdd4daeb1f1d22c15a0541f4be9f00bf179e52fb708d0fd955ec4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-osx-arm64.tar.gz\",\n            \"hash\": \"98dca56567b0c9a0874475818f6eadad90cf337eda3ba84e5bab222d58e4d1db7a9238c9aabe8e32016a15b1341576a369149e5394ff332c3014946e8687b8ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-osx-x64.pkg\",\n            \"hash\": \"ec9d64438569f211e85393cc1502219447ddedb69fca98728f042149c0abaa773d0fc28580b1e668428be3b63290a031d516ede4ddc18e3905a9cc8bdd16962e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-osx-x64.tar.gz\",\n            \"hash\": \"09bd7620d335edac0c78a88d35dd55c53350df768debaad64ceb6c04d79cb056b8255b5a9b26bf13c6cdad26880905c0da64b7ec1582f525c5386a44d32e9dfd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-win-arm64.exe\",\n            \"hash\": \"009f52ad16aae13175eb669497d627f8fa0328d9615b2072563493f366bd14212959c5c18f4f79e8712a8a39fc9a2a6b965b0a20bb613ab00735dc5938add283\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-win-arm64.zip\",\n            \"hash\": \"1b17494985f080ae3fa79f8370a9cc3677a5b834a7ab62339b53dd9991158bc34fcfb7111c7dfa0d75e0da23cd469aca7f8d6e906a7c4cb33fc86e275c74187f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-win-x64.exe\",\n            \"hash\": \"91e5bbda28824c5e1ad818e372d8f9f5e8275ebda0611c509925c411f48c2deebdbaa5e1d26e91189e67f0c2eaca852c26cde490221de0c32a05c48383bb36a5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-win-x64.zip\",\n            \"hash\": \"f820b111842973dc7a8ac64e8e7f5c0b2406cabb4fa9a5ad89a521f1515c5cb64789eb17a113854bd574cbf9cbc064c78c7957564fa28c86f4a42be0286aa03e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-win-x86.exe\",\n            \"hash\": \"20d64a57307b811557e4efbe513418c9587c94ead25887953236abc4443be351786200b4946a9b0fe6d9218c5381e5d41e907743feb5ae03e9ba58c01d0973c2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-rc.1.21451.13/dotnet-runtime-6.0.0-rc.1.21451.13-win-x86.zip\",\n            \"hash\": \"233925dc1cbe4027688ed81654ebaa22698646e2847137fe7b34d4806ca40bad4cb654563e964ff1385d77d02233ecba868e083b5377505a0730db580fe06649\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100-rc.1.21463.6\",\n        \"version-display\": \"6.0.100-rc.1\",\n        \"runtime-version\": \"6.0.0-rc.1.21451.13\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-arm.tar.gz\",\n            \"hash\": \"8461399292a7dedcbd31295bc6b3e010b0ac0b69dc742026bdfe795780543b9458a3df343d83528d5a0eb60b774ef535aea4f8d3061bf151d7dc90adccf1ad54\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-arm64.tar.gz\",\n            \"hash\": \"d1ebb53cd36617a3e02dbb759a842d2f62ba70b71b528c31e7c76d5137b655865c570c8ad50a0f206264db836afe83e3fb42037bf80127d179cecb8f7b3f28e7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"1e7f43770e67cbdf9c122094fd536ded8fc7120e4e454f833d33608a0732a5481a0b2f5807a1648fa0508da64264ae754714f51ee7aa503913fa74d2423349dd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f93d5a72541e676cc26ad851c87738f67ce2b63b85f5fa08d7eb391c6e1affbf55063b57775b6f56a3fde74218d14e0d5316fa6a38d52765d30d9f4fe618dca8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"d5e3f876f8e82fd93d6a0fe17a45459514b98721a19301ded10bca1b10bbc711b4dcbce43292fc77810b04b39e702eb4b97522e05e97069ad938909613ac16fd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-x64.tar.gz\",\n            \"hash\": \"a1d1de7950d0a7221abc4aa73221a5e7f5093a7aa2142ffb89691c3c1ff605c84574ff9375f83d3f16848b90245bc941f66b3d4b22ce6a4c9845f21bd1eb868e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-osx-arm64.pkg\",\n            \"hash\": \"7153abd8a47e76f53dcca305c502cf227d80ce6455c3a272daf33efc70a1d06501ce4515a8de3c15695dd14b63f262794a0dc393f132d3acad3947263dd79669\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-osx-arm64.tar.gz\",\n            \"hash\": \"646fcaa105db75df2ac9dfe6c41018dc0ad317ff8f4cb419878435c79389b15549cf470c5d649e0bc45e3b42353991a598a23e0c3b41beab3ec92ebdb6afb4d6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-osx-x64.pkg\",\n            \"hash\": \"8c4d44b07056a3db6367e82c294bd524330a724754fdf5ae8ca56c39d40729f24e4d66f6ef331d7bb2d4b0f7ff70eb18c79ade143526499094918308b6cd4ceb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-osx-x64.tar.gz\",\n            \"hash\": \"d12ec4de477cf8d067b54799d179692c2397e7c68847eaec7d7941ca946868089e7b576939a7108ac323c0056176b12c32dee532f2361eba2b1c43c8e50a2525\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-arm64.exe\",\n            \"hash\": \"30e8b09a7c9d754059b545fac96f925870bee6b88c4bd0a429402a3558a8ebdce55a385b4898275035af7b6d44cff3ca283fb221c19b2ebb5dfa71ccf8e5cca2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-arm64.zip\",\n            \"hash\": \"fada909f655fc412f08095f977ff3640ee54a799ce02eb34877b5325e1437ed0fb1f217730456be3cd23a662057ab086e15be269702396c9bbf83fe026969b05\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-x64.exe\",\n            \"hash\": \"28874389ca1085ea9567c0e6fdb35c897980242fc1d22a7bbc139fbaf0726aafd0910202e47850cf4e36a3b25ef74856e09c6169f4915b7709f9fdf79aaee509\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-x64.zip\",\n            \"hash\": \"96d807e79baa7d69d9248736ea9a63ddcc53281a63765b47dcfd9ded24038cc445834647ef375ffad17ea83aee6f95d234109825f885353ccca73f6684a5acd0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-x86.exe\",\n            \"hash\": \"da0c7334050a781eb93d0660ce71e54e7a4d81ca73b83634a245e13f0d26aea985eceedd63a5c1a2ce41e107ea244a4c45f33dd83ca7747f8515c85cdd49183a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-x86.zip\",\n            \"hash\": \"d00bcd9fc6b3c14f700007a2425d1ee4951a727769639b922c6bc993f43aef4ac7be0143f2262f2679f55de44c47b766ce158083ab989cae200fc5285d27df20\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100-rc.1.21463.6\",\n          \"version-display\": \"6.0.100-rc.1\",\n          \"runtime-version\": \"6.0.0-rc.1.21451.13\",\n          \"vs-version\": \"17.0\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-arm.tar.gz\",\n              \"hash\": \"8461399292a7dedcbd31295bc6b3e010b0ac0b69dc742026bdfe795780543b9458a3df343d83528d5a0eb60b774ef535aea4f8d3061bf151d7dc90adccf1ad54\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-arm64.tar.gz\",\n              \"hash\": \"d1ebb53cd36617a3e02dbb759a842d2f62ba70b71b528c31e7c76d5137b655865c570c8ad50a0f206264db836afe83e3fb42037bf80127d179cecb8f7b3f28e7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-musl-arm.tar.gz\",\n              \"hash\": \"1e7f43770e67cbdf9c122094fd536ded8fc7120e4e454f833d33608a0732a5481a0b2f5807a1648fa0508da64264ae754714f51ee7aa503913fa74d2423349dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f93d5a72541e676cc26ad851c87738f67ce2b63b85f5fa08d7eb391c6e1affbf55063b57775b6f56a3fde74218d14e0d5316fa6a38d52765d30d9f4fe618dca8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-musl-x64.tar.gz\",\n              \"hash\": \"d5e3f876f8e82fd93d6a0fe17a45459514b98721a19301ded10bca1b10bbc711b4dcbce43292fc77810b04b39e702eb4b97522e05e97069ad938909613ac16fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-linux-x64.tar.gz\",\n              \"hash\": \"a1d1de7950d0a7221abc4aa73221a5e7f5093a7aa2142ffb89691c3c1ff605c84574ff9375f83d3f16848b90245bc941f66b3d4b22ce6a4c9845f21bd1eb868e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-osx-arm64.pkg\",\n              \"hash\": \"7153abd8a47e76f53dcca305c502cf227d80ce6455c3a272daf33efc70a1d06501ce4515a8de3c15695dd14b63f262794a0dc393f132d3acad3947263dd79669\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-osx-arm64.tar.gz\",\n              \"hash\": \"646fcaa105db75df2ac9dfe6c41018dc0ad317ff8f4cb419878435c79389b15549cf470c5d649e0bc45e3b42353991a598a23e0c3b41beab3ec92ebdb6afb4d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-osx-x64.pkg\",\n              \"hash\": \"8c4d44b07056a3db6367e82c294bd524330a724754fdf5ae8ca56c39d40729f24e4d66f6ef331d7bb2d4b0f7ff70eb18c79ade143526499094918308b6cd4ceb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-osx-x64.tar.gz\",\n              \"hash\": \"d12ec4de477cf8d067b54799d179692c2397e7c68847eaec7d7941ca946868089e7b576939a7108ac323c0056176b12c32dee532f2361eba2b1c43c8e50a2525\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-arm64.exe\",\n              \"hash\": \"30e8b09a7c9d754059b545fac96f925870bee6b88c4bd0a429402a3558a8ebdce55a385b4898275035af7b6d44cff3ca283fb221c19b2ebb5dfa71ccf8e5cca2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-arm64.zip\",\n              \"hash\": \"fada909f655fc412f08095f977ff3640ee54a799ce02eb34877b5325e1437ed0fb1f217730456be3cd23a662057ab086e15be269702396c9bbf83fe026969b05\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-x64.exe\",\n              \"hash\": \"28874389ca1085ea9567c0e6fdb35c897980242fc1d22a7bbc139fbaf0726aafd0910202e47850cf4e36a3b25ef74856e09c6169f4915b7709f9fdf79aaee509\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-x64.zip\",\n              \"hash\": \"96d807e79baa7d69d9248736ea9a63ddcc53281a63765b47dcfd9ded24038cc445834647ef375ffad17ea83aee6f95d234109825f885353ccca73f6684a5acd0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-x86.exe\",\n              \"hash\": \"da0c7334050a781eb93d0660ce71e54e7a4d81ca73b83634a245e13f0d26aea985eceedd63a5c1a2ce41e107ea244a4c45f33dd83ca7747f8515c85cdd49183a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-rc.1.21463.6/dotnet-sdk-6.0.100-rc.1.21463.6-win-x86.zip\",\n              \"hash\": \"d00bcd9fc6b3c14f700007a2425d1ee4951a727769639b922c6bc993f43aef4ac7be0143f2262f2679f55de44c47b766ce158083ab989cae200fc5285d27df20\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0-rc.1.21452.15\",\n        \"version-display\": \"6.0.0-rc.1\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21245.0\"\n        ],\n        \"vs-version\": \"1\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-linux-arm.tar.gz\",\n            \"hash\": \"a27bb55fc10e492f47f15b99d9881832d6732b2cfd5c488ebe29bc8f019586a3adc2f9065af45210c7c68251fa540e8474c68ab8fa73f44d496ccb659bcfc5ea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-linux-arm64.tar.gz\",\n            \"hash\": \"9c52b365920b8fd6e819ce207018c967c8e3ffa9682da8374c113ae23fc8e63ce6a88d66fe55ccce94a4b7cd7e29fd3161c2bb5c72a136448c8cc6eb55889c97\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"8e823af8ec694a869e4d5fe0356e7760e54726dc2e11c4406bc0d1b7bd9ba1aba99dd25f83bd78bb9b60bb88624beb1d3e866a94f69fd0ce70b142a08e59cc9f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d1fc927a9ef473080e500ff250f26c5020e3a60f0303570eb5e37f7adaa12812b139472d00f7d260463789b8f0c103e4eceb65e8764344b9c390fa9a8cfccd21\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"c34e939169faafd9ffc2189695f7e5e134170b131850606c781b80801aab3f8b73a6c4bdb0dbe9b104b065e0585339deec97da367662ed0cf1f0e7dcd009cee1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-linux-x64.tar.gz\",\n            \"hash\": \"9072abaada96efca7761140de6e789d5fb79b59b6f94924806c62e56498d8412aa34b51d8bbba843ae1be52d3f0ed0e8194e01112889d50b589b29f1336f3598\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-osx-arm64.tar.gz\",\n            \"hash\": \"f4cfd514793d5602513948b331f4c0e1693cd4e3ed21388f613d7124a2831efb086201024f37f12b533517be0561c8120131dbfa8e87d94ff50d1d64703683ab\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-osx-x64.tar.gz\",\n            \"hash\": \"d813882a3144be33bbc5acfc2185d4ef033513e072dba918c2dc96395694b108b891a529ef8a203339e19f5da25fd747db65d2cec86d90c24a7e25e5c9b70ea2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-win-arm64.zip\",\n            \"hash\": \"be7bf92984b7171b7f020fb2dfd3ba6ffbac0c226e28948af1ffeae5ed053957b07953b40db3e70152084eee605a9a3d184962a9617da5a5747544df58a8493a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-win-x64.exe\",\n            \"hash\": \"4d740023b920248daad4cceda004b1de36074ce6e2eb99b6b20638d671c59abb8ac707d3debd91d2c45473b4c14f4f053ad47820aec56c729690a5f176708881\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-win-x64.zip\",\n            \"hash\": \"be77d99cabc7206072776cd3de8add9f6ba0d4f6ee02346807516a7516b8ea18c5a1828f1872ab3fcdbadf7e4d7fe4bbb0652bef679a49cd0b6163569c038083\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-win-x86.exe\",\n            \"hash\": \"607e71fe7688401ab0d62fdb6ae5fb6c6ff7e9960324df300cc361f8cad4b9d2ae1b973518ed6d719c3c40100da9a0dd4f0688010302f31740d157aa76f5004b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/aspnetcore-runtime-6.0.0-rc.1.21452.15-win-x86.zip\",\n            \"hash\": \"0130a658fc89cd35c0aa3fcba51f2be428585403c37c36b1600cf615a719c2ecbc606f56fd9b242d1e75f8a65b52894da85b5dcef0aaeacf75cbd9e19023e9a3\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-rc.1.21452.15/dotnet-hosting-6.0.0-rc.1.21452.15-win.exe\",\n            \"hash\": \"534ee8fe6ecdb96e79c3fd99823fe1c97415e2069cb22b15b4cb9296ce06874bbd60023d37a551898f7001f90068a1990fbf01b5dae52a2a16de7fbb99def979\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0-rc.1.21451.3\",\n        \"version-display\": \"6.0.0-rc.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-rc.1.21451.3/windowsdesktop-runtime-6.0.0-rc.1.21451.3-win-arm64.exe\",\n            \"hash\": \"fc311cb51bd997c2a1e91aed41b7fda68d184a706701b61277353f6665a1c1aefa544ebf5e5266810cd5b0d36677432e0d37661428862fa1ae766060a4b6349c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-rc.1.21451.3/windowsdesktop-runtime-6.0.0-rc.1.21451.3-win-x64.exe\",\n            \"hash\": \"d7bb90b1dba53ef1d62e6b49bfa4daaf52c74af5b1e74491ce61d65daa61b1afff27ae6d53289b8db4ea1acc50e8847c705ed50eb70f50788d28ecb6f1f5afff\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-rc.1.21451.3/windowsdesktop-runtime-6.0.0-rc.1.21451.3-win-x86.exe\",\n            \"hash\": \"6b4bd720c567add7ccd02d34b96ef65a91c813def04a63e79af5cfbdc7649f155909cb7962fb1b1d5cb586226e83bea63daf6b1b80d39545a54f0ecf53265197\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-08-10\",\n      \"release-version\": \"6.0.0-preview.7\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/preview/6.0.0-preview.7.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0-preview.7.21377.19\",\n        \"version-display\": \"6.0.0-preview.7\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-linux-arm.tar.gz\",\n            \"hash\": \"9aec69078629bdf2c84c91edc647ab05d50845d90cd698f22d39f6f54ba7d9bf3050ac87797fa7fe4c098a0bb63f456ecaa050b8504359d365fac22d40e74fea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-linux-arm64.tar.gz\",\n            \"hash\": \"6c084b0dcd8b56cbca947adf93fe715c8531e39bb081c3b2ede1301a6177effe2e6db7d9746d9f3c92f9d878bed8f9dad0ffae92ab3359afa6c8935d03b95958\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-linux-musl-arm.tar.gz\",\n            \"hash\": \"b98329ae25eab636ec18ae1ede67d2f0d40e973e2671de62248195076bf3ffff8674235cff80ff95a0cafc6e9eb4191294bf48ccd13b44c6e4e5b6d667916a57\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"23fcb52f7bae7fab181eeca125519bcabf1acc118804e93fa88566e5f588000e9f910152cd8655c6f02604f0b4e50ed19ec2afb92062fd26b671b00e5b9c2929\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"060be1fe4d0b7fb5618d5a1f9482767667c96794111188678c5a9004a5961381f0856f57a6cd77f4ea1883a3e523f1f5c35ec6c72fcab67c9aa725ad8e5b0e6b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-linux-x64.tar.gz\",\n            \"hash\": \"959ef85c0cb5c9aa8dab90f5e09d9f9216d546a32b5338f389787523b9c4b48b911ac42a4e6f8c9e1b656bc8f0173ff93beed12439e3f87a52b84d810969969a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-osx-arm64.pkg\",\n            \"hash\": \"cb3ba1c195a55ea620b019bc224fab201530b9cb4c9600cb90d870eeac6ad1011dcae93c690dc1073c258357d52961eb586945f06df609aeb109dc254cae0f68\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-osx-arm64.tar.gz\",\n            \"hash\": \"9e069e7b231e86ba4694da48351b81342ef1b1df78ab619ae17acef498f0fc02bf52a2128da6a7e01c62e42ef5f5d66bf0a2113a36c1f4e4b4263f37c1b5c5cf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-osx-x64.pkg\",\n            \"hash\": \"c199a5407e1dca00f3ef709772a0350c4467a772f23ee289394867170ba5ba32dcd5d069d4582d60c42e3b096a8feefae002512819b62dd5a1f9170e097959c7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-osx-x64.tar.gz\",\n            \"hash\": \"8b004c550ab934e71fd2c8cdb4407118b636314290dc6c405be5216da3971f03cf64ddfb258331a6c93bce45c2c51096c2de3f728842f7cd2e2445af090ce5f6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-win-arm64.exe\",\n            \"hash\": \"399c509b7a86e924c7dfc7516efffdec2be2122eff8604536a0eb47ff6054dc9ee54cbfea80fbcead8dc7d39c227737e59644cf896ff3a3ad63b531e7eabecd6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-win-arm64.zip\",\n            \"hash\": \"b6baa6d78720249ceb458dfd18ec01c7b03cdab0b57eeeaa93a597893540d328bf8fd32db254eee3da7bd5fcdb67b0e3440bfc84661ffde203e3264a4534f627\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-win-x64.exe\",\n            \"hash\": \"499eb8bda1955f6c9921cc64e6ee207dd45d73e782fde5afc6067588b6af7ab1674eaed9a76e1511b727e56d5694423da73118113283795b86b9d7182f5232a4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-win-x64.zip\",\n            \"hash\": \"0a9542a9aec6b5a8e57934ad4f903ba194f8d6411a10744adffb7398f51b16b65ed8c0cd0d34b90fab7fb9f55d24aef066176314e33298c2ab78af061e0039d6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-win-x86.exe\",\n            \"hash\": \"c4f7d9cd49532dbbba7ce5748047da86cb0ff36b4c8f38e91ec42337c8e7ea339c9a2fe792d8c5b98f8ee1154e859c13f653f4d5301f71e8d9ffcb4c493f6ea1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.7.21377.19/dotnet-runtime-6.0.0-preview.7.21377.19-win-x86.zip\",\n            \"hash\": \"0516db5a6b0edbf0a9d891d9a57f4a39816bd1d8b30f7d09302728bf7c66a9c4284722895aaecca9c61f69c72f03912b190ad141aadba6bf32887988f82cec8d\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100-preview.7.21379.14\",\n        \"version-display\": \"6.0.100-preview.7\",\n        \"runtime-version\": \"6.0.0-preview.7.21377.19\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-arm.tar.gz\",\n            \"hash\": \"d6be3f54f2808d7522938b33b386a8616020c2b1cf34d7ef628fc29ea3cfa01eb8acf92b9f771d89ab71ac8c776889c9e2d0a764cad866295727115c8fc2b047\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-arm64.tar.gz\",\n            \"hash\": \"7ee5fbb4e700bcc8a840ec950a764c6ec4cbb8e23394d75a3b4b547e1178f0ae16b0edc262b0fbec5bb9dde3e870225928b147b440f1c27ffada60c03b903dde\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"54667853aac519a77c48822134ef146d0cfe64c517565ac606d77769fccec2458a22279ed1e44e278f5d109bd59ae1324b134c0ae2393e61f8c6f744233081d6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c4df610c439d6b37aafdd0a5d6ce9934c48f25ab162485e37ab5e3847884d5197e0bffef64494789a6430fbefd3ab2f82617a4518be3bc9c4a36d6cd212c8c35\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"c4c8cc022bca980c9c22da4d34de683ec3bddeb6d2a8e7c91353c5bd881e45acd6fd244f7c7e6313abefbc58fd680d13736f8bb8a070b3469e7aecdb815c1d1f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-x64.tar.gz\",\n            \"hash\": \"c8757325407b5eb1e3870f0db87eeaf44df978313c0b2a7f465ec7d0a5647317cba597264ec81577ea0b3bd97bd33d782234392e8e592e073126792a0406df7b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-x64.zip\",\n            \"hash\": \"bd14d4271060155547fe0dfaca3d3c839b00d36e2204d88b47c5d57a25f7a70d96c66b810bb125769d815ea368c03ed31b678d80a061009fa9c56d200027916b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-osx-arm64.pkg\",\n            \"hash\": \"4d77a41c5635d0ecde0db45f0c5d648217bf73e4d5aeea0ed8ce45efe29b17f50021b5f3569d3a5c94b05e6a32e78abab4cb9e4b9c660ea3ac4d7f38ea1a68e8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-osx-arm64.tar.gz\",\n            \"hash\": \"aaacc91eefabbcecb9aa37590cdcff48c0d568233c4cd851237beaa4da158868d520a24e1494d47959acca9f210f2e01c3c2a05c3560ce3e1e0734d1ba8357e0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-osx-x64.pkg\",\n            \"hash\": \"1d08c3f11d210a57403031910b982c4f6b14787c9f7f7faadb23099a7381bd3b7b73779e9f6338d2dcbe2c8c24689972a05cde394d1f5cd36e14dc1aadf239e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-osx-x64.tar.gz\",\n            \"hash\": \"45910c4c85e7a689b2d98a4b5c3d901da920274bf5ec5e8d52bbc35e46a0345cdf4b69cb36fecdeea28453788998d14909cdb9324792283b1d8e32c5c64a8424\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-arm64.exe\",\n            \"hash\": \"3f9bab1b625c4d04548f2a494a85735a1ac1e1ffb3b2513cbd4f85255605ae7abb75351bdc7a87377a8a779d8674efc0585f84f3cb136ce767b6f9455a695e8d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-arm64.zip\",\n            \"hash\": \"8dc97320b8fe9dd246bba73a3cc722353cf42034621ee3f0108a6b8d057d1f7ba70ad70de004a1f49779cf618210395478e7e7f3103b224cba751f0d8979c83c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-x64.exe\",\n            \"hash\": \"974150069371a86747c07d101a5ad2c613fb2fcc8024e7fac258f633a21eb8d1d3fe1c9c5e6bfb39220b6df6123fbaa25b0415a663c787023c0e44594d081fd3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-x64.zip\",\n            \"hash\": \"0f164ef5248951762fe063f118d8172c080cf1797e38be858f62637833fb1fb0f19e25680c32ee9e8977e9da36449eab7e6bad36245720f352a91854868c51aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-x86.exe\",\n            \"hash\": \"a6163377b28f1b301526e881de40e3f800a2812208a95b7c36ab40480ab72282d6d53b48f00fd095410ace292e685838ed9c5639163aea43c1c60dc0abd37eb1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-x86.zip\",\n            \"hash\": \"c584511905e31981367a28805b8a0ad582eed788eb1f5a838bac9164b932cc965c74e5f9485d87346f9d67b00d0fa81cefa950790b6a999d02459d248edc6b20\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100-preview.7.21379.14\",\n          \"version-display\": \"6.0.100-preview.7\",\n          \"runtime-version\": \"6.0.0-preview.7.21377.19\",\n          \"vs-version\": \"17.0\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-arm.tar.gz\",\n              \"hash\": \"d6be3f54f2808d7522938b33b386a8616020c2b1cf34d7ef628fc29ea3cfa01eb8acf92b9f771d89ab71ac8c776889c9e2d0a764cad866295727115c8fc2b047\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-arm64.tar.gz\",\n              \"hash\": \"7ee5fbb4e700bcc8a840ec950a764c6ec4cbb8e23394d75a3b4b547e1178f0ae16b0edc262b0fbec5bb9dde3e870225928b147b440f1c27ffada60c03b903dde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-musl-arm.tar.gz\",\n              \"hash\": \"54667853aac519a77c48822134ef146d0cfe64c517565ac606d77769fccec2458a22279ed1e44e278f5d109bd59ae1324b134c0ae2393e61f8c6f744233081d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c4df610c439d6b37aafdd0a5d6ce9934c48f25ab162485e37ab5e3847884d5197e0bffef64494789a6430fbefd3ab2f82617a4518be3bc9c4a36d6cd212c8c35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-musl-x64.tar.gz\",\n              \"hash\": \"c4c8cc022bca980c9c22da4d34de683ec3bddeb6d2a8e7c91353c5bd881e45acd6fd244f7c7e6313abefbc58fd680d13736f8bb8a070b3469e7aecdb815c1d1f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-x64.tar.gz\",\n              \"hash\": \"c8757325407b5eb1e3870f0db87eeaf44df978313c0b2a7f465ec7d0a5647317cba597264ec81577ea0b3bd97bd33d782234392e8e592e073126792a0406df7b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-linux-x64.zip\",\n              \"hash\": \"bd14d4271060155547fe0dfaca3d3c839b00d36e2204d88b47c5d57a25f7a70d96c66b810bb125769d815ea368c03ed31b678d80a061009fa9c56d200027916b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-osx-arm64.pkg\",\n              \"hash\": \"4d77a41c5635d0ecde0db45f0c5d648217bf73e4d5aeea0ed8ce45efe29b17f50021b5f3569d3a5c94b05e6a32e78abab4cb9e4b9c660ea3ac4d7f38ea1a68e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-osx-arm64.tar.gz\",\n              \"hash\": \"aaacc91eefabbcecb9aa37590cdcff48c0d568233c4cd851237beaa4da158868d520a24e1494d47959acca9f210f2e01c3c2a05c3560ce3e1e0734d1ba8357e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-osx-x64.pkg\",\n              \"hash\": \"1d08c3f11d210a57403031910b982c4f6b14787c9f7f7faadb23099a7381bd3b7b73779e9f6338d2dcbe2c8c24689972a05cde394d1f5cd36e14dc1aadf239e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-osx-x64.tar.gz\",\n              \"hash\": \"45910c4c85e7a689b2d98a4b5c3d901da920274bf5ec5e8d52bbc35e46a0345cdf4b69cb36fecdeea28453788998d14909cdb9324792283b1d8e32c5c64a8424\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-arm64.exe\",\n              \"hash\": \"3f9bab1b625c4d04548f2a494a85735a1ac1e1ffb3b2513cbd4f85255605ae7abb75351bdc7a87377a8a779d8674efc0585f84f3cb136ce767b6f9455a695e8d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-arm64.zip\",\n              \"hash\": \"8dc97320b8fe9dd246bba73a3cc722353cf42034621ee3f0108a6b8d057d1f7ba70ad70de004a1f49779cf618210395478e7e7f3103b224cba751f0d8979c83c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-x64.exe\",\n              \"hash\": \"974150069371a86747c07d101a5ad2c613fb2fcc8024e7fac258f633a21eb8d1d3fe1c9c5e6bfb39220b6df6123fbaa25b0415a663c787023c0e44594d081fd3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-x64.zip\",\n              \"hash\": \"0f164ef5248951762fe063f118d8172c080cf1797e38be858f62637833fb1fb0f19e25680c32ee9e8977e9da36449eab7e6bad36245720f352a91854868c51aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-x86.exe\",\n              \"hash\": \"a6163377b28f1b301526e881de40e3f800a2812208a95b7c36ab40480ab72282d6d53b48f00fd095410ace292e685838ed9c5639163aea43c1c60dc0abd37eb1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.7.21379.14/dotnet-sdk-6.0.100-preview.7.21379.14-win-x86.zip\",\n              \"hash\": \"c584511905e31981367a28805b8a0ad582eed788eb1f5a838bac9164b932cc965c74e5f9485d87346f9d67b00d0fa81cefa950790b6a999d02459d248edc6b20\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0-preview.7.21378.6\",\n        \"version-display\": \"6.0.0-preview.7\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21209.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-linux-arm.tar.gz\",\n            \"hash\": \"530db7ac2ca468354407ba4008cccb04f38661d2fd9ce417d93f88ac80b39c71567e39cb2ad864072b48530fb905e5da83b7eb6c20c254b1da2a67807e3a874a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-linux-arm64.tar.gz\",\n            \"hash\": \"9c2054ae20161d0b8e823e1e079ebc0ef4d9840639afb464f0b25eca73cb15c05ac3d786de15c4b3147ddbc6eff0bb740f96aac908dbc70fb1eaccc87358c430\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"07323dad5ac21937514e9092fcaf4710359f36a9cf716a7589ec2168cb44f0564810c7bc71f29cf7deaf1252e168deb7637a8ab13329c09346658088c0fbff71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a59295332736d732fb18dc1a49727eff7c09d3770cea93c1f326d9e1e7dde3afd42d7c72d8e1ea5c4eec070ca9fc6139ada31a515ec56f74aca0c9000eadafc7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"9c26f6ab72569d347eed4772997ce3df5598ed0f2b21f5042f4da321d07ba97e6c1d1b73617ea26ac1d846a96119c5038eecbf3874ac21bb3a2b5f04daeca8a2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-linux-x64.tar.gz\",\n            \"hash\": \"24e8626d8a2bd126a786ecf97d68e705571567357f6b7370a2b80ac42eff2b1b6e14734be4c0317e2902ea01f2903b285b1e669e4ae76f80ae876dfbf9f0d0c3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-osx-arm64.tar.gz\",\n            \"hash\": \"1ed0e9152408ff8de5cbd0a978a3e8f9f7218a9a93841780b095c8be0863340e1356534374dee03714ba80754440139f866e0e496fe36a73529b6bc38930ae5d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-osx-x64.tar.gz\",\n            \"hash\": \"54a0a17ed86b0e487f527e11347bde29570baff16ceada323e4ac1315ed7654576ed69bea2fe68d42124bb6862e169bb5fab965287541e77c792e23bf90485cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-win-arm64.zip\",\n            \"hash\": \"d91a8f16542e545b81988c539d6d64efa24531027c62da6e183442964e1eaa5ee2fa49465d900fdd29165f3f74d3a3852fedb0fa0ab91d43ff8602d002ad77d2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-win-x64.exe\",\n            \"hash\": \"5736d825e2943d4414f9a767fe313f00a0c5e747fca16ab35a0026f43cfb38c366be18ed77fc800a2c6cd1694923d01a0325effc42d8078b696087c49ea11b7a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-win-x64.zip\",\n            \"hash\": \"eb2429522872ed1cd3a770f5694c783a90617efc89931b23b8e213419bc36070e3e8c3717a5376d44433b4b97352da534cc1ed287088a5d07821671acd311326\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-win-x86.exe\",\n            \"hash\": \"b2cac7ba9060ca857441921ed4aae21d6aa5f7ae7d767246481f9275924e4aafa7fa383440eaa8ddbf813852937067754f44313c28807ed13867a6b7c39be9bd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/aspnetcore-runtime-6.0.0-preview.7.21378.6-win-x86.zip\",\n            \"hash\": \"fcfed7e62dab9561d1792a9048058f09d3e6e8be3dcc7c1eccac856f60304d33d596e4a1d073a7297ceafd9d96eab664a161e27454f7392256e121c42526ab0e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.7.21378.6/dotnet-hosting-6.0.0-preview.7.21378.6-win.exe\",\n            \"hash\": \"e8234b635cbf8e3d1cc7023dd4ed22fee4cbaa6b9c9572a1cb0f16aab798bf61fb88a8ce6ece80a2c8872b89a187b6a613b11f9d92856b570914690b5ac2fdce\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0-preview.7.21378.9\",\n        \"version-display\": \"6.0.0-preview.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.7.21378.9/windowsdesktop-runtime-6.0.0-preview.7.21378.9-win-arm64.exe\",\n            \"hash\": \"2ee868493e066a9b14a7417dbc49e955e1465c31cea9dd8c180ae701dd8714766849110ecf75eece4f73b98c338ff13f1a65da50addc97029362d66ccad20913\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.7.21378.9/windowsdesktop-runtime-6.0.0-preview.7.21378.9-win-x64.exe\",\n            \"hash\": \"7d177969876ca3df325c90e58f12d0d5b9a810f9001e7971c44784a9cd837c80cc5b2385e23db8ee0b2129eb7261702ee9ac9a4edda3debf1b92b2571fa6c0f4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.7.21378.9/windowsdesktop-runtime-6.0.0-preview.7.21378.9-win-x86.exe\",\n            \"hash\": \"cbd066897a63a3f831d32bcf0f712762c25c4982de8aa56e8af7241c44b53817daa2efbb4dfd9a78a5a6b24a08696e64aa4e2e6441761fc6667c35769045b84b\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-07-14\",\n      \"release-version\": \"6.0.0-preview.6\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/preview/6.0.0-preview.6.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0-preview.6.21352.12\",\n        \"version-display\": \"6.0.0-preview.6\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-linux-arm.tar.gz\",\n            \"hash\": \"7983d25361d7acf405ea2296e94231c3f313791d775fb44aa7b8455c17a5908a983ba43a0a9a67daf83a9fdccfa87f6bce6b931bbb43bb6896959ac00819ac36\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-linux-arm64.tar.gz\",\n            \"hash\": \"6d05901324593d52b39d26ab09649377c888e22346f97e4b98a7487798ae2fe3cf9e2afc6b835b1b038890c6b9aa91741c91f9427958e138050d86cc00c1c673\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"0cb731082c257294b97a2a0536ed9fc4f156cdfc58e15f60ffb575d43c082ac68ffadd63137b0d9b29a459f782c9ef86b972c8c42c15c567d570e069be66d91e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"95f6d50107cbd82afa6fc4a637109430e5c1162689e898f24fbc62ea95eb75ac7d122dd27d6b89c86212265fdfcbcea49356ea52eecae5ebd76b928e515a2b9d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"ccd1da6558a1d54e5ad4b651684990d56b7516c5968371f04a9d8f59c847073270ff916b185a1cbd93ddb362ff44e358db1be0335af12bbae0aa22db845057d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-linux-x64.tar.gz\",\n            \"hash\": \"b060e5c1d568cadfd813d8b1dd3b378fa7465e47829c4b6831eeb6af9760db456a60da54c99a705b68269ddb8287def6119814514d24a38ed2f0d08464381211\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-osx-arm64.pkg\",\n            \"hash\": \"ecc91d0e6f727452b3e48e69514ab2373fb226b6bcde107b61d6d53767371b6aa60b133940a2eb1bf813a2d8a9c8c6aa53ef20c6111a24950456cc73a77d259e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-osx-arm64.tar.gz\",\n            \"hash\": \"1dd308ad7582358f82872478369ea69d2e4c53a73fb63d22c7d4e4a87cf01df4fa980710d1a1346bfcd589437b9d3a037e9801baeae4637fc8fd44d7156dab78\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-osx-x64.pkg\",\n            \"hash\": \"84da9c4cb6b67bfdde401008ed30dfc79e7c4229a90a3b44e4f60b4523f3ced4ac112e93a09368d480d3614b9e1c5039ea6119f7157ff6d532d95ae7466a926d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-osx-x64.tar.gz\",\n            \"hash\": \"fab8e70b0aae1ce65fb7de263215b6e2fdce22d491a1041017dce88b8a4ddc354781a65fc5ae9e5a15448f1192cd1321c876659d2b44332389de01fbf3e371c8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-win-arm64.exe\",\n            \"hash\": \"9b75ab7057cf1edc131081e87e3921e5d96554d7a3615d01ac9f7b236a825b0b29bc5a83dbb625fdf89b27f341dc84e339affa788d4eb07c0b9aed0e194152ed\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-win-arm64.zip\",\n            \"hash\": \"bb37d1837f877d2164aa18c1866af7c97cdc281580a0a4403dd4ecb2edc8b4070bc00ff1fe2dae7be44e132d48d828ff6d483b6eb4e5a42a4ef0e4afb1cbc6de\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-win-x64.exe\",\n            \"hash\": \"77f4023d0ec8ca1aef1f0e6eb133e565a7e0f40a5079fa8b1548c850496a728246d111d5603070b4dbc6dba9eb192fa2fbe52a179a97b75c6336dd1e2f51aea3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-win-x64.zip\",\n            \"hash\": \"d2d6b16fd5eeb9b39afdf2e0b6ce732fde0e90806e6c63dfaf88434d306251e5cf344b55e253cb6e7f38da19899e845a76a8e63ed7836f94ecdcd0256fda73e4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-win-x86.exe\",\n            \"hash\": \"87dbb4ec5249ced9644bc30479b6b273f27d8de51416167b0a7daa7d9e84bd93c42fabaff93aabc536e0ef60dbfc34f9da37a76ff032f5e74a569dbd1e816c4b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.6.21352.12/dotnet-runtime-6.0.0-preview.6.21352.12-win-x86.zip\",\n            \"hash\": \"aaebb57a19a965ac998e3c6bd2ed4f4a792cc21a49e32ba74754e4d66aac82a461821bb0f704fd42bb8b9af13c9fc459e7e6c86c5c67def4e225e72aee4dfc9f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100-preview.6.21355.2\",\n        \"version-display\": \"6.0.100-preview.6\",\n        \"runtime-version\": \"6.0.0-preview.6.21352.12\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"10.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-arm.tar.gz\",\n            \"hash\": \"dae9d60048b453f30c74668623e6526fe9ec1a4b55f4c5ad13e250b797c253b3da33933170d0c1852587a995393da29a63fb6c2dd7d08857bbe98ca038e28444\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-arm64.tar.gz\",\n            \"hash\": \"44202a25b62172edac367b87b4a1521a4c009defba8d1818fdad7436d58cab54894dcd4d341b49f34ac83842ce76a080757bf7514d9ba03cd26152310fde61c3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"6a9a0e1affde3766e8b06a1bf105abfdc0d02d33e0f9b3512d4c419f4443a24bca171dd5231e999fae5581ceaaee8064ac5e1c6dedc62da2bd29fa3c9a5a06a3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"367e6a90e2527e0f1f3f63a245a7026e64d9d4407159f620bb2c4c90f3981266bab55e0adcc6e7b9861c1b8be50867dbfa33ecb7ba4c56936029aee1fcfafdae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"3674633032ddd934ba743de7e3904ae033c55f2d649db89cb76e3a298a9871932d46687586215719a9c2540e0c9706fa3cd7b285a50308fc5b45621014bec8a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-x64.tar.gz\",\n            \"hash\": \"b4d9282a43fc244f6576ea70b03af1727b5910481f3d5c51c0535c7dfffbc943742041bd8174fdd7ede677f9c99ec917dd3c119710b4a2169862eeacee026ac2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-x64.zip\",\n            \"hash\": \"f200b8fb4699c28aa60b172f590eb3ecf9a58e1d2a102377f7ed451f9a72f077cf0cea9163363c1cd746759d65e89cac4776d9cf3faedcfb43d1a8d2c5542c59\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-osx-arm64.pkg\",\n            \"hash\": \"6394e0c2ea126574a3c518e23dce493b67279c1e31ec20088504d669376ed9d5579f6124f2df92e23e847e3dd9673ab23cbd20f40d234cc49ff86469f1567ca9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-osx-arm64.tar.gz\",\n            \"hash\": \"702781aad7793fc74a04765421dd7d037630f8ad498e0ffb82c3e48e88ed799498755572e34c6e6bf8065bcaf8eb2a417056ac300ce1b4b0f114c049b396183a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-osx-x64.pkg\",\n            \"hash\": \"27723bd0c643264fda9ce49c81de1c56ef2492e1b2e328271008eec52d90511e80e6d75d8c823555c258ef306e25af926f169dbc9052c37f3acf630edc6a57ce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-osx-x64.tar.gz\",\n            \"hash\": \"b9e74e48a64c4f9123fe9ff6400797394d8048aff8a0dabda53fef91b00dec41030d2c41d42dc1af972f7f3d46edcc44585a43bf57c36732a7280f741e672dcd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-arm64.exe\",\n            \"hash\": \"bf046e4b05bd4bf93c5c9955c9e6668626e1067634738bf053980c912cfc1310b6dda0d00ff3a54c1610143c89c7caad1b9cf891d5a9ea1efd18d3068b4d4819\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-arm64.zip\",\n            \"hash\": \"ea573499f65e146bbb7cf2efe663053053d8cc7bf7fdb12ff4257826593a0f0ba4cc703e8a79492a6bbf5fb353cecc931edf3d1ef4e72108eca20c7dd0a4aaef\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-x64.exe\",\n            \"hash\": \"201d3304d45265c4fac2e21b52a7e0b61bca54a12aeb87a0a7ba86eb36b7e6cfa0bd7469cd3d3ce6b6adf6cb6eafb1923543529e773b43ccc72f5a1f539b6e74\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-x64.zip\",\n            \"hash\": \"e126fea62f3719cc2c0cef9858e2dad85b31029e1766f2df091c611396ed5b8f02e3874827a4f30e3d5ef0b7b3a318d8bf9a728c74c14425c42befca5c85b26d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-x86.exe\",\n            \"hash\": \"1d8a93d0b82458cdf5bf0c242598bccf2ab05136822d1917b5724beec6b897c3ec74487af4e13a93bc89eab11342598d2cc1b3ae3d2dccf486cd2311a39ca357\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-x86.zip\",\n            \"hash\": \"b937af04b6533fc124163e2dd4f87d88e188da620622d6117e3a6c4093d8dd9f53d84c8b0936bb4ffd14cb4cd93635dce90e747b432cb12454190646317b8ffa\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100-preview.6.21355.2\",\n          \"version-display\": \"6.0.100-preview.6\",\n          \"runtime-version\": \"6.0.0-preview.6.21352.12\",\n          \"vs-version\": \"17.0\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"10.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-arm.tar.gz\",\n              \"hash\": \"dae9d60048b453f30c74668623e6526fe9ec1a4b55f4c5ad13e250b797c253b3da33933170d0c1852587a995393da29a63fb6c2dd7d08857bbe98ca038e28444\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-arm64.tar.gz\",\n              \"hash\": \"44202a25b62172edac367b87b4a1521a4c009defba8d1818fdad7436d58cab54894dcd4d341b49f34ac83842ce76a080757bf7514d9ba03cd26152310fde61c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-musl-arm.tar.gz\",\n              \"hash\": \"6a9a0e1affde3766e8b06a1bf105abfdc0d02d33e0f9b3512d4c419f4443a24bca171dd5231e999fae5581ceaaee8064ac5e1c6dedc62da2bd29fa3c9a5a06a3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-musl-arm64.tar.gz\",\n              \"hash\": \"367e6a90e2527e0f1f3f63a245a7026e64d9d4407159f620bb2c4c90f3981266bab55e0adcc6e7b9861c1b8be50867dbfa33ecb7ba4c56936029aee1fcfafdae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-musl-x64.tar.gz\",\n              \"hash\": \"3674633032ddd934ba743de7e3904ae033c55f2d649db89cb76e3a298a9871932d46687586215719a9c2540e0c9706fa3cd7b285a50308fc5b45621014bec8a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-x64.tar.gz\",\n              \"hash\": \"b4d9282a43fc244f6576ea70b03af1727b5910481f3d5c51c0535c7dfffbc943742041bd8174fdd7ede677f9c99ec917dd3c119710b4a2169862eeacee026ac2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-linux-x64.zip\",\n              \"hash\": \"f200b8fb4699c28aa60b172f590eb3ecf9a58e1d2a102377f7ed451f9a72f077cf0cea9163363c1cd746759d65e89cac4776d9cf3faedcfb43d1a8d2c5542c59\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-osx-arm64.pkg\",\n              \"hash\": \"6394e0c2ea126574a3c518e23dce493b67279c1e31ec20088504d669376ed9d5579f6124f2df92e23e847e3dd9673ab23cbd20f40d234cc49ff86469f1567ca9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-osx-arm64.tar.gz\",\n              \"hash\": \"702781aad7793fc74a04765421dd7d037630f8ad498e0ffb82c3e48e88ed799498755572e34c6e6bf8065bcaf8eb2a417056ac300ce1b4b0f114c049b396183a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-osx-x64.pkg\",\n              \"hash\": \"27723bd0c643264fda9ce49c81de1c56ef2492e1b2e328271008eec52d90511e80e6d75d8c823555c258ef306e25af926f169dbc9052c37f3acf630edc6a57ce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-osx-x64.tar.gz\",\n              \"hash\": \"b9e74e48a64c4f9123fe9ff6400797394d8048aff8a0dabda53fef91b00dec41030d2c41d42dc1af972f7f3d46edcc44585a43bf57c36732a7280f741e672dcd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-arm64.exe\",\n              \"hash\": \"bf046e4b05bd4bf93c5c9955c9e6668626e1067634738bf053980c912cfc1310b6dda0d00ff3a54c1610143c89c7caad1b9cf891d5a9ea1efd18d3068b4d4819\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-arm64.zip\",\n              \"hash\": \"ea573499f65e146bbb7cf2efe663053053d8cc7bf7fdb12ff4257826593a0f0ba4cc703e8a79492a6bbf5fb353cecc931edf3d1ef4e72108eca20c7dd0a4aaef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-x64.exe\",\n              \"hash\": \"201d3304d45265c4fac2e21b52a7e0b61bca54a12aeb87a0a7ba86eb36b7e6cfa0bd7469cd3d3ce6b6adf6cb6eafb1923543529e773b43ccc72f5a1f539b6e74\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-x64.zip\",\n              \"hash\": \"e126fea62f3719cc2c0cef9858e2dad85b31029e1766f2df091c611396ed5b8f02e3874827a4f30e3d5ef0b7b3a318d8bf9a728c74c14425c42befca5c85b26d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-x86.exe\",\n              \"hash\": \"1d8a93d0b82458cdf5bf0c242598bccf2ab05136822d1917b5724beec6b897c3ec74487af4e13a93bc89eab11342598d2cc1b3ae3d2dccf486cd2311a39ca357\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.6.21355.2/dotnet-sdk-6.0.100-preview.6.21355.2-win-x86.zip\",\n              \"hash\": \"b937af04b6533fc124163e2dd4f87d88e188da620622d6117e3a6c4093d8dd9f53d84c8b0936bb4ffd14cb4cd93635dce90e747b432cb12454190646317b8ffa\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0-preview.6.21355.2\",\n        \"version-display\": \"6.0.0-preview.6\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21186.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-linux-arm.tar.gz\",\n            \"hash\": \"aaf6919f55864234a5eee7126d1a79d2dc3bb2bc0d746cc8302c56dc62a683b6a662140b8c4875576e5c24eab41a993eb848f68dfb3096386a935ff3bf41c9ce\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-linux-arm64.tar.gz\",\n            \"hash\": \"27f9b870debb847fc4da084f2ccab8da3c04684fe8343c0f3aa079a54add5967f3efc1dd8d8a0d2bc92198f2bd03b42e3fc3eb4aff425baed97972397870c8b2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"50f1c68f64aeb576452ddf11a26e5e2bbb9d713ebb9bead6f8d73b16b8111eafec5841c470332a8700ebcd7234b87d453751857fc93ec6cc20a5fcdbbe42c6ef\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ff591e1da80ae387e6b9f53bd0ab5fe778ed3334a0249b68d3b7610b6ee5cc036006bb5b596c8b36f6b6a1e71e12c4d241ec308e7a54ec6e66fc76f552c7c72c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"4c5c327e431903d05524b4cbb506a6b4fa18f342caf0fb3ce28068fae86c1428c8ae6ef324a7885031d33f91009b5e6eed48b3352ece1351a86c08b42d5d0702\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-linux-x64.tar.gz\",\n            \"hash\": \"42cc384554caef8f72b5410aab196f3d62cdb053dbc56e8bd4e0411de5deac19b9524b7cfebb14c69d583842b477e830bc34e8e9d76f723ea02470488d172f47\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-osx-arm64.tar.gz\",\n            \"hash\": \"9806a42586010817aad59a778dd26461e3633d3ac3d97170863c41ff5f38003eaf91e9f153156d6e92a60c8cc94a5cce6f07e194f0987255938cc4fdf8e464e5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-osx-x64.tar.gz\",\n            \"hash\": \"781edd3f28c754acf32a54ccb57f507aa839ec637883f21bb4e687f3a234ae0a9fc966b529afd928fc57e4a23bbd797a8ebbae0d2f5a107f9322d7f071c86b8e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-win-arm64.zip\",\n            \"hash\": \"f7e0b22f34a1a435b76525222c6ef7cd80e845fd2be8fabc3825f764c10d49b56a25e985e2c687b9fdf7df65d03bd27d8e1a77e50c9320e48434ce3fc5542c67\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-win-x64.exe\",\n            \"hash\": \"a7fa47dc733235f18ca1376486c90c8f1aa44530f57bfef0a632a93cb250c1d41be56d9cffcd6ddfc064cafeb64da23fc01cc8653d82f6343ce3ed760177bc5a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-win-x64.zip\",\n            \"hash\": \"3220634d47d556caedbe3f8b11d37f819226654e52fb5641ac705b34f19105144908008c4557213cc61765a2f78f17c21b076217feb911729d9aa0b2f131fd03\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-win-x86.exe\",\n            \"hash\": \"eb5af3a38dd9b1f2c8e4cddea0e33bafe8961fc52589dbd6bf41c94f6e2539b7448ec79a59ecdb9c3a7eb19605cb7b610401f21782c09bc174eb58e3a018693a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/aspnetcore-runtime-6.0.0-preview.6.21355.2-win-x86.zip\",\n            \"hash\": \"3dd1cab40b2f5663d7fd96fd778ab481dc33a8be6a170cc80d3e26d6c2b11802649ebe2872c4a3d07abc0cb40a45dde5e949eccb13601e4fad983427bd92e108\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.6.21355.2/dotnet-hosting-6.0.0-preview.6.21355.2-win.exe\",\n            \"hash\": \"f15b02946c33a3117110428a773a4af6c453140995da7c1a69f68c7ec900643eb5080b20f8ee2ac32fe0ddc900fd59aa7a4389da348abed3bfb07d0a8ed1bb68\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0-preview.6.21353.1\",\n        \"version-display\": \"6.0.0-preview.6\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.6.21353.1/windowsdesktop-runtime-6.0.0-preview.6.21353.1-win-arm64.exe\",\n            \"hash\": \"7712970bbfa4e1adb3c5d0c2ecf98fb5b2b0e978f5aad746f5073ab6abb3e3db9582697860307cba41c2e07baaf16e1a7713e3a23c7eb2b9b43cebcd7b23985c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.6.21353.1/windowsdesktop-runtime-6.0.0-preview.6.21353.1-win-x64.exe\",\n            \"hash\": \"9837420074eed77e0dcd879f05c0b67d3a402a8cfccef34b62ebdbcbf7f828e42d75df134ed252c6969757a7a174b616b57a56a348ff9e3acb635435ad1e53f4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.6.21353.1/windowsdesktop-runtime-6.0.0-preview.6.21353.1-win-x86.exe\",\n            \"hash\": \"8cbfdd74f6267ce9127c8aa0e72efc6c9445fc9b99e4121f4d573f57a679f4110c7546be26a71ef5ad87a0073c52cbf28e173607dbb86995255a66cfcae9637d\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-06-17\",\n      \"release-version\": \"6.0.0-preview.5\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/preview/6.0.0-preview.5.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0-preview.5.21301.5\",\n        \"version-display\": \"6.0.0-preview.5\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-linux-arm.tar.gz\",\n            \"hash\": \"7fc26829ad0d4e9c76e520ef9ddff0bfbcccc44b6562b4cfb149095e5d6ef83e704f9b533825ca176a492305bbbc8afa4e6554ebe82de42bfc1c0021b147dbf1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-linux-arm64.tar.gz\",\n            \"hash\": \"13d58229e85005ecc1e890052744b8bb3a8e1f538bbe716e9a9c4dea9a459d6bd5e7b733b2eb0b29e96d32e27eeb11f830fa7a52eac7879550e7df97ea73b90e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"0313e8fd504500003008d87ba89918d81a66d218c46de1bb614b6f79946c019cb8966999ae7d1f2ee4385af43afa8bde28c5312cd6821fbca09e8aa21b7d37a8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c2fb6c441f3af0d579a64f63e5bc781218ba82a5fa8cc44e46adb44a3099f71391f03fc5c67755eea92b99d41130cfa64454204ef78f8394988ff2da32898239\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"dab1b9a17a332a384777fe0d81c72bf62968b66adcf68e76e551ba3ae06dce6821dc4dc25ecc3756fd0dd360bad56b98a0c0c353c7a6a3e88e8c55e8352b02ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-linux-x64.tar.gz\",\n            \"hash\": \"69b91743bf79f44da0bb82f9d36f77e12ef2889e11badcf096734a8c98819a79e83f9d92cbb9f82584e8062089df52db9e4675bc143fc46ed3a31029d8de6df7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-osx-arm64.pkg\",\n            \"hash\": \"ec1c18e886992453f75efe2e3334589aecfa6565b19a0664a87ae20d5a4808236a00f480972fa848debe90b977ff7db8da0158e0e9bcd13ebd45b51450aec5c7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-osx-arm64.tar.gz\",\n            \"hash\": \"6f285837a24f898341853adaca5eea82950195ba57484285bf7322c526939e76a331bf567b0e8886537c734eb512bde392911436541a194d6c65589fbb68bb36\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-osx-x64.pkg\",\n            \"hash\": \"fc02ef1a31ef0cc9e89a07a09d6013a60200d0eb2444ad5fcc76fed4daca18462d7746da036762fc92be5f05ccbba299652c45747c553ab482dbf77463260604\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-osx-x64.tar.gz\",\n            \"hash\": \"ef002e82c6febbe798b19ed003fbe8387400fdccfd24fd8f8b5e072144006d5b95c8e7250c7faaa80b2f2d6a3253ec9c8eca8056118246b96af5de708b89ea96\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-win-arm64.exe\",\n            \"hash\": \"9e63bcbf9a68514b9f4289d25e8e2bf022db2702940a4d9e7c2ecf7d362e1e97cff2f0aa40068cee92ab5e0b84eb6a05f5488ea2a807a883ed0f0c5327371030\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-win-arm64.zip\",\n            \"hash\": \"9348872af2cab34361bc373d39e0aa02dbc153f1d2fc1b8de36b4f6ae6854ca3dfcf0b08b7f275a5a0bb184f9ac6a9ad801ddb14b53d12b6d29c65fda963bbcd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-win-x64.exe\",\n            \"hash\": \"49fd8dd46759e187543bf4ee879dc21191f2ef15f2d47acc1eaf84b107e72ce08eb45e8beaa073dca37e2b94442fdbe7d7a3afcb122cd3b380501aa74c323449\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-win-x64.zip\",\n            \"hash\": \"c1e4656198f60297511fc28b5b1d6ad28eceec29fe59ea7a9e1c8b0b7622ef69e8af481c98a1958f65cb5b3de81d755ce3402d10712944c0e313366741a0e738\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-win-x86.exe\",\n            \"hash\": \"9d7e85662f248247c64fe0f260dfdab95e39bdc9ca0e31f4571433c4c145155a619d81e5ddaf254fe1a5ed8f3e89ad8f9c3937a7eaae4221e072525ce096feba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.5.21301.5/dotnet-runtime-6.0.0-preview.5.21301.5-win-x86.zip\",\n            \"hash\": \"d45c4956a03e3af922083b0f12e46e65cb7e4e1847d7dda5272dc7f4a158fde52214a4221fb38894bf8d4c42cdd7d664928484cfec9c76360db85e19d47c13d9\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100-preview.5.21302.13\",\n        \"version-display\": \"6.0.100-preview.5\",\n        \"runtime-version\": \"6.0.0-preview.5.21301.5\",\n        \"vs-version\": \"17.0\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-arm.tar.gz\",\n            \"hash\": \"51a9254c02385703e999e711040c9ebe862d66a9a4342fda296ee35c1cf6e474b7fc7f858dbf914091574cdbc8de929243452ff2fee83c88bc6da056c6d20678\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-arm64.tar.gz\",\n            \"hash\": \"a9b8f8b08187b05cb47620ea90e052eda10e9a0a11e58a0b232df5882c2d856f670bcc17c1ad7ad1ffae37eb98dfdd10da7f4334ae8b7ad31ad808a9c70c1dce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"224271014987d3bdfa0a869b65bd0d7994ad3202897a732a5e03c6aabd1e5368195b40014a868453e3fe0420ed975861a73e5d8e4457c85b6c105ad53c5f401d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7bec783cef13592a275883c493e3c4aed9de223ba4bcf1ce98578a98951694059147a44e1307e8241756301217c243e0e6de19c71b2bd49a56514e224481a7be\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"959fad9c070f3476ea401873534a19dce132d6b3f542f744f3994ef75e068c7b3ad95072f9cea6058065c3ac6c7d97519e4b48e539b38dd429fe2641283872ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-x64.tar.gz\",\n            \"hash\": \"000ea38847453f636f81adf3d1083d811b0e4c20585e3735dd599a4009f4289793d4e1e8e75d5f86b73bd9f75e78ce2a68900686f4230ea7ed9a49bdb4e46a83\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-x64.zip\",\n            \"hash\": \"807e510d96890babfa05d3da2be53bd5d965582f4d2a8b99b41f745456bbcd4e25c3adaa0708d5ab0dcb14b5fee1587b34961884507c1d68d738045e0034bf27\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-osx-arm64.pkg\",\n            \"hash\": \"b3cfb04f07f2ee9388e5b6cf0e812b4356d22a6104d527417b3053a323a35cc71b4323a08f9ee38f9b3c16b6c74b4bd42d7eef6340e90be453fd016a8a80c514\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-osx-arm64.tar.gz\",\n            \"hash\": \"8f481f16947191a4ab305a3ee7c60cba86a17c4c3622026230c2be50f41102f3ba1333e21a38b617d331b3907fce7ba65518a1d91bf28a86573662e78017e4cc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-osx-x64.pkg\",\n            \"hash\": \"8680b39cc4558e513c3c0a7746f6ea0f7e5872e9e05f076d38b9ddb4ecec306e7e13e41999e321f1f51f7481611af261ca88175fb5c98e533bedee719db7b49d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-osx-x64.tar.gz\",\n            \"hash\": \"c967e0d27dec8cfb2aa2217d7add786e756dc7ff3d5bd36e9479dc815e0d5f115de953e7c74e8606916b569fa2615f37d6c1fc43dab0bb5059e29ab065819fa3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-arm64.exe\",\n            \"hash\": \"9e6d2f5059665b5773da542d3468da8beb77d5df401ad84d298caa8f66220f57db7ce27d26873a6faed4acb5ac0c6fc6207e0f4a20c1fbca46d5be4cff12fb18\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-arm64.zip\",\n            \"hash\": \"82eafc254ae2e21ace82886c2f831397c8b680c28d25834ad0ec0494a5881d3c0ed64f4892756ae7b1509a794048c8f4907431cdce251afaf1e3b9ac2018f7a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-x64.exe\",\n            \"hash\": \"c86591883a75ac6cf4eab0043e5dc70014c16f23bb6f9aedce74480f59c9afb1e410008440ea2bd6ae5e4c3a4ca337a0a58c8e429bb5b814395b7cdd78cf551d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-x64.zip\",\n            \"hash\": \"f76c48cc6b9a614b75ba323fd489b9750bb7f2baafe63bedd5f0798feb90bc928e8d4f61f4502b51702f1a1b0ce8824809ec72059f7dbc933ff1b27aab8c2fa4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-x86.exe\",\n            \"hash\": \"b0f15c8241f6a184b1de9d8ffa6df0978d28bdba0ffb7b24fc2d6d0d47d7663f56141999a9dbda2630570d253f1f9d64933b92f7f7fcf1b5376bb8c9f123bbad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-x86.zip\",\n            \"hash\": \"229f165357abf44ad322295e31f620af191a071736e472084acaf4e8f48ac7b11334213b677b34e09a0e2f7670e9f2ba8f3254e9a42588efad37d15e73398ad1\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100-preview.5.21302.13\",\n          \"version-display\": \"6.0.100-preview.5\",\n          \"runtime-version\": \"6.0.0-preview.5.21301.5\",\n          \"vs-version\": \"17.0\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.0 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-arm.tar.gz\",\n              \"hash\": \"51a9254c02385703e999e711040c9ebe862d66a9a4342fda296ee35c1cf6e474b7fc7f858dbf914091574cdbc8de929243452ff2fee83c88bc6da056c6d20678\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-arm64.tar.gz\",\n              \"hash\": \"a9b8f8b08187b05cb47620ea90e052eda10e9a0a11e58a0b232df5882c2d856f670bcc17c1ad7ad1ffae37eb98dfdd10da7f4334ae8b7ad31ad808a9c70c1dce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-musl-arm.tar.gz\",\n              \"hash\": \"224271014987d3bdfa0a869b65bd0d7994ad3202897a732a5e03c6aabd1e5368195b40014a868453e3fe0420ed975861a73e5d8e4457c85b6c105ad53c5f401d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-musl-arm64.tar.gz\",\n              \"hash\": \"7bec783cef13592a275883c493e3c4aed9de223ba4bcf1ce98578a98951694059147a44e1307e8241756301217c243e0e6de19c71b2bd49a56514e224481a7be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-musl-x64.tar.gz\",\n              \"hash\": \"959fad9c070f3476ea401873534a19dce132d6b3f542f744f3994ef75e068c7b3ad95072f9cea6058065c3ac6c7d97519e4b48e539b38dd429fe2641283872ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-x64.tar.gz\",\n              \"hash\": \"000ea38847453f636f81adf3d1083d811b0e4c20585e3735dd599a4009f4289793d4e1e8e75d5f86b73bd9f75e78ce2a68900686f4230ea7ed9a49bdb4e46a83\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-linux-x64.zip\",\n              \"hash\": \"807e510d96890babfa05d3da2be53bd5d965582f4d2a8b99b41f745456bbcd4e25c3adaa0708d5ab0dcb14b5fee1587b34961884507c1d68d738045e0034bf27\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-osx-arm64.pkg\",\n              \"hash\": \"b3cfb04f07f2ee9388e5b6cf0e812b4356d22a6104d527417b3053a323a35cc71b4323a08f9ee38f9b3c16b6c74b4bd42d7eef6340e90be453fd016a8a80c514\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-osx-arm64.tar.gz\",\n              \"hash\": \"8f481f16947191a4ab305a3ee7c60cba86a17c4c3622026230c2be50f41102f3ba1333e21a38b617d331b3907fce7ba65518a1d91bf28a86573662e78017e4cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-osx-x64.pkg\",\n              \"hash\": \"8680b39cc4558e513c3c0a7746f6ea0f7e5872e9e05f076d38b9ddb4ecec306e7e13e41999e321f1f51f7481611af261ca88175fb5c98e533bedee719db7b49d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-osx-x64.tar.gz\",\n              \"hash\": \"c967e0d27dec8cfb2aa2217d7add786e756dc7ff3d5bd36e9479dc815e0d5f115de953e7c74e8606916b569fa2615f37d6c1fc43dab0bb5059e29ab065819fa3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-arm64.exe\",\n              \"hash\": \"9e6d2f5059665b5773da542d3468da8beb77d5df401ad84d298caa8f66220f57db7ce27d26873a6faed4acb5ac0c6fc6207e0f4a20c1fbca46d5be4cff12fb18\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-arm64.zip\",\n              \"hash\": \"82eafc254ae2e21ace82886c2f831397c8b680c28d25834ad0ec0494a5881d3c0ed64f4892756ae7b1509a794048c8f4907431cdce251afaf1e3b9ac2018f7a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-x64.exe\",\n              \"hash\": \"c86591883a75ac6cf4eab0043e5dc70014c16f23bb6f9aedce74480f59c9afb1e410008440ea2bd6ae5e4c3a4ca337a0a58c8e429bb5b814395b7cdd78cf551d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-x64.zip\",\n              \"hash\": \"f76c48cc6b9a614b75ba323fd489b9750bb7f2baafe63bedd5f0798feb90bc928e8d4f61f4502b51702f1a1b0ce8824809ec72059f7dbc933ff1b27aab8c2fa4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-x86.exe\",\n              \"hash\": \"b0f15c8241f6a184b1de9d8ffa6df0978d28bdba0ffb7b24fc2d6d0d47d7663f56141999a9dbda2630570d253f1f9d64933b92f7f7fcf1b5376bb8c9f123bbad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.5.21302.13/dotnet-sdk-6.0.100-preview.5.21302.13-win-x86.zip\",\n              \"hash\": \"229f165357abf44ad322295e31f620af191a071736e472084acaf4e8f48ac7b11334213b677b34e09a0e2f7670e9f2ba8f3254e9a42588efad37d15e73398ad1\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0-preview.5.21301.17\",\n        \"version-display\": \"6.0.0-preview.5\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21152.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-linux-arm.tar.gz\",\n            \"hash\": \"f421f31c829b6f8440acb0b2d5b6ced1aad40ebec9690cee517616268d8399799662567afae4749ac91755176c45a85653cbdda6b73336b17ccd15c0190e63d2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-linux-arm64.tar.gz\",\n            \"hash\": \"877809d707c83f6275a610548e134ca614b3b63075c49728af2060ba49bfd20699b44ea22680ac55c5975486c9df4f0da7bfe1f0110b34056aa8aa4295b1f485\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-linux-musl-arm.tar.gz\",\n            \"hash\": \"6b9f8b85d492978f2ea2b9ab7e7d9e7a0a52a7d7cd78902b664920bb78baea29f57f0082416191c5cf6a460a2d3f8bbcbd87cbf8051ff6935ccbba69b0725ef8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"634c40ab650394984b9f7320a2fe6bac72f1838b9a73bba87773e3a63834a3bb225862b4405fecfa454694163547dd3c4d073d79aaabed80bebff765140364a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"9e781624c19261096bbd75be5fec301c3662774cb984db704910e9b8e20ba5dabd046e3aeca66a59b3f334e49e51574b76a108514bf303070a38794f10420869\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-linux-x64.tar.gz\",\n            \"hash\": \"4f21c8ca94d0403b5023696d5862585fdaf2d8111a5416dc07dc150450bf89bc96e0f554e5213e66daac467166af8bfe68f2c4de2d5019ed755230b89337582d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-osx-arm64.tar.gz\",\n            \"hash\": \"0b3c44bac31def3481dc6d09df5b71e41f3593a9cab1b530e58b498240b8246c84da572de2a5dc569b5896d631b2f8820675b554bca470d987cb204e691e1d69\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-osx-x64.tar.gz\",\n            \"hash\": \"de58d39253f1512f60b62f98684331026942b4e7fb7c0af9ac3386ff3d854f017c9331d7344763ce104f5f80e7759689f89fb867210010734e20d87bb0343f9e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-win-arm64.zip\",\n            \"hash\": \"659c3b5df4bb53fa3735ba0560135e4efcd2699ae6c9e487af773d5df20f7605dc08142bd254a23aac1f237e7281e0b43717d50108f1c70ec76421144c505231\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-win-x64.exe\",\n            \"hash\": \"b2eeb4231596ceff65f862c13296d359441d9b619b77c6c0e9e814ad8cb67e14780b5c24259268125f48ba95f06fd0a41871f8fd5e3b3a2ca3770b509bf3f94a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-win-x64.zip\",\n            \"hash\": \"2812184e80ecc1bb46702c29eaea0d57d801c256be5b7687bce90c2682629527de5799d17c58545176c68a2baee0d7cfedf88dff89a9fcd8ccd66968a65184e3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-win-x86.exe\",\n            \"hash\": \"97bc47a77e7aa098233bc08ae41b82820d5f72c4688c837c657da8138de8676439a2b8e3357e01fe1dd5f8947f0e8cbeb319a617cc12b473a175af145b75ab38\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/aspnetcore-runtime-6.0.0-preview.5.21301.17-win-x86.zip\",\n            \"hash\": \"7adafb4e8f67a56c78ea86bebf540932dc9ad5092536ecdab585658ab646e68e01bc3deef00c4fce391070017ba3b21008f7e4daa7e0dbb986f5de998dc98007\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.5.21301.17/dotnet-hosting-6.0.0-preview.5.21301.17-win.exe\",\n            \"hash\": \"327cb3eaeb09144e939c351431efa6da16c6a4d50a8b539f9f167d1d20722dfd1f32b4079c302933e7a24406d16401dd5fdb3528590df61623a224fce4db0571\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0-preview.5.21301.4\",\n        \"version-display\": \"6.0.0-preview.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.5.21301.4/windowsdesktop-runtime-6.0.0-preview.5.21301.4-win-arm64.exe\",\n            \"hash\": \"b0db34b03c869e07d51f63c2233b1d9f3447aa2e03b7a3084d020ad918196462fdc646f9848d681a1fa87fa98fb029999bbf234349dc4064b6000d51d5dcb901\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.5.21301.4/windowsdesktop-runtime-6.0.0-preview.5.21301.4-win-x64.exe\",\n            \"hash\": \"ee6b99e968265ced5119c34412a89868511ae1b40274ec965862c30230f1568233e16bef0bb26c6a69662b4365add31c78c3078f6037aabb771992a4c18306f4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.5.21301.4/windowsdesktop-runtime-6.0.0-preview.5.21301.4-win-x86.exe\",\n            \"hash\": \"9bbb48116e7cde220f7f4163c7ec48b47ba7405baef0554139a5dad9008bcb10e073a071397150649b8667227c3de2d3b7fe6d66a295ba1dc60ee8bda32dd257\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-05-25\",\n      \"release-version\": \"6.0.0-preview.4\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/preview/6.0.0-preview.4.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0-preview.4.21253.7\",\n        \"version-display\": \"6.0.0-preview.4\",\n        \"vs-version\": \"16.11\",\n        \"vs-mac-version\": \"8.10\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-linux-arm.tar.gz\",\n            \"hash\": \"9006314540937845adb3e8746fda48037bbbfb28cd76eeb66655d1d1a92014d979256cb78b08f5f85fe8b5b8952a10b3c152be99b7dda3b2bfe1ecec5935126d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-linux-arm64.tar.gz\",\n            \"hash\": \"69b97e6e2a98acf0dc81ceeed4bb4ff098edcdad7ce459068c1ba4393f3e6db7d6f4df75c7e41da65ac984daa9ade8a14b8277175ac695737a2a03406598c541\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"2cb28f12114248fd6e068d80f249dc322d5c1d889d4cda663528224face978916c2e820fe7eddaf5239da146f804cab62efb2309f186815a26e894523ab396ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"711f9d17219b71dabcad305f3cb5f5a9c25891908ae9410ca8af3d3afba932473daca2a221fdf7338ec08875770f7d166a0836c287bc5b7c1bd856a0347d975d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"5e837bafe7a5027e0b7abf9f68724d39dd4aa7f04ef3e04de3304848ffb7f50fa3b975ca08163a7b1e84fc1945061516ed617b224539ff159c31674ad12702e0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-linux-x64.tar.gz\",\n            \"hash\": \"baa7a1f8ea64ff93850b4e9ef44ba3af2e7ea8dd72354e70a73147e630fca97fb8e7f4f7ef963b0f7067baaf26c29e002a330663d32ee2cfe3bd2a0049841f6b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-osx-arm64.pkg\",\n            \"hash\": \"4a7220ebaace274e0befb11115f33cff4391306b1f3b654fbf4a470ae05eee8e887866bdd063b18ed660a66ac35dd0fab2e9b68453df3ac50b582ff543d8cf79\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-osx-arm64.tar.gz\",\n            \"hash\": \"35d0aebdec8452b3507b4b4780f44d6daeaf7e2ebff880dbc9e10a470d33167e05bdc3e48dcf60090b2c58fe26945a1ff25c3b0ddde05d2fde25b62974c93d9d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-osx-x64.pkg\",\n            \"hash\": \"e86ed9c9844000f105f135add6b0ce72694f5a80e408000aa4272f17eb8d601b7248de8071cf8039091657c321d893b8b3d6bfa1bda9c51f0e71efc8635ce097\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-osx-x64.tar.gz\",\n            \"hash\": \"bfa3e8693436d082d231c3e975c9897c169d7285e7963a84c5804af512026faa2366da620c3ff832dea662b935573ae391121c5a5bad7c43ccd9f54194748600\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-win-arm64.exe\",\n            \"hash\": \"8ee0d2af80630c882b18166522f074847fc4864634022c8f8b240e38985fa0afcc9de7348aa3e19a6386e92ab7b54234dd917716f14a0ba0a09fa780337caecc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-win-arm64.zip\",\n            \"hash\": \"aa7b52e90d6b7baed3400f4feb0d961ce1f0a2a60bf892d2a7311741fbd4e1f81b9526456555c866e73a2a1cd2f541cc84a5be6be8a8be5d0c937eb40d110265\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-win-x64.exe\",\n            \"hash\": \"e3bfccb01aaf94bf7f2f9ddd4b4dc304f96cb948da3e6cd2fa2ae45bde7f5880b0cbc5110a1f08f7998e94c8f6adc5274f958abe77af0f283881ad07539bf38a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-win-x64.zip\",\n            \"hash\": \"ff573c192f196f641d6616addb7d629c22c6aa666b4abbf0c3bd5fa4d6758a74175dd08dec9edbc166a8cf90b1f9888ed791609f03972d12cce99bfaf058f1b6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-win-x86.exe\",\n            \"hash\": \"11605f52a760c4cd7d788eda34d32b98397e12ff65f9be89f0a3d94c65cf7f62e3a12e1024b0e30451526e87f2f9f606d05a897c6ac990d15ab805a1a4d2ec9d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.4.21253.7/dotnet-runtime-6.0.0-preview.4.21253.7-win-x86.zip\",\n            \"hash\": \"ec10d0f77b150f592ca6ed9a9fc182ff164f2f17c185d09a89d90ff1e8de0da1306f0d7952fd7337d41bad391ed25c07f2ee4e63aab62160849fbcdbafa5984c\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100-preview.4.21255.9\",\n        \"version-display\": \"6.0.100-preview.4\",\n        \"runtime-version\": \"6.0.0-preview.4.21253.7\",\n        \"vs-version\": \"16.11\",\n        \"vs-mac-version\": \"8.10\",\n        \"vs-support\": \"Visual Studio 2019 (v16.11 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-arm.tar.gz\",\n            \"hash\": \"5207f2842ec70fc6b428e20d25fe9b11202c593db8095b04d8f67a1ab2f445675229faa6eca9f07746d98a70f2cb891b5c6f65a1fd559ee1b8201be98d34e481\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-arm64.tar.gz\",\n            \"hash\": \"40dbb1cf48f7f27ba95e36b5638ce5529cdba8bbfb03b2ad84e03924067f17ecc1de12132a66bb07f6b432d247bfb80e86cda7f7832d34565b880acc65940321\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"4f677ceeb3f6dd2d92c6865d6864619519dd44284f52fe5ad7534b2d5894e5342152a835b2dbf16dbcc954b49e5dc72037eef2fb0c7a4af94a89f4fa6a0c6db9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f2046f3fb7513da68c628faf119830e9618e19858b0b608fb38df91ee060b642243e89221f622fe4c7c09a745bc997611d4deed5ed9d1a2a2de08c864df67467\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"101db50031fffb064d6ed86c496762c0cb19c0fb32e5650d1965f005b256e5401c6e7665506eaadf972eee61962d4a1e8c2f55ed033b82fea6f458ad59230338\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-x64.tar.gz\",\n            \"hash\": \"9b4554f9c223ff70083618da7c12a70686d39f7b413583c6a7449bfbb5e871ef281b3f692eefca53864ea57217685bf4d7f80383015b2462666a0a26376e0f97\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-x64.zip\",\n            \"hash\": \"b59425c30ae09bc3b2de92963ab246251b03aeb612da8b2c28a792ee7813b599db97f484878231bda221eb4f2480256a5bf7d95191a3180a75b7ca966971c0c9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-osx-arm64.pkg\",\n            \"hash\": \"7f61261f7c1a2b5efdd293802f184d2b7ee06ed2431bf6f92ddfa32822ab093dd73fb8e20b672253d043476ca1952d71f4b7ee06e02d26d06401e80584a727d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-osx-arm64.tar.gz\",\n            \"hash\": \"a8c3d8890bf3915b4a6d540fb03e64b21a5e18760865d30176676e0f640dda438cac2937b38954af07554587ef11c3c1a13373a8a0017c3b225bc0b2f45964aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-osx-x64.pkg\",\n            \"hash\": \"197265412cfb47d4e4ba0bda847011bccf6942615cc64ca5e7aae6576d98c7278a85a0d9dae3893fdc96ef2d9ac7c5cc13753cf5a4786eee6d186d79235ca549\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-osx-x64.tar.gz\",\n            \"hash\": \"c87060a6e8c9218269087f92b28e399ad478ef0dee4bdcc06d1cdd7469d7f21488a13aac8b6b63af2fd10fff37c29c6c5235fa4d1ff8792f7591416c0dafc16d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-arm64.exe\",\n            \"hash\": \"f18407c55f119b9dde08bf0d4506d251a93cdf16734679e7655c027d5402eb9fbb43a0f723c9914e574785d1f30cfb89bab58e6c74c530360c9294d811f84a3d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-arm64.zip\",\n            \"hash\": \"65badae3775a05291f267b668b1f62cddefe45a69e435c15dafa9a24a50e7c5ba1e83d1aa7724608adbc15a1099331e5a6bfaac01da769aaa475e07b1a505d55\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-x64.exe\",\n            \"hash\": \"75bf0d167fa68f46ee4e83dcf39b811b543f722796a676524e3f527faeeb6c7b2e9695b116d85669b1090d11a34c13d7c7f275976bb51bb9926d9ba7d57ae509\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-x64.zip\",\n            \"hash\": \"adfe0681f86ecfd586eedb54c39c1f1af02153e649787640bd97444e4f177c7e08e280448f38937e48a1eeade2063ec0d2c3eeb2d1d093ccd45b4e203ed33ad6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-x86.exe\",\n            \"hash\": \"2c7967a33839f4e5ffe28d79b95f7c9426989673e44077810f38b58e99cea51d6976247624f4dbbb550051b9d2c4ec6cd07bdc3186d16bb1e04306478f647791\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-x86.zip\",\n            \"hash\": \"ff44290f288fdf951878a1625b23acbf60088496436fb16f98ab4e6abcd00dd6282343ccc917f0d02e1abe014106420083e00a20645da260ebc41d0e94efbfd7\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100-preview.4.21255.9\",\n          \"version-display\": \"6.0.100-preview.4\",\n          \"runtime-version\": \"6.0.0-preview.4.21253.7\",\n          \"vs-version\": \"16.11\",\n          \"vs-mac-version\": \"8.10\",\n          \"vs-support\": \"Visual Studio 2019 (v16.11 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.10)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-arm.tar.gz\",\n              \"hash\": \"5207f2842ec70fc6b428e20d25fe9b11202c593db8095b04d8f67a1ab2f445675229faa6eca9f07746d98a70f2cb891b5c6f65a1fd559ee1b8201be98d34e481\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-arm64.tar.gz\",\n              \"hash\": \"40dbb1cf48f7f27ba95e36b5638ce5529cdba8bbfb03b2ad84e03924067f17ecc1de12132a66bb07f6b432d247bfb80e86cda7f7832d34565b880acc65940321\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-musl-arm.tar.gz\",\n              \"hash\": \"4f677ceeb3f6dd2d92c6865d6864619519dd44284f52fe5ad7534b2d5894e5342152a835b2dbf16dbcc954b49e5dc72037eef2fb0c7a4af94a89f4fa6a0c6db9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f2046f3fb7513da68c628faf119830e9618e19858b0b608fb38df91ee060b642243e89221f622fe4c7c09a745bc997611d4deed5ed9d1a2a2de08c864df67467\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-musl-x64.tar.gz\",\n              \"hash\": \"101db50031fffb064d6ed86c496762c0cb19c0fb32e5650d1965f005b256e5401c6e7665506eaadf972eee61962d4a1e8c2f55ed033b82fea6f458ad59230338\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-x64.tar.gz\",\n              \"hash\": \"9b4554f9c223ff70083618da7c12a70686d39f7b413583c6a7449bfbb5e871ef281b3f692eefca53864ea57217685bf4d7f80383015b2462666a0a26376e0f97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-linux-x64.zip\",\n              \"hash\": \"b59425c30ae09bc3b2de92963ab246251b03aeb612da8b2c28a792ee7813b599db97f484878231bda221eb4f2480256a5bf7d95191a3180a75b7ca966971c0c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-osx-arm64.pkg\",\n              \"hash\": \"7f61261f7c1a2b5efdd293802f184d2b7ee06ed2431bf6f92ddfa32822ab093dd73fb8e20b672253d043476ca1952d71f4b7ee06e02d26d06401e80584a727d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-osx-arm64.tar.gz\",\n              \"hash\": \"a8c3d8890bf3915b4a6d540fb03e64b21a5e18760865d30176676e0f640dda438cac2937b38954af07554587ef11c3c1a13373a8a0017c3b225bc0b2f45964aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-osx-x64.pkg\",\n              \"hash\": \"197265412cfb47d4e4ba0bda847011bccf6942615cc64ca5e7aae6576d98c7278a85a0d9dae3893fdc96ef2d9ac7c5cc13753cf5a4786eee6d186d79235ca549\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-osx-x64.tar.gz\",\n              \"hash\": \"c87060a6e8c9218269087f92b28e399ad478ef0dee4bdcc06d1cdd7469d7f21488a13aac8b6b63af2fd10fff37c29c6c5235fa4d1ff8792f7591416c0dafc16d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-arm64.exe\",\n              \"hash\": \"f18407c55f119b9dde08bf0d4506d251a93cdf16734679e7655c027d5402eb9fbb43a0f723c9914e574785d1f30cfb89bab58e6c74c530360c9294d811f84a3d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-arm64.zip\",\n              \"hash\": \"65badae3775a05291f267b668b1f62cddefe45a69e435c15dafa9a24a50e7c5ba1e83d1aa7724608adbc15a1099331e5a6bfaac01da769aaa475e07b1a505d55\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-x64.exe\",\n              \"hash\": \"75bf0d167fa68f46ee4e83dcf39b811b543f722796a676524e3f527faeeb6c7b2e9695b116d85669b1090d11a34c13d7c7f275976bb51bb9926d9ba7d57ae509\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-x64.zip\",\n              \"hash\": \"adfe0681f86ecfd586eedb54c39c1f1af02153e649787640bd97444e4f177c7e08e280448f38937e48a1eeade2063ec0d2c3eeb2d1d093ccd45b4e203ed33ad6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-x86.exe\",\n              \"hash\": \"2c7967a33839f4e5ffe28d79b95f7c9426989673e44077810f38b58e99cea51d6976247624f4dbbb550051b9d2c4ec6cd07bdc3186d16bb1e04306478f647791\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.4.21255.9/dotnet-sdk-6.0.100-preview.4.21255.9-win-x86.zip\",\n              \"hash\": \"ff44290f288fdf951878a1625b23acbf60088496436fb16f98ab4e6abcd00dd6282343ccc917f0d02e1abe014106420083e00a20645da260ebc41d0e94efbfd7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0-preview.4.21253.5\",\n        \"version-display\": \"6.0.0-preview.4\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21124.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-linux-arm.tar.gz\",\n            \"hash\": \"6d4741f71ae38e5864f54c7cbb42dcef85727e631771a7789ecc7307e1c74fd90d9dcc543329de7b51786472c77c60d9d39368faa5e9431708c56ae2ec16a20c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-linux-arm64.tar.gz\",\n            \"hash\": \"ab0aa51b272ebcaeb61e1a24e8385b8e4b7ad807576ebdf2ceb76077e517156f6a4f7303cc54198965f98647b99fdb62b6a6f6465e7ed183662561f918664b0a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"e829ccc67d4c00a790d4d898b1d0541020fbc1f00dce4c311191c4684cfd6788746cd171512348f265c80b768b877ba912cf0709efbad9ee4aa7cf6442576eae\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9ea8cf9b8e2b81dc25b01ad55ea97de9e68d721c2643283b83009601a0f4c4bcc98b18bbf21474638380ee9abede795ce266b5c0b5f1e3dd0c265ae131d7858d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"861d46655f58d911a63410cda1641852bc578fc4565462a690629ee835074f9f52e0c9922180b4df79aab4283c9ba474db626629d57627ca2a05b75edba9d247\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-linux-x64.tar.gz\",\n            \"hash\": \"249db1382db95b9e60e4068c253c5381b2b37f30cf815471b623584b690a09ae5f04ef4085e02d2a2950041682188997b1f8e39bad6d5ecc05fb239576ffc1f7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-osx-arm64.tar.gz\",\n            \"hash\": \"c984f4759877fd79e95e5ad3880245ed713123eb362f1a9d744687ed9d499a92b8f5582cafca51f3b30705f27fa6cadebecea6c66ef4c3b413f29d2f82d63da0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-osx-x64.tar.gz\",\n            \"hash\": \"40b115bb2a9880bca046310be7aaa426ee53190b8f891896cd0266127291a74a01e1e3df564ab4af2e8feb18109de53b45120012f2e069298dd868b98551843d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-win-arm64.zip\",\n            \"hash\": \"321d3560e5cb484ca9e5730c4f5365ad5a294fb19f0a91ac5819c5734eca3ee74cf1a8cd2c61654f291505afbd265df6f17612a5ce2255fb431ee7173b81b538\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-win-x64.exe\",\n            \"hash\": \"1b579b1ddcaa75d767591d7fa8fdd1b4136ecf7efe5d4e289f8951e5bf709da9ee92d981beafb4ff0ab10df6729f436c0526c5063df06c322b895091c9f456a7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-win-x64.zip\",\n            \"hash\": \"f5d70b5d1c067d8463e83351d77b4102c80d2a7b0290daa9edf9b5d3c5efbaa7a9da7c06356991f25f0720d2adf9f6f4ce4b093e9a9657e9212399136e34ea82\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-win-x86.exe\",\n            \"hash\": \"a443276aec2061472a467d5c6b0d8cab589944613afb686e8e42091a4220512e9c84d93f352e9fecc3c3b0bc02a31804ac3077c6e9ef4813b8f357513a6d78b2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/aspnetcore-runtime-6.0.0-preview.4.21253.5-win-x86.zip\",\n            \"hash\": \"ed92e4f2675ce12f4ffbc786a3d499aeb0369337ecb99234357ce1fa10562bd4df8a845aa78a331dabece8d7dd3e4f3cdbd5af24151a7a18772e1ea198c54b59\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.4.21253.5/dotnet-hosting-6.0.0-preview.4.21253.5-win.exe\",\n            \"hash\": \"9840ab644475390cfe4d26c3fba075317df592a425f1788542f25cd551f2b963412c6ecb7635c6800d060399ccffc77171006dc688b9ea3aa98c5a27ad266eee\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0-preview.4.21254.5\",\n        \"version-display\": \"6.0.0-preview.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.4.21254.5/windowsdesktop-runtime-6.0.0-preview.4.21254.5-win-arm64.exe\",\n            \"hash\": \"b95442cf1df95291e800928cafd3429c16f69186c56da8b91fc60fcf42e9c3e9f541533b9b1ec8612d840c6dfcc4e3f920d3ae699d2dd386ebf5b10841acb090\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.4.21254.5/windowsdesktop-runtime-6.0.0-preview.4.21254.5-win-x64.exe\",\n            \"hash\": \"db43650ef0a7646745067b1773477aca34d4858390e3ecfd463a108bd97ab3b31601e2434e030439e11d4512274d9cd03c937c5505399723a6c8185a863bf403\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.4.21254.5/windowsdesktop-runtime-6.0.0-preview.4.21254.5-win-x86.exe\",\n            \"hash\": \"b5b8e51dfe3242617b9b2971fb3ba76d58642573892a3e906d0340125e45c89c617d996930a86cf4d1583c7b5cf1972f6b00e8d31ae37844fd62f0b8c27a3f3a\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-04-08\",\n      \"release-version\": \"6.0.0-preview.3\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/preview/6.0.0-preview.3.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0-preview.3.21201.4\",\n        \"version-display\": \"6.0.0-preview.3\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-linux-arm.tar.gz\",\n            \"hash\": \"02ede5efac794b181719642771156d5b9759f52d90fe7c05edc5e5ec6f9ee22fa03ebebce29f4aef0c74399d468429ac335cae2f636c87566f33d8c04be2604e\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-linux-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-linux-arm64.tar.gz\",\n            \"hash\": \"8a5f4d26d8b98adb6402e6e1fff21ee1cfdca42dfc5a596d59c79cabd154d1756db5269e6f6e0671911bdeaebbb1047a449298abbac049686741ae70802ce31c\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-linux-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"0f02c0ef041c47de6add3e8690d88bd787f24a6b62054899765eee73e25b75bcc185146bcfce6b8502aac29b6f0897935718260f6553b5dc9e7bd781c3fa58bc\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-linux-musl-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"635fa684a4dfffc0f4eaf1e6d383170e7ae17c3646df6e23d1b9d4e8cd790588059b0a54ee0bb46f04ef30de12605bbd9a42dab0d2315c514a4f4966fe9e56ae\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-linux-musl-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"02ef46d6d2812319734be36213d5a9276a79bc483f86e2312b26df94d7af3ad7b7bb7f512c92a022cbb64742743c945f601035bd6ce02ea77a3baedddcf1f740\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-linux-musl-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-linux-x64.tar.gz\",\n            \"hash\": \"8a6623d4ab32b24ce7cc507582309f38735419e93992f7a0180494c09cf1ec7d597fa1fcc23c90efedf6be1b1a47d36e9061c998d2713e40bbd94b61649f7ff9\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-linux-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-osx-arm64.pkg\",\n            \"hash\": \"505003d4d65229b14d26b378a2c1467a9eb81cb03a90094d65c6abba622be9d5f2947e50138803dffb852945c4d76742cb32e3154cd91ddbec4a71f8a27aa2be\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-osx-arm64.pkg\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-osx-arm64.tar.gz\",\n            \"hash\": \"35b669f31f1df65af4427f843e2bcb771d2122240bfce3a229d36b00f91cf8f003934931ed38cc696b9ce2b5c1f4479f4f59a9815954caaf66750f1d33d8351b\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-osx-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-osx-x64.pkg\",\n            \"hash\": \"cff3680e5ade20b4d4165e5b8ac194869debaaeff3a3f4d5489856c2d348846beb8141d31bc6eba83eec25e36949a5b66c30cdadc962e35c6f4415a5a4575e75\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-osx-x64.pkg\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-osx-x64.tar.gz\",\n            \"hash\": \"0a9c97231ca8cc488dd16e967e60b70e23f89c84208c09860d053f4664c06a29aa62809472ff7054361dc529aa68cee62cd01f74814c1fa29bcfcc5c6c26ce60\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-osx-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-win-arm64.exe\",\n            \"hash\": \"3aa64a0dafa5fe31ce21f7471b1d47f8241bd89f932ef97a31516deb3a16f22345582d31bcc71fc0cfb68a5a2462fa4b21fd45231d2f01a9a4f210e503a38abf\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-win-arm64.exe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-win-arm64.zip\",\n            \"hash\": \"5062a2d53d49d7a9dc50dddac06305f23c36a568beeda3b5676beda550fe20ce4f28b6ad582a15bc7da46f4ea6e6449227317fc6e0fe122621d05af12d8193f8\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-win-arm64.zip\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-win-x64.exe\",\n            \"hash\": \"524732b3f796cbfae5bdbe395ad25a7090b0b2d74a72b45349aa05ab3c555f59f6f96b74df27b4f7d240a9ce57d8f1f76373fa61c3ada1daad371f8abbb07cc9\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-win-x64.exe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-win-x64.zip\",\n            \"hash\": \"c6eaafce3eb7dc97fe3104d31c36b6c6d9c8b34eb61f7d286c7e2c1a640f1cbd150fa5ff2db19664baa2701048803011e582c9e9524246384bfdd386676fdade\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-win-x64.zip\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-win-x86.exe\",\n            \"hash\": \"7d9d20a133513fba6b29f452bc4525e92f83b338bb8fd907e7a8c2be7986a0c678edc7ed50f8db4fd39827779d50788b5ae2d3bc8fc26289f34042704dedec99\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-win-x86.exe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.3.21201.4/dotnet-runtime-6.0.0-preview.3.21201.4-win-x86.zip\",\n            \"hash\": \"a5f83c068a2a88758157b94862f6daa3627fc668a742227fb9e3a3a4865ab415cdcb2792978f701f6d57893d0772fd15d8df9e8c99d6999141bd257422a4f8d5\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/dotnet-runtime-win-x86.zip\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100-preview.3.21202.5\",\n        \"version-display\": \"6.0.100-preview.3\",\n        \"runtime-version\": \"6.0.0-preview.3.21201.4\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2019 (v16.10 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-arm.tar.gz\",\n            \"hash\": \"feff4ca8600c48482a4a4cf2863d16e36c4a33e46b1b56567e8acf7599d7ea71feb2bb1715a43e989c26148ea2c5024353114e687c290632fa12f18d184a5ca9\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-arm64.tar.gz\",\n            \"hash\": \"ee658e35f7917c5681d1f71ad3f82f4f2975d66a9b747ec5b5d58629b75c22fb6f31532b5423ad75b2e92ef333179948b52dd5507eadd9f3431e5638d98268d9\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"c8ca2541bef18298ea5744bbc2c5a9271d0f34e593956bda1337a22d4d16d9644349e804d793886681bab5774f2983142c7dc9e723a236c53f34c9c7181ac3ab\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-musl-arm.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1ec6f1c367f43bdce124db5de864639a2d8287e8029da8994e4069fe53b4eef93c7a688178375da09b7eee721aade4996fd5b760f4e7e1cd41faface14844ea0\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-musl-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"1713b4d2e237122d11e54bdaa6cc14dd64a485212493adaf6ccb09b821cef1893c6685b1c6ec32523f2e9f7ca743b051f52133552a1c7dc34d5539b27b05628c\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-musl-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-x64.tar.gz\",\n            \"hash\": \"f776177c1ca2b672cf05f9ec32f20ef35a039dd8d31beaa139d1e47d71cca4ccf0f2a61bbf006a781e693977ee91cc9e08e12134ffb4c7a03a8e56c163b8661d\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.zip\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-x64.zip\",\n            \"hash\": \"e0c3947609b2fbe713b705cba1e1cd7ae5c42121af5ac0cada0046e7ac2debad4aa6cd9853d4f26f2a29c8796edbee9e379c9d518a56486e3591dd8a7604cf66\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-x64.zip\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-osx-arm64.pkg\",\n            \"hash\": \"dbe60ac71ed79d65a55eedaeef329c521ee8644e91f78846354c7731c8e0dfe94ae651ee585751c78a9a5488d8c8f842014469cbec124a992093c3307a91c062\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-osx-arm64.pkg\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-osx-arm64.tar.gz\",\n            \"hash\": \"427d71b95f678b4b1f5bcc19d5cc1da6180fe276582709ea55e62602924e883493cfe48fecc951091c1eda7ddbcac214fcde6dc3b20bf83942ce20f09182e8c2\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-osx-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-osx-x64.pkg\",\n            \"hash\": \"588c25d8ce2dc28c3f915dcbc6c34879db7e985b16a331bca9aa68aa67f38b1a3de8a1f7399845c9eb94ca1171fd7ca2b77d40a312298429372f14d5542fd6b5\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-osx-x64.pkg\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-osx-x64.tar.gz\",\n            \"hash\": \"65fa25483d9f2d4d389d5e70f6544cbf635ee18a73b00f60ab6bd5fdeba5206b99ed9bb1882af4df3987f8de2ffa1461d7b9d68ed48c9fc1f9f82f7d188234a6\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-osx-x64.tar.gz\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-arm64.exe\",\n            \"hash\": \"16351b1bf36bd29c0335b1d40623102ab813a4e117ff1395bec64a15ecb67f6ffcd44c990c51f7b5ad17b4b94c98ef0d84a94287d3899be68ff80907c63201a3\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-arm64.exe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-arm64.zip\",\n            \"hash\": \"c0eb8327a8147232130314248f5c181c00022832af491c2fb2518fe8c998b23651f47fcd54fc5311a5c04f5dc631ceb9f874a8dd2025d0dafc43d7c7b7c912c2\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-arm64.zip\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-x64.exe\",\n            \"hash\": \"0178ad09b49d2c404d6bacfb796777188483954b412659ea39ef90b44d3d365bd8edaead89b0eea197f75a62a4d30644d014efd5b5ef39867323b9c6a6cf2896\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-x64.exe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-x64.zip\",\n            \"hash\": \"38fc6d76ef0d2331fcc32319be17edf4887443ad7504131041a12026340f7418227b85aa597d7ecb6c4a57cfd928004c6511455cedc6dcee42284793f66146cf\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-x64.zip\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-x86.exe\",\n            \"hash\": \"c7c095035615de287fa365cd17865da3232f73726e7fa0005447f2c609266f404e60141bff931a0ec0604d36531de6d90d08cd16b2e31009953358329abedc60\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-x86.exe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-x86.zip\",\n            \"hash\": \"deae2138d5706c47963215711dbb037f07e135a75bd52d2447d4e39d2b08b177064b09518f99298a1fb6e82b4d8cc3e1ee410cf108ec4681c5917aa83a619a44\",\n            \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-x86.zip\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100-preview.3.21202.5\",\n          \"version-display\": \"6.0.100-preview.3\",\n          \"runtime-version\": \"6.0.0-preview.3.21201.4\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2019 (v16.10 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-arm.tar.gz\",\n              \"hash\": \"feff4ca8600c48482a4a4cf2863d16e36c4a33e46b1b56567e8acf7599d7ea71feb2bb1715a43e989c26148ea2c5024353114e687c290632fa12f18d184a5ca9\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-arm.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-arm64.tar.gz\",\n              \"hash\": \"ee658e35f7917c5681d1f71ad3f82f4f2975d66a9b747ec5b5d58629b75c22fb6f31532b5423ad75b2e92ef333179948b52dd5507eadd9f3431e5638d98268d9\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-arm64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-musl-arm.tar.gz\",\n              \"hash\": \"c8ca2541bef18298ea5744bbc2c5a9271d0f34e593956bda1337a22d4d16d9644349e804d793886681bab5774f2983142c7dc9e723a236c53f34c9c7181ac3ab\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-musl-arm.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1ec6f1c367f43bdce124db5de864639a2d8287e8029da8994e4069fe53b4eef93c7a688178375da09b7eee721aade4996fd5b760f4e7e1cd41faface14844ea0\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-musl-arm64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-musl-x64.tar.gz\",\n              \"hash\": \"1713b4d2e237122d11e54bdaa6cc14dd64a485212493adaf6ccb09b821cef1893c6685b1c6ec32523f2e9f7ca743b051f52133552a1c7dc34d5539b27b05628c\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-musl-x64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-x64.tar.gz\",\n              \"hash\": \"f776177c1ca2b672cf05f9ec32f20ef35a039dd8d31beaa139d1e47d71cca4ccf0f2a61bbf006a781e693977ee91cc9e08e12134ffb4c7a03a8e56c163b8661d\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-x64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.zip\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-linux-x64.zip\",\n              \"hash\": \"e0c3947609b2fbe713b705cba1e1cd7ae5c42121af5ac0cada0046e7ac2debad4aa6cd9853d4f26f2a29c8796edbee9e379c9d518a56486e3591dd8a7604cf66\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-linux-x64.zip\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-osx-arm64.pkg\",\n              \"hash\": \"dbe60ac71ed79d65a55eedaeef329c521ee8644e91f78846354c7731c8e0dfe94ae651ee585751c78a9a5488d8c8f842014469cbec124a992093c3307a91c062\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-osx-arm64.pkg\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-osx-arm64.tar.gz\",\n              \"hash\": \"427d71b95f678b4b1f5bcc19d5cc1da6180fe276582709ea55e62602924e883493cfe48fecc951091c1eda7ddbcac214fcde6dc3b20bf83942ce20f09182e8c2\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-osx-arm64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-osx-x64.pkg\",\n              \"hash\": \"588c25d8ce2dc28c3f915dcbc6c34879db7e985b16a331bca9aa68aa67f38b1a3de8a1f7399845c9eb94ca1171fd7ca2b77d40a312298429372f14d5542fd6b5\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-osx-x64.pkg\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-osx-x64.tar.gz\",\n              \"hash\": \"65fa25483d9f2d4d389d5e70f6544cbf635ee18a73b00f60ab6bd5fdeba5206b99ed9bb1882af4df3987f8de2ffa1461d7b9d68ed48c9fc1f9f82f7d188234a6\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-osx-x64.tar.gz\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-arm64.exe\",\n              \"hash\": \"16351b1bf36bd29c0335b1d40623102ab813a4e117ff1395bec64a15ecb67f6ffcd44c990c51f7b5ad17b4b94c98ef0d84a94287d3899be68ff80907c63201a3\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-arm64.exe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-arm64.zip\",\n              \"hash\": \"c0eb8327a8147232130314248f5c181c00022832af491c2fb2518fe8c998b23651f47fcd54fc5311a5c04f5dc631ceb9f874a8dd2025d0dafc43d7c7b7c912c2\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-arm64.zip\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-x64.exe\",\n              \"hash\": \"0178ad09b49d2c404d6bacfb796777188483954b412659ea39ef90b44d3d365bd8edaead89b0eea197f75a62a4d30644d014efd5b5ef39867323b9c6a6cf2896\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-x64.exe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-x64.zip\",\n              \"hash\": \"38fc6d76ef0d2331fcc32319be17edf4887443ad7504131041a12026340f7418227b85aa597d7ecb6c4a57cfd928004c6511455cedc6dcee42284793f66146cf\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-x64.zip\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-x86.exe\",\n              \"hash\": \"c7c095035615de287fa365cd17865da3232f73726e7fa0005447f2c609266f404e60141bff931a0ec0604d36531de6d90d08cd16b2e31009953358329abedc60\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-x86.exe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.3.21202.5/dotnet-sdk-6.0.100-preview.3.21202.5-win-x86.zip\",\n              \"hash\": \"deae2138d5706c47963215711dbb037f07e135a75bd52d2447d4e39d2b08b177064b09518f99298a1fb6e82b4d8cc3e1ee410cf108ec4681c5917aa83a619a44\",\n              \"akams\": \"https://aka.ms/dotnet/6.0.1xx-preview3/preview/dotnet-sdk-win-x86.zip\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0-preview.3.21201.13\",\n        \"version-display\": \"6.0.0-preview.3\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21092.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-linux-arm.tar.gz\",\n            \"hash\": \"8514f9455e38c8640f650534742f77b892f0cf6ab4968df702acd9f44afda2a5ae98557d2c4482316c3268ec4bf1f78dcb40e4c729afad77030f45bcad3cffda\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-linux-arm.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-linux-arm64.tar.gz\",\n            \"hash\": \"9006cd8a03d03cdbaa2ab9ac76e370fcec9afa77cc6a333eb08468a2fc456fbd36da14b9992102d948f8e698f3370dde6d1568a99912898a19b42d30193bb5f1\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-linux-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"afd79e40125db4fc6907b4900060f76590762555d89c4baefb9fd87cd4e522db5144e59d777c7c9ecc51c9478b8f61cb921a8f17b48e36940f1e4cf7f1b24e09\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-linux-musl-arm.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"09211c57972a5b2751cf6ba8947d62088974e73fdd1db4e52674dd460dc743ed58180e89434563170b99d735eec0fb88ac4c641076cbfe618c5d83a7708d9925\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-linux-musl-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"80d451713218d1d0ce89d5d0e5205d82811e0a58aac299403cb7fd305f5f70acbe3b21854d2ff85d7666a48a083571c7ea661c7499f8900cac6571732876f831\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-linux-musl-x64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-linux-x64.tar.gz\",\n            \"hash\": \"05abefd3c1c8f0ffb911e270cf949be144af660e5755af3b1801db4d41beb7234b889ecf1fbb3aeb9f3b51324b4b225c4adc8537fd2f16d61829bd91713f8f1f\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-linux-x64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-osx-arm64.tar.gz\",\n            \"hash\": \"80d4650094d90e83a098547d7af30605518f7172f17c16e203a8dfbc846914cc4a2a7e730ca61b9fa6813e161ded1beb28dac8091c003916b7dabafd4cacad87\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-osx-arm64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-osx-x64.tar.gz\",\n            \"hash\": \"c1623bb443169f4ec163063eab9241c79a58c87fcddbe1224e11313719a79b8f6a5301ecc5134ea8c9f59ba8ef1146c0c81ce9f4aeeb81b83e6d1abc4accb547\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-osx-x64.tar.gz\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-win-arm64.zip\",\n            \"hash\": \"73b599b8358704ab2446bff93d203ae464637f647f8c17393ac6b4c426802920c8fe1d18a8fbb9cca9711c4fabdb1e38f60122b57cd05393f1c2e14ccf6dbe91\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-win-arm64.zip\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-win-x64.exe\",\n            \"hash\": \"364a21be8f459451ac2e91c9262e361ab49b7612e638ecd413cf8b75542a03d2615e98d079af6ffab614498d498c15f35ff382898f307ce3cbdf336c24b0c802\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-win-x64.exe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-win-x64.zip\",\n            \"hash\": \"845dd47a19169916a5bfc509f900cdd5309abf99f608a8a9cd6122e7393aec394c811ea7425de53e614e302304500fd98bedaae52c72551ba7d9c055d4610043\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-win-x64.zip\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-win-x86.exe\",\n            \"hash\": \"6640e9d519a1528a05d28c9107ba331883c0bbb278a76079b8309cc3f3528ce5134191f34f2dd0a772b6bc5fe422cac437beba91a6d5c6fa0629b8364809aea3\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-win-x86.exe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/aspnetcore-runtime-6.0.0-preview.3.21201.13-win-x86.zip\",\n            \"hash\": \"52be1d195dde2bb174f2362739ce83d3030453e7cdad94e2f1ce6a067b3cf6ec1f0e867527ee90df49b049a62256c6d12f9859b60646f2ecc03e20709a1e2efd\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/aspnetcore-runtime-win-x86.zip\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.3.21201.13/dotnet-hosting-6.0.0-preview.3.21201.13-win.exe\",\n            \"hash\": \"f612d7e12fb405fddaf9b6102fd823de82e753ddff9a7821a2bbf7b94fe3acd74775ba6a0f5a8efb94ded6d7ec8b471172a70b95ae930febcd2f6629bb035c83\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0-preview.3.21201.3\",\n        \"version-display\": \"6.0.0-preview.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.3.21201.3/windowsdesktop-runtime-6.0.0-preview.3.21201.3-win-arm64.exe\",\n            \"hash\": \"77e8053751825ce89535d7b65087ab5266fb6014d3736c6970fb2de22902837423ebaa42335d5564883dea949b0f87a842b7f78fe670070c01f487384c2cf1f2\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/windowsdesktop-runtime-win-arm64.exe\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.3.21201.3/windowsdesktop-runtime-6.0.0-preview.3.21201.3-win-x64.exe\",\n            \"hash\": \"10b59ea607d43b7b112ba7179848f8052c754bcee4803673b1415599ee33aca929609bab9d597c0f3a30afa1db54ed9f40cd96ce278994cf1edb96663ba5fa2f\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/windowsdesktop-runtime-win-x64.exe\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.3.21201.3/windowsdesktop-runtime-6.0.0-preview.3.21201.3-win-x86.exe\",\n            \"hash\": \"4d209ff7ec09b9186d3cd9a8c4c39308175b2c66585ddbb5b43452683473b231a57c6b74dc63434fb8d12790505ebc2171889c479516583a1b23d047db9dc52c\",\n            \"akams\": \"https://aka.ms/dotnet/6.0-preview3/preview/windowsdesktop-runtime-win-x86.exe\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-03-11\",\n      \"release-version\": \"6.0.0-preview.2\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/preview/6.0.0-preview.2.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0-preview.2.21154.6\",\n        \"version-display\": \"6.0.0-preview.2\",\n        \"vs-version\": \"16.9\",\n        \"vs-mac-version\": \"8.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-linux-arm.tar.gz\",\n            \"hash\": \"212a01b3910e58b23911b41b70902b77f3c110521657fd0e00ddb3ce99da3a62139bab29e2a8c679ade07a1a478c8b983bd06e985600739bee273424ef2c0906\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-linux-arm64.tar.gz\",\n            \"hash\": \"e24196fda89b2c2576e8260adcae966cc5d6831f78bbfaa3d420e7e335cde7559204d0a7c130a7e21909cde21fea421be8251f877f73b649c5c2c4513e11dfc9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2f41731749ecdf2255f734749631534e9afc1317e97da41588eae94a5dcb45b2a5e97b57c0abfd0dddc2fb7bc9632377bf56977825567310815eb8c23cd930d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"a562ee9bb11f9b572478bf8d773734bdcc25e1a82f818c5f5eff402066d2844f1d99b458d8b6611c60222c8f3b5236fc3b6eb70ef0939a29368c2cf12696aec9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-linux-x64.tar.gz\",\n            \"hash\": \"88ba8c4fe252fb76e0c40a4dcd2fe3e9c2960f445dd97a8044be9900f3641f18b2687ec10a36545a141a1e6820bb61278d2047cacd93365954a124c92463b17b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-osx-arm64.pkg\",\n            \"hash\": \"7710903e7b1c7423bf863b95a78a3c62f51b9dff13c9055cfc4f7ec93c6fe7a4b7597d0cd89a2579ee3c449cdf99d0e1d7c2e68a364d52e62a1814e9a538c3f6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-osx-arm64.tar.gz\",\n            \"hash\": \"759af37378d4db3ce6961872baaac333851d3152df0990507716a31abc3f8c115a709994ab037adeb45814d54c7e7ce1ba27d49684a4485c38533627a0042df9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-osx-x64.pkg\",\n            \"hash\": \"f84c1c77d9079cf75ab2dd30b4bbe1b55946eef890909e75ee51327ecc69cd90281c116d0092e5eeb646e2da73478a903bb023db31ea8d998fe3b7c2ab0007f2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-osx-x64.tar.gz\",\n            \"hash\": \"4a6d4577a35d08eec28c0f33f62be94202ce831d263380c4c30c5cd8490eab88a9947d21bee58744e0380a26fd0a9247eb730fb2dd243513c68f97bfa45b55d0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-win-arm64.exe\",\n            \"hash\": \"9b6be99ae6e839e711faa96324b5e8c7b66b5f2d90cb06be233b73e1bd67fc8b259ef62274336f90b490f16782f08ee15fde1e98fee539bff396b59448075bbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-win-arm64.zip\",\n            \"hash\": \"c315b97bf30a419e71fc2242997fc051d46efd935d70f09aa2d3d61075e6cdb8fcda93d1138e3d4c3a316df276dbae3e9c805045acc404aea0342c4dc7a05781\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-win-x64.exe\",\n            \"hash\": \"1d53a7a0affdf1b074db6347af4c62757b9d4906e55d3ab2d735fc565daa151cd0911b7d9e43cd5601133485360e429f11a163a7c9c2e130610b698e270005f9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-win-x64.zip\",\n            \"hash\": \"353bb6e108abf76ff4621db570a853effdb1969b73c59643b7b78cc60e43bc5ff3572e789032aa384a5cb668d31173b75476702fb23caad1ae438578ea1f27ee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-win-x86.exe\",\n            \"hash\": \"ceb3b2817937f8977ae38c18c6bb635c70cc52d3b9ce4871d3cff1c7a4f7ae907674923b1061c1c06bf0e4f0e3ab7a09b9047a117e12db04073a102a5867fa1d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.2.21154.6/dotnet-runtime-6.0.0-preview.2.21154.6-win-x86.zip\",\n            \"hash\": \"2640b109e0c64010f9e50edb2c8583d8ea81a704d02f6e0044336367bd9aee94c1c3cb094c0f107f6e56f23446cf227ce162095b29df03cb70101aa9e5b0d52c\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100-preview.2.21155.3\",\n        \"version-display\": \"6.0.100-preview.2\",\n        \"runtime-version\": \"6.0.0-preview.2.21154.6\",\n        \"vs-version\": \"16.9\",\n        \"vs-mac-version\": \"8.9\",\n        \"vs-support\": \"Visual Studio 2019 (v16.9 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-arm.tar.gz\",\n            \"hash\": \"82adee2db3b57388bd0d48e5eaab64e5e6bece462d49cc0161c8b3b7559ecbc764d48ad112c7893f86858610e21342c7ca50ee1e090a4ddfd09483c24f6e5c63\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-arm64.tar.gz\",\n            \"hash\": \"91796b6d611b3a8c1e85d8f2fd07f8889d15f4bcab7307cd1ca24c51cc1f352e3bb77f0e6219ddf92b210030feeffe18ebd1ab97b4256202e287e7e7a5236df0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9b4fb5eab781a7ac06e8e1c4d5e5484d714d890762787ed7a81778ebdfa9fd9db6c2c6eb0432b663a4d4b9a435b2b7ec945415b47d6e3a1a6e5bb99e2d1dfc0d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"116ca2b5d7aede990bfe9d15918909857d15c9a64fa39faa20374fced4c82110a03484ca8c49ae17fefe4540b3c6c9dee6c13127400c1c93636800b07fa1d9f6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-x64.tar.gz\",\n            \"hash\": \"90d9b6070f7732dcf75f5a09a4f10f9b23c835a3bb144e0c3f1fa451cadd3d49c9781973b180f70a4d2798358a7c00f3c0b9b3bf35326fe4c94e470e84ac8c35\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-osx-arm64.pkg\",\n            \"hash\": \"b76cf55453269c34b19797aa86f84a176ae3c87de58f11edb1e57831f76c672f5d0fe64a61a98b97bf3b2081e7975136a1d0f4c5f6d14f2b3d98febfb6c9bbaf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-osx-arm64.tar.gz\",\n            \"hash\": \"7e38c4a5d586458aad5b81378ac1245368d95a403047878bec49103d96ba3b24b51f991f4d01b7b36220c77cbe041da7708763f7011553eb3948624932a719f4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-osx-x64.pkg\",\n            \"hash\": \"bb063b1f5c07f8ba082073d2404704a9ff3e6d2f5aab50ff59e6f26863f0242b3287ccd94df0fee18c152f9841af8f05fb9ce615f026b524647b704e22772689\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-osx-x64.tar.gz\",\n            \"hash\": \"f86476980aed8a9520dfff22f54f9800195df611cddd08283e4d6475720eb1423d6e34356e1c21be30882f04348ca645b6992a56279df8fff845751178ac6dba\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-arm64.exe\",\n            \"hash\": \"d6a5034fbe8ca8321968345389cdd5d9a7e79204773a8e01b141eb24da5fb269aa00bcd932d624266d6a206079c809700d52b4a87d564824e5cf2a62312906d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-arm64.zip\",\n            \"hash\": \"af54e25b4d4c7f2e84ed35c7c25b4ea1aac9af0f59060f4dd29ab5e1b7a8bebb3080375d27b119750b356e74c4692e541036819a9cb4c9c4cf1cb7d49f2405e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-x64.exe\",\n            \"hash\": \"c49e168b4acdc17d15cc8c021d51b4300a1c19eb05ac0b4a879370199471afd09c0a51557e11a53b8b42c50be6710c6135a82662662f65dde1956f67304508d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-x64.zip\",\n            \"hash\": \"a56debdba83e7477c069aff43bf1fc7f552b68879ed6a36e4f3903dd121ab70a762acc2120b7cd95d5d45b8f762ae71dfa2fd8b3b6165673ac2e7251682a1f6b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-x86.exe\",\n            \"hash\": \"fb71c70aa4a3faf59b861e915313dce548e94a49969c029b651c941ed900deee4fe3ff8399e402bb6b7f61a65f089078973a9916c7f1c52f2b0c8a547c120275\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-x86.zip\",\n            \"hash\": \"4b9b4db78152c648fcf316396f7af833b8a6b948dd005ced011dbf7ad0c55bc23835b148ce2da6949545c3003e726d4503fcc6dde9110541f6efd8973a82e1d2\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100-preview.2.21155.3\",\n          \"version-display\": \"6.0.100-preview.2\",\n          \"runtime-version\": \"6.0.0-preview.2.21154.6\",\n          \"vs-version\": \"16.9\",\n          \"vs-mac-version\": \"8.9\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-arm.tar.gz\",\n              \"hash\": \"82adee2db3b57388bd0d48e5eaab64e5e6bece462d49cc0161c8b3b7559ecbc764d48ad112c7893f86858610e21342c7ca50ee1e090a4ddfd09483c24f6e5c63\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-arm64.tar.gz\",\n              \"hash\": \"91796b6d611b3a8c1e85d8f2fd07f8889d15f4bcab7307cd1ca24c51cc1f352e3bb77f0e6219ddf92b210030feeffe18ebd1ab97b4256202e287e7e7a5236df0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-musl-arm64.tar.gz\",\n              \"hash\": \"9b4fb5eab781a7ac06e8e1c4d5e5484d714d890762787ed7a81778ebdfa9fd9db6c2c6eb0432b663a4d4b9a435b2b7ec945415b47d6e3a1a6e5bb99e2d1dfc0d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-musl-x64.tar.gz\",\n              \"hash\": \"116ca2b5d7aede990bfe9d15918909857d15c9a64fa39faa20374fced4c82110a03484ca8c49ae17fefe4540b3c6c9dee6c13127400c1c93636800b07fa1d9f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-linux-x64.tar.gz\",\n              \"hash\": \"90d9b6070f7732dcf75f5a09a4f10f9b23c835a3bb144e0c3f1fa451cadd3d49c9781973b180f70a4d2798358a7c00f3c0b9b3bf35326fe4c94e470e84ac8c35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-osx-arm64.pkg\",\n              \"hash\": \"b76cf55453269c34b19797aa86f84a176ae3c87de58f11edb1e57831f76c672f5d0fe64a61a98b97bf3b2081e7975136a1d0f4c5f6d14f2b3d98febfb6c9bbaf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-osx-arm64.tar.gz\",\n              \"hash\": \"7e38c4a5d586458aad5b81378ac1245368d95a403047878bec49103d96ba3b24b51f991f4d01b7b36220c77cbe041da7708763f7011553eb3948624932a719f4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-osx-x64.pkg\",\n              \"hash\": \"bb063b1f5c07f8ba082073d2404704a9ff3e6d2f5aab50ff59e6f26863f0242b3287ccd94df0fee18c152f9841af8f05fb9ce615f026b524647b704e22772689\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-osx-x64.tar.gz\",\n              \"hash\": \"f86476980aed8a9520dfff22f54f9800195df611cddd08283e4d6475720eb1423d6e34356e1c21be30882f04348ca645b6992a56279df8fff845751178ac6dba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-arm64.exe\",\n              \"hash\": \"d6a5034fbe8ca8321968345389cdd5d9a7e79204773a8e01b141eb24da5fb269aa00bcd932d624266d6a206079c809700d52b4a87d564824e5cf2a62312906d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-arm64.zip\",\n              \"hash\": \"af54e25b4d4c7f2e84ed35c7c25b4ea1aac9af0f59060f4dd29ab5e1b7a8bebb3080375d27b119750b356e74c4692e541036819a9cb4c9c4cf1cb7d49f2405e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-x64.exe\",\n              \"hash\": \"c49e168b4acdc17d15cc8c021d51b4300a1c19eb05ac0b4a879370199471afd09c0a51557e11a53b8b42c50be6710c6135a82662662f65dde1956f67304508d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-x64.zip\",\n              \"hash\": \"a56debdba83e7477c069aff43bf1fc7f552b68879ed6a36e4f3903dd121ab70a762acc2120b7cd95d5d45b8f762ae71dfa2fd8b3b6165673ac2e7251682a1f6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-x86.exe\",\n              \"hash\": \"fb71c70aa4a3faf59b861e915313dce548e94a49969c029b651c941ed900deee4fe3ff8399e402bb6b7f61a65f089078973a9916c7f1c52f2b0c8a547c120275\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.2.21155.3/dotnet-sdk-6.0.100-preview.2.21155.3-win-x86.zip\",\n              \"hash\": \"4b9b4db78152c648fcf316396f7af833b8a6b948dd005ced011dbf7ad0c55bc23835b148ce2da6949545c3003e726d4503fcc6dde9110541f6efd8973a82e1d2\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0-preview.2.21154.6\",\n        \"version-display\": \"6.0.0-preview.2\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21063.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-linux-arm.tar.gz\",\n            \"hash\": \"eb2b0a3c725a3b0f9265b992385a39efe15ba1eba0060388a84497b464faea5fe8b51ce0ff49cf6058e5539a86587d6b68d41a0a18ba7e3d20c6a4d9585dc13d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-linux-arm64.tar.gz\",\n            \"hash\": \"0400434b2d77e74fa4b347e65ae88905d3715fd76ecf6562a2ec7ddd7a54a00b92bb39c272a383dddd134d82b340cbd4658bc4661a53059e1e5227cd61c154b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"32d64a450c17e859fedfe27478279a039982773c2a2d8dffecaadace89d84df555a894a25bd7b2466d67e288b65d85dd2391b24c5f994e5df9e5f6e01f9fb6ea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"12ea6d2188fa5e9ea9248600b84cbb37836e3c26edacfff291b00c8eddf5db730b5d01a003f7a1049610d99a76f6e690db04e7b7877679db93e19b2941ae238a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-linux-x64.tar.gz\",\n            \"hash\": \"703d6893bc73aba1a33e12b636820ab43948603114e01bbcc6a92d17439bd3d532525c17dc1d39f925b552b139b1ae9b9cbf086a57292db511eadc3e47db00ae\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-osx-arm64.tar.gz\",\n            \"hash\": \"4ac574f16754593d896a85145640b1ee1817c607d1273bef6c1ab3abcedf024511d1aee35e24605cc56ca098585db473d17131ccc3e6d69c05376708fedc519f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-osx-x64.tar.gz\",\n            \"hash\": \"cee32d184037f858b26b4acb1e7d12179185bf771d2ca30c6e5db2768377194d40b2558166332b6d5b340c89fbd4e86e5d079185dd048942e8d34f540a7d89a4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-win-arm64.zip\",\n            \"hash\": \"a793b45b71c55adecaae5c683e6cb3758beb303eb763cfff2c8af9657bfa2d8a4aa6391d69f48e2aeb4748a4b225742f0ce66a18656c4ac5c6e81618b63f91fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-win-x64.exe\",\n            \"hash\": \"35c4dbc50ef35cfd54671670eeade78b411102904852c0f6c3d0452cfa9b9ff3e920538523e2fd47c990f87d1fcfd2f1ad9ef89de705aebf4c2c901f9ec512fd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-win-x64.zip\",\n            \"hash\": \"ceb0ff56966c13dedae34c216598b68369d1a0f93f0815e31dec544560dfdcd0dd8bb3ab60c9aa48739a72cf6b1a71bbe058edc3adbdadb6261e6e06f5c665e0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-win-x86.exe\",\n            \"hash\": \"5054ca4f7caa3b24951f7ed806ff30519f184c87eba47de2256737a6ab3d31faf52b14954e5ae4224bb8ff742a44c4631645e3d11f7708950d9e87b30e2cf6a3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/aspnetcore-runtime-6.0.0-preview.2.21154.6-win-x86.zip\",\n            \"hash\": \"9f059ea6d2100d43440af035c1fed75c8bd557678c9aad39c04f69cd9ae646c263ffbc5d5a7b51b767abc9095a6e99e2bb80aa3171e1506987767af724f32c65\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.2.21154.6/dotnet-hosting-6.0.0-preview.2.21154.6-win.exe\",\n            \"hash\": \"48afc2174599b0517d7cccf22841ad64b85e28d1c56ebb9415b6fa51e8d4636a3bc78ac32fb1f70bce1746e30327475034ee991b1a7d2279a398ad056ada6083\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0-preview.2.21154.2\",\n        \"version-display\": \"6.0.0-preview.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.2.21154.2/windowsdesktop-runtime-6.0.0-preview.2.21154.2-win-arm64.exe\",\n            \"hash\": \"0053197d93189df2f2903bbc439f54aaee0f7778756035d3ada637b682d923790f8a25981dff0d57c93d5ba935b819055a0f2be7ecd302647b1f58ea60f20233\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.2.21154.2/windowsdesktop-runtime-6.0.0-preview.2.21154.2-win-x64.exe\",\n            \"hash\": \"25d562ffd51e1285d48c2ea1dae953e2ea28854da39224aa1ce529fd9585a109dbe14fd9ee1ad724327a8d13563134fe9a1a5da885f4d7302d24f7deb2a2cfa1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.2.21154.2/windowsdesktop-runtime-6.0.0-preview.2.21154.2-win-x86.exe\",\n            \"hash\": \"1aed70644dd68899eebbbc57efec5c9a5a11633f1a9d5e42f5e6c676ffb71d68d3d31fcfc5c07de13247348963ba62a84cdab6b4fff80f5d704eb9596ab2d3d7\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2021-02-17\",\n      \"release-version\": \"6.0.0-preview.1\",\n      \"security\": false,\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/6.0/preview/6.0.0-preview.1.md\",\n      \"runtime\": {\n        \"version\": \"6.0.0-preview.1.21102.12\",\n        \"version-display\": \"6.0.0-preview.1\",\n        \"vs-version\": \"16.9\",\n        \"vs-mac-version\": \"8.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-linux-arm.tar.gz\",\n            \"hash\": \"42d9046cef8beeec7774e81cb160fff99d700a78f2e1d26b8a471dec4e727414e65197994ce200785b22d5f073e6402afdb92e62fc86ea38fc8814a1de52f6eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-linux-arm64.tar.gz\",\n            \"hash\": \"4844ab4ce5750d45b552c2bca3a507dae0202f8be7d990506a66940158666897077c0d045b7a7e136a772da3a18b2cf81c932b5874747268aece6846fdc44bb8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d0e0fac6b159714070d7cb9ac9f184538a8805257b1a362613c28e63998b4439d5e42789c07330747a70704ef2cc5044eca4b269de4ee3f53de68b1af8cc3735\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"06475f29a4bfc8af012a6560f26cfe9c32469263b7c690d73975a2a1790965b139c227dd72961488f774088c45a3ebc8955b13ed1ec070cec7dbda4b51ea4171\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-linux-x64.tar.gz\",\n            \"hash\": \"64114ea881981ed061eb22c97ae8cf5a85209b0a439d6640984e1b423bc934259bcd136484c26f038f19222a9068a5cd687229a8b9b0d0b55efacb0275da082d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-osx-x64.pkg\",\n            \"hash\": \"0c3771b56f9fa6b09063fb797e4c264cd7b3723d7cfda6aae5f3a8dfe19bc513acc393761a6b2fdf4dd0a35427fa40392e30969a0eb3076a7f4a1891fcff01c6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-osx-x64.tar.gz\",\n            \"hash\": \"767d1c264ada1dd5f73c403d663bdfeaaafefaf0545d6af1895d1c926dd32385601981fe949340cee5fa8c34698f12c9553b0aaf492d12b0d4288a6e5ea6da08\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-win-arm64.exe\",\n            \"hash\": \"97bb0f7b613a4a3abcc4d76d046d5696f84a105c8395105d39bc7b12150bd047900abe2d769d2fffd07d3b9c1b21295135abaf570c86f678a500315d174f7c6f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-win-arm64.zip\",\n            \"hash\": \"8d141409f6439b227e1165caa91450908e4d18132080d76da588a90c88d0c198196d1a2ba4dcb7b5ec5997bcab80a108f92184dde39e52b73b64b568daee7dfe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-win-x64.exe\",\n            \"hash\": \"bf94dc2a8e03280298327f7c5eb353f4f1a2854bdcd9b7fa44a30078a09a324b190a7af02d3f10167bb73272dbdf28a12df37b94368bec63c5fc93ffd2557c87\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-win-x64.zip\",\n            \"hash\": \"e183555b560fa23c86a6060136f8dc9bba0b79d54f673bf155c4843eed2c0a72ee57a06a0a588c70438c066c8093f46d83a077db6891dc21eaa182c8f83d405d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-win-x86.exe\",\n            \"hash\": \"0d0f1491b6c51a45422567894765e2e2117addab42e3b7b747dd5530ae8955c10239e304d2cf4065293fc38574c9c8eb92e50f8ee5ed6356a6892abfec7553ea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/6.0.0-preview.1.21102.12/dotnet-runtime-6.0.0-preview.1.21102.12-win-x86.zip\",\n            \"hash\": \"689730a9cd4f1917fd025cf8fc7f1981fc766e96144aced5097e9e8919b1b70644892ac1f25514ced6b0ba84e4fe719cf8b8f475095701c92406cbbbb3edfd28\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"6.0.100-preview.1.21103.13\",\n        \"version-display\": \"6.0.100-preview.1\",\n        \"runtime-version\": \"6.0.0-preview.1.21102.12\",\n        \"vs-version\": \"16.9\",\n        \"vs-mac-version\": \"8.9\",\n        \"vs-support\": \"Visual Studio 2019 (v16.9 Preview 4)\",\n        \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n        \"csharp-version\": \"9.0\",\n        \"fsharp-version\": \"5.0\",\n        \"vb-version\": \"16.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-linux-arm.tar.gz\",\n            \"hash\": \"05a5a0f9b3738042eedbce37105ceb95480ca8175d85ec7300c32949ee205a66b5e12583fff9f72d9161af56923842d388e6791f18aa7109a8c823461dd5d8d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-linux-arm64.tar.gz\",\n            \"hash\": \"fe79c1554bea30039390e6c9efe00623338fdeb1f471d8c74b41d43d38230d383e215859905f4c057bfd1ba027f7f157c4d5d215f961d3663aed60dcbe870add\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"4b8002f608e5354651b9d82fa8442bca68be730dfdb54d026763635185457a23e5e071421bb04de8f8254fe36cc2134b430aaacb363911fd93276b7c34ad935c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-linux-x64.tar.gz\",\n            \"hash\": \"86f591c70c73732030210e8e7ce39b7b4e4a680098862e340a4a8726bcb3f981f0748baec0fce8c5c4a8615670a72ab92bfad8d0dc0a305401bbc5864116996a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-osx-x64.pkg\",\n            \"hash\": \"0e429d21e9c12f79fa8875670574d123389a4928d3c18d7fcd18fff50cdabb3faa8a2617011a9045b472b2192bcc4c5d5656cf57659357b395bd6fd21e88dd3c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-osx-x64.tar.gz\",\n            \"hash\": \"f4c930c867399fbcffe5c345c54e0595c712419b910df7263b35fc4711307bd5cc3a7878d6e06caf4904d915f371b4ab53d8c763d02d1bbbbee586fb16c137ca\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-arm64.exe\",\n            \"hash\": \"cebded348d80d50e60924a2791e683e0751c00eb87ac94388b8f68320936889c92238e56b91b837ec0c87fffe86787d1a0aa412d95c011d8b682f52d72636727\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-arm64.zip\",\n            \"hash\": \"66b6d3e4d7c3ccfcb99ec01f7b97601d8a20e5c9de2640b327099c5cde4e6e637f4ccd3d4ac94137684719a056bd05ed946ec628bd457288ca7d59ea24bbc376\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-x64.exe\",\n            \"hash\": \"e1800fbe29c667669f0d052dfd8a0d46b6e8b81e4929c2dabe2f2e853146edfa159dab348fe6cf9ab52176e1d99009f2f4281c8a548538fbf25a4d5c6fe5dbc6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-x64.zip\",\n            \"hash\": \"49f4c9385aabf2f16a2744459c3428d49f1fcbf45095a9f03d866a75d28b460f1a44fbdf5e45709bb0e79d9bf44224390366e0a23ae4b5959c242525b3bab8aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-x86.exe\",\n            \"hash\": \"b55e77ea2b8da0c3fda54a5b3efe3c599c556627ee3826bf5b4a09272be3f7dee302f7322328affb081950706f96dccd4fb110a473f35e55306e452ded502af3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-x86.zip\",\n            \"hash\": \"f3b64f77760d3ccc907da6dc84a6a3e54a770b2b641fb35b4f87e2145657a47894418fcba8a02ef361ac535c4508f6477af5356c12b233953e95d65c724eca23\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"6.0.100-preview.1.21103.13\",\n          \"version-display\": \"6.0.100-preview.1\",\n          \"runtime-version\": \"6.0.0-preview.1.21102.12\",\n          \"vs-version\": \"16.9\",\n          \"vs-mac-version\": \"8.9\",\n          \"vs-support\": \"Visual Studio 2019 (v16.9 Preview 4)\",\n          \"vs-mac-support\": \"Visual Studio 2019 for Mac (v8.9)\",\n          \"csharp-version\": \"9.0\",\n          \"fsharp-version\": \"5.0\",\n          \"vb-version\": \"16.0\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-linux-arm.tar.gz\",\n              \"hash\": \"05a5a0f9b3738042eedbce37105ceb95480ca8175d85ec7300c32949ee205a66b5e12583fff9f72d9161af56923842d388e6791f18aa7109a8c823461dd5d8d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-linux-arm64.tar.gz\",\n              \"hash\": \"fe79c1554bea30039390e6c9efe00623338fdeb1f471d8c74b41d43d38230d383e215859905f4c057bfd1ba027f7f157c4d5d215f961d3663aed60dcbe870add\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-linux-musl-x64.tar.gz\",\n              \"hash\": \"4b8002f608e5354651b9d82fa8442bca68be730dfdb54d026763635185457a23e5e071421bb04de8f8254fe36cc2134b430aaacb363911fd93276b7c34ad935c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-linux-x64.tar.gz\",\n              \"hash\": \"86f591c70c73732030210e8e7ce39b7b4e4a680098862e340a4a8726bcb3f981f0748baec0fce8c5c4a8615670a72ab92bfad8d0dc0a305401bbc5864116996a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-osx-x64.pkg\",\n              \"hash\": \"0e429d21e9c12f79fa8875670574d123389a4928d3c18d7fcd18fff50cdabb3faa8a2617011a9045b472b2192bcc4c5d5656cf57659357b395bd6fd21e88dd3c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-osx-x64.tar.gz\",\n              \"hash\": \"f4c930c867399fbcffe5c345c54e0595c712419b910df7263b35fc4711307bd5cc3a7878d6e06caf4904d915f371b4ab53d8c763d02d1bbbbee586fb16c137ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-arm64.exe\",\n              \"hash\": \"cebded348d80d50e60924a2791e683e0751c00eb87ac94388b8f68320936889c92238e56b91b837ec0c87fffe86787d1a0aa412d95c011d8b682f52d72636727\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-arm64.zip\",\n              \"hash\": \"66b6d3e4d7c3ccfcb99ec01f7b97601d8a20e5c9de2640b327099c5cde4e6e637f4ccd3d4ac94137684719a056bd05ed946ec628bd457288ca7d59ea24bbc376\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-x64.exe\",\n              \"hash\": \"e1800fbe29c667669f0d052dfd8a0d46b6e8b81e4929c2dabe2f2e853146edfa159dab348fe6cf9ab52176e1d99009f2f4281c8a548538fbf25a4d5c6fe5dbc6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-x64.zip\",\n              \"hash\": \"49f4c9385aabf2f16a2744459c3428d49f1fcbf45095a9f03d866a75d28b460f1a44fbdf5e45709bb0e79d9bf44224390366e0a23ae4b5959c242525b3bab8aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-x86.exe\",\n              \"hash\": \"b55e77ea2b8da0c3fda54a5b3efe3c599c556627ee3826bf5b4a09272be3f7dee302f7322328affb081950706f96dccd4fb110a473f35e55306e452ded502af3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/6.0.100-preview.1.21103.13/dotnet-sdk-6.0.100-preview.1.21103.13-win-x86.zip\",\n              \"hash\": \"f3b64f77760d3ccc907da6dc84a6a3e54a770b2b641fb35b4f87e2145657a47894418fcba8a02ef361ac535c4508f6477af5356c12b233953e95d65c724eca23\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"6.0.0-preview.1.21103.6\",\n        \"version-display\": \"6.0.0-preview.1\",\n        \"version-aspnetcoremodule\": [\n          \"16.0.21034.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-linux-arm.tar.gz\",\n            \"hash\": \"05cd6808b256c24e16c91513da712e4dd9cb3189dbd6928cd5959c4805fd5f6fb4b5e6a4cf7156e0af81ca151eac22df185af09567de2cbda4bfc4b4ec3f86b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-linux-arm64.tar.gz\",\n            \"hash\": \"152b93a2b9ef2a481280ce3549b5fea1fe88b86c9c41f2c09499681ec6f485c978a68d484e25e00776bfc2cbc285e968dd4f0b0a9ddb83f57faea2dd3a71faa0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"75ffdc561476085ccb60472e9d74edd850973b762d0bce490bf3a011c8fc526c90cc04106a89d456735f43335387698c05e472113fa8f40c7741287b77b0f46a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"b0bc62fbd4c0509e634828089637eb2c0fc326ebfc58913d09ccf7b47b09ad9133e77d2602ee478ac0c1fcad3c89affc48e374675f10457c4b4f6ccef2e2aec8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-linux-x64.tar.gz\",\n            \"hash\": \"77b4b2c20c96cd8b4ec152c133f8c0501ab6f38bc3a949461bd0af1246bc2084d687f0c639dbbdf858948c496eaf86749e1ae45eb30ab8d31adca9abac5a7346\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-osx-x64.tar.gz\",\n            \"hash\": \"9683bd26914c2312ab6f72dba742cadf364498e86def8633c7c57a6640d0140dd2cb05674b64f032f4d90a7f0a4856e66da793f5c99466d441367234ea7f3074\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-win-arm64.zip\",\n            \"hash\": \"dd0865c43d5248500a2e88b091bcb29d9f2b182f138660b144b12d0de23d803ba1e32b89fb86351d24bc190227e1447e4566ec849da845ef50ceeccab24ee60d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-win-x64.exe\",\n            \"hash\": \"78a7cbde432e4ce7726363f04c7efb0da3cf31c8095ea68a2a68d7c6a8d6e8a0d3e20e772b285d02704808c7a37ebaac9b9d4c23ae23f102031c92b9b8448299\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-win-x64.zip\",\n            \"hash\": \"4fe16b63fc0276b4afc718bd33c1a3a8d101bfb29ecb7d89aa22e8c11e948529ead6fa3bca3dde95e69c8c2c205273fe117e02ca5131691ea243431f2af49d5e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-win-x86.exe\",\n            \"hash\": \"048737341356cc2b9ccf62fe990d20d101e454390e80e361692912fc0208e4cae1af11376e4a9f412ef5db69ffcf6f525ed687cc7eef40bb86d214c2dbd79de5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/aspnetcore-runtime-6.0.0-preview.1.21103.6-win-x86.zip\",\n            \"hash\": \"67e4d94f6645510bbf78bfd5ac9d17ff512f335a2207ef1d16a72e9ec7e6b9fd8b27e14b1a34bd6f095478f641051d20cb6429524c338bf084167aa75dcb2810\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/6.0.0-preview.1.21103.6/dotnet-hosting-6.0.0-preview.1.21103.6-win.exe\",\n            \"hash\": \"46e3b98a2aff2125dd23e968bb66e117934208a176ef86067fea5c7f1e7ed9e8a9b8913933067fda02af7f787a5307d4fde18b2f33417e92982c762f5e910925\",\n            \"akams\": \"https://aka.ms/dotnetcore-6-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"6.0.0-preview.1.21103.5\",\n        \"version-display\": \"6.0.0-preview.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.1.21103.5/windowsdesktop-runtime-6.0.0-preview.1.21103.5-win-x64.exe\",\n            \"hash\": \"681d0388e06087a5ef077eab2a756a0ad4ca14270778b1fad8607119e37985f85d305fa57300d2a66006b3a9c97321bbfb6ab73a9717d0eae80af92b62f99838\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/6.0.0-preview.1.21103.5/windowsdesktop-runtime-6.0.0-preview.1.21103.5-win-x86.exe\",\n            \"hash\": \"dab5ea83d60c04531a47a39977d5ec9f44b936eb5014caefd10dabd8443d89ab79bf2b19e48d0260f2fc94a07d24baacb841fd556250b9c5e4e8891a78ee93f3\"\n          }\n        ]\n      }\n    }\n  ]\n}"
  },
  {
    "path": "JexusManager/Resources/7.0-release.json",
    "content": "{\n  \"channel-version\": \"7.0\",\n  \"latest-release\": \"7.0.20\",\n  \"latest-release-date\": \"2024-05-28\",\n  \"latest-runtime\": \"7.0.20\",\n  \"latest-sdk\": \"7.0.410\",\n  \"support-phase\": \"eol\",\n  \"release-type\": \"sts\",\n  \"eol-date\": \"2024-05-14\",\n  \"lifecycle-policy\": \"https://aka.ms/dotnetcoresupport\",\n  \"releases\": [\n    {\n      \"release-date\": \"2024-05-28\",\n      \"release-version\": \"7.0.20\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-20672\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-20672\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.20/7.0.20.md\",\n      \"runtime\": {\n        \"version\": \"7.0.20\",\n        \"version-display\": \"7.0.20\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-linux-arm.tar.gz\",\n            \"hash\": \"a24aa7afe478e62af4e76c40e63e5e5e8324ab01d9ad9cff3183245cdeb70861ffc118c9abda9f2f2fed423735ca27aac15bec8cc5fc352f05bd5b726265849a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-linux-arm64.tar.gz\",\n            \"hash\": \"c245125ee2708252119a1544556e1aa9e00aa18b2303de69877da10c6c17e3f25024b749ca93b53be76ee0e8e4a75d403f7019b8bc2e50ed1278f656cb2f7e06\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-linux-musl-arm.tar.gz\",\n            \"hash\": \"25ccc373d1c4c0eb741e048c6fd48366310b36ac6f068c50f6bc01342a000464144e8457e7e1b6ccf6d99544d4914022efcb824e75636517bbf61c94852cdd74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-linux-musl-arm64.tar.gz\",\n            \"hash\": \"552ca73467f8043d351c20d71df95ba963b32e8c75706df6f5d3fce525f3efdf1314df296c44fbedad5575782e37633998a79b2c23f7f7420f814ee2488f30a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-linux-musl-x64.tar.gz\",\n            \"hash\": \"31b9da08d633cd0028eb08c36ee2c5c3cb1be6d3c5e010c85ae291496fe5e818b5be59f5d47aff86ed939c260f762e57ff06934a4d0954376935b1adc799f1bf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-linux-x64.tar.gz\",\n            \"hash\": \"87855297338555a7b577d7e314e5dbf2c2350f8c867a489cd1e535634bad5c123a1871464d37fc9421837ff5d426c2eadecbe0f60bbf3fd32bc2461f47790a40\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-osx-arm64.pkg\",\n            \"hash\": \"6871264ebda8756e440ed3ae03ed01c19107fe27b377cb0ce9d91e139a01ca939554cbcf358e2e54527ba72f0080f2521fcf8b34cea6a24f6f46d2f4ccdde3ad\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-osx-arm64.tar.gz\",\n            \"hash\": \"af1cb62e29c69648ebe334e651c2703cd5e87fa0bb28c670bacb3b3dd1608aeae35ae53402c5eb4ed8bf34abd831a08ccb5ef84e5ec70617d9f8d9969fe7b8fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-osx-x64.pkg\",\n            \"hash\": \"3ebec794c77ec7c03ecd6b50a305062ae634bb9f662f7a17edbab65348188e58a8f25f12fcf0f1786681ef170288a5dc6e1fe8e500ae240e6cf9b148cd89fa5a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-osx-x64.tar.gz\",\n            \"hash\": \"acdcde92f2f2e43584ee59be447f778f4a152c308975c7bdc5c2372b5bbd3092eb9d2233aec3b82756ba1e352a0877ffc17e4c8cfb20a9de91ca6db54d79b591\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-win-arm64.exe\",\n            \"hash\": \"ae75b098abd1ddd2a253846d6ea6db4eed5db813c245983e0f829869f460bfac412ee538236be910814abfcb7be1fd51c72bd30a387aaa320d329bd8a00694d1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-win-arm64.zip\",\n            \"hash\": \"9caa7979861e7820f644b2a7bf80db53641e03d39f1b1fdb1c1d306dbdc75b476c869a3298cb14f7e419300cd5bf9a11d8aa11c2ce4f0ac9ad69327a18840bfc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-win-x64.exe\",\n            \"hash\": \"89a537a0ff92520cc543b4ee0a702063266aeb5d4d302e276fa9c8898ebf39bdc7bec134aa206bab8ef0ead395c79ab2e173abb8b506431f3cef641d8b7ecf11\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-win-x64.zip\",\n            \"hash\": \"4943862d33d3c483396adae24c932d254b218aaaa4638e47b22bdd1d61eea248f90f5a768a0842b8c743db8b96039506941af6384411e8c891aeefdebd7db4fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-win-x86.exe\",\n            \"hash\": \"b8d5e8dfd844bbdd9cf83c512f015d06bd326e17fb9d250ef8d02a8f4adb6bbfa1ec6ab1a49c7a72ec608cad90da4f1f8e6b1d1129b9d53bb2036ee5c6cfaead\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.20/dotnet-runtime-7.0.20-win-x86.zip\",\n            \"hash\": \"f4cf05a03b7e568f974202379f662becd8756b8d6755277c19247130d03ce7b5062a6414904bdc52256aa2373501dfc62f3615aea0f92b5e192bb8e11009fdf9\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.410\",\n        \"version-display\": \"7.0.410\",\n        \"runtime-version\": \"7.0.20\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-arm.tar.gz\",\n            \"hash\": \"95b639a1475d9b7637d41a14c0cab3993b3a2b4be63dbf251ffef840461c51d9d5ecd78ef09c857fe28399155f7a40449e08c7a33ce08850c4e18efaabab45ac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-arm64.tar.gz\",\n            \"hash\": \"2db6a3b9a532d2f59a2b459e634206913a9585c821f3f578a421e3bae346a92dd9b85b76ebde343ca3057275f7ec4d0bca71cbb7f2badb6dcdb516244e84da46\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-musl-arm.tar.gz\",\n            \"hash\": \"c7b19cdf213126456fe7f20171ffbf5cc41772305b47d8d06c64612a509e8913126405ca8ea5b64f93ff4d2cfea29fa128671d40ef23ad669d8b47282238dfc1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3beeb4f3d5360cc9bc1739b69028f582b66a6a384c9668ff12a0fdb9c29f92dc757b7b17b3dfcc81e5503f9adaccd7b9ea5490f8e1629cdd98e1b45929b692dd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-musl-x64.tar.gz\",\n            \"hash\": \"6345ba8139af42d7a8330b5a5e17c71b3e068066561006c68bfe2bfb5c1abd2892f0d903fb7aebc2a536d847bc1277780cd651fa531330c16fa302a076cb5415\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-x64.tar.gz\",\n            \"hash\": \"20b8e02979328e4c4a14493f7791ed419aabd0175233db80cd60e2c004b829b3e8301281ea86b27ba818372473accf5a6d553e5354c54917c8e84d25f5855caa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-osx-arm64.pkg\",\n            \"hash\": \"d4b21344a686f02624afd43f0bbe8e541d9087a2062805fefec345ce1a0c0158e026d972f93bf672d83b4e5141e6bf3f4f97e1263829531acb439546afa830fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-osx-arm64.tar.gz\",\n            \"hash\": \"c0ef1914f2b298504433bca9cdab02dcf324421ece39657b66523f13b7a7166e726783673a602fb462f3db5c53f59a89381b918e7658d49a57763b43cf75cedc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-osx-x64.pkg\",\n            \"hash\": \"1ffdd35bf5cbadc5c9b54d410139ba56721203feb3aac820deff4d541855c33f7af6d9900d8848e9e97a708ac3db38391c1c13de2cc44a4270c1796f6c907315\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-osx-x64.tar.gz\",\n            \"hash\": \"782e15c19ce20aa8333566f23c2d3cdb8e89c7626de6330ddf670c4426e30cc854e44ff3341578622aecf210fa66ddcb63a7d2ad629ed92cb5582ab670f953d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-arm64.exe\",\n            \"hash\": \"4cf7ff978d7d5a7079497c716dfb13eedaaceb661704a37c6a484aa1821d590cc5c4585e7c363507b5bf9e9d34e1a7cddc00eef250c071fd1cc9ce10411f96a4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-arm64.zip\",\n            \"hash\": \"ed7622ee612b02bc2e857aded7a01545ecb9b1a6dd647cfc91972882acaa2472b0fe87432a31b9f6d80f8d556097e0f3b6834e4b803a2a58c18c59b1ada2a14c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-x64.exe\",\n            \"hash\": \"382189831b7ee6ca469a6d6d72d42bf072142a745512d4a125243467e5a1670b0e240a068e98ef6e0863f60bd84669610ba03ec0f0bd36a2b66f64c7e3e70070\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-x64.zip\",\n            \"hash\": \"bfaf5a3da6c8cdc7e82c7ad86ed1282ed050b689e02a65c32c57aa64292283bca710b2f1fe1bab62ab7b9bfe126fbab27fa4d2c59f9f96f4b32698b06b46dde7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-x86.exe\",\n            \"hash\": \"215cbe2078ab063b06dd74403c832b3247de694b66c56e5f7333c160c1d103d5cef94b897f73fd4c5a9380be245b7eb0ca8143b3d184693cc407cd24b6f7acbd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-x86.zip\",\n            \"hash\": \"99649796ced7e9b6f202c41cf854034f92dd6af8df018c58efe1b44d34a4273e77153b00b32cc1073893b2064e8d4dd49679fe9f0709aac8d60588039a2fd4df\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.410\",\n          \"version-display\": \"7.0.410\",\n          \"runtime-version\": \"7.0.20\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-arm.tar.gz\",\n              \"hash\": \"95b639a1475d9b7637d41a14c0cab3993b3a2b4be63dbf251ffef840461c51d9d5ecd78ef09c857fe28399155f7a40449e08c7a33ce08850c4e18efaabab45ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-arm64.tar.gz\",\n              \"hash\": \"2db6a3b9a532d2f59a2b459e634206913a9585c821f3f578a421e3bae346a92dd9b85b76ebde343ca3057275f7ec4d0bca71cbb7f2badb6dcdb516244e84da46\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-musl-arm.tar.gz\",\n              \"hash\": \"c7b19cdf213126456fe7f20171ffbf5cc41772305b47d8d06c64612a509e8913126405ca8ea5b64f93ff4d2cfea29fa128671d40ef23ad669d8b47282238dfc1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3beeb4f3d5360cc9bc1739b69028f582b66a6a384c9668ff12a0fdb9c29f92dc757b7b17b3dfcc81e5503f9adaccd7b9ea5490f8e1629cdd98e1b45929b692dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-musl-x64.tar.gz\",\n              \"hash\": \"6345ba8139af42d7a8330b5a5e17c71b3e068066561006c68bfe2bfb5c1abd2892f0d903fb7aebc2a536d847bc1277780cd651fa531330c16fa302a076cb5415\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-linux-x64.tar.gz\",\n              \"hash\": \"20b8e02979328e4c4a14493f7791ed419aabd0175233db80cd60e2c004b829b3e8301281ea86b27ba818372473accf5a6d553e5354c54917c8e84d25f5855caa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-osx-arm64.pkg\",\n              \"hash\": \"d4b21344a686f02624afd43f0bbe8e541d9087a2062805fefec345ce1a0c0158e026d972f93bf672d83b4e5141e6bf3f4f97e1263829531acb439546afa830fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-osx-arm64.tar.gz\",\n              \"hash\": \"c0ef1914f2b298504433bca9cdab02dcf324421ece39657b66523f13b7a7166e726783673a602fb462f3db5c53f59a89381b918e7658d49a57763b43cf75cedc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-osx-x64.pkg\",\n              \"hash\": \"1ffdd35bf5cbadc5c9b54d410139ba56721203feb3aac820deff4d541855c33f7af6d9900d8848e9e97a708ac3db38391c1c13de2cc44a4270c1796f6c907315\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-osx-x64.tar.gz\",\n              \"hash\": \"782e15c19ce20aa8333566f23c2d3cdb8e89c7626de6330ddf670c4426e30cc854e44ff3341578622aecf210fa66ddcb63a7d2ad629ed92cb5582ab670f953d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-arm64.exe\",\n              \"hash\": \"4cf7ff978d7d5a7079497c716dfb13eedaaceb661704a37c6a484aa1821d590cc5c4585e7c363507b5bf9e9d34e1a7cddc00eef250c071fd1cc9ce10411f96a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-arm64.zip\",\n              \"hash\": \"ed7622ee612b02bc2e857aded7a01545ecb9b1a6dd647cfc91972882acaa2472b0fe87432a31b9f6d80f8d556097e0f3b6834e4b803a2a58c18c59b1ada2a14c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-x64.exe\",\n              \"hash\": \"382189831b7ee6ca469a6d6d72d42bf072142a745512d4a125243467e5a1670b0e240a068e98ef6e0863f60bd84669610ba03ec0f0bd36a2b66f64c7e3e70070\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-x64.zip\",\n              \"hash\": \"bfaf5a3da6c8cdc7e82c7ad86ed1282ed050b689e02a65c32c57aa64292283bca710b2f1fe1bab62ab7b9bfe126fbab27fa4d2c59f9f96f4b32698b06b46dde7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-x86.exe\",\n              \"hash\": \"215cbe2078ab063b06dd74403c832b3247de694b66c56e5f7333c160c1d103d5cef94b897f73fd4c5a9380be245b7eb0ca8143b3d184693cc407cd24b6f7acbd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.410/dotnet-sdk-7.0.410-win-x86.zip\",\n              \"hash\": \"99649796ced7e9b6f202c41cf854034f92dd6af8df018c58efe1b44d34a4273e77153b00b32cc1073893b2064e8d4dd49679fe9f0709aac8d60588039a2fd4df\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.317\",\n          \"version-display\": \"7.0.317\",\n          \"runtime-version\": \"7.0.20\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-linux-arm.tar.gz\",\n              \"hash\": \"4b50c74d15871ab45cf7fd016fa051f0383f0095f91b4ef2710502818e2f9f69023b4d00d584ef77d8187ae8e95a8d2923b3d03ebe2a3ff70a9109ed12f748ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-linux-arm64.tar.gz\",\n              \"hash\": \"22badcdb2cba0f1bedb1fcbdc99269a66a01a232193e00b42823806cee5d46194b8dd008a53e17455072a410f77bd351676f351670be96c13572d8e30cfad180\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-linux-musl-arm.tar.gz\",\n              \"hash\": \"7caa1137ca472471ab959deceb7e3e2828a08db5fb0e1c6b973f2470a1cb6c8bfad332ccac31f66e11982e473aff82809b35fa5c036417827ae837137be34f39\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ed44b5d4ccb379f4286922e226d182e5eb9bc12f4cedb6002f06e5794b795d3ebf19a8e5a8e990c457df7f9eba9947bc1c7210af6a8dff2c6722d64c9e61f040\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-linux-musl-x64.tar.gz\",\n              \"hash\": \"5a7d5f217010b3541fa9d0bdb43d769496855b9e114384cf6788ed4771b835466ab1878c5379c891493b54b87c1470778f50931c5a6c899af61348193bb963d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-linux-x64.tar.gz\",\n              \"hash\": \"906ecbfa31b10ae5e2a8ba713d113ccd83e3a9b9e4d3e322482692891542959e76c51db5dd3825fb4a2cf1e951737006a99be7290f309d6822567d3a533a7a9e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-osx-arm64.pkg\",\n              \"hash\": \"7f77209eff77a85639e8429a9a48b4ff8cf619ca8fe5aae53566bb92ecb450f1fc1ffa7cdeae43344580fa0e5913817bae9baec00697dec6288d5f3d57c666c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-osx-arm64.tar.gz\",\n              \"hash\": \"b5f367e1e20d728d7167c81e4146358e760f136b9ee0fc410d813c14366e38b09a069031aa8ca6d8df438435b6ab4e2e989be309e097169459365d4befaf9f5a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-osx-x64.pkg\",\n              \"hash\": \"617f473eae7f058a01d5a7925c206802d516a65158557b4f0b0173e0768fe2837c554946b0c517dbdf09101678ebee981b02b6423939713543d0010f94b7b1ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-osx-x64.tar.gz\",\n              \"hash\": \"d3dbd0fe7cbc62388f150adba5d818abee3986863d757ce63088f4feabf801052c08a608acd5036f97191435fe99224acb12c7365be7f77def28553a231ac3c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-win-arm64.exe\",\n              \"hash\": \"2f3feffd4ea16079486d3850638837ffa9cf7a27953e2a8fbebd7718baa1c02596ac497ab10b0e496b45b9c879a7388730538f2b3af1ad88b6e53772ab7ef9b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-win-arm64.zip\",\n              \"hash\": \"cf1f6357cdce36c5f3f0bb1f8b1972adda2988741e8fdbda17a84fb8ae9ae2d60921cfbc06ca03907aa1bd1a9633607debeb58ea910838c23261177e18a07b7f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-win-x64.exe\",\n              \"hash\": \"807c3b54e3d0cb92a741ee1ed1a711ca19080c40ff416c79af3fcf8d501957aacdf350bc48dd279a1324f1898934c5135b8c849d1b674f45d4e03a26029fa8c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-win-x64.zip\",\n              \"hash\": \"f283e2f840ddf176b168861d81884c06a2989d5e10a78a3c8d937f3c71479ce2d3ed9f0e7c4adcbd03cbccefbcd0d3ecf63ad96ce2bfcad528bce8eb0ed4235f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-win-x86.exe\",\n              \"hash\": \"de1c4b2086c28f0755fef326e6d4e8b2a8e5dcacee946e4597540930ba5c3b9329f9866111875642393fe481d3ebbe36e3dc489dfdaa9f60d75d848c3531ce69\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.317/dotnet-sdk-7.0.317-win-x86.zip\",\n              \"hash\": \"4e901cd5e2319215e60b05b023132fa86abcc8fc25e51408760fa18988c109722c6fa489b80eda98aea5d0bc1ccf7731e30eaf176ed936544803015d49ee89e8\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.120\",\n          \"version-display\": \"7.0.120\",\n          \"runtime-version\": \"7.0.20\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-linux-arm.tar.gz\",\n              \"hash\": \"7a9648de3c31f8d1257d98982f4ae2bd3bac32440bcfcb8040275285990934aee8719012a2ca3f5646546e566d2963f63bf89d19b568addc4d324ce974ea4bc7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-linux-arm64.tar.gz\",\n              \"hash\": \"f530f794afe3c3b9bd87b8ed509a1a13b1c8fe6f2bc6e6cce3e8cd6b56327c0ff27fc138122c2dad68770cc5015737e007ef5706599c189ef0cc7521cbf0b654\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-linux-musl-arm.tar.gz\",\n              \"hash\": \"1cda266f88a950f4544fdfccf1ecc26816b75c29f4866bfd98589290942d982a74ce17f2f507c6280b0f337b743a9ad01e53a3c1001c7477bdd4add53bb0615f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-linux-musl-arm64.tar.gz\",\n              \"hash\": \"5d3124c3daf1ed1cef0c838e753637af1e52030b36630bbfa7dba176a7eca24fe9e5c4df9eff2170fa96cf63e0055df42f0950b3b5900deb282590e4b612f3fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-linux-musl-x64.tar.gz\",\n              \"hash\": \"c508ab5310d743f57ea78611ffe354268fe883e7c673ee808daaa6dde30ba454d5d70f8191c49eb52ae4a80c062ed6490ba1d6b752fcc541b0eb7835f4eee87f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-linux-x64.tar.gz\",\n              \"hash\": \"cb9faba83ab276c935ef35b31f016ca4617f0d967c5b4bf1e993c2159992fb59d1dd25dce09928915b9ff586ead7acf92ec1dd96937c93317a99ca0c92b616c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-osx-arm64.pkg\",\n              \"hash\": \"4d7559c3840979911c80b4e1cab70acf380d1d0ad84d749c46db3ace274c68887d91cc338b906f272b5677d61d983457f124779f291bdb9ac097bcbb09ec3dd6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-osx-arm64.tar.gz\",\n              \"hash\": \"dc06801d8de34df698f93e3aa872d57131dd3e33ac4f7cddbc96223911e0ff32fdcea78332da7be0013362c90cd24db2d86c1e275297be6dd162948f2bd38cbc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-osx-x64.pkg\",\n              \"hash\": \"8877da5423c635845166d436c121e0598dbaa43e7a8948dcd35e64aa8e040bce2463c8cd43cf07a83e49f28d3da625a8f4031c465a7ee3c27d8fc15575688c7b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-osx-x64.tar.gz\",\n              \"hash\": \"94deb9988509fcbfffc357114d0f5645fc6b6f6156664040cd5643a191bef10ae2fba4168aa689ff7da1a1b6fa779eb4e53a77a7847beceb7f0ba451d2c20d57\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-win-arm64.exe\",\n              \"hash\": \"c0243da4539e74ffe20effd2150a84233b6b7d86a2df04ebf0df25b7069bfa0aaa42553488d2798ac6b1efb912d9058186230ea0199769ed13f31d6c48c728d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-win-arm64.zip\",\n              \"hash\": \"8b6f4513ffc701c1b300585d15de4b03fdff7c9575f04c545b878c7e608f8f03def9d112e4cc0ff6131ca6e323d64979c88e90e4374559bed8b7505a221c7c63\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-win-x64.exe\",\n              \"hash\": \"3b6359d4457e4027402fa809571903c1f1e79be903c865d69fee5c8b64f2afcc1f375f4c71669caa1683a6e3128d352aa881d10e89b99321b93ae0e958a36a34\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-win-x64.zip\",\n              \"hash\": \"ef0e18f0aac6875b2602d45028e3006d2a25e9335c3f58ecaade72039e1d2f1be3c1c51178e44a14e8e7792e04ecb07a21ee884394600ca7f2214024675103ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-win-x86.exe\",\n              \"hash\": \"7ef7ca2e9e3e0277f84d1080352adacf5c8eab28dcf1e4b1b01a9713683a6875d1410ced0779ee4be569f901aa77933fa5035339e260752088792d1da4e36c98\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.120/dotnet-sdk-7.0.120-win-x86.zip\",\n              \"hash\": \"41b3d3904af8d4e941a9700d14cd6bcf79ac31b698528c7db8220b0e64af973286ed3e2141d2101ae2f89e09df67e76640567bf110dd7956a8569987bdbe81e4\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.20\",\n        \"version-display\": \"7.0.20\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.24141.20\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-linux-arm.tar.gz\",\n            \"hash\": \"e82bb0f1d52d91fea6bed419a18561282ed0e9de36e564e641e296c917f7f65fc7555ccc046fed675ad67b4e7c50a70f0f48e8559ff4f2a9bbad2bc62dcf6ab3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-linux-arm64.tar.gz\",\n            \"hash\": \"dfb1c1bef4d826defd3d995599a5c03e1bf1a64c65d98b675d6c05dbb7380d98233953e68d53fc5ebec60ad4ef75417073fb1fb3256a0176bb964f0e01161f6c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-linux-musl-arm.tar.gz\",\n            \"hash\": \"ca84e0eff052d45b7fa9afd8a68f1d56264155b507881105d206969922057bf332895a3c3a2a1702648e46712f022574d93ae187c8fd2610f8392909568abf56\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-linux-musl-arm64.tar.gz\",\n            \"hash\": \"65406e1714a3117daa342b3fd0dbcd5c3214315611eacbbd8580827f69a07a9480530320ba40692a3d6dbff832d929a1420079f1db30ca3fd67a6fd035149d04\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-linux-musl-x64.tar.gz\",\n            \"hash\": \"a80f31193af70d556e8d026d39d79863c8389b065fe0778e7b4360f7d1f6d36503ba52736c40e74a716c3c30500b185816ed60d79b06ae295754b67374a1fa45\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-linux-x64.tar.gz\",\n            \"hash\": \"62ed9743972043a72e48d5aa2f7fdf3483cf684a32b051315004d1c778e9712bf66e5e7a97a5a53993fa8e92daf5bacaf2cdb3eae44bb9a9e25532b9a80f4f70\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-osx-arm64.tar.gz\",\n            \"hash\": \"7de161ea45faef7693d78ca44b585ab73fc183232d3f8d229fde3d05d696818d8d6402ac7ac86ce239a0a6cdae8fc2eafbb445e99443d0c7a4aab3781df35be6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-osx-x64.tar.gz\",\n            \"hash\": \"00677819450d14d9adc2b65f25b9a069bc2b43f72e4db651e77fe0e48320be8eb7c555277281de968e75d0fb19bef960d4dcb27161b8c57bce076ee18bb5ca98\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-win-arm64.zip\",\n            \"hash\": \"fff2405932a66d81cb3dc6208c507ace12ec388d41d6329c002222e97d1ecffb07967523bed88700d06b740eabf234085a38dc2522f266373b0652b3d8ab4e62\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-win-x64.exe\",\n            \"hash\": \"bc87577dc88703b7768a3319d494167bae74beae93b6204d4cf873814ea0f279dc188340913957d0677df640ff91641f63d626ec7c2cdf97be955ac390ce765a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-win-x64.zip\",\n            \"hash\": \"f1fbf553a0a2ac4771ba1b616d415bc370f32b7c42061881f6945f2ea8d4eac665c6f209378cdf221fc14ae03ed23ffaf0f34c07eedcc47617c272933490d261\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-win-x86.exe\",\n            \"hash\": \"ecc332a553a36823bb0929854e0dc1aeab3b7a4c6784ea0f7a5062b81028e148882e5f9d6c07232780b06d8d27dc633f509e89a95160ff6dc1454ac36162b4ee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/aspnetcore-runtime-7.0.20-win-x86.zip\",\n            \"hash\": \"ec509837ffaa6918d6a1f8de0b041a5b75e38b6589daccf8dff7b7728c71fe2aecefc893868af7d242c97d0dd0b4ee20a69ffd980d2849e1af726831948af00a\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.20/dotnet-hosting-7.0.20-win.exe\",\n            \"hash\": \"b33cee3dff17cf1db7202083cbc9efef4692ed44dd2f374c6cbe4f8a034ec5471f9039eec4b6f12cfea0428fcbc501c482b89fc942908a92f87f0ba9928e08a0\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.20\",\n        \"version-display\": \"7.0.20\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.20/windowsdesktop-runtime-7.0.20-win-arm64.exe\",\n            \"hash\": \"b11f73901c5268b1f68850e8afaf889778f18b6052b818d3d1eac6ff84f2671e24c6c7b4dc28dcba7bbe652acf08990cc4a1655c766ee659e75c9aef5b3ff795\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.20/windowsdesktop-runtime-7.0.20-win-arm64.zip\",\n            \"hash\": \"11635d0a225974d3797008eb22c4356e05a3cd701d384e583e30ff13be368cef6173ca068b0beddc77e0b572e993ad48df2706f89e6f9cc8b31944b6f7d3ce8d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.20/windowsdesktop-runtime-7.0.20-win-x64.exe\",\n            \"hash\": \"a0ed41e1672a25a9ee2cf3ca081e90f037b889100dbf8312e277447a801a4f3b7af464fa05fb796a24f89cd119102e8d0a382f4711e4e6263e5503642231da88\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.20/windowsdesktop-runtime-7.0.20-win-x64.zip\",\n            \"hash\": \"c073ecc14d92a35d0da9c599291912243798253cd07c82941bcf3d8942db1d6b8bdc99182f29c3e3b66a5b942219a729087f82e4fdb9a1e04ec9edb9945a934b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.20/windowsdesktop-runtime-7.0.20-win-x86.exe\",\n            \"hash\": \"cfdf8369b3ac1c8fcba3274cb716c9faaa1df489ec3d3fd77419e78a0d740588546269ab7d77e09b3d4fe3817c55ca63c909d259ab7fe8b33da351453b58a05b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.20/windowsdesktop-runtime-7.0.20-win-x86.zip\",\n            \"hash\": \"387c7c678fe8adc62f7152baf8616bf1a2f690e11dd319920f5c0e1c0997f8d6c32562c9b61feebe058a0608cce38fb46f7245577594fd94e2d8305874474f42\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-05-14\",\n      \"release-version\": \"7.0.19\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-30045\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-30045\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-30046\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-30046\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.19/7.0.19.md\",\n      \"runtime\": {\n        \"version\": \"7.0.19\",\n        \"version-display\": \"7.0.19\",\n        \"vs-version\": \"17.4.19, 17.6.15, 17.8.10, 17.9.7\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-linux-arm.tar.gz\",\n            \"hash\": \"cb99b6e971077ca5a3c580c04e152026fc2c7430cbb30cc4bd074fa98dcbe1ade684a8267360c0d74e1d72c67622d6106ecb42ff6b1b226f39ff9c2d2f6f0a94\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-linux-arm64.tar.gz\",\n            \"hash\": \"fde0a0190c77cd361722d2ce449b207b6a26c7f6462dcc9a2debfa1b0e670f7df0b538758ea5eb865f156df17a98722ed7e8f7a2bfceb0a486d1b06a2d436240\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-linux-musl-arm.tar.gz\",\n            \"hash\": \"88506b6b86faee0d0cac11651232bdfd12e928d830ea157f6cea4095462368c22782307ffd8c4e805369d2251cc2a884c4ae5a9608c812af58b6e3351a13e4aa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9f8e19a755393f6ed812c4f5b3d10123ec0f4a25bf469a84dba32b96d24ca4845c59293bd47d0dcd730e270d2b5f889a5e4247f30341ead0673b22a0e1a11add\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"a6234e5742bdc2fc2a83c327bfc3c8362caba99102dea373eb50619a6bb4292e8bcc304c1778ec59d60b7924b8bafcc0d74edad1cae71422f7390a97751580dd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-linux-x64.tar.gz\",\n            \"hash\": \"4e556c1437a58d2325e3eeb5a5c4b718599dff206af957a80490ef2945b1a2f5114d25b808b4c9ea233cc4eb2e5ce40932bb249e198319e97f3b5cc443612e6f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-osx-arm64.pkg\",\n            \"hash\": \"ceb4a4185aab4af6a262562ec0d68ed8b87b440cc3fcc06f8230be487a872a254bdbd96403ac11928501c32c2b6b17dc772496b9db94d682ee41189b03d884da\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-osx-arm64.tar.gz\",\n            \"hash\": \"394f0f068b1dcd8f116c41391baccb46fd1112578281b0d11edd6dc194b767850c8a2bb9e2bc041b1e872872afb130fa10f7c98fbac988dd80c0d788a0f23e7f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-osx-x64.pkg\",\n            \"hash\": \"a9800f2aaf630774cb14d5f88ac6f7989177b8fa8ca1653774f2757d334fbd25f4613b0fffe303235a0ca7bcc3cb45354eda411c50d0328e1530b8fcba88b33d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-osx-x64.tar.gz\",\n            \"hash\": \"005828f1138cfce1f04741a478595186a1098185747ed0872099d7541d2bed16416f36d1214f6289f6ed1d3543e119733e4bba6dddf42db43150bc7bf2e980df\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-win-arm64.exe\",\n            \"hash\": \"5e8fff0877fdc832e75f3124c43d1c85510abb2eaad467a00b0f0bd367026c6d35322174d9097d70fb7d534b23e0e17a0c6cb61f6bf0a8716d8d7641c1048df6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-win-arm64.zip\",\n            \"hash\": \"15cbc2d7518fc2098c9e5c84e49b53fa1a0936ed0314131724a3b4b7edf063dc94ee70345c9ca9595d695b11f92deee38f0c6902c239084d95b7701c273f99fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-win-x64.exe\",\n            \"hash\": \"a627b093b960a64ab4beb0855ed131d6af1dcc79b97b5d3dbf22d634996d3f46c5dc95a0d4a1e0258d8ea91fefd1359e97beda896947a7d03d0d2bb40b9e122e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-win-x64.zip\",\n            \"hash\": \"b8b2668f95a625705332c3591c864da80dca7cd5625978abf827e2968e516ed40a04d15b380f77638d5e2c83bfaff83e15cf7cc41b56d25c087ab5b08e43d1ed\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-win-x86.exe\",\n            \"hash\": \"5ebf57a3f3312cbb147886c8bb4a486a3111ebf00673bf76e56f8e60de8b763ef6075ad81bca262714ffa9767ec361aadc6d37b6a5d0044aea6590344e06c592\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.19/dotnet-runtime-7.0.19-win-x86.zip\",\n            \"hash\": \"90c53358481a3b8f44042cbfad6b1426f4939cbd24bcd0cedadb1ce5ba966fa09a71d4905c3aba112aaf6d0dab82c27edcad9d133ee1b58f42f5738649faf926\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.409\",\n        \"version-display\": \"7.0.409\",\n        \"runtime-version\": \"7.0.19\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-arm.tar.gz\",\n            \"hash\": \"454c8c1bd83e4569a38c22ce4f1e9414e8ba217c95829a2619e2d474389d105b43ea395c8bf26b3eb19a590a0e66e2d6ab93ae4a56ab8068709b2b5ac2199905\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-arm64.tar.gz\",\n            \"hash\": \"ebf98115e3ef9a5388394443b8cec8aa104c2468fbcb6c964661115665645326abb0bce42786a98eef4ebffe42dedd36de8608e15538d191e934dc83fcd8b2f5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-musl-arm.tar.gz\",\n            \"hash\": \"38ae7e0fcf36b2901073f17c2d0964213fcf9d481adc58384bfa82ee9c27690ce6703b1bfe440b55221389d3a4adbf521c50d993e2d00522b7aba106bf4da2b4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d6b366d981852597ffc8310c7724ee4c5ee94010ac9e9d35f52bf1b7457934cc052d05206300fb9cb5d5b5db924f7b8a713a015568baab83baebb9d02634f2b8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-musl-x64.tar.gz\",\n            \"hash\": \"dfa0449b87ff9bb139e2b0a9c9a6a45f5300c57ed8fcee1a2beb4ef65f95a047abd43e29e2e999fef89ffae0142ac508c17bc9723e0eeaa31ee189b1883c3972\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-x64.tar.gz\",\n            \"hash\": \"0b67d04621d7c2a1856fdb0cf6e081090b4e1df1075d2f881fb33655422f2f59f63f8324559dc207510485f77781cc20c7a407e3c04dc0b53246987164427671\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-osx-arm64.pkg\",\n            \"hash\": \"c32c8f551c7b36f91b10d7bc221563dc0e2f6baa7c6c8637e5260871812656f4b1b8ae455913e43597b1a9e0b582b3612389b1c55d62ac74e4b614468fe68060\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-osx-arm64.tar.gz\",\n            \"hash\": \"bf234cc2c6e90abb891cbefc3eed35e63fae07d312f01193d8890dce03edbaa3fe5a095cc695bb03ef35fcfd1c2e45e7b9d54c3b483761d7b1653a019c55b53f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-osx-x64.pkg\",\n            \"hash\": \"a92bfeff2eb5136bc2d1103239ec1e44b258b5f97ed460f9000885255de4601c1f775c2629ab59bdeae9a231d605324b72bc793518530d2023e8e05512465f8b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-osx-x64.tar.gz\",\n            \"hash\": \"70efa550d6d78e17db0368e8500ddfd9a6343707e009247d00062613e8052463d3d83779af619128233e78a29f5b5a5f71f0eaba740c3c3f74be0c76145c892b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-arm64.exe\",\n            \"hash\": \"3fcd7cec12617a82654f0837edfe04fd8741425af37f67a34fc72842298ab9d7f5c448a5e0e1d1c0656c3ee37fc2ecc6e46f4020c703713d45fd8a694160eae9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-arm64.zip\",\n            \"hash\": \"9149c5f0f04c580d241362eb99e1a5c10f807d40d33ac680168366c324197a52c7e74eb28318e407bfbcdd7149c9b56c2316a267ad83eccf4f0087a2d7302859\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-x64.exe\",\n            \"hash\": \"fe742795fd48cba801f21b2d6cde618be9cd7414b117f712135301c93868b6da76a393b0e7d22a8d69c159113d2489bdcd55d2d9613a38d239e46e7f00de13e8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-x64.zip\",\n            \"hash\": \"fc70f39afa566349200dca003aab4dd388df40cd898ec3d6c960fced1e9e219f50dbe9e6538893fdf4024d04b37a1d2c8aeebc695151e78f8852c91f572ef416\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-x86.exe\",\n            \"hash\": \"11e7625c75ef2daca88cbb640b2905ffc0e61e2ad0a07511d00f6ae29e8cf152c9431f8700dba6dd9bba2015b4e4d0551b0b2815cbe7d835676037b02c48567a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-x86.zip\",\n            \"hash\": \"7e65822039546c1329a6626141c89caf294268bd264775ce67ae429b73acf45ce55e35ce2d51721648c6507dd4dd8ed4235f60ae0577569d06bb86587e34b33f\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.409\",\n          \"version-display\": \"7.0.409\",\n          \"runtime-version\": \"7.0.19\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-arm.tar.gz\",\n              \"hash\": \"454c8c1bd83e4569a38c22ce4f1e9414e8ba217c95829a2619e2d474389d105b43ea395c8bf26b3eb19a590a0e66e2d6ab93ae4a56ab8068709b2b5ac2199905\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-arm64.tar.gz\",\n              \"hash\": \"ebf98115e3ef9a5388394443b8cec8aa104c2468fbcb6c964661115665645326abb0bce42786a98eef4ebffe42dedd36de8608e15538d191e934dc83fcd8b2f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-musl-arm.tar.gz\",\n              \"hash\": \"38ae7e0fcf36b2901073f17c2d0964213fcf9d481adc58384bfa82ee9c27690ce6703b1bfe440b55221389d3a4adbf521c50d993e2d00522b7aba106bf4da2b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d6b366d981852597ffc8310c7724ee4c5ee94010ac9e9d35f52bf1b7457934cc052d05206300fb9cb5d5b5db924f7b8a713a015568baab83baebb9d02634f2b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-musl-x64.tar.gz\",\n              \"hash\": \"dfa0449b87ff9bb139e2b0a9c9a6a45f5300c57ed8fcee1a2beb4ef65f95a047abd43e29e2e999fef89ffae0142ac508c17bc9723e0eeaa31ee189b1883c3972\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-linux-x64.tar.gz\",\n              \"hash\": \"0b67d04621d7c2a1856fdb0cf6e081090b4e1df1075d2f881fb33655422f2f59f63f8324559dc207510485f77781cc20c7a407e3c04dc0b53246987164427671\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-osx-arm64.pkg\",\n              \"hash\": \"c32c8f551c7b36f91b10d7bc221563dc0e2f6baa7c6c8637e5260871812656f4b1b8ae455913e43597b1a9e0b582b3612389b1c55d62ac74e4b614468fe68060\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-osx-arm64.tar.gz\",\n              \"hash\": \"bf234cc2c6e90abb891cbefc3eed35e63fae07d312f01193d8890dce03edbaa3fe5a095cc695bb03ef35fcfd1c2e45e7b9d54c3b483761d7b1653a019c55b53f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-osx-x64.pkg\",\n              \"hash\": \"a92bfeff2eb5136bc2d1103239ec1e44b258b5f97ed460f9000885255de4601c1f775c2629ab59bdeae9a231d605324b72bc793518530d2023e8e05512465f8b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-osx-x64.tar.gz\",\n              \"hash\": \"70efa550d6d78e17db0368e8500ddfd9a6343707e009247d00062613e8052463d3d83779af619128233e78a29f5b5a5f71f0eaba740c3c3f74be0c76145c892b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-arm64.exe\",\n              \"hash\": \"3fcd7cec12617a82654f0837edfe04fd8741425af37f67a34fc72842298ab9d7f5c448a5e0e1d1c0656c3ee37fc2ecc6e46f4020c703713d45fd8a694160eae9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-arm64.zip\",\n              \"hash\": \"9149c5f0f04c580d241362eb99e1a5c10f807d40d33ac680168366c324197a52c7e74eb28318e407bfbcdd7149c9b56c2316a267ad83eccf4f0087a2d7302859\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-x64.exe\",\n              \"hash\": \"fe742795fd48cba801f21b2d6cde618be9cd7414b117f712135301c93868b6da76a393b0e7d22a8d69c159113d2489bdcd55d2d9613a38d239e46e7f00de13e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-x64.zip\",\n              \"hash\": \"fc70f39afa566349200dca003aab4dd388df40cd898ec3d6c960fced1e9e219f50dbe9e6538893fdf4024d04b37a1d2c8aeebc695151e78f8852c91f572ef416\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-x86.exe\",\n              \"hash\": \"11e7625c75ef2daca88cbb640b2905ffc0e61e2ad0a07511d00f6ae29e8cf152c9431f8700dba6dd9bba2015b4e4d0551b0b2815cbe7d835676037b02c48567a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.409/dotnet-sdk-7.0.409-win-x86.zip\",\n              \"hash\": \"7e65822039546c1329a6626141c89caf294268bd264775ce67ae429b73acf45ce55e35ce2d51721648c6507dd4dd8ed4235f60ae0577569d06bb86587e34b33f\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.316\",\n          \"version-display\": \"7.0.316\",\n          \"runtime-version\": \"7.0.19\",\n          \"vs-version\": \"17.6.15\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-linux-arm.tar.gz\",\n              \"hash\": \"309f86a7967375de0cf7b173c259ac62a65913e0762177fbced41e2af3c0d2f9abec61222d4cf9bcdb3c79eaf6616c6989c78d4be6ba8bfabb7aa25193c13f1a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-linux-arm64.tar.gz\",\n              \"hash\": \"c6c7d57f6ddcb26fae6cef846745bb151296d0f359526161a0e700d9b54ccaef6a24acf2485f2abae1b7305608bfe9204ab89842a712f2913caa092efb756833\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-linux-musl-arm.tar.gz\",\n              \"hash\": \"81349ad4f80ddb9a5226065bce69f56deb0b69d5fa9cf930c78619ecca72b9fa4c9917d5b6bd4bf350206f826f3440b054961223de67903687bb1089e62381e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f7bf16b5cba3d8f0c25b9571a553205465d61697ce87634930dc4cdb716be12c20cdfaebce098e551ac11c5dfab31389878d4fbb0af5ff6f48351b0b23fd5212\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-linux-musl-x64.tar.gz\",\n              \"hash\": \"5bfd25a133a12f9bc81f8b6bbe93a2f82bfc63a421c997a04e480638788237bd1a87a9997ff5fc0c44e18f44129ff5681f8490ee6637b8b120d89df109f3657c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-linux-x64.tar.gz\",\n              \"hash\": \"1489f33f3314b93ac7b9411e4c884fb630622336bee6765b7f193aecda8798cfa201ae0b32d82ec401d5839601d79d6a854832502b08f6eea860fc47fc1da6f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-osx-arm64.pkg\",\n              \"hash\": \"e730411e4bed1bada847751986d12110e945654069e9c97f1dd0591ec4ddef1aa20d3b3193052d608161ddf4aead666f99b0ba39b4faa2dc3264f3f1a6f9ebd8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-osx-arm64.tar.gz\",\n              \"hash\": \"7f59874fb1638f6f09a5538483ed1b39e482a90bc11555b07cac8fc8ea941dbd9419f57fec252810bb324b89d8647b6bf32d1bd4e6b720c568929d82297d260a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-osx-x64.pkg\",\n              \"hash\": \"1a58c3c560d41c858160ba81c86cd92b2e793b41243df7386994a277281f688d5b98abcc9f7ea8450488826fb37feb45f381ce5e11dd94563c9aca71af5204ef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-osx-x64.tar.gz\",\n              \"hash\": \"52a96edba93029283d555c13abd1c1b016870bcdbf10db4caaea6f4b18c46aff3b49355f8bf7b8b2548287c1bc31dbe38c6b7a27e40c1129c2eb010c697c002c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-win-arm64.exe\",\n              \"hash\": \"8614d6252f7ac6c9115933111c14a1447c6dd78f2507a978f05e69a359dce2c476cea781f79b91d0c4db9800fbece6bfd96c544c8f939c07929952b49179a3d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-win-arm64.zip\",\n              \"hash\": \"73968b9d8eb4219eef39f7d2225d2bf68ca1dc4bb261f4348117088516a891f6e90561306ec98314a9d5e07e4558e19fb0130e62fbcbea5e0b061701dda0a9c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-win-x64.exe\",\n              \"hash\": \"0ca295453bb59d61bdebd1f950b2785c55609e14e934b8118a50756431df167d5efc0ea3fbc9818548289e91da0036223e7e5d1e194eda750e870d344170dd09\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-win-x64.zip\",\n              \"hash\": \"ebdf263140174457f400c53f239e2820e0fea6c756d297148e372d6778f638ce9631443080703dedf79d83145c20fdef5c8846f2122afeb9018fc3781f40fc2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-win-x86.exe\",\n              \"hash\": \"da3e5831ad74677cd3e31074bcea3a150a2875f800c51df5a8a8a3a951dde31c8a6aeae0b476b25b220cd475e55decd882ccbb078b154c033156d2295435c9a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.316/dotnet-sdk-7.0.316-win-x86.zip\",\n              \"hash\": \"16ca576e1e736831cd7811da7c572263dc653c1dc2faa838f67bf110081d0c4360d4661b113dd1d21fc7affa26be34f4fd4629d3e9a9bfa050453174a1fa08fd\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.119\",\n          \"version-display\": \"7.0.119\",\n          \"runtime-version\": \"7.0.19\",\n          \"vs-version\": \"17.4.19\",\n          \"vs-mac-version\": \"17.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-linux-arm.tar.gz\",\n              \"hash\": \"174df9357b0a08c6a7d13e1862965ddb4c65f3143025b766a62f1e3eb8da1207ec08f3db1ea01c11f857eea605e991d5060cc9453fc8498e41494231919f571c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-linux-arm64.tar.gz\",\n              \"hash\": \"187b1422f0ce4eb59c3f894cacb074abe285ad0346ce6cd95a240506167932f08c90ef2529492a8fe6a9abf8bd7cf3dd4c7258cc5972ee4fa630d75f03b42ccd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-linux-musl-arm.tar.gz\",\n              \"hash\": \"08dad0d08c987967a7c5ea3b1d552c25b541921c978ef845d159b94415786aa5ff3f58abd1745212fe479044157d2a7fa7b43070bf04163fde7e814250055f3a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-linux-musl-arm64.tar.gz\",\n              \"hash\": \"373fb4bf6336af3e0daeda8f10f3b0c00ef06de7e72c4f33ffdc8a7a1295bec49eab95f172fc165ef7da2d48fd5886259a9b084adc80abe19133ac41a211d435\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-linux-musl-x64.tar.gz\",\n              \"hash\": \"117accf61cc7ba2ef1e282f721af4a39650da8df0df4517c284fa2080c78854577282d72664bc9e7081d1812acf8b767245060e385b7255b61631ddabdec68a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-linux-x64.tar.gz\",\n              \"hash\": \"6be08bbbb9d961879b63943413b70e0ceff413e68af59c5c5f01120b02c605e83145a5a9f3417563f9b39159cc5ee149219e99e48ebc92ca2b25c2c0554dd5d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-osx-arm64.pkg\",\n              \"hash\": \"9eb832a2e7799b1db88d4e293e6f5c4514b2639ecf0788b8b17bf7707c8f778bdd78964f1870826d5170de5e7232d17789fb74f487ae036370acca5dd22c8e17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-osx-arm64.tar.gz\",\n              \"hash\": \"c411bae746be15f270513412a38e8fde5a72795f876f26b7e5452eaecd3b4fb0e979f9391e0f5f652c692a4516741f2165d77afd5ef264bb24b8bda9cc1e4bf4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-osx-x64.pkg\",\n              \"hash\": \"ca4ed7de5f0e710144556a2a4e4c85a668880ce3d6b53e0d6420801cbcda58446ce0b8094d8d9b8ffeaa827746fcd96ad5da0a6a6869466b1ad6cee7ad01acd4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-osx-x64.tar.gz\",\n              \"hash\": \"dd70345a9093abfd0a839394e425c7b9907afc5884828127ee503ead5395338c1f1b013a481eabff6f1ea1e9e57ce76ef0875d5feb1540f3b05539e9afd129ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-win-arm64.exe\",\n              \"hash\": \"7cf8cc33aa41a005420fca136203f0cbc58d93610792d1b8e278a966062299e8fcf74d8e2e9cb7dcb6fa9a7b9632013539dcdf7aa1ef1a7f3cebfcc783dd5ff9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-win-arm64.zip\",\n              \"hash\": \"a692e0c35fbd8e90ef2809d6b1ddd392c91ca6221852d0a25d89234e1ca94bb5d9290d70a9f2da60ac29601f628d10ca8a4d3dbe01ca982c606faeb7396cbbf6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-win-x64.exe\",\n              \"hash\": \"1927e0541c82212d3b57cde41df53f360045953953fa6d851a69d9e1fb570829da4f1179f262079e2ebd43f531afa687a0f699d2c61e57e0f7b3d4d6dfd607a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-win-x64.zip\",\n              \"hash\": \"c944fb5c27cbca981c2887adb3856483f15cca6507806f4d5d17e1a9a1991a1138ad685f849aa6edf511c348ce30b7894bcbcb9d01550521ac1fed7ba31f079e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-win-x86.exe\",\n              \"hash\": \"964d0ec02d36936422b8a803cf3ea3223bd277700a07d5417ea82f87d89e9cf4c8dcbee9b5083ad1d7216890dda823f59919509d77394b5b14117ad410afba0f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.119/dotnet-sdk-7.0.119-win-x86.zip\",\n              \"hash\": \"5d2dd8b325dbb9eccd1f40bb08ea1eb1466fa4f237647eadb80e7465e6ad815b2f934a3675453852faf07b3cafbc974bb51c53c18d42f0f21463f4940d5a51ff\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.19\",\n        \"version-display\": \"7.0.19\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.24114.19\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-linux-arm.tar.gz\",\n            \"hash\": \"a9f8fef6515beeb45d1f5ea9408ef2ba12f1be7f1020632691e3c0fd68b94bb802ee55153e6e3578049f6393132709d6c2f11d0ca9c174780a9bad44cf770c4f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-linux-arm64.tar.gz\",\n            \"hash\": \"c71e6a756bdac7f68289fb6c67fcb8c347586e421cbf4345fb510686ff5948e25898759dc7ab30904ac07a7d595508e59d66b5b6dc88d30b54c141c82bd590cf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-linux-musl-arm.tar.gz\",\n            \"hash\": \"f4fc9e3454f19078d3dc8e02e4e630ec73f196f071c9a3eef48efec905f4ebea8c96d67410fab1d769f5e169938e4fd6056b05d03f720dd494d6d3ad3a29799c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b7680432ed7347cd8c6d66c9491401c1386f4b0af395d22130460ef13215c3a80181a001d7445e8e19d0ea702bd4d6f0907c3caf7ec8614f69cacb7dd3e99eb8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"4d469585d06256cf207b077961e920ea3a654e32fb984b72c3a11203874c84b9a4da0f20ddd3e3df40509a372482b20d69d81c72539bfff02345635c896b7efe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-linux-x64.tar.gz\",\n            \"hash\": \"569fcc25f0c32df3b28c4569bbeabb6c20afc8865088f14a405d3847bbfd159cf291d2dc4810140b8f436f06c95ebb09214ac837b5ade6bd8121e9c0204eb217\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-osx-arm64.tar.gz\",\n            \"hash\": \"10fdc9868efdd8cf25dbe10843ea17075747cc1bee52e495af7e1858ff556dac2802bfcc85fd474527f142672b45e7a1c5b63a927529036923671f6cb9092431\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-osx-x64.tar.gz\",\n            \"hash\": \"5f16d0cea6b637ad9835dabf23b37f47d8fe92fbd4cfb1ac046fb607beb380255759f14f3e80f9a49c3545afc47000c770394d4dacc5b7444ab0b6d87a5336b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-win-arm64.zip\",\n            \"hash\": \"a48ca8958cbcd874f7ba9ba3c161e59727d3de91e310897322fa4806f9b0d294c82e817aaffab4420024d0802f7788c354bdbf9de45bc91dada48d6e1d19cccc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-win-x64.exe\",\n            \"hash\": \"08fece331c61d8fe13b525a6129109f0c77fc586161509bd9f8208084206de3275f4b1fee0b8c28d6e087972c2d5c03225268f21720bf15f740cb33e9a02fc16\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-win-x64.zip\",\n            \"hash\": \"1dc52c048df6962db66a574fe11f040e9536e7527c4fcd01814afa84f856481c1341f4e09547648e44bc5d34299129181be15215930b40a8eb321a0e483fa64c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-win-x86.exe\",\n            \"hash\": \"d1f84d6e8f3009a0fe46e1efaa4e7f9e0048e2c64ce7df0ef1aa6a1782bbadf611cf3dcd23a7ea060a02ca314a1d0e6914c82f13cf92bba26fcf22ac808b3c1e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/aspnetcore-runtime-7.0.19-win-x86.zip\",\n            \"hash\": \"82af8dfe51a5b88059d99eb8ce8b7806f2791350eecd0cab78b773fc35aa9aa706059c826d0ae78e025755649c4806b320017353193143b96273eff4bce27634\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.19/dotnet-hosting-7.0.19-win.exe\",\n            \"hash\": \"e6b86e66911a18d5544db6817a4f5766b59c174181d00da0a95c16ce49a8ceaf1eab43094920e7a329b248a9a1e3e5514b019e19a3e39f2726e11da1213022dd\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.19\",\n        \"version-display\": \"7.0.19\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.19/windowsdesktop-runtime-7.0.19-win-arm64.exe\",\n            \"hash\": \"aed3c87cf5f42b7a63ba1c2274962b57236b866529afc581896ec8d2ad97acaa5fdfafb483478cffa6617e5f7e390941708a10108339a1978ed00def11b86344\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.19/windowsdesktop-runtime-7.0.19-win-arm64.zip\",\n            \"hash\": \"e9117e8c611eea9b966a18f1ccdfafccc5429598e32a970531fa799c4000c57563414849fab311c20cfe610950c73af6ff79c24cff0a86cd6d1f8b079fcefcd9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.19/windowsdesktop-runtime-7.0.19-win-x64.exe\",\n            \"hash\": \"a5bf3d8a0552d780d4b5dcef7b4b8158cedd4c3d724353343912861c1195d21706ec52b718216d0a4f9cd65cc385afb6864115f9217cd72379fec22dd37be3cd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.19/windowsdesktop-runtime-7.0.19-win-x64.zip\",\n            \"hash\": \"46683cd7f7539171b82dc98ba8a357856d50383fb9e15ae657098d9645a70fbd73c9bd242d1f1197ef7530eddd01da305df23692e64aab55bf3be2ac8c2435ce\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.19/windowsdesktop-runtime-7.0.19-win-x86.exe\",\n            \"hash\": \"bae6f65513a65b661bd762094a729a5683306d0f1bda1a8071309baa632abfd9902d9c1436d20f703a94aa8c0e3133f42fae619866be1785a01cd997390cbe41\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.19/windowsdesktop-runtime-7.0.19-win-x86.zip\",\n            \"hash\": \"9915b8a5bc4a8bbaa4fe42c2baa075cfbcdcf8b71d5398bf047bc4695263da4274421f31822d919451d90937fd6eb6b9ef5c2f1c22ebe93d6880ea21c8e71db6\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-04-09\",\n      \"release-version\": \"7.0.18\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-21409\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21409\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.18/7.0.18.md\",\n      \"runtime\": {\n        \"version\": \"7.0.18\",\n        \"version-display\": \"7.0.18\",\n        \"vs-version\": \"17.4.18, 17.6.14, 17.8.9, 17.9.6\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-linux-arm.tar.gz\",\n            \"hash\": \"8c9c52a9c12a7081e12072f1e3516771cd22f595c4dc78fd08ae3e55e5e4ae3b49f0c966b56e499783fad9b496638070cc22b27ed7b2b531793e611156861308\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-linux-arm64.tar.gz\",\n            \"hash\": \"7cf7d3b0b12cec234227529c66f2a2ecab49e63af2c766d7539b6591f709342da4f2b846726630ab6104a19cd94c1eed5ec66e1a773e3477b344941bc1ee5f41\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-linux-musl-arm.tar.gz\",\n            \"hash\": \"807d0472f05612b5b36b6d08978173cd434856d1fa8ddbf326146628c2cd55170c7490df713dc76cd5441679c95c71f9884ad8cc46e9219217843458b36c9bb2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0bb9e0bf5f29bd3c7e2e756f5504807f416d345b42ddf501fbef3150a485795d5db84724e1e08b14482a3822934a028bb5fd59defaf2e5eda97aac6fb84490bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-linux-musl-x64.tar.gz\",\n            \"hash\": \"778908f17f518360fd4f883b0ff52285955d09b42eb50fd75944910f56ad027fb86e2d587ff1c2d77a0465373a1019d6eaad2d2103eeb5a774776fcd5171b6b1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-linux-x64.tar.gz\",\n            \"hash\": \"9d2aaf11e798d8dbfa74a93cfc53c6bb631cfb041b5dc55c208f980f61808e872dfa9880c7d9d4b42aad934e5350c9e8f327664909054fa0109636158701b4b8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-osx-arm64.pkg\",\n            \"hash\": \"ef82d5f6fe865f424c6778117e8bd5a02818c34ddc519f3c1be3a0fe8450b4d7da1f2e1fdf679cea470a521f982bca658575b33ba4f3686fea6d6736ade74557\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-osx-arm64.tar.gz\",\n            \"hash\": \"f9a5f09afd9c7cead985cda7db03fa6bd6b684aecedb2b8bfe3bb2569704c233501b1f9888e2e26f273d5ab124b0b9fecf3edf8c7d0b0908f5a499323c67515f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-osx-x64.pkg\",\n            \"hash\": \"db52b7a08fdd799f2a5222625f61188952c2ce1a5d7c23a39a5598959f9ea5961749076078121434be108c87ac2e7beb42e01fe875197ff9b10d972eb7c72d74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-osx-x64.tar.gz\",\n            \"hash\": \"ba790572b8b37a33766dcdfae319c5021568e49be3d9a55c688655b1b4174faf6cf20b3077fefaf57fa2b12261b682a685345db77034412dc883cfa05b8e8ca9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-win-arm64.exe\",\n            \"hash\": \"f0b4cd7fcbe046d32f63e2c90a969e25323532e22eccb734168f92f24a767cacb9276e2c3167c4f1a0c67666f361f43fa15faacd47714f504e16243d3d5bd781\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-win-arm64.zip\",\n            \"hash\": \"8b8960592ad08e0c0b497196c95d5d9d6de341d68c3a2c166571d110de43186d1d10e69509f3dbc895336bdd7c238d218906b0b0db85b24c281b1ef05db575aa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-win-x64.exe\",\n            \"hash\": \"f7356a39748af2f257ceea29cc4266e99ce02f14a789f14c70842b0f8c18c5336654fa5ed6546913755a590f10ee1d9df630e1f44f2cd7bae39b2db4706f5d52\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-win-x64.zip\",\n            \"hash\": \"94152f9410b0ddbe5cc5693f24f7c226c112ee30bfe7af6eb6cbdef2cbf5e6e596de1306572a5941451f80b9050f2ffbe259da4608b82df45e1c126c3ec0de73\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-win-x86.exe\",\n            \"hash\": \"dc1aa013d145cc991aaee2cc605b714c1d0ef070222fd986c411a8d69dcf8b9e2e19dceda83fb34ba95fb7369b63000c7f84a071816f612eeab53bf85dae5b5d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.18/dotnet-runtime-7.0.18-win-x86.zip\",\n            \"hash\": \"be3923495305a44fbf99965b7a568d0a3f3ef1601abd182b9813632cdfb290a1255304ffcd61d0b12f69b4454426fc5873799f1bf73639334af5db673d9d4262\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.408\",\n        \"version-display\": \"7.0.408\",\n        \"runtime-version\": \"7.0.18\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-arm.tar.gz\",\n            \"hash\": \"530cf32f3dec297c6fcd2d3b41d6aea4d897982ce72a442cf40662a36342afaa6668fa84840cae54bed224ab781559af3b2d9d303149debda7fd75d3904da51f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-arm64.tar.gz\",\n            \"hash\": \"7c5e18f165c2d74345102244a617b475b68c208434512211af154b28896ebe5487caeff96b278e877af384e6e0deb476d38be16d275ad88af1ae177afef561ac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-musl-arm.tar.gz\",\n            \"hash\": \"bf37caba9ef5df4388d4ec3740301a9ad2a48561b1ab563efc2e0c3b66400ec863506cf17df2056e913742bd642db29b543274c7c61ca27d9aa001164109dc93\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-musl-arm64.tar.gz\",\n            \"hash\": \"019def202fcc5c9ccecd8b1110835805dc987c3516ee86e8e43922d8e4deca9b3c92bf4f080ae15226d8aeb4e6af20a1208b94275db7bba8429650b016a05aec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-musl-x64.tar.gz\",\n            \"hash\": \"6247b717ff1153c91f787f47570baa2e7e3c56d71408c3d0b6119deaf9282feef7b0aa95050503ea55a1e081ccd9c4bae7c19d482cf4436331b6fbe3ddec91a2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-x64.tar.gz\",\n            \"hash\": \"89d39601a27cbbc74a5dbbfc6dda6661220e76b73f7387fec6558222aa144734b44db5788bcb888c7f49d4659c8b0ea60794f93ad1223c86ceafdddf6e6b70e2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-osx-arm64.pkg\",\n            \"hash\": \"df42310c6bbc7ea5e07e83cde66ee31d88fd6e6c7e9f4ee34dd1b143d661033df3ae0c2e8c96ac51e5f02a0d8df4a1fe1fcbb248e5d81d1b5d32b2810f6c57b1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-osx-arm64.tar.gz\",\n            \"hash\": \"ce1b9f7bc67c80b8774b7a8071438027f322c35c330be2667bf15a80a8826a32d9f8a7d2762ba7f3c7417b31f3ac288f336956f6e701d282e80f02c68b805177\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-osx-x64.pkg\",\n            \"hash\": \"d98861796d4562e4d1c465637742136a628c8d7852bce6c705bbc724d3333bff6aae2c4f516dcdede23d785901cdb698247427f327d162df9c26e33fe652f188\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-osx-x64.tar.gz\",\n            \"hash\": \"b183b1a84b345f8e41701f0f1cdcc68d0bcf286d3aad53bf04d860bc6260bde87a6797f6c55ef807609680c10b6efea6bcdf6732d3fa097ffaa99b505bbea7a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-arm64.exe\",\n            \"hash\": \"23c1c50ead578bfff4422e575dfd941187d2c9b48be1dff12160ddb333ef4ce4f8629a5eac97ca2a22a5acaf1c4052304590e624215684b7deecd9795b8a9816\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-arm64.zip\",\n            \"hash\": \"e3b7273afaf89b69653ac7d6584fdc9be250dbd3d0246c9d2bd2a227e32a9cdfd03c73cb1a304c8ca99179b0da94b67b976cb92d40f151a05fa153d3a1537585\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-x64.exe\",\n            \"hash\": \"02b89e494c0374fc5d8830428607da61a3a87b2b9ec08da4c7802e2f13121d6def8316ca8f308547b291f055a7f3aa885032f257788e25b3c87e54546f778f44\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-x64.zip\",\n            \"hash\": \"ff6b6f65208a8ac983505b6cab1c6fd8d232e0f3138d8f90dd35bd799fc361ad9412770a0d0a6aff04eefcf02094acf0f7a63649a609a8da4090e69c9d93b72f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-x86.exe\",\n            \"hash\": \"69b0e5d2a30f69c2e5284868ea43f6d253c33c078ad07a6054c3145fc5be825003e98528e48caa3b1c8d1bbe2d3bb5aac4fb52a04091901bb28649e938e8fa2c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-x86.zip\",\n            \"hash\": \"6de2cb1187c8fb75c7cea70188eca1a8e0d729a8a24b1cea8bbd44c8d0cff25452ec2a2aff924047655d80c4508f50f2d2dfd7791e475b69a5bfa8301c4a72fe\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.408\",\n          \"version-display\": \"7.0.408\",\n          \"runtime-version\": \"7.0.18\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-arm.tar.gz\",\n              \"hash\": \"530cf32f3dec297c6fcd2d3b41d6aea4d897982ce72a442cf40662a36342afaa6668fa84840cae54bed224ab781559af3b2d9d303149debda7fd75d3904da51f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-arm64.tar.gz\",\n              \"hash\": \"7c5e18f165c2d74345102244a617b475b68c208434512211af154b28896ebe5487caeff96b278e877af384e6e0deb476d38be16d275ad88af1ae177afef561ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-musl-arm.tar.gz\",\n              \"hash\": \"bf37caba9ef5df4388d4ec3740301a9ad2a48561b1ab563efc2e0c3b66400ec863506cf17df2056e913742bd642db29b543274c7c61ca27d9aa001164109dc93\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-musl-arm64.tar.gz\",\n              \"hash\": \"019def202fcc5c9ccecd8b1110835805dc987c3516ee86e8e43922d8e4deca9b3c92bf4f080ae15226d8aeb4e6af20a1208b94275db7bba8429650b016a05aec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-musl-x64.tar.gz\",\n              \"hash\": \"6247b717ff1153c91f787f47570baa2e7e3c56d71408c3d0b6119deaf9282feef7b0aa95050503ea55a1e081ccd9c4bae7c19d482cf4436331b6fbe3ddec91a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-linux-x64.tar.gz\",\n              \"hash\": \"89d39601a27cbbc74a5dbbfc6dda6661220e76b73f7387fec6558222aa144734b44db5788bcb888c7f49d4659c8b0ea60794f93ad1223c86ceafdddf6e6b70e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-osx-arm64.pkg\",\n              \"hash\": \"df42310c6bbc7ea5e07e83cde66ee31d88fd6e6c7e9f4ee34dd1b143d661033df3ae0c2e8c96ac51e5f02a0d8df4a1fe1fcbb248e5d81d1b5d32b2810f6c57b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-osx-arm64.tar.gz\",\n              \"hash\": \"ce1b9f7bc67c80b8774b7a8071438027f322c35c330be2667bf15a80a8826a32d9f8a7d2762ba7f3c7417b31f3ac288f336956f6e701d282e80f02c68b805177\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-osx-x64.pkg\",\n              \"hash\": \"d98861796d4562e4d1c465637742136a628c8d7852bce6c705bbc724d3333bff6aae2c4f516dcdede23d785901cdb698247427f327d162df9c26e33fe652f188\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-osx-x64.tar.gz\",\n              \"hash\": \"b183b1a84b345f8e41701f0f1cdcc68d0bcf286d3aad53bf04d860bc6260bde87a6797f6c55ef807609680c10b6efea6bcdf6732d3fa097ffaa99b505bbea7a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-arm64.exe\",\n              \"hash\": \"23c1c50ead578bfff4422e575dfd941187d2c9b48be1dff12160ddb333ef4ce4f8629a5eac97ca2a22a5acaf1c4052304590e624215684b7deecd9795b8a9816\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-arm64.zip\",\n              \"hash\": \"e3b7273afaf89b69653ac7d6584fdc9be250dbd3d0246c9d2bd2a227e32a9cdfd03c73cb1a304c8ca99179b0da94b67b976cb92d40f151a05fa153d3a1537585\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-x64.exe\",\n              \"hash\": \"02b89e494c0374fc5d8830428607da61a3a87b2b9ec08da4c7802e2f13121d6def8316ca8f308547b291f055a7f3aa885032f257788e25b3c87e54546f778f44\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-x64.zip\",\n              \"hash\": \"ff6b6f65208a8ac983505b6cab1c6fd8d232e0f3138d8f90dd35bd799fc361ad9412770a0d0a6aff04eefcf02094acf0f7a63649a609a8da4090e69c9d93b72f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-x86.exe\",\n              \"hash\": \"69b0e5d2a30f69c2e5284868ea43f6d253c33c078ad07a6054c3145fc5be825003e98528e48caa3b1c8d1bbe2d3bb5aac4fb52a04091901bb28649e938e8fa2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.408/dotnet-sdk-7.0.408-win-x86.zip\",\n              \"hash\": \"6de2cb1187c8fb75c7cea70188eca1a8e0d729a8a24b1cea8bbd44c8d0cff25452ec2a2aff924047655d80c4508f50f2d2dfd7791e475b69a5bfa8301c4a72fe\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.315\",\n          \"version-display\": \"7.0.315\",\n          \"runtime-version\": \"7.0.18\",\n          \"vs-version\": \"17.6.14\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-linux-arm.tar.gz\",\n              \"hash\": \"467eecef0962e24c6ec123a41d1bf765c4877ca7eb07b4a444bff159e1680ab145646a317290f1cd15e10ae0a4112b58fdd2d582b0b1c0d2258e5c901263eff1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-linux-arm64.tar.gz\",\n              \"hash\": \"a480e012760980121af4eda39dbd0640e824de13f10e916a95e77b7fb591a3c516d40da45fe56dc07cfcbdf24074f4579145d00d45c84ef299ca9ee779c43903\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-linux-musl-arm.tar.gz\",\n              \"hash\": \"767ea1c2f821bcb1bb09e42eb0ddc922573215d4bc0ca19733e8c644aeb5e0985e2453ac99cc99395cdb78a983149ca6868e60005bdf3960c1011939fa40ccf3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-linux-musl-arm64.tar.gz\",\n              \"hash\": \"9b739df0fddd12da7f24c9a1aa667aec7a4478c43624332b507b729f6d058841f70f6822a721651a2746b7366a8c211882794b1994141d7df8bf72a23eac20fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-linux-musl-x64.tar.gz\",\n              \"hash\": \"3f9ac9c3568cc8e559f1feb2b475f84fb45cce69ca114f48a82d0b186a81f170090ad6709790d1faa6e0c08e2199e4623d9745439e36f2fde29946c5e61c80a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-linux-x64.tar.gz\",\n              \"hash\": \"ffbaca47ee2a3b601abd1e8ccc99981e55d5f904072d5dc76e0c817940bf1ac1b71f5e652f649112bcee7328bcf0408d203b2f7c91d58a6aaa58c8ff553e49f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-osx-arm64.pkg\",\n              \"hash\": \"280dbe4db48295e8b25691840a0c63f550a74e78415d44918c73c99d674dfe8bdf61d92b098cac7ee5f1021a96b164f75ed9adfb8e98a714e36bfb99e3e93c23\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-osx-arm64.tar.gz\",\n              \"hash\": \"f146ca3f530a96fbd14fe550cded99d36b35dfef4536f2a9174985c933db42c9a6d44708cab83c93a701f6482e0cf868e7aee92385cec201b9d0b5d5f348d642\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-osx-x64.pkg\",\n              \"hash\": \"70af06b85c1e6231e5e9ccb233f5738755243f77994d7cae598c2f3040e97fbb4db38777fc1cb3378fde2ca93ee781228fbe372a88de8d68cb51355f02e06fd5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-osx-x64.tar.gz\",\n              \"hash\": \"7a7d3c32f71a89bf0d9e809b068252c2496109ae226acaef163f7221e4a8231a2faa2e81ba0a95e7aeef7780691cb59b993e999d45076a280da518941b9fd2ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-win-arm64.exe\",\n              \"hash\": \"4ece84effa6ad2335334ee42b881c85b57521a0358c6574292da299699ea8202c9cd3df7b26b8b2ef82a8c751a9e05f2a71e8821cfc0cbd6aab4198273fbb79c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-win-arm64.zip\",\n              \"hash\": \"00fdb4c6856ee65eb834682e7bb24572ae111f500aa2af0815ccb82443c0c697d4947f54d68b75655cf2d1e1722600542303e35e379d3e2258aa6e31f9d451cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-win-x64.exe\",\n              \"hash\": \"cc1c60d78ba8386d733900f09aff29a538fc5905515163c0f9ede052a5914cd9a7c54714a443e0665d263e61da07c111eb6b05158fe74ee65acec3c6cb453893\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-win-x64.zip\",\n              \"hash\": \"7fd844a3181b26d39de5d952f0dab5bbefa8b2ed1cd360a2fbea2e5d5730e530fe3bb5f381514dbc2025c312f4036bc5a5d61f3dcc440522d0c0ab2155017824\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-win-x86.exe\",\n              \"hash\": \"8434d0b7f241a0e9d69cba35628fae6216c0ed6470bac656cb93eedefd3b5440e0e7c12199846b3d8d76b525e289ecbf9dbfccbdaaa3b230d9606e3f9d382609\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.315/dotnet-sdk-7.0.315-win-x86.zip\",\n              \"hash\": \"3717a79d9784e35a756d0a69222d71e76d445a997ddb272e588ee832477305a5a1f22d5c7c95d6ef26a955b7799e1f9b5589e97ae5e7de0f0a27827c3335f02b\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.118\",\n          \"version-display\": \"7.0.118\",\n          \"runtime-version\": \"7.0.18\",\n          \"vs-version\": \"17.4.18\",\n          \"vs-mac-version\": \"17.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-linux-arm.tar.gz\",\n              \"hash\": \"91c106ba4d57cfa73873b21fd38875db7ebf59503c5ddf953afd8d6cd4e990e478731dabcf34f9e64cad323c6e797aad53ea13948270566b4a79adef565e49c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-linux-arm64.tar.gz\",\n              \"hash\": \"8e5358e3824ec141ee8406e0a67b8d1bf6965a4f9e7487bdee4ff02344078e95bffe4c46c0f1ae975b1caf7164387d35763f1b81abd2e66593b77cc0470cc957\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-linux-musl-arm.tar.gz\",\n              \"hash\": \"a98948e0fd562d426ae3e3e90893b317bc4f48c701199bfeb1bcffd002f450b1e196ea70896cc61247ef62573472d1a0fdf9de7c392ba2225e42c89ac3bcd87b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-linux-musl-arm64.tar.gz\",\n              \"hash\": \"fb5fc85c9fa55e13486a6a8029e33984f7d7dc80cb9a59aa4d7d9a69807d8c64577b7e1b41c8a694676b0353b74f205d423c510a223108ae8b2851c0e691de51\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-linux-musl-x64.tar.gz\",\n              \"hash\": \"11d9daf0b80c4c735210c54eebda72c86e383a1cfee1129755ac2b06bd813e386d6650bd0ee54e7f8052f770ad15e3954fee2eb21258690ad59917823b01efee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-linux-x64.tar.gz\",\n              \"hash\": \"4f34257abcc013683c0747f5510cddf26013f5ea4cd068efd7591b0a6e809038395d57842f163489884046bcc54ac7ffb406fff91701c9e371920efe6396b710\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-osx-arm64.pkg\",\n              \"hash\": \"d0ca7a10cd2a6ccf7ea50b740547a91f4aeb7c468de1bd3c4a36442054141fcb04c8e11dcaee397c85f78088ec67a998b70152b5cfdd22b7af927795bb5b62b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-osx-arm64.tar.gz\",\n              \"hash\": \"25b2fd5a26b870f5b0f407acb3b0cdabe9287d2f7b7c3db81f85e34cecb7a3211a72ee54d0e0adafbbee151387e1bfe51e3681b6a0a347509bddd14b589ba117\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-osx-x64.pkg\",\n              \"hash\": \"bab3269f72afde525e09ba7c816fcb4af366a6ba230282dab7989de8f2101d476dd90464ef5299b6e4b61136903534ce133058f123319cbb68ecacb31d50c536\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-osx-x64.tar.gz\",\n              \"hash\": \"48081b4b53f7dd79aa9e11e362ab53d50b7efdb48f18fa8f0828c5e179c79b36b192b9b514e9effb04688838bf87a4d4b3763539fac34dd2f2570e1b8882d7b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-win-arm64.exe\",\n              \"hash\": \"244d1b6517f1fbe41d41bb8650927128574ad20dd11b37578a693921036b1260afea7a6c99b7e93ad8af200a228f9a366b96798d410487da5813dcb10836a287\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-win-arm64.zip\",\n              \"hash\": \"529a98d7de14ba220f5a8caa99e4a01638ea0e70cc14657d01ab4ec7e82a0b481330bffe8696a0794cda974a4899a3c16f391c1de171b53bbc1b687e5c1d1457\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-win-x64.exe\",\n              \"hash\": \"770d2c7309ceeffa1d485f44f8728a9e5aec34c8b77fb6da4e9a034a3d1d4309fc6c931fc023ddf87b69f464271c6ce26e9ae9bb08fb5673c66e8c6466927c62\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-win-x64.zip\",\n              \"hash\": \"24a76983e281c28e44581d13f0dfcc157036f92c9eb7929225c2b7307a98fa74fd42f5bc01d19b7bc93d1c999412c91f9a4035263e7f1589a65b782342bdca08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-win-x86.exe\",\n              \"hash\": \"8100bb1a72e515a1d1ea355dc5e0ede56ca4283e6a8391b88a63f9171e23ab5502742677496daad4fb7f9f64e10503e32b5f792f49523e5b7a5794284fd972aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.118/dotnet-sdk-7.0.118-win-x86.zip\",\n              \"hash\": \"900d4a457b7aa6faa4423c61e177cdfd077231ea7aedca3852e2a8aa0dc7b13f175c0ae26aef35307ef19c72bf73a2b20803ccb64153d2f0bb5d08ce81d94dab\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.18\",\n        \"version-display\": \"7.0.18\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.24080.18\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-linux-arm.tar.gz\",\n            \"hash\": \"6091a5b215867193a4ac85e8d38d54ea4534ef720319e79d3d15efba1a3e9ecefbb51fcbf9d1f0b132d808e235ea812fbfedfa2a2dbfbf7e3d8c3e68a3fbf710\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-linux-arm64.tar.gz\",\n            \"hash\": \"62bc42a8d094be8253be90acba02253c27afb1eb6b06976c3adea74f967f522bf7938eaed25c824d6e36a9fb71f7248ba315cc67577a3c7fb73b0d3d7a41ecac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-linux-musl-arm.tar.gz\",\n            \"hash\": \"d3a5e58e231c7b923db0b0400ffe97514f8267e327a6cc28a5f820d3baa4bf6a03cd31bb4b6c8408138fdeb9cb0388d018a3fdeda67e4a31af28cf16c874149f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0b34bb383e6bbc17489bdba0c006a866e56a532453a49b95e3d39c830924462f45c6b757ebb416a32e40180b852178c35ec1b64ad761f33b63a98ef60e01ceea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-linux-musl-x64.tar.gz\",\n            \"hash\": \"9a89712051d663933850543c6bd9ef6ba99d42df974f12d5c0e6d31744321b50e8f02e75b0ddde4c6456f03f1f61205ad25c29f02b33c5e97110516efa7730a9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-linux-x64.tar.gz\",\n            \"hash\": \"d2c3af93b9b8280c4e519f052f443e0504ccf7a04b3eef60500b2e3a8874a60a3a545ca936f8433887bfa6388106c19283c5a6a2c78ffdc19889bde3edbefbda\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-osx-arm64.tar.gz\",\n            \"hash\": \"3c56c17545d530a35cc13bad410da1caea33bbcc7c3a857b4d68f48a64f02cbba516d83cd0a3fea9a8ab463dac8140a6c079fb63887c176bdb2a44552dc71852\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-osx-x64.tar.gz\",\n            \"hash\": \"50cecd47a75498ffd2862b3a470c0e05848853b163925c0fb27a7912fc39f77aa27b91d4e780d7ef90e6bce22510714132cbdc06cee0db7547c9d79258d29895\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-win-arm64.zip\",\n            \"hash\": \"02b60c0bae10345cb2b5107a1d975092b2335c7b59ce1eaecafa95c5e5e2128db8686f01c629d6cd636e77d1f912934c2bb60716b4cdff6012c48d89705e0aef\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-win-x64.exe\",\n            \"hash\": \"aa718e0af9fa4b35e6d2a444ef0d2ab622a6e7e1d2a505a5c7b50c7428b1bd1c4f5101728e401899e2805c1bfc958f49c29b5b8fb91312a6ae3f2ab559d92f01\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-win-x64.zip\",\n            \"hash\": \"27cdb80a0a28f4d0fb375a5b0fc5bd80e9e4425f6a92dc5c7fc68578c8b6eb1f9a86293e840b056d38914b1ad2a9b05b17f284e2cc459cd5ec81819b89aa0786\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-win-x86.exe\",\n            \"hash\": \"6323a5eacc718158e36e983690981def62a0a84c7e12ff52ba31042da17476269aba476956f5dcf9f36d6b979681055275093016f52537c7f785082d55dbe439\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/aspnetcore-runtime-7.0.18-win-x86.zip\",\n            \"hash\": \"82cb97a72f66f51f154ccec782a0f7a25deb9c3e738e2bf687dcebfeeae2e7b2922b459ff692c802b3af852685fce072bf46999dbf47ecf238d3b12d3f345259\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.18/dotnet-hosting-7.0.18-win.exe\",\n            \"hash\": \"4ab78fada15616101ba33a247666a8bad83dcc58dd06d5e35b83a66f8b143a08a2a8621cca7f66dcf5ba098e1b721f8ad41143f8729f0ab293086c1e5e91ddf0\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.18\",\n        \"version-display\": \"7.0.18\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.18/windowsdesktop-runtime-7.0.18-win-arm64.exe\",\n            \"hash\": \"489c8a4e4c0c173dcf6abcf928b7179ffa82a76e67c95575304056027d04afa251f86caf63b732230b125eee0961c861093efd3e52061f1537754daa8b331028\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.18/windowsdesktop-runtime-7.0.18-win-arm64.zip\",\n            \"hash\": \"f2155d65e68a08d5347b03879b23a7ae402efa878add566de80628f17370bf9df6d3487e6e685a36455dc75eede13e28dccb6d65ac7949c53d6ec38b90c92c13\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.18/windowsdesktop-runtime-7.0.18-win-x64.exe\",\n            \"hash\": \"cbdd6fbdc4a2cf1810f59d247bee4843c91c244bff896b9b4de299edf1544d6ab55125c7f13c0e006fe3cf518141748ec827d5539a1f47ade852a62b5cd050df\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.18/windowsdesktop-runtime-7.0.18-win-x64.zip\",\n            \"hash\": \"b9d43e31da4e6bf387b5ddb0eaf8eae2241c2060d99ff1a347bf0b74147ca7ec91d4233f5a6c6ebbc0b4fb43b34885e5490f109cf79c70e9eee93b48a89c2168\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.18/windowsdesktop-runtime-7.0.18-win-x86.exe\",\n            \"hash\": \"4574b97556eb5b7a72dbfbde348b9e093c4b2e7125d5e7d6d9f2c80c84f55edd3d7896b6d836ee4b9e5804dd33513a77aff66a255ba28ba2fef331755e356a22\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.18/windowsdesktop-runtime-7.0.18-win-x86.zip\",\n            \"hash\": \"779b267617265934568a820388586829400250be2fba0f0d52e82a21a84c969ffdbd3697589a9e2c97de61ecfc90d6c975d0e92ff43ef4301a36df3460d2b46f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-03-12\",\n      \"release-version\": \"7.0.17\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-26190\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-26190\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-21392\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21392\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.17/7.0.17.md\",\n      \"runtime\": {\n        \"version\": \"7.0.17\",\n        \"version-display\": \"7.0.17\",\n        \"vs-version\": \"17.4.17, 17.6.13, 17.8.8, 17.9.3\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-linux-arm.tar.gz\",\n            \"hash\": \"aa23cd2023604147ec418b69b8358e39c322ce9ac4388cbb1d2dbc4cfa6ea3b09b35440075c272748d9a6bc56c2fa491a35ade3302976cb1c171071675ab7745\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-linux-arm64.tar.gz\",\n            \"hash\": \"f3a23da65f11bc43a4ea8722a872132a16d76982da1445b79fbfc8e5b2b38f904fdd22c986a0598d5565dbbf104b4e852ac2bebb7d79cefd20b9b5a1d40036f0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-linux-musl-arm.tar.gz\",\n            \"hash\": \"8f3bd4c79a1b2c9083cb0a454bab2abfd0209833edef9f5bc770a9bf4718370f16caed4759e0a5b6884a287eb9bdcd835fffd8c9ed39fff925e4a3661c217840\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e2cafec76472a62f3d48c03bd9e87ca355b73b4dc13bacd858f0175e6eb2da999419e66abcbed35775d37a8bb8ccbf8ddc87075605312d8833ecf77649f286aa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"5f2038dc6666b850b6a2ef20fbd4c505d061123a656b771ae03d2158db67fd0b106bd8d1f9e49eab4efd8fb36db28cfb937614f785ef942441afdb3829bbbe8f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-linux-x64.tar.gz\",\n            \"hash\": \"bf65378d4e9b1f14559dbe4a0bf5fb7e66fdf9a7bef9d109deccb22fae8a5cac9b5af5df4b67321dbd5f34764d911ba580c62b0456da648a57e94f82be7e4abc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-osx-arm64.pkg\",\n            \"hash\": \"ca5feae17dc43a95b0333dc45247116456b1ad0580a3d76af74ebbae53af527c6fb45d4e2e477f5b1a89f95ce584712f9003d2b3482cffe3ea64d1a7eaa025f0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-osx-arm64.tar.gz\",\n            \"hash\": \"62655e34a84ddb54db19fc0b51955171fc07c987777dbfa8d8abc370957829e4c7baeb64f9596f2a2078c04bb1843b4ca0601e371124f0016084622e68930c47\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-osx-x64.pkg\",\n            \"hash\": \"b971bc5833bb79ffab659a3c692c151f5abd00a94c67440341ee7c6df3c6589ca6d9ab75c4b62b037a7c94e7e1d931b03f61a238d51e637a547409e2c042ad28\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-osx-x64.tar.gz\",\n            \"hash\": \"d9a79b44c9e97e170ca5ff036f36ad64b077abfe3e5913c458f7de0ba55f56e6512ba5ed70bb4d9a056d3674d0efc41ca66507e5f977e1e291f815592f96fd1c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-win-arm64.exe\",\n            \"hash\": \"674ab7b0b49eb6c5d2b31841f693820d9cd059a341ad1a730d5f4775423a51d0408886b1855b7ccbfc66a74f0c51308aef03f30c6fa42213c21d02ea42dd52ac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-win-arm64.zip\",\n            \"hash\": \"c753d7e55f3da6038b6fc15090b41cc0cb073adbbff451d5b0662e163afc53624437b651ffc911f19d4f052e5715fa582de06c5c7139d3e1f0db92fcb8ece921\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-win-x64.exe\",\n            \"hash\": \"96322002bc60d15e0d5ff969586786e1b8f94a8d0db78b1591f196b8aaba1b745a23e99eed5b954e1214feab2d8991277215c9bd6e988f8f1bc201191d48237c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-win-x64.zip\",\n            \"hash\": \"3f331874ef2e4eeae0ee56bc15066eed20afd0ce9be536c86b8f09064eb7b87d5bb4227545ddc7ea9a3b0427bb02873ded1ca8be2a25c358348526282da64942\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-win-x86.exe\",\n            \"hash\": \"116d6ac8646728ebce9cda9b63cb4f23cbe19847d31a8efaac029f0ebb2fc9bf414d48b76637198db2af2ba9bfe64b720f2e21c6b4728d7d588b560188d59939\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.17/dotnet-runtime-7.0.17-win-x86.zip\",\n            \"hash\": \"cc2f04d10cb2467afc319fa55f9cb473824b0d78ef8050cd6621f4edd2cc46bf629eb074a560523e52316aae95840087f67ce8e37f4c61cddcdcff5b474fed99\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.407\",\n        \"version-display\": \"7.0.407\",\n        \"runtime-version\": \"7.0.17\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-arm.tar.gz\",\n            \"hash\": \"0b0fdeea39764d10f9df664e0a0bc8fe98dbd996239661acdbf28bf824edc6d2a0fbb46bb2870ba6454a432847b64d4aae1edf6e279f1f2e0a26ab437ed4f648\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-arm64.tar.gz\",\n            \"hash\": \"94c5832ee830035a1329f28c5bf12651537c61b013d9f1afae2ef495f62b93f615c0940754a815f03612125683c242e98e8a9d28912b2eff26f44d998ed6e680\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-musl-arm.tar.gz\",\n            \"hash\": \"2c6245c9a4e2148c1c10fb31d2bff7dcfc7901966c620e690077a52eeefef15d6af53dcc998e28e34375f8258aa9397efbea1572b5c8be11723c9eaa11323e1b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7a9a70159af4781fc3bbe42cdab17fc0f1895a4fd359d4785f72cc2cdb303f4710c5de67326a7b1fe644ee50171d155a814c3eb7933fe07c45a73ee19c2b631b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-musl-x64.tar.gz\",\n            \"hash\": \"9ba7e0c0399093b6bfce7a5ce82bb31055f4197d6ac0ac368337ef4e6f1bc116af2619ea9d7980a31ac7fed4ce55262c7426340483eb6d695f7a67a864880bd0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-x64.tar.gz\",\n            \"hash\": \"82e659aee7d3ab6595bfc141f24eda13551f5c5bd9048aad53ebe3963b8e25836ca07eb3d1d39d6adae145db399aab44ed57db27d34119e836202eb3af93c9e3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-osx-arm64.pkg\",\n            \"hash\": \"bbd9eeb1f0a3e398b0b02df8718cd7fde8053f07f56182f23c7866f247afa63bf42f69e3141d2820778dbdc8db0fca0ba2fc9d25dfaa65661ceb97d600590b87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-osx-arm64.tar.gz\",\n            \"hash\": \"84edf6d50264efff29f76acf714514140ed23a33a7e93eaf2c3dd7b81c9b6ae6a0c5d511d7d481ef1cf8a58202be68cfff90b7410f2f0d255c9811503370a79f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-osx-x64.pkg\",\n            \"hash\": \"395a21076acb4b513fa85da489b47c2088ba7a87bdb24f6f75ce108f188a87eea75f0cca8752ed5b646d78350bf6da3effc48bbec929f13880d8ac02ba7b997f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-osx-x64.tar.gz\",\n            \"hash\": \"6320463f19cd4448a361181b83f41f19f1e01dfce1d426be6f22cb42976ddbf83ba48c8dcf9440187dd4a4acfc65b7741d0757aad42263ca6a2df03d4a0db061\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-arm64.exe\",\n            \"hash\": \"6e97475ee4cfc9b7f55d7b7098f35a604f33c4c37a77a806fa364eb9e06810244547c4808dad4f10d8bdbf1edcab7a09974295a54cab45185e0e44025407166d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-arm64.zip\",\n            \"hash\": \"52f19589f928af3115f45f1f925dbd473fbc729ac1711da87cd9fa31d5c567cbdb5c02455acefa4121bd6c0ddf17ffec616f02eba156a461ef17f7881f600c80\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-x64.exe\",\n            \"hash\": \"49d32f746fd4cd10e45838287f1fee794a21ef686af59b25d49ef3088c818c5bf709e56eb48609260e3312cabe8344f5e2b36fb52e99fe0368b4caf936804728\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-x64.zip\",\n            \"hash\": \"81a101b175a0374c43fd3b58efeca40603f0963bc0016751e559ab864c9006ddd94fa484b68566fc75086a69ecb8a55bf8a83c6772d0952cce83f9a65824c335\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-x86.exe\",\n            \"hash\": \"4ff2da9169504858efbc047f795c68efae671138e111f99a4377137e2176bb24095a3269a3617b52fae3980bba627bd34333bd569892d21f0f6d14b741c7ecbb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-x86.zip\",\n            \"hash\": \"05a6c394e52efecfe9ff422e3ee4dcb49d6cb71040277bec0a505ead74e24a16b0f94b5db0dd330da5dcc8b44c61095a4ab26ec02773d56d0d8e763d9ef5aca4\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.407\",\n          \"version-display\": \"7.0.407\",\n          \"runtime-version\": \"7.0.17\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-arm.tar.gz\",\n              \"hash\": \"0b0fdeea39764d10f9df664e0a0bc8fe98dbd996239661acdbf28bf824edc6d2a0fbb46bb2870ba6454a432847b64d4aae1edf6e279f1f2e0a26ab437ed4f648\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-arm64.tar.gz\",\n              \"hash\": \"94c5832ee830035a1329f28c5bf12651537c61b013d9f1afae2ef495f62b93f615c0940754a815f03612125683c242e98e8a9d28912b2eff26f44d998ed6e680\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-musl-arm.tar.gz\",\n              \"hash\": \"2c6245c9a4e2148c1c10fb31d2bff7dcfc7901966c620e690077a52eeefef15d6af53dcc998e28e34375f8258aa9397efbea1572b5c8be11723c9eaa11323e1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-musl-arm64.tar.gz\",\n              \"hash\": \"7a9a70159af4781fc3bbe42cdab17fc0f1895a4fd359d4785f72cc2cdb303f4710c5de67326a7b1fe644ee50171d155a814c3eb7933fe07c45a73ee19c2b631b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-musl-x64.tar.gz\",\n              \"hash\": \"9ba7e0c0399093b6bfce7a5ce82bb31055f4197d6ac0ac368337ef4e6f1bc116af2619ea9d7980a31ac7fed4ce55262c7426340483eb6d695f7a67a864880bd0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-linux-x64.tar.gz\",\n              \"hash\": \"82e659aee7d3ab6595bfc141f24eda13551f5c5bd9048aad53ebe3963b8e25836ca07eb3d1d39d6adae145db399aab44ed57db27d34119e836202eb3af93c9e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-osx-arm64.pkg\",\n              \"hash\": \"bbd9eeb1f0a3e398b0b02df8718cd7fde8053f07f56182f23c7866f247afa63bf42f69e3141d2820778dbdc8db0fca0ba2fc9d25dfaa65661ceb97d600590b87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-osx-arm64.tar.gz\",\n              \"hash\": \"84edf6d50264efff29f76acf714514140ed23a33a7e93eaf2c3dd7b81c9b6ae6a0c5d511d7d481ef1cf8a58202be68cfff90b7410f2f0d255c9811503370a79f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-osx-x64.pkg\",\n              \"hash\": \"395a21076acb4b513fa85da489b47c2088ba7a87bdb24f6f75ce108f188a87eea75f0cca8752ed5b646d78350bf6da3effc48bbec929f13880d8ac02ba7b997f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-osx-x64.tar.gz\",\n              \"hash\": \"6320463f19cd4448a361181b83f41f19f1e01dfce1d426be6f22cb42976ddbf83ba48c8dcf9440187dd4a4acfc65b7741d0757aad42263ca6a2df03d4a0db061\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-arm64.exe\",\n              \"hash\": \"6e97475ee4cfc9b7f55d7b7098f35a604f33c4c37a77a806fa364eb9e06810244547c4808dad4f10d8bdbf1edcab7a09974295a54cab45185e0e44025407166d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-arm64.zip\",\n              \"hash\": \"52f19589f928af3115f45f1f925dbd473fbc729ac1711da87cd9fa31d5c567cbdb5c02455acefa4121bd6c0ddf17ffec616f02eba156a461ef17f7881f600c80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-x64.exe\",\n              \"hash\": \"49d32f746fd4cd10e45838287f1fee794a21ef686af59b25d49ef3088c818c5bf709e56eb48609260e3312cabe8344f5e2b36fb52e99fe0368b4caf936804728\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-x64.zip\",\n              \"hash\": \"81a101b175a0374c43fd3b58efeca40603f0963bc0016751e559ab864c9006ddd94fa484b68566fc75086a69ecb8a55bf8a83c6772d0952cce83f9a65824c335\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-x86.exe\",\n              \"hash\": \"4ff2da9169504858efbc047f795c68efae671138e111f99a4377137e2176bb24095a3269a3617b52fae3980bba627bd34333bd569892d21f0f6d14b741c7ecbb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.407/dotnet-sdk-7.0.407-win-x86.zip\",\n              \"hash\": \"05a6c394e52efecfe9ff422e3ee4dcb49d6cb71040277bec0a505ead74e24a16b0f94b5db0dd330da5dcc8b44c61095a4ab26ec02773d56d0d8e763d9ef5aca4\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.314\",\n          \"version-display\": \"7.0.314\",\n          \"runtime-version\": \"7.0.17\",\n          \"vs-version\": \"17.6.13\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-linux-arm.tar.gz\",\n              \"hash\": \"448367cfd1dec29cb6e224722c3afa23c062e8cc2a62155a3f4391a9e613591ccb9facd59206e8402d151a4f059442fca6a7c5d6a4eaa3eebc4230a9fa41f817\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-linux-arm64.tar.gz\",\n              \"hash\": \"497e833385d62b9f835648bf9a9b1fa214274f9c98c306485ae5634622d3908c2990e0bd09d2950b4be491b5984748cc2f8a6e71814a44ec7f9bb608363834e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-linux-musl-arm.tar.gz\",\n              \"hash\": \"bd3f716deb8849e8ea48359dc6d1075f3856394e55d2f9dbe84ca7f6e087dfd0367af971d1a74b762f37baf726c48cc4d0f46e56256c784688d27e638ed56171\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b9d8cc4cf91ea2bcd9d13effb0aba95372e5ee0135d8d3b2fbbb2b485e6923404e4e97cf6a71a0413d482485444dfc95e02370e32dfb75b3e359247a19f356f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-linux-musl-x64.tar.gz\",\n              \"hash\": \"954b59208d1ed040425a3b58a43399955ed96032284bb35d44285e8da37fb22e363b82d46c5b278fcc43c604f68a5537b351579ea0ce69ae056ffff073f58cfa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-linux-x64.tar.gz\",\n              \"hash\": \"0f5ae49aaa7fbc63bf7a48837af6299120088e88a272c24176aa70a61ae9654ce15db0a9a7bc36219ecf8eef214ee711354e87872134ec71c32b4e2b90d88da5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-osx-arm64.pkg\",\n              \"hash\": \"1a2b34a5d44079e3918aa07b2c14b8249ebd4829e780e696f6c4a4ccf9ee7bbbd956d43d5fc4c3cfc4aa9c9eca6163f32f533c615981c53e35d0a9a667e56e80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-osx-arm64.tar.gz\",\n              \"hash\": \"3960968eb545bf8329ff5c0205dfe2a07ddf6985a62bb34916f09faee56a06f60aa3ebbf8bb0edd7309a1bc29ed19ecf92f63cc60dad44dff47abf6a4c678f25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-osx-x64.pkg\",\n              \"hash\": \"27ea207a008b4696425d3b1cbe062007c932e6a2d232a45ca24acf58a42f5791834742ce8798d3d7f9dd9b7aa38d787e5c752a3e41ef838ae3150c542280fe80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-osx-x64.tar.gz\",\n              \"hash\": \"8c3ede3c1b0e8aa379ff054a830fb7f5c4364c5639352671aa7c68fe9b486f1f29cef83c3e99d24859a4e4757bddac4a94e4d98507e4f63e3075ebd3683854ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-win-arm64.exe\",\n              \"hash\": \"4c1dd013ae736735b970ed8c5e6353fe909a2e9e69f8b209c629fb7dedf2d1cb4c84fb0f9bc98ab0eaddd26331668eb5235488cb97ae48ee3699da0cb71ece42\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-win-arm64.zip\",\n              \"hash\": \"dbe546cd1b01cc0cff77a1451a03cad231bb6223151236faf7b7cdd162214ae0ad8e759eeb993c7db1864aed8bd28e85d5c88a636a0365be6f3bc308da204fb1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-win-x64.exe\",\n              \"hash\": \"070cea47e1796f9382eae24875f98433f0da71252c439fff77522794b48d341fcdad7ad277aea57b2b99491fca5083761960fed70eb7c3912d7a95a8cdf43a0e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-win-x64.zip\",\n              \"hash\": \"f5ebd36a657f879088580ffc6ba4e82b4aa1dbb0651620cb7efdbab4f86cc065dbb37e0410461d559abefc9f6621bd756e24290524c8b0dc77cdee04be96aeb2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-win-x86.exe\",\n              \"hash\": \"5d74badcb4b1b57dc22681ee555f6648a5f9ff0421a911716f354a93a546769c9b466916576517460163beee7abc04a6128d6f87f5a752e3a7ea02396d9c573f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.314/dotnet-sdk-7.0.314-win-x86.zip\",\n              \"hash\": \"2d958bb1413ca9097c41498f33e3fd832b99dafa8ab0bc7c8a1f56c3f1a76e4c76b737aba62594aeda1a2634a923a740f6f891f4e3f79773599d2360a362f6bc\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.117\",\n          \"version-display\": \"7.0.117\",\n          \"runtime-version\": \"7.0.17\",\n          \"vs-version\": \"17.4.17\",\n          \"vs-mac-version\": \"17.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-linux-arm.tar.gz\",\n              \"hash\": \"9986b7b87c4c84ba32b0618471dbe351e9780a4df3ec0478066a901fe937ba2d76813b87d59169371c8f45a8581f7a32addcf7a081f58ba01b753c853355bf5b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-linux-arm64.tar.gz\",\n              \"hash\": \"2d9e071727d0da836cfef4f46bcb546567c68cf37196d58335b6245fa4152bbce835bae60eda3afc87d478becf65f2faeb88afb815e66cf3399b0f654e278bb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-linux-musl-arm.tar.gz\",\n              \"hash\": \"e12fc9e1085cf5288b3ebd53ab7f3f9bea337578e769c28c888b89286094327c4229ff435257ee33762f3eba03e5c84bf4a93a35cc3d875f7c4bee3d531f92e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-linux-musl-arm64.tar.gz\",\n              \"hash\": \"a47a8e7dedf19aee4cbca3c6462a28f58bb88fcd42551933e6695b2691bbcf59864d6324fad6b3b328d342bbe7464453e2f07b8ef49af1e02c9d55bf6fb514d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-linux-musl-x64.tar.gz\",\n              \"hash\": \"3e4fb1d855f73bf0234187dd53aec1a3468afa9e497504485721e977f8a70cd4ca38eb45d0d0b6f9fd254c9c9eb5f97c88f696db96e3079c47b56ec15b2d71d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-linux-x64.tar.gz\",\n              \"hash\": \"9448f187d8912bdf036b996ea8890292697206e14d171c231f4bf3e5b6f1b317eb9468fcf76356fd2d9532693e36c1a3909f91cafbeb9f82911c836131a72e39\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-osx-arm64.pkg\",\n              \"hash\": \"9644b92df8e98ea37649dd7239cd8b7080371f9d74f88535cd075d18671b109c80b29de84c3b3308e45bca12711b551e4c58ab11508d8e8fda128beee6ed0fd0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-osx-arm64.tar.gz\",\n              \"hash\": \"fa4ab2acde6973f8b741f56f3706e36556522691cc903877d4519274fdaa3900659afa32c81b0771a755e14ccc4a53004cbeb036af8586a69e0c2690bf258085\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-osx-x64.pkg\",\n              \"hash\": \"e71f5366a4bbc97b5598399bfc08da6d5113fec1a65f96093bbd73dbd87c3e288fb4b49eba8c5f6d9f236d792cf9ed1a87978a7026068a7aa8c62841cca73ade\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-osx-x64.tar.gz\",\n              \"hash\": \"b394d3cd901db197346bbea28969148e2ae29c1bc506ca2f1b0cb50c30605ec8191261ec02387659d8da8a474736b0afe56e423680f31f14feed8606e4df4d6c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-win-arm64.exe\",\n              \"hash\": \"17bb9a82e54e0b38946665c1ea1a2b94696bdc81dcc6bc4c968f6782c6a3f2f8e305d6add60c3727a2d291905234e85a6fbc4f668fcc555cc677352f24ad9cee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-win-arm64.zip\",\n              \"hash\": \"88301765c64390dfd9bdd6bb79e7e91c7029c8d98f29f029601319e91e6791918b7669ca925e16c20b4f9d6877e9770f870a2335028f1548f9bbb133474995eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-win-x64.exe\",\n              \"hash\": \"d3eafa09f3f171ee9a07bff80ba1a4871951fe853401308d5b3a03b54aeabd882e45b214ff004d8a100325e9cdbdfbeb467f9bb84d558371ecf57480f712be33\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-win-x64.zip\",\n              \"hash\": \"542d4cd2f2de23921f50da89f5b05db4715f527f23dcdec39fed122dced82874fc00ed2c32a22a73a29f1b0a3caf6bb73cce9ca633abde1e47bb1cf31beb8381\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-win-x86.exe\",\n              \"hash\": \"8574205100a89d7cf2df880d5d866187c634f5fe54f3c313cc365a1dddcbbddbc82aa7e0cc065052b52470d2065507b1b338c09571fe9aca5c75d8173110775c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.117/dotnet-sdk-7.0.117-win-x86.zip\",\n              \"hash\": \"cdd8133e55a4472c0449db9e51f987608e6d82c39f34cfcf2df8c22144b5580483b170963c708393359b01adfa70372577ee16144a7129df9f2a0a571c39d29a\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.17\",\n        \"version-display\": \"7.0.17\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.24047.17\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-linux-arm.tar.gz\",\n            \"hash\": \"0eda8538107e592abf47b391a37f13c58d6ceaf7f293ae594094aa954400fe7b6ab4eb6d723eb447f22e2b0f05d1c470907842fb2bbf6b63f66502b6b3f1cfa7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-linux-arm64.tar.gz\",\n            \"hash\": \"a5b6c6a262334506675447d157d7b4e5683c77715b74f97c9b219166bf9226a20d5194ff1c5eb8e17b625a17f8fd114da4b44ad19888760956ff735facd1d41e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-linux-musl-arm.tar.gz\",\n            \"hash\": \"9902567cb9914bdb8d3da41dc4f1d3a8a0986848e99a25b2320b513de6666b979f8495b880277e9ebf0ca1adc8257df020fad62e653d07f28972cf5c729a6a83\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"07097cdd1cead0d87825895e0371477d5b9683611df10f66cda6816b82d0d293aba73966951d30aa364728035c86ee6950a559eaf7cc2661205d5140d9fdb6d0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"ccf14827a8ddadc846edc328f2a8015d1e7ff146adf2636207af760c309c2c0f61eae1222740b6fdf387c68d498d885f77a1db92f9bd9fcdb81326a315e684ff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-linux-x64.tar.gz\",\n            \"hash\": \"a0cc7f76f24d123fbe787ff3b554736000c3f6b4f7b919819fb3039f6df4a15d28713a0a169c9493012e14afc3a0299f3d800d93d6749a70b567833ef3f3aeed\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-osx-arm64.tar.gz\",\n            \"hash\": \"384f571ed3e8f623760c37eb4d39dfd50e977063683e2c22e9366dabcfbf509af44a12d14da758d119778261c6d95580fa9eb50d3bdc5a216f69ff33364b4f37\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-osx-x64.tar.gz\",\n            \"hash\": \"040172bdc6a5ad63dee2925261650f0f4d00c7bb0200b64677e18fdd3877b8b3ce52fb68ab42842bcc4de36c5eeb28622ea483d48c245b9407905ef776971a9c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-win-arm64.zip\",\n            \"hash\": \"ef34c17551496dfcc2c16bf05a6c41e715231e0e8ab425ba2f01ff7f3e38f0015e0a9bc68c8f242255f8cc6a3e9f55dce247b12da6aa840f6841843d50ebcb79\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-win-x64.exe\",\n            \"hash\": \"930c8d6a267dfe415cf1a5f81d436fce01010494b6ff10b642ba6bc5b8a150727c5af7ea6a76473986ceed85fa80b37e35a9a77ffa7285a37404b185901d0183\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-win-x64.zip\",\n            \"hash\": \"1815d14cd1a5c50a34a903344039c010b2101c694b0b2cb9000c5485da1890284b546203229306d3d05229e86079a7b4c7548dfb25bd543161ad964f6234f92a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-win-x86.exe\",\n            \"hash\": \"c7c17315260e0189599763450014ba36b919961b3e789107382e72d4cf8c7597a0a17a5b1505e2f37419771780dd836df344f215887c6d5768aee2c7e45d4865\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/aspnetcore-runtime-7.0.17-win-x86.zip\",\n            \"hash\": \"68159e72de5eaa3cd3d70b493ae1e37bd7ede2a02b50d52d9d0144b1492eb43355d01a6064db6364bf7f0eda5a9bbfff1c5169b6f103f0c5a73b9910f2e34319\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.17/dotnet-hosting-7.0.17-win.exe\",\n            \"hash\": \"c0911f29ddc1d8ed7ef6e1dd0f2cbaef2e1e5564c0e9ee5b1a107fb511e6dfea38743da6b8035d033569b6c5d0dcb66f50e84e395c57334044aa5cb5a8c36f77\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.17\",\n        \"version-display\": \"7.0.17\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.17/windowsdesktop-runtime-7.0.17-win-arm64.exe\",\n            \"hash\": \"2cda092f42a1346aabe40838e20eb4ab1864aae168573ad3c9a016efbc99afc41a681e3b7824d44fbad08985f7c12c10ba7ef462e93a28248d483c7b159d6b46\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.17/windowsdesktop-runtime-7.0.17-win-arm64.zip\",\n            \"hash\": \"23a4bd9d8b7bac406cdc4266dd180d0e58a005cdc7b122d414a7ef7d74b44533ac850f533440e68f53605f7293216fb1c952c4ef93a94203fded275c94468c00\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.17/windowsdesktop-runtime-7.0.17-win-x64.exe\",\n            \"hash\": \"c8cc217acdc36c951fe6abea638fc1f8967e3f4d1eb37e2a44eeb2056f15af7186b875942f34ea8b2785f0877b60ae275c02297988e069a6b5e89882debb1bbe\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.17/windowsdesktop-runtime-7.0.17-win-x64.zip\",\n            \"hash\": \"dd83911ce3ebb5a69e26b2d3a8b48caece1e53df73bf243bb95545f729cb95bf58a5571ad9513552a18952f7928231cee10ce75a26d0c9686e9c3a8c9e81c556\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.17/windowsdesktop-runtime-7.0.17-win-x86.exe\",\n            \"hash\": \"b6133567a387d778b806192ad0cfe9210595214a381d807c860b67dfa14b2593de039956bbbbbdfa53bf3d01aa60bcb2fa828971f45f59ebb1ca1eefbfddd638\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.17/windowsdesktop-runtime-7.0.17-win-x86.zip\",\n            \"hash\": \"c84d98b016018be7c63d2504be0114b9724a64f13fd5e349f15d81e1d647a57b77fe7d74f0d8df3c7bf5d26e65f69d5d6ef7f0edf2ed1c29d8049065081f6c24\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-02-13\",\n      \"release-version\": \"7.0.16\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-21386\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21386\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-21404\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21404\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.16/7.0.16.md\",\n      \"runtime\": {\n        \"version\": \"7.0.16\",\n        \"version-display\": \"7.0.16\",\n        \"vs-version\": \"17.4.16, 17.6.12, 17.8.7, 17.9.0\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-linux-arm.tar.gz\",\n            \"hash\": \"8bb5d16b5f4d80fcc55fc2f6620d0998e15c964d1a2f537ea9ae2d48316c1f9b915d49e885895916f47607a56e4ada817edc01c25991c28329744e75ed1f7772\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-linux-arm64.tar.gz\",\n            \"hash\": \"4a38d656e22129605a5f156b61098f6eb598a88e1d6248577d064481e7f4632fecf9bb60580c266347b4ee60133a617a5528aa6fc789faee83e5cca5fba884c2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"f453bc45a8cb67a8b7e536e8572d382840a0ebd2879ea84570379f88a811f3cb88f08f1404ff84b3bc683d3f0351c38686b8276dabaa0e5132bd4821949fda00\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"594ec43ca1d38899eb04d5e29758ebeab1d478de7888e10639b30ad57d8921f3f78d7be1ad75d25143660176b63c64a89ab5b0770e03dd3db1aba89e0e6ac20b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"dc9e55fd4125446d4243390909216295d5c120edb2c24766b49f66ee5a96cfae9fa7a36ce72eee745d269a8c2d31f198442b6b891b6c72a75c1950c9c6e587be\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-linux-x64.tar.gz\",\n            \"hash\": \"e1eae1aae9088e8131317e217f4cd3059628cce847103775c61c2d641d19486168bede5fe3123668f81f35bdc5a41100cbb49126d55445e7f5c5c617e2ca3b49\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-osx-arm64.pkg\",\n            \"hash\": \"bc7e55303faff5141767d43a8365c35c83a69465ae435cb1aa7b5d742529f294909396b8eb1e0844f01cb52883d8aa08f85930d83790cc1d06b10c2190d2b319\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-osx-arm64.tar.gz\",\n            \"hash\": \"69e42aca2fcaf4f5f8787aed3e1db00c6c8a3b5ad83ce8425842222db6453d13cc623778d80fd39219ba6e553c8fe0326b3bfa3802de5ef19247cf1f07ee4a56\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-osx-x64.pkg\",\n            \"hash\": \"9d18be2294203f582c5e856355f53c7c53686921a375d7cdb9f9484cfc7172009cc2653dca5e737cb38a0db5837f9c43f0778b50afe87d0270f9311d2b8e8a6a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-osx-x64.tar.gz\",\n            \"hash\": \"0261d0f93dcb56a0dd7e506be16405c533964254924bbc8412465c6d12c45f07ca7cb61b1025f6d222fb881cdd7f19224a58699e19e21ebcd7f6df92e832a829\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-win-arm64.exe\",\n            \"hash\": \"2ac1f2b07648c5d757320b2d6dbef657dd5e928dce3326f5e863fdcc095980532ce7d7876584c7c2473aa3de57dc79953775858cae175a472ad8c45d936687eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-win-arm64.zip\",\n            \"hash\": \"4bc5193a01b0d1dfada27490ff14713ae37ce56ec3f1f3b2ec284a3f497da4c82631e290346b73be74ba666205789c77aa0ad6069bcf33a1707880ded46dccba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-win-x64.exe\",\n            \"hash\": \"66c0e10f7a5c762c7ef101c34e5aeecaecabd4813308422b5f24a8996520f76ab7ffc790117e12e75587ce89930307f132bd556b1a8c1f8c67780659c62a102f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-win-x64.zip\",\n            \"hash\": \"447477feeafdfa89127ae89de3b2cd18fd2731f14a1c5cb6be6c36ca78d9175086cf1187f602bc77f0910788705fd016ceeee1d56e38bf26b8b56eb2cb9369d5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-win-x86.exe\",\n            \"hash\": \"3aeaae2b82fafbb7a9276210ff0ef2f4c757acc877c04ca6c6195d9c6debe41cf95c68f696f6079dfd446dff38069baf93b1d5cfb77cdda5cb82f2c6af8e10e4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.16/dotnet-runtime-7.0.16-win-x86.zip\",\n            \"hash\": \"e863e8bdad6b3bca633a5652223c52f3ca80443e9b106bea9c37eba1b3d382e585cba71180093807a993ecd0b8f2633971c1134d3f68dcbf059175147c4a10c5\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.406\",\n        \"version-display\": \"7.0.406\",\n        \"runtime-version\": \"7.0.16\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-arm.tar.gz\",\n            \"hash\": \"3b7aa846f26701c1c8f3c4798b9b0563b31ac7ca2445cafef8c4b6ffd8b320452cf73c4856742312fc242dcd1bf552e6e6d57773881d23dee53f4ad1bb97bdd4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-arm64.tar.gz\",\n            \"hash\": \"7543ab3197653864aa72c2f711e0661a881d7c74ef861fb1e952b15b7f8efd909866e99ea0e43430768db223b79d4e0285f3114087b6e009b5d382b4adad13fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-musl-arm.tar.gz\",\n            \"hash\": \"5655a76d14302ea600a31cedbb239e1736fa4b5e0b8d13388c6c340cf06fddbb13fecdec17872eb2cd7db41b0368bde1a59702667be81f933485d5f4b33beed6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-musl-arm64.tar.gz\",\n            \"hash\": \"129dd90af4b9a07f183d8fe8f68f81eaa7980dbdcc110bbac45d8b65a19bc59d13a525aeba250542d2cb345fd6d7d34a62302d56a8c527b727620f76fecaf531\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-musl-x64.tar.gz\",\n            \"hash\": \"16310636ec14771d48dbfda06886528c2e75dbc9af3c0ccfec1a1b4a0ca9990446a3322550da3f2a6df12d95e091c37876adc011c3b8720d1c8f57d5727568c3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-x64.tar.gz\",\n            \"hash\": \"5455ac21b1d8a37da326b99128a7d10983673259f4ccf89b7cdc6f67bb5f6d4f123caadb9532d523b2d9025315e3de684a63a09712e2dc6de1702f5ad1e9c410\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-osx-arm64.pkg\",\n            \"hash\": \"b6bfc009b702adfabfb780847212fffad16da11f44e9bb69d7bea7000307888108d66a8d4e33788e02eb3ca6dd0c4e5465ed4e4c2923ec3dae3ee76324155e6f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-osx-arm64.tar.gz\",\n            \"hash\": \"a186477633215784f7dd50f4f82f4a08323ee0929dc5ac99c9c76a23c74b31b4de7ea81eb4f0b6223f02ae40f5a74fe6533c7989a4a0de6669882ae0065c71e7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-osx-x64.pkg\",\n            \"hash\": \"cdae89c8c7b548ff4f01d2c9e52a621ce462bc38c6fab2e132a1ab3547f11ae578080d43099009b6abe4e4e3c30bf46ca30ca450058dca1d12783114e8676121\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-osx-x64.tar.gz\",\n            \"hash\": \"c21e57b566364607ed17bd8032a48fd7f6319646a07265333147fd0de0f7cf9c862958537d08c0c5837d22fae144b4295363c689daffb538ee956587d2f65461\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-arm64.exe\",\n            \"hash\": \"e697e18ac25eac9866c005c0cabeb70c033ccbe6715ee9c1c2aa5346a452a4b287480e5d62543ca23aa2246dd66b74eb2fe9afa7ae196d3e69aaf33429181189\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-arm64.zip\",\n            \"hash\": \"8d4f6c94479024015c28d2cd67078a0a546c4c6c38977db3943967f11c50e28faed236aeb54e754a3bc94dd0b4de290d5e0780dbb71ec0ae0c32d72603ac7608\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-x64.exe\",\n            \"hash\": \"dd56ffc4c056cc1350e6ec41b11b1c56e93633ab6259adebe16aa6f55e897a3edb18298c516e09525e81441a5ae77bbf793b91572d593a0b30083418bb78498a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-x64.zip\",\n            \"hash\": \"73c6b5b2a13c2cff634b6f201a2ae8c8f64ec97ecc7310a296284a85338da1fd165dca7af00884c7beb086091b68fd05ca6f96c01b26407e27a8613fd48b0274\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-x86.exe\",\n            \"hash\": \"89e484ab346a42e051a8e1fb2681975a77b48eb1a92ed7169edad8eb455b125177b0044d1e17dcf93f2c09bdb41c8486a92ac280ddcd9b6047d3e0c989350313\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-x86.zip\",\n            \"hash\": \"ff869d68f127b8294d14f4f83b1ef26021d6f5ca1d6269ccbdee2d4ee40f4d3d830745d089b69f9af20947b3cdfc7dfbee0b600bf9cace0f6175a557d9fd39d3\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.406\",\n          \"version-display\": \"7.0.406\",\n          \"runtime-version\": \"7.0.16\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-arm.tar.gz\",\n              \"hash\": \"3b7aa846f26701c1c8f3c4798b9b0563b31ac7ca2445cafef8c4b6ffd8b320452cf73c4856742312fc242dcd1bf552e6e6d57773881d23dee53f4ad1bb97bdd4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-arm64.tar.gz\",\n              \"hash\": \"7543ab3197653864aa72c2f711e0661a881d7c74ef861fb1e952b15b7f8efd909866e99ea0e43430768db223b79d4e0285f3114087b6e009b5d382b4adad13fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-musl-arm.tar.gz\",\n              \"hash\": \"5655a76d14302ea600a31cedbb239e1736fa4b5e0b8d13388c6c340cf06fddbb13fecdec17872eb2cd7db41b0368bde1a59702667be81f933485d5f4b33beed6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-musl-arm64.tar.gz\",\n              \"hash\": \"129dd90af4b9a07f183d8fe8f68f81eaa7980dbdcc110bbac45d8b65a19bc59d13a525aeba250542d2cb345fd6d7d34a62302d56a8c527b727620f76fecaf531\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-musl-x64.tar.gz\",\n              \"hash\": \"16310636ec14771d48dbfda06886528c2e75dbc9af3c0ccfec1a1b4a0ca9990446a3322550da3f2a6df12d95e091c37876adc011c3b8720d1c8f57d5727568c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-linux-x64.tar.gz\",\n              \"hash\": \"5455ac21b1d8a37da326b99128a7d10983673259f4ccf89b7cdc6f67bb5f6d4f123caadb9532d523b2d9025315e3de684a63a09712e2dc6de1702f5ad1e9c410\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-osx-arm64.pkg\",\n              \"hash\": \"b6bfc009b702adfabfb780847212fffad16da11f44e9bb69d7bea7000307888108d66a8d4e33788e02eb3ca6dd0c4e5465ed4e4c2923ec3dae3ee76324155e6f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-osx-arm64.tar.gz\",\n              \"hash\": \"a186477633215784f7dd50f4f82f4a08323ee0929dc5ac99c9c76a23c74b31b4de7ea81eb4f0b6223f02ae40f5a74fe6533c7989a4a0de6669882ae0065c71e7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-osx-x64.pkg\",\n              \"hash\": \"cdae89c8c7b548ff4f01d2c9e52a621ce462bc38c6fab2e132a1ab3547f11ae578080d43099009b6abe4e4e3c30bf46ca30ca450058dca1d12783114e8676121\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-osx-x64.tar.gz\",\n              \"hash\": \"c21e57b566364607ed17bd8032a48fd7f6319646a07265333147fd0de0f7cf9c862958537d08c0c5837d22fae144b4295363c689daffb538ee956587d2f65461\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-arm64.exe\",\n              \"hash\": \"e697e18ac25eac9866c005c0cabeb70c033ccbe6715ee9c1c2aa5346a452a4b287480e5d62543ca23aa2246dd66b74eb2fe9afa7ae196d3e69aaf33429181189\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-arm64.zip\",\n              \"hash\": \"8d4f6c94479024015c28d2cd67078a0a546c4c6c38977db3943967f11c50e28faed236aeb54e754a3bc94dd0b4de290d5e0780dbb71ec0ae0c32d72603ac7608\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-x64.exe\",\n              \"hash\": \"dd56ffc4c056cc1350e6ec41b11b1c56e93633ab6259adebe16aa6f55e897a3edb18298c516e09525e81441a5ae77bbf793b91572d593a0b30083418bb78498a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-x64.zip\",\n              \"hash\": \"73c6b5b2a13c2cff634b6f201a2ae8c8f64ec97ecc7310a296284a85338da1fd165dca7af00884c7beb086091b68fd05ca6f96c01b26407e27a8613fd48b0274\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-x86.exe\",\n              \"hash\": \"89e484ab346a42e051a8e1fb2681975a77b48eb1a92ed7169edad8eb455b125177b0044d1e17dcf93f2c09bdb41c8486a92ac280ddcd9b6047d3e0c989350313\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.406/dotnet-sdk-7.0.406-win-x86.zip\",\n              \"hash\": \"ff869d68f127b8294d14f4f83b1ef26021d6f5ca1d6269ccbdee2d4ee40f4d3d830745d089b69f9af20947b3cdfc7dfbee0b600bf9cace0f6175a557d9fd39d3\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.313\",\n          \"version-display\": \"7.0.313\",\n          \"runtime-version\": \"7.0.16\",\n          \"vs-version\": \"17.6.12\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-linux-arm.tar.gz\",\n              \"hash\": \"2d0ce9663d9e307e957d8a1fff9dd969071dcb6be321b472c1ee20c34c4ff15fd84c634d1360a6ac968bde99890eda5ac52e54853c75add1aa5323adec9774fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-linux-arm64.tar.gz\",\n              \"hash\": \"402a894221d79aa61171fb293ec98a61ad7ba9877cea2c032b4a939ed569d7e7ec11f10bf88e46a4511a34f6cda4a9ba721682b275e1fa5d3937d58b358ae200\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-linux-musl-arm.tar.gz\",\n              \"hash\": \"da4c66bad60aaa1851042408aa13cde545ef2b4cb9d970f93c14488efe403527cd6cfba9c6f14ba00dc4dc3f850c4f0b5f45a869d33592b53e4fcd271acd202e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-linux-musl-arm64.tar.gz\",\n              \"hash\": \"0c9fd3f915ecd58f5e0b17df9b94a7c8926b1309ce6225f9c89202c88614f1926ea70a1dfa7e9319867f4082149dcff3cf65887800c503e7b0d3feca426fb320\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-linux-musl-x64.tar.gz\",\n              \"hash\": \"bf4b69a43dcbe9a72e9605b032ca653a3df7f610d1d8bddb75aae45010d8dda42a15fe6f9552274a9fba180f6378381186196d550093e8d42feee6761a438125\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-linux-x64.tar.gz\",\n              \"hash\": \"665378e586817a3181dc5644ac794eadcc51ee733813dbef8e3b180aa6626925d8d74d03290c010a186abb668ada8255e42c43a302eaa580050a76b77bda2192\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-osx-arm64.pkg\",\n              \"hash\": \"7735faae15661a799c3fcdca7814f2ca6d288a42dc8786c40f4d4a1e0287f82ded4bb81d92154e8937ced0020dba8fb14f278454cf93088dbbca7f9a9c63b433\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-osx-arm64.tar.gz\",\n              \"hash\": \"37bc118542049921704b862d110996df15d97db8d57fc9d1d624b4e290a4d8063fae44a8dbf227b4acbbe646c9da625f353c80cafee2fe2cf6eeaf2d4c4b2960\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-osx-x64.pkg\",\n              \"hash\": \"a6bc4901b7f0e5f1fa48d9ed30836384ce0d5e19731b13d89d94287c7df4d5e3d26434d20b2892724c93b8389c0da470fd31f0e112dbd7edd4de63b650ccc154\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-osx-x64.tar.gz\",\n              \"hash\": \"7370264f8ff7aa0be0cc5f3b31126ae08983f5931505007c15238f1256069a4c6b1b0cabad83f5ee6e29dd63ccb5d12e2cd147ef8ef5d1cc8bb16f904ceb6afe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-win-arm64.exe\",\n              \"hash\": \"32e7f1a77f1ad410668b082abb8c8cd4344dda2f9fd1c547b4fe145a6083d477f483096eb2dd1f09ffd25710769f944a429bc95cc258a97a10098aaca1ce5869\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-win-arm64.zip\",\n              \"hash\": \"43be939b141948f75fb48a38d312258e202fc9270f2daf31713ead38749f5484f3ab557d6cea58cfef1211e89695cde891d3780dbd546088a90dfe1936017151\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-win-x64.exe\",\n              \"hash\": \"b210c400b72b2750150dd58db0136c24f92984b67f2470b6b20f5553ee9aeb9fb1678a77d677165b63b7c2dc43644d788303c1d7b5f916e387f058d20390cbda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-win-x64.zip\",\n              \"hash\": \"85fa4323c1c56672a3ef95a90121d9c89bfd3763ed7f493c2811829ac2faf09584c2cc5da85db0e7f500eaa7c758385dab82e4885c56b4439623ce84b9075511\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-win-x86.exe\",\n              \"hash\": \"e707ced4d7307761fc97ad59b7feed3d8a3e0137213ea1efbe38433db9db26965c2fd268419915b247357331cbaca409f1fa61bd9a4b267b3aef6a94c9af8771\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.313/dotnet-sdk-7.0.313-win-x86.zip\",\n              \"hash\": \"8f29fc200579cc7f49effb1d0abf0da4b837bdf1977c1e646f9799a68fbffb7c911f66cfb9a9701b7b130548f12b479d7f716b00d4e07299463142626d8b7da2\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.116\",\n          \"version-display\": \"7.0.116\",\n          \"runtime-version\": \"7.0.16\",\n          \"vs-version\": \"17.4.16\",\n          \"vs-mac-version\": \"17.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-linux-arm.tar.gz\",\n              \"hash\": \"4743c8790089448f5fda15b97d7da32ab382aff4fe9ce865fc030a59f925bbc2a751681a518e0efb283a1450486f9c11663b1dd46f40b1670b1a308a1f45b52c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-linux-arm64.tar.gz\",\n              \"hash\": \"79880d5021c15c8fa1a0d6205eb13e0394eae51175e31de577841bb5879054cbab807cb269fe785ad23ce435e81a54487e010d69281b47739915f687901ba066\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-linux-musl-arm.tar.gz\",\n              \"hash\": \"2db38926e07003a2f67a5c598581dd206dcaae7d63cd28b4cc4af721848a0fe4aae639d5b7e1dc1fc87d96d2384a0eccf30d7841e417972726b211dd642f43ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1f5e6f6ee4609019e55e2f40f0746cbc9965b94b905415685f0c38299c38b6f4ce95ab7f4a083b025d908254fa5ecb5802dbbee9f1d28b3cd9bde958115e5248\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-linux-musl-x64.tar.gz\",\n              \"hash\": \"5533af8cff8657c1a6d39dfdab988bb94604bf284b970abed6df5566a6f9755232aca43882f27bd8deb4c5bafa3b599db9a2fabbbaaab8bd3e34406ffbfdf699\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-linux-x64.tar.gz\",\n              \"hash\": \"f3eaa93254ef59638f9f3a296d344fcb8b0fa0778dd2c1ba551af80750e05f795a4f2d50c75c0cccbb20ab6e2c3a90f037ab0c6119cdb5e44917ca7698a58f44\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-osx-arm64.pkg\",\n              \"hash\": \"1bea56e56409ea689f7663f70b9c01b26cef5d7cfbbd0854ec2d9bfc72095de3b0b678456d8ea7cb6945dfd1f71222388392510dc11c70b9536b6f7315e39ba8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-osx-arm64.tar.gz\",\n              \"hash\": \"2be33faecb82a49437194654c2517e48d2d9fb42972c942638d6fcf0132ccf62a657faba7cc02c7d2280269ddd7362adcb756290160474158e6bd79490b83abf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-osx-x64.pkg\",\n              \"hash\": \"be1a0e74c10a270e0e1458e1291e8d24e679a3682989d59ccdf571981482ca51a31192d04bc3bea585d1f23768798489baf5972db245efe136d85b2fe32dab76\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-osx-x64.tar.gz\",\n              \"hash\": \"6abe4c2eb07672c7e8af1d01d66f1251699245ccbf4525d34e9df002d5ac7f4ebebe70bfc1019aa6184860609b20006ae5eaf733ac27325ec1117caab4489648\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-win-arm64.exe\",\n              \"hash\": \"379764a4b1fd6c8d3b92e8dfa0cbbba64491c71b1223f3a866a207dbdc786760f2f9c6f4e2c7e77bffc53c55302393d6675b5bb153258e139daad555abc5c566\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-win-arm64.zip\",\n              \"hash\": \"4bf32b70406d0dab9841c576af99c5f347e0ca12ceca590e1ece1da13bb616bad35080ddc841004e770eaa1211d16d5d6895f382be33cc88116b4d109ea08c90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-win-x64.exe\",\n              \"hash\": \"772aee5e0b8ccd1cc50fe3d293a50c4462fe9df6f29a297dd60bb89e0dd2dcdde74eaa9cb1d3bc5ead4036d536a7a3c488d443c04d53efb61f5e6cb624e0d5b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-win-x64.zip\",\n              \"hash\": \"fdf032a145d50449fd9bffe973a218ee165f15c65723707c3664f0c135ffb69e9058bfbf4d6492e337a0140367cd03ac272a6e80a4e04f60fcfc7596b451ef06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-win-x86.exe\",\n              \"hash\": \"a2a0458cfa9fc09a287867875a01b8ff026ee1909fccb06bbdbea346942ecfd7bc3001f24f04d410d346cab0b2011d6720536fdc42980e7eb52d6c145c03d1bd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.116/dotnet-sdk-7.0.116-win-x86.zip\",\n              \"hash\": \"71827e18cadc9138f44a6834004626e0b358bd62e78a2964d8ae13f42287bf42101881e22b7220c638e5cca07b97be9f2e063fdc12940201486038a52d10c74a\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.16\",\n        \"version-display\": \"7.0.16\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.24019.16\"\n        ],\n        \"vs-version\": \"17.4.16\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-linux-arm.tar.gz\",\n            \"hash\": \"f721d70ef4fe001452f62bd1d65c9cc28137e86a7b334f5236acf122a154b60e9e9459a64f3167b89487a0ec429a3406dc0f195d4b217debb158dda509387241\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-linux-arm64.tar.gz\",\n            \"hash\": \"9acc4c8e99d9ff50f3f5e5615e25e30561a8475ca66332bcb93d3305aa68f1bfb142d21c3eb7cd07627c15d2e3abcfd4d504db617e7c662b83e2b76e4019b3d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"87df0ed9da9e23e3a84c75f213580fc8da7178bc17e431d285d8e87667ab688bd8e85b0cab3dbc2b6aa9c265f9a57ef00daf12157bbcc948ad8407aa3604d569\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"419cedbe0fe956a34fa2e875581d7d01b9e3652623719232694119b137858529a326c2eecfa5c6074a36ac3450f6d5f3707eff343e8b0ff2779110d4bc040a86\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"56c92fa587817422c3b521e0acacfd7fc4e1a8ca0d816eec526cdd324a4623ef0e8c506b44c0dabd751f362c125d597a606d5fc61a8604109118bf83dbbae9ac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-linux-x64.tar.gz\",\n            \"hash\": \"1482c7c946c1b1a0a39f2bef4eaceed0a9b9eae44d3e8a103e6574b64391749d163ad4d65198573571885906215078ff41f53ebfc7884aa8a437c527532521f4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-osx-arm64.tar.gz\",\n            \"hash\": \"ae2e61279788227908ca2308cc22db56c3bc9497f8544a009c33c669469d22909882c91758f28ea45ea0670211417300a448b431ea6b6079c55cdf55651af816\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-osx-x64.tar.gz\",\n            \"hash\": \"f28ef3bf07682d6a85bf70c69159f66583fdab5de0b8f693de2b7477b55376ebf797e504f9d0026bfb24bf6f884d843363d3f42921c89b164d084c05288ec2df\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-win-arm64.zip\",\n            \"hash\": \"e7326cc2b798ae9c5f29d49350132fd5ef4c0b2560ca8266fc58186277a0f3280e894b6b4906692905bc2052db1aa38090e663278a84105c9c8d37e6ad6d9139\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-win-x64.exe\",\n            \"hash\": \"f60981ef640f99ec74a3c1f78160a3d8f1e5f92fab4ee5adabd4827c4525a96ed7144c353960fafaefdde0f5fbc2baa3ea85a7c0e935e665821452119406050d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-win-x64.zip\",\n            \"hash\": \"255a587e9540aa4b03d1179e257ebeee8582b3199c9ec57ba2575334059a36b4cb1e40db93437341edab3eee1172f5801679e14e15ce397325c03103c809431c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-win-x86.exe\",\n            \"hash\": \"04a303d89596903ca09cf1b9ff1bccbec5cdfc44ae16fcdd65b2b47d16fa102d5d00e25eb2bbba943624fba46b6bfee1a75ece163f7358a96dbe85d238097257\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/aspnetcore-runtime-7.0.16-win-x86.zip\",\n            \"hash\": \"d84071a12e15269630f3bc8780ac06fcb523747f941477eac3d43d33132559ada9a7dd3765c1ccf734696dd26de6067e6f32e75eaec57c5fe7ffa45e2d0db1cf\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.16/dotnet-hosting-7.0.16-win.exe\",\n            \"hash\": \"24c1d8ddc698ace2b227a49f5e9a93c7fb69396b56d1f7d89be3a12b68e1f6c4ae7d100ff304f15f5b83717018bebf25158adaff0a1f2d56f05a87598f5b6413\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.16\",\n        \"version-display\": \"7.0.16\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.16/windowsdesktop-runtime-7.0.16-win-arm64.exe\",\n            \"hash\": \"ed2bed1402f85209faaa384f143082525f5b3982f5207effbc85c85c3250e909bdc44bb49a11e1d0422d3384b41334c1adb077ef1cbae1f39077ec7e31e17f34\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.16/windowsdesktop-runtime-7.0.16-win-arm64.zip\",\n            \"hash\": \"d937ac219aa732f0fed5639a2133ab7bc0190186b356b165fe8e1897346e717ba28193e0276f61e5c9331338733c3613171b8d63439f06d464afaed031387a35\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.16/windowsdesktop-runtime-7.0.16-win-x64.exe\",\n            \"hash\": \"695ee6ba6002e91936c04d5be5eff620968b1846ba3effa659aa724b6e53aadc57ddddfe07256721a461ffc6363ce5634a962f5e84a1b899a57e1325a5819af5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.16/windowsdesktop-runtime-7.0.16-win-x64.zip\",\n            \"hash\": \"e080ceef60684967f6b54ebd1e1804517fb9f2b606b15919783e4593e2a837957d371bee5a4eadf34734c50891facb243339d60dc1fe0cde65465dcdd425fadc\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.16/windowsdesktop-runtime-7.0.16-win-x86.exe\",\n            \"hash\": \"7b3b0256f85f6608231ef3d99407d5b02306089934b87ff56ec7835b1f4c750c64bc1e8380ef4a08941d6e259d7de4892b2eb8028f0d53eeae719902c3bf9b3b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.16/windowsdesktop-runtime-7.0.16-win-x86.zip\",\n            \"hash\": \"cb93e7539daae978d6dfa23ff3b0c483c220e52cb86c276af35598b07b8c5dd77b5db69a29f458a3189735fa9abb4da8a77d9751d4449f2eb2a20f5ec16cf266\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-01-09\",\n      \"release-version\": \"7.0.15\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-0056\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-0056\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-0057\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-0057\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-21319\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21319\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.15/7.0.15.md\",\n      \"runtime\": {\n        \"version\": \"7.0.15\",\n        \"version-display\": \"7.0.15\",\n        \"vs-version\": \"17.4.15, 17.6.11, 17.8.3\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-linux-arm.tar.gz\",\n            \"hash\": \"ba362de283af442bad4e327779fb473cd052c9de3e5422ca72c1ca7938f6f2c6273614d5ddb79bd153727c1fd159ebd344e0571891d529e117616469ec64233d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-linux-arm64.tar.gz\",\n            \"hash\": \"e5b71578142f81809dd3e2bd5a9d673459c3f311ee095429b8e59929bd3ea17169c880113b7c86b8940c2db4bb1138f4770883456102da6b4b42ab7f0da8f8ed\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"01ed6c62386f9996f8f7e07b22c0c85fd280ac7d9011ca10f004eb1608cd995204c22f4d5cc8238f2b0b6ca04a48810137b9033e5fdb8886e8f8fdb7bac9e98f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1ed0c1065437afbb267defb467155756c6887cc04ea188d4beaa697f6dc547583ba5ef1ed2ea772b3a3f0b6a181e7c6ad8cb242f0a937a157559dd3f3e439348\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"19db551f06cb217cb1fe943c4d8b481805732859aeb3b80f9da10efd48addfbab5dd332533c567315e40d5340cb2f8991219aeb75a3495aa1d795430b2861450\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-linux-x64.tar.gz\",\n            \"hash\": \"3cec6eabe448ccf5105c2203928a6fe00e343f1f0d97c79614d41c198548a20659113b9507da95b63dedbd3caa6a66bf5f3750f4443744186e35e47de5c30555\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-osx-arm64.pkg\",\n            \"hash\": \"b762c8a37c4c5d6621339af94affd410b9bb5a047b383b1f388852c6c26f83ee24002fc62cc4f9aaea4d55295c0357fb3c3d19d2a329db87d5e9dfda189a5db2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-osx-arm64.tar.gz\",\n            \"hash\": \"0910ae01475c5df70b846aa80b30fb85cd91349b43c682e25692d470cadd877d7965b7ecf06ce93a71f92a4a32c534a876e6733dbf45684628476a1c6bb6d112\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-osx-x64.pkg\",\n            \"hash\": \"c23e2af24f1a7de19bbc1fa47bfefc827d7a41b9259d5e97f2c153cbff8dc1ddbfb9632ffdcde0f79fe5696e9a145c03ad8d9db58744739c59a07a6c353111c6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-osx-x64.tar.gz\",\n            \"hash\": \"bab7013467ae933e18f0c963319f19a54816fb3b2bda35316d45affb683c4e74cc1f6f7cd289c3ca475a2a0eebbd2809831f5ef908039c200407341f2bebb5eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-win-arm64.exe\",\n            \"hash\": \"1f664cc5695cbf922c458466b0c28c78b07b7cb4a019c2b9b11849b8cae7752b8a22f0a841e697305afe4707e1a5e0c427a5be595e1655deeb95abb3485d801c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-win-arm64.zip\",\n            \"hash\": \"36601976b2e825b8ec4e30fdbb09918d257311138106dbd44a5e1c0c64851068a4668c1ff5d864b08cf868285a4cbc2b0b618aebf4c95624024a170b3688dda3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-win-x64.exe\",\n            \"hash\": \"c7509c8893824988721ef8498cdd1d687de2b5e39fc210bc49a1da6f45e22d6c8a9a9836f3509361bf9e9376a25014cfbcbc74469359d06dcf5eab549c11598d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-win-x64.zip\",\n            \"hash\": \"441a8d93af6603ebc1a315dad8f87bffb3b13c8042f7aaaede0ede235a9313a2106951f390d856dfc6ff228e025cb655a3eca757413a239113398bd1f77d7f04\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-win-x86.exe\",\n            \"hash\": \"ed3eff487868e46a8de1f65a7519692eb2fd96ed015da6560446c443c7c201eaf4cd68a6a1a1401dc692cbc725e77f3d5c530f76fe86778240793245e95e6885\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.15/dotnet-runtime-7.0.15-win-x86.zip\",\n            \"hash\": \"f5f329d3cbbca99e18f5718074761138b4ca040cc3981e87a3042a1e52f2d7e2c58c7612d2b4c008a47cbf6b0ddddee85ff1a7237ff7a63ac564fb739f8da7e9\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.405\",\n        \"version-display\": \"7.0.405\",\n        \"runtime-version\": \"7.0.15\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"6.0\",\n        \"vb-version\": \"15.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-arm.tar.gz\",\n            \"hash\": \"4e593c52a32f79b43339b2dc43f000b8b991a8ff3e56abfe686292a0db5e084bfa8189d5770b4ae6aff66c4006bd56b8214a7ae33ceff426d5a59d96f4035c2b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-arm64.tar.gz\",\n            \"hash\": \"35c3b0036324f0d5a1711859f318863a2f24dd43d61518b38acffe9e278ee203007bf620d783ac706a615175b9c15d348cb9386c800aac219fb23537c03b919b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-musl-arm.tar.gz\",\n            \"hash\": \"5e957d5e8fa67929b43594a414c73febea6769e993ceab9ae792c2aed111d986b302db2aac81d8d59c58b2f173c52cea6a8aa3619c9bcfa962476fdf3167ccee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b27720f523660ee24e8b539dae804683bae58ef8a669c9f62e6b7afc4e0b352edd7f1c7cca6c541563a312fa5e2e3ee756930f93b2f49c89860d19cc8651c8d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-musl-x64.tar.gz\",\n            \"hash\": \"c061e969af85ab30e28425e457674cdf062bb1ca9ce8c10d450a9b31cfc543cd6a6b6bc22db521a063ad39441e6d2b1cc599f84132a3b7393659fc959e3789d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-x64.tar.gz\",\n            \"hash\": \"6cdf82af56f920c87315209f5b5166126e97b13b6d715b6507ddbc9a2eb618f812e43686b79de810ae6a21e0fb5a8e04d68a004f00a07533c8b664f9c889b5b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-osx-arm64.pkg\",\n            \"hash\": \"3a40fe31b4f363afaa682ff0d8585dc409e97b4e5eb51e3cf4a66331e4cdfcf0c6ae5b563ee2bae26933867815e7342fd05970d343d736a4af1f5fb9ac062fb7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-osx-arm64.tar.gz\",\n            \"hash\": \"0ad6700475827ffc8f3dd16609f64368b736dc8b6dc07213738480c237a0d8896323959e05acb7f9510d1027746cfecaf4458f620faa757ee4f0779ecca24201\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-osx-x64.pkg\",\n            \"hash\": \"e75d2b986bcbc68eab6c6ec619e4b545de615a191e9267a406e842ea78c54e8d6d3f731886f50f5c4bd333f8d3518ed423bae812d37a1a493551f73300b1b388\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-osx-x64.tar.gz\",\n            \"hash\": \"8525c009fad7fd0873ad72654a88f90d86b13ac58b17846fcf3d7cb696bc0d3c2c45bfb8d85e17a99f42421c5d6081aa4973d81211e42265efdc58443d075f5c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-arm64.exe\",\n            \"hash\": \"8bef99a9fa21b56486396e8a5404cd7eca0b9a0de3d149445170c0dabdc64bbe6d605a3382925c1c8096d6942a5923354ac1289ffe3bef8941b5567f64e2c37f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-arm64.zip\",\n            \"hash\": \"ed9d60bfb81e24c22163de581373d12713b3833b0eebd7be05b360447ba1daf6dcca53579890c3869911563c79eedbcb0b505dc5c8b44fddf382e418db0135b5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-x64.exe\",\n            \"hash\": \"e9df6ddf6506f6c082fb89636dc5f67131a2bc6c52b7e2d57a1c73de7f989c99c40074a289ab4ac69ded4c13d62170a79637d7fa41aee57c2c890d203d15dfd5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-x64.zip\",\n            \"hash\": \"e1ff7de4992bba5d536e884ef5582067ccbcf31b19c191a37e3ab47321a33326d9b58e15b2045e795a7ab936124bcd93eb32984c5c96843f3db7189e398176f5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-x86.exe\",\n            \"hash\": \"266c461cb8913bee9ab86c792bf5a08b125df8fe3a56f55655e169a59a152d65c118c22ad207e8e5797e250bac601152da1d8a0f6e7f72dfafefc2855793ab00\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-x86.zip\",\n            \"hash\": \"2ffc7ed20abab35691005caba6a104a6e63db536388e4f00b36ff74624dea54d62b936942bb3cc3a3667c5226fe8c41750a8348c32591db6f927ec1ba615fc48\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.405\",\n          \"version-display\": \"7.0.405\",\n          \"runtime-version\": \"7.0.15\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-arm.tar.gz\",\n              \"hash\": \"4e593c52a32f79b43339b2dc43f000b8b991a8ff3e56abfe686292a0db5e084bfa8189d5770b4ae6aff66c4006bd56b8214a7ae33ceff426d5a59d96f4035c2b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-arm64.tar.gz\",\n              \"hash\": \"35c3b0036324f0d5a1711859f318863a2f24dd43d61518b38acffe9e278ee203007bf620d783ac706a615175b9c15d348cb9386c800aac219fb23537c03b919b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-musl-arm.tar.gz\",\n              \"hash\": \"5e957d5e8fa67929b43594a414c73febea6769e993ceab9ae792c2aed111d986b302db2aac81d8d59c58b2f173c52cea6a8aa3619c9bcfa962476fdf3167ccee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b27720f523660ee24e8b539dae804683bae58ef8a669c9f62e6b7afc4e0b352edd7f1c7cca6c541563a312fa5e2e3ee756930f93b2f49c89860d19cc8651c8d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-musl-x64.tar.gz\",\n              \"hash\": \"c061e969af85ab30e28425e457674cdf062bb1ca9ce8c10d450a9b31cfc543cd6a6b6bc22db521a063ad39441e6d2b1cc599f84132a3b7393659fc959e3789d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-linux-x64.tar.gz\",\n              \"hash\": \"6cdf82af56f920c87315209f5b5166126e97b13b6d715b6507ddbc9a2eb618f812e43686b79de810ae6a21e0fb5a8e04d68a004f00a07533c8b664f9c889b5b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-osx-arm64.pkg\",\n              \"hash\": \"3a40fe31b4f363afaa682ff0d8585dc409e97b4e5eb51e3cf4a66331e4cdfcf0c6ae5b563ee2bae26933867815e7342fd05970d343d736a4af1f5fb9ac062fb7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-osx-arm64.tar.gz\",\n              \"hash\": \"0ad6700475827ffc8f3dd16609f64368b736dc8b6dc07213738480c237a0d8896323959e05acb7f9510d1027746cfecaf4458f620faa757ee4f0779ecca24201\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-osx-x64.pkg\",\n              \"hash\": \"e75d2b986bcbc68eab6c6ec619e4b545de615a191e9267a406e842ea78c54e8d6d3f731886f50f5c4bd333f8d3518ed423bae812d37a1a493551f73300b1b388\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-osx-x64.tar.gz\",\n              \"hash\": \"8525c009fad7fd0873ad72654a88f90d86b13ac58b17846fcf3d7cb696bc0d3c2c45bfb8d85e17a99f42421c5d6081aa4973d81211e42265efdc58443d075f5c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-arm64.exe\",\n              \"hash\": \"8bef99a9fa21b56486396e8a5404cd7eca0b9a0de3d149445170c0dabdc64bbe6d605a3382925c1c8096d6942a5923354ac1289ffe3bef8941b5567f64e2c37f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-arm64.zip\",\n              \"hash\": \"ed9d60bfb81e24c22163de581373d12713b3833b0eebd7be05b360447ba1daf6dcca53579890c3869911563c79eedbcb0b505dc5c8b44fddf382e418db0135b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-x64.exe\",\n              \"hash\": \"e9df6ddf6506f6c082fb89636dc5f67131a2bc6c52b7e2d57a1c73de7f989c99c40074a289ab4ac69ded4c13d62170a79637d7fa41aee57c2c890d203d15dfd5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-x64.zip\",\n              \"hash\": \"e1ff7de4992bba5d536e884ef5582067ccbcf31b19c191a37e3ab47321a33326d9b58e15b2045e795a7ab936124bcd93eb32984c5c96843f3db7189e398176f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-x86.exe\",\n              \"hash\": \"266c461cb8913bee9ab86c792bf5a08b125df8fe3a56f55655e169a59a152d65c118c22ad207e8e5797e250bac601152da1d8a0f6e7f72dfafefc2855793ab00\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.405/dotnet-sdk-7.0.405-win-x86.zip\",\n              \"hash\": \"2ffc7ed20abab35691005caba6a104a6e63db536388e4f00b36ff74624dea54d62b936942bb3cc3a3667c5226fe8c41750a8348c32591db6f927ec1ba615fc48\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.312\",\n          \"version-display\": \"7.0.312\",\n          \"runtime-version\": \"7.0.15\",\n          \"vs-version\": \"17.6.11\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-linux-arm.tar.gz\",\n              \"hash\": \"183b8355b06b309d794dddc1ac2d26c99d192071804d9c21a446fa58c1c21ae780411dbdb00d6fa1b6176c6915ed0c6e343b0601e256e70c2421f9d6aad9bb31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-linux-arm64.tar.gz\",\n              \"hash\": \"0e0d0213c82278d78badca89f14443fddbd6211ffd12968dbe156d0c332a654d27c5868af98ea1076fa8bb5b933afd3a9d377f1a9a3a1b1f49b62a1996906b3d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-linux-musl-arm.tar.gz\",\n              \"hash\": \"1bc59fd6ad4edeb728cd83b0fb4a54080f17b1883f2cf8c8547b321ea3800802adc246a54ef9c837c417ce972c5b83864d21608c5155c812028f6686df79e0d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-linux-musl-arm64.tar.gz\",\n              \"hash\": \"af6befe621fa27ca087e728a8260c78495396044b22fe4e606404bdd2273518b4121f777aa20634ee9d5a1c70509712da513c5e10cc606c713c6a0047c7a3956\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-linux-musl-x64.tar.gz\",\n              \"hash\": \"7dac92facd7adec19054ec70a4b0abfb0d1d90048fcfae7641f627818f071fa6b09f152e3992de57d4d620986d6ab0bb52bd0a6812485c03b63a246cb1b63637\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-linux-x64.tar.gz\",\n              \"hash\": \"250d0a6f779976969385c31dc69f4fec53e7ac1b1962cd9a80185fb78fbbc01a5b0b0af305b718142f0bf7644d3395aac1472b49f40fb7b9f1f21a60fb53253b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-osx-arm64.pkg\",\n              \"hash\": \"0ac298c9d8f2471e4e228383b3ea9ccb17016ec97e7c22163a83401e0a5fed61eeffebec39edc18edeb1f6b46f7977b6d6ae7f5e826c36281d66168b503ed3ef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-osx-arm64.tar.gz\",\n              \"hash\": \"a9881f5b12cb3b087f9659c98e3959eb8df217c07d201bea8db6538ed0ce6aa6bbb1ca79cd748635325a4ecb45c81c4107717795a896043b0fc0530092b5da90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-osx-x64.pkg\",\n              \"hash\": \"c5e7be1b98ed04bf36fe16bf370ade731dfb105ee8a1a0bec0dcebd09dbdca5b6c54f3cae951f97e9bea69c4cdd1d17f79f2ff530b7100c2b98b0196175c71c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-osx-x64.tar.gz\",\n              \"hash\": \"33c3f60012d9d24a7e4893f0ecca687fe516d7c621d65b2018e594d07ae7cd4ccc4bcf712c888417ba96f27fe602896f6ee1607ca843345ee4713469f4a2a872\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-win-arm64.exe\",\n              \"hash\": \"101d4c95368dc2cdc409741908f34d579e4e8cb062b4f3d69f3e6d59198745b0da29c44e5ceba93d15b45be1d67d0a2817f91e119b6c2c932ccab32876a799a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-win-arm64.zip\",\n              \"hash\": \"ed1f91976354edbcf93ff4461015f1c2dd04643e24630a23947db568bbd498d9ec80a34bd87bf8965a6be5ff0afabe6a5258efaa46a222e50d603697755b7140\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-win-x64.exe\",\n              \"hash\": \"3168b2efa740b846dd165d57cb0935005f8a81380fd2d5b98a124c9ef88a496eadb63857dd207d9140a542a594d04d644e6a5649cfef32834b03891ea05bcb6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-win-x64.zip\",\n              \"hash\": \"3ab0a151f80b64cb9fd75f84b87afac305193d5492eba6fbea319a3f4880730ba97a3f1c330610865efeb69d2d490b61c39b631d4d07cea0930301e9382d3f40\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-win-x86.exe\",\n              \"hash\": \"9af05bd0ef0c843271e95edc2e65475d92a48306cdf6807cf78e586583719b5dafb1e7b162f6db3ebe1179a7795af8bdff14fa1f2f6cdbb84460f0e629678a95\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.312/dotnet-sdk-7.0.312-win-x86.zip\",\n              \"hash\": \"053a6a1c9e486daaf6bc73d297275e6b73204bc51c95d00564e3f358d5e65a6c7079aed1a70d7df4af2881d57c3efc01fb54698a60c2301b0d7d557f351641f6\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.115\",\n          \"version-display\": \"7.0.115\",\n          \"runtime-version\": \"7.0.15\",\n          \"vs-version\": \"17.4.15\",\n          \"vs-mac-version\": \"17.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"6.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-linux-arm.tar.gz\",\n              \"hash\": \"a7ab376259c125cfc5d85be83d364111a754b545018b538d162a7daef1142db10c6a65973fc20542b8abb4b0301a31b46fcc16a4b4cea42f2ad3e860d819f3f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-linux-arm64.tar.gz\",\n              \"hash\": \"8da1dcfe1eb69c60cecf48da4e933e682128ddb520484b95238af24b5427086b0ff7f0257b8433076a3b720ca9729d52389c7d16eba3c9070bc3318994a0be83\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-linux-musl-arm.tar.gz\",\n              \"hash\": \"809ba1d7aca0314d26e31bb3042718b969a4f8af2eec6ec71d77d11b04ff0da0f6ad34b530fb4ca65bf2fa922b03d8e1e17ff0662fdba5cb672cdc2e9b5fdb51\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-linux-musl-arm64.tar.gz\",\n              \"hash\": \"138aceedf1f40898ce0e3c92442f32d547d31a5a8cae522b7f27f3d89109562487a43b80e6dbb0f7fe3820f71c4f2101e8deffca88786f0a569acd3d5592c238\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-linux-musl-x64.tar.gz\",\n              \"hash\": \"7392ae77b6669b24113b0a290dd4169cb47f80f25ac8bbf61670993a500012919a30bc1c71e22ed82fb342580736e741278067d5da72aea89ec7ade05164abd8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-linux-x64.tar.gz\",\n              \"hash\": \"716d3bfba7be793489a43df569339aae5b654c98e9d0df1b64c61ed4a232cec2b188148b4aee98062e3837312ec97600833d8f39e1f4cba2800879db124d513a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-osx-arm64.pkg\",\n              \"hash\": \"4a2e821817c86f0b63e256e7176904d3d58d708f76946cc788c1587c841a9e60e359a2b59a927abef92c5aa19df04d103c92f24a0cad64e093d06df65e9a02dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-osx-arm64.tar.gz\",\n              \"hash\": \"693f63abcf66fd9f849bba53584fe8ea570394e336c14b0d20c5274192292b7d543c5ab8ac8649b5526f1187aedba0ad1d226758fa5c6dfeef174a782ea56c82\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-osx-x64.pkg\",\n              \"hash\": \"3a9473df2fea4b297e4e3742f26448b2466c9d18a7abaf188faefe950296ecc034ef8707e931d786984044fcae1bbe12d030f5e7751b32ff0110bf72379b3ac8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-osx-x64.tar.gz\",\n              \"hash\": \"35bf6cfebffbd125050d91a553bfe03ee61e95bb20c23c080a2367bda0488941aa208946a4887a11e36c28da249fa10c3e1853dbdcdd4846a0a206e2ec5d4388\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-win-arm64.exe\",\n              \"hash\": \"3a6c03b2cd5a7d7ef4e29f42233ece2d8a4b90791586cef05a979cc07e8d10d55e88321737b5b92f428844bd338dfff908b39a8ee4b5cb842fa5a56db96a9174\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-win-arm64.zip\",\n              \"hash\": \"c53e326592e3b1041c991005c5be97db695276488a3b4afbef5fbc62e80c951a677a01c3e17936aefa53550ca008cce3d039edc24e5fbce58f0c9a5715ade03d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-win-x64.exe\",\n              \"hash\": \"541241f630059c223cee5101ad4b77c720719df6ba4df961ea1e1a8b3cf52df361254acbc02bdfc681d8a7fa7aa4de566ca4cb9f195db1d321587cb4240d74b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-win-x64.zip\",\n              \"hash\": \"ed25a2e332d9f01ae5dc8647813236674b76c84abb3d5fda1fb22e3a8b772bc5866a5db530fb617969e8afba65fb23eeec7d70492c93ecfbb8c43af5e341b916\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-win-x86.exe\",\n              \"hash\": \"2125c4df31691261f0ab6bf226d9af78540cf65b740a8ed203298732fe1443b64a67273d40e27073ee7d28d3e454dbf1e73e8c5fcfc869cd55ecf95d01c2829e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.115/dotnet-sdk-7.0.115-win-x86.zip\",\n              \"hash\": \"60e44d5cfede53b8939c53b4e6750efa80c000085e1e7410e14f12d2e6f4687305be99a841a6b992cd76eb0ec7f66bc0d518c63ca5f4702cac8cc30b7a481b1b\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.15\",\n        \"version-display\": \"7.0.15\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23335.15\"\n        ],\n        \"vs-version\": \"17.4.15\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-linux-arm.tar.gz\",\n            \"hash\": \"34ba8038fa1861d44711302225ec47fcf0c1bc1a3c75fc7ce3b9f054ca46ec627e1864e72f47bb79c03f49b349ca6821567b04f9f3aac80f49afdabf97105ddb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-linux-arm64.tar.gz\",\n            \"hash\": \"4139d28b0c67497854794d34ec3eb3d7f4a49f34be4ed43cb634be88e7315af81090dd851fe2cdd429bf0050345f14000d2f939c020aeb809a1696483afdebe6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"4b4e814c4aa45a92ba4f7b55293360c0c90d79f4dfb87e6b2d3c8cff22647371173c1ca71657da476f16820951a697076528e902591fcd33c410ce156dceb916\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"35372eb25c7271751417750c5b88f74be43158674aa23862386d0d67b765f4899c59016e989fce640d254e04c618ae520af5908f207265fee3917225dbec0899\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"34fb86e7ab71dbecee7bd3fcfa0eb11b3e0ea3e1da758c261ddcae432245ae8f2519d9c46ecc0f011f5f0e085bb127811c61c7b7619fffe57005aa3b48112d3f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-linux-x64.tar.gz\",\n            \"hash\": \"8aae979c0e9c90e781b8747aba5d7e09c9a81845b936c9185dc16d519db3a4ad9e219da4bffe13476baa81c7ff3e1637e8ef031be1f9f305f7d1681568ae3aed\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-osx-arm64.tar.gz\",\n            \"hash\": \"7d090dfbc862d6329fefcb93ec74c5b82100fa1949ec92602b69871b48f467654fa6c18ec0553d1edd8908a87cc3682e809270c5fcfb3c93111be8adae86dd6a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-osx-x64.tar.gz\",\n            \"hash\": \"75d01e3e123abbb5851c709a13d186a11db425bf18c82f615b445c2ff6629264a4d41e8011d43a225816ac807c7c8793cb35bbaf506455a3169a741d637230d0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-win-arm64.zip\",\n            \"hash\": \"a95331017b2c041cd120ed55001a590613309bdabc12bc886aae4a35044f4872ca099bfd9309cafda8f8dc2f7b0530b9c26edfccb3287297c0d9fc994ba18f10\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-win-x64.exe\",\n            \"hash\": \"a3a3d26e7342043a69c41f21416ea720b8fa79206adeacfc4e2cdde4957847d56c960ac013251687208aeff635cd2b4627a90f193a425635eb6b8fba69111301\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-win-x64.zip\",\n            \"hash\": \"56983811d669b2564df0e9d09d0118284eb0dbbdbf4c0ad1ed416c32d2eb3d6553f6fd30eb23d5adf50b6a2cea9fa566ce610258be39fd6cb59ecd2aeac9e915\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-win-x86.exe\",\n            \"hash\": \"2b1887cba999a4a13b595d5f0f71ccdac703fa1045d1868f77dc58300f08ed786dcc736667ff840b65d9491976eca4705672526fff5819ee86c484288c965984\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/aspnetcore-runtime-7.0.15-win-x86.zip\",\n            \"hash\": \"d62f4a7f515dbd73aa699612ff00ea7cf6979bb693fc432711f035e75526bbe31d22dc10fa759957a692d037164b8756fa42edb713e3f47a3f91a987fca78407\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.15/dotnet-hosting-7.0.15-win.exe\",\n            \"hash\": \"dad6de48a992e18a9e91be41f9997de87ce06444b2d8201316483172f782fe903837299a238918cffa239f5c589cc1ab0680cd307f93544de52a310c0769070c\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.15\",\n        \"version-display\": \"7.0.15\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.15/windowsdesktop-runtime-7.0.15-win-arm64.exe\",\n            \"hash\": \"c378d55b11d99f7f606a8c1604a81514f81595d48077f63f6604dd1684ea3fd7f642d1d8d68111d66b5aa5a950f99d09735eb4a6cd43481763d3d81b3ea9d545\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.15/windowsdesktop-runtime-7.0.15-win-arm64.zip\",\n            \"hash\": \"5a9756854f311c26b344131f2da871f2eda3a68ed0198107d3451a5a27ac41e5963934fe857abe1b351e17f2e350ebe98c0f98af766bbc0adc9a54f61b41a2c4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.15/windowsdesktop-runtime-7.0.15-win-x64.exe\",\n            \"hash\": \"9fcf6fe4a49ccac84fced899039522eee06210cb7d7add57d2c4f76560a4698f38ce22305d13f129a535fc105e3e7e132b90f9b9aadeaffae076f037c891813b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.15/windowsdesktop-runtime-7.0.15-win-x64.zip\",\n            \"hash\": \"11595151000039a18a4a90587327d2345d10e9765d7e69c95563671381ea2de1265160452617cdfed67f7a03ee2f23fce5a09c3dbb4bf220eebd5400ec81a16b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.15/windowsdesktop-runtime-7.0.15-win-x86.exe\",\n            \"hash\": \"f749fbb22ae6daf5370f2d8c0961af049a723b742805a5a36dc2288f0318ceb600551ff72fa79aaa393b22a207165c92aa2de918c7215b6f4caa7fb679a3df69\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.15/windowsdesktop-runtime-7.0.15-win-x86.zip\",\n            \"hash\": \"a90523cee2927d5bc8c92e8b5ab68acc5921ec1a5f3dce5f3b8407dbd3c900504a4895cbe7172b5e6010d030d2c7b5d008332cd7bc7496a024563360aab424da\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-11-14\",\n      \"release-version\": \"7.0.14\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-36049\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36049\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36558\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36558\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.14/7.0.14.md\",\n      \"runtime\": {\n        \"version\": \"7.0.14\",\n        \"version-display\": \"7.0.14\",\n        \"vs-version\": \"17.4.14, 17.6.10, 17.7.7, 17.8.0\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-linux-arm.tar.gz\",\n            \"hash\": \"fac40241dc36434725197548abc7715db846f34b48b68df139981ef1d663eff2dbdcb11626a8295824aefc9cda98c62c39fc1e45a05cf7b2307c26467f6a0e43\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-linux-arm64.tar.gz\",\n            \"hash\": \"cf2dc2997b10148b558f78b2f2401acc83921a6b721c11199ac7dc77d8c9fb5500d7be092281f13f3c9b4287dedc6fdb56f242d9340568a0fc021055983f9cd8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"16343c03c29c4242683c9e1c9a669ffdc50ca8f5805ee539a3628a05e412dc7afe2df1a81ba57bfceedc9a42450bbd9b59a1b64b32e0e0429f0ce7e335db6f11\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"92262e41a370d9c4b05b0dec1a73deccfe05b1c841300f6c0aa2eed49f7ca5c1d76727a571cef3c5a063edcd6da2ce69d2357c3e3372f5789387706b4512e97d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"954cb4d80a7da484c5f73a4dd26b35866fe320260af6c7c7dd79e7b82bfc4d972c6c854c705514983f78ee2f44b572f30ed622dd69e94c737e6c5663279f68be\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-linux-x64.tar.gz\",\n            \"hash\": \"02fd66ef2059d124d9c4f3fbfd0d5b0375b83610cdf51a2972567e4bdaf1d55e532478533509ec2408c371e7fdd6efea8e9b9aec9eb5cd703e8e5d2814ef319b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-osx-arm64.pkg\",\n            \"hash\": \"3692d57a2c25ce78e5160a4c67cc98696d6ab3912276d7f9dcd4d9e50d5d2a2910599243c3bdab0c2f46b4aa4a0b7a0ef4618cacd213cee146c04d2033863c02\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-osx-arm64.tar.gz\",\n            \"hash\": \"0de7be8aa01c837ef587e9ed8b2944ef600466a2b68c6f0a4c63e1d4473b92a09667a31a412cc2535b8ca44a0f768cd1a1daa419ad152f2d42c3513fab35eaf5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-osx-x64.pkg\",\n            \"hash\": \"bddc8bdf832be8decf4ff42ef31c15d2daece37ecb19c590a7b8f89a107bda7f3636d6047c82af985c34bb8189bd1e4dec5f0654ce566385b6379efbfaaed7b5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-osx-x64.tar.gz\",\n            \"hash\": \"74f66428fdc77ae9d801e1f7559d99436c6d1fbee7a64d587e46637466873a32d76b867f5cf56c0951bb01450419b8f25e851e5ed0abe69444df8979312cf9a0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-win-arm64.exe\",\n            \"hash\": \"27ac74078e9d1114a667dea359251e9e0c5b5f508ba297ebf03b384955c57288e8b2ef7b28a4aad3f5254a1722c4c048e785a7e3b1d6be2d97fb0a05dba16527\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-win-arm64.zip\",\n            \"hash\": \"72e3ca631c62c084363bcddba371594ff82f5981eb2572114f3d1c833857bd0268c284e0677be2ff0f690baef1e25a88e42a5b51183ce4f6d585cbe3ca3f6a32\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-win-x64.exe\",\n            \"hash\": \"6ae850b7ba826d7d5bee7c299c444fe93b89f9721250e3d6d2bf35435dc00138fe0839884483ed96058b27d44db9283fb61b65d929ca117c1888acb30a58ab2d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-win-x64.zip\",\n            \"hash\": \"6186f3d521651c4f092f8f6318734e49ca38e8eb85522da1602144f896d5a3aa83176cee7b27b70f7b87fb0e7564416b2c336782674c59b7d2065a6e4c0d0a01\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-win-x86.exe\",\n            \"hash\": \"5ad4892fea92784c56cbb4f4a939a4f492addbbb01b2151344c99832157c000f16750c4852fd0c55f9fb9b305deeba266c426b2622486e2b51d214aee22c498e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.14/dotnet-runtime-7.0.14-win-x86.zip\",\n            \"hash\": \"5867a3edcc68a63b4e0c69395a8a6088ff8bbcb74cd96737adef8303a2338832a4219450ff5843261655cdc345aeb16d9c74614d472eb7129718f119b0f49efe\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.404\",\n        \"version-display\": \"7.0.404\",\n        \"runtime-version\": \"7.0.14\",\n        \"vs-version\": \"17.7.7\",\n        \"vs-mac-version\": \"17.6\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-arm.tar.gz\",\n            \"hash\": \"25a5a4ba918be181fbe58b4e5c5b385c4825837ed0e3778b01754c35f0d2651ec71873697f8781e91adad9177c366a179c34378418d4736366c978115ca0a32b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-arm64.tar.gz\",\n            \"hash\": \"b7131829d08dadbfd3b55a509e2d9a9de90b7447e27187bd717cebf1b134bd0ddfcb9285032f2ce08bd427487125e8b3e9cdc99b7f92436901e803e65f1581de\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-musl-arm.tar.gz\",\n            \"hash\": \"fdd975f762ff757f81b0cb9eb0063c32cd46d8c0fc45a1e29f1bffef2756b31cc725313e1e9b29c4908f0e7027970e594217af01cc909a0db0adec2384b6b916\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-musl-arm64.tar.gz\",\n            \"hash\": \"209f29d23945d61d8d2bce57ed120b970ffdde7a23fcd397602e4755ff4be6ace2284d42297708e7cb2ef8a2f569885b0595b218e01b84b923c76c58fee1adb4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-musl-x64.tar.gz\",\n            \"hash\": \"db21720eadc79fadf62332cf0a10bbf8c83a96521b25967e69ce54a14a16d9098abb9c8d2c263170332a30ccd0fd1eca92129a1e9fc3c3460fc265ace38bb04c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-x64.tar.gz\",\n            \"hash\": \"f5c122044e9a107968af1a534051e28242f45307c3db760fbb4f3a003d92d8ea5a856ad4c4e8e4b88a3b6a825fe5e3c9e596c9d2cfa0eca8d5d9ee2c5dad0053\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-osx-arm64.pkg\",\n            \"hash\": \"75c53127350c1ceab04b26352b8cad4622aa9b4044ed0de81c2dec7d76f3b72f4214b174408ce466ddd3baa497c66244ddd2a7f966f112dfa0c4d0850888a642\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-osx-arm64.tar.gz\",\n            \"hash\": \"ca2dc7a126aeb8ab6c919bab535eccc47817666feaf0cde7418cab0a2cee238ec44d229b3f4d1f7550d121748f1e0abc5e4900b33edd57f2cccd89b58fe84f49\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-osx-x64.pkg\",\n            \"hash\": \"973ccd9be0c905e502fd782d607d4a9c6c38518a84d754716cb0437fd1baf5c740a02a8df2af4ccd637207e5e6298abd47b8829af63d63b072f5b70ea6d0b1ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-osx-x64.tar.gz\",\n            \"hash\": \"6e04e1d262c23bc0fbd6be9b1f847c1a47142438b330c004e46b49aaf0a520df3f3c0a576b2fd0ed88567be572280e5f5a98908c920108c58e65aef22c1332d0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-arm64.exe\",\n            \"hash\": \"2bc1ab2b2652dabc72625f2fe531c2b06663648d2091d4a448ea36882101d3dd98dd88d027b1e140c7be6d422ffe77ccbed162a537c5728be9843547c33e72a4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-arm64.zip\",\n            \"hash\": \"d264e84f30985a3ec2f0444238e8ff93fb812ef646dbe465ce565885827f832332aae26a12c1124716bf35b8fb4f5b2482b7686f3896e17aac8ea6e4950af8b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-x64.exe\",\n            \"hash\": \"4bb56c6f112eba92f2ad0d35a5e3109512a1dac601d63983ffcca2047760f661f60296c5b68dc1459729888614a8e0205ed4eaf69dfaa5b4614f409e863a0ea0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-x64.zip\",\n            \"hash\": \"d541d2657f0551f53897c8a212ac17dc633a9b299082aa237e0b08e032c5f26f1a0aa277f76ab3ba5d5306955933f279ccd422ea7017725b15374b55ae3e2346\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-x86.exe\",\n            \"hash\": \"1f98f8efcee6bfdcee0d3a989bb3b6a3df8a55bd670fe6b13de07202e4953f783151c4a4225a50217742aaf74b678cf04991448b892b562183374ed9091ca63a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-x86.zip\",\n            \"hash\": \"d00fc2e7397c62fbfba8bde9f63eabb8d8e5ad22107ccd49e2934fe7b28a08281137132ba055a1bbe19190fc79fad69c469c04af5415aeff585796edf5b1558c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.404\",\n          \"version-display\": \"7.0.404\",\n          \"runtime-version\": \"7.0.14\",\n          \"vs-version\": \"17.7.7\",\n          \"vs-mac-version\": \"17.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-arm.tar.gz\",\n              \"hash\": \"25a5a4ba918be181fbe58b4e5c5b385c4825837ed0e3778b01754c35f0d2651ec71873697f8781e91adad9177c366a179c34378418d4736366c978115ca0a32b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-arm64.tar.gz\",\n              \"hash\": \"b7131829d08dadbfd3b55a509e2d9a9de90b7447e27187bd717cebf1b134bd0ddfcb9285032f2ce08bd427487125e8b3e9cdc99b7f92436901e803e65f1581de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-musl-arm.tar.gz\",\n              \"hash\": \"fdd975f762ff757f81b0cb9eb0063c32cd46d8c0fc45a1e29f1bffef2756b31cc725313e1e9b29c4908f0e7027970e594217af01cc909a0db0adec2384b6b916\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-musl-arm64.tar.gz\",\n              \"hash\": \"209f29d23945d61d8d2bce57ed120b970ffdde7a23fcd397602e4755ff4be6ace2284d42297708e7cb2ef8a2f569885b0595b218e01b84b923c76c58fee1adb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-musl-x64.tar.gz\",\n              \"hash\": \"db21720eadc79fadf62332cf0a10bbf8c83a96521b25967e69ce54a14a16d9098abb9c8d2c263170332a30ccd0fd1eca92129a1e9fc3c3460fc265ace38bb04c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-linux-x64.tar.gz\",\n              \"hash\": \"f5c122044e9a107968af1a534051e28242f45307c3db760fbb4f3a003d92d8ea5a856ad4c4e8e4b88a3b6a825fe5e3c9e596c9d2cfa0eca8d5d9ee2c5dad0053\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-osx-arm64.pkg\",\n              \"hash\": \"75c53127350c1ceab04b26352b8cad4622aa9b4044ed0de81c2dec7d76f3b72f4214b174408ce466ddd3baa497c66244ddd2a7f966f112dfa0c4d0850888a642\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-osx-arm64.tar.gz\",\n              \"hash\": \"ca2dc7a126aeb8ab6c919bab535eccc47817666feaf0cde7418cab0a2cee238ec44d229b3f4d1f7550d121748f1e0abc5e4900b33edd57f2cccd89b58fe84f49\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-osx-x64.pkg\",\n              \"hash\": \"973ccd9be0c905e502fd782d607d4a9c6c38518a84d754716cb0437fd1baf5c740a02a8df2af4ccd637207e5e6298abd47b8829af63d63b072f5b70ea6d0b1ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-osx-x64.tar.gz\",\n              \"hash\": \"6e04e1d262c23bc0fbd6be9b1f847c1a47142438b330c004e46b49aaf0a520df3f3c0a576b2fd0ed88567be572280e5f5a98908c920108c58e65aef22c1332d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-arm64.exe\",\n              \"hash\": \"2bc1ab2b2652dabc72625f2fe531c2b06663648d2091d4a448ea36882101d3dd98dd88d027b1e140c7be6d422ffe77ccbed162a537c5728be9843547c33e72a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-arm64.zip\",\n              \"hash\": \"d264e84f30985a3ec2f0444238e8ff93fb812ef646dbe465ce565885827f832332aae26a12c1124716bf35b8fb4f5b2482b7686f3896e17aac8ea6e4950af8b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-x64.exe\",\n              \"hash\": \"4bb56c6f112eba92f2ad0d35a5e3109512a1dac601d63983ffcca2047760f661f60296c5b68dc1459729888614a8e0205ed4eaf69dfaa5b4614f409e863a0ea0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-x64.zip\",\n              \"hash\": \"d541d2657f0551f53897c8a212ac17dc633a9b299082aa237e0b08e032c5f26f1a0aa277f76ab3ba5d5306955933f279ccd422ea7017725b15374b55ae3e2346\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-x86.exe\",\n              \"hash\": \"1f98f8efcee6bfdcee0d3a989bb3b6a3df8a55bd670fe6b13de07202e4953f783151c4a4225a50217742aaf74b678cf04991448b892b562183374ed9091ca63a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.404/dotnet-sdk-7.0.404-win-x86.zip\",\n              \"hash\": \"d00fc2e7397c62fbfba8bde9f63eabb8d8e5ad22107ccd49e2934fe7b28a08281137132ba055a1bbe19190fc79fad69c469c04af5415aeff585796edf5b1558c\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.311\",\n          \"version-display\": \"7.0.311\",\n          \"runtime-version\": \"7.0.14\",\n          \"vs-version\": \"17.6.10\",\n          \"vs-mac-version\": \"17.6.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-linux-arm.tar.gz\",\n              \"hash\": \"b962f579e3518e249c03d19453f3ab8a57db70df7a6038e39c2e694260bce38d80dac58ce5be86eb9e5908f034ff971bb4918301aaf8a78c76d399cacffbc730\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-linux-arm64.tar.gz\",\n              \"hash\": \"8a7ffdcaab49ec2dbb915f7eaab535bba113bf5e81ab1cb4a2369cc1a99de90cc70a04d11982307da833f0e5c7afe9fc4dc0002ecee8a0a380daf5a7723c7059\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-linux-musl-arm.tar.gz\",\n              \"hash\": \"af29641cbbd456740aaca0164c64acd67cc09183e9906af0b4ea84daaea2ecbefd1a3c092bf364f642af4f544853da382251aa8365a7d315feb82f83fb01f2b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4c1de312971c9f7829d4fe08ebcbe370da182b5bc7d82bb6133d088401b57d451fb1d2a784c8e1d33385e4ce1e8c4b33e063a52a00d32fa20cf6764cc05a777c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-linux-musl-x64.tar.gz\",\n              \"hash\": \"71819507642e11904565220bfa02636877bced0a4a5afd0d095d9c81a977df8a01cf051bd2813fe305950fa6ee5854c1f798b8ce753bd4bd81818ee80ec839e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-linux-x64.tar.gz\",\n              \"hash\": \"8dcfa7d14123b3cf3e861e9ba4d1d1e2cddf92c64b52ad98b301050e3c35e1b618eb1b7da5e61570950fdce1326c854f42415065bf1e68edc1feb3be999346cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-osx-arm64.pkg\",\n              \"hash\": \"706f8f6ded359289a4e70abfa1d4be355b35960620895faee71e6d60c6e579d529e75d7ad6982cfc8d25b4e597cda7b7e6594829c0799cab49f4036e772ebca8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-osx-arm64.tar.gz\",\n              \"hash\": \"1d8b84ff78c307d062a0a6750cf3f3788e3e458a261a48540bc1bb8b7206d682762dbce51f1b04057ad2c3955fa9261277dd5970d8ba6d9b92ab400544195084\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-osx-x64.pkg\",\n              \"hash\": \"407584c391260db47058c030c77c3972198e80054138812090c19d7f598d47cdde855d78764633d96a0f26c8c27d6c83c6492200cdc86a1a44ef0abe7def2cd5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-osx-x64.tar.gz\",\n              \"hash\": \"5381ce26c0e480ea791fde3a8e90a6ef031fde4480d35dfa940c039b64a0d5a8e2eb82b2ef56cf4d0a77af3bbc07a594ab605b8447c872014b0063d70896acfc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-win-arm64.exe\",\n              \"hash\": \"b32ace0261c52bf1fedf70595192a7dae85164c1e3b0453e7064f630be20b96fa3bdb6eed73485080415d4ecdf2d72d30fa746356b4efc55c495134435d75cfe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-win-arm64.zip\",\n              \"hash\": \"090a0ab7520b35bbe02f0989735db2e8f3787926853e2643efa2d7ef0eb2af4cff3604890fb524402a49993bab53ef501a495ed53e8139ff67470ca4e834693c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-win-x64.exe\",\n              \"hash\": \"0f4c3a70b7506a614384ff9e455de12c6b6dc96fa50883e6a6024a0d587448f722a740a489f54d944a084991c0aad6803668fdf2bd294c3a5203b2dfba4c0673\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-win-x64.zip\",\n              \"hash\": \"025d44b9e1b5124f4ed046d6f5a981c4ea3d95d9d217315ad4415f7590fbf38f7a944c3e91d65c1988111b64b837fa25310d03e6bba2d9b627c0b3ddd457da85\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-win-x86.exe\",\n              \"hash\": \"d3d907dee41d134c5c81f7b6ae5047bf94b6fa96ed2732988a193c369a329171c8816376787aa008948fff210985be2863dbcb9edc2c185654587e8716167544\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.311/dotnet-sdk-7.0.311-win-x86.zip\",\n              \"hash\": \"c97f3dba76093496cc2f4835661adc8a212e4ff2b2e40be65504bd736177b3897105e8dadb6db810fdb094e8e24b18ea2528b505b387a755125a503860dbacdd\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.114\",\n          \"version-display\": \"7.0.114\",\n          \"runtime-version\": \"7.0.14\",\n          \"vs-version\": \"17.4.14\",\n          \"vs-mac-version\": \"17.4.14\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-linux-arm.tar.gz\",\n              \"hash\": \"aea6d7e3711a2dee7dd2f36ac11f925de437d36aa4f8f46cc160f4c54050f592b9fe105875400090252c5d9ca5c29282b2557cde6c58f230a48021e400572b5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-linux-arm64.tar.gz\",\n              \"hash\": \"7206f9c3b43305cf332d41dc65ad6fc3669d1596a8dffc465c8173517f13b3e3f9f343b396fc1b6cd169c053e130b721a6e90f02863470fe92fca2017e1a8b91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-linux-musl-arm.tar.gz\",\n              \"hash\": \"4a0246d044d04e7f1b05ea632130f721bdf71e2113b0b940a3c323f4d3832dd3c5f49d5fecb85109d52d235bc25bc18350dab62f9ee567450971e2cf0ef3d5dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d415abf152d894428a9924a1ca33bd76dde34395dfe87954debab9f754c4c20f2fec14886bb302a297abbd1aa4c10e3547e04f4546606b9728847e39a4a48901\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-linux-musl-x64.tar.gz\",\n              \"hash\": \"01f7745fbc7ce21701ea6db85896e3e241d134dc92a413e668bbdc99d58e7d85a9310735ac2b1cce79ba39003b4c5f8a63b394546ce9be1d701b0f7ef5873e28\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-linux-x64.tar.gz\",\n              \"hash\": \"5e4ef5b428b44c0ce7ec39a5262dbb12fe8fe117ddb6241184ceef6e00213630f3f48ac2f00050843a802387ee96a7796b71bab28060dfc9c4041a558c52701c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-osx-arm64.pkg\",\n              \"hash\": \"325686ee33e800edb1332e0e15c98fc43cb1ed3ace66805ae304120b8d75fe7fd6e6c51b2e469c392dbd586effd53cdfedb83d26fdf0b930cb494f98ebeec9af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-osx-arm64.tar.gz\",\n              \"hash\": \"834f60b0e296eb16724bef60ef891888c45662e85fc111d19e1694f6c526f9851e0ee9aa2cc0f9460a52ab27343f977670f997040d4c258c7eeb20767265ede7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-osx-x64.pkg\",\n              \"hash\": \"2d4b95294a021e83d75e7d7e9abae3a54289800653e4cfcdeccaf210dd6d217656442024661da2daab44be917fda91f12de615c0de529a768cb64da802ab9363\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-osx-x64.tar.gz\",\n              \"hash\": \"4b158ed1f16a3e5ce69cd672b63244db14205ef91e56e204c1f207191cddce1e9cd03325389ba1d06fb35a53d0495db5b058edd1980a4f41132e45258bc1a187\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-win-arm64.exe\",\n              \"hash\": \"4af7127613c7f09c3ab79d67cf3744b4b9f1aa17f1a99dab4d101754152d8b9025109bd775293557a4d10fe16e3c3c284220ff86c28e5e1c5b8feb26e11e9568\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-win-arm64.zip\",\n              \"hash\": \"f30b382a0ccf2216114e8988bf48ef3cd025eaabaeefe34d43bee169783678bb51695b38523eba0d13c9f16bfea63f407e2e1a90618a492c53a104f575ee0f51\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-win-x64.exe\",\n              \"hash\": \"45fc325a40f5ec5e84176ba19cca47bbee77b4f688f1f666ba7caf1c5667d42c5c7352c5b75cbba0dd6579be40a905d635cda228a3cbbeb663b2d5a18ebe5056\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-win-x64.zip\",\n              \"hash\": \"08f69f20d1317d00395d8686eaf972715c333fa8313d87cf3480c26ae980c5a0fef0b080350f17f06631e895d37824e4040b331499b3937fec418c754eb31c33\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-win-x86.exe\",\n              \"hash\": \"1cdd2ffed1793596da5f0138010f145f1be5bec0c397147734ccae9e0ce33418445df329ef44b5c8925eec93e628279feac6322c67f5407cd6f8758420092bad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.114/dotnet-sdk-7.0.114-win-x86.zip\",\n              \"hash\": \"c93f08ba3639f309612e1280f3b0cf33145f39d80da5330ee7a5af05182ccaece2b52c0176dddab972e3b1ed7212f2f833ac45ff75c308b4dd390a5ec9c434b2\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.14\",\n        \"version-display\": \"7.0.14\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23296.14\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-linux-arm.tar.gz\",\n            \"hash\": \"e93ebcdae84bb0877729218bd4d817a427603827faf4fc1901bb36220485289fd1dbb853c3dc5ad16f488ce1ab643f7798efa530e05797d2aee86003dce7feec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-linux-arm64.tar.gz\",\n            \"hash\": \"577d927686639241c00e2f07fcb11eb878d671e926c6fc058f879619452ab0af675db4c2dfd8aa9290f03cb11afcf5094be1beeb5fae491f50520e171e732a71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"df4645f89aa8d4ae45a550c6c8b97f81d34b9e6c51b9b37b72b07e62e9d4a195b4fa7f6cd75956f77ce47d55273cbdd4edd51caa43f0453c43f4b0c43592a1f7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4f7b441a8116f0fe4f6429f6aa5fa68b2387bcc9e59bb56c5c8bb53733f7c2e57bd45502c15f5c2c56d554f15543dbe7cc3a3faf9b1600f018b2d229030b8bbd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"e3fdc0b57683c633e18df0afb70d3348c1a756541c7dfab6c763b9b9ac471aac7b34170cc07d3b989d80521ae3b0b5c2af1aea593b4e13079bfe678356933c25\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-linux-x64.tar.gz\",\n            \"hash\": \"00f55556cb580d81bf0059a61a642ed8b405452d55e94460c03a0edec9a4f608fd78561560e5fc5bf6e42fb1f45420eba75f8d102d8bd46686379dab7ffde6f6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-osx-arm64.tar.gz\",\n            \"hash\": \"17f0c996b2e5586385b2e6cdcb187fce27e0c18f235c4198df9a2bac5475467fe6c9df6405e7cd75ad4bb1a5f6ce380e23330cb1a047c5930aeac9c6c89772ab\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-osx-x64.tar.gz\",\n            \"hash\": \"37f526b1192f67792aa413f6035a6e67bb42cbbab7b240ec0194a0640ca08e98546796e751fe1700990b2c2c0b71ddc3516571536f1110b4db47b2a1b44301d3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-win-arm64.zip\",\n            \"hash\": \"0a4db4b5d0deb16dff7dd0ba787e98241ed278117b9f40fdf84785f9e3c8ffa1d44dc740826a655c4d6fa132ea3381656425c2b9aabe2802faa251408c72444f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-win-x64.exe\",\n            \"hash\": \"2577ac9a1b3fff86a90ef46b2cc6dd36356c134b841abdc5908b73a806819fce53d4dc4bad8cabe16dab0b46606ca7bb16afca9de9224c669b8d7928318ffae3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-win-x64.zip\",\n            \"hash\": \"369e2144f4d36a6b13f88cf9330856fefebea227cdb7adcbb123aee43b5c80bda441fb8b26c51af0024fd1bc175312d9b0cf63182c91c2b3e0269307653fcfe6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-win-x86.exe\",\n            \"hash\": \"26bbfe06680afa63bc8446edc98cd9b0bf1d3e58838a28af60743d9af9efedb4e1c1c939adea31ba402fefb55265878257d0ec63059e6f5422f1abcf34e6d024\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/aspnetcore-runtime-7.0.14-win-x86.zip\",\n            \"hash\": \"2c982abdf31e31f8359974408abc3d85e8ca8ece44a8d6bb6985673cb8ffba69ff9a1a494b019bfadfbbeeb9cd047f2a6049069c5312012d224e2f94d983ded1\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.14/dotnet-hosting-7.0.14-win.exe\",\n            \"hash\": \"3ca469ddcfe74957d20d09a97289539e3f5385ac3d6c5a5703b7cdb7590500863b630ca35923440503311d0a37bb25dd46216af524388471fd608c12a5cbe2c1\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.14\",\n        \"version-display\": \"7.0.14\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.14/windowsdesktop-runtime-7.0.14-win-arm64.exe\",\n            \"hash\": \"e221deb9d129bb37d890e9bdf5dec99487f1aa6b8c6b7545360e52f647d5415740666f2f9f57c2f165ad4e9f46d186ff609d7a3314cb15723ba5c6f7652d683e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.14/windowsdesktop-runtime-7.0.14-win-arm64.zip\",\n            \"hash\": \"bf3052e850954bcd550ad475b180ef990b8cc624021f24a7820b1fe34ecdc71d1a865c32add6e621cbc68b9e65ae47eaa1bd71bdced475c113d9312bc4f0c56f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.14/windowsdesktop-runtime-7.0.14-win-x64.exe\",\n            \"hash\": \"cb43e9852e719cc2b42a7e3f265e816e20629980f3f0eee6b655558efefb7c8749aedcc9cd7c1f7cbaed5e228ff6d7d2a9fe3cc5434c9a19869dd50921c3bea5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.14/windowsdesktop-runtime-7.0.14-win-x64.zip\",\n            \"hash\": \"f2aacd942d14ed22057df9d403ee6e383d231a68774457c30d258e0a043d65e3056ce4094cffa09f488fd56f4c4c88237b236a6e9d3ef358e6b778455ef289b3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.14/windowsdesktop-runtime-7.0.14-win-x86.exe\",\n            \"hash\": \"6784176e4e341c66fb49321acef2261a4067360dee11a1c51989c701eac707bc58848abce8ef6cd934135924317e1432dcb1504f03c184648685545c9356f1f5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.14/windowsdesktop-runtime-7.0.14-win-x86.zip\",\n            \"hash\": \"04fe52b2cc9989b99f541ab5e0d62ac62a3d96bec94663a213d78cc0c8c76d578e801c660507dd5031bb9212709a0f94e61da5c522285554fd3c9f85e2109ae2\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-10-24\",\n      \"release-version\": \"7.0.13\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-36435\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36435\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-38171\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-38171\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-44487\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-44487\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36799\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36799\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36796\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36796\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36792\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36792\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36794\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36794\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36793\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36793\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.13/7.0.13.md\",\n      \"runtime\": {\n        \"version\": \"7.0.13\",\n        \"version-display\": \"7.0.13\",\n        \"vs-version\": \"17.4.13, 17.6.9, 17.7.6\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-linux-arm.tar.gz\",\n            \"hash\": \"408152af3f0a873f617ba5fe32b31dc1a5041c97b8cfe39957472a465f76fdc964b32fc198dedc8b60ea26d090b0b25eb5bc6783be1da17126ad574605287170\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-linux-arm64.tar.gz\",\n            \"hash\": \"e3a465923ed3325f3d427a4737e0e23bfcd549b1ad2c2374e65a3d865553790e644a57a0aef676893050085a389a846737ce6ddf6f2f53e7bae7d3f6253c06d5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"d91ee53c45af98dfe2467454909e3ae9503841b0bc633f342c29f7a65f3858916b377bce0b6f72704f65af93709b51d854ab37d794999a18dfd7799a1507a6c2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ba4260ee73877f98d9454fed5abe0d278ba1eb3527d1a95f535eedade13d4637a84d375d820ac868b9055570a3748f6be2040f264737af09d113be56fc708a61\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"5bd33d6c3948f76af32499169fa51919361d1ce010f682dca4d62ae970711d48b8c298447ee37b0a8363c578d373b4dfec457ac6d14b3e51f89578589d0d7720\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-linux-x64.tar.gz\",\n            \"hash\": \"00a0b9c101c665ea9e751ce645c68840b02450c4a9f268149e6f59da1f179e85f0932475b8a72162b5271fdfe2ddc88eb21d09aa78bdd7dc285983445503f758\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-osx-arm64.pkg\",\n            \"hash\": \"54689b91a921dd4c942e96b12f32acc9183d20e872042d1ce0430a1c38f1908042ff50bccd4b7e016f61674a1b8aec34e19392a1616f3575f151391687494b9f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-osx-arm64.tar.gz\",\n            \"hash\": \"d0ebff0a46471ae1450de439b870b775e88901e05d3716261371e2283b5ae469bc03b71f545d08839990e7473517bb583bb6174215e412f10d873c9de5972f06\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-osx-x64.pkg\",\n            \"hash\": \"7459550027dd3aa515c9fae1588fb26917aa241df5e4d27081711ac4e954211b73a520febd6ec383177016e6325de0d1310d1e03c17ed46d2ebd19e3e995c6a7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-osx-x64.tar.gz\",\n            \"hash\": \"e28407e6e466ce8708a9648e59df6b574da5794c61418217edcbcd068bb72086761a7a9f09c3c35cca3f7bba9c8aac28c8cb6b64b6fbfefbc3016dc1f6292ab3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-win-arm64.exe\",\n            \"hash\": \"167c7f897cffb701da271e247f25109d5ccc1b8602c14c01234e576608158fa65582ebd39daaa123f30cb5dcd878883320e216b339bd958fe2db0c2a27651e53\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-win-arm64.zip\",\n            \"hash\": \"2879545b86e2336a2436e065ee3afe33c340b474012cd296c59b5763bd9821ced543dba78ef1199a55f292c8e0d63da53a436eaf444521e5fabfd330e0baf841\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-win-x64.exe\",\n            \"hash\": \"32fd009b7c6e7d431d9d8ed865cc0e18ef153afca0662c7b4426c395fa9fd4cb3b816255ad5cf5674346fbf907e8a8f7fe37882bc8adb4a5414b39013e77806e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-win-x64.zip\",\n            \"hash\": \"a8ca0564fd95c81f14c248c5859e43d33786c93b817d9751dccbca1b80e79cf4c31efcd6906d7d210dc6e27adb3b77125a6e684ac9b23430de0eb11eb8b42145\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-win-x86.exe\",\n            \"hash\": \"2b3b89d4f3302af4866abe616d2b901ba887f93dfc011831c11ebdceb1e104b8737f052e17d4ebdd4fee27985603f86f319cfe1b04c6861f67a3fd031b4f6720\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.13/dotnet-runtime-7.0.13-win-x86.zip\",\n            \"hash\": \"51e680158d2dd627542640e3b159564be7b53a09c39e21d01abd33cdd990e6f13bc713d845a0ab46e22d2540ac08a937c86bbffabd86bc7d97633ec5471daa4b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.403\",\n        \"version-display\": \"7.0.403\",\n        \"runtime-version\": \"7.0.13\",\n        \"vs-version\": \"17.7.6\",\n        \"vs-mac-version\": \"17.6\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-arm.tar.gz\",\n            \"hash\": \"ea385ec550177709da9c5b58f0e74e54781e5fb6986abf4edfddf7e2bab2e5c17bba9e594a89fa0779c1ade75cb6f5228b980a21462ecbe461d2464b0835c4e0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-arm64.tar.gz\",\n            \"hash\": \"0980f3f888f1267a5dee5c916ae8d0931f0c6789f1e7334fb7b4d5ab27a1876ec014d30be8977d314e4aa7302b197dde09ed39cdc5ed84b366307148d5350deb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-musl-arm.tar.gz\",\n            \"hash\": \"60c27d42fed8a75afe8b7b50f624f50eb41f3a0de1ad0bf222a3a373cb0ec2890f27913b2285ae8048238bf06bc4f173737feacc0b6b1ab53261757453be6b69\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1d4de5c427ea65332756ee1de7010850c5de05e230a5c01bd972cca7a789d37231597e0c8d1f9c67af3585a6c72daa59db0309a73cd1c38c62b26017eae7001e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-musl-x64.tar.gz\",\n            \"hash\": \"c496204bffb8c878ac22921d78d20a160edd4ce7bd6f5f4b9bafcec06e25a10e4f4a94e90d0aa7acf4c95319334245531fc93184506ad944ee5af1025c36bf73\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-x64.tar.gz\",\n            \"hash\": \"2e96fa4ee32885a4433be12aac0e10998f9e7f0fe4791f33cd31966c0e0d345d978514787a36c5f0f43c7754e9639a5d52fc96c9f44cf56c0cfc9a8ad2620dd6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-osx-arm64.pkg\",\n            \"hash\": \"94979dd1dbf983ccad903e3ce4271b00ad946078b38995bdd9fe7026ca10f64e646a750882b41145ec7cd09bda3563c39b4502f40ef996b0e6eb44c80ed3ff9d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-osx-arm64.tar.gz\",\n            \"hash\": \"6083b9f469dccf097a6a1bd4a264ab5438bce653ceceb54cfba25526845783e43e57e6b57eb6c7b4157108d9572ca62d8df2ecdbc1a0a36d9f08310b9bb3c9a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-osx-x64.pkg\",\n            \"hash\": \"9817d518832e7a4355b921c4eb24d77b3aa04c5971392783ccbe13ca3374cffc5b17d20bcbefe283f7d8ae5b36ea111469779851fd1cd4076e2e3a4ec84cab97\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-osx-x64.tar.gz\",\n            \"hash\": \"50a38d89af656ac5a3110761182c1b8b6ca15821eb4fde8d0eaebb6dfbeb4c9046a80c00004cdbdb4e5165c6cca1f2c6ef0ca5ff84fc9c32b4c298a9f620bac6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-arm64.exe\",\n            \"hash\": \"e58ba00c08d5fde710c130d6021a9602466c2377040ee422066da5650679171e6433bf30cff3fe95ee9649ed7904a4cca0a1b77ec6375a624a23781a2588a25a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-arm64.zip\",\n            \"hash\": \"689db2a61055a9f1be14d1c2d71a4b3004c932dfef5a341cff95da5b7ca161c82a07b273d647771235a091fd92aee7ee143aad57a4a6f6eca44ab14e2a7a400b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-x64.exe\",\n            \"hash\": \"c0fd35e39b79f6597c02fdb06bc7c0d4c0afd31dd5c6aaa2208c22dc3dd5eee4fc4e57d94a2059b26c881257178223181ec5d7d406b7c22c3726e568fabd8f67\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-x64.zip\",\n            \"hash\": \"dd92208e219fcff20ffd39a82ecbe1f8b9c16963db2c675b64b87207bec54d12554da17e047fc482d13c2dcbedd13758c051d22bb2b1268299d066499ac543df\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-x86.exe\",\n            \"hash\": \"b4c254fc09ecaef25befcb0c45c85b7311fc48aeb20628d4283986633dfbcf61710e8bd0a6d668e51faa3f72c54b56c0879a0c1e5d45cc836a35ddeb2610da01\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-x86.zip\",\n            \"hash\": \"afd64726ba46cdf3507cfeb268a10a70649a51f7f08121823bc236301038241706a4e8acb70c7aff70e1e14ef8e733718b087b26849aff95105423401792c694\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.403\",\n          \"version-display\": \"7.0.403\",\n          \"runtime-version\": \"7.0.13\",\n          \"vs-version\": \"17.7.6\",\n          \"vs-mac-version\": \"17.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-arm.tar.gz\",\n              \"hash\": \"ea385ec550177709da9c5b58f0e74e54781e5fb6986abf4edfddf7e2bab2e5c17bba9e594a89fa0779c1ade75cb6f5228b980a21462ecbe461d2464b0835c4e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-arm64.tar.gz\",\n              \"hash\": \"0980f3f888f1267a5dee5c916ae8d0931f0c6789f1e7334fb7b4d5ab27a1876ec014d30be8977d314e4aa7302b197dde09ed39cdc5ed84b366307148d5350deb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-musl-arm.tar.gz\",\n              \"hash\": \"60c27d42fed8a75afe8b7b50f624f50eb41f3a0de1ad0bf222a3a373cb0ec2890f27913b2285ae8048238bf06bc4f173737feacc0b6b1ab53261757453be6b69\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1d4de5c427ea65332756ee1de7010850c5de05e230a5c01bd972cca7a789d37231597e0c8d1f9c67af3585a6c72daa59db0309a73cd1c38c62b26017eae7001e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-musl-x64.tar.gz\",\n              \"hash\": \"c496204bffb8c878ac22921d78d20a160edd4ce7bd6f5f4b9bafcec06e25a10e4f4a94e90d0aa7acf4c95319334245531fc93184506ad944ee5af1025c36bf73\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-linux-x64.tar.gz\",\n              \"hash\": \"2e96fa4ee32885a4433be12aac0e10998f9e7f0fe4791f33cd31966c0e0d345d978514787a36c5f0f43c7754e9639a5d52fc96c9f44cf56c0cfc9a8ad2620dd6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-osx-arm64.pkg\",\n              \"hash\": \"94979dd1dbf983ccad903e3ce4271b00ad946078b38995bdd9fe7026ca10f64e646a750882b41145ec7cd09bda3563c39b4502f40ef996b0e6eb44c80ed3ff9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-osx-arm64.tar.gz\",\n              \"hash\": \"6083b9f469dccf097a6a1bd4a264ab5438bce653ceceb54cfba25526845783e43e57e6b57eb6c7b4157108d9572ca62d8df2ecdbc1a0a36d9f08310b9bb3c9a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-osx-x64.pkg\",\n              \"hash\": \"9817d518832e7a4355b921c4eb24d77b3aa04c5971392783ccbe13ca3374cffc5b17d20bcbefe283f7d8ae5b36ea111469779851fd1cd4076e2e3a4ec84cab97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-osx-x64.tar.gz\",\n              \"hash\": \"50a38d89af656ac5a3110761182c1b8b6ca15821eb4fde8d0eaebb6dfbeb4c9046a80c00004cdbdb4e5165c6cca1f2c6ef0ca5ff84fc9c32b4c298a9f620bac6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-arm64.exe\",\n              \"hash\": \"e58ba00c08d5fde710c130d6021a9602466c2377040ee422066da5650679171e6433bf30cff3fe95ee9649ed7904a4cca0a1b77ec6375a624a23781a2588a25a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-arm64.zip\",\n              \"hash\": \"689db2a61055a9f1be14d1c2d71a4b3004c932dfef5a341cff95da5b7ca161c82a07b273d647771235a091fd92aee7ee143aad57a4a6f6eca44ab14e2a7a400b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-x64.exe\",\n              \"hash\": \"c0fd35e39b79f6597c02fdb06bc7c0d4c0afd31dd5c6aaa2208c22dc3dd5eee4fc4e57d94a2059b26c881257178223181ec5d7d406b7c22c3726e568fabd8f67\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-x64.zip\",\n              \"hash\": \"dd92208e219fcff20ffd39a82ecbe1f8b9c16963db2c675b64b87207bec54d12554da17e047fc482d13c2dcbedd13758c051d22bb2b1268299d066499ac543df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-x86.exe\",\n              \"hash\": \"b4c254fc09ecaef25befcb0c45c85b7311fc48aeb20628d4283986633dfbcf61710e8bd0a6d668e51faa3f72c54b56c0879a0c1e5d45cc836a35ddeb2610da01\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.403/dotnet-sdk-7.0.403-win-x86.zip\",\n              \"hash\": \"afd64726ba46cdf3507cfeb268a10a70649a51f7f08121823bc236301038241706a4e8acb70c7aff70e1e14ef8e733718b087b26849aff95105423401792c694\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.310\",\n          \"version-display\": \"7.0.310\",\n          \"runtime-version\": \"7.0.13\",\n          \"vs-version\": \"17.6.9\",\n          \"vs-mac-version\": \"17.6.9\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-linux-arm.tar.gz\",\n              \"hash\": \"bd2963b5a6d7460384c83eb6d59beec751dd81658f10d47402e4173f0166fd3febbf562e2fbb82c81ffb8ec2728cee3a245adcd2a9c8e4b318dca485e93aa392\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-linux-arm64.tar.gz\",\n              \"hash\": \"b44bbc7ba3a82bd34a8b75dfe8105c8a8b6351f67dd74982aa30364559dae47aa6a31cbcf04b4cc05954cde07650583a1d1e120a0d1f69357d9c5da8b65c7987\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-linux-musl-arm.tar.gz\",\n              \"hash\": \"b713b2d1af5779d0436f14bdf46d3b468184bcf75af0f7ac3a7ab9dd118c3908e92b99fa9dd472f711312f0bd9445cd63dbd365427df08b58add7a1066030ef0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c015ee3b88b72be90907865c406b717da24198e21afbe31856e1f640343d579d2d630d52541b6cde940284e4be0cd557cb62c073f76b20a5d26b925e42e496cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-linux-musl-x64.tar.gz\",\n              \"hash\": \"090437460f090e8b6431190af719cc8ebc7799917db24efd656400303c24d17db352a4b1ac592b973141893da7bf9fcd990d28d1da9529efca3deeef72dc1dda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-linux-x64.tar.gz\",\n              \"hash\": \"942e5673300926b358a4fcf9c52b4bac31e879be0f51623788002f2c4106d7c64f3b5626988bc8649eb4ce576550bbe848efe551342dd735a22feab23be86fb3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-osx-arm64.pkg\",\n              \"hash\": \"1de60eff6bc17afbcd1b986b903705e28071a627312e9a2b29692cbce4c201bc6d51c7472ea6167fbfc6c1089c9fae41a3f5416f2d183a6e599244dce5fa1546\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-osx-arm64.tar.gz\",\n              \"hash\": \"c10e2e944a66e8162fee7988d2ea2da9b5b33ae691be638d8674a544a0e9e67b5e2f016fa237f241874c5fe0caaaf93f185f5182cac8e1834a5b13410321f24b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-osx-x64.pkg\",\n              \"hash\": \"0eceac200cfab347ed7f65ccbb608516bb30124d6634f608494a90f7b0df8353a1f314195749379cc5c5536376b6963d8ee4f524c2bf2d51806f3b90c9943bb8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-osx-x64.tar.gz\",\n              \"hash\": \"c2d2bf703ab19560558da09ce3c6663aaf77bdf550846a1f4b5631beff0f1aed4088290a2d34c613460a3fb4e63eb2960496a1704e686468afda5d461ce91e41\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-win-arm64.exe\",\n              \"hash\": \"8cc3f6ee83d8e20ad94d0efc69ca7b0eb868279ba919c4ba3178995468d71873da7aaab38a93686e1eb6edcb32ac22aef47a45cca6f8dc1eb8799d66ca98996f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-win-arm64.zip\",\n              \"hash\": \"570ececacf635a718c472ca2aa12e29c1cab4d91ee1bb47daa4d3c66557e84a0e1a8a5ec0f9610e1d930372e885a649f7a75824a8715629bfed7f57c5c104bb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-win-x64.exe\",\n              \"hash\": \"93c8ab2bc43a6d345ffb242e59508d3e8453c73cae96d895494b54a7367c2a194c0628dc35e24ada2168944ba61a4a496346fcd89e6c0846f0b8dcb377c3aa05\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-win-x64.zip\",\n              \"hash\": \"7d40feeac681e17cff9572513158879e59f64662880912de5a39f4b385ff3da796c156b0a74a1d22f664fabedaec9fab89ed1a84d641a6b6bcf049f14f75c66f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-win-x86.exe\",\n              \"hash\": \"a9676814038ad62fced8631b1c8b15220ac1b95c7a3668397e9a6c5cc487cb8343ea403002c9d0eedaeea13bc91b0f26ba62f25614a7bfb6a34f5314bde97809\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.310/dotnet-sdk-7.0.310-win-x86.zip\",\n              \"hash\": \"44870585fd093e5776c8b7527f0267b0e853c60bedb99a201a0c792d30f87cf7af3d4bdc754a53175cd320330e9ba44a97560249a3cee2c7cbdcb2b4251ec507\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.113\",\n          \"version-display\": \"7.0.113\",\n          \"runtime-version\": \"7.0.13\",\n          \"vs-version\": \"17.4.13\",\n          \"vs-mac-version\": \"17.4.13\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-linux-arm.tar.gz\",\n              \"hash\": \"358ba2329ebaf30b237fb6e215579bc94dec385535a6919e4aa9f23fbabceeea0cda98a775eade5178953cce9063b3d528375abc43b1c153c3fd16cd816b1abd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-linux-arm64.tar.gz\",\n              \"hash\": \"f7d43d1eb7178545366ca51f45b7f9e05f438083987164132184fa614c681998a32b6ffc98f16b03384255dbcd731c5d213604f934d291f9717d890b115e212f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-linux-musl-arm.tar.gz\",\n              \"hash\": \"607e9977cdecd03a4417773cec31b1cdbcc3316abd037df4d4c8df80205e3578c4ba7355cd4e010f5ec886f7e42898172fc468d2f6102af6a71d6e9de913d778\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bc09c623f0c6fec970ec7426511cab75fe3a82d78744e8559301654dc311b4d2a798d4a541d1b25cfb7e037682bb8fb38d758ab56096fbbad6440c403b8ac40d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-linux-musl-x64.tar.gz\",\n              \"hash\": \"f8ff787fe4316601c5a80e103cfc001a051d68f12b5c70c5a735241607a8c571f42d0c85002693631e20fe06d16ae94d66ec639cdcdb3318f2813d45c8042255\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-linux-x64.tar.gz\",\n              \"hash\": \"a7c84c5b8eb2c32247ea0cf19d0120faa3a03a087948c78e35dc4673e91e061bb7b858fe52a14eed98a637caab86e8d6ce4e26f08d1c780433fc0501245cafa1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-osx-arm64.pkg\",\n              \"hash\": \"8b89b599aacfaa10e3a0629cc5eee5c975ad25ea0eb0b74b8918dddbf84ddaa63b460d6df8de380c531a69a16d2ce8637fe47aad5de862f57876ed77cdc40cb0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-osx-arm64.tar.gz\",\n              \"hash\": \"e70e6009470731f7cab6248a69539f0c2bc13431e4f0fbd9528f2620a344ec95af4075deebae9a6f264150006984732d750d08279fbaf15724589becf09190a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-osx-x64.pkg\",\n              \"hash\": \"d5032688065baa6f937e1f5e3f8e3e4dfcde2631e46e9e8c4baa50bf527dd36154efbee56ccf1ea657a9ebfd9083c93f8873385562f00315fc5b5b002c95de17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-osx-x64.tar.gz\",\n              \"hash\": \"562353fd74f5a968c7d0af79873c123eea23bdb99895f2e846caceffa9aa5c0c5b765013ca48a85a81d6051ab889fa3129f8b89b7d312e477e415d8403d8861a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-win-arm64.exe\",\n              \"hash\": \"ee79eacbb16f740aa58560932a93500b91caa2e9a5a44a9f4869fdc149460ea6aa50ae8d610d1fd3cbc83984f1764ab8344e8d292e8f164fc4e10389f1196fb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-win-arm64.zip\",\n              \"hash\": \"ce16ca5418d5daa62e5a3d1d45893f05a02dd1f9409444e12693f94c239e654a13790d43cbd0879ab2b2a54eb3b0e8d7c5b52267208e3aa432443d4d30ac28a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-win-x64.exe\",\n              \"hash\": \"de48e59cf05402522a3874acec6995a1e79f4678ef94cd88c67d1fbad3dee14c0fe12e874c9dc33f06c17135a9e110f4250407cb2d2c1cb13b30dfc0ee564913\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-win-x64.zip\",\n              \"hash\": \"2eb1ed81d9b207466ffa9d607109973d41531989db7b4c61047c2cd6c3d478ee0fdac65d306a707f6e44b0e3489f8fb9fe15285eb6875e98774d904915944b0f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-win-x86.exe\",\n              \"hash\": \"5b5f27270e53426beace192966d9f210a1698f0de86f5457bbadbbe7bdb6c4e91e809bffa9e59dce84db2d848c1ca33702055b200aa4e8270c1538cc8a3e7531\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.113/dotnet-sdk-7.0.113-win-x86.zip\",\n              \"hash\": \"0eeb218cc1de3bd955fcdd3e0ed39e32ede550fe4699c4a22df7d5abfeb00ed6a7faf3f53b04b59fd84067dd177d6d460a5e967d9fcb30aeb36adc4af262927e\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.13\",\n        \"version-display\": \"7.0.13\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23293.13\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-linux-arm.tar.gz\",\n            \"hash\": \"f60ddaa4e4523f991196e334a23d5155c0967053a99406c88bf423f1e5f3e6242edc5168cc51fb9e24da3fcb5406f4d38dc8d30073bd5faed42ddac9ed06b045\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-linux-arm64.tar.gz\",\n            \"hash\": \"a091c7bc7dabf944ad2888908e8becb0b9ed6a8f3f0475c845559804bfb35d6d76fb81ecafac4d9a589b64837258304d94d5c412ef8c75e138582072081f270e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"f9b4690190a27e5ad997a6e0a50d32b4696775331dde1956737c8ada110e228e6467be94fb48d2ae31bc96afae780a1fab221629cf4734fb07cacd95a38ca6cf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fb4acdfeec1043b280e9dfeeb97a8adfd3129579b87061dbf188cb930f4878914eadf724f337bfeda645bbd1eb8bd1eec5413301d07801a3c727b41396b09c52\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"793667d9677631afe9bc1346388a44d7d4349f557bb7a3a79bed4c0c149dd26910a3dcfa145b52c188e089f95f413972d9f9350bc21017ced41303354ab06e46\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-linux-x64.tar.gz\",\n            \"hash\": \"930c83d7b553529f37b1516848f64ac5bde479bc5dff5e89edaddc4f7b552924f9b51b58367df8cadb9055b4a7220bfa5a4d39e09fb6b51f4bcacf3b82416ba3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-osx-arm64.tar.gz\",\n            \"hash\": \"6734869eaa22f163d8fed52ea3b1f11f22ceb0876337114a0b9927a96e4fb82f826b6ddea3dd7061ac02da2e13c32c9ae6c946ca5ce53007869a97c0cdae3f94\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-osx-x64.tar.gz\",\n            \"hash\": \"d635ac072df5f5cf587470c656b6a55e880eeba2f00c12cb6e239d7cbd0a52d92b094379de80ff60fea426049d96e54e095417f089890eb92630d3c07a20a67e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-win-arm64.zip\",\n            \"hash\": \"1343010449b826e957f9a06f322fb8436fcb299090e9c0288f1ef4274c337c4e4e88c71ce8fb67f293674b5a6193123e5038bccbd29ae8592c469b3e25adbe33\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-win-x64.exe\",\n            \"hash\": \"fb5784cb7aff75a26640272c1d1ba8111f915af8554d67f4ab40c5bda38265c6e119f7fb8e303994a32e6154777083c57bba0626a4fe9d703623107a4dd08f4c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-win-x64.zip\",\n            \"hash\": \"00569b7d513eca9a58337a1b4ff3afa0791ad3c8bb5d9eec03ef3e26a15dda5c471b8fc44414e3eb02bb5e4af9c0240d5cf196d32e43dc31bde5c78fb2135eeb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-win-x86.exe\",\n            \"hash\": \"8779954cd7ee7f9561f8d0f8f434279b2b91646fecb678ca5e5fac3029372f1b5a7c5aca7c18df887654fa84ce0ee75b971a4892f291c67086ab14e30dc49c21\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/aspnetcore-runtime-7.0.13-win-x86.zip\",\n            \"hash\": \"9c142da6384fcbae5641c6741640ba0208cbc7e3d78e8e47dc58836a06e93f1497946e7f2ba47a0459986c0c3439dcfaa7c6352556ebe67cf72d284e8c9eca98\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.13/dotnet-hosting-7.0.13-win.exe\",\n            \"hash\": \"a2d7817edf624e89d17b90efd04da2da613a8eb7404fc58beb40036a417fafa36ff1efbc4ea26047d50d6570e7da954749cd4bd5473dd2663c5efd2d0425ecc7\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.13\",\n        \"version-display\": \"7.0.13\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.13/windowsdesktop-runtime-7.0.13-win-arm64.exe\",\n            \"hash\": \"87fac539d227e95cc04dd9f91722da3cc996c063e35a11b1f7086157529da2a856817c49c62994f268e947d540e316becc4848a2507d27ad49d0c214ca9d257b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.13/windowsdesktop-runtime-7.0.13-win-arm64.zip\",\n            \"hash\": \"90bea85364a4e70e918fd74011e002f871434da7fe1fae755240463b41e821d07a03adafde0543ca201eb4b0f4574b75426c4d2720dbbdbc99f30453fe54d489\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.13/windowsdesktop-runtime-7.0.13-win-x64.exe\",\n            \"hash\": \"66b252ea80571d29be668511c131f03c2d4d0d99c018ad21471048c96c5d41b175443910099e8579c4356562d7ba92793e971b510e4372d709b1ef549c0cc523\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.13/windowsdesktop-runtime-7.0.13-win-x64.zip\",\n            \"hash\": \"3f8247b99cbbcf6650997f67e93e5827d23bbc1f9e16cc2c4b2e800a90617b1ea9aee8569f7a7a9f0c112a5403bec2f23d366c1c1582b4373d80d874f4fbb678\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.13/windowsdesktop-runtime-7.0.13-win-x86.exe\",\n            \"hash\": \"8dc11bb954eaeb67c67f118754872c58d30dce82f39f83fa4b4fd808c4aa4e249eb3fbe18f1ffbd4af39d8bdbb44a0a1a08232d02d4cbbba456f7e531bfbe3c7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.13/windowsdesktop-runtime-7.0.13-win-x86.zip\",\n            \"hash\": \"6c488788cfc7754ef27088ab08635bfdeaf3f10954f433d2fd5f61aeb97213e2bd441872e1d63b71b10c9b147ac2b989d9f78f20ed4728bfd18300726be5a633\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-10-10\",\n      \"release-version\": \"7.0.12\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-36435\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36435\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-38171\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-38171\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-44487\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-44487\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.12/7.0.12.md\",\n      \"runtime\": {\n        \"version\": \"7.0.12\",\n        \"version-display\": \"7.0.12\",\n        \"vs-version\": \"17.4.12, 17.6.8, 17.7.5\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-linux-arm.tar.gz\",\n            \"hash\": \"0db5653b93b3c7b2dd4a882e212d7388f6e6a9f689555801e2e0441346e3686aa95eca9fec103225bf5e78b620b5cd60d651b4a0c0ea7f9ac00228790a83a154\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-linux-arm64.tar.gz\",\n            \"hash\": \"d1afac553d13e25b2f5155dcf336375f0ba174e31b915c3425502eac98ef667c3cf631b4265f84e095407ee47508804aeb389f377e694cf5472bbee22dd2630b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"a28de7edcdb0a10f242212604ebc1946fecb3db1eff25b01b56a66efe02477af4e3870e03132288ddbc33221cb1ef13bf24d3ae7059a71d46b699ddf08f6b0b0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"62c80c4c368f4ca1ccdf3501b8f3caf4f7f4cac91214fc6186750c997c76da8425f4ad1732dab7935e0187610a70ccc78ee3d2885802cf25d71e745d1995b9e3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"012e228b5809a5823ba50f3b93823d343da51f09e32c94ef0c1389870ee535ef0fc603e4f13812c75cb5c0f1d942601e8ba3ab4c423c631982d36252eec7d3dc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-linux-x64.tar.gz\",\n            \"hash\": \"74bea25e88bd917a733a6899a3b3c9ac40c85a64f82dc0f36840714669621716afbb8fec6c3c398b1ffb522c0ed11958862cff5a4be0bf6268188cdb276bc109\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-osx-arm64.pkg\",\n            \"hash\": \"626fdfab8d74945f3babb0b971d70b88f8522e5579d7706b320936d4b655fee2b83f6b4ac0d05318f48cfb80ab7766e422e989f985f632f519699e793bec2a59\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-osx-arm64.tar.gz\",\n            \"hash\": \"1e67012c840d4d7d535558b4f05d94e80e36699c3f4e9cfcb5ef12a54e038bcd1c5d7cadb9bc4c691eaf2663e6d52806455a659637d9afe9277aa8e82e095bf2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-osx-x64.pkg\",\n            \"hash\": \"10a744f5e6df7eac2c4df4bea68a01504da35223b5298d124deadbaaf64c6ff32ba28cf99934ca538d059b2f458b60581ae4d8a06e5ef177d91fc5d796a6129e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-osx-x64.tar.gz\",\n            \"hash\": \"3cfa807b64eb345ff104f33d7120d7d973443d40aedfe5fb49c0b67adb69f743c18a6e762a8463f59ee29b4a291970e8af48f97f841a94ed220809b56258b0e0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-win-arm64.exe\",\n            \"hash\": \"f1e258c048588fdddc4141545bf44d2288ba99d798f8d24d31eb03691e73a223fda111835dafb84af7234532546792320deed5a95dafe9ec2254035a05c2c4a3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-win-arm64.zip\",\n            \"hash\": \"cb2ef37a69644c0e63edbe2dfdef335d3e8704bde81b438906b8f44e4a3a77a8dde38cabad33afecbc5549365367928e0a093e08264088f4e302eff668eb0f18\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-win-x64.exe\",\n            \"hash\": \"87b6ac2b1356a48be409c89c11a44093e124a18d8dcca8afa49e7da9dbea416b0024dc0c12fdd44b9047c3dde38979595a301d3102a4f6110132e610f468a4bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-win-x64.zip\",\n            \"hash\": \"fada96dfe5c0ff99799032b21323b0c75764df8c7991e67c0f2757a0f4d9946c68dee07831a0bda7e884713749150121d618973d14bdcc915d389799b36848bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-win-x86.exe\",\n            \"hash\": \"36f49b417d30a5901ae18fdc7ed540ea88851ef449f34460f580fedcdf0644365989ff0d421584e3a52da6eca394a1327b7c118f4b2b053b875d2064fbd8a1ad\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.12/dotnet-runtime-7.0.12-win-x86.zip\",\n            \"hash\": \"760f4483b9848c2165be30ad4623de4099529fdcbf61c4e6c1738dfe22e3d776ca7ced89e4d7485dc0337c988b1c3bf1c5757a01e97d156df4ad0cf848226244\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.402\",\n        \"version-display\": \"7.0.402\",\n        \"runtime-version\": \"7.0.12\",\n        \"vs-version\": \"17.7.5\",\n        \"vs-mac-version\": \"17.6\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-arm.tar.gz\",\n            \"hash\": \"303b228e4462b163ca7d33a774f42564940f9409e3866c35683053d002a45f690557d4f0cfc4a9c03542ac5d89919149ff688b692ebdef055456d9c63c97129f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-arm64.tar.gz\",\n            \"hash\": \"6de003fa4d2dc145262ef390737f1da6ce82839e5d8f59207ffd6d6f68b3189faa0891cd02ffa478c0a857400725256656f3f776049246b2a063fca46a9c3765\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-musl-arm.tar.gz\",\n            \"hash\": \"56a953b385a976870ec729c9e56b2ef1fed812b2dd7d156a006ddfdd6280d15eda1a7162d9d14923687ef3fa0b3edb2e5fdb00fc1cbfd61c47724079176803b7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-musl-arm64.tar.gz\",\n            \"hash\": \"695ebfc35f556973be2c209a773e539455f9ab419e4679930d6e8f848e836fab67a5db596e29d0f7104dd61dbf4843d4dd09ab43e0fc685c852109646d9d09db\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-musl-x64.tar.gz\",\n            \"hash\": \"008bfc594654fa25dcf80590c3305c72b208dcb4c78ec99220f7eeb8542f0af14bfe78c829b866de3e63c116a50c3e46a577f827ea4da6e77f427ec86e943049\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-x64.tar.gz\",\n            \"hash\": \"0c4d654bc7d440f49d14e6e3ea71e636bb37c92c1e835ec87879350f5b00d68465a05c3a2dc078252329c3953a131bc4c2bca6b1d2303ca5af14d3d88a192245\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-osx-arm64.pkg\",\n            \"hash\": \"be1e701bfc2e27a43df23ca4d7618820d273785335d128faba855e723b60348939025e74391fcd69c6ca32002c79b36e316ba2dc822e930a5d1a1275a44bf53c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-osx-arm64.tar.gz\",\n            \"hash\": \"7a690aef32d244c7fc61fa51bd5f2b733f013e4f354e73937b8b6dd2f4e08afd4bbbc5b51b3875c94fe7a0d2cfd65ff779eca23d47f012c766a96854771ea143\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-osx-x64.pkg\",\n            \"hash\": \"7749167cd34021a4001f1b4be6a9796da1d4135202aa26d35e6a786f8fcd65762b71b1e01dbc70e90fac40d6b1efeeba4b7377abdfad06d76c013a13f5834683\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-osx-x64.tar.gz\",\n            \"hash\": \"c4f3cc6037b369f2310231d391fc2f102c7abe5ddd7c048a25431785abf6905bf0f454e124819bc41760e5e1d17585e1b8078abe8c19baf21e8536db00afce8e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-arm64.exe\",\n            \"hash\": \"03ee548affb1fd7ccd62da1025ad07b73386a1e2764a31f95e258ca20b48591314d7203c608409eb1938f47d3df30cec974065419860e90d68c35854cb6644b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-arm64.zip\",\n            \"hash\": \"dc0e879f0642a00c1f78d1a36e1b4fca8413fb1d6624748c1b4692272a5cb97ecb430d55088ac3666b733aadbc2249efa712df5eb7b7b8fff155f8ea6196d214\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-x64.exe\",\n            \"hash\": \"65c2bb8ead6a7b5aee38c1001e832b55dbdf1934a19a8b93544eaebccc32784b49bb360e6fd61bcbbcabe4197f7748cc595c7dbb393e5e0feebacf13d2e241d3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-x64.zip\",\n            \"hash\": \"be3a8f7654a6fe31832c50681849faf9c309b730820fe273e4afd4833fd6559b0f41eb6dffadcbeac5a51af9bc5b0d367b98d2223933719c649d13e90b9c0721\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-x86.exe\",\n            \"hash\": \"f03f161964105128c0e454fb2cf3c53dca9505a8c7840fbdbadf85ddfd3e6c08f5d9b066e9167126828189b595e3c2292a25536b00223f07080d91108acd84af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-x86.zip\",\n            \"hash\": \"53f71676dfdacced6c82b63e33892d757f7ae597aaded8db83df7562941b66302c05eb3d4bc45fe3e57a62d0379f7a551a94a3a6befc874564332d6f3e7cc9f0\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.402\",\n          \"version-display\": \"7.0.402\",\n          \"runtime-version\": \"7.0.12\",\n          \"vs-version\": \"17.7.5\",\n          \"vs-mac-version\": \"17.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-arm.tar.gz\",\n              \"hash\": \"303b228e4462b163ca7d33a774f42564940f9409e3866c35683053d002a45f690557d4f0cfc4a9c03542ac5d89919149ff688b692ebdef055456d9c63c97129f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-arm64.tar.gz\",\n              \"hash\": \"6de003fa4d2dc145262ef390737f1da6ce82839e5d8f59207ffd6d6f68b3189faa0891cd02ffa478c0a857400725256656f3f776049246b2a063fca46a9c3765\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-musl-arm.tar.gz\",\n              \"hash\": \"56a953b385a976870ec729c9e56b2ef1fed812b2dd7d156a006ddfdd6280d15eda1a7162d9d14923687ef3fa0b3edb2e5fdb00fc1cbfd61c47724079176803b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-musl-arm64.tar.gz\",\n              \"hash\": \"695ebfc35f556973be2c209a773e539455f9ab419e4679930d6e8f848e836fab67a5db596e29d0f7104dd61dbf4843d4dd09ab43e0fc685c852109646d9d09db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-musl-x64.tar.gz\",\n              \"hash\": \"008bfc594654fa25dcf80590c3305c72b208dcb4c78ec99220f7eeb8542f0af14bfe78c829b866de3e63c116a50c3e46a577f827ea4da6e77f427ec86e943049\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-linux-x64.tar.gz\",\n              \"hash\": \"0c4d654bc7d440f49d14e6e3ea71e636bb37c92c1e835ec87879350f5b00d68465a05c3a2dc078252329c3953a131bc4c2bca6b1d2303ca5af14d3d88a192245\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-osx-arm64.pkg\",\n              \"hash\": \"be1e701bfc2e27a43df23ca4d7618820d273785335d128faba855e723b60348939025e74391fcd69c6ca32002c79b36e316ba2dc822e930a5d1a1275a44bf53c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-osx-arm64.tar.gz\",\n              \"hash\": \"7a690aef32d244c7fc61fa51bd5f2b733f013e4f354e73937b8b6dd2f4e08afd4bbbc5b51b3875c94fe7a0d2cfd65ff779eca23d47f012c766a96854771ea143\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-osx-x64.pkg\",\n              \"hash\": \"7749167cd34021a4001f1b4be6a9796da1d4135202aa26d35e6a786f8fcd65762b71b1e01dbc70e90fac40d6b1efeeba4b7377abdfad06d76c013a13f5834683\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-osx-x64.tar.gz\",\n              \"hash\": \"c4f3cc6037b369f2310231d391fc2f102c7abe5ddd7c048a25431785abf6905bf0f454e124819bc41760e5e1d17585e1b8078abe8c19baf21e8536db00afce8e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-arm64.exe\",\n              \"hash\": \"03ee548affb1fd7ccd62da1025ad07b73386a1e2764a31f95e258ca20b48591314d7203c608409eb1938f47d3df30cec974065419860e90d68c35854cb6644b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-arm64.zip\",\n              \"hash\": \"dc0e879f0642a00c1f78d1a36e1b4fca8413fb1d6624748c1b4692272a5cb97ecb430d55088ac3666b733aadbc2249efa712df5eb7b7b8fff155f8ea6196d214\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-x64.exe\",\n              \"hash\": \"65c2bb8ead6a7b5aee38c1001e832b55dbdf1934a19a8b93544eaebccc32784b49bb360e6fd61bcbbcabe4197f7748cc595c7dbb393e5e0feebacf13d2e241d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-x64.zip\",\n              \"hash\": \"be3a8f7654a6fe31832c50681849faf9c309b730820fe273e4afd4833fd6559b0f41eb6dffadcbeac5a51af9bc5b0d367b98d2223933719c649d13e90b9c0721\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-x86.exe\",\n              \"hash\": \"f03f161964105128c0e454fb2cf3c53dca9505a8c7840fbdbadf85ddfd3e6c08f5d9b066e9167126828189b595e3c2292a25536b00223f07080d91108acd84af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.402/dotnet-sdk-7.0.402-win-x86.zip\",\n              \"hash\": \"53f71676dfdacced6c82b63e33892d757f7ae597aaded8db83df7562941b66302c05eb3d4bc45fe3e57a62d0379f7a551a94a3a6befc874564332d6f3e7cc9f0\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.309\",\n          \"version-display\": \"7.0.309\",\n          \"runtime-version\": \"7.0.12\",\n          \"vs-version\": \"17.6.8\",\n          \"vs-mac-version\": \"17.6.8\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-linux-arm.tar.gz\",\n              \"hash\": \"26b7d52d3c44566cd7e19cb4095b73168352b6d5826862fca8126e1ab96701e8c311eb9181f8503fdef5013fa16ff12541f1dfb486010f2232475cbe8aa1d1e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-linux-arm64.tar.gz\",\n              \"hash\": \"3bb4dcd15d1bc32965badce7bbab4dfaf4bf7f320facb358b87800e4e29288af3b70026ad4a245fe10fc78b8171fdc716d957bca88c47316a5b9eb5147afa0f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-linux-musl-arm.tar.gz\",\n              \"hash\": \"12ab00f871caf75ef2832b79e6f640072b5a397f9fb8bed4280873a4c67fbfe1d43d709c5cf0dc7f63dbaa6bb4c334c01db1973dd1f0a577487ceae0ca6bd9d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1248727ffacbfc990a1f0bb0124f83a5a87f02fbbbf089400e2056c0c6e581478193eba65aeb873c357e2260e961c7d5a71d716d22d825a39d1f7cb3467339b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-linux-musl-x64.tar.gz\",\n              \"hash\": \"0769afc436963a67841f4c4a67ee15b66555f46e87e3f94c0b03b7c7edaeb58384fd46ef10d8453589dcfdcb41b830e8edd992f8a1051d1b59a0cadf66334295\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-linux-x64.tar.gz\",\n              \"hash\": \"3458c9e769b292ff3000551ea6f34501219cf7e4c22586585e0dae0be87b9bb62bff2a8bbd35d35abb88dd9bde4ad46860e17fc870aee1de78ca0f58edbe95ce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-osx-arm64.pkg\",\n              \"hash\": \"a6392693048f0d127df9c31dca394c94d3951021a45aa50342c25d3fe45c22e86a33690768a63cac01ed82803e4e49b678251669b11fa9c1459fb36b18651fff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-osx-arm64.tar.gz\",\n              \"hash\": \"ca350c0ae5434ed64d1e4ba68fa5ae1de6f78083f5aefec628173137013e04b21f0005afcac8d4031a390b04dc5be0623b476c8a90b36c00ec5a2d37485e245b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-osx-x64.pkg\",\n              \"hash\": \"ab44b30816ff05aaede132c7b88c0bb055ca780effaf170e37d2d744ff1fdc941106a1636b7f0078d5973cb1afc311915df928ec44dd1d7aa12520cd5326c16a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-osx-x64.tar.gz\",\n              \"hash\": \"ea3966e05e85aa79b603a4bc38cc3e7d864970e94dd53c6a96e9594d8a92c7b2d79f5ee41bf65791871a189f8caf9edb99046e19eee82952bc48cba1964fa694\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-win-arm64.exe\",\n              \"hash\": \"616cdc87bc6a9ae976c3e588d3b798487f34878e30757b9edbc4ada927a97cf009476b8f79d618026b4ade8b062faeacac01ac61bbaca552fa917ac164259896\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-win-arm64.zip\",\n              \"hash\": \"71f75431f730691ddbd6b69dc6e5812b8064b2d9e8271abae3aa3ba54535d2d6399f05234e9a909e578b1d04cd8e1b994da23c026d6cd1285ab94946ad397609\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-win-x64.exe\",\n              \"hash\": \"ef43ccfdd17dd0a047da3333cae47622a30c50275022167d07cac35db67a9d6ab86fb6831676c6cf0c8d2117460d54b3163632d0e48cba572ca4f7a7a4631e43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-win-x64.zip\",\n              \"hash\": \"0474bc54e78566cba2576b56e6a4fe529092c7b62cbe6a313a6a74879a824b937b25e18721f88e689d41c269a0bd4e16629551b37680d8134e8e662b7ae11d70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-win-x86.exe\",\n              \"hash\": \"648c4f7ffe101675fca2276026c1bf2b04489046e3bc65c5e64f187857315131edb4dfb6cc937d7f6fa8d44a6c260fff7552d7db343ba3f91dfed2e9b2788e80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.309/dotnet-sdk-7.0.309-win-x86.zip\",\n              \"hash\": \"fe6651be8a0e25f8ff1f6c3366162a03b52cf1902e814a5272b5eee7cfd5a58b07147150728618617c37d06d359de1235fb4a90fbfc729507f0241150d0a3d7b\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.112\",\n          \"version-display\": \"7.0.112\",\n          \"runtime-version\": \"7.0.12\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-linux-arm.tar.gz\",\n              \"hash\": \"f291d861b454438b2da3d0538b4e48b236cea54f4d51b6bf148d70a1f6696c84402c352316009abbc5bff015b6e46ec66fdddb83ab33159459f15425bd0b0814\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-linux-arm64.tar.gz\",\n              \"hash\": \"572ed16b4c2a2cb2e6159005c6852b66e33bc595c147fc723c5047a0d9d3e86b1d5cc034ed68d7ebc596afa6c307666e6caca865f03c97ae8825e45fe798b0c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-linux-musl-arm.tar.gz\",\n              \"hash\": \"5dcb3f3ae16ad08f6649511af09ef2d39b4f00bd124fcb463127af04c3b125c533b66bb027c41cdf3ba3ced6df4920a93f972685e6b8cc9a8dd5499c534311ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-linux-musl-arm64.tar.gz\",\n              \"hash\": \"13239603b4d171ddb8e4178789571b49502fce386f61d0b443f8c2b2a5b95e2d50524c22cb7ee24cf91aae1b9ea1f17ce71ee41d679e324e6e54cb8fb922e979\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-linux-musl-x64.tar.gz\",\n              \"hash\": \"0a9ec5ddcfdad16b01b85e908d048910027365e18b0049c936ac9463c37ab073c634f9dd76c644334782d2d349e136cd9adab3dc7b499af10a64b1adf7b76184\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-linux-x64.tar.gz\",\n              \"hash\": \"6100bc9cb4eb64620aee0d242e8d715b9fedc8da4e190de4e5c783ff63e638011d533901bf528db422a6210cb38c38c53d76d76df6c7b8906808ae50bbec1cc9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-osx-arm64.pkg\",\n              \"hash\": \"e50af20f552f1b82fee1a36bd48be91f381d6171387b024410ed146063c23a31d8d22766a877365c7af4a4d708f7251b70a485b80c5ba5d30dfbe695f58c9ac1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-osx-arm64.tar.gz\",\n              \"hash\": \"a4965fce604dd58436616825b38c708db5a3463500ed738a9f0a0048e12857ac45de2a133f969cf0ea976a3e266f0836bc39c623ce17d1e2f7c9bcb2a27bf632\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-osx-x64.pkg\",\n              \"hash\": \"379b3ddb2bc1e48ed5756e805e1e92e457ff29aff96ce504a8a11194f3b790afa54f9c0196e3a96110aedd8658d9189065ee4600d56864f40877af70a2a35e21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-osx-x64.tar.gz\",\n              \"hash\": \"89e11435edd13e401e4f394c804787ef47ca030f0bd7dd5ea59cdf28af5dc90bd025a50b58fb6b81ae3b9fe0d3ae381b22caccbabe5fe82daa5d56d1bfa3d05a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-win-arm64.exe\",\n              \"hash\": \"01becb13a70466b0b9f454f6ef661bec60c24f0d22ccb82971557dc9adabb038135ac53862235950e83325bfb6d4fdcb298c366fdf7f7a03208d10d6244a038f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-win-arm64.zip\",\n              \"hash\": \"f73a21e485735e42226c50ee93db4c0a6ea768a3fc0eca0dc17413c23f5a6c02b4615ac339a0b57bca20ecda1430389033c26d2325ba7dd47e7e4335342508d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-win-x64.exe\",\n              \"hash\": \"50c46de170af9644872f88540998767ec6d858db474e1b3c0335c38a914ca466d579c048666ec0a1a1a9109669ebee3cf6c65feb83109eddf479cbde6815ccf4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-win-x64.zip\",\n              \"hash\": \"55ddac573911484b377e3a3aafbe42efab866e7a065f50bcff9c7dcb9dad743522853b5739972cbca303312a808354d4f4f5c1c09792eac85fc8e679a9533170\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-win-x86.exe\",\n              \"hash\": \"8e8ae769b5931ce25495ae8eb65b13126e1b71406491cf4292318a413b752a04d8029eca20a95fe803f191f96d1b6706f16023902ce792635053ca64358206a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.112/dotnet-sdk-7.0.112-win-x86.zip\",\n              \"hash\": \"0a5f13aad0eeb42cfd150bb37c591416959e3b4c4290d9e12a2ac9824899a19673cdbc235bcf669084642e965426142acd47657195f1f0a485c4ba52fbcb213e\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.12\",\n        \"version-display\": \"7.0.12\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23273.12\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-linux-arm.tar.gz\",\n            \"hash\": \"a622165880cf678653fda29960a5dab090216bd6df18976c4c83212880ea5ece34981348101c96c566c611917f1df0e083c90950110a7fa20935a1c92e61fa74\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-linux-arm64.tar.gz\",\n            \"hash\": \"b302afe999bbb33a846222d52b5aa90c2538bd4ff6eabd431e3f50bebf7f501c3793ca2d4cea1c8f0fedef87fa05d045af63d947653e14c59fa33e23d297012d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"b7375b66b2a42ef99cc5290d697f94facae780f9ef08ee98b6ddafffd400ca6ce0b9cb92e34aac4acbeb70326752e842958115fe8a573889a2f120a7c47facc5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fa061e5fc279d95d600452651845d6297c9bae6776a9ed6562a681b272ea8bc33850ed005cce3cd901bbb940b2d012fea082aa83204e1684faa90b71b274bc6b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"a20921e3b534357938f93f368ef0de6eb5204208ece423697f28952176352b246dec43b41c95251b00769cf6a54f87bdcff48704f20a147759aacb3e6b58de3c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-linux-x64.tar.gz\",\n            \"hash\": \"4d5ece3f1c0c74f872f42a98ebd7e448ae2ed09e9fec5f29a5ae2781ff16dc8486064eb43a3aa6e3da5cf2c52745f93319c55cf3de883f82cf8adfcd6a9746d3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-osx-arm64.tar.gz\",\n            \"hash\": \"f64e91e968858ec60219761635d2b4062926dc7050c206619a972244c5fb8ae016ec1b48e0a29e61b13e61ccaf7ef1ee27ef7ed4ba96b771a42d43f32b6965ae\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-osx-x64.tar.gz\",\n            \"hash\": \"ae1e0adddbd6afea3a0f6974433021e3b49e32ad1c56900b1cfde8f656fb645b3ab966cf42ce95b1829fac05e9556cfd4ad1cadb5dc5d1925c157b54fe8c5b95\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-win-arm64.zip\",\n            \"hash\": \"853c7b074e9dafbf708eda41b4d2a80f1a17c02e4973216b42c1ba4f95e2bf0325923d76925bb7b26108e8cbb2d98dfc56aac47b45c22db059b8d673392a4e67\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-win-x64.exe\",\n            \"hash\": \"8b77e3d3084e5b5904a8e18b6294bec1a8ee9a3ca52713a9237ee411737bca7bd890d2616a92fc4d55fdd4be2097ab05b0e7e88f48cb36699826ede5e16f7899\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-win-x64.zip\",\n            \"hash\": \"26922d51f80d95c618271e0aca0efc5344dfa684107ddbc84a43ca16b80c92a4c0057754f09a9a5e3cd5ca0c62905638de96aafd3edea5dbed3f7e664f2aa79a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-win-x86.exe\",\n            \"hash\": \"7ee68298dfa31c65968a9d89d407d73581b1262bbc568c02eadcc85b40e4cadf2a1526152a1f35e91fa978feaa269895b3f50445f20ef680feec5fd9cdbebaf8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/aspnetcore-runtime-7.0.12-win-x86.zip\",\n            \"hash\": \"284b72d45b536e09e6f791819e5f2fea2ba3cb6d32d5b36c2302eb3fd0b37ade1c26efb4e19970097638517a6460d2d69444a4da5d0b2f2305eb2b44b1fa63e8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.12/dotnet-hosting-7.0.12-win.exe\",\n            \"hash\": \"0f5a13d51118f5b2dcca4750f1658bc8c3c704c76d78b29144ae71f37176a0670d31cac32e385fe2e30f2f4255aff88e152d1d223ea9e7d76f45bb327fd7fa63\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.12\",\n        \"version-display\": \"7.0.12\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.12/windowsdesktop-runtime-7.0.12-win-arm64.exe\",\n            \"hash\": \"1623a026b9f247dd503c05fafcd8ce05d7a1fd6109eaae0d0aed00b579729fc7084df23f5a60dd300d5ba23aef9c50b4ebb0871b3e26f682da406f2f72afc65f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.12/windowsdesktop-runtime-7.0.12-win-arm64.zip\",\n            \"hash\": \"ba0250f917b35063f3501f95ae622948c4b3a8f3bc4f1500865470a0077af13d72bd1af9afb673b07bd343a0f80748a2afe721cc7b74539c5cb326f45ae03a33\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.12/windowsdesktop-runtime-7.0.12-win-x64.exe\",\n            \"hash\": \"a366e858eaca7330358ef5d7a7efada45cc64284e36ba9f7722fa1a1644b1b34b343e700ce718ef67d08c7abf718eff7aefb4d5909ca7b5f63b4056b132c83de\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.12/windowsdesktop-runtime-7.0.12-win-x64.zip\",\n            \"hash\": \"7b2d8920fb126afd9203d9eb6278f5569dd092f70a5b9297e0f7b1b67ef68f00d5b65c89f1dfb38ee463d07a6ffa7f3110a893a8c18363adb6c31ba2c771aa9d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.12/windowsdesktop-runtime-7.0.12-win-x86.exe\",\n            \"hash\": \"ce33129b2c6efe948b1eed73d127e3a5b0bd0af727474c2b8971b9075e37137cd985e58d2e47b9b1f0152a527eac98545e6cdb40054a34a6e3286601069ce259\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.12/windowsdesktop-runtime-7.0.12-win-x86.zip\",\n            \"hash\": \"0bf82c196cdc870ff2bafa03026673c597207a1b04be3d87a89eb15aed94515ac8a11d7a9ee732d881ea8311ff1ba8594bafa9c0edd7c0280ec1316b3b99f143\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-09-12\",\n      \"release-version\": \"7.0.11\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-36799\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36799\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36796\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36796\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36792\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36792\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36794\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36794\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36793\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36793\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.11/7.0.11.md\",\n      \"runtime\": {\n        \"version\": \"7.0.11\",\n        \"version-display\": \"7.0.11\",\n        \"vs-version\": \"17.4.11, 17.6.7, 17.7.4\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-linux-arm.tar.gz\",\n            \"hash\": \"07b0a21161487ce18bcd6e31b30a57675c1a9c213217ea137679171b81a0a049a86976a82b82dd29172a41e972b90a7485414b256fc53c1c357afb629b17ba09\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-linux-arm64.tar.gz\",\n            \"hash\": \"567b39c4b8ff278349fa76522351e6f399eadd9a86189150a312fa7a4d365c60ccad8a06564ff4b8acaaeb907222d6b154b711e324989f7f6c234dc5a85ea0da\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"3492572481482b4c92f526a7b169d81e4438075bea0cfcee2f6896cd0667ddd1e60772ef7e44c4a3ea7cab6d5af621c89a3aac211d62610bdebc4dbe54f23a70\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7bdffd39fd163217eed64e13757b0746ef4073de371e74d6931b6d5e7ada42a576adfe61ef451ea316278ab05d746f136fdb2bdcdd2fdfb6e204045345d97548\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"ad733f881301f471c9d5e8a882b3af3ef82914d422d824fb2acc85ecdac9a4278c6adae66864fc12dce8f0d51c02e3c22b56a519b3b25100a566a8d676c94a8d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-linux-x64.tar.gz\",\n            \"hash\": \"110db17f1bc9e5577488e7f5425c6c639851af68c8d7dd17b0616469755c27d3c8a78ab01aaab13ed4849c676230bfeef9113f1dc4cda34c5be7aa1d199e7d57\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-osx-arm64.pkg\",\n            \"hash\": \"800af08e03637d638c9206e0271199b803f6d377dca269d1b0bfd15bbdb041af59f6eca3b57ffc05b92c20235a505b2638abdc45ab8c818e99e0a8502e500af3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-osx-arm64.tar.gz\",\n            \"hash\": \"546ec5050ebc70ed17252d401cc43c9bd628fbaa40a6a764a4ca567fb37d0db14a6c0e28a190bdd74254e886aff9fed542830224f0dbaea32792235386648ea8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-osx-x64.pkg\",\n            \"hash\": \"aa0f6795fb750549bc3a96e114981de3e640e7eae0b4d69811d54bc61d4de0c755c34b43d497eace18b41ac283eec4385b92fb05e3b1fc0655c24fe18445dc91\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-osx-x64.tar.gz\",\n            \"hash\": \"5e714641c1693abe2662ee71f6aae7ddb35a8a3869939f024f63666d7e90fdf2e5e25af5d7e53c81fab293706640c391ce6be4f737df3fe2a0d769bdf443178c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-win-arm64.exe\",\n            \"hash\": \"88cf9bac3b3471b0bf81300e9248bc510ee876d1d126c594c65596728ad8c6cbb1c8daf0581d8d75b8db76c1972ec10644fb629cfa7a2dd2f72f83fcc721566a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-win-arm64.zip\",\n            \"hash\": \"a2caa1db58b3a89d3e940babdee77f3fa70e5ec018047b493e0f6d959b7827a075277e5e08cd270ae4c7b1679fac1804df66287b014e8a95eb1757d9b9d70f84\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-win-x64.exe\",\n            \"hash\": \"f6252ec8426a306e5a266a9e585420a34b1ac7037a14c4259068157bca99e2e66da66dc393d25f67b339805bc2bb658cdc2564e3787e9f5c8d98da16137dde03\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-win-x64.zip\",\n            \"hash\": \"f2e7a35698f53a77d851f9241a87a5639ca28e6b76008c0745949d0d58864ceeef407917294145a191d31629edd2add4e9acb116ea0e4ef71d516c6d13838496\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-win-x86.exe\",\n            \"hash\": \"7e296e5008eb937480a9d2b465f56aa178f862bb9406e90fdcc96c71fe25a02d803cd1689be13843f9f0fd621e55de84eff6d8a58d7fc7fd0a4a18f0867ae1a5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.11/dotnet-runtime-7.0.11-win-x86.zip\",\n            \"hash\": \"2573467dc75dfaf221c00f4e226304bf502da96976bfa650e3a2447fca52a729d60e7532d3686be7f0ed95be837e8ddd84e6929fc681e0747753197d51408ab9\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.401\",\n        \"version-display\": \"7.0.401\",\n        \"runtime-version\": \"7.0.11\",\n        \"vs-version\": \"17.7.4\",\n        \"vs-mac-version\": \"17.6\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-arm.tar.gz\",\n            \"hash\": \"baa82f57a16996b1e9a73261e23b74181c251399a4ecb09ceb95bcfcc8e3bf89e31ff26b0e0a8e87cb77406ad097719e8e392b684b2e00cdb81f2ba6f5134f1f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-arm64.tar.gz\",\n            \"hash\": \"7c6ba2047998c906353f8e8d7fa73589867f46cbc2d4ece6cc7ee4ca3402b6a18717089b98002c7d15e16ca6fd5b11e42037b5fb0e25aff39075d67d8be49e25\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-musl-arm.tar.gz\",\n            \"hash\": \"a15e482abe9acf9b094f306edd5b6c84cc7e46c1da5496dd589471d5758304da99408d2c6510da99ad790a4593995ef09ac157a58a844201da23d6736736ffd8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4c8e0ba9e6c4e0ff71c563a6a25d470c47d11270e7b166b8c2f1a41337dead0b5765fda17a9a332ba55ff3faaa7aadfa39142cb1e6d32d20c6b826ef521125e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-musl-x64.tar.gz\",\n            \"hash\": \"77a33605b815a50e2b79b110c1617f69668c7e802919ea954ac45aad4208750436c6fe0d71aad367a610846633a8da56e3f1f4f82460f801eb3b9437bf2051a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-x64.tar.gz\",\n            \"hash\": \"2544f58c7409b1fd8fe2c7f600f6d2b6a1929318071f16789bd6abf6deea00bd496dd6ba7f2573bbf17c891c4f56a372a073e57712acfd3e80ea3eb1b3f9c3d0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-osx-arm64.pkg\",\n            \"hash\": \"ccba2a8293efdb8552dca5a27b4cd591841a2040afcad756f1bdbfa5487f7e0fdbb54593919f5b792929c9a3f003bbdce2bd0116dd2d25047b4526049e8fa982\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-osx-arm64.tar.gz\",\n            \"hash\": \"64878c33a80a13eeff58304832b8a00bdea7da088d8683903c4adbf9f6aaab4ea9bd55f5148c76518526d483ee43ab8a76f07afd60da5fc8081456f0448ac3ed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-osx-x64.pkg\",\n            \"hash\": \"f31982359e39a5109e941801360f36f103a8b65f02b5422afad183a2fcd0357dd6641f80ce42767996c676e1441b002e3330a5b7fbd9b5b46b365929eda19482\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-osx-x64.tar.gz\",\n            \"hash\": \"7c0ffdc756e13606982a58f21e8fe6fb4a0cfe0210ffba925e81f70b0266715f17d2dd9efeac72c23d552f099c173b04c1c31d07a050151ffc65578ba2d922aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-arm64.exe\",\n            \"hash\": \"fddd47dbbdb20a71f54bca9fd4a03264fadf88140d6112768f146ef549ccc2d5362224248ac1021a40269e95abb618b2b42b556cb546a1fbc4e4fa56d60d14ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-arm64.zip\",\n            \"hash\": \"8fd90956274f0e91873c345b6afbe2d35bd38cd2971cbf34468078f10666956b34824705ae6694dfdc61189c88ab69c8d5648012749d6b6fb161d0730983a907\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-x64.exe\",\n            \"hash\": \"40b764d12fa2734629a0b9ce727f96772267e0cbb99dd5cc5a40647338d7c3cb4a8a8828e4c78460e3cebd12bd14bfd908e0df0e0fbae0ffb6c29488ffb7bb87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-x64.zip\",\n            \"hash\": \"02a4ecc05d0b9dfa0c9e32f8a3d288f329e7338b2430fcbc1276ae356f9d8e14920f91382f3f141842bf1e6e6cd331e532b301edc71c26de9d9e5ad2371afbe0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-x86.exe\",\n            \"hash\": \"dfe44fa9cc26732b046c2031429652a6ab4233c39ddf6a01b07799e108564bdec8ef2c3a10a118759a841cfe021213f7e370dcc3786cc8d7b2906cbae420df01\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-x86.zip\",\n            \"hash\": \"775b85cd39864162fc8d592bbfcdae0553d78f1d7813e7229c7cf74c63f24b0cd8ba9a1a4c5a25d3dc265730e1f2123385dcdbcc2af4433a8b3aaa3dc6273b9d\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.401\",\n          \"version-display\": \"7.0.401\",\n          \"runtime-version\": \"7.0.11\",\n          \"vs-version\": \"17.7.4\",\n          \"vs-mac-version\": \"17.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-arm.tar.gz\",\n              \"hash\": \"baa82f57a16996b1e9a73261e23b74181c251399a4ecb09ceb95bcfcc8e3bf89e31ff26b0e0a8e87cb77406ad097719e8e392b684b2e00cdb81f2ba6f5134f1f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-arm64.tar.gz\",\n              \"hash\": \"7c6ba2047998c906353f8e8d7fa73589867f46cbc2d4ece6cc7ee4ca3402b6a18717089b98002c7d15e16ca6fd5b11e42037b5fb0e25aff39075d67d8be49e25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-musl-arm.tar.gz\",\n              \"hash\": \"a15e482abe9acf9b094f306edd5b6c84cc7e46c1da5496dd589471d5758304da99408d2c6510da99ad790a4593995ef09ac157a58a844201da23d6736736ffd8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4c8e0ba9e6c4e0ff71c563a6a25d470c47d11270e7b166b8c2f1a41337dead0b5765fda17a9a332ba55ff3faaa7aadfa39142cb1e6d32d20c6b826ef521125e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-musl-x64.tar.gz\",\n              \"hash\": \"77a33605b815a50e2b79b110c1617f69668c7e802919ea954ac45aad4208750436c6fe0d71aad367a610846633a8da56e3f1f4f82460f801eb3b9437bf2051a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-x64.tar.gz\",\n              \"hash\": \"2544f58c7409b1fd8fe2c7f600f6d2b6a1929318071f16789bd6abf6deea00bd496dd6ba7f2573bbf17c891c4f56a372a073e57712acfd3e80ea3eb1b3f9c3d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-osx-arm64.pkg\",\n              \"hash\": \"ccba2a8293efdb8552dca5a27b4cd591841a2040afcad756f1bdbfa5487f7e0fdbb54593919f5b792929c9a3f003bbdce2bd0116dd2d25047b4526049e8fa982\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-osx-arm64.tar.gz\",\n              \"hash\": \"64878c33a80a13eeff58304832b8a00bdea7da088d8683903c4adbf9f6aaab4ea9bd55f5148c76518526d483ee43ab8a76f07afd60da5fc8081456f0448ac3ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-osx-x64.pkg\",\n              \"hash\": \"f31982359e39a5109e941801360f36f103a8b65f02b5422afad183a2fcd0357dd6641f80ce42767996c676e1441b002e3330a5b7fbd9b5b46b365929eda19482\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-osx-x64.tar.gz\",\n              \"hash\": \"7c0ffdc756e13606982a58f21e8fe6fb4a0cfe0210ffba925e81f70b0266715f17d2dd9efeac72c23d552f099c173b04c1c31d07a050151ffc65578ba2d922aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-arm64.exe\",\n              \"hash\": \"fddd47dbbdb20a71f54bca9fd4a03264fadf88140d6112768f146ef549ccc2d5362224248ac1021a40269e95abb618b2b42b556cb546a1fbc4e4fa56d60d14ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-arm64.zip\",\n              \"hash\": \"8fd90956274f0e91873c345b6afbe2d35bd38cd2971cbf34468078f10666956b34824705ae6694dfdc61189c88ab69c8d5648012749d6b6fb161d0730983a907\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-x64.exe\",\n              \"hash\": \"40b764d12fa2734629a0b9ce727f96772267e0cbb99dd5cc5a40647338d7c3cb4a8a8828e4c78460e3cebd12bd14bfd908e0df0e0fbae0ffb6c29488ffb7bb87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-x64.zip\",\n              \"hash\": \"02a4ecc05d0b9dfa0c9e32f8a3d288f329e7338b2430fcbc1276ae356f9d8e14920f91382f3f141842bf1e6e6cd331e532b301edc71c26de9d9e5ad2371afbe0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-x86.exe\",\n              \"hash\": \"dfe44fa9cc26732b046c2031429652a6ab4233c39ddf6a01b07799e108564bdec8ef2c3a10a118759a841cfe021213f7e370dcc3786cc8d7b2906cbae420df01\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-win-x86.zip\",\n              \"hash\": \"775b85cd39864162fc8d592bbfcdae0553d78f1d7813e7229c7cf74c63f24b0cd8ba9a1a4c5a25d3dc265730e1f2123385dcdbcc2af4433a8b3aaa3dc6273b9d\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.308\",\n          \"version-display\": \"7.0.308\",\n          \"runtime-version\": \"7.0.11\",\n          \"vs-version\": \"17.6.7\",\n          \"vs-mac-version\": \"17.6.7\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-linux-arm.tar.gz\",\n              \"hash\": \"9947afdf16b15bf389517bc6a32886c92fe690928cf7a0a23583ad4ffe81c0cd1a8b71e7e82ca1f30eafaa80c70f04ee3061999d463ffd4c3731885f00c77ed0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-linux-arm64.tar.gz\",\n              \"hash\": \"59bb23aaa77aedad2018283579158554d37a8095286b09224f087b958eda8c313c19c0b03bcfeb4df77b78feb26e7718a6bf3da1c4bc5028ed6436db2fe25423\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-linux-musl-arm.tar.gz\",\n              \"hash\": \"7e0a53be6312b946b9a70c6c0a5da4055b4e54883774132849834f571cbb47c7381747c501ce66ed6b9a891a162daf79530f8a1c0d5cf31f971537e4e47e9171\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-linux-musl-arm64.tar.gz\",\n              \"hash\": \"2447e472cd62b6a73758aebbae42284122ef19e5b26adca6a444a4537aa02453e4b357ec98c2289b905cef037ea8d4dd0fbaa75bd18b58804af248de24039ede\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-linux-musl-x64.tar.gz\",\n              \"hash\": \"6364da520133c4a43f3a45a397ddd14ba36b727fe5dc0388f7295550ff8108bb2267c912fd04a216b007077a78ffeca5d464779d22d16ac9df1c1513db7102ef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-linux-x64.tar.gz\",\n              \"hash\": \"a2d42e9b379b79df881452d9472fc9237fda68794188eec7cc475aa384c53a6d831d33f62cfba138555279896205b898b85a558aaf1cc77a41b1ad444130f764\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-osx-arm64.pkg\",\n              \"hash\": \"a958a2b968c6fd5ef3970bc7c79d7cc2046d2c38521db61b3029c72248eee4df3f571adc288c6d563e7c06cb280a4367d33e8dbfa34d1301027d7c2f7aff4724\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-osx-arm64.tar.gz\",\n              \"hash\": \"5732e8083f35358348ce9adf8a6387b335ddad0c393e347a0b25a3200661c50c628cb505395b38405037df33afb90b7bed8da0fda5f863ad82e3b36a3d0b4d88\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-osx-x64.pkg\",\n              \"hash\": \"1d7a0ed6ca7be1ec69b622d79aade0891fed47d5e15a069a710b099069b9556f3eee9ef63e6c766b0ff922e96292cbdd7db1dd141457d8b273018641b9d6c8dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-osx-x64.tar.gz\",\n              \"hash\": \"7e736bc61820deb2da8a676dce349accf109ab488b062bc9645345316e89815101fcd4c3ce7206337872139068d9cf8bcbd400880149e7a1d50817bf0c9054d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-win-arm64.exe\",\n              \"hash\": \"463dfccb77bbdc84383b610f0fd951a81d9961bf0c6591941d9b90576db34368fcc123e2441da7384d2ea72204e08bf068daf093b3700af6f70d212d1d0fd4ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-win-arm64.zip\",\n              \"hash\": \"6087673ca7f7a2175407ba3698673284a5cea24212ee2ce4ce992cdf0622911ba6461f6572da56c4cf76a0098f4196d54006aed4226adcfc55323c9193f3d315\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-win-x64.exe\",\n              \"hash\": \"4640059f3dc8ded2ec572191b86250e8259e43c785d8b61816179650362d578529e2db73951b40e514fc1e54e9fffaa028109ca5bbc1725a961b28b1eb5eb881\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-win-x64.zip\",\n              \"hash\": \"da5aa8a87291d3bc0a11bed92d14ed64aca5b3918f31271f93f02b1d595e2ad54d905e7d68a6619c90386a89dfc43853ac714c57c6eded9940368b6f7d8af371\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-win-x86.exe\",\n              \"hash\": \"c8456b12109329c300508fdc964d562f5bdcc924a99d66359e1628fabd1d681eedcdc3ff71e5f8f7a41f00f2d5ed53567e5f71bfa4b400b1b515b4d3f80d1bae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.308/dotnet-sdk-7.0.308-win-x86.zip\",\n              \"hash\": \"de6b0bdde2bba9cb1bf58e44c61f87457615f919e526c83e621b8d4c558a10716a0d61624a5a2c70b1bbda33eff133324f8b78766b9e965cc0de8b5f7a135ad3\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.111\",\n          \"version-display\": \"7.0.111\",\n          \"runtime-version\": \"7.0.11\",\n          \"vs-version\": \"17.4.11\",\n          \"vs-mac-version\": \"17.4.11\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-linux-arm.tar.gz\",\n              \"hash\": \"bf178b33e37d3c8149f4673802808eebbfd5d52efcc2db533e9fdea677abcebd134daeb4a449383926e2425362bc48dccff5969453341c4b84d2dc656c10fcab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-linux-arm64.tar.gz\",\n              \"hash\": \"a95d8864eceb4dad9c8b0644a2e48538cc600a3e298a18d42eca07d63c9f94672854209f53866d6c89426446e36ab23894efc23941b88bd283f0e3e8cd70623f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-linux-musl-arm.tar.gz\",\n              \"hash\": \"bb78f317573e4949fe5faf583717682f2acd6c76a0aa4dc0e31f03c01d0b2d80c6f19faff971b697b4bb62964f3d28b82b756fa2954b992f57672ad9cd7fe77b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-linux-musl-arm64.tar.gz\",\n              \"hash\": \"85f146ba72291f410ccbd9616265357c83738eaeef6fec2b0b50c6d44f9b3dde2b4a683f7278d96358d498796784b07534a283250a260bd0ec19e4c8ad0e843c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-linux-musl-x64.tar.gz\",\n              \"hash\": \"3b704a88178aa6f38437128b1b2946b65e46a996473ebe09864d67faa0670008e255a0fc2582677bd84800b2991a63fe2f42a038b3d3578889f9333f3efb495e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-linux-x64.tar.gz\",\n              \"hash\": \"4df3b2eb9ce4bacac65651ba5673b73f32379e4c431c47688efeb16ecb2d02f6166e78e5c443be1abaf793444335944182037861c6d64df616929305783422e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-osx-arm64.pkg\",\n              \"hash\": \"385914aa4ec82722b7076c5074632a8517a5337ac16d62fda19b78acac628dc2f2d5cce650e5b716df7cdc77372ace14cd05d6d52c68d4d1a1865eb8a645c8b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-osx-arm64.tar.gz\",\n              \"hash\": \"bb997b7ec7e6303e0a033c4abca1b39ed418ef57ecac3ca2381166c51536b580eab82612a3d906eb2811a239892c4234247985d117432aa0a0782e1fdafdd853\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-osx-x64.pkg\",\n              \"hash\": \"65e4f2269e40010ae597a857a2ac4b98008facbb81ba157533848378b421b1607cb974a70895eb8d1107604141cda402d2f560c1e5eabb709b4d67dfb020ad1f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-osx-x64.tar.gz\",\n              \"hash\": \"46098090192637b5efa997168c3d71bb4faee3361f90c508ae54c7a876aaf6e57ab414cb54365fd5e8b7c3d10b9ddbd58aecfdb56cf5d6b8eb93dc69a4ab5900\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-win-arm64.exe\",\n              \"hash\": \"0e302e6e006172012f121796951f00b171056a5d37ceee693790fbb2c33dff053b30aa3c2ce2eb95b12202bb6be957eb4d8d1c8f11a0403932982ba91b3e978f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-win-arm64.zip\",\n              \"hash\": \"493ddba38919d732d352cf94048e9214ee915cd08ecc12a3f9a4518c573483be864dcdf0608ec4f3794ee73ca928a8e328779ef6269f9af6d084797c363df054\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-win-x64.exe\",\n              \"hash\": \"36a0bfa8c2968c07df3b433a42d2b477194c9e80ab7e85f60bf4e8388e26c46eddaa3435f9cc52a01ec0be1a038f16c76b33c5e96447ea0ff110ca96a7ab347b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-win-x64.zip\",\n              \"hash\": \"e21ad1bcb62b2c2808882feea05a2d3c25f0d24cb5eaab8270b392834f0a5339e9d2ac3088c48bd6446119d848f145414c1958848528d6a5c2958651de796d90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-win-x86.exe\",\n              \"hash\": \"f005c38de1cd9689dacb5e3c7578eaa52d066dde915da606d4a6e41ed3224694b91abe3189242602080343c7f0b9d59e440e5a7d6777cfcef1730686bea00d0a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.111/dotnet-sdk-7.0.111-win-x86.zip\",\n              \"hash\": \"6478d17157c71faadc6cbb2c9be35f872c72c9412081c864ce8b998473b855ee84ae16dcf252787be5f166b7c662116e8674a4a540eb4ff648721f56dc39b595\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.11\",\n        \"version-display\": \"7.0.11\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23237.11\"\n        ],\n        \"vs-version\": \"17.4.11\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-linux-arm.tar.gz\",\n            \"hash\": \"9a948ae3a772b4f282f57a34897ae1724eb6ca3b57f1875dece7dcee278b6213126f63edf95a7aaa89546b030df16c9bf4f54fc948b64d60910d2460cc0570fe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-linux-arm64.tar.gz\",\n            \"hash\": \"e8864d261487d3077b0637e710d9348209dd7fe19a0cdd60edde2e43d238f1e534b9485282230c8b1cea0faf4bff1887f07dc919dbeb9ea7f97d4b26b9c7aa91\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"290c6b14973782362a869005b38e91afc1dcac8ab6171ef8387f4f4b9dbcaea68ed1afd89bb27f1b5b5d46d6d7f5f5d849eed432bf06e7f30583982d4c91422f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dcedebd27948b37f727ac362e3241b96cfd1ac5ebf9bd7ca9e2cd8edf82d291e23850345c98b4ad6d4c0ffafd4081239a219da8c23aa847ef653e9da58be495b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"9bef0fa7f492fd2d596db310a938953874bcc12210a963d8734d92820deb9b130cbfc78f86993b8f32d681d518724dd194a0e223719e4ecec9aa8b140ddfed5f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-linux-x64.tar.gz\",\n            \"hash\": \"a5691a53a1be91751bea5c1f6faa2e93d19f5be61dc5a4953a6d6ce33359f78126873022fa1a25e2694dd85ef9671b566bf8b6c5f399f1eb017ae26833867019\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-osx-arm64.tar.gz\",\n            \"hash\": \"799460d18543a4e3fcb0b0ed824bbc248afd9374bf74142d12a65d422aa8eb939914c870f3d575ad121d035c19adcf4423815a34e24969b9eda15a2048de8b68\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-osx-x64.tar.gz\",\n            \"hash\": \"c0925ba2ff686438a40e5b61b660dca48103b37ad42f30828a1bf20ac2f9750a0f2643beb533eef877519f56757f3d4c50ccc5c1c172527883981b0d7974677f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-win-arm64.zip\",\n            \"hash\": \"9b280abf8f852613e77022b3f216c34dfcf25ba959e5575b0ff971edf7f8e409d14709add46378a0127f365e83e65a112b03f6c1ccb4e13decaf1020a0436e39\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-win-x64.exe\",\n            \"hash\": \"79e8546a73d63dac0da751f620ce556b4c1b8b8d271110cca8c585bc4387970a1014f8bddb8660cbc53c41757894fee325d1ef4f1a1c45b93212365387832f9e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-win-x64.zip\",\n            \"hash\": \"d26ca3d67343460a8559dd0a60acfecb820ce6e17f269ac3c8f0b56b12246046e8e60cdfa36f4465aac3abd72a6df22800f4485a668f3224e0695c5999823405\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-win-x86.exe\",\n            \"hash\": \"39ca9aeb7230cf173bcf0fac614cec33883562b537458f116f26c861a034d17e3f1907d527c7c9c5e899dabefdec1dd339629b110e32cdc00f585e42d8cdcada\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/aspnetcore-runtime-7.0.11-win-x86.zip\",\n            \"hash\": \"6783e3cde33e30e491a83ba6abaa13ad805a33bc54a935f018fe34e0da67ef692102d38cc65443c7b034cc7ab930955cf008fdf77fd1b74c2d54d32f629ceee4\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.11/dotnet-hosting-7.0.11-win.exe\",\n            \"hash\": \"1f1efa26e39da2331f27f8376cde3441ef4f602ca72e72e1c4398a0e2ca7b67c9587caf80611502ef0e21c48479716bb84d3f09b517d093d04933985b9bd79ee\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.11\",\n        \"version-display\": \"7.0.11\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.11/windowsdesktop-runtime-7.0.11-win-arm64.exe\",\n            \"hash\": \"62b752f01a1eb8c7b6408aeca63199092315a0b15659641b51d42a600715aec0d2ec0e405dd645fa7cdeda5fb784539d6d4ab2c0cbf2dbbfe1d82ed87640d7a1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.11/windowsdesktop-runtime-7.0.11-win-arm64.zip\",\n            \"hash\": \"60dda6d8f3d77b5fb1954ce5ee717955a381c1b3f243282d469b206e7a6a6888eac859d5b8aa4aa1004968660b73be17328758a0021f8442de2336155c935939\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.11/windowsdesktop-runtime-7.0.11-win-x64.exe\",\n            \"hash\": \"c5f042dadd878e2cbd1833a73141e64fba2fae10ba5770daac8faf24bb56d7bc61cae8f7664c37fa822db71d0bf05b97733126db396e97e9ceeced596b9a63c1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.11/windowsdesktop-runtime-7.0.11-win-x64.zip\",\n            \"hash\": \"699021b3da74282ec1d5cb931fe897841df898fd4ac1127ee72df63f7277ec48112e3f70839f48c3d9b37a3764efbbb92b54cb4739eb4d04f07ff2e03fee2b80\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.11/windowsdesktop-runtime-7.0.11-win-x86.exe\",\n            \"hash\": \"b7583409ea718d60ac81e8d28ab7511850d0b43e9bb9ea8488dd473b1ca904afe99d1ab298b1c5ab5271d8584baed65653196d3caf0ad9737e70f2eccbb9be4c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.11/windowsdesktop-runtime-7.0.11-win-x86.zip\",\n            \"hash\": \"e3dc9fe3135dd9ba1101cad3c34804b520b48618493aeaf8206634321a16df1f2a47b0de35db4534935d0b39aeccb1a6f429827488d9ac33971deb2484e61a07\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-08-08\",\n      \"release-version\": \"7.0.10\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-35390\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-35390\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-35391\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-35391\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-38178\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-38178\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-38180\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-38180\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.10/7.0.10.md\",\n      \"runtime\": {\n        \"version\": \"7.0.10\",\n        \"version-display\": \"7.0.10\",\n        \"vs-version\": \"17.6.6, 17.4.10, 17.7.0\",\n        \"vs-mac-version\": \"17.7.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-linux-arm.tar.gz\",\n            \"hash\": \"15538acaa6799c37d1caf493bd5d94e567c70e6e17dd0b538f4a7ad795d060960181fa8a82c553466cb0ee58b21f4021246395f2b4a27a6dc6d6fe0dfbf53c74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-linux-arm64.tar.gz\",\n            \"hash\": \"e90b68b272d5db7cf8665bf052fb0300d50a69818d70675442dc891654d140f7f84527b849860589bf152de1d00aa55dc15ee32f5678d46ea0069210fd002b03\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"c2280801d61774ac7243d6507aca9134d6757b49513523bca8f31b0f068793c66b4eed6a352607e63e73d5cc6fff26ac05157ec5d25160ac2269c1ecef6bdad1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"660033371ee3a5ae06d64c366a1e1811c19da22eb8e23d67b5fd1c16dda2e52c9650d8c1c9bab6c289a76f89cc61ae97490c01de2f4e908de9e9b82777e97ef0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"9d494a4748298c494609112d695439c114a42480f58d5b4cadd78a889ecb1b00ff10898cd7c3455589ac367d5a877bdc03621f74901355f063139778ae044c8b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-linux-x64.tar.gz\",\n            \"hash\": \"f15b6bf0ef0ce48901880bd89a5fa4b3ae6f6614ab416b23451567844448f2510cf5beeeef6c2ac33400ea013cda7b6d2a4477e7aa0f36461b94741161424c3e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-osx-arm64.pkg\",\n            \"hash\": \"62d7dab434c30739ca816cd2260f0992fd1397d624f21a15f27ae4c99b653c5e8cc847ccbaea2613bba794999afe73231f18205f6a7b4c7ac512ed4d364440db\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-osx-arm64.tar.gz\",\n            \"hash\": \"f578e00d5bd144c51e5d71adbd8e0ecc97f7e8ea06263c585785b41ffbb590537f5a18b63a78e45e90e798cd66fa45285059226b1904f4c2d4e2ea40c2c71bbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-osx-x64.pkg\",\n            \"hash\": \"cf93450b4096161673c081e14a094bde50fc006914d1c3ec7472e9ebd5bcb285eab1b8e667f6de6e762a3b50ad5164ca01510551152de6240d625d93cc170076\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-osx-x64.tar.gz\",\n            \"hash\": \"6b992fbbc673d5005f2412839c632f772f6576c9ff95d44afaca478a79597601b306e1f1c496836549474a2c35238943ba27eef5749b1a2bbdd8f36553ad145d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-win-arm64.exe\",\n            \"hash\": \"a39b20ed0c4041f789f46477498b10b88daa8d7502eff13e1a17caf105a8be14783211409c7d5fbc8f83e9042a539f14d0a3a2827995e19b47527877a30c3ea2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-win-arm64.zip\",\n            \"hash\": \"a108bf420f691bc1c0bcf1c3ce99f19883fbcb02a0b65531c23e5b97e0808b78ffe3338a2978e313336e1fd3997a00968af1fdefd991520208263e62cef21fb3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-win-x64.exe\",\n            \"hash\": \"7b86e1da72c54682b1ad49f64dfc84268c82cbfdc6f21742e57ba24a49adbf6b6aaa31652d6af3cacb600db93b8654c36ee8f82ccc867925af764bc882524b49\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-win-x64.zip\",\n            \"hash\": \"87de9b7b10767c6630b4afff5e5972892bbeeba3e214b8bdda8a1f945db5be88342ed0b33cba26e0108a78b44b2489a69a22e7ffafb7fc6f6fc57a7bcc5fd25b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-win-x86.exe\",\n            \"hash\": \"656b980b93c64785758a4cf0109611655a7ef1114aa0cac6b2fdb1f04237b1b4bfe7f99f8336566400729f8c932d597972243b6c54664c21b710293ecbdfd7b1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.10/dotnet-runtime-7.0.10-win-x86.zip\",\n            \"hash\": \"8c0ca0ce75d8581d0641b6dd3ab5cb84da13ddefb8d9fd807fe843e266272b7624dfbcfdc584cbf74452ead92c719d872c6e781789bb33cbf73aca77ecb8f28f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.400\",\n        \"version-display\": \"7.0.400\",\n        \"runtime-version\": \"7.0.10\",\n        \"vs-version\": \"17.7.0\",\n        \"vs-mac-version\": \"17.6\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-arm.tar.gz\",\n            \"hash\": \"680641bb807483831fae57c07b635b710be10c1a2791fc98d371cf7417c2f78f187f7542d15177482237ada5a4c874b35318fd0a0f66f0e42bd531048092c1b9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-arm64.tar.gz\",\n            \"hash\": \"474879abcf40d4a06d54e02997a3fb93dd10c8d5f0dfd5acbf7e1a6f493a6d3421e426431d512b482c62cda92d7cda4eddd8bab80f923d0d2da583edaa8905e8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-musl-arm.tar.gz\",\n            \"hash\": \"1e940b24713ce885c9a3a8cf1f47e1debbb2966c4bc7890eacf6eaf86d0aaff975dd64638892138038dc839a2329633e5836e91318c0413ed8b388959e42e962\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c6d7884ec430b8f5e447abc6f9c3bcc1fb97d612fc5526ae50ae62b6244767b9a3eaee136d88702865316dbf199159221328907c2573cfc723aa4e20d5076c52\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-musl-x64.tar.gz\",\n            \"hash\": \"984ecd6b66fa5b1665e9ae4f949bf4f487434a2a3176324cc023ed86634714c26c6da73b8b17f29d63515f3f51ed4b75059f1f0936accfcbde693674073f3c8a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-x64.tar.gz\",\n            \"hash\": \"4cfeedb8e99ffd423da7a99159ee3f31535fd142711941b8206542acb6be26638fbd9a184a5d904084ffdbd8362c83b6b2acf9d193b2cd38bf7f061443439e3c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-osx-arm64.pkg\",\n            \"hash\": \"a05c80fd9df614dd5377ae55732653a147e8db0bf263d05148bdea67141e2bce6fe3be7b662fd215b6480ee1887eae32da4de2c824adff7301a743adab022ba2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-osx-arm64.tar.gz\",\n            \"hash\": \"134f764680336481a67ded13af8f9ce9e89e29937c7998d8e6a3695593dd1246b8d9407649f125032a3057c138b9739aef3bf8e3acdf0220224417c2036bf159\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-osx-x64.pkg\",\n            \"hash\": \"e49df7432d9e76656f3d600ff1b97fa4afdacf034ba9451a4e8f71621db621f2b38d86bf6132036cc1a7aa3e10a71d9b1632050444766edd8905c81ef96d827f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-osx-x64.tar.gz\",\n            \"hash\": \"e705c7466c9aa0c1203e0795ced23c6b794285ef60c8f7e1d199a09e596c20180901c2ec9c24483afa6302afb46a6b87ce18533283e2223a2161776f25421f61\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-arm64.exe\",\n            \"hash\": \"872223cb83a82339942a81ee5f35ccfa7e359b4f71490f3b6b01bb4c85506ce4ccd5c8fcabd3d79637db5ffd7bfc5df509dcc8e41c85e2327ef23c33077420ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-arm64.zip\",\n            \"hash\": \"ab5e650d013664a104e9af401ab11bac552c4fbde75e1c2f42c59a66f701486d9dc5aae632ee4d6fb49900d4a0ee6062b9f87f597eb65f8c221584c58358c22a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-x64.exe\",\n            \"hash\": \"d8a8b063845b4ad4a1ac2c5a18de5fd478acfc021b2aaffdf59435684bfcb5b0ccd35c52139bd972b80e3f6314f3c2b74c2cc7228e223ed406df5e5369df35fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-x64.zip\",\n            \"hash\": \"a8d73ecf7c17ae8bc7a7cd3ec7c290fe3c3b67e4456a13b8356aaaafbcfef166ebcdd4106a42ce513fbce2b208bc9dd97dbd63cf6328c64b828776bfcd9b8775\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-x86.exe\",\n            \"hash\": \"596552bb1de7bcdfe979a5beaefc4393da948f7631aa6b225855f1828119324ab0da2b353bec3316290ec729e6a384e03b2234fe54f19e1e8df7e9727aa4dd2a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-x86.zip\",\n            \"hash\": \"11ce461b792aa1b79d02eee0355ca2b3cb1b5f4476eb09b0142feb52ee862105e5dcc001f81b97d9fe8f21e9427c5c906affa1192d97576c6185436b7d160f47\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.400\",\n          \"version-display\": \"7.0.400\",\n          \"runtime-version\": \"7.0.10\",\n          \"vs-version\": \"17.7.0\",\n          \"vs-mac-version\": \"17.7.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.7)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-arm.tar.gz\",\n              \"hash\": \"680641bb807483831fae57c07b635b710be10c1a2791fc98d371cf7417c2f78f187f7542d15177482237ada5a4c874b35318fd0a0f66f0e42bd531048092c1b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-arm64.tar.gz\",\n              \"hash\": \"474879abcf40d4a06d54e02997a3fb93dd10c8d5f0dfd5acbf7e1a6f493a6d3421e426431d512b482c62cda92d7cda4eddd8bab80f923d0d2da583edaa8905e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-musl-arm.tar.gz\",\n              \"hash\": \"1e940b24713ce885c9a3a8cf1f47e1debbb2966c4bc7890eacf6eaf86d0aaff975dd64638892138038dc839a2329633e5836e91318c0413ed8b388959e42e962\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c6d7884ec430b8f5e447abc6f9c3bcc1fb97d612fc5526ae50ae62b6244767b9a3eaee136d88702865316dbf199159221328907c2573cfc723aa4e20d5076c52\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-musl-x64.tar.gz\",\n              \"hash\": \"984ecd6b66fa5b1665e9ae4f949bf4f487434a2a3176324cc023ed86634714c26c6da73b8b17f29d63515f3f51ed4b75059f1f0936accfcbde693674073f3c8a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-linux-x64.tar.gz\",\n              \"hash\": \"4cfeedb8e99ffd423da7a99159ee3f31535fd142711941b8206542acb6be26638fbd9a184a5d904084ffdbd8362c83b6b2acf9d193b2cd38bf7f061443439e3c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-osx-arm64.pkg\",\n              \"hash\": \"a05c80fd9df614dd5377ae55732653a147e8db0bf263d05148bdea67141e2bce6fe3be7b662fd215b6480ee1887eae32da4de2c824adff7301a743adab022ba2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-osx-arm64.tar.gz\",\n              \"hash\": \"134f764680336481a67ded13af8f9ce9e89e29937c7998d8e6a3695593dd1246b8d9407649f125032a3057c138b9739aef3bf8e3acdf0220224417c2036bf159\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-osx-x64.pkg\",\n              \"hash\": \"e49df7432d9e76656f3d600ff1b97fa4afdacf034ba9451a4e8f71621db621f2b38d86bf6132036cc1a7aa3e10a71d9b1632050444766edd8905c81ef96d827f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-osx-x64.tar.gz\",\n              \"hash\": \"e705c7466c9aa0c1203e0795ced23c6b794285ef60c8f7e1d199a09e596c20180901c2ec9c24483afa6302afb46a6b87ce18533283e2223a2161776f25421f61\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-arm64.exe\",\n              \"hash\": \"872223cb83a82339942a81ee5f35ccfa7e359b4f71490f3b6b01bb4c85506ce4ccd5c8fcabd3d79637db5ffd7bfc5df509dcc8e41c85e2327ef23c33077420ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-arm64.zip\",\n              \"hash\": \"ab5e650d013664a104e9af401ab11bac552c4fbde75e1c2f42c59a66f701486d9dc5aae632ee4d6fb49900d4a0ee6062b9f87f597eb65f8c221584c58358c22a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-x64.exe\",\n              \"hash\": \"d8a8b063845b4ad4a1ac2c5a18de5fd478acfc021b2aaffdf59435684bfcb5b0ccd35c52139bd972b80e3f6314f3c2b74c2cc7228e223ed406df5e5369df35fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-x64.zip\",\n              \"hash\": \"a8d73ecf7c17ae8bc7a7cd3ec7c290fe3c3b67e4456a13b8356aaaafbcfef166ebcdd4106a42ce513fbce2b208bc9dd97dbd63cf6328c64b828776bfcd9b8775\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-x86.exe\",\n              \"hash\": \"596552bb1de7bcdfe979a5beaefc4393da948f7631aa6b225855f1828119324ab0da2b353bec3316290ec729e6a384e03b2234fe54f19e1e8df7e9727aa4dd2a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.400/dotnet-sdk-7.0.400-win-x86.zip\",\n              \"hash\": \"11ce461b792aa1b79d02eee0355ca2b3cb1b5f4476eb09b0142feb52ee862105e5dcc001f81b97d9fe8f21e9427c5c906affa1192d97576c6185436b7d160f47\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.307\",\n          \"version-display\": \"7.0.307\",\n          \"runtime-version\": \"7.0.10\",\n          \"vs-version\": \"17.6.6\",\n          \"vs-mac-version\": \"17.6.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-linux-arm.tar.gz\",\n              \"hash\": \"08ecaac7de6c8cc8b588a1d4777ad141b6aa17a16900b15b6893d9477a7ee49d079619506011ed55d2d04a7740f22b912e123159be1b252bc84922a0e1294ea2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-linux-arm64.tar.gz\",\n              \"hash\": \"6ae2f89515a7c9fbaadd10a4637f9d593151f2a212b33998a36608f2333845a985eba6eeebc95f5ea76263b5328d577ea49316b8940bb123321e795d813de11a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-linux-musl-arm.tar.gz\",\n              \"hash\": \"b5e5f81e75b89e2dec673d72ee415eb91ab1b3be1ed1b217aef3d06d2b9474a2b1791953a1d8487079984707ccd54d634e9f345d235746530e66f95ac42d61ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f8bb4089e805f298762315670b4167ed71b575aa89bea13c73879555588dac7876e65a28d5dda069db16cc0843cab389f2023ac87c6700db93a17a3446da60ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-linux-musl-x64.tar.gz\",\n              \"hash\": \"685f0cbfbb3ab221fdbb63110f1868cf7ece65aa97dc02b9d52c41566c0d363c01fffdf1678247221384de39af4bb4f4b627831b346e8b326046cc253ab65841\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-linux-x64.tar.gz\",\n              \"hash\": \"32a69c698bc88a70b2e840cac6a3ffb627b234f503fd646b1b78873d7ff1dddac62f13dc828c26475ed22a98ca1b0148bdc6d4eaddf4cd3baa7a6e51fe8d33fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-osx-arm64.pkg\",\n              \"hash\": \"165c9fbee18e7b0f1113b88127966065b961c9ea7a0613045e2858a079b1f8ba9272ed4aaa6bc5ff1847cddd1d0669fb3f52ad0725484bc75ae9cb06b8f53ad2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-osx-arm64.tar.gz\",\n              \"hash\": \"9c0b715951cc40e4de1b6b8d6a5e7696e748d9886a3baf707d1ed189325923c61defb53b3cbe9a57b8b4ff883a0c9ce8ee1524301f1d67911a42710a01f54f99\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-osx-x64.pkg\",\n              \"hash\": \"d1bc472d26615d40e4c136c6c0a6c8cab95c10e48dc86c5a345837c644a65cdf958af37a7bd6b25782a07a0b9264b94e5eb7f3ac20a38e0b97afdd3bb494caaf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-osx-x64.tar.gz\",\n              \"hash\": \"818c6af40731d31abc234eaeab1c4ca411a81f36d3cf5932f0b2347a04fc3804519008c49d5cd981e89c9d5b91cf79a3df652f2c04e92d1c7abedfeb24d1fd10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-win-arm64.exe\",\n              \"hash\": \"746e17240c0c314ca03e205f795317222379bbf9606aa8e897fc728651b9e5c3defe5cf3d4fd7035faeab58e3033468e49e01acaffe58886f208bd407aff9a86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-win-arm64.zip\",\n              \"hash\": \"a03da88a675efae9836839e3c8a67f6288d644156221c5fdc934d0ff59ce5753fc79600e8211d4a465343c64426fc494a1ade00d4b52e49b2cf423824bb40da0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-win-x64.exe\",\n              \"hash\": \"cd3c1b7d45f51453535071597a69ffce6498afbd9534c82df46539ff8d367c947fd18ada47e565a9f8327bdc67aaf6d71a6f4f19a8aaef3da5c0023f64f0c6bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-win-x64.zip\",\n              \"hash\": \"967c7abdd3b10868309f730562bb6be8a1c9c21d313788aedcfe0f0ef0834bb878e000644b9d02a136fffa60771160a46022510a67389e85e8b743f5921a16b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-win-x86.exe\",\n              \"hash\": \"a3ca518a65cd182411cb3bf09eb582e746ff526f4ee4071b4ac8adefc04cd0f895bab59e94825cd2e16c66fa83c818b11434b2edace6b54c4048f1d748cc3e66\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.307/dotnet-sdk-7.0.307-win-x86.zip\",\n              \"hash\": \"4e02fad42a9ef19594b391329d0f41954ca77026e3ca23f7950f784250bc6f94cc0ddde063e4113f25621b3abb023408d20739e4301765a39c33e9dd74996fad\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.110\",\n          \"version-display\": \"7.0.110\",\n          \"runtime-version\": \"7.0.10\",\n          \"vs-version\": \"17.4.10\",\n          \"vs-mac-version\": \"17.4.10\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-linux-arm.tar.gz\",\n              \"hash\": \"b3d61fbf7c7e219e3f407e3c957bc51afbd5c1948e802cb60410ec07c576ff7bf65542b3d83d4c80a9de19516a830d61d2bc6e175614aec9a07c5343c8a6e485\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-linux-arm64.tar.gz\",\n              \"hash\": \"97464f22c259cb5bea07a9fd1e542cbd4e4f455b03e4f5bb3a32258cfb5bc6e8edec4088f90766ca816e272907684700ea6bd626fd28b71a74bb3b00399b6740\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-linux-musl-arm.tar.gz\",\n              \"hash\": \"b66db32c8eb60a2cf63faae8e2c8b092a372b63103cdc7402e98953158454c4eeb892fca021be433beddcff7915346928bc72bb7020be56be194ce2dc30a22de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d576a49f0171e9fddd3482e3c8ce0c7a47dee3de646742798e1519a318cbabf70dbcc22474e5d51b91c95acc16272d1003cd86cf09bc23f20dfb5fbc7ff7261b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-linux-musl-x64.tar.gz\",\n              \"hash\": \"41e0a93ff911f4c60556e8809ef96b852c0698a5c4ade9fbe73641b9b3d523fe2c9142d1452d87136bda4074c75436ad97020ac1ffec40f2f41ad989b910feb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-linux-x64.tar.gz\",\n              \"hash\": \"8931c7f0b8ade8c45069c4ccb52c0609517839df2e2601e84e06706ecd77b55fba5fd553e7c01e5809b281030112c4cc7e64fddea778434b3b85303c5473fab7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-osx-arm64.pkg\",\n              \"hash\": \"20da608270fb2e5bbf713b49a7d3a3b858fcc0fb0e5a6b4c5cc87912fbdcd0bd2c4664294d3243b3dcfd75e77edef9f74f0e7f4edce0ffaf3f3e9d4512261bf7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-osx-arm64.tar.gz\",\n              \"hash\": \"f25e639c0131ca4b223a3a175e17efbe4e9c4d99ae781c277d22ccfb30773968eb03bcbefb648f53cbb55e522663df5a23c80223b2094bb806e16229b885c80c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-osx-x64.pkg\",\n              \"hash\": \"e98674050e84d061e12138c3a4ebf3740e16b67a5101020fee603688e824e197205f60fd3222c905f4d297c0426910be587abda359f9adc1e0be64ba2868c7d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-osx-x64.tar.gz\",\n              \"hash\": \"019cb4da2171ed5152e680eab13c284ae2b71d83b69a822f7aeae1d1b585984ae14a9199df80a60bf92c0733e76eca022c040845ed0b3bace5585b9237dacb0a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-win-arm64.exe\",\n              \"hash\": \"a47aa8d25aae14f3a1f793f21dd286a4efa9bcf73dc9dd0e78cca17d6fd57915ed51eab995355b05a744ee61ed65e23b9f7b5b25482082dcb1ffe08c546630fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-win-arm64.zip\",\n              \"hash\": \"5b09a01345b8e424adf70cab7c70bbec19cefc8d35d80b8a715176e6215335bc647cc30c17f5dedb9a07f625acc5610c27a516179551954c0ad6da2ccf1fec3f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-win-x64.exe\",\n              \"hash\": \"9b972f68a8f65e0b8b03045b7a3d4349bc65e633d07b5ff051d93fb59a48c280e158d0d8202ad89b320e8ea9ab1faff16cc4cc768c9963c1a54b6c0f89b40152\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-win-x64.zip\",\n              \"hash\": \"773b9125f24c4d6258454737946551365507aa6dd1404eb9c1d417ddf3ae0b1a2ad1ade4d81d5c60502dfdac6543c75ab18671de20fe16d61fd9a060e4e4f352\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-win-x86.exe\",\n              \"hash\": \"539b799d71f3b50c616a23b60fb5156d344afbf8d203751185aa812d4a7685bf2ff4f6c02e0dfb15ef554b02f7d274b72e0232022063eb9016fbc0ebe2fd8e97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.110/dotnet-sdk-7.0.110-win-x86.zip\",\n              \"hash\": \"9da6099755426afdaec719657dd0b8b1479f8f25e4430ad3baa02a42a2d3f6e50ec131ad96771210ff807d90348c08ceb08a5df1e87a5dab65bc157d4ffc953b\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.10\",\n        \"version-display\": \"7.0.10\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23196.10\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-linux-arm.tar.gz\",\n            \"hash\": \"024354ba1a278d38ac273eac470dbc4562e00351fc675913599cbfcbf853243f8bc1e0a0de7df1a53da087ff836760ab1964009e9c7447fc28a8cf9493eb7e24\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-linux-arm64.tar.gz\",\n            \"hash\": \"83d3fc657328f127ea8881844dda2f91fa03f2157f5c76acda64cd091e430fa7d812b3984b803ac624b171f18a5eab3c7b5791a02baa68eddcaf7498709f982d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"99e4c07da60e6a5cae3bf1e5cd1b877563906fc97c030e3472a8e7e5040cec04ef66ca55a994b5bab78a1da0f00068e877d95bebb0c4b916bf1592f29c978223\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"52c87fcab1445b3afed26449cbe67244a7658c9b576d35f28d00763229dd8709699864cc9696dc0d9726e149a5a1ba1cc0485510decf51fd2cfc6afd4c6ff4e1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"9c4811ea4515f4c6650adc398272305861c76cf2a6e27f5966a4a8e1e042d6a2a7c2d36c71c51935768e7aca86e6536c92f2931f9c15af3526cfd6a15d6a0664\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-linux-x64.tar.gz\",\n            \"hash\": \"580fdda88824bde6b2d5c09eb009fef64e89705a8aa096dc71338a549969842dff8d9f6d4bb4651e60b38e44ed0910ec18982a062b471ace18c2e22348de11ab\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-osx-arm64.tar.gz\",\n            \"hash\": \"95c987c38b80b1083016ff360c957ac4cbc2aad406f87095f7350704de8b9a23ae060e551166c396cadeb54f39f176d5a1bbf77704edaf0c0a308d87ca29b838\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-osx-x64.tar.gz\",\n            \"hash\": \"1f1fbfb0851d62538aa6feacb5c38c14289e7b2d19be62c0e240da6d3c9336f3223eaa2f3e64559e6d8f599a33d9f8dd3d138998386ee9532854139b3275812a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-win-arm64.zip\",\n            \"hash\": \"c8de1aa66029ef1738f8a98f7aaaf46d86764294dfb365c4da086040a7f7827a3c67e1202b5f5f53e4ed32406313b86a344ef6d02bffef843bbcc64cb198ed0c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-win-x64.exe\",\n            \"hash\": \"05ae0b5950b5a63f416c871e1cc7effcf847057661d2a35295f401f95da21a7be245e699ec61bb3d2aa7438b723581cff4cab3795c6f0ab916a1fe2da2fb5455\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-win-x64.zip\",\n            \"hash\": \"681b70c3adfc9c550b562ee1159a57fd59220f34777f47413b6cc77383a3ed2da8e1062be0f8b65143b8429eaee812570c116abc9c07a8cccb02d582c1a6cbc0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-win-x86.exe\",\n            \"hash\": \"bee0c5e9010f6615becf66eb0761e8c08a31c4496806818c12e821209129843235386df3a30d3f150e76df79e800b2cc7e062ec39ecf7c206aa9f5d27ee206cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/aspnetcore-runtime-7.0.10-win-x86.zip\",\n            \"hash\": \"3a9c8c4b482cffd7b34db30dd64087a3e94fb59483df7485ff7437ec2d8790929e21eb3c112f644478e87ecc90e7069f264baa6c81c732f42eb5aae8497ccdb4\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.10/dotnet-hosting-7.0.10-win.exe\",\n            \"hash\": \"cd52c9d45e63458ce1e84282b2d9b1432ced7ecfdbe1b3d57b3f0791d20c2ecfcc7ffb8da0916722cea4cce55cb5dea8f34bff489f7a04c14c104a974ff72379\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.10\",\n        \"version-display\": \"7.0.10\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.10/windowsdesktop-runtime-7.0.10-win-arm64.exe\",\n            \"hash\": \"2bf42eba06f715aa265fcd80c0cbee2017b55d50bbedf0a1c1b5146c0d7d58f4ec66b6234391453f064c62b55cafe8385dcac9097fd9307401e6fd8a92f2ca90\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.10/windowsdesktop-runtime-7.0.10-win-arm64.zip\",\n            \"hash\": \"62a92558901e64465a3a3395622034f5ac7c822e11a66fe35319182543211472969adb49ae7bdc8e5f132837f6d378e8f742082176d35e1a00f9098c8b9fe750\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.10/windowsdesktop-runtime-7.0.10-win-x64.exe\",\n            \"hash\": \"e69fc0f0577dd2c255257521b11cbc5507847d2a092bacf6a7fa3b4b0493390f709fa3cae785dcb7afb271ceb83b804196578f4a6931f9a3f635cae114bb53ec\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.10/windowsdesktop-runtime-7.0.10-win-x64.zip\",\n            \"hash\": \"0985afc156844925e8946992c2d04ece6153bbe3314dae34417a3fce8f40c329f72212fa903b4f676864699a2c6dde486bdac27473b16907af504bddbdbb4b13\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.10/windowsdesktop-runtime-7.0.10-win-x86.exe\",\n            \"hash\": \"6a3dd2540b4766187925ad01c25337bd697856f9d8078fc902fff3c61961420d6832bc5e4d2691c284815b4a323e7c0dd619d5b4b954e54fd13bbbed29a8cc7c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.10/windowsdesktop-runtime-7.0.10-win-x86.zip\",\n            \"hash\": \"adde1c6690e15a57dc028d6e699b7c1806be705d0e04f97d294bcc17ee74a45e5eef4aee09b501936620170041e02487aafe66fbaeecbb2c9f63fdcde1cb0cc9\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-07-11\",\n      \"release-version\": \"7.0.9\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-33127\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33127\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-33170\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33170\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.9/7.0.9.md\",\n      \"runtime\": {\n        \"version\": \"7.0.9\",\n        \"version-display\": \"7.0.9\",\n        \"vs-version\": \"17.6.5, 17.4.9\",\n        \"vs-mac-version\": \"17.4.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-linux-arm.tar.gz\",\n            \"hash\": \"8ab88266e0b1cbd399c3ec552ce5b5a270f771bb27a154ed1560422f58709160543b6d3e4a4c0bd89736b9457e552648f82063d06cbbc1a047c13d0c5e843767\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-linux-arm64.tar.gz\",\n            \"hash\": \"271396af3adf881a4c5c8c28a812f9a0a30e11497bb0c9cec12bee4d726ed9151b2d35eb9146b5938611ab60ccc249d5ce5c870f721f791d19a3b08545dbfa97\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"538b36f61dff0d5c36f141e12017dd8187982ca45dee78885787f08a0888f1e277b8cd9546a4a3da4d729b0dbe536bac397f14cd5e253e54026ccbaec4a4e57d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5f0b772d43abcac4529e0349478c79bec830880607d93d94529c20a3dd49646ab181e2c780976919a195d5e3b1806d4260ba72b2aa03d3afcca5ac595b46e88a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"6b2a8a6c8a59feb2e349dd9e988dfd2ed25967e5b54230d393a509f1f6d919a8432791402deb853e25beaa6d5a89e6a179efb06c36ff90a7063f685b3d20f050\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-linux-x64.tar.gz\",\n            \"hash\": \"09552e5ae6ac014dadf17545ff0a30ab32921075a31fb33e7be148c13078e30d097f592ffa1b8d306563aaa3f6302e40c5c0ba815c1473bbd5d72e3bef55d91e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-osx-arm64.pkg\",\n            \"hash\": \"c26522938e0f75f8531c6fdee51d01bce5bbf52b887411496d62dd16b8146acf5dc19d8b0e96747c6b38b8aafb68ed663fe4f1b5462a48c53b603388583af28a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-osx-arm64.tar.gz\",\n            \"hash\": \"1aae7726b89c0398f29bc49fe9cc4c2c3f27f1114d5ab140c998fe74b13caa3eed05cf5ae28eb389f37de2023b35c3bb864be64a2e596bde673e27ce749c53a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-osx-x64.pkg\",\n            \"hash\": \"318deb264be371f32f9c2273a6f57651e0221a7effb326def37829a07c0e534b46dab1c4679d9e246ea0f3e98a663af751dd1e4461cb9db2e65c136692f8271d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-osx-x64.tar.gz\",\n            \"hash\": \"104e724bcec68fd77e8f07b71ed364cbcb40394c9ca0d8ef52e1eaab867b579f06ed7b0b203a50bad3df45634d52b6be60829d87a48c1800467f242879f8884e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-win-arm64.exe\",\n            \"hash\": \"4282448eccd10678e4b60b913cf0d665a37646d2edf970b18e992ed9a852166dbddf31572cee0b7915852c7d82125667884ab48bf2511a2b10704aee35f0a89f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-win-arm64.zip\",\n            \"hash\": \"f63efbb22e0d305c57b1bb97f1fc6592ac68247ba2fdc07147c8895b65007901e12159ce344d8cbb9ee2ab4e142c6496aaef41f6621117a94b7f5a99e3566985\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-win-x64.exe\",\n            \"hash\": \"45a30ac913a47a121a4b77acc1c93ce4f340fd1630f4dd4c897709f5a1f522f18a5144cf7afe912343a9b9e8833fa8e3c26b94d65369df8bef8432d87ddcd717\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-win-x64.zip\",\n            \"hash\": \"4ff0392ffa71411b65cf583d0e0d4380500d0b164852fd036ba756e15443de87f21c0d256c2cb44a11ca6385b5f18f7c5625bf78f63f3ceacf4fc95eedc04996\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-win-x86.exe\",\n            \"hash\": \"1f26a2362d51e6359a3c43955d1b713e106d09ec94535518339db5b784f31067681cdcd3787af1071fba5e485ae9a6641c1a5af05f31ca24f1bf0665ce11e55a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.9/dotnet-runtime-7.0.9-win-x86.zip\",\n            \"hash\": \"be2da55aab212fd52abd5481f510a15e78fd0c61f2ad973047f4c3423d7ada590d8e04d92d29c3b856bb178f341025f124b91a8e83ca536f1b4f5333c735aa9b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.306\",\n        \"version-display\": \"7.0.306\",\n        \"runtime-version\": \"7.0.9\",\n        \"vs-version\": \"17.6.5\",\n        \"vs-mac-version\": \"17.6.5\",\n        \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-arm.tar.gz\",\n            \"hash\": \"09bc8cf29f7080f4aee117c3ecbfb0f6c3d9a0b83280e5436429f61b3dfb5878472f9c68282d1d1a850ffcee15b51c342bfb192be76d89276e9886aef5ec5e17\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-arm64.tar.gz\",\n            \"hash\": \"1500927cd2b1e048de8ee5339937fd41073a85a82b7a175220a411212d22e4906b4e5e6d29b51d068157d2ecde33238d540508c700793dca8b04b4d1dcd5c89e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-musl-arm.tar.gz\",\n            \"hash\": \"70929c25348cbe34f354f65a176c85d6f2c2a91efd342004dc66a5aea0270d0aa58c07033b48dc12bbd56233de0072b2019c650d8602cee43e0836469731f004\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-musl-arm64.tar.gz\",\n            \"hash\": \"afc1103204b502c077c53caf56f9cfcdf3ed0b8028a029c067aef5aeea519c8ca2aeae2c8f82710fddda404b80304fd620cf017dc029c6b9040c9493ff954fc1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-musl-x64.tar.gz\",\n            \"hash\": \"e7ec038ff38f0c7352acd88f382d20babe5aa88a4328a33adb8f3c52c9727467879cbf76c0e4e08ba2ec6fbff5f342c0aeb7f5e191e4c5785d9b1efbd9394244\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-x64.tar.gz\",\n            \"hash\": \"62df9bca9492b3273830e098e787ec3664243989ac03550534599fc331693553660d3cf8bca655f2d1326070dbb7b20b04743eaba77fa9cc69f6f0fddfdebd06\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-osx-arm64.pkg\",\n            \"hash\": \"b2a290d2bc6f0707acb0b98112c7aa812edb661a3819514e068a256110bfd56e0a3c5d163ce850b24eef8e0e430f2623fed435fa7d891e8c424276212ce21971\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-osx-arm64.tar.gz\",\n            \"hash\": \"ac8c0b6e9d2235c8ee639c6c50b2f412f808a16f1616964f6166c7c57d899be2a0d8e83dd6f3010634f8f252da483c5d99cb083703996a99a6b9238cdc2cda6f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-osx-x64.pkg\",\n            \"hash\": \"eda231c832dbcb4655948e1a735c814bbd724ee94f3089752b59e76f567b85c91c14ff02963c98522ea877816013fecbf2beef99ca44ad9a9168c7e9deb758ab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-osx-x64.tar.gz\",\n            \"hash\": \"1ba293a9e07819aeb646c86f0db8280394c4a2b62f828d57a5ae80416cbafb1649a22e27cb12cc315dec1600cb825be645777d15e2f7c8d858fac3c55d0ed057\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-arm64.exe\",\n            \"hash\": \"30fba494089a594a1699b2ee8548d155d9fc00819f0b60838a3e95f7f46a9aeb1f9920c11c5988ac323a2b74b82057f3d5e488b24a578448fd07aa0e139e2a3b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-arm64.zip\",\n            \"hash\": \"86c3e88e1ff08d8e8ee61cb50d85fda4da29014284f7a8a26a012b232053356144335362cfee8d26c00c151f7569f93db1c3c4ae269de425b625ee94a5884a76\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-x64.exe\",\n            \"hash\": \"29f99b73727fd4ddf3d2d7ddde4f4175c291a4626e474c28d804383e7cdca7ff3ccc91ebf421eb9ee3b167744347a1ddf2bf163a4e34d29d923c5885fc1e10a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-x64.zip\",\n            \"hash\": \"7334ec6d62053f14d0e5ae866dea998a2ecf305dc77336961366cf91f4a1ff8522a9d9951611ac379a09f4bb210f7f31c6840bc2497b076d277cd82f0b979242\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-x86.exe\",\n            \"hash\": \"0ab63666899cfb233de6f11de23f54dde3f75aacb19943753dbc17c1795ccf80039e25747411891df9eed2d36877a25e110ba1efcd606016d068f1f466223e64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-x86.zip\",\n            \"hash\": \"d54f562b6869312225d1ed6e33541817b32c2b8a0dabe102cd5fabec5d679e91bb5becca8766036141a42f8c1d8b3f056914ed5ad95bc3026e1ebcbc7118f9a3\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.306\",\n          \"version-display\": \"7.0.306\",\n          \"runtime-version\": \"7.0.9\",\n          \"vs-version\": \"17.6.5\",\n          \"vs-mac-version\": \"17.6.5\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-arm.tar.gz\",\n              \"hash\": \"09bc8cf29f7080f4aee117c3ecbfb0f6c3d9a0b83280e5436429f61b3dfb5878472f9c68282d1d1a850ffcee15b51c342bfb192be76d89276e9886aef5ec5e17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-arm64.tar.gz\",\n              \"hash\": \"1500927cd2b1e048de8ee5339937fd41073a85a82b7a175220a411212d22e4906b4e5e6d29b51d068157d2ecde33238d540508c700793dca8b04b4d1dcd5c89e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-musl-arm.tar.gz\",\n              \"hash\": \"70929c25348cbe34f354f65a176c85d6f2c2a91efd342004dc66a5aea0270d0aa58c07033b48dc12bbd56233de0072b2019c650d8602cee43e0836469731f004\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-musl-arm64.tar.gz\",\n              \"hash\": \"afc1103204b502c077c53caf56f9cfcdf3ed0b8028a029c067aef5aeea519c8ca2aeae2c8f82710fddda404b80304fd620cf017dc029c6b9040c9493ff954fc1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-musl-x64.tar.gz\",\n              \"hash\": \"e7ec038ff38f0c7352acd88f382d20babe5aa88a4328a33adb8f3c52c9727467879cbf76c0e4e08ba2ec6fbff5f342c0aeb7f5e191e4c5785d9b1efbd9394244\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-x64.tar.gz\",\n              \"hash\": \"62df9bca9492b3273830e098e787ec3664243989ac03550534599fc331693553660d3cf8bca655f2d1326070dbb7b20b04743eaba77fa9cc69f6f0fddfdebd06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-osx-arm64.pkg\",\n              \"hash\": \"b2a290d2bc6f0707acb0b98112c7aa812edb661a3819514e068a256110bfd56e0a3c5d163ce850b24eef8e0e430f2623fed435fa7d891e8c424276212ce21971\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-osx-arm64.tar.gz\",\n              \"hash\": \"ac8c0b6e9d2235c8ee639c6c50b2f412f808a16f1616964f6166c7c57d899be2a0d8e83dd6f3010634f8f252da483c5d99cb083703996a99a6b9238cdc2cda6f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-osx-x64.pkg\",\n              \"hash\": \"eda231c832dbcb4655948e1a735c814bbd724ee94f3089752b59e76f567b85c91c14ff02963c98522ea877816013fecbf2beef99ca44ad9a9168c7e9deb758ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-osx-x64.tar.gz\",\n              \"hash\": \"1ba293a9e07819aeb646c86f0db8280394c4a2b62f828d57a5ae80416cbafb1649a22e27cb12cc315dec1600cb825be645777d15e2f7c8d858fac3c55d0ed057\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-arm64.exe\",\n              \"hash\": \"30fba494089a594a1699b2ee8548d155d9fc00819f0b60838a3e95f7f46a9aeb1f9920c11c5988ac323a2b74b82057f3d5e488b24a578448fd07aa0e139e2a3b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-arm64.zip\",\n              \"hash\": \"86c3e88e1ff08d8e8ee61cb50d85fda4da29014284f7a8a26a012b232053356144335362cfee8d26c00c151f7569f93db1c3c4ae269de425b625ee94a5884a76\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-x64.exe\",\n              \"hash\": \"29f99b73727fd4ddf3d2d7ddde4f4175c291a4626e474c28d804383e7cdca7ff3ccc91ebf421eb9ee3b167744347a1ddf2bf163a4e34d29d923c5885fc1e10a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-x64.zip\",\n              \"hash\": \"7334ec6d62053f14d0e5ae866dea998a2ecf305dc77336961366cf91f4a1ff8522a9d9951611ac379a09f4bb210f7f31c6840bc2497b076d277cd82f0b979242\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-x86.exe\",\n              \"hash\": \"0ab63666899cfb233de6f11de23f54dde3f75aacb19943753dbc17c1795ccf80039e25747411891df9eed2d36877a25e110ba1efcd606016d068f1f466223e64\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-win-x86.zip\",\n              \"hash\": \"d54f562b6869312225d1ed6e33541817b32c2b8a0dabe102cd5fabec5d679e91bb5becca8766036141a42f8c1d8b3f056914ed5ad95bc3026e1ebcbc7118f9a3\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.109\",\n          \"version-display\": \"7.0.109\",\n          \"runtime-version\": \"7.0.9\",\n          \"vs-version\": \"17.4.9\",\n          \"vs-mac-version\": \"17.4.9\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-linux-arm.tar.gz\",\n              \"hash\": \"07af150d5d9661f5d3bfbffd66ea15b01b13f2ab54e676d75e6e8b056652daea93a750ce722300f6c7e92f290892417abc72fb94edbab1618d81de30721a1dfc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-linux-arm64.tar.gz\",\n              \"hash\": \"9bb2550dfb2c311dff04d41808ee64ae026ca12e0240a7d0dd0891f73c26680cc547075ff58b343556d4a94aec31882f0fddc3ef4f18bcc88adf1ce48067b3c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-linux-musl-arm.tar.gz\",\n              \"hash\": \"783369d2815b7770e1e402bfeda311ba710279ce51c24e9e3eeefc8a2a34b97ae82c8dcbd227d563d52407878d63fdb79ac639bcf0deae2e61511fd75195a950\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-linux-musl-arm64.tar.gz\",\n              \"hash\": \"34730336e57333bfc51f6800b4c695fccc554071a71b111c27effaeebe7e5975bfdffc02b1850320c57e7d39554f196ce27777be9d44f45d9f47c01b348e20fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-linux-musl-x64.tar.gz\",\n              \"hash\": \"3160f01c410db414483e6edbfda7d3a98abbb67c25a51e0ced8d9840b7fa9cced4cf47641e6012d3477de8eed5dfea32d5a6d85f34acf61562ae9dd48639980a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-linux-x64.tar.gz\",\n              \"hash\": \"4bd5b733b7a7471e493af3165e4a50f1f93e3c6df0ebbc884129d0b23677dfa87c40747d7fc1973c78ccd6adc17366065fa774adf3d9a9b399aba05e6d03b821\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-osx-arm64.pkg\",\n              \"hash\": \"5b748ee0eaf3bbf75808d1bf3b475eea9e59e5c0936b27228a02c3d0fbe65d22437a90abdc65b26e9f85d6fe807e7a0b8493c4754fccc223ff93cd28b05002bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-osx-arm64.tar.gz\",\n              \"hash\": \"012f12f584c8d1e8cfb8e9c2996bff467b43776917bd0d98d308f2a473fb099ee7297a0a920d470d78cdb947f2a8a48c86b641901894267b1c50f2762017ea8e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-osx-x64.pkg\",\n              \"hash\": \"8fb0dcf4aa25728d4f1798e1961a370038ffff87a9a1a959cc8df79107950a347a637d4cfed18f644b6d3ddbc88c16885b59593d49b2400ce2ef6fc233c0586d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-osx-x64.tar.gz\",\n              \"hash\": \"2b3f2a1a052c5ed1bc5c807d3938d3354c1bc7824b36484f51c74643cc7feb037c971477c14c635e070417a88229f7d0c7d0e726e064161de03e86524755eea8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-win-arm64.exe\",\n              \"hash\": \"ec6808e2f0af37c7657a61d861d163ff520b37ee21b49b1feee787e679ee4ad76b5ce148643446a0d0608ed463599a9095831293d606df53d976b5ea7751099f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-win-arm64.zip\",\n              \"hash\": \"b2bccf1e81edb08f85a951933385af037bb7ae16934026321964b6e6cceafc0f272af89fd56c1cab8659cc0790bd00f66086f016f5613e1318f15cc3415ea3a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-win-x64.exe\",\n              \"hash\": \"c75993c5c29dfd1f5c3fbfb4f44b571e508285083bde3e0ac670809c13fe145153e218ed945cc1e9cf4b865d5f522f75165112e23a153a57f38f4c22dc92c142\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-win-x64.zip\",\n              \"hash\": \"9106e18a0813f90f8d70caae86fc6b5933f9c1d6735b9048d3048d8aa1448833d729af91ffdb4ab54b295fc81171b834809e8107ebb0c0da68792c01b7bf636d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-win-x86.exe\",\n              \"hash\": \"a41698b6e94a32abbe910fb02c83a8834539085612f9667b37766597ff6783bb5ec5c761a2f220869d2c6724286b11da9b007c4a6f7c7b48214f1a56a08ade1c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.109/dotnet-sdk-7.0.109-win-x86.zip\",\n              \"hash\": \"2d97f96814fdc4a09da46facecff5adb9ef533e1d59dbb2a6109b8c6884cfea1e77b6ebdc32c9299a08236acf807babc31eba26a8a36d9cc8cfa8448bd52d2ac\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.9\",\n        \"version-display\": \"7.0.9\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23172.9\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-linux-arm.tar.gz\",\n            \"hash\": \"95d91577e0625505aecf095ebc18a86ea3b4d4c4350b23ac83e8bffafb7d2fbf06d5dcbb6faad6eea0f694989faecd77f57be60ddf3e4735be1cfe8f1a0cb9b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-linux-arm64.tar.gz\",\n            \"hash\": \"447ebbd115b8d38eeba70f531010832db535cf3a17404491f552e99a5a59c8c63525640694a6753d27e9a7ed5bf1064998491c1983361c1c37b152b01a3b8f8a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"46939aecba78267d78218faab7ae00ca005c2a2653affcb39b0d8357166ae5176139ff5eb062cdca12a558f8f8645bdaa6c03f7096027a867c4ceb308bc83d6e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2947d01c38b9b23238a24c2b10174dc8793bb3c02fea34a9bb93811e865b189873c0a32936468d2a906639cc10d6d86ecf1929c0aac07081215b38a552876eb2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"37e9fdd91f1ee0c6627d5d0fd433fb64a51f576c1dbf29a92d1f209f36e2c8eb2fbead5213567f85013d7fe5c2874e9eac54b84dc2788b89972c2b92fd9898f0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-linux-x64.tar.gz\",\n            \"hash\": \"aabf4fa5ca726dc52774e5d644800ef7477815b22a982b7a2752dec6569186aabca93d5386e195e7ead377144601a786ae6a5d76ff28435bdabfad495cfe554b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-osx-arm64.tar.gz\",\n            \"hash\": \"fbe725a764b765f9954ae771b3d043d6d1a53e53149d0b4c89a4138793d9471f2924f68a5b8e1c107d9faa07946f2ac00584ded9b179ed8d40cf230ac7d34750\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-osx-x64.tar.gz\",\n            \"hash\": \"b2cf51cff120abda9b5ae213e294f73debd620bc8f3e6b12e1bb628df31457a5bb8c6dbb12cb1dcec24a2c04edd5ebe807d6761f6095e7a90441f1930acb8185\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-win-arm64.zip\",\n            \"hash\": \"d0e1e09984064804ea4f6e5b1eea8feb0c00363d53082a66710a182510d26603b7db58ddf8146c0e4d6de0890cba38e8dbed9656d80335984db34d94b7fc7237\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-win-x64.exe\",\n            \"hash\": \"fdd469c95fc21f6398c3ff1aa54e5c7cea3a2c6a1434382f4a4d5e2255f507239defb99d0f7840d1eff1b97075a61d05885d1541fda8fbbcce49b0c3bd86af7b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-win-x64.zip\",\n            \"hash\": \"77d97fcebbbe2c6b36adc5b7df369a3e7b5c83db3638a3dd72360d4f2019c731edff08aef28ff83982a718f541b1d5f234f463c49b9d9c14cdd71b429b613d05\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-win-x86.exe\",\n            \"hash\": \"875272d72dc4cf5c0290d3282307415391294d05ee4cf318595f5b1afdd5732520442deb4a1bdd11be6bdfd25a0f74a60e7c43fef30eeac2828e5090bbfa3ff3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/aspnetcore-runtime-7.0.9-win-x86.zip\",\n            \"hash\": \"5bb82c955bfd6ba387bcb5e93529a34497b8ee91dd5ef2ec1c395a9c7aad9abe931f760677f28a04b9912236ec1ccb05e2612f4d44589110e3227697beb3f58b\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.9/dotnet-hosting-7.0.9-win.exe\",\n            \"hash\": \"898ac87894c53332c0273ff627f86b36374bec4ec26d622a728877053e08e6d6ab3463f1b078f03f0b125908da0c5628b952b5cac101bd21c119a7a7818ad736\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.9\",\n        \"version-display\": \"7.0.9\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.9/windowsdesktop-runtime-7.0.9-win-arm64.exe\",\n            \"hash\": \"79f5555a2b0f355a1cb56b896fb41a716a1e83958faa3d23b4c65775ff59d6b8088036ee4d48aee89de6f76358ca81c7a627bdf2b464c2e5f667c11f39e3fde6\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.9/windowsdesktop-runtime-7.0.9-win-arm64.zip\",\n            \"hash\": \"21858dc2fe65f5b6b3f93e3423fb91c7d28de367b55f2d1c16ec0e702a3a70be1359f19b812e5f5083629f1902291cfe21c1140a1030e9950c7f47ffce171c92\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.9/windowsdesktop-runtime-7.0.9-win-x64.exe\",\n            \"hash\": \"e0f119cbb08a1ee5181d294ba135c57b9ebef642d1d6f356c8d6bff9164e2ec8b36bf0622d0abacc0ce872735745109be025cd34a544c5a03939ae546bb0c3f2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.9/windowsdesktop-runtime-7.0.9-win-x64.zip\",\n            \"hash\": \"67731ef219e0d6a742c468b6354459e1169dcf8512ae6f090be70870ff85a66c4485077548897dafbd4a4da5e57ded0cac5337c655291177c80b883c1579c989\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.9/windowsdesktop-runtime-7.0.9-win-x86.exe\",\n            \"hash\": \"e0bf397c1740d2ee6a08c57195a4d97b4e64635d0833368d25675561509b7b9b98ed5acf3e9ccb1a5a21508bdbc951ad7dbfa9647858c7c6e662c49be2763af5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.9/windowsdesktop-runtime-7.0.9-win-x86.zip\",\n            \"hash\": \"8056915ed5a0f5561ab52ec1aedae71c789681a84c35570a3f4dbb8b1abfc6c01c73caaedf1eb585081a4e31438ee36bb424229e8506a43e53b8ee7082287e43\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-06-22\",\n      \"release-version\": \"7.0.8\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.8/7.0.8.md\",\n      \"runtime\": {\n        \"version\": \"7.0.8\",\n        \"version-display\": \"7.0.8\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-linux-arm.tar.gz\",\n            \"hash\": \"b21be61a8504f06c1930c5312c7dc63e2eb9beb6de56ea2e557004e712c46c8b258969ac32b8d1aedf6a61b2854ae31c59c635123e3ce63ce60b7398b83d9846\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-linux-arm64.tar.gz\",\n            \"hash\": \"92835372558bc9913e81617d0c396a60427fa30eb2dc9249bf73772ee8c221cce7358aaa4cfe5a261849f9b1303225f6052d29187cfbb15cbe3caffbad4fe3dd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"b5b247f69a9998e357912b2d4b51d6886c3e38a92d55567495e2f4c92f511ef8384cf09201e5d06690011110af0cc2157b602479e49801adc5e9cd853f95e807\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f165b0dcd87bc4210a48cccd363761ff36afc7b0ce4259d3f0531d7e89049b00218c980b310d34df85ef0159d704e9473c53cd2bca3835c7ed26330930e30791\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"4a30cdf834733fa92c15d23df15a58440623ce471f4afe4986e5c32722d81215adc418a3b953712fd1bdf41eb9b87893ace7cfd1c35d781b1075bf69b8b64e12\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-linux-x64.tar.gz\",\n            \"hash\": \"50463de25360aba18c29ab8a3d31896793a7bcf899b40249fcac77efab24888e93ac906dac04ea5b72026c89c07dd371247ff89e8613123dead7e889906aa876\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-osx-arm64.pkg\",\n            \"hash\": \"90e13527940f7d14b525b607daa08fe992e1301736716e9308fb591d345cea0d5a4c83ba6390064d0ab7c1cca2b132a027041e1b23daf17c98f3d4b2bda4f31d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-osx-arm64.tar.gz\",\n            \"hash\": \"bad440aac7e065c88685de902e5328990d44e60fa8f583d2fcaa38cc9d3cbaf01810cbc40b7cf9275e53f386b59cd88e563f96e907c8b0c0668fa6a905a5eaa4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-osx-x64.pkg\",\n            \"hash\": \"dd8ae186668226ddc9164fac6fbc592f423116452eb6d635d7759b6dbf578c44c9d4808eb552434a14d5d32cbd0fb347a63d7a0e5d77a229b84c7ccfaa0e4c29\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-osx-x64.tar.gz\",\n            \"hash\": \"e2c01f09a7532d72578dbbc27ea0156b5e0ee0c636eb0503ec34bf4445b0263857063dbd7701a29baa5e74129ec9c7593566f66cb33cccd40ae64ec888d7ba3c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-win-arm64.exe\",\n            \"hash\": \"3d21ca8d545766017da8b49ce6dc4672f7ed5a7b5218818882659d00dbed684cd6921cec4c81e96897fbede263c4201ca27831bac9c86fe9a11f1cf6931b4004\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-win-arm64.zip\",\n            \"hash\": \"8e8e751b5fd30b83347646545675eb1720ca0f702a3e53692f8f543d5a85a5a485526a6541a9f0e333c0f8054c7e64c7f842cab8c29ce9f643fe9a20720927c7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-win-x64.exe\",\n            \"hash\": \"5a938585f0125b6db1518a9ba12a8ee640946545c4202633a949f506c24db915e2eb1a6a2c521f73d0625862e0259195343bdcb2d1233c7e10c2d9ca4d6f05eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-win-x64.zip\",\n            \"hash\": \"52b2a4179cae5a7c74470068cdb89d1e9cdb26c3a9fad0d362e0d16f2a203d8bcee8d88719dd62fddb4f50094c9820a765c75fc5188e8fe6b94cdcd84d20b39e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-win-x86.exe\",\n            \"hash\": \"fc187fdd67dc31089f7af25645e2bdbe40a40af01d22a96256e7fc5e8448179f77a73deab87f76bd991e59e20d58eca1f8d2e218b1738887edf83ef758472007\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.8/dotnet-runtime-7.0.8-win-x86.zip\",\n            \"hash\": \"c2905ddb5f71fea9d39c734f431efe61240e74478ae9162b98296ca5eb46d775478133ea7e6835c6efc27f43616555146a7c9e41f5a9e93708671dad61401826\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.305\",\n        \"version-display\": \"7.0.305\",\n        \"runtime-version\": \"7.0.8\",\n        \"vs-version\": \"17.6.3\",\n        \"vs-mac-version\": \"17.6.3\",\n        \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-arm.tar.gz\",\n            \"hash\": \"30ff42e7d9d611f6036376651fc447c1b413f2ab1a555139bcd4755cf14b9691dabed53e12a78badb9c785d76c9a3ed43fc7293a0516ddadd09294d2baf1113c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-arm64.tar.gz\",\n            \"hash\": \"451622fe88ed6c6619be6c27f3e9eeee94ae61db3c9a0b8eab7cf1b14a62d41681181748d823a1207ffb6da6e3a098615aa2f59be8e60d403ba4cb98ab267a50\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-musl-arm.tar.gz\",\n            \"hash\": \"680a7d1df11ac5e947c2886ea62c26bc241e7a434d35dd9a40b6911ed8c8fd0a1cec32f64e017060b8c0f7fa5e882dc3d10f474a49a8f73624c148c20b7b30ac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c448a80355375c119604916dbf06ef21ca86949c0f859a54e0c6bfb673d36ab9a93feb239a033740e08ebbe64df106ef3764d6a33b58fd9210649a752fbc0fc1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-musl-x64.tar.gz\",\n            \"hash\": \"ed64c752a3d8f62e56f248cd56f147f9536ebe9383fdae2d09bacf57e0cb8c7791a89354b3d55c2689c0fec41291da6a605e10b8e0c3fb8743fb8ba5d5de348d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-x64.tar.gz\",\n            \"hash\": \"c63e6baf3760a9949089d78920531a1140f4f31fffe13069b2011c61c3d583d585f5ec8cca973b414fa35d48ccbfea9c1ec1c88222b53afd2af5974be3b5cb1b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-osx-arm64.pkg\",\n            \"hash\": \"091e104d6ed542e6bbcb4463bd6c22b68022750e373ccb6ba23b86335cbb55bdcec47ba2d5b4278fe1cb58c21a5aadf8bacaccde6eaca15879601e684ebfbc63\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-osx-arm64.tar.gz\",\n            \"hash\": \"4567aab659a1900d60f2dc07f6c24954b9fc2c49ea54a75c17825d2b9e131860de33bd79195ae529af1df884a25c7e626d7463d13e340ce6e99a74c8ffe60653\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-osx-x64.pkg\",\n            \"hash\": \"e34e39ca376edd0890e415a27483d7ff2096e092bb5e3e2e9ea36189bd3c3caf6af0067a78e3e3e88f4edfece7ca4738ddbfff926d73a64ada6fbab1d7bc88a7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-osx-x64.tar.gz\",\n            \"hash\": \"27762a9104c5f44c189fad2cf81984369503add9c6cbca604a4e539f9957db81d807981ce23c025a74feac1a978b9d679eda66f4078af2de7e0bad5992177700\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-arm64.exe\",\n            \"hash\": \"0d95b2842ae855565f340768f79bbfac47fe25a4d717c8d4df3bb10bf0eb2068379a0611b0d30e9e9d57ff7f1e50de30968784de20771b1479f9f49e25c9d67a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-arm64.zip\",\n            \"hash\": \"ab2c45cea3e69527b1e5dc5097b7e22f777c50d943de364e18510ac7e6c93cfb87f628dc0c3b221238f9a3def67304a88b81b7a76ae44484690fd38f15c25acc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-x64.exe\",\n            \"hash\": \"d0f106f330e3f529499d5288ad8310d6cbd436787820236694866e147e3d8d8e0aeb6447e297f8fd2e961ec183c4602d39785c5322330d7503209193d188bf1c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-x64.zip\",\n            \"hash\": \"9cad4fe5efbf9d37bcefad88a1623da12946958759a6ab7795602598a9e2c7e9a948c335e7fbb002b7c03af877798f24c97546857e8822f639cf92ae81006221\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-x86.exe\",\n            \"hash\": \"34ba368923593c95571c7df001917c1211113aaf60472d996305344e72a16ab2c2fc4bc7b8f94b8206c48885f2ef17774c6d5ef83937ed32205b79374a61224a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-x86.zip\",\n            \"hash\": \"7dc47ee39b5805cfdf460254f35aa8181a449f9f923127760500259bc635bce912ef20c7602f1e283830e44cf711ddafd4b1512c5ee81e95a3e1a474c64b27e0\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.305\",\n          \"version-display\": \"7.0.305\",\n          \"runtime-version\": \"7.0.8\",\n          \"vs-version\": \"17.6.3\",\n          \"vs-mac-version\": \"17.6.3\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-arm.tar.gz\",\n              \"hash\": \"30ff42e7d9d611f6036376651fc447c1b413f2ab1a555139bcd4755cf14b9691dabed53e12a78badb9c785d76c9a3ed43fc7293a0516ddadd09294d2baf1113c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-arm64.tar.gz\",\n              \"hash\": \"451622fe88ed6c6619be6c27f3e9eeee94ae61db3c9a0b8eab7cf1b14a62d41681181748d823a1207ffb6da6e3a098615aa2f59be8e60d403ba4cb98ab267a50\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-musl-arm.tar.gz\",\n              \"hash\": \"680a7d1df11ac5e947c2886ea62c26bc241e7a434d35dd9a40b6911ed8c8fd0a1cec32f64e017060b8c0f7fa5e882dc3d10f474a49a8f73624c148c20b7b30ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c448a80355375c119604916dbf06ef21ca86949c0f859a54e0c6bfb673d36ab9a93feb239a033740e08ebbe64df106ef3764d6a33b58fd9210649a752fbc0fc1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-musl-x64.tar.gz\",\n              \"hash\": \"ed64c752a3d8f62e56f248cd56f147f9536ebe9383fdae2d09bacf57e0cb8c7791a89354b3d55c2689c0fec41291da6a605e10b8e0c3fb8743fb8ba5d5de348d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-linux-x64.tar.gz\",\n              \"hash\": \"c63e6baf3760a9949089d78920531a1140f4f31fffe13069b2011c61c3d583d585f5ec8cca973b414fa35d48ccbfea9c1ec1c88222b53afd2af5974be3b5cb1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-osx-arm64.pkg\",\n              \"hash\": \"091e104d6ed542e6bbcb4463bd6c22b68022750e373ccb6ba23b86335cbb55bdcec47ba2d5b4278fe1cb58c21a5aadf8bacaccde6eaca15879601e684ebfbc63\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-osx-arm64.tar.gz\",\n              \"hash\": \"4567aab659a1900d60f2dc07f6c24954b9fc2c49ea54a75c17825d2b9e131860de33bd79195ae529af1df884a25c7e626d7463d13e340ce6e99a74c8ffe60653\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-osx-x64.pkg\",\n              \"hash\": \"e34e39ca376edd0890e415a27483d7ff2096e092bb5e3e2e9ea36189bd3c3caf6af0067a78e3e3e88f4edfece7ca4738ddbfff926d73a64ada6fbab1d7bc88a7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-osx-x64.tar.gz\",\n              \"hash\": \"27762a9104c5f44c189fad2cf81984369503add9c6cbca604a4e539f9957db81d807981ce23c025a74feac1a978b9d679eda66f4078af2de7e0bad5992177700\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-arm64.exe\",\n              \"hash\": \"0d95b2842ae855565f340768f79bbfac47fe25a4d717c8d4df3bb10bf0eb2068379a0611b0d30e9e9d57ff7f1e50de30968784de20771b1479f9f49e25c9d67a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-arm64.zip\",\n              \"hash\": \"ab2c45cea3e69527b1e5dc5097b7e22f777c50d943de364e18510ac7e6c93cfb87f628dc0c3b221238f9a3def67304a88b81b7a76ae44484690fd38f15c25acc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-x64.exe\",\n              \"hash\": \"d0f106f330e3f529499d5288ad8310d6cbd436787820236694866e147e3d8d8e0aeb6447e297f8fd2e961ec183c4602d39785c5322330d7503209193d188bf1c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-x64.zip\",\n              \"hash\": \"9cad4fe5efbf9d37bcefad88a1623da12946958759a6ab7795602598a9e2c7e9a948c335e7fbb002b7c03af877798f24c97546857e8822f639cf92ae81006221\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-x86.exe\",\n              \"hash\": \"34ba368923593c95571c7df001917c1211113aaf60472d996305344e72a16ab2c2fc4bc7b8f94b8206c48885f2ef17774c6d5ef83937ed32205b79374a61224a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.305/dotnet-sdk-7.0.305-win-x86.zip\",\n              \"hash\": \"7dc47ee39b5805cfdf460254f35aa8181a449f9f923127760500259bc635bce912ef20c7602f1e283830e44cf711ddafd4b1512c5ee81e95a3e1a474c64b27e0\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.108\",\n          \"version-display\": \"7.0.108\",\n          \"runtime-version\": \"7.0.8\",\n          \"vs-mac-version\": \"17.4.8\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-linux-arm.tar.gz\",\n              \"hash\": \"98c68d8546efcac46a66860be8a1d5b84587c7d1c36b18e52f61159340b4f9772d72dab723b1cb85ef9df6ccd513fc1ce23407fdd1fed60eea0ffd135140d9b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-linux-arm64.tar.gz\",\n              \"hash\": \"b8ad0f25641bfe5befc178fc0beb8a556901dc176782d5031c4fa5381a19b3982cf0e00d811d8adf30c9d0b82399080582b9df876a488d69fae8f67c1fd75bf9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-linux-musl-arm.tar.gz\",\n              \"hash\": \"a475e4936142f4092980c1134d349a1407469aed7a2839748df6d54f4bfd8b899e3fb27a8b939bdc352b91a08aba7fa4f74220a2de73079d01879c823d6eb556\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bffa88d273f62da280e4e02b883a44754e2c44f8ffc48bfb69999fb6fff7e1350a8a425263ae56a271c976563647589a9e33407314d13727cd83d190b576d44e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-linux-musl-x64.tar.gz\",\n              \"hash\": \"5f523cfc2798597f3979b9ca704d14f4b06e3c32df963f889532b5be8e975dcf077b8a29fe29e9555676fbe67cb6fe129796b25046977d8b290d294b4494e4a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-linux-x64.tar.gz\",\n              \"hash\": \"fa9573271be33574f5300134e89f64748eb700eecc361b6ffad5e383a700fd4c0fc28fa15758279a2d3321763af606d0c50007b795159a4cd82a03e8bfbc81a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-osx-arm64.pkg\",\n              \"hash\": \"4d085c767725c397e118d7c6b0a961726a3c7f279cb1417de3207dfb46a26960ad579621fa2f8940689a3f5b655f40af4e1a77070ebeadab9457121981a5be53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-osx-arm64.tar.gz\",\n              \"hash\": \"9e99c3933878bcc6f5423eaf253584fafdec4d5bbbc437b027d70ad3aaa6be3dc3b7c3481e6c70df55d660bf32b751ef2000bbb94be82ddb60763a81f0ac05d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-osx-x64.pkg\",\n              \"hash\": \"a2ac0b05f8d4c6905aee215f6edbfc9f6dc3451b796772a973185553d6f7fec9636de222c6541120ce37c21d9be2f9739bdb9311800b706843b4093daffceefb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-osx-x64.tar.gz\",\n              \"hash\": \"5196b12d25497d67df5822fea35b1e096885d1a3822f512839d69ddeb3dfcf57ffe68a59c638307617e050f1a1784bd7c83ee7fa6ac48e9ceab092d08f7bc0e9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-win-arm64.exe\",\n              \"hash\": \"564c8b09f3544f86f81b2e88b1aad35d515bbcc723cf75ff92842a775b8fd91c88d2321c8905fe31fd0d9630de0586c9387a6e00c551c9294d0a07d8ba04c904\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-win-arm64.zip\",\n              \"hash\": \"bccb1295aaec086457279f284d9ab8906fe73fb6792fe214716b2aef76dace7d53dbcd0623bfc3ac1dc5ef6cb388297dd6073851db622223849ca6b17750ef53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-win-x64.exe\",\n              \"hash\": \"654218fafd2ae169211d31bbf2e42f72ef9640d298cc29dab09dc0ae619f8eb0f7b58aa35e135b165cc1fbd3613aa549a9b4febfcc39b3a71bc3f0b0a7e62b10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-win-x64.zip\",\n              \"hash\": \"e7d41a06e527f7b388c3fff7924f84a34ef14d4577961d154b3fd351639b5b60327ebb25e6dab53a757fbab6857cd872677afd4f38624e48008b61c3a7839329\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-win-x86.exe\",\n              \"hash\": \"2d5277a2905e2954390a761c803fcde1a6cd70c82d1458d5330854dca44f56a3897cdfa869224fce5341aad10f81e125f1e0df3eec2905cf52361a2defad8c29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.108/dotnet-sdk-7.0.108-win-x86.zip\",\n              \"hash\": \"8a1f3d9a8ac64cd27049c390fbcf9f6f0147b5c231d523db8ded07f846b479054d44d78ff57bca987312bab486202d56c184e18f3840eb97ba67c4f932848d01\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.8\",\n        \"version-display\": \"7.0.8\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23170.8\"\n        ],\n        \"vs-version\": \"17.4.8\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-linux-arm.tar.gz\",\n            \"hash\": \"b4c73f8b8b146d81d38b67d061ebeeb4dfcf39584208ea4011ab2aa9e2edf54cb3064cdea42aac674c69c68fa35146654ba347936864f8317563bccb02a72100\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-linux-arm64.tar.gz\",\n            \"hash\": \"ce521f56d95c39be6b8428086fb4e0b13ec49b08431bee151a625aeb2366622e6c688abc79b76810bf5c17a8547b894d5ae57539e15ddb3bfbb0e11022c995ea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"834bb2af89d3cfb7c4865f376769428ee4896eaa7a6d54c9985b8808519b448c2dd73427e41dfc1bd1a6f390752feb3c92575fe7fa324a69f8eeeaaf50429fc8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"df8156e9b74cc20e1d493bbb19c5840484878e67aab6889c3bc14c0066646ba2652785594de746d43a864532e062731f7ac13e4233dd3214163dd38cd725c6f1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"2b1a0827b014935ce9420d698ec3f32e06d2fcbc3492cf09a1557e9ba9a84cb388c675160f8bc8a6422e236050f63e2bca1cc83703779bd97ac1cdc2fe0f74e8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-linux-x64.tar.gz\",\n            \"hash\": \"b75cb42ecd1936b1b2af5ed59d7f3ef3eb0a602b23f5a272e62c42de9c75db1ae54878b2f9f28d72dac15bdbeaece81cc6344d0df5eae845bc130534ef1bfbb0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-osx-arm64.tar.gz\",\n            \"hash\": \"31b9806f7c3d327008fe505dbd627bcccebcc7db7179b7010ac814844782d054975cb4c1a35f6ae447fbed3227d39def95bc99169032f4fcffd35916896ed4cd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-osx-x64.tar.gz\",\n            \"hash\": \"46d4e2f36240efa316c15992646d8b93d6750b987aa6bde88529e50c9cbfa69f250148ed6dfbda93c28664c555bda62fac7182a76e8ddddfa1962716169ac152\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-win-arm64.zip\",\n            \"hash\": \"cf490030db796ac46385618b9f479cd008a4bd1f01469fbf856fe9f28772893a238014ae02db50280de5b50776a3d382ab5ccae6de1625fa61933033b6ba9f01\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-win-x64.exe\",\n            \"hash\": \"afba08613cd7b4d23f91599decfeeb28c859167f0fcd4474668082eaf13a94da00d8be158203d927a21b93ab828fe479a81044a93081f1d3acd84c873a3e955b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-win-x64.zip\",\n            \"hash\": \"c383cbb29d2d028895f689f8b0621bcab548ec2dfb0a67b3cef788d809f1670ce0f8afc1de90fd465abc0614fce9af829fc2f249d166958009c0479d4ecb88c7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-win-x86.exe\",\n            \"hash\": \"b82591bb23b1ecad2a6875dfea23caad19bee6561ffba14d9ec96dceecd057781aba36f8a4cd97032006cbf67fd4e2bc69810f2aff43eabcf729b13def3a6bc1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/aspnetcore-runtime-7.0.8-win-x86.zip\",\n            \"hash\": \"2241eef78f7c49d481721be7c0220dd21259ebbcd675ebbc5ec2be8dd212477115614c9fa34d5b8bedd5bc459d629729610763f700a4381d78a6372bcfb76909\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.8/dotnet-hosting-7.0.8-win.exe\",\n            \"hash\": \"f3ae379e1167a170824796f245221ce787e42f3a8abd203b77b4890b72e82473299130079847f43f20dc29842712cd9e572a94de2daecbb596889581c6702b00\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.8\",\n        \"version-display\": \"7.0.8\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.8/windowsdesktop-runtime-7.0.8-win-arm64.exe\",\n            \"hash\": \"6a68cb4f2b9dff00b4243deed0f7c4537c21d01b10078765cb596b2bf3fe6cd309596ebb95a60969facf775490bc080d73d24f8da5249f2ddb5983b6dc58c75b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.8/windowsdesktop-runtime-7.0.8-win-arm64.zip\",\n            \"hash\": \"fc910af51c3cbd10111a9f3addd7422f7f216ed62b2cf51effd6963a80375ee9616144abb7451be966fd63f77cdd2a7455ae2f4acdeb27631dca5b781b4c02fb\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.8/windowsdesktop-runtime-7.0.8-win-x64.exe\",\n            \"hash\": \"68337ebb614049596cc80eb2a4a3803b403e1f8268af00a367e99b0af28e6934e2de4ef3985882b5a06f764b287d7f6df3a98ff49132288cd5b3a491e402f7e5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.8/windowsdesktop-runtime-7.0.8-win-x64.zip\",\n            \"hash\": \"2f64c05960d111f827a91aa164ba93954e12377bf75a7dfb6d71e57454ff543e36de9b71aea8f35e1453d5732a478f913b60f16f60be2d73ab2d58987663d7cd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.8/windowsdesktop-runtime-7.0.8-win-x86.exe\",\n            \"hash\": \"2242a923890050d71b14c54fd754066e1ec78877764649f36c47050f7232638d9f954bd726519f0567b61bcc150e9637e6040a8ce8c4f19a659d9e136541f050\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.8/windowsdesktop-runtime-7.0.8-win-x86.zip\",\n            \"hash\": \"30952b5ffc507282d01857232ad7da54b6b259b83edd2aebc91b26e20afe41a839590e4455dcc6f241018b70ac8bcb3e0c18be002cb4ee5b6fda97a6f84c8273\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-06-13\",\n      \"release-version\": \"7.0.7\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-24895\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24895\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-24897\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24897\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-24936\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-24936\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-29331\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-29331\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-29337\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-29337\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-32032\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-32032\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-33126\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33126\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-33128\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33128\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-33135\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-33135\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.7/7.0.7.md\",\n      \"runtime\": {\n        \"version\": \"7.0.7\",\n        \"version-display\": \"7.0.7\",\n        \"vs-version\": \"17.6.3, 17.4.8\",\n        \"vs-mac-version\": \"17.4.8\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-linux-arm.tar.gz\",\n            \"hash\": \"ef380d2369fd2ff973c6f9c54f58912386f6ffb6560c772a5a324a7c2e759b488bd783e2d7e531bfa89a9519534c178576e40f1d84a9d8ff6307a1781567dced\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-linux-arm64.tar.gz\",\n            \"hash\": \"95d2b4cceecd1966bf61fa016b4deb3241c4ffd80cbe6ea1a2ab5158401493e87426b8f41e150e595757fa8e8fb06a8e4631ffcf6bb1a04eddf5ebd9b5e0eb2e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"bc626b4a9794bb275adfa02de69ef5a686cc886a59eed4e3555fa23520332e8949ad8b32aba3ff08703fc247addfe75c6f25487dc5067b0762a7f2a84c3083a0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4395b004c8e91686d35c5c1edf0922e4c4162c1e0454d244c927a5200001d2f573a32f83c535e6c7975f1451109fb6402638c545ec0bb79aefc86089c9634005\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"1cab2df1c4223b43d74cd40391c7bfbd0d226e170ee514d3c0aa4287a86c175a3cf6bb3e8a29b09cdd47c5258b3fd5ce0465d051b5b8ebf3e951c87c21ccda09\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-linux-x64.tar.gz\",\n            \"hash\": \"02c4949f2edd4c0e63286443e11f961ee2cbd173eda93b5ba192e7c95dcefe74754222f3986d00f71b213271c184d5c12796a4345d19936a38c45293ac76dd94\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-osx-arm64.pkg\",\n            \"hash\": \"da4fca346633d032f7c5c342220fb9756debddde1042461b153d8b7ad416f88de8b2608bc24e5f9d5bda888d274c64b8aa229ea29460e18b4e0f0615d2ee000a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-osx-arm64.tar.gz\",\n            \"hash\": \"440338f74bf45f143e160eb2443134d9d8833f9b0a9507443075898f23e8dff94acf17a41c8e2a4c648a977dbf977b4fb568e2d5db8c9999d7d67c7110d7d3d9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-osx-x64.pkg\",\n            \"hash\": \"a424bd4eb825606b4e79880c9b38b7c499bf5944b14dcfe96138a4915ed4851373dc21d5f4d5f526b708750cdf16c509284c6a67fc37c8fa857f85db65225050\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-osx-x64.tar.gz\",\n            \"hash\": \"d1f76a39af4d516bb5670b2e38b0dd4775e7980a5b312c069cfe7016b567521c0a98608d550431337737cf6510f0be1f6ec74f0cdf30c948c0177a7543835d80\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-win-arm64.exe\",\n            \"hash\": \"c592cf5f43289998fdfa67a5093a210b500690c96287001af95a9d5db3e46dd0e24ff2fc088721737e5a154852a9b6afcf87e5b469e5a59fec6e580f5097d050\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-win-arm64.zip\",\n            \"hash\": \"4857834b27e5415ec05f0d2d7e49cba6b29719b7728918b6c423ee3cb358e1ed5ec4dedac6280ef047466a161894635b79853a175e9faec7f67c07782592674d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-win-x64.exe\",\n            \"hash\": \"1af05400790a7cfa04afdf67fe0229b9fb76832dcfb388c3b18ce5622d78ed642fc01de54a1e6537de217032cac6a50d4ebc9acfad69be3d06af6c17d9230b58\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-win-x64.zip\",\n            \"hash\": \"22435dd169488028feacf9edb6e115f2e9ce2b878161a89c1b30090f051ea02ba90cc466d126815d37059cd096a4b9b542486b2597f5faa248ffdbcd7fc4f2e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-win-x86.exe\",\n            \"hash\": \"ffd59f0585e4a2cbf9069878df83a6d600281062b2277d20262cda0c411ed8b60fb62b1120b6b574b2e26e56ef401a52888c65da80dac7ae7fc7025a0733903f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.7/dotnet-runtime-7.0.7-win-x86.zip\",\n            \"hash\": \"22364b123a4600138e115a16f7cb3aae46fdd9108cac528a9a99dc2330c108a3a863d7b4d524befab0db22503fe20b09e8d7af603d06e4d5b9fa173599252835\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.304\",\n        \"version-display\": \"7.0.304\",\n        \"runtime-version\": \"7.0.7\",\n        \"vs-version\": \"17.6.3\",\n        \"vs-mac-version\": \"17.6.3\",\n        \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-arm.tar.gz\",\n            \"hash\": \"11ea570d3d89ab947d38b362793dd2d59dca0d5d4acb3d7dc595cfe3dd158ffbf8c31d5a0b8ad21f2deac8fc0e95dff609d20120ff88feacae60d6503f3fa625\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-arm64.tar.gz\",\n            \"hash\": \"eedfa933039e749df49dc80bc5ccb6d46c2799ffff2f634924ccc699cdbb8e08c12507ccd4f5392fbd05838696e5a642843c2da04ee7bae80e4eab5195138f6d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-musl-arm.tar.gz\",\n            \"hash\": \"3639f899413811f987c95136e416ba5c069cf153423baffcc1ad62adfe79ed6358a6359ce9040e6e5f50128113865347cdd54cb3a09f6af7a8f8d6e85d9339f2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1a0ad920bc78e3ccbda580dba64a31d66570aeba91e2904cae54c474e809f7dd529dd58a2c990b3739aed796319cb0397359e39f8b41c1e33ffd6d456971a5fe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-musl-x64.tar.gz\",\n            \"hash\": \"33a5780184017a411436ca896188b92feaf7134e9f130431305a4d346298086bd123c23c14a2c42b8aed232d6f392132ce5de3ec1f56ddd29741475bcc601ee5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-x64.tar.gz\",\n            \"hash\": \"f4b7d0cde432bd37f445363b3937ad483e5006794886941e43124de051475925b3cd11313b73d2cae481ee9b8f131394df0873451f6088ffdbe73f150b1ed727\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-osx-arm64.pkg\",\n            \"hash\": \"75af8a3df4d92de265703c5a33a4763be791392ea7f3c5b185eddb7db029c4988278e31e796f063ad19ad1f29eb54ce8a145d3ec5119b2b6bf381c8e015260eb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-osx-arm64.tar.gz\",\n            \"hash\": \"c71bd602e964a9c000c2a7c336039497a41dee8355f37bcb687ab5d27391ce4affe5f1d520ef46f7ac52256d0695c8296f8146686f754af4f198ad54b92031ef\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-osx-x64.pkg\",\n            \"hash\": \"b49605f344bdad7395e6879213a5390b319c07742c210ba97e6780e424a3cf63a88c46f0b4c6604f0f95bd5eef6f29abcdf60aa7c6561072db76f499c6cc5aa0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-osx-x64.tar.gz\",\n            \"hash\": \"8ac32c684d9a9691eb2847db50638e7a7179d52882d8a364e8a7b9770fa57a2119141f3871c59556e386709c895ac7b580ae374a3a32fbc652d583d414b3e29f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-arm64.exe\",\n            \"hash\": \"81392fbde97d3d777bd3e39e200b3b3da416dee213690a185abe417d44b05700d2669c85b2455cbc12b2c2afc97dea82e4a6acd83e52ebb94ea84f1bc71f1d43\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-arm64.zip\",\n            \"hash\": \"a3df6bdec69c89f8dc4b34a1663b76ca2cbb956537cb245c6613941f1a9d412508d5a9bae819840a61ff891bac1fecdb663d9b03d56e1bb22c7c0e1589611158\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-x64.exe\",\n            \"hash\": \"648732c79f6276c37a92e211b4c5b6cf84a0a54637c0f85949ced96d31838b43a4dcae905ef70bafbc9edd3542400746fb1e00c4c84679713e97219493a45938\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-x64.zip\",\n            \"hash\": \"b6201eace40b18f7de2b8252e9c70b3f1ae9109ebcfdb5f853df06c0e7997256257775a024e5696656ba8096e152e833dab5afc28b08f3f68cfff8ae50451c3e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-x86.exe\",\n            \"hash\": \"617dc1e88d7d95848fedd65520113725db8f8965ef54a3cc5b314f2bf644787863753797880c5e6a48872b84f695e5893a8abfb8d13ff70183161958bfe63485\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-x86.zip\",\n            \"hash\": \"6fa0ca90dce04e5238b9ffa0586d97e94723753ccd22b04497fb449c72f67e14a3c7f9a1e7b1fdd85e6dbb9346945778824924610fc9cb3afeb9d745b1f874cb\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.304\",\n          \"version-display\": \"7.0.304\",\n          \"runtime-version\": \"7.0.7\",\n          \"vs-version\": \"17.6.3\",\n          \"vs-mac-version\": \"17.6.3\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-arm.tar.gz\",\n              \"hash\": \"11ea570d3d89ab947d38b362793dd2d59dca0d5d4acb3d7dc595cfe3dd158ffbf8c31d5a0b8ad21f2deac8fc0e95dff609d20120ff88feacae60d6503f3fa625\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-arm64.tar.gz\",\n              \"hash\": \"eedfa933039e749df49dc80bc5ccb6d46c2799ffff2f634924ccc699cdbb8e08c12507ccd4f5392fbd05838696e5a642843c2da04ee7bae80e4eab5195138f6d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-musl-arm.tar.gz\",\n              \"hash\": \"3639f899413811f987c95136e416ba5c069cf153423baffcc1ad62adfe79ed6358a6359ce9040e6e5f50128113865347cdd54cb3a09f6af7a8f8d6e85d9339f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1a0ad920bc78e3ccbda580dba64a31d66570aeba91e2904cae54c474e809f7dd529dd58a2c990b3739aed796319cb0397359e39f8b41c1e33ffd6d456971a5fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-musl-x64.tar.gz\",\n              \"hash\": \"33a5780184017a411436ca896188b92feaf7134e9f130431305a4d346298086bd123c23c14a2c42b8aed232d6f392132ce5de3ec1f56ddd29741475bcc601ee5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-linux-x64.tar.gz\",\n              \"hash\": \"f4b7d0cde432bd37f445363b3937ad483e5006794886941e43124de051475925b3cd11313b73d2cae481ee9b8f131394df0873451f6088ffdbe73f150b1ed727\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-osx-arm64.pkg\",\n              \"hash\": \"75af8a3df4d92de265703c5a33a4763be791392ea7f3c5b185eddb7db029c4988278e31e796f063ad19ad1f29eb54ce8a145d3ec5119b2b6bf381c8e015260eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-osx-arm64.tar.gz\",\n              \"hash\": \"c71bd602e964a9c000c2a7c336039497a41dee8355f37bcb687ab5d27391ce4affe5f1d520ef46f7ac52256d0695c8296f8146686f754af4f198ad54b92031ef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-osx-x64.pkg\",\n              \"hash\": \"b49605f344bdad7395e6879213a5390b319c07742c210ba97e6780e424a3cf63a88c46f0b4c6604f0f95bd5eef6f29abcdf60aa7c6561072db76f499c6cc5aa0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-osx-x64.tar.gz\",\n              \"hash\": \"8ac32c684d9a9691eb2847db50638e7a7179d52882d8a364e8a7b9770fa57a2119141f3871c59556e386709c895ac7b580ae374a3a32fbc652d583d414b3e29f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-arm64.exe\",\n              \"hash\": \"81392fbde97d3d777bd3e39e200b3b3da416dee213690a185abe417d44b05700d2669c85b2455cbc12b2c2afc97dea82e4a6acd83e52ebb94ea84f1bc71f1d43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-arm64.zip\",\n              \"hash\": \"a3df6bdec69c89f8dc4b34a1663b76ca2cbb956537cb245c6613941f1a9d412508d5a9bae819840a61ff891bac1fecdb663d9b03d56e1bb22c7c0e1589611158\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-x64.exe\",\n              \"hash\": \"648732c79f6276c37a92e211b4c5b6cf84a0a54637c0f85949ced96d31838b43a4dcae905ef70bafbc9edd3542400746fb1e00c4c84679713e97219493a45938\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-x64.zip\",\n              \"hash\": \"b6201eace40b18f7de2b8252e9c70b3f1ae9109ebcfdb5f853df06c0e7997256257775a024e5696656ba8096e152e833dab5afc28b08f3f68cfff8ae50451c3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-x86.exe\",\n              \"hash\": \"617dc1e88d7d95848fedd65520113725db8f8965ef54a3cc5b314f2bf644787863753797880c5e6a48872b84f695e5893a8abfb8d13ff70183161958bfe63485\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.304/dotnet-sdk-7.0.304-win-x86.zip\",\n              \"hash\": \"6fa0ca90dce04e5238b9ffa0586d97e94723753ccd22b04497fb449c72f67e14a3c7f9a1e7b1fdd85e6dbb9346945778824924610fc9cb3afeb9d745b1f874cb\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.107\",\n          \"version-display\": \"7.0.107\",\n          \"runtime-version\": \"7.0.7\",\n          \"vs-version\": \"17.4.8\",\n          \"vs-mac-version\": \"17.4.8\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-linux-arm.tar.gz\",\n              \"hash\": \"68086b364d4ef25b8fd2022bd566a2048e78538a1a9427087c909cd14da179e174f0240df18d974f2d14dfe16c1a061c1c9a24066708c61a3aa0f9923f9e8be2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-linux-arm64.tar.gz\",\n              \"hash\": \"e35655fb6244bb1e86998cb27849f35f621287aa348606bc980d0d4ac410aa66d50ebf4bd3c69bf9656d314c78c38f2d3661b8afa2d7d0b73637b7df5020fa18\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-linux-musl-arm.tar.gz\",\n              \"hash\": \"87c83f5ca798e51c59f9ce18e8faecad681671d3d12ebd90f5977c71c586fccf40015226d868907a9f8f78dfd8e98467a02f635df2a6319f6e0a4ef6a4b207c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3496b2850720423f14d8e88903e4d167a3d5e1044fe06e50ef597f7b51c7596a48e23b9bc3f2543eab776d324bdfcea3f1a13d037348d5da6d9516fa450dccb7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-linux-musl-x64.tar.gz\",\n              \"hash\": \"14cc9d6484fcb50d92ad9812ad939d1578b267985c58c7604a04b1c9cff916b38ddb57f96b4aa129777b9449630ccdede8330a2bc23778407233f99228160d86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-linux-x64.tar.gz\",\n              \"hash\": \"ca88563e6dd44278668bce06a4392ea8e717bb141021b55ab8b742c6fe776e7e962197c191a89d37c0caea884d170a0e9574681a5d9246ee0eefc851401c45cb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-osx-arm64.pkg\",\n              \"hash\": \"ea6eb4c98e8f41bd1b5d48d8e317acb4d86e2d2c6b451e741c6dbd21dce1ff7c57cb4f1642f8978dd1b9dc9bea9328af245a7a8c995a93116b50c405b8ef39bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-osx-arm64.tar.gz\",\n              \"hash\": \"dbe4a00312d4898f9bd415cd1096e96949aeb72bdef4dc3e70cc655062dd92818eb8edfb64c045b3dccb88cdd7414117d30e45309ba6c89471fda3682dd4596a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-osx-x64.pkg\",\n              \"hash\": \"348ba64bc0f1a44e7fc337e5096677ce7d8b925c4dc7140d6c859a46b42a006fa64836bc8bfc489ece774c57ac222084be3192af2d4ebe01608accb4b8bd95ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-osx-x64.tar.gz\",\n              \"hash\": \"13d047beea91609dcf9545f449cb924d810f7082eea4c70a98c9d1a3fbd5f2b38da5565a5e4ed5d8a0bf64b7b7fcdd9f0771cb36f19efce19c7ddcf3be4327b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-win-arm64.exe\",\n              \"hash\": \"0efee918435a18901fae491a8482df9ad8e87beab8553dcd699d88608965edb9caf0ef0cc1a74cb462ff09daf61ba50e34377dd4d4e975eb70751fdfd43ea5f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-win-arm64.zip\",\n              \"hash\": \"68e78c4d71e431049264e641c30c72932016a1e7ab815c550f62e54afe19f79f566f3186759bc5c0c210f3cf27d284b57fc117b916a7e783618cd7740226772b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-win-x64.exe\",\n              \"hash\": \"61f840c968f039f21a1d95b61990b2af1f42ce79f3b6403507431e06a387d76f01370db58fed7dfe4affebcea82c716a9f5d87012773c7404dbc587f88a095ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-win-x64.zip\",\n              \"hash\": \"f6066ddd95ad1edf55b8ec10230881871be517b7bbb5ecc77617f02c1f6302b82133dd867688ba214d7c32a035d6b785bd1bffca3f34368d8811d9582ce669da\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-win-x86.exe\",\n              \"hash\": \"cfac95de6113e5cc787726484655dc8d45aa5453c60077ef93b5c707ca49f2a43f4cf7e13e5fc0821462e7ff6a675d4cbd536527b4a584a99a38557d4c7ad5d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.107/dotnet-sdk-7.0.107-win-x86.zip\",\n              \"hash\": \"b79067476b85754c1f7166b1e4a19efc314408e1f1862bc75efd0e1c8d1c7d32e4647010911ca0670d96045782b80b63f432285f1aae7a10683a63e5116d8106\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.7\",\n        \"version-display\": \"7.0.7\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23144.7\"\n        ],\n        \"vs-version\": \"17.4.8\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-linux-arm.tar.gz\",\n            \"hash\": \"3d0216b153a74689d9ea1986b33e3747e62bf76a938769b913a32a7f6b9d83a0b520b125e9f2496fbf9c60a1fdf87a132a0961317cbcf3d406906a111ce832f2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-linux-arm64.tar.gz\",\n            \"hash\": \"814db12231db89d9935404ec6693b3fb50ad022c0affbc131d657878e194274f1af5e92dd32c2c4f2a78a7e38d0c18a46ba4ecc67630ca3adf5b7550367c2366\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"9d86e6815c55e9caf73e43f7576aff85e116fbbe4ebf600d95013616b623bfd8c49204d61e66a92c280cb578d78b99592fc0f3c8b43cd4d4a64f1cb2cb1a8d3c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2a1c5f92766d84fa0976de4434c7d828b0a98ca2c50e7cb672674dbc84f1626c855be1bb00d67e900d91485e6389317b478edd9f641f9350dc2726ab8fcb06d5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"78c363b47316727e92fd4d4a4d60778fe4833a619f0b3caa49a7aa26e70532558792ded79620d9bb8be6dab37afd39fb097723b6e6a311f1cc5c765c1f878891\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-linux-x64.tar.gz\",\n            \"hash\": \"e56ee9bc458214bce461e9688e5229ba5b69046ec38a27bfdb2b5413d4b41500cca40152d182793c2768318719d97980b62ae9724de75d6d02874c25e938374d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-osx-arm64.tar.gz\",\n            \"hash\": \"e6979ab34bea777f1f48bf9208a024b33b1685ec236f13c609975ebc7e1f641806b47daefb9ff1f74f675ee6242b628edd615982bc9c014d18e18cd2662171a8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-osx-x64.tar.gz\",\n            \"hash\": \"142fc2136112ba4397409a9eda67ba708611d5ac3d019bbb86733c89138d285d8bb2d02fd2bd3b2a027b76b6a7fb8369745ca1ee4740f046a9d0867c40271c38\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-win-arm64.zip\",\n            \"hash\": \"902488cbfee81dd5e1009eb86ab82d479ed7d9c44e4e4b6bb3df90a68eea65c0140978b02f46f9f6d0847466e1de73e9551688a79082e0679350a46276f441f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-win-x64.exe\",\n            \"hash\": \"942b9b3eb8a6a676fe0da097f7694de5bb7de27b16d2b32ace5e95250eb6587a3a2271480ab4b70d874960140eb4a016cb62eaf768ad2fedab3b0bdd89cbe0df\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-win-x64.zip\",\n            \"hash\": \"e9966377d5aa3887b7cb88328e6e60f2c5f1d2a434bf16d6d23018ae65dd76a152b98fd9865b886035ba0c57e1b9526d5c641a3c11d49a37c4a902a59f688f65\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-win-x86.exe\",\n            \"hash\": \"f6329de5bd21932df7c101dddcf70e54df6e4d4872e4b3712e5f7c9d77834d1455ca746ca27faf2e4c9287e782986d1e68a4bf83136d875b6d1941ad815382ef\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/aspnetcore-runtime-7.0.7-win-x86.zip\",\n            \"hash\": \"572d085e53f26f78581fe3f51d73411cd5ccd39ba8da0d96795ffa48de21f19380fc86ef3916672eb0c50f7b7305827746b63515885eeb8308c374766766edab\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.7/dotnet-hosting-7.0.7-win.exe\",\n            \"hash\": \"647a814a7d3483596a822f4fee7e4f58795c86847524dd00a71e00aef28fba8aa5530e917f3c1d16f995f526f52a9e47bb2fb0a1614a09d8b307974de5fe812a\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.7\",\n        \"version-display\": \"7.0.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.7/windowsdesktop-runtime-7.0.7-win-arm64.exe\",\n            \"hash\": \"9d9a2f86decc349776da0fae1dee02c3a265e64356d6b205c1883f1095c72636449059fd53bf016737f23603267d4670c78d206f32e7063a8a28495626c460b1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.7/windowsdesktop-runtime-7.0.7-win-arm64.zip\",\n            \"hash\": \"9cd1181e7b9c316dbe1be19d8809ab4e099ea182092019462094130e53288119868287c098a6949efd054379ad7fca4de8a653c32d68f317c8364fca14c45f19\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.7/windowsdesktop-runtime-7.0.7-win-x64.exe\",\n            \"hash\": \"d59e8716324bd8973a95a9fd42a58ad0b176f4b37e8b8ba732be0e13d6f7ffdea79a52aa98363ec86860d551e124bdfaf71ac979b8f41f398e668fd12aa8483e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.7/windowsdesktop-runtime-7.0.7-win-x64.zip\",\n            \"hash\": \"cf4f1aafaebe03e607def7a499ae2e34873a7ec530fb90c98b6ddcbaa9705ff9ddec585d7967421be3f514f1de2d4d867dad6c7b1bd1c7114107230fef8f7c43\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.7/windowsdesktop-runtime-7.0.7-win-x86.exe\",\n            \"hash\": \"c219b72b5d628668a70531e8ce0776c2e4533d79f33cae581b29617050013bae75cc7d967def064eee8625dc141209e8c0ab53b2262a5c7815e7e2c5898c96a8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.7/windowsdesktop-runtime-7.0.7-win-x86.zip\",\n            \"hash\": \"d28e5e86aee301682cc5ce6e2e421324b6bd65072756b47a82721fdc5d6221208265c77c66c59e34f382e7302355499e6428b14346266ceba5b7318967fec5e5\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-04-11\",\n      \"release-version\": \"7.0.5\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-28260\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-28260\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.5/7.0.5.md\",\n      \"runtime\": {\n        \"version\": \"7.0.5\",\n        \"version-display\": \"7.0.5\",\n        \"vs-version\": \"17.5.4, 17.4.7\",\n        \"vs-mac-version\": \"17.4.7\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-linux-arm.tar.gz\",\n            \"hash\": \"34afeebf2d6fc2b8bd381578449ea088bf8adb5619686c82d7825171c0a9f66242882c21435579628ae859f060c5adb035bf0ebd0528b8421aef2f7534a1cb6d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"983b8123db0ecddee10c00c455c740e24793c3a7d1d400722cbc6183ca9a8916404d81dde07e43b9a6b1ea6ea160055b871845a789117ddc023eb07f3685f4cd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"082d24b8e7ad015a04ef3bc0c1556eaef588c5952acb768d9c8292bae42e1a9bb777136e126dcf6f34d4025d7b2af291ebfd5c7b7d821b1f426ce4524b3137cd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"77871fef3a4d7c03c12bacfc7d6dbc17586233a72d874a9f850184262d986dbd270521ebf254c1d96dfd5d275b2c96cc45f7ec28e1ec5116f90eca80550b85b2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"f853175cf9818d71f575762960319bf79d1a35bca7518de4594e8a9468ad8572328e2412eda091d989083b70001fc9b65d478314a58d67f0aa57a5da60e86fbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-linux-x64.tar.gz\",\n            \"hash\": \"68014bdbf55bf455f59549c7d9d61ccc051e09fe74a975ca6b46d3269278d77c9cd167ba05760aef8ab413df4212f4f5cebdd1533779b49caf517eb4ec50cce5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-osx-arm64.pkg\",\n            \"hash\": \"a6fe3119f8e7a7624f7dbcf5f7b267f9a234b65462d0dd4df0b762b1c0cca1289d01fb870019af1af6e238f41ef9902ee2978ff8e88f1facd2ebcb31b9fe9dff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-osx-arm64.tar.gz\",\n            \"hash\": \"2bbf02e8001b700cf6badcabedad148a3b799ad0404b2e1e17bf80eca5eaa7a7939df135898f2aa5ebe7892f09d6fa7840118d3f360c2f4aacceb2cd8067c15d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-osx-x64.pkg\",\n            \"hash\": \"db1cc19b3c839ed542c4ebb46563cdf1670da0714eebfd36efe910c5656d3af59ef439f844c4a33e00855eefffd5d4c1434a5bcd74ea04d39867dca22ecf4afc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-osx-x64.tar.gz\",\n            \"hash\": \"4053c79ef80dae8f8ae1958215def910490b3c754ef088f02c81263c790eb8658f1845de916827755d62af37c6d090d59c9a2219c961a29b469a7bed74ba950a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-win-arm64.exe\",\n            \"hash\": \"1a0175cff3aa36a8babf82aac627f270cc188e52f749485ecdcc22b064d56eb264beb8886a161234c87f36e431090df69117a3804417e170443f2b36a2325102\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-win-arm64.zip\",\n            \"hash\": \"89fb5acc88d2b0ee53929e42c7d45cb58938d05c0908ce3770d921f87e85450df4a83cff8f19a9b1d1df7b0b10e4d65abf48d0cce0fb4025c3b62943ab22815f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-win-x64.exe\",\n            \"hash\": \"8334857953169d90b44bd6728dbead7954aa740db5ed8c5ef73a2fbbe1ae45a15a59c25161afd61fdf61a959becc5346e2e4853b73a589f7ebc2b6a8d24d7676\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-win-x64.zip\",\n            \"hash\": \"3a11bf5866f78df6190a7886235461d31eb5924d5abf43631ee58325efe0ec5a7a6f63ee53a3a322fcec605e9fe525c9e9b1bdc3ba9358aa7c76b8ce9a5122fc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-win-x86.exe\",\n            \"hash\": \"9837f453e7c4e8e8f628fa72e7a6bc3d7dccf51bdd4418453c34fea0c911799bcd5917f9e59e06949f58d693894f4e50d71d0cee48ebce7bd79f0bd3b22d9d62\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.5/dotnet-runtime-7.0.5-win-x86.zip\",\n            \"hash\": \"1dba5c83dacfba3f4830a2e238bbab60f79118c36ba9db9c2e67076d7515ae223b7773f43628f89ba0392a6d0d851fa9eb818cacb6da53aca8b1632fc7b08f83\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.302\",\n        \"version-display\": \"7.0.302\",\n        \"runtime-version\": \"7.0.5\",\n        \"vs-version\": \"17.6.0\",\n        \"vs-mac-version\": \"17.6.0\",\n        \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-arm.tar.gz\",\n            \"hash\": \"f47a0bbdce4aca0fcbde09019def5eb017dddbb6d85555e1513e72bca876e1f73a44fe633d5217bdae1c9a53d12054294116d28bfb22331b22cf6d6446f6c119\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-arm64.tar.gz\",\n            \"hash\": \"7f6372faa348c84560e3f1139605dc08d888b14b98c400724f628b52156fe31c20a50dc2a2f8673e29239d04ef06744e16c6f8bd8eb1756f99274c73eda74621\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-musl-arm.tar.gz\",\n            \"hash\": \"2f1df7b51d5f072f66ff6f0cb738e3f4d0478227470f10d5c6c8d46e424185ccbd0d70d81f3ecabdc9ce1d6b74069b6d30547918234b98aafdec05561e3d03f1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9c2814f59c91cea6c4c649e3c064de6123389fab9f44cac9d3d037c9229bbe949edb7d71c8aa49fdf1a3646866be1ae39809b3dd91db7134ff02bd4d459c253c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-musl-x64.tar.gz\",\n            \"hash\": \"e05fc1053bf668df6619d68ce6c909d87a42c37175fa5b2298cde6746353545dfd81eaee177019de08e41e9f52ad65d01f07cab8eaf3e2bf4cd20b460fe0b72f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-x64.tar.gz\",\n            \"hash\": \"9387bd804ed980ba1bc33093598ddbafa3a761e07d28916c94442cc329533d78a03bfc59d3066a1a861244302414e7e658b4e721b5bc825f623f8f908e748b7e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-osx-arm64.pkg\",\n            \"hash\": \"93a954243b7c8639d8166be128a4fa2c53664df399f62c299cf24a2772f489dcf0ee3928551db746652001677774613bec263ed978d0ac7929ba05d55de6c1ab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-osx-arm64.tar.gz\",\n            \"hash\": \"28cc5fcc9651fc75f9b2f864672e5fdaead28feb262696c305d00a71c828004e46f0b9b4a6bb6b21b9ea475b1c601e1724df302eea4d63f604e4fcdc9c97dd63\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-osx-x64.pkg\",\n            \"hash\": \"f092ce6aa22f70aa4b20de22a2a17cd97a541b6f01720cc6dacbc95ebf8f3daac5c156fbe9684dad4a9001b75c405069081c28f1d4fd4e166f941c0e6ba0f7f1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-osx-x64.tar.gz\",\n            \"hash\": \"cafb8e2839a8c91f58e8bda519d27f622a7a4062aea9247d743d64a3de3acad6ddd4f80d011fd416a3e3622f0ece8cd2e70e65f48331ae321b5ff23d282787b3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-arm64.exe\",\n            \"hash\": \"cb086200714619f76060a86020aebeda90431fd61cb4ccf7b7be2a97b7b8c5ce55cb9fd61e522ab6d525e41abd949973aab5ce0c2983ebe5b048a2befa0aca75\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-arm64.zip\",\n            \"hash\": \"ea9d95f752eea1c180c9d09ec7412880a1d2b069cd46f93bb5ee26ecc4632d151f3ace78435d4b2dcbde9f3562b7a55121be02832eaf4ed7ef3041d672f709bd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-x64.exe\",\n            \"hash\": \"347e362879ef7e672212142c1c54c4c75b6d51aa2e0471be7b90927544fe40e7204dd787d59cfaa35ebdd9bd4d5151bbe44fe80d37fdeb31919d42de12397983\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-x64.zip\",\n            \"hash\": \"6cadc278b4bc980796d255062d0e2f786e82cde8f5ca591b81727b2a808496ea0abad73f0263fc80f9f946235e9aa6fd42640b4908aa39a92299c713f159abe9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-x86.exe\",\n            \"hash\": \"5d3128cfd346d008461cd5e9450dc76aaa8ed1a31061b3a4f658baa846b603ad9cf66b783336d6664fdf2f78c2d9b4913ed62aabd0df725ed97f6c90a7e14bde\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-x86.zip\",\n            \"hash\": \"e212ab4530a95067d2a68708aa14174a535598d0a5eb4f572a56ba05d608f32cd6d5570f767b845a8eb0faab942f54aeead5c1486fd1e1606ce92440a8f998fb\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.302\",\n          \"version-display\": \"7.0.302\",\n          \"runtime-version\": \"7.0.5\",\n          \"vs-version\": \"17.6.0\",\n          \"vs-mac-version\": \"17.6.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.6)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-arm.tar.gz\",\n              \"hash\": \"f47a0bbdce4aca0fcbde09019def5eb017dddbb6d85555e1513e72bca876e1f73a44fe633d5217bdae1c9a53d12054294116d28bfb22331b22cf6d6446f6c119\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-arm64.tar.gz\",\n              \"hash\": \"7f6372faa348c84560e3f1139605dc08d888b14b98c400724f628b52156fe31c20a50dc2a2f8673e29239d04ef06744e16c6f8bd8eb1756f99274c73eda74621\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-musl-arm.tar.gz\",\n              \"hash\": \"2f1df7b51d5f072f66ff6f0cb738e3f4d0478227470f10d5c6c8d46e424185ccbd0d70d81f3ecabdc9ce1d6b74069b6d30547918234b98aafdec05561e3d03f1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-musl-arm64.tar.gz\",\n              \"hash\": \"9c2814f59c91cea6c4c649e3c064de6123389fab9f44cac9d3d037c9229bbe949edb7d71c8aa49fdf1a3646866be1ae39809b3dd91db7134ff02bd4d459c253c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-musl-x64.tar.gz\",\n              \"hash\": \"e05fc1053bf668df6619d68ce6c909d87a42c37175fa5b2298cde6746353545dfd81eaee177019de08e41e9f52ad65d01f07cab8eaf3e2bf4cd20b460fe0b72f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-linux-x64.tar.gz\",\n              \"hash\": \"9387bd804ed980ba1bc33093598ddbafa3a761e07d28916c94442cc329533d78a03bfc59d3066a1a861244302414e7e658b4e721b5bc825f623f8f908e748b7e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-osx-arm64.pkg\",\n              \"hash\": \"93a954243b7c8639d8166be128a4fa2c53664df399f62c299cf24a2772f489dcf0ee3928551db746652001677774613bec263ed978d0ac7929ba05d55de6c1ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-osx-arm64.tar.gz\",\n              \"hash\": \"28cc5fcc9651fc75f9b2f864672e5fdaead28feb262696c305d00a71c828004e46f0b9b4a6bb6b21b9ea475b1c601e1724df302eea4d63f604e4fcdc9c97dd63\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-osx-x64.pkg\",\n              \"hash\": \"f092ce6aa22f70aa4b20de22a2a17cd97a541b6f01720cc6dacbc95ebf8f3daac5c156fbe9684dad4a9001b75c405069081c28f1d4fd4e166f941c0e6ba0f7f1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-osx-x64.tar.gz\",\n              \"hash\": \"cafb8e2839a8c91f58e8bda519d27f622a7a4062aea9247d743d64a3de3acad6ddd4f80d011fd416a3e3622f0ece8cd2e70e65f48331ae321b5ff23d282787b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-arm64.exe\",\n              \"hash\": \"cb086200714619f76060a86020aebeda90431fd61cb4ccf7b7be2a97b7b8c5ce55cb9fd61e522ab6d525e41abd949973aab5ce0c2983ebe5b048a2befa0aca75\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-arm64.zip\",\n              \"hash\": \"ea9d95f752eea1c180c9d09ec7412880a1d2b069cd46f93bb5ee26ecc4632d151f3ace78435d4b2dcbde9f3562b7a55121be02832eaf4ed7ef3041d672f709bd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-x64.exe\",\n              \"hash\": \"347e362879ef7e672212142c1c54c4c75b6d51aa2e0471be7b90927544fe40e7204dd787d59cfaa35ebdd9bd4d5151bbe44fe80d37fdeb31919d42de12397983\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-x64.zip\",\n              \"hash\": \"6cadc278b4bc980796d255062d0e2f786e82cde8f5ca591b81727b2a808496ea0abad73f0263fc80f9f946235e9aa6fd42640b4908aa39a92299c713f159abe9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-x86.exe\",\n              \"hash\": \"5d3128cfd346d008461cd5e9450dc76aaa8ed1a31061b3a4f658baa846b603ad9cf66b783336d6664fdf2f78c2d9b4913ed62aabd0df725ed97f6c90a7e14bde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.302/dotnet-sdk-7.0.302-win-x86.zip\",\n              \"hash\": \"e212ab4530a95067d2a68708aa14174a535598d0a5eb4f572a56ba05d608f32cd6d5570f767b845a8eb0faab942f54aeead5c1486fd1e1606ce92440a8f998fb\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.203\",\n          \"version-display\": \"7.0.203\",\n          \"runtime-version\": \"7.0.5\",\n          \"vs-version\": \"17.5.4\",\n          \"vs-mac-version\": \"17.5.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.5)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.5)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-linux-arm.tar.gz\",\n              \"hash\": \"9617060ed134d70a561ec8439748a09d54e67dab46c5f362dc749b37fee9324de50a2f8990b5b3745a1b6caa54578580afe7ca8791f276e8e72aeb21ff4abf27\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-linux-arm64.tar.gz\",\n              \"hash\": \"f5e1b5a63b51af664b852435fc5631ff3fbeafbfac9f34c025da016218b0e6fb9a24e816035a44f4b4a16f28bc696821b1aa6f181966754318bc45cde7f439bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-linux-musl-arm.tar.gz\",\n              \"hash\": \"b391d6d8ae2411450ac3d4b3ba7a8a402b95403d9c9a9f227dd504492fac7311405181f4aeda05390149e5c2363bf0a86d526d7ff89feac165c97e9d8ef39327\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ad94a557cb7a319e641ba09f3ee63dce74cae3ae668011c009b7a004b1b28001942ae4c7a82fe80ba2467f5ac44731bff81a1edd422c0aaaf95d7206b715dcbf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-linux-musl-x64.tar.gz\",\n              \"hash\": \"0d7bbf8f8e517aa4530d2bc590978394f0fd568a866b6369ab349aaf43412f820391ee3bb99d3f5b7f149bc7dfc1baff7658d928caa931e37c69e149d3667741\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-linux-x64.tar.gz\",\n              \"hash\": \"ed1ae7cd88591ec52e1515c4a25d9a832eca29e8a0889549fea35a320e6e356e3806a17289f71fc0b04c36b006ae74446c53771d976c170fcbe5977ac7db1cb6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-osx-arm64.pkg\",\n              \"hash\": \"093bad46eff19a96bfbf9a8af60d22d40a5562048257a7460e88c4239d9bb529935f84ac2142ffb087e156af852205a87084bd3e7f085f31affd3fb72f380058\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-osx-arm64.tar.gz\",\n              \"hash\": \"e41de76f6be00de587cedaed2b0c6e2c2871b2ebf03c89375b4c69cd3fdd14df0dc49b5fe83970868a25d14aa19deafbfe66ee6790383b77f7da3d8dea939664\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-osx-x64.pkg\",\n              \"hash\": \"1da8e2c4cec652d3528ec008db6fdb0514500233b119b1c1a9d8eb71257f17bc14d3ea390bf45f2875c2b9ed7653090fac46b1f7a807632a8a07fa42bc980354\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-osx-x64.tar.gz\",\n              \"hash\": \"a69ec597bc5b0a59ccfc9cc63c4883037eb9293600e98ea420c879242ec6c3fae6a81a3a08bf7d5d2ab93f750debffb224ad5628c9abd53bc44cfcb02ca77136\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-win-arm64.exe\",\n              \"hash\": \"f48c72dfb05488b4a86e05e47da7b11ec683321d3d124bb87045fd02a02b538ee662fbd588fa8f824be6068c8979d842e115e184febba420feebe54cd5719dff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-win-arm64.zip\",\n              \"hash\": \"20cd360a7b914959757a21c3140092a78718622e7e88daa61cabd8d04176f827e3b93e0642e4dee497c790695d0c8e27ef7a07ffa311dce2951c702cc38676b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-win-x64.exe\",\n              \"hash\": \"b2c09ba8454da835304075760c4f355ee1e394c47402800695c75e2da964c5dcd0bb70c1f0c5c67c425369d7fdc9eb060a3936ea755a140342ba12ea47d7cd8b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-win-x64.zip\",\n              \"hash\": \"d675c05c6a30fcc2d5512f37e56fda19ee5e0d22de3b2c410c7bee58d3e565a2c87af7ee522c17a51b0f8562de6610831b7f89c1d22586e8be475855b3a060e5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-win-x86.exe\",\n              \"hash\": \"8e6defc8ad73be03c28121656a7bb8b4d8fdee93e12916ff3ddf03518d1e142a42750ed3ac49a15ec0c5f5c48f9c9362648624a14e12e8a53b127bba8d5705fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.203/dotnet-sdk-7.0.203-win-x86.zip\",\n              \"hash\": \"0bbd156db6337629e100218ffe6c9a12633a5fbbcbd02b4283fa29eaae9c293b05a57d5ac7a44c6317e3ef0ea35730c9fc101d054be8d713f676ed5006817118\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.105\",\n          \"version-display\": \"7.0.105\",\n          \"runtime-version\": \"7.0.5\",\n          \"vs-version\": \"17.4.7\",\n          \"vs-mac-version\": \"17.4.7\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-linux-arm.tar.gz\",\n              \"hash\": \"21a34dfb031ffc667f37b491ede6e9e4dce1cf5e83663174270af72245e8e9a5dde4483864253f4fb48dd36ef546e93f4651f31a82a4e7310b8dd1b02afb25de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-linux-arm64.tar.gz\",\n              \"hash\": \"3b401a4416b5b5a6ad90a9fdf7591a00f7f2b27cd960821dc1445b0a17c1c6ca08a92497d48f20ceae788f04f64cbe4416847fd98ab694faef21a9d22c475f9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-linux-musl-arm.tar.gz\",\n              \"hash\": \"9ffa724ccc02dc3e40afe22f0546a9bdf68b6314cf6da03d9387fb010fe3e5935154a5c06c4a2d588ff4ac77f34120a4ae9bc0237fb24452d78e6698435acf72\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c8120c20939232b53a3cdc607d812d93fadd6dea9466f9454df559f8b7eb334c69fdfd31bc60e4c70b6cf4fc519a25a0439902b04cf5c5bd0c29de020024fbe2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-linux-musl-x64.tar.gz\",\n              \"hash\": \"8fb7d1754359e3fda35b7a07e13d2a5e9e723196b980dd922b30919aedaddbedd4d82e28b37471437b69cb93e4b1d136ac701e221924e44d0be6b6ba94dc3654\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-linux-x64.tar.gz\",\n              \"hash\": \"704c54efca6c4e40b93e31d92b9116407c5ff557b7f04d974df90dd56041282b26073f32719e99cb2afd29cdbf251b3fa7f05d52335f37fc1624c703005a2d3b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-osx-arm64.pkg\",\n              \"hash\": \"5ea2d251e293f623b2cbccd063f5c8c12ff9de9e7d93681f9788dabd80457fc1afce0ce251437b2b3f1ef9f422481cd157f70308df0753972c615a7bbd8cd021\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-osx-arm64.tar.gz\",\n              \"hash\": \"555691ce8ee49cb6566cca79fbd43e47ad7e557f35215544a51a1a76aef625711f572dd9f5dec622116113207a9f473f54fd07248661359ea65aea51e4d2fcf3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-osx-x64.pkg\",\n              \"hash\": \"f406aa26174de874658b21228a397018ccae83406a63901febd8bc0c6641a3347a069ef7e14ec8584ecebe6f03ac8f09cb7e209eef782a584d9e57d865222a13\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-osx-x64.tar.gz\",\n              \"hash\": \"8701327bb2fc729b5ae9571129fcff74a3ea7133ea2822f6e793fa4c5f0fe9ca00b7025b68039e53d67fa8d244918ca52e6580d641d7e500e68c85083bd152d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-win-arm64.exe\",\n              \"hash\": \"916c4c23d721ddf870e831b72e53ee28fb882c1d5cff83f00ad342421082e111feb711d5b0c000c7d9e0ae149c70975c2f5dd77fc5bf4770633050888e117f88\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-win-arm64.zip\",\n              \"hash\": \"13bb40127f46174d31e3c0f7505abb020785848d12815f2513ff224488cdc2d9705fbeb36b6536193ea66fa5e7ba34dc7f24b83a456e74392e3808b9ec0dabe8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-win-x64.exe\",\n              \"hash\": \"f3a26982239f5d65d3214814618fc374a4aa6edf178b01da351c82317442cb5e0616730836edaf5a3c0c258233c8bfd100092318bb38624bb507d02c5006430a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-win-x64.zip\",\n              \"hash\": \"3cbc3f3ef1518ff910a42ee31d952fdd011921cdaafcc5bd315cd9897d3f2f3a7c872f537a91dd1cc9038387c28603497560e51b42585004030cab2effa43d3d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-win-x86.exe\",\n              \"hash\": \"ca95eb8ddf5e1e71ef5719af11e5935aa8df60a0ed4c1b9bbc63fc4b7ecca56bab2cd0adc081bb7b60032303becd4c464208f55a4b1740fc53982e280106784a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.105/dotnet-sdk-7.0.105-win-x86.zip\",\n              \"hash\": \"4d89aae9d51f904e1f366cd3149270907fc92707dc03e6f1dcf957d001932efb498f4b7aec3c12203765fd8d475e3fd2073dd1a8e4503368e7049c4d0c1c4b0d\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.5\",\n        \"version-display\": \"7.0.5\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23084.5\"\n        ],\n        \"vs-version\": \"17.4.7\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-linux-arm.tar.gz\",\n            \"hash\": \"973ac412ae17e50385d8e18e1b9e307dfcd7fb19f6da8d1ab6b959596093b6a46caade82be81d9c81069c86d78e1690c9418029403b2a70a436a00d7fbf1fa6e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"2c35feac6e8a55185767714eca52912bafe5c6255cc0eb0b93aa245255e405ad1076ae018b7a3cd845b159bc2d87d950ebf5305dd52b1215adbb35ea9cfcf551\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"43a168a0e6f3c4386bdf6e1b002903de1d38e97ba1e2cf580c49f6d280e15edee91efa8fa2ccb0be468bbdfd17046519322fa3f34032b5bbe1c26d231fb79e69\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3aba51e65739677db4e9e2735d78ba814022bc514d467e27c45775f9f6847c91804a798a9dffe550c3fccc4ce972266e0981a220f227414c9b45b79da0cc3c52\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"77bcbc7230779d741f5a18199f18e4eda1b21d3034eb5ab37b20eeb40c4e15ee7556f2ffd4d512be05c3c063095e3e2e2c46d1f2758bd3f29082a6b40ce88f24\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-linux-x64.tar.gz\",\n            \"hash\": \"859d48d0f29e014d56e89161d8001f75b3b0b03ee04f86641066570cfbe267b06798232500a86fd7bc31edf022097278dfeb496874778fead4476863aa994928\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-osx-arm64.tar.gz\",\n            \"hash\": \"855ae3cad226fe4429073a54825ebadf2c3bff84ef811d602f4d4f259663d6648b7b0d3e1683e50ec5caf82417ffab47599a928cb635f2149661731cf27ff698\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-osx-x64.tar.gz\",\n            \"hash\": \"69c473ec116de84bd5cfc27972890f545952a83deae1c3d298152a2dac892f1a70b0a3e10269bbd332fa8d95f2616052f07597adf9279a0d2d2ffad7382602b2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-win-arm64.zip\",\n            \"hash\": \"fda8628bbfd178abef246fe09398775ea25c064bf6c11f4f41bb5eb420726fdb92a4207c694410585cbc58efc13d5c6d11b9aa486fd106389fffbfcbb9f0df2e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-win-x64.exe\",\n            \"hash\": \"2f62d0033f89473e8fd22b5134fa8a26163b0d66dd9256cfd0ed8ef1eb0ef6e72bbe107e64491c50c322c738ffafa92fdbaedc5f2f3261ba3bfb2060c8261ab0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-win-x64.zip\",\n            \"hash\": \"101964c1789cca6f4f5209092294c76bc0a9afe6ed2fbebdfeb07b768475500fd36b65e3ab0cbfbd252933e318985ed9ec994efbfeb011a37245497c8e275636\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-win-x86.exe\",\n            \"hash\": \"ade0aa076e5a87387c1a181859c2cc92cfb440d9db7b75613414afc209e8f107d16a02d574284f417df0899ce4f3ee9227fae0a7e2365d36fe09d88a7fdba44f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/aspnetcore-runtime-7.0.5-win-x86.zip\",\n            \"hash\": \"b2317339a1c05d776363ea27869242fe070b5adc0ab92f88207cd7245cad7d755dd9ff0cc108c9f63be78877dc09dd9f0e65964170bd167280a7d062e9a58a9c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.5/dotnet-hosting-7.0.5-win.exe\",\n            \"hash\": \"b4fb11e0027c295ab879a0db8b3bd34069a0f351fe1968c2fab2f6fba6886f4b33b847f0aca52b7dfe548538105cdf9d83f15b1f8a5e8b194c9448340a09c768\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.5\",\n        \"version-display\": \"7.0.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.5/windowsdesktop-runtime-7.0.5-win-arm64.exe\",\n            \"hash\": \"46426250a93615b531d0dcfbef9c98747bdfa6b31a773e6efe640a30d063efd51f880fb80879ed2a9339588854402ea172952b5318a0810f038eab208aa4905d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.5/windowsdesktop-runtime-7.0.5-win-arm64.zip\",\n            \"hash\": \"fb394e909b7f2690806f222a1fa343429a95f8f08665b739562c03011910fb10a204d57af3d43d24d2eb30c7e8ab46893ed69b8afd2f6da1b1d47b7c98308414\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.5/windowsdesktop-runtime-7.0.5-win-x64.exe\",\n            \"hash\": \"8907aa0e934a31c63f0a840bf9e734c2f5ba109b766c1a775f8adbb169049753664790c0a15b216f02a942392819a3500e4a33918df10fb967341dc167f82d11\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.5/windowsdesktop-runtime-7.0.5-win-x64.zip\",\n            \"hash\": \"237c0e5e4985aa0831b70d5fb074b986e09c2e536c34d9711cf8223ce3020fa2ad10788694f694f32297c4d39527a30ebd6e22ba92549e058a1c38faaa3cf92a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.5/windowsdesktop-runtime-7.0.5-win-x86.exe\",\n            \"hash\": \"a2f776cfabcfbd4b9278198301d289ed1c56febd47259520c50b8b8d130a79d0ea99c857aec96865cc635ddf078fd575368c030ce11d61bb9991d296df87a4a7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.5/windowsdesktop-runtime-7.0.5-win-x86.zip\",\n            \"hash\": \"91c72f3a5fb0f980f6987590629269f2280fa890744f514e6c5c9ed0e1edec290a75d1ca17eee62e47ba495a3ab2cf00ecd06d0dd7a8e274dc6180745dbc0064\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-03-14\",\n      \"release-version\": \"7.0.4\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.4/7.0.4.md\",\n      \"runtime\": {\n        \"version\": \"7.0.4\",\n        \"version-display\": \"7.0.4\",\n        \"vs-version\": \"17.5.2, 17.4.6\",\n        \"vs-mac-version\": \"17.4.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-linux-arm.tar.gz\",\n            \"hash\": \"4d1774ea5e9423b8ed7ec923d8155c1ba4ac7c4cffa5b21f10b9473f4a64471bb31692a33f3e5300ff32015e2117bb0601cfe4767389b2ef87ca58acd76bb728\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"2726dc5a0b7b97c0e1ad22990b31133a1af46cb62d625778a9864a0047462d12ef705eebe08e73514bd10af50c06b5c9714df070f29c5203cf1c2587645d84ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"4935aa87fe9677635224daac61e039abd8d62c13b78d79faf9b614686f37fd0a856f6e3e047955d0fb7198c617d582092b4f4f8d4d1e27fef41dc29d9a1dc565\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fdd897edddeaa3c3b11f9b8db449cba8157f14450bf2eefcad6cff7e71ecf13b6248aa343a680384b9708091deb9ab4722a78bd4aacdb6e219d2a9a40a4aec1a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"bdbde59fe535f450e34a323c42c5e7f404cd607969aa01a939895a23ec99778badbf653678f158232c3d9628c5278361a3e322b5662fc597917402227078da01\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-linux-x64.tar.gz\",\n            \"hash\": \"23e6aa3714410d794bd25af781046757003e3326cb8b13dc256649011815038893718b44ec2162767c7da76f1e16b170656d5726e7c01e99b9577682ecfe281e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-osx-arm64.pkg\",\n            \"hash\": \"9ec241941959e960b459260b2736d77fb651767a9cfafad9680d808e5ec4c969a46b2c99e511e35cf5176ca05abb6dccb19f3401090ddea00deb6a1149070af2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-osx-arm64.tar.gz\",\n            \"hash\": \"4451ef94395eba2dfdc1af4b43f619d58fdfdd444fb122ddf1666d6f9002d792a52c52f64940433797920fde680b999095872edc1233c5721994c2092978cc85\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-osx-x64.pkg\",\n            \"hash\": \"46c0f0ea4317bc27dbd48801fe97de741ca075380e5572a37e2d6fa3448e2d33c4579f078ba41ffe18df49ac40bb99aa9087d4459757a72103f3cc814841d377\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-osx-x64.tar.gz\",\n            \"hash\": \"3042f6c711da88a669c92101ad3f6bd008e475230d68802f52b2748a8db6eecfd2af40665669a3d846910bcaf63ea27277f6a33bb76ec6fb3e256320e2f6dbf0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-win-arm64.exe\",\n            \"hash\": \"5f26e8e1dad5ac942c122627e0cbf2735fb4d8af8d91362f1b83518dccd34f1baec5973125111f3e4c8273707ea04ad4ef76e841ed0612ad099dfc945cda7288\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-win-arm64.zip\",\n            \"hash\": \"da0a1a707d79280d78f423e2bfced4e47142165fc8514bc89a48ef8c21c4f4bce0f7d517f357fa0833576d36276453eef1fbbce2c034b81ecaaf23b01c38ff4f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-win-x64.exe\",\n            \"hash\": \"f05521c5b11f57c4d32468c70e85b2c8246ed27dddd9d1fab71079ba6e046ecb5d5917b762909cbaa50e334a937b9c027a09f6cfc8cdd8ce5f5ba1a975d5b46a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-win-x64.zip\",\n            \"hash\": \"5ab410f3744fd2ad593f5fe33a0dfa9f987f93491482efda9eca1b784e0ca131b8f41e9e98d1ec28d3326a37690c5455ab31a5ef2d74ddc1e5e403ab48120bfa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-win-x86.exe\",\n            \"hash\": \"f794ec3df9346e1874008276b5a9e414152ad45670793d6303d362bc9eb78060ca4cbc4fd63ef5cbba30e5312e60c838bbf23ddb2834ab116dff526a94405391\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.4/dotnet-runtime-7.0.4-win-x86.zip\",\n            \"hash\": \"040552570900941c934c42427a35ea960b7a0a4ff1831847d70e759bc6b540995f2b321abc639dc6d1a2320f3abefb906417e81f5a40eb4c406c5890d9535896\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.202\",\n        \"version-display\": \"7.0.202\",\n        \"runtime-version\": \"7.0.4\",\n        \"vs-version\": \"17.5.2\",\n        \"vs-mac-version\": \"17.5.2\",\n        \"vs-support\": \"Visual Studio 2022 (v17.5)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.5)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-arm.tar.gz\",\n            \"hash\": \"242c3b93b6ca39e89a7f30f0c29d71294200a2eb14a95bd3f017ed0cb83f3c5ecc6a0d0b0ffab3687d1f925419619a8508f96d1262bd522f6c876a75d929e88a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-arm64.tar.gz\",\n            \"hash\": \"6f03de4ef1d0f67bcf8f794beea1a1497c9b1d31c484675382ad63a686ad3047ba2e12b2739ef2bf70c12e61a462ee8abd87e96a7c48200dceab92094144b332\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-musl-arm.tar.gz\",\n            \"hash\": \"89e88907bc3fd473f62bf5dd1b24bc543bb52ab35cf8ee99b7ede2166a9d56105505687aa15d6d9ce5ced65554efd38cb3fbd169a741cd58f949ce1210a1062e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-musl-arm64.tar.gz\",\n            \"hash\": \"12b20d8ae4a987ff54974122a16f1897961e0474854b34cde06d0a5c95d7f1540ee55d5868d7aef82fd04f0d06f055452c92c89b2cb3721bbf1d79b230faff77\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-musl-x64.tar.gz\",\n            \"hash\": \"9b2da309a4640d5261186d8d506cdd1d96fed3f980a01d5bf2875e3d07294b6881ca9458a51f22b6d286e8ed26fac1312693c5aefdbc48ed0ec2cb28e49fdb5f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-x64.tar.gz\",\n            \"hash\": \"f415a8e6c078421759a963aa0b232c092ecf2f0a8e014ba72092390aac792ed35e8f3c822b2ce91ed636cdee9342bba2b89fb4fdfd2d28dbb0ac856d828cb29f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-osx-arm64.pkg\",\n            \"hash\": \"f5be68e76227bac07e9af42534029af27e919b3cd40a1771eacb86e1d8a81a8a1834c8c93b3b97cd580db5060787ecf1146455e80ab81a7fbdfecaa64f269ec5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-osx-arm64.tar.gz\",\n            \"hash\": \"9f5cc528d5d229cf2f63384afa52176f049c8d9e0d9d9be0ccb1a169be78a65a61dba7a4e74357685d434447b3d2697c062e9f240a8d8ad6b588fd433ee67acf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-osx-x64.pkg\",\n            \"hash\": \"7e16f7c5a5e6c31628dc2066d35966f6ef685e5ed1e0ad8765d1ff7ca7e8c62db00a83b9f277b22d15a4335f591df5fe6640783e2fe152c24d9cbbba195f9b56\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-osx-x64.tar.gz\",\n            \"hash\": \"3e99224ecb4a6ad06b96daf7017a749dfab1a9059daed1304a35acab9eb4fcb0a97f8e1b4d8c3074536b9dd8dd98dc89db3603057ae59a59e01d459bf26f4fcc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-arm64.exe\",\n            \"hash\": \"389b8f69228ac8ca73c780e128cff247d527d860ccedaeda7aadcc8c9c5798351d5794aa3930bc2440e9f0aec340facd8bba29533246f28b22e7ba186768c79d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-arm64.zip\",\n            \"hash\": \"891584d6e10dc263663c33fb41ecfb69432933c08a521f45ff3b9dfa7a5b5c4c5e5cb14d74fe418b78ef4cf3065059125796cd296cd73fd4156ab45f8903f7fd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-x64.exe\",\n            \"hash\": \"58e9437f2ead1e9edd67d837f7d2e1313d866d510629465b0485965a9540c65eddd6fffafad9cf3261cb476a1dfff20404908f3bf06a7e01bc3bebc0bcb27d39\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-x64.zip\",\n            \"hash\": \"a2012d3c70ad1d0a86eebfe44e27d875248ac217e4df4de62956dcb155a2f70f937f4cc5dd511d2cde99055bad0da8e6832bbcc73a15f779366aa2dd4d9a9bda\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-x86.exe\",\n            \"hash\": \"73fa3ec7e25c5d95b7c9d81adb296470057ba00dc3e1cc8f3294f41ec73d3f10d7c8599cb76f03e407f9cd0a7c4c1ed674e7823411273c34fc494ab82e0139a6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-x86.zip\",\n            \"hash\": \"66037f54084ece3fd97d31fc3a3dbbe147be51b33483fe19b282dfc96c819b0d922c31ca48804e9800b4ba66d91fb855f54227bc9604a1278410788fa309212e\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.202\",\n          \"version-display\": \"7.0.202\",\n          \"runtime-version\": \"7.0.4\",\n          \"vs-version\": \"17.5.2\",\n          \"vs-mac-version\": \"17.5.2\",\n          \"vs-support\": \"Visual Studio 2022 (v17.5)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.5)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-arm.tar.gz\",\n              \"hash\": \"242c3b93b6ca39e89a7f30f0c29d71294200a2eb14a95bd3f017ed0cb83f3c5ecc6a0d0b0ffab3687d1f925419619a8508f96d1262bd522f6c876a75d929e88a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-arm64.tar.gz\",\n              \"hash\": \"6f03de4ef1d0f67bcf8f794beea1a1497c9b1d31c484675382ad63a686ad3047ba2e12b2739ef2bf70c12e61a462ee8abd87e96a7c48200dceab92094144b332\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-musl-arm.tar.gz\",\n              \"hash\": \"89e88907bc3fd473f62bf5dd1b24bc543bb52ab35cf8ee99b7ede2166a9d56105505687aa15d6d9ce5ced65554efd38cb3fbd169a741cd58f949ce1210a1062e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-musl-arm64.tar.gz\",\n              \"hash\": \"12b20d8ae4a987ff54974122a16f1897961e0474854b34cde06d0a5c95d7f1540ee55d5868d7aef82fd04f0d06f055452c92c89b2cb3721bbf1d79b230faff77\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-musl-x64.tar.gz\",\n              \"hash\": \"9b2da309a4640d5261186d8d506cdd1d96fed3f980a01d5bf2875e3d07294b6881ca9458a51f22b6d286e8ed26fac1312693c5aefdbc48ed0ec2cb28e49fdb5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-linux-x64.tar.gz\",\n              \"hash\": \"f415a8e6c078421759a963aa0b232c092ecf2f0a8e014ba72092390aac792ed35e8f3c822b2ce91ed636cdee9342bba2b89fb4fdfd2d28dbb0ac856d828cb29f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-osx-arm64.pkg\",\n              \"hash\": \"f5be68e76227bac07e9af42534029af27e919b3cd40a1771eacb86e1d8a81a8a1834c8c93b3b97cd580db5060787ecf1146455e80ab81a7fbdfecaa64f269ec5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-osx-arm64.tar.gz\",\n              \"hash\": \"9f5cc528d5d229cf2f63384afa52176f049c8d9e0d9d9be0ccb1a169be78a65a61dba7a4e74357685d434447b3d2697c062e9f240a8d8ad6b588fd433ee67acf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-osx-x64.pkg\",\n              \"hash\": \"7e16f7c5a5e6c31628dc2066d35966f6ef685e5ed1e0ad8765d1ff7ca7e8c62db00a83b9f277b22d15a4335f591df5fe6640783e2fe152c24d9cbbba195f9b56\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-osx-x64.tar.gz\",\n              \"hash\": \"3e99224ecb4a6ad06b96daf7017a749dfab1a9059daed1304a35acab9eb4fcb0a97f8e1b4d8c3074536b9dd8dd98dc89db3603057ae59a59e01d459bf26f4fcc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-arm64.exe\",\n              \"hash\": \"389b8f69228ac8ca73c780e128cff247d527d860ccedaeda7aadcc8c9c5798351d5794aa3930bc2440e9f0aec340facd8bba29533246f28b22e7ba186768c79d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-arm64.zip\",\n              \"hash\": \"891584d6e10dc263663c33fb41ecfb69432933c08a521f45ff3b9dfa7a5b5c4c5e5cb14d74fe418b78ef4cf3065059125796cd296cd73fd4156ab45f8903f7fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-x64.exe\",\n              \"hash\": \"58e9437f2ead1e9edd67d837f7d2e1313d866d510629465b0485965a9540c65eddd6fffafad9cf3261cb476a1dfff20404908f3bf06a7e01bc3bebc0bcb27d39\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-x64.zip\",\n              \"hash\": \"a2012d3c70ad1d0a86eebfe44e27d875248ac217e4df4de62956dcb155a2f70f937f4cc5dd511d2cde99055bad0da8e6832bbcc73a15f779366aa2dd4d9a9bda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-x86.exe\",\n              \"hash\": \"73fa3ec7e25c5d95b7c9d81adb296470057ba00dc3e1cc8f3294f41ec73d3f10d7c8599cb76f03e407f9cd0a7c4c1ed674e7823411273c34fc494ab82e0139a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.202/dotnet-sdk-7.0.202-win-x86.zip\",\n              \"hash\": \"66037f54084ece3fd97d31fc3a3dbbe147be51b33483fe19b282dfc96c819b0d922c31ca48804e9800b4ba66d91fb855f54227bc9604a1278410788fa309212e\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.104\",\n          \"version-display\": \"7.0.104\",\n          \"runtime-version\": \"7.0.4\",\n          \"vs-version\": \"17.4.6\",\n          \"vs-mac-version\": \"17.4.6\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-linux-arm.tar.gz\",\n              \"hash\": \"3ecf8fd6653190daf5760e6636ea25c181d9272df97affcae5a2b88b002493b69a7db2bc1e4f492f7848f75ced5ecf81e67b309d1bbece9cf8de109ff14bac88\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-linux-arm64.tar.gz\",\n              \"hash\": \"b40ccc2fb31b4fff9a2162453192df0f22d966609f5a222433832ae16cfb1517e967345b1c1f0b010131ba39b8644cca321a13c07f3d6273d8151047d331cd72\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-linux-musl-arm.tar.gz\",\n              \"hash\": \"073fbba13f539e4d784e7368afa7ff28b7f477ddc786b007763fe1d46d6501a07a5fdf96b78bfda1e5cefcaf0e66724b1037f1f469c2b6b8750945034752061b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c0b0326e1d00fe0f989a3b81953057d5f1d84f1f33c2d7116ddcb64bd628755f1b4d3912f86a7423b45f27fed2f17e3ecef0292c37f9bb61b52b5632da429c7e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-linux-musl-x64.tar.gz\",\n              \"hash\": \"b622027eb455388d9401f7df9d9d1259659739ebda109b24c2a478113bcfe8f588ac9bf1856c5b7ba125e30351aff7ef4eb8f465da13fa1cef0b0d41a07aad38\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-linux-x64.tar.gz\",\n              \"hash\": \"a95e4c97082cdf6337c22a64d69a4f8e7ca491afa0e9a1997f89cb16189ae35c27b7665666bbf70b9e2f9d94169812834b0c1d5366828ac3d248bab8a575b270\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-osx-arm64.pkg\",\n              \"hash\": \"dfc7379b2ebc806bce283cf69a974a50653d27ba8e2bcffdead379d12f42628daa7e933b36609d0a1c205c4dc65cf2c639d1cce575f8407c848f692408f91ae0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-osx-arm64.tar.gz\",\n              \"hash\": \"b3251eefaacf44144cb91bac69f4b121003ccb66f4fed8d9dfbd394cf09933b8774558350cdeedfb6ec6545a2d1e1728106c1a97a80a24230b923f0d277026e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-osx-x64.pkg\",\n              \"hash\": \"447ea6d74a7d46408732c272c595117c4492232d4f7874b0fccada36fb235927e00328d57dca9b01b809ab1d2a0702f9c6c66b57f3f1bf530b2c0c42b44d2ff9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-osx-x64.tar.gz\",\n              \"hash\": \"8175e3a44e76ff6226ea9f1e88ff978ac870d937c0257b19cc0958e6807f88c95071f31f17a6a49b8472bce0fcd7a6f6555009638bb9714e9a29a9d83c917085\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-win-arm64.exe\",\n              \"hash\": \"05c29042d25aa4901c168eb5c9af3f07e26628f7879d6a6b1b024bcee5098681cfae12514b8a6245ed5324edd2506a197f862b1dabe4da7bd1c9684cfdd6a4f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-win-arm64.zip\",\n              \"hash\": \"76e6d4b89a5df1c57628d51955a8846b50d539f15ce7a59931c87509266371609e7025375f97c467fe19ab7f5c71cfde7c0e81b2e7680728ea1fc6fbb4c4645c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-win-x64.exe\",\n              \"hash\": \"e083db4cfa9cde032a4f94aceae52451b7d5edd2bdf813117c35e4c7100385b501713fe96e34a1a38b52eb421f4e9c12d75444ae1655d16edd22f2fc607647c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-win-x64.zip\",\n              \"hash\": \"98b1bcbbccb3ed0b1be302608523ba106e1dcab422e6e4f68e2d0ba73acee57f93587d4bcf03b2a79dfeaa2dfe3449d9497a26e60e04df0157450361f1d8b08c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-win-x86.exe\",\n              \"hash\": \"e4768577bc5e6bb43c0a8f7fd5eb2fcdf5259053c2f155dd860f24be7e6829e052d3ce878c7ed386044b57b5f9e9b22e279cfee3c47c612560bbf87f0496ab9c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.104/dotnet-sdk-7.0.104-win-x86.zip\",\n              \"hash\": \"180a241d082fff2d8cf9e094d75bc0d8efd8e59124b9db6624b4c7a877c0a1ad92fb6ef3a85ebc2fe333dcbe2ee93c97c13dc0a64b0175866213476c0447b716\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.4\",\n        \"version-display\": \"7.0.4\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23051.4\"\n        ],\n        \"vs-version\": \"17.4.6\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-linux-arm.tar.gz\",\n            \"hash\": \"36b92eaa5e7ebb90ff8a9e11a2e5e7a8253813c4d7711c0fc71d7e6d00283a3e169fc246a5b4edbda577e9fd793b936b0ddb3d4170487e33f65f52ae943544aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"5e149ccdd003dfc4413927f23b07b2f27ce915c63146e514b2f88446bd44f64df51755644b56c316b0a1388c873404fc1d39b24a0bf8066f09fc37d6f32cc03f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"737704c3f747d20792b436999b955bc3b25cc65133747a3ded512ad426760421cc11a8c1f22ae2ebf9b7eebeb3a465a248027498f20bc0214a8c41f4043b0541\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8d5ad293426c0b9e4b8725b5fa22bbe6470a9e595a1dc34d2e1d7eec9c80cafad84692da6458c978fc78d0882abcbfb694dd63c523b44efb7db4ecbcf3f1f60d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"cb51f4520770b2eaa33b2096e8ee5dce9f8ea6cf78355a6f02c63391a942a22e39438389da34a41393b88ffac848b9deb2f9f34a9c49971d99a6cb7551321e33\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-linux-x64.tar.gz\",\n            \"hash\": \"b0d2896928c003abf79c539c1c6be13ad560a34d8fdbe9438d916a977aa59e648d0737b57aafb25fda1c3de7c95997eccbea28ae04e4131ebfcd18c36940bcb4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-osx-arm64.tar.gz\",\n            \"hash\": \"07771022448fbda4248ac153d401c11ff0c9cd33ffd9a6c480e7a8618b802e7e33152673557dd92a5467199c275ff8b0fd007e132ed650d594759743d3da7f8d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-osx-x64.tar.gz\",\n            \"hash\": \"36a573380caeac220cd7d4bb1a008f440f37eee21be4c0156b95974739264ed5b3ae1776462a5dee286f387719d3241b57141d2604463d8367038bc718d9178f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-win-arm64.zip\",\n            \"hash\": \"c1ab8f0d86726d26f459cdb64553e7d807e7c3a03903c8f8912d54f736352cc060a457e7832ab7677f71cb93803d42c59a4a0b89b899cfbae339c059f1a22e59\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-win-x64.exe\",\n            \"hash\": \"e069bec552afcf08b0677924255ac3ed7005e95bb465a7da1b9ce2dc5f48c17368947e1b049f9af73bb31b27085f212b4da049d518c9c1dd5aca40ede622ff2b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-win-x64.zip\",\n            \"hash\": \"c86511c7aa88f72fd1a6e2773a2ee2a72cd22d8beb63f3160caae46db0e1dc94d68d3e08648f54745546bc7f7464a01d10fa645f73bc02b44ea203759c69ed47\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-win-x86.exe\",\n            \"hash\": \"138b94a2b3edea7711c18d8ed4609d35a0c90b478d1ff21a02c3adc9275bd8d68e49287555dadeac8c27cef1dd69902d13bb38e455c8145c4d90fb90cfcbb8f7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/aspnetcore-runtime-7.0.4-win-x86.zip\",\n            \"hash\": \"2f22964990d4e29e3337346ed3914b34074ffef05f13d04f25e264972da105c7ce4d7f4afa05b694bd1f9a267f5c0edd035ed759eb8e4b363764c88d1d895cd2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.4/dotnet-hosting-7.0.4-win.exe\",\n            \"hash\": \"883e82d4564617fcce8bb553beb446dd4c000fe7746b1441321369099a37911ed2a102ec98b3ee1e5cc093ba629f08636816aff55e8b92b1af1a9a15c4fc780f\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.4\",\n        \"version-display\": \"7.0.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.4/windowsdesktop-runtime-7.0.4-win-arm64.exe\",\n            \"hash\": \"ddea899010bf61b505120f57aa0f004078cb54c0a305ca09233b097cffcf460c93bb379063cc71addc76414d0eae6cf2d4cf03449a0e4f89e331587f9cba649b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.4/windowsdesktop-runtime-7.0.4-win-arm64.zip\",\n            \"hash\": \"5fcccd6b25da5710422ac636b0d877cd8e3a27fb696c910801109cd25f0d4ac678670d6e43a8dbcbaba55dbbe2258d08dc23815aced457a25ce90de1194c6859\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.4/windowsdesktop-runtime-7.0.4-win-x64.exe\",\n            \"hash\": \"03b1164beccec1421e46ed9bc6bc35c9b746a580b33cb71112a41f6e3b94e37d8f02cbcf0ada74e250f29286f7301828fc6f9dd78d11f0b7cacea4604414401b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.4/windowsdesktop-runtime-7.0.4-win-x64.zip\",\n            \"hash\": \"385e50938409d2ec3efe4d5a4e41e2615c14f6c8444245110440acf85ca54b44977498ebada85f7ebb72257de07a9248006d904c1b369837fb0ea212fd829540\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.4/windowsdesktop-runtime-7.0.4-win-x86.exe\",\n            \"hash\": \"2b31ad155f146ae802a7232d3511e910e95d46f00c4c39b0ffe521d53f4f2ef0d74adb3c9455ef5c86e0331d696ecca4eab0a2832f74b9942db8060497199e89\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.4/windowsdesktop-runtime-7.0.4-win-x86.zip\",\n            \"hash\": \"c681e6619fb9052eb99650b1ace103b2c6a7b99b5cc170de72749b82e20d6e2fee358d491443ae5e2d73e8afd5955d95800b9a7c76a8314c90eec98266edef7a\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-02-14\",\n      \"release-version\": \"7.0.3\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-21808\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-21808\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.3/7.0.3.md\",\n      \"runtime\": {\n        \"version\": \"7.0.3\",\n        \"version-display\": \"7.0.3\",\n        \"vs-version\": \"17.5.0, 17.4.5\",\n        \"vs-mac-version\": \"17.4.5\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-linux-arm.tar.gz\",\n            \"hash\": \"e26aa9caef1b75d7d2fdf48b40ec941347a24f9f2862f54af8dce8447931ff9ae319bfb955a86c2375c79df35731f3c6d6c642dcf5f7726c49e4fc6668ae2fa5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"605f4d9657396eb2c9825d1576836115492221a7733f36638d9c6f14f1c15481c908b6c8dcc619ead34beb4d4991d810e2a69a8bccd7c49ed0f4d72411d1a5f4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"a47369617a2dc35635ee84b922a230694e06d0e87ad7f73f84793828b89bf8b0e54d40c9fe6e4fd24182e9668ea0eac49c591a46323b4b78766e45262d5fbe1b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3aefbabbab78c2e46c62c48c76ffff8406362082969ebbf8e04bfb7547b066770c95312291284095e60aad8256527d09d293f612ab4049010dc4f5bdd95d165e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"07cde581be0237eb9fef572ebe1e609b7b606781f45fcb0f7e13005197dbcce9c1d55e1ba0f1a3c155ea0e3de6062901f2816d70c31b0bc89999961e4079fe54\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-linux-x64.tar.gz\",\n            \"hash\": \"d5cea2e674e9430174da793942b4ff5dc1b64d12c731dd3324ef520a2fb11787782f2f8ffa83023c41a0282ecb174e2a49a2c0aae1b327a58fcbd2bb06c4e256\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-osx-arm64.pkg\",\n            \"hash\": \"7c519e95f80b1e9b2e37f68be922bd2cc0ad767be09fef3e21caa0a53def7c5a4ecacfb14210a2f100f27ab17df74606abe913c96b7a3dba38fe3e9c20c5d8c1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-osx-arm64.tar.gz\",\n            \"hash\": \"2bebf2296eb65916bf4b88c9447df442b328047794fefe4f5117a9ce2053547b6df64afbfa8f36eed9a1650af37824fb2c325568deb3e171d8e5970a4eef6520\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-osx-x64.pkg\",\n            \"hash\": \"0f10c6e997ba570fbcaad2f82df9907004b2899a67ff0a771ceee910616714b8d2227c0c152bb8d6988163b717faaf1a2cee32e2d68ac5d895eb540f5d49eb7d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-osx-x64.tar.gz\",\n            \"hash\": \"0c3facc23e8db48bca33e3133ca85c2c6893a56d79f83d87179e8520712cb76c699df0040dda5999591c47a128a7a3b365f62b500cf802091989a23b41eefded\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-win-arm64.exe\",\n            \"hash\": \"da97b2de0e5d96b2d48cad59ef57b8d3b1c455d5263ef58a309f8e0307412519af44a3e3c5b20b6d0ba3876ff33c66ba7c06885cea2c10af786cd09867f53ee0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-win-arm64.zip\",\n            \"hash\": \"8b3e5f15e4589b54ab02c04292716df7e9d2ed23af09d9abc819709d5ba190f330eaf47ce420650909ebc4a89c97d4f831bd7792df503ac60cac478d8bb30e30\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-win-x64.exe\",\n            \"hash\": \"6fefde421ed054a135a1cc3906466c2240e21ec07d384ef41514ad38463f6b4548988498d7388a782c43a7dbbf56ee360a8d687930b4fb0331e570fc7b877257\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-win-x64.zip\",\n            \"hash\": \"d31de3448bd3934781a532a2a61be56b5c878ce88a5d3260440a23292f77ed2e05a03692d3521771818a7168fcdd2aeb2aaecbf80696d33b3e482a3ac7b56fdc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-win-x86.exe\",\n            \"hash\": \"520ac0679584441795c4604e5b2f810476896b2fe07472e17610853222e98c447d238a5a85a0bb758f8a1b02a4726967c1ba4e68f5d6cd8ef99177583d76b371\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.3/dotnet-runtime-7.0.3-win-x86.zip\",\n            \"hash\": \"c7d91ec53a8e0f970a0421aa046efe012f26ae30d2288f464b6a043b8921fe6d2727d63fb051e481eb9c09fba39b406cbe6f1b7937a45d877225202f89217dc6\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.201\",\n        \"version-display\": \"7.0.201\",\n        \"runtime-version\": \"7.0.3\",\n        \"vs-version\": \"17.5.0\",\n        \"vs-mac-version\": \"17.5.0\",\n        \"vs-support\": \"Visual Studio 2022 (v17.5)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.5)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-arm.tar.gz\",\n            \"hash\": \"3136e7b0d9b717b3fbbee5ce0bf3b73f122a0d6886f5c75c09041969d5383b8ca7b75d807ded376957f498cbb565af03618507e77f6de99016c683dc2bdf6d62\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-arm64.tar.gz\",\n            \"hash\": \"a4c4d0e7d51643d6a7ff3322f795f0cdf174f62689606304e4dbfb6b38717b111d0a21ecfe2efea0234947deb87383b7cdf38e96b7e4b7bc13127b0d70431b9b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-musl-arm.tar.gz\",\n            \"hash\": \"092285d57c45e1720a4fb6c82c3d8a1413b9c96ac5d06fc0f398dc55360e0f99b9853789c0d61efa31630a58ebb0763b16991e6a209165feb7bea1902cff4950\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6efd610dea7d30fc1b2c6d59946b20faaf19519b1485b748fd8271360dce86448c42b5798fe8fc8cbd48cdddebe70c02bab37bbc883eb2322adc29a45a2d82ec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-musl-x64.tar.gz\",\n            \"hash\": \"5d3833999ddec0f469d4e95668d27821c69fad3e94d1d66a2b393cf0e6786a8683c43afe87f9ab46952003d1303726d8849fb8c389053ad32bb75488ec884127\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-x64.tar.gz\",\n            \"hash\": \"fc9d224bf1d3600e878991fc1e8d3b1a0f21c7a8aac7b3cae0e4925ad33172cc12f56210eabfd66cfedd5f70f85918b889673401172b3999cecbeb8f2fe58863\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-osx-arm64.pkg\",\n            \"hash\": \"85bf5b3e3bdc0affec2c94db525690d6715027ff0a0e8dc27e7809e75522f54c6b8a30139fa932c5d8931cb5de27e71883000ef6b41e1b14dd4baa01c999aca3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-osx-arm64.tar.gz\",\n            \"hash\": \"33264819fc928e2206127060935cc01f443f564c2e28eb9aecbc83865697347967c639820496f21c0a7039aacd83b548944fc2a3385f32f01079760e9d0cb677\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-osx-x64.pkg\",\n            \"hash\": \"8e8b73d258757663a39cf7a9252c51e0559656aa13c5f1e3fce9bbdbe7c92c65b5836b04ae17995c37b2b9b1f5d3397a95e4f1e835a8609af3797391cc61137d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-osx-x64.tar.gz\",\n            \"hash\": \"c5f9ac1ec09f78433baebdcdfe47b715ece63df89b37bd4c919afb09cbb3183f2aa85e5fb12b9842582a343ba2524c5f1d764e607d7465ecd781744473c3fce0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-arm64.exe\",\n            \"hash\": \"a01dd35ec7b88f0f68e6337e351770cd441b370deb3f3c59654c238d14a33ff68b280eacd5f889c0f94012c738cc075d600d4119618b8fd86fba071eccba2c39\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-arm64.zip\",\n            \"hash\": \"056fc8135237c52e6258fd8d73bc018957c2caa6355a44333b25e3319ac58c9ae3e99e4d3b774e2b684521bc7ec90dcf04a235fa55276b82a42b426a43bfad81\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-x64.exe\",\n            \"hash\": \"8131ee4c844290db2a591574ec76b3174a1a05ea0a4ded0489adf549868d998c2594fa2b32bf1ac291192d9bc08c98b19f9eefc6f6d3dcebbb993b26d2b47099\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-x64.zip\",\n            \"hash\": \"913e3544a0b9301f78539531f7a51890ba46d07997a25dcce02f3616b64bc96c99b870ae6338e26953f39c499b8387e60d0e05138ba12fa06f76ba63540ea754\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-x86.exe\",\n            \"hash\": \"5b94cb32ece8f53d4e57384e0473c304b8e18cfd2f5be31e2e46a1bc63d390957dc0cc83769eeed495a9ff7e4c2df9069e765588fc9c1e8823d636968bace268\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-x86.zip\",\n            \"hash\": \"f97c50f6ab752d6f32b64db1039fa419c38d48c8dd5fc861fde99ae01ac4895d39f752da12789157b43d3348e45e299db60f47982ccf861bd175d559a7aa6ebd\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.201\",\n          \"version-display\": \"7.0.201\",\n          \"runtime-version\": \"7.0.3\",\n          \"vs-version\": \"17.5.0\",\n          \"vs-mac-version\": \"17.5.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.5)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.5)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-arm.tar.gz\",\n              \"hash\": \"3136e7b0d9b717b3fbbee5ce0bf3b73f122a0d6886f5c75c09041969d5383b8ca7b75d807ded376957f498cbb565af03618507e77f6de99016c683dc2bdf6d62\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-arm64.tar.gz\",\n              \"hash\": \"a4c4d0e7d51643d6a7ff3322f795f0cdf174f62689606304e4dbfb6b38717b111d0a21ecfe2efea0234947deb87383b7cdf38e96b7e4b7bc13127b0d70431b9b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-musl-arm.tar.gz\",\n              \"hash\": \"092285d57c45e1720a4fb6c82c3d8a1413b9c96ac5d06fc0f398dc55360e0f99b9853789c0d61efa31630a58ebb0763b16991e6a209165feb7bea1902cff4950\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-musl-arm64.tar.gz\",\n              \"hash\": \"6efd610dea7d30fc1b2c6d59946b20faaf19519b1485b748fd8271360dce86448c42b5798fe8fc8cbd48cdddebe70c02bab37bbc883eb2322adc29a45a2d82ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-musl-x64.tar.gz\",\n              \"hash\": \"5d3833999ddec0f469d4e95668d27821c69fad3e94d1d66a2b393cf0e6786a8683c43afe87f9ab46952003d1303726d8849fb8c389053ad32bb75488ec884127\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-linux-x64.tar.gz\",\n              \"hash\": \"fc9d224bf1d3600e878991fc1e8d3b1a0f21c7a8aac7b3cae0e4925ad33172cc12f56210eabfd66cfedd5f70f85918b889673401172b3999cecbeb8f2fe58863\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-osx-arm64.pkg\",\n              \"hash\": \"85bf5b3e3bdc0affec2c94db525690d6715027ff0a0e8dc27e7809e75522f54c6b8a30139fa932c5d8931cb5de27e71883000ef6b41e1b14dd4baa01c999aca3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-osx-arm64.tar.gz\",\n              \"hash\": \"33264819fc928e2206127060935cc01f443f564c2e28eb9aecbc83865697347967c639820496f21c0a7039aacd83b548944fc2a3385f32f01079760e9d0cb677\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-osx-x64.pkg\",\n              \"hash\": \"8e8b73d258757663a39cf7a9252c51e0559656aa13c5f1e3fce9bbdbe7c92c65b5836b04ae17995c37b2b9b1f5d3397a95e4f1e835a8609af3797391cc61137d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-osx-x64.tar.gz\",\n              \"hash\": \"c5f9ac1ec09f78433baebdcdfe47b715ece63df89b37bd4c919afb09cbb3183f2aa85e5fb12b9842582a343ba2524c5f1d764e607d7465ecd781744473c3fce0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-arm64.exe\",\n              \"hash\": \"a01dd35ec7b88f0f68e6337e351770cd441b370deb3f3c59654c238d14a33ff68b280eacd5f889c0f94012c738cc075d600d4119618b8fd86fba071eccba2c39\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-arm64.zip\",\n              \"hash\": \"056fc8135237c52e6258fd8d73bc018957c2caa6355a44333b25e3319ac58c9ae3e99e4d3b774e2b684521bc7ec90dcf04a235fa55276b82a42b426a43bfad81\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-x64.exe\",\n              \"hash\": \"8131ee4c844290db2a591574ec76b3174a1a05ea0a4ded0489adf549868d998c2594fa2b32bf1ac291192d9bc08c98b19f9eefc6f6d3dcebbb993b26d2b47099\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-x64.zip\",\n              \"hash\": \"913e3544a0b9301f78539531f7a51890ba46d07997a25dcce02f3616b64bc96c99b870ae6338e26953f39c499b8387e60d0e05138ba12fa06f76ba63540ea754\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-x86.exe\",\n              \"hash\": \"5b94cb32ece8f53d4e57384e0473c304b8e18cfd2f5be31e2e46a1bc63d390957dc0cc83769eeed495a9ff7e4c2df9069e765588fc9c1e8823d636968bace268\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.201/dotnet-sdk-7.0.201-win-x86.zip\",\n              \"hash\": \"f97c50f6ab752d6f32b64db1039fa419c38d48c8dd5fc861fde99ae01ac4895d39f752da12789157b43d3348e45e299db60f47982ccf861bd175d559a7aa6ebd\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.200\",\n          \"version-display\": \"7.0.200\",\n          \"runtime-version\": \"7.0.3\",\n          \"vs-version\": \"17.5.0\",\n          \"vs-mac-version\": \"17.5.0\",\n          \"vs-support\": \"Visual Studio 2022 (v17.5)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.5)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-linux-arm.tar.gz\",\n              \"hash\": \"7b1072c8080a0f38946d207945417dbeea4cbb688c2ea2dba1cb31330da15652da0823d8571c063a08830fe2157dbacb635eb2a8c7f20033cd1b8a35a9cfde36\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-linux-arm64.tar.gz\",\n              \"hash\": \"2990b7d2b23adb2b2621786ba774450e8cf73bf872173ab57026d7658599accdb5a4cefb5292945e264408f833503210621ed787c8d77eb467d3b204da8073a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-linux-musl-arm.tar.gz\",\n              \"hash\": \"1e4f9160cb93ca9704015e787491bf78c5850c2a0aa7f5794b35f607f6f342903c9d8aa182593133d6609d5b9aded9bed769855213e0464311f357a65df0a640\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-linux-musl-arm64.tar.gz\",\n              \"hash\": \"63c568b1e0014e2039def200fde47d932e5366ba794fcd89f0efbcfd845e8b8b1c0ede6406a518f366356f5b566df2d0a1b53e6fdc9b58a26a59bdaa89e0ce32\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-linux-musl-x64.tar.gz\",\n              \"hash\": \"e907c96e7f1c7a3497f8726176b1fad9e93050b7b5f30900a634d253c4c5c822c8d729b22b36fa00d5bb2be0834f6c683d47db8c22077fbb191e38ae67e12119\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-linux-x64.tar.gz\",\n              \"hash\": \"bb88cc5099bcb090608f5e02e7fcdc4f6a82114881378efd469afb210e00909d8dcc4d07d188851ef2782ba755321096de175d83ca67af3c4dcb8d3c1d217756\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-osx-arm64.pkg\",\n              \"hash\": \"702944605fd6d8683a78382f8c11a020b92bb70b24f2b6997e730ece4477e55760feeb3942d9d4472851ebab851efe880913cf3a4a312c7284d7cb57d86e101d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-osx-arm64.tar.gz\",\n              \"hash\": \"dc14ba208f89301577cfe4ca6a1901db92f05f9e0f15a4731012adfb3d7010382a18f41e0df91d132cb481653689cc31db4c8628f453c607d665c4237e7b49ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-osx-x64.pkg\",\n              \"hash\": \"3840993237fb1243135275248e615eb81c4e94143e7eddd1c76405559000e743ef858e2c52b224fb2e7eb3985bd962937d456d62109c969782124d19c56a5eb7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-osx-x64.tar.gz\",\n              \"hash\": \"487f753bd8bbacbe60da6c8c161fa710fb12a5ed2e0b1f2dfd7fb1bd37a56e8cc5fff9c75ca90ede3447353eb3cd08287e44fe1420b69eb5c8e9651277d99c74\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-win-arm64.exe\",\n              \"hash\": \"db93f4a2d6b013166a4459c3f77d96f5c32d4e0bb44744b2a2084031f34f41a2a841aea27ed70cdcc7d07961ea0399c0043c2fb1a1bd8d405bcde8754238d57c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-win-arm64.zip\",\n              \"hash\": \"6f58fde3219dc86420e3d2eb012bd62733a96e140ce5c8d3af4dd5d18c2f1eca5f73f92fadf62252c15a9ae1c8e860b8a0719b4396918760ecaf6d7be2cc8c91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-win-x64.exe\",\n              \"hash\": \"e41ce0c55181b564b29b3e4bd9e76be294db57d2ec0f152a295bdbae37b422a46bdbcb1c680f2d56d098ac8298533658d3d4ff8c50f1716652ebd012e93da292\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-win-x64.zip\",\n              \"hash\": \"f1a480dfa63d9a1912726374e67612a08bdfa438b10f5c70b7dc21b9251e8a8984c42b9a901d0f429e62e81a8f16cd8d0000f409e9f52eac5536e365895885f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-win-x86.exe\",\n              \"hash\": \"3014b328049e982981544f7103671c5fca28eb209ef4e9b0a7294699cd0ae12677b46a45c2c44b8fabab13222dc614146c79c67d7f9b22a20e68763cec952ddf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.200/dotnet-sdk-7.0.200-win-x86.zip\",\n              \"hash\": \"2850a888135efae77a8f46736202626881ac0330a599e2980e361379caa08eef13469960e689529adc7b1dce8d64884fc73ae026d39d6629f336362a457006e2\"\n            }\n          ]\n        },\n        {\n          \"version\": \"7.0.103\",\n          \"version-display\": \"7.0.103\",\n          \"runtime-version\": \"7.0.3\",\n          \"vs-version\": \"17.4.5\",\n          \"vs-mac-version\": \"17.4.5\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-linux-arm.tar.gz\",\n              \"hash\": \"40d6909cf6c1af10c143d5bb23958cb599b8b80b7a3390fcb6d358174e12acbee4294b54389604f0c02dc8f8f7eb59604b92651dd8ab8e972a22f7c0854c2cda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-linux-arm64.tar.gz\",\n              \"hash\": \"afc8c953390f2de11a1db982622f0a66a352a374163249f629a2c980fef583fc258396e73ae12346832574115cfe7611c68ab4359087d45048ac31da848abdda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-linux-musl-arm.tar.gz\",\n              \"hash\": \"f339303eea0aa912213e13685476bbb1a9a2e3c0fc20f01954957cf417f6d1ebaa1590662f1aefcd6850f315b5dffab80b0c2d8b519adb60b20e9c3389e2a675\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d07ca65d39905b559ab304edf77baf6a267c1ea597f2e8a2592fb7841ff3a286f31a0a4ed11e155192431ab949b3096e3949288eebb31bf594a2d0709025cd0a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-linux-musl-x64.tar.gz\",\n              \"hash\": \"5a3fd171952cc21b2f426c00ae14aab9a943e5c77e82385795773fe4accabf874a3394c9f38ed2ccbcf0d72a794de027e76ae9a580868d55df243f9b64133090\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-linux-x64.tar.gz\",\n              \"hash\": \"35d9eee135eb5c9ffed262a01e59b2244f4493c04d71ba37fb255a1f0bf87a8947405379a4043267fb9cf4fca2e18683509b310a6f2ffd3323efb0c99c762f79\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-osx-arm64.pkg\",\n              \"hash\": \"ba7d5318effc29916c5b3a696dc3d22a6057acced1bf9fd89ed039fd566afb70a849fb840e47f28563b351eb4b22d7dc7caa71cc42b4fb15080d4584c6040ecd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-osx-arm64.tar.gz\",\n              \"hash\": \"9bf689c648a13cb33f0ca70fc2696623ecaa1c0bb3c5fac321c9ce5f95484c6c952d804be5f1653d964c4213bdfd0a0738f73c3299728f3a642015b5caa53a4b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-osx-x64.pkg\",\n              \"hash\": \"293ed3acd17d6836bce34b0709160d715b7fbd783c7a3f852efbda4c14244d5dfe4d6c8fe543e66e0b26d6de9839e8be2197be923216c248b79ba3a363d55ef5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-osx-x64.tar.gz\",\n              \"hash\": \"94f91ea67dd1b086f851b7b6900379757f4653ea2f07e3d81730b6b013631d07e3ec24c5a11ecb13c8774fd1fd65eca8cf1deb57d2df37a87591b85f6538b791\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-win-arm64.exe\",\n              \"hash\": \"272f106468cf7e373d0b47106728f65470c0e229f04523bb2daf409f1d850e9dd48acd9c133f4dce6d55485b2c924d3ce1e2187dab8bc8679f8a6f7d7a1428d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-win-arm64.zip\",\n              \"hash\": \"463bc85fc03b6f25c781b1fd1ca7925aed4a979366b380fe147d0a2ef755dd3fded3ba9add9166d87eb8b650a617e4dd504ba08e4ef2671452ec41da146558e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-win-x64.exe\",\n              \"hash\": \"e6fe68065e673aaa109bb63998ff4ec72f14e181189bb86827c25207f9afb11393adfd0b4f4345287656cb8df4bcc9d4686d25ea01ce50ce6197cb675f584e9f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-win-x64.zip\",\n              \"hash\": \"c1c4bd166a3323a046d036354c411b05b5d7cf8d82f94833b4e37cc26594db1242e943c49187a24787fa9caca36af89f310f855ad4167eae7babaa0adf79e28b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-win-x86.exe\",\n              \"hash\": \"ddb61b1e9beaa090e250f6615e87778ee8f9cb578a57d10f4515e8c1087f2c176343f4fd7cb6aa7cb4a81a6f0d1458054fb49f4e2e50042ce39d295e6dde126d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.103/dotnet-sdk-7.0.103-win-x86.zip\",\n              \"hash\": \"54ad6d009e0cfbb26c6d66fee9138d3903cd19a8e70fae42a2264e750c451baa32d2f60fa8e262df9f4e1613c87d7978a16afdaef1e5117ec527246106094256\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.3\",\n        \"version-display\": \"7.0.3\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.23030.3\"\n        ],\n        \"vs-version\": \"17.4.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-linux-arm.tar.gz\",\n            \"hash\": \"173dbedc3a01b5d6fd70f617935a5d65022fbd6d16d3dc0e74959b1197c90d4e790b44e3f93a1d7f440d3c89568000d7ee048dfc414a6eb570da7639cfb20b51\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"95ead701041655d9a0ab19dc8f53b7780eeca127499fc294124d466aa12daf930d756de59d7e8e8cd563a6a744b74bd5372d82fa95eca0973c94cbb1595451c1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"230fb26f38906f098b66e0d4bc7b88ba54476dab37d55f5bbcd15fcc526a434b979c61592d36d34264cf56fe984cd8c45c13d2e2caccb46abd314f2650e28686\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a8c1d190a62bc40dc398fabd166df6c0bffa2f15d95aab5652948910ae9a852911fe205f3b84d64bdb66e686f551fcd4e07b3805452a8294dea0f4aeae1b4696\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"2e0ee65a2174c7c19d733d4d546dd7065f30d28f2e1f21de4ed7f0d35a4bd290d600275f77e1b378596ea202690c7f07fa389b177fbdc9c52c453e423ee915eb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-linux-x64.tar.gz\",\n            \"hash\": \"fff857e44179270d937543ab429ca43a4706f9189ee8f60afb67813d3690652d9da08bd3e69c7acbb7c0b2e613b9659c4d1ee7bbe089c841126efd07dc23a758\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-osx-arm64.tar.gz\",\n            \"hash\": \"379dc7aea65cf0c97a919386f0e4e756321f522c6f658de303543763b0820ff9a6efc0e27c908065a5f95ff740d6ba469eaf264b1f36b017f2fd748d76787458\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-osx-x64.tar.gz\",\n            \"hash\": \"784d8655406535cc6844af63066e51377594de17162ff2431acd8444a5ba0c6434271b592c38f3ace2da0cdec693f3bd2e681316b972789a577e05ad1e9c2e9e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-win-arm64.zip\",\n            \"hash\": \"bed55c2725a63ca75c5d3246c4cb26cde75304ab62079f6b3d6d47dff2e634a10f0c5525d5441a43a285c50fb9973749007f999491d69027af993a0dee33088b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-win-x64.exe\",\n            \"hash\": \"ae84e7adc817abdd3a60fd42bd9368c302538bbfc7f2157db77aa6423bb4ebcd55fc7ff5cf783bc96728fbbd2a591f80e6528c851dadb5274d0d5dd4265fb5df\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-win-x64.zip\",\n            \"hash\": \"5e5e58422d4124edd1fe019d9e1b791fc5c6070c2515d860ff496105252fa4bb16b46b186ba2ca43bf137f9fd8ba10a2f1ca61057c377627dec3e798ec08a4bf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-win-x86.exe\",\n            \"hash\": \"12af1565e02b42337f514bcdb51152b9b0f89980436ef59e0bab48007ea3ce43775a3267a80751025beebbe107dda0640beaaabaddf942e2878313f1d77ece4d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/aspnetcore-runtime-7.0.3-win-x86.zip\",\n            \"hash\": \"db79c243643fbdb0b3b23dc6f098d042f0f8718915b3009336a4afdcffa9b0ec34407310404b1a989c807d5109a558b95d7a6b5faecfa5ef5d0ec53cc3322fdb\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.3/dotnet-hosting-7.0.3-win.exe\",\n            \"hash\": \"e1c0d9a3b8f23d5469cacf97d5ee85f755b632a4af2c37cc680e49f48a748b9f54bac75723b8af4d347eb19a775b9d274bfef777d16e31114347b2ea61f7e188\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.3\",\n        \"version-display\": \"7.0.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.3/windowsdesktop-runtime-7.0.3-win-arm64.exe\",\n            \"hash\": \"944aaa353b9f371006cb4a98e1cb1b1cdad2bddd9958027843d5a841fade46f1bbb53caf7fd28c58f22faeac0258482ff7c1a7d7d4fd85d5cc1d8f9ae840900e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.3/windowsdesktop-runtime-7.0.3-win-arm64.zip\",\n            \"hash\": \"a786a2c25e3cd0e70bbce6f330b156f3bbd0f7441fd78c2bad5ed8f892ecc1a362bd13932a8fc31d8297127aa5ed704c6864d34c62689334e35020770ea916cf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.3/windowsdesktop-runtime-7.0.3-win-x64.exe\",\n            \"hash\": \"3a401ba2681cd6bf88cdbc63d64dae390b53a0d49f5cc5ebdc02429e51e503e274833e9f1984c644d64713553192ec933a30d6fc98386cb87abb605e33cdb4da\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.3/windowsdesktop-runtime-7.0.3-win-x64.zip\",\n            \"hash\": \"ea3a5d7015f6ce7692ffc73636bbe0fcf1e847d80cfe296fb1b09e8756e651d83f60498c7e7bca924f1625fbde566b22859e67c5a05f259999750652930029be\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.3/windowsdesktop-runtime-7.0.3-win-x86.exe\",\n            \"hash\": \"8aad7c1766f11337dfeb8774b28d7462b742609f27dbf6ee0f1ad300f0bf7def00f75d47b151b433e3811dec4144521972c30f1772c86dbabc465d2e8299db7e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.3/windowsdesktop-runtime-7.0.3-win-x86.zip\",\n            \"hash\": \"33db1e3b7cccd1027311d4570650703cb2166d966c21025a2ef2c2a9998a901ebb2c47fbe9b1f56b7d5b702d6346b870e7f620bfb58efbdc8dabb99f25a47b1b\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-01-10\",\n      \"release-version\": \"7.0.2\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.2/7.0.2.md\",\n      \"runtime\": {\n        \"version\": \"7.0.2\",\n        \"version-display\": \"7.0.2\",\n        \"vs-version\": \"17.4.4\",\n        \"vs-mac-version\": \"17.4.4\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-linux-arm.tar.gz\",\n            \"hash\": \"01efb2234970de1157e55e5b82f66850d6241bedddc44fbafd9e2488c665fd459fc99936bb6f80528d28b3abeae2f3c5d13cf63fc94cc780e056ab912a8c398d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"dece1d39074dde28aa61f51f3d932ee5328c9ec2c5e6c9830e304bc768e3253b5fab3eb2e27752d39547d68c29666440fe5c96f0fb0b8e503b93f55429df544f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"e73cdf54f79a39b95c9f3f3e29caadedfdd08521fe45ef94f2ed81779158c3e0f24219bfb2277d656dea7d82f454b517b37ec81e8e637b61cd572463aeeed598\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f19984914fd32b4fd7b119d62dc16577aaad3770f0ae9c769a8732f4c23cbc33e3bf3cfe553ad945f27a3e3f72cbef49e741852cd94c3c9f1540c6ef2d9f815d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"83f50faf95a2ba3756da838fe2f3272f18494f5707aa787e6519f2b145107297c20a974221b5a4ef383dc92486c43cf6899f51a8e776c7ed7bcf1855ea2aba15\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-linux-x64.tar.gz\",\n            \"hash\": \"56f7f471052b955968b9a4caa27299ac003e0347ae80e8ef23de87d28a2707bdf7ceb70467cc3e9f0c80928a779841dd7e1392ed6b06e66a7a9cda696d5c0a1e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-osx-arm64.pkg\",\n            \"hash\": \"43115e5b577dc27d56c5ba67fdb23153d3ff4460a2bc5c90d05f9840568c5bb61585b42d08e988532cbd4776850a4150bd8f3bca3d815126d31fc413062c9a8e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-osx-arm64.tar.gz\",\n            \"hash\": \"c8ee455a364a53d0945bf76096bcc568a45b843bc5b313392ab9a07f1e25b16110a411a2d4bb3b6632891cd4ea5147597c93065097bdcbd5038107382c84c9bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-osx-x64.pkg\",\n            \"hash\": \"0ec8ba70402c18ec8b2ccfffa23aefea9c23c19e7d2075629662929cbbe5d596bce43149fb6f9d27198eadaa463717af387cb960ce049004b7e409215bebddda\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-osx-x64.tar.gz\",\n            \"hash\": \"6fde32130590d18d6bfd73fd3c2cd01f3ed6c2b3316285f64fb0bcc8889707e0a6e1415f796f5553486a89ef817628add27c64b69ea41c6cf4cd9fe811caa10f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-win-arm64.exe\",\n            \"hash\": \"64e548846437c11ad681d7afbc31047ab8d188932f95db27005fd1a775e90cb49f24e00cb152cf373a5b1531b12a02b7746e7ac7aa48c5748b606ce74e712e25\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-win-arm64.zip\",\n            \"hash\": \"d45c551bc32a9d6dc58acd66e411d8548ad856be95ddf5e09739359b74b86467aa1b219297abccc0f6725fa3cc2cbc976d6c47c7372d7edd07784491469e6c18\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-win-x64.exe\",\n            \"hash\": \"cf936a867c3841041e2f932f4ce7815755389ebe7da9a8b6e62044e319fcff6135fa8c7189394191e02e20266542fabed3b4159df2c0744ee912203e781037e9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-win-x64.zip\",\n            \"hash\": \"34eb76387dbf5ddcfbfdeaaafb20ac21f45ac3fa0ab98eeecd704a5acf2e0d4016cb7ecbd2fe06fc0963b082571793847f0172fd63189430cc9f5cf0cd068089\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-win-x86.exe\",\n            \"hash\": \"103ad3bd078161fe8386d5858bdec0eb993b2661e3f71564840f21766cdda7c6a5ad6e74b801edf19df7dcfa96823642b4a849961d3055ed4d3b363e86b5f928\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.2/dotnet-runtime-7.0.2-win-x86.zip\",\n            \"hash\": \"f56f94d02cf35d241859ad81764273b5e2b2aafa295049e0c5c23c8d1797ac7400660f1af70be3f17a2987bb7c8ad466d57ec138ea792559cd323e835c60e2e0\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.102\",\n        \"version-display\": \"7.0.102\",\n        \"runtime-version\": \"7.0.2\",\n        \"vs-version\": \"17.4.4\",\n        \"vs-mac-version\": \"17.4.4\",\n        \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-arm.tar.gz\",\n            \"hash\": \"67db0338992e39b5ae83756d7f89f1e9195b624c24ba08124ee25cc5e3ce4f09af6d5aa45cd301585cd41f9b71e9de1a82d6afa4a16149d1098377e6e44886f8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-arm64.tar.gz\",\n            \"hash\": \"a98abed737214bd61266d1a5d5096ae34537c6bef04696670d88684e9783bab6f6d45823f775648d723c4e031b1bd341f771baa6b265d2b6e5f5158213721627\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-musl-arm.tar.gz\",\n            \"hash\": \"c5cecd8fa717fb17547b9b988da09593287173717090928121eaf1f53e70cf539e5b12119d1d4abe35356e7a37927b282402bccc0c1b48bf5e5edc110e7c3327\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-musl-arm64.tar.gz\",\n            \"hash\": \"279e1b8eb77ae052a3df7701c90d0ccedb33a935b79e525aecf1096ccc4736f90242af5aeb60e4cb83362829f60a194b67ca38cf559f873b9a518fd90f4404ee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-musl-x64.tar.gz\",\n            \"hash\": \"823647662c8266a1ba8f3e82d5773a8aa71569ea1bb8ff2d388fc6553a1cdbde9bd1804dac6c06e5c8abfa6e749d731597b980118ae05a02ff0096cc6ecd65c1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-x64.tar.gz\",\n            \"hash\": \"7667aae20a9e50d31d1fc004cdc5cb033d2682d3aa793dde28fa2869de5ac9114e8215a87447eb734e87073cfe9496c1c9b940133567f12b3a7dea31a813967f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-osx-arm64.pkg\",\n            \"hash\": \"1b47be387ad2d815d32dc5b84ccbf279a3805d024db5005652c6e985ca3670afaa717761c3e63ad11f0f3815367da177c2814420a91fdc145524c3e2ab33bd6a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-osx-arm64.tar.gz\",\n            \"hash\": \"bc95a0215e88540bd52098453f348edb01ffec11ccfc44c7c017bfae5243ce2f0a50f4bb06cc6c3a622c9fc27b89f026be172c2d1bfb8ba62ed007071d5224b5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-osx-x64.pkg\",\n            \"hash\": \"0c47fb8da96f7ef707837a3a2b459e03327f4d614ac7f59a3a378377f8ab3d728a352bd44ea1260d029a8c14b1dc93e4992a740894d2f90425ef58ac822163f2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-osx-x64.tar.gz\",\n            \"hash\": \"b7a66a6dc9e6648a97a2697103f2a53f37cab42d7dbd62b1f6ce5b347ca6cc7e45e5474ddb546e10f1e49ac27b20c0f58936093decf779941afd2ff761ecf872\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-arm64.exe\",\n            \"hash\": \"b330f8057f5a3b53108768364bce54329e462d998a4d3cc2a0db82d7cd7483c3b33c1bb951f2f62522397eeb5ff7d1a7d6b11117f62d88365e93eb5e1e06416f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-arm64.zip\",\n            \"hash\": \"90fce08820e7f7d9f1c1963bcebed6c947ebebdd86d21afb1abc69b204d5cbf3f117a385a25de8d93bea79d465e0d4a74299a688e9ebe72510573545dcabcfc7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-x64.exe\",\n            \"hash\": \"1fbfce7951fb95b0219f56c409740767f3fde397b9ec77a1c7aff2b9184e4b93a009a605ca301b3030398d47ae018918555c49613015b2397de8b8690f7fd99a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-x64.zip\",\n            \"hash\": \"841ca296ae1d4f6efed6516dec0594c44449129113e05351b3ca8a92b573ee5d333eaabb577169f5e32c12ee977f24ac0ee3d9a30fbb9a2b0b7c08b8dd414e85\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-x86.exe\",\n            \"hash\": \"f6efd0faf941ad971dd4e0fab13902d11a3eab80e307c2d6e4621d9d018ac329883959817100f02c0268e5b95879e4ac6e332a992df36b623b7aa186166ac340\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-x86.zip\",\n            \"hash\": \"96168b0f72ca15857082aa3b89342da709daac12251e02f2673e108ad0b47254d11a60a3457cee699ddaae6d486372c5e3bbf393077e1d27a0f635b099c03993\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.102\",\n          \"version-display\": \"7.0.102\",\n          \"runtime-version\": \"7.0.2\",\n          \"vs-version\": \"17.4.4\",\n          \"vs-mac-version\": \"17.4.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-arm.tar.gz\",\n              \"hash\": \"67db0338992e39b5ae83756d7f89f1e9195b624c24ba08124ee25cc5e3ce4f09af6d5aa45cd301585cd41f9b71e9de1a82d6afa4a16149d1098377e6e44886f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-arm64.tar.gz\",\n              \"hash\": \"a98abed737214bd61266d1a5d5096ae34537c6bef04696670d88684e9783bab6f6d45823f775648d723c4e031b1bd341f771baa6b265d2b6e5f5158213721627\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-musl-arm.tar.gz\",\n              \"hash\": \"c5cecd8fa717fb17547b9b988da09593287173717090928121eaf1f53e70cf539e5b12119d1d4abe35356e7a37927b282402bccc0c1b48bf5e5edc110e7c3327\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-musl-arm64.tar.gz\",\n              \"hash\": \"279e1b8eb77ae052a3df7701c90d0ccedb33a935b79e525aecf1096ccc4736f90242af5aeb60e4cb83362829f60a194b67ca38cf559f873b9a518fd90f4404ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-musl-x64.tar.gz\",\n              \"hash\": \"823647662c8266a1ba8f3e82d5773a8aa71569ea1bb8ff2d388fc6553a1cdbde9bd1804dac6c06e5c8abfa6e749d731597b980118ae05a02ff0096cc6ecd65c1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-linux-x64.tar.gz\",\n              \"hash\": \"7667aae20a9e50d31d1fc004cdc5cb033d2682d3aa793dde28fa2869de5ac9114e8215a87447eb734e87073cfe9496c1c9b940133567f12b3a7dea31a813967f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-osx-arm64.pkg\",\n              \"hash\": \"1b47be387ad2d815d32dc5b84ccbf279a3805d024db5005652c6e985ca3670afaa717761c3e63ad11f0f3815367da177c2814420a91fdc145524c3e2ab33bd6a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-osx-arm64.tar.gz\",\n              \"hash\": \"bc95a0215e88540bd52098453f348edb01ffec11ccfc44c7c017bfae5243ce2f0a50f4bb06cc6c3a622c9fc27b89f026be172c2d1bfb8ba62ed007071d5224b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-osx-x64.pkg\",\n              \"hash\": \"0c47fb8da96f7ef707837a3a2b459e03327f4d614ac7f59a3a378377f8ab3d728a352bd44ea1260d029a8c14b1dc93e4992a740894d2f90425ef58ac822163f2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-osx-x64.tar.gz\",\n              \"hash\": \"b7a66a6dc9e6648a97a2697103f2a53f37cab42d7dbd62b1f6ce5b347ca6cc7e45e5474ddb546e10f1e49ac27b20c0f58936093decf779941afd2ff761ecf872\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-arm64.exe\",\n              \"hash\": \"b330f8057f5a3b53108768364bce54329e462d998a4d3cc2a0db82d7cd7483c3b33c1bb951f2f62522397eeb5ff7d1a7d6b11117f62d88365e93eb5e1e06416f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-arm64.zip\",\n              \"hash\": \"90fce08820e7f7d9f1c1963bcebed6c947ebebdd86d21afb1abc69b204d5cbf3f117a385a25de8d93bea79d465e0d4a74299a688e9ebe72510573545dcabcfc7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-x64.exe\",\n              \"hash\": \"1fbfce7951fb95b0219f56c409740767f3fde397b9ec77a1c7aff2b9184e4b93a009a605ca301b3030398d47ae018918555c49613015b2397de8b8690f7fd99a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-x64.zip\",\n              \"hash\": \"841ca296ae1d4f6efed6516dec0594c44449129113e05351b3ca8a92b573ee5d333eaabb577169f5e32c12ee977f24ac0ee3d9a30fbb9a2b0b7c08b8dd414e85\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-x86.exe\",\n              \"hash\": \"f6efd0faf941ad971dd4e0fab13902d11a3eab80e307c2d6e4621d9d018ac329883959817100f02c0268e5b95879e4ac6e332a992df36b623b7aa186166ac340\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.102/dotnet-sdk-7.0.102-win-x86.zip\",\n              \"hash\": \"96168b0f72ca15857082aa3b89342da709daac12251e02f2673e108ad0b47254d11a60a3457cee699ddaae6d486372c5e3bbf393077e1d27a0f635b099c03993\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.2\",\n        \"version-display\": \"7.0.2\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22341.2\"\n        ],\n        \"vs-version\": \"17.4.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-linux-arm.tar.gz\",\n            \"hash\": \"240f87b9b9b7f009c2222a894bb778464163031a2dea8684ad77f40b2e3a556be7c53b515f1dc8909a709c82a86cf4840e00170d4b7008af120aea896d75342c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"43ad795456b6d7a1f566113aaca4d7817dc4ff9cc893cab48e01d2d9685a1febdf397dfbc774fa7adc30bac7884dbd60980fe6b95efbc9497cf3228688c123c3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"0c71d724c95e8b13810dc6758ca5ecf46166d47eac6d0dedfde67c4a22cec33a28c8058430c1b61e287ca6d285902d90236d400c9d97b0eb48d8bb19a4f43834\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"eff78e22f28184fd41193da4915e8e0e140ddc84c5f748deb3521f114dbe9856e5b1a9bffea8b4ad4543f9ed339e823a4de9e4c4acc0fdecc95d985786ed41ca\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"338bcea165cbb71c2b2b0b69b5e655a33ed568fc24b58bdc7626d20cb62d5bb7cf304edd2a866b19e45e0620902417b973eae499391c0f66970f016f5f065a3e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-linux-x64.tar.gz\",\n            \"hash\": \"d3b6c845030069581b3bfd739e3918ce77ae76c8e2e57b8e6c33c9134c46bc8c09fa9b74abdbc917c614c7d09ecbac149b0db1be2e045d26d82c61d976279b49\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-osx-arm64.tar.gz\",\n            \"hash\": \"4538a57c6bea5d3137ec44286b17a4ab0df4b5c946db3e9bb50bd97cc0bff6f7ba6f1eb951d77e9f77d3727af7bf04105076f74f2c8b64005b1175f1c8f5cd94\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-osx-x64.tar.gz\",\n            \"hash\": \"a6e867fa4a9774231c736dd61e54efd8f62dc29fdcae6be298023ee86fbc8d75867d58d5968ffe566a497dfc1b10ef0104194af495d5cad48871e989b1bc2778\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-win-arm64.zip\",\n            \"hash\": \"7d3576ae6d6924fa76ef78ad229115451ed33e51e39df28ee71ff60f0acfc90a6554ff1f421ca73456280dc039d9b93b8fed93d3dc6fc2103c5aa2bb217f58d5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-win-x64.exe\",\n            \"hash\": \"5c0f00e3adb2cc93850c7962cf632214dce85f3075901ee9b9749625034023b461660e444c3e20c054bc175bcf51401866191789e533271a83e6059fda4b6957\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-win-x64.zip\",\n            \"hash\": \"548764828d2e122f1d1da9335a193a8dee818a3e3c6d705b4e8955a9ae9ce97a6fdb3187f04b5b4690998b8a8918d1dd052a738a50f6a7f554e34b318d54e284\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-win-x86.exe\",\n            \"hash\": \"df7b83a2d7c9a7facdb1d19a958fdc0cb1c9220249a81f35433978c6965098a23025288b15d1e7307f3a53718dc6406c00a553f19011b4f772bfc4165da21c3b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/aspnetcore-runtime-7.0.2-win-x86.zip\",\n            \"hash\": \"fd52c5cc067c1f79fe30fe9de2de2b9a5bea330dccf8d18fda34c0b857817fa84ffe46560f635f5059d35d39721258d718461c1fe9c3df27ad0944fae32e8ce2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.2/dotnet-hosting-7.0.2-win.exe\",\n            \"hash\": \"183f3510581e6a8ed7c8d40d1608d1db8050640d79ff133e013bbd45dd3867733adf20d9723d49820b9c474863e269c1d6e8e3dd74354154ad6da951ba58e55c\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.2\",\n        \"version-display\": \"7.0.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.2/windowsdesktop-runtime-7.0.2-win-arm64.exe\",\n            \"hash\": \"833aa91c9fba4243668ad39b3be91c10a17fed692ed74a83cc79d3320f126119a5d5d01883b9248203fc55ea7dfeb49e28ca77c6a918a70859bb300c66160f3f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.2/windowsdesktop-runtime-7.0.2-win-arm64.zip\",\n            \"hash\": \"79f8317cc1a2788f60ddefa1029d05e943bb68ff9698906c53c7f8392319149ba62f6b1be79015a4d7149cc7dd9f470e16bc6b1bc4d1daa596493d5477539a65\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.2/windowsdesktop-runtime-7.0.2-win-x64.exe\",\n            \"hash\": \"f40a360ffbc9b3c21eed07f2400e595505377f467ad3f80377937b88ea89f1afd302c00fe5e4a0bf4b7e281cb1af3d2f79b3ced7ed408d97b465310719199447\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.2/windowsdesktop-runtime-7.0.2-win-x64.zip\",\n            \"hash\": \"ee00805d6e97982d760f76ea780902897b91abac81e55566c224c0e73fb9922df784f40b4615e7bb7621c0b0bac043c84896dfcdef7f68071adfc63652016a10\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.2/windowsdesktop-runtime-7.0.2-win-x86.exe\",\n            \"hash\": \"b50a1fc97c80cd330cee098e171e2b6e6b96553203d05a2aee195c1ee32c23a4162f90e11e4fa8a8fec3e55a73a0e95bace4c8266207c47ba8e9c26296f376e5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.2/windowsdesktop-runtime-7.0.2-win-x86.zip\",\n            \"hash\": \"4c6c153de2635d330c0057b2808b7a1519b0803cbe9f90ee41087f1357e0f2160a00a8f10f9c6c74d64814615600be11cf59668e00fb32e202974640d2d0ae37\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-12-13\",\n      \"release-version\": \"7.0.1\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-41089\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41089\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.1/7.0.1.md\",\n      \"runtime\": {\n        \"version\": \"7.0.1\",\n        \"version-display\": \"7.0.1\",\n        \"vs-version\": \"17.4.3\",\n        \"vs-mac-version\": \"17.4\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-linux-arm.tar.gz\",\n            \"hash\": \"2ff35a40fe8809743eacea8d38c15aaffa54f17aaaaa07914c437e912c7253ae7d143fb8a968ed98238af8cb6d14f36b5b062a6a4297c16bae75b46f3b040e26\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"53e9b03326c2fdb8d2366a97f3cfbeca4f0f497b82cf665d5d4543f5d0fa8a177c53e8f48597f79072e962e3c7ef6baaca96143c2f775be52071e8ebbae88f34\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"99f810df69a571c8966deef65234b50c7064c63164af370d1d0b5976ff919900d008f3a0d5e1e4b76a2efc288a0ecc39026de97ee2215f38f6ce3cbc2e844840\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b9a7f44e93170a538963f5078c756993c414b5594bfc86965ee03fd83d681f4a65cbdf783309e5b66fec35fc982aa49c89137ed8d22897cf0aa8db9aaabdba08\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"41640448d291d9373d2effd5e61cd8f24664891df7f46fb6eb4fdb16929ff774a12a3ee4de90cf4357ec230b07c56978abf2ceeeb954d74baa48bd3648177e0f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-linux-x64.tar.gz\",\n            \"hash\": \"db79b221f6bfa4d56fe0e2b7c237612bd74a81deb18f038ab7226b9e06eaea6e90909f1493f0ab4cf7778b6544b8aaa1295ece1c4a9f1fe39ca44bbfaced46c7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-osx-arm64.pkg\",\n            \"hash\": \"6274ea73ada1086588233f35fe4cb66fe1e45ca5e224d67c5a5eea9c73b276a1c3171e6cb123242df8b6abdb21910e93905e836c4a9512f837099af18d9e344b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-osx-arm64.tar.gz\",\n            \"hash\": \"2a4e583ed1a2c32de6feb25019eb9fe4fbe26d0cc1ab45a2c7f93db61ffdeef86e37a8af5b36fff0729d649743206986374173dbc0db84d5c0f13b308e40c96b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-osx-x64.pkg\",\n            \"hash\": \"2a4429014bc578b5b4e4323978d04f3ea169f79d3316a31461f1f1ec9f39d96fde423f167321a469d22a62311097134a2be965906ee4c0e14a4a875f6d6a725a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-osx-x64.tar.gz\",\n            \"hash\": \"bec337234d04da6530437bd13ec59e0112c4cf951402e0a5ff79c60c93498701e5b5abc6dffc5afa5ccfb214eb879d278ee5beaac8f4f7043ae183157a7ab476\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-win-arm64.exe\",\n            \"hash\": \"51b572f19f9deba9b6e862032d91b76207d99029220980ba0ce786981d9e9b63c6d5e5f76e254493ad41d6c252e6b1bfd0ffe3b18aecd94af7119afffd43b33a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-win-arm64.zip\",\n            \"hash\": \"302c50c8113baffdcabe579c744a7a1496bf3dad65ccd0e51e8a2926dcfd2e668ecbbf5561fcecea3ccb7e3ea29a34f3447e3f916827214b45bf1d51b95f5130\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-win-x64.exe\",\n            \"hash\": \"5cf727a7128a52d839d17ba5b5b6fc2b13c18347e78ea8d3605946f7fc4306f1b3702a63d7e42210d2a7e4379fda94fcd1002bb02824baedfa11e15157e0ef12\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-win-x64.zip\",\n            \"hash\": \"36a2245abc70c794282a7e6f270585baccd074875faff09b6eccff1c7ac8fada782951bc0f34bdc4bb33794508660346daa39c03aa0a45313e109c05eb98bd13\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-win-x86.exe\",\n            \"hash\": \"0c00750180822381711698884dc1e713ea8107ebc26f98a9060f749e8b4744d4f58b04707070f4ee8fe9d720cbf64d5e67a1b17a4933d3e244c8e8b74171ee3e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.1/dotnet-runtime-7.0.1-win-x86.zip\",\n            \"hash\": \"ba2767b0372fb0a10c4fa6422f33d6f2dab2e29796755bd34f13f2c7b404a81411786238fb87d0c04eecd154657f695ec0038269225da84632c85659620e0009\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.101\",\n        \"version-display\": \"7.0.101\",\n        \"runtime-version\": \"7.0.1\",\n        \"vs-version\": \"17.4.3\",\n        \"vs-mac-version\": \"17.4.3\",\n        \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-arm.tar.gz\",\n            \"hash\": \"e8aed900dc127c035d21d13d4600a9fb5e921da23d578b3e7c130951e4feb434f6017cd37eb96fbdfb1bae964a364c6981213c3dd358ec9ddd1f7437a394d4de\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-arm64.tar.gz\",\n            \"hash\": \"b0874f4167e9792802b46a7ddcf3a7f7bf7329eb3699d4308b1cdd45ef32678962bbd0ccfd186e48e11cac3b198c4415ceac2f5e546d5fcdf0cecb05810863f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-musl-arm.tar.gz\",\n            \"hash\": \"a454cbffb42b218d3d2d37fdb68f2a15fc32319472abc61d018701b7845d9828c65bb1157eab0789c7073a411fd4744e969bec912e0a4b737c31714acd80006f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-musl-arm64.tar.gz\",\n            \"hash\": \"341819fe59a7eb2199bafd4e01bd329f522d20e9f8f796676dfd7cdbfe59e1344eeeca6aadbce70fab44d655036ab86bd2b34135c732ebec068009b63f8f510f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-musl-x64.tar.gz\",\n            \"hash\": \"e487532682df94378387acf07a11583a982418a46ccd07a20258ae8850fd549153d468771d9e44171790322f5fb3571be0ea242863853c5f95ca6697463f7262\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-x64.tar.gz\",\n            \"hash\": \"cf289ad0e661c38dcda7f415b3078a224e8347528448429d62c0f354ee951f4e7bef9cceaf3db02fb52b5dd7be987b7a4327ca33fb9239b667dc1c41c678095c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-osx-arm64.pkg\",\n            \"hash\": \"4237cd3a7558ce413dc86cdf31330397a55c5a7ba58fe15fc857d82fd01b39cd0857b510f3274d42ff085ee470a462ca3edc52661af1cc569dd35fdbd9817092\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-osx-arm64.tar.gz\",\n            \"hash\": \"586b5a8f32601ffb8466e0135561a02105766388997bab92a428b4567ffca961dba540d4f6fe237f3a4ea068dd4bf3c9050c8557c0cb7e25f4c020fe0a62377a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-osx-x64.pkg\",\n            \"hash\": \"58fccf4b4a53e392767ab1ef1a43947bbac46c6628a0a3903c1955c57a5e0d3c77a8d58b21c04c7ed2b4f23956d64ff51ff43182e6d8191686337f36d3f2f6f8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-osx-x64.tar.gz\",\n            \"hash\": \"f08a2137c37386ed9408106d10a3bac5f1a12dd3535e20e4384a96193b82fc27c15ba0ccc47e9bd7a12e533a3e9f0e220a08a220887cd12c678fed476ee12bb5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-arm64.exe\",\n            \"hash\": \"6a331577b48c8b17a8ed7d0ee2dbfcd26c4d56d5e8668b67d44f8bea0e4526185560eb8ca9f8a26c8d3cae23d9d64877c2ab2ea6fe9486dda222cab34e3e9421\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-arm64.zip\",\n            \"hash\": \"a88018791d6544d5aaabd13dc9291bfc6963fd39af3b67b4cf2aaec5b9e8bbee4dd16d35ded9d296d8a929082dfd6e13d6b2ea5677461d5fd7df1cc7bbd30e78\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-x64.exe\",\n            \"hash\": \"51776ee364ef9c79feaa7b7c970bb59a3f26344797156aefad13271e5e8b720c9746091bfc7add83c80752c40456491d062c54ae2d1ed5b0426be381a0aa980a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-x64.zip\",\n            \"hash\": \"f7083e2fef2f5c93c7d899cdf047f5c88626603ad0fdddf1f176820b74a32e3fcfb2402aef49406765ac8f160b5b48a714f09db2cce0ed04575f71dc6a49eaed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-x86.exe\",\n            \"hash\": \"6dc59541be52f01216a7acdd1de9fba6ed3ce43da850055aae6cce6412cb3cf4af333bfa463775b1ba98d3a03613c1e25a46c22bae331cabee3e6bc011183040\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-x86.zip\",\n            \"hash\": \"ee3bc0f39adc99baf1870d0a8f6cf9b14458b92dac0722cb05a778afc07350d414cb1092cea44d88efdea5c67a39b5f8037892ba8de099da171d0bc132f1f651\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.101\",\n          \"version-display\": \"7.0.101\",\n          \"runtime-version\": \"7.0.1\",\n          \"vs-version\": \"17.4.3\",\n          \"vs-mac-version\": \"17.4.3\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-arm.tar.gz\",\n              \"hash\": \"e8aed900dc127c035d21d13d4600a9fb5e921da23d578b3e7c130951e4feb434f6017cd37eb96fbdfb1bae964a364c6981213c3dd358ec9ddd1f7437a394d4de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-arm64.tar.gz\",\n              \"hash\": \"b0874f4167e9792802b46a7ddcf3a7f7bf7329eb3699d4308b1cdd45ef32678962bbd0ccfd186e48e11cac3b198c4415ceac2f5e546d5fcdf0cecb05810863f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-musl-arm.tar.gz\",\n              \"hash\": \"a454cbffb42b218d3d2d37fdb68f2a15fc32319472abc61d018701b7845d9828c65bb1157eab0789c7073a411fd4744e969bec912e0a4b737c31714acd80006f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-musl-arm64.tar.gz\",\n              \"hash\": \"341819fe59a7eb2199bafd4e01bd329f522d20e9f8f796676dfd7cdbfe59e1344eeeca6aadbce70fab44d655036ab86bd2b34135c732ebec068009b63f8f510f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-musl-x64.tar.gz\",\n              \"hash\": \"e487532682df94378387acf07a11583a982418a46ccd07a20258ae8850fd549153d468771d9e44171790322f5fb3571be0ea242863853c5f95ca6697463f7262\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-x64.tar.gz\",\n              \"hash\": \"cf289ad0e661c38dcda7f415b3078a224e8347528448429d62c0f354ee951f4e7bef9cceaf3db02fb52b5dd7be987b7a4327ca33fb9239b667dc1c41c678095c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-osx-arm64.pkg\",\n              \"hash\": \"4237cd3a7558ce413dc86cdf31330397a55c5a7ba58fe15fc857d82fd01b39cd0857b510f3274d42ff085ee470a462ca3edc52661af1cc569dd35fdbd9817092\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-osx-arm64.tar.gz\",\n              \"hash\": \"586b5a8f32601ffb8466e0135561a02105766388997bab92a428b4567ffca961dba540d4f6fe237f3a4ea068dd4bf3c9050c8557c0cb7e25f4c020fe0a62377a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-osx-x64.pkg\",\n              \"hash\": \"58fccf4b4a53e392767ab1ef1a43947bbac46c6628a0a3903c1955c57a5e0d3c77a8d58b21c04c7ed2b4f23956d64ff51ff43182e6d8191686337f36d3f2f6f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-osx-x64.tar.gz\",\n              \"hash\": \"f08a2137c37386ed9408106d10a3bac5f1a12dd3535e20e4384a96193b82fc27c15ba0ccc47e9bd7a12e533a3e9f0e220a08a220887cd12c678fed476ee12bb5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-arm64.exe\",\n              \"hash\": \"6a331577b48c8b17a8ed7d0ee2dbfcd26c4d56d5e8668b67d44f8bea0e4526185560eb8ca9f8a26c8d3cae23d9d64877c2ab2ea6fe9486dda222cab34e3e9421\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-arm64.zip\",\n              \"hash\": \"a88018791d6544d5aaabd13dc9291bfc6963fd39af3b67b4cf2aaec5b9e8bbee4dd16d35ded9d296d8a929082dfd6e13d6b2ea5677461d5fd7df1cc7bbd30e78\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-x64.exe\",\n              \"hash\": \"51776ee364ef9c79feaa7b7c970bb59a3f26344797156aefad13271e5e8b720c9746091bfc7add83c80752c40456491d062c54ae2d1ed5b0426be381a0aa980a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-x64.zip\",\n              \"hash\": \"f7083e2fef2f5c93c7d899cdf047f5c88626603ad0fdddf1f176820b74a32e3fcfb2402aef49406765ac8f160b5b48a714f09db2cce0ed04575f71dc6a49eaed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-x86.exe\",\n              \"hash\": \"6dc59541be52f01216a7acdd1de9fba6ed3ce43da850055aae6cce6412cb3cf4af333bfa463775b1ba98d3a03613c1e25a46c22bae331cabee3e6bc011183040\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-win-x86.zip\",\n              \"hash\": \"ee3bc0f39adc99baf1870d0a8f6cf9b14458b92dac0722cb05a778afc07350d414cb1092cea44d88efdea5c67a39b5f8037892ba8de099da171d0bc132f1f651\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.1\",\n        \"version-display\": \"7.0.1\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22323.1\"\n        ],\n        \"vs-version\": \"17.4.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-linux-arm.tar.gz\",\n            \"hash\": \"13585a0eb2997b24a37f554581c4014fb6e04fe6839a5804a899fcd4424b27ba3729f7003cc36ed0c1af4c0642b25d6fa7fd444af0a09f40117721ac6682c40a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"e80bb0756ba23ebeff96b5e97758a4c74f2bea29b718860e795d62402604c42ec9b544e89e94662a037bc0a68a967b93a2e6321dfd3c4416cde47cf188f67186\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"67423913d25a3c7e2a9a251970b1b5566de9b3931ed4c2d7775985e3ffe15d7fa377245879cc4390eacd5a9b78285a237381c0223112cfa2488dcdd508c27778\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"89e5b79e70ded7036c0db6ab8119e28ec2d0608e04fa99218defca2061fba0b927fc90af0c2dfb5ae384333f814d7d9f66e8218b3fb519b941cfd958461452b7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"e92d25bec3a3b0be34d433e572dfc344c84541fd3455362bdf6621cc47a542b1d9eb85bdf58877a76aea58223c9073e7768d60ba11ae2e308e499d2994ff329b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-linux-x64.tar.gz\",\n            \"hash\": \"8265cc0f35591ba58b4c6e12378048b72d1a767c56fe29fe9b495c4ec537ed43ee30890412ae2d52b15a732bc164894d10fa8a59407073d41ac62a3fe6254f81\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-osx-arm64.tar.gz\",\n            \"hash\": \"d804532c874279653fc329f23d246dd76aa375acf508de141e5c1d9d89e353f7085e53f1898cefd1d21d4bf98a719d658207b9d08c35bbc2f23d2759fe7cccf4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-osx-x64.tar.gz\",\n            \"hash\": \"ce0f100cb4494c6133e2710ed92da8c7c7e7fd5626dd22052d9864c22ef4eec88b1418ce7357cbeea4349f12672efa3fe9bae5f3d41614b8fd70930b872844b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-win-arm64.zip\",\n            \"hash\": \"42391d73ba36630d7627cfeea13a7d54b4f86e23094d8d266b6c34bca7cd7d028e281c1057fbc3c12fe9d43c833ab5ee39ec18b7e2ca6297c4a81cceb0ae7f8e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-win-x64.exe\",\n            \"hash\": \"20ccfb5582a1aac5c819a718c77f0f5ccda92cc16930ad9549b193a70635d17231b8045eb2ca2a37dca93464bad7a4cc5e9c1664773b066dd814147b76b911e5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-win-x64.zip\",\n            \"hash\": \"7afa7bb9febabe32b9a38ac9a6376e342cb08c6d1f967647575b49995dd74feafdd6e6723688e1378a2edbd7e893ce15a75c74bec534303f0e60356ccf29d330\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-win-x86.exe\",\n            \"hash\": \"3c6b798a992a3ca8c4f1e3b1dfd01f8561059b5e6814123dc1d7107bd13ee93f75eae9fc6b40a80c08d2059d14952eb3d3716f24e0371cd1e043f3dff36cc05d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/aspnetcore-runtime-7.0.1-win-x86.zip\",\n            \"hash\": \"df498919954ea4bedda3e12a680861f81c64fcf166cf85046ca1e472c3ca5b4311882ae0fae1ede4a704085b2a6640adfe103090c82b9783a7c86970463a93ed\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.1/dotnet-hosting-7.0.1-win.exe\",\n            \"hash\": \"d0296b2332ed125d2710c71022c307cf073ac9ab5a474b2d520357312cc2096c2d572421e0591212a6b4c6ea37876f25cf5e7dc3b0ff86804c62abfc6b6aedae\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.1\",\n        \"version-display\": \"7.0.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.1/windowsdesktop-runtime-7.0.1-win-arm64.exe\",\n            \"hash\": \"bc8034081899706538277c948d9756212e6fa5ceff297ed1d31bc4f7f515424d9e23d399d518bb8c4b15d09c8e0f32f4308218cde7e8302bccc2297d0f13b006\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.1/windowsdesktop-runtime-7.0.1-win-arm64.zip\",\n            \"hash\": \"bf9573bb8039c709136d823881be677851c29c4ac82543263f25a9a4957ba93a4ae392279a3c6a050270f7a829aef2886114bbce2215b7d43ac2805ecfafd171\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.1/windowsdesktop-runtime-7.0.1-win-x64.exe\",\n            \"hash\": \"827d66faf8666c8f12b6f85faece3edf3d87346ee71422b2d70e9e05e272b6d6bf0ff33b61348860effdfae1f4e91fcefb4ca37d76cd83267582733fc7df6728\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.1/windowsdesktop-runtime-7.0.1-win-x64.zip\",\n            \"hash\": \"45853c53e7b8d98aefebbd886f7af93cbd84a0dcbdf235ab314601718a3ddf4ce1dc0ca2f83aa6cad7c5248b073d8e4aec6c4abddc02b94188fd0e7f855649aa\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.1/windowsdesktop-runtime-7.0.1-win-x86.exe\",\n            \"hash\": \"f918e5bb69cb1744fa0e17b5c759c30aa4463597d37f72edd914b32df126dd23e8c0259c3853a0eabb81ea0c98d3981f1eb541916ebd62da73d033bdc9135647\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.1/windowsdesktop-runtime-7.0.1-win-x86.zip\",\n            \"hash\": \"d3013897a5f53e3bad12555defe430b340ce6bec3988ae8b9c00de37d1462060e1ff6a67fd448561284ed0217b63f8355f91613c8249547d65bc568037c9fb02\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-11-08\",\n      \"release-version\": \"7.0.0\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/7.0.0/7.0.0.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0\",\n        \"version-display\": \"7.0.0\",\n        \"vs-version\": \"17.4.0\",\n        \"vs-mac-version\": \"17.4.0\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-linux-arm.tar.gz\",\n            \"hash\": \"753815bc879465facdb81f3ddb65e0feec9f0a33c89ce7e2414b2314c0e143a76e3b4ac639448d9703b6f412a9824cc9cfc6a0d049be07336d1566ef565e3794\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"a359402471c0c4f11f9e472ee6f8d7d165b57a29f132e01a95d3ee4020fa27f9c6ed5ede4b41786fd9bbad1491a4726c6f45d105c19695c0a1cc9a9d414ee614\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"3d3c3a62f6e1b457604c5d642ac79027d804d2a816860f020806f77432d9e2a402dcde45c98aea68a2ec93ea97161f65222186e4bafee58d72e8122de941ce61\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8e51878ff716d56366c52af7ff92375d3df796ceb56a74ff88fce6c3461003ed05be1ed6504c0d7d217afdce1097895c8df508d4c64d7fae537ff53482c3f8ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"f37774eee98f38d9849c79d05c58b0d9e733d480b31a0615a1039613662579efef392d0129b2582281861c0647bacdb3acd78213bd33869b698e529b8e78ccee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-linux-x64.tar.gz\",\n            \"hash\": \"f4a6e9d5fec7d390c791f5ddaa0fcda386a7ec36fe2dbaa6acb3bdad38393ca1f9d984dd577a081920c3cae3d511090a2f2723cc5a79815309f344b8ccce6488\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-osx-arm64.pkg\",\n            \"hash\": \"83b65c15c5cb76185d834f5823773e03537f471346830a93ae1a17d2635c3a5786bfbbf581bf9d0216e4f46776eaf8244143de6c5e62ea676599e82722deb3bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-osx-arm64.tar.gz\",\n            \"hash\": \"4a0dabfc8008dc39c3e7da6315475d5a20d30715cf1f4139e45ad1579486ba005a876918cf69369281b47d6932c070e735a4d7d84dbef8b0ef79f52e12b21d02\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-osx-x64.pkg\",\n            \"hash\": \"f02bd537c781d8a9045fc1883fcc9a2cd603f49cd06d91da783c1e03f52b1242025d6fde5c53fb8045baad7cffe7fe5546e45079377dc69c8c8f3943b1bcd819\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-osx-x64.tar.gz\",\n            \"hash\": \"b9b906561a443b0fc2064d7dfb9c497bcc157421c0fa7967547673e098c091a29012e36af3282d7bae9d51c216a31578b086d82c6e10ef6244e773b40ab57081\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-win-arm64.exe\",\n            \"hash\": \"cd6d79ac033b737f5d9ba6b06fea2c97eec216c85d6961cf6b0d0572ca4dfc5997a82aa8969edb26aeec0bae8deafcd702522f36726d8df1e61c80bf5966fc62\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-win-arm64.zip\",\n            \"hash\": \"325e02c7a6ab01c930fe199c56ef8248184774588a21d9f0f2ae61706f6d0360a8f2cd6523e0b2253de23f4b3851453a0ed8872ff0d5d548b14d5db9e6cbb82c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-win-x64.exe\",\n            \"hash\": \"937519b9479e1a5499e4ab807251c969ea9d4b5a5f80a7a74928b653f24f460d01445a144f084173bdae17da5ebd60ac641601ecd4c4e35c98f223da67be0d0e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-win-x64.zip\",\n            \"hash\": \"96bea9aa573326af8fa002a43e73115f0fed8446091a3e865796c4e9464b7b0ed7d953d32ce63377ac0994cc61f462215f7e2a426551e8ec5b891c50341e6498\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-win-x86.exe\",\n            \"hash\": \"d5e667c6a49e8c10466a2c2cdbc225c90a405ede45414b9ef3362df781bb49436e9abf4b905d8f3dbbd28a2ff173db7e13bc8a9abe005860a5fd64a699079cb3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0/dotnet-runtime-7.0.0-win-x86.zip\",\n            \"hash\": \"135c44671f8a4618239c0ea19cfc83df39622afb71cf60f275db5eeabd7539453ea8d9d967b5d482ca4b0610bc47b1e2a06cce057d5e85bda4b82c257140f644\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100\",\n        \"version-display\": \"7.0.100\",\n        \"runtime-version\": \"7.0.0\",\n        \"vs-version\": \"17.4\",\n        \"vs-mac-version\": \"17.4\",\n        \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-arm.tar.gz\",\n            \"hash\": \"11c1150357a0a79095b563671bc038085f8bbbc678a47681c4decade22fcb18504e60732518e681a5688008e7ffbad69933a8ff3bd91c09ff4df66a80a596809\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-arm64.tar.gz\",\n            \"hash\": \"0a332df58891e808c9adc2b785e9b0e658b29b494963c8d501b0f8806ff5d3daad4614886349cbba86af638ed7ac76e78a2d05aeca13bac25d5f45fbe62b8251\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-musl-arm.tar.gz\",\n            \"hash\": \"26b7ca079c8c2bafb32b5794de698dd325837897ee4120d0a7bbbcdc7f034de5031c6f30536866ccd7d1338625f937f41cfa5524c64163faded58846bfa674af\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8b3e95cc3e80eb05c7a0bc7ede1033320e03c78f4ecb7cc99b85fa99f56d72bc06342f342fe957e4aadacf9fb83fff15e658ae62c8fa8b29051898929c5ea833\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-musl-x64.tar.gz\",\n            \"hash\": \"2ee0a055a3e46c6d9ced3cada5f91141b3966e76f4c4b11e58cd4c89ea69408a5b0efaaa21aaa04f743add38f1435f5a5852271a4222d5cd858907ec44f0af2e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-x64.tar.gz\",\n            \"hash\": \"0a2e74486357a3ee16abb551ecd828836f90d8744d6e2b6b83556395c872090d9e5166f92a8d050331333d07d112c4b27e87100ba1af86cac8a37f1aee953078\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-osx-arm64.pkg\",\n            \"hash\": \"ffc9e6dd08b3e6edf411dde8d46a84a02d9324ac8765830831e424027fa744ac067ceba7406b13f231ea2397ff36517a090143874575ab1a829915403d1099b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-osx-arm64.tar.gz\",\n            \"hash\": \"d1af8592bc8aec43069f689449c159a4b13da419a924dab495b66bbf8c99b526c75c609171205b6d1b30bb0ff6f57797135245048e3629fbb33f462171107581\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-osx-x64.pkg\",\n            \"hash\": \"eecedabf8eb36d1deb2a549b1dd0c836b58fdd12429acf552bc26ef1502d53efed17c3c2ad4d5e13a64f6fdd1591e5252ef106e887eaf3564b6daaf81542af80\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-osx-x64.tar.gz\",\n            \"hash\": \"86165993dcf768b3ce793e94739ae681f30b63b3f7fdc82c6da7692f3867f93c19ac5b9152bc8f45708f4194187d60b706e0ee61a37f6e1470536c95a5e53e1c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-arm64.exe\",\n            \"hash\": \"521a07838b3fbcd833f2bf1e19654ff59d8c2a9cc9829d87f305d3bd23df448fc2bdb694b6f3a376223b6e83af22adb26c0efc26ad9cf3b1c9e33a33d412dbf3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-arm64.zip\",\n            \"hash\": \"62ecf2bb2466da663117563b8cc8059fc6dc79f3180012039692e693a14bc98daeb7218f83180e8bfa15f1aa419b780af4424b265a9f231bcb3f6feffc9ed921\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-x64.exe\",\n            \"hash\": \"32dceb94ca6b2445ec39802d7bb962e2d389801609ffb6706925539380fcb9c9ed75b932daae734ea8d5189d34c956494f50648d3dc3e292392607360bb47f35\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-x64.zip\",\n            \"hash\": \"e77fa3501f6945dd5730dbcec7632f070314717c6abfa95f95e13db53bfd55d2f46faa45809f796535749c8d98251828a4b4ab4d5ceb3ee1daa5262c6907f906\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-x86.exe\",\n            \"hash\": \"8d9d1ffdc2749ed837f10401a999a88cb7f747f86b32d0ec5fdbdfdba83d2b8290a14430a2910971b4831c5d324af1319ae6ba608bc552ba9c6efef96badac22\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-x86.zip\",\n            \"hash\": \"ae586c292334c51eebf5f0e6bcaa7e3a56a06a37d24278bd132f2df62702f79fab3b4a478c2b25a2920e40d34b3b79d89cb1c831eb1d94927f0652842d47a5a2\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100\",\n          \"version-display\": \"7.0.100\",\n          \"runtime-version\": \"7.0.0\",\n          \"vs-version\": \"17.4\",\n          \"vs-mac-version\": \"17.4\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-arm.tar.gz\",\n              \"hash\": \"11c1150357a0a79095b563671bc038085f8bbbc678a47681c4decade22fcb18504e60732518e681a5688008e7ffbad69933a8ff3bd91c09ff4df66a80a596809\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-arm64.tar.gz\",\n              \"hash\": \"0a332df58891e808c9adc2b785e9b0e658b29b494963c8d501b0f8806ff5d3daad4614886349cbba86af638ed7ac76e78a2d05aeca13bac25d5f45fbe62b8251\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-musl-arm.tar.gz\",\n              \"hash\": \"26b7ca079c8c2bafb32b5794de698dd325837897ee4120d0a7bbbcdc7f034de5031c6f30536866ccd7d1338625f937f41cfa5524c64163faded58846bfa674af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-musl-arm64.tar.gz\",\n              \"hash\": \"8b3e95cc3e80eb05c7a0bc7ede1033320e03c78f4ecb7cc99b85fa99f56d72bc06342f342fe957e4aadacf9fb83fff15e658ae62c8fa8b29051898929c5ea833\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-musl-x64.tar.gz\",\n              \"hash\": \"2ee0a055a3e46c6d9ced3cada5f91141b3966e76f4c4b11e58cd4c89ea69408a5b0efaaa21aaa04f743add38f1435f5a5852271a4222d5cd858907ec44f0af2e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-linux-x64.tar.gz\",\n              \"hash\": \"0a2e74486357a3ee16abb551ecd828836f90d8744d6e2b6b83556395c872090d9e5166f92a8d050331333d07d112c4b27e87100ba1af86cac8a37f1aee953078\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-osx-arm64.pkg\",\n              \"hash\": \"ffc9e6dd08b3e6edf411dde8d46a84a02d9324ac8765830831e424027fa744ac067ceba7406b13f231ea2397ff36517a090143874575ab1a829915403d1099b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-osx-arm64.tar.gz\",\n              \"hash\": \"d1af8592bc8aec43069f689449c159a4b13da419a924dab495b66bbf8c99b526c75c609171205b6d1b30bb0ff6f57797135245048e3629fbb33f462171107581\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-osx-x64.pkg\",\n              \"hash\": \"eecedabf8eb36d1deb2a549b1dd0c836b58fdd12429acf552bc26ef1502d53efed17c3c2ad4d5e13a64f6fdd1591e5252ef106e887eaf3564b6daaf81542af80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-osx-x64.tar.gz\",\n              \"hash\": \"86165993dcf768b3ce793e94739ae681f30b63b3f7fdc82c6da7692f3867f93c19ac5b9152bc8f45708f4194187d60b706e0ee61a37f6e1470536c95a5e53e1c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-arm64.exe\",\n              \"hash\": \"521a07838b3fbcd833f2bf1e19654ff59d8c2a9cc9829d87f305d3bd23df448fc2bdb694b6f3a376223b6e83af22adb26c0efc26ad9cf3b1c9e33a33d412dbf3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-arm64.zip\",\n              \"hash\": \"62ecf2bb2466da663117563b8cc8059fc6dc79f3180012039692e693a14bc98daeb7218f83180e8bfa15f1aa419b780af4424b265a9f231bcb3f6feffc9ed921\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-x64.exe\",\n              \"hash\": \"32dceb94ca6b2445ec39802d7bb962e2d389801609ffb6706925539380fcb9c9ed75b932daae734ea8d5189d34c956494f50648d3dc3e292392607360bb47f35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-x64.zip\",\n              \"hash\": \"e77fa3501f6945dd5730dbcec7632f070314717c6abfa95f95e13db53bfd55d2f46faa45809f796535749c8d98251828a4b4ab4d5ceb3ee1daa5262c6907f906\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-x86.exe\",\n              \"hash\": \"8d9d1ffdc2749ed837f10401a999a88cb7f747f86b32d0ec5fdbdfdba83d2b8290a14430a2910971b4831c5d324af1319ae6ba608bc552ba9c6efef96badac22\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100/dotnet-sdk-7.0.100-win-x86.zip\",\n              \"hash\": \"ae586c292334c51eebf5f0e6bcaa7e3a56a06a37d24278bd132f2df62702f79fab3b4a478c2b25a2920e40d34b3b79d89cb1c831eb1d94927f0652842d47a5a2\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0\",\n        \"version-display\": \"7.0.0\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22292.0\"\n        ],\n        \"vs-version\": \"17.4\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-linux-arm.tar.gz\",\n            \"hash\": \"560f1a38498f36ccd7429f74e0dfea9e14ab668fc1f916e16542ed3ea4d6a8344f8605143b3c6c8f99248496d77767abedd69a50802d5507324cad44eed6fb1b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"ffee38cb0c8fd3ba20f3d814b7e141f94be18620eb91a229b80d7c609f6cad77efb7f8f276e9fbee4f3ed8cce33cc0659f0dc77faeb8f5427c95deead97275d7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"e3e66099bc70e87902c35b5b84efec471b31d2607789088bb94b4aa903b518376879c683dc501486a43a1713afe77a437d0e3fef956abfb6005e1c73e355c9dc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8f6a881a061a6b5459039b57d1d8b9363828bdd4b98c16a214202b7e0a9841f07ed45cbd13d9ed588ba4ff5c072af4748f9728e64b6ff88559b72e395986e674\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"099cd5b3078f50036e5a638a83aaef987fa1a01f593986cca97ee35c8cb4e2707bf49559ae1bc55cf063d5f8ac2d9a1ec1b64371e075550faf47febeadc9bb47\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-linux-x64.tar.gz\",\n            \"hash\": \"02ce2e0b3c4b1d0eb0d9bdb9517a3293404b2a1aaf23311e305b856bb15723414f6328887788b875f0f80361f3e195c872ea3984971e5f0ab1ad5de43950d707\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-osx-arm64.tar.gz\",\n            \"hash\": \"437f4fe11c95330eb56dc9e4a0c5836546d9e5b28f6cd0236ef563a82b0103e3526c0e6d50d44c90f4eb19bd6a1f409178d0f7b7620a2fff185aee6ae7cbe337\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-osx-x64.tar.gz\",\n            \"hash\": \"a1ab796c04d17ade8d93bc53b58ebeccd541d30aa0438bd81ff66c728dc13f934043f98528417eb976ea426e58107bef371b26d5877a550f2397005c5362a1da\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-win-arm64.zip\",\n            \"hash\": \"710f259bf47d36c8594a4e9997a1171f27772da713e127fd22e2e89501c57b78990a06fe38440e5422dd20e132951ac43ab7cdc9fb2690c1cfb8d17c59b61832\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-win-x64.exe\",\n            \"hash\": \"83a8c15057bdbb64efdc1cb25b5824d9723d9973e73a6e837313e9b7d259ecf85bbd24715e35e0fa92bff8a2193eab4e78cfdb4f48f1f72fef67e800e89288a2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-win-x64.zip\",\n            \"hash\": \"abcbf7b249b0a4591550328c734123685dccddc5dc73e5bc70bd34b04d7ad426ccaeb857aa8a4d9439a573a02f844b31b8a31b3d3acf28eaf1f1df3c5afaf7fb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-win-x86.exe\",\n            \"hash\": \"72681ee44cb17e75d8da95bbdf78a14c064b0af9075224b2f6fa4c2a3ac919ef744234dc92c16f30b59f1482b0f7400ede25472f15d3c27141eb48e8ab014b45\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/aspnetcore-runtime-7.0.0-win-x86.zip\",\n            \"hash\": \"d281f507407cc2284a8fe6d1cf85870ed6584b19e3da2da15cf78d72b62884e236b863513c3b2df68bb6e902a4385ac9f7fa552b9af496cb67cd76df535e4c12\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0/dotnet-hosting-7.0.0-win.exe\",\n            \"hash\": \"b04047d500ea7e2b93e732177e07cf6e5d9b50868dae6b2ba029e634fb5901ae124fba350e75017709d350667b14cb009542dea03f58fff1ee0c2eee7fad6ffa\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0\",\n        \"version-display\": \"7.0.0\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0/windowsdesktop-runtime-7.0.0-win-arm64.exe\",\n            \"hash\": \"9d7d71f6d07f58e2691f92f18862b3af884f39ec1e6fa4c0bf1e0d33a5cc00e6cc684ba87f432a3bb6db74be8fc6ff46571b7adc406d4ba01ab260560eb4ac69\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0/windowsdesktop-runtime-7.0.0-win-arm64.zip\",\n            \"hash\": \"193a353a99e15456b0ad9ac890e92057906ce954314ba494c5b91a139c18298aac7e5aac792ac12b90d30ffae1d127505696fd742f47c3a90f763d3eba6bed5a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0/windowsdesktop-runtime-7.0.0-win-x64.exe\",\n            \"hash\": \"e6281f475a58c8dc7b103d0cfd895e0f27235e25731b473514c82b77d8e555ea294f66ab3e119c5fd38c5a8f18b4a4d8508938d7cff70ab2186b47417349ea1e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0/windowsdesktop-runtime-7.0.0-win-x64.zip\",\n            \"hash\": \"4d8810788f01e1241704446e276cf235e7202bf4ad082720fef64cbe840e403ef910ba323d2f283c81f9c59e583e11a80f87fb0e4b54102f6574228ed6c9d550\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0/windowsdesktop-runtime-7.0.0-win-x86.exe\",\n            \"hash\": \"8904a454d07360ee1a4d75fb856afabf5192695602053f11f598650defe9acf5cb40ff20d70999af99971bac621dcfb01c63cb16014f93b3a498ab504ec9bbb1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0/windowsdesktop-runtime-7.0.0-win-x86.zip\",\n            \"hash\": \"69a10b05ca5ce7e9975eae8cef30769bb817d4b9dad7a17342825b27cb5c8bc11b4dbc114d237ccdfc181c4f496ef6534f1016147488b1eac8daed31baae96fc\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-10-11\",\n      \"release-version\": \"7.0.0-rc.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-41032\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41032\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/preview/7.0.0-rc.2.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0-rc.2.22472.3\",\n        \"version-display\": \"7.0.0-rc.2\",\n        \"vs-version\": \"17.4\",\n        \"vs-mac-version\": \"17.4\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-linux-arm.tar.gz\",\n            \"hash\": \"3ab4ba37fea1d263f40649011299bf53a2e026b4f900ebdc99cc4078a05fcd0cd08d5481600ca27a85953012e72b9c02ba3f5b2b31e433d110b03dfa3be83d6d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-linux-arm64.tar.gz\",\n            \"hash\": \"cc1f37687745a3aed3c161415fa57dd8f151f515fb2a030c6b2e600942d188837398038d81654a1137bfafc5e1733e351e7c8ea04678cd2457d6620a3381826b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"a18510d2db32bfd917b61e6c0aceb852eb9847f1bc9c228cb3057bcbcf2fe1456ef575bceca44e8dce0e8dc2ae079cdb4fdc293ffd1b3a38d7c07088778ad789\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ffac2009a9c2f9df27a3778bdb990f30da27f89a11c1c9c7296fa49c5a02b20cb508d515c2a613d71c59ff1b77ffea868b3837899bfc2dc6796bb159e824611e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"751d4bbd08039dee405f92f3b2f5499ee65b6bb646124d5826a23b0979efb71848873f20dcbd3c6a66fc815c4f2bd1cfa9a6834dacb131350ac0f122b6b698b1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-linux-x64.tar.gz\",\n            \"hash\": \"2294605e371ec575e59baa1eacf973d7dd6761d5d161f4988ed6c51d5db2795a4dc95709d6eaf38ddb2caee6f0551225b49be5cbe42233c2ffae3a0f63d4412c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-osx-arm64.pkg\",\n            \"hash\": \"d966b830acff29846f3802c0e141d03cb3683012d076a86f09340126e9bc7b3fb04d368a0fb5747e3e3dd217b908577765797855b7f36a6c3e4f859d833ca02d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-osx-arm64.tar.gz\",\n            \"hash\": \"1a4374c3e01a1204822da82be919ce5e3814e54167f78410b23e85e10e8df16f84340588f6b3e3e24eebd762ad4545cb1e5ab8fd01cf8fce6f25fec71701945a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-osx-x64.pkg\",\n            \"hash\": \"9cb2cb96241354c1dc59f2bd3b34099271e00216daf5933db8c7b2440e6eb23b7644a81d8ed8749b8483777742ff290e91aabdf6102b7690162fa1563aa406bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-osx-x64.tar.gz\",\n            \"hash\": \"840835baa12d79404ed1ec59d33cad5d61980dfa2f596f0da56e421ba20f0ec8a91476e4f4b92921cab9c0c95f22f8989dce6394e8f4b3701a54945829ad4a91\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-win-arm64.exe\",\n            \"hash\": \"af9e2cf805dd4495a779179df520ef784f0e28972cfff0fc55d3bea815614ce4cb97c31e96d419184944e9e13aeadbd0ecb0e62ed429796771ccf5023b3d3d13\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-win-arm64.zip\",\n            \"hash\": \"215daa0a0d1418e35451301988a9384afe324903fcb72053ad9d277b1e8b78ae1775db15893a6a8ece5265d6015ff06139af0bd2e0136af52707f4277c038e12\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-win-x64.exe\",\n            \"hash\": \"796272a7725a26180c60a87546093d941be113a05249d0107ebec6587c464085b1c6d4c8b0a793d9764068d1100f728e1d906744587b72263dab1c7c3463ac7b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-win-x64.zip\",\n            \"hash\": \"9206c26d06f4c4f7d6959bb1627b59293bc27100f5b42f23d9d3927cf29978741a41762e834c6ddadd6fee4450cf292cd8b241f7be72a4ad7020043c11557583\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-win-x86.exe\",\n            \"hash\": \"a44c450b3403cc71262d4b394949fe71efa9e7e71a2dd595e104c6ead381e068edb52322834e9c5ae6f3e9c58edc0d272e23b3fb3c4b5dcffb05c37a42cbf1ee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.2.22472.3/dotnet-runtime-7.0.0-rc.2.22472.3-win-x86.zip\",\n            \"hash\": \"ff5081fee8d80f3545e86b742c6796c2c96b099e5dd2334331c3777914e073fb9d6da473e75a96692ab2911b9595e73df511a622e7614e3995642a9320e12929\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100-rc.2.22477.23\",\n        \"version-display\": \"7.0.100-rc.2\",\n        \"runtime-version\": \"7.0.0-rc.2.22472.3\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.4 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4 latest preview)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-arm.tar.gz\",\n            \"hash\": \"ac719b627140019a824d114e4d5dcc8d5cfd357406ad62d8a7fb57b9bff49750ccbf40f067a4e525bcb6061aabaa5a657e2c7c36768de2d0f6c31528c5bc172b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-arm64.tar.gz\",\n            \"hash\": \"bd5f6fc2bc6783bcf71b4a5c274b2e710336fc031c2577f5ccdb9be2679ce8b15e40fb8e631e2dd18b2359396107fe44d867d341f6fc5daae165f8f238adee17\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-musl-arm.tar.gz\",\n            \"hash\": \"44e5c0619ff28075ca86d5e95497c82411dac18c44c9874a96d749b145e0e7bde9f6fc53cddcaa295a84c418d8b529b9a8933218c4a141b0fdc8b3614c9c6fd7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-musl-arm64.tar.gz\",\n            \"hash\": \"13863c918e16f55988d1df8a6e2e84d70ba50e9b6378189dde556a608f0743731c53f959f64a2d43cf967975b11dfb7a85014303c19681659134073cd95ba58d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-musl-x64.tar.gz\",\n            \"hash\": \"b5954e50484128331b4c9ee791076752e9ab0f4d4acb89afd79e98cd0c9491ebb260e6934ba39e2eb9f86989a3ed72c17cd8c251c2418727ee8c15c239b3a1c5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-x64.tar.gz\",\n            \"hash\": \"22db5d1d16f6fcedfc46f87896920425b5d9b61d09c47d254d6ac731c6d853657882b21faf21f313ed20b33e6331d01b9f723b2c586f0e0cf5acc5ed570b0260\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-osx-arm64.pkg\",\n            \"hash\": \"39eab54045b3f4e0778044d96a5fafd545816524020c7f0431993a365ad55c5d3f9f0df9cb4b9e584f2d58040bcd0c4e7818d6ea55a3472632eafc9c274d0334\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-osx-arm64.tar.gz\",\n            \"hash\": \"f7cc6bbe15784f6587c40db2ac043b410fdff764f42fe0cd85a6eba863b201f6bb50b4029a6316c276c0165448c00719768211b67908ee27b7186d18d3431387\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-osx-x64.pkg\",\n            \"hash\": \"e8b7fd71d97935713ac740a665d14116a1a365599ec86e66fdfd8841b53eb529e51a03f145dd1e47cc5cda4c9a64495777389c4748248889499104f9dbee7f7d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-osx-x64.tar.gz\",\n            \"hash\": \"a7ef37c576e47b6734b1d58037de8f42e9e20c4e65ce7a213c6e306a68ff426fb2d5e5b805307775e481c35320bb33f6a62b3a2a97ddd35637134f9798ee610b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-arm64.exe\",\n            \"hash\": \"67c3ef672659ead6598ee56404848f0464a0a24c564111b0426633a135d9f5d862ae0ed6c42df50715984562cedeb7d135bcfa038a9b2cf3cc3b8786a3dbee99\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-arm64.zip\",\n            \"hash\": \"a28e13108503a79a3fdc1698604e51ed736480e202dfc9a61013b264b1d765ea92dc99f6ec853a72be4be638a8da6c23c5cc0db173e95ad94cd8a33a80ab2356\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-x64.exe\",\n            \"hash\": \"f183df67b534dbb5fc562c25c65175cd05cc73af85e0769537c24547c393e1d72feb140866c0ca1fb9072e07de413c4fa6e10ad9eaacf3338cd7536223e511b8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-x64.zip\",\n            \"hash\": \"c8ffb96bc127e394bbc6eacae5771976cb9c924db94534026c7f04a7bc7b322f8212d9789ccbf05893378be193d2bbc560050bdbb3335e6ab3e141eaf470a380\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-x86.exe\",\n            \"hash\": \"e95fb3bf0c3ebc3033ef7cdd658d5cc292610f868944925687876751146364f933bef54ce37945774328295cd0f2042637c7d4e2150c0a1c49f165854d9c67aa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-x86.zip\",\n            \"hash\": \"cc02bd858ecbeb623fa3e8283d0ed081c5a835dd10405f33cfdbfee3643c1cd84dc77a3c67fa4a1dee76e70c851130de84064c44d5b35e5104f7ae39bc32c31c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100-rc.2.22477.23\",\n          \"version-display\": \"7.0.100-rc.2\",\n          \"runtime-version\": \"7.0.0-rc.2.22472.3\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4 latest preview)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-arm.tar.gz\",\n              \"hash\": \"ac719b627140019a824d114e4d5dcc8d5cfd357406ad62d8a7fb57b9bff49750ccbf40f067a4e525bcb6061aabaa5a657e2c7c36768de2d0f6c31528c5bc172b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-arm64.tar.gz\",\n              \"hash\": \"bd5f6fc2bc6783bcf71b4a5c274b2e710336fc031c2577f5ccdb9be2679ce8b15e40fb8e631e2dd18b2359396107fe44d867d341f6fc5daae165f8f238adee17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-musl-arm.tar.gz\",\n              \"hash\": \"44e5c0619ff28075ca86d5e95497c82411dac18c44c9874a96d749b145e0e7bde9f6fc53cddcaa295a84c418d8b529b9a8933218c4a141b0fdc8b3614c9c6fd7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-musl-arm64.tar.gz\",\n              \"hash\": \"13863c918e16f55988d1df8a6e2e84d70ba50e9b6378189dde556a608f0743731c53f959f64a2d43cf967975b11dfb7a85014303c19681659134073cd95ba58d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-musl-x64.tar.gz\",\n              \"hash\": \"b5954e50484128331b4c9ee791076752e9ab0f4d4acb89afd79e98cd0c9491ebb260e6934ba39e2eb9f86989a3ed72c17cd8c251c2418727ee8c15c239b3a1c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-linux-x64.tar.gz\",\n              \"hash\": \"22db5d1d16f6fcedfc46f87896920425b5d9b61d09c47d254d6ac731c6d853657882b21faf21f313ed20b33e6331d01b9f723b2c586f0e0cf5acc5ed570b0260\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-osx-arm64.pkg\",\n              \"hash\": \"39eab54045b3f4e0778044d96a5fafd545816524020c7f0431993a365ad55c5d3f9f0df9cb4b9e584f2d58040bcd0c4e7818d6ea55a3472632eafc9c274d0334\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-osx-arm64.tar.gz\",\n              \"hash\": \"f7cc6bbe15784f6587c40db2ac043b410fdff764f42fe0cd85a6eba863b201f6bb50b4029a6316c276c0165448c00719768211b67908ee27b7186d18d3431387\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-osx-x64.pkg\",\n              \"hash\": \"e8b7fd71d97935713ac740a665d14116a1a365599ec86e66fdfd8841b53eb529e51a03f145dd1e47cc5cda4c9a64495777389c4748248889499104f9dbee7f7d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-osx-x64.tar.gz\",\n              \"hash\": \"a7ef37c576e47b6734b1d58037de8f42e9e20c4e65ce7a213c6e306a68ff426fb2d5e5b805307775e481c35320bb33f6a62b3a2a97ddd35637134f9798ee610b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-arm64.exe\",\n              \"hash\": \"67c3ef672659ead6598ee56404848f0464a0a24c564111b0426633a135d9f5d862ae0ed6c42df50715984562cedeb7d135bcfa038a9b2cf3cc3b8786a3dbee99\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-arm64.zip\",\n              \"hash\": \"a28e13108503a79a3fdc1698604e51ed736480e202dfc9a61013b264b1d765ea92dc99f6ec853a72be4be638a8da6c23c5cc0db173e95ad94cd8a33a80ab2356\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-x64.exe\",\n              \"hash\": \"f183df67b534dbb5fc562c25c65175cd05cc73af85e0769537c24547c393e1d72feb140866c0ca1fb9072e07de413c4fa6e10ad9eaacf3338cd7536223e511b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-x64.zip\",\n              \"hash\": \"c8ffb96bc127e394bbc6eacae5771976cb9c924db94534026c7f04a7bc7b322f8212d9789ccbf05893378be193d2bbc560050bdbb3335e6ab3e141eaf470a380\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-x86.exe\",\n              \"hash\": \"e95fb3bf0c3ebc3033ef7cdd658d5cc292610f868944925687876751146364f933bef54ce37945774328295cd0f2042637c7d4e2150c0a1c49f165854d9c67aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.2.22477.23/dotnet-sdk-7.0.100-rc.2.22477.23-win-x86.zip\",\n              \"hash\": \"cc02bd858ecbeb623fa3e8283d0ed081c5a835dd10405f33cfdbfee3643c1cd84dc77a3c67fa4a1dee76e70c851130de84064c44d5b35e5104f7ae39bc32c31c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0-rc.2.22476.2\",\n        \"version-display\": \"7.0.0-rc.2\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22269.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-linux-arm.tar.gz\",\n            \"hash\": \"2f5d8104eaa0d5c60bc1b6201796e2231c47bd4c6d948096928b3b4df26d6ecc57db18b2d7642d0228abbc4e0d58b7debc2e724c9c8af3eed218623f5e5d53f1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-linux-arm64.tar.gz\",\n            \"hash\": \"24fb13ed26a44d6fba86a2058839026ec81868143a5b7af7857b75a004b0c64eea9a3e544f9e0774b761f9c911608ac74237b2d63ba6799718d12915d5d32df4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"89cb1ea52e630bea5e958dea36ef408b1aa86d52a4f2aafe3de0f8f52920a2c058c6244b12671794ad92d6b46a3bb62d034e321d9f3f1d5cb8d2b0062d1b7ab1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"740a44123fffe94cea509369b58f08833f2c7206c176bede59f7ae2c9e17efc9fede38ccc11e5048bb0057a33ee80a78cca024deb36db0ea979f43874dbef68c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"b2faa275e8a096ae308e82b653ef8542de171a25c461ccf7744dda4421372def544c7e60bea36c547ce16663e6f26a3f52df30489fc770d8ab819ba58dc00cb4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-linux-x64.tar.gz\",\n            \"hash\": \"1941cd6ea3bea31d970029c34acf0d60b63d1e7fba39086be1a79177a6f87f2b0300bf4008e96a5235d52bc74a41503b21b088143cd306058d42dd3ce8252af0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-osx-arm64.tar.gz\",\n            \"hash\": \"3ebc2f205920b9955ef5d30e02d659468beee68271e54fbc6e4afa5aafb98effea6f642e5086801708b5dd35fc6c25aeeb9a924abf8cb4f6a6c0a44d3c16d025\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-osx-x64.tar.gz\",\n            \"hash\": \"a8799dfa6efb4dcecf023de5d666969906b7b5c512a9eb2e76ef12cef6ff5b63d84e3b9b2ec7573ca3ad1b7dc1f21885974a7bd10d3df807c009c2b02440fd34\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-win-arm64.zip\",\n            \"hash\": \"ba3a3a284117dc51c3265672dc5d9ce3c13cad308b1e271a0eb95dfbd80fc4316f262c0e739e85ede43949d6d5e66f13867ac59df8629e2fde932f43a6261411\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-win-x64.exe\",\n            \"hash\": \"adcd76a989bb790bc88c9a00f759c1e16305d0698432bb6ee8c458f202bb6908ba33c26e626594f51bcdeda01f393d2a2cc196c9d2069177e95d5a14ecec9bc2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-win-x64.zip\",\n            \"hash\": \"94bf1aac7390770a666f9e925856dd568fb8477366aa216241023b6e9b2d7e68a8decd8e2a0787dcd8606556498789d208ca8e10bd80fbe312ada36649224aaa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-win-x86.exe\",\n            \"hash\": \"3827fd22d933d1aa56caa0a2fc954605285b6ab46d0837b9d8dd6cf63cfe441062fad7d1d9753e9a998c1e79526ea0908df23b05d271889dd339a4656131d4f2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/aspnetcore-runtime-7.0.0-rc.2.22476.2-win-x86.zip\",\n            \"hash\": \"8ff2129cc252e82ef2923d7387aebec619a5bc93cea6d8639757d58a9dfc0354aff991404dcab42405ddec81e96106c8a32246d90b2c6c6ed59b08a136a19da5\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.2.22476.2/dotnet-hosting-7.0.0-rc.2.22476.2-win.exe\",\n            \"hash\": \"97f045c441646d0a205f38c5c6853e023f4b2a9817f556e5f1115e2bcaa8268e77fb65db2235f9f8645a374f67b02556122e4f24ebed20476a7577e3da0a9b56\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0-rc.2.22472.13\",\n        \"version-display\": \"7.0.0-rc.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.2.22472.13/windowsdesktop-runtime-7.0.0-rc.2.22472.13-win-arm64.exe\",\n            \"hash\": \"13cf41f5b90d94402533d30d88f06c365aa10c51a5fcdd166967c18ce7518ab1fc86e033d916c7d994b020ce0656a4e6b777e5ad17f5130348c2a182fdfd9d44\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.2.22472.13/windowsdesktop-runtime-7.0.0-rc.2.22472.13-win-arm64.zip\",\n            \"hash\": \"5318b9fdbd6955a643b04c0abdffc79416d15113328e67c1b0468b66a41c9a155b63d5c4abe9a066ec703882d6ed00f412a9b921911b1bcf67c0cc1fa8850f22\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.2.22472.13/windowsdesktop-runtime-7.0.0-rc.2.22472.13-win-x64.exe\",\n            \"hash\": \"f9b5629a4d6d3842fe69679562d7245d0d27a62faccb0d0025ae0474645212bae459ee335decf38441e480fd948cc00a403ef235d6d97eb9366c16825f86f85b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.2.22472.13/windowsdesktop-runtime-7.0.0-rc.2.22472.13-win-x64.zip\",\n            \"hash\": \"6a06e690acc6bd5ea23df1571a2acb9e7f233dfd3d6ccb8dcfd597d903c9f4227f581d86d4b557078a544d3fd94f2e2e6b01bbaf7650e27a7c88453ac4de66b7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.2.22472.13/windowsdesktop-runtime-7.0.0-rc.2.22472.13-win-x86.exe\",\n            \"hash\": \"4e691cd5d9c8ed5be0cbfbb73c12912e07abee849e1b5078c7b64cbf7cf60610062f48d81e4ac6816d261a445c02d76a4450d4e6c1cea0d9b66cf0d7e6e3219e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.2.22472.13/windowsdesktop-runtime-7.0.0-rc.2.22472.13-win-x86.zip\",\n            \"hash\": \"b7d27ee9008e17e2baeb4dbcda3daaffa3d38435e1269bfd0de1d8aabedeaf2f75a05c803f6de97f6c2232e5546673d49b97f8d7ac30b8bc5a609c4680d5ae42\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-09-14\",\n      \"release-version\": \"7.0.0-rc.1\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2022-38013\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-38013\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/preview/7.0.0-rc.1.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0-rc.1.22426.10\",\n        \"version-display\": \"7.0.0-rc.1\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-linux-arm.tar.gz\",\n            \"hash\": \"dabff370d55a2cdf3623654f50eea950d85e7e986dda95e1beb7995dc3959ced1a1232a7dc622d3fe867e6fd12dfb074405f6761bb5ff4a83aa70a64b66de48f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-linux-arm64.tar.gz\",\n            \"hash\": \"961af783d01882cc7bc4334ea166977de9507d61de74057c39ecfec6c24c64d28c65c4b50ea1826db5c6d28c9134c27edcbfdc8139dd74c8c5732102a02455a1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"dc83efd83e4e1ef2db4dfd6430967e35648ed62a9c06b095cfd18310f7cd3dda81a04121d4fdd77f638531280c84ff6015956e6f7b0276584b52fbb61a72fde8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4919b4bed55ba8c2e7025c2ce2b1c9424efaa323152b3ad7edba18d5ac1419149badfe5da228678205419e82ed42587469cad5c81b06dbbd0198bca56cb84151\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"21cf30a3d3f30945d8b1f4b4d7462bdc589602f29258dc40823c5ea33e09a90a149821839b5d3df6e9dae4e898de404fd4a90f44d86ff5921362cef298b9c358\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-linux-x64.tar.gz\",\n            \"hash\": \"62145fdaf182581cec5ba6bbafd66e3bb2df28379311f13e6849371a88cc2f428db3663f96ad006bbf4411eba609d486036d3b2aa1e3d86eee53216aec543fc1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-osx-arm64.pkg\",\n            \"hash\": \"d8099b1e876b22eeddf61b74cf357adf9c74fce3383e739a2b7678f952b0df228ea1f79813ccd02c778383cea01a3aee4dc8d12b3db76ba60ff4bc5be72ba665\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-osx-arm64.tar.gz\",\n            \"hash\": \"d0759ff95fa9d4466473f17998ec34909567aa6cd4d51639155133ebf242ddee38b78d7ce52d77fc1fe6fd9c737ee071b8cce2929ce1db1f2c52aa95879680ae\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-osx-x64.pkg\",\n            \"hash\": \"e858e5a9ff59f155f62ce0960562722b14e8d66b22a847ce911953e670acd499dfffc981d999986c41db5a0239bf382430213ac5e37ea8762cf78a97758f9f61\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-osx-x64.tar.gz\",\n            \"hash\": \"c4537e67da894f36a224b7c3ffc45f662c684cdf8179214887c48a8d8341091e33b6a8473876fd3f790f8fd080ff26f3a75ad40d1335eccbc3f1addc61224465\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-win-arm64.exe\",\n            \"hash\": \"e3f46f6587e1b4fbb2ec3ee03aa9d1223dec88f2f7122069f6e0b022fc87ad95eab67041ca16e9a90dac52d92df1d55067f6b8a68e41928ab6ed472891e19a4f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-win-arm64.zip\",\n            \"hash\": \"7dd9011e39d52890cb93d0184d6b356c6409faa95ee9fc04df8e12c6499e1a56fddd4921d875a1267e4a99aa9d5a1b8b29694eabf66a4a5df77c945d687b3cbf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-win-x64.exe\",\n            \"hash\": \"3576c67ee809474cad63647bc408c3bea48d8f3ec1540952ae1529fddca26f437c81c6ec8e1e0661dcffe1899c7475631ad8346a991cf0045d83b7d74aff3d76\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-win-x64.zip\",\n            \"hash\": \"f442ec9e2a468991b30f6544fb00935345fd1a310e159bda7df2ebd639a78f5a8cda82979f13551dd5639c119538c13c72586cf36d07431469fb1b924b7313c8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-win-x86.exe\",\n            \"hash\": \"893c6048846a88d65eef11721be3c95f609474f6d286b5466b7458070571dfea48769da0672f8f784c065faad0e5ad0f31d90cfa654133574d4c5d74b93601bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-rc.1.22426.10/dotnet-runtime-7.0.0-rc.1.22426.10-win-x86.zip\",\n            \"hash\": \"d74b2d80a3561226cab210cfb93af07f818e409928369ecf4faf43d102233d9a043c6cb5cc408f566ec192d2b52caeab78320fadeef87bfbd86be0b172a5119f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100-rc.1.22431.12\",\n        \"version-display\": \"7.0.100-rc.1\",\n        \"runtime-version\": \"7.0.0-rc.1.22426.10\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.4 latest preview)\",\n        \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4 latest preview)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-arm.tar.gz\",\n            \"hash\": \"0179dc1f7588003c3c643d58d96379a364d2ca097635cccd478a9fb44934148c907ec972167bf6c07dc8ec2a30964d3f5b6196148b48c23db25a5e4686859fce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-arm64.tar.gz\",\n            \"hash\": \"095561f9c8aa815e3d8edcbb5c449a162c095e0034fbc091bec0954fc8d1286cd8c3aac615bd84b7d19a3a2d038001676057e4886f26a649c4dbc46cee24c8e8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"05aec68fd6ab72a292e9163d495075b0ecd8657a89758bd79e48e7653373d7a7da15fad0dbe61b4453af82a4fe538c2c2e7e60c6dfd6c6837f3636679b5c1897\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6567ff07349dad9838e3d7f755944647ce89918e94e28bf3fd953606d6c0d845516ed09c3f113064203360d09b7abe3155542f5f5b2d3e6e43019c970e802e17\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"f0b3836d1634a3910af7894c2201c40096c1c1f26f8c107fca9ea6601d2cf770cc88a1534f03d94d545be2d2217b04b95c5d3ddf52c11bf1d93457a184947298\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-x64.tar.gz\",\n            \"hash\": \"7ecebf284bd1546e1575b9561f4e64bbb8d69680a7bbda6f06ff6fbf687d3a6c653b0e6a6c569241455c6f83620f0ddbe193ca5cd52384ac062c8565dd22b859\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-osx-arm64.pkg\",\n            \"hash\": \"0f36e938c8a5f3b0389576a5081d88e63016a99d97d16ae8008546e040ce67c574510f713b6484219771753441f96974abf04bf8f90195aee99b1cb255e37959\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-osx-arm64.tar.gz\",\n            \"hash\": \"68f31e6fa9486b4d41b932fbeb2c0d383033ab72ef9167e02dedad0444383f1e0349c95049bc8db7e3633de65afb93ddff53bc70e59aa03ad632fcce584c631e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-osx-x64.pkg\",\n            \"hash\": \"619b8f605e46ecd9a6baaab2a158799c0aa5102a9152487c13510d616c81d9341fd58c43d630c4a6b2ad328e90774b8164f9c61fb81e01da04e632fba45a2e1f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-osx-x64.tar.gz\",\n            \"hash\": \"8b422411a042551750164d3d35a4dc7a83fc38e0f1ddb57e6b3dfe816796b419cb7e625876811efe2ea10b7255f5ce0597fed32782eabfa6309f47c97b9a472f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-arm64.exe\",\n            \"hash\": \"deb1b30dd74d8aae94104053cb76f490d90c9a110ab868ecafa7918806d33833e2240bbbb7f4b56644b1d9ca6dc33f3770b817dfc454acf253e914b54f60f9a8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-arm64.zip\",\n            \"hash\": \"5ee254a6a81ff5cf7c06c724f4a625500c819048e577e7eb9977387f6371fc2e6d440f88ec4a35fbbee492df074c4a778844925d851cec16a688810fdb0b6996\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-x64.exe\",\n            \"hash\": \"334c40ff440a8627e8ceb74ba57d56313c23ac7b1e4a6ca2c5e25cc5a652486859522b7fe2352e4f06c0d28c07108b3a8d0390128d38fa73b6a9d191e5089834\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-x64.zip\",\n            \"hash\": \"6c82b8f3abcdde735c071c7f45c3178de5648bf4a26f929eb4ced2b5857cd62cfbb57f2b1e9f77e9adbb19abadd5e99e35dc14bc2e362065e95df7a37215b969\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-x86.exe\",\n            \"hash\": \"164c6c4485fb61f8f2d8171566f63fef282e850fe6d6a05a816d40ff5bc2671de6c89e0335403d3b497adfe4c919b0bc3e02b44b7e1b8ed1bf75bde1499aa8c9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-x86.zip\",\n            \"hash\": \"84c622729b770bd03ac122a323c88f32c758e12d3421472accf3ff5165f580444047950f86272c0af9cf91bd0541fcfb9ce9747d63fe5c9781d265ebe77f2016\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100-rc.1.22431.12\",\n          \"version-display\": \"7.0.100-rc.1\",\n          \"runtime-version\": \"7.0.0-rc.1.22426.10\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4 latest preview)\",\n          \"vs-mac-support\": \"Visual Studio 2022 for Mac (v17.4 latest preview)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-arm.tar.gz\",\n              \"hash\": \"0179dc1f7588003c3c643d58d96379a364d2ca097635cccd478a9fb44934148c907ec972167bf6c07dc8ec2a30964d3f5b6196148b48c23db25a5e4686859fce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-arm64.tar.gz\",\n              \"hash\": \"095561f9c8aa815e3d8edcbb5c449a162c095e0034fbc091bec0954fc8d1286cd8c3aac615bd84b7d19a3a2d038001676057e4886f26a649c4dbc46cee24c8e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-musl-arm.tar.gz\",\n              \"hash\": \"05aec68fd6ab72a292e9163d495075b0ecd8657a89758bd79e48e7653373d7a7da15fad0dbe61b4453af82a4fe538c2c2e7e60c6dfd6c6837f3636679b5c1897\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-musl-arm64.tar.gz\",\n              \"hash\": \"6567ff07349dad9838e3d7f755944647ce89918e94e28bf3fd953606d6c0d845516ed09c3f113064203360d09b7abe3155542f5f5b2d3e6e43019c970e802e17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-musl-x64.tar.gz\",\n              \"hash\": \"f0b3836d1634a3910af7894c2201c40096c1c1f26f8c107fca9ea6601d2cf770cc88a1534f03d94d545be2d2217b04b95c5d3ddf52c11bf1d93457a184947298\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-linux-x64.tar.gz\",\n              \"hash\": \"7ecebf284bd1546e1575b9561f4e64bbb8d69680a7bbda6f06ff6fbf687d3a6c653b0e6a6c569241455c6f83620f0ddbe193ca5cd52384ac062c8565dd22b859\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-osx-arm64.pkg\",\n              \"hash\": \"0f36e938c8a5f3b0389576a5081d88e63016a99d97d16ae8008546e040ce67c574510f713b6484219771753441f96974abf04bf8f90195aee99b1cb255e37959\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-osx-arm64.tar.gz\",\n              \"hash\": \"68f31e6fa9486b4d41b932fbeb2c0d383033ab72ef9167e02dedad0444383f1e0349c95049bc8db7e3633de65afb93ddff53bc70e59aa03ad632fcce584c631e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-osx-x64.pkg\",\n              \"hash\": \"619b8f605e46ecd9a6baaab2a158799c0aa5102a9152487c13510d616c81d9341fd58c43d630c4a6b2ad328e90774b8164f9c61fb81e01da04e632fba45a2e1f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-osx-x64.tar.gz\",\n              \"hash\": \"8b422411a042551750164d3d35a4dc7a83fc38e0f1ddb57e6b3dfe816796b419cb7e625876811efe2ea10b7255f5ce0597fed32782eabfa6309f47c97b9a472f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-arm64.exe\",\n              \"hash\": \"deb1b30dd74d8aae94104053cb76f490d90c9a110ab868ecafa7918806d33833e2240bbbb7f4b56644b1d9ca6dc33f3770b817dfc454acf253e914b54f60f9a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-arm64.zip\",\n              \"hash\": \"5ee254a6a81ff5cf7c06c724f4a625500c819048e577e7eb9977387f6371fc2e6d440f88ec4a35fbbee492df074c4a778844925d851cec16a688810fdb0b6996\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-x64.exe\",\n              \"hash\": \"334c40ff440a8627e8ceb74ba57d56313c23ac7b1e4a6ca2c5e25cc5a652486859522b7fe2352e4f06c0d28c07108b3a8d0390128d38fa73b6a9d191e5089834\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-x64.zip\",\n              \"hash\": \"6c82b8f3abcdde735c071c7f45c3178de5648bf4a26f929eb4ced2b5857cd62cfbb57f2b1e9f77e9adbb19abadd5e99e35dc14bc2e362065e95df7a37215b969\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-x86.exe\",\n              \"hash\": \"164c6c4485fb61f8f2d8171566f63fef282e850fe6d6a05a816d40ff5bc2671de6c89e0335403d3b497adfe4c919b0bc3e02b44b7e1b8ed1bf75bde1499aa8c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-rc.1.22431.12/dotnet-sdk-7.0.100-rc.1.22431.12-win-x86.zip\",\n              \"hash\": \"84c622729b770bd03ac122a323c88f32c758e12d3421472accf3ff5165f580444047950f86272c0af9cf91bd0541fcfb9ce9747d63fe5c9781d265ebe77f2016\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0-rc.1.22427.2\",\n        \"version-display\": \"7.0.0-rc.1\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22239.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-linux-arm.tar.gz\",\n            \"hash\": \"1dff328a00c25fb7dbf3ed267afbce8aa76c8b3077015b27028476fe3f7a77ed727db971bb6de2a9070e647b2969e1992505086c369b9c95eafebc8bde20a8e9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-linux-arm64.tar.gz\",\n            \"hash\": \"2c704861aca1b1473d1426f0235606fcff19228902dfa02350413bd5ef97c12f70f6f771eb79a18b98274dcb2b866cf4bbc3f53da8c821fde2057e52c127615b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"7c6bc446a455c42be6ecc8e1057bfd4eddb02591c46e605e6ef3519a51df6b0dd870bc28cd3473e472341e9535b584ff82937395f72ae97b2e0d8acb7f6fc0af\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e43f4647b784954fa3a06c4ef38f73eb56cb46e71bbf53bff4e59e1f0f805ce480364a8bf340ae6a1a0a6c887968d5a9058c9a90c0f93795d74cf9f65393736e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"a1d2ef3859702663ba4786898f3bea1e5c62e54a3628891adfcadaec53b070de2f5af631379db1173ded257009fdd23a673ec69e36d519fe9577760f8a2b547b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-linux-x64.tar.gz\",\n            \"hash\": \"101898d0921f21c7895a1e015064a5aa5f1ca92bd31bd0d30fb9981e3c4383f14ea25464289e4ef29bf55fea1e2096e4b07bce71c948992a76c5ff0f7005b415\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-osx-arm64.tar.gz\",\n            \"hash\": \"1b3328451a5dbf2e90c2e1de17b59764ff0b4e9a9d4cf268b6b5f252f90c0af71683c6e31648fcd8df2c0e529a91e9b93eda6df739aa84863d133ca1e4d3fc7e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-osx-x64.tar.gz\",\n            \"hash\": \"668d323f78af57e0c781772951288166c05d75d4aa1259a07944ea0fa6ffc857d121d526c275fcf246a9754a1019bbd018f326962f48a5bf16bf2138540ae503\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-win-arm64.zip\",\n            \"hash\": \"1d3552de66671f4803f76394b2583b64a392514a6fd3a90c39371877566d01defb7b15b50b10cc771fa9d8a1a1941e5f0abcfce95ce23f84f0cc12ac92bddc8d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-win-x64.exe\",\n            \"hash\": \"5cb8e24ad576bb5ddb8b728662817ba5b875ab665b3f5fdfce8fa16eba461d1d8b96d9d601d369c91b5d6f364bb19fb691e4c9609f0f888a2ca88afeb0ef7b4d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-win-x64.zip\",\n            \"hash\": \"3e2eeea0292d24f20ceba972e0f4371fb8cfe4d97247afaa66c41905a0e657a0cb297c24dba60aeba20c4828b0028b01ee7def1d9bc63f4a1aae151121a80088\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-win-x86.exe\",\n            \"hash\": \"eca2893ca91817727ff21082f7fb43a6dcb080f1bf7d08a705bdf084fbdfe6de94a3f1aba49b4cc924d7fcf0dcbf4c8b5332e36da80c63e6f7675b5deabee8b1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/aspnetcore-runtime-7.0.0-rc.1.22427.2-win-x86.zip\",\n            \"hash\": \"cab1aceb8da05dc68819f650cedafc9d1d9a28efd6c473ae3ac51e7c0477778d4936ee8fe59245c6660f37edfb7d7cf23d7c3b731de8a09920213dabba2af931\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-rc.1.22427.2/dotnet-hosting-7.0.0-rc.1.22427.2-win.exe\",\n            \"hash\": \"9e335b6cdcfab0577d956f65b7cca30ce9e22aa3d48c62c4ba534051b7bc5527f3f5dcd7237894b425e989c5c1ed62e413612ef76772a6d79fb8bc6950c8b8e4\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0-rc.1.22427.1\",\n        \"version-display\": \"7.0.0-rc.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.1.22427.1/windowsdesktop-runtime-7.0.0-rc.1.22427.1-win-arm64.exe\",\n            \"hash\": \"5e862dc14abafe54c0ef1521568bf52053707291a2387db865c37913682e49e82cb9fa42839278fa2024af658c568b9028864f4619e2e83abbc5747c1605d518\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.1.22427.1/windowsdesktop-runtime-7.0.0-rc.1.22427.1-win-arm64.zip\",\n            \"hash\": \"3b5d8172aed27eadcb77fbaac3c7ad5e2f045ed3034f3a8156051a9d8d51c6c8bcee6f45a28a0e873e30775cbdce5dab7a8fe1d9d65d6817bc1450fa3cd8aeee\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.1.22427.1/windowsdesktop-runtime-7.0.0-rc.1.22427.1-win-x64.exe\",\n            \"hash\": \"d56fee40bfeaf4b5f170668f7e07eea7ce2dfaa7e70d46a238ced19327dd1171f697170acf4db7dd26ecf64b92045beca979e7f7ccc78fad68d992589544d347\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.1.22427.1/windowsdesktop-runtime-7.0.0-rc.1.22427.1-win-x64.zip\",\n            \"hash\": \"46436b741e6b0c90a4974e3d6fffda7ae5cbaef537bf611f2df42f21813da8a90a23ed20b29837d08ec5d001afa0955e3743d5b94d55e5ef844ab813194adf8f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.1.22427.1/windowsdesktop-runtime-7.0.0-rc.1.22427.1-win-x86.exe\",\n            \"hash\": \"0f97e1b09cf76f7abcecfabef651daaf82669c32af6b335cf26378e640d382d59317c04fefccbf8748558434bab7689060cec89bff88e9e365a486dae7bab110\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-rc.1.22427.1/windowsdesktop-runtime-7.0.0-rc.1.22427.1-win-x86.zip\",\n            \"hash\": \"99d223350218e8290beec7a0343a6ca68bddf3d72dc456c20fc2294820e74b48cdf43e47454972f36c59a51e1e821cbff77e82dff9ba35ec30f43841c7d59bbf\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-08-09\",\n      \"release-version\": \"7.0.0-preview.7\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/preview/7.0.0-preview.7.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0-preview.7.22375.6\",\n        \"version-display\": \"7.0.0-preview.7\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-linux-arm.tar.gz\",\n            \"hash\": \"739ed5eea8798d2a6a65ec3f64783e7d52de0ba8cd1a0e0f8bcff2f023d490b208f6f2ab65429440c96ad1347a9d562627e5e256d83bf423b4209e8d5f899fd4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-linux-arm64.tar.gz\",\n            \"hash\": \"c9277fb51a2624051b57a59c6f401619a6b0db2a8abce66f8a3a051397cc8222931104fdee480a26b5d65fa8150b0ced700c370ee437efb739edf30a2ad6e993\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"ebdc42d25091cdcacea7533b1df7142e9c08d458dd99327ddd8f92a8411d58f6e4b4f1a2ed3dd40d5e09dc397f6f8cb648876ce06b5593812d9d6477d4a24f35\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0af75ff2b63830f51ec767c4469bbe907c32530e7026cb55de947b73c730e4c075736453a8532785b4e0bc70a47be1ca7d25d83a6e06f5073c1b46b47e9f0d10\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"d4cce061842a648ef18a1f027e5e2a2842284ead1b1773dfc3b09f5c6916146fb432eea10d75d9a436f505e4c71271fcefb9cbb70360dc7f5058b8909ca13480\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-linux-x64.tar.gz\",\n            \"hash\": \"9814a4e5a55b7137ec27b423ae4a557792af6cced035ab42876de012cb160adabbe054f043b61ed21a8385deb62075ab0a028f6599954ed3519ffe8cf824d30a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-osx-arm64.pkg\",\n            \"hash\": \"ab4b1b27d77bdd606a97695cd020216eb1292203072adb26fd89f01edd959ddef46e6d11c87129097de7a7bcbb7256217b8b398158662ad9732067c8ac21cf37\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-osx-arm64.tar.gz\",\n            \"hash\": \"efbbf99de893507e49d5e2e752c1977b5e5bdeba3ddd5184f11e20bfc7ffaf64f0847647974cec78a07daedcba0b5cff78125c647ce133c4183d0821d55a2ade\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-osx-x64.pkg\",\n            \"hash\": \"d65f8684d2a4a6aadc43c6bc852fac3ff6d090e959141ad9e5e7fe48afb2660f9bdd7659d388579af80d10aa56297697d26a487e1b9bfd5064ca6061359a4712\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-osx-x64.tar.gz\",\n            \"hash\": \"e6b02eaa8c3d578404d0f6c5e94447ab017397d2dfd71d5712c9089833e70da6294505ff3599929caa1a2c3e2c981d35e9f0343faa15a7dae2f330b09c1e3d20\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-win-arm64.exe\",\n            \"hash\": \"c16962f01702e2e3db911a7c8082fd8106bda1b567fce22a68035a0d78e6fce851f1c0f20052a962e1cdf105748069d8a9f8230969ca14172e94599aa332d6fe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-win-arm64.zip\",\n            \"hash\": \"85349af325584a3d0d5088d65ad890c6ea616f9447b040703f6f712740b3bc228c1a948ece2dbb47d68beeb2a583dd7e282ef10ec5cb6e1a37236d476db7a2fb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-win-x64.exe\",\n            \"hash\": \"2c08a847cc2fd7d1afb244806daef4c61897b28f92ef44d8ba68209b019be874e7210e3f54901cf73840bdf374c0d7eb8a3f12e4042e2bb905f88e5156bb04ec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-win-x64.zip\",\n            \"hash\": \"7174c0491f7012e4631e2c15621acce4e6be497fe15134770d1b87759106f59d56a501e9d7366a038d9a20adb9823cd9c23d9813dbc5049013a9026ef10fcb0b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-win-x86.exe\",\n            \"hash\": \"428308168bbd6b9f840d16e3eae7b16983334d2ddb90d39d3a31bc7fd61d14a77e2500f34241f2ed88d9dbb3692a67aeac6c5bec5b818b6af09202fc1558a721\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.7.22375.6/dotnet-runtime-7.0.0-preview.7.22375.6-win-x86.zip\",\n            \"hash\": \"1e92c2d0d81e43e01d2b042141aad42c48c2755271c706093f791c8fd9ba6f05b4ead0d3fd4511a1a1d49f55602826f044662c27194a2c5b6efed55c16095520\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100-preview.7.22377.5\",\n        \"version-display\": \"7.0.100-preview.7\",\n        \"runtime-version\": \"7.0.0-preview.7.22375.6\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.4 latest preview)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-arm.tar.gz\",\n            \"hash\": \"9d00868d653bb70a7c5f792fd3490a6b2cfbe440b7226f30c3a0067f15083c081b66ae67ebc76f07f758d46034fddfc1fadd549d61fa0af39f78a8ce5c730d4c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-arm64.tar.gz\",\n            \"hash\": \"de43c471794239a06a6bc70df79491e1ea8f717df84e74b91aa8383bc9edc3efd286216a2495d42c60cb18d47ec0442132d3ec2fbad695f62969e7e3f61e61ee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"f8fca1490dbeb8a8255a2c2697f43cf8bd6267e2e26fcf525613c375860fac426a55b0d13d813902ea1de832f26e0dc36430953e6a4429d87ebb970ec2d4faa6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6ada1b880be607379e58e2f994a0f329a1e49040869b3f6b89efb234576fce9e7b675dec66300fa4c29c1dce0add2c836105b043e585f0b301e0219f8e62cf85\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"2a29b89344cbe63889dbb62fa52c04b91674a990fcce3a4a9002f777d2168fcc978a264b60592e3459b24191f92376b6cedb870e364b13a7196a099e9915cf72\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-x64.tar.gz\",\n            \"hash\": \"c16d452dbe4f097b75d304c8bc19892017847768bf2e8a0a72fafd6d6b46c3dd77e0c251b80c245197f47fdeafc2c18db255af8a1a5c30be982de19129874390\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-osx-arm64.pkg\",\n            \"hash\": \"a2e37093dd565459fa6847fe99c905e326788034bb3a3aaf301a6d20a43ba4c12f3cfe618e136e4d9cc3e0a5c958c094941e6981993ab442d86099bd03366d59\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-osx-arm64.tar.gz\",\n            \"hash\": \"fd3ed7cf1f31b6090a19465932e39a3bccd952d3ec25756f2d9a4246fe7e93588050433a3711e9bfed1765f015e4fa14bdce9534a68f0a3f121eb4424f486f21\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-osx-x64.pkg\",\n            \"hash\": \"244562bb7ae3f7c3b96e8ad4d8f68147b274ba48b0586e9370b43dadfb99d1e9a1e6c91ce8f2d2a7fbd4cc88d29c54ab92ef699319b80d3b0cb1fb696747b80a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-osx-x64.tar.gz\",\n            \"hash\": \"9f6fecb00df04f07a6275e202d2f005ab1b8ee471ee1587c7cb362b945658a2b2dcf572c4957a2ff7e95305558429320feabe3062d1d009e8244442ecb88fae4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-arm64.exe\",\n            \"hash\": \"8a3701cdc2f5073bbdc9b27e39b005f9dac065480fe6714dea5bad748a522745e8e0ed1c07ee60254259a3918fc00cb6b7b83fe1af47666854fc6a266283fe9c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-arm64.zip\",\n            \"hash\": \"271bc7e2af6feb850a7b937e1e804e2d3664615702668e1516715c4a908697f92675714cd272991b6734ada287e161342a7d8abbb486cc6d016cf8b2960dc9e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-x64.exe\",\n            \"hash\": \"e4d5849d991b525036af25679316076c7c958b0a04e1fc72fbd7fa6b38d1fb4c238adec48a612641926ad15e7b8d516a3feeed7a72ca14ad8d7ff6f71c9be60d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-x64.zip\",\n            \"hash\": \"82cab88d8cb17f974073500de44ed5cc61a6d947e41d183bb015bd2f28ae56243355aca68061d0f4705cb515981a4445d46caeed404b726ae989e9de84283887\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-x86.exe\",\n            \"hash\": \"ce789543e9d1032d59151d3e9c7a2e11b07cca8f70e7ddb7b877e7163b51924c0fad786f2f556dce57619a69856b42c731a31a4bd3cdbe812c0dd8c2e703c5fb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-x86.zip\",\n            \"hash\": \"fcbdde295083316d312a114e130516dd3785cbc48051a1382d4e303de52e2c18d86fbd2e58ee2fbdb6efa369d1d0fbedfcaf7d3456342c7d79d4a3fbe4eba3ef\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100-preview.7.22377.5\",\n          \"version-display\": \"7.0.100-preview.7\",\n          \"runtime-version\": \"7.0.0-preview.7.22375.6\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.4 latest preview)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-arm.tar.gz\",\n              \"hash\": \"9d00868d653bb70a7c5f792fd3490a6b2cfbe440b7226f30c3a0067f15083c081b66ae67ebc76f07f758d46034fddfc1fadd549d61fa0af39f78a8ce5c730d4c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-arm64.tar.gz\",\n              \"hash\": \"de43c471794239a06a6bc70df79491e1ea8f717df84e74b91aa8383bc9edc3efd286216a2495d42c60cb18d47ec0442132d3ec2fbad695f62969e7e3f61e61ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-musl-arm.tar.gz\",\n              \"hash\": \"f8fca1490dbeb8a8255a2c2697f43cf8bd6267e2e26fcf525613c375860fac426a55b0d13d813902ea1de832f26e0dc36430953e6a4429d87ebb970ec2d4faa6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-musl-arm64.tar.gz\",\n              \"hash\": \"6ada1b880be607379e58e2f994a0f329a1e49040869b3f6b89efb234576fce9e7b675dec66300fa4c29c1dce0add2c836105b043e585f0b301e0219f8e62cf85\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-musl-x64.tar.gz\",\n              \"hash\": \"2a29b89344cbe63889dbb62fa52c04b91674a990fcce3a4a9002f777d2168fcc978a264b60592e3459b24191f92376b6cedb870e364b13a7196a099e9915cf72\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-linux-x64.tar.gz\",\n              \"hash\": \"c16d452dbe4f097b75d304c8bc19892017847768bf2e8a0a72fafd6d6b46c3dd77e0c251b80c245197f47fdeafc2c18db255af8a1a5c30be982de19129874390\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-osx-arm64.pkg\",\n              \"hash\": \"a2e37093dd565459fa6847fe99c905e326788034bb3a3aaf301a6d20a43ba4c12f3cfe618e136e4d9cc3e0a5c958c094941e6981993ab442d86099bd03366d59\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-osx-arm64.tar.gz\",\n              \"hash\": \"fd3ed7cf1f31b6090a19465932e39a3bccd952d3ec25756f2d9a4246fe7e93588050433a3711e9bfed1765f015e4fa14bdce9534a68f0a3f121eb4424f486f21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-osx-x64.pkg\",\n              \"hash\": \"244562bb7ae3f7c3b96e8ad4d8f68147b274ba48b0586e9370b43dadfb99d1e9a1e6c91ce8f2d2a7fbd4cc88d29c54ab92ef699319b80d3b0cb1fb696747b80a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-osx-x64.tar.gz\",\n              \"hash\": \"9f6fecb00df04f07a6275e202d2f005ab1b8ee471ee1587c7cb362b945658a2b2dcf572c4957a2ff7e95305558429320feabe3062d1d009e8244442ecb88fae4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-arm64.exe\",\n              \"hash\": \"8a3701cdc2f5073bbdc9b27e39b005f9dac065480fe6714dea5bad748a522745e8e0ed1c07ee60254259a3918fc00cb6b7b83fe1af47666854fc6a266283fe9c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-arm64.zip\",\n              \"hash\": \"271bc7e2af6feb850a7b937e1e804e2d3664615702668e1516715c4a908697f92675714cd272991b6734ada287e161342a7d8abbb486cc6d016cf8b2960dc9e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-x64.exe\",\n              \"hash\": \"e4d5849d991b525036af25679316076c7c958b0a04e1fc72fbd7fa6b38d1fb4c238adec48a612641926ad15e7b8d516a3feeed7a72ca14ad8d7ff6f71c9be60d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-x64.zip\",\n              \"hash\": \"82cab88d8cb17f974073500de44ed5cc61a6d947e41d183bb015bd2f28ae56243355aca68061d0f4705cb515981a4445d46caeed404b726ae989e9de84283887\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-x86.exe\",\n              \"hash\": \"ce789543e9d1032d59151d3e9c7a2e11b07cca8f70e7ddb7b877e7163b51924c0fad786f2f556dce57619a69856b42c731a31a4bd3cdbe812c0dd8c2e703c5fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.7.22377.5/dotnet-sdk-7.0.100-preview.7.22377.5-win-x86.zip\",\n              \"hash\": \"fcbdde295083316d312a114e130516dd3785cbc48051a1382d4e303de52e2c18d86fbd2e58ee2fbdb6efa369d1d0fbedfcaf7d3456342c7d79d4a3fbe4eba3ef\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0-preview.7.22376.6\",\n        \"version-display\": \"7.0.0-preview.7\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22207.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-linux-arm.tar.gz\",\n            \"hash\": \"ff209ec1ef45357b410f4493441c8fa547604f940c9207bafbc30a35429bef4a24926a2f72c5f436857823a37260ccd0cc0cae9d24dfa043f86d706173c0343c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-linux-arm64.tar.gz\",\n            \"hash\": \"af8d65460bded7a6b1591ecb47ed704cf577f73a83b09ceb5880ec1c90677b1d724e799022854623ac132534e0acd656443b32a49090354a9ef872f2bb0eb441\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"5535e2b8b67483ebe2becbbf04334e34a38e98fa60ccaabc6a1c038871e617e3383d8161354eab4b6b795c9cc60b14c754181f585247f619296a247c151af0f8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"807282cc6978c7093d59b91e09745c8fabaeb7715d7d04a501a71a4fa527f672f2a6072145fe023700ebf4069eb21e58af691c022bbe294385e290faa0ea9370\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"5fb9d9eeebdd92abd7464e17a35edba2f41e6d8a0c916cbc5284648a225c1c9c49c6a9f3680e54b0673f125818bf54a20b1be710fc2b4a657cc0d11af5ce23fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-linux-x64.tar.gz\",\n            \"hash\": \"7d4861a28a42df31a7e2c740d17e1b0eb78e860a2ccdb25eec754a2098593a3adac00687294209d847a8fa618019a2d1b1d5fdd3f9aea37ffdc19164c862c558\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-osx-arm64.tar.gz\",\n            \"hash\": \"893a55cd551bf3a490cd0069315cfdc9283fcfc851fab4964a3e6560ce2af6d9c08366f7a1d6a87e2199b29d03c81eed5daabe378d136afaaf467ef137f00c78\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-osx-x64.tar.gz\",\n            \"hash\": \"52782e60b688a595a31b151b094978afb174df0e823f916b8a1e78b14566822ef22726481846c36dc95178ad5f39caa6832c9b8642b87dbc6998f3a20c18fcaa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-win-arm64.zip\",\n            \"hash\": \"eb946bafd221c389778adb1f56e6b43aceda0326c4e3871f00ce59adaa10b4d036d5c144ce9489e8387c9700059b38c6afd1f0c5f0cef2846562ef84e1639b97\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-win-x64.exe\",\n            \"hash\": \"2188d53bb8db095e83587c7edb6e82b4078d41bbf2d647acd0116df23484b0b67b8c3a27270c86fa4dc288d323e915da023463eafcd20fcbce5b56fb8036d748\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-win-x64.zip\",\n            \"hash\": \"b5b397d6a39e6039a36defd37cf196ce1ac79ae6571dfc5bb4bbd8e2c923bd1aae4c69634bb3bc72660ee68c87741fdd1ef50a140a10f1fb62e6b1c4758770d7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-win-x86.exe\",\n            \"hash\": \"23ea0976ec7b209fd2638f6465d59c95c0086884f29d11cdefb664e4d69298a020a259b854b45e423e4610966d07cf725680f2c3d958b8b5ea3ce7879690172c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/aspnetcore-runtime-7.0.0-preview.7.22376.6-win-x86.zip\",\n            \"hash\": \"799de8ab3ba2498fe77c69b558a6aec416f93e320de8e5abc192ba0c1a86469edf14929c3a9eddb86dec0deee1ed8e25b4ce95984214e02d5b711a1511dee84f\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.7.22376.6/dotnet-hosting-7.0.0-preview.7.22376.6-win.exe\",\n            \"hash\": \"438b5fba599b774885fe307de917a2461645f0f48122348a829e8b07b720a6b0f9b8fb15a3561643f55ad0d68de0b5f7054874ca30fd85c23ed0dcb88896a9ca\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0-preview.7.22377.1\",\n        \"version-display\": \"7.0.0-preview.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.7.22377.1/windowsdesktop-runtime-7.0.0-preview.7.22377.1-win-arm64.exe\",\n            \"hash\": \"eebf4737834c281544eac33e631a49d3119c3cccf57b6daa06da5cb5c6bd3350a3b6bdaede168128a8c885b58ed6eca7f2d4c527cf3d9b7e5c3b5b6b5cdb5a8d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.7.22377.1/windowsdesktop-runtime-7.0.0-preview.7.22377.1-win-arm64.zip\",\n            \"hash\": \"84b08fe042c7c3f4ddec0bfd361ae3b27787f3a1378c5180ebb9966ee0c4bb5d8f3cfaed4a59b309f41af9abcfbf96ea749d39900a5bd4cb537a6fb53e192a88\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.7.22377.1/windowsdesktop-runtime-7.0.0-preview.7.22377.1-win-x64.exe\",\n            \"hash\": \"4135ee9c6546c72b90054c5deabbaa824c32fb832d71b9c7b73b146a4e2150e859331ae40ea2ed8f13e9d18dc9c0fb35aff0815beb1af2aa0833b8ebdac9ccb0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.7.22377.1/windowsdesktop-runtime-7.0.0-preview.7.22377.1-win-x64.zip\",\n            \"hash\": \"2e996939f50cde44a32fbb6149a71ae73beb6c434d350361cf849e8a0bb154399869868e73a3b09220ffab72d959643c947f1109775653ba4577721977070434\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.7.22377.1/windowsdesktop-runtime-7.0.0-preview.7.22377.1-win-x86.exe\",\n            \"hash\": \"b89f66cdde6d97cc3fe78d6223414fc2d75b7caca67b98c48d8adf5c45c3f2c40ce50833849740aac1902ca3eeb59183e04abad81e2e5d7beaf4e80f89335740\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.7.22377.1/windowsdesktop-runtime-7.0.0-preview.7.22377.1-win-x86.zip\",\n            \"hash\": \"1bdcab1bc31532961611d34113ffcae83997903df10e8a3ebe133b0cfb57de621bc3d9881097eb1f795f6ea0257c649ea0a130f305328ea8f312da3d2f6d3f81\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-07-12\",\n      \"release-version\": \"7.0.0-preview.6\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/preview/7.0.0-preview.6.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0-preview.6.22324.4\",\n        \"version-display\": \"7.0.0-preview.6\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-linux-arm.tar.gz\",\n            \"hash\": \"df7208f3c9dfc387821b5cea3c75ecc3b68d559ae4d92e741c9732b63b5b705d10a3b55c7b7773777dd480e347c2e19e409693f47572af720374bdb665d50460\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-linux-arm64.tar.gz\",\n            \"hash\": \"3a1302724135514933c1c06e5373a785bfd18bc0b3f759c488023f4495c272841cbccbd320721a67fb40ac7bbdd48b366279ece3d4ce0f5bf9e520e2e93c46b9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"7aeb7988094e0b34b65bab4b257775722846babb32945f06b6e11911b55ee989f0e80d0f32ea0fb2d91d170488a9d4346d8589e9bd86c270ab943e474500bb9e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a5be4e53fee0bcd5940c1a21d78e9973e9e9ccff13da3f857dda3b0506aec52217cbcd05da3d4906924d8a003445172fd2f317ba7df393ac80d42c40262e0790\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"fccd4c764f1e0c5595591909cbd45e6ef06007a33b89453a6fbd7fbb86d33f5e96b49ec66a4e4b2d8e1093ed5eb852fe3d8fa47be5773094ed417ee484d7ca39\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-linux-x64.tar.gz\",\n            \"hash\": \"304b509b478fbed7e5ec97d9c75821249b933fb5c814c4f14078611d17cd8f95ccdf6c48049c02ed2f033ece61acc17e0a23a59c2a6aca9d191892d0224af45d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-osx-arm64.pkg\",\n            \"hash\": \"61ecf1dc17b919f405a8a4b761018aedccb302ed289a8898e28c1b4a3ccf63261d6184852832222bd353f99007361b6ca2b4a059070b9efb6d3c6ac95c9e6270\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-osx-arm64.tar.gz\",\n            \"hash\": \"5b48dc99e90bd593c9decb65e71f398207d4cc5456edec35db9f48556d1c0f4de26c0d27f981bc2f0e909a2f0eb18071c483b7766f45d69e1f71519f74df5679\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-osx-x64.pkg\",\n            \"hash\": \"d7c7711a707e46ae66cb395e890d324315d55aaa7d016af77df8f8f5a56c300647f5d758d95cd25b748d5463efda287bb6a7d794c01f293d23863e89c81d7c0d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-osx-x64.tar.gz\",\n            \"hash\": \"ddc42d28564b196479c62bf3083516b236dbcbf6429cc5c0e2866d61bc0d500612cdd0224e45c154e1df07e414da1763a0334dd55d95ddf304e2e8dac67dfac7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-win-arm64.exe\",\n            \"hash\": \"a6a594e0c0259918989b544941e750ac1ac69b028f7066e9d6ee10ab97d9a46f0a46c5094a1cb4a5be5604b5df9b362239fbd664a3758f161187c1510300728e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-win-arm64.zip\",\n            \"hash\": \"d01c1e7c389bb7cb5cb11fef4ef797ecffb3040dbf3092e0fd4c077d99e0dc8b81e1c3f9fd1368b826096b06b4c21c8a0b5af1237e79b0b037591bfe507f9d65\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-win-x64.exe\",\n            \"hash\": \"2ac55c1503aa21e157e743fb3f77dfa03600c0acf604fbe7df907c9e56f5e806026de3499a0e2e3efe91db685a921058123e6c311be8969e16f8c3d83e08b079\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-win-x64.zip\",\n            \"hash\": \"f1bf15a2b28a811a622a2e043dff405f0a7712d86fdf35ff9209a9779df06aefcd0edf7b2716c1cf339b052744b0f414b736c131895cd921f4cea4e0304a41fe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-win-x86.exe\",\n            \"hash\": \"85058f96d731d44d7d476d4c1f1af25c77fde69d2f5041e1d03b2cd56b88a2e1a99faa9fe4ab2c0d46b68643ab23eeae14c64adbfe3a98f0daf6f4b375963a13\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.6.22324.4/dotnet-runtime-7.0.0-preview.6.22324.4-win-x86.zip\",\n            \"hash\": \"b05d7c3cc7664d02d8db1d75078f8e2139b5a39c56dc6d7d4dac285030cf634d61b460614dd13b53e75a41b23c63473a993517015a70357def5c3e2ce585a389\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100-preview.6.22352.1\",\n        \"version-display\": \"7.0.100-preview.6\",\n        \"runtime-version\": \"7.0.0-preview.6.22324.4\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.3 latest preview)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-arm.tar.gz\",\n            \"hash\": \"8b1842959620af96375bf46464eb55fe30a404f59c198e55fa471fb2fdff2b7d8ddb72c17f6523006ee6399ed227e980140850f5a7981b8f83cef366f4da7a94\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-arm64.tar.gz\",\n            \"hash\": \"e1812dc0f4ae06a6abd375ca975e2f23e510f683b09ae0a32cddd0f6293f515f2316ce94b170e680d83e1450be27da7506e393a92dd89a9a5fa1b9e4f198a0a4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"51528e884f16769542dadf1b34b54a41a5aa2c815512c92ce0e312f92bb5da4b67bcf4d051a576cda6b9543b61455e3ea60c2c464ad16494f3739ed746d09db1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c73efa6aa762859d38e6de8645affae23ce1270f8df1747355a459fb552bd70749d4c43cee601d6d54b2bf41b172539da9f70a1a16b9e25b19d5bc9eb1f03e44\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"0285a9be89ab0c0b72d489cb660bcb3355905e1c6dcb05341977820012b45fb07798b26727de13dac6f0d1fc113ca57b8f21fa90bb8f670b58622278bc5d322d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-x64.tar.gz\",\n            \"hash\": \"e49a2119021e4069f1193898536cc59628336e656f2f7e49d454a593a330d8e437acf2f4efb70925bc16a9c900c2e49f4a6c2fb5f69e696b09a91ebccd2c9307\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-osx-arm64.pkg\",\n            \"hash\": \"fb06616bfbff9961719a8cb5b57b5fccf2f4bbd292f2316842b1e28eddd8e9bab4735c504686f46aaa2a964fd28d2ae927c3fcbfee9119deb848403068f3094b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-osx-arm64.tar.gz\",\n            \"hash\": \"a76eef95f7062856eb5343b0da1192679821fe45d5fcbcd2ad7c32f1fd0293118f2395215cf23187af8d9662b8dbae5e9154be0431d50584ef73aafe8a580a70\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-osx-x64.pkg\",\n            \"hash\": \"fe07f673e85ce8c1b97d8a61255fc54364c40e68845af3c2e0e3fd77d8e2f844f9fc84e370aedec52cecd523baa8f1ed2fadb83ee057f1be2e1e7760a762e2c4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-osx-x64.tar.gz\",\n            \"hash\": \"beac6336874af9552c06c0434e89406b10f3bce8cde3f63e9c044dc66e5b5ad548c9dbfde3cba1880e7b23cc272f5a4e448a052aefa011da1fc7b600eea3f147\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-arm64.exe\",\n            \"hash\": \"58eb3f67a4b05fb4f43a144a5305ac0d3368700334283edf3ae30d6528c8bd3e0674cdfbf786cd495296bbaccbd076b797b48b15522fa08d0a183bb7cdf4dba2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-arm64.zip\",\n            \"hash\": \"988015bf42ecac3e13aa700719fccd5641e449a9272a9b4cd388cd7088294ac98d06c456ac34d6b2d30b0ec266ffac5fc7782109cb3896cc4c5c7454eb3a0253\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-x64.exe\",\n            \"hash\": \"e3fb8511f885f285b86e157f327eb8855de631d9e5aa1f69e0854ee70bab4033227aee24a32a1f04a2633baa2c893bad1b89067caf85cc96c8c9a6c5ccb2cd62\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-x64.zip\",\n            \"hash\": \"ee7cc821386827744ec1754f0b9bc6a24fc11dc201ad3ea96797f9dc493ecf60b95b484dd8b8622c1e6b03f40c068234e8e2f65159ed6d58fd57dbbfa6f66c2d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-x86.exe\",\n            \"hash\": \"7e002b7a2d52608c854e0a2fc844459e5f1ba4f12c5670d3c15e6723c111cdad8aafed15cdb589218b0c7e668cfc53da6f60f566405efcf6966fa1597e521e33\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-x86.zip\",\n            \"hash\": \"6470e4e9e66cd24f4aab54ecd38633fafa211dbada021cb02b1906e56eb690192116901edc31a019f6e1ed98463653c61a180d64a234777d92806d4c4d11216d\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100-preview.6.22352.1\",\n          \"version-display\": \"7.0.100-preview.6\",\n          \"runtime-version\": \"7.0.0-preview.6.22324.4\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.3 latest preview)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-arm.tar.gz\",\n              \"hash\": \"8b1842959620af96375bf46464eb55fe30a404f59c198e55fa471fb2fdff2b7d8ddb72c17f6523006ee6399ed227e980140850f5a7981b8f83cef366f4da7a94\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-arm64.tar.gz\",\n              \"hash\": \"e1812dc0f4ae06a6abd375ca975e2f23e510f683b09ae0a32cddd0f6293f515f2316ce94b170e680d83e1450be27da7506e393a92dd89a9a5fa1b9e4f198a0a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-musl-arm.tar.gz\",\n              \"hash\": \"51528e884f16769542dadf1b34b54a41a5aa2c815512c92ce0e312f92bb5da4b67bcf4d051a576cda6b9543b61455e3ea60c2c464ad16494f3739ed746d09db1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c73efa6aa762859d38e6de8645affae23ce1270f8df1747355a459fb552bd70749d4c43cee601d6d54b2bf41b172539da9f70a1a16b9e25b19d5bc9eb1f03e44\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-musl-x64.tar.gz\",\n              \"hash\": \"0285a9be89ab0c0b72d489cb660bcb3355905e1c6dcb05341977820012b45fb07798b26727de13dac6f0d1fc113ca57b8f21fa90bb8f670b58622278bc5d322d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-linux-x64.tar.gz\",\n              \"hash\": \"e49a2119021e4069f1193898536cc59628336e656f2f7e49d454a593a330d8e437acf2f4efb70925bc16a9c900c2e49f4a6c2fb5f69e696b09a91ebccd2c9307\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-osx-arm64.pkg\",\n              \"hash\": \"fb06616bfbff9961719a8cb5b57b5fccf2f4bbd292f2316842b1e28eddd8e9bab4735c504686f46aaa2a964fd28d2ae927c3fcbfee9119deb848403068f3094b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-osx-arm64.tar.gz\",\n              \"hash\": \"a76eef95f7062856eb5343b0da1192679821fe45d5fcbcd2ad7c32f1fd0293118f2395215cf23187af8d9662b8dbae5e9154be0431d50584ef73aafe8a580a70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-osx-x64.pkg\",\n              \"hash\": \"fe07f673e85ce8c1b97d8a61255fc54364c40e68845af3c2e0e3fd77d8e2f844f9fc84e370aedec52cecd523baa8f1ed2fadb83ee057f1be2e1e7760a762e2c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-osx-x64.tar.gz\",\n              \"hash\": \"beac6336874af9552c06c0434e89406b10f3bce8cde3f63e9c044dc66e5b5ad548c9dbfde3cba1880e7b23cc272f5a4e448a052aefa011da1fc7b600eea3f147\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-arm64.exe\",\n              \"hash\": \"58eb3f67a4b05fb4f43a144a5305ac0d3368700334283edf3ae30d6528c8bd3e0674cdfbf786cd495296bbaccbd076b797b48b15522fa08d0a183bb7cdf4dba2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-arm64.zip\",\n              \"hash\": \"988015bf42ecac3e13aa700719fccd5641e449a9272a9b4cd388cd7088294ac98d06c456ac34d6b2d30b0ec266ffac5fc7782109cb3896cc4c5c7454eb3a0253\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-x64.exe\",\n              \"hash\": \"e3fb8511f885f285b86e157f327eb8855de631d9e5aa1f69e0854ee70bab4033227aee24a32a1f04a2633baa2c893bad1b89067caf85cc96c8c9a6c5ccb2cd62\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-x64.zip\",\n              \"hash\": \"ee7cc821386827744ec1754f0b9bc6a24fc11dc201ad3ea96797f9dc493ecf60b95b484dd8b8622c1e6b03f40c068234e8e2f65159ed6d58fd57dbbfa6f66c2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-x86.exe\",\n              \"hash\": \"7e002b7a2d52608c854e0a2fc844459e5f1ba4f12c5670d3c15e6723c111cdad8aafed15cdb589218b0c7e668cfc53da6f60f566405efcf6966fa1597e521e33\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.6.22352.1/dotnet-sdk-7.0.100-preview.6.22352.1-win-x86.zip\",\n              \"hash\": \"6470e4e9e66cd24f4aab54ecd38633fafa211dbada021cb02b1906e56eb690192116901edc31a019f6e1ed98463653c61a180d64a234777d92806d4c4d11216d\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0-preview.6.22330.3\",\n        \"version-display\": \"7.0.0-preview.6\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22181.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-linux-arm.tar.gz\",\n            \"hash\": \"5bae22743fb83368f8663bfad299c5fe3de5130388fe77d5b5cbf9db02b554be767a3ce783d08de52a200d97cc36839cb8af319b464a637f9aa23d701755590a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-linux-arm64.tar.gz\",\n            \"hash\": \"877979a4d9e9d4c6f167590d3f132583aca655bac8d2ddb022aeb2a2e6b09ecbfd6c251345fbb894a0493feab9f2219f9ce6656b0566a777b93c79ff784c26a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"fc640b8efde8549d645993cda2c1908255fc1ea9bba0b84a03e82561bc6723f78dde12e6addf90610b26791f9a290838667d75053d6ec91713ab2048ce6a8109\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"78593bcb6726143d07713fa7ba16e7058dcf1a381c65fc4479cc016400d25062677c03f753cb3aba8d5cda4e818f11ffbc79e7f3e92acb031891c75c1c20fdbf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"8ef7f83b4eaa679ff375c5075472c093a9a70d2453927d37c8baab36eecb8feb26eac0765f63e4bd4bfcc7181248531f164c03072642f63ed86ccb895a2f3908\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-linux-x64.tar.gz\",\n            \"hash\": \"a7aa5f3b788645a39957fa27cce84ca1e7dcfcf7a334d52097e891d3b26b8c8ba981c1f3bbab17831110339e1e62a74e6a54eee15311b8294a2d2c845a07cdbd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-osx-arm64.tar.gz\",\n            \"hash\": \"4e41ca850287e87e43251850bac30b967c5556f87637bc06169f39f9c6da053f6d1d77c8397256b3eaaac6993dfa2d757a86f407b4d4384ff5e5bb082043eb3b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-osx-x64.tar.gz\",\n            \"hash\": \"1063103d449c0663a108ab2332520640ccbdbd47ad7faa94c4c4ff8805c278259ed27da8c4f3025171863772b6b0b714ab080ffa904efd86a1f83e3eadeda246\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-win-arm64.zip\",\n            \"hash\": \"9569d4719f5423fa75e00aa991e76e0825cd37a71c9f9642545aa9192b73126744604ecee34aed3a2882215aecf088e95fef5881225de47cc7b4587e22de19d8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-win-x64.exe\",\n            \"hash\": \"6c0901bd931c2f580cb0079c74c7dd3759df4822a4328d5e13807d7b67d2641da995839d540a00934c0daa2f9f0693196f581d22e985de7d93932c1e289a789d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-win-x64.zip\",\n            \"hash\": \"368a9d02358ed8057d77db71e00d2b19adf4a7180d9ebc22b2a338e33b41689e3549d8f119a110d89384e292c6d13598ec5f7056f56b4f94e03c99aed07a5aad\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-win-x86.exe\",\n            \"hash\": \"fa605d78b83779f30f4775cb491f254cbd1964f8a5176e6b5435364c16c4e27d476791371a2e13e55c9f55e79009add0a295a7f112770ed45027605cda25539c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/aspnetcore-runtime-7.0.0-preview.6.22330.3-win-x86.zip\",\n            \"hash\": \"c8fc7401646b8e101608c69e886aab38de128b0a723a06f42d35c157e2b0b5dc9b583f960a187f90fc09bcf8d7b97ff2d4c23a18be3424747efd19b3bbb65eab\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.6.22330.3/dotnet-hosting-7.0.0-preview.6.22330.3-win.exe\",\n            \"hash\": \"0d1affcf891c00b9a0082ae6cf0d2cdf08c4007b396d8b3b520035f714891310203f1eb7010b65a5b28ad6c21fd45559cec853dd29ba27117188b767425de12c\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0-preview.6.22351.3\",\n        \"version-display\": \"7.0.0-preview.6\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.6.22351.3/windowsdesktop-runtime-7.0.0-preview.6.22351.3-win-arm64.exe\",\n            \"hash\": \"432cf7c8709a60045c66466da2932bcb252de1e63db215124c96e372d8ab1b752a86d32ee09cb7d4a04e87566d834187174c8a4a4d0e439c82c709330b8d2d43\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.6.22351.3/windowsdesktop-runtime-7.0.0-preview.6.22351.3-win-arm64.zip\",\n            \"hash\": \"44f3b1f0dfc4ea546a87ed322c083ba37d97a3447c855b05a709336a58d32283c8501d8b5304461b9474419f45e65a2baf4cc12de5dd9993b011adb4e3364933\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.6.22351.3/windowsdesktop-runtime-7.0.0-preview.6.22351.3-win-x64.exe\",\n            \"hash\": \"031de8a2654becf115402116f8a5751064acf4d74412ef81e82c11979e1f7ecc3f9b2f8e085ecb875fd14699952922d8078531c4c25683ecdde4954db62c787b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.6.22351.3/windowsdesktop-runtime-7.0.0-preview.6.22351.3-win-x64.zip\",\n            \"hash\": \"56031d79145d44b3fde898172afe42227f192e187e7e7f13f20e265d3661fa0f368cef89f115377f894244ca2b6f11e8a764a09d417ffed8a35e5ed84310b72d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.6.22351.3/windowsdesktop-runtime-7.0.0-preview.6.22351.3-win-x86.exe\",\n            \"hash\": \"d738c4903c805e045a8f8227802fba0eff04cd053ae195bf8a1e57a8baccbcc71b4ecdc93abcf1a521aa88b64f1be6e5caf95243ef0411aecbaad597eab7d79d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.6.22351.3/windowsdesktop-runtime-7.0.0-preview.6.22351.3-win-x86.zip\",\n            \"hash\": \"b5f1fa971e096df0459e6469f08e2a012ca558e3254b0ec7e47eee09bd0f5e0cbb9e1d916d84caf09b6dfa400aa3ca54b1c1627f9199af1b5a6461afb7520dc5\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-06-14\",\n      \"release-version\": \"7.0.0-preview.5\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/preview/7.0.0-preview.5.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0-preview.5.22301.12\",\n        \"version-display\": \"7.0.0-preview.5\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-linux-arm.tar.gz\",\n            \"hash\": \"d725a5353c295e7152216cd80a6dbba3231e816492592de3c50765cc3742b14e281b140cc96ea6cf6b91e1a4e1034459f632e95bcf661f84f71601f673328552\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-linux-arm64.tar.gz\",\n            \"hash\": \"0751be17efa3191e6c9dd3bf0b7f1f8fd21028282b9eacf6786c6f61c7898199d15ad4719686e0437e4ecdd0c2d85830344732afb5e2f4579e89aa410f75ee4f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"a0803761ba6afd83736decb326190687e72cc95e6e39df5a149ffefb62686b81bfa0c1246d1f0abc78d0eb83533e4e3333c082085f838035cd908522e277b1a7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"04996cf18a9e5e0b4da67110195b2812ac3273586085181ddc71a7907a00b594a2b81aef052db75de9f6762522b9ab6b458d742b377dd081a7193c83bcef4313\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"3df1c3926f6a443b8d36e229d21d3603b508803b40a5f9ad685cfa3cdfaae0de0c53110b6162941d90fb1156c76a9cce54875caf2666ab0ae97e7dbf8140d1ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-linux-x64.tar.gz\",\n            \"hash\": \"faf8450e1387b3329168c43a95f091f6c41a1230cfd0f4df2e5e1a501a8f8f82e41893cbe1f5f10b247c3ae58ce24ac4c18fd5533756307e50e439ec70ce0e4b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-osx-arm64.pkg\",\n            \"hash\": \"fa49e5740cba1e66e15b040f51807d8f63ef7336451edb86f5881fa2526df61738eafb1c8e4125c5d339a5dd579589336d0a42e9c1e572d006fd9568726a3d51\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-osx-arm64.tar.gz\",\n            \"hash\": \"6d25417bc5dfb59d6b59decb49c55737bb00f1803453eec126102c90b9d9be0809724c4cf1a0f321a1eb5daf70e7c6ad33fd50fc79eb94793f61bf816637e00b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-osx-x64.pkg\",\n            \"hash\": \"a7968e4df33af0723df7ddcdd7f2208f526bc89a131cc312ab5589c308db7d97e23b10e419738f9f920e7a72f561de7ed2e6a6fcd1e7cb6fc11278c97bec9bab\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-osx-x64.tar.gz\",\n            \"hash\": \"a0f85b0dd51e6c0763316a2e4a797a32e8ba6b35947295c11dcf39f3122cfa9f1e47c3371cc360d967df4ed800679aff2b13e299ed1bac861b27e185f9de5704\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-win-arm64.exe\",\n            \"hash\": \"b17aad8d4dfda0148d5bde8ac2d829e54ff003c817ccc110ae80f451879bb494edd427d64c8493a401e08a64e55e9f58c2324b26390657fccd109edf81c96797\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-win-arm64.zip\",\n            \"hash\": \"4a3e51145c7b73c77bcd0393a80bbec0e9fbe63ac1b1e93861bfe3d82175edc559894639ec9c86b59f35b671f62d47688378b097a953a7b51158e3fe7dfc3b4b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-win-x64.exe\",\n            \"hash\": \"ba91290b917fac1b7fe663c94e39697322dc98e3a6d0257369d39770e4f7b33bacb4358e8f71124cdc230c180140c5df7aa5c6e0e96264488c942ffc5bae5c11\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-win-x64.zip\",\n            \"hash\": \"9cbaea09ea08586c11a16c879a74dfac3543164f778e9e61a52a5835f31f10303d808d327f8325208ebd6bf2ab1d2a15a5d12ea9e9190e81d0248d1e4c252c0b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-win-x86.exe\",\n            \"hash\": \"3780f3b63ff0e4069797b9c234669e62f679bb1c412f03df67e3f7a8ded4a3a39bae4941bd2ebe6a0056aa6c9c4a203cb24d3dcdc71525d560f37d876a670341\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.5.22301.12/dotnet-runtime-7.0.0-preview.5.22301.12-win-x86.zip\",\n            \"hash\": \"e8090d5a1db4c621864e7206f2784a01940e698593d1ad9ae846e8300e052a132fa7a07412d38d7b0a6fbd5208929d9a67408c11118de178070e08bdc5d55676\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100-preview.5.22307.18\",\n        \"version-display\": \"7.0.100-preview.5\",\n        \"runtime-version\": \"7.0.0-preview.5.22301.12\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.3 latest preview)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-arm.tar.gz\",\n            \"hash\": \"065eaf010a533357eac08b571fff2cb3f34a41e6428195d41a8d168c60e412fc889681b1e6eef4d366dc399fe31bb0bcb906c6e9dbb6f24fed8e8509265021da\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-arm64.tar.gz\",\n            \"hash\": \"51f4e3f578cc44ea1b64904183ca0c0dd8ba229055fb70bdc4f94144fee9b2b2cc05d014332c560319da44252df9156caf1d06f91d999bc7de76b5b2d881f69e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-musl-arm.tar.gz\",\n            \"hash\": \"b6aacd929ca2c2ff9b66df3760be45685801cdcd778926d889620e8468bb04c917836f6ca43b6a69d0a15c2666b7758bd799dbfd922f2cfc0be3963495a176bc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8fd9d39fa2306fe2ef72715d3ddf74255d90c6089fabb29aba28da72736a81733649139ee577698abb3bbf471e02233b9895c53d5dd326c540110e01c99a3092\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-musl-x64.tar.gz\",\n            \"hash\": \"98666ea340496f8731a443d956437e2702fec48762c6ca6623303f9b784ac8b64a71ebd1f64888935420f86b10aa686db4b78e168859cff8962e10e551a7bd3e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-x64.tar.gz\",\n            \"hash\": \"691c0d8917bc9848a08707b7fa22da05228dad0ba6335ff06c6d80f9a95349307572ff45c0b088d9fc199c40a1784ff314e1a8735d0366bd3aa06eb8dfa2b7d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-osx-arm64.pkg\",\n            \"hash\": \"c8c866d1492507c7ab6423ad8f6fa9ef10aceea134e3ee06f15110382a93e7fc285a3316e87d846c729333a8072324ea69035108b3dbb8930432ddf537a00c36\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-osx-arm64.tar.gz\",\n            \"hash\": \"983128f05d5f2476383b60d9d565349532d4183bffd0a215d74bb26d0a53d40489401d00dbaf8af6a01aca8ec85e7776019cce0e662764ab3017e4659fd3683b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-osx-x64.pkg\",\n            \"hash\": \"684e2b5df506fdd8d82d3fa74163ccab1b4969afdd09e4fac8d089af0bc3e6b2930c1ed4278e8f0e64da640fa03ad5abdb6160c78e08baa050d4712902ea5a0e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-osx-x64.tar.gz\",\n            \"hash\": \"b329f615fad845b6ec49d15d81fb40f27ac078ee871b305e835c0625015f8406b665447c9d8c2a1d30dd57912cb470f6bf2c155307b4920b256c3b80fa800ec0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-arm64.exe\",\n            \"hash\": \"0b035489cb366fbb34a60dfc7798d46ca14c1565ec5b9fd5f1130b3f4306a6fbd4a5bad640fde0eefda9898827a8468bcfc90c71e64ebcb665a5a6005c02bc87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-arm64.zip\",\n            \"hash\": \"c9befacd4a0af026896edf7624723dc04ee60fb250b568b9ea14dc6872e9cb1f636900faed96969cb932e94250e5311b7aa6031506d5114cadaa9e59b95d1456\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-x64.exe\",\n            \"hash\": \"bbce402061c314be47014d64240192394eeae14564d4435c967c249f6bb774bffe82d2b84e1bd11f66dcc557d14443f1b545208a88902fb4033b98967819c6a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-x64.zip\",\n            \"hash\": \"fed4e197bb6da85ad9caeb49733c96a59e05daa078b34c542939f28f6ea4e610240d604e123eadc68d9a4267500db07a7a895e7743b7ee12ef87490a853bc064\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-x86.exe\",\n            \"hash\": \"b53bb4f3932f29c3a2f4ecb05ff532bd395ca13cf8ccc0188e31f0ff96f4162d02986cd88df1f4672066ee35ffd6804cc056be6f6dbc96816e1f4c816256d892\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-x86.zip\",\n            \"hash\": \"93957bd30777b4919b1c4bbe9763636e60d5b1e75e8e36eb6704bec3a53daf12f6b4f17666a21a4fc2b844961aba8cfdc02edc6bbcbb557bd01030e9c8b9c535\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100-preview.5.22307.18\",\n          \"version-display\": \"7.0.100-preview.5\",\n          \"runtime-version\": \"7.0.0-preview.5.22301.12\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.3 latest preview)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-arm.tar.gz\",\n              \"hash\": \"065eaf010a533357eac08b571fff2cb3f34a41e6428195d41a8d168c60e412fc889681b1e6eef4d366dc399fe31bb0bcb906c6e9dbb6f24fed8e8509265021da\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-arm64.tar.gz\",\n              \"hash\": \"51f4e3f578cc44ea1b64904183ca0c0dd8ba229055fb70bdc4f94144fee9b2b2cc05d014332c560319da44252df9156caf1d06f91d999bc7de76b5b2d881f69e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-musl-arm.tar.gz\",\n              \"hash\": \"b6aacd929ca2c2ff9b66df3760be45685801cdcd778926d889620e8468bb04c917836f6ca43b6a69d0a15c2666b7758bd799dbfd922f2cfc0be3963495a176bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-musl-arm64.tar.gz\",\n              \"hash\": \"8fd9d39fa2306fe2ef72715d3ddf74255d90c6089fabb29aba28da72736a81733649139ee577698abb3bbf471e02233b9895c53d5dd326c540110e01c99a3092\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-musl-x64.tar.gz\",\n              \"hash\": \"98666ea340496f8731a443d956437e2702fec48762c6ca6623303f9b784ac8b64a71ebd1f64888935420f86b10aa686db4b78e168859cff8962e10e551a7bd3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-linux-x64.tar.gz\",\n              \"hash\": \"691c0d8917bc9848a08707b7fa22da05228dad0ba6335ff06c6d80f9a95349307572ff45c0b088d9fc199c40a1784ff314e1a8735d0366bd3aa06eb8dfa2b7d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-osx-arm64.pkg\",\n              \"hash\": \"c8c866d1492507c7ab6423ad8f6fa9ef10aceea134e3ee06f15110382a93e7fc285a3316e87d846c729333a8072324ea69035108b3dbb8930432ddf537a00c36\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-osx-arm64.tar.gz\",\n              \"hash\": \"983128f05d5f2476383b60d9d565349532d4183bffd0a215d74bb26d0a53d40489401d00dbaf8af6a01aca8ec85e7776019cce0e662764ab3017e4659fd3683b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-osx-x64.pkg\",\n              \"hash\": \"684e2b5df506fdd8d82d3fa74163ccab1b4969afdd09e4fac8d089af0bc3e6b2930c1ed4278e8f0e64da640fa03ad5abdb6160c78e08baa050d4712902ea5a0e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-osx-x64.tar.gz\",\n              \"hash\": \"b329f615fad845b6ec49d15d81fb40f27ac078ee871b305e835c0625015f8406b665447c9d8c2a1d30dd57912cb470f6bf2c155307b4920b256c3b80fa800ec0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-arm64.exe\",\n              \"hash\": \"0b035489cb366fbb34a60dfc7798d46ca14c1565ec5b9fd5f1130b3f4306a6fbd4a5bad640fde0eefda9898827a8468bcfc90c71e64ebcb665a5a6005c02bc87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-arm64.zip\",\n              \"hash\": \"c9befacd4a0af026896edf7624723dc04ee60fb250b568b9ea14dc6872e9cb1f636900faed96969cb932e94250e5311b7aa6031506d5114cadaa9e59b95d1456\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-x64.exe\",\n              \"hash\": \"bbce402061c314be47014d64240192394eeae14564d4435c967c249f6bb774bffe82d2b84e1bd11f66dcc557d14443f1b545208a88902fb4033b98967819c6a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-x64.zip\",\n              \"hash\": \"fed4e197bb6da85ad9caeb49733c96a59e05daa078b34c542939f28f6ea4e610240d604e123eadc68d9a4267500db07a7a895e7743b7ee12ef87490a853bc064\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-x86.exe\",\n              \"hash\": \"b53bb4f3932f29c3a2f4ecb05ff532bd395ca13cf8ccc0188e31f0ff96f4162d02986cd88df1f4672066ee35ffd6804cc056be6f6dbc96816e1f4c816256d892\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.5.22307.18/dotnet-sdk-7.0.100-preview.5.22307.18-win-x86.zip\",\n              \"hash\": \"93957bd30777b4919b1c4bbe9763636e60d5b1e75e8e36eb6704bec3a53daf12f6b4f17666a21a4fc2b844961aba8cfdc02edc6bbcbb557bd01030e9c8b9c535\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0-preview.5.22303.8\",\n        \"version-display\": \"7.0.0-preview.5\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22155.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-linux-arm.tar.gz\",\n            \"hash\": \"72cf346481c3ff0952c47cc6e9e2b18391fdff8ef53419d0abcda12352623cf5d7b68e6cf711a9af7fd96ebcb3ad082230e70bc2c1bff593d6415d460cb94f6a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-linux-arm64.tar.gz\",\n            \"hash\": \"56db58200270d802e0f3125d3ac055dc2d9b7f33879ddc995920d014434fc33d92a39ed0d32b01592e03bc4ee4a0c684621e1b6c64a6d13253896cca41e48262\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"5a9059a15b73479e5a696095723c4db58105c3e6d495c39978d67ab0a3dd00ba68518efe875d48b242c80d24cee0f6440c3f163a74bc90a0c3444fbd7e9e7edc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e03a8b492b9cd5a02277fd2b4ad91e93927e765c3dd90314a3464a7d448b7ba1284caea4ede24f8e161b0322f8133cb898e7a8139ffcd05967380e35884e096b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"4c5821c3cbe4ecf74a2f0dee7f1e7ff987a3eb30b19003025767ed4ea993ddfa03edbcc05830af47f7ad28dde0ac6b0fa7ae0583d8358a362b6830381a2e60b2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-linux-x64.tar.gz\",\n            \"hash\": \"40809e8687d7b4d3c11b6778830dac364fa61bfcbd362474ee4de77a2bd4fe25a80edaa2e64807cd6daeb8391fced9e4077b02adfe88196a831e4112fd60e48b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-osx-arm64.tar.gz\",\n            \"hash\": \"794ee8831dce488dba840a04c021c7e8ab9a25ce1ff752140fb2b78ba7bc42857b6e0973f7c02fdf4fc99867d2116e8ec3cfc21723af2ce783d3462c56c45ca7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-osx-x64.tar.gz\",\n            \"hash\": \"21848cb14c4808a39e503f8c0f2590dce58734b8e5d2bde70e51b42c99ffcd1a46df7b84a0a433b082197b3bfbaefb4cb4fe81ca76bfae15e95ddd64e78e1425\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-win-arm64.zip\",\n            \"hash\": \"a04382d06cccffd03f86a155549bad5ae0fc47b6c413de07934ef3ef693a466e5f1e0b6d32f5788bdb3f20d7d4ae047b75bb1acab1de30e7345af5d7a0b4c8ec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-win-x64.exe\",\n            \"hash\": \"9451a4cdf15edf9f0f352bbe6ab6eede1580e8ea7903e788772f67489d62219601c383bd42b6045c89724cb11fc2522c5d8755e56df4c7f7e9f636541eb51840\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-win-x64.zip\",\n            \"hash\": \"3aaa75387c78f0bffee37689d4f6220b32f9264d9f5c7eece04aa7e5db3df81a465f1e2da94a145797dca6f66d44a865b6d925bb8550ea1183ddcd975e514f88\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-win-x86.exe\",\n            \"hash\": \"c609a0ed776c5ac5a5960f778e9dc4f5935e06017c0b67e0488645a7e55f29da4c586dee74748ee24e0b9f0c32ae658fe459d5b773d11ded76f4c602d43e8f64\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/aspnetcore-runtime-7.0.0-preview.5.22303.8-win-x86.zip\",\n            \"hash\": \"7e8d0c3074d5ed9372d11023535805cdb4fe05f046c46bee8ef1f632c269012b4fdcbde6819709b6425e3598a4e1a0f22be2fd9f7e0dd3f24cc7f888b760bfd8\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.5.22303.8/dotnet-hosting-7.0.0-preview.5.22303.8-win.exe\",\n            \"hash\": \"6cadb9198ceeac6901b86126029507b77c1317651204042af0f73230b0b240a4084599b59561f3ed44b10cf127ebf6f9402dbfb216c691af323f530773368180\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0-preview.5.22302.5\",\n        \"version-display\": \"7.0.0-preview.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.5.22302.5/windowsdesktop-runtime-7.0.0-preview.5.22302.5-win-arm64.exe\",\n            \"hash\": \"3de94f8d5537cfbed747aa4ec56edd755c38c58efa0865e397c36fb7472c9b72117b2da7c5f3256e43197c8187db25a23753ee862b9920df2144e865b8bd5321\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.5.22302.5/windowsdesktop-runtime-7.0.0-preview.5.22302.5-win-arm64.zip\",\n            \"hash\": \"2f8ef6c944963e7b4af2d80785c6923b55f6303330b8669d2d46a049b045aa93b3ea49ca93b4468128126476d1689473f5266533c40a03a140ce2cb152b3a3c8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.5.22302.5/windowsdesktop-runtime-7.0.0-preview.5.22302.5-win-x64.exe\",\n            \"hash\": \"0c28eeeb7d69f492f00af393438944494af8c34aa095b9874bc6f1003626c27293e00d393b144c9c36532bb57a13a6a76b3ed540d65bb9884239d264783e69d8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.5.22302.5/windowsdesktop-runtime-7.0.0-preview.5.22302.5-win-x64.zip\",\n            \"hash\": \"f84526cbe85f9c575ad7c1a4578857ebabfd75ad16c69e6483fd019472eeedec2c1f80558edcd99fd801e86ef2ad22597617f7371f5e1c08afedc63f084b238f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.5.22302.5/windowsdesktop-runtime-7.0.0-preview.5.22302.5-win-x86.exe\",\n            \"hash\": \"a9ac398df168032fdf68027597bf419e641063a4dca030d33da6f80907ef0c4339f4ebb747ef2d35e0818740b3aabf9371dd16407ce8b36609f64d3333cb785f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.5.22302.5/windowsdesktop-runtime-7.0.0-preview.5.22302.5-win-x86.zip\",\n            \"hash\": \"00d56cc73ae6879c9cdc512f88feb7077d3b9459ba7d7e89d3dc37188c6f5e35706801cbf0877eb4575782392db4e40610899e090d2fa72011b631b3d699f6ca\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-05-10\",\n      \"release-version\": \"7.0.0-preview.4\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/preview/7.0.0-preview.4.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0-preview.4.22229.4\",\n        \"version-display\": \"7.0.0-preview.4\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-linux-arm.tar.gz\",\n            \"hash\": \"3726a47e90f766763927cdddbd7edf0121fd3a18ea06108ff7b45349694178d65cc736434d7514a5fdb6e15b32346b058165d6117bb938a0711e9e55d5289925\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-linux-arm64.tar.gz\",\n            \"hash\": \"ddced9182f8226ac513ffaca188d521d2f777ede0859b13927ad0f9ee07f6891614e95a4699c852ebd202a2c5e965714ce611838c0d53c3be0913d2abc6eb0db\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"5d9ab3e9db75b10cbf606dc81e51f87f71ec7f531e726ce18c56aa48e6dd18559ddba995941237c7970ef38f8bfbc69affc1b1f10c44bfbc9eda5ad3a64234e6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a71b75af6c5f11e9eacecaafa57c8d0a6b597e3e0aa723dba617f7a95664711226fb0fd74c1349ed92a4b16651fc1c4113df066addb60618467533b33bb75916\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"8b550424c2de09cf5dfb161197d911d7e0a2e2323619de2d4c9031ad6d2a32793bb3d74054010fd4f815aefc9170328ebea04828f6818d066e9242ee64e9cdd2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-linux-x64.tar.gz\",\n            \"hash\": \"0b55789e4825924a08a91b603d3e54d654443e39f274c61947d7afea44ef2b16b8fdae3f2087acf672ae8b653bee93094091a4089a823610b7177fb38f9006fc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-osx-arm64.pkg\",\n            \"hash\": \"8e0fc91b322ba7f4603b1c049f94d37b8dffc529a9a9c7e97f472fd9f6f98ded3756306b97cc2560518933b242ff4a1c0bbea8227616895d0a2a91e352033673\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-osx-arm64.tar.gz\",\n            \"hash\": \"1beab2bae61d0a3fcd0ae18797762e7be8ce1a5e9f7ffd31bba569f12dcd5f930f14f09b7fda275f741662c64fe04468338811b53cb2025f7f426e0e0ecbbea5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-osx-x64.pkg\",\n            \"hash\": \"e5e6c27c426edb0835d501c882428d6e6eccbbf29e511e4dde949d16dd8507c784ab940eab0ae571676ea169c3064612beb6e17eb0eb3c6970d3168eb6d45c76\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-osx-x64.tar.gz\",\n            \"hash\": \"9addbb6bd460165ccf18f861f4979cf54a89c5a35ac425644d172d875bc0b046bb5901283b45d33c97eef4cca2dabd18673ded0c8c1a7c67802686d3483ecddd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-win-arm64.exe\",\n            \"hash\": \"a35a5397e96810577cd4d94a4ca53365273838a57bb45d96ba41f728a27b0f5149e5098a4e5f3d81082736a3118dae91bcc90a0691a8606ab04fb1cd280c8495\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-win-arm64.zip\",\n            \"hash\": \"e615f71a02ee4a5d834c32f37ddac32d7dfeb89ba16e946f7f8c93671dfd4e0e80419fa76174ead195e3fca5c35948817b60c5e420a7cfa1b67a7a20344e7266\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-win-x64.exe\",\n            \"hash\": \"97568be294d7513735f7b378263f4c2310d9f01cf2b2b7072a2bbf7af292b392a337fc218dbdcbf5872f4cbeba80ad3273a2058dfcf2300ccbf451ba27d47418\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-win-x64.zip\",\n            \"hash\": \"6ed044e1cc4a1b851299cb2fa78df51752496c1c2a93f3a8e5d32eaf14ef6c1a845dc5b746f6b7c3a9ac540099f10db32cfcb18d5c7346dff0cb409e6bb3afae\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-win-x86.exe\",\n            \"hash\": \"ede86fb1e91cb625c289467e200c585bee1fcdcae9df77e4087b42a47f47b8588a46595f2642174386b62afb86485e409f7b30329cd9ea6ceb0154b6d1acddc1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.4.22229.4/dotnet-runtime-7.0.0-preview.4.22229.4-win-x86.zip\",\n            \"hash\": \"29ee1bf36c78f111d76bae23e2f87aba7bd273ef8e6ffb532c8ea9c420bbe05346d7df122149aaddc930605bac9f610f5085337bcf3bbfc5cc991fb55f98fbc6\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100-preview.4.22252.9\",\n        \"version-display\": \"7.0.100-preview.4\",\n        \"runtime-version\": \"7.0.0-preview.4.22229.4\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.2 latest preview)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-arm.tar.gz\",\n            \"hash\": \"019fa229d7800bb2856aafb47fe66e8fb9854283b9bbb37534ef60491eb176b439fe08e1e61c4c4a8e94d58fffa829d388d186e7257507a213756fed763766a5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-arm64.tar.gz\",\n            \"hash\": \"a04fbd748c6694e71fb6f3f378a3ef8c8c014d5546e1285825e804e8e8a6677e6d75dd9c0c88f44df8e34ee55103bd1039f21caf294e23d916eb42cc202f469c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"ddbd6e39f7ab05026b19a480505809c79d7af799d97ef6ae6b4dc0204e64d015c12b6aba2adae43cd88ccade552401e8de5c6317c1f702b504845717fd6581f5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3cf0eedc0902c38ad77f2c0fbc895e310e1e3e2ed248203e3832407df85a7296d3d5568b26f177bc9ed239a3b0c8e3d20bbae59277a1e1f22c8a98e23b84c1a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"f2c70ba9fa914c7e3b2c4f1c0ee17a46e66c7b88265bca8cd4541aa886a670e5d8c6a9ab21197ef296e481cac2af99bcc2f72e9c74242852138a45ed1cf5baee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-x64.tar.gz\",\n            \"hash\": \"35bd0ed3f22ce9ba2fc9d79ad5e01f75b5c819ee8d5ee2e253e3e8dcfec510a284196afc510c682bab65d56481ee4c400ad86a4c7ef547c24c5188a21f205c90\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-osx-arm64.pkg\",\n            \"hash\": \"27ed8911f48e99dd73d4ffbe91036a3d412d35c2ba79c52a0e5a814f1748d42a112f9893e5f8ca30ca7924c2e997fbe8e39250ca637458c6b03c1df8cb941871\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-osx-arm64.tar.gz\",\n            \"hash\": \"216219b641804948423c68658feff01f6e07058524034b0ae6a1f9175fb63f60cf2f9e3e54d933087a5fbf0af1d0f71bf7075a956bd5388eba4e7afb3b902909\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-osx-x64.pkg\",\n            \"hash\": \"84339549d54b655fe87e2b60e3ef2a4db20842fc421da25f72578b2e8c30ea56863b0b6c029a42370d85aaf37cb37038a93fabc407434a69a09c6c8298e260e9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-osx-x64.tar.gz\",\n            \"hash\": \"36590fdda60d78cd94ceab865298d2efc2c5d0d97ac5c41bca72dafbfd0f6aa29b8b2d56b75d90d3007354efbeecc31790d2edaa65c00933baf13abadb1551b1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-arm64.exe\",\n            \"hash\": \"9f90683f61bbf6e96fc948f131ad2541c3d4f3fdc84e1833604afb7d637295e7e31bba1757350f5f0f9d7904483f66495b0719bf5df595ecad78cd032d4409a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-arm64.zip\",\n            \"hash\": \"97708de607771eddb314b058187100606306ccfb0f407b8441b6c84c0878c730bcf08f829c40042f8cfebf7c3f042f75bf352077ea5f24ff07e80d14b3abdb57\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-x64.exe\",\n            \"hash\": \"0ee6139a51b13f438256cbf52c6c70ea03930988606f480f8a3b0c9bf11e2fa12f4176b23b1b436547e43d6bb3ddd39d67a65ebef0dd30eb53905e7a00ba046f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-x64.zip\",\n            \"hash\": \"6063d0fca37ce0fcb397c4095189d554428f8cd5c6e58d6cde83959e805eb1f1d6af7619fb15518671d8147a1742eea666d5617913936f1422fa5df27fa14714\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-x86.exe\",\n            \"hash\": \"77e4e449387afbfa476ad3942313c4e3e19dbe26c6356c69b6e2bc72ad2c640d58be9dadecb8a9436342d2342a74ebd727b62de424c319b6be1a2547947aa541\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-x86.zip\",\n            \"hash\": \"6613f3d511dd1beae8db746c0a33ba78bbc9c36a60e24427727cc125a760c3a469a5591f54a37e89034bf8315fa144b93cccc50c9fab6f7d863a7265ab1f8ac0\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100-preview.4.22252.9\",\n          \"version-display\": \"7.0.100-preview.4\",\n          \"runtime-version\": \"7.0.0-preview.4.22229.4\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2 latest preview)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-arm.tar.gz\",\n              \"hash\": \"019fa229d7800bb2856aafb47fe66e8fb9854283b9bbb37534ef60491eb176b439fe08e1e61c4c4a8e94d58fffa829d388d186e7257507a213756fed763766a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-arm64.tar.gz\",\n              \"hash\": \"a04fbd748c6694e71fb6f3f378a3ef8c8c014d5546e1285825e804e8e8a6677e6d75dd9c0c88f44df8e34ee55103bd1039f21caf294e23d916eb42cc202f469c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-musl-arm.tar.gz\",\n              \"hash\": \"ddbd6e39f7ab05026b19a480505809c79d7af799d97ef6ae6b4dc0204e64d015c12b6aba2adae43cd88ccade552401e8de5c6317c1f702b504845717fd6581f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3cf0eedc0902c38ad77f2c0fbc895e310e1e3e2ed248203e3832407df85a7296d3d5568b26f177bc9ed239a3b0c8e3d20bbae59277a1e1f22c8a98e23b84c1a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-musl-x64.tar.gz\",\n              \"hash\": \"f2c70ba9fa914c7e3b2c4f1c0ee17a46e66c7b88265bca8cd4541aa886a670e5d8c6a9ab21197ef296e481cac2af99bcc2f72e9c74242852138a45ed1cf5baee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-linux-x64.tar.gz\",\n              \"hash\": \"35bd0ed3f22ce9ba2fc9d79ad5e01f75b5c819ee8d5ee2e253e3e8dcfec510a284196afc510c682bab65d56481ee4c400ad86a4c7ef547c24c5188a21f205c90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-osx-arm64.pkg\",\n              \"hash\": \"27ed8911f48e99dd73d4ffbe91036a3d412d35c2ba79c52a0e5a814f1748d42a112f9893e5f8ca30ca7924c2e997fbe8e39250ca637458c6b03c1df8cb941871\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-osx-arm64.tar.gz\",\n              \"hash\": \"216219b641804948423c68658feff01f6e07058524034b0ae6a1f9175fb63f60cf2f9e3e54d933087a5fbf0af1d0f71bf7075a956bd5388eba4e7afb3b902909\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-osx-x64.pkg\",\n              \"hash\": \"84339549d54b655fe87e2b60e3ef2a4db20842fc421da25f72578b2e8c30ea56863b0b6c029a42370d85aaf37cb37038a93fabc407434a69a09c6c8298e260e9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-osx-x64.tar.gz\",\n              \"hash\": \"36590fdda60d78cd94ceab865298d2efc2c5d0d97ac5c41bca72dafbfd0f6aa29b8b2d56b75d90d3007354efbeecc31790d2edaa65c00933baf13abadb1551b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-arm64.exe\",\n              \"hash\": \"9f90683f61bbf6e96fc948f131ad2541c3d4f3fdc84e1833604afb7d637295e7e31bba1757350f5f0f9d7904483f66495b0719bf5df595ecad78cd032d4409a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-arm64.zip\",\n              \"hash\": \"97708de607771eddb314b058187100606306ccfb0f407b8441b6c84c0878c730bcf08f829c40042f8cfebf7c3f042f75bf352077ea5f24ff07e80d14b3abdb57\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-x64.exe\",\n              \"hash\": \"0ee6139a51b13f438256cbf52c6c70ea03930988606f480f8a3b0c9bf11e2fa12f4176b23b1b436547e43d6bb3ddd39d67a65ebef0dd30eb53905e7a00ba046f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-x64.zip\",\n              \"hash\": \"6063d0fca37ce0fcb397c4095189d554428f8cd5c6e58d6cde83959e805eb1f1d6af7619fb15518671d8147a1742eea666d5617913936f1422fa5df27fa14714\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-x86.exe\",\n              \"hash\": \"77e4e449387afbfa476ad3942313c4e3e19dbe26c6356c69b6e2bc72ad2c640d58be9dadecb8a9436342d2342a74ebd727b62de424c319b6be1a2547947aa541\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.4.22252.9/dotnet-sdk-7.0.100-preview.4.22252.9-win-x86.zip\",\n              \"hash\": \"6613f3d511dd1beae8db746c0a33ba78bbc9c36a60e24427727cc125a760c3a469a5591f54a37e89034bf8315fa144b93cccc50c9fab6f7d863a7265ab1f8ac0\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0-preview.4.22251.1\",\n        \"version-display\": \"7.0.0-preview.4\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22121.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-linux-arm.tar.gz\",\n            \"hash\": \"7c9fea7315f425baa583038001c0ea7d451a64f8f708f1d115e254e8f5d3f71b02352505720906771e125b9beb6f688ee73377987a5a6f3023a4b46951203cec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-linux-arm64.tar.gz\",\n            \"hash\": \"c4c06c7fc7936bad76ef9fb514277692e8bbd7397f874e81784184041899ce3ad7d1c170f6638812ab149b289d91f62f480d655261e0ea917bff643c96da3a6f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"e6d10c20870e721cb1b34ef867aeb8cc954311b6d109d4278bf32cc53fa203e109ff8a49b66eaf3f05b4daeea2bbd26a70b1cf48e81a0cdde4474e5840dbaa93\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f1bc9d47a27e21a23d5cf6c737a01a2ea6485bbff2d2e3c427643f51423e05bf08fc1605dabcded5bd2c01ba044ccea2083e2bb0e966a9e946dae4499a926c17\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"0091895f2c80e7d9de0dd6fbbbf43f8529ea2d74fbbf4ad56fbc364f1444975e84b49830fe131ef922fb26e892fb4003b4fa0b0a709efd77133839235072909b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-linux-x64.tar.gz\",\n            \"hash\": \"09e9d7dd6c3fdee25706a7799c7007e3c3d5cbe84492a233ed979c24139cfb1a9e14bccb336fb463010be00fbc2276e3b69b08a07352d26a72cfdf4c4a33f64f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-osx-arm64.tar.gz\",\n            \"hash\": \"84f16b76f0a6e630e7ef6ca7dfe063acdb1686fda0540df790e11ceb63d44e9e18d47b117733a95c11b33583a4aa3d4cca08567ca953c1fd6594109e75603c04\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-osx-x64.tar.gz\",\n            \"hash\": \"7311a928831b5d403d690f9aaf33285fb2ccfa511c8ed3a115ce02e402fd26335565baeae90b0f8d8f33545b57b27825f6992c4f96e3785ddff750c414da8bfb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-win-arm64.zip\",\n            \"hash\": \"fc7f04e85341bfba59eb84af9d3e0883cf3598ef0699bf65766cd4b06af42a4a2e4951f17c90fe0ea6f138cec0508e6823e6837baafdfef664362f281b80e163\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-win-x64.exe\",\n            \"hash\": \"ba1b2fdcad619534c3dbc7383be5cadc08b9cd524bf011ee60a65e0ac3ebdced26d3fe9537053784c420a801b8d59e461b02c3e2ce87de50ede7fba140be2517\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-win-x64.zip\",\n            \"hash\": \"9ab282f5b2e5f05c0f29f7187911012be92d515946518ddbc3d431cf73a4dee64b5c2f3f654d1dccf9357a339262e142bab30996f2c6d50e08ec5fc901f7dfeb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-win-x86.exe\",\n            \"hash\": \"8d4d54f3ca36766c62f324d0daf23d9d75f94a6549bb0ac6cb2c00a7da395a2a13822eb981da766453a47ce1c8c3046a9bc57f2f56d5f6cbdd123c2160dbc817\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/aspnetcore-runtime-7.0.0-preview.4.22251.1-win-x86.zip\",\n            \"hash\": \"13fa242153fd84482a51de7c8cb877b8e31f41747dcefa6a198ec530ef66c2362b892a1c69df4c10ad2b9e7df89d1b46dde47e5f07a21085848294c5b9219d1e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.4.22251.1/dotnet-hosting-7.0.0-preview.4.22251.1-win.exe\",\n            \"hash\": \"5cfb1a65213393b84ca6e29f4c4869d86b5672adc18aaaa95cc957c65bfe3cde3f0448f36cbc74e6f945e107f436cabbfa180041c73c37e603a966898cac8048\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0-preview.4.22229.2\",\n        \"version-display\": \"7.0.0-preview.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.4.22229.2/windowsdesktop-runtime-7.0.0-preview.4.22229.2-win-arm64.exe\",\n            \"hash\": \"a52d47a9fd12587a56bf4d607660009a9253a68c7c783163979b6165379bf351eba1b9756b34a46d087cd573448d5c50e4e5b6f6381e3d5b1efcabbaa62368c5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.4.22229.2/windowsdesktop-runtime-7.0.0-preview.4.22229.2-win-arm64.zip\",\n            \"hash\": \"edf1e93061cfdb2f545ee42f22a68e37362257728b66e4cb00050d0e0c6c5fa23d50114ae6fced0024e15ff012f4321fa61fc1b371d2e099a65802cf36f8e9cc\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.4.22229.2/windowsdesktop-runtime-7.0.0-preview.4.22229.2-win-x64.exe\",\n            \"hash\": \"2342f75d856e8042653832d4f418561309e1609c7f23b4c0fd01d760e87f80d01d3aea5cefcfde7278729695734a1199bb8f837945c7bd07ad8d738c2f7b330c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.4.22229.2/windowsdesktop-runtime-7.0.0-preview.4.22229.2-win-x64.zip\",\n            \"hash\": \"5ae110efeaa13e66959d04bf48e6ea2b15c0f2eb80d19144f45c181cdb905ce5fd7707e9ba121defd07d76cf269e03f02c9fbd8516656dc8263f8141756ce98a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.4.22229.2/windowsdesktop-runtime-7.0.0-preview.4.22229.2-win-x86.exe\",\n            \"hash\": \"690f8ffa5ce237aadd28c08ababd08c56844f48e7d1a2cf824a42014fc36fb7f90676fa3368c8ea1466af9475a5b43d358df870c659ca9680614d5cc97b33d7b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.4.22229.2/windowsdesktop-runtime-7.0.0-preview.4.22229.2-win-x86.zip\",\n            \"hash\": \"43382f22ce6f9d08207cb09e6812b0e83eb5d9a06e61c11693951a878b0b585662e3c731f98cc1f2a8cb9c8fb9ff1e622514df05fe9eaf5c28de1a6d102fc347\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-04-13\",\n      \"release-version\": \"7.0.0-preview.3\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/preview/7.0.0-preview.3.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0-preview.3.22175.4\",\n        \"version-display\": \"7.0.0-preview.3\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-linux-arm.tar.gz\",\n            \"hash\": \"7ec4bdcbca48019880906bcec7e9568c8bf22bf47bfde0b6cba913d23558e792505d0c069a9a72e54a4eae1d9bdbae86d3ea9c8ac692d0f9a31c670845447e2e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-linux-arm64.tar.gz\",\n            \"hash\": \"bbb77d2e3d780cc67a02231b64b706811729a682864d335a2fbcb1995bfbfecd23947d0c5149b6ba3d0c848566a3443c79cd62c9fcc68459f19bcf1b2efb402f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"8fa0dd1ffc4ade2402e9e35b6be28de3c2cc5eaf504d62fdbeeebbc619a42d5aab9ea322d5757aa9a25e4330de5bfc118f0bc76e7d02cea07562d1d0157485d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2828b340ba85d056a6f58e0cba065c35d44f5d2a7749e1b4c5a966879c97db52de45f6c86f47a071009696412eb8f11af732bb688baed2b5a12ae4a454d686b3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"50103b1a4c72e457c2199209db0bcfd874b12be767f1ba5c6cc1322ba5ed42e6497f43011bc0027dc1624bdaea0e7dfb1946aeecd60cc9866b2d6e4ffba2f45b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-linux-x64.tar.gz\",\n            \"hash\": \"f4546f7cc56ff30b9b0f63d9430caa88123ce40cc13b3238b3602e75c4f648c1face2d63414f5da2e1abd13046c84f2ec0dfd6dc84d09c26d8cd1641c7a40030\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-osx-arm64.pkg\",\n            \"hash\": \"c5a57f8ebd6da2b2950dcdd6f2d215db3c2016d5f249d84fe5dd9f8ea098ca1b5b65c8684c6cad68fa56e0cd1929293f6570ee34cce260449f549249ebbb1bbc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-osx-arm64.tar.gz\",\n            \"hash\": \"42ed6277a7fc90810cd2b3c233a5664462198e618fe99c5509cc333c12f0d4ed79eda8e9317f9a304abddecb66d653249655e63f3d71237895428b8ec628baea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-osx-x64.pkg\",\n            \"hash\": \"f0cada6ba663bae0979de2cb66c6f0c92744e7cd79af58a0aa4eed633744f31b08d05733d02f69cd3025dd4e8ad31ce5053e382c2d03988cd61a0ac814002e0b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-osx-x64.tar.gz\",\n            \"hash\": \"b641a6c8484e9356aa0b987da42f0453063ffc2cd22b27a5da4ea24d66a01a1ccec3cce57aab73d837822ae39dfad905a9cff252ba8118a09ca054da54638212\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-win-arm64.exe\",\n            \"hash\": \"f9b28fb72e674c9636d954c8930db5e9d7ef349a9388eb59afcbfda39848625b6bf7650c34581b75810561e2116f36d38c314ea4f9d6ae48b86c6d1cc182f8c7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-win-arm64.zip\",\n            \"hash\": \"9ddaeb071150434af13294e2cb180364eaefa8cecfd31dfc43599e2ae2534f35918f4f2d4e63671737147e27f9da089d9723da708c6cf1fc8481a26021a037e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-win-x64.exe\",\n            \"hash\": \"eebb89158a3dbb26aac2ecce89aca8126b0ba3f29061014b5aa6b2652f0f2847f1857ad369ac24837e89cf07a66266cf4c8df35da035383bd0d644668a20db79\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-win-x64.zip\",\n            \"hash\": \"40991e008252c890c523432f87471f19e979f02b936cd1445401a0c157f82101ec61de128c7e05c515b58a32232c7d43f2074b63edd4372b72dd1f750564f5ec\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-win-x86.exe\",\n            \"hash\": \"91b8df8ea30ac0ba0ede4372dedbd162a1817219743c1a1e5970de6f8d882998345e794337fa1180c65a8ccf9ca1b706bd6ed20d2f3dc61b20fc5fba6498d97d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.3.22175.4/dotnet-runtime-7.0.0-preview.3.22175.4-win-x86.zip\",\n            \"hash\": \"f5914a97da27464c7682adf007ddad8f1f0eddc5e2d9d6c1718e90d4fa84223026e6126a485d76d2ea8a63cb9d976527d05309f926b43b90d9f07eb0b6103079\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100-preview.3.22179.4\",\n        \"version-display\": \"7.0.100-preview.3\",\n        \"runtime-version\": \"7.0.0-preview.3.22175.4\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.2 latest preview)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-arm.tar.gz\",\n            \"hash\": \"1fa8821cc96c7a1fbf64a7a5f9e29bf2c78e5aa2299029a02d121de6eb6c8dd9fc9235d91796e9a15703eb1db3aef698293324df1d9e77e37ef29fb044f22a76\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-arm64.tar.gz\",\n            \"hash\": \"ce8073860b35b4277fcf2efbade1329201716a96919f9246a36d71d9a0f3b2837b5827092546352157a9428b58f69599a6615f318a735ba288e2c8bca0dfdad4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"35147e1073eb298befb54e571c5af962aa31a218bda05735ccfa2b4d07b3d6a849d2859385a3793c2fc526f59ccadacc082e830eb7956c368c522132ec42f720\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"290bb2085c14b4aace30f34b079e9e48027cbbfa641dc504d634489fc57562b0c9e0a085cfd44076a4cc645097b15285acc91ec481e198f6490bd70e4b96a7d1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"1e6946857db27a38875601a8dbb4f7f4dcace0718583cb00cffe988dbd5098e3a7b5c23457d8ef8780a573ea13dc4f65bf67330c65beda61420d7b43217e61b4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-x64.tar.gz\",\n            \"hash\": \"ec4db3742fd9342d9f876ba3b5b15d71c2ef6e9ce57ea6f5a18c1753118b930797863cb19bb6661b5ab15fab097f8aa47294e60cf74cfbc2953d354c3e6f38cf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-osx-arm64.pkg\",\n            \"hash\": \"90183e118b6141d21fa0faf7a14ac3f3bee8239fe629b9b48876be43d12bdce80d3d8f8d54207041a9ebc05d0b436f4f72515f94934f6b52b377ffd4913dc184\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-osx-arm64.tar.gz\",\n            \"hash\": \"3c84fc4450e40a8c787c763a93ba4ea68340ff4196850b7d693afc1f955e45a6dc16adb08d7edc1fb0ad70994bf6c0cd00aa74dcd98ed62f161aa79e67666f91\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-osx-x64.pkg\",\n            \"hash\": \"5fed6250cb308caaae214391bc29db6bc7dd70c5f45db31b5e8433cdc221107664b990671dedebfc5f477954b9b35f242eb0f2394475912dfb988a741a25a5ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-osx-x64.tar.gz\",\n            \"hash\": \"ff780e0da4c5926f273de2f2d13f3342eb3ea98a824147fd003caddd00afa551f78b83a088df460ebf9a476962ac37afe21ea3b88b258d04a2a2ba01a26a19e2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-arm64.exe\",\n            \"hash\": \"7ca38f828e3c405b5b0efb59531e4c6be4674dbb2b5a4e95f114f275ef12b432350758eecd825540154da716d9256fe7ca109d4fe7157941ed9c93291d176334\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-arm64.zip\",\n            \"hash\": \"b28e2fee0f0227f2d506e32f73309ba89b20afedf58a866ef58162934bd5ddf1f6a892d262ce20f8d0ccf3383931fec061eff51fec6521ddf882290b866b4858\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-x64.exe\",\n            \"hash\": \"508b38dc317581b9e48a0e3946a5d6abd0a00a6b17aa45ac3eb6114d3772fb3e36988c01a16158da490632725f6040f9e27ecf1976dfaa84e422f7c301f1e696\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-x64.zip\",\n            \"hash\": \"7c73e80a358e4a027ab9450d94edaf74d4f3650b7b74fbb5612e6a66645cdff23da406c791d3e4ce954b5d50ead4681a322bb20a6041268f3e05850e4e7c07c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-x86.exe\",\n            \"hash\": \"2e79653c6605fe707dd378be7905fcdaaae6c258e2078c4b7a28f259e25770bfb8dec982889b8b86f6961ec643e8282fde3bb47f6b068994db32a752ad8d9bce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-x86.zip\",\n            \"hash\": \"52bb85cddd60756df97b86877d855dd39860b05e47570c34466d3fee717773f2ab43fc06b3a7f394082fcad52e06c19b4aa5e1a1e3f4af06978691b867d999aa\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100-preview.3.22179.4\",\n          \"version-display\": \"7.0.100-preview.3\",\n          \"runtime-version\": \"7.0.0-preview.3.22175.4\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2 latest preview)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-arm.tar.gz\",\n              \"hash\": \"1fa8821cc96c7a1fbf64a7a5f9e29bf2c78e5aa2299029a02d121de6eb6c8dd9fc9235d91796e9a15703eb1db3aef698293324df1d9e77e37ef29fb044f22a76\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-arm64.tar.gz\",\n              \"hash\": \"ce8073860b35b4277fcf2efbade1329201716a96919f9246a36d71d9a0f3b2837b5827092546352157a9428b58f69599a6615f318a735ba288e2c8bca0dfdad4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-musl-arm.tar.gz\",\n              \"hash\": \"35147e1073eb298befb54e571c5af962aa31a218bda05735ccfa2b4d07b3d6a849d2859385a3793c2fc526f59ccadacc082e830eb7956c368c522132ec42f720\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-musl-arm64.tar.gz\",\n              \"hash\": \"290bb2085c14b4aace30f34b079e9e48027cbbfa641dc504d634489fc57562b0c9e0a085cfd44076a4cc645097b15285acc91ec481e198f6490bd70e4b96a7d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-musl-x64.tar.gz\",\n              \"hash\": \"1e6946857db27a38875601a8dbb4f7f4dcace0718583cb00cffe988dbd5098e3a7b5c23457d8ef8780a573ea13dc4f65bf67330c65beda61420d7b43217e61b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-linux-x64.tar.gz\",\n              \"hash\": \"ec4db3742fd9342d9f876ba3b5b15d71c2ef6e9ce57ea6f5a18c1753118b930797863cb19bb6661b5ab15fab097f8aa47294e60cf74cfbc2953d354c3e6f38cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-osx-arm64.pkg\",\n              \"hash\": \"90183e118b6141d21fa0faf7a14ac3f3bee8239fe629b9b48876be43d12bdce80d3d8f8d54207041a9ebc05d0b436f4f72515f94934f6b52b377ffd4913dc184\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-osx-arm64.tar.gz\",\n              \"hash\": \"3c84fc4450e40a8c787c763a93ba4ea68340ff4196850b7d693afc1f955e45a6dc16adb08d7edc1fb0ad70994bf6c0cd00aa74dcd98ed62f161aa79e67666f91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-osx-x64.pkg\",\n              \"hash\": \"5fed6250cb308caaae214391bc29db6bc7dd70c5f45db31b5e8433cdc221107664b990671dedebfc5f477954b9b35f242eb0f2394475912dfb988a741a25a5ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-osx-x64.tar.gz\",\n              \"hash\": \"ff780e0da4c5926f273de2f2d13f3342eb3ea98a824147fd003caddd00afa551f78b83a088df460ebf9a476962ac37afe21ea3b88b258d04a2a2ba01a26a19e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-arm64.exe\",\n              \"hash\": \"7ca38f828e3c405b5b0efb59531e4c6be4674dbb2b5a4e95f114f275ef12b432350758eecd825540154da716d9256fe7ca109d4fe7157941ed9c93291d176334\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-arm64.zip\",\n              \"hash\": \"b28e2fee0f0227f2d506e32f73309ba89b20afedf58a866ef58162934bd5ddf1f6a892d262ce20f8d0ccf3383931fec061eff51fec6521ddf882290b866b4858\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-x64.exe\",\n              \"hash\": \"508b38dc317581b9e48a0e3946a5d6abd0a00a6b17aa45ac3eb6114d3772fb3e36988c01a16158da490632725f6040f9e27ecf1976dfaa84e422f7c301f1e696\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-x64.zip\",\n              \"hash\": \"7c73e80a358e4a027ab9450d94edaf74d4f3650b7b74fbb5612e6a66645cdff23da406c791d3e4ce954b5d50ead4681a322bb20a6041268f3e05850e4e7c07c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-x86.exe\",\n              \"hash\": \"2e79653c6605fe707dd378be7905fcdaaae6c258e2078c4b7a28f259e25770bfb8dec982889b8b86f6961ec643e8282fde3bb47f6b068994db32a752ad8d9bce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.3.22179.4/dotnet-sdk-7.0.100-preview.3.22179.4-win-x86.zip\",\n              \"hash\": \"52bb85cddd60756df97b86877d855dd39860b05e47570c34466d3fee717773f2ab43fc06b3a7f394082fcad52e06c19b4aa5e1a1e3f4af06978691b867d999aa\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0-preview.3.22178.4\",\n        \"version-display\": \"7.0.0-preview.3\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22087.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-linux-arm.tar.gz\",\n            \"hash\": \"83889bd3dedebf3b5c058a12e9c8d542dff00bdf9364d8e4127817ad171573783d370e595dc969bbabe75cb75558f07b3c4692cc57aa8fe1f06a289418e5b359\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-linux-arm64.tar.gz\",\n            \"hash\": \"be6af7b0d591dc77bc479f315a96bfbeab3dc86edc7ff7227d7da5268bde0820f7fca11e7085c50851040330eced245af5cb23cf77057a996b7cc25e489e7a8a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"7fd9677570d60e86e506f33d1532a01afdb561e8b82d7c9b5572b17d5463b8eaf0004ccd5ac723365d861e2082027ef18bc5d7f186e50c6ce76c1909237d4221\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dc2fa82d013ec2c7894bacadd1858f362aa26f1a6a08f97c7b16002a75a781c7ccb40a3f7fa5e5754718cd44cefb233de53d7591ef85d6a9e75bf0871e19e228\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"766915fa5ea28d80f3d47df8a89dab0a8c83af2e2d2f268a51a62398aaa494f2085da7ba2adbef9bc09c11123d741ce03315b08d63914fa3fe3eea3ebe3c66c7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-linux-x64.tar.gz\",\n            \"hash\": \"718799d77533e5e486e10ed2f61b05bb81414230402ecb9188be57969a4e3924913661262f9f69b19872f7317125edf8a5b955aa85ff23f078cf55c6f8b496ed\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-osx-arm64.tar.gz\",\n            \"hash\": \"25dcfd7142cf88e503285ace24a78e21f24a2d8ac4a633c61e4dcdf92da083a522908e6d931de7e05b17ff72a9eaa629494549bd8dcfa43cf65149f0c2e7ab44\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-osx-x64.tar.gz\",\n            \"hash\": \"8fad23ff1e212f7e58cc62b2d44ff0fead60d6f24b8e22ac41e2a52c1410529f118f696f1aa9576c4d97579733819d939c2cbb89c8c2f76a9b65fbbb84e88ddd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-win-arm64.zip\",\n            \"hash\": \"acbedb88be6a7664c7b2853ee4f10e813abc05afaf4411a3c5ad9d8d935540e100b07b75e142beb046ebbc05de2fdb839d3a3e5d42947ee3c5134b9bf3d2a918\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-win-x64.exe\",\n            \"hash\": \"647d373eb97883aff3e6ec4988668d991ffbe6b96578a21f011f85906672f6f802c57142061708714df791664352295f559153224eba945afe501aedaf685316\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-win-x64.zip\",\n            \"hash\": \"f126538ed56f2ee5e551e44ed7c745c14182ce8445d73288861a7ba48650d129f9f315c126e207b027f4517ad55e49c4a283ac918dbc819e2fab8bfdea6202f0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-win-x86.exe\",\n            \"hash\": \"ad979f844d6409087cf04cdf8e61f170e865e988041e9b85cbf36fa4cceed18c2332d25155caf2513ef623fb1149624261e9501eef05cb017851f28c73dcdd3e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/aspnetcore-runtime-7.0.0-preview.3.22178.4-win-x86.zip\",\n            \"hash\": \"20717ed6626c23b4ac43766b96ada8d0c10c84e97ef0e6619790a33b7c3de4afc7bcfd607f3d2c942064c48416a9ff89fe79e2b5488ff7f7abe6c525a4f077ce\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.3.22178.4/dotnet-hosting-7.0.0-preview.3.22178.4-win.exe\",\n            \"hash\": \"8d622146823cbc9c44a694aa3874daebd486b31afc5504b0f92c4cc66ee664e6a47906cc6afe95ef71e06807ae1436aef785af127e7a2c51cc6450f74b4a30d0\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0-preview.3.22177.1\",\n        \"version-display\": \"7.0.0-preview.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.3.22177.1/windowsdesktop-runtime-7.0.0-preview.3.22177.1-win-arm64.exe\",\n            \"hash\": \"6f516833c6c4d8d19c1d7a87cab5081116f4e845d44c054cefa998986b3c9a73e9deb7f8d4744b5398f1c46d082e04b75af4e56d77b5e1469a63940a843c9597\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.3.22177.1/windowsdesktop-runtime-7.0.0-preview.3.22177.1-win-arm64.zip\",\n            \"hash\": \"689b37df5c7dab46b1ea33ef38404279f2005a7cc077601d4b80e242961c23c34f1da9143a8d1dcf6c7f757ace0270d051c3bc4a6bb761330f33b5703296e8f2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.3.22177.1/windowsdesktop-runtime-7.0.0-preview.3.22177.1-win-x64.exe\",\n            \"hash\": \"6afe0acb6691d39d82bebf11e0a5d298cb9079fc8655ab71bbf6069f42d60f30e99946d556bac4170dfd4e0346eddbb44d9c2b25999b9fbeaacae46f2c3afa0d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.3.22177.1/windowsdesktop-runtime-7.0.0-preview.3.22177.1-win-x64.zip\",\n            \"hash\": \"fb9fae5314bce8502321c9629c9f087c6a7e5455197667131d5148c0a90694af88a30202ba517466c0009c0b7e2b7674314839d973b5122c5db0e664c01fcfec\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.3.22177.1/windowsdesktop-runtime-7.0.0-preview.3.22177.1-win-x86.exe\",\n            \"hash\": \"ff894420a3666206334f9b8284a8e64420e0cc030a705ba3b061a30dd111b6ce12f6e6eb7ba6cf84e3a16814bd6bff8a24eeb5151514dc80b70fc9a99adf1eb7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.3.22177.1/windowsdesktop-runtime-7.0.0-preview.3.22177.1-win-x86.zip\",\n            \"hash\": \"7a9c487e845513129a4fb35799d68c8cb90f989007f71513dcfe6085dcf246684da1c6bfd71ec8eb974f721ee0076182284b298eda5f7d529d3aa420f9066a4d\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-03-15\",\n      \"release-version\": \"7.0.0-preview.2\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/preview/7.0.0-preview.2.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0-preview.2.22152.2\",\n        \"version-display\": \"7.0.0-preview.2\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-linux-arm.tar.gz\",\n            \"hash\": \"5c24f63816516c22930512a7d92ac2eac4a96b6f93e8987e5c77017eb0fe5dee560debb3ce9192e553510099e5b879260e3c238d7508a72eae39b8eeacc4684e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-linux-arm64.tar.gz\",\n            \"hash\": \"61eafd2a578c54797c28b466fbd9984e6c2f36b0358d36c1a1c2357aa05cd49d8a8f0f3019369f5277f4fab9c89eba48bf95c80eafcc63ef356e3b7dfb47713c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"84a7618018fdc538e8d1d36ea0e9996beff93f5cdfcd6c2b902f3d7598723a6a25e64ad0a36c9367696f161fdf5fd93fe16e389d6416ba9811132373dc495f1f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4e064f48b52580f0e870281c9119d5f655d133ca8ae64bf3a0f06ccc644fb8cd531236f49ee5ae8e1316660c9df253a686412c86ede9d386c838cf6131b87d23\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"0020af8b0aa18099d3f7ea1ea9d989bbf51f66fe269625701681cb57e46f6e0c2aa61388606b8150e521142f516df50f4ee4f15dc9c73237007fa4e77552b96e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-linux-x64.tar.gz\",\n            \"hash\": \"31240cbaa948dbfa53b1b35f2971cbd0192273e866c5ea4b31646b2a3cac50aa4dbf5d6ac9a6ceff4d928b995c298e445c2f2e948102c0a1888713fb77ef4938\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-osx-arm64.pkg\",\n            \"hash\": \"a62255f67f3b7338be3d407b3704b791bbede4c49497f6f696c48f3d530aed24419b86b01b12e3c227fb1919c9853b5c5eda512ce92521641d1964e1e8a12594\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-osx-arm64.tar.gz\",\n            \"hash\": \"75758fdf22f1fb65d9a3022fca333750bdac4a32252fac873e9eb5836f040c7c1a1c01b191b6d31b6089a6b60a0bdf628f48173aafda700dd5751bfdcc335cbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-osx-x64.pkg\",\n            \"hash\": \"a0a7e2599d37ea77dde76523ba18f17a3b6ae77dbc780f174a7d4f5f2b5fc20d0ae9567cbd3a3f5db9393bdef986cec30b1a065aa35cd90d34697c2b7031750d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-osx-x64.tar.gz\",\n            \"hash\": \"74cf4b54891c61c4f0a53ba8fe5fd48def5be664feb84efe0cb0ffce5b7d76d3b3b94f24309d9aa0843b32b7c2dcae88835f8e04a52329ad0df62c587b0f800a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-win-arm64.exe\",\n            \"hash\": \"3aef27e905247442a9fb3a308f5204c23b76033af6bb11dbcbdd6e86528de5e01ee2e1bd6cd20d0e49d5e61c903e33125ef51121dc74fc70faac2a511a242700\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-win-arm64.zip\",\n            \"hash\": \"2533679c76583caf74742b704a9851657359233ae491ec389fefee7b2dd37d8b279a2a5bd2051e86eb6ad37df26019f7883db123d509a2713c2260e521141f76\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-win-x64.exe\",\n            \"hash\": \"8b1e4bc5c1229f02242537425b23068c22b958b74df1cc62691aabae4e5118c6f41508946c11bfa997b1cff998d200569db4158291b642b2967c790598c4a619\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-win-x64.zip\",\n            \"hash\": \"bbd8c05cca3072664ac3921f1f96d01793dc8baadeeac826949a9b285268e0eba0951968b264368ab9a34a2922a02ff2ba6162209c30df673782413d40420a78\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-win-x86.exe\",\n            \"hash\": \"30aa930f20e48cf174b563bceaca5d23e2c6035827fdcff235c634707eaa67b99effb4a9d2d1c355274a965e4a5add0a7ebee88709497fc9e526c17b6af6f664\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.2.22152.2/dotnet-runtime-7.0.0-preview.2.22152.2-win-x86.zip\",\n            \"hash\": \"460d1b5aa9b1d0a0b0e053554d1cada1c32865435ae3de7a5e2ed9b9468021cfcadecd06eb133d07ed81c23b2c8734a01bdde1e20c7f287eb68f7fb4f1f73dc8\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100-preview.2.22153.17\",\n        \"version-display\": \"7.0.100-preview.2\",\n        \"runtime-version\": \"7.0.0-preview.2.22152.2\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.2 latest preview)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-arm.tar.gz\",\n            \"hash\": \"cc95d32002661af468d17493c96362f781402f7508e5ce6b3616086512d04ee327942215b50ab1ae10eea7d9d40e805ced15d17b00ed436d07159f8a04ac873c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-arm64.tar.gz\",\n            \"hash\": \"049534f71b98e1673b8534bf88e9900e396b9c28ed155874df6ce6b8bd9d6c720f567a1dc5b95097bcf629331db14fad1cb35635459c5c9a82c737a69e99fbee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-musl-arm.tar.gz\",\n            \"hash\": \"0b043cc5b995856116fa51d294cf10474ea8ccf30bbd21f66d41423b5667dbbcab4aa1bcb2c6b3890c39d2bed6c77c2274f70f4e91524aa4874b09b8a2fd666e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a7b2a444840ae4a52bb36a76cbcf284fa27250c98628203601ff1a523bc54e440932d8da39036bcd94114553f644b22115120975c2a496e6e27ca4062f270ed6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-musl-x64.tar.gz\",\n            \"hash\": \"ff38288921b1a8ef7c48c7c31035b91004529d9c9a746485eb0a9677849430d7f795e5230033a17a72679090833a40784ab694fe749e47fddf8a79e30f0d4ef9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-x64.tar.gz\",\n            \"hash\": \"279521b1677ed1832878a0318e928b68bb9aa6d578e0e6e69b5c5da6aa8999f0a60ec4c33d622db1c941f926cfdcdc227f413622d69ea28d5f9d6ec8681f7bc3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-osx-arm64.pkg\",\n            \"hash\": \"b17117c068e2f9d66120dc0133c3674284f71dc04622c0774c3a231e7abce4af8e0523c7d0e5e7940319457e336af10be08c2440e38573fdd51232a01e7b7677\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-osx-arm64.tar.gz\",\n            \"hash\": \"cb37a63721c26e250f498c6c71a68706c38c43f2f9274b822d7b2f41c5fd44eda83af4a498e627cdbc0f9e68e918266ad3fbcb1c2b75669fb27c9b9164eb2d09\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-osx-x64.pkg\",\n            \"hash\": \"5399006d9d25789cde5fb75ab974cb3d832e7c6a1d451911cb57eed8e6cdf825f35c667a733766137d4292753af804dba360100b865391d81e9988e491e4b82e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-osx-x64.tar.gz\",\n            \"hash\": \"0175c0ee1f30eb18d206ac834e20c9fac64eb30fd3c1c12ac0d66e89575b2a5fc5bb5820e55bc70824105ca7b36923916c69b548443ffa8fba5308806b335199\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-arm64.exe\",\n            \"hash\": \"8f6da29b7dac521a503541258259e1c393579b8f9f629e4b040e48aea30549cbfa186a068fda1563b3216099cacce2970091ef54f03f3520c67194b89ce4e051\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-arm64.zip\",\n            \"hash\": \"4c55a53d63a5f624f9a1330163d36697b343de3f8175cab1155478952ac78d2773c95109881b6f8f4ba41935d71b8c723c7171d8dafdce556709b3e28667a2d4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-x64.exe\",\n            \"hash\": \"4acd6d094f801981d788277705fb89393031fe50c2bc8c4586d557f17a421403921bbba0274cb922fc4ae09c187ef606a7cca646f813240d89f7f29ac65783e6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-x64.zip\",\n            \"hash\": \"7e604a040f1629394a2d02cda532afdb6e13d96c0758e119b7ddbab9c53cc6ce73a4fffcbaed2228256a1dfe0b0797bceb2d9fc5b5d3a454493435ce5af9cf14\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-x86.exe\",\n            \"hash\": \"c785761f75166a6e069969d18d710e6cd6aeb19280f73d1ca17b0b305b33dbb27755f551ead41e750d432744bfafb6201fa71db6e1ddb807e433b7dff8e9865f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-x86.zip\",\n            \"hash\": \"6a0a2dffeb4de4176c0b16318ea081ef41d9fb3f2f7a8f1b46d2b5bfe0e06bd2100e85941a54822a1f034c18ecd97b972b74dd026ce302c3ac8b2dc46fc559be\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100-preview.2.22153.17\",\n          \"version-display\": \"7.0.100-preview.2\",\n          \"runtime-version\": \"7.0.0-preview.2.22152.2\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2 latest preview)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-arm.tar.gz\",\n              \"hash\": \"cc95d32002661af468d17493c96362f781402f7508e5ce6b3616086512d04ee327942215b50ab1ae10eea7d9d40e805ced15d17b00ed436d07159f8a04ac873c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-arm64.tar.gz\",\n              \"hash\": \"049534f71b98e1673b8534bf88e9900e396b9c28ed155874df6ce6b8bd9d6c720f567a1dc5b95097bcf629331db14fad1cb35635459c5c9a82c737a69e99fbee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-musl-arm.tar.gz\",\n              \"hash\": \"0b043cc5b995856116fa51d294cf10474ea8ccf30bbd21f66d41423b5667dbbcab4aa1bcb2c6b3890c39d2bed6c77c2274f70f4e91524aa4874b09b8a2fd666e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-musl-arm64.tar.gz\",\n              \"hash\": \"a7b2a444840ae4a52bb36a76cbcf284fa27250c98628203601ff1a523bc54e440932d8da39036bcd94114553f644b22115120975c2a496e6e27ca4062f270ed6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-musl-x64.tar.gz\",\n              \"hash\": \"ff38288921b1a8ef7c48c7c31035b91004529d9c9a746485eb0a9677849430d7f795e5230033a17a72679090833a40784ab694fe749e47fddf8a79e30f0d4ef9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-linux-x64.tar.gz\",\n              \"hash\": \"279521b1677ed1832878a0318e928b68bb9aa6d578e0e6e69b5c5da6aa8999f0a60ec4c33d622db1c941f926cfdcdc227f413622d69ea28d5f9d6ec8681f7bc3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-osx-arm64.pkg\",\n              \"hash\": \"b17117c068e2f9d66120dc0133c3674284f71dc04622c0774c3a231e7abce4af8e0523c7d0e5e7940319457e336af10be08c2440e38573fdd51232a01e7b7677\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-osx-arm64.tar.gz\",\n              \"hash\": \"cb37a63721c26e250f498c6c71a68706c38c43f2f9274b822d7b2f41c5fd44eda83af4a498e627cdbc0f9e68e918266ad3fbcb1c2b75669fb27c9b9164eb2d09\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-osx-x64.pkg\",\n              \"hash\": \"5399006d9d25789cde5fb75ab974cb3d832e7c6a1d451911cb57eed8e6cdf825f35c667a733766137d4292753af804dba360100b865391d81e9988e491e4b82e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-osx-x64.tar.gz\",\n              \"hash\": \"0175c0ee1f30eb18d206ac834e20c9fac64eb30fd3c1c12ac0d66e89575b2a5fc5bb5820e55bc70824105ca7b36923916c69b548443ffa8fba5308806b335199\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-arm64.exe\",\n              \"hash\": \"8f6da29b7dac521a503541258259e1c393579b8f9f629e4b040e48aea30549cbfa186a068fda1563b3216099cacce2970091ef54f03f3520c67194b89ce4e051\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-arm64.zip\",\n              \"hash\": \"4c55a53d63a5f624f9a1330163d36697b343de3f8175cab1155478952ac78d2773c95109881b6f8f4ba41935d71b8c723c7171d8dafdce556709b3e28667a2d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-x64.exe\",\n              \"hash\": \"4acd6d094f801981d788277705fb89393031fe50c2bc8c4586d557f17a421403921bbba0274cb922fc4ae09c187ef606a7cca646f813240d89f7f29ac65783e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-x64.zip\",\n              \"hash\": \"7e604a040f1629394a2d02cda532afdb6e13d96c0758e119b7ddbab9c53cc6ce73a4fffcbaed2228256a1dfe0b0797bceb2d9fc5b5d3a454493435ce5af9cf14\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-x86.exe\",\n              \"hash\": \"c785761f75166a6e069969d18d710e6cd6aeb19280f73d1ca17b0b305b33dbb27755f551ead41e750d432744bfafb6201fa71db6e1ddb807e433b7dff8e9865f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.2.22153.17/dotnet-sdk-7.0.100-preview.2.22153.17-win-x86.zip\",\n              \"hash\": \"6a0a2dffeb4de4176c0b16318ea081ef41d9fb3f2f7a8f1b46d2b5bfe0e06bd2100e85941a54822a1f034c18ecd97b972b74dd026ce302c3ac8b2dc46fc559be\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0-preview.2.22153.2\",\n        \"version-display\": \"7.0.0-preview.2\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22062.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-linux-arm.tar.gz\",\n            \"hash\": \"e5631113fa2531825200e7270cbff6ca4b1678eb82056cf6b31479114599b59ed2ed2c47986fefaf9e056f767e14bc5fd4b5c01373ced7f40be3ab63dd0c48aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-linux-arm64.tar.gz\",\n            \"hash\": \"884c66cc2fa5097aaed7fae6595b96a6c66f0f5e3fedc0074dee123182bb7c62f0a04d2df20a68252b4e3d35b4b82e5e3e70b35c92a7a582c1cc69eb88231d63\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"ff26e2c96e3357d37077f70eb1f03816621eda4ddb13e59930c382a0e023bed144272a53a5fc6b586e5db7f069c6f73b8d1e3d0cdf911ab7707329ca136ec7cc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ac98b8025125dc23545544c2ea91a887c049cb334e5855c47c4cc76c7ca5438b895124dc20ec80df7414e4d9987105d0e3815365b85a3ea0ea108e66ad3fa458\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"4d7e8c4d92c1c742eadfd9f830e9a3af00a5dc5e9becc2aff3364b86ce2770042899135ee08e593c907521ff3dfe860b37eceff3a6c3a753ed79358672fa9a8a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-linux-x64.tar.gz\",\n            \"hash\": \"b5c713de49282b383e0c69d4f02a59a34db32982a576945cbfdb327cf18076ca0a67e970a36d0cd3e9de6f895b8d0d92cf7687af94fc58ac952fd1df91e44554\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-osx-arm64.tar.gz\",\n            \"hash\": \"1cbf11b8776f6856cf63f0739de231674f592812d54b8588f0f42a46f28bf4136dcdf80ba1f41612b37aa24ae8f2bf23307f22967308a64cfa741475c080763b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-osx-x64.tar.gz\",\n            \"hash\": \"806fb11a03c7c59d99f55705479d8c12f007a770e092ce3070e9c9b066169edc0ae742847ba7f996f330b481fd5c03f3a3cb955be33f7485fc28f68284340f48\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-win-arm64.zip\",\n            \"hash\": \"d88c6507370de62e940906a87a92ad792be3ed698db9af70e409ddfcfb2993b8af1181dc944d313a95924c57ac8d3e02b1a970d69fc3ca922191fc32370de118\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-win-x64.exe\",\n            \"hash\": \"8c1148cf34ccb75bb0b37057f1ce8ae49379be5387acf50e4e7b49aeeeef519497252dfcf0b0985089f6b0e623d6f21f577662d271c1eaf2d30fd388c03cb402\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-win-x64.zip\",\n            \"hash\": \"7f720e796573e4d5c14ba3491663364b98a61eab6691c4cc19c1492a16814e1ba23d6a702fd69837b591c051c5c94db1dfeeec13adf73688daa5b2421ef8188e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-win-x86.exe\",\n            \"hash\": \"c23bed8e89e87c1c632c46b0450a44f21b0999328adfbec18c23d9f722e0eb5bda25906664462d48280eb25bde94fd3d1f5f2dfbafdd19a83e428035d9df797c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/aspnetcore-runtime-7.0.0-preview.2.22153.2-win-x86.zip\",\n            \"hash\": \"84e21292421201a7a5c096ed48fcb82f892009e176db2095375495d8c87c1c8b9370598a7514f857108b946624a59962847e14c88522c868e38e1fc656f33ddd\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.2.22153.2/dotnet-hosting-7.0.0-preview.2.22153.2-win.exe\",\n            \"hash\": \"ac4de8f001c5405261ba7ace6b6aed58d1057aee0c5ce497ab1057328edfb0f651e64bf32ea1d4d2822544aba749cab9d3a4adaed741626dbe8dcd5b7b7abc1f\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0-preview.2.22153.5\",\n        \"version-display\": \"7.0.0-preview.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.2.22153.5/windowsdesktop-runtime-7.0.0-preview.2.22153.5-win-arm64.exe\",\n            \"hash\": \"6f54cb7b542f73a60ddd5b859be68b55ec2561e326b435a2264bf88011f48f7409eaa0966d54de10141e43156788a450c8bd8e8bff387d6a94fe9dd1713b23d3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.2.22153.5/windowsdesktop-runtime-7.0.0-preview.2.22153.5-win-arm64.zip\",\n            \"hash\": \"977c23b44fe72a5404681208efa5a88b26ae2043242a47b658dc686eff5af33274b34b91ec6e0568586ad66f59e48e1e1aedb5c8b8dceb9ab99ccb688051c7eb\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.2.22153.5/windowsdesktop-runtime-7.0.0-preview.2.22153.5-win-x64.exe\",\n            \"hash\": \"038815bae5d9133f00efaa9716f9a3409be6383f548721723f4e6dedc787efa9a1dc77b4a0eb67e13f3d578f82edae22563a5b634eb8f3691e1ed9034b3d12b1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.2.22153.5/windowsdesktop-runtime-7.0.0-preview.2.22153.5-win-x64.zip\",\n            \"hash\": \"dd6823d1e5a476de34d9e0125937f8c394b04e896e4fb0c2d4adc16670ed6d27baf849e092df17ff02eeb7a5c4654777d2847eaa88913c9c4194bd178acae426\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.2.22153.5/windowsdesktop-runtime-7.0.0-preview.2.22153.5-win-x86.exe\",\n            \"hash\": \"64c2b6283f6d707f7264013f212a4f946fd2c809a86fd22ea1809b49fac34aacbf497577c613cb1570b8526e8ab80fd8771f9ef0cd80457899fcfa68c9221fff\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.2.22153.5/windowsdesktop-runtime-7.0.0-preview.2.22153.5-win-x86.zip\",\n            \"hash\": \"4d2ba3d8fcfe2dd29f753276075dc990b49230e0d26d5587470226cdf5049ec848d4f4a65d4e5d2e51f4f3c9ff338623df0e4dbc244aa1f2c27fb96900f8b874\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2022-02-17\",\n      \"release-version\": \"7.0.0-preview.1\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/7.0/preview/7.0.0-preview.1.md\",\n      \"runtime\": {\n        \"version\": \"7.0.0-preview.1.22076.8\",\n        \"version-display\": \"7.0.0-preview.1\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-linux-arm.tar.gz\",\n            \"hash\": \"90bec2461459694b0d6e430066171ae40669690920f2db2542f4c0dba51465a1e402dea21c24c0917626666e0e4d41512ab4f9cc157c30f42c7f8d1b8b4962cf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-linux-arm64.tar.gz\",\n            \"hash\": \"0675ac88a45cd102287094b90df0b60e2b5c0b56bc4518658ef60dd87a0868950043ad5b4824022b54f89adfd5e7c63d77a1cca98ee1c871cdef2d6ecb8130d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"db3a841fcebe667144a62c3e15347da2ab826e908fa5da7c693371645900df2a533af7bc36e6792466c65556938827baaa16a570988848fad06ae3aba5245f56\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"642bee46020fc51b4710d542570cae2facbecddcd7ed36919ee11cd419fd1a933bbf489870594182ff40ed6fc273d6ee8721f40f4ab8ca447e21909e902b6f99\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"74cdf90223f293adc5fc884910be9f8c26f8d476269df5d86ad022c6449a9376f3bf2a8c251ddd3bda7f11a8be1ae6a0876e988ed445e0baeeaff8d4e9456948\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-linux-x64.tar.gz\",\n            \"hash\": \"8d48436646071c371b862002fcdd24de07addd02ec878ab413cc6c98a5ff6da821f2175c637167462261ad5e47da0d2b83f465949e673462f0e147d62255651c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-osx-arm64.pkg\",\n            \"hash\": \"7b859147aeb660ab44d046176ea987ed1fa73bef5c0157c8d9b9e092d32e8d51781df8ab8ac8386191cf0569d161e3c91fc85523076d695042bc513c108c0f7c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-osx-arm64.tar.gz\",\n            \"hash\": \"a7bff58263ed56f714848e883453b41b8106c7bd219bedaed2de539dc18f8d29e539259cd7bfa94c24db96e405a1e27bffc9bc062b04fd910d471f72f8b5d196\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-osx-x64.pkg\",\n            \"hash\": \"7b6b691a16af60674caf888e86a44b66d02f4846fd85f77285383009199dd499a4dfa41823a4283b04addc7054907c6af4c20afd0a8fde7baddf627f80b0108a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-osx-x64.tar.gz\",\n            \"hash\": \"df8bdb0e403d895fe97d595496428508af0890ae6aa1ff098f9e5805346d96bc9aa34ce423f46c2ad2203894db7e7ead40b625ba7d370333c54b36c2056e420b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-win-arm64.exe\",\n            \"hash\": \"60e43ac59e59ddfd4f9081534153d076664eb6258e038312bd9e998bddf51ee16628f86c0f32ae0775340ed82831a80b6e1cea8b5e874cc8b560fdd594236ddf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-win-arm64.zip\",\n            \"hash\": \"2a2949505230699e5299df9de3f56a888297b4db55127788bcd6137d4a6649b837dd5abb26592a8c82e92b6ef84b60b62d5b8c4c1386af0131968cf96cf8998b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-win-x64.exe\",\n            \"hash\": \"4679158271797e5361543400431215d7366e1e392be6a3a65f64bd3cd339380744f2981fb3e1dc26aed4f224322c8325d890c58c45d25f3ec9061ed078f346a0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-win-x64.zip\",\n            \"hash\": \"b353dc44d87e4f9d528d48d4874a115b59822d9baabf553ed5824404b16b11fd6f2309057895790dc96a64126335055fb86c70e91d1c4d2f447100264afbf8f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-win-x86.exe\",\n            \"hash\": \"c8d92d699cf5247510aa1446b4ee3b23933f93691842ac636c2e5355103c9959b52a4c5dd4f57e41df9df93fd4b00a100d1f0dae2dfe3435c8cda24f0dd45876\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/7.0.0-preview.1.22076.8/dotnet-runtime-7.0.0-preview.1.22076.8-win-x86.zip\",\n            \"hash\": \"d4b90483a5cd9a9fbdc8a91dbec41f5c27eeeffbc585078cab4b1fa3dc015675436f661c555911e3b1ac169544d3e028567fe79942c4832fe30c5d14e1cff761\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"7.0.100-preview.1.22110.4\",\n        \"version-display\": \"7.0.100-preview.1\",\n        \"runtime-version\": \"7.0.0-preview.1.22076.8\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.2 latest preview)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-arm.tar.gz\",\n            \"hash\": \"22c112bce0b36e46140bd17ae9379f7801f72b8b12156ae43224d3a2e9bf8ca8226653986601c6ba5cfe4e68515069d81dec935fd918634a0172418d6e7a5236\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-arm64.tar.gz\",\n            \"hash\": \"64b78bc4878623e5d145efc7ba3e01e5d4073bfb900eb5f200f8cca0e6828a0da62a93ca9ba781f5d3c9b7e7eadda715789fd6c7ee3cbd2058f9500893e7733e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"026af35eb1f6fc6002ba60f92b5f856bf5f6e445ad67129e976c40350a086b8a3251f81e90ec7d664203ff5310440e42dc55bc1d9d8efa8d47e8dbf7fccc4c42\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b9960bbc90a63a46424509dbe807b1bf39dd505ac4ce4c1b48a901622f8e57493d521b358e03e2df4dc03022fbfe575ad66d8ac48321d6c5735d8c93c6217f85\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"195ec8d001715106df5d2487ee1ee44291acfbc17aaeed890d1967bd75f0c1767cc68b54076ec82e6bc23118ae469b0dd8483872a7ba4da26f4ff81fc997d78a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-x64.tar.gz\",\n            \"hash\": \"54488a911172f059e3823d6bf52e1fa87305eb09e84d97f81a40e0815fc8a73a480b149023283f557a672ef0341f022b8ca16ebec92264ee16a56fac8f35e2e2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-osx-arm64.pkg\",\n            \"hash\": \"27cb15e73e02d2f2d14b70113e7898b22f80a9974d7deb3e9881f4fa452fb861f35a6c35cd61230a9252e62d55b6cc42b3a8aca6085af675cd95f9b454a84d44\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-osx-arm64.tar.gz\",\n            \"hash\": \"a94221b69b9f9959c60456720efe2ea50fb8a073903103a473e311a656871c0d32ae310a253b77d5030dda1396ce2d02b3140e2c69ec927f915f72519c7cc798\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-osx-x64.pkg\",\n            \"hash\": \"0b819050a6ba1075f8d7d0d0dfed35db0f0999ff722f87796d667b4fcccc62d38798135e7cde23c0ca26a17c9333175326a67c8d61fb310f9b8d0c73c5afdbf2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-osx-x64.tar.gz\",\n            \"hash\": \"eb521adc05226661ad7440f9ec1da682a509456d24fcd07c5e41dd5b07a0b676bc4921d60748aad92c67e1fddf53c9beaa24933d4d2ddae78420edbfa32bf52c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-arm64.exe\",\n            \"hash\": \"bdd1fff69e7c0fbe6d001f6aed852b7992b78a4747e56b22a9811a42f69834a232acf2543587a6acc8b06b4955033e0fc4d5abcde98cfb21ce174c40bc68d492\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-arm64.zip\",\n            \"hash\": \"37f69c0cd345e7f6cec02f6825055cc37dda3da58a09648fa720ea9424176638bf60aee4d418c0ee35acd7e13ee12dd5e9d4728e6c4b0dd6ce01f18c0545335c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-x64.exe\",\n            \"hash\": \"751b20eb4fd94f16efb6f71bfc8cafab3fa1bf42bfd73163caee4d00899d933622b748ccb3b328104f66210436c7a0f5b585ff7d617435807d97eb528277a924\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-x64.zip\",\n            \"hash\": \"9ec5ab0620e38c363b12b09239829524e79f460e76be0e81069e1f54a7a79ca01dc06a6246e08ad45808633fbb3310559ebd303e083f9d7bcb267157e6e48a61\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-x86.exe\",\n            \"hash\": \"42becb52fc803d8c42fc733db528ec41b383422a39fbb05a208dbe556fe0d113618c6c217b3e3bb0838537e263ae58f448e103f0400f757290e13c888c0f962e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-x86.zip\",\n            \"hash\": \"ad9873676c73d8e008e37fc3200732e566c5d8644f30f1ddd3291a5623a77f436c4395ed3f85da9820026c3a45e3e47aa1343b59cd7e232bac072afe0852eaab\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"7.0.100-preview.1.22110.4\",\n          \"version-display\": \"7.0.100-preview.1\",\n          \"runtime-version\": \"7.0.0-preview.1.22076.8\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.2 latest preview)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-arm.tar.gz\",\n              \"hash\": \"22c112bce0b36e46140bd17ae9379f7801f72b8b12156ae43224d3a2e9bf8ca8226653986601c6ba5cfe4e68515069d81dec935fd918634a0172418d6e7a5236\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-arm64.tar.gz\",\n              \"hash\": \"64b78bc4878623e5d145efc7ba3e01e5d4073bfb900eb5f200f8cca0e6828a0da62a93ca9ba781f5d3c9b7e7eadda715789fd6c7ee3cbd2058f9500893e7733e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-musl-arm.tar.gz\",\n              \"hash\": \"026af35eb1f6fc6002ba60f92b5f856bf5f6e445ad67129e976c40350a086b8a3251f81e90ec7d664203ff5310440e42dc55bc1d9d8efa8d47e8dbf7fccc4c42\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b9960bbc90a63a46424509dbe807b1bf39dd505ac4ce4c1b48a901622f8e57493d521b358e03e2df4dc03022fbfe575ad66d8ac48321d6c5735d8c93c6217f85\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-musl-x64.tar.gz\",\n              \"hash\": \"195ec8d001715106df5d2487ee1ee44291acfbc17aaeed890d1967bd75f0c1767cc68b54076ec82e6bc23118ae469b0dd8483872a7ba4da26f4ff81fc997d78a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-linux-x64.tar.gz\",\n              \"hash\": \"54488a911172f059e3823d6bf52e1fa87305eb09e84d97f81a40e0815fc8a73a480b149023283f557a672ef0341f022b8ca16ebec92264ee16a56fac8f35e2e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-osx-arm64.pkg\",\n              \"hash\": \"27cb15e73e02d2f2d14b70113e7898b22f80a9974d7deb3e9881f4fa452fb861f35a6c35cd61230a9252e62d55b6cc42b3a8aca6085af675cd95f9b454a84d44\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-osx-arm64.tar.gz\",\n              \"hash\": \"a94221b69b9f9959c60456720efe2ea50fb8a073903103a473e311a656871c0d32ae310a253b77d5030dda1396ce2d02b3140e2c69ec927f915f72519c7cc798\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-osx-x64.pkg\",\n              \"hash\": \"0b819050a6ba1075f8d7d0d0dfed35db0f0999ff722f87796d667b4fcccc62d38798135e7cde23c0ca26a17c9333175326a67c8d61fb310f9b8d0c73c5afdbf2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-osx-x64.tar.gz\",\n              \"hash\": \"eb521adc05226661ad7440f9ec1da682a509456d24fcd07c5e41dd5b07a0b676bc4921d60748aad92c67e1fddf53c9beaa24933d4d2ddae78420edbfa32bf52c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-arm64.exe\",\n              \"hash\": \"bdd1fff69e7c0fbe6d001f6aed852b7992b78a4747e56b22a9811a42f69834a232acf2543587a6acc8b06b4955033e0fc4d5abcde98cfb21ce174c40bc68d492\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-arm64.zip\",\n              \"hash\": \"37f69c0cd345e7f6cec02f6825055cc37dda3da58a09648fa720ea9424176638bf60aee4d418c0ee35acd7e13ee12dd5e9d4728e6c4b0dd6ce01f18c0545335c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-x64.exe\",\n              \"hash\": \"751b20eb4fd94f16efb6f71bfc8cafab3fa1bf42bfd73163caee4d00899d933622b748ccb3b328104f66210436c7a0f5b585ff7d617435807d97eb528277a924\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-x64.zip\",\n              \"hash\": \"9ec5ab0620e38c363b12b09239829524e79f460e76be0e81069e1f54a7a79ca01dc06a6246e08ad45808633fbb3310559ebd303e083f9d7bcb267157e6e48a61\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-x86.exe\",\n              \"hash\": \"42becb52fc803d8c42fc733db528ec41b383422a39fbb05a208dbe556fe0d113618c6c217b3e3bb0838537e263ae58f448e103f0400f757290e13c888c0f962e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/7.0.100-preview.1.22110.4/dotnet-sdk-7.0.100-preview.1.22110.4-win-x86.zip\",\n              \"hash\": \"ad9873676c73d8e008e37fc3200732e566c5d8644f30f1ddd3291a5623a77f436c4395ed3f85da9820026c3a45e3e47aa1343b59cd7e232bac072afe0852eaab\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"7.0.0-preview.1.22109.13\",\n        \"version-display\": \"7.0.0-preview.1\",\n        \"version-aspnetcoremodule\": [\n          \"17.0.22031.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-linux-arm.tar.gz\",\n            \"hash\": \"222eadc1a700219f02b8d56c38b0a623979b2a5242f9d497e3cd8d0120e9d69c4ec015ba801a593e6cb9e7e6aaed1d7ba3a59063ea14554ee8954914ca6ee386\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-linux-arm64.tar.gz\",\n            \"hash\": \"33737fc5478ae12c46f61d64817a66038b74d62f60eb9d23aa4b10a681739cfac61afbacd62faefce8514d8b615ec13ce84bed243619631529903d1f9d1f6d61\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"69e3bf1888d88b11610377047a253ee296360c10a7f42e5385ef577a69c4b3b95fb8fc8fed08c245186babe432499d9cf0bc7bf4d7be6c92d8f1385fb432b415\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7fe85e4f21612393e32a632c5f5747696cd86456d9b7ca6eef65d36631c27aa5bebbb5ce45d004090978b7fb87ba5c961263179a61f97b0105f105d3e460e001\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"687488c28de26201710c403bb8b9405aeb4afe633e7cb093a0ea004aaa0f1c730f29cb9a630dde81cb2c64853833bc0f174c7ab00840e95de5bb76a9daaf68a2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-linux-x64.tar.gz\",\n            \"hash\": \"064d65fa3aabe1aa1c7b4142e7ced64b194474cefc0c52710e17aa7f156e3259ed51ae3abacec164c58de29240ac21d51aa7c153ec048c4937104eb3bbb00c74\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-osx-arm64.tar.gz\",\n            \"hash\": \"f2d46b8109ae65bd5ff826861a26b2f8f953cee71c49d772e43dcce769ae737fc0c2ba35ab42983d6e6e3de53eff41578900a6c6115b626b15f283c0e63d2e4e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-osx-x64.tar.gz\",\n            \"hash\": \"a57a6f96284b505309a765729223e2f68b48f47032ab810b9745e0a756208dacb04c236e9fec151daa92a0e29ed259026375a2837d8b1fd2c34480b59f31738c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-win-arm64.zip\",\n            \"hash\": \"956b86abcd4e1544fe23c01470f3ad0b7299348951180f51d6ae3209f5f5701de4a5985fb89a89d52606ea0f3708f733a53ac67e3ed3c2280eafc7f9b757eb3e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-win-x64.exe\",\n            \"hash\": \"f6ccfa8fa070cbaa456203a3d208ead6eec6c082ca84fd5955c81fe38419f3e74e55225c38f97e5e689926e1bc5e721c099ceae0e9342bd9616fd3426b2dc591\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-win-x64.zip\",\n            \"hash\": \"a9930d4d24702a7954c289bf159188a8ab0ff34e1d18a02561bb85cca95b480e0baec6b592e21497f894074493da39c12c07b5bb08c45a4e8f0c38ec66335231\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-win-x86.exe\",\n            \"hash\": \"0b0a83f1b06e40c3be8b0ba31ae5b0f604672791075ae71a484dad0c03d09375e8d0c053b760e1e7155191a283bb7c13fa01bfc34e0a9540f4be71cc3da23df7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/aspnetcore-runtime-7.0.0-preview.1.22109.13-win-x86.zip\",\n            \"hash\": \"29117522fc34fa6997d5745c9e4345b73975bcf17e7562a3f0f454e3118cec5ad49a399c1b6cca9f1990eff3ca9455882af67fda926eaf5539a942c5d0922b8e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/7.0.0-preview.1.22109.13/dotnet-hosting-7.0.0-preview.1.22109.13-win.exe\",\n            \"hash\": \"0797a79d18455e891bca621562f01bd20a709be309b830695afbaf63d6f6479da9d049e966c7c31d32b92ff2023e82f726416182267c010157be0b9ea9bdc221\",\n            \"akams\": \"https://aka.ms/dotnetcore-7-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"7.0.0-preview.1.22077.5\",\n        \"version-display\": \"7.0.0-preview.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.1.22077.5/windowsdesktop-runtime-7.0.0-preview.1.22077.5-win-arm64.exe\",\n            \"hash\": \"3cc7b849490c2300fd024ac55c18d500495d72d5b57aeea2ca104fab8f114abc60157918731816d4d61b8a70665d58a9d562e1a6368db0a28668796b97bf23e0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.1.22077.5/windowsdesktop-runtime-7.0.0-preview.1.22077.5-win-x64.exe\",\n            \"hash\": \"450e95a702fd19e0cb89d82393df850680e1efe0813240d2d7f0addbba6926d3ef54bc20b390ec0d3d027e81dcb2290d3439b5dd9b0b272fb9bc4b81a088be2a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/7.0.0-preview.1.22077.5/windowsdesktop-runtime-7.0.0-preview.1.22077.5-win-x86.exe\",\n            \"hash\": \"ba27ce99b071bce9957ef5dca1eae99c40e8680c4d363157c75a09eb1c7d1c20ae30642df36c9fa29e225572d4b1d097b3f9fc638daeb2b38403ba318f100889\"\n          }\n        ]\n      }\n    }\n  ]\n}"
  },
  {
    "path": "JexusManager/Resources/8.0-release.json",
    "content": "{\n  \"channel-version\": \"8.0\",\n  \"latest-release\": \"8.0.16\",\n  \"latest-release-date\": \"2025-05-13\",\n  \"latest-runtime\": \"8.0.16\",\n  \"latest-sdk\": \"8.0.409\",\n  \"support-phase\": \"active\",\n  \"release-type\": \"lts\",\n  \"eol-date\": \"2026-11-10\",\n  \"lifecycle-policy\": \"https://aka.ms/dotnetcoresupport\",\n  \"releases\": [\n    {\n      \"release-date\": \"2025-05-13\",\n      \"release-version\": \"8.0.16\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2025-26646\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-26646\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.16/8.0.16.md\",\n      \"runtime\": {\n        \"version\": \"8.0.16\",\n        \"version-display\": \"8.0.16\",\n        \"vs-version\": \"17.8.21, 17.10.14, 17.12.8, 17.13.7, 17.14.0\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-linux-arm.tar.gz\",\n            \"hash\": \"3f245b9d4603809197d81d80a07d4513c8d1608179b1f4069bede3c6bcf6e8d8eb77c74f5ffada85fb8af517052a27d3e4ade5463194557deb31a9f02417e4fc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-linux-arm64.tar.gz\",\n            \"hash\": \"ddb14dd8cecf88069698126259193a25a69b4b47aeda2aa1641c8c0301b2e5760959981cb767d7f14ad37ca99936c4136f5d7d2eb51d4860318e7afa3474752e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"a1b43d5ca2315fda8d3777d20aaa9e4725a6867b0430d931069e6530dec32e6c6ef64132e7178828ed10c5a369f8c0c2b7a426012b75ee617eb3cf65305adb28\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9af2ca767cd94e23b8e9165582abad18e11d3f25c972fabad19b97435144774aa427746e6056132fa2361e237815ce35e8b6244641d92f511427223565abb921\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"ae77fffe1fc8e6b65a6908bc6f8b413b3dc15a89db1a425974ad7686bf307b068076f77079ba06224129a74209c10aaba7a418a5e3ddf4dbeef889c2fc4da23c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-linux-x64.tar.gz\",\n            \"hash\": \"e0924f88b6795d669e5c6278845a574b75fbd9b5aeb63a0ed638224fb8d3d48b91bb2a9afb272dfd5f40e8241d41a84792b9fcfe426e8fdcfa14116bc132cee2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-osx-arm64.pkg\",\n            \"hash\": \"a1c2314b012b69f03eaea248709a8c4d02b2a7c474bb7cecf6508b0c98b15377dfdbfa9d13c28e44820791e048ffbba1c3ba37a9abb385d6ba23400f8f75ca1e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-osx-arm64.tar.gz\",\n            \"hash\": \"73c3513ac18781d2e93053dd85c9447ccdea7dfe6ccd38df9a3616f751f0f66fdc4e43765f2e28f19b6f23d8d074698e02be5d92c14d6d09b7b4ca1c29d47612\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-osx-x64.pkg\",\n            \"hash\": \"083b4249da29193e4e1841894f36b43a23bec8e2d6f92f8d44270ed92519527d6f1eefa279a870f67ff3d6fb1e98b0c3f4252f247576ba0c0ddd85caee1dbcee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-osx-x64.tar.gz\",\n            \"hash\": \"f68018dbef7f8d5b55350e2cc431c5e9adf8debb67c971a28bc8de0fbfd273b3425f4a61fd3db546fb650a35cece7b54bbe6553294c4d27f5846e832300e401c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-win-arm64.exe\",\n            \"hash\": \"894c7feab2b567c186b28ed157865880a7d7871530311452f0fdd6b48ce6748e0f597a2ec9c468f4335c3170ddd4306878d0d2854e22d9b6ead7746f18a0019c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-win-arm64.zip\",\n            \"hash\": \"24cc360192d057128e99aa04f0865332734e4bab4643bad90c6952dd9e529f660b00d1f3cf22e5b22e244a7ae1aacb5e3c58c706e0fff6090a2a6ad4032ff7b9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-win-x64.exe\",\n            \"hash\": \"8c61220263b0d5640cb5c5499652fff5a99bbe9930d95d42943eb336cff80ecc7e00a7f6304d992da8016f5e8bacaac5323ecab92aa2e2cdf214c4e8425aef4f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-win-x64.zip\",\n            \"hash\": \"096632e933c94413316c7f7d54541cfbec76d0d77776bfdeda1cb155567a6eaefb33bcdd1e36d9add3bb0f276418b3615782489be3e1cb9e628138c8b91c23e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-win-x86.exe\",\n            \"hash\": \"b94756c56cdf505ad272d435e145a67b3aa3c518fb34c78e37d769a7b69a0f5f259cb9a51bb28c26f070d0950ff766ea57a99d477da7b606b83728783708f1b9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.16/dotnet-runtime-8.0.16-win-x86.zip\",\n            \"hash\": \"0a51c551ebeb46795be2aef9785c09f5ce03caf5da730e9ccea4bf58075668e84fed91ce741dec1953942c07e2790990005a24ee0fa5c82504dadcf615639677\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.409\",\n        \"version-display\": \"8.0.409\",\n        \"runtime-version\": \"8.0.16\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-arm.tar.gz\",\n            \"hash\": \"d29937db92ef085d4c3736f1be811c574e81cc0fe9b1decef4199c2d5170947648a7c694f3d2a963403f41040c7c9a1f78c909ca0cd93c1adc00b0ed48c589d3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-arm64.tar.gz\",\n            \"hash\": \"ee7090a9ddc8347ab743a3132a0c8a78220c219ce45b9b4c9f5b741b7f66e8191ea8162ef17daa3830b8d874c73a26b19882975b35d0ac1da31761b5a64c7deb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-musl-arm.tar.gz\",\n            \"hash\": \"58639aa04a53f13050f81bd80f8b87694905ab603084f8f1d94659ea2d82a0dd474a714c255c935153e154b9b3b78110e3e775458e5c317f9b2ff9f061fdfcdc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3128f4aac3d562f037cf22684331ffb7d38accbb5b9ff89845a9ee8f8d810c16b36aa38bd5da993204826a59b9369837cc3206493cfd6cc5b9d2317543317b9b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-musl-x64.tar.gz\",\n            \"hash\": \"80612845aa4dc9c814b3a0a0e9bb684919dfa89774c8a142cdaedd4d2e2a15b7caa78e8b06c8a0f4834326492908fb609aa5f388111fa67d7f103eb0cd722668\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-x64.tar.gz\",\n            \"hash\": \"fb855ff04db010594bb7da884e3a86da94e26a43cc5d858724cc0d3d8ee31f6d64eb09558bad3dba540a25082219ba41aa7feb40d1c4f3468c3720ea4c552fda\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-osx-arm64.pkg\",\n            \"hash\": \"59945e6c6392d820929a55aa54bcae43be06213d969ea5fba95c7ea2b2ba8dccb9e9c4cce992ae8ad6aa1b2e0dd3ce9fd7e20f95799ee5c29d9ae94e3d1efcfa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-osx-arm64.tar.gz\",\n            \"hash\": \"377c52370342183ff575c18d3f49d10468325f272534b00c5246f3aadfb0e7601d61d4b42bb913e8d053965fb591fcdff9b1123f85f8d8973226bf25180df568\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-osx-x64.pkg\",\n            \"hash\": \"26aa84723883e7ceef86aa1235a104398a67706733bbc642f14bd5abf9489c0cc2eb903a81f233f5b5377972d3cad2ac965e107a9d87c778157d42b1b0a591fa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-osx-x64.tar.gz\",\n            \"hash\": \"b2e0eed94e1217484ccc8ba4aac8d7596b35032ad6041eb46ed71aa821d8bd71f3e1ec9a82c095480f83ef74342582d95b5db287b53772692f1fe3a1953b305b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-arm64.exe\",\n            \"hash\": \"a743bb6b3a3f44a170c65fcfc1ee353c86c3241adeb23c831c973cef0916108d2fc6cec06e5928f03b1978f7ea99cfc1fba450d08a194d38b4003379feaff6dd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-arm64.zip\",\n            \"hash\": \"b12aa2c7e4c15db130489d620b7f4d100b7815e90f507fef524e302465c4f3a461b1077369d24132b3d9544aa0f375a0db2121cb2a886425b745b281e2345ed9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-x64.exe\",\n            \"hash\": \"304012b1cb095a3c25bc65d9f3d07905a737fcdd60561b96f1c5a3440172b500fd5c17560634964672a5918bfaa713d789ea00ad8b7cae11bb23fe5a44218784\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-x64.zip\",\n            \"hash\": \"a15b537ad683b8298222ef51138e5e14984d96950734f0d261085a621b76f7e41c9045572c148eefd8ff0ce47da2e9036409dd020316f9e2b79c7e5a0b8964c7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-x86.exe\",\n            \"hash\": \"8cbfd5f0da10af335db89815e1465245e4fcc851da1e3c345b3774325db897a1ab0e7cbc9fe86807bf496281432e4bc06e2fd0bd50bf32fec1e4724d09e9b56c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-x86.zip\",\n            \"hash\": \"0002cb99041569a90a2d442118b2123b2796562b723f6227ed0079855b52b5bb43d6a7e6ce3e09a00ce3427d0b7ce6f0ec98840f38393f355a9959bbd8a5021b\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.409\",\n          \"version-display\": \"8.0.409\",\n          \"runtime-version\": \"8.0.16\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-arm.tar.gz\",\n              \"hash\": \"d29937db92ef085d4c3736f1be811c574e81cc0fe9b1decef4199c2d5170947648a7c694f3d2a963403f41040c7c9a1f78c909ca0cd93c1adc00b0ed48c589d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-arm64.tar.gz\",\n              \"hash\": \"ee7090a9ddc8347ab743a3132a0c8a78220c219ce45b9b4c9f5b741b7f66e8191ea8162ef17daa3830b8d874c73a26b19882975b35d0ac1da31761b5a64c7deb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-musl-arm.tar.gz\",\n              \"hash\": \"58639aa04a53f13050f81bd80f8b87694905ab603084f8f1d94659ea2d82a0dd474a714c255c935153e154b9b3b78110e3e775458e5c317f9b2ff9f061fdfcdc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3128f4aac3d562f037cf22684331ffb7d38accbb5b9ff89845a9ee8f8d810c16b36aa38bd5da993204826a59b9369837cc3206493cfd6cc5b9d2317543317b9b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-musl-x64.tar.gz\",\n              \"hash\": \"80612845aa4dc9c814b3a0a0e9bb684919dfa89774c8a142cdaedd4d2e2a15b7caa78e8b06c8a0f4834326492908fb609aa5f388111fa67d7f103eb0cd722668\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-linux-x64.tar.gz\",\n              \"hash\": \"fb855ff04db010594bb7da884e3a86da94e26a43cc5d858724cc0d3d8ee31f6d64eb09558bad3dba540a25082219ba41aa7feb40d1c4f3468c3720ea4c552fda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-osx-arm64.pkg\",\n              \"hash\": \"59945e6c6392d820929a55aa54bcae43be06213d969ea5fba95c7ea2b2ba8dccb9e9c4cce992ae8ad6aa1b2e0dd3ce9fd7e20f95799ee5c29d9ae94e3d1efcfa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-osx-arm64.tar.gz\",\n              \"hash\": \"377c52370342183ff575c18d3f49d10468325f272534b00c5246f3aadfb0e7601d61d4b42bb913e8d053965fb591fcdff9b1123f85f8d8973226bf25180df568\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-osx-x64.pkg\",\n              \"hash\": \"26aa84723883e7ceef86aa1235a104398a67706733bbc642f14bd5abf9489c0cc2eb903a81f233f5b5377972d3cad2ac965e107a9d87c778157d42b1b0a591fa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-osx-x64.tar.gz\",\n              \"hash\": \"b2e0eed94e1217484ccc8ba4aac8d7596b35032ad6041eb46ed71aa821d8bd71f3e1ec9a82c095480f83ef74342582d95b5db287b53772692f1fe3a1953b305b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-arm64.exe\",\n              \"hash\": \"a743bb6b3a3f44a170c65fcfc1ee353c86c3241adeb23c831c973cef0916108d2fc6cec06e5928f03b1978f7ea99cfc1fba450d08a194d38b4003379feaff6dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-arm64.zip\",\n              \"hash\": \"b12aa2c7e4c15db130489d620b7f4d100b7815e90f507fef524e302465c4f3a461b1077369d24132b3d9544aa0f375a0db2121cb2a886425b745b281e2345ed9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-x64.exe\",\n              \"hash\": \"304012b1cb095a3c25bc65d9f3d07905a737fcdd60561b96f1c5a3440172b500fd5c17560634964672a5918bfaa713d789ea00ad8b7cae11bb23fe5a44218784\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-x64.zip\",\n              \"hash\": \"a15b537ad683b8298222ef51138e5e14984d96950734f0d261085a621b76f7e41c9045572c148eefd8ff0ce47da2e9036409dd020316f9e2b79c7e5a0b8964c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-x86.exe\",\n              \"hash\": \"8cbfd5f0da10af335db89815e1465245e4fcc851da1e3c345b3774325db897a1ab0e7cbc9fe86807bf496281432e4bc06e2fd0bd50bf32fec1e4724d09e9b56c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.409/dotnet-sdk-8.0.409-win-x86.zip\",\n              \"hash\": \"0002cb99041569a90a2d442118b2123b2796562b723f6227ed0079855b52b5bb43d6a7e6ce3e09a00ce3427d0b7ce6f0ec98840f38393f355a9959bbd8a5021b\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.312\",\n          \"version-display\": \"8.0.312\",\n          \"runtime-version\": \"8.0.16\",\n          \"vs-version\": \"17.10.14\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-linux-arm.tar.gz\",\n              \"hash\": \"80da77a2894e43fbe826145501f37fa9624e87bd136a71235cde2017135315d3157c87bd77dd547a4c594a6f8c7da5d175419aec3fd25911db4719ec792ea2f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-linux-arm64.tar.gz\",\n              \"hash\": \"cb7571ba11956ad1f4dca02b02a6177b4d0a82f85edda8267dd8498f0f31c2e2e2f6b3ce86e04695e5c93b5f133187d0c5e35d22afbcb676a5a02ec9a123f3b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-linux-musl-arm.tar.gz\",\n              \"hash\": \"0bc84377090e816e36db83676c5ac7c07ebd91d19123759b82150905b05aec3e133401777fcfaba407e3bdf2f960af4ee8499c46e575b82aecd085eb49afe24e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b736bad777c0f6bdeb5b6af875827b454926b8b8059a7aada56435dff1d14d429050b5effca86ed8696f88377ff613f33b3b1f11e50a1dfb8ae20867120c7dd3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-linux-musl-x64.tar.gz\",\n              \"hash\": \"db95fb046d46dc59d8b225d3716c2b323b66e1dcd5394c17e44ff9e383bbcb9367ac733f3fdb581e3e2a1fd4438cfc283161f8b4674502c74651e64592ac3cf0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-linux-x64.tar.gz\",\n              \"hash\": \"6e1ff0e958303d1232a9a1ce2647e74aaabc28a5b93e10a15ddf012eed99db3e3192a3c91e7b1106db6e1b5b2adec8ba04f237457fa8cfaeb9d8bc9a0e890bb6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-osx-arm64.pkg\",\n              \"hash\": \"56df2c35854be277a4d3119f1e2e3b64f9fc643899d7ed3d393d21b795d169db5b2878401921eeb51e6ec96e3ecadf61bfea8e2e2698aef10982f0c3209bcd9c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-osx-arm64.tar.gz\",\n              \"hash\": \"6d27ddda13e41a3a98f18dddff1fee994a969d97dae6601cfb6cbd2758b293da6fda0b85ba12cd1c29e3f7e9a1fa19f13cb2ba673b0c4f8e25d1a2c7d76c5b79\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-osx-x64.pkg\",\n              \"hash\": \"e25f5be8684a3f85b5e91a01e6f3537819d83fb5ba7eed989fb650ea943d2136c2b2678b62b293e7f928f935de10ecf88170d68bc99aaf451ad9dffdcfc91408\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-osx-x64.tar.gz\",\n              \"hash\": \"9d12b2dc59e88d505d7e9fa2028b08969323fc5faa20341ced546fbace5abcb9e577fadce9feb714e5a7543c6a7255359b41beea60c89cd5038d59e86d3fd738\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-win-arm64.exe\",\n              \"hash\": \"7c299a8564cf1ddc207fc6444cbde63806a11c83171d8e7ea72e70027fa140f0ae69d9f925dafa180b6255186fa9399dfc4ab914963d50453bc87319130f2cc9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-win-arm64.zip\",\n              \"hash\": \"635bbfdb6a1674ab816ff22da36859b5cffeca48cd00533afa087f8be46b45bb3ff654dd20a2f5a59e5e1fcbfe6eae4f5d54bbed4155a4be1a89ee9727e9e925\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-win-x64.exe\",\n              \"hash\": \"66a0b376aab3271a63e999e856a79edd38408a32412f02a9b75010f14b20de393b0666869183624385ec3ca20ccd42332b6256557a159a3406b3a72d96a1dadc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-win-x64.zip\",\n              \"hash\": \"0cd51532ee92772512cda009a01f236c5a774527ab2eb8ed2bb51a8e60afece5cf53c1eef1d8e80e9045f27380cd1de66a3838b44f28b1b34c37dcec3de74429\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-win-x86.exe\",\n              \"hash\": \"baf79f971556a106cef12be6a56e293e4b675ff703b0128d68b143e6784286c7983a85145ebea592d9f7297817b9d3f085a1b3941fe1d688a98d33fd2dd81277\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.312/dotnet-sdk-8.0.312-win-x86.zip\",\n              \"hash\": \"f4eee7d2303ca5a64b682c47355f587223890d1d2095b5981201349a919d3f610ed7d81f565e6f71710d70052b6220f355077e46f1c67496ee0522db46c068fc\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.116\",\n          \"version-display\": \"8.0.116\",\n          \"runtime-version\": \"8.0.16\",\n          \"vs-version\": \"17.8.21\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-linux-arm.tar.gz\",\n              \"hash\": \"15f2f1cd15c5635c22230f33fd30466fbbe78d46de09a93e4b93705737babf369ed7f0b911965eca3f8f6c7a661af60bab15b5520e22329f9a27ed418ac226f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-linux-arm64.tar.gz\",\n              \"hash\": \"8f20ba4d250b048b2502b795ef49bf03d833332c7c4abe7b712638c4887b4bb76669bc17cd55770642664661fb32b75b184715c8fa6ae55003f72ac83b215643\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-linux-musl-arm.tar.gz\",\n              \"hash\": \"50613d7c32492c992c7d019f184f0971a9114137ec9fb2ebb4921b8699effd828ac2a1f77fb61be1f45cd1fec4933d6e400d4491da2b9106f4759b749494313f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-linux-musl-arm64.tar.gz\",\n              \"hash\": \"c66a101414a40e625330a8cbc859fbb8ac545c871a3429e85d6b789003b3cc2d2026e98105396248ed8a66af29eff19b13e94b0ab5c060aef8e3d38c2f67b376\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-linux-musl-x64.tar.gz\",\n              \"hash\": \"e3b03c4fa86f1dfbc700995300082a81dc4af23df2a59ca3b69c89e0d372e3cc9544bdb05ee02c0f6154b2bac97af000164c524aebd0aa916ec72df329b65384\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-linux-x64.tar.gz\",\n              \"hash\": \"96c634a0d1678429fede9930336ba0351d1510bc4d0456b9d7225c5c9d587d700e8f30e841dfd675fff8a8c709cbef209ca87d11cb657fcb2f212b5eefaec872\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-osx-arm64.pkg\",\n              \"hash\": \"9de49329df0f9e3327831da560d9aab5a7402d42bda4393fd7268c2181248c65e1141f8c241a5c31e8c0744bafd23c4d3eaa02110628ffa6aa8bbeb31ecd5206\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-osx-arm64.tar.gz\",\n              \"hash\": \"d87c937d81c7b415dc2bfedf315dace60896b0ff5bec64d017dab612aac1a54482adc7c59d8612527e622c2256d5e87005a211f3d33890d33fa3cfae001c75d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-osx-x64.pkg\",\n              \"hash\": \"88b75a65fd099fabdee52cc22ea7aadaf652cff00c0ed62cd44d597c7f323ac89d43ade8a860a857d20e73fb7d4abcea6ad48e0ee6abd55a16190c6acef92485\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-osx-x64.tar.gz\",\n              \"hash\": \"3e3d671a06a1057651aed1378c64ede9dcf7b46b005e68a5d919ce5bf2b5553b99ae82909ff1fa7bf914d67facc11898b0e1cfc48ed1c79c1c4fbf9773085452\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-win-arm64.exe\",\n              \"hash\": \"5bde262848c44fd07402013e734731926f012d9f3a326608ae5d48e4f5150cdd87ff0c6b50179dc06aa96eb09bfe860b6ba495ea4d1c6a21abb8d4540f624ad2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-win-arm64.zip\",\n              \"hash\": \"2137faab6c3a23e177949d76241b8ceedb5a6025bc6d255daaeb7b6cb9c8cbd49f1990f19be18e5ec298e1790c83e97ca0503a3cb2e0ccb30559063720c3f436\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-win-x64.exe\",\n              \"hash\": \"5a98b9bd24d23be86175bc2a0a3c9ca8abdbe099d7863f9f05a6f87a7acef53f5e96c29e3d767ab1cbc3e40f6ebbed655f1137d0aedf471fe37101a319d3b206\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-win-x64.zip\",\n              \"hash\": \"2b2d692cc1e0700e6fc30eb88b2b6ad792e0f75e87ce195417151f6be64274bb0ec12a13cadc6264ec1b654aed0a7b76b0b4e04cd8840315073cbeda76b21e17\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-win-x86.exe\",\n              \"hash\": \"b2586d13102145b6b25d7136f3a0d4dda533a7702821195b2ee2577b10a1a1853aa31e982da6066ede07b2950a966ea74f843cc0f446178e7dc945ad5b6faef0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.116/dotnet-sdk-8.0.116-win-x86.zip\",\n              \"hash\": \"bd0926b9bfaaed5888b855e05bfe102bedc032073e70243fb29a984e04687c842722a2175bd252c7ad83299fc4dab13070197989b5a9772711ad9b467605a9ce\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.16\",\n        \"version-display\": \"8.0.16\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.25107.16\"\n        ],\n        \"vs-version\": \"17.8.21\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-linux-arm.tar.gz\",\n            \"hash\": \"1df49edcaa5eb1afae6e9b935a0418bc4a93e02bbde834326c1a066095cf28e7607d5d1ca8af7771a9d2e81631e49931a7bf99849c8910791deeeb6a990275c7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-linux-arm64.tar.gz\",\n            \"hash\": \"a115e0e6253cea7e9a481ed82f57fc96413aa50ce7407932128cba153bdf4aec1bd8cdb9c04d290ff00f8544429feac86ba6e8d2b0f1674c255bd636c2c7e6de\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"4d5302c769d24262adb7c1e1a920c058d98b9e6742dedfeb2a26ae1e84a472d62ce25d137e85e3ea172d6777b91bff67fe8a06325eb162b0cab37090f5e8a4fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"22220a425146baca5dafb4193477bf0c4fec3b9ed9ca9b340739f5ca780c404fbec81c97fea7cf31e666e42d299d01733ff39e641932b642e4bc211f55da8642\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"2f8569e1335bd25a1c93be52364dd1386c60d70c5f905ca830093125de20bfd99be0808cf98f6aafd6a0bf0867962d7436a54ea7b8eb42a6fb31eeb5b08e39a2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-linux-x64.tar.gz\",\n            \"hash\": \"0256cac4151acd6ffc82b0b7b6421f304817b6fdc2d9cb232018cf993e40da6b228d415397dd1b1b34859cffe1d8fc7bd7bb470df81128374e5c944a14c58360\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-osx-arm64.tar.gz\",\n            \"hash\": \"8ecc74a95913128e7a5461639541fd8619c0307d496062c63c5022e38afea29f70a338093361d5c309ea51caad5463fbc7ec8ae6b86be27d3e92675642410e17\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-osx-x64.tar.gz\",\n            \"hash\": \"280a8ea601e5d712cd3914d84ff975f878f4b57edf6199e805af93b96856ba62d02f6c9f85af65860f108ccfb0eeadd4b2aafe13a6e492fe3e2180e3454fd8db\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-win-arm64.exe\",\n            \"hash\": \"aab0f7f4835df8bfd8e97410abfadbb3c57e97d02d569d3653f87272b968f22c097fe2a2d631ab4856d958be31bbac26c99c32f68b560aa44694c6abe36204c4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-win-arm64.zip\",\n            \"hash\": \"a69ba2b270dfeaff0ba795dc91a55984860084da34f3b1979bf5107147ea24f3ffe567166c273bc0d13bc6ed5a33d0ba3ca53a0a1a5e077fb2a6d9c63eb5e77f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-win-x64.exe\",\n            \"hash\": \"93aae0c0c2d66c8400928efb17d45b7342391479e398836194b5d8afedc0b01d7e6b68e0d00173b8e1f95c94d3833f98643980608ad0246d8102827332f0df43\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-win-x64.zip\",\n            \"hash\": \"30c6a3055f0234b18799edd83eb45056dbe874aead3a9533dbd001c45d548068b8fef930d587ac24cfbf17320cab5131a0103d74763191e5739de7fa7982f85b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-win-x86.exe\",\n            \"hash\": \"3220999a4a391068fc8aa8d8c42eaa6e21ea3ab88d877f91dc692b4c68c4f64e0cfb908bcfdd3c7a3c0ed31ecd061e2433b758b46a93911d91da7ffe8c0bdb46\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-8.0.16-win-x86.zip\",\n            \"hash\": \"a7c5033fa2342b52a9ae60bce09378687799a71fc583b88527e9ec9ed10c4507e32cbe7b9368eeaf900b9b411662b4e8363ee195594235514b0b8cc6b2987ea1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-composite-8.0.16-linux-arm.tar.gz\",\n            \"hash\": \"aa210b5e006bb270006a5fa326cb06beea89d91fdef94c59d46685a5f730d2d9ffcd0c2d06101535beff96390a40ada46f2a536df1831f83c544e9b31c045a50\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-composite-8.0.16-linux-arm64.tar.gz\",\n            \"hash\": \"4987d85cd58b65dc989ecdd1129b8285c27d337c02d12dd08c4f260d986aa8115aeca901fc293acdfa76faaa50dbb7ccab574bf8bc6ede6bf2e8163b148cd7a1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-composite-8.0.16-linux-musl-arm.tar.gz\",\n            \"hash\": \"882f8951a5ee2cd87a4ff1180aa26b1bc5a7bcbf3d4f05878150425cf2ad4a4ee878064f915e8b57ad1876f96beb16138356875ca496c2668c0ecaf1d81bcf62\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-composite-8.0.16-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1745be6ba0451ec71914ee2448dadeeb800d1033ae327287b3c67888e2722b6a479c9abf8446b12a55fd57d23c457001c4bb79bcdc9d627884cce92a2a938b8c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-composite-8.0.16-linux-musl-x64.tar.gz\",\n            \"hash\": \"837f500e5d22fb8a30dd9ab8e9bcc0533f7332e8d6c49b0e738c46e4c2fabcee3cd66c5f1391124974a5bfbcf70fb39bfb3bb74f1c750f4890e44e366f76da09\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/aspnetcore-runtime-composite-8.0.16-linux-x64.tar.gz\",\n            \"hash\": \"d22f82e34d57dd8138aa662308ccca380d5d25b971f92fe9861dc5dadb5ee64f4b450d22f50c656e2f358eccd914905e4126e577dd02d3c150c5905e35e4e4ed\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.16/dotnet-hosting-8.0.16-win.exe\",\n            \"hash\": \"4062a86a89d5b28da88e591c3e9bdcf1b1fb2fa85bec87bb00ebc0d2fc19d8c9ddedab85465ea0b49e4b2f0fd964800f2a6f5a7818c75bb6ba853e7c3029a690\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.16\",\n        \"version-display\": \"8.0.16\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.16/windowsdesktop-runtime-8.0.16-win-arm64.exe\",\n            \"hash\": \"ec7fd7ef63132344dbd88b14ee8cb4b51db74dd3b33be56676473b2f3a2bd3b75e7eb8907d50e2254cb4c0237a59bb21c6cf1f84d8dac19d0ed0ae6e40fb6d5b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.16/windowsdesktop-runtime-8.0.16-win-arm64.zip\",\n            \"hash\": \"5d580d9ff39b116f1ca2b26e882416c68e7c2d0fe8b0707f4feeb63a2c49cfac8ad70ec1cb846d6202adcfc71dcee675b975ccfd66429b56ae3e8022c8978217\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.16/windowsdesktop-runtime-8.0.16-win-x64.exe\",\n            \"hash\": \"526c0cf217c04f590ab5b88de4bff41f4f4ca13c4efb4f79bbaafe0b24fc48fdae1e769b0011bf8020b1ad6d8fbf6e1f31175045e86ee9c578a4892124828c2f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.16/windowsdesktop-runtime-8.0.16-win-x64.zip\",\n            \"hash\": \"819a139a4f54307ea46846f5b86ba24b74f783089cc40287eed715e30647ca31f8ca8d7e29b4b6a488acc33e4f365a4ad421b910ae7c2bae6dafff51ea33d8db\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.16/windowsdesktop-runtime-8.0.16-win-x86.exe\",\n            \"hash\": \"f91558eba877dd98aa2c69e7db5cb1d78519e5c958c2d6b153e6a7412ecfe9c91c6f5d38ed762d698d08775b05d2746aaa617c032024ef9d2d568fe1e2e96aa7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.16/windowsdesktop-runtime-8.0.16-win-x86.zip\",\n            \"hash\": \"199e5ed9317311140b82bcb03a90ba87e7100d8c941390d613e5097aa003ee9386e7877dcea6ec558509b2f767df5812ea8cb96c7793d0d90c84531cb4b87ebc\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-04-08\",\n      \"release-version\": \"8.0.15\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2025-26682\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-26682\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.15/8.0.15.md\",\n      \"runtime\": {\n        \"version\": \"8.0.15\",\n        \"version-display\": \"8.0.15\",\n        \"vs-version\": \"17.8.20, 17.10.13, 17.12.7, 17.13.6\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-linux-arm.tar.gz\",\n            \"hash\": \"2b6f4f7285f9cdc39ef48464081e9962a1f0abcd468c84e88a4d10a7e175d30ff1f3b58c48a483958f97e1a33a5c8a223510313066b5a6e5b35d0dead86ddefa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-linux-arm64.tar.gz\",\n            \"hash\": \"f63359a5da4798f8fdfbf0beefd0aa9cd69d5953b2629bc1c68ecc67083572fa9370a89c18e3b4bdc23671df657da756ec6306951f5cadf20062a8bd77ea400c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"4a72cb3e0a3994ac9ad8c18be64a6189d56221274cff31da74bf0b8aba02d68260f056a5734773e4c4a34851fe42e614e7720eb5197328f5e76076f850c576f3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a52a3d2518301fd6571a16620b8802022da775acd70d78195bd75ed4729c0d21fa4f1b5b86869c11fb9f3bdea878deabc3c9d09ea31d8d2b2e43bc22e3b76f3d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"424fb3f807c809271752f79189abee1e6cf9f2326e1cbb5866cbc030d6b6deae98a3913fb5ecb5f944f8c13869fa4c53baa19ddeba1c2b07f9ae72739f061a74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-linux-x64.tar.gz\",\n            \"hash\": \"833a848541ba6f71c8792168914856e16de6f71cf0a481c5990f3622b0e3f83123e6024bcabf6b955a7c92e8e904181d40d3bd612595a0d8c47a421267a91ca6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-osx-arm64.pkg\",\n            \"hash\": \"ee95993389b71dfe1c49507db923b95465a05491674e433f33ac27a3cbbd462221ec00d21ea4af63683d8a7be4a8b3b13f8715af638be0e22f8fcb788cc6f211\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-osx-arm64.tar.gz\",\n            \"hash\": \"7e70cd78febcf958c2094de0c722f8338a633463685aa23b5949d01addb48822dfacc53ed9c4d5f5fce286caf36587c118c24b73a901decea769ca6cad040df4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-osx-x64.pkg\",\n            \"hash\": \"c2e89350f344f1def8ac2d932237ab08c18c14b8edf96bc51291432d4475b8f6f28a25f221229c741cce41715f2fb879d09d4f4d49ab4980a3ba7fe33e1466e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-osx-x64.tar.gz\",\n            \"hash\": \"e488b4dca3cb08a144b50d4428e4185b7a8cf7486886acfee8fc00c1145bd82d7bc7e66acea76a575869f16578babc6708fe1045839deca6ca848188ca59a51c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-win-arm64.exe\",\n            \"hash\": \"96e404c3b017e1c648004b0c1a4fb6289620455201e26af96956b08c1c8f1870825f41d9150939fd4470eae4dea8c8708c1875f637d8f6c8f78ee5c555dd48f8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-win-arm64.zip\",\n            \"hash\": \"729e77328306c68ad78ce3fe08f0b90634bbfdbbbd3a011262566d5c5f96925f1a10cb79e6394cd603ceddb2f46cf20f5a0b0d1415d548585c80fa9467190597\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-win-x64.exe\",\n            \"hash\": \"cc470cac15368ce0d4ea9f9cc7db8baf4290584a92f318f1f7df8397e440ee7e942678da8a56f44057f6fe0952bac30055d6d8b55d4f4f0c6559ad5dbf78783e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-win-x64.zip\",\n            \"hash\": \"1d486895ecc1c99586a8dd221a1a21c507ce42eaf4262345f93f0a2cae7e23733360b742f2d5b803c56a1199cb00ca20a5ee5c911d63118e1930e07068a7cccb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-win-x86.exe\",\n            \"hash\": \"2a2178fa7a4946c350c6c9ddc3fcdd9713a2130c2ba4f6d46d0350de8793f43fc64cbde4d1b40fca691591e68ffdccf0b915b48797315e5e3d794489e95e6c20\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.15/dotnet-runtime-8.0.15-win-x86.zip\",\n            \"hash\": \"b9980345c84443381b92d8d3c56a90244ec90e6f7edfbf09dd665b29a807705592606997e7e85bb7f6357f49feb5aa41506ec1426a4208352a326736bda6c441\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.408\",\n        \"version-display\": \"8.0.408\",\n        \"runtime-version\": \"8.0.15\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-arm.tar.gz\",\n            \"hash\": \"9686fc37b42a322e8acaf3991f68837cfef10a41aef323286331e63123ca34a9367bf4274dd14ce019ca37345d6d868cfbfe4fbcd353f57fd3035151b97983f9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-arm64.tar.gz\",\n            \"hash\": \"99a03d7105c14614a1a8d69673a9278315ec762096b302c7632745b3890a6d2d801df7c1f185257c9af0374ae840b942a8b60dde0eace68abec0b6962fd9213c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-musl-arm.tar.gz\",\n            \"hash\": \"ff8a2c996da12add674d8e44cae7e287133c07a35fe8c1a314e85140c449dbc896452c718e43127f5528c75e1b8940feb375f47452324132e419e2460ad372ef\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-musl-arm64.tar.gz\",\n            \"hash\": \"eb8716cbae1d1fba2170c925aa32e4d78e00df67ce5d7049e2252627350551dd06e5f0c79a548bf04d28e561e76d87994e1550133104e534903772b7e44b33a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-musl-x64.tar.gz\",\n            \"hash\": \"0ab0c0d52985bde69b594454b5e1d9e1a6e003159656ee2972058d2960cfb0968dbe4d470d8eb21dcea41ff594976520e189a8e13afc44a419ca08e456df36e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-x64.tar.gz\",\n            \"hash\": \"a9a1e54d10a37f91e1bd9b2e9e8ce6ed31917559898e4d6d36296bd5324f67cc7a13a9106703003cbebc5a7ee50188747ba816f5d828c0cb3a4a9f9920ebac4a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-osx-arm64.pkg\",\n            \"hash\": \"7022d8102cc7d37bc25bdaaa8d998676e16c45f1cb6fe0c0d071f600d88b41d9654b288f15d8b93b2b19f50789bb54d7b1f916c9056fa779c0cbceac42ccc4e2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-osx-arm64.tar.gz\",\n            \"hash\": \"cec76e2598460fd0367a6d810cfad31dce7e64f52cb6471e05d9a69725827920c446015efaf4d11cd934884a6ba6bd90b8a872b4407cf518dee291d8006b2106\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-osx-x64.pkg\",\n            \"hash\": \"38fb87c7dd5571c71cf4ecaca3d5f87f4a629bd06a1dae0413a1ffffc40a5e3fad251243994d972d8ca3eb81b6ef1a42d298a21ae2b98bc013f083e8964819c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-osx-x64.tar.gz\",\n            \"hash\": \"77f536f65f5dff250e903abe560505955bbe4d6a7e5aa101c9711289d19b68ca318b7a03e536a396c912c6e75659205800ec916160fac4bf2007677f2e3ed36f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-arm64.exe\",\n            \"hash\": \"98232770e79f60dc35b3b753f875c7ec333728ca994ccd84388ef370c3599787343a8b11e70275f4d27ece10c8d9b640be572f321a4c3432b6225b092e903319\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-arm64.zip\",\n            \"hash\": \"d20039dbc61d684a5fccc081d9112c59fe36024831f32ed521b9bba0198e19a2d698a8fc113825f46ceb0d3c96e7de663eb8005ebdcaa48fbf2cd09467428762\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-x64.exe\",\n            \"hash\": \"cd2065a0cd00cd5953fcd08253082484cf8aa8b7a1305d79b2c7ae963f78652faac5ddf12bc8721addd2e23a105e487c95d6f2186818dd4665c4abe324d61bb7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-x64.zip\",\n            \"hash\": \"49ff4363663d28b8f55b7af4cad4cb469cf9ff1bc6e826117b2381180a7c5e7c8d5aaefd02c7b5ae06c87609816858bbf554c68a8308ac6260d3d5b432123272\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-x86.exe\",\n            \"hash\": \"3da6032fc1352508f982fd81f2cc9e78127e4b678d08d2683b4a982ed52cfdd54a379223bb9c46e01778b8a01a2ffa0bf49e504b8c7500e426e4257adc1394f9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-x86.zip\",\n            \"hash\": \"6c7bb3c815cfcf8640448299b00dabc58fa6f074c6d3b88bcdeb79dc01c165e63df2ae26fcb566a0e7bb9477140e910fc1d2d19b495a4d2127b90c2344ff0752\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.408\",\n          \"version-display\": \"8.0.408\",\n          \"runtime-version\": \"8.0.15\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-arm.tar.gz\",\n              \"hash\": \"9686fc37b42a322e8acaf3991f68837cfef10a41aef323286331e63123ca34a9367bf4274dd14ce019ca37345d6d868cfbfe4fbcd353f57fd3035151b97983f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-arm64.tar.gz\",\n              \"hash\": \"99a03d7105c14614a1a8d69673a9278315ec762096b302c7632745b3890a6d2d801df7c1f185257c9af0374ae840b942a8b60dde0eace68abec0b6962fd9213c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-musl-arm.tar.gz\",\n              \"hash\": \"ff8a2c996da12add674d8e44cae7e287133c07a35fe8c1a314e85140c449dbc896452c718e43127f5528c75e1b8940feb375f47452324132e419e2460ad372ef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-musl-arm64.tar.gz\",\n              \"hash\": \"eb8716cbae1d1fba2170c925aa32e4d78e00df67ce5d7049e2252627350551dd06e5f0c79a548bf04d28e561e76d87994e1550133104e534903772b7e44b33a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-musl-x64.tar.gz\",\n              \"hash\": \"0ab0c0d52985bde69b594454b5e1d9e1a6e003159656ee2972058d2960cfb0968dbe4d470d8eb21dcea41ff594976520e189a8e13afc44a419ca08e456df36e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-linux-x64.tar.gz\",\n              \"hash\": \"a9a1e54d10a37f91e1bd9b2e9e8ce6ed31917559898e4d6d36296bd5324f67cc7a13a9106703003cbebc5a7ee50188747ba816f5d828c0cb3a4a9f9920ebac4a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-osx-arm64.pkg\",\n              \"hash\": \"7022d8102cc7d37bc25bdaaa8d998676e16c45f1cb6fe0c0d071f600d88b41d9654b288f15d8b93b2b19f50789bb54d7b1f916c9056fa779c0cbceac42ccc4e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-osx-arm64.tar.gz\",\n              \"hash\": \"cec76e2598460fd0367a6d810cfad31dce7e64f52cb6471e05d9a69725827920c446015efaf4d11cd934884a6ba6bd90b8a872b4407cf518dee291d8006b2106\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-osx-x64.pkg\",\n              \"hash\": \"38fb87c7dd5571c71cf4ecaca3d5f87f4a629bd06a1dae0413a1ffffc40a5e3fad251243994d972d8ca3eb81b6ef1a42d298a21ae2b98bc013f083e8964819c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-osx-x64.tar.gz\",\n              \"hash\": \"77f536f65f5dff250e903abe560505955bbe4d6a7e5aa101c9711289d19b68ca318b7a03e536a396c912c6e75659205800ec916160fac4bf2007677f2e3ed36f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-arm64.exe\",\n              \"hash\": \"98232770e79f60dc35b3b753f875c7ec333728ca994ccd84388ef370c3599787343a8b11e70275f4d27ece10c8d9b640be572f321a4c3432b6225b092e903319\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-arm64.zip\",\n              \"hash\": \"d20039dbc61d684a5fccc081d9112c59fe36024831f32ed521b9bba0198e19a2d698a8fc113825f46ceb0d3c96e7de663eb8005ebdcaa48fbf2cd09467428762\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-x64.exe\",\n              \"hash\": \"cd2065a0cd00cd5953fcd08253082484cf8aa8b7a1305d79b2c7ae963f78652faac5ddf12bc8721addd2e23a105e487c95d6f2186818dd4665c4abe324d61bb7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-x64.zip\",\n              \"hash\": \"49ff4363663d28b8f55b7af4cad4cb469cf9ff1bc6e826117b2381180a7c5e7c8d5aaefd02c7b5ae06c87609816858bbf554c68a8308ac6260d3d5b432123272\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-x86.exe\",\n              \"hash\": \"3da6032fc1352508f982fd81f2cc9e78127e4b678d08d2683b4a982ed52cfdd54a379223bb9c46e01778b8a01a2ffa0bf49e504b8c7500e426e4257adc1394f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.408/dotnet-sdk-8.0.408-win-x86.zip\",\n              \"hash\": \"6c7bb3c815cfcf8640448299b00dabc58fa6f074c6d3b88bcdeb79dc01c165e63df2ae26fcb566a0e7bb9477140e910fc1d2d19b495a4d2127b90c2344ff0752\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.311\",\n          \"version-display\": \"8.0.311\",\n          \"runtime-version\": \"8.0.15\",\n          \"vs-version\": \"17.10.13\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-linux-arm.tar.gz\",\n              \"hash\": \"e9f1287fa047d020e5efa69ea6cfde76574f90d8be7d0623e450e9b785a01d6c466e9a5839bd250159dfb636a2a7e6919aaae7f0427aabe451140b32fa6f2d3a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-linux-arm64.tar.gz\",\n              \"hash\": \"7000ce5547daf88a7133b3a92e6b628d39e3159adf588be8141cdf0d116d1016db129fd81680a13f2e01aade372cfb89eccc232719521d5fa3e7bdda0af1fe39\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-linux-musl-arm.tar.gz\",\n              \"hash\": \"c2cbe3f026c4dae537f6fd0bb6d8bd094889bd823b3e1bacadf038322404224618d40d7efa670f90a40749688efab57646587581e758b35230157316e07aaa6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-linux-musl-arm64.tar.gz\",\n              \"hash\": \"681e294ca5c19c4622399911a32a45d427e3a43354df97f97ca167a8999e62d8799237051216e94968da2f6a14dd15b5eb6e2cc57f8ac33710793ce7ed017e02\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-linux-musl-x64.tar.gz\",\n              \"hash\": \"c97bf4115d8d6dee80717a489d152acb27f89116e9e57e5b2ab13fe961279d99ad3c0f130b498abe0bfd197508fd36b9b69663fa2b10a492bb886fce886ef4df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-linux-x64.tar.gz\",\n              \"hash\": \"7253306c34a0be2a059414cf8e741611e50644263c9e223a7f139447b7f757abaabfb37155a339346ea03debed70b4143362f40cf9b2617c6bd851ce307512e9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-osx-arm64.pkg\",\n              \"hash\": \"c2623ef7381a87687f9d7b1bf33fb7e9f55750978aab49196651328abb9cdbfaae1c6df7b555548c28a7eb0d57c916ba64f0aa07a21b43f58831f32c119c0579\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-osx-arm64.tar.gz\",\n              \"hash\": \"902514cf3c2f1754b2e8edfb16e275eea2c36b2e2f5a296010832c0efcb046e6d6fc8b6233c5f20a0b0727fd612bfef05571bfaea7b39d8b49ee485aa8cf3221\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-osx-x64.pkg\",\n              \"hash\": \"1ef65b2deaa709ac1ac8313f7e05e9a3688f66d9dfe6a276f64f2a7d11cce6ea28b261d8a5ce5ec1aa8e62d51d32bce80f081664486164b75eb3320b341fe9c1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-osx-x64.tar.gz\",\n              \"hash\": \"296bc7714f7fc68325af1ba9a4f09b092bbacfad6856b5546b6be05cf4e4c1248d7a6e667bd0194ece926e837d306f6d2337c0848f10596788b59ac623892943\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-win-arm64.exe\",\n              \"hash\": \"ffeb27dda114a4a1d527a53aaf4d487dea4c6eb25a937930001887a6875d61f4df967cf1539c7674aae5526c9fda24dd0290c786e59fe970c0c6704069be81a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-win-arm64.zip\",\n              \"hash\": \"809349cee6d250c978b683433270c299de73d3c2c16d56aa348e18b2f4ba0c9d13be02a15e981cf59fe13a4f317e6f7a2ff5720176f08699868ae1d5e2cfd80e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-win-x64.exe\",\n              \"hash\": \"20e6a4fcd0e3f0a8bb1788a9735db928e8c543b054b4df03f4236924ab69faca25932f7954393cbb3c94c0a1511377e439ec11504a6b3f25e8d237553e439da5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-win-x64.zip\",\n              \"hash\": \"0db638c0d5b229fd3968ab6365bf96e58ccb578837ead5c799c53bd2f61978b7003af44db05caea41862019f1a7f8e31dffb774d468360075d7ab7e8b9cd00de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-win-x86.exe\",\n              \"hash\": \"42519f50aacbaaa4259434611a36b0fe9dd3b77bad82fb553b83cda9101a9f5f543344be912c107d151c75c1996c6cc534ec8da409bc0f2d1aba2cb96310ec0c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.311/dotnet-sdk-8.0.311-win-x86.zip\",\n              \"hash\": \"8f6b1947b765e69d60281f2f722cc1bef8e6aa66847e7662efbcc129873da74935314acddb4b3545bfa91ac75a28364b01d2cb1f2a8f3e6dfd479431f7e4386a\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.115\",\n          \"version-display\": \"8.0.115\",\n          \"runtime-version\": \"8.0.15\",\n          \"vs-version\": \"17.8.20\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-linux-arm.tar.gz\",\n              \"hash\": \"755c0cc9d3dcda69c8048e81a0aad92b23dc22f8321d04721d5490d66820473622937b2209f445792641b5c4238a24fcc06e31f9e290106ae2f3883bf32e3fc8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-linux-arm64.tar.gz\",\n              \"hash\": \"d8774de78d567157b1808fefacc919529c41175ffa46886d25e1473689c221643c0f893edf37846c6d6fe6b7cf408676769170e8c613c80eafdb67892ef6c570\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-linux-musl-arm.tar.gz\",\n              \"hash\": \"7b3bcca17aa1323faab10b39a281a1820d209d5bf47a5fad8822d137f202cded4e3c772f67e3e5b3757891556eac0d5d94ada1804c2abad7b11e5ef03bd4fe6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-linux-musl-arm64.tar.gz\",\n              \"hash\": \"d48a0af7bde5eeec7c5a24f62973a40d4d10e69ec1bde1e922cbc80dd8c9ba5a589e7ae08c4838b7fc3f7e2fa8b92f5bd9330eb1c5a7ac2e5344f6e915bbb7e2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-linux-musl-x64.tar.gz\",\n              \"hash\": \"f39811af94e5d2ee2787c07bda3624a713c98d15f2134ea9765f8cf9e65427d8f38fd9aeba17ebd936e3566c26a011e9c4b5806ce7ba3dfdc0cc6a7ce96d307f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-linux-x64.tar.gz\",\n              \"hash\": \"f3afa0c37fd0481f78eacbd8f326af665c4e6594067edac130996f50c527370cc2439d1a94843dccc2e3efdb3c446e6183496822ddfb68326577f26a804eac53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-osx-arm64.pkg\",\n              \"hash\": \"40255339383c7bb178db721eaa2355462ef4856a57c0ac889e18aeacd45b32a949646b573dc9ff7e54221360e7dd30934dbf26abc889651ed5ad36da03627f64\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-osx-arm64.tar.gz\",\n              \"hash\": \"2a12f510a771676863b423da9d283d619fe103e2b4c372b758d956320be6cedb8a4029bb5a46c8ccda4ad0a1ec24be22428e92de4a537209f2b2c354dd48b24e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-osx-x64.pkg\",\n              \"hash\": \"600314da4eff30321c8a81c4ec365f74ee5cad052c65aa84b26bac3a039e887f7f5c9838a8b10aa0e539a6eb8f42cb624906b8004b469158a9f819bcd6bdc57d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-osx-x64.tar.gz\",\n              \"hash\": \"d748da7b91d574111ddb487865a2cf3659e1f75113ee9cd8676bc3e402956c145fa551955f6f4f9517b2caae98f4c6985424acffe5a80a2bf62504cd6cf54383\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-win-arm64.exe\",\n              \"hash\": \"bc67e9bda55cb05e952a91bfd86c0f7014da336e1509d15edea547dd9fd851770114b8c14af07bb28498026ba9ac76b46683df6683c61b294dd917095a4d5714\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-win-arm64.zip\",\n              \"hash\": \"0e5841fa4b8aaba72e0340b993f0027970aa80513abdcb094dd288053d0719b40cc8830f48291ea200b5effe0ba7e268cccb28397b0936d38368947f35456051\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-win-x64.exe\",\n              \"hash\": \"60e7a54f6dc5f1faf1f600c024543eff157e95aa7a3fc2dbfbae27be83b8948945aa71df6144e176e985807aef932aa63bbe86c63415e5a42be5338b88464487\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-win-x64.zip\",\n              \"hash\": \"3b0b57a031fd1cf42fc558ad8371045d8abcc9f6ae2406d81e5df0fdfa1b24821328b6dfe790014d36b5b3503f9bb8a36c5b41168b33b58c55946c5334651aac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-win-x86.exe\",\n              \"hash\": \"54eaf2a4ee2b122bf23b73a8974c1c19fd8470ac5bafe543a8e0a4421ea95e2f5758703f12a0ae9bda4914b0793d07d94b78315cff6df948df97df6a83a96810\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.115/dotnet-sdk-8.0.115-win-x86.zip\",\n              \"hash\": \"733b4967ac977d65b672738da661502ffb1393d4afeb9ca5841abd26d3534467b6611eac9d0dd9d8eb1e746f42dac7107c750cee5f144d7118b671fdf5eceecb\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.15\",\n        \"version-display\": \"8.0.15\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.25074.15\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-linux-arm.tar.gz\",\n            \"hash\": \"0995e596c1fd02f5e89a7f695b93976af253841ef30fe83a05310a3fcf4e069692c5620e80355dcd3fe6ae32e7b5adbae0bb3f0ff35e334c2f28f14c44dca6ef\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-linux-arm64.tar.gz\",\n            \"hash\": \"967d43a9387d226ed804cfee35144a69f249f6206b73ed0d8915dad358fede3c5ddc3ec963a5c35400b62dc57265da1dbc07d793cf5e3940ce94e54783312f0e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"fd6890890dd0fccd13d817011e536214dded1b0d18eacd346954751a4642e0d6e5bcdcfaa485964085f5700f41ca009bd94f948ffce705a21ffbcc419ca2daa3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"025b2cc23591a1475755fc3b321e7d05aacda34c5616170eb47e4842bd978a4636d47d87c0666dadf7592ffd82db59427bcef953a0a5d1842d8c321d01c01e6e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"af6f6d7f84b404f44f2f3322407b68f3962ddb06a0ea57db7713cef21980ad379919a2035c60aa7b028d0720381f5965474b64446c9b25a9e58289631e04c15a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-linux-x64.tar.gz\",\n            \"hash\": \"3ca5669d4aff60f1bf8cecb99de05d6b489db150caa7c184d1a8bcdf085c611533e05ad7bd0c5091c726850611cff6b0477ef9b1dbb192ebe9055c03de1cf6d8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-osx-arm64.tar.gz\",\n            \"hash\": \"28dcc5503e6eb767a655e67f69ddd2800d19ceebf595cc538aef4a567bfcb6b2b1058d9a3de2bdf7f1395eae2b8c485028d5c67ee9c70b9ab0158ab0e08fe85c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-osx-x64.tar.gz\",\n            \"hash\": \"54acf78b42145b4686ab55c1ae47ffb1365ecdcbe77185572ef2825fde9cadd111b526046d5ac402cbb046b7bc09880d87b56f20461fc475189ac838e753a55a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-win-arm64.exe\",\n            \"hash\": \"2692d912cb3f8698b7ffbbcb94bdd34107367b4eb485d4a62966b0f355b65ac0ef7cb051de5f7a4fcc67b82a6eaaf2089c7b00d7e24259088086512f0c9a194a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-win-arm64.zip\",\n            \"hash\": \"7a1f4408d6f33f0f27d3257c09ed08f599b010145dac1f0b9ab43b88bea2ff338105a18d13b5fdb4d3ada63b4bce09b1bd9ca1b93eed0a67047a967707b064d8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-win-x64.exe\",\n            \"hash\": \"e17e74f598030bc3a3f5c3cf8b6bb8f7873fe19a79deb70822dcc3aa7d5fff8dc0a77cc5a1833df9168ec634dacb7adb2837203bf75bc99d082b70bd678ef7ab\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-win-x64.zip\",\n            \"hash\": \"f2edd342af9fb031a28cd0257454463080a8429769504952b6f35d869de0d23585733efebd13d2c676e235928bf26ae5d860397c566e7f9a318a8ed450d4cdde\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-win-x86.exe\",\n            \"hash\": \"6e10ae6deaddf36b08900cffb7d55d9f1a7a66cb9b96d4a45e75abe64e178f61adfe8c2ba1bfd5ddad69634355283cd4ae35416d2367b545dda660f52905d991\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-8.0.15-win-x86.zip\",\n            \"hash\": \"ea5fa0ac7e8a9b3cf68adb6801ddd62795df3ca4afec33d508b34f21ad1afb950d5a457edf6e09dc3e501170c83b11250178e808a8a1b09f619c7ca6de74eef3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-composite-8.0.15-linux-arm.tar.gz\",\n            \"hash\": \"0312e48f6a79fa2536b3a500da1ec860db53e8e8853d96fc9b04bc4c0a4df58df2a3a357e9710fea1b98d332d87bc625c92f32439959be3c79f9c6d8fce7afb0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-composite-8.0.15-linux-arm64.tar.gz\",\n            \"hash\": \"66869d4aa483299c765d3ac1bd1a4062beb6d8730cf3b7737954ff225eb94253f15b4dc0e5ed6fb5569ae4aff89ff676033c39969279d6a088cdc981063f06e3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-composite-8.0.15-linux-musl-arm.tar.gz\",\n            \"hash\": \"04b084d354d81ea3faf153b7facda8312c8d9e3dd0ae94a4e3d08c1fb1cdb8063f7ecdeba97aef7b0f589f6d143ece2c649413c90aab927ca447ece3a02ec642\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-composite-8.0.15-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9c105c7e65a99d4e2ddd709f5e70fa2ab981b094b4271a2725ca5668c98249c401eb002c8746c85fbd7223d33987aadd8fbb675302e486d238b104333a948fbc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-composite-8.0.15-linux-musl-x64.tar.gz\",\n            \"hash\": \"3f10fdd133879ba6d59f498135aeda4198877f6fb6473fffff5bd9a93a835f8cbd6c3e36f27fe3cad041b46ac3aeb77f0e56762736ab192448832dd15703292f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/aspnetcore-runtime-composite-8.0.15-linux-x64.tar.gz\",\n            \"hash\": \"ab8df98193760e85f25511bc09127815bd6063e966683314a76c2931f6e410c5c73c1c3e4974b5e287ce93cc89545c38fa1845f1d521f2678bba36c16a9aa0ee\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.15/dotnet-hosting-8.0.15-win.exe\",\n            \"hash\": \"37d493d735706ca5b5f11ada00088cf21e4720ca954d91270b2d6fda749c783fea1d5d5fc58a3eaf6002822ed68d60085d63ad6445017c1ab33de082c57e2dbe\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.15\",\n        \"version-display\": \"8.0.15\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.15/windowsdesktop-runtime-8.0.15-win-arm64.exe\",\n            \"hash\": \"17c7ab6726c93d5e85a8f2d808ba64f42531f38d7dec65af1f3dd618c53103273ac129dcff33bb1689f8a4e45a5b252c0ad430ce3adfaddba93695276d757344\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.15/windowsdesktop-runtime-8.0.15-win-arm64.zip\",\n            \"hash\": \"5691c333a87beec863b433b4d2f4e002bd91e92ae3715b1c13d11288292ad95c3ec42998bbf3c8652ea4a3e8133c088a52c09746d1446b73d4c138d904bfce67\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.15/windowsdesktop-runtime-8.0.15-win-x64.exe\",\n            \"hash\": \"c5f12718adcd48cf8689f080de7799071cbe8f35b0fc9ce7a80f13812137c868004ccd5ea035d8e443216e70e15fdfcf013556c7cb3b1b02636acb0323b3574e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.15/windowsdesktop-runtime-8.0.15-win-x64.zip\",\n            \"hash\": \"be1867291132136d0ed26d3cbc267691939287fa653f41d28f61af5511bc8c91de0899673aa50132d9999d607a364da20c648da96a971687d392df4066ca2c0f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.15/windowsdesktop-runtime-8.0.15-win-x86.exe\",\n            \"hash\": \"74b104a49fb956d5840a2e64e84d82214fe1b18ae043be8a55d9a01450f34ce1b8ba562e990eea9e69a65f0f95573d9ea26eed48232bdba2be28d1c330143804\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.15/windowsdesktop-runtime-8.0.15-win-x86.zip\",\n            \"hash\": \"44a014b6adda63a48a48d0f12a215803b27112463c973991670997f3c8974224a21832d0ec22567d2a869bb0b6553c569ca5f9c6509df15729a47c78dc10a3fc\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-03-11\",\n      \"release-version\": \"8.0.14\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2025-24070\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-24070\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.14/8.0.14.md\",\n      \"runtime\": {\n        \"version\": \"8.0.14\",\n        \"version-display\": \"8.0.14\",\n        \"vs-version\": \"17.8.19, 17.10.12, 17.12.6, 17.13.3\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-linux-arm.tar.gz\",\n            \"hash\": \"6bbb0ef4d8857ebb9bd9710fce985af61ef0494ae7949ec2b01d8951b15306bcb9ec4e8e45ead8013828dfa92e9394d6beb01ad5fc4c6ae2a3fb9916476b1661\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-linux-arm64.tar.gz\",\n            \"hash\": \"519b6d0a613b1ad3f76cd8316c29dcf4a94f605e3685ffa979cc632b32666cc9b37a08a84a8f9b22dba8bd63112e5c65386ce4b75a8f8df50c528c3a1a395295\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"4f071b8e53c8046037bdc945c8dd61955df074820e8e7bc3922a97fe1bcc9574635c9a0aab643d5d4d5b8928de12d14435bd6eb097c189bd850d4f704dbbdadc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b428b6d54414af5147bb6a806f978945540b1adb36a5d432d94dedeb798e2cffa279cdf327a5464357743b526700487aef7e6b118ceecd9d4b623400b04ae5db\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"f9ddf59984ea9692a624ca1e7af2783693c564979eaf460dd4fbb3b72070faada1ee36a20895c492c886f061abf0dbb8327b1f8e0581cbe4991666f092b09789\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-linux-x64.tar.gz\",\n            \"hash\": \"5b7c7300dd30084650a2265b6618f366f099dff2b292482e5e05f14f3a0b0850c658ecf383683e1dce4e753a616fd2e3c169c1734a679afcc4c0cad488b9f8a0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-osx-arm64.pkg\",\n            \"hash\": \"f0e3a41fc8931b18b709ecf9cb9b50bec4efefbe7ec17bfa9c1d0f72f69244fee61ced63517fea81bc1b76e22ca66b198d4d336ba6e00b0cb34c27228e57b266\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-osx-arm64.tar.gz\",\n            \"hash\": \"9a977973f04f35d5d634240174beed3a5eb7821e905422249ee94972b96948252843620782569d9f886b77d7d6ab3f34f555d11c51b1133e4437c0398c14240f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-osx-x64.pkg\",\n            \"hash\": \"2be5e088a2517cf10cf1a7ef54ffc2c207c7bf6e648509155bffd813489a5b1edd817b4ab21701d29e66cc5dbfe1c25fe0d1b19f6b82be621dcc43836945f0de\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-osx-x64.tar.gz\",\n            \"hash\": \"110ddc273596770b1e638a7b2464b49c6abe9bbcc1241e4447c949ba1d9afe01e9564d9de7485281b5de2c6c22746d6156d2193332b8d212bffa42dbba54e831\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-win-arm64.exe\",\n            \"hash\": \"10ef4653df9deb4d7f93b82d3e75061dd9ba7b557eed4a96e9244688bd9857856094e6d39c6534c563df8bb59dafc3439d5a67fffaef65abf6dc506a0fcc8405\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-win-arm64.zip\",\n            \"hash\": \"e56db3ce4265b1018347ab3df813d10e0d575e90548eb237050bbf9c7e5c643162af880d27f00af68b855ef351b91555d4a97a7a61508c1a8c10ac42708f5f3e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-win-x64.exe\",\n            \"hash\": \"13509b15a1b4a3823d6165792fe124c41beee4e4d265fedb0b1af96da47e400d9c5f5521aff60c6f8e1416e3d3e1f4a90d814b8fd2c2821871f2f1079f1be6a0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-win-x64.zip\",\n            \"hash\": \"217e502f94d5e3dc712b34248ab512d98cc53f06f1b629ee67ec638db3b7542cd9f662d930e98e4d9e898a3a81854f6cc7b09bf5a6bff22f52c5855d0d4621d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-win-x86.exe\",\n            \"hash\": \"d41465810c015a71f34103b60e988b65146de0bb32df78adf4ca7ab9b06ce33d183ec1d2d854a8b7b6b0c83ad8bba4ab0b709f54612ccfd854928992fc2ffbde\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.14/dotnet-runtime-8.0.14-win-x86.zip\",\n            \"hash\": \"27cabd682580b93dd47a7b80ff375553572bcdeec5e56683c515fc4ac22f8fed72dab4178bde27ee1ac94f1837e3450ecaec8e05371fb729dc6baa97152e0a04\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.407\",\n        \"version-display\": \"8.0.407\",\n        \"runtime-version\": \"8.0.14\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-arm.tar.gz\",\n            \"hash\": \"48c35bb13cc84b8eba0968554832102f190e94e9ac3e14f66c581496dea06a0d7f8b56fc037d5716e04250f254316e35bfc1035f37bedbf7ffc5cf872783334a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-arm64.tar.gz\",\n            \"hash\": \"7d98bb536c899de6c5612b0543def3a76c9a24f59a0fc2b32671e1e98063c6fe17fe70afe3baee38f074d0b47eed577e989d6d07f41f77602678b4eddddeda0b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-musl-arm.tar.gz\",\n            \"hash\": \"a416bdc19496c1a8782fb1cbc9687fa39a96aba56e37c005c1b0b4d4019e4167a292def15aeb3b65c251d17ec126bf1a77379891d417977a302c3006140c192a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-musl-arm64.tar.gz\",\n            \"hash\": \"decc5010994cbe14f14089ff2e01492700b720fd4b4dfdff54ba11955b193775b39270dabb310e290a7c371e2f2978a10241067911dfd0e7d67b699a6cce3559\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-musl-x64.tar.gz\",\n            \"hash\": \"a1d5b660f9f43fa9b83c3c2cfe54b37f74b8f4e6c8a00ac6f0fd3203858e82f3e6f26d98cda8ee9c9c523478db3260848eebaad15b28694b23a1d492663b299c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-x64.tar.gz\",\n            \"hash\": \"eb62153ecc9e53a5422ff44f1c6966a89ee442a91f779e971aaa47ad6a66bb131af9b38e4ca012567547b9357b72b0476b77d2b7399a38a9224a8e6ca02a8155\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-osx-arm64.pkg\",\n            \"hash\": \"c7a5095a5f6f2532e3fb0147f1ed1c4e85ecac78da67f5e31ce3457094a7d38d14e8cfa063505fdb17815bad59b74d7fbb45af6cee657b92c2c7422b57c76085\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-osx-arm64.tar.gz\",\n            \"hash\": \"1e0c8debe348e7e6dc3fb747207e94b5b8c526c9bad68b4465449b8c7bc2ab2259cf0444afb3946609947f960b29729ce58ab07b4a89abdb85c03beac3b99dbf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-osx-x64.pkg\",\n            \"hash\": \"da135ca6ce5749ac0e5f44b49edb73ddd0262b23821be712c8aef2dc985755809dc6b021fe80c10a034e1c51d8f3eff45667a383521e1b3d03655da2c8db0f00\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-osx-x64.tar.gz\",\n            \"hash\": \"6915935cf037ba580aab75f05ecb83aeb2322186909608ebf2b8713d5bf118833ac6e0e08eee075a4dc40ddf5fb8863251e9779906db31de6f3c14b41891f505\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-arm64.exe\",\n            \"hash\": \"4c69db5b2ca1539a9a12ee7a9a5fc0cbf5bdce06b96b9a8c27f14036102866efb449bdf12c7cc6f0e1b83c8f11c8e03a0777b4dddf665a7752d750b832d8f012\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-arm64.zip\",\n            \"hash\": \"153ca419ed38d745ef1c4b27dafc56835e27248a55dab8ba060d47f3e18eb3be99bc0a584971c34c9194920fe7aea96f0050295e1740aea77e5502c295ca7f1f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-x64.exe\",\n            \"hash\": \"5245bf8a506798b1373b84bc9c3ecc45d58a662fd8c840be082f3ed13567eb8fb52a21954ded8e2f65226342ab0cf406a016f7f98a29b08c62cfdbd9367c0d46\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-x64.zip\",\n            \"hash\": \"c36431c5f6fc2b4fc6ed983b33f4ace2b3d9062afafe83e4a17f8e58745100f1714938e62529d3011cc02b4ce5c63db9c9cddf438008aa6e5b4f77507772acb2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-x86.exe\",\n            \"hash\": \"4102dcfe9ff264c2843f757993d04f226e96d8b165e208e75408619da4100e0d0b77b86be225d9742f16f69d9d20208743b08246a59c03d188a9234b8a7cd45e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-x86.zip\",\n            \"hash\": \"026ad4bd93818c5574ca0e6972cf4ce20ed9c6170907d86eba038829958845def5c5673a1c282a328eb9c8724fb2f78a50ff54e2fc044f14e6e5f577667e167c\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.407\",\n          \"version-display\": \"8.0.407\",\n          \"runtime-version\": \"8.0.14\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-arm.tar.gz\",\n              \"hash\": \"48c35bb13cc84b8eba0968554832102f190e94e9ac3e14f66c581496dea06a0d7f8b56fc037d5716e04250f254316e35bfc1035f37bedbf7ffc5cf872783334a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-arm64.tar.gz\",\n              \"hash\": \"7d98bb536c899de6c5612b0543def3a76c9a24f59a0fc2b32671e1e98063c6fe17fe70afe3baee38f074d0b47eed577e989d6d07f41f77602678b4eddddeda0b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-musl-arm.tar.gz\",\n              \"hash\": \"a416bdc19496c1a8782fb1cbc9687fa39a96aba56e37c005c1b0b4d4019e4167a292def15aeb3b65c251d17ec126bf1a77379891d417977a302c3006140c192a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-musl-arm64.tar.gz\",\n              \"hash\": \"decc5010994cbe14f14089ff2e01492700b720fd4b4dfdff54ba11955b193775b39270dabb310e290a7c371e2f2978a10241067911dfd0e7d67b699a6cce3559\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-musl-x64.tar.gz\",\n              \"hash\": \"a1d5b660f9f43fa9b83c3c2cfe54b37f74b8f4e6c8a00ac6f0fd3203858e82f3e6f26d98cda8ee9c9c523478db3260848eebaad15b28694b23a1d492663b299c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-linux-x64.tar.gz\",\n              \"hash\": \"eb62153ecc9e53a5422ff44f1c6966a89ee442a91f779e971aaa47ad6a66bb131af9b38e4ca012567547b9357b72b0476b77d2b7399a38a9224a8e6ca02a8155\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-osx-arm64.pkg\",\n              \"hash\": \"c7a5095a5f6f2532e3fb0147f1ed1c4e85ecac78da67f5e31ce3457094a7d38d14e8cfa063505fdb17815bad59b74d7fbb45af6cee657b92c2c7422b57c76085\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-osx-arm64.tar.gz\",\n              \"hash\": \"1e0c8debe348e7e6dc3fb747207e94b5b8c526c9bad68b4465449b8c7bc2ab2259cf0444afb3946609947f960b29729ce58ab07b4a89abdb85c03beac3b99dbf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-osx-x64.pkg\",\n              \"hash\": \"da135ca6ce5749ac0e5f44b49edb73ddd0262b23821be712c8aef2dc985755809dc6b021fe80c10a034e1c51d8f3eff45667a383521e1b3d03655da2c8db0f00\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-osx-x64.tar.gz\",\n              \"hash\": \"6915935cf037ba580aab75f05ecb83aeb2322186909608ebf2b8713d5bf118833ac6e0e08eee075a4dc40ddf5fb8863251e9779906db31de6f3c14b41891f505\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-arm64.exe\",\n              \"hash\": \"4c69db5b2ca1539a9a12ee7a9a5fc0cbf5bdce06b96b9a8c27f14036102866efb449bdf12c7cc6f0e1b83c8f11c8e03a0777b4dddf665a7752d750b832d8f012\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-arm64.zip\",\n              \"hash\": \"153ca419ed38d745ef1c4b27dafc56835e27248a55dab8ba060d47f3e18eb3be99bc0a584971c34c9194920fe7aea96f0050295e1740aea77e5502c295ca7f1f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-x64.exe\",\n              \"hash\": \"5245bf8a506798b1373b84bc9c3ecc45d58a662fd8c840be082f3ed13567eb8fb52a21954ded8e2f65226342ab0cf406a016f7f98a29b08c62cfdbd9367c0d46\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-x64.zip\",\n              \"hash\": \"c36431c5f6fc2b4fc6ed983b33f4ace2b3d9062afafe83e4a17f8e58745100f1714938e62529d3011cc02b4ce5c63db9c9cddf438008aa6e5b4f77507772acb2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-x86.exe\",\n              \"hash\": \"4102dcfe9ff264c2843f757993d04f226e96d8b165e208e75408619da4100e0d0b77b86be225d9742f16f69d9d20208743b08246a59c03d188a9234b8a7cd45e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.407/dotnet-sdk-8.0.407-win-x86.zip\",\n              \"hash\": \"026ad4bd93818c5574ca0e6972cf4ce20ed9c6170907d86eba038829958845def5c5673a1c282a328eb9c8724fb2f78a50ff54e2fc044f14e6e5f577667e167c\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.310\",\n          \"version-display\": \"8.0.310\",\n          \"runtime-version\": \"8.0.14\",\n          \"vs-version\": \"17.10.12\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-linux-arm.tar.gz\",\n              \"hash\": \"b512b53ed94d21284649100ad48b0075be0010ac4fa7302bbec0f802e3d473590b4dc25bdec2b282c613b3c3cdb6e84cb1eb2411be7661388fc051f0610f8e5a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-linux-arm64.tar.gz\",\n              \"hash\": \"d80b74c6986af20dcfea39daa7732863c9718928d21ab6eada74c3f1629e3eaaad98ef48f13a0e969ae1a35e355335e3b46685f5e5679454570312e3cb4d3e60\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-linux-musl-arm.tar.gz\",\n              \"hash\": \"1660f12c0fffb6dafa4c182f3190a0d85310cb4e423683671e73854b7eb8ca9648590d63e647f7f92b48fa63cbd6cdff4bca772e8ef89f7710854697dd154476\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-linux-musl-arm64.tar.gz\",\n              \"hash\": \"0f5976d9b4d9f06e10c5fa2ed567b72c53a7702e146cc6a6160b8e5e9c34043a3e430edab4bd0750ea0b9139031a8850efa790277271e17d121ef18d1c018572\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-linux-musl-x64.tar.gz\",\n              \"hash\": \"277910192741cd2064d02165b8e96c90fffa2828aaae7310191f9bc575cfff9794e1677dc1a3b6d5ef3b3653dec8d0a547cbcc57a3f3d0db41591306b475fb6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-linux-x64.tar.gz\",\n              \"hash\": \"39a5e14e5d16112f8e865bda88229f32f68858f802221327d057cbc941cbb082221885e0db5dd500b399a91f4834760b5b4fe3bdc8ebd0346a2429bde14252cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-osx-arm64.pkg\",\n              \"hash\": \"6a8101ed0a20f7188a87fe47b999a2dc38981b568c9f96bfb293b18aaad89d7d17f9564e1b173ddd6b9959c8bf0666286c5e425baf16f5abf056601a0161a356\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-osx-arm64.tar.gz\",\n              \"hash\": \"acb85e2bf9bcce54b9786af83da1083db26938c2c5fe95002c5e7b2cf3653d1df0d82d948dc9b4f4062e134c1a4691c5d8f72d79c425fedc85ef66b0b96816e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-osx-x64.pkg\",\n              \"hash\": \"8d8b98b534e195dd909b2536e82c0ca37531e567a153440898868919e071ed175097d68151e47f771416b38266febeb44f8442e6ed64bce9dc6b6f23305d0eca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-osx-x64.tar.gz\",\n              \"hash\": \"1f2c29d783a72403bd37b997092779c11ddd9cf4891540fabd93d6568f8b98da304d1500d7ff6d250e96b7225f693b9a872c3e84b44eb3b1b28fed3d9b99cf6f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-win-arm64.exe\",\n              \"hash\": \"18cfca4a4ced81d87e7a7e7c16cc04e57e91ed07d5cd63f24b58673e644ce6466daf4ba56bf89d9efce33f2f588eba5afce0190ddd9b46cf553c5c11557fd7c2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-win-arm64.zip\",\n              \"hash\": \"92c9a7b822169f779d5835050b97f432bf6a7e6ef2c896737c24642277c2a25cf06568d05e3944f8ea7f03a3d53e8554ed05b3aceea9d8ac24e81d1bb0ed48c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-win-x64.exe\",\n              \"hash\": \"37de5adf7897a27cb679a59fe9ef3d63a293fdb553d92091d3ed9598ba424fe647c3a19fdf7f83059d9703832ea0ac72ff9885952fe20cd4c493acc389a1ba8b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-win-x64.zip\",\n              \"hash\": \"79043ab4fe356015b0288f4929cc753ffa7674c7015473f81de9916b50c9d5c1322fb3900ec7ee5022860cc4c6ecf670c84690c4b3b6fe9b38e86a8dab0883f4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-win-x86.exe\",\n              \"hash\": \"cb03706c9e5645b4f0b4b8e76931c029030294e75a9619081b4bbc82d762f317bac28b51aa6a130e08cf966a1d552860141422a6920195c04a68c68acf55519d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.310/dotnet-sdk-8.0.310-win-x86.zip\",\n              \"hash\": \"c6dcb8642123a4f1b85090e7ac46b2fc9b1193667491155651047dd9df6cdb8c8dc23b0309990256598bf53406e81a0c71931a053f9aa427aa80aa12c5fe7a39\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.114\",\n          \"version-display\": \"8.0.114\",\n          \"runtime-version\": \"8.0.14\",\n          \"vs-version\": \"17.8.19\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-linux-arm.tar.gz\",\n              \"hash\": \"3ee147d7aaefff60c8054bbd457536ed7d048a52440097553c3e09e4addcf154112938ddee3222aaa87199433b2682e287ad9f66ee80b053c787606685f00a6d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-linux-arm64.tar.gz\",\n              \"hash\": \"3400dfa1dd60160c8414430b60cd2a15f55d956540cde1ab633810a0cdcb5423a5e60e214822443f94ba077779ba606cb8f5de6f6de4921902d6c6cc9212b555\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-linux-musl-arm.tar.gz\",\n              \"hash\": \"db9ac957c3e46761eeea0b670ae8da366851dece25abf498f5ee2cb17272e5ba77b6c27ffd88743b94e60d0d636facf9ab2d48a3c4ab0a58c01aaddbd9d61688\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-linux-musl-arm64.tar.gz\",\n              \"hash\": \"5d3f4611cc5fa6a7083379700c74065c695f3b92bfef6e092647593fbd8e1619d5e3a4881c1ba30db637363efcfe9c46ede9448ce35fde22cfff8abcf93bafb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-linux-musl-x64.tar.gz\",\n              \"hash\": \"6596c2601bc66fcc4cfad0a935ce9593aec51a3ec2cdbcb3ab1ab21e51993f97964a73bc2ecd8fe7cdbc8f554a484e8e9209f0504b6fac07f19fb9171351c8e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-linux-x64.tar.gz\",\n              \"hash\": \"2bbb16670b6cafa1d74df3eb7b4feea1b4becaf00a690d81ae48e49e6d7421db660db8da42b82f15519a4583ade0f0e5e2f78ec7dcbcea6f1bea65bf6f7e34b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-osx-arm64.pkg\",\n              \"hash\": \"7528f03751d965aa74a39c3ded41221cd687bfefbea6afb8732b0b1809c32594b91a39aafd7757698cafa151d304964fd2f5cac8e91b07781a7654ced92c8590\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-osx-arm64.tar.gz\",\n              \"hash\": \"55161fe668b0d2883206bb74ce4d32c9d7019ce1bfc6644c1802b53d98774e63f58687a1a5f77b59dfddbed0c24b9839087ac5a0d958507cd8b3c64ef97c3415\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-osx-x64.pkg\",\n              \"hash\": \"4ae11f315f2834534eebdcaaaafafa833d4f2d8c344ba655b5fc341e41a9ab2c1d35c027ba5cc58830c81b6d3f87fe63a4b9b108d2d57bc204b2a98b3e88db88\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-osx-x64.tar.gz\",\n              \"hash\": \"d96c0a430087bdb24f2c142f26738dbf1b323655622e82fc6b34c39db193cd210c0b6d38189fd9bacb0c4da980f316a7b740a54ce11126775284cb6db9a3c627\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-win-arm64.exe\",\n              \"hash\": \"57d7904736a499fce181e086e58717b8f814e91c83ec3888ab4df85d5308e82047623292bc30d824525767064524621b5adcdeca922a1476f9a678b1a408f6b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-win-arm64.zip\",\n              \"hash\": \"026abce88b727d9754c19a44e896d25b14b66a51b0d0301611c5ddcab53abc19739d4c25fbbdaf5ae36ae07507d3a8510af3bca877731ca4f69e317623b7769a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-win-x64.exe\",\n              \"hash\": \"1b081dab6c598c86fa0fdc81510cbd2afa3313a3252b18a93cafea0171aa0a450b381b15009004d5c71656eb06d25313ef74a26dedc7690e67f2979c1b1ca0b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-win-x64.zip\",\n              \"hash\": \"c712e419ff8fce03d85ba608d408caca850142d89ce5a2babeece7da14597afb774bf389a7a05d2b3dcfc7ca1f1fedf160d00cbfa1a648a31cb660878893fcf3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-win-x86.exe\",\n              \"hash\": \"4cf2fe4311744a0be6c01ab315339beeaa883cf4b52d7e7d19fa4156ab6c50672bb87d5f61bb658a05752d21ae6664a738edbd8e876ed13269864eb489caa11f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.114/dotnet-sdk-8.0.114-win-x86.zip\",\n              \"hash\": \"fd16f5c72511705dc1a8fdcb20798a1af04c14b061641722a9ae18f81f4d0e067d51e280b6846b8093edb363db3522c538113b7947c409b057a8065a02cd816c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.14\",\n        \"version-display\": \"8.0.14\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.25044.14\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-linux-arm.tar.gz\",\n            \"hash\": \"179401d8de13e20e4e79fccc29d604766e52d5c173290aef1399e4199bb27f29f66c5ee4cbab2c1f446808d40fcaf93fb416a04368b6387741656053e40525f0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-linux-arm64.tar.gz\",\n            \"hash\": \"64c2247ca84cce13525e54e2eb062ca25d7f8435b54543442b11673906ee998b147321ae720920deb8ed96f66c1ee917c7bea9b90b360108e045384e8da44923\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"e4f84b7072c70e8e76a8ceee0a0e4dff7b9e46caa0ee4e93882d15c0bff0e5583de16e181c26880becece00480785df5799682028d7908ab3f2a694aa3145694\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dbc6dbd4bbae6137bb08e115dd2ad675c5373c3d573023cef0bbdc05000e4cadf2f31b8c4425ae086be1712a1cbb215bfb2ad19cd4e65c4b13e4ea08f0408d73\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"6e1be0e3106914fe86ddc7eb7c7531bf79435edb44c293b5b2175089c1659dc2f9d313ce203e04f04b7849feb544d43568c74eae1f7e801dac9d742d93b7c6df\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-linux-x64.tar.gz\",\n            \"hash\": \"b8cd0640c2a7382330b44be3130327ff0036be87b620f9b8ae5b854fce346b60586dd7bba6a684d7b051dc934025170cb945c41ea3bc92115b30e67eeeafb920\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-osx-arm64.tar.gz\",\n            \"hash\": \"e311c1fc1279da48e34ed78db0d5b297d05ca5b1ccea5702a58f8624a963327469b55ba192e584ff1a36056826d3a9e550857a64e9d55616d5c91ed811e74b66\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-osx-x64.tar.gz\",\n            \"hash\": \"ed67bb712b9711d08913fc482308b9304478edbbc8529f08b16d3a4964aa1b5adbf3c119bbcd3d21553b8f0474d90e6438306533e9316d855f5fef62cbb9241f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-win-arm64.exe\",\n            \"hash\": \"bc678fe06c18b75a9db063b6823446b73beb248101789594d70bc48751b782e667bf0100376639cc80d4907993919ee439c9d315d11814ae47c4547ec35f0211\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-win-arm64.zip\",\n            \"hash\": \"fcc3758a4ac0985e2a93deeacdfc7dfd7b94a204c4e343e6cea7a048e968441bb17d7fab3f4691d82f40bf6e4349025452f24cb66a239a4bfab39f3e1fe5f2a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-win-x64.exe\",\n            \"hash\": \"91d648080c7263b03f0307aec7839761e2f44e91e596ffe2f70b62475cc021d3c9caa84f1b1ed8f53cb9fed656a3d7f999f4a5735458b267752e34edc4d81deb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-win-x64.zip\",\n            \"hash\": \"1df34e44076cc6f958f82cd912661139f350d4ce8c63b088e92cbb8c507e370095105f71adc596aa83b577246441d6bd2860dfc457245f2aa10cc30dc00a7a9c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-win-x86.exe\",\n            \"hash\": \"485aab647c30901f06569b609f5d6f21443fb07fd3ccb76d1be18f738d72ebe85f23af5740496218fdc6908c2c3c2adc32d5c23111d7c29352b6078870c9fb75\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-8.0.14-win-x86.zip\",\n            \"hash\": \"dccde4633f33781727acb19029a49a188b7289052eb42b2374c47e0ce8c0e9b46d8cf31cbdcadc054bbac475676126b38335621a8b23cb6cd5cc9a726f259946\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-composite-8.0.14-linux-arm.tar.gz\",\n            \"hash\": \"8013e74facd1f7dd2d28aeac81ee2949da2689c24e75f720d95e45cfd1628118c6622d0f3ce4e264f8eb4cca25a45a2af001d52190bf6090506dd5d148c4b8e0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-composite-8.0.14-linux-arm64.tar.gz\",\n            \"hash\": \"fa99be0e1daa2d419f7c85d70a9648db798a51329743362db61eaa8fe5bbe4a355449b47ee2b7d52496abbee6f885dc154fa3be98dd4313d028382c132ffa61a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-composite-8.0.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"ed71a7076864058ffa6f7f7bc1ea8e0f649b0192c1cfbaf094fcd124dbf5e0f037bcfae99022beef3ebcbf553ce75d2bc4f9487d781bb46aa1adf88792489719\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-composite-8.0.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bf17bdeeed75006c0bf4a7ed8a03ff43869e5b4f0379da800f2da285aa0c596c5ed7fae7628f81ffbcff8603826ca2f6c1ea8da293880aa20beffd3f33c341c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-composite-8.0.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"11251f0ac98cdd0cf32e0ac05b708645aaa1dac6726e03b8ec365fd16585b4e3146971af1f1338703a43112eb84f7d24c5ca97e9a37baeb593226026d43f6996\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/aspnetcore-runtime-composite-8.0.14-linux-x64.tar.gz\",\n            \"hash\": \"e69feda3c917999f047d1af897d8b5cd3bbe84a1b579056d4953a69e540e48b76ed7201973f6800244eb7358a509f23d6388eb5fd1438b810773b8bf3e484dc3\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.14/dotnet-hosting-8.0.14-win.exe\",\n            \"hash\": \"917cc6c069fbd607c9d3b20cbd4900b99ddcb02625b291f2ed6eb51b93f5d38127cb51e23f1adbd4582bd8885a1673ad8ce4ef976e2cba4036fd547b30fb3ca7\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.14\",\n        \"version-display\": \"8.0.14\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.14/windowsdesktop-runtime-8.0.14-win-arm64.exe\",\n            \"hash\": \"7b21cc96a0cc42f9ab701d7ed76aecc044c0906e03e82c5aeda102c757e14061a321c1d6fa2d0a273a43cb6dd7a4eb60bda10e5f5c5e3cb5154992c370382c05\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.14/windowsdesktop-runtime-8.0.14-win-arm64.zip\",\n            \"hash\": \"db8612af2a932cea31e1141b9106ad10dcee8a147bc6fdb59d75433b6422248da156ed143150ea2cea03f2332950d5fa81655bb62561b3eebc0ad5eeae33e190\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.14/windowsdesktop-runtime-8.0.14-win-x64.exe\",\n            \"hash\": \"3997c2586be132c741176473f80d304c51d3bdd7d1f8987b20ab648cdd27f0c57141af0064eaf5b6a2cacc51f6872ee159e0171704dad222dbbfbedac49e553b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.14/windowsdesktop-runtime-8.0.14-win-x64.zip\",\n            \"hash\": \"d8ddfb88f6eedfed76b878f9a5c2e886699137e4d080cb9f098552b012ee985cb2824793476ade316377ebb455f5233aec99969d2e2c1c298afd42806b584064\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.14/windowsdesktop-runtime-8.0.14-win-x86.exe\",\n            \"hash\": \"5d22529ef6c3138abd4461e30d3eb300aa3ea365386d013e3dc8e4347f0611f91e3df4d7b8d37e24f4a6efa1f5349254b3c3299fbe8fb232561af2de48c321d3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.14/windowsdesktop-runtime-8.0.14-win-x86.zip\",\n            \"hash\": \"ad80a31c2208d433e270bdc634bd9c9d03f3310f25979b3660e71e65ce2bfaed5e982dd1402f97a577bd31c01d4368c5a4af18907b8a1412051657f5300cb4f5\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-02-11\",\n      \"release-version\": \"8.0.13\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.13/8.0.13.md\",\n      \"runtime\": {\n        \"version\": \"8.0.13\",\n        \"version-display\": \"8.0.13\",\n        \"vs-version\": \"17.8.18, 17.10.11, 17.12.5, 17.13.0\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-linux-arm.tar.gz\",\n            \"hash\": \"5d018fb50eea96f3e9a56142202ccb1c73a725219d7257b0debbeef3ef196c69b076b98dfb6f098818c0514084df33f6704bc13a478d1727b012d6ba9eea0492\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-linux-arm64.tar.gz\",\n            \"hash\": \"e6c42ac1758239405c8a740194023b4ade1017def3bf330557dc16312b2f40599be30a8bfc8db05559649cf0eda5fc43af153320f5378dcb4872af13679bce8b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"a8c284406cdbbb8ef90aede0a9507deaf3cefc7966ca8de04576bbb3bae260b81b16b2441d4d4385792ecc3417ea1ab3aeceab5497f8665e70dfa55ef7e5af2b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"7b469196495ed00d9cfb166558704c22ac572be11fc4df936d86912d9c306b101ba3411b68e95c8d199f86ba48caa42d9e2b068ceae27b47347dc50b7b96ad18\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"fac7a79de9e79ca05583acb04c086b1a573ada0895b7c730176c181f0d39da82ac2ba5426681ded6d5b1d904e97c585082cc9b56d8c5207fee3e93b88b139505\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-linux-x64.tar.gz\",\n            \"hash\": \"8649eda14e8bc993f8cb3d421d44a4abb218acf29996ac1ec939686bf657e75b60f2b690180a4654ee15ebb7b95386eabc969ea98209e31e2801620ff90fce43\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-osx-arm64.pkg\",\n            \"hash\": \"334bc1cebcc672bc83f174f4a541dab15433f5032f180ee4ae2e6558d5d0736289d6766181ae17c929de5795b18ca601b1b6f5ff006f0e3cc27b518696277ec3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-osx-arm64.tar.gz\",\n            \"hash\": \"7948d37bdd3cc7fa2f0d53b40e1997a1040b866f942a82eb7e3349da388f614af78990386483bca789a22b41b0b8f5c25160bf7c5812b1f7f394af9df1bb5a74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-osx-x64.pkg\",\n            \"hash\": \"ac5ee92859a78dc9b4b17390ee9027991ad4ed717bff855982cc8fa1b730ac738be90b0bff7891a5f410ce30b5bfa4a4ed660f7e4a27b819b3cc1cf059da95d4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-osx-x64.tar.gz\",\n            \"hash\": \"8916605f0d7028a81902a4692ca6386521892abf4dc20983c88e04721036878b04f80a0b9329de0524abe4448a59284587c48b738080d675c7e753e38d7d9a6c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-win-arm64.exe\",\n            \"hash\": \"ee54b8e72f5fbd69cc57c73415d390851a09b24c5a48663a14fbdd96b6bf3bdb49e56816ee57bd44ac3dff52a0e075cffabe8f71eca20647fa530a2b20e839a4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-win-arm64.zip\",\n            \"hash\": \"d76e3ef56ebbfd8466d2e501a91aaa0284a4a62e0782f279b37ce346a02df17edc7a09261e09b8815fb2906251531f9b5a6421f060933e16d5ccfbb139bd84fe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-win-x64.exe\",\n            \"hash\": \"14ae2171a56de27e33ba6942d5b2716bb73f8c2999f28c897136c1e0cf4c49a54f5bd0060ff0b55e58d519ab3e194af5709be568ad9ea8e99ceb3dd39e49b7df\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-win-x64.zip\",\n            \"hash\": \"e7765e8b3b8759b08d9fc48a6f596c478b271ef005b174389011d0ad74da5183325a3739c91e0f3a3f13bac99d44ce20fc015120719c35ac062bb7e3b678ff2d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-win-x86.exe\",\n            \"hash\": \"623bb4b7a134ad54c6166780924b050fa1c43ef58322fb5e7d1824e1dee3529ed09472ba2f03fb8342e4e9ad47b6c54e320b4ef9471a56ad9b36b4b78e12d703\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.13/dotnet-runtime-8.0.13-win-x86.zip\",\n            \"hash\": \"3108bda8422535c9fb0e3123a7a9773cfce56acbda7f56c3983b091dfff3bff3cb6e3f32c31912a429092cb169c943559769914146dd0324f689c500476075ad\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.406\",\n        \"version-display\": \"8.0.406\",\n        \"runtime-version\": \"8.0.13\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-arm.tar.gz\",\n            \"hash\": \"18a2bf575a6d895ce0671b22e4f0853003920f0b7f2f33ff45afc51d34453bfd6b87b2aa5e53349d0c6ae9f6c37f6663d37f87a2ee544c89a7f5ba88d6f65408\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-arm64.tar.gz\",\n            \"hash\": \"9b939f09fbda8a080b1266914ca02c4d60a95e85fa6a1344c378d394697de6935eb7d941dd9a3aeb977ada3aab561c614a5fe9b973824899cb02aa74e9c09988\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-musl-arm.tar.gz\",\n            \"hash\": \"c4338ad18ae2e0425c4e9d6d51dd266217f33e7b64754483a6eb33b81b96f6e8086314010730166211cb96cc87c9a47fb76aefc3431b03f285cdcae2119a7cbd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1961fec3fae6039134a552d19e86a0e93010fc8d5d3d4c22959eddb45a51eeb00c4703731397ffca802064d73b984a1a557ddaa68374b5a9da014e135b5ea751\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-musl-x64.tar.gz\",\n            \"hash\": \"0c7eb2e3530f941fc1bad43de1fb08aa4d23098af47e048cba325b3cc48077cab1b6ec6359cdc88c2ecf6413d1bac14a439878b20d6adb2c6229746018c2e130\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-x64.tar.gz\",\n            \"hash\": \"d6fdcfebd0df46959f7857cfb3beac7de6c8843515ece28b24802765fd9cfb6c7e9701b320134cb4907322937ab89cae914ddc21bf48b9b6313e9a9af5c1f24a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-osx-arm64.pkg\",\n            \"hash\": \"9fe65170c01b0f1932746440f618d3a5446efe89cfd878ae66c74fdb39402d809a82947b5b9bc070d3a5ed74bf2ea04f3a5a92afea90bae3819852dd11cb3b10\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-osx-arm64.tar.gz\",\n            \"hash\": \"dbd6bf870ca1776a8f463766bc5d0b584ac636e947f2da262708b79b21d48475d1f6af832df0f509e04b4e71d9bb2c37775e9878629debfced7eb6b376c2c449\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-osx-x64.pkg\",\n            \"hash\": \"3c247c47c84312e0a27ef119f0c350db93f306033f166826ac79d40f1595c8c1290485b426ae2202c6661e655001ecdd73b33e0512c6a7650a82d1dd8c14a9a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-osx-x64.tar.gz\",\n            \"hash\": \"9c17f5c73db356201a85610c994038d40658d0f690a6b0381878b026c35dd77597136aa56e839d639a2eece4cfad6d88486755c3fab6a1a4240aa793cb9feb4a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-arm64.exe\",\n            \"hash\": \"2f5da16501cf129a54baadab0fae351a44c97dd7a7d8fb47899124da27eddacc8d688fa164f4324527e39bbd771cf1fdb8a75a8b46dde7579120c7d29d6550ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-arm64.zip\",\n            \"hash\": \"ea84fc09fac1907aa4f2c7a13df30d31cebd6cd3bea9d286f35900e2ca575269114761eeac5b6cf9d7bc9b9b72f04f9fbdc3c4f60c8a99596c6ad7ad5c0835be\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-x64.exe\",\n            \"hash\": \"eb4bca7a3da97b0635a515dde312249162337dc255c89b915fbf767bfd768107ed47770b7d37da96fc7d2a4b7abf8b673099263998ca304aa54c91cdeebc7ca9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-x64.zip\",\n            \"hash\": \"88095e181228e9e496574ed6f36582303533369cd253f41abad6c3aaa7d23436736a3fb1dd6c908032b2cfda445f66d50628516395783bef3d5ee9bbb00edcd2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-x86.exe\",\n            \"hash\": \"e66aeeac65cfbc0c0f638ac49b4da6048941e783f97eea8d8480967ab218c650fef3b67786a3de6518ce0692306e14d58edcac37d4fa7e2758b4af1a9e164e0b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-x86.zip\",\n            \"hash\": \"e7444c64b510cb759b2acab851168158aa740217a7e9beb3371b30935216ca1fa8279178e2d374086a3141b712d4a33b801f1883aa7bae158cc59bb18867d055\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.406\",\n          \"version-display\": \"8.0.406\",\n          \"runtime-version\": \"8.0.13\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-arm.tar.gz\",\n              \"hash\": \"18a2bf575a6d895ce0671b22e4f0853003920f0b7f2f33ff45afc51d34453bfd6b87b2aa5e53349d0c6ae9f6c37f6663d37f87a2ee544c89a7f5ba88d6f65408\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-arm64.tar.gz\",\n              \"hash\": \"9b939f09fbda8a080b1266914ca02c4d60a95e85fa6a1344c378d394697de6935eb7d941dd9a3aeb977ada3aab561c614a5fe9b973824899cb02aa74e9c09988\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-musl-arm.tar.gz\",\n              \"hash\": \"c4338ad18ae2e0425c4e9d6d51dd266217f33e7b64754483a6eb33b81b96f6e8086314010730166211cb96cc87c9a47fb76aefc3431b03f285cdcae2119a7cbd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1961fec3fae6039134a552d19e86a0e93010fc8d5d3d4c22959eddb45a51eeb00c4703731397ffca802064d73b984a1a557ddaa68374b5a9da014e135b5ea751\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-musl-x64.tar.gz\",\n              \"hash\": \"0c7eb2e3530f941fc1bad43de1fb08aa4d23098af47e048cba325b3cc48077cab1b6ec6359cdc88c2ecf6413d1bac14a439878b20d6adb2c6229746018c2e130\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-linux-x64.tar.gz\",\n              \"hash\": \"d6fdcfebd0df46959f7857cfb3beac7de6c8843515ece28b24802765fd9cfb6c7e9701b320134cb4907322937ab89cae914ddc21bf48b9b6313e9a9af5c1f24a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-osx-arm64.pkg\",\n              \"hash\": \"9fe65170c01b0f1932746440f618d3a5446efe89cfd878ae66c74fdb39402d809a82947b5b9bc070d3a5ed74bf2ea04f3a5a92afea90bae3819852dd11cb3b10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-osx-arm64.tar.gz\",\n              \"hash\": \"dbd6bf870ca1776a8f463766bc5d0b584ac636e947f2da262708b79b21d48475d1f6af832df0f509e04b4e71d9bb2c37775e9878629debfced7eb6b376c2c449\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-osx-x64.pkg\",\n              \"hash\": \"3c247c47c84312e0a27ef119f0c350db93f306033f166826ac79d40f1595c8c1290485b426ae2202c6661e655001ecdd73b33e0512c6a7650a82d1dd8c14a9a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-osx-x64.tar.gz\",\n              \"hash\": \"9c17f5c73db356201a85610c994038d40658d0f690a6b0381878b026c35dd77597136aa56e839d639a2eece4cfad6d88486755c3fab6a1a4240aa793cb9feb4a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-arm64.exe\",\n              \"hash\": \"2f5da16501cf129a54baadab0fae351a44c97dd7a7d8fb47899124da27eddacc8d688fa164f4324527e39bbd771cf1fdb8a75a8b46dde7579120c7d29d6550ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-arm64.zip\",\n              \"hash\": \"ea84fc09fac1907aa4f2c7a13df30d31cebd6cd3bea9d286f35900e2ca575269114761eeac5b6cf9d7bc9b9b72f04f9fbdc3c4f60c8a99596c6ad7ad5c0835be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-x64.exe\",\n              \"hash\": \"eb4bca7a3da97b0635a515dde312249162337dc255c89b915fbf767bfd768107ed47770b7d37da96fc7d2a4b7abf8b673099263998ca304aa54c91cdeebc7ca9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-x64.zip\",\n              \"hash\": \"88095e181228e9e496574ed6f36582303533369cd253f41abad6c3aaa7d23436736a3fb1dd6c908032b2cfda445f66d50628516395783bef3d5ee9bbb00edcd2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-x86.exe\",\n              \"hash\": \"e66aeeac65cfbc0c0f638ac49b4da6048941e783f97eea8d8480967ab218c650fef3b67786a3de6518ce0692306e14d58edcac37d4fa7e2758b4af1a9e164e0b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.406/dotnet-sdk-8.0.406-win-x86.zip\",\n              \"hash\": \"e7444c64b510cb759b2acab851168158aa740217a7e9beb3371b30935216ca1fa8279178e2d374086a3141b712d4a33b801f1883aa7bae158cc59bb18867d055\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.309\",\n          \"version-display\": \"8.0.309\",\n          \"runtime-version\": \"8.0.13\",\n          \"vs-version\": \"17.10.11\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-linux-arm.tar.gz\",\n              \"hash\": \"4b6fd2f84310090ed290426244bd3f4115021e5facf92d66fb1f3f5658e427db3257a5f875437435729663c51f5e897990e4efea1e9afc9a6da9aa13db6c0dde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-linux-arm64.tar.gz\",\n              \"hash\": \"4281891e9ef1e502befe7bea5e5f3ffe84110583611f1fc467f25b28b7f95ecd6e58c1c52a82ac8604bb33806fb75321aab9afa98697bddb072cb046210152b4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-linux-musl-arm.tar.gz\",\n              \"hash\": \"681461785d1b2ab7c40309b72ce702d017e957e2c6ea0c2b3ea3d39722196ff9ab66048715ec423ce8b9cf3542ae24e42b1522d17c3524c173cc7aa35428c513\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-linux-musl-arm64.tar.gz\",\n              \"hash\": \"dbe27df317cf6aa1701d08cd9a0741e68eba24d5f4040952795b735514b471d326904551c2a349afc39ddb37733a907c67fd9ec20bb545c2902037384210adfa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-linux-musl-x64.tar.gz\",\n              \"hash\": \"fec6146b56ef7d6174ea64286b431bff40c7d5dca7ecaf1f6180c7da307cb9ee7a9405aa923085b849abcb41100ca6befd1516c3800b4bb62e713104c94d4c75\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-linux-x64.tar.gz\",\n              \"hash\": \"f213aabc7f458ce20ca10f72a7e6000297c57737e61818005ef03c45c907d0bb3727cf9e828cabb9d6d3fb3bda4abc18bcd8e453bc5a00ac4d77e62b3237fcb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-osx-arm64.pkg\",\n              \"hash\": \"9cf9e6a26ae043c6247dc6fe18e9dae2ea60fa5697950b6f060c8abf3115a2116fb7251b965876d129f4dcc1f791d731f0839f254d233d0527c47c940b156ff7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-osx-arm64.tar.gz\",\n              \"hash\": \"6399bcef9eabd853a09ca69f168ba0a224b7443d193557f3bd224e9fe6fb4d05536d21fcdbbcf5a9ef211f61a1072a1e885044af531d67835cd55c2d867ac288\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-osx-x64.pkg\",\n              \"hash\": \"b76ea8369b7afb80d49c2ca2a3b281d63a6b5564df34ba7ed62337ce07fb42b58598f25aadceab9fda907369bed9fe177a5ebb0bf2cefb71d7658e6298299efa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-osx-x64.tar.gz\",\n              \"hash\": \"11672b843dd8934dcb227b068ad99113be2616795c1bed979283af478019ff6d00a5856118ae4d1a92978343721e93a46a7b278353d3b5713bb51a99013cfb6a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-win-arm64.exe\",\n              \"hash\": \"f5e58267f663261957d555035a6034d0d73fecc8cd043aafd7a05791f74edc62a44bc808c533d9d196ab9d05f775f19b96c32e7b97f839825a00b2993dc9282a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-win-arm64.zip\",\n              \"hash\": \"5b4f7f8989e79027067b19dd61331724756f418cdef39c7f9b4131c0738f28c76bf40254c334737aea517f7d956d0c1dcdcd9ce4bf459dbe5ce8a858a1971f76\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-win-x64.exe\",\n              \"hash\": \"a924ecd717b60b70abeab8662042d78f38c19bd12d5c5c22af38270196236a051722037b603967f1abf1832671655feda0de2a538ab5f64a95d7ba05d9c933c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-win-x64.zip\",\n              \"hash\": \"7d573b79286b43131a48a34b751e76a0ec7b0e2bbd2889a19e2dfb1228e07f8e0da2e3b05b2c25293cd3ee25212fa79701611dd6e735022e86b34b41c054dd1e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-win-x86.exe\",\n              \"hash\": \"f755ada429b66322ab47a311646a88144979b4d073f0f743564c3998258001f2c76211847db1cbdd56970bc9b06f327ff664e6911186534a7b278cc239572d83\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.309/dotnet-sdk-8.0.309-win-x86.zip\",\n              \"hash\": \"c3793b84304e1eec02b9eb2b9e1b4afaaaecc8ff185a3ba37e4442e99f215f8286b2083abb7d26f7645c259026dc353fcdb51e091f97560c0fd0beb59d4a3b71\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.113\",\n          \"version-display\": \"8.0.113\",\n          \"runtime-version\": \"8.0.13\",\n          \"vs-version\": \"17.8.18\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-linux-arm.tar.gz\",\n              \"hash\": \"2ea1eabfd7a66afd6fb48912ba3a8a7a626fc3bb10f5f354bbe8abf3841c489d821ae1670b2c649507dd34a5b7dc66e9ac54800caf064fe7c67a0f065c68c244\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-linux-arm64.tar.gz\",\n              \"hash\": \"c3cb2858a17dd4dbea5d3c5687e9c648b28b19db522f029705a9dcf61487e52674d5a0eddd6c7f6bcddc22972b4e93fbd9bffa10e2afbafedace312590bf0608\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-linux-musl-arm.tar.gz\",\n              \"hash\": \"a8dfce0b643ad23c92c33cfa6a36269d3d22cbeec1cdb5061a1c35f92ca0f33778b0b28dd9fff116d85451ea47d600b9b762e1374abff450ea7f5e6036e792be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-linux-musl-arm64.tar.gz\",\n              \"hash\": \"5395ec99cf948a09545054995ef8a8d92d622b7dd1f67ab7bb0934663ea067ff9929a8983a8dde7db3ede0acdd49e4bf89ddf14487297048d28d5fb4e3b1a1bd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-linux-musl-x64.tar.gz\",\n              \"hash\": \"ec13a2aca300398c8738b1e0d48c6ee8f7ef218daa4bc0d69ddfc04fe2fbe40c2b2d3d6b1dac190f83fc7945384d66b4a83093632e77886fb54b78bca23be636\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-linux-x64.tar.gz\",\n              \"hash\": \"e7c38145ca8edb23f9992aba238b6725ef0bfcc186c879e703c79450b77720976898751a28585a76d39b2a5b499e5763e8eb2165c88a5d2fab2c3129a353116f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-osx-arm64.pkg\",\n              \"hash\": \"a0df327bec7707cf2bf0b7d0f42147fa0bef8dc0f9b673f0ee92168c0c8b3c2cda6c403aeb3f78814276f17f232584d74b9d679a4aebecc44914b5b2e0198b2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-osx-arm64.tar.gz\",\n              \"hash\": \"18247479baa6b17392d6d8d3ea2350ea5786580b419d41e862f3b1a3b9dd65acc7302a6abf6b7cf159f07623756a849822d115041e721df039d17938260dee57\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-osx-x64.pkg\",\n              \"hash\": \"2e85851caa01cd061b6a6ec5653f5b91ddb6b8904a98534268fee524a4b50aeebce31e396b7cdbe56c1b5914a02143c161cd4475456029126d8c863caeff857f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-osx-x64.tar.gz\",\n              \"hash\": \"64f1938588db96104a53c7381ab170749e5c4364c49944dca8f7c918d522adcccdcbc3cf70601599b306bde8e810849a7d8b783fab2abdee3767d1496535e92b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-win-arm64.exe\",\n              \"hash\": \"5cdeb8fa666bc66a83312c5235ffb873a639773f7de9d03b6c0a60b591bf0b157029f4800af75b8332181763e25cb5586fc65b13fcf587b7394cf062067b51ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-win-arm64.zip\",\n              \"hash\": \"6381ec68a3865473be4b01a0cd3355157d581e0e31418a97b45b504d07e1b7612754a04804a53c07fdf6e0ef5ee92303d3f5df0f358ea637355c07993cfd31bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-win-x64.exe\",\n              \"hash\": \"6eef2bb3e6ceac8d275badcdf03281bc7bde2be28d31b3ac4d56cb8d931c1723ae5f9b3d7fd26b89ae95d26c0803e69a1dfa01dd8e6db23d4a05aec45dc2455f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-win-x64.zip\",\n              \"hash\": \"c3951b2a93bdcbcd4b9072124085029344271cce21090f825d32a731dac32f574ed79e74615c46bf5cf71e20e8110ac8af52b8ca14a3ebaed46f966cb3242b66\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-win-x86.exe\",\n              \"hash\": \"14bdbfaa492746ced81c3f34e7982647c5c989d21b2f7c8c903932b522a66ddab5fe86b6e2959a1a3830f317d21df1bdd83d67fddcf2a095e2384df941581e79\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.113/dotnet-sdk-8.0.113-win-x86.zip\",\n              \"hash\": \"154318a25b75b59fb40aba27f688ee3c41a8cfba2f28888f40b441c22d52f3fdaf99c2cdfa06337c502ab5fbb5dad5c24e9080af772d72caad66f735b1e4a24e\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.13\",\n        \"version-display\": \"8.0.13\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.25017.13\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-linux-arm.tar.gz\",\n            \"hash\": \"de5a3dcfabaa7f01aaffb78b2156d9d79d614f0e52ebe619657072568ab0fc47f4d53e7b577a7622392502cd3a739400af6c26999247cc50c29813b6a94cfcd0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-linux-arm64.tar.gz\",\n            \"hash\": \"d67130310e81f727f1d4806463f49af18e012d6dc766c940838854922b3a3e7f7171c87d595c4dc09e1c63470fae3017b54d51be98618985129ff37d6a5ac0b3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"20a6322409e46f064f739d3948dcfa365879d3bfc1e704ec24f74accf9c8f464ac5782eac88cebf36d6732a3d45d6eff2bb4a89e39032332288de25e41065ba0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cec1eefebff9c3b8582417fc883cd19a5cf1741f00ed5df5e42a239398c3286f9f8e1fe6c9a65ffbd76fa95318cf23f7941f47f6132f03afbc1fafa3a48601c7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"f4992c2cbc8019378af0c8463d36c978caa943e53d49522037b802f7476ec9d82a6f69dfb2178f82f619bcedd6620ff0c1aba024760864eb0f73ce70c04fd8f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-linux-x64.tar.gz\",\n            \"hash\": \"7b21aff45c3ca7ccdc0527c6de05c209d58a56a15cf10e656522261f884cf272a92be13696b1a0f1ae2baaa0d825ffda58d954871a17b3c3a8659a9f3a36c7e6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-osx-arm64.tar.gz\",\n            \"hash\": \"46a19b9261f13ed585a94a7325db18d627d846a36d95b63421136fe6f5557e65925e396e1400f8fb74f5098116e20e89504c1467889b4618ecae3a9ab7993b9c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-osx-x64.tar.gz\",\n            \"hash\": \"ba66742cabaa7a8e3ff52788a59b5ba6b3ebac474e606444623c9919e257b20b9edd74e9c6f0d232ce7e823dbfad7687e2495cd2d70bf46649e1902e74b64c0f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-win-arm64.exe\",\n            \"hash\": \"cafcd4dec6267f8911d54885cd54b733735d33b4ffd2a46eb1ddaa54d4fa8cc1678fc641f8624582cfb4d583b8c578bd7ba8d54797cd4dff64e024cd7abe358a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-win-arm64.zip\",\n            \"hash\": \"277d299d15f29d4382c0c2351ef45b223953d2023c397ed36aceef624da49a6ab929727965719c52ec1bc8715079922bb8739c05fcd6ec31c6a80ad537f135c4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-win-x64.exe\",\n            \"hash\": \"47f16914e76a0c9e0fea203c5abb09c9dfb1643e0b2295a00260d0813fc336673f97d6e9c7605585136cc9680ea4cf614eb5d2cbb8156220011cc19f472cb684\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-win-x64.zip\",\n            \"hash\": \"2cf4a7dc531cdae0d244bbd745a051c431304db230630789e26273781c32e540ba92709e51ddfd17fccdc9879e1b209a3e08783475d9c4c4446dcc74709be5d8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-win-x86.exe\",\n            \"hash\": \"52f386c4c42b368c4bd9903e61e63cf334cb5c602ee8bbea28581dbdcaa6f2cf8bdce0199797cd7afc37fd51ba72c28cf2633928fdd9a26f36e68424adb7f52a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-8.0.13-win-x86.zip\",\n            \"hash\": \"8fe27277c4b86ea587f004f3b1fcf35ee1ba7324b2a8af728eff603b80b794bde132b1e2997fd22bf347de49b0299cb8e31591ef5e5e4f5e4c1da062c566629f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-composite-8.0.13-linux-arm.tar.gz\",\n            \"hash\": \"2867b14062806103360ff725d318611af988234fe011449b52e13a5f31464fbcd86ce2470ec84ad468663cb4a60cf693d96e9960251bf80d071c8ade57e66b3d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-composite-8.0.13-linux-arm64.tar.gz\",\n            \"hash\": \"942ff8c727eae0f0caca541706cab338ed16f6b14470c626ec2c54ad877189d85425761d8529d700172633aaf45c2dae5e29e262ce0339da20e6d00fbb914591\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-composite-8.0.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"9e961a15e8df2d6acb58cf246d299905e48b3280539b54d616cf9f550d5e66b31f9737e90f52d323bfef57753404b22e4a2d1c5f72db2525d3cc6de0d828eb89\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-composite-8.0.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f5710cc1d91a284a13f553fa013d651a00a90219514391f55632a10093eab42153deb0557ab5bb60cbe013ea6ba7c58cf309442f13fc2191f92103aeb219d008\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-composite-8.0.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"7c29859c689d3dfee555f6dd43ba6b9b83ba8446c6f4457ee47976cc41da0d53f889283b063786426d485f2751ccc2a58b6a0dcc6b18309961ae02ee67d10c63\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/aspnetcore-runtime-composite-8.0.13-linux-x64.tar.gz\",\n            \"hash\": \"671182c89277327368b739dff04d897cdd82a9f915f0d2d6b2b68eea5952d1d741c4edf413d8e668cc2d9c83b62b01ca86db0587d755904bf02f25d7b7a6e3da\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.13/dotnet-hosting-8.0.13-win.exe\",\n            \"hash\": \"1c575e2b42f0c9e3e480662bdb24287adc3a8ad2ef6b543574f754961ec78b7baa09748e93aed285d4d333328bb0a9c45af64c59492cef9226c10776af1ef4c6\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.13\",\n        \"version-display\": \"8.0.13\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.13/windowsdesktop-runtime-8.0.13-win-arm64.exe\",\n            \"hash\": \"45c1fc3f5adb8551fb0ee805ad6c5046a9447da38cbe6b7e9d04fdc995d21885b8b9415ba3bc9040644d82e04aab3a88c625854efc7870ac0236d0368de90c3c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.13/windowsdesktop-runtime-8.0.13-win-arm64.zip\",\n            \"hash\": \"0480a4a59be809b25e9d8d8da0a302c6e82b406c3ab1ec4f5275cdd7ab8bf519f6af479acac5e7b205f05fa96fac96efcad56ec4455c9aa89fc7dbfc571fd28d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.13/windowsdesktop-runtime-8.0.13-win-x64.exe\",\n            \"hash\": \"abeef95a520e5d22d4a8b0d369fe103c2552a5c337500582e850da3611135bb68bb479d123cee85a445310cf4db73037e6198eec40d66d4d746ef2e2e5f1450f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.13/windowsdesktop-runtime-8.0.13-win-x64.zip\",\n            \"hash\": \"b10fb998502ed829b619ee125a71b60890de1b2dd9fe4b95b3ca25dfc581368b0a620bd5e739ca6da2d37978d1668716722b80392e82d1cec02e6a6279ee9026\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.13/windowsdesktop-runtime-8.0.13-win-x86.exe\",\n            \"hash\": \"569c2cd8500c793bec790cab58ff9d7a57bdcd6cc1a38b1e260c2b092e41f95836be6aefc34cb25b36e1643c311455e538c8bb8efcc78e2cb69e294937694ceb\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.13/windowsdesktop-runtime-8.0.13-win-x86.zip\",\n            \"hash\": \"54df4a2a432ba49016e23a89df3943eb717a622eccaf6211fc43212eaf20ac8ac0018acce702af6848f71079fb92fbff17d8a4c756165da2459b7875496596f0\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-01-14\",\n      \"release-version\": \"8.0.12\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2025-21172\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-21172\"\n        },\n        {\n          \"cve-id\": \"CVE-2025-21176\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-21176\"\n        },\n        {\n          \"cve-id\": \"CVE-2025-21173\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-21173\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.12/8.0.12.md\",\n      \"runtime\": {\n        \"version\": \"8.0.12\",\n        \"version-display\": \"8.0.12\",\n        \"vs-version\": \"17.8.17, 17.10.10, 17.12.4\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-linux-arm.tar.gz\",\n            \"hash\": \"0b8e3c37f205cf965afbd7096afd5fc6e202248b3e3c174712e1bcf34b6b64ab7b0ef866eeb6e16a114367e35666dacb52eb0ba10dde8b3143314a051eb1a1d0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-linux-arm64.tar.gz\",\n            \"hash\": \"c300a87e41798fae7ae4920c140bbe3499a1093d418450f9bfa469b045ebe2e5840d95487e937eedbe8ab221e1388aed76fdcc18c92d81778ee43383ba7fe33b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"ec9b034f550e807b4d4ff5b07c6c7d90959eb4d6db5d97b8b245269da6ba873fe27822491181fe34e49b6e988614640b275424a58586f022915ea48acde906b2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b369b71b483adc7cd53d3c57ccea1ed929e441582e21f31989429d31ff6bdaa0e6fe75549402a8c3cd2dddb935c18c432d2c72c486d03467f27a52e009a18963\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"2a97a07e9fb2dcc8225850c9574a014f9a111147d87ded6293eb7bf26cf6bee6cc516713c02c13a08e9776dbadd583627f05e6e62daaaf96f653e28c0b37b25e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-linux-x64.tar.gz\",\n            \"hash\": \"e0d216d54e9a21aaefc120a481050f1137cc708cbbd17204f0b1a47dbb6424078e8b44dc842957a6691025cda1490e5061092802484b5fd12c5903f5ba634481\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-osx-arm64.pkg\",\n            \"hash\": \"4171dcf529ce26d29f477f0d5b7f13d9481b5e7e5b47e20603fd30d6f190cf130f358b9a0ec2f3ecd2ff1b6ff4b1ee5bd21e460f709298159b1342b5a206398a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-osx-arm64.tar.gz\",\n            \"hash\": \"8bea917d0f3d8aa27f06b95b97aea220d44a3f6b0c64c6612dfe353dd4df8818bda5657b63bca1168eb5f4866ca8b8b38c70abc5effca2fc358a4dc89ef1060b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-osx-x64.pkg\",\n            \"hash\": \"b022c0783a46e7c36e97568975b5fa48166d92c10d020c360667dda34ece4d9245e5f0f3e05196a339987ab09dce8afc6c2d4339a32770e8b1db4ae64df86a36\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-osx-x64.tar.gz\",\n            \"hash\": \"b184e85c55fd0ffd147bdde5695b586cc1879cdaa11b832cc3158993db2986286617039ed2fa0f46daba0a01e8ece9be6b0a168d8734781d974c77c8dc36d5ba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-win-arm64.exe\",\n            \"hash\": \"ae9deeb0785512b1a8420ec9ec63124884d6cad63ccf2a3d9bd5247ee7274faf620dda873eaa6ee264ae9f36f4413e989ce7cfb2302bd48b69e4d8963c8f6725\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-win-arm64.zip\",\n            \"hash\": \"c2fb4d7bf8c8ad37c4d16a1a54090099ca6972cd8ae137499a11d840ac6f0943b5cc49681ad0c20f239f12b03c2a09b7010268345176ea03f11ee58176e4162f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-win-x64.exe\",\n            \"hash\": \"ec889578022d9822df2bb9983845e80797667ca364ec8cc101d94468010f8e1411cb8c288e4acc55393c4a20af0574cbe4cd17b917d24727f1d3d5f1903b13af\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-win-x64.zip\",\n            \"hash\": \"6e08f5290183569daef70b558939246fb72930608e291c9941802a350918cca0f4ae30df0bb8fb07cd8f2b18aa4174506c9118892356dc84cd0c7fe6582c0d2d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-win-x86.exe\",\n            \"hash\": \"b4e5bef2bf2ec7b504b304c170f167c4796c18d848c60779a5a72b634d14dc701c24ac086467301060559aa9ac77e9e11eb3b2d48dcdb9dd1fcd01ffb48f9804\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.12/dotnet-runtime-8.0.12-win-x86.zip\",\n            \"hash\": \"d83c4adc1d22e230bc3d80c080bd55b1bd898ef7d681456d50f98c49baaaad77b58963e721554fb1c914137eb69e4f035a0ad1221ce1ee48660a22c1c7d30dae\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.405\",\n        \"version-display\": \"8.0.405\",\n        \"runtime-version\": \"8.0.12\",\n        \"vs-version\": \"17.12.4\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-arm.tar.gz\",\n            \"hash\": \"f9c422221ce1b9460e4778ee2512b8e38c78eea77e975779af03f82feb5664b94d33c57d103777839b9e772c039419df5eeaa479b55b78d70013542a87d2b602\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-arm64.tar.gz\",\n            \"hash\": \"07988b784bf71913f607ce0ced50434c69980ae715ca62fb6af68f7eaa26810c3f9ffe24df1d8706d1a557c3eb7756143e5357016089cf1508714baa1cce828a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-musl-arm.tar.gz\",\n            \"hash\": \"f83accb0ed45b4c9378a54c2c74fd8f559056b7b771af70ad25d62d41dd1c384b795cb89fbde68959db86883b1e89fe6749100c055f2f3089e343b2a5e1f1704\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-musl-arm64.tar.gz\",\n            \"hash\": \"af728630dee4205f9552f52f4a06f48ddf4aff238abb32edfd01814cc0e710c139f48ef569ad90ede519564b9bc057baffb74eb60b54ec47364c51c5c1cf789c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-musl-x64.tar.gz\",\n            \"hash\": \"05078ffbeb35b7aadcf8927c0bf0aec6af5de4e616585deb55743080c0b34bb6e4becaa2e23c2e6c3856bc0826d5e54f96ab6983867c5b1af6307c62ecc01837\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-x64.tar.gz\",\n            \"hash\": \"2499faa1520e8fd9a287a6798755de1a3ffef31c0dc3416213c8a9bec64861419bfc818f1c1c410b86bb72848ce56d4b6c74839afd8175a922345fc649063ec6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-osx-arm64.pkg\",\n            \"hash\": \"421df3ec69ea06c42c94043670e53e9d965d0d0261513c60249800830019a8c71fd0dbf0fa8ccaafd5b92a2ac38d37aa0fe4b85c1e523a4ba3e9cb2bb80749ec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-osx-arm64.tar.gz\",\n            \"hash\": \"3610bdadd7bc0c137f283e95b01e45c186eeac765207fb76d22b10876a8f085190609080e074df9c8b1c70b3b647559f542b5e1313700125bff03f6c07d9f25e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-osx-x64.pkg\",\n            \"hash\": \"d9aab0701b631e358cf6923a64fadfe76f6ce44b1624836f3d2c6d1a5b0bb7721bff917c650652ff909016a3f60282c34713cef272b9bd5254c0201d25d8ec04\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-osx-x64.tar.gz\",\n            \"hash\": \"92a016d4530658665f9274095d87e57dcf82ff0a2224f3a392af61d03c1f836e451798121d8ddee3e4e5ce20943af77121b0312f27a9c900f39b397381e9db65\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-arm64.exe\",\n            \"hash\": \"df455fbc6e01cbfbd7fbae7ef1bd0c6b5683b53c1121f347dbecf8e53036d57e37c5697ceee3a7693beb537d4c884405eac508cfdccac7e62d6f758a5dc7363e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-arm64.zip\",\n            \"hash\": \"a095abff8f18a6200d898c7962d563a06dfee603ada017d78418ef4ef431919bc6f63a54e701f7950fe9e96bb54fcd735e345cbec461dcf0c6adbe23b126c7ed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-x64.exe\",\n            \"hash\": \"3c6700b4e249371015116a37c99381d1691c34198900a1a415c44df688ee4e8c648e4314d44a1fc5461131dea6121a600ce105a056691f92d40a490be1397c72\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-x64.zip\",\n            \"hash\": \"def0b094747e609d2bafd33dc739fea1fb166b794bfd58d348bf62978d1f35606c0bd31ae2ca59ad947641acfd4eec92bb3fe1dd197ac28f2bd600ed125b5b96\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-x86.exe\",\n            \"hash\": \"385c2d6cca7ee102e29f7135cc5bcab243f6b583c6eded21a7cccbf2154de84806f62437e9307ae391fbbafa69b1ae25d3b609ca937a0c00a23ba8a629a87dfd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-x86.zip\",\n            \"hash\": \"4827af7a7659d5dcd6283bbf55dcd260268985c28bf8e5e16dae8bb9a08cad7d874cbafe1443f025099753278e4cd228c871141aeeaf320f2300b8279476b036\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.405\",\n          \"version-display\": \"8.0.405\",\n          \"runtime-version\": \"8.0.12\",\n          \"vs-version\": \"17.12.4\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-arm.tar.gz\",\n              \"hash\": \"f9c422221ce1b9460e4778ee2512b8e38c78eea77e975779af03f82feb5664b94d33c57d103777839b9e772c039419df5eeaa479b55b78d70013542a87d2b602\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-arm64.tar.gz\",\n              \"hash\": \"07988b784bf71913f607ce0ced50434c69980ae715ca62fb6af68f7eaa26810c3f9ffe24df1d8706d1a557c3eb7756143e5357016089cf1508714baa1cce828a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-musl-arm.tar.gz\",\n              \"hash\": \"f83accb0ed45b4c9378a54c2c74fd8f559056b7b771af70ad25d62d41dd1c384b795cb89fbde68959db86883b1e89fe6749100c055f2f3089e343b2a5e1f1704\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-musl-arm64.tar.gz\",\n              \"hash\": \"af728630dee4205f9552f52f4a06f48ddf4aff238abb32edfd01814cc0e710c139f48ef569ad90ede519564b9bc057baffb74eb60b54ec47364c51c5c1cf789c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-musl-x64.tar.gz\",\n              \"hash\": \"05078ffbeb35b7aadcf8927c0bf0aec6af5de4e616585deb55743080c0b34bb6e4becaa2e23c2e6c3856bc0826d5e54f96ab6983867c5b1af6307c62ecc01837\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-linux-x64.tar.gz\",\n              \"hash\": \"2499faa1520e8fd9a287a6798755de1a3ffef31c0dc3416213c8a9bec64861419bfc818f1c1c410b86bb72848ce56d4b6c74839afd8175a922345fc649063ec6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-osx-arm64.pkg\",\n              \"hash\": \"421df3ec69ea06c42c94043670e53e9d965d0d0261513c60249800830019a8c71fd0dbf0fa8ccaafd5b92a2ac38d37aa0fe4b85c1e523a4ba3e9cb2bb80749ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-osx-arm64.tar.gz\",\n              \"hash\": \"3610bdadd7bc0c137f283e95b01e45c186eeac765207fb76d22b10876a8f085190609080e074df9c8b1c70b3b647559f542b5e1313700125bff03f6c07d9f25e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-osx-x64.pkg\",\n              \"hash\": \"d9aab0701b631e358cf6923a64fadfe76f6ce44b1624836f3d2c6d1a5b0bb7721bff917c650652ff909016a3f60282c34713cef272b9bd5254c0201d25d8ec04\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-osx-x64.tar.gz\",\n              \"hash\": \"92a016d4530658665f9274095d87e57dcf82ff0a2224f3a392af61d03c1f836e451798121d8ddee3e4e5ce20943af77121b0312f27a9c900f39b397381e9db65\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-arm64.exe\",\n              \"hash\": \"df455fbc6e01cbfbd7fbae7ef1bd0c6b5683b53c1121f347dbecf8e53036d57e37c5697ceee3a7693beb537d4c884405eac508cfdccac7e62d6f758a5dc7363e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-arm64.zip\",\n              \"hash\": \"a095abff8f18a6200d898c7962d563a06dfee603ada017d78418ef4ef431919bc6f63a54e701f7950fe9e96bb54fcd735e345cbec461dcf0c6adbe23b126c7ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-x64.exe\",\n              \"hash\": \"3c6700b4e249371015116a37c99381d1691c34198900a1a415c44df688ee4e8c648e4314d44a1fc5461131dea6121a600ce105a056691f92d40a490be1397c72\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-x64.zip\",\n              \"hash\": \"def0b094747e609d2bafd33dc739fea1fb166b794bfd58d348bf62978d1f35606c0bd31ae2ca59ad947641acfd4eec92bb3fe1dd197ac28f2bd600ed125b5b96\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-x86.exe\",\n              \"hash\": \"385c2d6cca7ee102e29f7135cc5bcab243f6b583c6eded21a7cccbf2154de84806f62437e9307ae391fbbafa69b1ae25d3b609ca937a0c00a23ba8a629a87dfd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.405/dotnet-sdk-8.0.405-win-x86.zip\",\n              \"hash\": \"4827af7a7659d5dcd6283bbf55dcd260268985c28bf8e5e16dae8bb9a08cad7d874cbafe1443f025099753278e4cd228c871141aeeaf320f2300b8279476b036\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.308\",\n          \"version-display\": \"8.0.308\",\n          \"runtime-version\": \"8.0.12\",\n          \"vs-version\": \"17.10.10\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-linux-arm.tar.gz\",\n              \"hash\": \"7c95f9c8ceda6ea3892cd8b6d6d380e9e991d55b53dd1bfdea34052efd38df97bce3a46bf78025b428483fe727609966a0d8013d80572eb8b55cc67ccad89013\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-linux-arm64.tar.gz\",\n              \"hash\": \"6dee54dc55b59e30e6f32ffcf9766c91ca931dffef8b8a794a839bd12f202ecc574e70085537f7b140e8a1b67d36391864bbd1442a0ce6088e32e11f5b33470a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-linux-musl-arm.tar.gz\",\n              \"hash\": \"b7705b4e891a738baf873c23ac8ff60758482467f508f543ee524338bfe1cb2da078a1964927f723b7beece8efc379d0acc166c07469123f66dad641cb3346a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bb29a0dfb6ced5969eb3e35258cd52626bbc7ab6798d31fca7b1cd9c8a5b154b5ab606d8e0b2e3912f8277d2eb0faa36c5d535be6304209f560020bd8fdc79d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-linux-musl-x64.tar.gz\",\n              \"hash\": \"d2e46c0c44e6721cb5213fbad09b539799c488ebea329e42d026d1ffc9b37fa6ff53d2182a49e39a40563c6cca85e8cd32a3087f35873db9f329b2daabc778f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-linux-x64.tar.gz\",\n              \"hash\": \"f26d4dabbc54e79264353d0d14a8df5df720203c1d0455e65f4d94571e85b1940b9111a9bbb156e6db1d46756e9534bb3c9f1840a20c961901d430b8f1bbe6b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-osx-arm64.pkg\",\n              \"hash\": \"67633b82b520b4d298160e997b1252658b4ec6a63ce6a086469eca1030bff585d783e781643c357bd729e356791413c3babdddc7c6609fb6f9cf517cd23658b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-osx-arm64.tar.gz\",\n              \"hash\": \"487909e8a36df6f2b8a3c88676a2d804ccdae7d759bfb962d556ea46fd836e27fae6c0b24b00d54976d323f04dbeb271506bcd2ab284a564a465dcde5e9483b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-osx-x64.pkg\",\n              \"hash\": \"5f1b31dece5826e696bcc4d07cff351249016f7cedf210eb92f54bce0ca161d54126f1c47c9a5f8922e8a182ab71eae7940db2c7bed927e8ac2092a4811dae59\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-osx-x64.tar.gz\",\n              \"hash\": \"a167c91d1c036722c7caff1261a89b570774d1e2020964257377f064e990f0548c668fbf2b62b3727f101146c057b0007106c97d73beaf98b48765a29a937047\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-win-arm64.exe\",\n              \"hash\": \"e4663f48bc722cb9246e9681122282242e0663e93d0bc9256e45095e526a8ca111300df94216e78d306a5b4cfc3711b97c87cc01df3e6d02a046b07bd81fce00\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-win-arm64.zip\",\n              \"hash\": \"b72f04db1253365d28f1bcabed4b5878ccc86b33a7a746d2cb253b193450a8c1b0fe3947391e66a493de33a3bac3cbe9a015585ec2610abcce9786bb6ab34b51\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-win-x64.exe\",\n              \"hash\": \"910cec33ada22347e85ad1bc92c35ccf88d112cd33f38a59516232ac116fcb5b297d37b819ffa4c171616be76f450e27756d8e91fe67f92c09ada4a580df1e8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-win-x64.zip\",\n              \"hash\": \"9c4eff5e070c24c0c4ce9c038b72884a910d32eaf52166bb4bf9bad48187c4e7b14de42e73ae1d41049231d7a60b99bb785440df51e748539e5cd22ac10ca690\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-win-x86.exe\",\n              \"hash\": \"a45c2f41c4219ba1936191ffdabedc8652ba8ee4c77ada11b960e2b5aef16107abde96e199c443e3a2c87ac42200aa97daf4a7f170c6e80ef0bfe97f7c4e245c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.308/dotnet-sdk-8.0.308-win-x86.zip\",\n              \"hash\": \"30ff67c2c11346c08158935d97f44d83ab8437b4f61078696f8e6abe5a5610514f8dd4466d957dd041843eeb7acbd616bc8e2c02caa9960376c05c18903f4300\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.112\",\n          \"version-display\": \"8.0.112\",\n          \"runtime-version\": \"8.0.12\",\n          \"vs-version\": \"17.8.17\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-linux-arm.tar.gz\",\n              \"hash\": \"6140fe3ebcd37500fb018dc99a847219139e7bbb1322550cd521e03ff2e2b73e6c5a7eb2e60fddaa10d30c8a9e2558dedeb8453f85231f811f4d4d999238d183\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-linux-arm64.tar.gz\",\n              \"hash\": \"2d7c1df740e9e25c6c37226ebae641218d2e9e39ff90a92ce1a595edae000e1989dfa891becfc539340edcd90fbb98ace32b8e16b998ff06c77411a1d4204140\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-linux-musl-arm.tar.gz\",\n              \"hash\": \"a978ab8a0bb30a272c4730c3f93554dea030d6666592bb7604047ebf35ba66519bae5e5e44ad188555f01c44ef000927f3431cfc4c2dd771397b985e7bde60a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-linux-musl-arm64.tar.gz\",\n              \"hash\": \"790b9beb563ff5dc06ce32edd26e6dbfc3be6bf9cd63e5a5b3b486efa3c1a595fd9f4d4254cbf7efde3c32e8542f7f6ee83290e6a6e5e1f7219ebba3ef7dccfb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-linux-musl-x64.tar.gz\",\n              \"hash\": \"48832015e0ad74fc3677086044e0ee5004fc0b9caf29ea2113444a041943e2138efebd34780ab4b63194b794df80a38937b46096d9a20c832db54fe05843d24b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-linux-x64.tar.gz\",\n              \"hash\": \"dec99628b67ca7ceee9d0be6e36dee76723a210138dec05aa781a45f4741027564442e74a986afe874919a2631c3e75555ec68e4c3e475bd2f807a6acaa989fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-osx-arm64.pkg\",\n              \"hash\": \"dc356f30f5c39289d235987e9e8acd5794ed2ba584d9dec6c617a8060b4771b52a51dd764e62cd798c62bbaa0e3805bee7bf389a8c4c5a40f93af49e35cff003\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-osx-arm64.tar.gz\",\n              \"hash\": \"e28fefa80e8a5eefa1b8ed7cc7bf7fa5921f381cfd3b16c2d77f15ed3b6188f2ded4e158281a92c27ee5349d04a0425e4ca64decea3ca0718b3047e1e7cbab78\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-osx-x64.pkg\",\n              \"hash\": \"96dbb08d0c583137e87a99139e3993e9714b2ad939d6975efac8a5f739a2c6d0502b6bedf29194d861c521c5b5bce27644e7cfb631c4414b147620a80b8cde25\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-osx-x64.tar.gz\",\n              \"hash\": \"294dcb21366f423194dad956a86e0aed9a0e3cc2265ff9b1bf61c78f1ac783c614c25a06f64e6b35790135bc899e414dd77f1d728f4f95c95ad57b8001506ba0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-win-arm64.exe\",\n              \"hash\": \"6ea537b048ce689ea7156976acc0466cd9f11074ed00e0d0a75aea4ff9f931571a456e6b74867b9e6ce16756f18f5de7a20af16f723112688fcdc752701e5e8b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-win-arm64.zip\",\n              \"hash\": \"e4222b852d83ce126caa8b56aa855837ba735178444960b5fbb3f5c755b14fb2eb9027703aa97aff119dd9929339e0584e58e7692661314606032eed93850af3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-win-x64.exe\",\n              \"hash\": \"1f07e60e142fd3de50164ea0eef2e980d288be09bd9f49955600313ffc7c9c8e5698ff1e202e5f98f15651cf1edd03950161e7c9ed3eafd3924bf908acc2cd51\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-win-x64.zip\",\n              \"hash\": \"a2326748b6ecbf906186947b3b88e9bb99918edfad8b9c1c39eae924370872f23b40a3371e01b31f252b5478e2274d89e587c36ad85059c0cdbd9bb48375034e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-win-x86.exe\",\n              \"hash\": \"655f9c56ec215699804fc956c4fc076a9b2d33b2a5213a898d1c92194dbf8bd5d69cc1346ee34bd3fa04c4dbb1e385a35039464ccf5666baeffe573d685be5ce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.112/dotnet-sdk-8.0.112-win-x86.zip\",\n              \"hash\": \"e7408e994550f0d54ac1ff3f46b4da1be494d8bfdd3c082470031fc15e652f4d023eda32ded68e71785d81e6f32c82a5ba3252a00a92ed06aa1b426a3b0d92be\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.12\",\n        \"version-display\": \"8.0.12\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24339.12\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-linux-arm.tar.gz\",\n            \"hash\": \"144bd7d4502537a2806d17ee1612e4b3c262766c5d83da8b1031ca61f2a1eabd1bba5a531b1bfcafab999f084db961c9795804de651d87f81dd6d64976335948\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-linux-arm64.tar.gz\",\n            \"hash\": \"9323f6584bf98500fe023009dea5b90e49bbb34cdcea0868e8d18c2fe260b087315438ca2df783f259003c1a0ee31f2d735c8cea85c2c4fb04f6dafe05384531\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"174189c851eb178dc7b5624b220b0a0df8acbf41c4cd73e155a9d1efd2e6ad2ad77ac719f51edbba4984e4be90763a26eebbf958c1a77ae32e26f728016511b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"77ae48a34d3b9478aa11b8077f7b1d6f5ea47699f92e3dc29d05cccd16b25e023587a960d9bc2a5c25939cbb7494102ce7ae7fd6c09f597914981a5e7ed92716\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"a7d3bae2da7b4da946851d36196d41053593af4138d1ae020ce4b9b141c7e84d53446cb0891e127983abd5e7c011d7c9d2039227dca9409d6faeb6383583389a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-linux-x64.tar.gz\",\n            \"hash\": \"03a7fd37dce46c31d7e74da7cd4d9aabd82d5e087859d0065f470ebf7d0b62ad1feb59fc3f74690337a928f5751e04bcb7838896e64b3f8d25ae035c5b7f5c83\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-osx-arm64.tar.gz\",\n            \"hash\": \"97be6555b94cfde22550b434c0eb8dc329181b30b930b62c52f4047809946d0558b3c8095509cd07213c75d51f5d260207cfb09335f160ed5c55ee8b69e6374e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-osx-x64.tar.gz\",\n            \"hash\": \"ab313cd3545986f305af11f5495a396cf5e7d6626d0e46917efedf4af7aab29cb9f2de114c9d5218081d6739dd52f96989906b10536995f5672b71cc865894a7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-win-arm64.exe\",\n            \"hash\": \"0ef5d04b1041f5a333926705d35a5f0a88bb1de029baf67f06f8b0351ececf95a2bbff5d7dc1e56fdcc9781cd0d92cc1e4fbb2333000ef7ae20809331fd376fe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-win-arm64.zip\",\n            \"hash\": \"740714720dfa19fad80aaa4e6e740df3462bcaf06122c28ccf33ab9821c5f87b6887e5cf1296d74a383c78538916acf2bd69d25469a60c4248985d5207a2c28a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-win-x64.exe\",\n            \"hash\": \"378536989589882cd4fda1574633e2791814763d24acdcfcf7c630c98f482e4b27bd56295c1ce0423d5c9e16d7699c87b459d479b5cb074966d18e6653d6b876\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-win-x64.zip\",\n            \"hash\": \"28a3d2cde0d55da3c6943d707b2744cbf9b225bf3e66f8dbb18aba5196725bd7048f4fba5af219ae0a7aef31a4ff7e309396518ee7dc0eb2a5c2a61955d5b10c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-win-x86.exe\",\n            \"hash\": \"0a98d63243f2f3ecf02ec7cbf242a5af8e4def2f0efdee758961063186988167f973ada0733013fd52ba6ecfc1b822a00e5c5df6f4a027c113fbc226810c6559\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-8.0.12-win-x86.zip\",\n            \"hash\": \"ce8ebb3c00c45fe2fdc418883220767161af6217fc9cf7cd4e01a9d187eff4d0f73d45c90376680f3a8270f958784e295ef64adb4823cb8ddd4cbe8be9ac0fd9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-composite-8.0.12-linux-arm.tar.gz\",\n            \"hash\": \"7833ebecd098e2009103bab89dd6607135c6fa83dab11d206bf74aa696e2a71ab51d23a83673860c14301448651a54e932bb93373f4ad2bf8ddd04ddb20efbd2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-composite-8.0.12-linux-arm64.tar.gz\",\n            \"hash\": \"68d304d4e7e0d1dfb26d71886d9656f4208d36ed62ea89d6cb83a21e2fb5cf96a028f42cae146f4467caa8384a69ee7278e031ebf6c7053787968415ad048637\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-composite-8.0.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"44b22ee55213537adfeaed8c94bf295769ac96d3d2bc244cb20811cf4aa7c215f6c2e31856a2c100c4fb1eb0f9080f07c57fcea7e985232d32c0520e7c02449a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-composite-8.0.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"44707162db307159e8ff643e50d630997b86043cd4e61059129fed20ac6b88c2a5d61244f6da40d93f4681e1fc4cc844174d62e38a028042d520b963264ab1de\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-composite-8.0.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"6ca899516f24c3173bdc467dee009ddabb3a78d16a17ed4295b6ce24f85734ac99cc70dde57a83f66d28ceb1c953ba6a7804bd89b6b613b915346934c0dc712d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/aspnetcore-runtime-composite-8.0.12-linux-x64.tar.gz\",\n            \"hash\": \"2a1028df28a8d9967884c7cada4297afe23cd412f9cc1b53fe20772dc22735cf50a8899481fef163f2d17e6081806eac7e90cb8ff6701067ff7ab2b90e70c7dd\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.12/dotnet-hosting-8.0.12-win.exe\",\n            \"hash\": \"8c9cea084bf8f7c6f600b8ee850060ea55fc048a715777e38189be63e4c35eafe36300789514f6fe9d2e12e411d5275fc661240ea6d395128a10c8b9747eb123\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.12\",\n        \"version-display\": \"8.0.12\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.12/windowsdesktop-runtime-8.0.12-win-arm64.exe\",\n            \"hash\": \"6f1445aa9ae9133d4e2a0738b30c2e6ee921e16a5f64b958e62de042cd1ad3b91f8565251d59ca9fc801e96fe6fd1b39db0feb3acb5c8890751320671dadfd47\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.12/windowsdesktop-runtime-8.0.12-win-arm64.zip\",\n            \"hash\": \"20862090cea0c8154c4be0c49a673341e4a9b5c74906a1d58a5d1547ced9910abaf9ddf9b6f4a2a05be54538e2b274e91f785b670af163581c37ef3da7af055c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.12/windowsdesktop-runtime-8.0.12-win-x64.exe\",\n            \"hash\": \"c5b6a2b5c38a8b2a4d4f096e6bb62ecd74ebfa039ce9d0e19b023099e364f29a1c256014b8995ca152b64a00c951feb2f93bf7d4c85eb70cdb30a209f4b1e17f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.12/windowsdesktop-runtime-8.0.12-win-x64.zip\",\n            \"hash\": \"00a3ebdd3b676c300338655330806b609d453e8d18f102fb910ff7b8858b3b29be508452e4715cc8926e5a417ba320cd37b68302bfc699b2ee9a6ac8efa53bc7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.12/windowsdesktop-runtime-8.0.12-win-x86.exe\",\n            \"hash\": \"6d70f98c4257083dc0362bd0dded0ae02baaa54e53367227a4accb095c7c0962e5d47f7f933805e506909cbb58e8e3cd0e4983fad11bd11ece05207fa5a6c0ad\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.12/windowsdesktop-runtime-8.0.12-win-x86.zip\",\n            \"hash\": \"e2cd7d17e58f1daef4745a5cc6df8fd0ed1788654504492abf4a8c337308b1374d3c0cc9d8f939765b2ecf09e4c3e662172e5be46d04dce1ed7e911bc28ade13\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-11-12\",\n      \"release-version\": \"8.0.11\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.11/8.0.11.md\",\n      \"runtime\": {\n        \"version\": \"8.0.11\",\n        \"version-display\": \"8.0.11\",\n        \"vs-version\": \"17.8.16, 17.10.9, 17.11.6\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-linux-arm.tar.gz\",\n            \"hash\": \"279b93bf6b5c5c2f45427b620c56bff0e22ec8f3fb9a4f3749e7a6a0d0d0ee8163851b5bd081c6814b758068df7ba1b9401c844ba5905b27a830020846ef6406\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-linux-arm64.tar.gz\",\n            \"hash\": \"f27d66dcdd249a6a2f87241b460238960240d163ffc081d8e7b42bd62702079f1a6784e3503dbd4ea8f9e816d82142fc829c759cbf9a1682b0340f0cebe16db5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"e29ec7c4c123debfb1c20aa49eccdbcb6c493a0bca8d480c113d0e413b2b546ed01767b1056dda4b0f58029c147f513c3af95669d29cb2babdbda4d358b2d0fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6a94ce888eb060f63a0ec9554985198c48c5c5612577db7c10204b58b2ef36ef96a597067d75574abdca61a87472914b5df3312be74773ac32fa7043d60370d8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"ff00d19ced7ea204caccc6c11c484e5a1ecdb9ffa9ac9a6b8ed2f7f7c9089aad098e5b41d2ebe5c24cbbc0956df64032b62ed7277fac3d3b64b742c50209be61\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-linux-x64.tar.gz\",\n            \"hash\": \"71ea528900c6fc7b54e951622296421d2a96191870c47e937117b84b28f91bf407d02046ddfecfe4ac37dc6182c65d1940927c33e45fa3d6f0179f81692490d6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-osx-arm64.pkg\",\n            \"hash\": \"99d78719d5153581f7987aa61346cb8677f9263e5c522168b6a50823b9b2993149332d1cde8e5fbdb4081fe53c969e805957d83b2fe99aa2832588324bbc76e0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-osx-arm64.tar.gz\",\n            \"hash\": \"2e15d93aa59516f2e779f0c2f3c7b50efe3c4547d546bffbd1daf23fa6503d693649b2a9355e0388b7089e2de072e7b884ab04b38ad66544ae5c97c2f2089d1c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-osx-x64.pkg\",\n            \"hash\": \"30665577380b8e7f4765a61298d67f874e9b992418fd82113f2eda0b777723fca428bf829e77b4c8a3f05f2328887ccde0a8d77c7c60a6a9b45eb9e1f4c1ccf2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-osx-x64.tar.gz\",\n            \"hash\": \"c2d008cac72b1999ea91ad540c04402aa8c2c55b992a850769d39cceaeb5634f6f7f04d1dbbca51bdd9e12f045fee315b656b58530b57ad2f61480ecadcca3d3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-win-arm64.exe\",\n            \"hash\": \"5742b8995a65fbdd70017d6261716b59ad8cecd1565c9d3f3a8249df704854552e62db0733130adae9608bbf8fb13d1c659c4f343f5a824b6e7d616fa74f6da1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-win-arm64.zip\",\n            \"hash\": \"30a38c257870a912cb7662a60f54145910c50252b7940cf40072659dfa3618391dbfed0a3e1ac4c11843fce3ed6b76b11a4b6267a13401daa9192226e7842690\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-win-x64.exe\",\n            \"hash\": \"dcd4e61239389e51fa3679244df29cbbf43ddd0305546479d64c5e1da3c0f4322f60a0af56375a2d3e0951c973546dbf81c0268be53291aadd5a36c65c3f901f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-win-x64.zip\",\n            \"hash\": \"a0ed92b8ffeb4efb61a93c3cb7c1ed66529e23cbe60b44d621b49b1cb90159866a3d921630485fc0e2b1660b2001f73752c6fa6fc9dca40145ef4549dd26a1ab\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-win-x86.exe\",\n            \"hash\": \"b438ec56b89c3b1f0506e2c0b11d54330c7090f44a2bcc54b834544f8fc0e68b24bf926d33b4b5933d2749a135b6c71b9a9e0dc7ac0808e45fa85047ef7791ab\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.11/dotnet-runtime-8.0.11-win-x86.zip\",\n            \"hash\": \"cb80a41ea64db17f2cc21390fefeac7342e965fba3bb6f768c51fdcf7271fbd1399eaaf33ec1162bc206e47bc8d296d28ddad2139c8a770d02e62fa90af49a32\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.404\",\n        \"version-display\": \"8.0.404\",\n        \"runtime-version\": \"8.0.11\",\n        \"vs-version\": \"17.11.6\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.11)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-arm.tar.gz\",\n            \"hash\": \"489d61e3b02e49ef6f3416ffe2675e072ae7d9c3fc43fac089d373e42bc57807937d2d6a7717daa21f225b1144f720f0d15f632460dfb14d0ad2adb8088de4d1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-arm64.tar.gz\",\n            \"hash\": \"d147ca2e6aad8bc751b522ae91399e0e3867c42d17f892e23c8dd086ab6ccb0c13319d9b89c024b5a61ffb298e95bcfc82d9256074ddace882145c9d5a4be071\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-musl-arm.tar.gz\",\n            \"hash\": \"b32ba287ea1075bcfc4b54cf6027dfb1a57671bb6dae2f8d7d45ab5b020d42ac8865c53abf6827dee910dcb3a41dbabf7528cdc681b1a75a6c4c9fdc5dcb3708\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2c2cbaf17607539d67647b4724bd6e11f1d00f617c98c4408ec947c1f2aae474dd3bb015d0bc39212eeefe9fcdbf20e6ae957008aae90c720beec0ebc7798ce9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-musl-x64.tar.gz\",\n            \"hash\": \"e6da3b405d862f31d790f519716f0827a058e3580afe09d1103522be42e56c2e2be1e800b94dba940334585b785eab61a38bed02323695ca4407087e6c0cb9f6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-x64.tar.gz\",\n            \"hash\": \"2f166f7f3bd508154d72d1783ffac6e0e3c92023ccc2c6de49d22b411fc8b9e6dd03e7576acc1bb5870a6951181129ba77f3bf94bb45fe9c70105b1b896b9bb9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-osx-arm64.pkg\",\n            \"hash\": \"dbcce7787bfe6e104ecd456652e955e4907373f52c3171a984554b583cabc3e615967e398c51a3f75db52cec30139fea79548addf1b3277a0fb3ec6c5396c248\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-osx-arm64.tar.gz\",\n            \"hash\": \"6476531a63bf4bcc7bdde2f5a309fa2b2920bb630e08fa0aaeabd6578bb81d534b1dd3bad214617f72b5555a49a56b9ec770626d64122da7076dfc13f0c56cbc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-osx-x64.pkg\",\n            \"hash\": \"bdac0283ffbcac2e2f1e40a6363974f8f81cfd7744eb08e788fdf1be6afb648931fa975c4ddc15cd9de2fd5e2df885f22435c31e2b84f7a09f2580164cc8b2d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-osx-x64.tar.gz\",\n            \"hash\": \"2269129e81d66cd0cbb5e1af1185cb5ac1324ce89aeb416ddb6ca46c6559cc2ca223864bca7f88ccc6ba34f72c97ff47fa7cf1a17a5908cafc4d7c7725412e99\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-arm64.exe\",\n            \"hash\": \"599c59addcdb9b7680f88721a6365eccede1f56634c99fecd5e8dcce5fb0d2050282f2586816f8ab89d0f64450cdba44977f2a8bb15a9ff68a22c6669986b19a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-arm64.zip\",\n            \"hash\": \"d3ce21557b9ed09e7e705930a4b7ebb602882f55721a87570e9f9f571754a0dcb218d0354f97cb1364ba43f67ecf1d9e7240b4cc4454f475dd4af65291a9f939\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-x64.exe\",\n            \"hash\": \"c48518ba763f6b72ce8c83a4289e4f2468c5b654b80ccebc410d3c76b10729ee803ce0964d698e1dc11fffd09ec07e16684db48c2877cf57e7608a773eb02738\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-x64.zip\",\n            \"hash\": \"fe2a799726fafa252352e6397dd790717f7263903408ccfedb0fb275ba93f96a7840dacc7f188e94d87671313d2a48480ea8387408ed5772b43c363e2dbba1ba\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-x86.exe\",\n            \"hash\": \"95185dec2e17cc186af1632901d537e5ed2bbd9db0b38ef64fe09a09d09aa83230460b83dd59dfbe2c92b3fac2e95f8216b7741ea7990a5a367c50801cd97dc8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-x86.zip\",\n            \"hash\": \"d733d4a5638ae9de299c778edebe006b2f2ec53ae39b87a918c051afc9d1fc81d03a2d7c2d0681ebbf7d15d0ad613d4126f4929afad57cb35b191c1352ff9c5e\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.404\",\n          \"version-display\": \"8.0.404\",\n          \"runtime-version\": \"8.0.11\",\n          \"vs-version\": \"17.11.6\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.11)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-arm.tar.gz\",\n              \"hash\": \"489d61e3b02e49ef6f3416ffe2675e072ae7d9c3fc43fac089d373e42bc57807937d2d6a7717daa21f225b1144f720f0d15f632460dfb14d0ad2adb8088de4d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-arm64.tar.gz\",\n              \"hash\": \"d147ca2e6aad8bc751b522ae91399e0e3867c42d17f892e23c8dd086ab6ccb0c13319d9b89c024b5a61ffb298e95bcfc82d9256074ddace882145c9d5a4be071\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-musl-arm.tar.gz\",\n              \"hash\": \"b32ba287ea1075bcfc4b54cf6027dfb1a57671bb6dae2f8d7d45ab5b020d42ac8865c53abf6827dee910dcb3a41dbabf7528cdc681b1a75a6c4c9fdc5dcb3708\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-musl-arm64.tar.gz\",\n              \"hash\": \"2c2cbaf17607539d67647b4724bd6e11f1d00f617c98c4408ec947c1f2aae474dd3bb015d0bc39212eeefe9fcdbf20e6ae957008aae90c720beec0ebc7798ce9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-musl-x64.tar.gz\",\n              \"hash\": \"e6da3b405d862f31d790f519716f0827a058e3580afe09d1103522be42e56c2e2be1e800b94dba940334585b785eab61a38bed02323695ca4407087e6c0cb9f6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-linux-x64.tar.gz\",\n              \"hash\": \"2f166f7f3bd508154d72d1783ffac6e0e3c92023ccc2c6de49d22b411fc8b9e6dd03e7576acc1bb5870a6951181129ba77f3bf94bb45fe9c70105b1b896b9bb9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-osx-arm64.pkg\",\n              \"hash\": \"dbcce7787bfe6e104ecd456652e955e4907373f52c3171a984554b583cabc3e615967e398c51a3f75db52cec30139fea79548addf1b3277a0fb3ec6c5396c248\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-osx-arm64.tar.gz\",\n              \"hash\": \"6476531a63bf4bcc7bdde2f5a309fa2b2920bb630e08fa0aaeabd6578bb81d534b1dd3bad214617f72b5555a49a56b9ec770626d64122da7076dfc13f0c56cbc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-osx-x64.pkg\",\n              \"hash\": \"bdac0283ffbcac2e2f1e40a6363974f8f81cfd7744eb08e788fdf1be6afb648931fa975c4ddc15cd9de2fd5e2df885f22435c31e2b84f7a09f2580164cc8b2d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-osx-x64.tar.gz\",\n              \"hash\": \"2269129e81d66cd0cbb5e1af1185cb5ac1324ce89aeb416ddb6ca46c6559cc2ca223864bca7f88ccc6ba34f72c97ff47fa7cf1a17a5908cafc4d7c7725412e99\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-arm64.exe\",\n              \"hash\": \"599c59addcdb9b7680f88721a6365eccede1f56634c99fecd5e8dcce5fb0d2050282f2586816f8ab89d0f64450cdba44977f2a8bb15a9ff68a22c6669986b19a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-arm64.zip\",\n              \"hash\": \"d3ce21557b9ed09e7e705930a4b7ebb602882f55721a87570e9f9f571754a0dcb218d0354f97cb1364ba43f67ecf1d9e7240b4cc4454f475dd4af65291a9f939\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-x64.exe\",\n              \"hash\": \"c48518ba763f6b72ce8c83a4289e4f2468c5b654b80ccebc410d3c76b10729ee803ce0964d698e1dc11fffd09ec07e16684db48c2877cf57e7608a773eb02738\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-x64.zip\",\n              \"hash\": \"fe2a799726fafa252352e6397dd790717f7263903408ccfedb0fb275ba93f96a7840dacc7f188e94d87671313d2a48480ea8387408ed5772b43c363e2dbba1ba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-x86.exe\",\n              \"hash\": \"95185dec2e17cc186af1632901d537e5ed2bbd9db0b38ef64fe09a09d09aa83230460b83dd59dfbe2c92b3fac2e95f8216b7741ea7990a5a367c50801cd97dc8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.404/dotnet-sdk-8.0.404-win-x86.zip\",\n              \"hash\": \"d733d4a5638ae9de299c778edebe006b2f2ec53ae39b87a918c051afc9d1fc81d03a2d7c2d0681ebbf7d15d0ad613d4126f4929afad57cb35b191c1352ff9c5e\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.307\",\n          \"version-display\": \"8.0.307\",\n          \"runtime-version\": \"8.0.11\",\n          \"vs-version\": \"17.10.9\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-linux-arm.tar.gz\",\n              \"hash\": \"92981bdcdcfd184db5e401202e37d6aa84383b52367400e26fb25c08b75de8b6ab096e575d73044a7d5230c5d478001abce4daf28a1afb372ac2346525380e4e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-linux-arm64.tar.gz\",\n              \"hash\": \"5d3b992b525f3ef8be5faf67378d7457210eb81452c6a4090dcc60567477978480be180d04886165a4a334546421bac5c45a0d8d6ef9b40d0c77cd2d5e6fcde7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-linux-musl-arm.tar.gz\",\n              \"hash\": \"c33cfb368d5dff64dfaad5482fedb5993509c64c659f08f9f48ab655bb76931ed17bcf0f2053a4628820e5c882fd3f876e3ef0125c683625c6f28a7607e63bfa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-linux-musl-arm64.tar.gz\",\n              \"hash\": \"501a2cefba13043f0ae1d9609bc3292da217940f531e2f67277c0738de76692252d7813dcba706edc2a20f46a9fe76950c7c18032466e8e8fb4824e7ad6feff5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-linux-musl-x64.tar.gz\",\n              \"hash\": \"252573cb7d40128a413914148c3974c105ba7c8b9e0327b4a625b7a3e3154177bebdbfd489c2493fb14fabc097c161ab4fc98a4f26a734a5fd0c9923f5b3cb80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-linux-x64.tar.gz\",\n              \"hash\": \"94923a5cc2337b531bd3bdf08c99e7169ecd4c81a63a2b8ce204fb087c4eb526695218fc763860ea2930426c2b31c2328df13370d64217d375198b93fdf04c9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-osx-arm64.pkg\",\n              \"hash\": \"19ccc1070e9e334a8276ca9337c990f24ac25195deba8fc769ec6e6e0c580acd5cf0bfee7047dd74f26015b0402dd2f36655d36be8a9ba2b6aeaa9202806ba55\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-osx-arm64.tar.gz\",\n              \"hash\": \"c522d9e22321d044bbb447ef24869b125753d2267a5dd5387059be099d37d7e981b38103c4de695210274b2c40a26edbf8658c838c26d20b44f31f521b45b5d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-osx-x64.pkg\",\n              \"hash\": \"a2e61b3e6c230c27fc736076b8745150d53caf5ccbb628716816c01f915da6ee1fe47a4f82ca980d9857167b1bfef3715b61d92c3968891d7134efdf9f453f6b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-osx-x64.tar.gz\",\n              \"hash\": \"c93d7ea505c3d7e1ab024a3b0110ebdd6832c582b6e3f80790bcc15554e039faaaf56c9a2b647bbcd25c126eed24871708bb9640b4790452ced99dd171ad15d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-win-arm64.exe\",\n              \"hash\": \"10e77ee7494911c9124daf61c7b1bf242f4baea1b7cee8569080fe0fe79f641c4539a519e23b3b5c06f96f11e72feb6d0de17814a231ad936a3d9034fb8e3bda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-win-arm64.zip\",\n              \"hash\": \"18b4bdb5f6a4912a6790b970a6d3c822065ef834a2f2b981a348efa3936e069ac973d9955bceacc84853bc0f0182357a4e700a76a471df034776fb7baefff668\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-win-x64.exe\",\n              \"hash\": \"446d060b6716a7e77e353fcb9407ae7ea80596979bafbcb8a2339a374319cb7795996250c9e423f6c64ced596dc0feb1bea75c6e861d2b38ad9ef9e42848476c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-win-x64.zip\",\n              \"hash\": \"57f7db4ecd8d2c25d2fa4201742b5b52965d4b1b5566c2580dd91a3d22053362104f7b50f1a568fdf4c363b99a4dd19c1f687afd99d06de8b08a1c81f5a8de1d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-win-x86.exe\",\n              \"hash\": \"6fb98d60155db665f0b2c9b48bdbd5f3f16f09950e5dba2e6b673da9402f734a6a135fa1710364d3751738e86a946ea1322ea7675d5a15788fd508bcc4437a35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.307/dotnet-sdk-8.0.307-win-x86.zip\",\n              \"hash\": \"fcbdd8cb6c32082c1d33cee3e3ad835a48de5d4dae70b4bb9cda171b654ea11d9a655a27d669fcead0dcfe2fe319b1aa65398fa1fd5069e90477cab9e49b8e54\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.111\",\n          \"version-display\": \"8.0.111\",\n          \"runtime-version\": \"8.0.11\",\n          \"vs-version\": \"17.8.16\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-linux-arm.tar.gz\",\n              \"hash\": \"2f0df60b05878e02c16855c4942e8f47f09a356c598b55846ca3b86e9a5a4900e774fd75ad69800da2990d16e6d4f16edcc53e5fd9bb06998eb4abe0da9d2c86\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-linux-arm64.tar.gz\",\n              \"hash\": \"9ad1a8349d4cb652fbe99eb2b56b2c714f09bb49ecc2318d859721edbd0c2c1e5f338444ea1ee6dd2f02e7d101bce0d3c956913312677037059644779498a54f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-linux-musl-arm.tar.gz\",\n              \"hash\": \"297fa288c8c174ec16ae9d775411668a827bd22277722b0f2885ee6097c0a827d9f35c34052ce58a90f16d4feecabe738c63f1c902b3a8fea36771a3bde4afbe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-linux-musl-arm64.tar.gz\",\n              \"hash\": \"7cd6fa333fc195e5f5515bb675b86ec3160a4d1a82c6896b39d04779bb1d2aa8677498ea72a7d3e85abc08646552d361a277d9a6fb8c418af7077df94f2ae03a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-linux-musl-x64.tar.gz\",\n              \"hash\": \"a51753743b0145060f7db17c33a4708da05f1ff7eda043ae9f39a3c74c5a75537d016e8cd6b1818ac2d03ed00d3539b4a1cff4b360724a09822baa8a896f9202\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-linux-x64.tar.gz\",\n              \"hash\": \"e46e39a771b29744dce665a87cd5322dfa912ab2904bcc10f0507dfcf4ca05684cf64c34e12c7084af49a784cc04eb532a3ad2be4ceb668176347feb4be37f81\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-osx-arm64.pkg\",\n              \"hash\": \"cd7876515ec36cba0a20963cea50c7290c9c0b510b0b7eda33180d3cf7f99a2edc68d744c98c30a16e47a188c7172cc711c409cc7bd8063516501bb901546789\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-osx-arm64.tar.gz\",\n              \"hash\": \"b47fff1bf5d9e2b5ca7b684d72a0504c3ccf8b3374b8d7a2e38e41722f7e11748001fcd3448e626014b9fca78082bfed9c0e46f5ab141a646421ebc2191b9a5b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-osx-x64.pkg\",\n              \"hash\": \"ffad90dec72a979d879421aaea3207912f5ee2cef02d004404035a0a043cb849083a26285963f52232f38b49aa0ed88c0fb88d066d6d830de3171cb925d0692b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-osx-x64.tar.gz\",\n              \"hash\": \"419f2a65e5714537b185691c9a7152abd4e5f85f6e58066086e3f341ea4f16e0f564bfdc64cdc1e78763a8c3b872b76cec25cbf77fcf665d7d74819c61fdc96a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-win-arm64.exe\",\n              \"hash\": \"da7a3e547c2f3e4efce3cdaba2350638e0b1d8257092fd37e1d8c4cbbf1a4fabfb757858a00be837d5a46c6a7e29e4558182da6e9721616598b6e7594b68f145\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-win-arm64.zip\",\n              \"hash\": \"0da7d2ee750ad8e7dffbeb6aa3a9ec56f602a601adcb1ce50df0d65d908cdc7c8c0ff0806bffd063799f5064b11307bf7f432e86ca035223831a4a5dc203958d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-win-x64.exe\",\n              \"hash\": \"ef4416f0ff1e90131ccdb1f183590fc7d1fdbc82cf09f081b3be9fced7df628590ce3615ddba239375dd2e4bdd5d2c37811ff797c25ac244d82eb14ca3c3615d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-win-x64.zip\",\n              \"hash\": \"ae87a5850dcb5949a954bf32c13deda443725ce853ba325f30127a4f6fff1ecd7eba132c4a964f572e934d8e6b897abca81260134eb06af374a20914e9d6c09c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-win-x86.exe\",\n              \"hash\": \"62732c054201aa369a3b7336909ad0b3cfeb1c40f9ae5bf4a0b788765d0ee8368c497e6c1d293af76218cf6bf09b761445a4396d4f2bab41f00b665e00dc62d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.111/dotnet-sdk-8.0.111-win-x86.zip\",\n              \"hash\": \"60640174ea583de361305f49fce5283674a0169091b76163fc5fb5a26bafe447f623f0d790df5375858d0bec43120a3b0a81d179bb1d5b3e794c51bf02346bf7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.11\",\n        \"version-display\": \"8.0.11\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24295.11\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-linux-arm.tar.gz\",\n            \"hash\": \"76645f129465346c5de7c543bea53829228a9912971c459ae48243317c73f47dec23d7b52d7d94ff3c701b8d2de651f3375deab38100f97be81f577c3b8cce1f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-linux-arm64.tar.gz\",\n            \"hash\": \"75b5888b7d65cf9e971925e48962c0822f630390a3f0f04ce1d84546990fed312e8ae8513c82caeada145c2ac8de2b229fd1dad2d2df36c8e9db0df9f65595ac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"0748242eacbc47953694e196554cba14d91fc30d797fe69f904504a705228045ec46cb0de19545208ccad742682d435921fb2532c23b5bbe82295fee0804fba9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"862ca7cf349e9454203a1389ab85283c91a104d7d6b70ae66c39b7d413a351df2075edba520673153110b9ebad15801b6b2284dafb22bdaf93555b964367df40\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"9120ef0cac2002fefee4ab900fc0085fb56dcae58567cf8f8f61f04f6f5623dc995cfba8f6dc2c61fa4d96dda3a2ee0edc8530b40fdbc16d26aef5ba32721c4d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-linux-x64.tar.gz\",\n            \"hash\": \"e7acf9dc5cfa49aa7ec30dbb9586bc7beaac9e3116c75303b511770e3597b209739f28c754b2107c0255acac90187cd1000c1ee772463fc828934a4dda35f5c3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-osx-arm64.tar.gz\",\n            \"hash\": \"6b2d3eb58d778b63f982a0d575397386a6d07fca649f1b94ddf08fc44e9884df54742aa0b82854cd594120984a39c62c79c15462f8984cdc04188542dcb612c1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-osx-x64.tar.gz\",\n            \"hash\": \"93e4f129dddfb153f24183759266d0d24a2131e7f272361bc05e7b1b55071c1c6a2e0375f7aa20422712c85c922607e8e23442eb9241ee73608d2f2015c7dc54\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-win-arm64.exe\",\n            \"hash\": \"9e785e082be349a5d8507ed8dc51c9314ed281ed34903e4f3cb631d5fb4a7d98e87487a5de9f10e213638e470bd0b6b6a1730c7aeb48283140d77d382c7a2802\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-win-arm64.zip\",\n            \"hash\": \"1c7366495652c2d892e74eed81540cd1d47f7270becbad00c01edfa0c9647a1f60c7da494a4936c2517eace197bec7cdb32d8eb4f156acea9d65bb5870d2601e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-win-x64.exe\",\n            \"hash\": \"272766b10dc3b049b097161d9a99728993b3859b021476479a145e64114d242fa409e13038d9efb6ae172f93624ee0ee88bef2e4a8f9f8ce29aafbb907b98d4c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-win-x64.zip\",\n            \"hash\": \"a3fafcdbd72e3a34c60c8a607a2c8e4122bef88d8f2fea56d7a87552546adfc646865b99a0cafd8ef945b0db918ed189ad1080e9e5f845f10a25fa9df5961c85\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-win-x86.exe\",\n            \"hash\": \"67677c5c954c60b893abe52268dfc2a4efd7ee42c3642360370b57905498a461a998d5d0c40855e374f80249a4299d4799e76ae7ef2b2399a5628c1140ad80b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-8.0.11-win-x86.zip\",\n            \"hash\": \"c0399cf5b217703f1142f3d44a29eb443621f6038fa1bf602c3c661b5a55c13f18a74f90a6abc3d1c1e1b6a4232a7ab7b9bb19ba7f3454387097e98f79b5fdd2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-composite-8.0.11-linux-arm.tar.gz\",\n            \"hash\": \"1d15946b823f3aac007d5f265d3cad731bf79aae60b79a7c6c27f62c9661b03280326b8ead37a16f0962af00c1b1569d95b84f9a25e8de672fa610a74c3faa82\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-composite-8.0.11-linux-arm64.tar.gz\",\n            \"hash\": \"0e0e02c03c59ea68eed94bd482c5820421184f7b41a90fc7c3ac58e5ae3c588233e13722906f5d3de4513a3b9a55bdb81d13e3b193d57ddb106ce6a5d027a99c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-composite-8.0.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"74c72b06059b51d75fb05e6495a65f096ed39d6c3ebcd0e3fb4712873d6effeb005d85e1296f334acbe32ce53e3ace66960e756b1e3f7155257508eb9c8295eb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-composite-8.0.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"051b1087f6fc052f9c52c4f00d526c52c6c16705eae81ca5a5f436503d17eadb668a2065eba8c70214b3088d3a3d3a68071946c5ffb1f922b8ba5a43375158d3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-composite-8.0.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"ffe1b824ce11dd7e100278b6950c5755e4a5c975328c14c56a403fff408e024506eaa67c7be24baf6b87b3afb2c37ded0e89eaa5170cd04e0e279f4f969e28bd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/aspnetcore-runtime-composite-8.0.11-linux-x64.tar.gz\",\n            \"hash\": \"af0bba2eaa03d98faf86ba891281bec966e7faaee5b317d099748440adba49355d17bdb6cdbb46f9c74828b02fe90059c4b7890ff6e2304c211754a0dea3c40e\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.11/dotnet-hosting-8.0.11-win.exe\",\n            \"hash\": \"efe670c04536c87d316c9c0c6def1f8abf47aac8bbffc5b0455751b6e027a6cb71a651bedaf32a91e70d0247f13adb2d114a277eb4104012d14ead4b2a9f25c0\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.11\",\n        \"version-display\": \"8.0.11\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.11/windowsdesktop-runtime-8.0.11-win-arm64.exe\",\n            \"hash\": \"888487f046d07ac904c6de902dd5403d97f5a7251758e976f98c43c8a5fc1146996acc37d492466ab60bcab00be4db433a84d9ef01e897c8528c800262f13ebd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.11/windowsdesktop-runtime-8.0.11-win-arm64.zip\",\n            \"hash\": \"c528745b42345f0a33dba7cfc9227b41e5c22b33e3d472ae502f782059ef2012e6ceb84c721b9b54c4b8449411a13a36dc9b535e9c4a79bc4e88e235625e61d1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.11/windowsdesktop-runtime-8.0.11-win-x64.exe\",\n            \"hash\": \"fd6f0ac18e77f92b78c41aa2f3e19b9d1de6e63a0e4a517c897e68dafa5131f734d39f0b1dc9ea09a3b0949805d72ef6f82efb1f6a689ab055048705f43cff7b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.11/windowsdesktop-runtime-8.0.11-win-x64.zip\",\n            \"hash\": \"ae6a326b18ba173423736630da90c2f67a14dc1bf28e19e757172070bebeb63218756354832fb5489e54a4c0145b7a50b3328be19cd9c298d990b76093a84ea0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.11/windowsdesktop-runtime-8.0.11-win-x86.exe\",\n            \"hash\": \"32d11f33394ea1662a23046c45c224d60b25897951072d00324f6a9a297960086e3b8c606018ef947f40b19b570f7335e18fe8481bcaf6edba4a349285be8186\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.11/windowsdesktop-runtime-8.0.11-win-x86.zip\",\n            \"hash\": \"b7813060d672a93d7273f11e03b6de923aa853d4a788699357199b233effd7faf282610e284d48e95c1fe1501a1f3279603537265c56c938c4d40186ae67ff8c\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-10-08\",\n      \"release-version\": \"8.0.10\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-43483\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43483\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-43485\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43485\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-43484\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43484\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-38229\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-38229\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.10/8.0.10.md\",\n      \"runtime\": {\n        \"version\": \"8.0.10\",\n        \"version-display\": \"8.0.10\",\n        \"vs-version\": \"17.8.15, 17.10.8, 17.11.5\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-linux-arm.tar.gz\",\n            \"hash\": \"f06b8787e4f86f61569959228a9ae7d10bb7a1fa967010d7f3ca0080c850513cf5657c18d472211ce16880ff5eafc6c8442a564b2f8351d77c5dd270213c984c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-linux-arm64.tar.gz\",\n            \"hash\": \"31599ffbca710247f4e03fe99b1098b287a0ed820a944b5a6ed22372651c97d67531c34abadbc52e59e8f70b4f76cd331221d008684f3feefd9be2904a73e388\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"aec8c820591a13d17d80a16880fa622961ea3a982d5ea30b26ea915ed8d860e9500b2ac7aee07aacc0a3f505ea33a665037096a3dbc9ed95fccf335e4b4b9dab\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1eecafe272a071ed78bc91b4c900ab70ec102c9f82cedcfde279bd9921a7e740ee9e881538a00a6ce400d9dc0ebc9305e8cd4962db2431e73b691e1052694ec1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"2d6edcc14b9d9fef93ac72fb32b17a6318f2af5bdd83c4b34b35c591dcd406da4d489c1a4d5808a61bac2ee14b40bb6b0e8ffe9b424901b70fe2d969deffa087\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-linux-x64.tar.gz\",\n            \"hash\": \"7fb813677720d125c2337fedc6131b230daf1c1d79d5912a1ca6b5e08bf7802b412de3248d645b6483ab23f3fae837ed02a0e520e33020cfef2c888c54f474ac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-osx-arm64.pkg\",\n            \"hash\": \"e3845aab7f59bb2be2245f1923626ff2f1981306a5a8c13d871fd7075c4635aedb1925083437baf7992cca162b749caf234b041f8eedf614391ec33b5224fef3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-osx-arm64.tar.gz\",\n            \"hash\": \"d746968d04947f4a87d24fbf471309a0377f990a1877e926d6e51b50221043ab270c00517f578aa53d653e18accc386f5551a9f4acd36b0233fb663c3533ad2e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-osx-x64.pkg\",\n            \"hash\": \"8df43d77ba45385a78e7676ed39d7402870c1045e4e598444a6278ce709c08ca15a98a1c79a90422e546f758647d4348af5328b06830e749e6c8402a5532df1e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-osx-x64.tar.gz\",\n            \"hash\": \"44abc477bf7eb40e141d715f895c3c5b091481854736dde5347a9973191dcb5f3c3f96dd9360e282149f1d97a33d7c08b938008a5edf3b5c48e3b93db3517107\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-win-arm64.exe\",\n            \"hash\": \"90e248a8b1d6af2b00cf7e81209c4d1f6cd4596b95a8d878fc8e33f531d10b5cc747614de82f367b5f760b6d6e9cb3e5d643c33dfedb25bd5b70fae1aee1af4e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-win-arm64.zip\",\n            \"hash\": \"b865b72078d49dc5fe521b98d6b3df0cbadb362dd815aae9f9b1170c4e4b782977729be74915f8ecf0d66df779b3c8f108dfa686318d0ec73742fe079271e6f4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-win-x64.exe\",\n            \"hash\": \"e56ca6141dd073f75b2f14b39be4ac6ee8011cf94e3d532321b75973fab6b99d04d8aef2b3b8c5f7e0eff2a700417c626bf6182977ca17244f124607be5f72af\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-win-x64.zip\",\n            \"hash\": \"fefa7e8958a67d1a108457ed55906eb62a53fa61d5fb0187c489b981946d988ff2e31aa1ce7b1fd70ce7b6c1e07c616983161e13cd1009655a9ba5297677a5f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-win-x86.exe\",\n            \"hash\": \"9bff7a3abd0424de33e603af6e421013c685942ba04b70a075f61288b49ac611f7a798daf49e01fc121d34d776223df29172e9479ecc88b334cd89350b738758\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.10/dotnet-runtime-8.0.10-win-x86.zip\",\n            \"hash\": \"2a0d39eb1c5363bde6a3a52224664d999e719df174beca19b12fe030259701b458ae33c14e86a3cf5895e535306d62113a8dc5adcdc9442bedb96d3ef087422c\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.403\",\n        \"version-display\": \"8.0.403\",\n        \"runtime-version\": \"8.0.10\",\n        \"vs-version\": \"17.11.5\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.11)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-arm.tar.gz\",\n            \"hash\": \"ddcc229316475ba73cc46518ea263a97bd57fa7846a4fe76efb90f874311e8a7f5718ac6dcb8616835b4321af46f0e0265ae48b106e5adc9ba82cce88e804a4b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-arm64.tar.gz\",\n            \"hash\": \"f42e1ba9a897f91c8d734b09a9bfc82428f0629b7cdd9375262158d9f282797c199558c37ae7f36947e57d8adc61af9490595c4e6bbd05217fd6d05133dded4d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-musl-arm.tar.gz\",\n            \"hash\": \"6bc5ec6a0aeea1d8b002af1edf63da0fdca3d54d2ceb4e51a90ea53a9a758561d161e4fa10ac3eebc564bbd400c1b94df2e04c26bae01d99bbc109e4eee32365\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bb63ce01ab1c64b86bd94d90c10e568687276275a5cf916f684fe5f131723745216639e37d3ccf2b7923f558f190dd3848ff621fbc8e9eca5b4951b5b75ba110\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-musl-x64.tar.gz\",\n            \"hash\": \"920373320b0769546180f5099fdba334383b45103120fc5adf876583986ec3a5714e82fcd6475479df415f332dce4d0a989c05dae1f4d1a50d0265b9121f8d2f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-x64.tar.gz\",\n            \"hash\": \"7aa03678228b174f51c4535f18348cdf7a5d35e243b1f8cb28a4a30e402e47567d06df63c8f6da4bdc3c7e898f54f4acc08d9952bfa49d3f220d0353253ac3e9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-osx-arm64.pkg\",\n            \"hash\": \"f730a482a99b729fbce6e1fcd0fb6bb2590ce7543c8f78906529b1ac19882e63627620ba08e27a18672de4de3fa2596159384e9dc09c77069e05b976a35fc2b8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-osx-arm64.tar.gz\",\n            \"hash\": \"f3dafcc39e131de9bffff190aecc08d87aa0625a66245af55c019b5cb64d1593cdabf652c197ce4152bbd7c54cf68c273499d969a34885e3b7df0890bf5c9336\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-osx-x64.pkg\",\n            \"hash\": \"a018f5a66c6d7e500a11d693443efbb1e7c9562ee500e046bd570f44b58c951a362e3dece6ce8d4dfdedbe94e394a64dabe3e84fe6b8b41290c8d320b11d15b3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-osx-x64.tar.gz\",\n            \"hash\": \"3f1f5cb090d461a026505ffc5d1fce6f15ba5354b302254c077eeb97cf23c83503b454e2f8125fbdd3647f4d3af3a1a436780d2a2842d5cb09d076ab5e401446\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-arm64.exe\",\n            \"hash\": \"95b7fc541629bab1db1e9728a1b0f70822ae6adcebd2aa78561ed888bc6e9139db6cc490e0800ee93904816133e5d35e90738b9f567d0117cb5fecc7914d16d7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-arm64.zip\",\n            \"hash\": \"cb4965110dbd3b092283051e141b351952e06a02fcc4a9f9e86c4fdd2a6f2fa05a1eb72a6bd6267200fbff4c603e4f7107c45aa3e33bbccd65d12735de48d808\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-x64.exe\",\n            \"hash\": \"f5f4c86f8fdef861347fb46a38f63d19d495b4751f303391f4df701499cd2dfe4901e7c42c0384b05478b41dc4dd7aad670f5b995428538d071fdf3f5b6bcaab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-x64.zip\",\n            \"hash\": \"39f4b076984ee18f899ad9fa3f583d4eb4fa2e340f2093f477362a54bb5d955dbb5f18049bd2c80317d1fb5daa46d13c2b18267303555de0d9a8c3ae1063d924\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-x86.exe\",\n            \"hash\": \"a1750b201417c0210d5c27ba0ba31dac985b26764ee270ac4021f3c4777e77751de9846bba38f555330a3fa7f62112ed3d410ce86412269d6d2581c891dadf87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-x86.zip\",\n            \"hash\": \"9472e7be7547c0640fe153c76c8f01581e92ab710850965344a1d7092a1f73ae11b97438fb54b7c939ba84392c8ce438fb77dd9dd7a5b01744ea8445133e5a47\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.403\",\n          \"version-display\": \"8.0.403\",\n          \"runtime-version\": \"8.0.10\",\n          \"vs-version\": \"17.11.5\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.11)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-arm.tar.gz\",\n              \"hash\": \"ddcc229316475ba73cc46518ea263a97bd57fa7846a4fe76efb90f874311e8a7f5718ac6dcb8616835b4321af46f0e0265ae48b106e5adc9ba82cce88e804a4b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-arm64.tar.gz\",\n              \"hash\": \"f42e1ba9a897f91c8d734b09a9bfc82428f0629b7cdd9375262158d9f282797c199558c37ae7f36947e57d8adc61af9490595c4e6bbd05217fd6d05133dded4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-musl-arm.tar.gz\",\n              \"hash\": \"6bc5ec6a0aeea1d8b002af1edf63da0fdca3d54d2ceb4e51a90ea53a9a758561d161e4fa10ac3eebc564bbd400c1b94df2e04c26bae01d99bbc109e4eee32365\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bb63ce01ab1c64b86bd94d90c10e568687276275a5cf916f684fe5f131723745216639e37d3ccf2b7923f558f190dd3848ff621fbc8e9eca5b4951b5b75ba110\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-musl-x64.tar.gz\",\n              \"hash\": \"920373320b0769546180f5099fdba334383b45103120fc5adf876583986ec3a5714e82fcd6475479df415f332dce4d0a989c05dae1f4d1a50d0265b9121f8d2f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-linux-x64.tar.gz\",\n              \"hash\": \"7aa03678228b174f51c4535f18348cdf7a5d35e243b1f8cb28a4a30e402e47567d06df63c8f6da4bdc3c7e898f54f4acc08d9952bfa49d3f220d0353253ac3e9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-osx-arm64.pkg\",\n              \"hash\": \"f730a482a99b729fbce6e1fcd0fb6bb2590ce7543c8f78906529b1ac19882e63627620ba08e27a18672de4de3fa2596159384e9dc09c77069e05b976a35fc2b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-osx-arm64.tar.gz\",\n              \"hash\": \"f3dafcc39e131de9bffff190aecc08d87aa0625a66245af55c019b5cb64d1593cdabf652c197ce4152bbd7c54cf68c273499d969a34885e3b7df0890bf5c9336\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-osx-x64.pkg\",\n              \"hash\": \"a018f5a66c6d7e500a11d693443efbb1e7c9562ee500e046bd570f44b58c951a362e3dece6ce8d4dfdedbe94e394a64dabe3e84fe6b8b41290c8d320b11d15b3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-osx-x64.tar.gz\",\n              \"hash\": \"3f1f5cb090d461a026505ffc5d1fce6f15ba5354b302254c077eeb97cf23c83503b454e2f8125fbdd3647f4d3af3a1a436780d2a2842d5cb09d076ab5e401446\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-arm64.exe\",\n              \"hash\": \"95b7fc541629bab1db1e9728a1b0f70822ae6adcebd2aa78561ed888bc6e9139db6cc490e0800ee93904816133e5d35e90738b9f567d0117cb5fecc7914d16d7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-arm64.zip\",\n              \"hash\": \"cb4965110dbd3b092283051e141b351952e06a02fcc4a9f9e86c4fdd2a6f2fa05a1eb72a6bd6267200fbff4c603e4f7107c45aa3e33bbccd65d12735de48d808\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-x64.exe\",\n              \"hash\": \"f5f4c86f8fdef861347fb46a38f63d19d495b4751f303391f4df701499cd2dfe4901e7c42c0384b05478b41dc4dd7aad670f5b995428538d071fdf3f5b6bcaab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-x64.zip\",\n              \"hash\": \"39f4b076984ee18f899ad9fa3f583d4eb4fa2e340f2093f477362a54bb5d955dbb5f18049bd2c80317d1fb5daa46d13c2b18267303555de0d9a8c3ae1063d924\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-x86.exe\",\n              \"hash\": \"a1750b201417c0210d5c27ba0ba31dac985b26764ee270ac4021f3c4777e77751de9846bba38f555330a3fa7f62112ed3d410ce86412269d6d2581c891dadf87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.403/dotnet-sdk-8.0.403-win-x86.zip\",\n              \"hash\": \"9472e7be7547c0640fe153c76c8f01581e92ab710850965344a1d7092a1f73ae11b97438fb54b7c939ba84392c8ce438fb77dd9dd7a5b01744ea8445133e5a47\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.306\",\n          \"version-display\": \"8.0.306\",\n          \"runtime-version\": \"8.0.10\",\n          \"vs-version\": \"17.10.8\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-linux-arm.tar.gz\",\n              \"hash\": \"ddf4cbbc33e14ea5349fd0d1372f36b8e32920bec83625dad18787e717f614d94a9fd9eda42e0b3fbe68ffdbc79d343f370c3412c6a0bc4750a88c3e5c5df0a7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-linux-arm64.tar.gz\",\n              \"hash\": \"3a554b92350b6e7d3d86ed92949295d469963594618240c9881adb36fccafb8a51a5961a85056f32f0bb5743b6ddcfd88e739359e0cacc69e20277c747c2be2b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-linux-musl-arm.tar.gz\",\n              \"hash\": \"26d90af94f4f0b40174621dab65a314c1c658123650d5e72a43ffdacdc5d1e87181a8ece1cd0ee670ae690b651cd6894756fd1ab3cf13317de55d76190afaf10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-linux-musl-arm64.tar.gz\",\n              \"hash\": \"09ed1b5a5b7a103a058353be1071212b5e99588d9f8841d67914ac3bf7356f7cd61a7daa9d4f8998c9410804625717b80a0c367b280dc41b9b7a5c132519d5f4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-linux-musl-x64.tar.gz\",\n              \"hash\": \"7565734a26d8ef39d7c8eaf2967628c9e0e4cabdc225390a84e288e335cd2e367aef3c62be42f26ea3f7700f93d76c05cae957caa8d8f7ac8e2ac4a5d127d3e9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-linux-x64.tar.gz\",\n              \"hash\": \"b59653508a7f1b7ff563c33d22d92e7e71d5fea2f01d600429df3ef262fdadf11d11cc251fcb349715ae86fe0eb3f8f35223f0f84d70dd2fe1c39a3f09f6e021\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-osx-arm64.pkg\",\n              \"hash\": \"7db1203f9b0d81d6c6a37d61bd6d6bc021d8fcfb242e1724f23fb0a48880fd0264b3f727b402c5dedc481a642a4d85fe7b22621424cc983b1462442c8503590d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-osx-arm64.tar.gz\",\n              \"hash\": \"306abf8eef3f16d889956f18433b0a71d9dfeecc3c063e4e0d33fdfe37d4f2d1106c27ccc44961a9e2e0588382c33d12192b9734621eaa4edae68e7ad41591a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-osx-x64.pkg\",\n              \"hash\": \"bdc9a1f57472e87b12bfbdf89fa0997b8a15b307ed18af3bd3f0a72a5565e5448b3aa7f73e3f601b19768153dcb366f1ee8609ecb11fc7cdd950b8fd0ec8d13a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-osx-x64.tar.gz\",\n              \"hash\": \"72af4dfcf98d4e2edbab485dd73791a17b9c27ec9afd87a40a8f0ab035ca704d0cc5149c34b49e299875fcaec309a172dab81360bce27b09b517de0224bcae02\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-win-arm64.exe\",\n              \"hash\": \"12cf52735f2e20a02bbe415c35bbe4e384d1aa00ccfa81b31f09185712007d24d31b8b915ab4c80bf72d76f83aac114c85e67b55bca2bb75d90b8641f07d8155\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-win-arm64.zip\",\n              \"hash\": \"188bb00222b4915e8aa0afb24048d8248f3390315df9ada478c7d4350b04f98527e93b6700041ecd52b417882d8211f1ebc1303fa8f3e0610ad4173fa03ec8d7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-win-x64.exe\",\n              \"hash\": \"c06bb0fd70003aaa01c7fa379e475ceec524acf8fbb648296f3c64dd4b65e60722c0ea58f3309d4c3d82dd5326861e6c98fa663b11873e708efebf896202db47\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-win-x64.zip\",\n              \"hash\": \"71a2cc0c7d8956bee35e82ea43550c97efe6335a50a65412b52d0b63d8093cc0859c53e27614f3d931c876a1380c9e8098fd7226408ea1d26cc3265002879bd1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-win-x86.exe\",\n              \"hash\": \"4eb4a2026c197a72fdc87be885e1db440c97e372c220ff73ce9473bee8452c17ed4d7a5302aa058859637c7e182e038a24b093eeab86667cafc1f46527c8a32d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.306/dotnet-sdk-8.0.306-win-x86.zip\",\n              \"hash\": \"f32955bb6433e36118a541dd1ca7bd2c317a06c60418b865597682576bae18ceda541198c7bec37e6af8fe810bee0b0d52514e85d73726508d8cc08e270c2095\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.110\",\n          \"version-display\": \"8.0.110\",\n          \"runtime-version\": \"8.0.10\",\n          \"vs-version\": \"17.8.15\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-linux-arm.tar.gz\",\n              \"hash\": \"40fe6c12ee3f5629b8e6150520654f995aa0ee98315de1623742030e168b1622721ad640d26f44bfc11f2193b7afa0f8bdcbb953cd417b4576e78acb053bb763\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-linux-arm64.tar.gz\",\n              \"hash\": \"286ca560e79b1c789d80fb6f9b6aad2e105d6e3939cf676394127e481e9b200bc9da72d87bb8162b6b2a4f62694a36ed66ca1f3d8ede261a790abb676537d164\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-linux-musl-arm.tar.gz\",\n              \"hash\": \"e58cf29ce35a5b7746610f2edd3555675193501b998da7d9ec528755cbb3fdc4d2249db338645a8780d47af46f169c37c13c9bad67e00c860d334c46a011407a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-linux-musl-arm64.tar.gz\",\n              \"hash\": \"7a3705da56b24bdb37b516e425df944fa8cf32a3d5e25239cfa4aad94a716d5f1091830ad45274a26104ab4ab772e0dcd8679a698daf5bc34b24cb7282d886e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-linux-musl-x64.tar.gz\",\n              \"hash\": \"8e38313e5b16bfc0139a22bab64c7818f9b66db9ffed4e6adec20dcae8618d9dc20c6cbef2bc24b3440b679569e1ddea44b07661e41d45de0ba196e4526f6818\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-linux-x64.tar.gz\",\n              \"hash\": \"3dc724aadded97bae639969f8b15601962654af6561a132fd650ec6a03a7473a1061f8f5f7606cb4b1a4b127e6cdbfb59354bc025bd3f07b56e0a8716b4b66ac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-osx-arm64.pkg\",\n              \"hash\": \"19e3fa12cc4046cecabbd4066f3e9f15398df39384eb19c64aa84e82ac87bf4f121654c124b29cbcee4e3603056f32606a3a6e4904230d5b876615287f442e2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-osx-arm64.tar.gz\",\n              \"hash\": \"6d64ea5c003814b0fef4b5bbe74caf9ea502677da22c676b2db01bb94053a2433ea9aa932067145809c5d98853a6c4a8074b3f24ae8b77c835940270898bfccc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-osx-x64.pkg\",\n              \"hash\": \"f7f0608873887e1602526c16a25d82ef0ebba96857011b73c4bc7990061e7bc252a6683b491cecb551ad287293480158ec1c352d0a04a37b54226711248855dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-osx-x64.tar.gz\",\n              \"hash\": \"c56b827da7003df700662abd08f5af06be2238794bf4ed24978d612e45b97c0da2792bfb4523871a80a323bb2d4f7689de9d216eef29b65108795dec20a74180\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-win-arm64.exe\",\n              \"hash\": \"5527b9840756b6e444b425ef54c3d328cf4d90217c5e25f25f4b241c8df775f716529ce681c357f4b871f258ea88b37bf33db6322c1281360e88bd92d829b86a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-win-arm64.zip\",\n              \"hash\": \"67d58da75e661b11b269f2f0fcf1c5ed3bfc23b8f46ee50c4699b5ef1b6e61f135a147d0b4273fb1c544639e95609ab40139d3f19a77547f4b7b0c096da38b20\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-win-x64.exe\",\n              \"hash\": \"a52675da632488d69fbcf68a75084f1e6afeee92a5bc1a6e256256b74d0b0d01dbc50e86a1331c57618263be59b792943b8674f96862a36e49dacc00f2bd597d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-win-x64.zip\",\n              \"hash\": \"38a00849a78a3603675494c24d678033d2d887e8981cb4f80c26a8a4929d080e93cdbf41a0089b2aa6cf9be3479b3c4b00d7659378357d19c45b2bb7257db065\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-win-x86.exe\",\n              \"hash\": \"9bf901541607408a0c16ec1d0d29aa32c841e030566b5fa44b5d28ffbac135c0379c843c075ade673bca48885715abbd5d75cc1d360168c67b2fbee488d4c901\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.110/dotnet-sdk-8.0.110-win-x86.zip\",\n              \"hash\": \"abd2d518c2ccc4a2b7da2b5d8e8dffcc5f95fb16481871301a8fef7100e8f3f554799ab82d056168642dbc141157343bdf89c800d3393274d2a1f8ea49865696\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.10\",\n        \"version-display\": \"8.0.10\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24262.10\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-linux-arm.tar.gz\",\n            \"hash\": \"fae8b6b270a4dc9218df99bb3cc10f0a52db9ed3630ba82056402154d27c238f76e44561f85348cf1a4f7e2bd1dbd910d4138a91ef66abe5685d9972b3d050aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-linux-arm64.tar.gz\",\n            \"hash\": \"3a478f9310c748b7427c91deb3ba83f4c02557a7d7a3d7382526b6dc39dad3d938022475ab20f060f1b4ed365c7b1b95a1d089cca502a423298c41379bff8111\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"45b1b3110cd2c6684c3120a719d7a62d7a6ac15474101e629f47ce012abe1c65aa67b93fb0a05128b7462fe3f03edc5cba40fc788004f888a8e3b27c861eec56\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c71ea24716066096b48be5ce8b9fd3a144ff8658382f7b193c9c388eadb4279b644b2bc7a0293c01a61084399d5e89c8952f93ded90beaac6a01c361c57a8fe1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"84af156fd6145fc699c73865ea12a5994e43e788945fedcd5c80d9136b9482ad0d9e0bddb933f5f72ff1dcfb90d06dc2e94a21d02eda10bc1015f3e4b8639d14\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-linux-x64.tar.gz\",\n            \"hash\": \"33221f19964ccb06cba74420dacbfe5bfd036f7847387093119f8f391d5716e1c5a8e05721f2335984409b43423d79b51ec571e51f0cdfae6d9d2a2b2d98505a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-osx-arm64.tar.gz\",\n            \"hash\": \"2bc9179843932228fb3550cd3eee88a645c5b6d695a561564195f0b4583fc0c90716254dde925020bdda03d0e0181f049750c06f8398a21b7fd0ef5b8c1fe584\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-osx-x64.tar.gz\",\n            \"hash\": \"7ae1f424bbffa52b81e5db8f1d590d67c34a88650eb573d05c9222bbb74ff89e6ff0581b6ce267558f19fe3433473d4a8513bef4f5e1880cde03f19606b0d42d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-win-arm64.exe\",\n            \"hash\": \"a159c9a9c1d7d5b057d561c6f6ce6df08b791fbc1a3803f16791680a4400210703443fe2b2785c9ab111fc035541fe7929269b39258cb1ed19031113b2423180\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-win-arm64.zip\",\n            \"hash\": \"6afaf8b1a3ee419e336e2afe8e693808e1c99d038b962de72a79b06dfb40cac6709299a9fcb9b15915fd8e9c3312e4215dc2f9a0fbfb24c0dbc1623768c8557f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-win-x64.exe\",\n            \"hash\": \"df49756a13ae73550804d2156b86225ed77e1646ea4f92724b48920f213319c7ae75cccf63eb25e9c529ab41c62d02f969a2740947aa0100fbf8a693629ff3b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-win-x64.zip\",\n            \"hash\": \"b9d08366e056def8760882d08f09e8495a6cf6ebfd1b881c92f3c385637c77ccf432ed51f930e4994e66156fb5311daeb0b2aa06074da17cbbb068e0e5dfad3a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-win-x86.exe\",\n            \"hash\": \"97d919d9b60adcce8a8ebb01bcfaa55a3b41ea2cdd3b4f8930f0881d7580bb980a204ba0034d2580ac1bf5aaaf4cd0b1df300cd54f0a77a6544c41b6eaf9c934\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-8.0.10-win-x86.zip\",\n            \"hash\": \"7d4694b3059094b2383421a40c102666a5fb8b3b488e92155582d3204f2fb7d3cf1752ee7d9fe6578418ec98a4f3e7ea48e936cc0bdfd7c778f02774d31377aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-composite-8.0.10-linux-arm.tar.gz\",\n            \"hash\": \"68191eefc373102b908fe752c44238327c76448350536988cd1e992a65c3e78d8094e760f6490c3052a2fe33820cf8fbdb44d647015e36c986c1436a9569a484\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-composite-8.0.10-linux-arm64.tar.gz\",\n            \"hash\": \"4ef6d3653229e93b29a2e16da4b5311a0f5b729aae5f5fd21d6ca1f8948feed45504e8dd212325ca8787f9d8ca0617fb43fb947949597d762602db1c4d3513c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-composite-8.0.10-linux-musl-arm.tar.gz\",\n            \"hash\": \"aaafd623720cabeadcb43fd10231e93fd59b71a1d06325c8a33b48bf103519d6bf531c22a0f44f8d249f4ed2f2547977d960dfcf366eff62a71249ea01ede5b4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-composite-8.0.10-linux-musl-arm64.tar.gz\",\n            \"hash\": \"decd084ccae93fa7cda4d616e4af3740581f61c680fb0dfea64f69883de79aa3303703c0de0b7aaf5c4ce7ff0faf0c690e00c3ebac29da6a80a0e3c38171c093\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-composite-8.0.10-linux-musl-x64.tar.gz\",\n            \"hash\": \"1636eebb2d3a96d386a7bff23044bcc796b9ccfd6c7b50d6814d85184174e42a6116817f3c40f6f69ddab4f9c5da41b637633d8191c35c062c91fde9883b9ad9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/aspnetcore-runtime-composite-8.0.10-linux-x64.tar.gz\",\n            \"hash\": \"2613c87a0d060681c16f8d0aaa507d808941f8c3262bd793043d30785df26b3a5b54be395e18ebd66bfb309f190179fa11b7c8354a40b67cb20d05ed88baa235\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.10/dotnet-hosting-8.0.10-win.exe\",\n            \"hash\": \"6b8643aed744ec1df02590e50768c9037836a3f75739d1b296f7769e7d2b5ac4b07dcdda1b65032d1e46984ad8860c59f152c774e3190f8e8708f426a9a91cb9\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.10\",\n        \"version-display\": \"8.0.10\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.10/windowsdesktop-runtime-8.0.10-win-arm64.exe\",\n            \"hash\": \"4510f75c68e32a221efeeb576f25ff6c480c698b064eabd49b97e4fe9e22b6db94b3fa7a30de69af09318b0d143b7a3b72773a7f2b9a8a49fb3161bcd5b5cb1e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.10/windowsdesktop-runtime-8.0.10-win-arm64.zip\",\n            \"hash\": \"ba4ab6a3ed6cbc79bafcc4c6fbd27fc9c61a14717328f026bf43ed570c8db1ddf4a54a092ea21c701c702c2c5f11663635c1e25470a22e7589eae43cd4b9b558\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.10/windowsdesktop-runtime-8.0.10-win-x64.exe\",\n            \"hash\": \"914fb306fb1308c59e293d86c75fc4cca2cc72163c2af3e6eed0a30bec0a54a8f95d22ec6084fd9e1579cb0576ffa0942f513b7b4c6b4c3a2bc942fe21f0461d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.10/windowsdesktop-runtime-8.0.10-win-x64.zip\",\n            \"hash\": \"8198ded846f3c9f7c61a65154acc7eae791114f2522161cce8e10ee066934608a3e4e001595c5ed2674e4dd3aabf089605d78c1b518e02da5cc1422d1e412193\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.10/windowsdesktop-runtime-8.0.10-win-x86.exe\",\n            \"hash\": \"e3aa583ea83f1e494b40a2152245eb1dffa96976640466ad39c9a4ef77eedf79edaf990d687ad95a36fb551ddaeec8ee887c4eea6d590366e7da4e8427dc45e7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.10/windowsdesktop-runtime-8.0.10-win-x86.zip\",\n            \"hash\": \"f59c80a4271f61e5234733dff903585e964135ffb637cc1057ff7ce55d13b21dbae37ee1c01a0724fc5a2ec9f66ae38cad0ca75320dcda47f74f9535c9a8cb4b\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-09-24\",\n      \"release-version\": \"8.0.8\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-38167\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-38167\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-38168\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-38168\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.8/8.0.8.md\",\n      \"runtime\": {\n        \"version\": \"8.0.8\",\n        \"version-display\": \"8.0.8\",\n        \"vs-version\": \"17.8.13, 17.10.6, 17.11.0\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-linux-arm.tar.gz\",\n            \"hash\": \"c87af5aaaf32e18ccdc2965179c65aabae5e0e9e8ea209f6c364270ce2e4afffea979ca22e143de4674e36a2b12c66b575588ae219f16636aca7121440240288\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-linux-arm64.tar.gz\",\n            \"hash\": \"246fb7e5edb51db93421c6bb7420f7a358430b98b224a71fb70e71a2bce0bc91f853aa89109f2188b0ab28532a245c3d52baac163463e01a02019dea37fd39f2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"8a6f920d93d7d5527dc289f472521e2a671afb4e663aaacfd82c32658c2ea39eab43a5c97d3d3d7ba58403ebfbf6cb96fc73ff5b7ccc1a9447d13bf41eeb80c9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"26f35e1c6074a7d99a40ea48f6c02db78f4e2c743cbc74463a094da014e126e9379d09b4e56809ac9829b26b6ba0a901adc47adfc3c5d35a97e9ead5a6931489\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"ca2ff32145506513253f80ecd72b5c24d8bda28f44ae83c988c39ebfa75e737d5510bcb84bc27a149d2e6995761f8b124d7701522ae9bbcac17fc32667217eb6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-linux-x64.tar.gz\",\n            \"hash\": \"8f5220098c562fa3490417748eb9f4f9ca1551f7155728b9ebb1924359c63c18dedef643bcd89ec67b59cb5b1b9de7283ee156ef381ffb16801b516dba9b1b0f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-osx-arm64.pkg\",\n            \"hash\": \"3c53474ad1ae8549a24bb6c11d8dc0c2d4fa6b67bde9d01d676162097352070fe65585101264d7ba8a725b5c1c4a1901f3a625be26d10481a3ba6a66a0a3fe41\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-osx-arm64.tar.gz\",\n            \"hash\": \"88b06dd051819bd9e8ce2c340b2516dc0e4a77d565eff145d8e957b2552a641e235a5ce7e8db3607475887bc766f1530d01d0e7efd80d10cd652a299954398b4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-osx-x64.pkg\",\n            \"hash\": \"00e76af7982ad1da51241d13b5cff379cb2eedccdf7bd09c2923e4610e232ef35c9e8d34b58435f5ed66c52ca3ab6e68c7d89fbb0caaa53487c4882e00b01865\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-osx-x64.tar.gz\",\n            \"hash\": \"8029986c1f8bbf1b0e8d0929756156fe41d46d2df6ebe1ab1c66fbcea2add47c35b934573c6198797cf60d2b372cd463e70326c0a35b0926dab4d5c157a357f3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-win-arm64.exe\",\n            \"hash\": \"a4ed101b343495708462e96860d4e20542117988186aea96d7ad014e52571f9bcc6d730891b5245e70cef98ca0944b6dd45703dc261e7a28d9e4673392e45928\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-win-arm64.zip\",\n            \"hash\": \"36ac8eb458e3a31d02de10ce1855bf189b85ac2e88020430c6f6cfb7b92fffb04463bcfbf0d5a2146862102be922b182d230f51dc2e34a5fe7133abdc201ede9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-win-x64.exe\",\n            \"hash\": \"57f2a276176661a340b96991b584bcb81ba3c0150e3684cb109b29cc3a8ebe6fdf1e586d948d498e7aaf22f7401c1cc94062c13cffd20999771ecc5dfc2e917e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-win-x64.zip\",\n            \"hash\": \"cca24d8c1d8a8af7496fd29bf8fa1750f438207181bd3add128aa5083e6ddb159d5d7de8f3bed3b30618c8886b4380dc55ee15b03e71feb345011c48a08d27bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-win-x86.exe\",\n            \"hash\": \"fa542b8d3ae98e020b66f0bfa33c44a4ea166ab9cfb7b3cbe3034f9c38318464db8c767af9eb3a6fe9829aa67cff96beb49e2c1cb9e6081e5657ee4f75544bf3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.8/dotnet-runtime-8.0.8-win-x86.zip\",\n            \"hash\": \"c36c90dd056aabeef40615113941144381e45f831c71b129802bad04b6db4a95561d8552aba1cb75ff85e8f0820d2d3887660ce7113bd449f3653801128eaed4\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.402\",\n        \"version-display\": \"8.0.402\",\n        \"runtime-version\": \"8.0.8\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.11)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-arm.tar.gz\",\n            \"hash\": \"ac654aded46a89a825f5e7471332834800b1a11a14bcd92282da155bea89966add3fa9ed8281d6f20bd4a4f5d2c5aefaf454c0c630cda09aa759c2f6a7755d10\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-arm64.tar.gz\",\n            \"hash\": \"03a98e2fa90902f1251f231e268eb70c59639ef806d0466ce14ec3224d0739526a38982ca84d68e76ebd99f5962d6d490915358aa70e9276842e4f148fbd9596\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-musl-arm.tar.gz\",\n            \"hash\": \"d08e1bcf304c4ea4c7cde0f63a56077536e758b7cb512a593edc4afe4646f5e6256df6ebda48bb4e0955c92ae6b128e47157cb7331ae4691bc0c40a7ce732a83\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-musl-arm64.tar.gz\",\n            \"hash\": \"939a8eeb001983f493828eda5cea9cfe26245d7cd6be11a9f303d04a4b7d6d7bafbda64ae64243d5aa6d6583e1e58115053215369e14b1aaf9d914f311ada1c7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-musl-x64.tar.gz\",\n            \"hash\": \"3c74dd447d31363f6f753bfd8359313e8abb2b008717e9f2a860d71236aea915f0a81739045802380e211ed4f478105f00f93152983eedd9b8a43224c8531af1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-x64.tar.gz\",\n            \"hash\": \"a74f5cb0ac34ac3889c7616da7386563103e28a60fc8f767857f9b65c34c34d11301593de6b248d26c72557d63c18b0f7ce15bbcc0114f321c5e14dcec98008c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-osx-arm64.pkg\",\n            \"hash\": \"9aea63002fdb3addeb209ea1e155b10e6ec986ed9d431b58b47526447f630f9274e0bec215a7d3f358de204e865a103676b51b3bfef077a4f022f49ef80a53e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-osx-arm64.tar.gz\",\n            \"hash\": \"a0e0726640a4829429d7ed95b00603635bdd56bba8163d26014488b5d2666c75ea954bd218a8f33922d38f3dde58f5b7b97e148d2bc69c79a3a3251d6005275d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-osx-x64.pkg\",\n            \"hash\": \"9d55f9b3da455ab34d1c8704f7b526a8d055600501fc8759dacb0a000983c47671f7aa030a948cf53ea977cdfa97fc44cdcee824580705c077c98eb62d2a7552\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-osx-x64.tar.gz\",\n            \"hash\": \"917498dd34c98d8ba439ceaef5dae9090251e505ae8f3fa4d3ca03b7812ade4466981f128fa31bc469489b71c945cad35eb63c99b264e6e10585395865e587d4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-arm64.exe\",\n            \"hash\": \"09ef3d4466220f558c638ed24359db47ee4087e98e9a2481db55a8efe66256dffb2de944c166aac90f6afec3774626998cb20ccc48939a9103c97e917e3d9b11\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-arm64.zip\",\n            \"hash\": \"cab014549c88d925ceda6bcf808fea111f6a6c21caaa1932e90c6d9f239bc015c891056a892828e7eb9e07f261805a3b9191aa689656ad3212622c1b62c97707\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-x64.exe\",\n            \"hash\": \"19f94cac5d2534eab94f084296cae11bdd798c65dc8097b802b3ad69e7cc9181c80f9c47ddc360feb8a654801f13cdd63d1ddc69c49b41413b6fa1c6122ad223\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-x64.zip\",\n            \"hash\": \"532e09b25ffb174db2ca6f7cd990571faaff6a6ae2963f242583d05606b9798b5672c85bd65ebe94674681c33f06f342e7e4214e6e6da72b227323e0cbb06b43\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-x86.exe\",\n            \"hash\": \"29a48c38b388810b90205dfb94ab9994f7df662c50021f13460f8a299fb6754d8bad8f13705416d5a878b93b5983e6f25a1f486eb445496a928e7f033a40cffb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-x86.zip\",\n            \"hash\": \"401a4811f13d37819a72291566230bc82a83f23553892879e6f14770555052e8e775af1884f36081c5aba3234430f671d12580a27fd6ce0f91448c0afdd3fb0a\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.402\",\n          \"version-display\": \"8.0.402\",\n          \"runtime-version\": \"8.0.8\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-arm.tar.gz\",\n              \"hash\": \"ac654aded46a89a825f5e7471332834800b1a11a14bcd92282da155bea89966add3fa9ed8281d6f20bd4a4f5d2c5aefaf454c0c630cda09aa759c2f6a7755d10\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-arm64.tar.gz\",\n              \"hash\": \"03a98e2fa90902f1251f231e268eb70c59639ef806d0466ce14ec3224d0739526a38982ca84d68e76ebd99f5962d6d490915358aa70e9276842e4f148fbd9596\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-musl-arm.tar.gz\",\n              \"hash\": \"d08e1bcf304c4ea4c7cde0f63a56077536e758b7cb512a593edc4afe4646f5e6256df6ebda48bb4e0955c92ae6b128e47157cb7331ae4691bc0c40a7ce732a83\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-musl-arm64.tar.gz\",\n              \"hash\": \"939a8eeb001983f493828eda5cea9cfe26245d7cd6be11a9f303d04a4b7d6d7bafbda64ae64243d5aa6d6583e1e58115053215369e14b1aaf9d914f311ada1c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-musl-x64.tar.gz\",\n              \"hash\": \"3c74dd447d31363f6f753bfd8359313e8abb2b008717e9f2a860d71236aea915f0a81739045802380e211ed4f478105f00f93152983eedd9b8a43224c8531af1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-linux-x64.tar.gz\",\n              \"hash\": \"a74f5cb0ac34ac3889c7616da7386563103e28a60fc8f767857f9b65c34c34d11301593de6b248d26c72557d63c18b0f7ce15bbcc0114f321c5e14dcec98008c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-osx-arm64.pkg\",\n              \"hash\": \"9aea63002fdb3addeb209ea1e155b10e6ec986ed9d431b58b47526447f630f9274e0bec215a7d3f358de204e865a103676b51b3bfef077a4f022f49ef80a53e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-osx-arm64.tar.gz\",\n              \"hash\": \"a0e0726640a4829429d7ed95b00603635bdd56bba8163d26014488b5d2666c75ea954bd218a8f33922d38f3dde58f5b7b97e148d2bc69c79a3a3251d6005275d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-osx-x64.pkg\",\n              \"hash\": \"9d55f9b3da455ab34d1c8704f7b526a8d055600501fc8759dacb0a000983c47671f7aa030a948cf53ea977cdfa97fc44cdcee824580705c077c98eb62d2a7552\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-osx-x64.tar.gz\",\n              \"hash\": \"917498dd34c98d8ba439ceaef5dae9090251e505ae8f3fa4d3ca03b7812ade4466981f128fa31bc469489b71c945cad35eb63c99b264e6e10585395865e587d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-arm64.exe\",\n              \"hash\": \"09ef3d4466220f558c638ed24359db47ee4087e98e9a2481db55a8efe66256dffb2de944c166aac90f6afec3774626998cb20ccc48939a9103c97e917e3d9b11\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-arm64.zip\",\n              \"hash\": \"cab014549c88d925ceda6bcf808fea111f6a6c21caaa1932e90c6d9f239bc015c891056a892828e7eb9e07f261805a3b9191aa689656ad3212622c1b62c97707\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-x64.exe\",\n              \"hash\": \"19f94cac5d2534eab94f084296cae11bdd798c65dc8097b802b3ad69e7cc9181c80f9c47ddc360feb8a654801f13cdd63d1ddc69c49b41413b6fa1c6122ad223\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-x64.zip\",\n              \"hash\": \"532e09b25ffb174db2ca6f7cd990571faaff6a6ae2963f242583d05606b9798b5672c85bd65ebe94674681c33f06f342e7e4214e6e6da72b227323e0cbb06b43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-x86.exe\",\n              \"hash\": \"29a48c38b388810b90205dfb94ab9994f7df662c50021f13460f8a299fb6754d8bad8f13705416d5a878b93b5983e6f25a1f486eb445496a928e7f033a40cffb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.402/dotnet-sdk-8.0.402-win-x86.zip\",\n              \"hash\": \"401a4811f13d37819a72291566230bc82a83f23553892879e6f14770555052e8e775af1884f36081c5aba3234430f671d12580a27fd6ce0f91448c0afdd3fb0a\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.401\",\n          \"version-display\": \"8.0.401\",\n          \"runtime-version\": \"8.0.8\",\n          \"vs-version\": \"17.11.0\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.11)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-linux-arm.tar.gz\",\n              \"hash\": \"fb90a8e52f5dd29e5953e4662cc9d57caa96dc6a8f6ff6cfae17947aa8a3f53b5fef1bb35b8c05815fa1cafbdc73179f7296ce846bf5769ee12c9daf5bd27941\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-linux-arm64.tar.gz\",\n              \"hash\": \"e8738b21351d030a83be644571f3674c8dda9e6fbd360b221907a7108fab02becd18e1331907535a1294d8c4d0f608519674c27c77dc2c2803cc53cce3e10e0d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-linux-musl-arm.tar.gz\",\n              \"hash\": \"c5c547eb301dc965eef1d9bcc64231678e209591b80197a78249d35d1655a5469f39ce6de65436375f6e42d22d159c3dc487be17f6dbe7634040095fc988db21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-linux-musl-arm64.tar.gz\",\n              \"hash\": \"2faab93dd38a49386032083a0f4a3a5a5661d6ecff4a98f068ed7aa07b201233804fa0e5efa4911b6eebedc9994d59c4d5d843deb773e7e2627b2aa97e634a82\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-linux-musl-x64.tar.gz\",\n              \"hash\": \"e711b74832269463e27f98b049c442d3684cdc213115133285a2b189ef4564b65127747cdd3a900de53581019bdf8f47426f2cfc9bfc1c0c3a83106f9bb54ea5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-linux-x64.tar.gz\",\n              \"hash\": \"4d2180e82c963318863476cf61c035bd3d82165e7b70751ba231225b5575df24d30c0789d5748c3a379e1e6896b57e59286218cacd440ffb0075c9355094fd8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-osx-arm64.pkg\",\n              \"hash\": \"3b9305c3b5b5853221bf4c3f53cd1143bef02249a81a98ba7d6ac9f4a750860bb0880cf908a6061f6be4cafd38a00c9143f3d014f6ec2a206ddb4182a9aa3005\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-osx-arm64.tar.gz\",\n              \"hash\": \"a3232c0693b41ee6b18dc3c8b26d82dd9116132bd7871dc9c0a0acc5e7995f352e760869fe91a08828417ea7b91fc27859aeea449b9efabc17c136a57737c93e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-osx-x64.pkg\",\n              \"hash\": \"61b12de01153f8f878a975052ea7a398eb1e43a6ce7b170ac2e6051ca0a6fbc4d56ab157b4e9414263bf7b6d975300591be70f43427bde567f148021af373a08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-osx-x64.tar.gz\",\n              \"hash\": \"063aeaf4e949b96d501b77873279f0286cde46f9212b59181c6db21630401fd6a352e3259848cee8e127e4ceac85a25e0bce36699a2fb6f6e2a91997c6f61eae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-win-arm64.exe\",\n              \"hash\": \"e48f571d524ad369aa0dc523ac53860fc2143f2e0a1da48e0c0ac16e373d617f427bba703abef8b0f68df1c7b456ff2ee44dc3df0f6e8d5f47d51b602a19d219\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-win-arm64.zip\",\n              \"hash\": \"5e4ab2b0d4623796a5aa9d209084b9bd19a5d5db2c9165b9be0cd8dc2953a73a26e681c7c7f5816e0b96a771f91995d7ee9949ff578da8f43990f3bd9c203195\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-win-x64.exe\",\n              \"hash\": \"47080f5378ab4ce22d572f11eec19d65151508c41f5c5245e481e6b22bd14d1d84ac197459c0d68717298657c3b752ed5a1d87b26d499f78ef41c2d04582ba9e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-win-x64.zip\",\n              \"hash\": \"384c473811118f47d50e937e29bb4f03413a07dc859c30486b1129d99ac80a61527c77baceafcf1ce42533ab307d65b476e5d0d7c503f930440456a0f75b92dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-win-x86.exe\",\n              \"hash\": \"38c0e76da9c2e90aaed7adba596b2c3801f7ab76909cf2d8d67f3e7ad16a3fe5d30cf2ef1ce2bbb5222c6c43d001822193a694ece3c5e381189c108f72470098\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.401/dotnet-sdk-8.0.401-win-x86.zip\",\n              \"hash\": \"ee5e467d9285843cf4b68913c1dffc40ee0f828aa39b75e60cd9514d08d7c1a0c809e282ea4d0cd2a18376f80298fc05680f26a96d11247f7abf1347c8fa4671\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.400\",\n          \"version-display\": \"8.0.400\",\n          \"runtime-version\": \"8.0.8\",\n          \"vs-version\": \"17.11.0\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.11)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-linux-arm.tar.gz\",\n              \"hash\": \"caad292647790023a41a9b728b70994ffa2adbdc08099a768870806b16b53a4b3e4b6cc0aa79974aabf8d9adc61e2f9a2b662c829dc9c72b0fc509fe06119265\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-linux-arm64.tar.gz\",\n              \"hash\": \"d27b4ddd864478fc4655485cef0773411fb934c816fb3dcdafb18f670212c5389661a8255ca8a54562613815712f5ea23e5d8ad1cce4e00a3f8a82c9b4a6b127\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-linux-musl-arm.tar.gz\",\n              \"hash\": \"5588f18a3bd654bd7aa8b57574b83b40174992772e53baa80041eacde35382cfa6a1c658d979fe082d1e42fccad2af93b8e311dc2d0cd06b5385e712d5275f44\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-linux-musl-arm64.tar.gz\",\n              \"hash\": \"5120d8134b2f638b3c33d7e5506cb16a980adf6bbff54c278b5de64acb8c55e034f20ceb2db12b2b61b823778823cec51089819b5d1f7cb893360ac5cc60b6d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-linux-musl-x64.tar.gz\",\n              \"hash\": \"c92dd3284d0070f22a4b488884e06b3bfc8e42b3932c9db20cf77368a528f295d4e09e813b709cfecc01a82f8c95c8a0b9d66840073f2a352d850d5ede14c859\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-linux-x64.tar.gz\",\n              \"hash\": \"8a4c637746177c4da6ceec63e23a1f499d61d050aa72bc599841550557ff7b1a15a034044c3987b230fdca4e5113de12b1676f5a2366e9946bd94aec1e51a42b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-osx-arm64.pkg\",\n              \"hash\": \"98046617de9a6e4128e2afdf85c8f404aa155c9875f5fd564e7f5fc742ead304f0893162b65470e16891f506e70d58f5ceaa1adaae700eb8aa0244cdaf3a2f46\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-osx-arm64.tar.gz\",\n              \"hash\": \"29656a362ed6d74eec08d48aef930e5098c7456faa1bcaf178f9421f8423178838071b4ff81c0429155f1f834014cbdef8121eefe002a079443ff7a3193b4ee0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-osx-x64.pkg\",\n              \"hash\": \"7003adb0fef54264f7a2124113a8be75fb2b5f5fab33fa31af648bd02f2556f34858931dbaea06608e83084f2308c4b373573167308e24efa562fb34c8b69470\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-osx-x64.tar.gz\",\n              \"hash\": \"d7963a28de862605ff3c52f42155a3400aa37d7a2c01374f278bb18f0daa7a8206856cd9114bc2b94fcb8f9010ec02ab31e043e7f564038de4dd5811f943a331\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-win-arm64.exe\",\n              \"hash\": \"fc7a4e0f08c3fc623151b0ff3d1b40a1afed94bd97caf1e71820f638fec1f5e112dbb3a37d1f5af6c367132d522caa0232f9c28098edd2aae702cdc75fa4ff36\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-win-arm64.zip\",\n              \"hash\": \"f9d5a82d27fa5054bf1b38c65085d8cf4974fb8b69e646656c95114eeead163ce69ff42752266797407353759ccd9d26ad936bff830111d1b8df7f6e78e5937a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-win-x64.exe\",\n              \"hash\": \"466906bdd41ff425e4e759ec4ca827e79f4c2aebd593032191b7a0bcf554f2a43c333c606ee3ed0da9af55c2b449ed368d224751665ec0af51bbe71e27a4fbff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-win-x64.zip\",\n              \"hash\": \"3b3b402f9402af4b80ba12d04787a083d1950c741fb64b06b3e215f6e5b3db2f86aee8014848c955ea17f9b699d302271a934ab2d5db1b35dfbb9d22405032dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-win-x86.exe\",\n              \"hash\": \"718b917e3575e487dd7f3bb5b5cc89491a2b203ec38bc1f93de004abeb486a9ce3e72e8cf460f89916ec8c6854b013cdf170eee1c4f39b42fefad9da217097ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.400/dotnet-sdk-8.0.400-win-x86.zip\",\n              \"hash\": \"d6102dde8550c0c77617eb19ef7c8e5e6beaacff5527ac024e7dc06acad97e2b099d570a371daf295db107a4deaa41d6d11db13b2f9fb8512ad8f8a2278c6201\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.304\",\n          \"version-display\": \"8.0.304\",\n          \"runtime-version\": \"8.0.8\",\n          \"vs-version\": \"17.10.6\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-linux-arm.tar.gz\",\n              \"hash\": \"31b48574ee763b0d41820c1f496b3e05536c6b69fd6e7641244b1cd65dcc3b2ed5efb483d7bfcc3c2fced2fe4e946589a58e244ddc5a131cb2654822018c0d2e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-linux-arm64.tar.gz\",\n              \"hash\": \"6ce93ba330848b4045b6c63f96ad0a91c474361cb0a208bd4128d418fd6da04695559add63df9a0acf283a32e6e781328d3979af900e0b2382cf006c9982806d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-linux-musl-arm.tar.gz\",\n              \"hash\": \"d2d1071c674664a8fe96f61a6204c56f9e2c6598d2a11e34eac9165ff30d1cd33119e10e79499a9a354ec461e3063e407772b362f3640e64114cdcd2a4ef0f6a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f266f2c8c405377d84c4f1917a0c4a7493097cc853940ee1290eefc8777331935a80002a9c6c7c03198ff3661bc8aba2e933415d8a778949ff901da8bfda8d1a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-linux-musl-x64.tar.gz\",\n              \"hash\": \"41da6d47972a7ca676ebc071861fa3c56f311f63ee09f7fe03cc09cef1e4771e4efe73c5fc6b02ab84f007c2e7044d7ee16c658971fa856d53f15f43e6a61d9b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-linux-x64.tar.gz\",\n              \"hash\": \"971c344379240ec4bfaaf1eca69c6667e594cdd0dfdcde6e8962cb7a41d669dff91c644e48eed3573d841b7b3e60ce02e0c27a7ce37b66cdec27bf3457087c4a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-osx-arm64.pkg\",\n              \"hash\": \"2a8c0b6413f98eea57fcd79e0af7e8e5e42e0e122df25c19d25d61c57cd4544770379e0a5283a13031715b637a99a16c916cc87c55fa4d922652cdfeac39f6c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-osx-arm64.tar.gz\",\n              \"hash\": \"6993a950bc5bff0efe762ba2562a88761e93c61024d93633209950cbb68aeb5ff189fcbfe9247a1cdebbe37e738136123c7d4eda1050708608bb1ff0408eff4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-osx-x64.pkg\",\n              \"hash\": \"6d75cd899b0eba8a19a25665abf518a87a8eab9e1d96167a498cd35625ada0acf5c80a282b1bb2f05dff044baa9d2691a6bf1a7d566515baa2ef2b4760b98f82\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-osx-x64.tar.gz\",\n              \"hash\": \"50f0265436e8c3d756ba00ab7fcd606cb5d452d7bede4daf97e4c02cc97dbbafc00b76f37ec4f07bbed4bee643a433849ddbd363ad2d916aa5965ee74ba317d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-win-arm64.exe\",\n              \"hash\": \"dd08ba99c3d9b8381177b549afcce1602abccd5048aedaf41c189655f2f8ccfd6fc7b7c218175f8e7aec41d1442cfc70f47ffc20864c970422c5a0f579556872\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-win-arm64.zip\",\n              \"hash\": \"252dbfca1c0d581f7ed108fc9da7716af795d7778585ff1cf631846e6782f3bf3300397741fbd0b0dab22c7a6456b990199e8232c9fc10c2d8dd4a11f3786d80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-win-x64.exe\",\n              \"hash\": \"2a76b25cb072c10807b096e7dc118ec2bbf484d529f782344fdaf694744dbe45941c7c54a4aafe2175bd0b066e5faa4ac5c4144c4cf5f1753b3368ad73fef8af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-win-x64.zip\",\n              \"hash\": \"7e987e30c8739b3785e7ae5f17e56f991d62d5ef9e7b721b7b19998b9b4c314c662a5fa50c299c4ff7e2b40cd706b390866a4988e0096e93448950b9710b4101\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-win-x86.exe\",\n              \"hash\": \"afcf14628b32f04fe7f4fdfdd16256e1cddfc35b857a6cfbfd0d46cf6791c5a42a428495e51c27aeaa1980f1f69d8a89a5c41c812ed750e27c944bd999d116de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.304/dotnet-sdk-8.0.304-win-x86.zip\",\n              \"hash\": \"9eed5301d98ac2b644dce118ca56c89e302424893fd6b2c015bf00b2c0552d3fefe1774653ce955a7a99661f41f372d3e7530007f84753493d6abe6445882daf\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.108\",\n          \"version-display\": \"8.0.108\",\n          \"runtime-version\": \"8.0.8\",\n          \"vs-version\": \"17.8.13\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-linux-arm.tar.gz\",\n              \"hash\": \"fafa8564b34b524b4209e1047ce7cf1190a5d42e7ba1b13524f5de602b075e630cdd229567f14eb2f0ae6c96ac910ae9dbb4fc4e528df958c9d31471341eedca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-linux-arm64.tar.gz\",\n              \"hash\": \"6cc723f2b139d19b2e17da5936698d388a5b64638b75ef78c40c407ed3cfd3dea745c2916f03efc9e66479fc55d608eb3a89305727ecdb1c999b183b58de258d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-linux-musl-arm.tar.gz\",\n              \"hash\": \"efb308d81ac1020962f14d03e7ca9419a2901a0846120e07cd95c65407fe2981a26360c2ffea141d80581aac6d2c36a7379c76c07b2fb37d4efb836905f8ff68\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-linux-musl-arm64.tar.gz\",\n              \"hash\": \"e7009ba373b043ccb469557271ac8ae518ab9c9b5b364e9841d8b97305b6036f33240e672e7c483798616a233429748d5038fdfd336352b82060afd645747045\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-linux-musl-x64.tar.gz\",\n              \"hash\": \"744715501de3946f06cd316f35cabc0e363e0af651044c976708c0d48d4eb0d09489d92cceb283c751b2eed0e293ceaaabddcbabf7c25e21d658ebff9dc304aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-linux-x64.tar.gz\",\n              \"hash\": \"5666ddf6fa9b65deaba4d7c5fcc2e2d56f631c4f5f6fb2a9f5919af0616ab2b420b12a828becc2e4b8628a76ac3dae824b55abde5c6d5ac59ee131d7eceae7c2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-osx-arm64.pkg\",\n              \"hash\": \"df4453447ec2180ffeb7d08826e296992c966467ef95982d9e57ad861ea03b6b93af1b26b7e7657c797cf071b9380550c9c5ec8ea9659e4b7bf09a0c7e419605\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-osx-arm64.tar.gz\",\n              \"hash\": \"83b01276474b4b62bf0a282fbe11d2353a2191d90becd403b373cd6dfc95264442a907117ad8f615765b13969267b887d26a9f24dbd5f88d8b55daa94412d13c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-osx-x64.pkg\",\n              \"hash\": \"45a977e7cf5fd9fe2c7b471692646212f25ac4bde7c991a0ec13a0de3ea143b08acb295bb4da6cb3ee489004bca2744e734b87bc558245135795904fc736a943\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-osx-x64.tar.gz\",\n              \"hash\": \"a80fee279abfeb558a5540ca2a969a11bb3dbeade8c39d8c47be8a2d622ef1c2bedb22c874598ad41dbff2b95d5a43197bd9f55fc933ab4ede5edcb6a76cf6cb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-win-arm64.exe\",\n              \"hash\": \"699591071f80944e81b46d783fcc124f9c5095fc5b97bfc620c012d7eba4e222251f60e3a6d21d26d58eca505edc0f113ffb67def0a35a6f61de347b914d146c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-win-arm64.zip\",\n              \"hash\": \"ae0495f030e8cbfd278912bd30ebf764007eeb31352c5a1700cb2d3aacdc1e0cea43dfc048f6da72441ed2c507b2b918297df0fc942a652c309b0070c53b7577\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-win-x64.exe\",\n              \"hash\": \"a2506216679e4d04767a6a92151a660545461a5c4a658f51c97b0e2fafc61d05abb1c143f43e05691f9d6d9c3342280111e94121583fac0adbc836d6a15d0ef9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-win-x64.zip\",\n              \"hash\": \"9ab4a1fd0e593dfdac8834ff614f7d1d39022fe3cb3b70c500b07afe77ba7e1214b531a557303b8d3f667a3b22b88df12d4c9e2020427f5a3526a2a394740922\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-win-x86.exe\",\n              \"hash\": \"e76849c5604c1f061d963d4254078211b866851645a4217644aad9c5e611c8fd1341a4ed406e9595696000902442026103dd3446615e57d84371918c890d73a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.108/dotnet-sdk-8.0.108-win-x86.zip\",\n              \"hash\": \"bc18424167a9978097918ada0ec8510d592ac3567966321b21ee651e73d50ca4dcd90b11dbed6410d722551a7de2bb02b4de0f7644d58213e585d6b9051bf4fa\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.8\",\n        \"version-display\": \"8.0.8\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24201.8\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-linux-arm.tar.gz\",\n            \"hash\": \"d0feedd91bb4028069d8cff1726191e9f09920e756405de0d2bbf6f43116277cc93ebe2483f405baa4972b54ffe89b09cbe172a639e60397ae7138df5ef48c4e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-linux-arm64.tar.gz\",\n            \"hash\": \"c3dc9d71fca0a48eda96074cbcef4c9a265c1c4e10cbff38614dd74d79443ae9d1ccd10714764cd041291f81d83c0ed1c307abf89249ab4b6f58a5de952fcffd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"5d9f609e72dcfcc16b6bb63d49e7fd47c3e2d77913d9de14864417fb2a534b2f7db56530db165acc63633641c706d0faba95db985b09844677d8cb41039a0c67\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6028c29306d4969ee404c459dca3130f1e9614d1954e8ed4400140b35ad8a1e66a0a8b3ae02155df6bd046cd9309074220487a1c2625c39f081bdc6c8ed62005\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"822f2e1716dc2d2aa46ff08f4d2d9bb9ea8c82332785d0aba5f4f33e5eb60bdcd84e899cd2a13ca93032226710b5f0ca5c7159beda17027f84efa285278b5798\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-linux-x64.tar.gz\",\n            \"hash\": \"d6c0cc2aac79fbacbf81b597f286763599f66278c17ddb448ce0b93d499bad8f88777d425854e68602945ab18af8a61f1ee59d431d5503006137f86113faa8b2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-osx-arm64.tar.gz\",\n            \"hash\": \"a196c62b14e9136362073826a03e76e0a147027f03655529426e594f7e44eb8dd036daea80997876047171c1793c7edcfa5146bd55a01b591d9405fb1646eb00\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-osx-x64.tar.gz\",\n            \"hash\": \"d3ba8dcfaddcd6d50fd434911fe3eb8309666939a8a1ede800d7da2dd814efbd781d1449a42b71d1c71d9593465e9e97205025eb432808ef9a3ba0dcbdba0e3e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-win-arm64.exe\",\n            \"hash\": \"3cb44ec35bc7f6fff4d6879ff0fc07abe1f2cd192ef9950c8f95aeae4c9023189710941583ae22bb7c56e5c3357ee80dd9fde1a9ba35452a46d133d2970604f3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-win-arm64.zip\",\n            \"hash\": \"cf1aae298dd82dd3f23f30ed2cd045eec71fb3d6714bb4d0ebb4d7adf3597096106c2beb753398a82875012910215b7ba3b901c307c2a8109a7a65b67ff165a1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-win-x64.exe\",\n            \"hash\": \"908a9e973b052ebf564f2b693bc004ef968079ff2a325cce2912d6d20dd8a74411ba6e6e98ae6e9cb0098eb1cd3878c7cbece8af62ba0e1926c89ba5408799aa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-win-x64.zip\",\n            \"hash\": \"c5ad87fdf6cac37234317109fcbc6649aeb0adef3ffc2583af6e044e8934862aa37d17a6071d5383917ca92c01691c8c0680270fa5b6f1aeb43a0fb1d6cab4f6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-win-x86.exe\",\n            \"hash\": \"45b4cfb383fc9541423547807229bbd8477bf7f1c30af84cc4f4a41506fba0b54a06f28d83aafe7ce2a0014ae581813c4f4e60a3f08c23bd7e013fa947bd6995\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-8.0.8-win-x86.zip\",\n            \"hash\": \"7f1f69cdb6ad0d1ba784cf827c122a1e77084c98d824936ce2d9c5a611818899f4bf27fe5d1a62678e78dc9cf987cb5aa6abd51c03874d046964a88ec7f80061\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-composite-8.0.8-linux-arm.tar.gz\",\n            \"hash\": \"0b4273d059bd57c7473b80f548fc519a674542d18403d46416e7005dc6e5b984828f1c3c125d19af8752712936c2e49e2e574d8534002980aa298a159bc89698\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-composite-8.0.8-linux-arm64.tar.gz\",\n            \"hash\": \"6385460af9f0e0377fa92f737dd0c76aaac60c8602c0a872467909738ab95dca67d9f75e10077610a3a7ea52f4abef5a86f50f25eee1c8587426011441d1abfc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-composite-8.0.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"f115d139bbd635eb83818d78caa85b68725a1c35404985c077a1a0c696698cf4e6068635a25b053251139ddf80738acbe97168c109fc890f1dea4fcf9df86cdc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-composite-8.0.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"02e92e451ecfa4fe2e6c9483323fd60b974c62f24e7f6910ca28a977233315029566e440f44acbb8beb23bf7691c9a7812a0e2670be3446158362279a08be752\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-composite-8.0.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"7f3ad22abca4d43a46c11ffcdfedf8cf51a297ea83e53ece11e131cc9afceb67a8d4cd8aa0e35ae53c2bad0fdaf866936ba4c670fdfc9c9f57f832d2cd1d0c62\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/aspnetcore-runtime-composite-8.0.8-linux-x64.tar.gz\",\n            \"hash\": \"7f5c9df8a36f900021cdd6c3e8aa7e1583b1dd413de52d0ee109f44f101479110828f8840082020b86e06301789f075a6ce0018b86af26bf9544fe4f6fc165f2\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.8/dotnet-hosting-8.0.8-win.exe\",\n            \"hash\": \"f3f388d24050d4071a8564fbd22c23d3ef86912be48ead0854ea4fe37e2416d8a255031bf85208b6d39c87105ab41442025366aa42b35337357cdd74b423506f\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.8\",\n        \"version-display\": \"8.0.8\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.8/windowsdesktop-runtime-8.0.8-win-arm64.exe\",\n            \"hash\": \"6c8d48681b18c403e1daf1eff2d141d98a2c538d26f49dde6dc02701c0300bfc5e101dfd47e9eb54f2d9328e5eeebb44366a08d99c48efa3eb1c6f71c98b78c2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.8/windowsdesktop-runtime-8.0.8-win-arm64.zip\",\n            \"hash\": \"eb881af017d58baa63d96d93da551503b7abe503e1a5e1fdd0e9f253d70e40607808a3b0ad68988f6683927b6301a65dc2ec020e8dea0239bac4c24923fb6f2a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.8/windowsdesktop-runtime-8.0.8-win-x64.exe\",\n            \"hash\": \"27484ffb1e9ce5e6290cda8f5f49563cf4a9e2692aa57429fcd0d3de4f30fc2fce204b1b120349ed50712e95d3fa51037ebaf9b7fd60c41856857b1372e0eac7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.8/windowsdesktop-runtime-8.0.8-win-x64.zip\",\n            \"hash\": \"955db393694978a237f2e16a70057a3a4b74e0de15e18e1021f411ee9913fdf63aedada8d71974c6bb8b609c6d9296fa8770018bf582a76a46c4e403651c7fa0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.8/windowsdesktop-runtime-8.0.8-win-x86.exe\",\n            \"hash\": \"3101e64ab772cef8081ca5f441f599d1906c9a3869e7ff20ee1725e121a54dd0569e55dfd842e748a0dd6bff902562834922681c9bb43ede6760aed1206c7966\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.8/windowsdesktop-runtime-8.0.8-win-x86.zip\",\n            \"hash\": \"37b580145dcd37bcbc2c9def7f3f0e51b63e1210219712b9828b403b0805a6fdfaf1f2f6e42196084726575e27a0edd1cf7c40647c92c53fabdebe5d89664ccb\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-07-09\",\n      \"release-version\": \"8.0.7\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-38095\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-38095\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-35264\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-35264\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-30105\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-30105\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.7/8.0.7.md\",\n      \"runtime\": {\n        \"version\": \"8.0.7\",\n        \"version-display\": \"8.0.7\",\n        \"vs-version\": \"17.8.12, 17.10.3\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-linux-arm.tar.gz\",\n            \"hash\": \"ccfe95a95be3c64d568c6f79df391daf73304fa2c2aedf4616cd9981efe11cac698c157d8375da3afda691b78124cc6672fde7353b0fea4d45da15e003040a2a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-linux-arm64.tar.gz\",\n            \"hash\": \"99e6959a1156d5abc8f0c73b3d493fc1e10a42d48a573226ebcfbdf96bb6fb1c8701db5b3582a4303ce26a4f784e74eb402cb6e5e4bcdbb5dfab8fea221cfe02\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"03aecb348a99d0afc9b90006e14a0c75ed69f7ef6cb8689fac171edf0f88aaa928a395ce433a390cee1ca4255560511c89d8d827a575b21876e2e7f94d5bceef\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"249246082498d3f6b5a3a0347527ac5a98ecd0fde235d6bb48bb18e4bb031eda6833526035279e99e97fbb5dc58fba132c9bed5f33442c47e571a91f648fa863\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"31386a3af6cbeea3e1b0e2f109d10222c5ad41057540fd5c626959ec7d2a542b859c9699cb86a1ac812eb7fed139dcab0c53ecb8adf678fe0ad04c62cf6c1f8d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-linux-x64.tar.gz\",\n            \"hash\": \"88e9ac34ad5ac76eec5499f2eb8d1aa35076518c842854ec1053953d34969c7bf1c5b2dbce245dbace3a18c3b8a4c79d2ef2d2ff105ce9d17cbbdbe813d8b16f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-osx-arm64.pkg\",\n            \"hash\": \"6fe0c208a7fe6a2b93a64a9d0cd30f7f162849fc9e71bd012e5f1305b27103721f403689f1ccce8b45b038027d892d125f842e280d680c831f09dd5ff400b998\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-osx-arm64.tar.gz\",\n            \"hash\": \"8af655573350f6be0b47223ae7272ca8d49fb3c74f6fc167e7249267c1616842eea09709205a07acd3b86a5ac862026ed1269ece5e681c3fd50ada8351c5dfdc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-osx-x64.pkg\",\n            \"hash\": \"9bbdd3a4f2792083a51d47ca2e854e392bbf64c4c6995e4d6833a2998f4549dbf5aeeca2d84c335965f48857b7813d860fb980d7a254704dc43b72fe8f512952\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-osx-x64.tar.gz\",\n            \"hash\": \"09107de04c6748fb3d98d72296e3470a6d3551a66bfcc310d2be0f678dd1cb8cb13a886b1b7e1e3856e12c0766cd5007f9922625653a6e284f5ab8fc80ee04ad\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-win-arm64.exe\",\n            \"hash\": \"098e27604a181888ce901eca1cc2e55af60a540e813be554eae39fcb2569b5e74b8ae2c7ed37a7ed9ef1048d50b8a0bcbd33ad94803a7d2e4b724a64e87a0db7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-win-arm64.zip\",\n            \"hash\": \"4b2dd24aa09efa1438bea7f7d8e973117f4901f94aaed785f12a3e15fc705bb4ca068c5c81ca6f7751ab9d1ec2a277a11430a3c9171a297d628190e250c96c1c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-win-x64.exe\",\n            \"hash\": \"e016b47ff8f179f1edf641cca20130e04951509f0f69f564f290bfb0ad81d7db83541fb00c4ddd8364e71c1120bcc227fa0e7e8e142bbee2c4d329674ed0b155\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-win-x64.zip\",\n            \"hash\": \"abe510a4e57bb115698bbfc1c49fe2414cd5696ebeffc7c8803d4d0278a40010dff36b3c347651e5a87301a4472bc610019ea281499d5c351e25e60caa18195e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-win-x86.exe\",\n            \"hash\": \"32290e42a0a0b082eec4e70352d9777c9cbcc97296df98904a8b8e309dd1fc196433a1a3c62d1f60cd0939b4948237a3ff5f154c577729b7154a627e3d56c1bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.7/dotnet-runtime-8.0.7-win-x86.zip\",\n            \"hash\": \"1bd64825ace6fbde84c8f0d42f18df57c1a570464ff65767842797f3b54f86486288084687bdd8d1da0f83ef2eb76b05af14d386b6c52e4c9ff072bd71f58a32\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.303\",\n        \"version-display\": \"8.0.303\",\n        \"runtime-version\": \"8.0.7\",\n        \"vs-version\": \"17.10.3\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-arm.tar.gz\",\n            \"hash\": \"03b3730d1fd5e1955b8a23e69695c975e88e781513b1f47027ce4ed96a8743ba2560ca87ae2e937ebd89ef69a3aa05c4ca2f39eede5a27bd937775f372b9feba\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-arm64.tar.gz\",\n            \"hash\": \"09cb6b12770febe186e36971afdbcea6e8bf5fb34b7701cd8c416f597d3b7e930d05e51ccef1985e5598291540ef2d721187904587469300bb39772317e2be5c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-musl-arm.tar.gz\",\n            \"hash\": \"5e119bf1496bebd3b62d0c0c837bb8e8695784c91f9042771b01b47953d82e59605d7c04f2b821340792ace2966587a10d980bebeb8f9a39f1e8e4588ab59a6c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-musl-arm64.tar.gz\",\n            \"hash\": \"88a42a0a9f0b6981eeb0d2cdbde0fd98631d57c09ddca566bc1b4d4b99a9165e276a3434f6804bd54628387edae99c8f0025e889c0e06ade0defaf2fa5858d65\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-musl-x64.tar.gz\",\n            \"hash\": \"5696332dcfa1dd16f897f68dd190e45f6604fd8228d563394ef9da09f2ff99214ba23b80fa416b7748a5c34912eb42523ba83138d5cbc4468e1efc15b747630a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-x64.tar.gz\",\n            \"hash\": \"814ff07ccdfc8160c4a24adfda6c815e7feace88c59722f827a5a27041719067538754911fc15cb46978e16566fe0938695891723d182055190e876131faedda\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-osx-arm64.pkg\",\n            \"hash\": \"3084ad0cce453937b22912ae6b882fcca3d680c3103964ee7859a2ad55816e3188b98d186df0a7c4e5e2a411806a72686392e646c3d34c85bb4e40d525f0f12f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-osx-arm64.tar.gz\",\n            \"hash\": \"c1c2935ac0b6654805e8112ff88d31ca9aae7f345218c9a9d9e512c98d73e2bccdfdb006537832e4f20fd3a9ce4defaad537e5cb98deb538e95b54a2c76a9110\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-osx-x64.pkg\",\n            \"hash\": \"3a65f25e7bf4af09403776fe058b990cc7ee43e59ec7312d18429d1da929c5e9564d9ac89ee68775817b814b47137e1f4ab93e233635467ba8f48cb42b447b9c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-osx-x64.tar.gz\",\n            \"hash\": \"5676b8c0497adcc9543b5f4dd57c54451ea66e79ce6f656647bff54619785a05f5c52cb22483bf14b1f3eb85cd3fb19c2ce4352e7b8482fbc1998a1e7043c377\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-arm64.exe\",\n            \"hash\": \"a2f26a8b816bb27fda3d0b5bfc32af0714543ab08cc1261261dd4487605fe89de85a77d646e2c514e1b54ba0d0f5e06b93c3d81a7a81cc711654e6c1237d5cd7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-arm64.zip\",\n            \"hash\": \"3ec3f0a3d5cdd3cd0b33be9b09166ed0dfc1e83bcae38170b60085fd8a95b557bfa9bd0583abe576156845998e356cdd43afc95428a1d093546a3bdbfdf97f43\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-x64.exe\",\n            \"hash\": \"69c7195d859b3ca0757fa1bf367e839c050996ba8e46568130b722d987177d3d3e025dfb9be6ba3da3e83d3c1e7a4ebba6cdaebd31ee4677a8fd4a74971ca0a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-x64.zip\",\n            \"hash\": \"be8a71f8819ceb35937c158107a34a77d0ee4f7ad761241d1a5a49842288f280b1f521dc3dcbcd2fa8a571de740d873e40b80615c2b345e2501e1875844b0350\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-x86.exe\",\n            \"hash\": \"af52649a05bb3c8ba494291234d67f3385446a8a08eaefcbe9fbc4e766ae97a6a13253060a798ce076511fa59086b1d9fa638b51a5e748bcfc79d36ddc7991ca\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-x86.zip\",\n            \"hash\": \"1a2e7f7c0c7ca9e1bf453459490e8a496c673135f4e285ed9dc3b205cb999c0fe686d74bd3f1d1dd5293b943b14d41d1d2b61e3f8dc7dda9d6c524cea8b30c8b\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.303\",\n          \"version-display\": \"8.0.303\",\n          \"runtime-version\": \"8.0.7\",\n          \"vs-version\": \"17.10.3\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-arm.tar.gz\",\n              \"hash\": \"03b3730d1fd5e1955b8a23e69695c975e88e781513b1f47027ce4ed96a8743ba2560ca87ae2e937ebd89ef69a3aa05c4ca2f39eede5a27bd937775f372b9feba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-arm64.tar.gz\",\n              \"hash\": \"09cb6b12770febe186e36971afdbcea6e8bf5fb34b7701cd8c416f597d3b7e930d05e51ccef1985e5598291540ef2d721187904587469300bb39772317e2be5c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-musl-arm.tar.gz\",\n              \"hash\": \"5e119bf1496bebd3b62d0c0c837bb8e8695784c91f9042771b01b47953d82e59605d7c04f2b821340792ace2966587a10d980bebeb8f9a39f1e8e4588ab59a6c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-musl-arm64.tar.gz\",\n              \"hash\": \"88a42a0a9f0b6981eeb0d2cdbde0fd98631d57c09ddca566bc1b4d4b99a9165e276a3434f6804bd54628387edae99c8f0025e889c0e06ade0defaf2fa5858d65\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-musl-x64.tar.gz\",\n              \"hash\": \"5696332dcfa1dd16f897f68dd190e45f6604fd8228d563394ef9da09f2ff99214ba23b80fa416b7748a5c34912eb42523ba83138d5cbc4468e1efc15b747630a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-linux-x64.tar.gz\",\n              \"hash\": \"814ff07ccdfc8160c4a24adfda6c815e7feace88c59722f827a5a27041719067538754911fc15cb46978e16566fe0938695891723d182055190e876131faedda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-osx-arm64.pkg\",\n              \"hash\": \"3084ad0cce453937b22912ae6b882fcca3d680c3103964ee7859a2ad55816e3188b98d186df0a7c4e5e2a411806a72686392e646c3d34c85bb4e40d525f0f12f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-osx-arm64.tar.gz\",\n              \"hash\": \"c1c2935ac0b6654805e8112ff88d31ca9aae7f345218c9a9d9e512c98d73e2bccdfdb006537832e4f20fd3a9ce4defaad537e5cb98deb538e95b54a2c76a9110\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-osx-x64.pkg\",\n              \"hash\": \"3a65f25e7bf4af09403776fe058b990cc7ee43e59ec7312d18429d1da929c5e9564d9ac89ee68775817b814b47137e1f4ab93e233635467ba8f48cb42b447b9c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-osx-x64.tar.gz\",\n              \"hash\": \"5676b8c0497adcc9543b5f4dd57c54451ea66e79ce6f656647bff54619785a05f5c52cb22483bf14b1f3eb85cd3fb19c2ce4352e7b8482fbc1998a1e7043c377\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-arm64.exe\",\n              \"hash\": \"a2f26a8b816bb27fda3d0b5bfc32af0714543ab08cc1261261dd4487605fe89de85a77d646e2c514e1b54ba0d0f5e06b93c3d81a7a81cc711654e6c1237d5cd7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-arm64.zip\",\n              \"hash\": \"3ec3f0a3d5cdd3cd0b33be9b09166ed0dfc1e83bcae38170b60085fd8a95b557bfa9bd0583abe576156845998e356cdd43afc95428a1d093546a3bdbfdf97f43\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-x64.exe\",\n              \"hash\": \"69c7195d859b3ca0757fa1bf367e839c050996ba8e46568130b722d987177d3d3e025dfb9be6ba3da3e83d3c1e7a4ebba6cdaebd31ee4677a8fd4a74971ca0a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-x64.zip\",\n              \"hash\": \"be8a71f8819ceb35937c158107a34a77d0ee4f7ad761241d1a5a49842288f280b1f521dc3dcbcd2fa8a571de740d873e40b80615c2b345e2501e1875844b0350\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-x86.exe\",\n              \"hash\": \"af52649a05bb3c8ba494291234d67f3385446a8a08eaefcbe9fbc4e766ae97a6a13253060a798ce076511fa59086b1d9fa638b51a5e748bcfc79d36ddc7991ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.303/dotnet-sdk-8.0.303-win-x86.zip\",\n              \"hash\": \"1a2e7f7c0c7ca9e1bf453459490e8a496c673135f4e285ed9dc3b205cb999c0fe686d74bd3f1d1dd5293b943b14d41d1d2b61e3f8dc7dda9d6c524cea8b30c8b\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.107\",\n          \"version-display\": \"8.0.107\",\n          \"runtime-version\": \"8.0.7\",\n          \"vs-version\": \"17.8.12\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-linux-arm.tar.gz\",\n              \"hash\": \"782065b4bf96901c91448412bb22fba27958e8812caba0a02cf8dbf2333f7320ba2c1eecbef4859f4034eb80d04bdb853a1836e1d284bdf5f623c7416dfc9861\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-linux-arm64.tar.gz\",\n              \"hash\": \"ab487873827677f44efe4372e0c325a48f339008d00307876e1e56795bc006be1770e8b1f9581c7197ea1bf857eae525aca18934591f603363f8fe9e021e7b2a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-linux-musl-arm.tar.gz\",\n              \"hash\": \"e6e6325c6292bf435a0771c33eaf330dc132a11372ea6d12427f5a6c24cb6db260d95b1dfbba3c232cf9d5166f61192a05c7e3be4210a05a6687634fb0a887c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-linux-musl-arm64.tar.gz\",\n              \"hash\": \"5b99a07607cae652e4b392c17a7856ffb5df939e95d741d07c385d422e5511394567b5102213da1dc65183680d0e908d83c43c95b14bfabec305ca7731d9d676\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-linux-musl-x64.tar.gz\",\n              \"hash\": \"f25c95f9acff4db16593541fda517c32477eb618dc9ad5b3983a4ab5bd62fdd3c03c7d9f56afe1132aff5137bbdc4161e0b83f7c8101cb1766b82ed4072becef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-linux-x64.tar.gz\",\n              \"hash\": \"10e0fbdc589e5e0de4fb0fe0e9c839bb2257c51948037a224d4358b8328b6791014ab4cb164beb617c83531a6ed774acb37b08e4a1b53f165e3eb853fd41a959\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-osx-arm64.pkg\",\n              \"hash\": \"15049070340e2ed4481df808fd922d19e9ef2287702feb5b4a5785e2a20204108274869f3376dc8ff4b2cb4e5e43fbb9fae6a430a684539bb4c2451d2f33eb32\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-osx-arm64.tar.gz\",\n              \"hash\": \"b293f8e3cad20278ee85e30b4b1baa615c30b0e7aba557b1d0248d9e5c4557e323b726afdde0386c0227d6cbc6f95c8ef5493e209cb5a42b64e8c7f6e495224e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-osx-x64.pkg\",\n              \"hash\": \"9b63206c36ff3b64d222fea1c143741a813d099616e5c90665484b966f82e26b38addc7f4712a705287b12534319b517ac377b14d30c4310fe7d695676f7b4a6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-osx-x64.tar.gz\",\n              \"hash\": \"9bc62515220f924cadf02e5be880fa813b6d0b0cf8c2199a7e930e25e81576ff3e88894e5a0b691d8b0a1e32fe1ab4499ff47d80cd004f07af61d6d362efb654\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-win-arm64.exe\",\n              \"hash\": \"df5c9f9d4298bbeb5430e793d1735ecd17bd8bd18ec5547c3a9593ee4cd09688dd6eccfaf312156a161336fff830382261ed970bdd767f8dcc8404bad1b316a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-win-arm64.zip\",\n              \"hash\": \"088753c813432bbd94e13f45b7db4366730a832ce603efd5f60499c4d414575bca805c066ba5743d5639c5e427d9f4501640da7c0eef437d411382e0c17dfcc5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-win-x64.exe\",\n              \"hash\": \"98413082e4d7df181904053f481f3d172d6d62fc546c004d0e8301b882cee72508c0d69afa514b6ec060ffcd6e4b02b239eaf9e2c804009bf5b99dfaa29ee41c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-win-x64.zip\",\n              \"hash\": \"9d26be45d25a7b13861e4beb95c78e73425c5c210bdf8c3b23b29813caaa314195b928df38eddf5bb561bd2767e607dd2b863d09283ed7d5f96dd4fa6a35434a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-win-x86.exe\",\n              \"hash\": \"969d63a0747103bd4bec05a891d0e2c900e12ffdda504123f2de4c4025c4904f516e55b8edd84003e08e414c05256c5cc0df2ca6527c61684be59791c071abca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.107/dotnet-sdk-8.0.107-win-x86.zip\",\n              \"hash\": \"8500a6e40d28de34881ea9f2679d2559d6192a4deb16bf2fad7bed91d10ef0726da294b6f362be0fb89524622d246bf0fd3aa2a4dab97e671f5bcecaaedb67ed\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.7\",\n        \"version-display\": \"8.0.7\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24166.7\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-linux-arm.tar.gz\",\n            \"hash\": \"d0107441223a44f1c4d9fa08c2d66b1875d20917fb1dacab7f80a42f0da1428570dd1cb86bc1f6e4eef3414e1770768fc8f17b836d0f7ab9b890848bc18ce8b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-linux-arm64.tar.gz\",\n            \"hash\": \"5f1d31b0efc793655abf4289f8f1c7e8cd1ffabfd65b385b49e3f5232277c62ccfbbdad2a51731a8a88594a06c2c9774e38865cb3f7e19c9925a12b25b40b485\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"9acc8bc8c5fde692def85b1dffaa8648fcc6a2a482c252882660ecdc4ca8b4be8d59274891bfb9b106cca62849a705b482ef5b4c539014e284dc2309234ffe22\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ca5b8d9fbdbe3c38f560d662705be00174885fc7abd875ac056c97788410329af9017ec6052a146b9414d26ff956accdfdc6ef315aaf7c6936b0520a9320493f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"a60d470dee1a1da34ce4d9e84a6dca1e7df2bbbc8b3b0fce36543f712b8a3da78a3ddf59b4ac231986f49a6fb44f59a270a184fabbda6a0e098d018d3e2afa46\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-linux-x64.tar.gz\",\n            \"hash\": \"c7479dc008fce77c2bfcaa1ac1c9fe6f64ef7e59609fff6707da14975aade73e3cb22b97f2b3922a2642fa8d843a3caf714ab3a2b357abeda486b9d0f8bebb18\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-osx-arm64.tar.gz\",\n            \"hash\": \"f02e3b3a4ec366a2be7ef596f728914fb7c3810ed507ebcade27b09ff62e7cb84cd4b24c8438cada72b99e60fc7477d868a6cb57083a39387f7900874faa35f7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-osx-x64.tar.gz\",\n            \"hash\": \"867765250c5ab0431023d59b9fd04ac0ac868797e2ea1b4257e44d93033d653e48d8776bb7e7cbbdec094a5a60002d2833c5a58094fe54c2b6402b1ce2882c49\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-win-arm64.exe\",\n            \"hash\": \"d54d9a1f344adc9f31d3bc4085fe977c55fde9e5c65c59a9ae3475ddf53ae4a15e0a6eea7dbcc211e02297530035f55f879dc777ad499e25b61b5be29d51e09d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-win-arm64.zip\",\n            \"hash\": \"e4443dec8f8c50ff61bb607447c662c48c05890946afe1a7dcddb956b94056d14bed60f455d0854b273c938c078c0b67f6cc3744216f7d4f199218a7898170ab\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-win-x64.exe\",\n            \"hash\": \"0a6b57b7bf939dacd3b90f7da9ee4696993c1f736e8e4d61feb97c9061e78cad023e0efa94c5c6bbb4c25272acd4ac89e555dfff39a44fc65b9d5ad0bb1e6019\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-win-x64.zip\",\n            \"hash\": \"e745cd0eb11ff4f5dbfcea2966542dbfec57cb0d6025e1fd0a8f0d500c1246d9636f780b72586a55a3c8bac657a07443e4073eb9503b9f4eefa7aab336b6000c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-win-x86.exe\",\n            \"hash\": \"5d887a491c58210abd3015099f80dc626c59bb832d36becebe619e729332daafa3aa030ca6af06ef7135805905c6ec79bc0fa2ab6d02d4ce066406a1441c7960\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-8.0.7-win-x86.zip\",\n            \"hash\": \"504f3738ba8c626477d22462d832e2f68f2ead4da66454a1c0dbe90af5c16411b01d8fc653d83879c20c837f2f44c406fb8a108ea88c24af7cdaa42710d6f176\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-composite-8.0.7-linux-arm.tar.gz\",\n            \"hash\": \"72f95a217994b8bcc0dc4a195cd8ebee8b532e6ab668fbb3621a36651e44ba1862fabf9c9374773be22a5d94ced81811b4c0c9fdb2543aa8220cefb182070b09\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-composite-8.0.7-linux-arm64.tar.gz\",\n            \"hash\": \"37a7380ea8466fafbf3e36f3ba3102ea9cd5add99ace485fe4b612f3e75481a3cb721dd0425380840ad641d559bd0fddfc73bb7ad4b452d4be50a4ff8c286935\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-composite-8.0.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"ba4cd631dc1f88cd8bc7fd8e5c3924758a81585d5f8d1e3ed97bf2efc8bb25d740d0a5d38bfcb67a9454c642f7b6d2b5b2e4faa2d4447687973c2c3584a365a4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-composite-8.0.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d6da2d256622ac7733ee3b21573f59411854c7ce702a459e84ab1d830f172cf07250d7b9ee14b898bb18e414658f25e90ab9b1bfd21c02d5f0d1610e4d4dd9b8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-composite-8.0.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"c1e303f0ba0cf584157b2e830dfa237fad8a67c8e699737f6f4ba701fcf101afbe639dc15dc12cf69be6c9b4f947ca8b9043374247cededce891a1cf6987516f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/aspnetcore-runtime-composite-8.0.7-linux-x64.tar.gz\",\n            \"hash\": \"206786d755c85ff253e2b9a08c9df0793301656d91e6539554dba8d119484e8684cf0c83a75773608a64a109d1e94c4f966bf5e4636fb4e438f01dde3f769814\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.7/dotnet-hosting-8.0.7-win.exe\",\n            \"hash\": \"53395e0042b1a2d473589cb8d4522d2fb2087831b26589d4269f4774b461bcfd753f70199459e8b6c3423b32e43672f3a76cb373a0fe63463a558f10c264c1fb\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.7\",\n        \"version-display\": \"8.0.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.7/windowsdesktop-runtime-8.0.7-win-arm64.exe\",\n            \"hash\": \"bfd5a8bdd87d9c010fc9cbd058f071e832b7d515c2550e0ca43b6da23dc5c108f9d8065ad89fa33bc5fab7c814eee7531e07cb58d09a4e69073a880137affe41\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.7/windowsdesktop-runtime-8.0.7-win-arm64.zip\",\n            \"hash\": \"2569af5ddd639dae21a132db89fab22e1346261f477d47980f6a4f876cd0cf8d0533f3c96b9b6b977bb0e85ce9ca50b3feda486d88ae4a333b562ab7f8ec8212\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.7/windowsdesktop-runtime-8.0.7-win-x64.exe\",\n            \"hash\": \"391ca05d7540c58f25047ae07b8c5656829f7fd32f6e88a4e34c5337525f574e5714657e1c4f4f4d48e006087f573f8c03f1fc8eab8c9b9dab4d5ca5c8ea1fd4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.7/windowsdesktop-runtime-8.0.7-win-x64.zip\",\n            \"hash\": \"d26210d317cd108ec08d075fd646d0b6412aa666d53674fe76f988bfe669e1a7cfd6e3332948aa5d0dbd1edfce643713ddfc841bbdc76b3fed72e8393960cfce\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.7/windowsdesktop-runtime-8.0.7-win-x86.exe\",\n            \"hash\": \"5adf46498caa1f4ae10ea6327f5c89f424665e1fc471cc8ca18c43779058a37aa5441ce89f82d9b2a5a4b877ab7f448fb5c48193e628eb038956f82d71880942\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.7/windowsdesktop-runtime-8.0.7-win-x86.zip\",\n            \"hash\": \"14908d8e3b67ad7df164e4c2e68c31e02d982b345c025a32595d052dba6d1220becde6d4c8060a521603c9e8cca806bebf0e8e7dfe8cbf8a153597de12efc5e5\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-06-11\",\n      \"release-version\": \"8.0.6\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-20672\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-20672\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.6/8.0.6.md\",\n      \"runtime\": {\n        \"version\": \"8.0.6\",\n        \"version-display\": \"8.0.6\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-linux-arm.tar.gz\",\n            \"hash\": \"f50a3acef2d10282a2a236c4eed6f8a6e02b929123c297e3a2cd52deb442a7aa9571ea8529fdf6fdc5b140a076f0e69cfd8358cedaf399ec443441a9c6389817\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-linux-arm64.tar.gz\",\n            \"hash\": \"428c5a81938273c5e63b04858dbf2f4e82c9bcfa3bd33f954081238be2fb52aadce99296698eabac72e4be55c61e6c1ff06d2d8d1fd5d6a2d0c7a2917cd50739\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"1ab5c0ced0444f557547266e80dc50ce2778ea24883fbbaead063f659c2fbbeb9e52f6c92257b1b00c77a743df76effef4d7efd34736acb0e44f5914e75f5d7d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dc8383bf283e76a2fcf22bbc53eab10faa6dee72aa6ff542427e1a1fdf14c4071f1b3016d895984f15c751707e2e05791c1522f361f3389ba6068c235550e484\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"db25afb6603cfd1cafafb3856ea59205b350b263441928c7010372dc1ee813f03d9ba01186468c95402cc09c49367f129e84f8e30b9ebb4a27f5ed66bb573cc1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-linux-x64.tar.gz\",\n            \"hash\": \"c0c5e93d4e68e2075c4c63336dc74246efb704ac9663411351efdefc4cc7da5a7750f44b8a23aebe959bb4308575bead443a41b2524ae03b29ac41929d27e0e0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-osx-arm64.pkg\",\n            \"hash\": \"93eab830c568e8aabcdee81a88b4199e9cbb6a286631ccc4e041d2b7703a6c8e9a80896f01714e2cc6ae499ef4dc467040dced680db5cfe0ecb6b8f63ec0c603\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-osx-arm64.tar.gz\",\n            \"hash\": \"21ae6420914e45be9fe17bfb0c89948eead27756dedb13fc2c6b9b08d78aee80daa2b8cda358268c819f00ba7ca33ed75e21bed387045b3a62160fea159eaa3c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-osx-x64.pkg\",\n            \"hash\": \"fb427c00f96458a6b6822974c72178639d82ab9f2111d0a8d1493a58353e8d95dce41b08cff7bb4b91b87a72c31b21f9801692838194de4e30feffaa97b3ab73\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-osx-x64.tar.gz\",\n            \"hash\": \"44c0ad9fc613975fa0c12b12b91ff8cd8ba0be5e8ed59510e7a5ab22e55267a468b321ce34515daf070ffc8d557c09d7ea3ed3c3407887f706553b5d378e3232\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-win-arm64.exe\",\n            \"hash\": \"c78c72a8024fb2d686bcaecea673f69b66834c81011be4505a2964e367b15310c5a96466b9baaa4adefe1766d8325b4686b3c1d3175b32e0ddeed4da12052dbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-win-arm64.zip\",\n            \"hash\": \"e712bdf4127ab573ad3c7610f61438ee3abc7a20a6a84d584ef2675c4a3762ea2fb6164852a19df9c86eef69246b8d80fa88477a9cec46218cdb826ec26e9388\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-win-x64.exe\",\n            \"hash\": \"b3456b1d2b8b9b4269234c0fcd9d154109ec4cae623149f6d3d104ae43d08ef247c1c6a7e0117c0c7dd3db8ae17c999c637edaa99156d99c270b1b41782b4273\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-win-x64.zip\",\n            \"hash\": \"2c0407df76878fe518105e132e5435f7f3ac42415fecf099e1a056ef4c068ed9d4e3bcfb5fe49b6c138cfe8b77db609bc6af28be5f11b5beca9eea7c1092ee51\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-win-x86.exe\",\n            \"hash\": \"ab9bad248e97dbe87581dd8ecb0db22b3972de60fbde596f36ce6ffc7d5270457f9b7f6b7328ade901fd7234482c6d5907f2450a30699fef2cfae8d9ccfe1a9e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.6/dotnet-runtime-8.0.6-win-x86.zip\",\n            \"hash\": \"4801ea1f67811ee368d78e03447cf972ba71e4d02818d5ed019ce99a241498eb4d242ceb520744141d6c3047bacb80c64be5b0f9a64f339087bce76e83a0b444\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.302\",\n        \"version-display\": \"8.0.302\",\n        \"runtime-version\": \"8.0.6\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-arm.tar.gz\",\n            \"hash\": \"2758d4844986794b34bcb34f24a153cee47d73fb787702dc7b6727e8dbe1e8c1c9e6bb350bf990c974be46821bcbf85e116ff2007727e2c3dcfa010c6f4cd3e0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-arm64.tar.gz\",\n            \"hash\": \"a6432f93056d74a7dd666f0deda80c96e6dd6a5e6291f71a0128846df9dee5aa0016fc3bd39f34ce5a859bb82ea4e4302790a78ffc2d05216f07f9bf94440c40\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-musl-arm.tar.gz\",\n            \"hash\": \"ad01cf664b42e85bfaa1f8cd13b159266b5b332e4b9c54b8f01e0d08da85c151437be30e142661b38e90b5896c17db30e086c78c47d1f3bb6b57c17e52c1483b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bc504f76a5eb984373f96520c3ae0d439da9778bc4ba39455f89b809e203543ca164f3c27523b84245a5223ae7eed64931ea78a136041eecb1d1a226cd60471b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-musl-x64.tar.gz\",\n            \"hash\": \"8b5c2f13162ab667c84b371c5a9826173872f2485f806826b9df252537ca77c354b32cc58532e497fdf619f666413b1627e84d18bad616165b5454a8e2d110d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-x64.tar.gz\",\n            \"hash\": \"43d0ea1df12c15a0e47560d2a84857ab50eb04ac693ab41413c04c591719101c4c8165e052a42a66719c67bd07ac299ca47edbb4944a2901df765042e56b316f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-osx-arm64.pkg\",\n            \"hash\": \"39019856e704be3acf9359f3f90aa925f6283aa13555b97fff43cea4553e5a7c7d04addd56d25f4d3e60c5b86b8f388c5b52b9dda4ca47b38583ccc48d34c34e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-osx-arm64.tar.gz\",\n            \"hash\": \"e3589d4da75b9fa4b84c9e6e23cdc97796d59dc27efe3c25e5dffd1fa074f770876eda7087d26eb221369355dcce89c7d7724426ee24269295ca1d4e6353bd7f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-osx-x64.pkg\",\n            \"hash\": \"c2ea26ea51797e00a809e44902437ede2231e5a84a3900994aecd3de3e014abd9b8054c766ffedf2c9fbff4991fcd63490a3c8527d7afc27fc7be0dd417c229d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-osx-x64.tar.gz\",\n            \"hash\": \"028f784cffe5289bd324b1804e0b49694207a124e00309bc8f13568ebfd6ae9bbb7db52ddfaaf3a99886b568b9ce9668f74aa67792fe453f1ebeeea30ec1e984\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-arm64.exe\",\n            \"hash\": \"e366bac665617c305c2646d621d00fa3e11b902c5ffe98eb7b292c35e3bc9d740f5b171a1cad3617262add29981c6d97a39ab052074dd70475d5093a76d8964b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-arm64.zip\",\n            \"hash\": \"52afbfe900245431cf3461faac1343220066a010c8187a5276536f29774d87f6c3c529064ef56b1316f2f27c5e465a294ba042c3a44bfbcfce6cdc0ba6fc69e3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-x64.exe\",\n            \"hash\": \"ade97369615e40e6704fa8af0d24fba1d784d5bffa2af27b0c9b29273a426b9fff33fae8b72172e95cb15fce4d2188f88486edc21d75b9f9e33e81b1eed3dba3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-x64.zip\",\n            \"hash\": \"922b60ec1730d6a4fc37b9d769646d1782a1cf0293846cb4e1991a61cab4892f5c792a88df471e65b82df512d6f3c8341cce650d5260d0fb64e3c6b620efe5c4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-x86.exe\",\n            \"hash\": \"5a6534f1906c963293e8e7ffbc7b906cb66adda402f44525f3e32aa7c4d64c6fd89c8fcfd37eb1da39500d0cf3890f338bd56314072530d82c8b55a863066657\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-x86.zip\",\n            \"hash\": \"56d435d933d089fe993e5d40388ece8f139b4e19b3aefce939cfcdba39796452326b43a53241b6d9613d1561b87685669a5a965cf08d3bf647d6edaf90997494\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.302\",\n          \"version-display\": \"8.0.302\",\n          \"runtime-version\": \"8.0.6\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-arm.tar.gz\",\n              \"hash\": \"2758d4844986794b34bcb34f24a153cee47d73fb787702dc7b6727e8dbe1e8c1c9e6bb350bf990c974be46821bcbf85e116ff2007727e2c3dcfa010c6f4cd3e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-arm64.tar.gz\",\n              \"hash\": \"a6432f93056d74a7dd666f0deda80c96e6dd6a5e6291f71a0128846df9dee5aa0016fc3bd39f34ce5a859bb82ea4e4302790a78ffc2d05216f07f9bf94440c40\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-musl-arm.tar.gz\",\n              \"hash\": \"ad01cf664b42e85bfaa1f8cd13b159266b5b332e4b9c54b8f01e0d08da85c151437be30e142661b38e90b5896c17db30e086c78c47d1f3bb6b57c17e52c1483b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bc504f76a5eb984373f96520c3ae0d439da9778bc4ba39455f89b809e203543ca164f3c27523b84245a5223ae7eed64931ea78a136041eecb1d1a226cd60471b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-musl-x64.tar.gz\",\n              \"hash\": \"8b5c2f13162ab667c84b371c5a9826173872f2485f806826b9df252537ca77c354b32cc58532e497fdf619f666413b1627e84d18bad616165b5454a8e2d110d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-linux-x64.tar.gz\",\n              \"hash\": \"43d0ea1df12c15a0e47560d2a84857ab50eb04ac693ab41413c04c591719101c4c8165e052a42a66719c67bd07ac299ca47edbb4944a2901df765042e56b316f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-osx-arm64.pkg\",\n              \"hash\": \"39019856e704be3acf9359f3f90aa925f6283aa13555b97fff43cea4553e5a7c7d04addd56d25f4d3e60c5b86b8f388c5b52b9dda4ca47b38583ccc48d34c34e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-osx-arm64.tar.gz\",\n              \"hash\": \"e3589d4da75b9fa4b84c9e6e23cdc97796d59dc27efe3c25e5dffd1fa074f770876eda7087d26eb221369355dcce89c7d7724426ee24269295ca1d4e6353bd7f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-osx-x64.pkg\",\n              \"hash\": \"c2ea26ea51797e00a809e44902437ede2231e5a84a3900994aecd3de3e014abd9b8054c766ffedf2c9fbff4991fcd63490a3c8527d7afc27fc7be0dd417c229d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-osx-x64.tar.gz\",\n              \"hash\": \"028f784cffe5289bd324b1804e0b49694207a124e00309bc8f13568ebfd6ae9bbb7db52ddfaaf3a99886b568b9ce9668f74aa67792fe453f1ebeeea30ec1e984\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-arm64.exe\",\n              \"hash\": \"e366bac665617c305c2646d621d00fa3e11b902c5ffe98eb7b292c35e3bc9d740f5b171a1cad3617262add29981c6d97a39ab052074dd70475d5093a76d8964b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-arm64.zip\",\n              \"hash\": \"52afbfe900245431cf3461faac1343220066a010c8187a5276536f29774d87f6c3c529064ef56b1316f2f27c5e465a294ba042c3a44bfbcfce6cdc0ba6fc69e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-x64.exe\",\n              \"hash\": \"ade97369615e40e6704fa8af0d24fba1d784d5bffa2af27b0c9b29273a426b9fff33fae8b72172e95cb15fce4d2188f88486edc21d75b9f9e33e81b1eed3dba3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-x64.zip\",\n              \"hash\": \"922b60ec1730d6a4fc37b9d769646d1782a1cf0293846cb4e1991a61cab4892f5c792a88df471e65b82df512d6f3c8341cce650d5260d0fb64e3c6b620efe5c4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-x86.exe\",\n              \"hash\": \"5a6534f1906c963293e8e7ffbc7b906cb66adda402f44525f3e32aa7c4d64c6fd89c8fcfd37eb1da39500d0cf3890f338bd56314072530d82c8b55a863066657\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.302/dotnet-sdk-8.0.302-win-x86.zip\",\n              \"hash\": \"56d435d933d089fe993e5d40388ece8f139b4e19b3aefce939cfcdba39796452326b43a53241b6d9613d1561b87685669a5a965cf08d3bf647d6edaf90997494\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.301\",\n          \"version-display\": \"8.0.301\",\n          \"runtime-version\": \"8.0.6\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-linux-arm.tar.gz\",\n              \"hash\": \"9a44abe4ab6c6a8b8b8c599b140722098e4c710fb86d3ff387402ce98fc5bdf2e8271558b2de0822b5ef73c8781d5fae219d69411697b3cd59ccfc0283286a69\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-linux-arm64.tar.gz\",\n              \"hash\": \"cb904a625d5e4ef4db995225d6705b84201dc7d7d09a0b1669baccc86e05419472719025036dd78983b21850f7663d159ae41926364d1d3ca0eab62862f75d29\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-linux-musl-arm.tar.gz\",\n              \"hash\": \"19c32bf5cc14452cd0eaa40eceb0f5d63730c80ee9045cd9ee9057bb78b3add430b7337c2e2ddc05902777ba6517f879c10572c32da0ce21877ce1d9523a753b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-linux-musl-arm64.tar.gz\",\n              \"hash\": \"646716f924ab20826a3520a2f75fa0e188f2306b8b8a1695f15834a14688dfd9c871909401810aaa387abb2eb9397414b21ac3b6b0ce1f3458dc96fb84c951bb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-linux-musl-x64.tar.gz\",\n              \"hash\": \"25e11e1b658e89121650ac5ec2b21d0cda42442d807dc3fd32b79f2d818ace9ed505f0e95994ed6edac7392c62dc094a056ea43d8c054a190cb3fe395fe802cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-linux-x64.tar.gz\",\n              \"hash\": \"6e2e1ad5fe3f00e6974ad3eac9c5b74cd09521f19e06eb9aff45a44d6c55e4a2c1cd489364735215d2ea53cec2a7d45892a5ede344a8421be9ad15872c3496a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-osx-arm64.pkg\",\n              \"hash\": \"40f5f59f166627f01d2359a6502f101f77e8ccfeee2aa69912d0e70860873d746af38b77759a8d256c5fc6fb247ea93bbc56c0c4a9a006201848966f8cdcbb0f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-osx-arm64.tar.gz\",\n              \"hash\": \"8d56980b6a6ffd78618a6e9833126d7e67052ca6041bd5f167a32e277aac7094a5cd37b9e7e145d5c9b74da95561535189a077d074ddb0fe710a76c2a2c9b1eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-osx-x64.pkg\",\n              \"hash\": \"b699f9e1a3f7da86fc99b46e4a0a66e7ec8c65b522435204cf08e941512b8d81f08aafd6d6afea39af0be01454df836d54aa804cb721231c7795838eb1668e81\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-osx-x64.tar.gz\",\n              \"hash\": \"5d91fbc584f32f4d48dee303c7eb16b38b2e2fab9549bd54293bac28508a6d53f93782ff102266010f8cd8c15c6436a807a7e6efede2e1051fe206957ba73071\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-win-arm64.exe\",\n              \"hash\": \"1fc51f6f7058ae4af975b4d6236157a28b3e376687b8e42f1ee489258ce5266f53f93e1a0fe84fdef73a3700f76db460649109e9a373dbda55ebc6ab5f89b80e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-win-arm64.zip\",\n              \"hash\": \"bdfdbb6304c7a768293612f74c880555e281a0631d0b0a3aa5f27709694a5f8319415aad960c821c74919607a7341cb96fcb05b97902d99c66a4651ebd570a15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-win-x64.exe\",\n              \"hash\": \"4f6fbed3d79e8f8e782198c92d5a3454e817efd03c656b9cb2e1a11d67627070bd14eb78d7618efed29f5c958649d4e93ea6b6469c2e06f07110882fb63f39c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-win-x64.zip\",\n              \"hash\": \"cf00d4746cb063994e1a7a490d1ca29bb78e9c78505a733a4693353febc14e0cfb26775cab57baa7612b74be08ef91224b0d06cfa4eef0b9bf15b2843266a948\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-win-x86.exe\",\n              \"hash\": \"90941838a7e98b088ba3be19b953e028480ccf417c463a1c3912a77ba814dd67aecebf2c9f9616298f46c50955d75b0645bc0017e7bcfc10a62bedffbb3aec3a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.301/dotnet-sdk-8.0.301-win-x86.zip\",\n              \"hash\": \"43545b42d4daee141e1ffb6895b796c744b5b47e790b7b6e5b303cfc6e484227dc6dbaa2c452f111d1dbb883c5c1ca77020b804dfabd3167ba7e2b6eef7a639f\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.206\",\n          \"version-display\": \"8.0.206\",\n          \"runtime-version\": \"8.0.6\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-linux-arm.tar.gz\",\n              \"hash\": \"97b8c1fc04d6d9e71777def4ac9e1989b5e03d481df31c924a1101e914ae2bfc38b7e47e14b4647ed384758a76854786b0acadcc35b9feddeafa6f55e7534e03\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-linux-arm64.tar.gz\",\n              \"hash\": \"eb0489785dc5bf824bc3fc1014815ebd371fbc73eb02b63e5a1650bcadb158cab7e909904889f6e198a180a1742976351208a57796ef38a4205c52fb945b7d09\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-linux-musl-arm.tar.gz\",\n              \"hash\": \"14ffc6566dc4da278bb0d5a25dd676c88b1c9bfb6d728d9739237b41d80e85b2797d713482c7db2b061296e7634ff7146a3b9b031cd7858d2f995cde710f20e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1de4f0ee791fe433b1e230c6621c8773921328fdc8fcdbe154e804fcc938374a950ed2c6f60e5cf4ffb26e03b346810d6b661bc544ac33ae2e249a98dacd421f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-linux-musl-x64.tar.gz\",\n              \"hash\": \"9213697221d4ce977a80099f1df68a0e785729910ed3f2a2e44fda0e69ca9c9e08e70642b9975732695fbc5745f3dc862f4ba7cd79088858982e8ec0301189b8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-linux-x64.tar.gz\",\n              \"hash\": \"d03cbb5ea44a6f4957d7c1fa0f7c19e3df2efcbf569b071082e37ac86776af0729540c3bbddc44668ae2eedcfcb4b098883bb560d26418f1583a558d60c99ef5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-osx-arm64.pkg\",\n              \"hash\": \"bc088f424e604b3a2b21a1d279ed79aeb22c8dc1bf3161c0c7abbe324684001fc47703b7a94953fb87295875b73927d921376ba51b6d02dfba9934f4c8e007e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-osx-arm64.tar.gz\",\n              \"hash\": \"c4a17c17b02d9559e0029328179d22617321e439e9360175f25385d60789f91582a4024ce41690439d85852e4c85f0d0ae20fe818c0f4acf0d7d48ffac2d2b5c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-osx-x64.pkg\",\n              \"hash\": \"cd1fc1e745d4b51725d71f1e451409931cbc750effc425a5b7ee7156b4f5930a5673fec1153f8b8177e177ecd6fc17375e49d64dd2debcc5f5922e76147f86c2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-osx-x64.tar.gz\",\n              \"hash\": \"d7742a0b00c4df835639eeb18f2ae4888ac33d7d7c25d097a8868c5172c878d7df8c5bbd54de9b34f877f07a2dc6c748ea510f783e1842058e8cfd0ad2cda83f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-win-arm64.exe\",\n              \"hash\": \"7b7663ac4970a987b56187fb7ae0cb8ed1d2e1c35b06bb0bd1e6fa2e57a2926e3e0ab4b01bffb9bd6fc3ae2baafa8d0aef9b54f9fc8a901cef695b683597708d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-win-arm64.zip\",\n              \"hash\": \"570b597c4d232b6c605f7cd89729d3b0a75071a867b8bb31406830b37dccb95f8e15284c4acbecf3a288484136af5844f16c7aaccd7a158b27502695e3231cc1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-win-x64.exe\",\n              \"hash\": \"4a28b10b6c73b02e36ed3805009aee54f14d55da7e0485e906ce8291397635066a6ef087491dcf898df1715a439cd3cbd2116ed6210d3b50dd9a5ae0a7f2cd08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-win-x64.zip\",\n              \"hash\": \"6d194e3e897074198557fd3f917b60953c82d192497eb0ceb7fd1fad37357c30aee84d1a798f896355c33871c8fbcc621b5a95192dcf701139a9f5f58b0f1b0b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-win-x86.exe\",\n              \"hash\": \"4a23345a1694c8a9e90873bf5f6357c745fc667d0be5dc20692cb2213a17c8d5fafd0dda6a1662bb66efcff5b13af83da1e83068bb008debefcee152de8b3d88\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.206/dotnet-sdk-8.0.206-win-x86.zip\",\n              \"hash\": \"de9e053901f97b310422875a2c5d03685718a74b7ebe7fb199809cb5993b68dae6272510d806844d8ffc388401241fc9f628653a300e6c87d25666c8b5002fc6\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.106\",\n          \"version-display\": \"8.0.106\",\n          \"runtime-version\": \"8.0.6\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-linux-arm.tar.gz\",\n              \"hash\": \"ebedfc205f9301890c78c4176d1a6f910890cf224e7ac34fd69f798d663550e36c3a2a057111304aaeecea31bfd496007ebbae4a51f33cd674588f42d8b3df9a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-linux-arm64.tar.gz\",\n              \"hash\": \"e8f735d20d79b20d24ce5b2f7c25c60604cb6b694b6572488c654cbf14a4d99c269f64f4ca23ab78aefaedf14f35a0ae1f33adf6afac5556e2ebd22ec73e04eb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-linux-musl-arm.tar.gz\",\n              \"hash\": \"0d149ee7d5e3557d631ff96fff06e7bbf01cc80041d9a378cd8633f5304ba8351b3d25f7b889d68ae245329fd9cd86d9475cac5ca3a157e5fd98c18420857edf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-linux-musl-arm64.tar.gz\",\n              \"hash\": \"605fd1210a69fe1e933b64cb0377bda7e7fcfab17854069e252d444431260292d1470dbe645acc68e7ebec52985893497bfde9ba25a03794dbff9987437b2b45\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-linux-musl-x64.tar.gz\",\n              \"hash\": \"ac5cbd009cb29624f6a686fe476ed9a6ad290aa22d9a613f2e14f35076f251e3e3ec6b7b1d1760daf5efff5e2d673654770bb9ab0761326a71dc7e190deb63ab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-linux-x64.tar.gz\",\n              \"hash\": \"06eecc146b16eef0654fb4fd17faec06c6dc1b7236acc7e4a33e4b13cbea1d725faeb9eda41a0c12e65ec4c89d6624971429ca223638387c66f1d3e4dcd1407b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-osx-arm64.pkg\",\n              \"hash\": \"78b02895c2ef1151613cf002fb8d91afb17352ca2afb67386ad4c15499bf81ce3160103673458bc5b5ad0de3c80dd6c37e850a93fc613642c4931211b6f9ce23\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-osx-arm64.tar.gz\",\n              \"hash\": \"490c20abc3cf52f76fecf422a6fcc66c98b7500a56986f84e617860a2758f43ddc4b235647837fae69e4c46a9d1ab9177d4bbfe134258797599b69178f6b91f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-osx-x64.pkg\",\n              \"hash\": \"77902c9beb889fb1c1795ed13e4e3c33ad58b7f62c7bb0d27ab9c8ecea96b1cefd9d79aa2c71c2b46dc234c89dc677a46dbd44234d39f8d188a03566bb4518f8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-osx-x64.tar.gz\",\n              \"hash\": \"4e6d45b7b1618bdb528a865d1c89e7ec7750f8a73ae7e805675dd9d7d3974f0b19785e743298f0c468144cd7fe9e20e521f65e9fc081b89d8bd9e187b5783c2c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-win-arm64.exe\",\n              \"hash\": \"9baa1ba45bddd77a17d78a227acb57c4d6cbac2b049d259bd546dcf8a32257a60f529d2fc6524904320be000d2ab1c3af2a63cecbe6f08ef7069cdcef5937080\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-win-arm64.zip\",\n              \"hash\": \"f7eb2414fda36ff08c62412d31a38fc3c8ecdbf7fcc1bc46400e2cb2c3858f257a1618f356f2e8e66e1b718b5d5142600677c00283d8b8ee657792b3de52750b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-win-x64.exe\",\n              \"hash\": \"efd894eaa180f73a9192f250d339ca686853ee5fa39c7ad9b05500740d86414f6d7c7cd44cb051f504f608cc7061b2ea20cf7d142d7a23c022bf087ab5548983\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-win-x64.zip\",\n              \"hash\": \"3232294d0af733659ca8636e48e494a2f52bf6a3fb307cf088ab0cca11c0e59dff1318c11208a700d6a491930b3ec8c373ce8f57516c46dc86e476e1a9cb17f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-win-x86.exe\",\n              \"hash\": \"f17bcc8c1cbe167bce1f61481fd7264496ce81d7f8e997ad62e4f541d6a8e12b430781ee002847ffe7cced1d276633d317cddb4700d8ef6583972a5e5c037ee0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.106/dotnet-sdk-8.0.106-win-x86.zip\",\n              \"hash\": \"d27c0e46c165d611c2765b7ecfa9977cc1395c3ae954cf95b16c2741f152df76b5e9f68b3ca86f2a89d21877308e2ce4986305f829c491c848ddb84942536088\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.6\",\n        \"version-display\": \"8.0.6\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24141.6\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-linux-arm.tar.gz\",\n            \"hash\": \"bc1ee3f85799038e14dc2b28a57ea367b0d837a778add03a23804595156ae333714fa54a13503b173412c082043e6212035fe6238d0914372491e09efb09de62\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-linux-arm64.tar.gz\",\n            \"hash\": \"9ed12847e404a0a4fdd8fca33a9a787c5ac2e6745d23821c7890f731f2f8f5682e7f9166b2764b13b612b08e091c71e13359b68acc11bcf990afdef1d42f6473\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"7b0e39b2f517539f261e4b193e02b991149ab5e520c350fad2463481afde461891b287aeefe642ee6df5fef33df4a639c9f94feceed84ede5980ff3f297dcded\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"80141d73f84c902c645b906fee34bf27d2bfae4d1905f259b0d89ac00887663301dc6774357b86736bb65f068161358a7db677a30a49fa613c5328b65fa48a3e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"bd5fea6fa65dce16cc3e9879cccb4a684253d40fe6c00e610dd513da2bd3a9f89eed4442fc2a660bf1749fe22fea03a0519291f01a10068376507070105a1d0c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-linux-x64.tar.gz\",\n            \"hash\": \"16cd54c431d80710a06037f8ea593e04764a80cbaad75e1db4225fbe3e7fce4c4d279f40757b9811e1c092436d2a1ca3be64c74cb190ebf78418a9865992ad12\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-osx-arm64.tar.gz\",\n            \"hash\": \"85d82e90182375ca21326e3d57be0dc5a39d7e64f1a4005950fe21c720f1d1e1615f64030c950fa7a49f6a104f029b9845648cebeb98d48d892aad3309c583c8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-osx-x64.tar.gz\",\n            \"hash\": \"61786ecd784b83eacfe4dd901bdd55474e52d9da85806b3d52184e8e35a3065b476e574c939f3af491a925bf7f04fdf376c53a25c103a187a7939f4736158297\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-win-arm64.exe\",\n            \"hash\": \"894e98cfdd9cc7f6beb1f68c756eb474f8004a3e4020de9033d93d7d804c1273f0af77008ace9e972d133c461eabaa7a0502ed545f785a80c590c07ec243bb46\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-win-arm64.zip\",\n            \"hash\": \"4ee96bbba7308e672a6087e9f37da462c9fa30ff7288ff5e2c852d0af56a5592d3c947ac4072bb48f35064b63e265f4e3e377117b69b72c8345714ff640c1970\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-win-x64.exe\",\n            \"hash\": \"7bdd420d03e92d8e05a8467649f5a0e64910341e945f3ae6f0ce26dc513b121ce00d4bd8889b043fddd4c6eadffd52a69cd12edb62a661b2b23a886174e4dfc1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-win-x64.zip\",\n            \"hash\": \"64eb92e0fa015de55df849d93b8a0afbfa0573cf5b7d5ebb81499aeb586eb2a82d86eee34c7b5bd555a8f819f92e6e1366d7bf98c2aba26d3d6fe8daf875cd67\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-win-x86.exe\",\n            \"hash\": \"b311bd4ae0a87fbce391005edb1c6b55d4e630e59fa15a7ed510947aaa6bf3ffc2970e833d3a9f9063f5f8af3ffa4cdd5c2da3e0d808990977c0ce6e262f15fa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-8.0.6-win-x86.zip\",\n            \"hash\": \"9e5ae375d1e7e6d58f62419285a8b087053ccbd997a670538fe11122febcc80a318814cec459044964fae78de95af21e188338ddebc5fb1e35addfcf788b5f2a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-composite-8.0.6-linux-arm.tar.gz\",\n            \"hash\": \"f7fccfe2b4bde2317efc4954884d780bb9486a5e55bdbb50dadd65eea59681abbe9fdb9565a5ff13935b21fddeda2b2efb380811dbe0974cb39335e04f94d494\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-composite-8.0.6-linux-arm64.tar.gz\",\n            \"hash\": \"2ac853990b44bc1ebfa7ed31c599150f5c7f43b4a84ab7b7a96312ced78222dda93728d42b94b3be4acf763e6d95702b7d27186b51b56db25d39bb8bc745aeec\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-composite-8.0.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"bb91187b837739a7317a946e459bd2fcbe61f0763a196f867c3cb6b9d967cdf6ef30953b43a9bdcc298545dbc88c7a565d0006113f425e08f8d9fbe296de07e8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-composite-8.0.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1ac399561d4c5056ecf9dd8b36ef64704c7de9e8bf92f3c45c54c2cf1fe794421edf18e663d39643746e4abe3fe9a5376578a2887198b166f49155c0d0ced6b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-composite-8.0.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"8a8336c331327fdb480a27a45825a1d798733d766bf090b0f9af9ba611d91d73a54ca754c5a5654f860eaaccb8cd8708007576f1da35c32f00bca6a9ed7b308f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/aspnetcore-runtime-composite-8.0.6-linux-x64.tar.gz\",\n            \"hash\": \"bffc08fb0ec63251d06cf69c95844d19924b139f0417d1a79f729c856fda89610e03b3ed49844f7dd15401c447137f6daf5b26550269a2c0eb0bff253ab234ec\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.6/dotnet-hosting-8.0.6-win.exe\",\n            \"hash\": \"01c4d06e0bb10e69581b67fba6618f003fdbdd6043bab4c58c47b7f8ac25e52ab7bd3e39404f733821fe6083e2462dbca20b2ff948a7abe8fbb4fd2f26956584\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.6\",\n        \"version-display\": \"8.0.6\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.6/windowsdesktop-runtime-8.0.6-win-arm64.exe\",\n            \"hash\": \"26752fac8a17d9c78968fed741faaf364b17815bad2d74d2ba0cd29444fe2f86ed0f85d8e40744b82155a7763c43ab5f399fad426cd7f17a0a6775b5e8a6ec36\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.6/windowsdesktop-runtime-8.0.6-win-arm64.zip\",\n            \"hash\": \"e24e53c2bf2fff89f66c66211b4da8718d3ba72eee9f361d47ce79e953c95a5f1edb0939b2bddc1ebc3794a7fff4ff0f1673797e75798742aece9f23b63ecc16\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.6/windowsdesktop-runtime-8.0.6-win-x64.exe\",\n            \"hash\": \"91bec94f32609fd194ac47a893cea1466e6ad25a16bbaf39cd6989fa9f09e865ba87669aabfe26cd3c8f2a57296170cc021dc762e238a6c5cb5e843d3df3169f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.6/windowsdesktop-runtime-8.0.6-win-x64.zip\",\n            \"hash\": \"ff7dbe5c53a99b755fb702f24f9a63f7c6fb6d3451cac3f8984632bcd4012072b4a0198535084560ab829271623d31834b7c7e64e051726b1778d9fb6e3070fe\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.6/windowsdesktop-runtime-8.0.6-win-x86.exe\",\n            \"hash\": \"8cd87203979b7ca6c191bb5f46f71ade8f00439a564fbe73caa48c8bc0d33701893fff51d0e1c58fcb9cd83cdc420748fb30f4daa221e7417012d136bbd2310f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.6/windowsdesktop-runtime-8.0.6-win-x86.zip\",\n            \"hash\": \"6628d2a82bb69adc698afa52214c5b456b3b4e8ae6a5d45d6f3bd6e67224349b86531fb9d055180608d47f591c331c13c7586dc5ac41571b834bc37335a9ea51\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-05-14\",\n      \"release-version\": \"8.0.5\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-30045\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-30045\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-30046\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-30046\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.5/8.0.5.md\",\n      \"runtime\": {\n        \"version\": \"8.0.5\",\n        \"version-display\": \"8.0.5\",\n        \"vs-version\": \"17.8.10, 17.9.7\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-linux-arm.tar.gz\",\n            \"hash\": \"84d135e0c18da840f8e5555cf6e8b7d57776ceaccb0aaabeb5c75c54b6b78b3844e09cd9f1ee495caddab52e4b80455423200e23c17cb9ce83bc5df7bd99729e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"cd6c0ac051c3a8b6f3452a5a93600e664e30b9ba14c33948fbbfc21482fe55a8b16268035dd0725c85189d18c83860ea7a7bc96c87d6a4ee6a6083130c5586c3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"e0b38b3280a9ed109140776d14be3c8a66b38f66ea266987ab31ef969a0ce79aa2215c83298c24d31bdb2b77016653ec95d3089d81af4a83abb396aa069ab5f8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"629a3f018c949454e8b0361bf287b7646887844853819e7af0579730a0ea18b9f293dc687ef19ed085c57f758ed0a61083e9de4cd5741d0dd16dfc905ea5f0dc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"b6c1bc44f068558c26d7a0114147c989f48feb5c43a4dbaf7035825477918e2e20a89b2934b47bfa9518e243147436ce58e6dec666e563c6637c582e00085dd0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-linux-x64.tar.gz\",\n            \"hash\": \"3efff49feb2e11cb5ec08dcee4e1e8ad92a4d2516b721a98b55ef2ada231cad0c91fd20b71ab5e340047fc837bd02d143449dd32f4f95288f6f659fa6c790eaa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-osx-arm64.pkg\",\n            \"hash\": \"baefd0f3f7ada4fbd5595d12716bd8cd0c8891e662cabf7106004769fd7dc1af29c9309cea73937b4238e54967d445a46fe78fbdfcd125a69557e10f78aeb319\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-osx-arm64.tar.gz\",\n            \"hash\": \"5401135b8871d85ca6f774958e6a644ef2bf85a88d2358f15c3bdc928b21a700be428efede677d83640085461d000e55a28bfbacdc9f01af0334a6e8b257efbd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-osx-x64.pkg\",\n            \"hash\": \"9ad36d9c9fa33648a9a07dde66173de59dfb1022d8c1a55ed8dbfc1a0187674f9e01189366f495cb217f06d8d130b3d3b60b79c4b7b93e2204d89bcbe08ec615\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-osx-x64.tar.gz\",\n            \"hash\": \"29a8be6dd738d634cc33857dc1f1f6cc2c263177d78eb1c4585c96b5bf568f8f2689f1a30eec728ccb96a2d005049936abbfd44daca1962caf4f6d53325ba42f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-win-arm64.exe\",\n            \"hash\": \"1f37a83a1e9814da1563dd25b0de6943945c0575936c65d4ad64292dd458558f12e58c38eb29644b9e325f80446c25e5f15e60453edeb67f78e22e88871a9bd3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-win-arm64.zip\",\n            \"hash\": \"cfad855d8b3abc734d0f38a211b2eaea1ebca529915a15143055d682869b3e3ab5ff60e80f0630a10a5ceb5f865898f1186ab4bbcd689a170d044004a76817d8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-win-x64.exe\",\n            \"hash\": \"7bc6e21e4e07fb1b679f38538c28b4c5783570b00ac5f47e162c26abe2fb51193551acbc4f0c44de91359368931a04b7b18c4522a822ed0d3bcfca8b6ae376bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-win-x64.zip\",\n            \"hash\": \"5eee093b005e9120dfe32261436bbc626b53e535276da9314929f1c5248a72a9d5af3b639ff5545d9265b28a6136f535a0e46758c8717297ae3edb2ee67c88ab\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-win-x86.exe\",\n            \"hash\": \"ff727bdb5e8eeb97ff2c20c6b45cfc297b4938937fdca5d0ce783f07e4a389000de86601d7faae1a1443cfdfd3754444c684fb804b526ea8bf6a5a2468224c3f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.5/dotnet-runtime-8.0.5-win-x86.zip\",\n            \"hash\": \"a055e4699dcbb17d91afb6ed3c1c9de898a85d6687e19488f13d42c52784138adcc6f2bb18e12dbb6ebc9858ca54a96e7c99d9472c4449e7a42592488935a4ac\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.300\",\n        \"version-display\": \"8.0.300\",\n        \"runtime-version\": \"8.0.5\",\n        \"vs-version\": \"17.10.0\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-arm.tar.gz\",\n            \"hash\": \"13fd4818d3cb64dcdbf23748d0e8afcdfb981c1d6f0a8721d41c3794c363dae615612838e0db1050fd8b218ccf8e27a2c97e5a0da61da0d384c008b08c1f066b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-arm64.tar.gz\",\n            \"hash\": \"b38d34afe6d92f63a0e5b6fc37c88fbb5a1c73fba7d8df41d25432b64b2fbc31017198a02209b3d4343d384bc352834b9ee68306307a3f0fe486591dd2f70efd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-musl-arm.tar.gz\",\n            \"hash\": \"768bc41911895272ed8b8629d3ae36ccedb74c9982b94c8bee6575870cdce6bd9ffab26751f48cedd4b3c7921b3fb6d3416364bc4102f61983dd0b18e9aca104\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fde1657c8e6be40dd7b140d8253dfb0323826797cdc3ae2217b689598262ac51bee409388f2b21cb499daf0db713ed27034baac92f43c0b529a68c2f8d8ad26d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-musl-x64.tar.gz\",\n            \"hash\": \"87250809f75cbe408ccac9901a213afc54805526a613fbf88fd02a165c56cab5f770730de03d98f6e798e9013e6b98e8b8e31279e251a3c31c2976b89e643fd1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-x64.tar.gz\",\n            \"hash\": \"6ba966801ad3869275469b0f7ee7af0b88b659d018a37b241962335bd95ef6e55cb6741ab77d96a93c68174d30d0c270b48b3cda21b493270b0d6038ee3fe79e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-osx-arm64.pkg\",\n            \"hash\": \"b0e997cdeb9ac320e4ddd57537c4212c89084053544c04db9b18c0aa724260ad6c351b4c4eb3f610667746b6977ac03669df437541bc7c0192a1a2b65781fbfd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-osx-arm64.tar.gz\",\n            \"hash\": \"98a9b56b2795bf6faa848062ed34d917b187eda220db50c8e73de1bfa37244dd68d8c3cbc598b5fc5be4620a2b92724f95d7c13299f8b873fdefe880890a1bbb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-osx-x64.pkg\",\n            \"hash\": \"c82c24dd16c3b87d88dcb2cdb5a63acbf44273902691b29c997798fdc06e281062d91b4b90b1430e35c88c5fc050cf91d29f69a4f40da43f5993f3b47267119b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-osx-x64.tar.gz\",\n            \"hash\": \"12ed6044dad31c65d6894d7e1cf861a6c330c23761fed90ca2fe0c7d2700433fb8b8541c35bb235b044762f5fd33496cd6e92dbd70deeeb7b9e59423d9d49f5e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-arm64.exe\",\n            \"hash\": \"fa4ea87500305183866d27d096c4fa6aa117502f06eae57f963473464887198cb5e5a630f1e0cc55382c48ebc7df93b7d5c94e6180683ef66dfc683174d827ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-arm64.zip\",\n            \"hash\": \"46a3909a070203a499e924c790fc42cbc6c4faf1b83e327ae746306478fb3b2d9eaae5c6492344803ca55c1858677cb7b16b1c6347847e4f680d0ef18b0b4e16\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-x64.exe\",\n            \"hash\": \"8f0c9a65095750bd5356871d7fbb123a439e92eb10f4bdb1af894d1e7c3ad087d1bf7706def0bd39cda55f8251f45d245122dd2b19c28fb39e260e9ded735a6c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-x64.zip\",\n            \"hash\": \"c287cbd4084d381f715029be2878c2d9a326b47140d3636b1356c01ce28d887550d9629ca4bdb4029d2985955c48a22334bba8e628218e13ec0ae7d0a2c3407b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-x86.exe\",\n            \"hash\": \"55bb2077df64c71f06e60512c55a001c2013e05b92d7d93624b888988045638a33639a8b0708a1ae87ed9f17895ccbb87f3fe7bd719c3089f463683c459a3786\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-x86.zip\",\n            \"hash\": \"d9956693e6d583b63fa5bd3f2bd570140c993c1c2ad8475c8e6cd43726fe291fbdb96e0177a7d88f511e4a3b75ca35bc2f531c562755f4b36bb06fc1b6579e68\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.300\",\n          \"version-display\": \"8.0.300\",\n          \"runtime-version\": \"8.0.5\",\n          \"vs-version\": \"17.10.0\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-arm.tar.gz\",\n              \"hash\": \"13fd4818d3cb64dcdbf23748d0e8afcdfb981c1d6f0a8721d41c3794c363dae615612838e0db1050fd8b218ccf8e27a2c97e5a0da61da0d384c008b08c1f066b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-arm64.tar.gz\",\n              \"hash\": \"b38d34afe6d92f63a0e5b6fc37c88fbb5a1c73fba7d8df41d25432b64b2fbc31017198a02209b3d4343d384bc352834b9ee68306307a3f0fe486591dd2f70efd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-musl-arm.tar.gz\",\n              \"hash\": \"768bc41911895272ed8b8629d3ae36ccedb74c9982b94c8bee6575870cdce6bd9ffab26751f48cedd4b3c7921b3fb6d3416364bc4102f61983dd0b18e9aca104\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-musl-arm64.tar.gz\",\n              \"hash\": \"fde1657c8e6be40dd7b140d8253dfb0323826797cdc3ae2217b689598262ac51bee409388f2b21cb499daf0db713ed27034baac92f43c0b529a68c2f8d8ad26d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-musl-x64.tar.gz\",\n              \"hash\": \"87250809f75cbe408ccac9901a213afc54805526a613fbf88fd02a165c56cab5f770730de03d98f6e798e9013e6b98e8b8e31279e251a3c31c2976b89e643fd1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-linux-x64.tar.gz\",\n              \"hash\": \"6ba966801ad3869275469b0f7ee7af0b88b659d018a37b241962335bd95ef6e55cb6741ab77d96a93c68174d30d0c270b48b3cda21b493270b0d6038ee3fe79e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-osx-arm64.pkg\",\n              \"hash\": \"b0e997cdeb9ac320e4ddd57537c4212c89084053544c04db9b18c0aa724260ad6c351b4c4eb3f610667746b6977ac03669df437541bc7c0192a1a2b65781fbfd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-osx-arm64.tar.gz\",\n              \"hash\": \"98a9b56b2795bf6faa848062ed34d917b187eda220db50c8e73de1bfa37244dd68d8c3cbc598b5fc5be4620a2b92724f95d7c13299f8b873fdefe880890a1bbb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-osx-x64.pkg\",\n              \"hash\": \"c82c24dd16c3b87d88dcb2cdb5a63acbf44273902691b29c997798fdc06e281062d91b4b90b1430e35c88c5fc050cf91d29f69a4f40da43f5993f3b47267119b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-osx-x64.tar.gz\",\n              \"hash\": \"12ed6044dad31c65d6894d7e1cf861a6c330c23761fed90ca2fe0c7d2700433fb8b8541c35bb235b044762f5fd33496cd6e92dbd70deeeb7b9e59423d9d49f5e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-arm64.exe\",\n              \"hash\": \"fa4ea87500305183866d27d096c4fa6aa117502f06eae57f963473464887198cb5e5a630f1e0cc55382c48ebc7df93b7d5c94e6180683ef66dfc683174d827ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-arm64.zip\",\n              \"hash\": \"46a3909a070203a499e924c790fc42cbc6c4faf1b83e327ae746306478fb3b2d9eaae5c6492344803ca55c1858677cb7b16b1c6347847e4f680d0ef18b0b4e16\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-x64.exe\",\n              \"hash\": \"8f0c9a65095750bd5356871d7fbb123a439e92eb10f4bdb1af894d1e7c3ad087d1bf7706def0bd39cda55f8251f45d245122dd2b19c28fb39e260e9ded735a6c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-x64.zip\",\n              \"hash\": \"c287cbd4084d381f715029be2878c2d9a326b47140d3636b1356c01ce28d887550d9629ca4bdb4029d2985955c48a22334bba8e628218e13ec0ae7d0a2c3407b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-x86.exe\",\n              \"hash\": \"55bb2077df64c71f06e60512c55a001c2013e05b92d7d93624b888988045638a33639a8b0708a1ae87ed9f17895ccbb87f3fe7bd719c3089f463683c459a3786\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.300/dotnet-sdk-8.0.300-win-x86.zip\",\n              \"hash\": \"d9956693e6d583b63fa5bd3f2bd570140c993c1c2ad8475c8e6cd43726fe291fbdb96e0177a7d88f511e4a3b75ca35bc2f531c562755f4b36bb06fc1b6579e68\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.205\",\n          \"version-display\": \"8.0.205\",\n          \"runtime-version\": \"8.0.5\",\n          \"vs-version\": \"17.9.7\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-linux-arm.tar.gz\",\n              \"hash\": \"6021c246d4b57adfd27b6b56548e27b59af64e35f585612cffc3298ba4a054ef09c6f78c7906bf541c48d2f7d5699025af6c2e77900acccb46fc86833f0704b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-linux-arm64.tar.gz\",\n              \"hash\": \"092ce55cc45ab5109c9d991382e7ed7f40bc0281e94766738dbf179d618f03dbf8ba38e43c418a3d5cac0377afc5e5b82a969e36832e386b851f3679a2e988e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-linux-musl-arm.tar.gz\",\n              \"hash\": \"75e7ac7aa045f9eac46a969ff1afd2304d043cd7e0f8917118153807e0461dd0989b03bbc5a3d47f92eebce5961b8a8ffa10db8726ae3d40c17996d4338d54e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f4c33fc97e14204c54661b64b3339f085fa788b4c65233c5cce1315994b2ade4cde244d3e9968f6d15c27bcda766d1484a691d0303d512e5ad151ac5ea41c0dd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-linux-musl-x64.tar.gz\",\n              \"hash\": \"77cdef96aa55ba41a4e254a932f7dc6cf4abff271ae54b2d9b4fcb0ed9e53196380e02b065c0a5ccc5d8e9eccfdc0d208d661e823590130075fbb3785bef7bae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-linux-x64.tar.gz\",\n              \"hash\": \"2ec774350ca3192e1c68c9c8ee62d0c089f9bd03fe1aaebb118fbe7625f2e0960f5dbd800ea3f974cc7ac7fba32830f41faec9ee1bae736497ba05d9c7addb59\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-osx-arm64.pkg\",\n              \"hash\": \"b1bd559fcb39458c921a703961d4f4976ddd28eba5329423590379fdf35d1d54fb354231b8fc704b9febb800288501e615c17f024d7e0aa8b5e6dc92e6641530\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-osx-arm64.tar.gz\",\n              \"hash\": \"2792e9b0cd4fd69373022c5e4c17bd128dd8e31db773f51b39c8696f37e72af8c4b67d0c017ee068587c0f664efa8bbd9a0bc4472b072a7897d2ff4ef8fafa58\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-osx-x64.pkg\",\n              \"hash\": \"09bc19b2a418cb523aa368329ee2656e4c717f106b92fb866d214c054b9c7f29ecb120e25029d826f481e35c560ad0c04f90f88e7273c1eb073eb7480b7bc4be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-osx-x64.tar.gz\",\n              \"hash\": \"15f410ae81027f4537a03a00114873fe9bacf799d5ddc24663fefc3b1d977d237269fef48c80334bcaf7230495f304bb123f310692f880fea8cb8e0072abb4a3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-win-arm64.exe\",\n              \"hash\": \"7b20ad0671ad7b3368450f8e3732c2d776a88f8e0034a5c7f41d2ee8bcce956eb5479367f785b3ff092bafd30351581c2c14b6619ef1beef3c29a67201fcd0df\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-win-arm64.zip\",\n              \"hash\": \"6ffd918887328ffd8784fc0500b9ef4c0cd0ed99a277b3fc2e35de32bff375e1468e5b33d8499faa2a7819ae495dac4dd4f31639a165aee987d5bc42f6d020af\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-win-x64.exe\",\n              \"hash\": \"52e5efe5e461d655e98d0d0de84df8bb7cc483972155425c86a4441f625dca482cca1ff0a50d4654bd9039cfd4a32733278ee3a62c9bf641c899addb0aa2dee1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-win-x64.zip\",\n              \"hash\": \"ef286574b5006ddbf96593fbb907854a3e11d8a899c9852507411be277eaca4ad1cc161b02494f4fbcd2fa67572c89fe5b5d2ac80ca854051c61685a15c32740\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-win-x86.exe\",\n              \"hash\": \"ed8b099760c8862adc45a6b3292a0b59f2e71c2287203732f1c49bac7d5348815c10c1c4612575ce6c08e283ed4c07b1e2dea01687775bb30fbd84182caebbf6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.205/dotnet-sdk-8.0.205-win-x86.zip\",\n              \"hash\": \"65df88641c7731184f3a60bcfcb7c32fd2abec961c099374353fcd6486e6f9852436972c1c88ad21387d28ec690a0161d327b1b3a2f33793b426cc3763c19ad5\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.105\",\n          \"version-display\": \"8.0.105\",\n          \"runtime-version\": \"8.0.5\",\n          \"vs-version\": \"17.8.10\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-linux-arm.tar.gz\",\n              \"hash\": \"6aa5adc487b2f5e887a7c91ea9a6d1f948ea5ca6520e93826610c5ea58827f37421bd0ef09ebc0d9e2d3108dcb41aedb51188630df5e1da199e0ab2ee0d6acf8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-linux-arm64.tar.gz\",\n              \"hash\": \"8f04afa385676d2ec879ad22734a4c869d931ba4bc7507d0aa5889561d0230e382598057bdf75792048b28bd9a1c8eb187e80691f603309a46d6c50d71373381\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-linux-musl-arm.tar.gz\",\n              \"hash\": \"b898fadd8b4a4e6a6ec2c3d936d20729dd03f912123fe7b8a40bbee609839ad019a6501a21712ad4e9b6c93d6a1ce5f8c9227f0fb5387edb08a0a8bea44d3c31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ea1cbb3fe35447418f552d51a359a4f133754240aeca91fea8e5ed97dcdd9b01a4cbfeb6354ec1a3f71c7fcdf82000c7f9492c42b66fc69caafd023927e6f658\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-linux-musl-x64.tar.gz\",\n              \"hash\": \"d8a8b2ea25b70139a4ac1356c210221243add6956a946fbc24c7195850624a4f25569e22024188dd718b1ff0fadbf775a6df97f8aa5ec2244159adfd81bb14dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-linux-x64.tar.gz\",\n              \"hash\": \"60ff271ee7851ff9ab851f9dc3e3d0abc87ac9b982959abfc8f0a3b58301fb6a0ff7b9f07f8df18668e1e8182c688d0d661bb9cb1771a2d40a0015d02009fce8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-osx-arm64.pkg\",\n              \"hash\": \"04b86271a5bb8c949d553a4e76746cb30f4f62969cbedcf77328ceed48eb8df8b74dfa488562ec101dd0d49331b501e925e71eeedcf307966f9df053b6f54608\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-osx-arm64.tar.gz\",\n              \"hash\": \"f910adb274065fef581728e7d043bc3f0c105a939f659865753c11a0dd0b550bdc4c0bc01e2ce6f710efcdebb3966ef138986113f595af4d6a9be8b15008abc6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-osx-x64.pkg\",\n              \"hash\": \"0e3ab717ad1a9296a8cd3b06dd1de5e619d075ab31e600e2a4366b23cc6fdcda7bcd2244932c8caca106a8f1a74ca698cea62d8f2542df9407c7637bdea38d3d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-osx-x64.tar.gz\",\n              \"hash\": \"052fd0783bd0901876a29b57a0f15e9f9cf859373bf4f3867a8f3e00b4edac5f3814b066be81c76d6bc74a20bd696e4ec65db48dc19703bbb4ee56d60aedd96d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-win-arm64.exe\",\n              \"hash\": \"5ee260ed89df931d2b427fe92ed69188b2e484965a66fc4896f6e58837f3e49335cdc9791f689b5233bfa3541643feb101d00892484f0dd0a7ce6e27a35a759e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-win-arm64.zip\",\n              \"hash\": \"b30705d21c474c762d8c6abe3aa12f3af47a21a3531167e8bf2383645c1ef670240f1a7ea145af4732958386995c09476de4390ed604834d402a6af636ab3f9a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-win-x64.exe\",\n              \"hash\": \"30d4a88650c0c970587cdd91d117e3ab92d51a1a05801789b6746c936f3cb395c398b6954f66d21b8c388b8a692e1ac8b72b585d17d54404e26d53a6724fa793\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-win-x64.zip\",\n              \"hash\": \"0530a4d3e4eb67252f8bd193a88bf92c9ec2b07ae22574b98d2ef7a51065d411a930a769a66e04a3d3d75421c1d89e78c6a7a825fbd04381b89e3a62e35f2292\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-win-x86.exe\",\n              \"hash\": \"7a920048ca5d87a22ae6c6d70349e1997aa1f2809295976f59f186a7bb09b4bfc38ff6f6feda3f184a5ff9df88cd8d6257a22367d5acb6988e17ae7b986808d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.105/dotnet-sdk-8.0.105-win-x86.zip\",\n              \"hash\": \"315886da57ae01d43a3e4ff4d3f1b5890f1dfe83f537d77753c108d398ee0c663736226b1d93cfa952f4aebe7b6f90bbf41f0a57d7b974dee19e1b21c28d1a4c\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.5\",\n        \"version-display\": \"8.0.5\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24115.5\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-linux-arm.tar.gz\",\n            \"hash\": \"f648c58794f217ac6faaaf67c17370658445655827d720335e38762541fec808d79aee0f87d0e27a6d3bb525c5a9ebcd3d94243190e7a5c126489f1840cd5373\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"54ad859a3307a4ccce6aa794df20dab3fc38cb4a8fc9f1c2cb41636d6d19fed1e82f88a0099bdc9f30e08c919ae5653da828ae54b0299291dafcc755575f02db\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"534d395e8d9a82995a190e63ebf971654d7b411285cff823396f598df5eee393d50db5f990b7022f50e53b105807d06df3ce3b4918f843dd105a7fc2ef8cb226\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1f3e24565c2b6d0541bb3f919451f4d554ed028e2bfedf8c15bc063f852398ce88f167130438720b82998bfaf7c78f80dae3a8c3e8a87499fc9e18ac606c4eb8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"46db57d8c204a216027c3737d96e91e421cc39db7f346911d7784c54df57907506af8815a5e0ad4164a7533d000ebf57a27da7fc820c8e0b6c95847c308eb338\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-linux-x64.tar.gz\",\n            \"hash\": \"ffe6a534ed7dffe031e7d687b153f09a743792fad6ddcdf70fcbdbe4564462d5db71a8c9eb52036b817192386ef6a8fc574d995e0cdf572226302e797a6581c4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-osx-arm64.tar.gz\",\n            \"hash\": \"b1a47d2ae3b528f5c32b57e3a03b46d12a14126b9768f9dd5dd979d49dc6543c6aafe55684eae3890ffe6b867aa664805b920ae1514f67cc841b882d5da7c091\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-osx-x64.tar.gz\",\n            \"hash\": \"d214a8b6a60547acb1a7f879e7a82348585b699f714b73b168918ebc60ee580ca5ff973f64e7738063f79dd04f0807bef0d73e90ce42c3b4464b87b768ccd789\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-win-arm64.zip\",\n            \"hash\": \"5eaaf55397bbef263464d81a86b0641a2c69c351c1e1d40452ddd16d711e83d646aacca72ce0cfe9e2da687a83355e832bc18d155a45dd95f2f9c2125a1112ad\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-win-x64.exe\",\n            \"hash\": \"2c1f3088463bf3da70edb6e18412da7cd45baddcaa54f8fc8e1c7ef94cb414b3308b097531a61d68622c977b3db79402ebbf84ae9f45a04412d9056cb0f67027\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-win-x64.zip\",\n            \"hash\": \"c79342e7d56b81e747b97e65f2c1323e70df83ab226152b5c451e48de1b27d1c5f057fd4a013053ea1c52cbb08f94db83f594ded06337e9c9cf4250a2b20d3c3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-win-x86.exe\",\n            \"hash\": \"171dcf56091ce0cddc31a74e1aaeacd06f7ec3c4ad63293afaf2f9c0af6e41b8e31ea51a69c0be1a910ad32fc19796f2c368a75c6a078e362897477815c48f7e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-8.0.5-win-x86.zip\",\n            \"hash\": \"6191811b8e0b031a882fc3460ce36a380cee9969794ba9a3bd5fc63297691bc7629b61744b0a34958d3882d361b68f74790c396c7dbc7c0faaba0dc418533bef\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-composite-8.0.5-linux-arm.tar.gz\",\n            \"hash\": \"ab616bd512235c9a90aab83bd2c7eac7cea24f40894c7549ff3f39a60cbfe35bbb0f9522d004b0e7f875f6e5ee4ba2d344b141ad6aa18165ef23a7af95bb8eff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-composite-8.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"e5ea9700bf8b82ec11f9d8a6d6057534375e902b462c417ef7f2072b9865d9d561cc6c6d90859e3196de9862d17970cb47ae6abc1a96ec39e4345792d9551ada\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-composite-8.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"d97bdf5c4cd7fc0d168a3abf1ee377515a28002111dec2e1f745da0bdc351edeb00af3d784a1c65738c4a3df346ae039d037e00ae30b21144ef543e71688a96c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-composite-8.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3d982d42b6f3c46d111d253121d919841d8af747ac0c0ee645a2297998cd9d60415662748b315fe5a3be22bfe44cbb6161bfe14b9777aa03ebbed0dacffbea4f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-composite-8.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"9d1dbb50684ec431fd6c979a57834295bc5aeb561e50aeac9f325b0aea9fa1c35927c458ec783c93863cc42debd87a9771405baff6b99c7faa2b43ab2e6815c5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/aspnetcore-runtime-composite-8.0.5-linux-x64.tar.gz\",\n            \"hash\": \"5c22f047cce57cea17e189af3305e6b0f8b1aeaff59b471907f99a8e936b9442755edfae015b2b3ca635ee160a8a33cb71cea7e71391a26d04866dbf64339bb6\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.5/dotnet-hosting-8.0.5-win.exe\",\n            \"hash\": \"cf3d170c977acd119cf3a261e88ac51de86f165fde01d4545951a145fbbecd62d9d6a6e2af3630065d982a14b264e10f5980c2de72ef3c6e49097dd4c18e03d0\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.5\",\n        \"version-display\": \"8.0.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.5/windowsdesktop-runtime-8.0.5-win-arm64.exe\",\n            \"hash\": \"c57b27abb9cff269ba2aa4ad768be22755ba87f32a7cd14c5919b1839fbcfa0394656c2207e16117e51711f21533b20b115f9fa228d98febe89654419de13b25\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.5/windowsdesktop-runtime-8.0.5-win-arm64.zip\",\n            \"hash\": \"a3cc06daa9c96831f9a29b7f4cdb578d9982f51657830571051f04f0fd4b7594ec611e6691c17545e1fd3548254a1284aab312d8690163ef3d358983c084f9a8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.5/windowsdesktop-runtime-8.0.5-win-x64.exe\",\n            \"hash\": \"669610963dfa67d1da4ad84eed34df362455389347c0196bcef003f2fba69a69a71e011f6ed3dfd1b4b196338708f4a95e766520b69cfee2e08a3c435b97d276\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.5/windowsdesktop-runtime-8.0.5-win-x64.zip\",\n            \"hash\": \"7be9f81d3d8795bd6eed2b2b78fcf05e364a64063e2dc425bb505df4127105ee1104fc42293947f7835188fb15dd132cbd302e1e1c954a60cf4d0a6c4a432e59\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.5/windowsdesktop-runtime-8.0.5-win-x86.exe\",\n            \"hash\": \"609783925795183be3281f5d2963cf52caa8eca9e129f9184a7886a7472020e179d2d269aadc5532cb760091fc4e936a2f05536bb1a46024dabaa25d789528ee\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.5/windowsdesktop-runtime-8.0.5-win-x86.zip\",\n            \"hash\": \"9cdcb60599d9757d20719f9b12f457d0bd3130e1c05c13842509d601044b735ab5516c6c062bb0bca6f6a38de3ae29020719f21daa91a62c9079656af0273e1c\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-04-09\",\n      \"release-version\": \"8.0.4\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-21409\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21409\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.4/8.0.4.md\",\n      \"runtime\": {\n        \"version\": \"8.0.4\",\n        \"version-display\": \"8.0.4\",\n        \"vs-version\": \"17.8.9, 17.9.6\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-linux-arm.tar.gz\",\n            \"hash\": \"4194840a6f1235808d1f1f4ff42046b6f11584c64fca65eb54b65c4dd924400679ae9e1f20efe582dda958f1838c5c125eb72da1d2fdcdd8628dcc20c35c6b88\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"d11ce8867dc91d9e9b333753cc7b9677204898485d044dfbbfabe5c5eee43091580a11c3029fca4138cfa9576f84e23fc11bcffa44fcaf5c3d8e617a3cd18802\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"bec8b40e30e57a2f761b61d0c1e20202d17b54b1530a592ba0ed6039637aaa1a52e0cca85b0e107d9102cbcbe381b9350f7ad8ec5ad69f194b24eecbeac472ce\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"335eb00e0b7aaace00bccc199a4bc5b632a9d2b5d8ed5f3db20343e85d897ae06b3302082c05d1f55cfb9688c2a626774fd7bc90527e757e35f7cb455fec31bf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"a2a4b3baf7f6477f44b88af6b83aa44bbfa2ab9c5b333826153ee956e95b4fd07cff3f95cd0eebf03cffec042576a2a554597753beb0ce0f99d06227a755abaf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-linux-x64.tar.gz\",\n            \"hash\": \"5c23889d3e6effa85d46c0e1969ce876c686723ae47bddf2cf9c0b1d99affde3f60c04063c2467027aa4163e9a981ef601250a7e8d14ddc6b365c89b24029c80\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-osx-arm64.pkg\",\n            \"hash\": \"6bf136185186a90b6a578ce077b5be3985b177e6af93da901d4e0f5f15d7b648e3d4da5a6559b3149fd96057550475e7651357e714c55b7f1b28665c06c9b591\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-osx-arm64.tar.gz\",\n            \"hash\": \"7aa4ea587348984ca959945a9e52bade7cb9cbcb8c5a32dbcdf0836d2da4148ca68fcf9815b0b274964b5164c9266b1891afc9406c1c7337642f09300efd7649\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-osx-x64.pkg\",\n            \"hash\": \"095c013f513e2c8423fe330e62d29e8a1eba690cb66fd27299159c7298fcc683cf551c332bc0d7bcbb7170095512fccf04c16c9d4a900733066ecdf1123d9ed5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-osx-x64.tar.gz\",\n            \"hash\": \"bb303991154582e1aee0b4850bec2ed92b5c4253bed08d76da0c9687c90c46c9ddddd7ffb9050fb7a4d8db6be6e8cd552156589679a3a169341a167952d76407\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-win-arm64.exe\",\n            \"hash\": \"8235b142422f14cbef7cd2da28ffa7aa34df6810475e529e1a0697a927febca62a3087e9ac7f7a8a46bc2264e9c08b4554918adcb4dffd439b06f3b05b70f472\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-win-arm64.zip\",\n            \"hash\": \"dea648e8bf546c45dbb905d0b873c6fbb4fec4f4ffe45be8285e7da4a95474ca13d6f02e448e5fcf38b780453862785835471cb4e21b210d3fb57fd7908b4f30\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-win-x64.exe\",\n            \"hash\": \"726435a95141b6c0b96461f6dddee5980677be359027bf9fae87fe4671d33edb528b08e25440573af3ba3591535ef19fc55ca12321bd03ec2f1ba7e824d5190d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-win-x64.zip\",\n            \"hash\": \"1eec71f0a3f1e48c6393498c914b9b12d89fbf6916a0611e82c9a43cf897957fc19cd4671361bd9d2c771645908e84f47aba2e831e9673e7bdd5a39e09f37c9e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-win-x86.exe\",\n            \"hash\": \"befd27f851d6008ed4ea694d8a12c74f693ff434d34c29fe6b57a69f0af6ef6c95c134aca3d956ba77fb83f0c69c5ff140c4ca4bba43927d837513c4a26b8a5e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.4/dotnet-runtime-8.0.4-win-x86.zip\",\n            \"hash\": \"e6767785bbabb7a58a002afd78d6d3356f65124fdc0122672062e92c106379d7560dd21b93e836018b52862b8dde4b85d2c84cccafdd32fd71da5252b1cd87c8\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.204\",\n        \"version-display\": \"8.0.204\",\n        \"runtime-version\": \"8.0.4\",\n        \"vs-version\": \"17.9.6\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.9)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-arm.tar.gz\",\n            \"hash\": \"45230c8f180209c3b8315a3d9825eaa55d1b1dd2c9b427d038890b17987f9ccf4288f4661263862c4a19231a7657562ee09595d7e09799e38d22138f03c49047\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-arm64.tar.gz\",\n            \"hash\": \"7000b559efe502e9a799e9fccb6bccc2e39eb21331d6cb2be54f389e357436b84f5ccbcc73245df647749ee32d27f7fb8b7737d449312f0db7dd3409f8e12443\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-musl-arm.tar.gz\",\n            \"hash\": \"49ec1d93764da0e726e691365b22545e935b96633175e5cbcc64d57f26c5ac13afdb8b668b7b481e85d31d841c8fc0850266f78589674d7a1d288001a57beaab\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-musl-arm64.tar.gz\",\n            \"hash\": \"07655fcb66f4d2c636efdc6605b20b44f64fec6682fae1a4a83ce9cfc1e3c81a7443a715ff0f46aaac25a0b61d12fc4da3d1fe46d6f74c0e93260f649dccf05e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-musl-x64.tar.gz\",\n            \"hash\": \"fc2f10626e5496aace5363af5d722ee71ae33d1856d76b90b0f4adf4f8898d53aa92cfc6efc765e52b2a0d092eb8e4c2ff15c691f82d7f449bec1fbd407e22a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-x64.tar.gz\",\n            \"hash\": \"b45d3e3bc039d50764bfbe393b26cc929d93b22d69da74af6d35d4038ebcbc2f8410b047cdd0425c954d245e2594755c9f293c09f1ded3c97d33aebfaf878b5f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-osx-arm64.pkg\",\n            \"hash\": \"edcc44bba3e816b53122128bf73480017381edffc6d510fddc9ce98612c915e8b12b9977d7efd8affc0ea023a1caed0506d9dec0313428180a673325401cd60e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-osx-arm64.tar.gz\",\n            \"hash\": \"db06baa1d076549e393a9a402c03e81834e15641d2b5fdbd5beb7c4a55b5ed979f5e58ac6baa2048bc55a3a7b3aabe0e3c518310c66a17ecd107b7bf0aaaf2b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-osx-x64.pkg\",\n            \"hash\": \"c3c14809db4836bcc3c649bae78d8e9c94d6d9412c5b280cfdbcf3b6bd5c7f4d97a743e3af7d2f328aefd8ccc3bca2f0bd62f770aa7f0825f4f9482de26f2e32\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-osx-x64.tar.gz\",\n            \"hash\": \"a49c3dc8f364dcf2f88353b80267062b557ef4afff333fa4494e84d01234d38c57619aaf7a3e2cacfb16d066ab1523b6e5953cf864e5e8f411dd38855408bb5d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-arm64.exe\",\n            \"hash\": \"7c5acad71138a17462ed0941f09612d5d55d8ebbdaae41f73a390b59581305c8605cb6eee7819961c80ff311d90d714b4df79fd37e8fbd0fd8408a712514739f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-arm64.zip\",\n            \"hash\": \"cc6afd273a05954906109fba32d3a00804d788d7b7f21d1ce22784699001c434204ab44cf74b6dcd20f5bc9d20f39ad5087123c7af6bdf4a71fd5786807cf7b9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-x64.exe\",\n            \"hash\": \"9c3bf9c027131a3ad9f66667c609b19e8846af795fa5a88558b49c6d6011d571aa1faea76f7b6a2dc5f5eb30d9ab5db7a4a9bea2348642b23c9968a4b73f3c11\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-x64.zip\",\n            \"hash\": \"17ee61b1addbf9d66455f95f1dc0988c34047928c072d02005eed283db8e64fc6a4e9f04ff1474e152af866c62fd8d51093abe587a6e2d177556d513a6bf4ce3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-x86.exe\",\n            \"hash\": \"642cd8f5b171882cae3a019b4c3b25dbe9530ebabc7a673c55c2d989e27db480d76774aa2661b766fe2dec1298a0acc5ca7fa7d73c7d17131183cbac05ac08cd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-x86.zip\",\n            \"hash\": \"e90502a3b383375735bd14741d626a94c92f798378cc7d0c38fa7c19ecfe6c4d487e7d6292b8f55ed2d91b62624ae2556cbecdd0ca7a176cd7509ff9ba426006\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.204\",\n          \"version-display\": \"8.0.204\",\n          \"runtime-version\": \"8.0.4\",\n          \"vs-version\": \"17.9.6\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-arm.tar.gz\",\n              \"hash\": \"45230c8f180209c3b8315a3d9825eaa55d1b1dd2c9b427d038890b17987f9ccf4288f4661263862c4a19231a7657562ee09595d7e09799e38d22138f03c49047\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-arm64.tar.gz\",\n              \"hash\": \"7000b559efe502e9a799e9fccb6bccc2e39eb21331d6cb2be54f389e357436b84f5ccbcc73245df647749ee32d27f7fb8b7737d449312f0db7dd3409f8e12443\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-musl-arm.tar.gz\",\n              \"hash\": \"49ec1d93764da0e726e691365b22545e935b96633175e5cbcc64d57f26c5ac13afdb8b668b7b481e85d31d841c8fc0850266f78589674d7a1d288001a57beaab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-musl-arm64.tar.gz\",\n              \"hash\": \"07655fcb66f4d2c636efdc6605b20b44f64fec6682fae1a4a83ce9cfc1e3c81a7443a715ff0f46aaac25a0b61d12fc4da3d1fe46d6f74c0e93260f649dccf05e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-musl-x64.tar.gz\",\n              \"hash\": \"fc2f10626e5496aace5363af5d722ee71ae33d1856d76b90b0f4adf4f8898d53aa92cfc6efc765e52b2a0d092eb8e4c2ff15c691f82d7f449bec1fbd407e22a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-linux-x64.tar.gz\",\n              \"hash\": \"b45d3e3bc039d50764bfbe393b26cc929d93b22d69da74af6d35d4038ebcbc2f8410b047cdd0425c954d245e2594755c9f293c09f1ded3c97d33aebfaf878b5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-osx-arm64.pkg\",\n              \"hash\": \"edcc44bba3e816b53122128bf73480017381edffc6d510fddc9ce98612c915e8b12b9977d7efd8affc0ea023a1caed0506d9dec0313428180a673325401cd60e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-osx-arm64.tar.gz\",\n              \"hash\": \"db06baa1d076549e393a9a402c03e81834e15641d2b5fdbd5beb7c4a55b5ed979f5e58ac6baa2048bc55a3a7b3aabe0e3c518310c66a17ecd107b7bf0aaaf2b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-osx-x64.pkg\",\n              \"hash\": \"c3c14809db4836bcc3c649bae78d8e9c94d6d9412c5b280cfdbcf3b6bd5c7f4d97a743e3af7d2f328aefd8ccc3bca2f0bd62f770aa7f0825f4f9482de26f2e32\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-osx-x64.tar.gz\",\n              \"hash\": \"a49c3dc8f364dcf2f88353b80267062b557ef4afff333fa4494e84d01234d38c57619aaf7a3e2cacfb16d066ab1523b6e5953cf864e5e8f411dd38855408bb5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-arm64.exe\",\n              \"hash\": \"7c5acad71138a17462ed0941f09612d5d55d8ebbdaae41f73a390b59581305c8605cb6eee7819961c80ff311d90d714b4df79fd37e8fbd0fd8408a712514739f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-arm64.zip\",\n              \"hash\": \"cc6afd273a05954906109fba32d3a00804d788d7b7f21d1ce22784699001c434204ab44cf74b6dcd20f5bc9d20f39ad5087123c7af6bdf4a71fd5786807cf7b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-x64.exe\",\n              \"hash\": \"9c3bf9c027131a3ad9f66667c609b19e8846af795fa5a88558b49c6d6011d571aa1faea76f7b6a2dc5f5eb30d9ab5db7a4a9bea2348642b23c9968a4b73f3c11\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-x64.zip\",\n              \"hash\": \"17ee61b1addbf9d66455f95f1dc0988c34047928c072d02005eed283db8e64fc6a4e9f04ff1474e152af866c62fd8d51093abe587a6e2d177556d513a6bf4ce3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-x86.exe\",\n              \"hash\": \"642cd8f5b171882cae3a019b4c3b25dbe9530ebabc7a673c55c2d989e27db480d76774aa2661b766fe2dec1298a0acc5ca7fa7d73c7d17131183cbac05ac08cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.204/dotnet-sdk-8.0.204-win-x86.zip\",\n              \"hash\": \"e90502a3b383375735bd14741d626a94c92f798378cc7d0c38fa7c19ecfe6c4d487e7d6292b8f55ed2d91b62624ae2556cbecdd0ca7a176cd7509ff9ba426006\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.104\",\n          \"version-display\": \"8.0.104\",\n          \"runtime-version\": \"8.0.4\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-linux-arm.tar.gz\",\n              \"hash\": \"da01189ad5db3af839034cfb245ef4d68e37e45a1e87288b314fc3a4bbcaaa569d463298a527dab20fd4b15afd5c35bab8ffae1f97e021d4b5e939af628e0d7c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-linux-arm64.tar.gz\",\n              \"hash\": \"71f5fb65c88bfd14ebc13c5eec04d08b4f7461d1b9f3f5f08c31351a377e08cd002072a4487bfc2496ac7b4d5ba83c97eb979a5732de394c1a02a4528877002f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-linux-musl-arm.tar.gz\",\n              \"hash\": \"6ad3749e824180fa3232a3e89cbf82ee622a3099872210e5ed029ae4a9c9207b515fd62aa4f6ddd8190df7cb63933f45afac2d0f1b913599c4b158846078c3c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-linux-musl-arm64.tar.gz\",\n              \"hash\": \"ec9cb0c1c5e6637c5eddfbcc54974022a00a4ce16553199200f6ff708594b3803753602297d29788222e15a3460deb57ab8a9fe9572524591943aef9b399f996\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-linux-musl-x64.tar.gz\",\n              \"hash\": \"8be015e2f18f96838729cd98aa14fd220b8433f23654eaa50cfafd3fb6402137f0586cded12abee8a2d8b1da017c366ab4a2711e5a4d2a6056b272df3aecc0b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-linux-x64.tar.gz\",\n              \"hash\": \"cb7b5e509c16a7e27ccfc03b3a217460b9eac151ca973f262f82d4b4a494f7bdff3229e9aee91df1c110582ee8dd3d310dad39528c3bd292c5d9b7746ba3b6fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-osx-arm64.pkg\",\n              \"hash\": \"08d944e429afa7c58d1a79220eb21adede96abc6f8d93212826ce1b7b5481ba92bf8cc3fff514623ec2c1fc2d3c42e130a1443df3f5429df45c6bd7cd9317a1a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-osx-arm64.tar.gz\",\n              \"hash\": \"376fda994997e3ebbf15cafbc910ff25a71debd2d31d088cf7947f813ff013568f3f47514ec53d2c02a3e3f8432a5ca9344dab3ee07cc0df650761a3dbc6be68\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-osx-x64.pkg\",\n              \"hash\": \"63bb40e9ad2e7f2ebf292ebab7248bc3649a28e30423ebb853db08aafc550573e9374049cfc1691da359e426d3c85f757a98d977a386fe3a5bd25cfb56095279\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-osx-x64.tar.gz\",\n              \"hash\": \"b451731c7fe151316df57d1e6a23129732ebc0dc3dd53479421b881652bd042d5fb9890c2c8e229fc578b3b05542a8e08986955154e590d8c1e274c5821a5666\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-win-arm64.exe\",\n              \"hash\": \"8eae336c6bd731882f0828a6e916a042494740d710de400be230d3b57516eedc747ea17dd7ed8d785f5fd34207b9df2bca92c78e859bcb23d0fac038dfd2e61f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-win-arm64.zip\",\n              \"hash\": \"e5f6c1d1224824ce9ff5acc128f4025154ab982021ef15dd2db9868314290d183fb1ab67c2b0431bc54465cfac3a3cc0fb65932905fe52414abfa941f44fd199\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-win-x64.exe\",\n              \"hash\": \"4486ab02c5d4236fe0646e6b912a5dd53b4a0f05006826e534239c2c84f774c5dad1d08b70b88151dfb06a26bd5991bd68214debde061a6a68a68e0ed90a55f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-win-x64.zip\",\n              \"hash\": \"c49378267586d1982682fa89d89afaf9253a674e5dfd58e76b40fc98fe5a3c43570dfa60f8415f587d0b8ba69e3533239ea59a771fe8e81617c6b8229679c0ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-win-x86.exe\",\n              \"hash\": \"1df0685b3472498cd0b5401c100214cac2a928ce19e995a4eec03dd3fd8d85e36c6c550e5ffa490cce319817d89cc43a2fccba1873f63521d21bd573a0f0ddd9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.104/dotnet-sdk-8.0.104-win-x86.zip\",\n              \"hash\": \"8114344b79fd1887da1e9ec39da0c52ce968293989aa3c1264f0445525a55fcebed53126b8624f8a73115590eadf35ebe443a858b227c84cef59d3b0a9d7d074\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.4\",\n        \"version-display\": \"8.0.4\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24080.4\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-linux-arm.tar.gz\",\n            \"hash\": \"f9fb78800e47e72498472decb7dc32bf3a22ed4b8b4706e381c86f17d70492d80e2946c4c28e6138aff3b9e9eaeffb6d78a0a856723580d0497abc0e2b4f7e28\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"0b0b3dffe678211afcaeca5d7e381f2218f156421c79dd06e083b1abd92ceb2b5c04c8a159b7d67b866393b8169de826ede70240226e0164451b329b7d46b570\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"1da42d9a05a5580efd7f4bf32c9b5aa8095131100531dce577074c919099963f14175c921a35131ef8f197fb5fed7970566cc7b9931f1e355bab8e2ccf3d24ee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"841e42b4779cba9ebb1d480adb4b18a80f136866979dd3f7afeb6a4e1e1f739caa48dbff661c33417902cf87aec49abb4988fb18f64dde0802d53362feb6ab1d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"5aed6acd57b212806a24467dc6a432c664d675fbba97433bd4e49cdc836eb7b97be3663308ba24222cca51a59da0fd4771fedb5aee109720386201b60138711d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-linux-x64.tar.gz\",\n            \"hash\": \"8ab281977116bf59a672afe5463bce4433378cc8a67d332c564a012939b7dbdd8756df82a115a5ab93f8186c22700a6dc0272b99a0f484db837da96820c78e79\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-osx-arm64.tar.gz\",\n            \"hash\": \"15e8a7535e0b4d2deeccec32e6373cc2d79fe1156c2490ec263790723c5f660c03a61978826d825a427ebbad02cd0eef12a14e11cb8fcd9744c5ce2ef7176011\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-osx-x64.tar.gz\",\n            \"hash\": \"544257738cd7265a6c3c99e83f331c20c631ee8064e47bd925e37191627223e2f39f19a025360de1f95915bde1a26eede757bea4ffbd115309d186d81d7d6b61\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-win-arm64.zip\",\n            \"hash\": \"fa5b9a34ae3696b36ef68428b2347c18036f02972b94a5f888a57a99599eca0078e4ddc0f4b59356bf609620e47506c035d8c49d87c7b799594aacb31cf2bfa2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-win-x64.exe\",\n            \"hash\": \"03759701074daa8815fda2a4893a29a9a8fe3532e7500b5351d6eea29ab89b2f50f31dc9b1c2de858cb117c69c8aab152a8568b73c63d074364391f2545712eb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-win-x64.zip\",\n            \"hash\": \"a15fb7c1c7bb1247bb49f4477dfea7e53a168ed624b5a770616165bb22b11727fdad2bbb9448fe6418eddc427da4c56669aea9798bd9e1c6ff95d084010aa44d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-win-x86.exe\",\n            \"hash\": \"b911dad38fd3437f0d639ee3b06f47c393b9a8f7c7dfb6592a11d32343a5157742892365b5bcc09d2c5c6c5b49551b411aa61108555b83a37ff2cd0a0db42404\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-8.0.4-win-x86.zip\",\n            \"hash\": \"f3625d6f61bf644337ae9006238c753bcdd90fefdc537830d5da0d7f39109beca70273ed78b22312942428ef8c13fcc9458ae970e9071fb45d1e07f985f2cbb4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-composite-8.0.4-linux-arm.tar.gz\",\n            \"hash\": \"ae75bbea80db5252ee7d469dad58c76cc4890a0ad159b0231cf5666fc30334479d4418483a7699971cc461ce0d0db5df171e5c53f291305057874a6f0f59eb09\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-composite-8.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"3e890c440579db198815cfc4a517f2084417147861c081e5d42670d1f61f83e8aad8b5488e2c84a11cbc67ed9c80582a2371befd53fa3b9b8c3d785bda08c33c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-composite-8.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"5da3c453d7da72ea6482e0b9fe01037c293f3b3dc67ed2289856aded9b653795911ef47ea4fee8ab152e42326049e6cc5313e31cf3349b9e5f6f3b09c4ac2dcb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-composite-8.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fe67e2f4b045df2651deb4ec4984c140d20f12bbc3dea3760e74f45b96bc613a866daaa0784017196339112c6332f1c7dbed472eeab586d78c4b1311b6269c05\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-composite-8.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"d7c33772ac805e42ec0f9c90c0f5bbaf26942be1a318fec9ec5532fb73c98f13bfc42b63f9db5d1bbff8fdb0cd802170629709aeb8499856d40e4adebb8f712f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/aspnetcore-runtime-composite-8.0.4-linux-x64.tar.gz\",\n            \"hash\": \"f77d90648c115f95760c0432611dde62c8cfe32241b82d21a030a57466ef1d89808be9ae7bb8f045278a7a05ada26c596b15980fd3a5f3aef17b4334705f7c5a\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.4/dotnet-hosting-8.0.4-win.exe\",\n            \"hash\": \"2ae357f0d8e43c316874455ca56adee4d88081bf828721038527760d860beb3b510eca748aa18ebfc9509cd289b51e84156da388853d644cff308b539b04355c\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.4\",\n        \"version-display\": \"8.0.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.4/windowsdesktop-runtime-8.0.4-win-arm64.exe\",\n            \"hash\": \"88a4cc58dbef71a767d6cd0acb8e418f5a49cbcda43b16743db5621de4494dea3cd7bada712c12acdfe555dde7cbe8bec9928db30e6d09f44843c884a275eeb7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.4/windowsdesktop-runtime-8.0.4-win-arm64.zip\",\n            \"hash\": \"0cb2fd99ed33e94a570fa0987fd6547b46148bb4db6cc5f12f2a94713f0540f384cffb122bd960d693d9901a3c2000f5bc51354f190967bc14b480c779fa282e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.4/windowsdesktop-runtime-8.0.4-win-x64.exe\",\n            \"hash\": \"8a0b1ab3a774c33f46cd042783cf785c33f2d9e0bdeee4ff8bf96cfa90a2101a5711231840ef93eab101409e7f3f3770d86e1a55bd52709af08d1a6c908cc194\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.4/windowsdesktop-runtime-8.0.4-win-x64.zip\",\n            \"hash\": \"53edc5cbabab50340fc915b112afe7c25739fcb19b333cdd48339d38f4814cbd2b86dc996e2cce8fc9ab917cb9f8019e5e81f752a435cdccdc45a512332bb1e0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.4/windowsdesktop-runtime-8.0.4-win-x86.exe\",\n            \"hash\": \"edeee99d70e776e21f84af1e6c63690f43fa5c89d4ac2e3de4e376eede0c8b2aedea8b7c890e1b8e1136d44c8f4a103be68c972b3d6a771b88d4f3adda75e1b5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.4/windowsdesktop-runtime-8.0.4-win-x86.zip\",\n            \"hash\": \"921b24897cffea3ed1c2a828f32efd957117c555fd893c10f697743166bceeb71544acb71839a02e0df41bdbf8edcd891670602f970422aca604cccdc4409d52\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-03-12\",\n      \"release-version\": \"8.0.3\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-26190\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-26190\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-21392\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21392\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.3/8.0.3.md\",\n      \"runtime\": {\n        \"version\": \"8.0.3\",\n        \"version-display\": \"8.0.3\",\n        \"vs-version\": \"17.8.8, 17.9.3\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-linux-arm.tar.gz\",\n            \"hash\": \"ff57e94bfeca1c44beef4f960caa9e3600ddab4a75c4df09611a667d95d8aad56f7c8b4b89dd8919a9dacb5a79b90a516e6420d6ce39047f89b9d313d45acc62\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"a78f51500fe180936152f561b3c2385939053aaeb1c2eba5e1353c6427a57fc1c6de8ffcc398afa0d2051ec696813b7c635917f6f0554028b725c58fda981871\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"2e047f0840ae83a86942452d1b5aa96685d1ec64259d7cfd51b944d05865eb4c32d80fca48ab0b70e651a7b6f9b2d43bf150f0e6ff841e719be28342bc26fcc5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3d464b41b9ba8c1f318295f0628c80c9e3d6c9ff017e24bcf4dcaad740c22d0593d5b47a158aa5b2dc956e14fb6e08d2720695e2416611fef291236ef913cbc6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"bbed0cf924d103e15d07e069522fc89d921e8d91adccbd4e161345b52fc8bdb26837a18c83d06ccd092d14d3df0e6acbe3b8d348e0825822807a1cbc1c8f549f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-linux-x64.tar.gz\",\n            \"hash\": \"08ad7065abf73d09bd718963bd1277c4736f9d51c7c51849255732db03b59f2321d321235be8be35ca5ef2bbd4f331a0fecaefb48d3e1075659e075bcd1f0169\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-osx-arm64.pkg\",\n            \"hash\": \"4436beb94b2d7b52c0a03e282ea06328d85fe2012fe6bc16d24813e8e7249ba629dcf8f635a467c03e00bb63699730cd93dfdf32d4f9a5335f4333d573bc4029\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-osx-arm64.tar.gz\",\n            \"hash\": \"c70ec1c2f258adc07b585896d5cee6246d8ee5a2f7228c9a52c958c0cad2e6bd8dd6803bfb0c5243635e89dc5a5fac6e32274f1b574b79dc4fd31d69e1aba2cd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-osx-x64.pkg\",\n            \"hash\": \"70b84e73989b4497f971aceb8e4797242b88436b334b9f91ab510d99e7043eee1bda38bf5a8a2c6fedf3b92b0b8c74f2fcff91e894eddb053fdd7d8cf7d23568\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-osx-x64.tar.gz\",\n            \"hash\": \"5ea3f5cbbd9855cb0f305b8b3252e10af03bb0e116ce04f8c764cf5512bbcf7803378ed48cd9fc394e5282761f4137d061a1e2447d2d5cfdf3a2226a2e14a9e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-win-arm64.exe\",\n            \"hash\": \"7e2ac73884a5c11f76c4690ff0b31bcca9b9ddfe9e5dcd91673e38addb2dd6780ac9d11bd3b2d38be63efff4b321ee347c9007c2c3a646e16b884b412a58453f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-win-arm64.zip\",\n            \"hash\": \"164daedf2d691c41b4e99c98dc3f6631f4490d724c206d1f3cbd6aaefc81bb2355a49fe8a52c4a01fa9a278b910f7249262baaff688a84ff07122e6970472694\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-win-x64.exe\",\n            \"hash\": \"7aa39c24f01d6ea13f2623a742ed6799ef29a01fbc79f9294aebfc1ed9bf13777da023594456642b278b2a92c67f392264daddfbda60e121104cdbb50ed6cc89\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-win-x64.zip\",\n            \"hash\": \"b1408b34fa96c0ff197154651910c16ce76bcc3fa042aac2243f46758fb48593a24726e3fc4ccbff608970038b3ab6635a0881ffe083149c1d1ffbb1a2470699\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-win-x86.exe\",\n            \"hash\": \"fb9100cdb4d3c697a0ed3d77ad23fc28e0ced3a0fd541148c0ca9caeee504ecbb97bc440da237097d48cc03699ce4a29cb89fec3951f826b3013037a0f17dbc1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.3/dotnet-runtime-8.0.3-win-x86.zip\",\n            \"hash\": \"cecf20386c9c3e3ebd00fddaa3421d52fa71eb7081ae4f61be8f881b453839fa89015f0d7ca403225236dc45a17af36c0f74ff1e29a88d09ab91c74b44081e4f\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.203\",\n        \"version-display\": \"8.0.203\",\n        \"runtime-version\": \"8.0.3\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-arm.tar.gz\",\n            \"hash\": \"ebebd4f3be6e9772f23d313b991950d6997716fc0f9c079414a72a0f998c55a32ea19f145ea1b1724fea527ca12a7cbea7afefa60a520679a20b99f68f184e15\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-arm64.tar.gz\",\n            \"hash\": \"cda16b2141c1115ec42303d82f2720ddf5368b7242207e21d3fdd81fa89df2676f0d394ca7293c76c35ed2448b289174739771ec447404ad9c84c72459cc0d81\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-musl-arm.tar.gz\",\n            \"hash\": \"4ae716cac29a5381dc6341b2e5214f57c7b82928a0a756a2b3cef7d8063d52a29a66cea10e3ae03e379ec220a833e479f944dc762b3cc44c255a02bb715b84a5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-musl-arm64.tar.gz\",\n            \"hash\": \"33cf09807d9280d3f4a860ea7650f73732c7d86d462a06b6e40e7945d0fc8c6e9c5e799059de86939cd0de88d35afb67d1829150b9fc2e5ccdce0d55d9e771f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-musl-x64.tar.gz\",\n            \"hash\": \"d2b6d8b411470c1a856d546dea087285dad7adb3b3fc5335b024d6f9054ac869073742c283158294c7b866dbd58dda4d9fa2a2c245fb4618c44ca5a61ddec7da\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-x64.tar.gz\",\n            \"hash\": \"78b1913b54a1a4c9f13cc2864a11540b5fd3bdf4ebb49837483e19c0906a1890f2dfcf173635a1c89714bf735cbcaa01db0f7ae90add5295da69a0638ed5e60e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-osx-arm64.pkg\",\n            \"hash\": \"5f0d6a1b5647edeeb7b61622d7412367f67d2f4664956d2d1266e69c74998098c4d7b8559494580df0bc6556538b04db5fa71f825d16124db8893287b7ba4fa2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-osx-arm64.tar.gz\",\n            \"hash\": \"39fdb91136516f070b5f398b46a7503115493f1cc89d9bee7ea7ee4541ec9d69a4d673d87498e578ebb2cc81df8b062d05c4f7c8be80bc2b113cc61df1157c0d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-osx-x64.pkg\",\n            \"hash\": \"a5d51a665f767869ea020067e150b690e755fae427fea45d548f67282e5fa4e9dc84028c94170b75d67258b7eb1394fcc9d7f6d4b662bbaa1b5c4a203501f019\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-osx-x64.tar.gz\",\n            \"hash\": \"28588e173bcd185a2acaf26f029dc63e238e29027cab0659717549de15ea88c6075fd384b276265b39c4a91f0005dc81417fede62b6f2f81c1a9c5a4a9b0153c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-arm64.exe\",\n            \"hash\": \"d80553c6edc49c7cb1aef9ec88edadcbc7a5eea3195868e611851135d302d1a7657999b0a0808dc2ad0d99d630f974b781c836add27b54de9accce06611adfb4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-arm64.zip\",\n            \"hash\": \"1fd966b968ca2ed4882480a2e6fa09cfe89b706cfd4570e845786801f2889e40d3c1463d4753b59fa565074b673b09ea3c9e06d402713b33f4c6fa220f6eb7fa\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-x64.exe\",\n            \"hash\": \"f6f5609134d4006a16b96c2ca3be32acf7492bb7db233690204141a95952077018dc5f1503fd4dedf7ec44253a3427373fa21dab778a3b3d3d3d37df90c11228\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-x64.zip\",\n            \"hash\": \"d0f19867f73433b9b30b9dd678ed719163a61defe44db52487e321a3819a55c467073ab98c989fe867f03816411834dc77ba2e939c5ba40f8140b665acf1ce35\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-x86.exe\",\n            \"hash\": \"e923d367c83a48aef4334d03cf4de46f41f8f44aa9636a7509793d38e2968138b03d9f23c4218923580b7870a5f56598709a5ddf1546af2ebc911b0c341fafd8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-x86.zip\",\n            \"hash\": \"fac438db0bfc77a41ee03b1c4cccfa6d6a31830276a0942b209e2d2f55c98f6f12c55f3ff4b295309a65d0bb8abea8256c40fe6cef13de43fbfe2327b7c3c457\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.203\",\n          \"version-display\": \"8.0.203\",\n          \"runtime-version\": \"8.0.3\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-arm.tar.gz\",\n              \"hash\": \"ebebd4f3be6e9772f23d313b991950d6997716fc0f9c079414a72a0f998c55a32ea19f145ea1b1724fea527ca12a7cbea7afefa60a520679a20b99f68f184e15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-arm64.tar.gz\",\n              \"hash\": \"cda16b2141c1115ec42303d82f2720ddf5368b7242207e21d3fdd81fa89df2676f0d394ca7293c76c35ed2448b289174739771ec447404ad9c84c72459cc0d81\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-musl-arm.tar.gz\",\n              \"hash\": \"4ae716cac29a5381dc6341b2e5214f57c7b82928a0a756a2b3cef7d8063d52a29a66cea10e3ae03e379ec220a833e479f944dc762b3cc44c255a02bb715b84a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-musl-arm64.tar.gz\",\n              \"hash\": \"33cf09807d9280d3f4a860ea7650f73732c7d86d462a06b6e40e7945d0fc8c6e9c5e799059de86939cd0de88d35afb67d1829150b9fc2e5ccdce0d55d9e771f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-musl-x64.tar.gz\",\n              \"hash\": \"d2b6d8b411470c1a856d546dea087285dad7adb3b3fc5335b024d6f9054ac869073742c283158294c7b866dbd58dda4d9fa2a2c245fb4618c44ca5a61ddec7da\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-linux-x64.tar.gz\",\n              \"hash\": \"78b1913b54a1a4c9f13cc2864a11540b5fd3bdf4ebb49837483e19c0906a1890f2dfcf173635a1c89714bf735cbcaa01db0f7ae90add5295da69a0638ed5e60e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-osx-arm64.pkg\",\n              \"hash\": \"5f0d6a1b5647edeeb7b61622d7412367f67d2f4664956d2d1266e69c74998098c4d7b8559494580df0bc6556538b04db5fa71f825d16124db8893287b7ba4fa2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-osx-arm64.tar.gz\",\n              \"hash\": \"39fdb91136516f070b5f398b46a7503115493f1cc89d9bee7ea7ee4541ec9d69a4d673d87498e578ebb2cc81df8b062d05c4f7c8be80bc2b113cc61df1157c0d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-osx-x64.pkg\",\n              \"hash\": \"a5d51a665f767869ea020067e150b690e755fae427fea45d548f67282e5fa4e9dc84028c94170b75d67258b7eb1394fcc9d7f6d4b662bbaa1b5c4a203501f019\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-osx-x64.tar.gz\",\n              \"hash\": \"28588e173bcd185a2acaf26f029dc63e238e29027cab0659717549de15ea88c6075fd384b276265b39c4a91f0005dc81417fede62b6f2f81c1a9c5a4a9b0153c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-arm64.exe\",\n              \"hash\": \"d80553c6edc49c7cb1aef9ec88edadcbc7a5eea3195868e611851135d302d1a7657999b0a0808dc2ad0d99d630f974b781c836add27b54de9accce06611adfb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-arm64.zip\",\n              \"hash\": \"1fd966b968ca2ed4882480a2e6fa09cfe89b706cfd4570e845786801f2889e40d3c1463d4753b59fa565074b673b09ea3c9e06d402713b33f4c6fa220f6eb7fa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-x64.exe\",\n              \"hash\": \"f6f5609134d4006a16b96c2ca3be32acf7492bb7db233690204141a95952077018dc5f1503fd4dedf7ec44253a3427373fa21dab778a3b3d3d3d37df90c11228\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-x64.zip\",\n              \"hash\": \"d0f19867f73433b9b30b9dd678ed719163a61defe44db52487e321a3819a55c467073ab98c989fe867f03816411834dc77ba2e939c5ba40f8140b665acf1ce35\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-x86.exe\",\n              \"hash\": \"e923d367c83a48aef4334d03cf4de46f41f8f44aa9636a7509793d38e2968138b03d9f23c4218923580b7870a5f56598709a5ddf1546af2ebc911b0c341fafd8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.203/dotnet-sdk-8.0.203-win-x86.zip\",\n              \"hash\": \"fac438db0bfc77a41ee03b1c4cccfa6d6a31830276a0942b209e2d2f55c98f6f12c55f3ff4b295309a65d0bb8abea8256c40fe6cef13de43fbfe2327b7c3c457\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.202\",\n          \"version-display\": \"8.0.202\",\n          \"runtime-version\": \"8.0.3\",\n          \"vs-version\": \"17.9.3\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.9)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-linux-arm.tar.gz\",\n              \"hash\": \"8cc8be3cad5c3e12ea8293e7b2e2d66647ff01fcf1d390791350a55e13f4c5e74a673dac85918e878b25f61eda690da5c7af7c2d289d6f4d0277476b43366961\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-linux-arm64.tar.gz\",\n              \"hash\": \"83ba9a467487de49bb38d388010c3f0d51336e6167cf3e116e56cd18b0ffd3d52099f8567bc434ce02430beef38dee20ff1e4ceb71a6d7967fc0e1c2da12ebae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-linux-musl-arm.tar.gz\",\n              \"hash\": \"7c96bad8f5cef25b499ace592536b85b264d66e5da15850b314035995ac6a157507e2744ff8207ea9db99cede9ea9773994a1319d488e8ec26a0f9edf7ea10a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f5d1f025d18062247e7c392903c012b5e7f625609cff19d9eac81755065fc468a1d66b0396492258257bf42a88a07e40a040d0cb296bed620d326f58e2cd69cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-linux-musl-x64.tar.gz\",\n              \"hash\": \"809d8e488723e7be053cf572222b0d81ea7dd10a5034617f044bd0c752f6eaa14034c2d13f093a06d64af6b5b5cc65efb5d9fbb9de8edd00d215cc8e9f26a587\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-linux-x64.tar.gz\",\n              \"hash\": \"e0e790c7cc6f8129913317d326c599ff8e8ed4927d4e0adccbe55c50be5c353fe3d83043e529973ced2b302b8432c2ab31533b94ffe9c363eaa9964a7160643a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-osx-arm64.pkg\",\n              \"hash\": \"a350e88e410acb63ec6d963389db430a476ce4eb6636354d22760aec58a945876494eaed525726963c6695b105c85955a185fc52e1d95aba67273601aa3b1014\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-osx-arm64.tar.gz\",\n              \"hash\": \"cb140f98fee85802db2540b0a97bf5ffd3bdc871f4d88bd36d7c66491c9961da43bc08162dc43bfb8ef942f0d19dc70f1c92b22b55d1bead2fc757faab6d423d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-osx-x64.pkg\",\n              \"hash\": \"91f9b2476d8633a29469f44c1862419760f5bf0679ad391a89dc14a6308826ba0cb404bff9c1df2a4e34f1d6a825b5a43589249a50282cae697d247224e7ef4c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-osx-x64.tar.gz\",\n              \"hash\": \"0682ef3fa7f31f49c85e8e31313e957cd51b5175e7857f25462a7ab5efbd53debda21963aab17fbcd100addc9deaedb0b43d7ff62ad157370ddf1307cb82346b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-win-arm64.exe\",\n              \"hash\": \"a4657930d06a1b02bec7b50544ba1de557d8c29cd5093648487ae7cf0c207b534f5d3a66d487084ed40975f60b630365e49174e5017d72185ca3c981e7e454d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-win-arm64.zip\",\n              \"hash\": \"ffd8f797352abee1239dd788186ef5dcead73238aa4f6830a85e685d48b418840c12f5c018e4f1b42ab4fb93fbff9d511604d20933e88a57e292e09210b8c339\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-win-x64.exe\",\n              \"hash\": \"2a9fdc8b7559757eb5eccc1d0e3fe3832f744071aa6d49508c8b62c7ac79bdecba7d3c4ebffbfbbe08ab262183516e8bcfa4236d77a3aff56f210dc223a43326\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-win-x64.zip\",\n              \"hash\": \"826db1c5c0d70cc53f12421af3e0fbe2ee682629f979c9db5ddeef3b53e945e013b20919e4abf791c096a2426c90717647f761bdd82e00505eedb6d94e0b75c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-win-x86.exe\",\n              \"hash\": \"934fcfb4b4f01222bf126085db1bccaa1aee956bb3d745f72703a90787845d91d6f8a20a50b3326a5d342eb407d83b3abf183b0fe3e79870264c9474584589c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.202/dotnet-sdk-8.0.202-win-x86.zip\",\n              \"hash\": \"440e7868dbbaf9f61c70389b33a95a4bbc9583afc1ea48bfde7baa3d08cdc885282800819ab50562528a78812cf89efad2fa3baa0a7e327741ac6f6349b41249\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.103\",\n          \"version-display\": \"8.0.103\",\n          \"runtime-version\": \"8.0.3\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-linux-arm.tar.gz\",\n              \"hash\": \"67c45000d1a044266787cb144bd5b0afe92ce20348dfe1f72ab277cebc4fe5b44d107872904f0d11b3c622b6d0969a1c4f23ab8223fa2431cb9cb284bddc0af6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-linux-arm64.tar.gz\",\n              \"hash\": \"486c6dfd0c37771422fddaec155950663e79bf2afca085ffde68e2af20e42bcac1bcbf0d95dcc0df9469e643a7f81813ab828afa114d5f715057d2a3895e531b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-linux-musl-arm.tar.gz\",\n              \"hash\": \"83cef7d126034034331baca68d96b5fe892940ac80f9dc4451252cc74f3d281c67d1422f8d767759a566e1ff386c2cecc86f4e32b62c5928ec603d1919b7e058\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3c83259178a053d1b12dfd296dac8981fce30f773e7dc59062bfc0491e76d2537d85419a890ba3658bfd70554e0591270bc920995de2959397e6446e801c4956\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-linux-musl-x64.tar.gz\",\n              \"hash\": \"4792107d445e8b9c8480f3771f0c4697a119586c55d05a8814e4ee97459bad8042f649a1719a37c7772f6707bae70e33477112d7b7ebb035c04866b6635e1dd8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-linux-x64.tar.gz\",\n              \"hash\": \"5894942d53ff9acaacde589e6a761bd170f06b696cac465b2dc62b741bf9d9a635721ef4e7fe9477c52ff22feabc928bd8cbcd167a9ea92a6bf6a362c8b63daf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-osx-arm64.pkg\",\n              \"hash\": \"12ab8409b74038d5a79118343dcea926e428ee687d556693d8adfba9b684a1f39ac286c2bc822d66c5b78ec3a76ebd98f7ee255c1e3bb7517a6f0e03566584d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-osx-arm64.tar.gz\",\n              \"hash\": \"cdfe17109e0b55777e2ed95e9a538bed67ca532edb0e56eb1c52cbb53eec73959141a9f744c1c1a6c5f9e2863d2f845296b65afa94c726c1a7b3274bda869a65\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-osx-x64.pkg\",\n              \"hash\": \"852b7fad83d68a5abf2f8aeed1ad04092ac628a326810b44e7f2f6ee6b78da99e945d206499858e19f0abdadb91d7b78277be4bf709ddd0a77a3c3abcf1de006\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-osx-x64.tar.gz\",\n              \"hash\": \"86174aee177e039751a5dbd019ed95e4cb56389c9725902c513e5f50fbf2d89cdcb113173a8f9de9bab844c70e1986b3bc3acf8f22402e09473af413df657a3c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-win-arm64.exe\",\n              \"hash\": \"b5ccc5ad27f315721610c2c554a889cc7b08d0b4949d2d1f9e9495c286e82301d33a894de0b202f626a22f43bdcc7f2f3dd4e1a8cfa051539f6dd2abe795e775\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-win-arm64.zip\",\n              \"hash\": \"82f2041c1dabdd738eefbb013111548b5d91d883d447095d9cc5e64a8822b1da2dfd6e329eeb69b4710c085ca66cbeba5e89de7760b17b13dbef76f5e3a43a7c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-win-x64.exe\",\n              \"hash\": \"471a8193a83a507aae3df439039ce6d126906e077cc1c57a265f47c6b8439544e1c4b7e9515f0fad0eb2bba96a909d03f41976ad4cbf98dcbfea311d553a7ead\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-win-x64.zip\",\n              \"hash\": \"02a344f1bb73a46a9f1f1c8579c1e3de005f0890920d6425edc59b8e250f1612b089584307af0a16beb660be7c252e05ab1cfdf773959574e0e2094dbde277fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-win-x86.exe\",\n              \"hash\": \"489aed32490f869127b71fa157ddb39639f353bb53d082629247e57bfdc351c9b6060a4d0f6ac30eb0ad332e278fb34e03c35b2e9fc075eb6fce6e4eb9e62997\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.103/dotnet-sdk-8.0.103-win-x86.zip\",\n              \"hash\": \"403b9cc516656ff736a897772a39b9606b90f54eead64ad7542aa31d90ba44a1f6da7a4ad5a189740353469fc7e71dfa107168c6ffc0a544c654333ba10e8908\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.3\",\n        \"version-display\": \"8.0.3\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24047.3\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-linux-arm.tar.gz\",\n            \"hash\": \"a7853f77615d37151fd59dfd4916fc7794bc4d83b0cbced85b857f501dcd883ec681b303e8d2fac438e06a9e90f4cee9f68aede64d59b033d2f08144839a04af\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"2ddf440be273febae8049df9b2837fe9b9d95d43a31898b915dbf39aedaf15a291ff28711e983fe099ab22a291ad244813256d57ebb6ef1fb94f04d712a96435\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"f3e55caaec7edd9afdea587a8e6f00fbb62d3491cee23fae415d4bb3e7c4aa4b8257ec24f56baca8a1319a9a2072880aaba0fcce6125a1645058eb3ea9aafc38\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6a658818999428ab40616cec032bb58d0fd04567d255d84bef6b1d57fde4186b0e2e0633c45ad229cb9a2c2e7cc30b6980fd9eaaf464cdd73ccc38d35247a469\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"438ed9f5fef9cc63bae18f52af4209a80d8265ef6f9c7b92661e5276538b76163a79e6c59f5fe3d40133e8cdbed7ba50135ce365194358f4abe9df9231a124a5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-linux-x64.tar.gz\",\n            \"hash\": \"73a16e08402989f25ca780acc981c2ae3a41ef39b4bb6b6b4962053144b6eda7c175fdd5ee3c25bcd0c86a27d1a83d4f8b9b2f69f37d4e3972f5901a9e0600b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-osx-arm64.tar.gz\",\n            \"hash\": \"06fddde704006f92eb3be4bfc95efb9971d54c24038dd739a78ebc2af2e71ca97202350211b53f82f23a4e3ca37ae89d23fb56bf64b5d58d404e7a153c17ded1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-osx-x64.tar.gz\",\n            \"hash\": \"b9c4ecddbaa20aa707e7fd817895823d42211fc34b44146a2a994cbee1837ea0a2d3d5d5a84318039de0a0ed51af3249d11b2b31904e54b86114bceb05b31f0b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-win-arm64.zip\",\n            \"hash\": \"b247ea3eda27fd3f8d0b4b10507dc415d4aa30de8f370cb57e1fd66d2dd8c456c145339baef57e81716e32580e073952d4fb34426780fa3bb642e98db8d31654\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-win-x64.exe\",\n            \"hash\": \"ced75c39c5a2147525eebfd0977f6e7d774b7ea31d377937a6237dcf8b3f75c1b12b9b5137afcb1d1705bcafd9432ac0a60cb2f65fc1753d52d6eac080d0869e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-win-x64.zip\",\n            \"hash\": \"b5ca9e2c03a57f52ff6de957eb5e933da8d2eb946039d81ed439211c803fcc451b8e9822c3305e3d5caa05bcd77885c538768be0d0b1625291115856a3a100b3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-win-x86.exe\",\n            \"hash\": \"16f0226043d4ce4a47538f495cd77363273c7286b1be518b6b32ad0e2ca3cbe268b4cfb3fb43ed4a9d3a9176b1986a399fbaed7f6c432149f2d16c67105449d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-8.0.3-win-x86.zip\",\n            \"hash\": \"a85e76f85acd6c7cfe3007eb30042b1eeffecef947f9627c29ba78dbfe9466ca4151047b57e0ce718a62f03785c74fbffb46b245dbc40fabe17b6ca695e4dc64\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-composite-8.0.3-linux-arm.tar.gz\",\n            \"hash\": \"b71d040c9e7ab63df4e7b3c6d2396ea270a3cc3698676cee9c60cb869a355c013ec96830d2cd1315668d97fdc565d63015e024e1a377052f6fe12d5c9fb8c13e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-composite-8.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"e2903e3da3164d4e3d4e2f5d8202d537d79e852f382d07cd3c69cb478bdc9fcde70a482ad25002b2fba2645a2eeaa6317ca4facaacf6f49c9a0e25af41e2f740\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-composite-8.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"ccb308ec8f68ef4935f9141589f59047065802bdbcec2ca8d92b0a87c8c5138639200b71d0eac15c1edb6ee99fea408b84c1d9e61798184bff5d832f5bb4f9f2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-composite-8.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5e59fc334b82502153f24a82d03bd424d370f9a4362b745716ccd5a4741d853b284448f33730bdc55f7f04acd9942372a4781540b95316a90ce67c51ddb63449\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-composite-8.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"0b581d81d16b9ca9064bf784515ce392403a8eb9b092e488686f33eeaae17be9d1dc5ffd543cb1fdf566a123fef1f71dfa8e8c67eb8ee144a25aa4a75f6813a2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/aspnetcore-runtime-composite-8.0.3-linux-x64.tar.gz\",\n            \"hash\": \"d80104dc94afd909d424718702bdabf6d575cd24c4b6f68b83d55f6727c1c06ce5ca40a22bd7f3e7172dbea4ecaf501e44823db25cd8bc55e86768a854bd7b1a\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.3/dotnet-hosting-8.0.3-win.exe\",\n            \"hash\": \"3fcc362d95527207f249716bc459ae4dc1ac169cc43e1cadc35ced56df1b90c755f27988861b9a2a079e435b02cb316653ea8eb54a666d34b96c54f4fac028eb\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.3\",\n        \"version-display\": \"8.0.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.3/windowsdesktop-runtime-8.0.3-win-arm64.exe\",\n            \"hash\": \"97e5ad8ae1e6418476a8f972f5c1365aeda826e2cf883ee145a5c3a9090a747e6e53a1388d1962aeafbe35f779b3e970b1be02e625b4445d1b41af4b4400cc62\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.3/windowsdesktop-runtime-8.0.3-win-arm64.zip\",\n            \"hash\": \"5c0c483d941cad946683c2a901bd03f91802f7fb176876aa626dd5a14666e9a28c81946908fdf843105c632b4589fb98d04ec54fb6c03fba8570ac8b01d50eed\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.3/windowsdesktop-runtime-8.0.3-win-x64.exe\",\n            \"hash\": \"f4cf0300eb4e1750b75a9d973db2d100cd8fb244ef0c7bc5ab448dcc72091055c516d7fe6ea41215bdccec13fc08c5b3c444400c74b214af7f996e5780275f08\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.3/windowsdesktop-runtime-8.0.3-win-x64.zip\",\n            \"hash\": \"6ae793f57dc5c250399daa20c944e67d58b2348e3818f2f2ed2d78d665f6771b81d10aaf069d28867c1c8d14ac73df6d42ea884c981286458f0be29bbe384fc7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.3/windowsdesktop-runtime-8.0.3-win-x86.exe\",\n            \"hash\": \"b9b14552661f35b173c1539ffb422f31b13926dcd0d7aeba5283a467288f4db288f6afeede2fe3e57ed7d3ef3847dba7bd2725b8791396a0633dd14d957b1d34\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.3/windowsdesktop-runtime-8.0.3-win-x86.zip\",\n            \"hash\": \"186c83e41ea4859a612ff86bc2dc995722cdcbe04cd48343a7fe4b39927ad4f7852bfdcd468161f34da92943f20cba80ffccf9884aa7a14b7bfbdba26801bcf5\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-02-13\",\n      \"release-version\": \"8.0.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-21386\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21386\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-21404\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21404\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.2/8.0.2.md\",\n      \"runtime\": {\n        \"version\": \"8.0.2\",\n        \"version-display\": \"8.0.2\",\n        \"vs-version\": \"17.8.7, 17.9.0\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-linux-arm.tar.gz\",\n            \"hash\": \"ee03411c04ab240b6356a6fcbe66948d688a90afdade6dc2b0229d9ab3b2df851a66211a2bfb3a5c142e7256fcc04412b64bec8794c1e9117dc2f9babd01adf5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"12c5f49b7bd63d73cae57949e1520eaebc47732f559f68199ecd3bcca597f2da702352313a20aa100c667ede1d701dc6822f7a4eee9063d1c73d1f451ed832ac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"73244d5b97695060eab975d620deb9d438b8e299348483f29e9f1964b611886b5d4fc46900fba941ac5e952d8ef948645e6550ad74e3c802a4ac38213824fd6e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0b91b9bb9c8932a86ce4d84c6ecce623192ccf20b5243ce8aaaa837f92c6352b112e183efc9877fd883d072696be8b6ccb106430d88fdf044ae555d481d45319\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"a585682ccc94de1eece4fd61f01eac99bb735ebc59faee6358022a9fe383124c68ea3ea166eee26edf21349ddc289ed81ffa46f815a7731a6c5c0ba9f37b9aff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-linux-x64.tar.gz\",\n            \"hash\": \"f30f72f55b9e97e36107f920e932477183867726a963ea0d4d151f291981877ba253a7175614c60b386b6a37f9192d97d7402dafdad2529369f512698cb9d1dd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-osx-arm64.pkg\",\n            \"hash\": \"51925aca346e566ccb09ad581579e7a6c53ebed0bf572252275e0cd363836fbea0df89e75283e6afe2c335b61ec2bc21d86a093b5f6308750750741fe9436622\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-osx-arm64.tar.gz\",\n            \"hash\": \"c410f56283f0d51484d26755349a7b62364e2c54650c87dcee6fea0a370fa84b14b4ebc8c5e121e2b3ea4f0ac2880ebe40a43bcb02aa30ce360fd0dbc12fbfbb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-osx-x64.pkg\",\n            \"hash\": \"59a673c4de17f658d91c61a55ad0fb7ddd8014fdbda646930d874b1e4f1eeaf76025342a7084ba5058bc581d066af6468d3eabf8f87612a1d8b391888dd58a4a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-osx-x64.tar.gz\",\n            \"hash\": \"e8945057f5fdf55994675caeff07ff53ba96324edbfe148ea60f58c883548be59cd1d891552b55ed5a594c1cfa549bd783ce9e25b5467ae48ab3f97590f36003\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-win-arm64.exe\",\n            \"hash\": \"63a8456c1ba1296eceb9b2209ff9591a70e2f86f3a7f118f15a37f7cd211019c19bb3fe4d2be7fdef964185d40a87070326e2c7ad0c6933a5010a0ca73f572b7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-win-arm64.zip\",\n            \"hash\": \"5c1945bd6675afbfee837dff510d195676df579724014a6381911761cef8a1e4e6b190e7a96edb73b166b175b3d56f92ab412ea0cb544de7d1193bc564171987\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-win-x64.exe\",\n            \"hash\": \"69e15dbbc9a85eab07e25960a6dfc35f88224d9a501ab4f1e5e2ff9f41fc825863160a52e01d30aff3ba8a196f8f5ab7f5e9c975f2ff27f38ef85fad02b4d97e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-win-x64.zip\",\n            \"hash\": \"d2a927dafece90f200957eeb1dd00f86799bbe06dff01feda9bb5e63a12ebe8bc4c2a1861506f83a37179ce5d96aa59367f0425c4b68acc4112dccdda908b393\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-win-x86.exe\",\n            \"hash\": \"18d2e81e0ce1770a72dd8c8106811050792cfe2bec1480af7c710d1920857d2c1281ba08632da668fbe4829d24454595f994520307aa0b460a583bfde2eeef2c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.2/dotnet-runtime-8.0.2-win-x86.zip\",\n            \"hash\": \"60a0e8ded65593ad481da65c8cdff421838b60b7f007ccff4d00395684a2cb458b9ef0db55cb1486269c4545a633e51421691bf23db8877986570fe2de0cda90\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.201\",\n        \"version-display\": \"8.0.201\",\n        \"runtime-version\": \"8.0.2\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-arm.tar.gz\",\n            \"hash\": \"92760c4a4f3bf559daa41b8b87d7f10995aa5ae11783af053d854e8b9e8b042cf6e984bda40490aff051e4463f7cc8ed25d905090e5cee029c81afdb7f8b32c2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-arm64.tar.gz\",\n            \"hash\": \"37e230970cfeffdc3873e42595b79ecdf6bfe266a01ace6953725e69a2b64313ce144bf4d4f861130f61f680ead9b4d8a819dd5543c5470c37bbc13d88a78c80\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-musl-arm.tar.gz\",\n            \"hash\": \"687e3ad0ba66825f3dd5b83ca6decd8a09b16eafb5a8c58fdcb7118b306b699f870393a0cd3d163c98deaad2f38f2d7df4c96678537b1e49b73b421073e14aed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4a7c7dec45239a3ecbbb88dd4dc43b2ea66b016a974ebbbbe8960885d6118a0310679c2ced8f27ba5963311fedcce29ad31b0e43a20a01225778d8b6a1fe6e8c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-musl-x64.tar.gz\",\n            \"hash\": \"06483d787d1cc0633ed94175747a90fded1bbbb4744f82db003f691b291da112d47e27350e5051cb7f413b913a44611f21dfaa5556c798a95f64b5026e9b4923\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-x64.tar.gz\",\n            \"hash\": \"310cf54f595698435b533931b12f86d49f89d27243cf7c87a5b926e0c676b80e869aa58aaff17b5095536c432f377c67d92bf0ca8941b9d891d4b3879637d488\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-osx-arm64.pkg\",\n            \"hash\": \"0d70bca738988ea688104eb5eeb9417c6dcb607077a21220a1360bc54465f225c6c440b329d4932227c5c2b08796a305e18f97585377d36669fdd226c98ad18a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-osx-arm64.tar.gz\",\n            \"hash\": \"7457d5413dfee375d9e418707ebd726ff8ca9dbb7c34476e9fe33fd77962fbed5827bcbcc6d7978e918faf58a4e2470456b7383df6c0e47ed3b49d00b563611e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-osx-x64.pkg\",\n            \"hash\": \"e7c2e9c1a6ad7d9ebb4c6f994dab7684ab17d72e3faeac08e62bd90faa85a47d51e1bde73750c1f17fbf7e810b43a2b693ddb2a65c288e2f1d3b1a01a261d7da\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-osx-x64.tar.gz\",\n            \"hash\": \"254e578bae6150f194ec9e7d5cfe8a8cbaf048dedafd78afdb421cb0cae22364d21742eb2d11619a8330974739256d45a5d477483a1f82129acc3d12c6805767\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-arm64.exe\",\n            \"hash\": \"216e1485e95cc50cca23585169cd35df0fff55f54288c0b7f88c686f9cedfa3b16e9db0e9ae9c30ab725c676f38f4c1528182263545866312e5f431260e854f0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-arm64.zip\",\n            \"hash\": \"28f29033f2dec660846aab3684d9c20339cd63bd98f550786b24c3cd8515112042982e50bbc31192c8636859a9a2412f00cfe6d81c60b7d00a8a736c2d16bc06\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-x64.exe\",\n            \"hash\": \"788228ffc0e97105f12d32cc96645ae3f7111865e16b01a34f9bd7a574a7a7fca4d9b29eb44fb85074f467b8b01e75455a51ce24f2b73055e95dc55bae00247a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-x64.zip\",\n            \"hash\": \"73f27fc52d41ce652908d2b4133cb22a9e77691576fb16ebe5e283bee5fd7acbf5b70f54328a61da358cb04981aaef0d9ebb715285fbcee8666dd1151d7912a2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-x86.exe\",\n            \"hash\": \"5cb0afbd33ddce5ac6042348b59ee006897011c22349e887167fd8be20a84da817ee7c73c1efc94fcbd4528823793107e87fdedd07c7a8eed05a4b6a056c094a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-x86.zip\",\n            \"hash\": \"6f40d27ddae36b313f0a750052b2b8ac9de276a24eff7f136f261e14e5ccffa1b0c863aaea4ff79966e6114a4a2b79b32ce4efdcb24fd9e02b7d4566e239debe\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.201\",\n          \"version-display\": \"8.0.201\",\n          \"runtime-version\": \"8.0.2\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-arm.tar.gz\",\n              \"hash\": \"92760c4a4f3bf559daa41b8b87d7f10995aa5ae11783af053d854e8b9e8b042cf6e984bda40490aff051e4463f7cc8ed25d905090e5cee029c81afdb7f8b32c2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-arm64.tar.gz\",\n              \"hash\": \"37e230970cfeffdc3873e42595b79ecdf6bfe266a01ace6953725e69a2b64313ce144bf4d4f861130f61f680ead9b4d8a819dd5543c5470c37bbc13d88a78c80\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-musl-arm.tar.gz\",\n              \"hash\": \"687e3ad0ba66825f3dd5b83ca6decd8a09b16eafb5a8c58fdcb7118b306b699f870393a0cd3d163c98deaad2f38f2d7df4c96678537b1e49b73b421073e14aed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4a7c7dec45239a3ecbbb88dd4dc43b2ea66b016a974ebbbbe8960885d6118a0310679c2ced8f27ba5963311fedcce29ad31b0e43a20a01225778d8b6a1fe6e8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-musl-x64.tar.gz\",\n              \"hash\": \"06483d787d1cc0633ed94175747a90fded1bbbb4744f82db003f691b291da112d47e27350e5051cb7f413b913a44611f21dfaa5556c798a95f64b5026e9b4923\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-linux-x64.tar.gz\",\n              \"hash\": \"310cf54f595698435b533931b12f86d49f89d27243cf7c87a5b926e0c676b80e869aa58aaff17b5095536c432f377c67d92bf0ca8941b9d891d4b3879637d488\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-osx-arm64.pkg\",\n              \"hash\": \"0d70bca738988ea688104eb5eeb9417c6dcb607077a21220a1360bc54465f225c6c440b329d4932227c5c2b08796a305e18f97585377d36669fdd226c98ad18a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-osx-arm64.tar.gz\",\n              \"hash\": \"7457d5413dfee375d9e418707ebd726ff8ca9dbb7c34476e9fe33fd77962fbed5827bcbcc6d7978e918faf58a4e2470456b7383df6c0e47ed3b49d00b563611e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-osx-x64.pkg\",\n              \"hash\": \"e7c2e9c1a6ad7d9ebb4c6f994dab7684ab17d72e3faeac08e62bd90faa85a47d51e1bde73750c1f17fbf7e810b43a2b693ddb2a65c288e2f1d3b1a01a261d7da\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-osx-x64.tar.gz\",\n              \"hash\": \"254e578bae6150f194ec9e7d5cfe8a8cbaf048dedafd78afdb421cb0cae22364d21742eb2d11619a8330974739256d45a5d477483a1f82129acc3d12c6805767\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-arm64.exe\",\n              \"hash\": \"216e1485e95cc50cca23585169cd35df0fff55f54288c0b7f88c686f9cedfa3b16e9db0e9ae9c30ab725c676f38f4c1528182263545866312e5f431260e854f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-arm64.zip\",\n              \"hash\": \"28f29033f2dec660846aab3684d9c20339cd63bd98f550786b24c3cd8515112042982e50bbc31192c8636859a9a2412f00cfe6d81c60b7d00a8a736c2d16bc06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-x64.exe\",\n              \"hash\": \"788228ffc0e97105f12d32cc96645ae3f7111865e16b01a34f9bd7a574a7a7fca4d9b29eb44fb85074f467b8b01e75455a51ce24f2b73055e95dc55bae00247a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-x64.zip\",\n              \"hash\": \"73f27fc52d41ce652908d2b4133cb22a9e77691576fb16ebe5e283bee5fd7acbf5b70f54328a61da358cb04981aaef0d9ebb715285fbcee8666dd1151d7912a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-x86.exe\",\n              \"hash\": \"5cb0afbd33ddce5ac6042348b59ee006897011c22349e887167fd8be20a84da817ee7c73c1efc94fcbd4528823793107e87fdedd07c7a8eed05a4b6a056c094a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.201/dotnet-sdk-8.0.201-win-x86.zip\",\n              \"hash\": \"6f40d27ddae36b313f0a750052b2b8ac9de276a24eff7f136f261e14e5ccffa1b0c863aaea4ff79966e6114a4a2b79b32ce4efdcb24fd9e02b7d4566e239debe\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.200\",\n          \"version-display\": \"8.0.200\",\n          \"runtime-version\": \"8.0.2\",\n          \"vs-version\": \"17.9.0\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-linux-arm.tar.gz\",\n              \"hash\": \"a7359c6b714bea6a0e56a89465866e78e241a3587b916fbd8ce4c9ea89c3bf987ab95d8b12d64308257ae0213c724ebafb34e0ff244058172b58719cef0184d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-linux-arm64.tar.gz\",\n              \"hash\": \"ebb11b2dba2843175f55b6a78a29f6a22860eb1198e4562f206f5fd3c0cd1711bb5c8919967396ac6a0e354c43bd6d012e47fdbd85ad951c7ff0e3e87b0a0b19\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-linux-musl-arm.tar.gz\",\n              \"hash\": \"2995e624ddc1dfb81b37a2865e1cef9227c473c50cf48b4e6d47032dd3763b57a2421aee1bb221c7307b18d8c2cec1a0531dda61b0ea33dd2d7b8c3b33055943\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-linux-musl-arm64.tar.gz\",\n              \"hash\": \"a65149b1b6eca4ebca30bf0f537e0759bc84ae6bb6ab528dcbbc357a0ebeaac21dbaab320ee97a9cb107d6b43b2f042837d669cf6c45df7f5756cfb3e7beab21\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-linux-musl-x64.tar.gz\",\n              \"hash\": \"c13d33ae2ec4ffbc8269ab89bced97fa659eaf173b0ca146f06174d51990b74bcbfb13333c9162973754ef5c328e41a52643f61fc33474c5335b6bacb9bb5fda\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-linux-x64.tar.gz\",\n              \"hash\": \"58417468b72c89a66ad0bf54a0e4af13f8a3a37f2aae6e28ef762b9cdd783af0c13ad62ce185446d920b2709ec73c980d888fd73a413a8dce154ac15cb0056a3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-osx-arm64.pkg\",\n              \"hash\": \"f12f5c5e109ea597a9ed056b9acddfd2c42654970285d4f7aa800376ee7569b87be4bf842b962232ce1bf3b44cbc244d6e71b36639c9f1a03edfe79528e3eaab\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-osx-arm64.tar.gz\",\n              \"hash\": \"9d62beadd090f940d7dbada4120aa01f0e1cde14c4ccef570a3fbd6a44dc347ffa27baa44efdae46bba7307e647700329aea15f8b79f3e96df906a267b98b13e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-osx-x64.pkg\",\n              \"hash\": \"dccf82709f6cede1e87116b9caaee637eb65365e761c5fe78bb4f49d4f1abe883ca6fd6827556329488f23948d07ccad16dfeff83a39d96c4bf76d9d5ef78add\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-osx-x64.tar.gz\",\n              \"hash\": \"6d8d6ce6ff9c8c08451d9e7f1faf6ec934b8c9d6fea43a8b547873094c03ac8483cd6418429f89b64016d2c9fb3eeab2080b2f639f41d438c341ac0e0804a4bb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-win-arm64.exe\",\n              \"hash\": \"f684f9e27c71ce5b02666ec94956de2d774f9e6bc6f83611943316377931aed05f22ab54e4cb711a9a118def462795909017b8109488c2ed5ea47ea3912d3663\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-win-arm64.zip\",\n              \"hash\": \"bd43f6d3272ae9ffafcdc856f33bc10c9c0981e6de19fcfa32c3a674154cee8be68506fe08b3d8de97b83ab918b22981f7e370ff0fac7c227716972644ccf459\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-win-x64.exe\",\n              \"hash\": \"696d9b5b931114be12eab8cc81fd7403a5143ada38d8b0f2423e148d85309dc66602c86dfed6dce40f4ce1e0d141d01c774b3d34750f3d294673ca5b7c67649d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-win-x64.zip\",\n              \"hash\": \"b4129eaeccabc2f66d92827c4bd67535cbf42208648d99b9b7235d6ba67252b948bf9ad5e5fa8d34bc6907cdc7fe9bcbd60dcedbc75b81dd1b674c3af8cdaafe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-win-x86.exe\",\n              \"hash\": \"7feb39c58058f79392634059ca3aa381bd14522cd6013d8980a1651479899f8726c2069bc9b5596336133c27eb2672faa2d3d986254f96846430dcc1a388b56f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.200/dotnet-sdk-8.0.200-win-x86.zip\",\n              \"hash\": \"6dae83edd111736e8e4b930cbd260f7b4ac57f7379e35afba310af9a2c6630bf7aadee933209fed345434af3afee49bffa63cd81e8a0504ded759c679918f5ea\"\n            }\n          ]\n        },\n        {\n          \"version\": \"8.0.102\",\n          \"version-display\": \"8.0.102\",\n          \"runtime-version\": \"8.0.2\",\n          \"vs-version\": \"17.8.7\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-linux-arm.tar.gz\",\n              \"hash\": \"7bfa9cca1d2c8321036ea33c96327005e4bceb9bc8dabc0a35e28b24dbea5cd5cf78c6a8fea3b419c7da47e6ef953ed8b93d0b293da58b86ae737792900b51f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-linux-arm64.tar.gz\",\n              \"hash\": \"5e0b5762ab2f038de50859a2e18a3964ea6b754faa01d72f9824100546a271148908e84d666bb63d25e5d9a92038bc8a2f944d0342bbf8834cb5d5e936878c76\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-linux-musl-arm.tar.gz\",\n              \"hash\": \"1d336d717b0c127ebdfba422619f5bdcbf328826c6f8eb427fb9b80df3b5615028378d5fdd75bc216770de83c7ef34b1059ee4cbc2f4ab39cc504c5b0fa12236\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3e7581ed3fcfe601593ea8b75d45c4f4f3f0e1b02f6fdfad484612383c1fdc66d904be75d06e5e3b36085dd4eb85ed5ccd8ceb55129e019d74a3255858f05cdd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-linux-musl-x64.tar.gz\",\n              \"hash\": \"ea8862773e8eaf32ffc43646fe273266fffc7e0c56fa59541e6218ccf459b27cb93f4cb33bf895fff54723717cc64c4faf2527a307f46da587ee3e970908c8fa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-linux-x64.tar.gz\",\n              \"hash\": \"f5928f5b947441065f2f34b25ae8de1fbf7dbae2c0ba918bfb4224d2d08849c79cbdc1825c0d42a5822f12757f78efa58e295a8ee0f0e6fce39cc7c6ed977b8f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-osx-arm64.pkg\",\n              \"hash\": \"b7219a5cb1de7d16c4408aef20650bb2390fb08266cf342695aad440e8b283b3880528abc5f1d1cfbbe0a0808bad1f7405ca1efaf974e831ab92cf43a536230a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-osx-arm64.tar.gz\",\n              \"hash\": \"69d702b561ae7ddf4c47fe228c16472fd8d7065de1a4a206fc07c6906db49e7da25b21c06f0ef080f41658aeddc0f3c0a23ce1de7e65b830c308bfe13cf95fe8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-osx-x64.pkg\",\n              \"hash\": \"1b930dbab28ff363a20e255f0ec3c270f2fb680288b96f0cf6f59604d66b72e87af67218a561e1193b9ea197741c6c98735060cb030a096f3cfe86a8d6f46b9a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-osx-x64.tar.gz\",\n              \"hash\": \"963432c5c7d7d0b204a92248c61d1be227369c6bc1d47f977c913c416c61584451fd05d0e95a6fbe51f0e1958e1c1a71f2530f478dd036ed2b0e123944b3ce00\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-win-arm64.exe\",\n              \"hash\": \"b5eda65c8deb139fdcf8401c96fec2d0ddf361801672f2f64b6bf9ae142f52c6ca97e140b2475c8ebd0775739d70a8bc4ca5064821a863bf7b0a8cccb15f8274\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-win-arm64.zip\",\n              \"hash\": \"a865bfbe246acc024da5322f7602229d4621ea48aaf7ed499c346b3cc6ab78ff2fa3dd0a7c038f5bf900510d846c9e00f9c6ca2f3faeb750e61fec7689955ed1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-win-x64.exe\",\n              \"hash\": \"c627c09208a37d600fbf809f21fa9ec15905ef98c3aa3ee6e5163c45405dbeaf38988d8803308ae948d86aaf18b2f23e6be6734dfb3a18b682acd9eec7d8a7f3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-win-x64.zip\",\n              \"hash\": \"6feb4737d60f9e085140ccab2669f0f24199e36ab60c671ad47392bbd206abae4485c18abade08da487b74c997abde1016825e630e0df3c691dba24554b46627\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-win-x86.exe\",\n              \"hash\": \"2c6bf400ca0eb88fbbe71efcc3bb1e378cc1f523d45ef44560c8a42c09e056121f3502b053dcd9bd4ebc3d91a2c4e2f29eb27458bae874888cc13a0524acd837\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.102/dotnet-sdk-8.0.102-win-x86.zip\",\n              \"hash\": \"4b5f55d3bc8a57901f327a4fb6f724a22d79a9898e00159feb2652c9fe019039f4439336607d07ffec8465ec4bf1380a7256a0cbb50e990a74920412d263a21b\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.2\",\n        \"version-display\": \"8.0.2\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.24018.2\"\n        ],\n        \"vs-version\": \"17.8.7\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-linux-arm.tar.gz\",\n            \"hash\": \"427e60fb1ed636ed6c8b8be22b125019f0cf8cad3ab07bfc362d56a05f12206eaf245c8003b5a1c1b342c65d703f3f401982aaab92f86de5d73650f742a2fdba\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"9e5733a0d40705df17a1c96025783fd2544ad344ac98525f9d11947ea6ef632a23b0d2bf536314e4aeda8ae9c0f65b8f8feee184e1a1aabfda30059f59b1b9a6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"78af2bf6c79cd06449808e54ce66f9b67976773aefe826eb69834c66280cd3a612ef2c41594e90ff12d6223194a0935a2dd5b1342415b767175f7b23ddf4788d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1e92f8b880a30c71b1620dbd9600dd77e7bf44f175dc8d7d3579f814b419305d0a242c130d82528804ac0ca4b486df0959d7fde6bd6fc322a2bf63d6f815828d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"cf9eccbadaee5cbb7787acb30c2826ef2ace343a443034b2695ab362d867657d0c10218ec3d13706c85d03921599a463105b2ea58d684c911de6a97df3c93933\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-linux-x64.tar.gz\",\n            \"hash\": \"c8d4f9ad45cc97570ac607c0d14064da6c1215ef864afd73688ec7470af774f80504a937cbb5aadbb0083250122aae361770d2bca68f30ac7b62b4717bee6fca\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-osx-arm64.tar.gz\",\n            \"hash\": \"9e79556cf58f9d0b0f302a50ef9724122a9b18daba70e715b7334f9ed97a4983be0386e4132f5273d120f00d18f8af8a8ad7ea1ef0a82c610e268a33e76a30e4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-osx-x64.tar.gz\",\n            \"hash\": \"a7edf091509305d27275d5d7911c3c61a2546e0d3b5b0fe9fcb9e704daf3c550ea0a5ae659272a29b5e218d02f28b7d331ab0905e9459711624692f1589d7285\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-win-arm64.zip\",\n            \"hash\": \"f8d25d220eaa06e9e7a85aa347da9090684e8cb9dc286428bb7f44d19d8e028c93de89c3fc8677e2e1a6a0182248d79e013fd5fc53f7f44c4a7cb224bbbedb74\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-win-x64.exe\",\n            \"hash\": \"64f0a3f63ef5e80e7e61725639723c91368add464d08273444eb84d4e3c45ad841be24849553272b34e246180a1f497a61964da53cc42badc910ab48a6c2d1bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-win-x64.zip\",\n            \"hash\": \"ec88ab44fdc3116c19fcfcc08a24d9bb5c52d0f1825fd976c51a6f58fe6af9a79f1101eb3b0ea507e8b72b326dba6005c7ab10a8399993f801ea5a85acd09765\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-win-x86.exe\",\n            \"hash\": \"2b530d4afad2e7ab6bb4008c81fe07ab0b241e68cfb0c52db78e1e323b8d6a118adad55864f3b7768d27bc30190333e6559f3b9f86a37c7914bbc5acdb486d6e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-8.0.2-win-x86.zip\",\n            \"hash\": \"b04ece77d49a9261554ef17af4668472df2d756e831d42480091aa1710971793dfa24fc3a798f888b827a6f23abe717589ef918c1693eb70b4ee680aee6bbb77\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-composite-8.0.2-linux-arm.tar.gz\",\n            \"hash\": \"8c9204cb9094b5e8f4f7aaae87b6786d57d4c79fd24d550f6c74a6682c4df2adb4e948288498b276f2cf39d7c23b2d0099f8a3694f0357dcde05688ff4eb4329\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-composite-8.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"aece5cff73dd05d7e51fcc29e429572b7f55f9ce6a213b8ce26a8f4cc236a2d36cfd39af5dd59c6abcfa8b62f510a99f2351098c72782fe33feb332119ae0461\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-composite-8.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"6cc71a0c8a3e74c26fe3540e0f7c057bbff9ae98888d8239f057fd1dfdd8dd430ad2a3120d399e825187735487f89174687067bb237fd21f4cd03bb598884d08\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-composite-8.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0da9ab1fa9f08633d9277c1c49a792bb9cda481c31773f824342fbdea1d905926d09a190f37f455e66c44ecf9063cf1c9fefe6829886a5e526fe789457690803\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-composite-8.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"833a646b8569436623b6e2761051916585d659792254ce7da0db2b665e1682a15b765761584f369027987944657445fc6cd7eba727d24ff020842c1a0b562605\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/aspnetcore-runtime-composite-8.0.2-linux-x64.tar.gz\",\n            \"hash\": \"91a8173771b21e602c2365ff39db71e18a77d8251dedb70eb1ac84c180d26cfcb017a3e2f866a6f9c1dcaca0f8efae60c19f9a23b17794a3c34d2b8f5863f4e3\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.2/dotnet-hosting-8.0.2-win.exe\",\n            \"hash\": \"7edb966eb7c2cedb592feeb28d95e94de82c3a9cef4906a00d1d2efef73372839251d5b1ea39917ca37d48e22849bf78dbb5910830e8263ae9f818e08f9c1565\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.2\",\n        \"version-display\": \"8.0.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.2/windowsdesktop-runtime-8.0.2-win-arm64.exe\",\n            \"hash\": \"ded156143841a9256cf077527973ebd131e54d3413be5ab0286638e73f88e504fb553ca7dddb390ab917be652938d8be28caf82f8a454d78093791c02c8b9002\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.2/windowsdesktop-runtime-8.0.2-win-arm64.zip\",\n            \"hash\": \"dad3741d6af5314d731f7d3837754ed555c97e812a4daa55925b3491e9038ddbf1ef8c75e0179f4d554159b034380dd9a2f8ef011fb9847227aee889536e4232\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.2/windowsdesktop-runtime-8.0.2-win-x64.exe\",\n            \"hash\": \"62cd6be9ea5c397b607c75a3a9da332476b456482e20a3e786e964eae352965678c979792f3e0577d76205761b9c53da86c3aea6ae122934e4be7cf38648e950\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.2/windowsdesktop-runtime-8.0.2-win-x64.zip\",\n            \"hash\": \"0256add3c5bd08ccd1e0e56d69ad63ae3a3a93fd869420f9f251f2e7a77e63c7aa00f0381453f0b6bacff4f120687a4f135b738b338662f1816225e9952ae3b0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.2/windowsdesktop-runtime-8.0.2-win-x86.exe\",\n            \"hash\": \"3700642786b3f9a67218b6a834a8472c31d8e5ae6c2436c752e2ade37d9cb0ff808e35bb9fc3207ecbdb6e4e934c1dc77796d47ed0b2d228755f9876d4e0af0a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.2/windowsdesktop-runtime-8.0.2-win-x86.zip\",\n            \"hash\": \"4c5c2b7ec412e6fe021ec7b40cb09e66ac930ff6399e94f495efba6b052c7b7000d3185d3661afea689efc493cfff18c3024e3a6d242fcc77356ce32f1d0a78a\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-01-09\",\n      \"release-version\": \"8.0.1\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-0056\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-0056\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-0057\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-0057\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-21319\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21319\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.1/8.0.1.md\",\n      \"runtime\": {\n        \"version\": \"8.0.1\",\n        \"version-display\": \"8.0.1\",\n        \"vs-version\": \"17.8.3\",\n        \"vs-mac-version\": \"17.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-linux-arm.tar.gz\",\n            \"hash\": \"40cd226ee1b25a24eba395a6037d59ae6ead9c0ca625abf3e257564c9308f5e7fccfceab0058f3aa348698ee8be6d10031f23854d1876384476ed171772af299\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"29707882d4fce61eb4b20763473d548570f89f9d028bafb76b646911a5e7bf793dc75e33a6903622d7ba46e9eea0eac000d931cd2f45da118ef05fede6d4079b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"fd4b339c66ae1e2193c6ac09fb00f3d1ec1d70ce63767d88e26efd381f235b7153c7a4064998116cdfabaf47e8be13b5c2dacb39229d19a66e17eeeac9515d49\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3f54f8203af3851332d7c706a76af3faaf6b853f17941c4bc5d95f0589d28f115dc45a05dac9736c50e8ad1b5318e64d8262a187dfbe8cfdc610f6a1d8d64b7d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"a935d7b6c95e9852ba485faf5712214704eebfd5b8e1ab7b993d054f957ae0a551f57dc39a38de7064a1ab89bc1fe0bcaf908163daf9625174ec27aefd23c016\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-linux-x64.tar.gz\",\n            \"hash\": \"cbd03325280ff93cd0edab71c5564a50bb2423980f63d04602914db917c9c811a0068d848cab07d82e3260bff6684ad7cffacc2f449c06fc0b0aa8f845c399b6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-osx-arm64.pkg\",\n            \"hash\": \"ae9c838db2971ca014edf54e48677865a8f0ef14040243d651209aeee2714a9d74d1745479744aae91af2cf86dcaae2ef2d6014ecf77873c803cde8f9235e2bf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-osx-arm64.tar.gz\",\n            \"hash\": \"9d716e324c041ecd210ae65bcdd9bbf8c884d8fb92cda72d5bd13429581d47d7837d51f63c2994dfe17c5cda77de1c727308b590367d3181c91fa1f173c66b04\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-osx-x64.pkg\",\n            \"hash\": \"c8fb970e14f87179bfb4d0a865fda631b43f9b767a82909f0490fe94d922207c3e4bed0ee9264f2d66154ac89ff8569338fc5f040cf2ae6f31238d2787f61ebc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-osx-x64.tar.gz\",\n            \"hash\": \"8c88db692cd889d8f4d6a1f0a82a3eb0b3f49a4771318127c294822f20ee83a87668c6a54012ad87242936d4412b3f8adc0448b8d5ff623f0a6faa3cfc544309\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-win-arm64.exe\",\n            \"hash\": \"2477fea2f36c380943eda8174999f2b897322c0db607b17ee4df8e486536f8cbdfccd72cfcebb346b2320a58085558f28560431750b3b2786ecea2f601159b5a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-win-arm64.zip\",\n            \"hash\": \"1ac512be0760d22ef9a6a4d21ae3a07b8709cd265386cd8d04f714959975688e8961792a5f82f8dd5426218712c275a57eb70cdccaeab04cb222385ad9b14c18\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-win-x64.exe\",\n            \"hash\": \"46f2561197aa33f6fd33d40943f2c76d1b8d5c7ace39ba5555d9eda6cc4ac3f8cbae10b353cce9c7a7b4fdb30f2b6d1897461811880271e07555982100270347\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-win-x64.zip\",\n            \"hash\": \"21608914ccb6d872ce8a9a66ab37af1fed4e52e01f0b2a1f7fbea077f8d8cfc287d2d7a761049727d948c25dfc5bfbfa0aace8541d553a67ef8bd06fc215b803\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-win-x86.exe\",\n            \"hash\": \"cbcab96d341a3d49da8cdce87aa7c23ee2186c36408cf90b61636ab0417720b203a83e1699ccda34b2c4097019384e9add62b621d623528688896e441b04306a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.1/dotnet-runtime-8.0.1-win-x86.zip\",\n            \"hash\": \"8784ce84e0c51687bbbb839bd03c20f4526c6c29fbb7e52e465fcff4b31257bf2833e77ca529251f311406328d7b05433b9b9994a39bff74efe468bc4cd4d000\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.101\",\n        \"version-display\": \"8.0.101\",\n        \"runtime-version\": \"8.0.1\",\n        \"vs-version\": \"17.8.3\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-arm.tar.gz\",\n            \"hash\": \"59e0902fa190dee8da1644135e0477ced70fa02ecc12f79c8947743a77a160861ed5e44f8a4228815f853141856d4e3a1db1bd057759d3bff980a79b7d849689\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-arm64.tar.gz\",\n            \"hash\": \"56beedb8181b63efd319b028190a8a98842efd96da27c5e48e18c4d15ba1a5805610e8838f1904a19263abd51ff68df369973ed59dab879edc52f6e7f93517c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-musl-arm.tar.gz\",\n            \"hash\": \"764edb8803a68f074391714029800ef2309d212618790ba00506bba201a9655ea46e47d6017c89d78c9b1ef57e8e47352a63e8116a8b1f9fb169844745170172\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-musl-arm64.tar.gz\",\n            \"hash\": \"796d9fa4fda9d7d0f014820e20a8bad63052ba5e15dcb4fcb44ce33438a1aa4cd5e2ea0ad4a538b07946302b9649638762e3bfaa22a70318f0f17bc50c105193\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-musl-x64.tar.gz\",\n            \"hash\": \"95751235b774ed1050b721528495c1ba561c0bce99989a5fd6c0d0510b8b7d07a34ef186f347d16194b07d5ec4966ae8cb47aa7c1a65eebcea8a68fd90fb22e5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-x64.tar.gz\",\n            \"hash\": \"26df0151a3a59c4403b52ba0f0df61eaa904110d897be604f19dcaa27d50860c82296733329cb4a3cf20a2c2e518e8f5d5f36dfb7931bf714a45e46b11487c9a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-osx-arm64.pkg\",\n            \"hash\": \"7fc9c51a0b98654a82d088ebcaca925e3bebadc7d7548957791a644895cdfee191f8e59061d346c464cb16fe3721a499ccad3896a7265c78a92b70271af5b46e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-osx-arm64.tar.gz\",\n            \"hash\": \"a6048ca248aef3c430c8bdb65b534d5f58463a9d3c314fd70f5c7c4a9ac7eaabfba7786c40c76c73e5abc1a95ba957a682e73fb228e15bc9808adb47b4a1b291\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-osx-x64.pkg\",\n            \"hash\": \"e40b9fd4a5c814e1d44fb58a7a78284244f77797c0dd5a60a5dd478b4f3eddf8cf6b51b4b63aa3d4a24435bedaa5e6df944da19728732ae23ff645ed5caef2b5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-osx-x64.tar.gz\",\n            \"hash\": \"5c18dd1c0bb8199660dea5793eb2a568c63adbde492ca5080a8130e723a6260c6b9c6a055c299a3b8ba2497d6875959f86da8b9c9bf85e093bca2e08724d46a1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-arm64.exe\",\n            \"hash\": \"59c76d112728c318291fc48411dd489848839f3c3b67354458d3f80f4262cfee16e22b6fc17e774dd1d259eb411a1d95490909c9a8bbe79ed054d424eda3e371\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-arm64.zip\",\n            \"hash\": \"68c2333f74434138846f49301ae0ff94302c55aa278e2fad09a0e03fc28f3f3dfb90a68a5e2633bd5e119957044118fd92d1cd715d9a76c8b1843e050cd02894\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-x64.exe\",\n            \"hash\": \"5de43de4f468dbaeb1b0bca6cf4774daf2c4ef8594451f1674a9a4a65149335ee956abaad4492be636161ed3d3eb5072099aafd344f94b0b55e04acba255d246\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-x64.zip\",\n            \"hash\": \"e05953b32429ddaa60dc27fb5f5077d7523fc9f9706d30f42cd1855e2469eb003d5250587468062df4e331817059f2f46a44d5ed10ce2eb599710897e6659d83\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-x86.exe\",\n            \"hash\": \"3313919a647dbfa16afaec8a0a0292212fa7e7e612a895d5c0cd2df6a5bf09b2a47a213cdf3c6053637d5aa0e9d12d927dc28d20602768977a417edcef9bda05\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-x86.zip\",\n            \"hash\": \"df5248a25d351d866ac2d1ca6cdebf7b20ce5cc65aedc1a988166491d022829435daf67e07993ba71bfcb99f79fc19b8ef047e1d4a48ae9b6e8e31f3ea9a4107\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.101\",\n          \"version-display\": \"8.0.101\",\n          \"runtime-version\": \"8.0.1\",\n          \"vs-version\": \"17.8.3\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-arm.tar.gz\",\n              \"hash\": \"59e0902fa190dee8da1644135e0477ced70fa02ecc12f79c8947743a77a160861ed5e44f8a4228815f853141856d4e3a1db1bd057759d3bff980a79b7d849689\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-arm64.tar.gz\",\n              \"hash\": \"56beedb8181b63efd319b028190a8a98842efd96da27c5e48e18c4d15ba1a5805610e8838f1904a19263abd51ff68df369973ed59dab879edc52f6e7f93517c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-musl-arm.tar.gz\",\n              \"hash\": \"764edb8803a68f074391714029800ef2309d212618790ba00506bba201a9655ea46e47d6017c89d78c9b1ef57e8e47352a63e8116a8b1f9fb169844745170172\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-musl-arm64.tar.gz\",\n              \"hash\": \"796d9fa4fda9d7d0f014820e20a8bad63052ba5e15dcb4fcb44ce33438a1aa4cd5e2ea0ad4a538b07946302b9649638762e3bfaa22a70318f0f17bc50c105193\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-musl-x64.tar.gz\",\n              \"hash\": \"95751235b774ed1050b721528495c1ba561c0bce99989a5fd6c0d0510b8b7d07a34ef186f347d16194b07d5ec4966ae8cb47aa7c1a65eebcea8a68fd90fb22e5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-linux-x64.tar.gz\",\n              \"hash\": \"26df0151a3a59c4403b52ba0f0df61eaa904110d897be604f19dcaa27d50860c82296733329cb4a3cf20a2c2e518e8f5d5f36dfb7931bf714a45e46b11487c9a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-osx-arm64.pkg\",\n              \"hash\": \"7fc9c51a0b98654a82d088ebcaca925e3bebadc7d7548957791a644895cdfee191f8e59061d346c464cb16fe3721a499ccad3896a7265c78a92b70271af5b46e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-osx-arm64.tar.gz\",\n              \"hash\": \"a6048ca248aef3c430c8bdb65b534d5f58463a9d3c314fd70f5c7c4a9ac7eaabfba7786c40c76c73e5abc1a95ba957a682e73fb228e15bc9808adb47b4a1b291\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-osx-x64.pkg\",\n              \"hash\": \"e40b9fd4a5c814e1d44fb58a7a78284244f77797c0dd5a60a5dd478b4f3eddf8cf6b51b4b63aa3d4a24435bedaa5e6df944da19728732ae23ff645ed5caef2b5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-osx-x64.tar.gz\",\n              \"hash\": \"5c18dd1c0bb8199660dea5793eb2a568c63adbde492ca5080a8130e723a6260c6b9c6a055c299a3b8ba2497d6875959f86da8b9c9bf85e093bca2e08724d46a1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-arm64.exe\",\n              \"hash\": \"59c76d112728c318291fc48411dd489848839f3c3b67354458d3f80f4262cfee16e22b6fc17e774dd1d259eb411a1d95490909c9a8bbe79ed054d424eda3e371\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-arm64.zip\",\n              \"hash\": \"68c2333f74434138846f49301ae0ff94302c55aa278e2fad09a0e03fc28f3f3dfb90a68a5e2633bd5e119957044118fd92d1cd715d9a76c8b1843e050cd02894\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-x64.exe\",\n              \"hash\": \"5de43de4f468dbaeb1b0bca6cf4774daf2c4ef8594451f1674a9a4a65149335ee956abaad4492be636161ed3d3eb5072099aafd344f94b0b55e04acba255d246\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-x64.zip\",\n              \"hash\": \"e05953b32429ddaa60dc27fb5f5077d7523fc9f9706d30f42cd1855e2469eb003d5250587468062df4e331817059f2f46a44d5ed10ce2eb599710897e6659d83\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-x86.exe\",\n              \"hash\": \"3313919a647dbfa16afaec8a0a0292212fa7e7e612a895d5c0cd2df6a5bf09b2a47a213cdf3c6053637d5aa0e9d12d927dc28d20602768977a417edcef9bda05\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.101/dotnet-sdk-8.0.101-win-x86.zip\",\n              \"hash\": \"df5248a25d351d866ac2d1ca6cdebf7b20ce5cc65aedc1a988166491d022829435daf67e07993ba71bfcb99f79fc19b8ef047e1d4a48ae9b6e8e31f3ea9a4107\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.1\",\n        \"version-display\": \"8.0.1\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23334.1\"\n        ],\n        \"vs-version\": \"17.8.3\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-linux-arm.tar.gz\",\n            \"hash\": \"1865185af78ee742588187f4a3e98aa30e1bc5da0180512e5fb6e40274c68a45052bc06d357f8541b6fa2bc6d4855efe4b45f706a48230da8a4b4078ca2a21c1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"7d34b6986363e54dca53828ca7a4d658aae1b24f8f33c6a82f811e12ce6d56698462db746d9f19e4ad245cc8d130a19930be28e0a0c2da2c96fd74b1cb2d8192\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"3ad47bf2c6d6c24f641c1ef52552ab4a3dc093bd83ae430258f9285b108680813f894977745441b0d67662f5eba80f7b28e24b98f56306ec20a523ce74d93d49\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5e48a721b7e4c5b2046b4c64abc29bfe0a931fa1887dc00ce1e75a7eede6ccad339370029c061774a123526def6b4ade934334bf7178d57bcb87717fe8d228c7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"b749398f5ad059c9d51e3153c9f41ac23145aea38e83a736259c4206fdb920c245685a60a6d4bcf74ce41c70f751fd133219fb66b263018ae53025e129535063\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-linux-x64.tar.gz\",\n            \"hash\": \"64eecc0fc50f8c68205123355c43eae5ee29b7f6061a260315818960153fdf25f2bb25a51dd3f051e2362e228c032f2d0b9e7b6b476ac52141c17cfd8de0bfd2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-osx-arm64.tar.gz\",\n            \"hash\": \"ac12b846bd8c65035087b9a77cc44edbbbdcc5f8b8b1b9cf47bc282b3505d3f8670188e1dbffebdc26233f7a5c35ae6b2c1dc61b26d7ffc3233117436399e46d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-osx-x64.tar.gz\",\n            \"hash\": \"1a573a57d7eae9162976f915b065fcba8f4069e42f8aff4bb93b131fff16d9f54ce17d7a9392aeea27fd693c5d5932a94db8a8220ca34f481429824639a4819f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-win-arm64.zip\",\n            \"hash\": \"7dd3b5560944e333a2faad71692b55b0411746ce2a1c667db689e8d2dface32095da739ee37cc09037472ae52f5558e19ca909e252f2fcbb7b170f0be7557c01\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-win-x64.exe\",\n            \"hash\": \"32e436e24a9b6090070ece3d325131672dea9f0e95d7c570e83de2983c06523c40ebb26edecfaabc3d54e4c1ad5ec56111d322343b9ed1c4139c6e807795ac0c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-win-x64.zip\",\n            \"hash\": \"3e1556f5e6e681bd02f7409cdabf9ddafe9913c9e9341d5abca4e9a3250a7bd46f1de7f29cf26fae8ee2d60d5f86038aa7143748e80005d0356a57cf74308228\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-win-x86.exe\",\n            \"hash\": \"c05dda744d9718d3bd32f17426a2c9ce958c677fb585dcbd6749a45ae242f9e2f50d4bfaa50326925726cd554540f531f94e05ef985893f9a4dd4eff3bc10ee2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-8.0.1-win-x86.zip\",\n            \"hash\": \"d4279a810381a4b9fb6b54223955ef21caaabd2506ffddc5dc349e4af8af73dd47c3a2595d6af98fbe3761525c577ed81ad1050bb11f7db1a2d7ef785cceb366\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-composite-8.0.1-linux-arm.tar.gz\",\n            \"hash\": \"489d96231983b4c786133723d626659d907ae49a45765b7080aa40c522113a26cd48696bbddd09202074fd5547814c3bcef7b0bc3d88fb8c137ab7ad44851826\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-composite-8.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"7dc3087c154dc0b3cf000c2a525d71d4b344b1bf5444c87d0eafe04ffec352dc0b57fcab4f1a36722a4b438ba9c68027de79fb83e13f417b779ca5d66ff9611c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-composite-8.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"030a5cb3b80dc6422ad102e66cfd473eb96d07e6bf577849b4e15fb362f086516d08dc53335be9514ad712e6f46d204d437dff2196a1228796d096e9e67c180b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-composite-8.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"99fd7999641ca8574afe28e056d2235694b8f82aaa4e6306bfebc0000dd9f1f207991c72b482b5d02cb6691ecbba88ff0a63849acfd30482480a7a4b02296974\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-composite-8.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"c1d3f658dd3bc07dee5c5ce474c01f344c7a2aff2ee0ca9e5c28c89edc5e07bee82a7646a6b87aa999df8ffa06ce0a2fe7192c3dc2c0c72364c976419b6bcdc0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/aspnetcore-runtime-composite-8.0.1-linux-x64.tar.gz\",\n            \"hash\": \"8a09b2f0d5e3e04934e794127269a84b49cdeb9c5ef14b8c3b68abae6048a5beeb36acec617501dd00b83e1166e18ac59b99eda24f3c18210cb1bc228c74140f\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.1/dotnet-hosting-8.0.1-win.exe\",\n            \"hash\": \"ba6a820e6644f7bd6dc66e78777105698dd5470c1039ffcb35522a904c820a268e54334f2763bbc44283c52ae6b3c8ba030a016f725453c9db3a49adf79570df\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.1\",\n        \"version-display\": \"8.0.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.1/windowsdesktop-runtime-8.0.1-win-arm64.exe\",\n            \"hash\": \"5f9c1ee5ee2c4dfe80fd2d3a686dc33142f17a9bd37e6f60d63f95e7bbff15d65c1f2f30f4fb1f18f24ffcc3d7feb6d95953d7e7314945a8989df8b86d069c7d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.1/windowsdesktop-runtime-8.0.1-win-arm64.zip\",\n            \"hash\": \"adf3dbb60e151fb399d20a8ee9179505eae51a1cf50bc38c1e934f3c3ddb96d139235d8b2c72269e08816beb43a065e905bead7fd713c995a967dde12db97511\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.1/windowsdesktop-runtime-8.0.1-win-x64.exe\",\n            \"hash\": \"233d98b280eb4353fff7e45fa45e0de510403853e881c0bdcd3eb2466df4930795a62fec14cb30d05e00bff37f17b4d6c9b95511ca71475b739d6d9be9d2ebab\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.1/windowsdesktop-runtime-8.0.1-win-x64.zip\",\n            \"hash\": \"f0922bcd8d91448a765eba9928b4a34bfbe7de441f9b76d90e97119b69065892e6f4d7d31342f20bbb4cacca84e7b03b1c0dbb721339c6ae5d23085aae226170\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.1/windowsdesktop-runtime-8.0.1-win-x86.exe\",\n            \"hash\": \"1d2cdb417ff9d72e4766255a1d7568bc16348120c72db58a020f35917b47a0f39dd74e185371668419a9f8a4fc2e9aad4073b5dcb273d010fbf9b16a718d018d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.1/windowsdesktop-runtime-8.0.1-win-x86.zip\",\n            \"hash\": \"3b579856c14ecdbea256f044dd9158461e0042aec15260d5bc10328179555e4e98dae0139cf5922a7970f36fda516c2d980715c087429d1de00e0265b9e9941e\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-11-14\",\n      \"release-version\": \"8.0.0\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-36049\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36049\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36558\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36558\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36038\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36038\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/8.0.0/8.0.0.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0\",\n        \"version-display\": \"8.0.0\",\n        \"vs-version\": \"17.8\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-linux-arm.tar.gz\",\n            \"hash\": \"2dd820ae2341b00844430bdfa3d45631b080d69aa2e55c89ab034a46e8712c542428267e10a5077bca607aa0c58e1efd42422cba4d76c2eaabf2ead87874ce24\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"bb39fed4cff3a1a0a4e5084a517feeacb571700b8114b83b0b040f63f279d32eb9195d9b94cd60f8aa969b84adaad51694a2e26255177a30f40f50f634d29c21\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"3947064cdcf0c3417e9809f7595707bdc537c6280de82e0df170b15abc6be6705cb180b243c23dc373a76698e9e9f434a89975ae1734abad7f39607ef83e772c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a8bb01b3e3dce7cd5a5ddcb8af13f3bc9b3be1cd3d60ee728b845c88cb12005e5e8c5d54a51391fc27de4023080ce9b231c1c48e858b3f1b551a9e1936d59f27\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"bc9278786a728bcc404dd014f7823334312c0db6d949df104bb31e775f53b5684bba00611abb58873b8894d20489d5145fb351903b68dece92a7dbad14c3b9f2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-linux-x64.tar.gz\",\n            \"hash\": \"16a93af328bcf61775875f4007c23081e2cb7aa8e2fba724aea6a61bc7ecf7466cc368121b08b58ac3b72f68cb67801c68c6505591eb35f18461db856bb08b37\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-osx-arm64.pkg\",\n            \"hash\": \"1703343cab87195e77161620bed0c9a595944809eadbd16cca48cc369957437510d7a62638fe541cbe13d0e8eadc026b13e9b1b0e148e098e841e078abd84a34\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-osx-arm64.tar.gz\",\n            \"hash\": \"5464e6ca9afa89680b71042e200e99c43855a216cfef64ed2cc0b44efe547f7f69e57559ecdc47404e2a8c1c2b0f7d00ebcfc8b949750f0af168eb575e7dc092\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-osx-x64.pkg\",\n            \"hash\": \"d3a33632906428975cc155a8be4029c365d695a61f8eee3633ba231d1d91be4538fc77a5604a0a21c6bb641b6f2ee271fe8b60e5f27620e7102138676287a451\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-osx-x64.tar.gz\",\n            \"hash\": \"a469d4fcbd756861045a2f639f42e7f7296fea3c5cb5bfbe75a9deefae2c5fa1fd658b35fe378e2a4afefcc37d8d874908833728481cc4b18fbd9f6f204d684d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-win-arm64.exe\",\n            \"hash\": \"0db66495e3d84ee3e731de88c5e725cc421fc199022d0909ce88b1763f334db3eb4f593e1c0c16be41651ea7879c79f982b3e3cce6018a4c5f367e384668f7b5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-win-arm64.zip\",\n            \"hash\": \"ec731685410b6c66fc7d493f74607ca0eb51444299934b9e21eefef43b5b46263a6cf05f7b9c499451202134e9f2ccbee6d5b54d2b884b3ea9b8fa31c8b816af\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-win-x64.exe\",\n            \"hash\": \"3a88fd2da5d2aee4a28e6ae8269560768c5ec53d77657e64ca95ebe2bdae4b2ad55cfd61e1ff17cbcebc6a6bdce95db3197655d69d66a45c207cf9c674244ced\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-win-x64.zip\",\n            \"hash\": \"b786869739c87ea286ee494fbf72cc92cf0cd91c1f22ede0133a523aa150740dd89cdca6a1530bd1f39d24db4f34939e17e2b0dce3d7efd06e4eced30b530643\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-win-x86.exe\",\n            \"hash\": \"9b75af3897299c712da59dff0b6bee80399362513e81cc509e9e2fe708a348786f7d56112878e1ebf4cca52d2ba152a484f4697a76b1e525512abce2e1c5278e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0/dotnet-runtime-8.0.0-win-x86.zip\",\n            \"hash\": \"d32872db44dad127341e6adefb3e24ff879d0e598168c010cb6341bd5daef49f60aecfe4d50371be9cb40978cc54a75b1924dbd6ff3879810877908964c31e65\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100\",\n        \"version-display\": \"8.0.100\",\n        \"runtime-version\": \"8.0.0\",\n        \"vs-version\": \"17.8.0\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-arm.tar.gz\",\n            \"hash\": \"bcc741518c7ee442e74ee4160f02f35c06e65b6d53265b2b0cfb6502d07e08fc397b7c3f4aecfc59dd173b875f7ceb6dc105fd3d1715c31216fabee068162d5e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-arm64.tar.gz\",\n            \"hash\": \"3296d2bc15cc433a0ca13c3da83b93a4e1ba00d4f9f626f5addc60e7e398a7acefa7d3df65273f3d0825df9786e029c89457aea1485507b98a4df2a1193cd765\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-musl-arm.tar.gz\",\n            \"hash\": \"a8c08c4eaaa1ade3a1521750c62af92ab8fe91bfdd0f4767f8c0469ebfef091f3a68a443d4566bbfe53c49866d72a104c7aea309cabb36148f9aef9cb950ea64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1d8e54ab8d2b7b83972c1ecd7a23073bf83d39c258e993e54ab91a383ad2aa44276dfc28938f7b162cf79010187005e42a665933dff021ffa5e5d9cfadb5e2b6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-musl-x64.tar.gz\",\n            \"hash\": \"a904491cf1fe27603cfc21aa234b2f4da7517929fa9dad0eaa2233d010ef1e890339ca4b8e3c4c0d463f3015d7020a0c37ece97319b061cd92a5fc51cd8a7f4c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-x64.tar.gz\",\n            \"hash\": \"13905ea20191e70baeba50b0e9bbe5f752a7c34587878ee104744f9fb453bfe439994d38969722bdae7f60ee047d75dda8636f3ab62659450e9cd4024f38b2a5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-osx-arm64.pkg\",\n            \"hash\": \"e19c4e309e62d267d68cbd1de4135e9a3664e6b9c2851943250de68b5fa6142c9a7e154b274de781b570dace97052e0015e91cb0104ede65ad62090fcaf92425\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-osx-arm64.tar.gz\",\n            \"hash\": \"11a307ec17fa11fd8f133d697cd414c12b1d613ef9ec05db813630b10a00cb2ee0f703580688bc59b60c911e97a27eef8ae0d89fc2298c535e0bb15b5b997bc5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-osx-x64.pkg\",\n            \"hash\": \"5b63eb59e1a90777fcf80a6c0963d0fc82586138a2fcb902cc5129517e6f6a94f9cf4ed68bb247d05f5fa92f5c143505f6547665ebd26f084860d672dc6dd1ce\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-osx-x64.tar.gz\",\n            \"hash\": \"8ab6a1408e630a7f689414ad062191558c363f8fb8a98b6571ed99d386c07951655c6a499f8b8a4b128d4f566b7a67b6e8be26cda751d9286851b603096d0da2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-arm64.exe\",\n            \"hash\": \"d1231fe14a0ed93a62f3465397c191fa3f49382a5657ca3b5f5a2f592087495eb1d03a962e36b47a4641c596f40f7371d3e530fd3ab94e9dfa705cabbbd288c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-arm64.zip\",\n            \"hash\": \"c888b046b71027dbdce116d85e3e2624df4f4073071d73032bafbed5afcf15843f9112518f360a11c0491c5802cf93a62cf217858ae3cce84d797e89eb75d1cd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-x64.exe\",\n            \"hash\": \"248acec95b381e5302255310fb9396267fd74a4a2dc2c3a5989031969cb31f8270cbd14bda1bc0352ac90f8138bddad1a58e4af1e56cc4a1613b1cf2854b518e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-x64.zip\",\n            \"hash\": \"69ee73c56c78c94c186c0fd1b06ce1a7325979f7680857dc1a05d516feb9f0ffe990c2c0441caed1de98a0d0ae3923cc3e04525f91d96306d611e481a24f9fb4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-x86.exe\",\n            \"hash\": \"6ba1d4b2223f4d81055218d1b31fbb3839daf95ac5a063618073cf55badfd7614f1a672552cdf82c1d5aaadd27b0e68497d8e6317ec925daabe20aa68776c9d8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-x86.zip\",\n            \"hash\": \"06ec86cdd68a6320bff9a22b2d2ece2f1f33a99f2c521d239451261d56b39071471dda2cccdf91ed5e96a935c7210da55db5e4c76e863cb1b744138bf7378f52\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100\",\n          \"version-display\": \"8.0.100\",\n          \"runtime-version\": \"8.0.0\",\n          \"vs-version\": \"17.8.0\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-arm.tar.gz\",\n              \"hash\": \"bcc741518c7ee442e74ee4160f02f35c06e65b6d53265b2b0cfb6502d07e08fc397b7c3f4aecfc59dd173b875f7ceb6dc105fd3d1715c31216fabee068162d5e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-arm64.tar.gz\",\n              \"hash\": \"3296d2bc15cc433a0ca13c3da83b93a4e1ba00d4f9f626f5addc60e7e398a7acefa7d3df65273f3d0825df9786e029c89457aea1485507b98a4df2a1193cd765\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-musl-arm.tar.gz\",\n              \"hash\": \"a8c08c4eaaa1ade3a1521750c62af92ab8fe91bfdd0f4767f8c0469ebfef091f3a68a443d4566bbfe53c49866d72a104c7aea309cabb36148f9aef9cb950ea64\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1d8e54ab8d2b7b83972c1ecd7a23073bf83d39c258e993e54ab91a383ad2aa44276dfc28938f7b162cf79010187005e42a665933dff021ffa5e5d9cfadb5e2b6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-musl-x64.tar.gz\",\n              \"hash\": \"a904491cf1fe27603cfc21aa234b2f4da7517929fa9dad0eaa2233d010ef1e890339ca4b8e3c4c0d463f3015d7020a0c37ece97319b061cd92a5fc51cd8a7f4c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-x64.tar.gz\",\n              \"hash\": \"13905ea20191e70baeba50b0e9bbe5f752a7c34587878ee104744f9fb453bfe439994d38969722bdae7f60ee047d75dda8636f3ab62659450e9cd4024f38b2a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-osx-arm64.pkg\",\n              \"hash\": \"e19c4e309e62d267d68cbd1de4135e9a3664e6b9c2851943250de68b5fa6142c9a7e154b274de781b570dace97052e0015e91cb0104ede65ad62090fcaf92425\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-osx-arm64.tar.gz\",\n              \"hash\": \"11a307ec17fa11fd8f133d697cd414c12b1d613ef9ec05db813630b10a00cb2ee0f703580688bc59b60c911e97a27eef8ae0d89fc2298c535e0bb15b5b997bc5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-osx-x64.pkg\",\n              \"hash\": \"5b63eb59e1a90777fcf80a6c0963d0fc82586138a2fcb902cc5129517e6f6a94f9cf4ed68bb247d05f5fa92f5c143505f6547665ebd26f084860d672dc6dd1ce\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-osx-x64.tar.gz\",\n              \"hash\": \"8ab6a1408e630a7f689414ad062191558c363f8fb8a98b6571ed99d386c07951655c6a499f8b8a4b128d4f566b7a67b6e8be26cda751d9286851b603096d0da2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-arm64.exe\",\n              \"hash\": \"d1231fe14a0ed93a62f3465397c191fa3f49382a5657ca3b5f5a2f592087495eb1d03a962e36b47a4641c596f40f7371d3e530fd3ab94e9dfa705cabbbd288c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-arm64.zip\",\n              \"hash\": \"c888b046b71027dbdce116d85e3e2624df4f4073071d73032bafbed5afcf15843f9112518f360a11c0491c5802cf93a62cf217858ae3cce84d797e89eb75d1cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-x64.exe\",\n              \"hash\": \"248acec95b381e5302255310fb9396267fd74a4a2dc2c3a5989031969cb31f8270cbd14bda1bc0352ac90f8138bddad1a58e4af1e56cc4a1613b1cf2854b518e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-x64.zip\",\n              \"hash\": \"69ee73c56c78c94c186c0fd1b06ce1a7325979f7680857dc1a05d516feb9f0ffe990c2c0441caed1de98a0d0ae3923cc3e04525f91d96306d611e481a24f9fb4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-x86.exe\",\n              \"hash\": \"6ba1d4b2223f4d81055218d1b31fbb3839daf95ac5a063618073cf55badfd7614f1a672552cdf82c1d5aaadd27b0e68497d8e6317ec925daabe20aa68776c9d8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-win-x86.zip\",\n              \"hash\": \"06ec86cdd68a6320bff9a22b2d2ece2f1f33a99f2c521d239451261d56b39071471dda2cccdf91ed5e96a935c7210da55db5e4c76e863cb1b744138bf7378f52\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0\",\n        \"version-display\": \"8.0.0\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23305.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-linux-arm.tar.gz\",\n            \"hash\": \"5fd4f650217c8531bf5fba9b851462e52f3a04a71c4c1d7b48be6e22970cb06981d1b4fbbfdf2c8aa3662c9921a3c3d91d61ab19debcb5df046e87df1849abd6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"f9e1ae263dd944c70ea1818a3a44bb62aa5bfb65dafa463dc9f9a33bc8ad1c60b4e7a364a7414cc00a01ff707b5e88fc52c520edf0eb357ed1ddf4a8fcd8eae9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"16254138c90ceb74becd25b0a4bc000838ee5e480c987b68300244d2916a97fb2adb4c715935f9a8547efd30bbf499ab68dfdcb79cfbeab77c46f1b575cca2e9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9ac1b612e126c7c4a9eb2b3343c93875268f3a4d78cf4c6ece9e718b76b60f13e96efb9488e7d83cfb128ae766d8bf05e764d6a11c3a315ea1820a011afd585f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"12723b685b86d3d2f69692781f731fe2c56bfc4d34489b9c901775e78f8f96edb78b97b9234b44b14aa2f578c1a054e425ebe8ced42f59e82c39c90c341fc1d9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-linux-x64.tar.gz\",\n            \"hash\": \"c0aa3a926d6c2bc0d4cc14f5d7677a4592111bf3ebefa65c5273c4b979a6e2b5d58305a5aaf4ac78f593b46605ec02f40b610dcbff070b1d8cf8ddc656cac7dc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-osx-arm64.tar.gz\",\n            \"hash\": \"0edb1bd0655d7898d9a02f7127e9a93af7e92e3ea324a7d77e9634b5dfa0851184d784f2573612b18bc37cb0510f93d1b0eaa2ae56b6ca99a16f1edafe6cf8fe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-osx-x64.tar.gz\",\n            \"hash\": \"1b19d90b631ebd74f6e1f4343ecf54f6f04bc8a2aceebbca66de57d41d440a66c7f56565043c1aaeb77b586dc349914d7d30b8c066197840430d543c24c87539\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-win-arm64.zip\",\n            \"hash\": \"3899e2148fd8b58059e7f18433038d09f8c35978595f536919e2473134c73d77d08ea62b3727dd11aaa0c807dc7393f40c723d5f6dafa26b87a0243818c57e50\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-win-x64.exe\",\n            \"hash\": \"8bae0bc5cb46486348c45d3df3a9caaf8b5413ae324483f5a90d0482d70ea4224222abee124524523ff7bb44c4c0629b9242dbf24a21736ce275ec0c2549d957\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-win-x64.zip\",\n            \"hash\": \"ca3f5d578fecf51e2cee30ceb9a88ca1c07ac476d742ef466ba5858b63e0d05cb840d6d22b83d916c49f9fe51c91b68ea385b7a8d53b292d0c9e78e7d671ae91\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-win-x86.exe\",\n            \"hash\": \"9cf9f98a7737438c382c90092f25d706927b8ebd0079900c6d420282e6a2ea353a9856d427ef9a2ec675fffcc2b84f21bd02491c7c6b40f6101a58a491e1b478\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-8.0.0-win-x86.zip\",\n            \"hash\": \"c1fb064e0bf6c689a5aca5c944ab500232730fe7549ca9cca88f616fad9f5604c5a4e67424c5e11bb31fa42c00fc3524c4ebc324d5a287d0c605e9e06d6c07e2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-composite-8.0.0-linux-arm.tar.gz\",\n            \"hash\": \"1bc58d92bcac8e383daa59436677890e061be4c450f30d1744e2f2b161de04ed4d09a54adbe9f22f820ce09773a525b575730d96334043bd17559a462d407063\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-composite-8.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"8e3d2fbb491a97b31510d5c69890f4b37520e2141fbef1b9bd8ab0617f08d506246c8c411c05369b1a747e56440027953aae7eb015ae41183fa092e7d87a366a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-composite-8.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"9cac51a4529bae44245890cfa20efae2a38be8dbbf01e8df8dd1aa409d4f44ec1329a0ecda6142fe1f306c8e31be05e252c603a96add778899f936de651fdf20\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-composite-8.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"aa87583671636b6cca1cee7d48966d247f7dbfad75757c6ded611e6acd3ef440c30e691fd388aa96e920b9af07a5f9b6b702a0b2b528cd29913a84ac79b55d58\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-composite-8.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"5caf1e043d9624e036bf645b0449ac8d87a1861a246c5597ea4485432d2962ea8799d98d73bb5e5c3d1d3b19acb2817502af5a8593a7632d75cc6bfb19f623df\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/aspnetcore-runtime-composite-8.0.0-linux-x64.tar.gz\",\n            \"hash\": \"b7f2cf8cf6496a438b03e6e945d776a763c388127b98b7cc20bb86c0e9570c40890e0397f55dea6d8f9aabfbec88dae3800eb2b87462a765a54ecdd7d68c75a3\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0/dotnet-hosting-8.0.0-win.exe\",\n            \"hash\": \"664bac19fdbd32eeb4adf4513034bb8066b9e7ee2c8c5dd8c21a54ab2e6bf99f86c52f5709299c675cc8ed9ef13cd0a0e188c8094f94a4b4e7b4e5cd368c0e9e\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0\",\n        \"version-display\": \"8.0.0\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0/windowsdesktop-runtime-8.0.0-win-arm64.exe\",\n            \"hash\": \"f9b91928493dee45883b0cc6e13494a91b3a22dfbd57223236db0139584fc81fdf843249888efa9de157f158616bccb0de6081121f1787d3bf7ec80852c61d9d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0/windowsdesktop-runtime-8.0.0-win-arm64.zip\",\n            \"hash\": \"bdcb6b86338c17052f21a25c3b5152beef96c0d09b6a7252c184c79a5e5c49c6e005510882193b5d42a06dae81270ec6c1d432e687887275396b9c365344dbc5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0/windowsdesktop-runtime-8.0.0-win-x64.exe\",\n            \"hash\": \"d2e92f8bdb2b840c3fee170f2ca3baa3237a6a56c7b86589f7e4d7a0d51d2605bafe045adbd14a0c43e946a8a895a621748418d1a2cb9c44370eafd1d1a8ffa9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0/windowsdesktop-runtime-8.0.0-win-x64.zip\",\n            \"hash\": \"6464817e61bf04e88e535537afeca377cf78a46f0a2acce4accc701e251e2139c61f48043e81c04ef59ec47c9420274222466060fae37ba806e88e64485e8872\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0/windowsdesktop-runtime-8.0.0-win-x86.exe\",\n            \"hash\": \"711134538d6e7dc827c99914e7ae74cb2a0c41ce2b1b4fd2b6323032c05db31737a4370f613621bc04787e7ab4b6d377e62dd777c2b51db6636afd751e874ae4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0/windowsdesktop-runtime-8.0.0-win-x86.zip\",\n            \"hash\": \"2fb749cb6dd37a2b5e8789907fcc15711825cb7342cb1c4480003d7b76f3abe1dab543001189ac0d62626db143241336759cb1ebd53fe79cc771f348ef9b54fd\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-10-10\",\n      \"release-version\": \"8.0.0-rc.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-36435\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36435\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-38171\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-38171\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-44487\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-44487\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/preview/8.0.0-rc.2.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0-rc.2.23479.6\",\n        \"version-display\": \"8.0.0-rc.2\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-linux-arm.tar.gz\",\n            \"hash\": \"d854d9a5ff29ebdc1200850c87ae448ba1f4ea05a8d8033cb8ef20ed7070d6acea8fb5b9a96ffd3a8449c9fa9bfca620e5ee0d2ebf1b1c173eef75db6eaad21c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-linux-arm64.tar.gz\",\n            \"hash\": \"7f92e7d5f51d1623e2ebccb79da1f047c4a125b565cedb0a4be3d9deb2010c1f8c03276a926eb9a7866bc1ef9c6585724c41d268e9d2fda8012613aa6fa4f95d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"16989c3d84f0f2be8b1852f7023a408419126018b8cd441e28c67c5eadb953a85ccd8df8ca9b7b89c67925bd1f11ca8ee7d9ef40e7e4ff7c7ca21e4fbe675536\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bc9391771681719d7d44ac9357a877cb20a2d96e7cf13c05b7e9b1fc6905f6d9731202929cc42e5c8ad96d1edf22efd0e69ed62d63c889b554df56582dfd1918\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"22e77f222b2d9015352f97826c046cac81f33a3bc945837143b799895a55efffb536aec5040fdce95abcaddc2e4fcdc6d818b41b6b3c224d4902c6192cf9190c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-linux-x64.tar.gz\",\n            \"hash\": \"f1565aa5a5a98b3ab2cd92376b0b1bcf4420b6377047bdf2324a7dd86b82f5b4776a2795395bb777a3f7d6f6f9b8dc89721c2fcf93b4c7532b42b263f9fdc828\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-osx-arm64.pkg\",\n            \"hash\": \"5ed707af5ecd68a51f7e8ff34993b105f0331848da4693c7925812e89873f72efde4620df40e609277355dfb1cdeaf8c8a877465f089a3b38363fabcdebae686\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-osx-arm64.tar.gz\",\n            \"hash\": \"8c9b86c1dc4fc0c6d5086d3a1f5fd28b38e2d94746a1529f3d9783e7240e067fd830098be81052629253c1548b43f4937cea92370212a556448320e294ef887e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-osx-x64.pkg\",\n            \"hash\": \"110ccc186e1053260220c50f8f0813b46c55381712d6b46c96f1763bced4be67c20c69df5b0b2d4fdb37e40c76f27b6b1f554808a9b831cec8ef2723896a0896\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-osx-x64.tar.gz\",\n            \"hash\": \"50ab2233f01534784759439752312749731f5e3a46947da40052186bd87459fb19162c0354fb9c44feb8e3693b6dcd6d791782f63c86add4179c6ed6f6c4ff28\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-win-arm64.exe\",\n            \"hash\": \"b45629e4fabd0af1d2f327b6cd70b8da9e4675f9fe271fe7d1f3717f24f63b9874a4823a5328df20b6a46d65196792412d89d0c46e59cf0fae9b32f517eb080d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-win-arm64.zip\",\n            \"hash\": \"2bb9f04c0f07c78caaba5300708c1ded053aeacab6de568406619baa56fe999a85a9e977f1d83490d3773d80af0fe348969016bb811d95989bb2783c908f12c7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-win-x64.exe\",\n            \"hash\": \"9c5633a2903f6333b9d9f122da5cb6de78c136d2285a3e71551cd845035b2fc81cd4e97c17a713182c074869c8a04aa3ff8a7a6f026d33a8e0356984d0a132f5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-win-x64.zip\",\n            \"hash\": \"2ae92847f920a8f039ab189c637a3af28e21e20ee59e95117f3cffb3c77dbada6654e0629168d6d13f60d4cc59a24dd05f233bf460c26892ee2e53a58eb9fc67\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-win-x86.exe\",\n            \"hash\": \"69602bce7a963c98e99964e7f4da16fe54d84230ea31f744622adf52174ed156ebce3a26abb848ef17e8517563aa18dd37b21fe65cb8f5ddad4c991759e0739d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.2.23479.6/dotnet-runtime-8.0.0-rc.2.23479.6-win-x86.zip\",\n            \"hash\": \"08a6b580b6e025293f2a5c6452b4e72723043cb42e352d72cb2b77c86d316f82c0b30a779bac009bc412b1ba869012387d6abde4be6f782dcc15790b7c8a89d3\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100-rc.2.23502.2\",\n        \"version-display\": \"8.0.100-rc.2\",\n        \"runtime-version\": \"8.0.0-rc.2.23479.6\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.8 latest Preview)\",\n        \"vs-mac-support\": \"Visual Studio for Mac 2022 (v17.6.1)\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-arm.tar.gz\",\n            \"hash\": \"821b0513bcb60e5f645332959a6182c952e92c793c19abfae538fb602f922f47dcaa70da4e1b3a37713f9a9346b091cdd67754d17d078bdfd680080d9599b572\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-arm64.tar.gz\",\n            \"hash\": \"b07059a8b6b5586134a63a20c952f4f029372791d53e4a3a1363d39b8beb62b4c7dbc23c7de202397310c79aaaa110d35d0dd5d996420eaed0ed7f77e2dbc669\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"b129eb5b77d6f78b1992213ac3a2aafea44805c4b29b2eaeaafe6be33106dc4cd4ec0f8479c3d27cd2b831b67239e2875d8ab261edb443fa0ba019a6c83ca3bd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6605aac43d086c35bc9f52dd9675154cac284f8f068d9be66412dfa87072341c463a78b1437a1f746ac91a5b250702b02d070d060b93957c522ee89631eb4bb5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"0420f924a7eb4ce771fee0118c5f146a657dfb21f4d9a7999afdc9b5d1a97fb282783dc83229266de90a0b9627a6f561a347c3bf25d7ff551776609cef1c0dc1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-x64.tar.gz\",\n            \"hash\": \"45f09e7b031f4cf5b4dcead240fe47e2e3731d97d22aa96d3a02a087322658606cc22792053c3784c44f15d7c9bad0ac9dbda90def7b4e197f2955dca9a5bb6c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-osx-arm64.pkg\",\n            \"hash\": \"0ca1358cd0f644bf5f0d5aa4e19d73f050ec19421b4a47fcd8d07f60fbecdd255f5c12f100b252d8e742c308180e14c1d05a52cff62920e48f05fb7ab644644e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-osx-arm64.tar.gz\",\n            \"hash\": \"c7f955ba587cb00aa688dbba987acfd4203519da0dc5914ae7e1ecdf8f95089a84402b4d833c7b6186bdc1f70215e399646117242a054c1555087aced61d119a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-osx-x64.pkg\",\n            \"hash\": \"0381f513768f0c8505bfc39458117d0fc0d345844d9b3ad98c3cec5d106d000bd27abc0040aa29d4e83cb566193d32ea9f775c30ae06eff95953dbd1dc4147e3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-osx-x64.tar.gz\",\n            \"hash\": \"48268afc73335c19c96bd77bea49eedd461056b1b640703ebae39b3003875ba0b0dbdc13ce7aec0c74ae842bd01647cd1c225ec555439972f3e16300245a48fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-arm64.exe\",\n            \"hash\": \"19acafb5c7838ebde5baa9e593e36e328f5ebca659e13f6d979319dbff7709a940e1060d142f9faf5f85f23f181b2ecfedc3f3d2ae612f29bdbe88d312bd811a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-arm64.zip\",\n            \"hash\": \"1415c958eeac3bd48ee29fbf7a9ccca99e74caee5c27cef04bfed02f070456166d89ed8c2c6bdf3ae8d889e5c5da0d3967e371bba98feed7d4cef9f7f8dc6ef8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-x64.exe\",\n            \"hash\": \"f4c4ebdaa684b2f7cee1b0034749dcde2a6c8b9a5e45fe4b6f1ff4c918367b6e59d23ec1f70a2db3a7ec9867f85507615aa0467a35406b08ed925ec5abf4b49a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-x64.zip\",\n            \"hash\": \"5bdeec491b41da1b7a7a35757a80be80c7e10f3c82af9f4037dde217b09c526d6e673209c467c44f766cef8611bc63aaf6d2a806b3879861872252b31339a47b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-x86.exe\",\n            \"hash\": \"481565ac45237b2a888aa2abaf11996bd5dba9f78c41b74ee66b3821b1c671e67ec7f5577fe98b1dc685943f461416bb1db89f58c69303917a019c6b80fc9b0b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-x86.zip\",\n            \"hash\": \"f871f301cd098684d88a65403b99ac95fa9ce8531d27431efebd5c6ea7123797a91f8fbf187b65b5dc923ab60e7165653d8266830170a97a5657f3f848cb8647\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100-rc.2.23502.2\",\n          \"version-display\": \"8.0.100-rc.2\",\n          \"runtime-version\": \"8.0.0-rc.2.23479.6\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8 latest Preview)\",\n          \"vs-mac-support\": \"Visual Studio for Mac 2022 (v17.6.1)\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-arm.tar.gz\",\n              \"hash\": \"821b0513bcb60e5f645332959a6182c952e92c793c19abfae538fb602f922f47dcaa70da4e1b3a37713f9a9346b091cdd67754d17d078bdfd680080d9599b572\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-arm64.tar.gz\",\n              \"hash\": \"b07059a8b6b5586134a63a20c952f4f029372791d53e4a3a1363d39b8beb62b4c7dbc23c7de202397310c79aaaa110d35d0dd5d996420eaed0ed7f77e2dbc669\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-musl-arm.tar.gz\",\n              \"hash\": \"b129eb5b77d6f78b1992213ac3a2aafea44805c4b29b2eaeaafe6be33106dc4cd4ec0f8479c3d27cd2b831b67239e2875d8ab261edb443fa0ba019a6c83ca3bd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-musl-arm64.tar.gz\",\n              \"hash\": \"6605aac43d086c35bc9f52dd9675154cac284f8f068d9be66412dfa87072341c463a78b1437a1f746ac91a5b250702b02d070d060b93957c522ee89631eb4bb5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-musl-x64.tar.gz\",\n              \"hash\": \"0420f924a7eb4ce771fee0118c5f146a657dfb21f4d9a7999afdc9b5d1a97fb282783dc83229266de90a0b9627a6f561a347c3bf25d7ff551776609cef1c0dc1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-linux-x64.tar.gz\",\n              \"hash\": \"45f09e7b031f4cf5b4dcead240fe47e2e3731d97d22aa96d3a02a087322658606cc22792053c3784c44f15d7c9bad0ac9dbda90def7b4e197f2955dca9a5bb6c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-osx-arm64.pkg\",\n              \"hash\": \"0ca1358cd0f644bf5f0d5aa4e19d73f050ec19421b4a47fcd8d07f60fbecdd255f5c12f100b252d8e742c308180e14c1d05a52cff62920e48f05fb7ab644644e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-osx-arm64.tar.gz\",\n              \"hash\": \"c7f955ba587cb00aa688dbba987acfd4203519da0dc5914ae7e1ecdf8f95089a84402b4d833c7b6186bdc1f70215e399646117242a054c1555087aced61d119a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-osx-x64.pkg\",\n              \"hash\": \"0381f513768f0c8505bfc39458117d0fc0d345844d9b3ad98c3cec5d106d000bd27abc0040aa29d4e83cb566193d32ea9f775c30ae06eff95953dbd1dc4147e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-osx-x64.tar.gz\",\n              \"hash\": \"48268afc73335c19c96bd77bea49eedd461056b1b640703ebae39b3003875ba0b0dbdc13ce7aec0c74ae842bd01647cd1c225ec555439972f3e16300245a48fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-arm64.exe\",\n              \"hash\": \"19acafb5c7838ebde5baa9e593e36e328f5ebca659e13f6d979319dbff7709a940e1060d142f9faf5f85f23f181b2ecfedc3f3d2ae612f29bdbe88d312bd811a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-arm64.zip\",\n              \"hash\": \"1415c958eeac3bd48ee29fbf7a9ccca99e74caee5c27cef04bfed02f070456166d89ed8c2c6bdf3ae8d889e5c5da0d3967e371bba98feed7d4cef9f7f8dc6ef8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-x64.exe\",\n              \"hash\": \"f4c4ebdaa684b2f7cee1b0034749dcde2a6c8b9a5e45fe4b6f1ff4c918367b6e59d23ec1f70a2db3a7ec9867f85507615aa0467a35406b08ed925ec5abf4b49a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-x64.zip\",\n              \"hash\": \"5bdeec491b41da1b7a7a35757a80be80c7e10f3c82af9f4037dde217b09c526d6e673209c467c44f766cef8611bc63aaf6d2a806b3879861872252b31339a47b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-x86.exe\",\n              \"hash\": \"481565ac45237b2a888aa2abaf11996bd5dba9f78c41b74ee66b3821b1c671e67ec7f5577fe98b1dc685943f461416bb1db89f58c69303917a019c6b80fc9b0b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.2.23502.2/dotnet-sdk-8.0.100-rc.2.23502.2-win-x86.zip\",\n              \"hash\": \"f871f301cd098684d88a65403b99ac95fa9ce8531d27431efebd5c6ea7123797a91f8fbf187b65b5dc923ab60e7165653d8266830170a97a5657f3f848cb8647\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0-rc.2.23480.2\",\n        \"version-display\": \"8.0.0-rc.2\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23273.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-linux-arm.tar.gz\",\n            \"hash\": \"fd0d543cfa1a109c8bef661708b2aa8139c565721e40980dc416bf37e0d3366ac6ce46e3fc32c99b6ef780328412412261363f5a5849ecbf2fd8b229eda7e46b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-linux-arm64.tar.gz\",\n            \"hash\": \"a539170e9f0cc07801142b4f301554bbb76f22c3bc8dc4c421ca5c9be4dad93931acbb5a1d516f5fca57d739d33d10bccd33a480eb9e0d40e0f7594c38e405ea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"684f77f58adab33822155b7aaa3455032f0c2a5f990089d54054d1691bbed1e7ff737e07d0ba4abc96f7b560360c39317dd5e893f49181fcb093533e987ab283\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"67fdc66ba42f38ce04636f3a742bcfcbd17440aea19fdfed19ba1bebb934ef71959dd7b324064f927bcd1ff0f020601f3923ea12d0320f0a5d810b4fe32ee651\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"af6889f875d113d014f1655f9b265e3e83e4b8203b4093b653d4b325d91ec54ed0ba324f1f417284ce631454656fa02f39f0601286c4d6ecc7b63ac8a67eec6c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-linux-x64.tar.gz\",\n            \"hash\": \"5d8d50498be52ee4c8ae83e9ca82ab947b187f27b56047cc8a09f6ca2ba6bb7532fdd30bc035d518ce636965371f2ed16c9f97398f04d836f4f67b11b5ce50a9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-osx-arm64.tar.gz\",\n            \"hash\": \"9cf9dce54fa4d1ca27955170c5378b826400e4ae45a9312f97f3a9d87ec31bd3231d70e482c36499fdc0d83f80af8860cd87d70dbbbf614f0312c6f73f71e744\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-osx-x64.tar.gz\",\n            \"hash\": \"b798c397e2ddd8564024859f8aca2b9043863376b8327661ed83fb626bb51c26b1d5ef5a0ce6848031f14c480d4ba936aa0c4bddde8f38aea993d72ade10153b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-win-arm64.zip\",\n            \"hash\": \"11d3c5253540f1459e49abb08ff90514f3f275bb726ea654e5a1845aeab85052900881e3b23af732604d7fba848d259eff5888e68038e9916d474d8cb5324041\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-win-x64.exe\",\n            \"hash\": \"0e0fc1ed6ed986786420ab6e890d5ec088c5f33f1fc6f9c865b2bbd7ef0ac9c8fce35cadb3c34f5d11fad679000583fb167c62969db8f0d67783951b185d4e97\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-win-x64.zip\",\n            \"hash\": \"b74cbffa98df77905e9720c10d6a63818812ae55e234e25cf28808076a1803c82c683108c90f2ef7e02ed21f0607bdc42cb2890d184cc467678c833f454e92d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-win-x86.exe\",\n            \"hash\": \"e4248c8d548341d1346e1a3946eadc906a89de5eec3d8d9837a7723aaa4f9dc876930ab02d75d1a2e937118d4a9e9d98dd7431f5b7cc049cb5a69820221991cc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-8.0.0-rc.2.23480.2-win-x86.zip\",\n            \"hash\": \"2c0931e722586d97c43a1402c21a1059463521d5ffa179043a3462f9a653b5ae39d3f70dd3dd7a7b65eda3454f4ee93c5ff13158633c4d86461fff2cd5535571\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-composite-8.0.0-rc.2.23480.2-linux-arm.tar.gz\",\n            \"hash\": \"55e4720b6cc4adc63944e1cbeed2b81269250240965a154737b274a0950ef7e103a6c99344577372d1074bd9f1e0e117e1682ab4b774d872bdebf550c57ede88\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-composite-8.0.0-rc.2.23480.2-linux-arm64.tar.gz\",\n            \"hash\": \"2ed102dd7851c049d80b53a5a31a56388fba72eed9e1fd4dc5d7e48d8606a4e26037eca6d90edba99d6668cf939841b1b025da93604b697c2f0506cf28998973\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-composite-8.0.0-rc.2.23480.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"2c1f0fa71908d84f533e7f72c436750e624667b73ea8259e9661ae3caacbc919ef470a4ef80e5da4ac8c48b236dd50db2b802a4e1dbe1b79415c1adbbaf869ad\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-composite-8.0.0-rc.2.23480.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"39da201ffa7be98f5c66be5f8eba6bfebbd41c28564e78329fb6b2a62d3294dcc3d1a19e68edbe7f0f251484ec8aaef4a8b4bab04788e3b0abdbbbd84fecdb7f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-composite-8.0.0-rc.2.23480.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"c779a171e9a10ced7990ebb6d157e9bbaa6f777e79c2afcbd4dd4dbe857ac41e60dd9ce9252cf48aefa8e41449ca071b0e0c85e90670fd9c54cac3755e470626\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/aspnetcore-runtime-composite-8.0.0-rc.2.23480.2-linux-x64.tar.gz\",\n            \"hash\": \"6c04f68276fce832d4d68ccfb986a9ef2eb3aca337376249cb83d1bab7814f5daa864b574a43e117652d1846834aba2e56560c2ebcc45c3d116c622cbc6057b4\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.2.23480.2/dotnet-hosting-8.0.0-rc.2.23480.2-win.exe\",\n            \"hash\": \"45d67ed1849c52c048e18c10882c152f92149db645567539cb055d15a22935676f31ff53ce5c2650ddc1e97279ced61478041be45f8080f97901c5d9a92bca9f\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0-rc.2.23479.10\",\n        \"version-display\": \"8.0.0-rc.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.2.23479.10/windowsdesktop-runtime-8.0.0-rc.2.23479.10-win-arm64.exe\",\n            \"hash\": \"33e3da6d5fc3a435b37a4d6d40fd81b81c98d3556afee73d24270130d353f12b916f014acb09e45d776cf3f783019811e4eb18d7ce070917c79020bb7c66df9d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.2.23479.10/windowsdesktop-runtime-8.0.0-rc.2.23479.10-win-arm64.zip\",\n            \"hash\": \"0bf7bf2a6ea567ce2e123d71419cee4dc3818cdc5c11130d1002f6dc89d0ce64c81d387c69550bb8864d87a66cf66f4399880efef63f4dc96b5b45d05f41bb00\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.2.23479.10/windowsdesktop-runtime-8.0.0-rc.2.23479.10-win-x64.exe\",\n            \"hash\": \"480cd2cd85b10383b1d25ac1e03f060e7c491cf62ac9173ef83f52953e1fb282cdf29f64655d0436eb4a4ffd75333de180e19fa7deb93ea794d70e74296a026e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.2.23479.10/windowsdesktop-runtime-8.0.0-rc.2.23479.10-win-x64.zip\",\n            \"hash\": \"207a28e1aac182ca5550081a885ce0cb919fecef625b16020b1d6097c6941ddc9d0f5368d5c8edd0d217e3f3e791bb68a8bda1596aaa29aee6a3212d07cdd572\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.2.23479.10/windowsdesktop-runtime-8.0.0-rc.2.23479.10-win-x86.exe\",\n            \"hash\": \"6d0dd5f9dfd53377eaef423c7887f78836099aee7848d74124724c34e5a9928621d2c6784e621ecd5d653f546b52cbbc564d12981b9b42addf6b20d10e7a85c3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.2.23479.10/windowsdesktop-runtime-8.0.0-rc.2.23479.10-win-x86.zip\",\n            \"hash\": \"5c02a02616af2647477441e120f86bee8802d79a81e816920aaa2d9647dcda40dcc4aadfb8e60022d716867b5783ee1af44edaef72263001bf7bc4fdcc6b3771\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-09-14\",\n      \"release-version\": \"8.0.0-rc.1\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2023-36799\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36799\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36796\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36796\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36792\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36792\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36794\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36794\"\n        },\n        {\n          \"cve-id\": \"CVE-2023-36793\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36793\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/preview/8.0.0-rc.1.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0-rc.1.23419.4\",\n        \"version-display\": \"8.0.0-rc.1\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-linux-arm.tar.gz\",\n            \"hash\": \"5ea010e9af7fcf76dbe9e754eac8744211a534b5378067e2848315bb2af27fa1387e9fbb8c826ca694d2cdfe2a2e82c5f340d3e2826b181ad61b8de5475330c1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-linux-arm64.tar.gz\",\n            \"hash\": \"6f5ca722ec2c4a400b9c19b17a3d9a10cf92b265c90c1e1b4822c12117580c286e99134f7c223f3dcd71171d5799e1498d38129dbd1bdff606fd64fe451458ba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"e2f8f053f3a8fa3fac77306c848198e97603e6ecd5711602dd048e78c17cd81ea5d581a5da75a43ad3af69a3904c12460a5cf5e9d8ec2d7f48009518595627dc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bac16c501c8be61ce7fecbfd7b10165ce6fe5842b3858b255f8a5b0c7bc7ad74fd94eb930dd76d4d6b41c3af33b757dc097415e1da435f4f7a5050a0395007b5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"ef360a306780eabf0973589b12f2c38538b0723896d5860073f8ae31234fb718666d69acc1a7827074e90fd0a83165f135b097edb241a77964fe8856ef242847\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-linux-x64.tar.gz\",\n            \"hash\": \"53938ec3aa4353cfb760d22faa850821b54a53fdd864c4969f48caa6b718ba207162b04a196e85543947acb7d3e719982edad1420b76198562051846f51b1b5c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-osx-arm64.pkg\",\n            \"hash\": \"0c0d8248d03b20d8e52d4b640cb5593a95939b09080f33fa89e1845a7b6dac8a4a8f0d992a51f1572d52f2c23acb62f5ed76f163bc7829c93ea6e61d6d2db26f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-osx-arm64.tar.gz\",\n            \"hash\": \"f5810ed4c8ce565f1eb3505b7994e54ddf6d87f8903f739016daafc01ba532caa1b84e39e4e42b73f392703af973dfcaa2165b4630301a859fb49ba411d6ecdb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-osx-x64.pkg\",\n            \"hash\": \"4b5290c6f93bdecfdd811b5ecc77888351d3c9f4cc088b8ed8267a9a20cdfc2223705b3798f062cecda80f383ebd727d9ea4416939b1dd32fcbbe561ab583f20\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-osx-x64.tar.gz\",\n            \"hash\": \"ffb0a22c0e4b9cbefc99a1e016683987dc4046abd9f49f5e48bbb93d0434e818c66274422728b328c97ca1dcd6419c7fbb88ba747edff6a8e92213141ce42bc6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-win-arm64.exe\",\n            \"hash\": \"31c9fd2cdd3a75129c6fbe9cd9ef00cde8900530e1206301d6b5a1a2a24e8e181631efaf5db5437aa620c1aecbabbc2d2acb08f67a0cdb6977798423577f7408\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-win-arm64.zip\",\n            \"hash\": \"a86bc5121848545c2fe5eea76d43050c8ab03cd2b246b04c4795ba279a1849d48d6004a187db63ad87c02ba9df710ad0b10a8f10d66b64c823936505a7e1d593\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-win-x64.exe\",\n            \"hash\": \"12c5490a95987102c61efe74313068e660845132db9f9989e10731ff86d8b7e812918bc00e163a3d8346a6e6c7d3c4fc8d595f189b3846db64e219f61272c4e5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-win-x64.zip\",\n            \"hash\": \"b2b7cfdf3b5d81b25f485cf74880dee068adedf77f59c34816c54fe3cfb9de4f86745f116b9deedf6e309a2ab4dc4fda8a0c65a6a24e3053cab7174ef0606cbc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-win-x86.exe\",\n            \"hash\": \"b04d7db52e88cd408a15d9f15a03af26c2fd91e806a294e6ed6714b848199864a9f1b7d0afd69ffc6032750688c6c7d025344c235198635ff39fe6fd9eb83b6d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-rc.1.23419.4/dotnet-runtime-8.0.0-rc.1.23419.4-win-x86.zip\",\n            \"hash\": \"525f682fb2072788e35609172eba6bce6bc94e567d513b9286615a43ffc2e693d6ba0d486272e52d115727121f961f36e1aa758166912337a7155f6322cd2d11\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100-rc.1.23463.5\",\n        \"version-display\": \"8.0.100-rc.1\",\n        \"runtime-version\": \"8.0.0-rc.1.23419.4\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.8 latest Preview)\",\n        \"vs-mac-support\": \"Visual Studio for Mac 2022 (v17.6.1)\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-arm.tar.gz\",\n            \"hash\": \"c9f2e23d5ec05da7afa22da1a977aeebaa635da77bd686aac83c883568025b0f8033823df04a8121945cec02311164eb1d2e478ad9718c1b16688194f0e9a191\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-arm64.tar.gz\",\n            \"hash\": \"6a96c428ef86fd79f902ddbe11b9054432a425be442404c9f3d5dc69a15c6e59c95bf281822bd19e854894d9b7a31c19260826f4ad467b610e3bd02a00f71a9d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"ef64bb8067a9214b398bbdafc5dda67fc60ca1bd6ae584290eefc42830c743d0508599b09336294d1e6f2b3e6a1ca70d3172de63c17189c31984466adeadf28b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"86611a7cb3b323a58998e6de96608c6fdd4e5d11785fd3f672bc3f5c2bf9397d464ea1065764cced4004fefa8e996b46fedb17be46da991dcddf0e8ad610c5ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"ccd511e4ca2d8f3153d53f2c2d2f2afc8a95259f4936dce68a4f431ac907fb14013f2132990d32a6f374279f45d7e5ee1a67b90333dbd7f15b47a133552310ee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-x64.tar.gz\",\n            \"hash\": \"ac941fd16fd7c328f7cc44b132b4253ddb2b6a6c152af5f43c71c6cd0d468c89b7276ebf6c08895dcb6e5e25f7cae83b6fbacb91cfcc4a61d49b5657a834a901\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-osx-arm64.pkg\",\n            \"hash\": \"833171796a76aba754ee0bc99badd484ab42ebdb015c88cf4862dcb447e2bf302f484f4283589d392ef5d86ab2856a3f1db2a970877d74a8bcb89942f137d011\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-osx-arm64.tar.gz\",\n            \"hash\": \"f278b075cb48567e1c296de11380befc47f9aef234065b566d40cad098fb3eb011b04d134716efd7cd8ea8ce862328e2c02dc0ca7c88dfac5ac7294cc16367b0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-osx-x64.pkg\",\n            \"hash\": \"3090a17c87c195f014d639402a675f395901b2c3339103747b449dc961bf26df54f8853d0e54ff7d34df64563eda501da1fdcbd768f8d902f9845771cdfeb5e6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-osx-x64.tar.gz\",\n            \"hash\": \"a71e43f1a7401a07742c3adb2cdfde371eee6577aad7a1f239b4a7de7213893e2c4a147959d275e8433b3f912fe708d8d2ebff00f66704efa671fec0c93c314c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-arm64.exe\",\n            \"hash\": \"7b1473208404dfb75a740d51fe5e785f985a0ac368a707d9aed247c86927a358a2ca158e13b3c67b223f358c21b34775631d84b1e21d41029755bf53e0a2cc90\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-arm64.zip\",\n            \"hash\": \"3cfb39b71f68713bc3029af730b19725f78931dd20f685ea4a6d4f850dcda31025970288693d51bd236da9c0d97851afebf38a34e2e2754c74505b9a85efecd3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-x64.exe\",\n            \"hash\": \"b28a3f288a151a6a6e76ffd28a33ab92712a8308165819d469cacb1c547168a2bf7f78b975346cdf7b3f01b2d9b50070935588adc0ae1d03cfaff0744242423e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-x64.zip\",\n            \"hash\": \"d06a7c6f39552a5e34c8352e573b2ede3658a415f43f2f5867f0d759d508b51a7470f071daf046912e5a2732f2419ed730babbdc4b33c15be287d457617d8ec1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-x86.exe\",\n            \"hash\": \"da443d98051eea7d8d2e79c2872d28491deeb84a18bf2c81dd10ec59c0e0f9fce4f0b9e41d67214924895636a1f3217a5b2624251da636ec0e184804671dcc73\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-x86.zip\",\n            \"hash\": \"2c5dd1144bb9a7e946ed566763f98da787ce2b09acda98d58d716e6b442f3ccf2629f151a9c02183eff482da45c35e707eb6b654aab9ca36683a1f737feb0d28\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100-rc.1.23463.5\",\n          \"version-display\": \"8.0.100-rc.1\",\n          \"runtime-version\": \"8.0.0-rc.1.23419.4\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8 latest Preview)\",\n          \"vs-mac-support\": \"Visual Studio for Mac 2022 (v17.6.1)\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-arm.tar.gz\",\n              \"hash\": \"c9f2e23d5ec05da7afa22da1a977aeebaa635da77bd686aac83c883568025b0f8033823df04a8121945cec02311164eb1d2e478ad9718c1b16688194f0e9a191\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-arm64.tar.gz\",\n              \"hash\": \"6a96c428ef86fd79f902ddbe11b9054432a425be442404c9f3d5dc69a15c6e59c95bf281822bd19e854894d9b7a31c19260826f4ad467b610e3bd02a00f71a9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-musl-arm.tar.gz\",\n              \"hash\": \"ef64bb8067a9214b398bbdafc5dda67fc60ca1bd6ae584290eefc42830c743d0508599b09336294d1e6f2b3e6a1ca70d3172de63c17189c31984466adeadf28b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-musl-arm64.tar.gz\",\n              \"hash\": \"86611a7cb3b323a58998e6de96608c6fdd4e5d11785fd3f672bc3f5c2bf9397d464ea1065764cced4004fefa8e996b46fedb17be46da991dcddf0e8ad610c5ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-musl-x64.tar.gz\",\n              \"hash\": \"ccd511e4ca2d8f3153d53f2c2d2f2afc8a95259f4936dce68a4f431ac907fb14013f2132990d32a6f374279f45d7e5ee1a67b90333dbd7f15b47a133552310ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-linux-x64.tar.gz\",\n              \"hash\": \"ac941fd16fd7c328f7cc44b132b4253ddb2b6a6c152af5f43c71c6cd0d468c89b7276ebf6c08895dcb6e5e25f7cae83b6fbacb91cfcc4a61d49b5657a834a901\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-osx-arm64.pkg\",\n              \"hash\": \"833171796a76aba754ee0bc99badd484ab42ebdb015c88cf4862dcb447e2bf302f484f4283589d392ef5d86ab2856a3f1db2a970877d74a8bcb89942f137d011\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-osx-arm64.tar.gz\",\n              \"hash\": \"f278b075cb48567e1c296de11380befc47f9aef234065b566d40cad098fb3eb011b04d134716efd7cd8ea8ce862328e2c02dc0ca7c88dfac5ac7294cc16367b0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-osx-x64.pkg\",\n              \"hash\": \"3090a17c87c195f014d639402a675f395901b2c3339103747b449dc961bf26df54f8853d0e54ff7d34df64563eda501da1fdcbd768f8d902f9845771cdfeb5e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-osx-x64.tar.gz\",\n              \"hash\": \"a71e43f1a7401a07742c3adb2cdfde371eee6577aad7a1f239b4a7de7213893e2c4a147959d275e8433b3f912fe708d8d2ebff00f66704efa671fec0c93c314c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-arm64.exe\",\n              \"hash\": \"7b1473208404dfb75a740d51fe5e785f985a0ac368a707d9aed247c86927a358a2ca158e13b3c67b223f358c21b34775631d84b1e21d41029755bf53e0a2cc90\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-arm64.zip\",\n              \"hash\": \"3cfb39b71f68713bc3029af730b19725f78931dd20f685ea4a6d4f850dcda31025970288693d51bd236da9c0d97851afebf38a34e2e2754c74505b9a85efecd3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-x64.exe\",\n              \"hash\": \"b28a3f288a151a6a6e76ffd28a33ab92712a8308165819d469cacb1c547168a2bf7f78b975346cdf7b3f01b2d9b50070935588adc0ae1d03cfaff0744242423e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-x64.zip\",\n              \"hash\": \"d06a7c6f39552a5e34c8352e573b2ede3658a415f43f2f5867f0d759d508b51a7470f071daf046912e5a2732f2419ed730babbdc4b33c15be287d457617d8ec1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-x86.exe\",\n              \"hash\": \"da443d98051eea7d8d2e79c2872d28491deeb84a18bf2c81dd10ec59c0e0f9fce4f0b9e41d67214924895636a1f3217a5b2624251da636ec0e184804671dcc73\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-rc.1.23463.5/dotnet-sdk-8.0.100-rc.1.23463.5-win-x86.zip\",\n              \"hash\": \"2c5dd1144bb9a7e946ed566763f98da787ce2b09acda98d58d716e6b442f3ccf2629f151a9c02183eff482da45c35e707eb6b654aab9ca36683a1f737feb0d28\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0-rc.1.23421.29\",\n        \"version-display\": \"8.0.0-rc.1\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23234.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-linux-arm.tar.gz\",\n            \"hash\": \"05fb63ba94d09fe0f90f8ce24ab0585ab25d142d2e87ff114915e6b68092aa246dde8dd1da13742c734a2bcdfe17b15628359d564a87611e156a10d826c354b1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-linux-arm64.tar.gz\",\n            \"hash\": \"ba8035da535cb3bffa720e962e6f9e0f88b36e1221b588f2a126ee4b43c02e4d8c27958017d29e5ab68121fab6a564fe0a27099c4103ee3d527f8554b4ab495e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-linux-musl-arm.tar.gz\",\n            \"hash\": \"b2b20479dead4bd8cf5e0919089af1e05954a7f662d9bc71661a0df43ade63c45535da7d0ec490b618d6a63fbbaa58730082468af90cc7332ab7864be6228379\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5e351437fcf739666f446e4df639e3c78986e5d29465f2de8898a66b8825fbd2c378dd1ce8399d471fcb62c49f24738f0b96ef81cea004bf6912c2abdbe5a3f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-linux-musl-x64.tar.gz\",\n            \"hash\": \"46cf816b4207b6e5361e04962968629aa7c0f3245b017a55d4c0edbb1410705a458a250ea9d52f71e8d5d02b264c49e089c34c36f2cdb807e2667975a43f43e6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-linux-x64.tar.gz\",\n            \"hash\": \"d5f9e7bffbf2b48b26a317dd1d78bc866973b4a2cda448cd7a7ee64c0ffaf98fa3c4b8584d32528026674bdfd99f602f0fdac8242176815705e080df83825efa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-osx-arm64.tar.gz\",\n            \"hash\": \"dadb90494fb36a1d38b12d2903a385b76ee7325eba59d44acf4e10c3019bcfd636cf0b9a7c3070516325c6be4f5421c11fad7a2293ccc2b1c7a5d3c62bbf07e1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-osx-x64.tar.gz\",\n            \"hash\": \"28c2cc2b1b32a3d4b287f2ceec42ac7fce59870bd6a72f6767d347fa0a9c53210c5328e4d747ce010512dad149109ff072840c9da9301c8bd66a178169458518\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-win-arm64.zip\",\n            \"hash\": \"bae05c42a495ecc5947a8538b9f0ff3bbd5b94f7bf6d3baf3f9daf78a72ace8659b6810f0f232423f07387534e7a0d230c56f3a0ce14f7c2f40bd4bd64fa72d8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-win-x64.exe\",\n            \"hash\": \"a4572bd6f2061139336f2154141ec9478a7cfae85eaa0046d465bf6a025e747ff286341a5fe27cf3879f3b3ed9e7f6f506ac8758ace0b87a4fd497e84e9754be\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-win-x64.zip\",\n            \"hash\": \"5078af1148f0a5603d7296a70ca776a307edf0da73aa1aad54d1d61e0b296b5452966f0b8e81b63c1bbc91de547c76210be59324ff123463b3e33ad0becf5ef1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-win-x86.exe\",\n            \"hash\": \"0b507ab5cb27f5f13a0af7d42d3e70550f92d1715d1284f1090e43e4eac7e85eef07777546032ce52ebfac9ef9fd24eaba41b86d4851d3ba640092f3d89f0055\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-8.0.0-rc.1.23421.29-win-x86.zip\",\n            \"hash\": \"006f9162cf986b8b3b15b05c174f53b562aadbbb90e59a6f4be2633c10c67659b17d325173cf119f9a945ec81cd57747da09078cf00dc9199f87503cec39070d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-composite-8.0.0-rc.1.23421.29-linux-arm.tar.gz\",\n            \"hash\": \"e4409f01be139fbe928c055554eb46d82c44c90fa86562f2727045173ba9e42ef299c9e652b8881c694b964b610a5156c0d61d867ed596e7f971437a48a1fc4b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-composite-8.0.0-rc.1.23421.29-linux-arm64.tar.gz\",\n            \"hash\": \"ad72f2336bea2334799eca5bc3962811a3b2c811ac9633044f0538df44cf97265c748a237222edebdfcdf7f8a38dcc68bab277932974ef193909e3a4d3096d22\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-composite-8.0.0-rc.1.23421.29-linux-musl-arm.tar.gz\",\n            \"hash\": \"34ec7d55841ad3e1a8af4d5d8bef42378e3041d609491adc27e469fa42076b3b50ad952154870077878a47b203ad5cb8a780ea2432d9d07243d14b59521e2522\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-composite-8.0.0-rc.1.23421.29-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c133f9a93d67994a822251b83c6a946125d59642cd77e611f2514240a7132907f06373ffec5fb3a1aa12f9f03fa9ee1ed17d5ebec0b54be71e7f678dfa909909\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-composite-8.0.0-rc.1.23421.29-linux-musl-x64.tar.gz\",\n            \"hash\": \"f56a090c2a915ed08fe141700d2e1b92c93ca1bd5bcd66e3116e4d7c045dfc56f19e59ee96f1d485fc49857bbbe05a6e03e35b5e3f57cd106801ff4e00a859be\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/aspnetcore-runtime-composite-8.0.0-rc.1.23421.29-linux-x64.tar.gz\",\n            \"hash\": \"6e4ce9aa8825304196f8f05164f254cf62637756c2b297525ff0ae86582e1fc6758968d5111774986d5f3e06005ceac120f79ae5269c8c4de1185c54e56c0632\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-rc.1.23421.29/dotnet-hosting-8.0.0-rc.1.23421.29-win.exe\",\n            \"hash\": \"a97d55be7d61d34d787b3e9d7dfbf5172679ee045a6f01440f62485b03c9a5470c3681b947adcbe187680b9fd9484e3be9d1a86375ff556315eb5b69b6f07564\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0-rc.1.23420.5\",\n        \"version-display\": \"8.0.0-rc.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.1.23420.5/windowsdesktop-runtime-8.0.0-rc.1.23420.5-win-arm64.exe\",\n            \"hash\": \"9fa51c61c0dca54507053bb4f5712e2d413bb0d09806ed1e5feba79576d7bcd5f714cf6990bbf1ddb6288b176136f9b55ab127e5b3399ef36d6f1d40363a92ad\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.1.23420.5/windowsdesktop-runtime-8.0.0-rc.1.23420.5-win-arm64.zip\",\n            \"hash\": \"5d26a5299b2380e2d1a5f31d4efa03b809e1750053c2626f56e56076560f15af46657c9270c09452743d612571c813c5fd91d84bcffa98bc14ba1cf90d1234f3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.1.23420.5/windowsdesktop-runtime-8.0.0-rc.1.23420.5-win-x64.exe\",\n            \"hash\": \"9b430c3593f0dc7364aa8cf9f8d1793b396294695b751dbf5e9ed0147203657883c5f9da870bfe4595272372efe9b1238660c3818f72a80924e3473b5152635c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.1.23420.5/windowsdesktop-runtime-8.0.0-rc.1.23420.5-win-x64.zip\",\n            \"hash\": \"dd94cc10e153779759961219faa04ee8fc3f5a4a4960cb141cbac7539292e3794111c90a6fa9e62062c4a0ce17f8ff7e95ecab53513ce737d282724e79d560b1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.1.23420.5/windowsdesktop-runtime-8.0.0-rc.1.23420.5-win-x86.exe\",\n            \"hash\": \"0c6a41d2006fc485c6a42bd80059524eddc67c03bda78c5382b12fcb814169d76574abb984517fa736e66762e9ecbbc68406970ca7f3c45a323ed95667c98059\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-rc.1.23420.5/windowsdesktop-runtime-8.0.0-rc.1.23420.5-win-x86.zip\",\n            \"hash\": \"11f22957a49aa3db45daf8a9071ec70a217262e9a93abf0d4c4ec3294266a59bf529546a3450c93b2ca2cead0b1e1aee8e01cbf85cad16dcdf84c18b2043ed26\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-08-08\",\n      \"release-version\": \"8.0.0-preview.7\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/preview/8.0.0-preview.7.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0-preview.7.23375.6\",\n        \"version-display\": \"8.0.0-preview.7\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-linux-arm.tar.gz\",\n            \"hash\": \"8783bbb161b843659f952ec30ab7b3584d225a11d9763daa59dc99f59e131348a63604b8cdad77be6e2bdec1b48b9510f3992dc8cc16083a217b079503262206\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-linux-arm64.tar.gz\",\n            \"hash\": \"980434e91d6f9dcdd91901ef92aca6e15d015d3c4ed9dd92a11bc4bbe535010b8b5f0d0cf774427d529939663138b1523b28534f090ec41a5ab5abd61699909b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"0c6c5df0414a8bd517816dde69103cac65dee581f6f09169481090acb9b76f86f9bc2f6e6a174925683fdfa0bcb2145063b9c79c74355568c87ca55f7a0b1923\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"724c01d49d373b09c8213f06121ebd9169529b1f05fc3eb33fea3cc8619ad3bac6ff66d24feb253405fee9bbbffbbe7d1ff6c1bd4b5310564e3fb5cbd9617bfb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"c652094295b7df12d2d0272822cd861417c90c2313a87ebd515f3b0e9c67e165b133c4ef4b99f3731bf842a2145bf4607fa1c2db17fbea22615e2cb84d54db34\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-linux-x64.tar.gz\",\n            \"hash\": \"bfd8491550178b86a7a72fe06bdc82f0dd66771d5b60d7e4e1133cdde29f84bd57857d846722e027bd209db087123b2d12b2e23590d77991052269fa265814e1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-osx-arm64.pkg\",\n            \"hash\": \"ed1e73b9ff44c280bab3be9278361aaf8c18f3c622a9f7209663273ca82d5e968caa31832bdd231b25eee2786fe732cfb3da39c047b3a23504240b5c67fce72a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-osx-arm64.tar.gz\",\n            \"hash\": \"e676fb4a6a155a1501aff4f9f90196fe086c52916538258d3cb3384aae52682bbf0656ec37c0c2ddb7d421c2d27991d5ead10861ce02d331ece6b1d55b5bc4e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-osx-x64.pkg\",\n            \"hash\": \"88396ab2c60f74338a9bc50453ea3504e2106f50268ca6201d743e514c6a4a1747afa1ea516b67674188763b1afe7f16f4381c4b4185d761c9da9e7fb53e5829\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-osx-x64.tar.gz\",\n            \"hash\": \"5ba28076f61e794ba586f5e306f3cef98c062505d466c3dec2b91dea2256ca6b65df9f5c40b402b78e968d8d7fcf00b5898e2ae182536fedddf2b782b9aadaf4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-win-arm64.exe\",\n            \"hash\": \"d9e6c7f07b918b293d3571d1496e9cd2cc3286ec5e3979574b493674145ba0ae6701ded7c1cfbcf2e86ebfe622f58e0651a16beaa2030ea9d9ec340558da819f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-win-arm64.zip\",\n            \"hash\": \"74410e2933d1c4c0dabec27d6775b041fec82e5a401e7e1682e9d8e30d0cccefa6ec0830ebe456d5de7e60b7560f6c68b66d7dfe4e34d0efa5d6c8b948d050fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-win-x64.exe\",\n            \"hash\": \"079aa30b2074565fad648835dbee866dc8262f9fdbf6bbd13d68d9e431e1e7d536c6c3ffaf1d29e6038ee40702b0c37bbe205b36525089926a9aa24ab655f0c0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-win-x64.zip\",\n            \"hash\": \"ea8f7279bdb1b1d1b23b5a16109c66dce9fa9ead12b0cb6785650e4f9aad5f56f7b9a8e298e117acbb83c54e300d43845b9af309b6faa05986051f5323f25abf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-win-x86.exe\",\n            \"hash\": \"e302e77ed52a00237f3f4ee35dc27999879b50f2427e841ea94e2bd653261305a5b66668037a3d9cf0625165e38d70d8d19c0ed02f91c2de32fee9eda2bb1065\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.7.23375.6/dotnet-runtime-8.0.0-preview.7.23375.6-win-x86.zip\",\n            \"hash\": \"8b9580ef45548932d9f19f50bc43b64224977cc663e6670546fee83eb871fc2b3f850f4e8038c64f00ed7289c73b33c930a9a17373c312b2620891b4852f8b77\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100-preview.7.23376.3\",\n        \"version-display\": \"8.0.100-preview.7\",\n        \"runtime-version\": \"8.0.0-preview.7.23375.6\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.8 latest Preview)\",\n        \"vs-mac-support\": \"Visual Studio for Mac 2022 (v17.6.1)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-arm.tar.gz\",\n            \"hash\": \"8d666df78ad89d518eab8a3ecfe85bba32c514276606b33a021ee3a645943a022ebe1becedf90d7a112e0d05608f167fd2d47fdf839191c80321ff21271cac31\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-arm64.tar.gz\",\n            \"hash\": \"454b664a8eca860727bc5c1fd729beb854a0dfee915867f773aba166592a8c63570281c88ce528dc99339e9bcdb8000f0a1ce168bcfd779b3ae2a69ce60d49d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"14a3c0aaedc787f9a05258138fb70effedb627cb46206bfdbb912936472b78cc3e24878b10b03e95339d3b7382b46a13a87783cb6a77a49243b75b31ecd94cb7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8e5bfb89b287f6ab478e6bd9f4ce1ec482ba4d00b2241f6b4d6081c5885ac0399233bfaf983994b485ea6541a4a2ab9b362cbd582012edb09a6785a7cd7fb292\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"6b7bf38224573496eae08e3000792296de81e16a1bd5a253236427137de4a6a9d7950c99f08ad764e337aa33140db5160218f9ecea0bfbd60c6e6f301e6dd042\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-x64.tar.gz\",\n            \"hash\": \"8bc71a586382f0e264024707f2f3af9a2f675dd5d4fbdd4bced7ab207141fb74d7c6492dfd94373505962b8597ae379259d152e4ace93a65dad0f89600afecd8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-osx-arm64.pkg\",\n            \"hash\": \"3d8d5516c4ba4905787b7e87b5d9f9fe28b96fafaa5df00a5e8cf32b3c502d6ee5b0c5698bff0f8b8dd069315e2d54d0b0e8e182bdcea1134e2d7211e1a0c6b9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-osx-arm64.tar.gz\",\n            \"hash\": \"db3167dd5d125ab400f29f9fc982eacec5ab69764323831985f374ccb57e102ee93ed3c607ac5e0fd733718b41cbe9079ec735ca6466f152a6b238a8fee14fe3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-osx-x64.pkg\",\n            \"hash\": \"6b5db568e14efd7420e14cde34675cb72252f5cb3292b02f158f7295d538c260d1f34e6f7660e954ce94ccf1dbb3168591c8a87dae8e386b48e7e3cd2be71998\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-osx-x64.tar.gz\",\n            \"hash\": \"5a086a4d0d0910c4bb036f1501593363324324d1664b34b0468a6e2b20b9580611c5855509afa1d934e3814aff6aa6c7af8acaad3ca3be13dcf24a9b4efcafde\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-arm64.exe\",\n            \"hash\": \"4293ef88534bd674b0bff5c6169fba9954751469000453bf57d1b5a2cbed699beabc8529c8cca3f1f943387265fc88ae222f3fa1f61e620bd58c2a9d38012569\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-arm64.zip\",\n            \"hash\": \"b6ee0c8ea795cc988902f2680d70b27b739fb1020df09c2adcc15bbc32dcb3f747827fff08bb5064e6cf570f88bc90333892819f836fcaba241a7ca1ccd6bb6c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-x64.exe\",\n            \"hash\": \"98cbbca364f4a2f36086cf54c218c65fa7de166c8bf04c15dbdd6d8326b6691e738e88d31b6e3b969d36a094c76af007a2d5fe17cdd10a30323ff2c0907b208b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-x64.zip\",\n            \"hash\": \"7a1bdc73ec79748276a8a57ff608c57c39076ec352b47ba15f7a05bf6738d9d8601572e5ce28cdc4ee6435fb97c42914dab4c84b700ca907e75b3c571559b08b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-x86.exe\",\n            \"hash\": \"b5e1fda95b97bbe38a6f083e322622d62bf311f365fbaba246139f3aa084d7abe2aa2afc3dbdfbfcf68d3a99876d62218064a0277839b86cdc6c571284bb6d7a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-x86.zip\",\n            \"hash\": \"5f896a4a47ea428d9a4c5dd7699941bc2c010560b6657028717a762b6d4e4baef05c1ef74beefabc516582c8a54c7924ce37d409d7e6074b8a0f3eb2263c77a6\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100-preview.7.23376.3\",\n          \"version-display\": \"8.0.100-preview.7\",\n          \"runtime-version\": \"8.0.0-preview.7.23375.6\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.8 latest Preview)\",\n          \"vs-mac-support\": \"Visual Studio for Mac 2022 (v17.6.1)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-arm.tar.gz\",\n              \"hash\": \"8d666df78ad89d518eab8a3ecfe85bba32c514276606b33a021ee3a645943a022ebe1becedf90d7a112e0d05608f167fd2d47fdf839191c80321ff21271cac31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-arm64.tar.gz\",\n              \"hash\": \"454b664a8eca860727bc5c1fd729beb854a0dfee915867f773aba166592a8c63570281c88ce528dc99339e9bcdb8000f0a1ce168bcfd779b3ae2a69ce60d49d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-musl-arm.tar.gz\",\n              \"hash\": \"14a3c0aaedc787f9a05258138fb70effedb627cb46206bfdbb912936472b78cc3e24878b10b03e95339d3b7382b46a13a87783cb6a77a49243b75b31ecd94cb7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-musl-arm64.tar.gz\",\n              \"hash\": \"8e5bfb89b287f6ab478e6bd9f4ce1ec482ba4d00b2241f6b4d6081c5885ac0399233bfaf983994b485ea6541a4a2ab9b362cbd582012edb09a6785a7cd7fb292\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-musl-x64.tar.gz\",\n              \"hash\": \"6b7bf38224573496eae08e3000792296de81e16a1bd5a253236427137de4a6a9d7950c99f08ad764e337aa33140db5160218f9ecea0bfbd60c6e6f301e6dd042\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-linux-x64.tar.gz\",\n              \"hash\": \"8bc71a586382f0e264024707f2f3af9a2f675dd5d4fbdd4bced7ab207141fb74d7c6492dfd94373505962b8597ae379259d152e4ace93a65dad0f89600afecd8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-osx-arm64.pkg\",\n              \"hash\": \"3d8d5516c4ba4905787b7e87b5d9f9fe28b96fafaa5df00a5e8cf32b3c502d6ee5b0c5698bff0f8b8dd069315e2d54d0b0e8e182bdcea1134e2d7211e1a0c6b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-osx-arm64.tar.gz\",\n              \"hash\": \"db3167dd5d125ab400f29f9fc982eacec5ab69764323831985f374ccb57e102ee93ed3c607ac5e0fd733718b41cbe9079ec735ca6466f152a6b238a8fee14fe3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-osx-x64.pkg\",\n              \"hash\": \"6b5db568e14efd7420e14cde34675cb72252f5cb3292b02f158f7295d538c260d1f34e6f7660e954ce94ccf1dbb3168591c8a87dae8e386b48e7e3cd2be71998\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-osx-x64.tar.gz\",\n              \"hash\": \"5a086a4d0d0910c4bb036f1501593363324324d1664b34b0468a6e2b20b9580611c5855509afa1d934e3814aff6aa6c7af8acaad3ca3be13dcf24a9b4efcafde\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-arm64.exe\",\n              \"hash\": \"4293ef88534bd674b0bff5c6169fba9954751469000453bf57d1b5a2cbed699beabc8529c8cca3f1f943387265fc88ae222f3fa1f61e620bd58c2a9d38012569\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-arm64.zip\",\n              \"hash\": \"b6ee0c8ea795cc988902f2680d70b27b739fb1020df09c2adcc15bbc32dcb3f747827fff08bb5064e6cf570f88bc90333892819f836fcaba241a7ca1ccd6bb6c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-x64.exe\",\n              \"hash\": \"98cbbca364f4a2f36086cf54c218c65fa7de166c8bf04c15dbdd6d8326b6691e738e88d31b6e3b969d36a094c76af007a2d5fe17cdd10a30323ff2c0907b208b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-x64.zip\",\n              \"hash\": \"7a1bdc73ec79748276a8a57ff608c57c39076ec352b47ba15f7a05bf6738d9d8601572e5ce28cdc4ee6435fb97c42914dab4c84b700ca907e75b3c571559b08b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-x86.exe\",\n              \"hash\": \"b5e1fda95b97bbe38a6f083e322622d62bf311f365fbaba246139f3aa084d7abe2aa2afc3dbdfbfcf68d3a99876d62218064a0277839b86cdc6c571284bb6d7a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.7.23376.3/dotnet-sdk-8.0.100-preview.7.23376.3-win-x86.zip\",\n              \"hash\": \"5f896a4a47ea428d9a4c5dd7699941bc2c010560b6657028717a762b6d4e4baef05c1ef74beefabc516582c8a54c7924ce37d409d7e6074b8a0f3eb2263c77a6\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0-preview.7.23375.9\",\n        \"version-display\": \"8.0.0-preview.7\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23207.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-linux-arm.tar.gz\",\n            \"hash\": \"92efb978a91f7d12b047e690e87fa0e9ea4b000f66440d535cc4e2ef96c53be44bce10942815ec28b9d72b00207281a95eac0f8fa1b95e8c4c8dfb5ac8ddebaa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-linux-arm64.tar.gz\",\n            \"hash\": \"8c4b4b36083d2b9c50e7f000d925f8a1cf0eb863367724892a12332970a6988afaf6a070efb97dfa3919039b780bb3a235fc51902c3762a4b5cd918f3082490c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"de339c978451d6a267786e2df5d03176e908b8f2620dee13556936f136236720a4c8b1929a9f43f5bb0d29c28a85d9642d290e5b4be4a09182f35d75cd28443e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e82cdf943268e56e739c094a0a4df685ec84790d8f10d3b261410ca434dc568f475879ffa57dc9765c1b2e3010578249c3a06eff9253556901fe364edf1c2a9b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"88e3326ba726562edeb2db997e0be3e66f00de59d372df8ded1d5a5cea57254fbaf4b4cadc091ff5cbe18eb23ecbdc86531b48e8fcd699ba226ac55624ee61cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-linux-x64.tar.gz\",\n            \"hash\": \"b8c8a5cd579a8ee1e082363a73a05a745499365445f784e6ff87547f9acdbe8b7ba525140ef10555bc2802c13af131c2d568ec6af020bd0dd2fdf82d4c258442\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-osx-arm64.tar.gz\",\n            \"hash\": \"19008a9f08504d262d94d3e24662b4ced5e8a3294629afa008c30f6f3aec26baeb8404e7f8a01b0d3f48f72955b0d09b7a82a624ffe3925f08c5b46da12af991\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-osx-x64.tar.gz\",\n            \"hash\": \"246dd11df597ddb960befb92f6e3e27da9961cbec5898d01c1e49bc7d3b40f5eec1bf1fe0adb7df24c74233f43558aca8106be4d32f2479e340764f385528346\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-win-arm64.zip\",\n            \"hash\": \"156a4c1dccbc9f4f65e9d8381de45b32bb9b9256743129463a44d3808ed8bf4e058250319f150be426a2d6240b62317685b9cb0e59bdc9c3a22b0f54511669e1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-win-x64.exe\",\n            \"hash\": \"d0e998a64c8338cb2b256023b957ecfb8f9d0b80f518556f5bce3c483965a08773986999538b51006a4ab098157877b55edac6d90ee31d431f316e55cf8d0df7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-win-x64.zip\",\n            \"hash\": \"c28731642b93a1073c82ab7e94c10b67678167576c1fd40fc2a1abeee8000d68f3bce20ceadb1e8ad21160c9e0dc8cc1a399bab6f807c85bbd93b876d752a788\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-win-x86.exe\",\n            \"hash\": \"e5637d21955eea9722947bee5d08cc1f2a0fb63bbbb4e37f87e869f4da97f91a31896fb8fc2f2651bbf91530712715408cce35e9b28db06555a72944880be609\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-8.0.0-preview.7.23375.9-win-x86.zip\",\n            \"hash\": \"4f46a814681c8fc59fe4d6db285663a0e96697359788e00b447ffd733d8099b4e8dfae7c45d2788b9b6a3f86320efc87480e328987cd91c16b3d523eddf6deab\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-composite-8.0.0-preview.7.23375.9-linux-arm.tar.gz\",\n            \"hash\": \"9ef7d063b506277aea02d806be4e224ff208bbe607f18d9de1666be8b7b9e12d4fe9374dc9b6c54d3fcf9f5cb103e471ebdc048abb8eb39d4d953d716327a166\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-composite-8.0.0-preview.7.23375.9-linux-arm64.tar.gz\",\n            \"hash\": \"a6831c7d5e0b2516290224c57c8a410ad6943100cc3cf45be25cbf3a7b45e3ec933dc5f5d291c6d421ea9d2bf3c19f1102a9f5ad5d8a2ae4ba72ab48d644d325\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-composite-8.0.0-preview.7.23375.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"5d0972dd9d5f19982c1afc0013f82e6e63bae45906438bd2b310d57ab61935df7bb9824e3e97943b895a3af6b83042ec92426580a371f0ce35e779c017e64a44\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-composite-8.0.0-preview.7.23375.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a74cf44cb2f0f520b9d49386cbf14a144f8c22d6bffb1128525d9daef3c97c5f8104037d1f71373ce6f4da220ce75d925963615bc5c8e3be22b01e54928ee8cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-composite-8.0.0-preview.7.23375.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"b6232961afce820f8b02a8a6dc6a928b7e0de4b806ccffa0cb9adc97e715df310df8f4358b2f1f2163634d5468f23233f7b4a7171e58e058c35b8b232497c5f0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/aspnetcore-runtime-composite-8.0.0-preview.7.23375.9-linux-x64.tar.gz\",\n            \"hash\": \"fd0573b40e3c007a02e8ca4c4c7486f6414249853712ffd3509d13bec0ece6f4b108c631d32188a9e68d562aa199c691472171572104707b8de8e5ac4958163a\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.7.23375.9/dotnet-hosting-8.0.0-preview.7.23375.9-win.exe\",\n            \"hash\": \"9bcbbec9a87cc16b3b2cb519557d929a7e1685f538d8ab3c6f20e2b397eea2e11453ced804fc826107303348af893076d18f526d60b8f0f25bac77c19320a53f\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0-preview.7.23376.1\",\n        \"version-display\": \"8.0.0-preview.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.7.23376.1/windowsdesktop-runtime-8.0.0-preview.7.23376.1-win-arm64.exe\",\n            \"hash\": \"09907ab69032c2c415200e9f5f7c3ff59a601931b9c47da5e28207d42f397987d03e7765a230cf1b91e414f9664aa2375a3909c93cb47b0897b88fbcccb9afb9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.7.23376.1/windowsdesktop-runtime-8.0.0-preview.7.23376.1-win-arm64.zip\",\n            \"hash\": \"8714fbe82998b636d4bac3b4bbaee15a485517275a17c989341271cf9a6e6a8724c520b4dabf5a65ff97e1b7e3aad79298fd7f055fab6b108036ff8962b5c6b0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.7.23376.1/windowsdesktop-runtime-8.0.0-preview.7.23376.1-win-x64.exe\",\n            \"hash\": \"272cd281dae62dd3deb6cf5506c189ff7ce4919f9300082edc96307fc3596d47e1d9f1cf0109de637fc0f663b0bf262589150f1942e724f6688a2840876cfa82\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.7.23376.1/windowsdesktop-runtime-8.0.0-preview.7.23376.1-win-x64.zip\",\n            \"hash\": \"e48075f1cba58c1a40746fed22f4433517cabc23dd65ed13106582620868bb829c476502dfedd057f65281c5db6dfabab17a61cf9d6e381f2d873921d00fa0ad\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.7.23376.1/windowsdesktop-runtime-8.0.0-preview.7.23376.1-win-x86.exe\",\n            \"hash\": \"0595f1581ebdb123676bebd5bd1daf85647f8a0dc00803bf7541ea109152fc981b08ebfa4f1995db13d0e5d26ff51beea97de3feb51fc6adbb97ec5e5b1b2e93\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.7.23376.1/windowsdesktop-runtime-8.0.0-preview.7.23376.1-win-x86.zip\",\n            \"hash\": \"0e9e633b7b6d8663ae838d039b55f02a0494172251b5681bc87ad3555613d081ada5c76c664dc74cf3241fce295af6920b6f6ab402fca7b7caf4f8e18cd983be\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-07-11\",\n      \"release-version\": \"8.0.0-preview.6\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/preview/8.0.0-preview.6.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0-preview.6.23329.7\",\n        \"version-display\": \"8.0.0-preview.6\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"17.6.1\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-linux-arm.tar.gz\",\n            \"hash\": \"22bb9e49f8d69efc2864364318a763877792b27a5c472cfddfeb622e126892225c18cd80237336031f00e324b807dcb2316e6281d489d5e11620ef3e1fd2cfcb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-linux-arm64.tar.gz\",\n            \"hash\": \"870b08f9e861f51e5d3e36df13a164bdfd5bcda4349992bc7f05cf386868dac5658ee8e836fa7726168f8f8a9bd4e66268ab09e07acd81d924d9f43b93ac31bb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"e76ac001841870347f4a4101396f853275474dafa42c03c11a8f3590f5413d90013b2e3e57a9f34d2bd5e0c0e8b7e68b7d63bec9655e05c5a978623ca481a3e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b17101bf0fcf75c526b7d15c9c181bddb6af23aa57153eb7d9f05b0d8ff7d3cefebf1041e7c92413d152e30c8345c907dc790f5325f2205a7c65a8cef494ffa1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"4200335f7c2192cff85668bae6882c3f0296656730f532ebbbc218d1e52afa6d0d75f0369ee56cc91b5b5868f90a96b2004fc1c3a9fe0eacc07cff3974b5ea31\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-linux-x64.tar.gz\",\n            \"hash\": \"382a74804ef96aa1b829977ad125b132d5432c1956460187566047be02684cd027d0a1831cbd0fef1ca0e36bbfbb2a94a6e21e4be7fd9d7b663ad05b838f2f7b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-osx-arm64.pkg\",\n            \"hash\": \"ef65532b7934e76f05b4896eb78819fdc6e1901758d0eef6a47702c53c3c4f319a987289464ba8a5c667d3c536ae602fa7c81c7f2f6d60df76fa24b23261b95c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-osx-arm64.tar.gz\",\n            \"hash\": \"7fdbb3bb86494df348f3645cacc67c77eb6a5d1bab515ca673f653ae92454642585c178965864e2c8765806ea6f90109b00cfed68396dc0d651ed833777de182\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-osx-x64.pkg\",\n            \"hash\": \"edf6b5f6a9d9efcd34fc06690ec68f83bbd34166439188ecda0cf07031f9d9c83c161ae445c98893a96802b24b5d62076507a2a4411554c19ea8e179904aaa82\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-osx-x64.tar.gz\",\n            \"hash\": \"76131663472d5fdd6b8a214a898b324cdaa59f96808df7d7e8f34f25d423ef9a85a775da9fafbe2e659f616e5f1e3cd1d72b8bd1afa95790acf8e51adbf2fd45\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-win-arm64.exe\",\n            \"hash\": \"3e639e77c586df3133f54147d95dd51ed3c3db0d64f88c2b96bff9a4f6c27f0e33de651b7f67e0fcd7c48023beacb2af8bfb7672c2bfd785fd32e6c484f212b3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-win-arm64.zip\",\n            \"hash\": \"d6e7518977be0b39e89c6e85eadf606f1ded7a5ffed98cc598c0d18e59dea768f663d3f95329cfb67ed17b741a736c2e542af1a462aa259eefddee2291a41867\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-win-x64.exe\",\n            \"hash\": \"447a5521b90a7cc572c14ad4102d883e59a13afcbae5caa376830443749f6ee3f6e425f346e4d6794bb5b69b614ee7653fce410be65486e585147d09e5bad635\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-win-x64.zip\",\n            \"hash\": \"e382cf0eec43ecca21816afd70c634d14c7f80505e49b03223485174da05889c9c043da04fd92d31e38f81343ed79a22277524f529650641393ca04eca912534\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-win-x86.exe\",\n            \"hash\": \"bf4d26ade50796c8527e54d8b329ce7e76eb808c769b10af6718a7d12318a6fad9d4389bd9c4dc77becee5af83e5aa92302b6a97c4649170cd8bdba7c30404cc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.6.23329.7/dotnet-runtime-8.0.0-preview.6.23329.7-win-x86.zip\",\n            \"hash\": \"5043c2586ec6d1355a8db030ac2ea7498bda6392f45233b0c0e0b14d1d7d4e5ab00f21c4bc7aedf34903346fe6380f975bf28ef2fc5362b68afeb47f05bb7637\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100-preview.6.23330.14\",\n        \"version-display\": \"8.0.100-preview.6\",\n        \"runtime-version\": \"8.0.0-preview.6.23329.7\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7 latest Preview)\",\n        \"vs-mac-support\": \"Visual Studio for Mac 2022 (v17.6.1)\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-arm.tar.gz\",\n            \"hash\": \"bffe374b1a16e285ef5eae8f9ab89fb7e8fb576c7f9e1853f42561297dc7edc2280301ccf3d9f909c8468bdfa9064bdc9a05946e539cf9b7084133cf29dca6f1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-arm64.tar.gz\",\n            \"hash\": \"b7c83b9e6fb713a6b59b700bbc53cf929514ffd7a63870e021934c59349b40126c898c1b7428acb579d14973d6d2783a96956233eb36ffff299a5aa39f07730b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"ff9f89c04fe35de9fb72437018607c530d25df414c8f56d5faf1b149d6f8cac8e7f779ebc9e3bfcb393d5a9e996c5296072595f1499e65f517c93c487d12d459\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5166b11e5c33c6c7561923ab03967e074d66b1aa3174ad1c9bfc8dfc46b6db636b2ca74f018760be8610dda5b73dcd6e58af373ab02047921f03f10a8d1b128a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"e102714b7b94a33b62d194356f45cb610dc5ab749906d093259cb14ae48abd463738c8068f037c8c4c299820c05d4b7968bb0d87d966b87e51d516116bf7bef2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-x64.tar.gz\",\n            \"hash\": \"ef568a1ecf6140237249544673a52dc496cff682d1a078e9309d195d78e632b3870b7fb23eb38cae7b0638c564f6aa340ca2e209c4ae4fbcddb84073138e8a08\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-osx-arm64.pkg\",\n            \"hash\": \"41ab81a795aa6daf0fbb74f64aa74059a4a6ec5ccc5e4fcfe2fd507f210e357d4c71d1f7053556248a9c7ea29e2d6127f1b45df083d555fec0691d477d2500a4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-osx-arm64.tar.gz\",\n            \"hash\": \"316f1cf3bbf7a7fc775e792ad9a5fb20432cec4677a0f6399004836f7e2c1f36ddfc13df8e47f7e08c16ee6b6183930669120a5cbdd7af173c84741cde135fb9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-osx-x64.pkg\",\n            \"hash\": \"91d0973d31d0872dbc005a6afb64053cce62a99255586226bd696f911d0fb487669bc720afb19248edccff1f38def74346c9ca4b325375e2520c9ce4340352c0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-osx-x64.tar.gz\",\n            \"hash\": \"504c1c05c012229210a7745c2be9e501416a7a87357dfb5c01bbc76096d367f1a376aae65358baa7a662e55805607f7ee5a38f9f3490778c6ae66c88534adf8c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-arm64.exe\",\n            \"hash\": \"0cc3b4787cb0ab40bdd415c00d4fe6e15477750e791ad17f1923949463d09e281e287144b9b3aac843d2be5bae7fe7ca229641d5078764c922aa538f1b9d0ff8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-arm64.zip\",\n            \"hash\": \"8989afdad5bbcde451a99bb1cc2ef2c5d3801334ad82471006fd0079b2fed8f514e29491be3fb4a28e3df75aba54f20a49c955da720b797778f4a8e062a29501\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-x64.exe\",\n            \"hash\": \"eca21210333a8bd2f3c559a013ef5dcda2fddeb45a6b534c3e98108eb7d84e85f7798a1d49ad802cf564b80d4971d56fd1eb7560d432f10c5827c113970969e0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-x64.zip\",\n            \"hash\": \"3c2813df353b7f5ff924fb0790e83e11905b4402a0acb7e951059a20696e3f0e8520541697470c681dc64cce2e3e7925dda96e684b136939d83a3bfd95790013\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-x86.exe\",\n            \"hash\": \"5386ab41e17018c604c9f028a46b5b25deb879ed751917a73106c29b3c5debcd7dc73f8018a1d32fd6b00480395cb4d6cad37a1dc1bb622e41eec940499d3722\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-x86.zip\",\n            \"hash\": \"7e22b96e8c00febae465dc09a4b3c2c0c49a1310c73f3ae374d2c8606ef73a1715d51c97050238f3f0384de401b7f5ef9cfedcb3cbb737c641e50735eecea358\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100-preview.6.23330.14\",\n          \"version-display\": \"8.0.100-preview.6\",\n          \"runtime-version\": \"8.0.0-preview.6.23329.7\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7 latest Preview)\",\n          \"vs-mac-support\": \"Visual Studio for Mac 2022 (v17.6.1)\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-arm.tar.gz\",\n              \"hash\": \"bffe374b1a16e285ef5eae8f9ab89fb7e8fb576c7f9e1853f42561297dc7edc2280301ccf3d9f909c8468bdfa9064bdc9a05946e539cf9b7084133cf29dca6f1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-arm64.tar.gz\",\n              \"hash\": \"b7c83b9e6fb713a6b59b700bbc53cf929514ffd7a63870e021934c59349b40126c898c1b7428acb579d14973d6d2783a96956233eb36ffff299a5aa39f07730b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-musl-arm.tar.gz\",\n              \"hash\": \"ff9f89c04fe35de9fb72437018607c530d25df414c8f56d5faf1b149d6f8cac8e7f779ebc9e3bfcb393d5a9e996c5296072595f1499e65f517c93c487d12d459\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-musl-arm64.tar.gz\",\n              \"hash\": \"5166b11e5c33c6c7561923ab03967e074d66b1aa3174ad1c9bfc8dfc46b6db636b2ca74f018760be8610dda5b73dcd6e58af373ab02047921f03f10a8d1b128a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-musl-x64.tar.gz\",\n              \"hash\": \"e102714b7b94a33b62d194356f45cb610dc5ab749906d093259cb14ae48abd463738c8068f037c8c4c299820c05d4b7968bb0d87d966b87e51d516116bf7bef2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-linux-x64.tar.gz\",\n              \"hash\": \"ef568a1ecf6140237249544673a52dc496cff682d1a078e9309d195d78e632b3870b7fb23eb38cae7b0638c564f6aa340ca2e209c4ae4fbcddb84073138e8a08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-osx-arm64.pkg\",\n              \"hash\": \"41ab81a795aa6daf0fbb74f64aa74059a4a6ec5ccc5e4fcfe2fd507f210e357d4c71d1f7053556248a9c7ea29e2d6127f1b45df083d555fec0691d477d2500a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-osx-arm64.tar.gz\",\n              \"hash\": \"316f1cf3bbf7a7fc775e792ad9a5fb20432cec4677a0f6399004836f7e2c1f36ddfc13df8e47f7e08c16ee6b6183930669120a5cbdd7af173c84741cde135fb9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-osx-x64.pkg\",\n              \"hash\": \"91d0973d31d0872dbc005a6afb64053cce62a99255586226bd696f911d0fb487669bc720afb19248edccff1f38def74346c9ca4b325375e2520c9ce4340352c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-osx-x64.tar.gz\",\n              \"hash\": \"504c1c05c012229210a7745c2be9e501416a7a87357dfb5c01bbc76096d367f1a376aae65358baa7a662e55805607f7ee5a38f9f3490778c6ae66c88534adf8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-arm64.exe\",\n              \"hash\": \"0cc3b4787cb0ab40bdd415c00d4fe6e15477750e791ad17f1923949463d09e281e287144b9b3aac843d2be5bae7fe7ca229641d5078764c922aa538f1b9d0ff8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-arm64.zip\",\n              \"hash\": \"8989afdad5bbcde451a99bb1cc2ef2c5d3801334ad82471006fd0079b2fed8f514e29491be3fb4a28e3df75aba54f20a49c955da720b797778f4a8e062a29501\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-x64.exe\",\n              \"hash\": \"eca21210333a8bd2f3c559a013ef5dcda2fddeb45a6b534c3e98108eb7d84e85f7798a1d49ad802cf564b80d4971d56fd1eb7560d432f10c5827c113970969e0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-x64.zip\",\n              \"hash\": \"3c2813df353b7f5ff924fb0790e83e11905b4402a0acb7e951059a20696e3f0e8520541697470c681dc64cce2e3e7925dda96e684b136939d83a3bfd95790013\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-x86.exe\",\n              \"hash\": \"5386ab41e17018c604c9f028a46b5b25deb879ed751917a73106c29b3c5debcd7dc73f8018a1d32fd6b00480395cb4d6cad37a1dc1bb622e41eec940499d3722\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.6.23330.14/dotnet-sdk-8.0.100-preview.6.23330.14-win-x86.zip\",\n              \"hash\": \"7e22b96e8c00febae465dc09a4b3c2c0c49a1310c73f3ae374d2c8606ef73a1715d51c97050238f3f0384de401b7f5ef9cfedcb3cbb737c641e50735eecea358\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0-preview.6.23329.11\",\n        \"version-display\": \"8.0.0-preview.6\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23181.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-linux-arm.tar.gz\",\n            \"hash\": \"00c40d60abd10dee7bba8f517640b60f3559137d3032a9916f0e5cd6ee0eeda3cfd903d1b214edf1e136450b65aa83cf0f00a90128d008bd78a92982440563db\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-linux-arm64.tar.gz\",\n            \"hash\": \"61387e06d59e4a5a7d22c4b8dae6d984ddd62e4743824136c371a72ceaa5ec607af2bbae269df2d707bb80623d9ead6eac0765eed62531e1dafba80418ba83bc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"6445c2bc97c9b099dff8bd28fa6a2026717fc3a7b3fe78e73b21b0ecf6432c052b34fdd5611a527bcf7b857869b087b8b216f83404e8ade07b18fceac3665388\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d773344c57a1fe7584b1f7e50ec8ef1441dafb25c47775fee51ebe51076d26ec4efb05c6b654d31a8e60e5817c806a7a4d2dd7988ba133d25f71b68a784d1e6a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"87b85205eeb2b803bdda931b347d1186411af4e94a26a30c914d332ee3769926d141b5c3f5987f3838b7b30031d523aa4d04b854a92cef36691d30a60b6250f5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-linux-x64.tar.gz\",\n            \"hash\": \"767ee4f67777d53edd322c771baa70d592e9fec99dce66e66a67fdd3c377b3f791f0f89b7dd5bbce932f499266f52f21449728849def706d976b55dafe2e6551\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-osx-arm64.tar.gz\",\n            \"hash\": \"345d7936e64db23daa092224f4658d6df5fce541523f76a42bfd68bd7ceb7a393b77b604a580b02a27e29550063b1a780da494f13be6955f0030a02cf17e7807\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-osx-x64.tar.gz\",\n            \"hash\": \"23877087c9b16f036a0710ae014901be2cdd647d6e5e8ed431baf3d8384175b5b81380dbe402f260ba07b5ca6856a746417d0e610ca4e858866b3dd174ed33d3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-win-arm64.zip\",\n            \"hash\": \"a337e666c49b725988502e7c397e0452e217349b9467a224950162e62bdaad37c322b4c4e8799e233808fe162d5b3d89f1d9045ae65a6f0f6a9b067b2d66ecfd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-win-x64.exe\",\n            \"hash\": \"dc3dbcc8546ce5f4c6ed1c6c05a0595f8f72fb3afc610c98dea35227b8aa2541ff82de11e1291120c2f6fe83389a33e966bbf675411d6c731669ac4dbedacbdb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-win-x64.zip\",\n            \"hash\": \"d2c3ae8c3d4cd59f40edb1ee8ca607ea9d73828f9a22c800c517f07cb85ab5a475e186908c41f5f39e3de89a8a5046910b93878942f530f777e6641f4fd39e33\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-win-x86.exe\",\n            \"hash\": \"147fb62aaf65d33bcde7998079361e914cf8c09586a460d7dc7781b592e03cb7267ecfdd4b035feef58d09563a14d182af9855dfaec00a05ea3277ae493651d5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-8.0.0-preview.6.23329.11-win-x86.zip\",\n            \"hash\": \"714325e24cb056e079011bc0a6382e30b5d6d1bcf0858e305d023b401f8372fdee3c597480164745484597e001f6116f52196b7e0c09b749c61cc15b8a947cf9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-composite-8.0.0-preview.6.23329.11-linux-arm.tar.gz\",\n            \"hash\": \"b7ac118f578202e7d5a760e89ff9dbd931552f5daef38ddc7aa1358cf48158669ccfbb1d2a1d1cfd38cb00785d440fc6508473a31ef17cd41450262561ea667f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-composite-8.0.0-preview.6.23329.11-linux-arm64.tar.gz\",\n            \"hash\": \"dcee55dd728cbd1b09fb5c1731a82a9d746e733fa5e26b5a54b052a587f1a4e8515fb09b5a62dde2932414ec0a6df2170df98083197aa46d03ee1662429c8629\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-composite-8.0.0-preview.6.23329.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"9e289cc2272cf4ad503d5a5b053063dd249e4db990af5e994259eca1db38bf6fcda7a26594af23a62765c4d93b2deafbe2620bb77f12a9c715815c22ab8a9195\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-composite-8.0.0-preview.6.23329.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"663a1e1083fb16467b8ac1ac433ccdfa07988d565f47585266de46d16a3173aa5fe84fd5887bc19e81a468a39d401acb316b47f09a21333cc8f9ac4b72b22fbb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-composite-8.0.0-preview.6.23329.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"55fac05c66993eb2fea0c014cb7a72abe2c6a4932077eec65ab76860655efc7d296bba7d19c51c0e5d43c83eadf63178757d87cbff6e6c291d99790d704b7d15\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/aspnetcore-runtime-composite-8.0.0-preview.6.23329.11-linux-x64.tar.gz\",\n            \"hash\": \"5d1c34a1d3adefa63e5ab1d7ab39f062f66972536c1320a119da3a99ca175a3970df10c81b68d6e5654ff3f2a91e504e298b0711aac1d58f709ef4791728164a\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.6.23329.11/dotnet-hosting-8.0.0-preview.6.23329.11-win.exe\",\n            \"hash\": \"8eb1fd97d71ff1550875e770eabdeeb0dfd2d7855fa6174a851b549da104e5eff8ee4836026d258063911efe1b999eaaa77795b6113fa4ec46cd4ade0d29b0ce\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0-preview.6.23329.4\",\n        \"version-display\": \"8.0.0-preview.6\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.6.23329.4/windowsdesktop-runtime-8.0.0-preview.6.23329.4-win-arm64.exe\",\n            \"hash\": \"82a927012d83fe0c491553ccdc3f5647bbc8f976840c1fabfc25eb489efda1c0bbf561682c3c589fa6ca98c26c66a99511b682805d564f48b8adedf2a53e66ec\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.6.23329.4/windowsdesktop-runtime-8.0.0-preview.6.23329.4-win-arm64.zip\",\n            \"hash\": \"7e991a01237c8be65e62c63c200920416e8e81bae07dd028507502bf890ba58a1f1d25eb91fb256b2b5c0a669d4084906925eb4f23c45872ea7ece30b2f53b0a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.6.23329.4/windowsdesktop-runtime-8.0.0-preview.6.23329.4-win-x64.exe\",\n            \"hash\": \"65b1b29a7c1b4c1c6fe5f404e51d9a8cc36f7b7acaba273e82ef5940498fd7fa55d5bd19731a3a6e43e4bd8accebb1026edf85b4d8875d3868c3c54d47eb054d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.6.23329.4/windowsdesktop-runtime-8.0.0-preview.6.23329.4-win-x64.zip\",\n            \"hash\": \"69cde639c31e978300963e807a4f6af3b15892966ac309a89e426f81c58f471b4d5180da7543c5bfc16dc1d6d71543a584ab5e53848166825206d3c748297a52\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.6.23329.4/windowsdesktop-runtime-8.0.0-preview.6.23329.4-win-x86.exe\",\n            \"hash\": \"10f7b56dfdab6a562bc8f3783b3dd2b255c17905b26d9aa4a00ad6e60a8688365be50bce46a1afacfee833f0ac8bf384ee9a895eca15bd744b1e477b3ede1db4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.6.23329.4/windowsdesktop-runtime-8.0.0-preview.6.23329.4-win-x86.zip\",\n            \"hash\": \"f65df62427781c4c614f9e758366c83d823c9845bf1a0b8ec63e85d223a9ebe55118f18ea047c7a1f32d361ac2461f2bfae2a5b9c1b8a07b1569c2ee945a95e3\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-06-13\",\n      \"release-version\": \"8.0.0-preview.5\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/preview/8.0.0-preview.5.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0-preview.5.23280.8\",\n        \"version-display\": \"8.0.0-preview.5\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-linux-arm.tar.gz\",\n            \"hash\": \"274c3b7b431ba7696caa0942475a1191737601f8408c054f7aa0ad90ae178077fbde48a720fee94fd77edd73ed69ba4da18d8581341ca440d3c25ba377303f61\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-linux-arm64.tar.gz\",\n            \"hash\": \"e53ea13c70b4d358b3a313b3edb6e160a3453d62eee76b13c9f4bbb01c79eaf5a1aea9afa3b565ae9adb74f3f674fb5db9135dfe6cbc1be03b34a8d6288b3965\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"a481da661f3946761b9d2161a6e5aff4254b995db0d3b44732aaadec6b05f9d1d166ab21bd87e3a44e41142619c402b83efd82145fa1ea704cd193a02a315885\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0f4a239d098a0ba9ba0089b0ea9dbefa188e59f0d377fb8d94cd75af1ac1a03063c49ac277bf1700ed07a0d59ad913a8863616b071f27d0e3afaab4603bab6b6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"bd70483fb053519f5d001571595394b0da27cc53d6fa9bdfd1d9dfb1059495f44e82662c996b98e9c421ebab5a1334ccaed69cf88efe0177228aff7475466e3f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-linux-x64.tar.gz\",\n            \"hash\": \"0fa3d9bef5300533b4f266fc1983c7bc8eb55c6c9e8ddf86978a3adb911663a2069c9ed9e428f8d2361558a40edef5bfad6ef75ea2a728cf700a23cd38e7bbcc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-osx-arm64.pkg\",\n            \"hash\": \"d519cf5b97b6b1caae3b7e6a666475569412715bdb673143a3aa046a1f9888876a00e31490e86b505d1131d6313929c4b5f686b53257501d77f1dd48be9304d2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-osx-arm64.tar.gz\",\n            \"hash\": \"7c9a2086b05a8fa90b6077d3627d1afcddfd0977d3203759a66da3b0784cccdd88f1cc3c559b30f18d4892ee7cf9957cd0ec61eeb30a30532988a78146fa6bd0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-osx-x64.pkg\",\n            \"hash\": \"b8fb3354d3320c15af3d595d7902f8dc7a1709e4e31b0c9a30a36dedd22096ecbe84f3d2d2f9e75b67c28217286685b0ff2b9c78252a5a8432e852dab36ef56c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-osx-x64.tar.gz\",\n            \"hash\": \"190b316c22a833339d0af75b80699a50049cdb4ba0d3f0b0c5e2eed28900930ad7d6043f884ec01cc4406c620504f30cabaf3e3e30bb266e591eb34f22876ed1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-win-arm64.exe\",\n            \"hash\": \"96121819da90431a6c5145b1b28b08dda2cbde63d26361c3d2731494521900208262c159f3b84817f596a41d5e6df55816fd56420d9580ffd4468e9390bf314a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-win-arm64.zip\",\n            \"hash\": \"253904976594fc53ed18ace0ecb6648b0dce52b17d54dade49fabdff5db9c3ce5886ff2ed0e68c14890f01929bff2ddbf199141c55e86db6cdbd681c01f2a3e9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-win-x64.exe\",\n            \"hash\": \"08797bc4162022327fbe71e57ba6c4dbf9ec1292d491b2141ae245d4d49e9b453c90305d532ccbf22aa65948535c8214b8722532e0e1538182c2864f98734c3b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-win-x64.zip\",\n            \"hash\": \"0100ded876f38bb198d9768e75eddd7fb7badfe8c0ac2877545d9004fd0844a4f36d65928ec6506ab8bfdc78b85d2623439ab914c0d9985ff0516fab289a4254\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-win-x86.exe\",\n            \"hash\": \"0d70b45c127a703f274e2b2c29ddf57118c80f12a0c727dec800fc013a9f63353213bd3c57fe51d978fa34afabfda80830b09001dec454b08fb1ffb761d16543\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.5.23280.8/dotnet-runtime-8.0.0-preview.5.23280.8-win-x86.zip\",\n            \"hash\": \"f3458e9813c8c0c98b941e0503cfe41ad1d5eda26f9af362b8bcdfe0f4ee2e409094cd6a66a1dde1a0cdfb221c061f90d8676fa7dc9d45e683353d696a0629b6\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100-preview.5.23303.2\",\n        \"version-display\": \"8.0.100-preview.5\",\n        \"runtime-version\": \"8.0.0-preview.5.23280.8\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7 Preview 2)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-arm.tar.gz\",\n            \"hash\": \"31c2ecf28823ea90314f0670b0798d02577cde76ad1b84f6ed987aa93e699e3c257f160c3da5417e09b8c20516c2b4740a2ca0f70dffc0b14c5340fba1fcef37\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-arm64.tar.gz\",\n            \"hash\": \"13c6c559646c359ce07584328ef2e5cf5cb70371197deea9d31caee249c45b07ec1b874bcc5e3cb3b601b5ae280883cda555fd4cd2bf4a255d3be431574e46d6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"28774a1dd28edc81d7ed3dae3c7baa4f0a7e67ca08835d688d234a7a8ffafa97b1b6b1e4807f67b8d583abad14c1542dec19434d079ec7ba3d7fdaece65155ad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"efde54715787ccb07f59b2a5cdc1e69fbcd3c81c2dbb11d8073efe5518745f9042d2fd32334413a6c47a1af847e1fe0cfc70f33452d54c55da67d43bc611904e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"e4b8d2286544398552394bd69731ea11c3c312a59acf10c0684825eb1203b8c124cedf8f5f66994b326a8dcc804ccf8e0879e3e126b986031cf4eaaea0c0bbd5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-x64.tar.gz\",\n            \"hash\": \"dfe2085a92854a5cee84cb7be9344368f5dcb6333c4ca215375a34b862f3a3ee66c953b9957f7b46f6cd710992ee038f6b4c2bd16464b4a216a1785868e86f7c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-osx-arm64.pkg\",\n            \"hash\": \"dd5480b444d29317f47696845d26f793eace807549adcd516cac82632439d63f56998b7624d1ae1b2cbbdcad098ebe2f3f3f3f5a23e02477d6d375c4d02bf059\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-osx-arm64.tar.gz\",\n            \"hash\": \"2b3c95d41fca29b6c3812d47561b14d312d270b599e88a8c02918695ec285d171ab69233567c11820bdc16fe03dabd33d23fd6fd8a987ae36f33f87e59b89f27\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-osx-x64.pkg\",\n            \"hash\": \"187438f71539586c0a2372fe072bdfae78d6d0b73ce51d876d4a72feb5ad70fd75912f3add6b1ec9368eee9711b59c1c1200ce491b2b86663e26ea4ef3f7cb08\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-osx-x64.tar.gz\",\n            \"hash\": \"f4f42021b88abe1adae7aed539ad0b31ad524a7f2af79a974030bfc50aa8b2e9424fd5f38cb25f40277eb9b0a76f68255e7a97058bac49c30c20a72ddc59d0bf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-arm64.exe\",\n            \"hash\": \"477138423baa0a0673a65022bf92575bf9dfc4e6136eb4fbd4a82c4ac39ec5d3adf7589cca2fac98fd667e4a0a3268df17132cfbd5bc8f9cc46f06636e2354be\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-arm64.zip\",\n            \"hash\": \"e6d8856264eba3fe77edae5574e785b0308cba8561b5b580783e72f5234eb4706bd62ca1cb9c81ad345e69df747cac697a367f02374a28ae869ce9411a1bc716\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-x64.exe\",\n            \"hash\": \"e9782b344c58b9095a209934206aa6d8329d1c850e625ac89d42866a313dca19ecd1da3b83002a33ac880e482aa3bc24cdd14168b70147457ecd7c62c33f5add\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-x64.zip\",\n            \"hash\": \"5de8ac61d97425429f9c1d67acddd3ae157526610e0cef1a42399d0fa19be7665f77eb7a44586d2282385411a31466a711da12a7fdf484776364f792c0518746\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-x86.exe\",\n            \"hash\": \"262b0bd3e30fc5afb200f716d2800051785d2018c869cb3567f5305d87b4c0c6390cb8910ca83126efd0d34207020ca3c6bf8ca4ff3c4779f62731955578b563\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-x86.zip\",\n            \"hash\": \"c9ffad27517ac279a621d0ee406db7a9b6012797f1cf6f5dc1585bc774e7d2a7719bf19dd072bfb49ac673c1d0618a7a82f8c56e26a3c3ad21395ea73c586cb7\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100-preview.5.23303.2\",\n          \"version-display\": \"8.0.100-preview.5\",\n          \"runtime-version\": \"8.0.0-preview.5.23280.8\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7 Preview 2)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-arm.tar.gz\",\n              \"hash\": \"31c2ecf28823ea90314f0670b0798d02577cde76ad1b84f6ed987aa93e699e3c257f160c3da5417e09b8c20516c2b4740a2ca0f70dffc0b14c5340fba1fcef37\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-arm64.tar.gz\",\n              \"hash\": \"13c6c559646c359ce07584328ef2e5cf5cb70371197deea9d31caee249c45b07ec1b874bcc5e3cb3b601b5ae280883cda555fd4cd2bf4a255d3be431574e46d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-musl-arm.tar.gz\",\n              \"hash\": \"28774a1dd28edc81d7ed3dae3c7baa4f0a7e67ca08835d688d234a7a8ffafa97b1b6b1e4807f67b8d583abad14c1542dec19434d079ec7ba3d7fdaece65155ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-musl-arm64.tar.gz\",\n              \"hash\": \"efde54715787ccb07f59b2a5cdc1e69fbcd3c81c2dbb11d8073efe5518745f9042d2fd32334413a6c47a1af847e1fe0cfc70f33452d54c55da67d43bc611904e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-musl-x64.tar.gz\",\n              \"hash\": \"e4b8d2286544398552394bd69731ea11c3c312a59acf10c0684825eb1203b8c124cedf8f5f66994b326a8dcc804ccf8e0879e3e126b986031cf4eaaea0c0bbd5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-linux-x64.tar.gz\",\n              \"hash\": \"dfe2085a92854a5cee84cb7be9344368f5dcb6333c4ca215375a34b862f3a3ee66c953b9957f7b46f6cd710992ee038f6b4c2bd16464b4a216a1785868e86f7c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-osx-arm64.pkg\",\n              \"hash\": \"dd5480b444d29317f47696845d26f793eace807549adcd516cac82632439d63f56998b7624d1ae1b2cbbdcad098ebe2f3f3f3f5a23e02477d6d375c4d02bf059\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-osx-arm64.tar.gz\",\n              \"hash\": \"2b3c95d41fca29b6c3812d47561b14d312d270b599e88a8c02918695ec285d171ab69233567c11820bdc16fe03dabd33d23fd6fd8a987ae36f33f87e59b89f27\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-osx-x64.pkg\",\n              \"hash\": \"187438f71539586c0a2372fe072bdfae78d6d0b73ce51d876d4a72feb5ad70fd75912f3add6b1ec9368eee9711b59c1c1200ce491b2b86663e26ea4ef3f7cb08\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-osx-x64.tar.gz\",\n              \"hash\": \"f4f42021b88abe1adae7aed539ad0b31ad524a7f2af79a974030bfc50aa8b2e9424fd5f38cb25f40277eb9b0a76f68255e7a97058bac49c30c20a72ddc59d0bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-arm64.exe\",\n              \"hash\": \"477138423baa0a0673a65022bf92575bf9dfc4e6136eb4fbd4a82c4ac39ec5d3adf7589cca2fac98fd667e4a0a3268df17132cfbd5bc8f9cc46f06636e2354be\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-arm64.zip\",\n              \"hash\": \"e6d8856264eba3fe77edae5574e785b0308cba8561b5b580783e72f5234eb4706bd62ca1cb9c81ad345e69df747cac697a367f02374a28ae869ce9411a1bc716\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-x64.exe\",\n              \"hash\": \"e9782b344c58b9095a209934206aa6d8329d1c850e625ac89d42866a313dca19ecd1da3b83002a33ac880e482aa3bc24cdd14168b70147457ecd7c62c33f5add\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-x64.zip\",\n              \"hash\": \"5de8ac61d97425429f9c1d67acddd3ae157526610e0cef1a42399d0fa19be7665f77eb7a44586d2282385411a31466a711da12a7fdf484776364f792c0518746\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-x86.exe\",\n              \"hash\": \"262b0bd3e30fc5afb200f716d2800051785d2018c869cb3567f5305d87b4c0c6390cb8910ca83126efd0d34207020ca3c6bf8ca4ff3c4779f62731955578b563\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.5.23303.2/dotnet-sdk-8.0.100-preview.5.23303.2-win-x86.zip\",\n              \"hash\": \"c9ffad27517ac279a621d0ee406db7a9b6012797f1cf6f5dc1585bc774e7d2a7719bf19dd072bfb49ac673c1d0618a7a82f8c56e26a3c3ad21395ea73c586cb7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0-preview.5.23302.2\",\n        \"version-display\": \"8.0.0-preview.5\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23154.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-linux-arm.tar.gz\",\n            \"hash\": \"dc15a265c2ec45454f5a2823ac2dff229a691caff08881fe3777e37f40b1a3d2fa0c74af86c7331fc60811f88afa9c9cc4eee7594c33236dad62a56a0d4a7d9c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-linux-arm64.tar.gz\",\n            \"hash\": \"b54203fc664d4390441278e1917fec13466df174672622740509ca973811cfa178a851ac930c6d0cb03410bab8f630f4dd21609d2d8706f8b64bc23fb88a1836\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"3995f7f9b4dc1d9c06082295fde6c9b2db10e6e680cec76d26589a95d42d075fadbcbeab630071c0e9d2258ec079fbcd86f20ab7986df683499f069a76fc52fb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5053934dc9ef63a321509b29f836f9e1277c8cfe63d6e7ed027ed5c393b11bb3b7912d044a3be8f299d0b642ff4aef81ad7be1be515a64e98c5c58025c020494\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"5e181bba7d2324a960f483c4474708232841a118baa3fd75a34245fc3d02fcca64a20211d0ca8db89dfe19f323106f6928fe7eaf0e691718b1f0f67a50eeab38\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-linux-x64.tar.gz\",\n            \"hash\": \"e9d570ceb193ab9a3e0b2ec3549bd1b67555ed4a333a6654ca8e4020bc38f42eadf3a690f996669c24af428222a6bf989b17b8cc0f7f276db928b2a40a7bc049\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-osx-arm64.tar.gz\",\n            \"hash\": \"ead98dd5d81efaf8b80f2c9223f55557a54c30f32118c778258ece80e6ff3d63cb55af85e4a1e463d88f356f54d790af35148b9025a9b86147bb6c4a3153b950\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-osx-x64.tar.gz\",\n            \"hash\": \"76da6d5bfaee0779aab41eaf2ca5759e2f0de919f89446883f6d8d46d4e1643fc9aed2b6095e00aa81ad05dc49c76ba2dc3ab09ae4fbccc7596b6977e5765ea2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-win-arm64.zip\",\n            \"hash\": \"3118fe33b4598545e6b497d59af04da1ec6b4d671371bf4e9807d69e8bc35736d83daf1d1605c4421006cf7682456ed4182615adefb62cc5326d11193d53d54f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-win-x64.exe\",\n            \"hash\": \"5064ef91133edb6b88177fda86d9c8b4b973316ffa0c45123e8e848cb7a0c1d0a4835d10dfbaee582f1a06ddbe0595ba7328027fa6e4338fa2e7c14186cce502\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-win-x64.zip\",\n            \"hash\": \"fdd02d60c3c3c9de0370d47807ea493bd040f324b21a2e2b433df85a2c8b6bd4ba94e280d3b0ad4c7365946a0e0ec13208749212a1405918af4520bf480cd81a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-win-x86.exe\",\n            \"hash\": \"34ef72f7f1cdc7c68407f39d8f9df1bcb0d6322fb1456ca77377850916c2230c2c138785559aab7605e0b61351690fec79034b0e5fc4573b81dc3c28d6dd92e4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/aspnetcore-runtime-8.0.0-preview.5.23302.2-win-x86.zip\",\n            \"hash\": \"414799a3f6cad98e2b771661b7a40edc761b7dd053c74cb441152c44821ba27ce51fb56c63942f3f2a680a283fa77f63a295ade53c0ef8583d28a043278589b4\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.5.23302.2/dotnet-hosting-8.0.0-preview.5.23302.2-win.exe\",\n            \"hash\": \"548511e900cbf51899302909830b1072c4ac43208bf3580526b9c8f5e505ccd5b1a39c020975198555eedb884783b33c3500e49cb84f2ab411a9d64a1e1afafb\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0-preview.5.23302.2\",\n        \"version-display\": \"8.0.0-preview.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.5.23302.2/windowsdesktop-runtime-8.0.0-preview.5.23302.2-win-arm64.exe\",\n            \"hash\": \"910f20e89d86708127c68cea750995cf25b0185277be35aeeabaa4e6b5051cc1e4145ecc6239fc8faef66857a4bafed40f44c1d42d880e0a19b587be129fc1e8\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.5.23302.2/windowsdesktop-runtime-8.0.0-preview.5.23302.2-win-arm64.zip\",\n            \"hash\": \"d37cb1c1f40a8834e816d2911445792e215d52e667544d20650e0e71365a62eca5afbc92a1482eaedfc735d23bd8caa52523b127417268c4b4bc652439e75b52\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.5.23302.2/windowsdesktop-runtime-8.0.0-preview.5.23302.2-win-x64.exe\",\n            \"hash\": \"43825f24e58bca56064df4ffa52eb45f86160dceb076175debb48dafabb2550acda01fb895f53bebbfedfd78572fc795610887277196529779802ee1ceed33ad\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.5.23302.2/windowsdesktop-runtime-8.0.0-preview.5.23302.2-win-x64.zip\",\n            \"hash\": \"27ff81f8db56e27c72f368ac8765d09aef30ed47d2063d4eba0fabe34a68cc85be2265bb5ba0974ff42a88d39d48e31b9c1d918de8f304142603f797b07c9a14\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.5.23302.2/windowsdesktop-runtime-8.0.0-preview.5.23302.2-win-x86.exe\",\n            \"hash\": \"529f503de54ec894e3eee8352d68d03770b3c270392c261bb19abe8fbce06d97ee8fcfb0236d19efe78d34e017fe02535fc76310d7f0db5027ec76038d6da51c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.5.23302.2/windowsdesktop-runtime-8.0.0-preview.5.23302.2-win-x86.zip\",\n            \"hash\": \"223a46e106969088b701ad73e1031b23ccd65b6f4d1b6ac3d9779fe534efd8559c246a6a5b25ac26c830d930a14a9ec70d3f45b5c3b15cbf505e3771f37935a1\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-05-16\",\n      \"release-version\": \"8.0.0-preview.4\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/preview/8.0.0-preview.4.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0-preview.4.23259.5\",\n        \"version-display\": \"8.0.0-preview.4\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-linux-arm.tar.gz\",\n            \"hash\": \"af02f76a32096ad28e66ea137524f1380283e234d4124241c07bd1470cab772d82ee01293fd3864ee06c493f23a182e8109b5bc14d2835a2090e63de7cb89f8e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-linux-arm64.tar.gz\",\n            \"hash\": \"56beb8b362028eee4751081811b51a6f5a741736ca2de401a9a9178deaf0b0b8e3790e3175e953fe59140ad0b80700d0b75894d7326b996700d97ed667233394\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"5ed22f8b27a188c52e78736bb48e375a7c3b3b7a92fb795ddbffd07d569d9aaf3576c7b760117de8830aabf8bfa6f3d7a49cb4c488b2915f0f68ce3b53d9b8c9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0d6b731bb0a4e7da0dad86925dc74c4635c4daea23ebb7dc651e0b2b876839cb91dbed559b74112ff93be296992063fe68a6f406f6680d03817d129b497b7708\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"c347271a47cdbf53b7ee5ce1e89dfaaca6343f4810ce23129a60c766cefcd385d2769be6f64fe1547615e374e0b52ac1046e37be69ea712ae6dac77064fbbe94\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-linux-x64.tar.gz\",\n            \"hash\": \"02544cc1109f3d7e3fc2065b42c7f1ddd4777ffd8765456c8422b6c4b815abf60cac56d69058c2bff7c7c680d47bc6bcd3e00678db818387b6d09ce9b42f64d0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-osx-arm64.pkg\",\n            \"hash\": \"603c348f2bdc0b5a23d08d017c570ff9a5e84ad7dd35b9a43d0d89915cdd1e90af8382b3fafa28a57377d73984ed60143e1a4eaf4f3c785d4cfc4850dbc8aec2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-osx-arm64.tar.gz\",\n            \"hash\": \"497dc9494c3aab67f60717598e6676650bde300170e1d78a14ffba955d76641b62852c64145b5358eca4a3c0b16dbb1dd8cf662c8b04df3202128d97e05ab8bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-osx-x64.pkg\",\n            \"hash\": \"8af67aa1823566558a3b173e99768e4e57acbebb4cd9f505c6e31f6a4d701120195c5cbbf3c1357993561160786eb5d0f852414a3dc96a28e89a9debea9e8241\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-osx-x64.tar.gz\",\n            \"hash\": \"117af68c68caa2fba04cdb9ef5d4df230d315e30069a7dd378ae413db4dfcb789730f91b2d9898f78e525bdaae6b2b5bf521d5255abda96be35a73ca0cab3ded\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-win-arm64.exe\",\n            \"hash\": \"000e7766fa94fb71277b03b0c83b515d996264a0ed170b32af54657299e8dae48f3d99ca98b3d831321911fb16b31d36816fbfa68c5d39943482bc39d778d547\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-win-arm64.zip\",\n            \"hash\": \"8b8a4ca77a7ccb5845533233b396bb273dd83723844d3804b4b564179bd792de48034250e2f63a9aee77ce7b5daa2bda9e9542bd68ff67e5af839707c64258e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-win-x64.exe\",\n            \"hash\": \"ab53a8c190e934983ddf9a0e00407b0baf57a571124d66c29c6d422e95cf117db6aa1c33183e5c3c82467b219c821a29710bb1352b7b78a7138de2fdc48b3bff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-win-x64.zip\",\n            \"hash\": \"40736d5e0cc25dd041dd569df1fe6f40c6c4da4ed5f34766a897e16d9fda5dc012bc3c703119ce1e1d4d61b5ace9c5a8e228245781370d986f054eaf7f9f0fd2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-win-x86.exe\",\n            \"hash\": \"a32aac9bbf488e658066499a9bc7255ec8637b698cd8afdcb5d81d085f0bfe164d312728b715d43fa993f952b56794775e67d1201b06b9cab79d0fb82a79fd7d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.4.23259.5/dotnet-runtime-8.0.0-preview.4.23259.5-win-x86.zip\",\n            \"hash\": \"2724cb3d396eb4f3207edbb3f2c919adede1dedbd2cdc8c21bf1ef75e27ab5e24a78c638ff6b1c8d6d6f9a8b5a8d708fefa14c3cc0e16ef4202bf1ee3a911076\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100-preview.4.23260.5\",\n        \"version-display\": \"8.0.100-preview.4\",\n        \"runtime-version\": \"8.0.0-preview.4.23259.5\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.7 Preview 1)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-arm.tar.gz\",\n            \"hash\": \"9863f324436cee98bfd6c77a41c9bd00840861d73b0d8154079ffd83d73c70c277c73757cf4b3e97f983b585386b7f83d54f59b266cbae710dc66b80085d01ad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-arm64.tar.gz\",\n            \"hash\": \"47d9d1a67b58223b749fc1ca176c4dbd7049d7437f0717a61a6b22923b9a4c243e4d101c655bc1db817e281e0272ad452f4af6fc60c51d98493d85253e7476db\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"78baacf48697910adff90fe1d9227926daaeb71365dbb6170f0a5d716ad474b3cf56bad08d8c78f5ffb8538e54171855eafc0a92cb2c8b9b7d30ee25c012866f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"89f83b097fcaaeffb246c71a08252a2e13bfff8a09f336fb8f994a6b7e3dcae3e69b8b516a2bc4b6e8a73a25d0dab4f283c1bab1cfdf070f5adda3186907d407\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"bac2e657b22a79c0182f9b5b627b1da73495a0f80013d54b5f8fe34882411ecf72a13bda3397a2917d505dd9f1035aa6e441d5a0aa83205e7a47916c37f34fc3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-x64.tar.gz\",\n            \"hash\": \"1132220710d0e2deb97b58e0f439dfd86e965fc5347a2cc9aa3326ebdd98b21361fd6c019507a884927ee3b0053aa93bc0adfb67554ee5d9526c697ae9771551\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-osx-arm64.pkg\",\n            \"hash\": \"3189306f765a81ccb073bf792487fa3d8ad9314ad3eba45b06f313e754b6c30377687dda6ddae3ba6c20eea070da6133a8604e6da0bd32c07c5d9274f6a20d8f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-osx-arm64.tar.gz\",\n            \"hash\": \"d66f6a9008b707119b37e9d2fa746aaa126f5f87452f25aa4902f3e50d08844218e11a55ecafa731c88eaf9b5aef21d08f828064d722446719ba37e69940a813\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-osx-x64.pkg\",\n            \"hash\": \"68aee82d058e054725d8936dbab582d0b08cd05f5c9946ca8e9a6c6cfd558f8b8d7a0e65c00a55c3d842eef9e1a4177f3a4fc19ec74beeb148591580c36bb951\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-osx-x64.tar.gz\",\n            \"hash\": \"be1a7cdde31cf018d4d3b1d6c8305330bfc44b5c2e515c3213d162ab227d902edba16a8e422ab1d5441c712b2e50480d1e9240e6a26a51421c794840baafbe23\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-arm64.exe\",\n            \"hash\": \"439c40e7f7e3508a7e060cfc355f90ef3317dffa06e0cfdcc155fba4aaf84115218d7f02330979f35e1ba5ee2dccba2f4dd178a5169c50b370914847b1a077ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-arm64.zip\",\n            \"hash\": \"9297580f5b8d896dc5f697dbeaae6640b47bd75f41cae356edec04d6b58f4d90f257624a2e3be48fc1321edfee9408e1e103992157cb7ea9e1735db9202b6793\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-x64.exe\",\n            \"hash\": \"396b23a3964f8a6b094e083ef03e9c2266a806cce275b37454a09f762dc8ed6779e12131182807de56ade22968cf1300ba6e2fb9c31044a1b1a79bcdcc048272\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-x64.zip\",\n            \"hash\": \"1b71c1c8c84155c6289da3642bae77a41ec537e73b78218af0350bd588f5f5db16d464a3232cb5910e26650629313aff89e38e67f7abca6bd65ae6723e76a5b2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-x86.exe\",\n            \"hash\": \"1fd2f1e3ccebf3272604b7f9aa49de0e94d32e607c381ecba7375bd1f04cee8fd1e5264216ce9175aff01a2e9256b21a1a61a2391fd2fc6f786d473206b1fc3e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-x86.zip\",\n            \"hash\": \"cf131d60f36361e9ee4b2b34479842d8653795c6c813017a3f0521f69e62a05ad2426e2c46052c74023eff40efffe2100c1c383ab15b630c7c2a900c86f66379\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100-preview.4.23260.5\",\n          \"version-display\": \"8.0.100-preview.4\",\n          \"runtime-version\": \"8.0.0-preview.4.23259.5\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.7 Preview 1)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-arm.tar.gz\",\n              \"hash\": \"9863f324436cee98bfd6c77a41c9bd00840861d73b0d8154079ffd83d73c70c277c73757cf4b3e97f983b585386b7f83d54f59b266cbae710dc66b80085d01ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-arm64.tar.gz\",\n              \"hash\": \"47d9d1a67b58223b749fc1ca176c4dbd7049d7437f0717a61a6b22923b9a4c243e4d101c655bc1db817e281e0272ad452f4af6fc60c51d98493d85253e7476db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-musl-arm.tar.gz\",\n              \"hash\": \"78baacf48697910adff90fe1d9227926daaeb71365dbb6170f0a5d716ad474b3cf56bad08d8c78f5ffb8538e54171855eafc0a92cb2c8b9b7d30ee25c012866f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-musl-arm64.tar.gz\",\n              \"hash\": \"89f83b097fcaaeffb246c71a08252a2e13bfff8a09f336fb8f994a6b7e3dcae3e69b8b516a2bc4b6e8a73a25d0dab4f283c1bab1cfdf070f5adda3186907d407\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-musl-x64.tar.gz\",\n              \"hash\": \"bac2e657b22a79c0182f9b5b627b1da73495a0f80013d54b5f8fe34882411ecf72a13bda3397a2917d505dd9f1035aa6e441d5a0aa83205e7a47916c37f34fc3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-linux-x64.tar.gz\",\n              \"hash\": \"1132220710d0e2deb97b58e0f439dfd86e965fc5347a2cc9aa3326ebdd98b21361fd6c019507a884927ee3b0053aa93bc0adfb67554ee5d9526c697ae9771551\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-osx-arm64.pkg\",\n              \"hash\": \"3189306f765a81ccb073bf792487fa3d8ad9314ad3eba45b06f313e754b6c30377687dda6ddae3ba6c20eea070da6133a8604e6da0bd32c07c5d9274f6a20d8f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-osx-arm64.tar.gz\",\n              \"hash\": \"d66f6a9008b707119b37e9d2fa746aaa126f5f87452f25aa4902f3e50d08844218e11a55ecafa731c88eaf9b5aef21d08f828064d722446719ba37e69940a813\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-osx-x64.pkg\",\n              \"hash\": \"68aee82d058e054725d8936dbab582d0b08cd05f5c9946ca8e9a6c6cfd558f8b8d7a0e65c00a55c3d842eef9e1a4177f3a4fc19ec74beeb148591580c36bb951\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-osx-x64.tar.gz\",\n              \"hash\": \"be1a7cdde31cf018d4d3b1d6c8305330bfc44b5c2e515c3213d162ab227d902edba16a8e422ab1d5441c712b2e50480d1e9240e6a26a51421c794840baafbe23\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-arm64.exe\",\n              \"hash\": \"439c40e7f7e3508a7e060cfc355f90ef3317dffa06e0cfdcc155fba4aaf84115218d7f02330979f35e1ba5ee2dccba2f4dd178a5169c50b370914847b1a077ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-arm64.zip\",\n              \"hash\": \"9297580f5b8d896dc5f697dbeaae6640b47bd75f41cae356edec04d6b58f4d90f257624a2e3be48fc1321edfee9408e1e103992157cb7ea9e1735db9202b6793\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-x64.exe\",\n              \"hash\": \"396b23a3964f8a6b094e083ef03e9c2266a806cce275b37454a09f762dc8ed6779e12131182807de56ade22968cf1300ba6e2fb9c31044a1b1a79bcdcc048272\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-x64.zip\",\n              \"hash\": \"1b71c1c8c84155c6289da3642bae77a41ec537e73b78218af0350bd588f5f5db16d464a3232cb5910e26650629313aff89e38e67f7abca6bd65ae6723e76a5b2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-x86.exe\",\n              \"hash\": \"1fd2f1e3ccebf3272604b7f9aa49de0e94d32e607c381ecba7375bd1f04cee8fd1e5264216ce9175aff01a2e9256b21a1a61a2391fd2fc6f786d473206b1fc3e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.4.23260.5/dotnet-sdk-8.0.100-preview.4.23260.5-win-x86.zip\",\n              \"hash\": \"cf131d60f36361e9ee4b2b34479842d8653795c6c813017a3f0521f69e62a05ad2426e2c46052c74023eff40efffe2100c1c383ab15b630c7c2a900c86f66379\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0-preview.4.23260.4\",\n        \"version-display\": \"8.0.0-preview.4\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23130.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-linux-arm.tar.gz\",\n            \"hash\": \"1c991eaf2e4ded395e1e86d8763180ea0a0cf81def5de03eb394a74947aa625d7e8238c96f3abe0884b61b73984ae7736689cf4a3dff41f8be410c73eccba03e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-linux-arm64.tar.gz\",\n            \"hash\": \"1224d2ebe38122380db54b8fbf5ce95a7666b2a2062a1f5da40a769e0ec859640ced391ca6cfabe21f5c0aef4a7b1722b324f361e898c9c8c4207198b0b390b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"ec63ea429069fd4de007205691f04445aca29b24a47ae9aa5579f7dc0fab2e095a560a4aa2aa11bc9aba3407751a266e0913f4a8484117850706b729663c84e5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4bcff12b8e058eb27237395491b2b06c0e38455650f51d0a054ebf2ea1accb4c55a0ba921e4174a9bc267a5d6ec0474313dcf27f746729d3c05e07d101bd8ec5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"138f547f45ae6e54ad8fa491e19b3ff020c17281727aac4bcda9faaae8a3480e56a46ad5f9157a7c30c90e782c2c54b368d7c618d10626e28574d71b3eea9025\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-linux-x64.tar.gz\",\n            \"hash\": \"fa2f95d90dafc11e083904e5795a0f9011ccd135a94e64149795a4404a900f0962d2d8cb187db2e5d32e0d8ca55387626e7201ac0c8127fba0cb499eb5a78c61\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-osx-arm64.tar.gz\",\n            \"hash\": \"c0c248789f312e7430850ce53400e041ed550f3ac6eb30ca16a83c344c6110fdd34e7e92bf3c06ca083a4b5b8f01ba37542ed9136458f0d3e41a6cfab22ea5b7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-osx-x64.tar.gz\",\n            \"hash\": \"98cd0208733397e622afc725873983f8f4ee41cd5a7d1987f973e71b640aaa0210d99b4a3d2acffe3e1f016c5816998d06289d3ae509f9280078bb716962851a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-win-arm64.zip\",\n            \"hash\": \"20383bcd39480c306aefe9a84aa78767f632fc7b0422c6397ba23a983a90172a30fa1ebc70b1e20911096df3beb518242f9547ecc5768a6072fba1e71d3670e9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-win-x64.exe\",\n            \"hash\": \"8a9d6d9424ed702012ccd6209126e717a4811d115584a4873e5fc4eb8dace8e929c5aa2f8169f76e89240f1a94e264d7679622281e7cfac26b505b2c058658e9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-win-x64.zip\",\n            \"hash\": \"af30d31f986bc19881ba4a6479fe90a0db31348382f8ea05634d727e80588f1d11c05634ca113c1151de8e80122021cc68151e140ba748680cfd00b45260aad4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-win-x86.exe\",\n            \"hash\": \"d961c892a8490579678a14dc91cfba8bfcd7f093ed9910eed7ae90c3cb796301d808548468595c6f9464ee38faac7cb29555a3d9d78f8c794eed6de5f6237cb2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/aspnetcore-runtime-8.0.0-preview.4.23260.4-win-x86.zip\",\n            \"hash\": \"6462bb1eb327a19242ce0c2093c83e6595401a396b2c4ac9ca6a06d42cf74cfd7716f2be8aa83e5fee6b57ec65411d76a1fd7593cc4dcc8df184760348969ab0\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.4.23260.4/dotnet-hosting-8.0.0-preview.4.23260.4-win.exe\",\n            \"hash\": \"f382c8b2f90a6c44cd660daea321f76f80dd8ef09c1468827f6750f436b90f2989a042251fabbfc88b34eb8b2e60e9c71b046c3e14812b1a629bb4573c0fad80\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0-preview.4.23260.1\",\n        \"version-display\": \"8.0.0-preview.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.4.23260.1/windowsdesktop-runtime-8.0.0-preview.4.23260.1-win-arm64.exe\",\n            \"hash\": \"37e9eefafcb7907eef67a44637be4bf94df6a95f553871682a90774fd39f191a2a573bcb06f16166231d05ecebcb308434e3becdb77717f754c8c8a12e3ca0ec\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.4.23260.1/windowsdesktop-runtime-8.0.0-preview.4.23260.1-win-arm64.zip\",\n            \"hash\": \"15b72bda49477194398d43624c8340333c05ebfdef9d78b178ad9f565c18eb30ae07000258b9c00ae228914d516bc9e8c3a956cd9e12edb9ed720994fa0effaa\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.4.23260.1/windowsdesktop-runtime-8.0.0-preview.4.23260.1-win-x64.exe\",\n            \"hash\": \"5f457dd6f4d7f31605ba7f1028d7ccd47fe45ccd5be36dd22047bfd2041bcb9fe837e902bc06cfe951ab36390f211c407de8cc8b58423fb075e048af8ab4cfb4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.4.23260.1/windowsdesktop-runtime-8.0.0-preview.4.23260.1-win-x64.zip\",\n            \"hash\": \"327c6ee4012b392a8af5a9daf08f2fe05f54810a0b47583283269546a37520755d998726b2afc7f0990059c05e9602d77812864ba340c7d681c0178dfeeef65e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.4.23260.1/windowsdesktop-runtime-8.0.0-preview.4.23260.1-win-x86.exe\",\n            \"hash\": \"24a1adc307e224c016e8808e9dba79a94d989dbfa09369f766f1586049b403ce9da925678317bb209284615aaf7e2ab2cb54df2c792036373b6063ef7f78556d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.4.23260.1/windowsdesktop-runtime-8.0.0-preview.4.23260.1-win-x86.zip\",\n            \"hash\": \"c845676dc9fb2e825d82358250e1f05cf79f949f51bbb6ab6db9ebc974859c525a3c7af5b647f7407d75b6364c7a3a7739491109e41b005b9b93fe150e54049f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-04-11\",\n      \"release-version\": \"8.0.0-preview.3\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/preview/8.0.0-preview.3.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0-preview.3.23174.8\",\n        \"version-display\": \"8.0.0-preview.3\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-linux-arm.tar.gz\",\n            \"hash\": \"b12f4c3f854edfe68e0afdc20d4093457572d3f3bb43e56ba98de880cf2442846cd20c75e9b5a08aaa14691fd32f09766a155c51ffe77bda98b4a4b1b9521c55\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-linux-arm64.tar.gz\",\n            \"hash\": \"6ec1368fde8d4ffe5eef21e227c93ebe94d44f6bae311c5686d2c710240a025b5bc3716f3ceea18a8b65ef588a811828a0ad8b76db3086512786966fd111c15b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"f6a4b8f4ac24827fc44ee075221075dda2f7897bb99b11db48cebc412f4960bd09bd1cd2d6f32f39dfeb0ab487d5a17f05e6a1403b46645d1b7d5affcbcedc86\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3a80fda4fcb6215377cefc42d1b92442481939f40600101152173a465d2ac902f5cd689a9d48f5dfdf79bfbd00e05ae7eb94d82b3f252922c4dd34148df2295c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"de70a6763a48ede2569e7816fafa269e02b72e5c761d561d2f3cb4affc3754c8d9934a77f6be7dd9e0e497fb702981536675db777c61872cadc0599465dc082a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-linux-x64.tar.gz\",\n            \"hash\": \"d0da20d48448c654ee548668a585b2272c661eb84ec6f845b3a49c0143ba1bfa83865f69da6bb607353a571e8c84b8e63650edf816641b1c5a55fa77a59e09be\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-osx-arm64.pkg\",\n            \"hash\": \"eda1b21049b1dd19c3d6418616b5eb0b8cf6781c1aa302612d8ca700d1aee45bc542755dae2e9b607c5d584ac0eafafa79ca6574eb597981ed079ec89d4544fe\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-osx-arm64.tar.gz\",\n            \"hash\": \"73619816e7570bde00105aeba9bd60ddbe868df4d25f4b53679dea01a80d81403215ee7caad7adf7c0128011b687539786e7bb817d652e993064ca5716d1fc1a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-osx-x64.pkg\",\n            \"hash\": \"2706ed3c7f44c7b0d86790e21e47126ec9d3ba8d367d861429f959c3cc247f940f0ac2d90576e694ada10cd7df3d17cb2bc6dcde48b813ad437ba698dbbdf6f0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-osx-x64.tar.gz\",\n            \"hash\": \"53c52fec2fdf5e5cba92f006d2680fa63ae8946ab0a6ec03b4a050e6d52f2e2e94ea01e0b8be63136f0c800907fca6c49dbb180711e8948982205f6c447f9256\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-win-arm64.exe\",\n            \"hash\": \"fcd6afb7b0bf75d9b8e558663fd755cc0c2dbde93ff7b95f4fd1e385b4aa605bb5319843f7e136c25d01167c5678c52b161e4a356d6efc56aab9e1ef34e44132\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-win-arm64.zip\",\n            \"hash\": \"c4119df551b700f12b3308b6280d04b06833abfe394c52a406c0ef257e1df945c9a5989399cc79550969690386bc8eee429f166c1154849dba1d34b4bf754ba3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-win-x64.exe\",\n            \"hash\": \"44ab63eac479111e40769708b919855b7fe507dc544c5e8741a6326161b2b32356e5f422190e366cde3608991278de761a6c3c0d88cdb3d6dbb5c3b075efd437\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-win-x64.zip\",\n            \"hash\": \"c957da8844771ef060fa21f4d9658bb39f7ce435eb9a119e1c330696e0e5e9155807bd769228c2a0b11b84f094aa1a760dd3780e00ef08170bebfcccc4855d7b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-win-x86.exe\",\n            \"hash\": \"45f189cec62b60d1a6351d9a6c0fd6eeee1d568d4114ed4bf03b28f973dfe167f5128658f373407fe0e20bcb467e6bed231f2a8365f547db831b9c718d2156e0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.3.23174.8/dotnet-runtime-8.0.0-preview.3.23174.8-win-x86.zip\",\n            \"hash\": \"1617d0d93c5c27c14ada4b1aef061b5bff7eaed1fa204dc6ee76897b39c4d55327a8e4e7b812e9fd88ba3cc575e42ce672b6173bb741f038613e64018daffaca\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100-preview.3.23178.7\",\n        \"version-display\": \"8.0.100-preview.3\",\n        \"runtime-version\": \"8.0.0-preview.3.23174.8\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.6 Preview 1)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-arm.tar.gz\",\n            \"hash\": \"81d727b1f70854507f6f0e4075f3a2b98914378b1af2f69c8ff74dacd2ba5b4bd4971f4a9a353e14c710c7974ff5e077e259474b3eb1b8d86c516968326e2ad5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-arm64.tar.gz\",\n            \"hash\": \"c48840b3924196a12cc66b07249af37afb2b0f3b139eb304492a2320e7ae06cfc2391abd1da31e6e58287b8b8e564386f82c55eb9a1b16108f53a4d1d59812f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"74cf6a2c79cb2c0ab5058330d8d07a84fa220d68089d0f2a6165cc2a2250477f092efed54738af3271db06b5a67df07ad39e30cc6e30bd3acb8916575be5a99b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"85f9ed71e81f753bd1d96752d568671009641ef75a9f6fb27fe38315cd159da4581739c121a69969361843d9429f04dc67c3a20969ad7e85b2d4a59308972923\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"c4cbdeff8efb4f2b6f2842067ed92edb2c323d31df8c9ca7c5aeb4eb95320d2628977c20163c9c21bfb97f6a585f81bd5abce9d553d3c64c20389e3ef90ac838\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-x64.tar.gz\",\n            \"hash\": \"3b5d72979831256b9340a01db23d3b2dca801672546eeed04385949ed5f4363d3c731f31477ec82c7200ce88502dc45e03986c8acc8f2fc611b0343af5f1c488\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-osx-arm64.pkg\",\n            \"hash\": \"01ddd22f7518fa89906db3d95e732133eb3c9ba8d9f390a52c042a212fd138943a03596694e543e7e42944a805e0932e4ef0907ecdcd047069f46179b0a7d528\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-osx-arm64.tar.gz\",\n            \"hash\": \"f67ad34c23dca602e08987c12f07a39b6941682e35eae3f50efb95637b252e1e885a259f4df9be5bc0f5d43a14f16ec206a39c899683e22bf7b6a94fb2db1386\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-osx-x64.pkg\",\n            \"hash\": \"8c3fc9693a0bcd0a923acc2ce4de52dd4b23d897885769df3ac963e133dcfc43a95d267c36ab2d89f6bf12e74e66f5051c4a91139ade62e0509e4e26934a26cb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-osx-x64.tar.gz\",\n            \"hash\": \"53ab3f6449438ab6ee0ecdd0ae3759e5fe873b964d0b4e3ee5c8a48197a7c87ec83b956eb1b10aa90297403762eb2ddab0e99e29442db484b7ed3f9d00c8037d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-arm64.exe\",\n            \"hash\": \"fe586598b4655400601d32de6f3c23b5e7256678fb919297f9a421f3943f38250cb7a05604abdaeeacda0aadf8d3ac151de0f6c38a8a98e5bae6f0e29c36a910\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-arm64.zip\",\n            \"hash\": \"e2c8870dd32a7911291bb0381077fa1b845b08258fb983eeb67ff40833d3ffa68be837198c57bf6d8b78d81d119b4ec5abb3716d46b57889f11b62e7e66000ad\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-x64.exe\",\n            \"hash\": \"8ea357cbc8319f6b2803e5bb4bf233b7e11e2bd35a10a5a5478431163f5ca354c14a23e06cd37937f47005637c339b0865da960d85ac6cf478ebe52c1ad6f7da\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-x64.zip\",\n            \"hash\": \"a2da41640128832b67b672015cdc768ca1596d0f531dc2e2b18b1f54c74d7f8e2510e2c694416bf7fd441386711dd90633507d616188e39e7388450846884fff\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-x86.exe\",\n            \"hash\": \"7b1bc9ba4eda572a2433d012fbb32fef01e7415de56a32a0b8ce7a0851ac78e7b40b31ccdd38ecc4442399bbcb3b9d3bbc4c4f8998e197d4efade1f2366ec99a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-x86.zip\",\n            \"hash\": \"fd6d068d0a4782b1417217a9e8b528cf60da380f2e225ea41fbe181fff46c7cff36d0fcbe60c057aa7cc65b466b298ba290fae8e214ecd731180d133126ad6a6\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100-preview.3.23178.7\",\n          \"version-display\": \"8.0.100-preview.3\",\n          \"runtime-version\": \"8.0.0-preview.3.23174.8\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6 Preview 1)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-arm.tar.gz\",\n              \"hash\": \"81d727b1f70854507f6f0e4075f3a2b98914378b1af2f69c8ff74dacd2ba5b4bd4971f4a9a353e14c710c7974ff5e077e259474b3eb1b8d86c516968326e2ad5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-arm64.tar.gz\",\n              \"hash\": \"c48840b3924196a12cc66b07249af37afb2b0f3b139eb304492a2320e7ae06cfc2391abd1da31e6e58287b8b8e564386f82c55eb9a1b16108f53a4d1d59812f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-musl-arm.tar.gz\",\n              \"hash\": \"74cf6a2c79cb2c0ab5058330d8d07a84fa220d68089d0f2a6165cc2a2250477f092efed54738af3271db06b5a67df07ad39e30cc6e30bd3acb8916575be5a99b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-musl-arm64.tar.gz\",\n              \"hash\": \"85f9ed71e81f753bd1d96752d568671009641ef75a9f6fb27fe38315cd159da4581739c121a69969361843d9429f04dc67c3a20969ad7e85b2d4a59308972923\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-musl-x64.tar.gz\",\n              \"hash\": \"c4cbdeff8efb4f2b6f2842067ed92edb2c323d31df8c9ca7c5aeb4eb95320d2628977c20163c9c21bfb97f6a585f81bd5abce9d553d3c64c20389e3ef90ac838\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-linux-x64.tar.gz\",\n              \"hash\": \"3b5d72979831256b9340a01db23d3b2dca801672546eeed04385949ed5f4363d3c731f31477ec82c7200ce88502dc45e03986c8acc8f2fc611b0343af5f1c488\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-osx-arm64.pkg\",\n              \"hash\": \"01ddd22f7518fa89906db3d95e732133eb3c9ba8d9f390a52c042a212fd138943a03596694e543e7e42944a805e0932e4ef0907ecdcd047069f46179b0a7d528\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-osx-arm64.tar.gz\",\n              \"hash\": \"f67ad34c23dca602e08987c12f07a39b6941682e35eae3f50efb95637b252e1e885a259f4df9be5bc0f5d43a14f16ec206a39c899683e22bf7b6a94fb2db1386\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-osx-x64.pkg\",\n              \"hash\": \"8c3fc9693a0bcd0a923acc2ce4de52dd4b23d897885769df3ac963e133dcfc43a95d267c36ab2d89f6bf12e74e66f5051c4a91139ade62e0509e4e26934a26cb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-osx-x64.tar.gz\",\n              \"hash\": \"53ab3f6449438ab6ee0ecdd0ae3759e5fe873b964d0b4e3ee5c8a48197a7c87ec83b956eb1b10aa90297403762eb2ddab0e99e29442db484b7ed3f9d00c8037d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-arm64.exe\",\n              \"hash\": \"fe586598b4655400601d32de6f3c23b5e7256678fb919297f9a421f3943f38250cb7a05604abdaeeacda0aadf8d3ac151de0f6c38a8a98e5bae6f0e29c36a910\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-arm64.zip\",\n              \"hash\": \"e2c8870dd32a7911291bb0381077fa1b845b08258fb983eeb67ff40833d3ffa68be837198c57bf6d8b78d81d119b4ec5abb3716d46b57889f11b62e7e66000ad\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-x64.exe\",\n              \"hash\": \"8ea357cbc8319f6b2803e5bb4bf233b7e11e2bd35a10a5a5478431163f5ca354c14a23e06cd37937f47005637c339b0865da960d85ac6cf478ebe52c1ad6f7da\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-x64.zip\",\n              \"hash\": \"a2da41640128832b67b672015cdc768ca1596d0f531dc2e2b18b1f54c74d7f8e2510e2c694416bf7fd441386711dd90633507d616188e39e7388450846884fff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-x86.exe\",\n              \"hash\": \"7b1bc9ba4eda572a2433d012fbb32fef01e7415de56a32a0b8ce7a0851ac78e7b40b31ccdd38ecc4442399bbcb3b9d3bbc4c4f8998e197d4efade1f2366ec99a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.3.23178.7/dotnet-sdk-8.0.100-preview.3.23178.7-win-x86.zip\",\n              \"hash\": \"fd6d068d0a4782b1417217a9e8b528cf60da380f2e225ea41fbe181fff46c7cff36d0fcbe60c057aa7cc65b466b298ba290fae8e214ecd731180d133126ad6a6\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0-preview.3.23177.8\",\n        \"version-display\": \"8.0.0-preview.3\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23086.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-linux-arm.tar.gz\",\n            \"hash\": \"bad2d354382d34a26cf3caa4344b25aac04260f312085d7490ac6abe955e3972c422b45be31ba06750b2ff81a8dbd4a3c671b795fd0a7c7c11af25a037ed221d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-linux-arm64.tar.gz\",\n            \"hash\": \"c5826d36daa4fab2779bb3b6bb94886bd98ee018109cf82b994a189cd6675b8f14eab9b11fc2a265a7bb3b8dacbe79b75887b1a81ee65c4ca690cef8a27a400c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"82d65a4d4d8a21396c17eb4fa0dc862cb4bb345976a27fa01171e6e04bea5d49d968a56ec90a785052f728134b7fb2f7d0dae46d4682c53da9592a6f5b9e086c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"098f34fbcdd2c7d6f2b5a87c4b7bf826d6607583903a995277d707ac6dbae1c341bbbcb812753dc9f83c353f8834c0ea2590bf9b3aaf876a9cbc4c2ad90849a8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"33abc6a11d3228a82d93ffe787cb13f374704368bd1c8ac74392246597c7395fd0b3ae90f1dccf5ed7629787a4cc2fdb67e8a44d7276a28f20634cbf460b68ab\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-linux-x64.tar.gz\",\n            \"hash\": \"f990c63e651d71ef615aa494dc555fdcf66411431d07b7ae9bef50f276e863198212471b90bdd86686426d5907d2426924d1a279262035bbf3ce64d8914e590f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-osx-arm64.tar.gz\",\n            \"hash\": \"9167ae736f29f49522f6263e6b2698b94fb0c4f21653a81a2ee1c8101d3c176a9b69dceed0c832ce04f2b84aa8fe0b14e7dac54dd965026e472429db739ddebe\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-osx-x64.tar.gz\",\n            \"hash\": \"b8354eccec9c8b77f6afe7b4ff08f300359dbdc6106731b3e5b9966e1060a6def949174de8edfadd4e90a65e3337f2c03dbf55a4a67e2d8dd51446600605a914\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-win-arm64.zip\",\n            \"hash\": \"4eee5bed876aa11dcb76ec7f7ebb3e730b3b97a60a302fe7fd8c4fe10520806e84e9186ffca9c025353893465524d839e57dcbf2e3f5a52819f7093e58c86a87\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-win-x64.exe\",\n            \"hash\": \"54748508a2b2b10f83f2c132b1a6ee18e86cc0d12d1b8005cd7c409fd7c1352ad1136e1dbe0ee2523d74c3ed20915b1c455e37502109143492fd1297eae32ec4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-win-x64.zip\",\n            \"hash\": \"8e0675199604ac49b64cf30158e08e1af02abf3173a1b867685e773c5490051e0bc23e5ef6bd71aeaa454f723cd85589de646a48ca7e6c6ee290572aa1729ea5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-win-x86.exe\",\n            \"hash\": \"2841d33a6f9d9b925db15438fc2369de016163fa1be358b78cc54ca0933dc5d0feceb428ff67e6e07f150943f4cf01a91f73f2b9fe04244e4ae67f6487c05612\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/aspnetcore-runtime-8.0.0-preview.3.23177.8-win-x86.zip\",\n            \"hash\": \"49471c387644b307f0660c194056d66e58ab5831f4c8cd343e660823021ddae359856403b4c686141e34a0cef9a7362fd00caece5de8bc737123f62610482a73\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.3.23177.8/dotnet-hosting-8.0.0-preview.3.23177.8-win.exe\",\n            \"hash\": \"3ff35c9541a705df991c4e1ce9a7285149d8da6aebd23f6c527e1b6c94ed7f864c0273178fb3fe591e7b44e187ad52f6244dc2c14a7eb32a50eeedf3855b6c90\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0-preview.3.23178.1\",\n        \"version-display\": \"8.0.0-preview.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.3.23178.1/windowsdesktop-runtime-8.0.0-preview.3.23178.1-win-arm64.exe\",\n            \"hash\": \"5c98db8969ff47e8118401882c2baca303da2fe070a88cc3975c6e679e4e4d2aea04887afe051ca3bc8fd6b268e93d3975dae3c724b47c27fd07f05ed68fa81c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.3.23178.1/windowsdesktop-runtime-8.0.0-preview.3.23178.1-win-arm64.zip\",\n            \"hash\": \"d7a663ee206d4498efb9f7ef7006ef89f326f0a3dff4fc86af7cdc34f62e14cf0c4aec4f895fef714bab1c7128676eeccbb4512eb6bfdf2d7f98ce34776ab38f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.3.23178.1/windowsdesktop-runtime-8.0.0-preview.3.23178.1-win-x64.exe\",\n            \"hash\": \"fc9e08421a5abb7f44efb74ac967ded42ebec5af3cce974156fb98b70c1aafa9447fca63bfe1f9e66ed3b4848385acbf4af58b04cc8151465aa827142c5284be\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.3.23178.1/windowsdesktop-runtime-8.0.0-preview.3.23178.1-win-x64.zip\",\n            \"hash\": \"798463f6ab02655602ec0aef9318c20434ec5b19ea628899c119c6a73c73afaabd2bf7ee796d3b0ce6e1709356ca811793a37366abaf5ab342b1d7842124e2c6\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.3.23178.1/windowsdesktop-runtime-8.0.0-preview.3.23178.1-win-x86.exe\",\n            \"hash\": \"07902667e94a0ffdaa3fe0a1f6df86b07e1aece846e991974ac46a90a9e2e9bbdd804df06bfa19b7a001a26c636b98ea38223eba1248250ca7976ae289e3f8cb\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.3.23178.1/windowsdesktop-runtime-8.0.0-preview.3.23178.1-win-x86.zip\",\n            \"hash\": \"422385f46756fe6b17a23571b06b9fd1d85403f6d044ca99ebcaeb7f520b8615bf8a73d80b3c11b572a00b445098b4e1dea01793e1d617dff04c56452e49903b\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-03-14\",\n      \"release-version\": \"8.0.0-preview.2\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/preview/8.0.0-preview.2.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0-preview.2.23128.3\",\n        \"version-display\": \"8.0.0-preview.2\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-linux-arm.tar.gz\",\n            \"hash\": \"040a5ee6312dc71812e5807e0c00abae8376715b0850110b0967e8e470679a593cb21139aca6c28c29daeb14fe99c748082271699b1082b6cf3a636c88ade642\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-linux-arm64.tar.gz\",\n            \"hash\": \"48a80c18754e46a12fb04e280cb23e8f9238603aeb0a91125a583eac27a7abb1b20d08b3121444085e4d2034380849dcda88ed69ecc5c4af7e8e3c38a3392921\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"891dc33e440c7419be426d9330dd15421b60cae7bbf602bf555d2f0b16aa4f822a20224a01dc28d3ea61a4fb78e84ec9a5256c7a7ff2df7fdde82485c86adc7f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b6eb3b8a6ce0ccae167cb2b033a1c390ae574526439b2a86bba3b0b8531405b6ffd32628b2d86124484d7c5b5a65f762b5fdfbeac5e2690e10224a855aa04887\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"29071ed633c249ccc21d91f957fd0ac6f3898120ed5f13bbf9fead9f6d971886570660fc7ef6268530e413d716febd0de68b1316cf7c966b8e0fa4d5bc0049fd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-linux-x64.tar.gz\",\n            \"hash\": \"b24bbea7fd0f1d5ca57544ccc690c05496667f30b0804b93a8baaea5e0d201bc471357e0ffac8a4fa5c399d3827942c7f6beb0e3a022e8d0d8cc7ba0ae86a379\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-osx-arm64.pkg\",\n            \"hash\": \"748cf5d830ed7bc2342977e5e5482ace225f6f188bc7046be36cb6514d02bd3712a925f3cb5f2b92f86325cb050dc4e5591c0ee2428fca8f97ccd55cacf78c6f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-osx-arm64.tar.gz\",\n            \"hash\": \"d6dc11b7e5cea5e96e45a401027a2f3e498e41658b3a1862cddec009a96eea83cb929338e402960e150fb3f77da582f1416d0f5231d6beadfd32a443ad68e9da\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-osx-x64.pkg\",\n            \"hash\": \"5372fcb9b85c848fe4898773de413b2d0c03b5d3f1b9d6ca375da48a3dfcafe20bf5fad40b199c3d1154a42d77daf0d9f0814a66b24fd5e9966a49471f9ea0b5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-osx-x64.tar.gz\",\n            \"hash\": \"eb5f6eac1211e5c0398882d4f5e1859b5e2439e0564da4fdd4c8b3a4a60d360a4b9b48c06bc048badcc2d6a2b539ee740f85ae6e7ab03bed40ba9574655fe044\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-win-arm64.exe\",\n            \"hash\": \"9a3f2b4723d86f895bcbf531b96ef7490943dbc67bc2d8609e0681f2ae00a4044f19ab440809736664a87ddcb1cf2fd0fb5b83af399c4f37f1448e164e38f9d2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-win-arm64.zip\",\n            \"hash\": \"3fd2dfa2ac0ef78d48b5c9af21c1cf5ccb3a030a5d1119355282b928b4a4e87537811c92ed5a50fb6cc5cb3d28fcd063af3957000fe04e0350da5f3fc9e2c6b8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-win-x64.exe\",\n            \"hash\": \"c8f5ac150d41124776eaeb7ecd36c530d132336fa1c2c1b17a416808763ddb2c82392d943ca572342aecedeef32730a9f3f530e282731390caec68d38f43267c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-win-x64.zip\",\n            \"hash\": \"11cf3b0273349d65f7faeb8f72879e927886885bcef41a6149951a25a0d93efcf44fe9174cf2c4b2214eba33c3b8add4ad1e9c247f3b3dba4259c35fcf5f79b9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-win-x86.exe\",\n            \"hash\": \"2c750d7c3d14a4051e53b70976446b155da80106d277336741f89224e080bbc3bf185e07f0421cd386b8c70b5b1d93889cc0ffae6258f7e4f070a0e1b04d0bfc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.2.23128.3/dotnet-runtime-8.0.0-preview.2.23128.3-win-x86.zip\",\n            \"hash\": \"4d9df98d89f81cd9f20486b8cb93e6d5b8ce06eb4f23ecfc8fee04a44578186832696b154d69a838030bf4c73979bc1fe7194df9d0850f9b4d08ca6f41954ba7\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100-preview.2.23157.25\",\n        \"version-display\": \"8.0.100-preview.2\",\n        \"runtime-version\": \"8.0.0-preview.2.23128.3\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.6 Preview 1)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-arm.tar.gz\",\n            \"hash\": \"e66d90ce97bf92ef237d7e25da63955bbf09c952fb498bf04a41728b68d6fb94d24566442f90ebae176bd05aadbb9d2b405691af3c78f79f6ed84d77b88bdebf\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-arm64.tar.gz\",\n            \"hash\": \"440919e2c0d3e0bfb387e2d0539b39045c6581a41f0237c88566d3642ab2c5e4a8e540f3d9d514997bb4a17b19c64a46b80f38af5f66705da1349373f87448ea\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-musl-arm.tar.gz\",\n            \"hash\": \"c338b11f74b8e00e25512bd675a2b2bf2ca7ac86b2b0bd02a184de3cec7bbb56f9066e54e8f9d9dc95bae2bd652e30b8465b26de08245b1d6fb4a9bd27d882e6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b04b6cf3280434775e268776899b3ee7fe1b94217edfdbc7e166f493f25f52d74be5a97ef07927d102731314004fe57d40d5efa8038bc78dbe0aac5d7f15756b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-musl-x64.tar.gz\",\n            \"hash\": \"952cedb092edc02b8f3c211f0387c56acf4fdcadf607344cab529efd5e36a52e9017187e62baf2453544b7255cfedcdb7b0e68e1523d6bd74bf3a8f0ec8919c0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-x64.tar.gz\",\n            \"hash\": \"97302c3600af7787fb136b226ca7e2a0a22241aa93dcffc70010b475bf6f8c4ff74a363d94949e1b64a91032b57a58a7065d7c6b2177696d8e78504ef4f1280f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-osx-arm64.pkg\",\n            \"hash\": \"e0802a394d043a56ec95dab56520aba933f271fc4d8098833b9f36e1943dc9897bb727bac503c0c6e46fa9b5db446c804be27209421896461acc6c848d9d6c3a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-osx-arm64.tar.gz\",\n            \"hash\": \"3b5c169180538a13c3199de0df096a2a84f58d2b55bc0dc94be374a015a231c035e57fa62e160e9c5595c6fcf92926ae9c577c6d62cf17803d931e5e90b5e694\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-osx-x64.pkg\",\n            \"hash\": \"246cc88f89638475d56384855825381990650464266ca8b0de17fdca5c90d16c8d2ce27aa27bd01250d7b9a12f7fa67bef5e49277fe4bcaecad831e3f8eddafd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-osx-x64.tar.gz\",\n            \"hash\": \"f3c4bd87d15a0593895121993326adef55641b59682ef52f6ff5fd44505468784590cf5fada9ea531377389ee47202db89de0520cdbbd497f85f5717fb74879b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-arm64.exe\",\n            \"hash\": \"2cd891f57c0bd9231b2e512057a6dd04ef69d9d614292d55511c1fa4840d3ffd6b3b4f2137976a9beb0c188df69d4af88d823981ff33ad3e6a5f255d69a893f9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-arm64.zip\",\n            \"hash\": \"e05186698c2313bf69e2a06754dbc44d94c65b0713d61fdd0491e5cf2f48e2e52f1cc460243159162596f845c6cb129ac984e97140856408d45b38c0a3fa68a2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-x64.exe\",\n            \"hash\": \"a27c2010ca4647bd8e70f87f7b7b6e7b6370dfeed6357a35310eef372e5134bd289c91325074cac6efdbcc0a373072c9f87779a49885a9a4e8f836a54eefbe84\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-x64.zip\",\n            \"hash\": \"efb5f47bc7fbfc55079d1aef57f655f69e5cac19bed6a4eee68a1339425f74570f38677ca8659d7e6b64691a793bc767748cdeac5eaad0b524a1ce84ce82ba15\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-x86.exe\",\n            \"hash\": \"95218e037768061fad7129af92e1c7a04f7a1c3b245d4dcdb5248d757757ab86b658070786a1f3856a35a88cd801e4bac7d13a32d7e976f60e6db37d4f23d2c6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-x86.zip\",\n            \"hash\": \"0b15ccc2d483a2b4a71c0a7a08a6097bbfe36336888dd7cee3d64f079ae1e65186ec20001411b3dcfd611cb91b6e3b0c65fb0877fb5b1796681ad6a644e3cf66\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100-preview.2.23157.25\",\n          \"version-display\": \"8.0.100-preview.2\",\n          \"runtime-version\": \"8.0.0-preview.2.23128.3\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6 Preview 1)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-arm.tar.gz\",\n              \"hash\": \"e66d90ce97bf92ef237d7e25da63955bbf09c952fb498bf04a41728b68d6fb94d24566442f90ebae176bd05aadbb9d2b405691af3c78f79f6ed84d77b88bdebf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-arm64.tar.gz\",\n              \"hash\": \"440919e2c0d3e0bfb387e2d0539b39045c6581a41f0237c88566d3642ab2c5e4a8e540f3d9d514997bb4a17b19c64a46b80f38af5f66705da1349373f87448ea\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-musl-arm.tar.gz\",\n              \"hash\": \"c338b11f74b8e00e25512bd675a2b2bf2ca7ac86b2b0bd02a184de3cec7bbb56f9066e54e8f9d9dc95bae2bd652e30b8465b26de08245b1d6fb4a9bd27d882e6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-musl-arm64.tar.gz\",\n              \"hash\": \"b04b6cf3280434775e268776899b3ee7fe1b94217edfdbc7e166f493f25f52d74be5a97ef07927d102731314004fe57d40d5efa8038bc78dbe0aac5d7f15756b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-musl-x64.tar.gz\",\n              \"hash\": \"952cedb092edc02b8f3c211f0387c56acf4fdcadf607344cab529efd5e36a52e9017187e62baf2453544b7255cfedcdb7b0e68e1523d6bd74bf3a8f0ec8919c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-linux-x64.tar.gz\",\n              \"hash\": \"97302c3600af7787fb136b226ca7e2a0a22241aa93dcffc70010b475bf6f8c4ff74a363d94949e1b64a91032b57a58a7065d7c6b2177696d8e78504ef4f1280f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-osx-arm64.pkg\",\n              \"hash\": \"e0802a394d043a56ec95dab56520aba933f271fc4d8098833b9f36e1943dc9897bb727bac503c0c6e46fa9b5db446c804be27209421896461acc6c848d9d6c3a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-osx-arm64.tar.gz\",\n              \"hash\": \"3b5c169180538a13c3199de0df096a2a84f58d2b55bc0dc94be374a015a231c035e57fa62e160e9c5595c6fcf92926ae9c577c6d62cf17803d931e5e90b5e694\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-osx-x64.pkg\",\n              \"hash\": \"246cc88f89638475d56384855825381990650464266ca8b0de17fdca5c90d16c8d2ce27aa27bd01250d7b9a12f7fa67bef5e49277fe4bcaecad831e3f8eddafd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-osx-x64.tar.gz\",\n              \"hash\": \"f3c4bd87d15a0593895121993326adef55641b59682ef52f6ff5fd44505468784590cf5fada9ea531377389ee47202db89de0520cdbbd497f85f5717fb74879b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-arm64.exe\",\n              \"hash\": \"2cd891f57c0bd9231b2e512057a6dd04ef69d9d614292d55511c1fa4840d3ffd6b3b4f2137976a9beb0c188df69d4af88d823981ff33ad3e6a5f255d69a893f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-arm64.zip\",\n              \"hash\": \"e05186698c2313bf69e2a06754dbc44d94c65b0713d61fdd0491e5cf2f48e2e52f1cc460243159162596f845c6cb129ac984e97140856408d45b38c0a3fa68a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-x64.exe\",\n              \"hash\": \"a27c2010ca4647bd8e70f87f7b7b6e7b6370dfeed6357a35310eef372e5134bd289c91325074cac6efdbcc0a373072c9f87779a49885a9a4e8f836a54eefbe84\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-x64.zip\",\n              \"hash\": \"efb5f47bc7fbfc55079d1aef57f655f69e5cac19bed6a4eee68a1339425f74570f38677ca8659d7e6b64691a793bc767748cdeac5eaad0b524a1ce84ce82ba15\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-x86.exe\",\n              \"hash\": \"95218e037768061fad7129af92e1c7a04f7a1c3b245d4dcdb5248d757757ab86b658070786a1f3856a35a88cd801e4bac7d13a32d7e976f60e6db37d4f23d2c6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.2.23157.25/dotnet-sdk-8.0.100-preview.2.23157.25-win-x86.zip\",\n              \"hash\": \"0b15ccc2d483a2b4a71c0a7a08a6097bbfe36336888dd7cee3d64f079ae1e65186ec20001411b3dcfd611cb91b6e3b0c65fb0877fb5b1796681ad6a644e3cf66\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0-preview.2.23153.2\",\n        \"version-display\": \"8.0.0-preview.2\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23062.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-linux-arm.tar.gz\",\n            \"hash\": \"8d119b0cab829ddee58605a5902a6ce89066cf04d60a9ce3cd7be1be6bb4b42969ef98e073187a89ee0d948fe93361bcc7912840ea519cdae07cb32769c26e7f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-linux-arm64.tar.gz\",\n            \"hash\": \"4109b7841aa022b777b0f2ec4191ba0773736b5b4411402a1de6d14a63d273a9114e897c7ea38d3ca0bb48de20b165712aba838a6beacf1c31885f1fce0bb2a3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"a00122ed01505414037dcb46932eec0b1814d1b187a8a5e3f3e56bb9e5c0b12b5721548e1228755cc029b5448d078c638588af29f00b1278493ab690bbd0ff25\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1d648ed2956b199a5d6581a167e3591501a75ef0af7329b1dcfc7a8aaef502d5163246b11c23d1d0760ba7dee6697256e091bc9a07b7ceb3c44954dfa7385611\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"506f11e3a4828c36be1cf020d153f87893c48b39077a81b522103998cd5180b9209feab95ac2f5cec849c0d883b017d57ed359911516c1287d049a2a7df04a26\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-linux-x64.tar.gz\",\n            \"hash\": \"1752ce53c8dbc59b3a321da7d44862410bdf29153124099106ec7397ab1fc650aa902849e198da38e5360f7ea5cd3e3f12cf78a9ec8121b666bf1db2080fd7fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-osx-arm64.tar.gz\",\n            \"hash\": \"62358024b8960412f9e457e2dba14f65e03a50557bd6cf23a6bd77de87539d6b93dec55b375375f1ae7ca88de16118d3dca9d72f0a82a31fb3dab0c8e33bbf08\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-osx-x64.tar.gz\",\n            \"hash\": \"e711051b2fc7593ce099b200cbe92e56a09e795afefc983f4e3acbbf90019e0b209c5c2a44ae3e3d8228a8c7fbdbaa5e3463ae4dfd7017a6d265537ade01d7f4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-win-arm64.zip\",\n            \"hash\": \"f1206dc0ff28b23ac4daeccfb6b9492435d0983353c7c5f64da0f9c5646a7d1a51719431860deb59fa1ba5fb395f1367770d4e22d07437f08eaf32832690b5a3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-win-x64.exe\",\n            \"hash\": \"e235b627f1a1cbf1115def31b127136bbd89c2ea717d95d2132bf3637af3118ff34abdaff65cd527199f9715876c3ff4d119eff62f8b547a5294e222c6915d6d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-win-x64.zip\",\n            \"hash\": \"3a02a3aec7441486c2941858d904b4437283ce80170dd5f708dd8a935e3b65088d75165de47d2232c1b0f626755ae32e4e99261d76c4395dafda80335bfb82ce\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-win-x86.exe\",\n            \"hash\": \"fa1f672ae42283fe1f52e49c202cd75b47a24e238bf57621cc6a2ebc7666f169c6ef59ecb993b5a85c8df69d96b8f3e67f095581da8af856664b8e428dd2f058\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/aspnetcore-runtime-8.0.0-preview.2.23153.2-win-x86.zip\",\n            \"hash\": \"12e1714726e9c794e63e549d393121e8bf7a923c355559a1927c6dbcda1e4da49c84eb4f26ab6c74833c04614fcb339c1db37c61d8904074cb9019a814d2a3f4\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.2.23153.2/dotnet-hosting-8.0.0-preview.2.23153.2-win.exe\",\n            \"hash\": \"c88859e805120dfdd65fc8869aa2c80e28c8ed1cb0f3c9a62e29463c1f52fc161836529885a64d7917330f023b042cc14eb314055f4fb48e961d4e698676f1ef\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0-preview.2.23128.5\",\n        \"version-display\": \"8.0.0-preview.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.2.23128.5/windowsdesktop-runtime-8.0.0-preview.2.23128.5-win-arm64.exe\",\n            \"hash\": \"fb9fd996f13007899c8a79b244f1c07fdf8889a4eb4fe1b462d067a0267e5edc7dabe65bc6df319d3df3241d7f8b213061b1931486bd86f79fb6da43d09b496e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.2.23128.5/windowsdesktop-runtime-8.0.0-preview.2.23128.5-win-arm64.zip\",\n            \"hash\": \"85329ed2f1100d8e8caebf823ee963dbc178cb9dbc8350febfe515633135598bdd3fe59e2c4206f72cfb213f0ce94afd1097ebc38e1ae610e88b0a2fedc950f3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.2.23128.5/windowsdesktop-runtime-8.0.0-preview.2.23128.5-win-x64.exe\",\n            \"hash\": \"432d22c1a14e00cc1e57da079130e4e9af6db0ab0cade4d2236f1a4b2b1dd94317f5fd027ab431e543e51d2d74c5107a747bfa5dd9b2794311b187543d72972a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.2.23128.5/windowsdesktop-runtime-8.0.0-preview.2.23128.5-win-x64.zip\",\n            \"hash\": \"bfd1006fc0a92abfdf0c69ffc3ba5ee73c3583600ba5a13404b25e76820ea28f5d66841ef3d057e4a60fa48e943529c268722f90bf873784a53fe9d920ad7635\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.2.23128.5/windowsdesktop-runtime-8.0.0-preview.2.23128.5-win-x86.exe\",\n            \"hash\": \"c84cf3e423842ce3fc37a9814022850695b33a1cbfbceeb472878eb7633b8c13f8b2fc67057ad0278a0019415e0335a51802aba74cb9e0edfb5688fbf4018867\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.2.23128.5/windowsdesktop-runtime-8.0.0-preview.2.23128.5-win-x86.zip\",\n            \"hash\": \"6896908f61b8521fdfd78998a18d401153e4c234e82fd38806ec5d759cda240031e3e557205d61c07ea3973ad051b4dd3de4310907b44335deb93d739cb6d459\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2023-02-21\",\n      \"release-version\": \"8.0.0-preview.1\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/8.0/preview/8.0.0-preview.1.md\",\n      \"runtime\": {\n        \"version\": \"8.0.0-preview.1.23110.8\",\n        \"version-display\": \"8.0.0-preview.1\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-linux-arm.tar.gz\",\n            \"hash\": \"c7326339ade4ad1c15ee535f753f28dbb07a7a5c113697958bce8d002d98d7362862d1a773c88c0ee404a93783b05af6b2eea515cb988bac7d70a43b81ce36fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-linux-arm64.tar.gz\",\n            \"hash\": \"2a15a8affb01c905e9ab4989f58a36bf9fec4e7395e3c44f143657e7d2e3903d7469ddc06c3fd57d3fcf48db4713d2ecd2c8ad2b3e361e8138e1890ba81adf73\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-linux-musl-arm.tar.gz\",\n            \"hash\": \"30230899d63f2bf6ca69ad9ff7fbd309e70195fb760401f71ea38cd3eb2db149d87fff2c7b083d54e4ee2d6cbe240b60995a1cc218b78c85e23fdbd87c93c21b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-linux-musl-arm64.tar.gz\",\n            \"hash\": \"725b1bd5e4091136e5865d81e3b54bb36d1a55e26054c08e1324713902b1c2a7c6a479bda12bdafad92987509223873fb84714be1a9edf56bd39576896416587\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-linux-musl-x64.tar.gz\",\n            \"hash\": \"461a8f6956d09261baa89ab8b205c191ef4963c2df0457bce8078a6c9a09a6bede4a5b3b6f95bc812f2480506a1479f7962ad583e5855c644731b27044f7d9b4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-linux-x64.tar.gz\",\n            \"hash\": \"76436051d57d602e7d45055c64f5ef4db9a3af3358f880115442b3d7bdcd2a4eaad36c59d51d8508049418d9f62a3f7c0747d989d7d758bd84244806a6f83b02\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-osx-arm64.pkg\",\n            \"hash\": \"174cb0f4cc570e2e5a4c9e3b764923ce6c18b881d58934af1aaf5ba327ae295ea1855071ddb2ca14236aadc8294358b3f24c330e90a44070dea8956fe2e2ae2f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-osx-arm64.tar.gz\",\n            \"hash\": \"67439dbaeab214b71c3ee3b3d66928baea073c95a24be9e13acc88c1d7f365aff57f424e964d170069717eaea7e1d76328862300a98ffa7b735e4240845eadd9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-osx-x64.pkg\",\n            \"hash\": \"05e3ebc1e4a8669fb1e4485b848440bd7025e48d8ee320dfe6d6c812658af957cdb0e1a08f82a0c33ebd11e272d999ca056a37516131f1a568fabe2c2e5af829\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-osx-x64.tar.gz\",\n            \"hash\": \"42973fef78f50763696e040e207af070fa8beb7c8c0689bd3924f7131a1deb50f05e6149628e70a4dfa5e4b2a71289f9f17e340d2b0e314b1f7d5e0b3ead330a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-win-arm64.exe\",\n            \"hash\": \"80a75d463f62300f866f2a1a284216d6eb11d5b540d48000b1504502453f17158333ebaf51fff32a2609a11c6cae1674dd1cf1e4f376c8880f79138d5644280e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-win-arm64.zip\",\n            \"hash\": \"b2c0c68d94ff569fc460cec7fe1a8003ae374cc5a07e012575b7d5d5e11d42dc804f38587ba13a8e46c909784e847061011e913107a4a61d0d5a40e058491125\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-win-x64.exe\",\n            \"hash\": \"c8296d30bdfb73efdb591bd6c818bee5aeee820a76ce4919b08d18a2085285aca8bf743b67480de9d856535dbb7e7f4fb7526b925b05f5ce7e06b52310305d99\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-win-x64.zip\",\n            \"hash\": \"31010a619718599839225ba0a098fb2ed61f8bb486879a3e2d9a795071491e5e2da30417302774875851ab921161f1ef0a4bda0db2a8ea680e5dc87cc5785269\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-win-x86.exe\",\n            \"hash\": \"7799a81283433c3c425c1279d8e37f82f77c96d95e45e947c17c791b7348e1a1538aa4676de1813aed5209fe038a9828f4c4f32ac97e2360c3a4fb23c3e21ed2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/8.0.0-preview.1.23110.8/dotnet-runtime-8.0.0-preview.1.23110.8-win-x86.zip\",\n            \"hash\": \"095f76ff2a235ff5d1d0c1741d9a6a410723e1301e6097c5380845ec9c8b6e2cd5a6aa20ae9546b09f03bed96f4f2c35f09850f9b19ae0e0dc451b60c902ab49\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"8.0.100-preview.1.23115.2\",\n        \"version-display\": \"8.0.100-preview.1\",\n        \"runtime-version\": \"8.0.0-preview.1.23110.8\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.6 Preview 1)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"11.0\",\n        \"fsharp-version\": \"7.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-arm.tar.gz\",\n            \"hash\": \"b1d9f2bad2c00412c2efa1821e972df317fa6bb5e2eb51e34c871d10d20b8717ec48ddb2b10990fac50a056774d66b3444a8a459da418b1d70fb53d9e7277ba7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-arm64.tar.gz\",\n            \"hash\": \"98518887927605051312554499e197c14b32e8100fe8d8015a4556fdca3a347a3d2215d14069d33b27d978489f3e958c11baf18ba33e1b98580d2eb64cc1097b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"461094d1f53067c2b496ec25b1bf7686aee3a75f0de5a139bb29a3ac989cdb824367165c8385b78185414430f0579bbba8c94be6d511d793a16746dc018f232f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bf985c3b9c1f6f09f46f88527c54445c502e7c75dcbc004dccfb5339d0b5766290ff183abe3808919137ebc5a50c91cbd58a56ec31ad50a5e39a26671e990c61\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"120048fce7c455cb2f98cbdda6b7f789f210d9e7e0b48304f8fdc8b4838c705c6af18b2b4c375b57aa48e0e5084e60ecefad0edc09c19aca166855b3dd3fb539\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-x64.tar.gz\",\n            \"hash\": \"23a14c92e402161ed8d42ec9cb25a97868a1b72348195d28cffa00a12815f019308b56485e4375c0d0a33d9a683d83cc1e1a2a517eea44af8fb353171b6c3f64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-osx-arm64.pkg\",\n            \"hash\": \"c8d0e177ae009de55335da5bcd58234b1764c3787bd6087a728c489b27c510e1ad791732c44195d904743d23f115bb74f2dd522adfcbb223f4f3402209da79da\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-osx-arm64.tar.gz\",\n            \"hash\": \"f721a28158406c7ddd048eb396dc0d8e85cf0fafabae2ea43ede7c709e3d1ce5a119652b4341beb5b00d69f1eb10c5a0e8a5024e1ff7c9107d4eae61a53c0bdd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-osx-x64.pkg\",\n            \"hash\": \"6ddab32a7246ef94d0a9e397edc18223a0dffbc2a79d6824d176b3a41eaf23962b40f9b2fcbf7ef57908aa892018fbe23ad2dcbb713282f125a3f76dad0cb25c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-osx-x64.tar.gz\",\n            \"hash\": \"fea01806116bb234f228cbfa254b75b97aab7ded253ec237c9c8391612da5df138b8a3ca05e392455520f04ade5fa2d1421f85667fe78d188b03ce96cd366ff6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-arm64.exe\",\n            \"hash\": \"02742d974ced8673c37ac4c33b5f7b29fe8969b2d6d43dbe345835c200a24f5c0e7018b141afa67400013ecdf7dc1c495b0d10c8a2ef8ba7cd2619570c0a66f0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-arm64.zip\",\n            \"hash\": \"82535278542727a14b2b39dc7712feff69df50f201ce99e7db0805cbfe5d96d9072b6f9a59144c460061c5745eec82c12fb7121fdcc15b112a133e20f45a72a3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-x64.exe\",\n            \"hash\": \"ace0196fd62a8d6c7d78829d7640f3d8a885de2ead1d37ab42648ef12b8dc4bcbc2c26e4d47e83f07ec1403cd60c3e2c6d164649e81dece5745d2cba89c63a60\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-x64.zip\",\n            \"hash\": \"608aa5c3c5c83bb37d69177f15a666891ee329e3990301f8b8df1b244aa5581892c13269665d463bb13b0c0049ef69d75bda26a205f0b72d4c4862cf4dcd1d91\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-x86.exe\",\n            \"hash\": \"b8f5ab9041a789189c7eebc343d36de0a4818f677fd1cf04e45cb2c4b57ad9e702680bd2489785e8a095667d8bd82df94971af085102f95fbda8a2dcff43ac06\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-x86.zip\",\n            \"hash\": \"c4a7ceaf2f1998173f10c7b739ddb448a626dc179bc2acb0377dbe3885a3f0fa327f348824ce5a5dac6189668dd32182bc8c4aed5df22f7b582e783be7a9da32\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"8.0.100-preview.1.23115.2\",\n          \"version-display\": \"8.0.100-preview.1\",\n          \"runtime-version\": \"8.0.0-preview.1.23110.8\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.6 Preview 1)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"11.0\",\n          \"fsharp-version\": \"7.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-arm.tar.gz\",\n              \"hash\": \"b1d9f2bad2c00412c2efa1821e972df317fa6bb5e2eb51e34c871d10d20b8717ec48ddb2b10990fac50a056774d66b3444a8a459da418b1d70fb53d9e7277ba7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-arm64.tar.gz\",\n              \"hash\": \"98518887927605051312554499e197c14b32e8100fe8d8015a4556fdca3a347a3d2215d14069d33b27d978489f3e958c11baf18ba33e1b98580d2eb64cc1097b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-musl-arm.tar.gz\",\n              \"hash\": \"461094d1f53067c2b496ec25b1bf7686aee3a75f0de5a139bb29a3ac989cdb824367165c8385b78185414430f0579bbba8c94be6d511d793a16746dc018f232f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bf985c3b9c1f6f09f46f88527c54445c502e7c75dcbc004dccfb5339d0b5766290ff183abe3808919137ebc5a50c91cbd58a56ec31ad50a5e39a26671e990c61\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-musl-x64.tar.gz\",\n              \"hash\": \"120048fce7c455cb2f98cbdda6b7f789f210d9e7e0b48304f8fdc8b4838c705c6af18b2b4c375b57aa48e0e5084e60ecefad0edc09c19aca166855b3dd3fb539\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-linux-x64.tar.gz\",\n              \"hash\": \"23a14c92e402161ed8d42ec9cb25a97868a1b72348195d28cffa00a12815f019308b56485e4375c0d0a33d9a683d83cc1e1a2a517eea44af8fb353171b6c3f64\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-osx-arm64.pkg\",\n              \"hash\": \"c8d0e177ae009de55335da5bcd58234b1764c3787bd6087a728c489b27c510e1ad791732c44195d904743d23f115bb74f2dd522adfcbb223f4f3402209da79da\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-osx-arm64.tar.gz\",\n              \"hash\": \"f721a28158406c7ddd048eb396dc0d8e85cf0fafabae2ea43ede7c709e3d1ce5a119652b4341beb5b00d69f1eb10c5a0e8a5024e1ff7c9107d4eae61a53c0bdd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-osx-x64.pkg\",\n              \"hash\": \"6ddab32a7246ef94d0a9e397edc18223a0dffbc2a79d6824d176b3a41eaf23962b40f9b2fcbf7ef57908aa892018fbe23ad2dcbb713282f125a3f76dad0cb25c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-osx-x64.tar.gz\",\n              \"hash\": \"fea01806116bb234f228cbfa254b75b97aab7ded253ec237c9c8391612da5df138b8a3ca05e392455520f04ade5fa2d1421f85667fe78d188b03ce96cd366ff6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-arm64.exe\",\n              \"hash\": \"02742d974ced8673c37ac4c33b5f7b29fe8969b2d6d43dbe345835c200a24f5c0e7018b141afa67400013ecdf7dc1c495b0d10c8a2ef8ba7cd2619570c0a66f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-arm64.zip\",\n              \"hash\": \"82535278542727a14b2b39dc7712feff69df50f201ce99e7db0805cbfe5d96d9072b6f9a59144c460061c5745eec82c12fb7121fdcc15b112a133e20f45a72a3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-x64.exe\",\n              \"hash\": \"ace0196fd62a8d6c7d78829d7640f3d8a885de2ead1d37ab42648ef12b8dc4bcbc2c26e4d47e83f07ec1403cd60c3e2c6d164649e81dece5745d2cba89c63a60\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-x64.zip\",\n              \"hash\": \"608aa5c3c5c83bb37d69177f15a666891ee329e3990301f8b8df1b244aa5581892c13269665d463bb13b0c0049ef69d75bda26a205f0b72d4c4862cf4dcd1d91\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-x86.exe\",\n              \"hash\": \"b8f5ab9041a789189c7eebc343d36de0a4818f677fd1cf04e45cb2c4b57ad9e702680bd2489785e8a095667d8bd82df94971af085102f95fbda8a2dcff43ac06\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.100-preview.1.23115.2/dotnet-sdk-8.0.100-preview.1.23115.2-win-x86.zip\",\n              \"hash\": \"c4a7ceaf2f1998173f10c7b739ddb448a626dc179bc2acb0377dbe3885a3f0fa327f348824ce5a5dac6189668dd32182bc8c4aed5df22f7b582e783be7a9da32\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"8.0.0-preview.1.23112.2\",\n        \"version-display\": \"8.0.0-preview.1\",\n        \"version-aspnetcoremodule\": [\n          \"18.0.23043.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-linux-arm.tar.gz\",\n            \"hash\": \"6ae04e163c9c77aeb96b6a3bc2a4b99b83f2beeaac86ec918253bd0315f285d35629a78af42e7bd1e9b588510228de99fead1c5a20e63ac604634a6e259547bb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-linux-arm64.tar.gz\",\n            \"hash\": \"b8f5eb4087267f84bbea48f7c98f53d09cffdf269792c713c9d02b892ebc1eea075a39af7fc3cc63348ee6adc54179a5145b884fdf5d8853b7018c800073a10e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"4c94a76c0bbacd9c861c7b2dca385a15697f84a7fc1a51ad1dc23930dee1121da9476084ec4a2e358548ef2479d57e072218932ffa75fe511992cb9b99c360dc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bfe5b309e23938fe08bad2dae95e464f801f3f1f111c2dce20cc47e30a196248f96a5c52d0197c269a9f0afec9d031a5f04a9e6fab91880d83e527c67489ae9a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"bc6f4d5680cf2597a65914d650c42f03c3e4fba5ff0354ece96ddf53a31e481679a90ecb2500df9ebf3208dd309ac12ae25b7d74676662cf9b5db6eaf8ef813d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-linux-x64.tar.gz\",\n            \"hash\": \"8d7a5fbbd62078d55cd93dadb346e8889b5cf4a7337f864839d2ca32283d592d037b89cb0c9940df4cdd956b527fcd3ce5fe608ef7b77dc9ab6d04390e053495\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-osx-arm64.tar.gz\",\n            \"hash\": \"8f767d1ffcfd89c97ba837bec76253ea8aed226af8fbb29276fa5427034a4310232ee75d6bb0c08529040d589d8ca289fc976007d32255bdf1962cf827891c9b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-osx-x64.tar.gz\",\n            \"hash\": \"c7915b24c7d6bbb522f43e3546ecc58a6579286c64a0bdcc8e4e44f0c01c516c0fa02da85755ebc167513ca5f9e715f818ff6283d90968a61a2be97f0ab8e2c1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-win-arm64.zip\",\n            \"hash\": \"ebac66ee2405aabfce47d0f0da25d6082794e104c4211942052762a9753de6f3e2142ab865851448502c47b9386688952348fa95bea6e45d2cc94189197e4658\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-win-x64.exe\",\n            \"hash\": \"2881792bb3d9835d5a3ee41d4c6934692246ea7961cf4e596c8a9daea2a07d805728b00158c58df0a6f13f687817675df1be1b3215ac5df27e39d7ae7fdb5c3c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-win-x64.zip\",\n            \"hash\": \"8566042e64191583407a909d7a09c0eb04151b9fe446a3bdd34093962c37bcb940181695517fc85357ea16989fd55b729171409e2b862db5a3938ca6decc9542\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-win-x86.exe\",\n            \"hash\": \"cefc6fb971fba37182679e92c37fc624eedca32dec245aec0bba7ae48fb6d6b9bd63042e3cde7e04b4ea23430cff2788bb56a84ceb2db526c94492776d41786d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/aspnetcore-runtime-8.0.0-preview.1.23112.2-win-x86.zip\",\n            \"hash\": \"652a35718bceb77029e6bb5fd26cdda1889597c36ad42a73ba9f9e2de56f1c9b1424c0925dd4ae9506e70c168247009d38fa7b7e87cf7c0aa0cad8f89e750440\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/8.0.0-preview.1.23112.2/dotnet-hosting-8.0.0-preview.1.23112.2-win.exe\",\n            \"hash\": \"a2b763498ee630f4762b5919a90b744d06f32b38042578326ee50ef32a251a1dddcd2393c34bceb245c6941c0cc6b20b494f87bc1bf317f616d26b1855deb7da\",\n            \"akams\": \"https://aka.ms/dotnetcore-8-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"8.0.0-preview.1.23112.2\",\n        \"version-display\": \"8.0.0-preview.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.1.23112.2/windowsdesktop-runtime-8.0.0-preview.1.23112.2-win-arm64.exe\",\n            \"hash\": \"cf007573f4da1f19868b3f39a5edc06fdfe61d2365c686e77bf0b92ae3241c6bcb3985c1dc9d3969b490e85206cc7a7117e1cf23ac098fe2c52cb6cfe2de244b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.1.23112.2/windowsdesktop-runtime-8.0.0-preview.1.23112.2-win-arm64.zip\",\n            \"hash\": \"ef6bc582c7bce29707276e7f1fe9e6526fb090d1b3f34dfd17129541061546eab95afca629764c7aa58d3adae8d7a00984cd3d7d3ef233b9d52ad3615099d965\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.1.23112.2/windowsdesktop-runtime-8.0.0-preview.1.23112.2-win-x64.exe\",\n            \"hash\": \"421a1ae6ef6b884700a76c53a1b10b854a2cec0ebba4f446a37071d51660bcb67c771ce868c949f6490592a01456bc33723c62a18bfa79eb0aa2c085539106bc\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.1.23112.2/windowsdesktop-runtime-8.0.0-preview.1.23112.2-win-x64.zip\",\n            \"hash\": \"c0e034cfc7f3f47bcabf11599d976c29bc89d80b10d529dbbe73775860fbda0b0ff329d1e8de263b59942713bf764c6ff51f9cdc49009c7ff7ef1a214de07502\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.1.23112.2/windowsdesktop-runtime-8.0.0-preview.1.23112.2-win-x86.exe\",\n            \"hash\": \"6ddf3a093ef5f4e1311b7c5a23827be217cb0e6f7714b62804856305150e884c90319e816e54b0316bee58651b6b3c91c97f5429d5efbcea25948305c9c1ab81\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/8.0.0-preview.1.23112.2/windowsdesktop-runtime-8.0.0-preview.1.23112.2-win-x86.zip\",\n            \"hash\": \"8a79b779acf361f36fdb2a8542b97aac297ebee28259aa03efe83d0c27aa96f02b57883a463e7d56f57bf8053b1efb1cf6cef922bb3c6a56efc2718c327f1dad\"\n          }\n        ]\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "JexusManager/Resources/9.0-release.json",
    "content": "{\n  \"channel-version\": \"9.0\",\n  \"latest-release\": \"9.0.5\",\n  \"latest-release-date\": \"2025-05-13\",\n  \"latest-runtime\": \"9.0.5\",\n  \"latest-sdk\": \"9.0.300\",\n  \"support-phase\": \"active\",\n  \"release-type\": \"sts\",\n  \"eol-date\": \"2026-05-12\",\n  \"lifecycle-policy\": \"https://aka.ms/dotnetcoresupport\",\n  \"releases\": [\n    {\n      \"release-date\": \"2025-05-13\",\n      \"release-version\": \"9.0.5\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2025-26646\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-26646\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/9.0.5/9.0.5.md\",\n      \"runtime\": {\n        \"version\": \"9.0.5\",\n        \"version-display\": \"9.0.5\",\n        \"vs-version\": \"17.12.8, 17.13.7, 17.14.0\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-linux-arm.tar.gz\",\n            \"hash\": \"00aeb600c0c57c50348065d858cd85ec65b72bb1c1378543f9108f3cd2b5f33d52f3f034e142f45e92c76c171e33090c2544e3661d01ea8f0e2bb20f11d5b994\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"ffd7f6d16bbaa21494b71b692c54a5e398f31cf600870e028234bd07612cb6d43674c6371fa8470bd7f11b40a68443d22e39a84157cab8e16f52c5c5ceee3b83\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"cce09a24c0b9870e329389ab2aae2e76ec22bb7838654850ab17b56951fba00b15ca0692e363cd5e1e5d10d1e1df5a68547d3c2161436b857078d0182befd22a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dd49b3b7ee415be566d74aa99f5e75949f64e70140d4d10e1eed3548f5382e625d5e17e9b3b41ae564329215e3c1682110ac1732f313f2b3a90c087f7a5a394d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"81a26dd91953a474208b4b43cf4174442e9f9502437f257e66ecefe4f9b9ba3ccf5b3899daac061e3a0acc141d5be207c03e2b11136f4791b2911c3ef3e24889\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-linux-x64.tar.gz\",\n            \"hash\": \"029f1df580c47f21aaef3ca40e5c1fb8e54854978d13fe88570df7c3408499ff0b9db96c492c03ecdb43a82aa24dbbe81491de811913592ac62ac58dee975b0e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-osx-arm64.pkg\",\n            \"hash\": \"f86c1878b3658470db8da846fbe60e2e5b2047668fdc0ec6b538c8328175b888a19792aab6521820d0b2a106f69c126ebc10f479ec83c2dc42800f6d54a75ca4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-osx-arm64.tar.gz\",\n            \"hash\": \"809d8b36f4d1333b0e00ccd299ad25d1caf4e669fb41d814fce4efd12347b1047e18ccc6ca3042fe81324a9b93142c5f9c5868de16273956e01f9942d01d942f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-osx-x64.pkg\",\n            \"hash\": \"1a6e874204524e5e996a19e049283f5b6a2800553d01cdc47328c0fad3edd0a1e103b211a5a2aa6e213f758f4c126ea11dba4c327fd352eb3a2626b73ba779ef\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-osx-x64.tar.gz\",\n            \"hash\": \"7932c816cf4c9b13d594ca5bb716b6eee8dd09a9859d04db41f916179fdc806a42801d51855d9cad5cefe8bb93c501b776640a15be9ad56da98a74f1f91d5304\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-win-arm64.exe\",\n            \"hash\": \"c6767ac3d397d7b42ea2abea32decf3a07c274bda92fe6df47b95f232867220b319b7b14d8966a8ad3abfce63efdcfd71f2f08af360c3216ecda8914393d7dee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-win-arm64.zip\",\n            \"hash\": \"1ea36921e4789a7ec7800659c83e84ca4075d4eeefebe31ba80d629438bb65483dccb5a9a35fe495bd8119f283fbfe9f842b6303af8adec8cb1e204e6572a42c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-win-x64.exe\",\n            \"hash\": \"122bfc33930db846c85b811d762afdbcc15744c112eed1a7d356242e7fe66d3158a5dd9c105a6620cf71e93a7c517a9fda5c2b9a7d8cde5add229fcd254ebf70\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-win-x64.zip\",\n            \"hash\": \"907dce00c1807d7b5120885a860747a55bffd843f0b3e26a7ce5f4bfc13f36bdd56d16341db74946ea29b1b9a67d038f0a776bd697eb27feb1af722957d459f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-win-x86.exe\",\n            \"hash\": \"b6e61405c8a34c3333691b88255a7fe3d5b7939bdd53aefeea042d4d0c78f65d0ec26cd7aafccb66c495068643e460d79c7d1e401e8252702719ca052b6e3aff\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.5/dotnet-runtime-9.0.5-win-x86.zip\",\n            \"hash\": \"aa2c68edde03b2dd9b92e9b79b9616fe71b826ef90027ff724a966ef5835c8d77b6a22dc15645fc071b898f16a5c8f0484b634eaede87ea167bd9ec04d5a8830\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.300\",\n        \"version-display\": \"9.0.300\",\n        \"runtime-version\": \"9.0.5\",\n        \"vs-version\": \"17.14.0\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.14)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"9.0\",\n        \"vb-version\": \"17.13\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-arm.tar.gz\",\n            \"hash\": \"ca20957d3f4a09bffb86bb21b1379ff19bc62907b50d37090bb705f28064b064131aa01ca4328a29ac66365ee5539fd3152efe79c61294ad7958b19e6114d4de\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-arm64.tar.gz\",\n            \"hash\": \"c3c48b256eaf0a662412dc8cfbfa387bb97f3af84ae9cb1aba53f2d34afa5ee735c87b979549ce97eb3aa451c12bd3b10e6453eea6d4ac096d9eeecaedaad540\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-musl-arm.tar.gz\",\n            \"hash\": \"e19f4f7bfce95e73112afde42e7c16c897c016195ebb36f4e411a3bf1aa939f4c1456f9d4abb968dc8eba75531c8edaeb673df0e9e570d8dc5cb725ca57700d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0d9c5bf285f13ac3206ce327effe384fbca11af739c82c222b274654866c58d88338d66b91d4517906d7abeba33e97dd869c75b52b7cecef10af3e6e206eadb2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-musl-x64.tar.gz\",\n            \"hash\": \"a03fd3f772f288c501ae0cb950ac9a3491785d0f39660fb12814a9fc40d58f7dafb835a3ffb8e5e4016a9d199d0dfb960e053bbb695b54a5803967f1f2f2fe33\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-x64.tar.gz\",\n            \"hash\": \"dcab6daef3164390d09edc169d4bf8ec3480af1288e9766c07d20d3c7b70517d263083c3900381fda59c3a7f0aef3fd75ee4f604173c889e8222d6449091d843\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-osx-arm64.pkg\",\n            \"hash\": \"13629de49c305bac8aad22045545584af24fa0324b822a3271bbb08446f0adec0f97a55c3ed8aec2eb0524a302e9419af4e56b52d937adc42098dae3fbfffba3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-osx-arm64.tar.gz\",\n            \"hash\": \"fec528cc70edf43e6d91f16f933c54b943776899e7c2d4de7efdfa581173d46793b233abf5bc9ed566e9d9e8d37a0f96b543783fdd581f63aaf18678b82ca426\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-osx-x64.pkg\",\n            \"hash\": \"56917c946a902ee991e4fbe93cf74613498807f807fd793f863e484e216dede522fd7418efdfca74e2acd1288547da03fd98d7a51cd2129100e9c8a2d1f43d46\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-osx-x64.tar.gz\",\n            \"hash\": \"36ff37eec764c9b509fecea7ea47e4ad3d723b40eb463158de85a4f70dab6583989c4cb7324a8e00fde727dfa77b7ff63f489c255dbce87c1ee725ae445eef62\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-arm64.exe\",\n            \"hash\": \"b1a6230cc18be4828e222d5ac8f38e9045d627988fd94f4e477fb4e032733e6bb257e52ee38df9cd347741f3fe535744e170c13edf20f992e0559cafd7eddcc3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-arm64.zip\",\n            \"hash\": \"8929b044ac5e073bfdee8f31eedae9e91f54a65e748b5fe3a9cc24fac969622429541bab9605191d583fc0f3c2ab3641387c961cce30b31bb4716e7bc8507090\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-x64.exe\",\n            \"hash\": \"5d58e5b1b40ffbd87d99eabaa30ff55baafb0318e35f38e0e220ac3630974a652428284e3ceb8841bf1a2c90aff0f6e7dfd631ca36f1b65ee1efd638fc68b0c8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-x64.zip\",\n            \"hash\": \"52581e558d9aa8c74a3907095640f23c7827e10a1b6ccbb7073dfc17ac7b4f4daef4f008c8f967d8db46283ac1c97cf096fecb688ec721ca67cfbbe54f190407\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-x86.exe\",\n            \"hash\": \"0502f7f8ae2f7b063eaefb6f7533e938f3f365078d2a9771d3d85c492c8b4fdd8c522454865522693dbd79a022968be0d84133fd085ab7e57f44cef6bdbd06cd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-x86.zip\",\n            \"hash\": \"0608d4200d1b913bc74156872d367213d8b2e0cf1cf7ca411d8d77e82a1f17299fb862f920498a6aaa0dac14c20329695b71d729c75c22f0b06b4f2c591be89b\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.300\",\n          \"version-display\": \"9.0.300\",\n          \"runtime-version\": \"9.0.5\",\n          \"vs-version\": \"17.14.0\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.14)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-arm.tar.gz\",\n              \"hash\": \"ca20957d3f4a09bffb86bb21b1379ff19bc62907b50d37090bb705f28064b064131aa01ca4328a29ac66365ee5539fd3152efe79c61294ad7958b19e6114d4de\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-arm64.tar.gz\",\n              \"hash\": \"c3c48b256eaf0a662412dc8cfbfa387bb97f3af84ae9cb1aba53f2d34afa5ee735c87b979549ce97eb3aa451c12bd3b10e6453eea6d4ac096d9eeecaedaad540\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-musl-arm.tar.gz\",\n              \"hash\": \"e19f4f7bfce95e73112afde42e7c16c897c016195ebb36f4e411a3bf1aa939f4c1456f9d4abb968dc8eba75531c8edaeb673df0e9e570d8dc5cb725ca57700d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-musl-arm64.tar.gz\",\n              \"hash\": \"0d9c5bf285f13ac3206ce327effe384fbca11af739c82c222b274654866c58d88338d66b91d4517906d7abeba33e97dd869c75b52b7cecef10af3e6e206eadb2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-musl-x64.tar.gz\",\n              \"hash\": \"a03fd3f772f288c501ae0cb950ac9a3491785d0f39660fb12814a9fc40d58f7dafb835a3ffb8e5e4016a9d199d0dfb960e053bbb695b54a5803967f1f2f2fe33\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-linux-x64.tar.gz\",\n              \"hash\": \"dcab6daef3164390d09edc169d4bf8ec3480af1288e9766c07d20d3c7b70517d263083c3900381fda59c3a7f0aef3fd75ee4f604173c889e8222d6449091d843\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-osx-arm64.pkg\",\n              \"hash\": \"13629de49c305bac8aad22045545584af24fa0324b822a3271bbb08446f0adec0f97a55c3ed8aec2eb0524a302e9419af4e56b52d937adc42098dae3fbfffba3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-osx-arm64.tar.gz\",\n              \"hash\": \"fec528cc70edf43e6d91f16f933c54b943776899e7c2d4de7efdfa581173d46793b233abf5bc9ed566e9d9e8d37a0f96b543783fdd581f63aaf18678b82ca426\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-osx-x64.pkg\",\n              \"hash\": \"56917c946a902ee991e4fbe93cf74613498807f807fd793f863e484e216dede522fd7418efdfca74e2acd1288547da03fd98d7a51cd2129100e9c8a2d1f43d46\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-osx-x64.tar.gz\",\n              \"hash\": \"36ff37eec764c9b509fecea7ea47e4ad3d723b40eb463158de85a4f70dab6583989c4cb7324a8e00fde727dfa77b7ff63f489c255dbce87c1ee725ae445eef62\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-arm64.exe\",\n              \"hash\": \"b1a6230cc18be4828e222d5ac8f38e9045d627988fd94f4e477fb4e032733e6bb257e52ee38df9cd347741f3fe535744e170c13edf20f992e0559cafd7eddcc3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-arm64.zip\",\n              \"hash\": \"8929b044ac5e073bfdee8f31eedae9e91f54a65e748b5fe3a9cc24fac969622429541bab9605191d583fc0f3c2ab3641387c961cce30b31bb4716e7bc8507090\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-x64.exe\",\n              \"hash\": \"5d58e5b1b40ffbd87d99eabaa30ff55baafb0318e35f38e0e220ac3630974a652428284e3ceb8841bf1a2c90aff0f6e7dfd631ca36f1b65ee1efd638fc68b0c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-x64.zip\",\n              \"hash\": \"52581e558d9aa8c74a3907095640f23c7827e10a1b6ccbb7073dfc17ac7b4f4daef4f008c8f967d8db46283ac1c97cf096fecb688ec721ca67cfbbe54f190407\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-x86.exe\",\n              \"hash\": \"0502f7f8ae2f7b063eaefb6f7533e938f3f365078d2a9771d3d85c492c8b4fdd8c522454865522693dbd79a022968be0d84133fd085ab7e57f44cef6bdbd06cd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.300/dotnet-sdk-9.0.300-win-x86.zip\",\n              \"hash\": \"0608d4200d1b913bc74156872d367213d8b2e0cf1cf7ca411d8d77e82a1f17299fb862f920498a6aaa0dac14c20329695b71d729c75c22f0b06b4f2c591be89b\"\n            }\n          ]\n        },\n        {\n          \"version\": \"9.0.204\",\n          \"version-display\": \"9.0.204\",\n          \"runtime-version\": \"9.0.5\",\n          \"vs-version\": \"17.13.7\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.13)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-linux-arm.tar.gz\",\n              \"hash\": \"3f9e9cd85c05d2acaba325ea24de758ca303bef8d12fe352d6d85f48d3eba913826e7754f5aff40a6e68e6bffa491ace8ce52d41acffec2b84db218c23bb4dbf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-linux-arm64.tar.gz\",\n              \"hash\": \"b2fb883a60e68f41e788a93b502a7ceebba78f0144812c365f6fc4d29aa562a16dc4d0ab2b496e8c816791fd6a864b6a563757d62234ae97ebb92dd48499a22c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-linux-musl-arm.tar.gz\",\n              \"hash\": \"03efedb9851fc0fa5a9d671247fbec346ed1d7f55ecd21b329cccbedc6d1ccae235c94e93a6fb4215adb6a185639fb0ab1a79b8648d3758cb90dbd374aab81cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-linux-musl-arm64.tar.gz\",\n              \"hash\": \"3dc8ea0919c1105c62ea5452bedfa41938286020e2d531ef9bb6999b5df3fb19098a3dff59802fb9d39b6c8a6a6e5653cb357fa2c4eeceaee039be22be0d1b51\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-linux-musl-x64.tar.gz\",\n              \"hash\": \"029fad79649e1f3b3074dcee5baee83a011317c2173b3f27b0fa23090e24d7611c91f795636cfb3bfcc5f492b5d1edd76d7253e1202349b7e28c76a59aa13f2b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-linux-x64.tar.gz\",\n              \"hash\": \"f32de3dcaff13cefce4e124c2eae4864178a74cc9cb3ce293241c9a7ac4a3b460af1655030ef0bb5c393deb9f075dbbfc3772e09c06c427f5f8cfbf411749dc8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-osx-arm64.pkg\",\n              \"hash\": \"0271af6d9f732fedc544a0173ec27018851dcd643d512c83c78e793b05e188cacdab3581de6d01aafca0c58230ca140087e60b561b9a623e5c2e8e72bcee1c54\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-osx-arm64.tar.gz\",\n              \"hash\": \"f0e912e3b7b4e1f25ebe6b080c4e75d9bca9efa1b2cf39149aa31499816536ad1deb0c6654f09faa60e1d7a54d575ff89a7335236d7317c85a4c48c50a5cf20e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-osx-x64.pkg\",\n              \"hash\": \"7d74377e76a650de6373dd1d3f246c8055d63cd2a9123cacbfa48511ef8071379a221db233b9f33767bbdb3fb2fe09740e09059c3007cb13172c1aacd336275b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-osx-x64.tar.gz\",\n              \"hash\": \"5f5f69551004e008e1c20b1cde581c213a1a6fbfc59998fa32151668a85a52dff8f86a2ac8dfa708140b10e186117eeb9d7ed5a30f8049069ec99c9c16798a59\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-win-arm64.exe\",\n              \"hash\": \"beb647e60dda44283db01d0749c651a1fffaf429c471bfcbb1dd4bc843a6a81f242691d6260a51f5871bd6cbeb06513eae2693e2ee8c8170e5ccb02f86ecc665\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-win-arm64.zip\",\n              \"hash\": \"71ddc32bc2ddc9a7188f8ebc5000efe84aeb85640ccf0123ecbdee31802e84fcfe250466f5d87c159da25e1c597a2dc34fdbe721b0e405b74fb429f5f1fde306\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-win-x64.exe\",\n              \"hash\": \"5f3051433a18ec2a3a5383dbaec73604dd4476199dc20cdd14efad04fcd75638d772b3f75fddb5d35433227d906a9279c09d6ce38ca3ac90b4119e1ba67f792f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-win-x64.zip\",\n              \"hash\": \"f739b580af73fd69509c0ac8369b868f5558e2a457b4a0a3e0ae6c3f376fd78706dd96160b934e2df29566f208addb7e856c52b258ab51f430a64600cadc0b5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-win-x86.exe\",\n              \"hash\": \"7fc096065ab3dd6c75ca8ccbbb980e9d195560abc5b4b30afcdf3e8f652127489a5605a1197cd58418c84d286cc457a7e8cb4a47b0d1ad3de112dcb7655dd89e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.204/dotnet-sdk-9.0.204-win-x86.zip\",\n              \"hash\": \"b471bb61dfcd22faba58e11a139658a46b55131aa3628fcc8c2dd02ca7ec5a2f1d64d7cff66ee6b38f6b561eaa26e119b1b938326f226fb880ce114d7e23a595\"\n            }\n          ]\n        },\n        {\n          \"version\": \"9.0.106\",\n          \"version-display\": \"9.0.106\",\n          \"runtime-version\": \"9.0.5\",\n          \"vs-version\": \"17.12.8\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.12)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-linux-arm.tar.gz\",\n              \"hash\": \"2318c85784c7ba43a243e0f5262c78cc2984a95fceef8b7855035853d9c7b420b7eb681c8df8a23969926d6652c6937cfb1b1c2961e0a155c6f145302240b4d3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-linux-arm64.tar.gz\",\n              \"hash\": \"18063ed539efcf97a6826b3a367b92574338663e815e4c7ad273a17524a7ab5e35d407596f5cd6b1c0a37e695b17a915620c1445ca89bb851ab0ff34acca34f5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-linux-musl-arm.tar.gz\",\n              \"hash\": \"2c9aaacdc43e2da8bc64db517b4ab40f387f912932dc26e99f43338bffd2ced8674725ed185e60ab3178f0e4e723ec5fc29774f62b337acd47521bf389ae16cf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-linux-musl-arm64.tar.gz\",\n              \"hash\": \"834d136255e2c220e7c0327bc47e89326b57e0352b6ab01abba073cbda4d4d2933cbc6ae4440f2b9911a52ad5d05bc0f7ffb36e790f9ea4561567dd3e22bd514\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-linux-musl-x64.tar.gz\",\n              \"hash\": \"28f5adaedca5dfb1c0125c323789485c972591a65cbd518fb5d951d73131de1e7a92ff09713622788d02acf78906fa7412538c6c7e9b3c4bf6715f6495ff826c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-linux-x64.tar.gz\",\n              \"hash\": \"f977c90a5e56c3db7b7d4e23844cdb496ee966bd31ad63f8b84363a7eff28a3fb14109350381bd836ddbc67d6750f3f7dd55471e4c5d00b0214341741856fb2d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-osx-arm64.pkg\",\n              \"hash\": \"74253531b5287c9deda2d4bb911e79a39c989d9f53494de90a698dca8101e45cd5aac349282e34d31d5ced5879dff0b1bc9e777f796d170ad87fdf3906dd9bb7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-osx-arm64.tar.gz\",\n              \"hash\": \"f5b7fc08a953e1a52bf288b3baf67bf9a99951e26b43f8ac717e9e377e102625523e0c059105948802280d1c86963c689d91b30a4ff43c7065948c87be122ba4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-osx-x64.pkg\",\n              \"hash\": \"1223fed921cd24b9c308ef372b9e2121483da68342569ee729f51c426257185c6a28579d4874cc4db1a12e5a84696c00dc37c6448c8c3c2b57a305de75b2ad62\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-osx-x64.tar.gz\",\n              \"hash\": \"8c9bdba1d0b2894059f49d484b732f29b9474edde74ae4bff65889986bfe06038cea23fd142c7c557097de65cba6c8c91087ed84e01902a4ae8c7bc51cbbe9fb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-win-arm64.exe\",\n              \"hash\": \"3cfc10ff0fd10120e3a84107a4f5d8d2ac7f94d4ef130ec0a09dba5cf34020622615c61adc3772206ad869ad14cbe9d8c312e739ffa52ea1e4732973d182dde6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-win-arm64.zip\",\n              \"hash\": \"bcbf53a5226a4d90837548db3af6209da3f37ce93867f2c161edbcc725270e9dd93a4295052c429bcc8972861b9a486e3b5f25f18e210eee7c1e0f531c6e36d6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-win-x64.exe\",\n              \"hash\": \"91c9c01a29aee09666151243cfafb6d6ac38efbe5cd0204d30186520321173c9f98c2e3abf94d823fc9386aaf03c80afb81d8c56056ec8e51e4a6db14f082477\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-win-x64.zip\",\n              \"hash\": \"58e65693a889002dcd67e7e9c317f2e8ebad5ccb2c12791e27772be9815f42b67ebdab6bc7cb21e9d39b9d47fe3ee1df435444d55f1b7b81cdb144701da35eeb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-win-x86.exe\",\n              \"hash\": \"2cc585c047de55a8f1f43e16f738332a2abaefff33a420d9bd9e6256dc8f51d316133bedecd1e2ac9e697b33b90cd02eee2f630863955387c28ed977ec96791a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.106/dotnet-sdk-9.0.106-win-x86.zip\",\n              \"hash\": \"aa5631d9580ba00d7a0b60f79754beaa0789e9e8031da49627b35471590fd9901cdf606ade683d73f0b73ac0c141270bd0e502e44d0c081d0bee59ffec070d45\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.5\",\n        \"version-display\": \"9.0.5\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.25119.5\"\n        ],\n        \"vs-version\": \"17.12.8\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-linux-arm.tar.gz\",\n            \"hash\": \"7885f86dc8cfd555701739f47e1c4740accfbb2aaeeef629c29fd75c211ca556edf8737c942718cf8b7cfa888600dd7ba8193a2be1bbbf0754ced952d76217c8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"bd1db145a29b2eef440eba0491c5b70bf29e6793ebaab453d2939bd3ac161f7c33e3e4b1e65a734dd4fd44151357b4c150a4cfcb5ade7249cbf2d03266d6b32b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"62bca149538035454e52122e506572dd26ed13b3707ec77dcc0ad7ab39ed38d7693170676e38eebceb2529e8b56afa5878f1c0874f3b0d8391ec017d263867af\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"12e0502c11879a93e5a568d19b4a3b50a096425b924720cfdc4d2ce532345118542ea2ddc9cc409f9d3b706f6cac2952affa3d25317cbf240bd69d43159e1ceb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"880d6c516af46dda0686c0e56a55cad5d8c34bfe3cacdbee68a9d21a5ff9e9ee93a6c427ef0aabd4c45ab95aa772edc9b89927f38d07619db6219c93e6f6e43b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-linux-x64.tar.gz\",\n            \"hash\": \"b60b8b5fa6b4538065166cd1266d075c64c464b281159d98bf03132bf363478ccc1185a9a51738cbe37d86752820f6be4add5208120a80dfb2bf4a8b58d22cc4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-osx-arm64.tar.gz\",\n            \"hash\": \"7b208732e3ac13581f1573cbda87d8871dfa613dba587b147c72053e68bdb8abcee29fa61662b7ab722022d8e67467b2127fe38cd698a936fe198989a766b577\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-osx-x64.tar.gz\",\n            \"hash\": \"84aee767d189aaf578273020062288f08f5cc46a3184fb9f304519b88709f1f14b6f9002abd23365dcfda23ac59a896d4297833dc1411917ba4d7610779d083b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-win-arm64.exe\",\n            \"hash\": \"135c3446c61f037016ea827eadd87a32caa971b6f321ba62cebcd0e3b689f30bfb33aabec8c5e4df8886028368d520ebc32bf77eb3afc32a11d485c6bf51efc7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-win-arm64.zip\",\n            \"hash\": \"2077625869c4751b68efb6e19d5e810b9c2ae9c7da9a4c23dc10c24b921d5d302ddc5f60b7a36dd4b52fb2b88abe643f5650f10fff7452a8138229bf32c4649b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-win-x64.exe\",\n            \"hash\": \"d276ac751d778ab67691e4ddaa95a3c5dc9037d010575859dbd2c8fb2b037f28a8e1095d8aee1b34c5662d6fb8cea13a5c6205a454ba1b087a1f69d2af0c221a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-win-x64.zip\",\n            \"hash\": \"4304a5a28816bb620ff54d49499c687e3dfb2484cf1ae4d0b07f441bdaac490708be5f71efd491dfda096a487dc145a2ddf9873229b863e61ce787776da4c4a3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-win-x86.exe\",\n            \"hash\": \"d4e3b982d7de38f1ac82831815a9aadb23dfb12b7e461d3ab47691b1d2e6e3ebaa87a5d70b4e53601aa7912a10e12242edf363a3f9be84d919c5c5ec7c49621d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-9.0.5-win-x86.zip\",\n            \"hash\": \"8d2f4fe27f346a91ef788c625c9d5de5613ab3172eb51174ad96579006abda57bee2b8e75c8f2e36b3c4abcb70061b8e5849bf5d85f66fbb6d84091350fe9907\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-composite-9.0.5-linux-arm.tar.gz\",\n            \"hash\": \"63d84bb21a402d43b9d6536806898049d3d74449618332d067aec79816547cc900f28dc21bc50f8d604ba1a08d7269910802275b7937d576c07bede35ac6377b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-composite-9.0.5-linux-arm64.tar.gz\",\n            \"hash\": \"62643dd45a9dfd2dc1c1e2209937db8601da488b792813e93901408a2aa9808d4a78060a3ca7e0b247a255c9b0f84fc71a57b17d6806c8727bf7000f347d7434\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-composite-9.0.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"5b26f728509405ac023bdce1d6631dc02aeccc8eb2c9933097e46d8deccc603087b8e8192ce23fb2ce5b076a65ac6b40f8addf1bd8e1cc40864a20e0292c14da\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-composite-9.0.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e5e48492742c58c984fb8dfddb496032cb74cb28ef0ca227b12c8b09bf6b149e84a514c97cfddb79b8e1427f4bfbf35ba3be9e7f44dd23562951e62033ad2e51\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-composite-9.0.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"a5f7073d46a07d7b25297753aad34152ed07d65129b16a49d0974cd49474af4ea0ca3e9d51b3e939df719ba5fd08d6aba65a33e143b458420e2594c9f1622b4b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/aspnetcore-runtime-composite-9.0.5-linux-x64.tar.gz\",\n            \"hash\": \"ea05c3afd230d55e05845b6386abbdb2826600e5dc611c950b25af9d86ce42ced8cd7a1ad0f36ebb5177235cc6557602f4d352afcd5128387b2a21583bde340b\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.5/dotnet-hosting-9.0.5-win.exe\",\n            \"hash\": \"1e1c5d4ce7c15d52a11d8b9f384b778b44c36435c113c5d4e0035f32ea961d3d530fa570b9e3ee7d0e065ee71198b630ab10dc50adb3ee12aa3c0c5af278ad7f\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.5\",\n        \"version-display\": \"9.0.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.5/windowsdesktop-runtime-9.0.5-win-arm64.exe\",\n            \"hash\": \"12ddb80b4d5eca3d7b483563bdf5946d1205faf54d635d3898c1c027db4933942cc77cd7c1f7414fb604e0a1b36925208ac943b75ebe3678c6823d110f8c67ee\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.5/windowsdesktop-runtime-9.0.5-win-arm64.zip\",\n            \"hash\": \"3ff3b192b75253478aeb75548c73070ca8fcef72e24d381c1d97256a295b9346788e30b561cb645f48a9471b585525f2faaaa8141554aa76ba70e8dd50450148\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.5/windowsdesktop-runtime-9.0.5-win-x64.exe\",\n            \"hash\": \"89b536b45d2497489f3e96b1d956cb03df97fca14758fcc5b96eb260338036e3d3c8a242d98627e47219abaed65a4b2765226dc71e3753869260701a5a76171c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.5/windowsdesktop-runtime-9.0.5-win-x64.zip\",\n            \"hash\": \"1a761ebcdd5726a2d6dd0f1d0d8aa98e6cdeb033f9474d96cd95f3de3602f8dbeae85174ec8dd6efb9a8c426c9e347ea6b1ec8af741ca74ede1444931fa758d2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.5/windowsdesktop-runtime-9.0.5-win-x86.exe\",\n            \"hash\": \"a19d271cbf77504077d31af88c2532d18076ccbce1685fbc88d72efa38fafb0b0e8c93ea3c6c49a29b31214bf8c9e8ef0230f6fc819b484438d803cf684b6752\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.5/windowsdesktop-runtime-9.0.5-win-x86.zip\",\n            \"hash\": \"5e1cba873ebd9d0aae1993eb7e63b3e277aa50c2740fc7bbbf63b71057a1e5eb171f4b5d7a3a6db7d0e3436ca1e5907789bb75893c1a701deddfe709d1a63639\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-04-08\",\n      \"release-version\": \"9.0.4\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2025-26682\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-26682\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/9.0.4/9.0.4.md\",\n      \"runtime\": {\n        \"version\": \"9.0.4\",\n        \"version-display\": \"9.0.4\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"17.12.7, 17.13.6\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-linux-arm.tar.gz\",\n            \"hash\": \"aacde9722446e37c8bede60cc3d6dc14d8104ca9772cb2d7b05f3f78f2216af2ed642f97dcd4f2f11c0b7567f3402d6ae08c3260c0fb105f664b4a92a024ef18\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"90865902fd1babc49d288efb61cd78ca63f43cfb9bbd9343f2871ff0da023f80129b3a9c26edc9583fbbf8a91932efbad3c823ad8622fe389b20b53f87254f1b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"152315bad4db61f6de20e47103e0804f64e9dbc3adbb8cf874c3e979a0d19b4b26f5fac07f1cd224a8881f4afdedb3c244f970a7d647eae1aa44ac2604c43526\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f91cb422005c64c92c804b02670526492446cbe368633579dbf670a4a6d679c74ef012b8ee73fea672ccd85f0aa44c7164ed20876772af15052fa7447c10e255\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"a5e597643deae25a998759bd9b0eb19b933f13a36b1d7f2e4696068a9a9e0324bfd43490e8dec222168b8c063b6827fbee80181e4700bb4712550acc1801048c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-linux-x64.tar.gz\",\n            \"hash\": \"fb421fdd87ac2b4143b5746a049f802d11430b770422bf60310ee4e8e2e6a2c943ff8870d4ddf689c6e0f05bf5947fd4b9dfeb56783e796bb4f4f0191a5abb2c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-osx-arm64.pkg\",\n            \"hash\": \"0645e17b8dcaa3cf99d0c9b5b819adad7e6948ae57bee33256c09f7f9d668cf09a2639179dc09d40927f436d1c0bb46f82b88e39c7155e8c197f9467a014a9bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-osx-arm64.tar.gz\",\n            \"hash\": \"ce4a7c9491a631ebc19bac75923e8d94ba5d699f07318580408bb1bdbd67cb8a42bf6e87397f26803580326c47c3d04839bc762ec9d843320199a1587ea078bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-osx-x64.pkg\",\n            \"hash\": \"12bd18f22c326dc71ad3e52655e42d0804069b162407cc9c2a707d6d70cf208a30da3498ec536fde0475e52bb3d7a08acc0aab754dffa1b2d90adb023894072c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-osx-x64.tar.gz\",\n            \"hash\": \"a227905ea8693d4e6af30cd44424c2849804965ce2d8e5807cde900d4e84b23ff263795ca2cf68376382863b0bb5e6aa27ecfd55030d2ac5012b5fc118ce0fcc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-win-arm64.exe\",\n            \"hash\": \"6a701b6bdc42318c342990ae2f6f968e1063334f26eeebf8f2bdc6b5cbe3f360e97411eb43e6be250438125808a26f1bfa9d2a5295b48b71440e1d6c1c17c5b5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-win-arm64.zip\",\n            \"hash\": \"4ecf516da62b4f1e523d062170389087a5c33adb5806ae2119fcc4d1b53a2446753c8b30030e77fdb616b6e728ab8b7efec53c95b6cd8650c5731e1f5991da3b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-win-x64.exe\",\n            \"hash\": \"cc385d981405bf8c62dac62550c4dbf1e4420d7375848326055dae18e89f252e0e866087763ad5c8c42ebebf8e51a64ad5a66834b24465eab9769753203c383d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-win-x64.zip\",\n            \"hash\": \"741dfaac5ff4df3bad55eb1b891c96d051d7225928e83a8891528023a0aa1252ad33015d5888ca142fcf3b1ce9cc1a915db92408c107766c6143171e3fc86e3f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-win-x86.exe\",\n            \"hash\": \"432a88e38c3e033ee6b1b3ea6394b4d661030cf1c25b07ef8e6f68ef4e43446e3f805b4054b5ca0a340bbda4d3d3bf8a9e85cbd69aae896d723d1ee046356e77\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.4/dotnet-runtime-9.0.4-win-x86.zip\",\n            \"hash\": \"a01453aa8435bf06811983861d95a60ca206c8dcff5dca9eaef4e5e911a5ddd7eb94fb82d3e529406dbc2f1c73a9fb7bc34b7a2d30af37c9fc8f943b105eee2a\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.203\",\n        \"version-display\": \"9.0.203\",\n        \"runtime-version\": \"9.0.4\",\n        \"vs-version\": \"17.13.6\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-arm.tar.gz\",\n            \"hash\": \"7b0969a09148ac8dddf1fdcd41948f163f17acccaa68787195d2935e0e69554fef423291d60579bfb94d676aca8fd498eec49f8555fe750f0e88eadf6317eb37\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-arm64.tar.gz\",\n            \"hash\": \"3070ecef0d6c550a80c3ca497598d09e9a97a264bfd72e86f7c568d2f39368bd7db837681d64d9ed187a8923915d964d02b02f5bc6a493910a18184f5321d233\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-musl-arm.tar.gz\",\n            \"hash\": \"4d43cb65e398dbeed77613eea92ae0c2ccb4720b7b3db47afc144e310b3e76cc6da42e2a5415d9f1b98617240bc7331961b5a83fe8550dc7df5e06010a21267e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e21b7c01fadc6d26337d64c89adb96d2914080f02fe57130b927b0f67945c6b5adea63e4c38e681247961d85ec36e6bb89cc7475c791219fced6f18b5bcb7c9d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-musl-x64.tar.gz\",\n            \"hash\": \"83b0c47dca699b57c5c7b51d33fad61eb74bdf4285a992befe8d5ff8ea35c0f241225ff2fda709816b66462945ebaead6ea4ef2fbfb28f6194468916ce608d1e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-x64.tar.gz\",\n            \"hash\": \"67d62c3274aae593b61780db57f07ac85a50da82d04707fdaca66f25889a1cc01eaa95bce173247d1a9f566a92eb7ede71a7306b5af6a17ed84ee9525823ddd3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-osx-arm64.pkg\",\n            \"hash\": \"77cbf7a4b6e8d80426b07395dff67b33a3c1ffd80fd87b10348a06628f142b47acd9605f61852e7cbcb4e36d473bd9ad91a411dc7bff5ac25486a60bcbf84b4a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-osx-arm64.tar.gz\",\n            \"hash\": \"50a7e19b0d55de868a9cc52f6ebc1ba39b9b787b3343df5581ec50cce27b86793bb1c63168b5e8843479605e35515b49d1aaeee3a469611c2e2fc966be8c3ae5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-osx-x64.pkg\",\n            \"hash\": \"ef5f0a16eccb7b7231c8d3cc788bd0f84df8a59bda669fcb70d9dab1fa903bc10140b5ae61c9e80981feaf789fea0cea144bb827693f70ac2e90b0887bfc1888\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-osx-x64.tar.gz\",\n            \"hash\": \"837f6fb8ca30f443d7678c73619f7a004440f809e7c339932616f377954c6e1b4a6c9fef1434d75df991641641d62f9cf1a16d5aee6640170cbb27a1b961632b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-arm64.exe\",\n            \"hash\": \"d1420d062e4f3d130a2ebfd0bee7ed870552a1c5ef901fe18f6eaf4c2534ee85121e3b7a40eadc2f6af164a41d322dc65a9ef896c2e909f4d89f179e6607dd65\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-arm64.zip\",\n            \"hash\": \"379cdd811623966b25418af2b87611fd8c359f3db2a9618428554d77d05f73e6410f67c425c45240613e556de9ecbbc89695d036ac2f73c7d71ba9de704f3fb0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-x64.exe\",\n            \"hash\": \"77b87bd1785d5272912d6d8b732871ce3dd2f52a481aca24504c19e247772244310f89d686c9cdf50d518c1839238aa4775417e3a37ca33e6310b4ea01f05f1e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-x64.zip\",\n            \"hash\": \"5fc935b55c8a72ad274b1f5747efddf64712d80992424347fc2ad8b303f73a5b9616d41273be48505acde2691aacc97c9bfa07ca3a9b1036835cf5927dfd7526\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-x86.exe\",\n            \"hash\": \"dd47554df1f1d217429924bad81ccf22a7533b511473fdb1e019c5fecc63c6ea67ea2abd870130864d6a6c63be0bb4f005f91f67e61bfeb314fa8fa639d81821\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-x86.zip\",\n            \"hash\": \"7f72a6d9923bd4b7e0a8bfc5f395ebebed452a92b3ec1097bbccb3adb7ab00356bdf9869c770248a44033f4672b3d4157eb430261fed7e219893e10d91d454bf\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.203\",\n          \"version-display\": \"9.0.203\",\n          \"runtime-version\": \"9.0.4\",\n          \"vs-version\": \"17.13.6\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.13)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-arm.tar.gz\",\n              \"hash\": \"7b0969a09148ac8dddf1fdcd41948f163f17acccaa68787195d2935e0e69554fef423291d60579bfb94d676aca8fd498eec49f8555fe750f0e88eadf6317eb37\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-arm64.tar.gz\",\n              \"hash\": \"3070ecef0d6c550a80c3ca497598d09e9a97a264bfd72e86f7c568d2f39368bd7db837681d64d9ed187a8923915d964d02b02f5bc6a493910a18184f5321d233\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-musl-arm.tar.gz\",\n              \"hash\": \"4d43cb65e398dbeed77613eea92ae0c2ccb4720b7b3db47afc144e310b3e76cc6da42e2a5415d9f1b98617240bc7331961b5a83fe8550dc7df5e06010a21267e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-musl-arm64.tar.gz\",\n              \"hash\": \"e21b7c01fadc6d26337d64c89adb96d2914080f02fe57130b927b0f67945c6b5adea63e4c38e681247961d85ec36e6bb89cc7475c791219fced6f18b5bcb7c9d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-musl-x64.tar.gz\",\n              \"hash\": \"83b0c47dca699b57c5c7b51d33fad61eb74bdf4285a992befe8d5ff8ea35c0f241225ff2fda709816b66462945ebaead6ea4ef2fbfb28f6194468916ce608d1e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-linux-x64.tar.gz\",\n              \"hash\": \"67d62c3274aae593b61780db57f07ac85a50da82d04707fdaca66f25889a1cc01eaa95bce173247d1a9f566a92eb7ede71a7306b5af6a17ed84ee9525823ddd3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-osx-arm64.pkg\",\n              \"hash\": \"77cbf7a4b6e8d80426b07395dff67b33a3c1ffd80fd87b10348a06628f142b47acd9605f61852e7cbcb4e36d473bd9ad91a411dc7bff5ac25486a60bcbf84b4a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-osx-arm64.tar.gz\",\n              \"hash\": \"50a7e19b0d55de868a9cc52f6ebc1ba39b9b787b3343df5581ec50cce27b86793bb1c63168b5e8843479605e35515b49d1aaeee3a469611c2e2fc966be8c3ae5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-osx-x64.pkg\",\n              \"hash\": \"ef5f0a16eccb7b7231c8d3cc788bd0f84df8a59bda669fcb70d9dab1fa903bc10140b5ae61c9e80981feaf789fea0cea144bb827693f70ac2e90b0887bfc1888\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-osx-x64.tar.gz\",\n              \"hash\": \"837f6fb8ca30f443d7678c73619f7a004440f809e7c339932616f377954c6e1b4a6c9fef1434d75df991641641d62f9cf1a16d5aee6640170cbb27a1b961632b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-arm64.exe\",\n              \"hash\": \"d1420d062e4f3d130a2ebfd0bee7ed870552a1c5ef901fe18f6eaf4c2534ee85121e3b7a40eadc2f6af164a41d322dc65a9ef896c2e909f4d89f179e6607dd65\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-arm64.zip\",\n              \"hash\": \"379cdd811623966b25418af2b87611fd8c359f3db2a9618428554d77d05f73e6410f67c425c45240613e556de9ecbbc89695d036ac2f73c7d71ba9de704f3fb0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-x64.exe\",\n              \"hash\": \"77b87bd1785d5272912d6d8b732871ce3dd2f52a481aca24504c19e247772244310f89d686c9cdf50d518c1839238aa4775417e3a37ca33e6310b4ea01f05f1e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-x64.zip\",\n              \"hash\": \"5fc935b55c8a72ad274b1f5747efddf64712d80992424347fc2ad8b303f73a5b9616d41273be48505acde2691aacc97c9bfa07ca3a9b1036835cf5927dfd7526\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-x86.exe\",\n              \"hash\": \"dd47554df1f1d217429924bad81ccf22a7533b511473fdb1e019c5fecc63c6ea67ea2abd870130864d6a6c63be0bb4f005f91f67e61bfeb314fa8fa639d81821\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.203/dotnet-sdk-9.0.203-win-x86.zip\",\n              \"hash\": \"7f72a6d9923bd4b7e0a8bfc5f395ebebed452a92b3ec1097bbccb3adb7ab00356bdf9869c770248a44033f4672b3d4157eb430261fed7e219893e10d91d454bf\"\n            }\n          ]\n        },\n        {\n          \"version\": \"9.0.105\",\n          \"version-display\": \"9.0.105\",\n          \"runtime-version\": \"9.0.4\",\n          \"vs-version\": \"17.12.7\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.12)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-linux-arm.tar.gz\",\n              \"hash\": \"904aedeeb9a4ec89d5a6a9e5c5c060f20b9ad9a2e67b01c6f10bafcf75b333e797827ae55c3e0f2f3df3f1a7265eb31bd678a8674bb467d71e87cfb1e060c331\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-linux-arm64.tar.gz\",\n              \"hash\": \"6e184a6bf7f6b6800996f34976fe83ce0891710a95407221cdf53df7185f21dce9893efafc8cf1e7104f05a02ac55fe21aec3b1b6d161d7b7e086d729458056f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-linux-musl-arm.tar.gz\",\n              \"hash\": \"6e6cb0b8fdc71ef3945c1734bc85d31a961c0492856a762802f1a5af43590a898f92f717e8df29f0b585debe7e13afa11ed482b611821116c0513a246f239bd4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-linux-musl-arm64.tar.gz\",\n              \"hash\": \"e22b57ffca4b5b17a97902e8cfa81be3bc9575e9762765b2f93c9e7f156f9a888c76f7961e0f8942080076ccac25cfecf17138e016a45758a4ffd8c5d7f21651\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-linux-musl-x64.tar.gz\",\n              \"hash\": \"71291709bc0defc461f291d96f57f0626540c7723d82d300d1401d7a3fcd150b6ce78ed4b4b2996b1c4688deb2f75ddb0fd2b0ef221ab3d56bc2cf8e852c7de7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-linux-x64.tar.gz\",\n              \"hash\": \"f795bb35f432b71f940eb62bfa4ca3df5d708f497467ae16a67d2d19817a8f7e8cf5e6faa791412eb0da017be59ff93a2ad723675b3f3152f39bff64d545f4c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-osx-arm64.pkg\",\n              \"hash\": \"1ea09c2c1b84e6c76ec4f51f848c35321fdea8a92dabde20e4ab5fa031854dfd500e958f39c31fec4e16bd8e180ebe50d924b4e332b7b33b66db18e378589335\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-osx-arm64.tar.gz\",\n              \"hash\": \"75fbdcc62d13596d1781e90a44aa83147f70d15f70b173e588a012393ee4db299d5342f13176d95314cf24c41bdadb32d17b27103283c3f412afb8778980f1aa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-osx-x64.pkg\",\n              \"hash\": \"e44c0e09f3fb05a352b1946a39abfdc362c13495a4b0618841756fd15cb379438a8823283a60970fc0def3b98ca362f598c44e925076a0b623569217f6ff5ed4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-osx-x64.tar.gz\",\n              \"hash\": \"0f0ccd8c359d37d026ce88c0e121cb69e9f8e9be61d7e28032d522bf046e5517ec0f31ea2830d0405636ee586db2dab54ae69b36d5311f99bcb2dc929dce48bb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-win-arm64.exe\",\n              \"hash\": \"ce028ce05a84f96e6528a56013f07a333627d677d39605484f8c9a63d53d9b388978b2b8a92ad194ed149de2568f6acb8aeb3ee18fbb1fbf7061f73d68703505\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-win-arm64.zip\",\n              \"hash\": \"7e6e5a8dd7375c5adc0e2368a3bd8f10e1cebf788765c254f032b755104ae3525801b82d786a1f1f780bcbb2938ec7b6c1094cb6579661362fa96db2221ef620\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-win-x64.exe\",\n              \"hash\": \"9f72bfb85db1cc21344071703b6c20cd085534c2fb6d0e2be77863768e1525b8951241b10adcd6b88a4db253ec6772a1df965cea85f9ae2979e204cb527a67b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-win-x64.zip\",\n              \"hash\": \"328ae0d73475f09ba46747cea055a2c40eb82a7ec2f7a730296b7fd506e1660177c9f3c365003c51d9dd23e9e0e5a9688b09b22d3a74c972251e95054846045f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-win-x86.exe\",\n              \"hash\": \"99dcff0ba8e252bac04df5bae9149a07107811ad5b3fc829e4d6e64a5ba807d59cd516a246a8ac46ef027f0fdf046b360308d464c05935451f323500504d92c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.105/dotnet-sdk-9.0.105-win-x86.zip\",\n              \"hash\": \"19d639426eab4011960a210f6d66b4c809e5a633f4560fff3c42df5f030d987823dcb1bb525606beac72b91021631a9d8eef93de88d8676fb92064565cf6381f\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.4\",\n        \"version-display\": \"9.0.4\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.25073.4\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-linux-arm.tar.gz\",\n            \"hash\": \"6b3c1c5af12fb09910967d6485603d04c8a3c47a9e6bb11c7375a5ae1b76175b013afb4923cadd99a7a22b782ca4b8b824070bf5252c5481324ac023fe72cea4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"7cca4084341c2e978e6d75e09cae308a35de7cd84c5b27d5246b9d1b3e6aaff200bae8de5a25b816e30c3ba354bef17b84bae0ce15144895518661e53af18331\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"11cea0b91ae542bc4d2fc451247595071eeb01f801d3305f9c9ccda7c04b4b1c327ee75a21452ac1b584a50a639e6d622272fc7ab9cbb744a8bb691b45baf2c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"67fe12c34c4859dd8c50b57145e2fefbb929dbe2a729a5a8bfb1a53441689f68295cff4d93194ff3b9611212f13674c70e142b2cfe3bf6a57710fd4206722898\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"89d8a05c65f886e1708dbfa4ea97baaf64029eca2aee9b883c9e516129058c5636c313554f05bdeb52801339ab4e326ebeb708e14dcea75e3cd70ddbc5f81caf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-linux-x64.tar.gz\",\n            \"hash\": \"f3eae8863634a050b90b672b14d466a44c623ca06c6501a3a70efea93e540995e2fa348ae5ef7a3f278110a9ba24043a651150a378e4e5a84c25690b73364132\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-osx-arm64.tar.gz\",\n            \"hash\": \"34461f12204c61c7f23ffd0f89bc769846de8ae902c15e348a672b9bf279183b26f2ca35d36f1c12a60529bc291f42253e127ec3464621d0cfedaa0e9a5d9adf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-osx-x64.tar.gz\",\n            \"hash\": \"b07d2bef605bdb36f9c7ddfb5c183ba4965e6fcb3b4f00c148fbdcd62fede1f1eb405553d2ef84f57e057558c643b87102816ccefa28b2eb08500fd6b50b490c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-win-arm64.exe\",\n            \"hash\": \"1d4d856c3f23b309856e3f9d2e08b3cb5c99b11dbab460ab7d3e9ffea7bb36ddb2a916ebf3bdc51ea936176074f0742b7573be52904b9efa6bbea059c3dad924\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-win-arm64.zip\",\n            \"hash\": \"080a49595409802e76e2d356a344f8293ebe1900c99cae17936c4697e05de4084b822b250713d5e1aeb54c3122bc6f9dce06dd49c92e21239e02f207963290d1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-win-x64.exe\",\n            \"hash\": \"76b740deb1ce9332c094459f916245d9823e28d680ca9a1fc4f21826ad6155a58c5aec60fcd9dd0e5d698a4d746beea3c7b6d69906ef6ec3491c61e32b5a2b1b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-win-x64.zip\",\n            \"hash\": \"161a5b226b9035bb54f566f57a1f6503ceeef66e79fce463c55717a60129a0f4ed525e4179c7d8072e9cd921fb584d74bc600a85f9e976f80ce2f1d429f2c10d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-win-x86.exe\",\n            \"hash\": \"82c7158cbf6488adc29b6568ebf9d05a2ddfe99319e019c077084a25d5d366a020bc98eb55882088f6c22a5a4b1ee2de7dfe289c1ea1ec95976633e5d42e5bbd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-9.0.4-win-x86.zip\",\n            \"hash\": \"cf33e5d462e957e67b04dc5bc64b5c216a13a3a996bd2486b75a6fe760f6289fe8186e4b9d05ff9684473577973378350a64f46fb0697b060fcedcac867b5685\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-composite-9.0.4-linux-arm.tar.gz\",\n            \"hash\": \"5fd6b16fff9687ca350fbc81737ceb1861291a548ca75cd80c3a57bc896529da82e02cbe90d2ab8b9419cfecce2023f0af92d8180e90bbd591e8e2db01334a4f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-composite-9.0.4-linux-arm64.tar.gz\",\n            \"hash\": \"f049a6674a6a38968c42920826f6f25fe0c6c0869ec6a9a010b67d0a25e2a6af4634a3f767f4de39785f7a4eb89037aa3de3e0ff3ab7f7ffcb062f59f2d26c72\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-composite-9.0.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"a2e29106e1717595c447948424baa1b5e113105f328868cf458ab6403bb51879ed8a66fae706b51a18ca2d8130455d294f3e09be2619bb5c4a00345b51dafa37\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-composite-9.0.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"623b0c2bf6e1279694b7a0551d8b0527404ece523a99e196a00f9f236b01140e8776b788744dba53960287fb40ec614e7b5b1a0e1fbd617f11521bc8af5b10cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-composite-9.0.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"e061672712e4646108f8b36c1da61a9f993970db8ed598515a62d6e467305d4cffe53b654e7af6000bc93d0769f67c452f1b9523e91b63ed5c5e248163644c40\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/aspnetcore-runtime-composite-9.0.4-linux-x64.tar.gz\",\n            \"hash\": \"f8a1ec81def3954221aea5e2e24d6302aee8055d4c5811ff289c139cf7e08925279a75fdd557c33afb88d4948da1e2a38af7cf801ac5248039783c983a4d782b\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.4/dotnet-hosting-9.0.4-win.exe\",\n            \"hash\": \"e02d6e48361bc09f84aefef0653bd1eaa1324795d120758115818d77f1ba0bca751dcc7e7c143293c7831fd72ff566d7c2248d1cb795f8d251c04631bc4459ea\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.4\",\n        \"version-display\": \"9.0.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.4/windowsdesktop-runtime-9.0.4-win-arm64.exe\",\n            \"hash\": \"6209799b87d2f7d3b17656e3229420dc2870217f8efc0f9000dba85f1811e95a4098ffd1601e78041b17fb181a3f58a89b5ca9da8bbb02f736e1d8c023e6cb9f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.4/windowsdesktop-runtime-9.0.4-win-arm64.zip\",\n            \"hash\": \"a2bebab263c635e9cd56adbb09c79ca2d905226429e016f20151e216c292a9c91583e72d623f4c7e1396ef7eb3dca852b03828df236e0ff3b347a87bb924d9e5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.4/windowsdesktop-runtime-9.0.4-win-x64.exe\",\n            \"hash\": \"c277fe5434b66c05f7782d40b90ab04dd2a9ac3d1570b2ab96a2311a58aeefff27761ca4488aadebe3b897e961b24b2f9c5a597ee27c2c4387d3cf0833f6cc48\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.4/windowsdesktop-runtime-9.0.4-win-x64.zip\",\n            \"hash\": \"ec38fab3d387ced97d55d28aef34d3979cadfed48f86bd01f44d2b3a864edf4339ee82df5ba4af535d2cf91832bd56b902f7195a4352641e6210efc1c4a70681\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.4/windowsdesktop-runtime-9.0.4-win-x86.exe\",\n            \"hash\": \"214a98c6d468566cb0d84898e7129897890384b1f3a49f1c59187f3711cea6340df588850d65c1b0c239fd0151806cfa7bc056551da05d9a0d94130b2e4fba7d\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.4/windowsdesktop-runtime-9.0.4-win-x86.zip\",\n            \"hash\": \"9516c6cb24e51a5b457de0d26992cf52ace1a96ea406f4f4ff37d4293d08717d05a39eeb19a844b815b4bc061ebeffaaedb17d964289ee5c66217e5054a26f64\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-03-11\",\n      \"release-version\": \"9.0.3\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2025-24070\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-24070\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/9.0.3/9.0.3.md\",\n      \"runtime\": {\n        \"version\": \"9.0.3\",\n        \"version-display\": \"9.0.3\",\n        \"vs-version\": \"17.12.6, 17.13.3\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-linux-arm.tar.gz\",\n            \"hash\": \"22b35dca40dba8a6bc6663c63c04a3e6edf59f04b1db3bf792a1e64b573c3896f65e322cdbe8c1522009c2e81d94fe0ef85ab436e2961e81f4d7cc2123ba33e3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"0b18859800c75d293b05b58938b7c3ebd9a7aa5d5b163c8d5a08aa84f95017d2d0114dd6f3a688bce9974c43dbd073a930977b7ccfe06577207a67f00319d20c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"bd807c994b02aa0c97e001492c16146894f6aa1fdef12d0979ffb0c84d809cdf955fd351016bb59d5098ec945fc3cce7958a6fedcd0e301ef28159700e380278\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2385114169e32b29b3a13b275a441af1edbb4c14ebed52ff8f45f11ac8a571efa2984be2ef91e38e670038c8e29db8c585ff12d1e05502f4120e4dd05e98b72c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"8533a061f4fad61135269ae7987d9bdc8000cbc4999e00392f0e9d234d40e20a4f4e753dd5724373772349a896f2a84e3ba86e876d81a9bf068888e421afb13f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-linux-x64.tar.gz\",\n            \"hash\": \"4b16a57e94592fb9712421ed90c025fc3b4f9039faea37b432b6d8a3e8caf192dead732fb84bbdca9dfa4ed40ddb46078dd3c2710801c92aee8e21c084bfd664\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-osx-arm64.pkg\",\n            \"hash\": \"e465ac53f042de610dd2897489b3c199043bf56c72c57607e09ff484dcaf8c8b2414fbe0a8fbc47b7593fbc254535e1153ae0c99e02675dbd0b6ca77706c6bbc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-osx-arm64.tar.gz\",\n            \"hash\": \"b6808f69704b22d56b8af4afd4695997e20fa13c9e0116d28b5d8f3022d9c039c3af75910d2532873b8331526997d50ffd1b5642d36f1e3edd6485edc15d8009\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-osx-x64.pkg\",\n            \"hash\": \"abf16ef042bc18d550524f0c2588f2037a4ef56cfeeb822c5f9e31f0b8e7765bb8c2c8009987168a7b3c9f9cbf3b7a131283e345049a4bcd6854d4e6837dfa22\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-osx-x64.tar.gz\",\n            \"hash\": \"f60688f3c747d0e75c3f2c24b9021b147d7aa4ab4b5aa939b861d5584a590bf9b1d6e88577bd08e9ec23437fcaa295da633ef0406591cb5d14ac6659f8726164\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-win-arm64.exe\",\n            \"hash\": \"dc4f1af15338302f44e9a1ed219f6786c7f81e3d0ff3a2043a07a04d357450984391f13185a9dae8afdf0bff251aea9857b5895d27bd4122e73f1faeb290decb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-win-arm64.zip\",\n            \"hash\": \"d3a2e5574f95d076baaaaf4c54278ff4169e604229aeb3c5d45d420c1a8fd5be4704befc8d86d13495242f5a47e25b0883f060384ea585779c8645223c8100c9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-win-x64.exe\",\n            \"hash\": \"f4730f354c10898908ac43c455364554273bc10d367e5221b09d3ac41b8780ead888496f4a1b79270b53239d666a2fdb571b683105bea4c453ddf233f937f834\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-win-x64.zip\",\n            \"hash\": \"61e33b0569b5727348d3e74e3dba5d814a8c017292abaa5deaa79c41e78e6b73eb6ee8f09568ee805f8537b81d978f3e54c1c583e85df29d85fa6c87fde442eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-win-x86.exe\",\n            \"hash\": \"ea82dbf00bb91d2b66e3c06dfb6ad2a6f3443d75b575176113576e128878baa5760755e164901ad4ef69e3610fceecfc316be294a6ad8661fccb8388a2abafbf\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.3/dotnet-runtime-9.0.3-win-x86.zip\",\n            \"hash\": \"6848d49fcbc499d679112d07db68662b7b253c627fe8baba8bf8296388ec1161a356f59306b2234dc6c622a534c6b3aadc5cee2cce8d56d7b97255ed7581d56a\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.202\",\n        \"version-display\": \"9.0.202\",\n        \"runtime-version\": \"9.0.3\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"9.0\",\n        \"vb-version\": \"17.13\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-arm.tar.gz\",\n            \"hash\": \"2e88683ee3894b72581ce3829efd2cc5214968f0782e17f504a79bc80ecc31efe9d5360303545e45537f992f5ac8c47aaec8eca5ea8a4efacde9742de6c8ffe0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-arm64.tar.gz\",\n            \"hash\": \"6916fd37907c6563baebb5c9f82a6761d13d53a0442451bae73ad62a36a72744771017a2d3f665eecaa5c76f6a0036ddd503c2e195a8ea307973a292748b87d5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-musl-arm.tar.gz\",\n            \"hash\": \"38194d67497dc72ebf7d5a7ea6764624d1c524ac26261ce888a10af940ab661973306cb00bf8909a3694215c0c134ae90195e6ee11818046f920e0ff65a83662\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-musl-arm64.tar.gz\",\n            \"hash\": \"21071ff46853b4155569c5a70fd8186b8250759db1d7945198e523023be3cd0e97058499491f1f2d2d77156a61919b6287c70df5520b4ec012aa9ec172889f6d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-musl-x64.tar.gz\",\n            \"hash\": \"8b6538d3056dd9f231d964daa2d07ad71409b4e6eb991d406ac1f07626001085573726ba35294b54f2e8596d3a77e018d72ea5df4ec61fbb79faa04510a49fa3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-x64.tar.gz\",\n            \"hash\": \"0eb52300023d9df6494aadfbd8380dddf84e2f217d444ad9fe880292afbf378be3700d7fbeca3136ec95962ba355e44abfc9f8a679cd0d08e68f85cb0320ce73\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-osx-arm64.pkg\",\n            \"hash\": \"cc49774082e5a7f5ca9a18dc59a5a91032e35795c66f452325cf89df52d5c22293983a80d98f0a8409f7941eb75536403d48f9eb9e24ff749ddbb7507731e6fc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-osx-arm64.tar.gz\",\n            \"hash\": \"63badde1614aea8a7551f8e56c4b7ba379b15f37e6c008133e22c08df0607eab8c3c2f0306e441e9fe60c2166dec953272a0cbd150eb5b0b77dac5b287880115\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-osx-x64.pkg\",\n            \"hash\": \"0fa362a500aa054d45620bde593c407cd8217d2423e795f6e982587fe7da12c8f7b8010d8ba1a3c5c135c515806c3cdb979b46092d1e7545efa3a8c945a77051\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-osx-x64.tar.gz\",\n            \"hash\": \"fa47b5712462a704aeed37a2399074111e6f5f6fb0377ca93bfaa9177b31f9508cdd7f492d5ea24e0cd3c3a0fb977bbb5e582a0ebfd84baa0ec4d0a7abd0518d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-arm64.exe\",\n            \"hash\": \"24aebb2c523ad1306ea5c05b829a9c5fe4c84da44b5923d68d4ca82a527efd716d69c93dce41f250403dae5e82b6ce6fa0f2a54d12e5f5d062f89dcf2a7b690d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-arm64.zip\",\n            \"hash\": \"92d25b151bac28920508937f944bcc01d2b00e478a2b3139421d5f58636a5711994ebc0f724cda5b2d012e15d6979dc184f09c72574136dde63ba85d110efd2b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-x64.exe\",\n            \"hash\": \"1ebb3db377b96dfc73b271c65a7831b5ab91559fa4defd509c9978c947dc408ebf43b14b2fdb47a05b298fdb5747c7ada0f7005dfe5820226e118b65e5a276dc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-x64.zip\",\n            \"hash\": \"caf88c10ff1e3f59d420b7556ed14f21c156d54e69b8288a38e6b0c470a41374c10d2ed84cd6434a89e2a23c6a1a2ee6cb762941706b85c40f6f047df0b8127b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-x86.exe\",\n            \"hash\": \"8ee88e28132514734cde8bf1d1b0687716423347f39219a6b478b58c35f3d7732140f7f765348b9860df195f7df8caab1a7eacd111f5e54a5b9fc769053960e4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-x86.zip\",\n            \"hash\": \"c0c586fa7f02901b3126c143f7896292d4d91ce3a1da2e26e2c7c757d809bf38db804f7da8424756326b1f51604ec948f9d004b967b83937c394a2e0366a7401\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.202\",\n          \"version-display\": \"9.0.202\",\n          \"runtime-version\": \"9.0.3\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-arm.tar.gz\",\n              \"hash\": \"2e88683ee3894b72581ce3829efd2cc5214968f0782e17f504a79bc80ecc31efe9d5360303545e45537f992f5ac8c47aaec8eca5ea8a4efacde9742de6c8ffe0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-arm64.tar.gz\",\n              \"hash\": \"6916fd37907c6563baebb5c9f82a6761d13d53a0442451bae73ad62a36a72744771017a2d3f665eecaa5c76f6a0036ddd503c2e195a8ea307973a292748b87d5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-musl-arm.tar.gz\",\n              \"hash\": \"38194d67497dc72ebf7d5a7ea6764624d1c524ac26261ce888a10af940ab661973306cb00bf8909a3694215c0c134ae90195e6ee11818046f920e0ff65a83662\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-musl-arm64.tar.gz\",\n              \"hash\": \"21071ff46853b4155569c5a70fd8186b8250759db1d7945198e523023be3cd0e97058499491f1f2d2d77156a61919b6287c70df5520b4ec012aa9ec172889f6d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-musl-x64.tar.gz\",\n              \"hash\": \"8b6538d3056dd9f231d964daa2d07ad71409b4e6eb991d406ac1f07626001085573726ba35294b54f2e8596d3a77e018d72ea5df4ec61fbb79faa04510a49fa3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-linux-x64.tar.gz\",\n              \"hash\": \"0eb52300023d9df6494aadfbd8380dddf84e2f217d444ad9fe880292afbf378be3700d7fbeca3136ec95962ba355e44abfc9f8a679cd0d08e68f85cb0320ce73\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-osx-arm64.pkg\",\n              \"hash\": \"cc49774082e5a7f5ca9a18dc59a5a91032e35795c66f452325cf89df52d5c22293983a80d98f0a8409f7941eb75536403d48f9eb9e24ff749ddbb7507731e6fc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-osx-arm64.tar.gz\",\n              \"hash\": \"63badde1614aea8a7551f8e56c4b7ba379b15f37e6c008133e22c08df0607eab8c3c2f0306e441e9fe60c2166dec953272a0cbd150eb5b0b77dac5b287880115\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-osx-x64.pkg\",\n              \"hash\": \"0fa362a500aa054d45620bde593c407cd8217d2423e795f6e982587fe7da12c8f7b8010d8ba1a3c5c135c515806c3cdb979b46092d1e7545efa3a8c945a77051\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-osx-x64.tar.gz\",\n              \"hash\": \"fa47b5712462a704aeed37a2399074111e6f5f6fb0377ca93bfaa9177b31f9508cdd7f492d5ea24e0cd3c3a0fb977bbb5e582a0ebfd84baa0ec4d0a7abd0518d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-arm64.exe\",\n              \"hash\": \"24aebb2c523ad1306ea5c05b829a9c5fe4c84da44b5923d68d4ca82a527efd716d69c93dce41f250403dae5e82b6ce6fa0f2a54d12e5f5d062f89dcf2a7b690d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-arm64.zip\",\n              \"hash\": \"92d25b151bac28920508937f944bcc01d2b00e478a2b3139421d5f58636a5711994ebc0f724cda5b2d012e15d6979dc184f09c72574136dde63ba85d110efd2b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-x64.exe\",\n              \"hash\": \"1ebb3db377b96dfc73b271c65a7831b5ab91559fa4defd509c9978c947dc408ebf43b14b2fdb47a05b298fdb5747c7ada0f7005dfe5820226e118b65e5a276dc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-x64.zip\",\n              \"hash\": \"caf88c10ff1e3f59d420b7556ed14f21c156d54e69b8288a38e6b0c470a41374c10d2ed84cd6434a89e2a23c6a1a2ee6cb762941706b85c40f6f047df0b8127b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-x86.exe\",\n              \"hash\": \"8ee88e28132514734cde8bf1d1b0687716423347f39219a6b478b58c35f3d7732140f7f765348b9860df195f7df8caab1a7eacd111f5e54a5b9fc769053960e4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.202/dotnet-sdk-9.0.202-win-x86.zip\",\n              \"hash\": \"c0c586fa7f02901b3126c143f7896292d4d91ce3a1da2e26e2c7c757d809bf38db804f7da8424756326b1f51604ec948f9d004b967b83937c394a2e0366a7401\"\n            }\n          ]\n        },\n        {\n          \"version\": \"9.0.201\",\n          \"version-display\": \"9.0.201\",\n          \"runtime-version\": \"9.0.3\",\n          \"vs-version\": \"17.13.3\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.13)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-linux-arm.tar.gz\",\n              \"hash\": \"681218635821ad49586b20a0eeb03d029d15f2cf2c795074bd3e27a773f90a17a8b6bac9df44e083233cecf362bbfee7d0c6b83a24917e696bde8ad7e52f1155\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-linux-arm64.tar.gz\",\n              \"hash\": \"4eb78c7608355ca2780990934592c49579ed59f0983377c4c2c99a4091970264642b8fee92c65e91baeb6c6bc22066d6958085eacd1a850055b52f6d04436d5b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-linux-musl-arm.tar.gz\",\n              \"hash\": \"38dbe814f4ecd5281f7821059661ee0265fb219cde085facfccd59e9fb340c03818449064dfea4622de0c0c6e390ca1979515bde77bf30cbe7aae614c1cd4f2b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-linux-musl-arm64.tar.gz\",\n              \"hash\": \"0ca9d313acca194716ffadbf724e3257700428e92b5bd092055d9df631cd3a267f3c57ba755d75e41fb7b027848321bb0ab6dfee0374e0e45e54990b34bc67a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-linux-musl-x64.tar.gz\",\n              \"hash\": \"756fe885d5916040c77995ceed02e852a93eee94489fb2521d9613da80b1a066c0553526c5b3d6c24bcd031c10e9848ad80d27b75945e4699909e6adfd39bacb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-linux-x64.tar.gz\",\n              \"hash\": \"93a8084ef38da810c3c96504c20ea2020a6b755b73a19f7acc6cd73a8b62ace0adda14452d11e6458f73dc7d58ffad22fcd151f111d2320cb23a10fd54dcb772\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-osx-arm64.pkg\",\n              \"hash\": \"a40cb08334a6a11ecc3bb1ba9a4b98a1b5ef0ec6b7128bc3f88533a60fb61ec49bed4f1b91e9b2d7b3d9dfcbbcc753bc7012351571a8d147c9d99efba895e677\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-osx-arm64.tar.gz\",\n              \"hash\": \"225dc2dc67f1fc41c05209e49a315651b20196ff0287f95ee083e4c932c90eed7b78f68287a889a41fb3ed11f48d0b75f6285fd0e81612f984b59cfa73d0a7c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-osx-x64.pkg\",\n              \"hash\": \"e86dbcdd0a1b6cd9a3f1768eeda5885073db5697a2a3ad496205adc035a3747ccc352b066108e63f1f78775b01c566ff1da08fa158c27b3f19e2de7617b1cc31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-osx-x64.tar.gz\",\n              \"hash\": \"6b3183339a7b4fcd6975731f0c4079a7fa1a618bcf7a33583aa35ed8dbed5d841e5f17ce118416c21fea72babfabd0fc2cc04266f36af9d6c7bc8c5520cb5a81\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-win-arm64.exe\",\n              \"hash\": \"8dfc09eaadbe3bbc9c574b39c852fd027cea1ed9478b677c0bdca1f8ccb46acd2afe541ca47f6287fd13ea043379c1795d91288be21537319a8b7af18358e4b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-win-arm64.zip\",\n              \"hash\": \"0b3f8edc703110145cdecd37d1a5c3677b9cc1666f57a896da8bbe978751a673a6a86f3c04f16aa82c28bebbcfb00143b60253c10fcbc3340f442a6d012fa5cb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-win-x64.exe\",\n              \"hash\": \"8e3d95a6d22c27dd27412ebd886ff63e4c37484b2c1f3bde451b8e1329ef86eae75f0bfa9bb2acc54cab1ed942c343ab86d3c4ffe2ccff323e5661897006adf9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-win-x64.zip\",\n              \"hash\": \"5a6d8eadb389e0ab4984bf36cd2950583ee5e3f3a20e8fc1c5a526a197029988052616e1be1662c4b9e13020b572685423d664d0b68a009b4b98661f65bf1a73\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-win-x86.exe\",\n              \"hash\": \"cdb0d9d8a4e628f892edb25c959ee131b6d7439b6286b432be05e4e2e2e1c175d57683b49fa7b9d4e004bea0e408bab9e89260f00850ae5b3b5bafd4c033b5a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.201/dotnet-sdk-9.0.201-win-x86.zip\",\n              \"hash\": \"b1b7b3db0fc4d2b3f8060938042e191cd1abe230d35c901cb67a5cf8f0472c1ed767226819c954cc6ae9e4fbacea1f634f507b6a88dcf9a543ce00128e66f64a\"\n            }\n          ]\n        },\n        {\n          \"version\": \"9.0.104\",\n          \"version-display\": \"9.0.104\",\n          \"runtime-version\": \"9.0.3\",\n          \"vs-version\": \"17.12.6\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.12)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-linux-arm.tar.gz\",\n              \"hash\": \"9d4d4a69a946fb61e9d3a0b3a575cf9eb87f419477a90acb002ded5c6a34c6eb746d14103493e330f0a43fbd82fa479591b64ab13bc1f92c619d735d0862e32a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-linux-arm64.tar.gz\",\n              \"hash\": \"bca55566ea5fd74a9e0f757cae2f572823c450469f456756042987b27e9d15fbe59e1993742532a82fdfc7fb21f26a63e74b4c80ed17e52b12f0738b461d70e3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-linux-musl-arm.tar.gz\",\n              \"hash\": \"50222ede71ae50fac4970b2457de2dd90ec3e6297c29c5576ef1e17d523e6dcb04d60a1383f86bed288d0206728273df6dc0fddde595cfcf832651cca3619cc7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-linux-musl-arm64.tar.gz\",\n              \"hash\": \"68a5e20a906dedd58e128c90116ce6f41fcbb3d6737397a3049eb81ff6a8ccc132326dd147480284535ee17a545be5e47b41dfdb482f50c15e76f5b84f31b9fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-linux-musl-x64.tar.gz\",\n              \"hash\": \"e88d054c0b91209f41d009129d186c3188066ee0bfc5ff0569c6489602d375e63b52142beb756f7f09edef9c60fa70d5de6d05cf7b3280388fd83d93e82cca76\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-linux-x64.tar.gz\",\n              \"hash\": \"99b6b1bcd46d3cd59896139054bfd6c15909b7aead7bb2f19d3e97bbf87a425db5bce4506d5f77bf6f7f1249b0cacafa679c9bc9c3b1e4f2ab2e79cb5d0b2c79\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-osx-arm64.pkg\",\n              \"hash\": \"b1b7f692e7602740e3880841be2e5e061e577f10ba4e58c3f07ebc9df0c5d4c13330fd99dd4f54ddceab55781b73b60b35ff39becf21230e5d23d26329ca0ae2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-osx-arm64.tar.gz\",\n              \"hash\": \"2145b705149186444948a69d10a95451c579ff7314c78477555e06f7659a792172630db4a16fd27401f720f5e994e082bed23f437efef3c7198f1c83e5c61d77\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-osx-x64.pkg\",\n              \"hash\": \"9d1451e0de57e449b402937677110ab506e7e25773db9cfa67bb8467fc3eb0a876c7df9eff4369bc26f6456334c9dde276ed1e4d6714b377a0729494761f0c8a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-osx-x64.tar.gz\",\n              \"hash\": \"25b64652440b8c600a387f126dcbba5bc6646ddb906a3c27638b09264aa3ff668749cfc6e3a1e53070c97288ca71a58c7e91f1d10a4f0f4169a2d04e5f86a4b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-win-arm64.exe\",\n              \"hash\": \"34bdab3f6a32baeb3e852262e132a3fddfe051d46ac5bdd82b28577ad3a9d2302821e990230a9684d89152077ff62887351b837d4a4d083871f3625ef368e980\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-win-arm64.zip\",\n              \"hash\": \"7ddb0c81f8f247655630883727d59d86800f8aa00d0f302cdce47d95566374e7687372fa51a12dde0c1e356efa24d11e65be5f8dc39005b2ca63ab4ab2ba3277\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-win-x64.exe\",\n              \"hash\": \"d6a9abfb2752cf51a583cee18c24ae340d7d8622b18eb846204cbf1a597ea80dc42d5189928cf27963f0fc649cf2a64a9d9565af8de82951f7b6dcdb0317a5a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-win-x64.zip\",\n              \"hash\": \"a6609ab702a48c6c5df4caa4b5fb63c237238926e8952322e141b7de7d8a403fe97728727598b2c449be1de1a7e9cbe902cca365add8c4e59056f90b58dfd27c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-win-x86.exe\",\n              \"hash\": \"f3f4ce834d45e8d26ae1cb729bc2d83a3bc5763f667910a918e878da95e2dba331488afcef92ba2d7f6ae05e591fb8956fd116aba88d188195bc24d4219281ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.104/dotnet-sdk-9.0.104-win-x86.zip\",\n              \"hash\": \"dac2558d0922f62585ff556488d6bdedef61f72cfb8244c7ba1fcc7bae92c049fc2303ead3d1ad81b59098eff2d16fa26c37e02d21b2f808ecb04666cfd5ea07\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.3\",\n        \"version-display\": \"9.0.3\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.25044.3\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-linux-arm.tar.gz\",\n            \"hash\": \"2a7508de9795d8238a1d4ff7e74df819538ca47d6ff8663ddb27b5f7514dcf487e7eed22d8c84258cad3fb30066621a6c79e08f3b060f15d64e85145b376aef0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"8a027078b46b6ebb3f4beda2b3f3cf7960701b71b9f2b6704c17f2752279c764755cadfd30f3e2f3e3ab26869e50a35c567c2fbd41fd98d77ae2f6fecde18b50\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"416bf072c817abca07a3ec5e3527d8baf01f798c208a9091599a4d1826f3e9adb6f0b40bbbec597548e0715283cc166f5e9ff61836426c2de5c726b45f5fc8be\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6322fc1a733a541f94e13db91cd27d976f55734689d40c3fdfbb10a057a575f7e02b32b1d4ab7c879cd599380fddd7e0a17d7f0ad0eb370db142f4f3c7eb5bdc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"13585a919350ba2257f00a90ac2de0306b1e952ebba0c7f9039d7ec8da13554b2e3c86add01db83de4e647009b8a3ac66c3a68629e7701b463703b79db86e4ac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-linux-x64.tar.gz\",\n            \"hash\": \"38a3b73a6c41ee6f67e9108ebf684ec082fc6dfaa941ea225f6eb200a1e34909c05fa47a087c35c18eab607350796ecd16c09f2e3774dba590083c93742e39a3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-osx-arm64.tar.gz\",\n            \"hash\": \"0f91a731182071ed511755e8521d82dc0e0c9bd1baaee705e16ddb2f235e8b632ea707465b817a240799e5fd7c524b50e3a1f6abd7d9a5edcee9025e473f4184\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-osx-x64.tar.gz\",\n            \"hash\": \"32aacaf3ebd41990362ff5a1236bf83c7a9e431c88169a6bcb2a7e9322278b7ee613f565a883077c5343d217ea6ac715bec1f696e1c9e8119dc4da664919fdf8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-win-arm64.exe\",\n            \"hash\": \"b468b96f39b7aa6035412d475c78eb820ed7f8dbf7257e9f99861ef1bac77f0fc56a4d8f53636116358470ee63d4ffcf27623db235b674b9340e3785b2652d9e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-win-arm64.zip\",\n            \"hash\": \"a5ed15e458f28a057040a1f8de3b0b83878847a8eaef40657b05b60db4edda4691b7a97b30f75b1130349d35c0a2291c15c4181d2a940170fc248b27a042586a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-win-x64.exe\",\n            \"hash\": \"20d2929c4cb85f7bac7b6875a79b877ca2ae5f59471c7b4c6ec089de33cb980584ef77042a20209afdd0e6128f1fc50c647813956675300aa19b6257ece90034\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-win-x64.zip\",\n            \"hash\": \"252866541dbf82eace90582620eac7550061de913a888623992ce947c31c364cc1965a6b25b9d3c5cc1cf4b24903f8c5b7a90f6f90b3eb4fd1ddf60d4f0159d3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-win-x86.exe\",\n            \"hash\": \"27bf39dc5e116fe7f7f99c5a0d1bbcd23a5133ae903718c565e9b5470b2f598fc84cf6088fa3eced8456f34685dfd1e1dac980780ae76b57d744f2c6b4e57a53\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-9.0.3-win-x86.zip\",\n            \"hash\": \"a84d3a77d268a1a7752b2660aa723e3aba86504ae4d522aa5b2af963487ad99ecc09dc55c142fc58039151c46b55430494807079ab3bb4af50c48f96e9e7844d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-composite-9.0.3-linux-arm.tar.gz\",\n            \"hash\": \"52a7478e2ae6e0835ca96f54cfab5e93e31ccbd50fa034bf478a0c1c0f83d2ec163e085218694de49fc252cbbe4f0601249a6cb344fad5d5c2c56b33beb5c9d7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-composite-9.0.3-linux-arm64.tar.gz\",\n            \"hash\": \"1b950c7b49d47618288bc570d4821c1ec56deb2364453c1380e778fc311fd00c1884a740743ad083978b94246b2bf33a3c64b5ed1ee807dd9ffac25ee03f0352\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-composite-9.0.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"11b2a8bf1d615722a5ccda4a6fb09ceda98bd1c1e4b22471b6c1b9f38f7fa58c109aa290d5e2f5106b6c0d240cd80a616b4aa953658e6bbba0ef394160aedd2b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-composite-9.0.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dedfb7919e127eda84454a0c6460a02840a4e96eefb2b7475e16dad61a737630515428e15d043e9beaa83f5e5f09cf7b1a12e4845b705ef38b81a249229ed8eb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-composite-9.0.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"61e271dc0f8ac14e5dc026b8021e4a9b56c4115a05f2ff04f042248105600225053dd7b1cb26aa4df4c070bec3897a05ae103ba3a257b4864a7ce964412b3ee7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/aspnetcore-runtime-composite-9.0.3-linux-x64.tar.gz\",\n            \"hash\": \"020563a599541f944ef1fc42a710e025dbc86f40e28299316c2de9dd23e307d26ba7bb4a016d7423fdb7fff018955f333f267753233788a5c636a86e20aafda4\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.3/dotnet-hosting-9.0.3-win.exe\",\n            \"hash\": \"47ac3ebd0b58125d022215516b471e425af17a5cf65d63ae5b38b2ec55bf89c981bb56acbb6977dcab4f77278f12b5fdf9034ec20246e12343a65f76eeb0b798\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.3\",\n        \"version-display\": \"9.0.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.3/windowsdesktop-runtime-9.0.3-win-arm64.exe\",\n            \"hash\": \"1c6b40cd3e00ad441306c1a2e534c1970dd00d19856ef57e7c8b09a85e187da357e5825763e6cd6446ae317de212cb2ab7c92bbdf9faf7c07a079a7394909479\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.3/windowsdesktop-runtime-9.0.3-win-arm64.zip\",\n            \"hash\": \"abd07d1ee5d714b8583b5acbd07dc477c457b00f1d2ca6f80f1d0c80c9edb12274f8e3be342c5790993e22c3ed2eb7ff4c744d5596153735d39bf6e17541c7fa\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.3/windowsdesktop-runtime-9.0.3-win-x64.exe\",\n            \"hash\": \"344603c607ad8a73dbfccba08f3d5400b28d831fe146541924ef02a5f838c84405837a08eba5f9b4a855ddfb94962e625b24cf51f8d3860135e305baf9114e49\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.3/windowsdesktop-runtime-9.0.3-win-x64.zip\",\n            \"hash\": \"0dcdb04d054ef5e8871c7a70c1b1fd82e84797f213a5ba4fde6bdd1d1903462de0cf296a7165449492f8af8f19a1ef5b6bb3ea91385264d9bea8c1d782a4a0db\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.3/windowsdesktop-runtime-9.0.3-win-x86.exe\",\n            \"hash\": \"b482793c9daac8888fdb53123748fe6438a8952a7d64e0820feeb580fcadbdb7c2f6efd90fe0d5fda73deb6e3e9830939538fb262362705c3e495b5b404f1750\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.3/windowsdesktop-runtime-9.0.3-win-x86.zip\",\n            \"hash\": \"a05f65a29ec10ebc95536b3ab1a57809c998a8c05b32084884c0e5d26f681dacaf8081c53d89c5c552242a13f7e70ef33d8255aa8a4894d163e5fc87ef3a48c1\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-02-11\",\n      \"release-version\": \"9.0.2\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/9.0.2/9.0.2.md\",\n      \"runtime\": {\n        \"version\": \"9.0.2\",\n        \"version-display\": \"9.0.2\",\n        \"vs-version\": \"17.12.5, 17.13.0\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-linux-arm.tar.gz\",\n            \"hash\": \"be31b790c8a5347c1a7fb75ecbbab16c675ff5e6352561631220b94d417f19eed07220d5c3972905123704dd6bd67d00138ff42484815e0def7d8ad916a30d94\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"460133ddc2582a209bd80673721e7b9add2b9b2967ef1503a7dc29be2777870870990ee7549351e8207c3e3e84dabeca6d5bdbbdea75e5e3e749eb16bd13e7ef\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"38e03d8c12fa4520e311cf2d15fb2c2f0e019c7165b13fcbe58fc46914743ecea8e0ac4d914385b1430cfb5e0df3db6299424cfdccea6ffe469a681e2d9d93b7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"0bb0dc7a4388c5b95d4fec9fe7ca1273f9afa502021c73eb946ed2928d6d6d0836414400f667eff30da97b83b04f66d3032c2344bb2587007b4001d75b696a16\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"df116ef9b7f6b717b7c7f057e826c9e1f1ed0d743fa6b26e9229fc36e500ab834d19ae1ab55ebc28b1c9b8cb4a7f41c62edd08c2dd2cdcb6e912defea2810ffb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-linux-x64.tar.gz\",\n            \"hash\": \"dc4af24d5d298392fd53491a56c6d4e3d1e85e3e294cb4a848c7ac8f0dce287f11dcb274f18f95f7db7195681386e5c6b0d99500808c1b3e68b9c6097a3484d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-osx-arm64.pkg\",\n            \"hash\": \"18e680670708b1230786c1433f8126c926d261d6516917f2d65a9038f819eb1deeea473e5f14e74020c68e6d67e393ef1f69c70f6220d1d7d0482802cdd6460b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-osx-arm64.tar.gz\",\n            \"hash\": \"5ad890311607a5fb14f9a64103acd76385781e4b75085a8e755da474ffc1d50730bb8064e8bafb117afdb9d04ceacbd58452539f1e0e63be0b9731e19fd65156\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-osx-x64.pkg\",\n            \"hash\": \"a9bb2cda7b53410880cecd51ba9798f0b4872e4327f4f5a619876f6d85b24bdf83f134f523edfa547640993c1e87f1a61c4f42ad738887d10d665ca7b597ec48\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-osx-x64.tar.gz\",\n            \"hash\": \"abe0752f3437ce0e2415d1f70879b6b062dfda59128ef5b96db946639b506a54cac81845b6775d19014d52271abeb8dfaacfeb783452b98f66265c5efb1b3b55\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-win-arm64.exe\",\n            \"hash\": \"d66e00748adcf3d43124cfaff1bb6122dc984ee20a488966e1d6a36b3c83671b91100f985812d1553d52498e8b40d5eccbad87a4778c5aa4c6debe5ca59390d2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-win-arm64.zip\",\n            \"hash\": \"2fa9ff1951b62399e3b201e8c247f6646e9c2099ea302bf5b18e5a00e156017f438c6c68d3c7b634f744c250d8acdc8eef6e17bab6f25982ef5f0e36a5f8be90\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-win-x64.exe\",\n            \"hash\": \"da1d1ba1973d24bb42cf511d12931de88fd1e73efe26690fef60c61d20a6ca63018fd59d5a358f5a7a2bc8219ea294e0fb2786dbcea7d6c05b0a007ffef76e3c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-win-x64.zip\",\n            \"hash\": \"a8c9402fab7f9f9afefea433e2f35f894f8411ea9b7139321b4dd4cc1a39cce59c678158dc0178e376d5bdd11bbdd48c1c748b7d0fdf7cbea7a8c5f8b7afb987\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-win-x86.exe\",\n            \"hash\": \"d86fc1c6473d9a365a43b39da988b39a9a008f2c3fdde8b68cc6e0893af1e99a9fb5473a10128d55e3e02e808db088438431cce4610153fe3c4d0aadcaf6c7c5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.2/dotnet-runtime-9.0.2-win-x86.zip\",\n            \"hash\": \"ed9cb618e20abe5a03a2d132e6ededd7ef1e4338e61edbc301063ab2d82287cf9781e1e1738d175e73de751f3359671ed35d36e76bc6688485e6b2e0a2bf9864\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.200\",\n        \"version-display\": \"9.0.200\",\n        \"runtime-version\": \"9.0.2\",\n        \"vs-version\": \"17.13.0\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.13)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"9.0\",\n        \"vb-version\": \"17.13\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-arm.tar.gz\",\n            \"hash\": \"476a9a686af234482ea99ef53fd1a3b6bd65e4ef5f24eb1e2e94b60f146e7b7e7b99519a66a896836682e702007027a04e10ede857fc4540c3bae56b16cb3780\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-arm64.tar.gz\",\n            \"hash\": \"c2d18644243d67d103471713f0e9ba659df0c0d5e098bd441310418dd03798d6a5a8539da7c8cc320d57085c193c753ff78bdff8a97a97c51f500433538fb722\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-musl-arm.tar.gz\",\n            \"hash\": \"4297ed3b4f112e1d64a6617cb96191bfb4ebf6a5fbd01c75de6c0592897173f011aef3d9be7e61738e0c8ce8ba1815b06f28e0c251c840f2e0de2630d36616ca\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f1a70807e0a2b5ee272bdd714535a2fa3d31bb8c2216b43c151a72cb364f64a6f893590baeebc7dfb2b78ff50e4ba11c3e4cadf11c75744404fefabdc7ff08db\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-musl-x64.tar.gz\",\n            \"hash\": \"96b032d5209a838e97522528963e2e9589f8384dff4292e567030b0da0849104a57cd6d0f05e5fb7e7787730f47c6112a014df17c76010864f55c110a971f216\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-x64.tar.gz\",\n            \"hash\": \"1af5f3a444419b3f5cf99cb03ee740722722478226d0aff27ad41b1d11e69d73497e25c07ef06a6df9e73fb0fbdc4b9baca9accec95654d9ee7be4d5a5c3ac23\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-osx-arm64.pkg\",\n            \"hash\": \"5f7528922738e520edf714cee636d8e1b44c62d1af984804ca00508f22bff54776a232cdd1e94d386c1d70fc02219f8e4d05db9b449bbe7853fdce284e5fc8db\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-osx-arm64.tar.gz\",\n            \"hash\": \"a45d5a6fe5f046e9cd0a4482a41f0884822903134bcd2f25face71e1322749dacc53221cee21f814c6171326da0f64f42204ebd79f633a3bd1075c04fa73d1bc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-osx-x64.pkg\",\n            \"hash\": \"a9dd1005ae1ab833c0c95a4ca1850e29a01b712b224eddf1edae3f152ea2a212402abb61956dbc8e8804762b10ca980371ddb0735cc950422c9ce3ba08c6f64f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-osx-x64.tar.gz\",\n            \"hash\": \"f38a641d17dedf0be24c721cc4f78784050cd5184fb5cc6c04c4b2e6f7602c55fc5a3c80dcf2a1df5ec59aedad42947720510f07b2b3c59b6185b91aff2010ae\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-arm64.exe\",\n            \"hash\": \"06d7c4133bf7cb6f72b60b97f11c1f8773291e888f556c355d45dc66e3b36e597ac5562359fb3221b970b28f02649f0693d5109467698310752e0a8dc60f6703\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-arm64.zip\",\n            \"hash\": \"3a996171562f30ac2f4a73d196bcf5ae3077ed5425c4d9aec562116e886dc3a9c20a227753501ac3741a5a8c7473d95a5861100e9d38fc2b09de09193e1bb00f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-x64.exe\",\n            \"hash\": \"801d4a40a7bdad5c7b50e75c55c5ab657da44b5d779fe50da5683450e23c595e8b18e6bc9ffb80636ffb347b72e575379cd83c7554dc27f5ba75246169f327a8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-x64.zip\",\n            \"hash\": \"e274e0e8a0d926c58a2199e020fc5b2c2867689772f51673f655ee853a50a9ca0e435ae5682bb4ae146d1fbc9a40f6d4a7ecff14d5fea24db8a3f67d0dcbf2a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-x86.exe\",\n            \"hash\": \"3ddeb620fc45c623ade58f179e80cea64b7af5b76b0b4b1f65b766df3c5614ce04809f40614ebeb98dd6b4662dc1c2bed38d1f78eadc489360d54e35b98b9904\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-x86.zip\",\n            \"hash\": \"65daea90e55f93abe1484dd86bcf2b447d0caf20fb80734a361f2dba0e6ded2158b40d5a7834c192e51b108fb2205aefc856c2a1b34e363413bc371e3a7f2737\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.200\",\n          \"version-display\": \"9.0.200\",\n          \"runtime-version\": \"9.0.2\",\n          \"vs-version\": \"17.13.0\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.13)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"17.13\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-arm.tar.gz\",\n              \"hash\": \"476a9a686af234482ea99ef53fd1a3b6bd65e4ef5f24eb1e2e94b60f146e7b7e7b99519a66a896836682e702007027a04e10ede857fc4540c3bae56b16cb3780\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-arm64.tar.gz\",\n              \"hash\": \"c2d18644243d67d103471713f0e9ba659df0c0d5e098bd441310418dd03798d6a5a8539da7c8cc320d57085c193c753ff78bdff8a97a97c51f500433538fb722\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-musl-arm.tar.gz\",\n              \"hash\": \"4297ed3b4f112e1d64a6617cb96191bfb4ebf6a5fbd01c75de6c0592897173f011aef3d9be7e61738e0c8ce8ba1815b06f28e0c251c840f2e0de2630d36616ca\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-musl-arm64.tar.gz\",\n              \"hash\": \"f1a70807e0a2b5ee272bdd714535a2fa3d31bb8c2216b43c151a72cb364f64a6f893590baeebc7dfb2b78ff50e4ba11c3e4cadf11c75744404fefabdc7ff08db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-musl-x64.tar.gz\",\n              \"hash\": \"96b032d5209a838e97522528963e2e9589f8384dff4292e567030b0da0849104a57cd6d0f05e5fb7e7787730f47c6112a014df17c76010864f55c110a971f216\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-linux-x64.tar.gz\",\n              \"hash\": \"1af5f3a444419b3f5cf99cb03ee740722722478226d0aff27ad41b1d11e69d73497e25c07ef06a6df9e73fb0fbdc4b9baca9accec95654d9ee7be4d5a5c3ac23\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-osx-arm64.pkg\",\n              \"hash\": \"5f7528922738e520edf714cee636d8e1b44c62d1af984804ca00508f22bff54776a232cdd1e94d386c1d70fc02219f8e4d05db9b449bbe7853fdce284e5fc8db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-osx-arm64.tar.gz\",\n              \"hash\": \"a45d5a6fe5f046e9cd0a4482a41f0884822903134bcd2f25face71e1322749dacc53221cee21f814c6171326da0f64f42204ebd79f633a3bd1075c04fa73d1bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-osx-x64.pkg\",\n              \"hash\": \"a9dd1005ae1ab833c0c95a4ca1850e29a01b712b224eddf1edae3f152ea2a212402abb61956dbc8e8804762b10ca980371ddb0735cc950422c9ce3ba08c6f64f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-osx-x64.tar.gz\",\n              \"hash\": \"f38a641d17dedf0be24c721cc4f78784050cd5184fb5cc6c04c4b2e6f7602c55fc5a3c80dcf2a1df5ec59aedad42947720510f07b2b3c59b6185b91aff2010ae\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-arm64.exe\",\n              \"hash\": \"06d7c4133bf7cb6f72b60b97f11c1f8773291e888f556c355d45dc66e3b36e597ac5562359fb3221b970b28f02649f0693d5109467698310752e0a8dc60f6703\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-arm64.zip\",\n              \"hash\": \"3a996171562f30ac2f4a73d196bcf5ae3077ed5425c4d9aec562116e886dc3a9c20a227753501ac3741a5a8c7473d95a5861100e9d38fc2b09de09193e1bb00f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-x64.exe\",\n              \"hash\": \"801d4a40a7bdad5c7b50e75c55c5ab657da44b5d779fe50da5683450e23c595e8b18e6bc9ffb80636ffb347b72e575379cd83c7554dc27f5ba75246169f327a8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-x64.zip\",\n              \"hash\": \"e274e0e8a0d926c58a2199e020fc5b2c2867689772f51673f655ee853a50a9ca0e435ae5682bb4ae146d1fbc9a40f6d4a7ecff14d5fea24db8a3f67d0dcbf2a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-x86.exe\",\n              \"hash\": \"3ddeb620fc45c623ade58f179e80cea64b7af5b76b0b4b1f65b766df3c5614ce04809f40614ebeb98dd6b4662dc1c2bed38d1f78eadc489360d54e35b98b9904\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.200/dotnet-sdk-9.0.200-win-x86.zip\",\n              \"hash\": \"65daea90e55f93abe1484dd86bcf2b447d0caf20fb80734a361f2dba0e6ded2158b40d5a7834c192e51b108fb2205aefc856c2a1b34e363413bc371e3a7f2737\"\n            }\n          ]\n        },\n        {\n          \"version\": \"9.0.103\",\n          \"version-display\": \"9.0.103\",\n          \"runtime-version\": \"9.0.2\",\n          \"vs-version\": \"17.12.5\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.12)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-linux-arm.tar.gz\",\n              \"hash\": \"9b9ddbbd8a090ee78f40576ac9f3daca5a6845ee39448b10c3bb51b2b4f9e7e0a979b6a00c31da08f3e68601fa77a687a556d079c19d532aee4d7f25bc9f13c9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-linux-arm64.tar.gz\",\n              \"hash\": \"32b5494e77689086e8d5b936434e4e87a8d88039f77c3381d96592757e7d716f58de1003fe41c7ef3a2089366a3205187f56d733d5f9d2f1505d83b1c16d3a0b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-linux-musl-arm.tar.gz\",\n              \"hash\": \"663c3351edb0d38b25fa854be092a2cf7b6fefd568f4d7458ff40740b9637605390b48a4acdbb35640d40dc9efe666a6ee2947f10fe9c9a16b9743fd75bcf0d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-linux-musl-arm64.tar.gz\",\n              \"hash\": \"bcc5019831f9636d81a87369e1cf56e70dc52c2993eb64468f62029629a610333b23c2062e3f93647bebcbdf7de2aaefa7e9c96d6e96ec161e3a745766ae109f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-linux-musl-x64.tar.gz\",\n              \"hash\": \"ac4e2116f99999f249c290e9a87c628f6236f59c65eb7672bbb484cc1159bf739c9585dad80b50ff727335e4bf626e175913156b13a283f175dae7f6a965a542\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-linux-x64.tar.gz\",\n              \"hash\": \"afda487365cf2d082f1dc462ff01607eae10657de8281c53c4e8775df72f5ed5b31b427ea8afd0917886e73b104a25db4c607e0510f8be3a761de9445d797b75\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-osx-arm64.pkg\",\n              \"hash\": \"49e9eb2a3ca79b94f9062b130201962415befa18c5365458c1584f52379ab661a3d095e31a4269d068f56feb30285e665b190a925e2c9f1308f5fd93ef5986bf\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-osx-arm64.tar.gz\",\n              \"hash\": \"52f29d18f7789bc53d15b0e1e96b83b8811eaecb3eb6035dfb94e2d2f2bb1a011d08b46912805a2860c574913ad338f5f0808ad66310dd87cf78163c3b025925\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-osx-x64.pkg\",\n              \"hash\": \"4f0e90596b5b5d9878f58b28bdadf6fae0e07ffc7903609bf00087a1cda91b6c8d32efd65949f44d77905b456a9956ac1a2d78f71471b5d7569a4b389c34407e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-osx-x64.tar.gz\",\n              \"hash\": \"7acefa171aacba663589d5c9ead080a808ee60696b789ce89aff88e0626f2085d32a198154a7ec94a8cd5cd272f70bd57e199819b3ec89997ea52e3c0f6b96f0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-win-arm64.exe\",\n              \"hash\": \"b7a19c6c8c62c9db8605258b4fb21b1a9ea64646ab26f7b055bbe90154d462568d5ce202356f8f81b0cac1a1afe90d89252689f4ee6b65a4d4c27fa17a0e8f31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-win-arm64.zip\",\n              \"hash\": \"e85fae99d88be4e2db63dedea809a97c29a9ff9cde04fb93247cad1feb19119bc7d2d9f4976075af534f8b9dc22af8df60b78a8bdba801a8eea67e521479b443\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-win-x64.exe\",\n              \"hash\": \"a4150ec3c57d2e1c77a889ef9eb6cf913e43c7aa6039a1b156fabfb70862187b60d43161dcde8b4edd606122f3b68e8583ee6438f1303607b7f9f29e9f926e56\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-win-x64.zip\",\n              \"hash\": \"9b691e4a4fc297ced20267975ee84641d4346052f6b5c192d27c05fb273b0a31966a2447277d9a7a948b944306bcaf7b8495ed1c15718d8bf2252e3adb43318e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-win-x86.exe\",\n              \"hash\": \"282409ca8eb5e5f2e543a6450332436266e079703b8f0640f10f38241d42efb7def82f4509fe7d56a2545dd82cf7d657cb75b54f807eece55930c3dfce0ef726\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.103/dotnet-sdk-9.0.103-win-x86.zip\",\n              \"hash\": \"9c2b5e1e764792abfc4eadb51c3177e6371af3985c15022042a34ef300724019ed38896fd021be27980e535fd128fe0a78ab0cb893ea54d6294301769a92f7a6\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.2\",\n        \"version-display\": \"9.0.2\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.25017.2\"\n        ],\n        \"vs-version\": \"17.12.5\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-linux-arm.tar.gz\",\n            \"hash\": \"5576751ea9414449add100cb60c917f72305209dc831ecd3698b8ef6a69e2a802850148b33caf5a05d049be66b19c7404531ea6ecd643cc1fd6ae61179e1249b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"aa95ed396e5012cb7815db25f07b196261b91e4ca2e7ba07352896e1ab351a96232fdb692fbde1d1ddd1c916987353d2d3382e9e16bd7a97ce4b411c6426e0f6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"f96a66442f7db558e40491f1deba42a58b697286a8c592f20b9b17006040544c3cde3851dbe9d5dd0be4ff68666575a10a8e1225dc97069081a66726a9f0fc8b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5e74871d9133c52389559eb34ee82ed7b8ff2ee990857ef80ebf2b27c405e0dee1ae951c9a87355168901d98acfbe37bd6d516d6a0b4f5f495c58326243c0630\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"ff070ebfabb1fa776df69ce6fb1e6990069ff6e4b795dd0ea0ee028dcceaa278500f695c9ba6b6c839310ee0d9aaca398e079ebd9081ec36c1e2d5a63c5bc109\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-linux-x64.tar.gz\",\n            \"hash\": \"48a39dd4bee3e719273a4e4404b556e2e59e7f659def49f89745ae575fc976f7ebf121d9263c3d009db6081976f8261ca82de34aef69b0776a28fd0485bb6d3b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-osx-arm64.tar.gz\",\n            \"hash\": \"66fcd7a0589fb166d85caebd6f08c16049bdd0cacfd01ab3f199c442b98d54f8610c225a2a9a6f52bc4bce12bba8a3001e23689240996c697e2bc3a008957226\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-osx-x64.tar.gz\",\n            \"hash\": \"4e3b76bc423e9312b55449ff156bf65044f566445c4106fc47314517651d4d510c0418b1f8f17853b1cbc14769100b846f414f80d6a9cee5f95f5a6fb8547d9a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-win-arm64.exe\",\n            \"hash\": \"2fda149e90311f5f5bda6be635bbbe23fdcaf95359865a9880ae56e14eb5fbf36e1433ea772ae6427031bd8192bcaf50dbbfaa900044769ef462aeaa2636ad2e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-win-arm64.zip\",\n            \"hash\": \"a9612f88ae232e9dc517f02cb9a4faa605d2c0fda94a33897ba0ddb75979ee2eb09df5c49ad7ea93e90ba0dd5ff933af959a55c4ec9526eee06dbbdcd10a245b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-win-x64.exe\",\n            \"hash\": \"8a6e225a03319f5995c943b32482f73ae08bdcb20a0f8ad24a049162c5e66d3071f271cad6829202794cc7066391777caa8ad5bd3514ced213ba8093d1e5784c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-win-x64.zip\",\n            \"hash\": \"0a5b0d4a0ac65dc0b11b104154143ef310e47b3aa92dbff32e7002d1ea6005b6444a6699eb03a5c728326c6ad97234a1fc9607972a133130727173247111472e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-win-x86.exe\",\n            \"hash\": \"a633235f06943865b4176a919b1601d95618a4e43b3af6d374949700df68e02d0e71629c772a9b78c25bff609993d106621ed34a27856adce650bd47e9961e45\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-9.0.2-win-x86.zip\",\n            \"hash\": \"2b05a90bb7f59286ca2e6eb631ea49d999a66a8e2e7d3f13e12daeae412a71de073afeff9d1121b89133ed0e8b125f959b3678e5c4fdfa7639ad6eb0ff896762\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-composite-9.0.2-linux-arm.tar.gz\",\n            \"hash\": \"9008fec9c3cc98b9608eb6635f73cb86d37cb721d6f4ba3dbb8eaee4d7adacf832cbef6c223320895656743a82b5a81209c78936973ba469e551dbf05bc40ce9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-composite-9.0.2-linux-arm64.tar.gz\",\n            \"hash\": \"8387f486d692f1299cc08f33c57e647000f986e6a69ccb4b426b6a207be28a0b5b6e636bd0d91fa2d9452d0c0bb00e48179e965612b7f66641884430675130e9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-composite-9.0.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"9240868535b83a81f2dff1226be734d5f4d31095988c286455679e1b56a2ba7a56cb7d30d4c6f74d645024ed2526a2d5a2a06dae4194b2ffc2d86a8fbf2a42ef\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-composite-9.0.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cde805a00d9db6de6e57fb573f392df8bcd2f21ef029a6ac22f059b85af635cd4553d9d749d6391b637a9958f3cea3f6430b3c575d217c428758330f864e2841\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-composite-9.0.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"7257c9093bb4fe4ce09e2169ccaa8500dd23008464aab7ae50f57e7ec187d8a0a3fad8c8d67fa0561801bce59300839f0d2044b0b4232b0e320d1305662fa465\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/aspnetcore-runtime-composite-9.0.2-linux-x64.tar.gz\",\n            \"hash\": \"b819c4421c1110ecadfa4f1e790efb14d9788e7456be016d26023b993dda40c47f22e356483c5c6f00d0941e0daea8cf2c5fe6aa405c7422ec911a46b81b552c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.2/dotnet-hosting-9.0.2-win.exe\",\n            \"hash\": \"b275c7f67f46d8d65da5fd07dadf52ab544d5f40aad02c12dc24c1460b8a92b6b5ba418101c4a5e29c29e547eb3c1c794e40fb8531a5e4d35233fdc8e12312eb\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.2\",\n        \"version-display\": \"9.0.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.2/windowsdesktop-runtime-9.0.2-win-arm64.exe\",\n            \"hash\": \"5c086ef4d49e510319bed586049d443c4861dc2b826f531e992855c0abe9818fd60d6ed5cb87a9ea3b21bfff76190337470428cf08dad49c4bb6a77afc4792fa\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.2/windowsdesktop-runtime-9.0.2-win-arm64.zip\",\n            \"hash\": \"5ad933a83adbfa72ffe8d388b6e9902ea91c977f11dce9ae7a6b033fc7cb5371fefa1ad8f9d494e291ea68e97bcda1927bb560854e479b716b08cb63bd1fb61f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.2/windowsdesktop-runtime-9.0.2-win-x64.exe\",\n            \"hash\": \"60958279f9ff96cc953ed6cf404d8deb68e554374d08dc31e8b62a226ea67ae13d6c9eaf1fb44f783fa6241862e83d1cb8c21bbbadfc9386200fbb0345714be9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.2/windowsdesktop-runtime-9.0.2-win-x64.zip\",\n            \"hash\": \"7929c2a718eef9db6964b08657dda04e6ac2bd86a60d756b0c4497cd68209e2f7a41ca7f7ea163748870c6e86e4a2f4234675afa893f2d20db5a9d8724a9e683\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.2/windowsdesktop-runtime-9.0.2-win-x86.exe\",\n            \"hash\": \"798b3e13f0276ccdaa4c593c28e83d8c90652d454ffd0e8fe878bfb44b6485a5b21cc5a93eb0c72586d170b3632283cebeaab25c70c793eff30a73e6369c819f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.2/windowsdesktop-runtime-9.0.2-win-x86.zip\",\n            \"hash\": \"d868b73dbc79a36eff3500419fa0a46154fee80692c1dbfa8873ca5cd97aca49e18352d18e93902754f997ebdaa0999d52d4b3b50e587b6ba9378c0a4f90cd5f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2025-01-14\",\n      \"release-version\": \"9.0.1\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2025-21171\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-21171\"\n        },\n        {\n          \"cve-id\": \"CVE-2025-21172\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-21172\"\n        },\n        {\n          \"cve-id\": \"CVE-2025-21176\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-21176\"\n        },\n        {\n          \"cve-id\": \"CVE-2025-21173\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-21173\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/9.0.1/9.0.1.md\",\n      \"runtime\": {\n        \"version\": \"9.0.1\",\n        \"version-display\": \"9.0.1\",\n        \"vs-version\": \"17.12.4\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-linux-arm.tar.gz\",\n            \"hash\": \"b1cccb86da9912fcb816413718e264d899e9efc42a19fd8a6ccb8265b65ce4fe8c878d0b8d5c0633b1e0e4b2ff3ee53313a66e3f92c3b153fbdfe3044f1bcc96\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"38399b6139f72ef1d836e418455494a80428bf41f3aaf2351749ff144311766487533d5a3c9bd359c189b9373f24377ae886827f45272c4019e22b594773b87b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"ac8a7be3ab0895539813c1f67c33aa93ee72e2ac7f2d88ee3ca21f14479e11a4064cde9a7e15a2944222b8d7c2858ddd39de9f6c2d278b4129f5e3ba8b9c38e3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cf6865754e3c28b63bf4e73db95a2079028b9132ffc6bee4aa7af03ee15c7560a13d07260965833b43985d8b5e2f50a776ff17bf5343605b1c1bc239ddaf3c5c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"39bc73be712afcab41425c2e42aa5098133cf9a2080f91d4c65f274c2c6bc6f812793a17f8ed6b3a5bcabde4cc5ee5be83dc9bef9d3f3b10d79d0d3f00b4b55f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-linux-x64.tar.gz\",\n            \"hash\": \"d4a31944a5ab063037dca5141dbc8466d0c894b8d2560256782bdbe5a8e86585e8c4c789c40fbe51d56b3853e15adba0985bdc6ae91c85a763565316e1c3cfcb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-osx-arm64.pkg\",\n            \"hash\": \"8fb808f613f37cddc61c43d11c0265aa71394266db0529d1c6f806f2c79c40ebb43f6dde0f4246a0feb06da276564a2c37c9bec265950dbe61c4d16a063a4639\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-osx-arm64.tar.gz\",\n            \"hash\": \"f65f650ee3c289ca092fa151a3d9cf34fea2f5426f09882c194fe71655ecaf2a681b2d508b9c7849d6c908ca679625dc48171d00580cdff7f981f0518a843c65\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-osx-x64.pkg\",\n            \"hash\": \"f9d040bf19abfc79fce730f0fb50114b8002dbafd4dfa8e5315763cc342d85c02e34637e135f26168fe809bf3fffd54bfcf2d67ec79bf43365cc4da2dc5dc4e7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-osx-x64.tar.gz\",\n            \"hash\": \"b997c2c0f0350ef29ba6e865ac09ebecb1d3632e2a7561b5abe23bd0fb6abc8c0ca7388d6cf17c59ca87dd8168604ded6839a7b16cea1afbe36ca57234515e1b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-win-arm64.exe\",\n            \"hash\": \"3d866122fe7b560fce9d8313a37d2eb247e3e375079f456099854fdfcb5ab5c453b762ed347a48f23c56affb2d9cb9a4b92975290a6ef517fd69a6ff849a8cea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-win-arm64.zip\",\n            \"hash\": \"2127e5064f6d446c4bf30610f48ca748eb67d6a8dcce55c22095f7e59720985339b07f64b887dd92ba5ed20bff10ce0f9fda69018da49e4cc2e30516b0769639\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-win-x64.exe\",\n            \"hash\": \"1031c5c76dbc8a5605354915a2f5e4c7b0d1a6b666ff6366589498f5b20f8a41366449dfbcb0e9181e8e79f42230a87eeb235bfd1d41b1128bf9b76bcdb4f200\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-win-x64.zip\",\n            \"hash\": \"30b880c3cd6c39355e92b5422e8c044a26fba1da15b4f1f8a89dc4622962c8a3537b075064c33c8493d8bbc909ae8c135a5533110080e95ef31e3407eade291f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-win-x86.exe\",\n            \"hash\": \"191a9a61e8d6692b6d35a176cbcb7a9659128c646289977297744c64c98f4e18fa02751d1912e24a4450dae8ec459e7856a73271440a8abb7e9d479a23f3cdc1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.1/dotnet-runtime-9.0.1-win-x86.zip\",\n            \"hash\": \"b0914634b4b29230a000e0b00005992eb6e37094862e2d0a9e0975b366dad47455d6d26aeefe953563091f25538bf00ef9d74b8c01eca7f0ba6dd2888163b797\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.102\",\n        \"version-display\": \"9.0.102\",\n        \"runtime-version\": \"9.0.1\",\n        \"vs-version\": \"17.12.4\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.12)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"9.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-arm.tar.gz\",\n            \"hash\": \"2c4c69d46c3e57ed990518a9d82963665d835c66a57da54b9d21e22c2a20e8018020dcb190eef54dfe68c001fcce385361eb2bd29896311a1683599ff9e6a777\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-arm64.tar.gz\",\n            \"hash\": \"cb78931dcbb948a504891f112f11215f2792d169f0a0b53eaa81c03fc4ba78d31a91c60a41809ae6e2ddcae8640085a159e492035cedfda68d265bbeb4bf8b2e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-musl-arm.tar.gz\",\n            \"hash\": \"e363e3d4edca93830d18bcebd41e01bf2856b095ae70e1a24b0533abb0a507e4c1f1542ff3046c285689318dac7e2b5c71a166bcb5933a8ab68d800bf3eedf03\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5da98e46c280e21c3734a0c9081e7ddb78ad62775a51a129b42a6f021330d263a875da2f44a7aafe8156e7c9ae0f9bb21b502057692b360f2afe0882f0e61132\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-musl-x64.tar.gz\",\n            \"hash\": \"60e091854d17da9a6011569f0a4819eac72ce6fe06d01757feeb83ad56c17645fa438257631ecbbf6ee94ac3a973eff9ad4d3e12deadda3eb41c1b69ca8d5308\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-x64.tar.gz\",\n            \"hash\": \"f093507ef635c3f8e572bf7b6ea7e144b85ccf6b7c6f914d3f182f782200a6088728663df5c9abe0638c9bd273fde3769ec824a6516f5fce734c4a4664ce3099\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-osx-arm64.pkg\",\n            \"hash\": \"bf5759734f7aa010912e4806d1d7bcb86d635f7d1573e6bdc00eb5c443f64a43313ba0699ce249989b855b77d52b0209ad331cbec7a1493492d684f026d1d267\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-osx-arm64.tar.gz\",\n            \"hash\": \"13632c9e58d8fa46f191256d180ed19089e08b242881825dd3682f082d65bcc6d9756629fefdab609c11265b6043dc11635263fe8761339b72d36608acb43574\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-osx-x64.pkg\",\n            \"hash\": \"25cf5bf146803d64a51b1fb6dc501edfa4cb8226531a70e5d651f2dbf13968a3a70c54434c7d65e2c5b12f58c358b35a97dff43931e54bf0214c6e5f59abc606\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-osx-x64.tar.gz\",\n            \"hash\": \"023e910b64819991831aa0e530443fa985fa673920ff291541ad7b7a4a532e20f5ac89f9a91b2e956cf69b3821ef1369828cf46c544e183a85425ae4b725e187\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-arm64.exe\",\n            \"hash\": \"b9b78e41a3ecb4ea017471e8213ecfd1b0e0ec6504b74fa0fc4c8c601468fe9e966b76ce173b0d124478a5430d940408ee8f379725988bb3e0998054357d7239\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-arm64.zip\",\n            \"hash\": \"4aa7343ab96b0403d9d543d1e2f11f8f10dbc5ebeb60f5be1dee455fd878c77f24e1710de3fc85ad0850d3913680f2d2605121db934a4ad6f969e73d9d6ee334\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-x64.exe\",\n            \"hash\": \"91505782b13937392bd73d1531c01807275ef476f9e37f8ef22c2cee4b19be8282207149b4eb958668dee0c05cef02b0a6bc375b71e8e94864c3d89dea7ba534\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-x64.zip\",\n            \"hash\": \"c3713f4db98fec9bcbb5be1378e7505a49cdb362e20e060045dc8e320ebc62e0f422e125efb9e966e957ee64e33219dea9b42c18ac5b8e51dd3648e5aa1319c5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-x86.exe\",\n            \"hash\": \"fb043c6deb487a743f86caacdd13d6dfd8a5239c40b54df99e6bdef8b9567289bfce715a8bbad452500c445b487b5d2a0aaaaf1e1065b08a0a23a6e2c98419ed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-x86.zip\",\n            \"hash\": \"898229b1c92ac1925d7155036755d451afcd52f39f4f204554918c7b0d16a78cf0ec1df06208d40c8d14ce43d8cf66107f9d93a5a3c4e62801d7fcc340a73fe5\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.102\",\n          \"version-display\": \"9.0.102\",\n          \"runtime-version\": \"9.0.1\",\n          \"vs-version\": \"17.12.4\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.12)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-arm.tar.gz\",\n              \"hash\": \"2c4c69d46c3e57ed990518a9d82963665d835c66a57da54b9d21e22c2a20e8018020dcb190eef54dfe68c001fcce385361eb2bd29896311a1683599ff9e6a777\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-arm64.tar.gz\",\n              \"hash\": \"cb78931dcbb948a504891f112f11215f2792d169f0a0b53eaa81c03fc4ba78d31a91c60a41809ae6e2ddcae8640085a159e492035cedfda68d265bbeb4bf8b2e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-musl-arm.tar.gz\",\n              \"hash\": \"e363e3d4edca93830d18bcebd41e01bf2856b095ae70e1a24b0533abb0a507e4c1f1542ff3046c285689318dac7e2b5c71a166bcb5933a8ab68d800bf3eedf03\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-musl-arm64.tar.gz\",\n              \"hash\": \"5da98e46c280e21c3734a0c9081e7ddb78ad62775a51a129b42a6f021330d263a875da2f44a7aafe8156e7c9ae0f9bb21b502057692b360f2afe0882f0e61132\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-musl-x64.tar.gz\",\n              \"hash\": \"60e091854d17da9a6011569f0a4819eac72ce6fe06d01757feeb83ad56c17645fa438257631ecbbf6ee94ac3a973eff9ad4d3e12deadda3eb41c1b69ca8d5308\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-linux-x64.tar.gz\",\n              \"hash\": \"f093507ef635c3f8e572bf7b6ea7e144b85ccf6b7c6f914d3f182f782200a6088728663df5c9abe0638c9bd273fde3769ec824a6516f5fce734c4a4664ce3099\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-osx-arm64.pkg\",\n              \"hash\": \"bf5759734f7aa010912e4806d1d7bcb86d635f7d1573e6bdc00eb5c443f64a43313ba0699ce249989b855b77d52b0209ad331cbec7a1493492d684f026d1d267\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-osx-arm64.tar.gz\",\n              \"hash\": \"13632c9e58d8fa46f191256d180ed19089e08b242881825dd3682f082d65bcc6d9756629fefdab609c11265b6043dc11635263fe8761339b72d36608acb43574\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-osx-x64.pkg\",\n              \"hash\": \"25cf5bf146803d64a51b1fb6dc501edfa4cb8226531a70e5d651f2dbf13968a3a70c54434c7d65e2c5b12f58c358b35a97dff43931e54bf0214c6e5f59abc606\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-osx-x64.tar.gz\",\n              \"hash\": \"023e910b64819991831aa0e530443fa985fa673920ff291541ad7b7a4a532e20f5ac89f9a91b2e956cf69b3821ef1369828cf46c544e183a85425ae4b725e187\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-arm64.exe\",\n              \"hash\": \"b9b78e41a3ecb4ea017471e8213ecfd1b0e0ec6504b74fa0fc4c8c601468fe9e966b76ce173b0d124478a5430d940408ee8f379725988bb3e0998054357d7239\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-arm64.zip\",\n              \"hash\": \"4aa7343ab96b0403d9d543d1e2f11f8f10dbc5ebeb60f5be1dee455fd878c77f24e1710de3fc85ad0850d3913680f2d2605121db934a4ad6f969e73d9d6ee334\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-x64.exe\",\n              \"hash\": \"91505782b13937392bd73d1531c01807275ef476f9e37f8ef22c2cee4b19be8282207149b4eb958668dee0c05cef02b0a6bc375b71e8e94864c3d89dea7ba534\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-x64.zip\",\n              \"hash\": \"c3713f4db98fec9bcbb5be1378e7505a49cdb362e20e060045dc8e320ebc62e0f422e125efb9e966e957ee64e33219dea9b42c18ac5b8e51dd3648e5aa1319c5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-x86.exe\",\n              \"hash\": \"fb043c6deb487a743f86caacdd13d6dfd8a5239c40b54df99e6bdef8b9567289bfce715a8bbad452500c445b487b5d2a0aaaaf1e1065b08a0a23a6e2c98419ed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.102/dotnet-sdk-9.0.102-win-x86.zip\",\n              \"hash\": \"898229b1c92ac1925d7155036755d451afcd52f39f4f204554918c7b0d16a78cf0ec1df06208d40c8d14ce43d8cf66107f9d93a5a3c4e62801d7fcc340a73fe5\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.1\",\n        \"version-display\": \"9.0.1\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24346.1\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-linux-arm.tar.gz\",\n            \"hash\": \"fa75d8d5ae99ade0d1ab90018839fe3f5ddc4e7b7461715caf2b0bf7a88c8e86e1d4f10ab69703d2318b289c0700846e2155746d7bb1ace3d2d12e175ab18be1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"e37dc1445e53c00bd950a531fab83354defbbe06c6f73af4bbef20bfcedc0483a98f478369a7bc7d7e52e35b2b33ad73781e255b46900d831e2770cd445d69c5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"3ea55cc5098dc08909a385219fad1e38635f6eef6cd66ea526b92dd57f765dc348380422e5e0b9c8ade286e18e713caa4b7ff2d06a23c3fed31b8b5c91d2dc6b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e9a7e257f6b09e48c522b725be8ab498e57189d6687f840a37ab9fe4192e985bddd99a663418c5d5d96ee7c7c2b9f70e08f786aa4a1b207548586bd3fcc3710e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"d3f609184959849f7524fdfb55c5cf9a8391d0a773483aa6659d9baa152656835f26c2fe9ba322e718a8eb7781fb996eb4ebc6953beaf6fdfb5628ef31bfc853\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-linux-x64.tar.gz\",\n            \"hash\": \"e5fc3093aed5756deae3e61f98b9f4bb0c847319db30cbd1668c2511e06529c2f6a5e1917ec776fe2b36a1f7bb7e009fc925fee57f87696a8d502a6c8f5dc613\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-osx-arm64.tar.gz\",\n            \"hash\": \"b8ab3899b10b871159b01889694484cc3d9b3ae78a159638d68649a22c3f3328b92c435c5bcdf49a86bc488bbbd0fca7143f6f664f6594c552423c37ead99998\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-osx-x64.tar.gz\",\n            \"hash\": \"4aeb0943877dbf935f6554c637d2aa18f8ef22e9692e6cd3d716dde2dd5411e4881767cbe9c554bd8ec43c209a86a26194c2618c60d115ba0638e92e80423cc0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-win-arm64.exe\",\n            \"hash\": \"e6e9a564919a63ab268269610b65dd47a03770aa1f4f9fcd4b4f3c1363400e4037eaf4f614e337741abb44c8d97c092efcf63bd200dc05a5686accf97cc1e447\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-win-arm64.zip\",\n            \"hash\": \"52c69b68f22a3fa1251716e96a64102fcc97c887ecb3c9a160c59c70e625b2ec8a7ef4f71626f522274a1e5f4c1286bb58b8fa31d4605ca4b3a239439e46472a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-win-x64.exe\",\n            \"hash\": \"82b4237d0589a70ffa5ca37c2ecce6c9548c839acc2215f218e27572a161da7caacd3857553d5a4c331e3f6a3aa3e468c6e9de802dbd63f2dd5c54befb9b047b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-win-x64.zip\",\n            \"hash\": \"613492bec0899bc451b11c572024feca2e068a471f2275b55b276c0eae85a695e2b7582b07101b9bc75e32cba6c198dc50ca65df0564e1c4c0241fe45db60c7d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-win-x86.exe\",\n            \"hash\": \"1a93e0d6df3eed98fc46ff5877fe7796f2aa4e01b3dcfb1b566cc68dcd3bcfe400e556f7f82fc99c1c53af7d496a319ee54dc67f01ed7ea43ea8a6a555813134\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-9.0.1-win-x86.zip\",\n            \"hash\": \"915335f60d3ef189c599372c2043b9a115cf538a22f3f6297070cab2913a89517ca69ecbc7aa2a600c8f0ff5ba86d77e992d3d2cb5d5d5eb21b8669e7694428b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-composite-9.0.1-linux-arm.tar.gz\",\n            \"hash\": \"ac2c004657e3f1c65d1b338272aecd16445b5130eab9dd1229440b0bbb29b9d2a94ed7cb4f2d5d7325dfce8b19ea64da3008403d4b18cc251781d6543bd94052\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-composite-9.0.1-linux-arm64.tar.gz\",\n            \"hash\": \"28cafe4ca6061397a1eafb21ee0ce5fee850c4368633ca16773208620ac47a6b94f35a0890740112118743b92e6652e46e27eff0b8d6a8a053ae4fd9af62f226\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-composite-9.0.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"46deba46b4458a3546da4db8118798d8baf5a230f1691c9a9745771a80f48a50c93a0ea56d0348fdbbdd9952eb397f8e1153274e0aeccb8e1d91f68f700f30cf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-composite-9.0.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5de05d1c2a12a4276d788295a78484360f2a65a99dab935469696bc8588d8a23a10ccdbc777df9dc9445dda7541e33f4f583ef7b00d06cfbcdfd43339cffa809\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-composite-9.0.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"fff2915b8bfe74fd4d882ed2d0a2e9d82c174e6ac186cfce7b28f87ef3043145e19d9be7f60b90e9af7b6532ee75b3e527a360f2fac4574e4b248b3ce3fe4367\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/aspnetcore-runtime-composite-9.0.1-linux-x64.tar.gz\",\n            \"hash\": \"ce1034cc058d68869edacd5ed1feb8ff4a3e5a2931ee057789413da7fe17ce484ea563ab9f38a7d2c2d53d7a91d47e32680da7ed0953f81ff42b56489b8e47d0\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.1/dotnet-hosting-9.0.1-win.exe\",\n            \"hash\": \"aa468f04071201827889d97bdf4c899bde5dd5ef9590b368761a40d5bf1db75ed7e647cc8580bd0f5676035e35d52c2e9b687f2dffc2995a372326f786145d6a\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.1\",\n        \"version-display\": \"9.0.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.1/windowsdesktop-runtime-9.0.1-win-arm64.exe\",\n            \"hash\": \"df2c1a51ef9b1118b7a5f3cc20df25b7616b3340b62abcb2cebc383ec188ac2e955bf4804f2066a0848614b249f2e3149751a932912d4a6a12383add69817806\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.1/windowsdesktop-runtime-9.0.1-win-arm64.zip\",\n            \"hash\": \"c62e4586129b9597cc8c323e6ed88e43ed6cf84836f33b2c86a30be25b8eb2d8ebeabcc50aaf16233a319d052d5e277c5bee59a541a811a94334f83d040b02d4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.1/windowsdesktop-runtime-9.0.1-win-x64.exe\",\n            \"hash\": \"4ad450ba0f0efed458a07f8d1ed8c5e75b78c349d6cd2b3374b190f878b3af80119e6797861a5ce2f9ad61216fb85ed046bfd905bd3006e940bd86bc0164ae46\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.1/windowsdesktop-runtime-9.0.1-win-x64.zip\",\n            \"hash\": \"1256825e6d82cc05c19ae006f64171f63ae1b9114fca9d40666e665460c9a4e3d48a8afad1fca15c0b94b16a783fdf3c455298fe599bcd5a2c3509f9499389be\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.1/windowsdesktop-runtime-9.0.1-win-x86.exe\",\n            \"hash\": \"b67c00b76ed6a601ee50cdc84126cec50d4f8f3d39f0280360555b600a38220ad683290b5fd5f3fe5b9bd6984fef8ce2f39f7ba82d417fb85b3801e41586911f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.1/windowsdesktop-runtime-9.0.1-win-x86.zip\",\n            \"hash\": \"15fe87903087a705759ba6477cc9e4ad841c2ff44bab3583e56fa06d7daa3c25de1bb91da5bb2f91da996443704fcb459410ace7563ecb06dc107cf292820eb3\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-12-03\",\n      \"release-version\": \"9.0.0\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-43498\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43498\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-43499\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43499\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/9.0.0/9.0.0.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0\",\n        \"version-display\": \"9.0.0\",\n        \"vs-version\": \"17.12\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-linux-arm.tar.gz\",\n            \"hash\": \"fab552df6d884090aba1f658c8812b5369e9bea17e6a1f905145cde512772b57db5d5cf586c6c2b7f2e56a8cb83c206f0cf7594bcf42d32844b8103538bd883f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"4f9c2dd544af0b8540c16352b9f01f75f828b8e4e084057a300a4dec652fb3d6532906cdd4246399cc13f16b571b17575812ec2f9c297e27bbed678baf4b2fde\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"97dc1ddcac177d73b517d651326ec484eac52501c506c8c837c3f9ceaf476ddf929ccece9b6dc2c0a4e7d378576fd73930a8835814690631a560642527335b33\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"33523364d9310b75d9819a4866b120c03b9ef7946bd3646b15930e37ff1e211de294c8a94b4ad6c1c0f7d291cb70601a4188e396d4252f5767a36a6dbe68502a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"9c33d73a898fa9b4e84ae1844468b69086979f7c2c8ea6b32db0fea62a4014513cea0619025f9edb23e67ab4ae4e2f2725d1d9bb892858bba7dfe8ed17aee799\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-linux-x64.tar.gz\",\n            \"hash\": \"5176bd68637646cd36fce7a88f83effe1065fb075e6d4a46b8be3c33d5a8394740577f0ed4f8b4fb13fa69fe83b229eb55ab7f45caac90849bf0392a670ed5af\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-osx-arm64.pkg\",\n            \"hash\": \"e0de96a405b00f68922ecc02db7bf52b9ddaf6f3491b7d7cf821e2ee6074e870cb282aecf9fb3d13519cfc07bb0eeff94551791ceaa4a031596bc5bb13cde41d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-osx-arm64.tar.gz\",\n            \"hash\": \"66c487ae2f5fc24d5baafdfb4286e23737664bd3efc181abc31cf5ded60dc22e4ba1791744a506da343e6034b1fcda2dee761d9e71229945a177b7508ba6ddb6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-osx-x64.pkg\",\n            \"hash\": \"7fadb1f8a039efe22f66498919c58d4d8f24e6b75bb1035d15edc997229d3c52e4d66ec972ad61b846bbeea99e7228ee21185cac9b36cc0819426f2e429ba9c6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-osx-x64.tar.gz\",\n            \"hash\": \"1ebd6a97ab744fe752068639d676b145960d820501c792751404507e8d82cd9268d7e239c437f9de73b08141c3b693bb24eeb3cf3baf30e3bf33b460bb95d4b0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-win-arm64.exe\",\n            \"hash\": \"7ac11f3b388170ddf8d2248aa719bffd1202f3946a1bcf0701bdd8988d030d0ea2cd321eb2e6150e30bc0444a8af0b5a9ad5db3ac58b15f4338ce34193ba470a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-win-arm64.zip\",\n            \"hash\": \"4f33049397341e8302fd01ece043fdd1935a7dbd75007ec5739ce5eb5c205cac4bc1399550907f71f2e4b218e40297a89bf5d605882f5544c4deec37f9b0d026\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-win-x64.exe\",\n            \"hash\": \"97334bbe82e2d6db090279b178d0bdfb1d675e0fcd9ca0c951bbcac05598b0424f66eb74599eb8d1a6790699a931974924f79815941944f440a261dce2cd9ca1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-win-x64.zip\",\n            \"hash\": \"23ae6ce34fe1271a5a48675a9cb7ed728af4be4014a7ee4a6a60a84fc23e55b50a5cafd7ec20197bd73ee47901e4239e0c4cd8fd0f5deeb34cc3da1de3960e46\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-win-x86.exe\",\n            \"hash\": \"7d744cedfc81f911b51ac05741a77953a18d1415bc7c1667fd8fa8e89b4a0df597046f25a82a960bf65e7e7fe453edf87aacc25abd6bb05d0b289adedd6b2ab1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0/dotnet-runtime-9.0.0-win-x86.zip\",\n            \"hash\": \"dc345e64174a9bec4bf9c27d6a80c946aec3a418a7ac42e2ed9c20737c014cb0b1dbce3bd33eb6cce211ebf60ddcb0e13e1d60051017e4c0c11bd6ab4fda1c80\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.101\",\n        \"version-display\": \"9.0.101\",\n        \"runtime-version\": \"9.0.0\",\n        \"vs-version\": \"17.12.3\",\n        \"vs-support\": \"Visual Studio 2022 (v17.12)\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"9.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-arm.tar.gz\",\n            \"hash\": \"cdf8989d02e4a6aa21e68081e956318c94c601583a757d5eb433919ebe7fa518f207aa0f58a09ee28cf95f445c486386c229de69891433a4a29145ef596aa1a4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-arm64.tar.gz\",\n            \"hash\": \"c5f9c17dded5101cb4b65ad1033ae4d82fc5b04303bdce4eb61a6dc47efa84202bd726d05caf117e536a01bd78ad773b8d23cbf43bc655e5eb9912b12078e0b1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-musl-arm.tar.gz\",\n            \"hash\": \"7e6560e69b83b9e64961e91155f8585421c3a2ce76897871d386492c623e9280f66f2284dc49362bc38739e48172523ce54b2269524437394ea3e908728a0118\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6a6d6a6d6dfbdacb48374c0ac9bdb1c93781f3970c8778b0bee1f159a22b00176868264e605331fef833cb9fed829b4ffd414276d0d1140a8b0e257195c2f374\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-musl-x64.tar.gz\",\n            \"hash\": \"3f4e14fb7b52dfb57b1e31cb5973e6e0a338f7f030f12b3082d3b55f12f9587ddf4926a7c5fcf86b7671397e44f8e5c20fb949d70e9a7dd0dc27be73a548dffc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-x64.tar.gz\",\n            \"hash\": \"91b37efd64242e5f1f3c2025d183eb34e17f3a9271c5602f29ddf794845eee103723ef955ed869788ebf5a731e8ddc69328799c92c64cb118e1328d259a6ad01\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-osx-arm64.pkg\",\n            \"hash\": \"52f0efce397b2e3ab182a98e7bc69967143399c8ec512687f7893cf5ed85784a9b1ce181980827c6fe0a8866755eece4ef4aafc01d10048f01117164b186782b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-osx-arm64.tar.gz\",\n            \"hash\": \"c6608ed280e5a76c46ce8f9b06b8c7014c7bdb54a9795c4585deb8e057db4d524037e4e82f9caf32444eede427c9cb5fdbb722508f389ef89a864f0bbae4766a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-osx-x64.pkg\",\n            \"hash\": \"3d5567891ceed07837d7f00bd81dd5dc73accd2e007b6adc12218bd5ce9f7d5563e64ede3e49bf96a532d282ca764a72b9ca4d8cf9aa8ab1764e9b4fa55a59e1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-osx-x64.tar.gz\",\n            \"hash\": \"0c13e3081348dd2bcf2e0c6b84bc375f806550f6c389b1fca61767ad6b9004300af7272de199358f32afef295513ba5ec43f5f8614d12437bb884be8eca4de01\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-arm64.exe\",\n            \"hash\": \"d09cb91e49313e7ae891d28c8fc7841b2a92cfcc3f610b249b9ef81230615335daa30ad210d9db6942ac1d02d446c8d1cf9d7cab0daff543221bb4e6697cd3db\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-arm64.zip\",\n            \"hash\": \"a14fec6786c28523795f98c074ca8da972860134e3549f5be20c1bf41a0b8b946f3ea1251196c356d4d869591a333203401d08323ba9e498fe8e6a5bde1e3011\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-x64.exe\",\n            \"hash\": \"6c1899452dc855698ccc2a9928301352e5700e7829f0d42a1e567b51f08089affc67801ba7cd49d7e45b4a4dcb79cba54561163d64c27c3f36108737b3bf9f62\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-x64.zip\",\n            \"hash\": \"53f16be2079ed85d230a6c98fa9220046930ca0eaaf1f928b63cfae9fd9a0a5ad87c60c07833ee16dedfa582ce5d9ae68b5b4292aec56fd44203fe9e7bcfba92\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-x86.exe\",\n            \"hash\": \"14d22475bf0d13b01d36f472353239de0351454f3b570d0629f6003aab55032ff575fae237e20d2e9e3d45a9f6a884c6d1330e025ebcf22a8e19d68d7f64c149\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-x86.zip\",\n            \"hash\": \"c04a7c2601d2d21678f2f9833973bf9b687156520044f13d7092c77331f6e29fcad808443d6001aec1f76233990e523aeaf3516b0084603a848da934f3e78d6d\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.101\",\n          \"version-display\": \"9.0.101\",\n          \"runtime-version\": \"9.0.0\",\n          \"vs-version\": \"17.12.3\",\n          \"vs-support\": \"Visual Studio 2022 (v17.12)\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-arm.tar.gz\",\n              \"hash\": \"cdf8989d02e4a6aa21e68081e956318c94c601583a757d5eb433919ebe7fa518f207aa0f58a09ee28cf95f445c486386c229de69891433a4a29145ef596aa1a4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-arm64.tar.gz\",\n              \"hash\": \"c5f9c17dded5101cb4b65ad1033ae4d82fc5b04303bdce4eb61a6dc47efa84202bd726d05caf117e536a01bd78ad773b8d23cbf43bc655e5eb9912b12078e0b1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-musl-arm.tar.gz\",\n              \"hash\": \"7e6560e69b83b9e64961e91155f8585421c3a2ce76897871d386492c623e9280f66f2284dc49362bc38739e48172523ce54b2269524437394ea3e908728a0118\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-musl-arm64.tar.gz\",\n              \"hash\": \"6a6d6a6d6dfbdacb48374c0ac9bdb1c93781f3970c8778b0bee1f159a22b00176868264e605331fef833cb9fed829b4ffd414276d0d1140a8b0e257195c2f374\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-musl-x64.tar.gz\",\n              \"hash\": \"3f4e14fb7b52dfb57b1e31cb5973e6e0a338f7f030f12b3082d3b55f12f9587ddf4926a7c5fcf86b7671397e44f8e5c20fb949d70e9a7dd0dc27be73a548dffc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-linux-x64.tar.gz\",\n              \"hash\": \"91b37efd64242e5f1f3c2025d183eb34e17f3a9271c5602f29ddf794845eee103723ef955ed869788ebf5a731e8ddc69328799c92c64cb118e1328d259a6ad01\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-osx-arm64.pkg\",\n              \"hash\": \"52f0efce397b2e3ab182a98e7bc69967143399c8ec512687f7893cf5ed85784a9b1ce181980827c6fe0a8866755eece4ef4aafc01d10048f01117164b186782b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-osx-arm64.tar.gz\",\n              \"hash\": \"c6608ed280e5a76c46ce8f9b06b8c7014c7bdb54a9795c4585deb8e057db4d524037e4e82f9caf32444eede427c9cb5fdbb722508f389ef89a864f0bbae4766a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-osx-x64.pkg\",\n              \"hash\": \"3d5567891ceed07837d7f00bd81dd5dc73accd2e007b6adc12218bd5ce9f7d5563e64ede3e49bf96a532d282ca764a72b9ca4d8cf9aa8ab1764e9b4fa55a59e1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-osx-x64.tar.gz\",\n              \"hash\": \"0c13e3081348dd2bcf2e0c6b84bc375f806550f6c389b1fca61767ad6b9004300af7272de199358f32afef295513ba5ec43f5f8614d12437bb884be8eca4de01\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-arm64.exe\",\n              \"hash\": \"d09cb91e49313e7ae891d28c8fc7841b2a92cfcc3f610b249b9ef81230615335daa30ad210d9db6942ac1d02d446c8d1cf9d7cab0daff543221bb4e6697cd3db\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-arm64.zip\",\n              \"hash\": \"a14fec6786c28523795f98c074ca8da972860134e3549f5be20c1bf41a0b8b946f3ea1251196c356d4d869591a333203401d08323ba9e498fe8e6a5bde1e3011\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-x64.exe\",\n              \"hash\": \"6c1899452dc855698ccc2a9928301352e5700e7829f0d42a1e567b51f08089affc67801ba7cd49d7e45b4a4dcb79cba54561163d64c27c3f36108737b3bf9f62\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-x64.zip\",\n              \"hash\": \"53f16be2079ed85d230a6c98fa9220046930ca0eaaf1f928b63cfae9fd9a0a5ad87c60c07833ee16dedfa582ce5d9ae68b5b4292aec56fd44203fe9e7bcfba92\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-x86.exe\",\n              \"hash\": \"14d22475bf0d13b01d36f472353239de0351454f3b570d0629f6003aab55032ff575fae237e20d2e9e3d45a9f6a884c6d1330e025ebcf22a8e19d68d7f64c149\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.101/dotnet-sdk-9.0.101-win-x86.zip\",\n              \"hash\": \"c04a7c2601d2d21678f2f9833973bf9b687156520044f13d7092c77331f6e29fcad808443d6001aec1f76233990e523aeaf3516b0084603a848da934f3e78d6d\"\n            }\n          ]\n        },\n        {\n          \"version\": \"9.0.100\",\n          \"version-display\": \"9.0.100\",\n          \"runtime-version\": \"9.0.0\",\n          \"vs-version\": \"17.12\",\n          \"vs-support\": \"Visual Studio 2022 (v17.12)\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"9.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-linux-arm.tar.gz\",\n              \"hash\": \"de06e89e559bc763ff6773bcf852d915ec47f2d89f4e7065ba0800da99ab56357f31437391a77d7096e405f63318625b0cb074f6b410036fbe906fce7f3794e8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-linux-arm64.tar.gz\",\n              \"hash\": \"684450e6d1f7c711fffdbf32a2b86a932d17a51f4742bd27a4289e319c5b24f6743553fc7e0ad1c7163e448ed5c40cd1ecf4198b2e681acc4622d8e6193a5cf2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-linux-musl-arm.tar.gz\",\n              \"hash\": \"b0920f80e866a7603cea628a1130df003bc5d7818275c8a5882a31c6e4e29f07322fc5cfd87333893e4131bd96130fb2384d008cbad704022c89267d52686e07\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-linux-musl-arm64.tar.gz\",\n              \"hash\": \"dae06d007327f6f53f50cb3a2884b93cd2fcbb73c756a8ac5ff673617f9bdf00093932f3a83652211fc2eeb57c271078644ef5c28a42897d8397f76d0e89586d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-linux-musl-x64.tar.gz\",\n              \"hash\": \"e2032e6b4ed99adb3a92b7e041ea895ee09c6ed2455a1f68e55ed53bd613c8c20ef4aa5c434393bb5fdbc2f5635a83067f77451fe2fd3febcee264fe077acdaa\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-linux-x64.tar.gz\",\n              \"hash\": \"7f69bda047de1f952286be330a5e858171ded952d1aa24169e62212f90a27149e63b636c88ad313a6e3ec860da31f8c547ff4ab6808103a070f7fb26ba99c1c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-osx-arm64.pkg\",\n              \"hash\": \"91cadc95a2dc8674a8e1fd5a8a54a6e1f4adaf1a364365e79ff69457079f5be3d0fd254325924a7c94bac531b84752bb17bb37e206b12b5b7bd43c9526ded9c7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-osx-arm64.tar.gz\",\n              \"hash\": \"94dfa49652195a884f06d06ceb23ef6f7d7380fe0c4015b96e8f950b57a9558711fba61128710f9c8de0081dd91af48a90f7bd0f8b90038aeb5aeb24fb6724ff\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-osx-x64.pkg\",\n              \"hash\": \"b51da89b449bda3fe81e9be2356473536558ba7cfdd5c60adb765b215c437c7d753f1dd60468e519dcac859a64edaba3078b473891b95b3d4f744e55f47ff080\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-osx-x64.tar.gz\",\n              \"hash\": \"59ef320289796abbdc573036d0d1b4aa1919c83140b7a363174abd68be5cc0252741546a21d46c201586331f5f9211787bd19b5381b902f3bd7c226220344ae9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-win-arm64.exe\",\n              \"hash\": \"071c44e59d4b7b58e9d0e5c8752229e5b3d6cd5bc1fe9f1f06409fa36392ef969f93e0faa0fd437c5fb8f5e525719f1b4fcd664d38c9f386b0cee1103b23adc3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-win-arm64.zip\",\n              \"hash\": \"8e22602df5ea84a0a4234dc677d5ac3b9c077c7cfdaf8257e281fadb864ed245a38e1b93a058b3d0eedeafc6a7598d6b0ed621855f5d672ac4a72077d6c60d70\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-win-x64.exe\",\n              \"hash\": \"a12ee028f7dff8f330dbe1914534d237eb6e19cc105139ce5de69df1b4b07ee3c1a3e396574ca776a452e805052e799df14a348ace50191af514c9dc4705ecf0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-win-x64.zip\",\n              \"hash\": \"fdc42c1b339335b3b9470401f731af4bdeca64c0c2aedf6ffda831eba0b18869f9a83855994bd9806644aeaa31e7086a9ced23319e45d66cf1a055c9f9cbb47f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-win-x86.exe\",\n              \"hash\": \"854053f68672d922740e82849b7608ecdf63019fbcaee5970aac097a33b743f76df281e64b298c0bf138d0043aa01b3cd9627199f7fcb6a523210d6ad086a90d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100/dotnet-sdk-9.0.100-win-x86.zip\",\n              \"hash\": \"5d624181cfa8a440b359645293f3508f5c9e162e0e8c14a646b13f5e5474f93d03d3813fd4c9640497b109d3917bb7f52d7fcf829f50af7fee8c55834f13a5e3\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0\",\n        \"version-display\": \"9.0.0\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24303.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-linux-arm.tar.gz\",\n            \"hash\": \"f711af1fd17f6976d98609feba32dbc8b027e3b851439ab0d5a68082ba6fa87ee3888cfd8cdd368b90fc3b3710220be2de9864ab50297e3797adc4bcbaab7e99\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"d5df4b549a59c8b9b2bcee5e0ffa9fde81fc3df74b299ab49820af6bc0ccfb89eec3714ea558ffcdd2a16821a4d1ecdcc64e9981804978ee3ff1d444b8125681\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"9558c873308ce275a367643d953271ac8877e0c3535fc1717cef013ec37f42177f013dd875a12719bf9d1c1533b51592cb8f87195d1e398e528ee5d0b04f7c1e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"fb5255619fa0c1082020b750789e86936cc1a07b9e321297e3af336af3b7f75d425c20fae9f4dd9d76c0b04d444e1e6dd15fd545feec0f6a9137a64701ad4633\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"09e3709664f099b4116f8a2aac4b365247d11d0d19ecae262949de38fa9d41cc6c521a67e5b1ffecd63c610c1e9b41459bfb18f62b9d9d3b5176e3856e9ad35b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-linux-x64.tar.gz\",\n            \"hash\": \"1a81023f119dd5e5b0f9d87b0e3c42df89824b9fcb73192a4670cc2c67358cd018a7c9c965245c7883de468bda88c81d64a21c60f9bc68a6559d76f32d34ce96\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-osx-arm64.tar.gz\",\n            \"hash\": \"4aa3037e5b8b723f69d59ea733780dcecb5c8e17af924d945b369237bffad6a6a11cefbfb6db5cfb2e1f281e2385ac88e8253120b1a52f4db93186084f230f51\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-osx-x64.tar.gz\",\n            \"hash\": \"ea778a7aa7eecd2c46c38b187119e0afdb02532743550a4bdbc56a9125e328a089c16af74c3ffe649263f456ef26f5fc3b932f4d1f76d36a47cb419f203c6587\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-win-arm64.exe\",\n            \"hash\": \"0f5290d42c8ed3b9a8168b618a8abb6ef0dd77f006339699bda8e9a182434143fecb0da4cd1b1d48cfbb8e95212c6d5b45bdd84fa77fcf3e8299671f0827c26c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-win-arm64.zip\",\n            \"hash\": \"6550abfc7a00c50dc90513a3ac842b6df395b9d2204ecb8268fdff18cd555c71ca490b68c126c1f2d4caf4519eaa913ec0ce5601388d3c6c221463aa8a204a4a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-win-x64.exe\",\n            \"hash\": \"604b63941a063087d84d3bf92513cf3b2237faa11995b2854e25bde43181487d42f05bd084b412d0abfbec801b3c6c5dc6ae03df339c1a04bf08d86a9bf8fcfd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-win-x64.zip\",\n            \"hash\": \"9c48f8b05fa2476b0afd4983e789aabc2ea951055c617c7eb9617df92da01242874c0ca8922794cce6d63799fb87540ec7560e0926f78ffd6def73f8afe508e4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-win-x86.exe\",\n            \"hash\": \"ea65734b83c7443d4d702cb80a255a897a9ec4ed90e986dc681b124decd1fe6b55385e7f5beae59ff23341d9747d00cf4f8e60cf657c66243ad7e5cef9622e4b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-9.0.0-win-x86.zip\",\n            \"hash\": \"c1b966542699932a3bf39e48c19a97b5d6f1513782fc8d3c94c5d6c875ccf19944bb807376570ea485dd7f04e3640c3444baa8cd449a2af43d5bba22f0a0f50e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-composite-9.0.0-linux-arm.tar.gz\",\n            \"hash\": \"49360cb623d848f32520a18f3943271b2970c5b81eb8f7f7f04986795bcf0400e224957bcbb8d4a9e92e75a9f60b222818bfd748442d95257d93ec65cc6d546b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-composite-9.0.0-linux-arm64.tar.gz\",\n            \"hash\": \"e7bd3d2a51957d9174bde49ed5be141534261cddd5908881e86d56c2f8ac2c207f29d91af2df387b2c6daa9091436a7c998564ea36c3f2d29e74de0b552e1339\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-composite-9.0.0-linux-musl-arm.tar.gz\",\n            \"hash\": \"106457de6f34a2996923a77589e841815239a760382ee525c3b714f9e6f65039d8555a5e371aaad0e89c02f9dfa5bb267cac22fbc1cd383f696facebe5b34a97\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-composite-9.0.0-linux-musl-arm64.tar.gz\",\n            \"hash\": \"24354dcba020e0bdbf0da867e1a3cb3c45ce214cf7dcab4d1be966c0bcba8d1701605e7681e9adf093c5d23f96574d077ca8fef9ea3d4071b7a275ab5901f86c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-composite-9.0.0-linux-musl-x64.tar.gz\",\n            \"hash\": \"d2f370d46fd24909015353c9488c68c526b931e3fbe5f34385a092a59ef21ebbf123ee491a896e65b3127bdd3e03349feb9c7f54e2ecf9c827d5d86da52e64d4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/aspnetcore-runtime-composite-9.0.0-linux-x64.tar.gz\",\n            \"hash\": \"7771734dd826ee714a65f7d0963f81ec061992c9848c02d335e8423a676c7d9fa7b6e2fdac72280d8e9c8df712a3f7723d3113f37d9e052f7314b06b661e4dac\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0/dotnet-hosting-9.0.0-win.exe\",\n            \"hash\": \"07857f982392d18b0aae269fb455573a3a02dce7bd6cd9fc476b514b1792430dfb793799606a7cd7afcd80813ca269abfa5427520e9b4ac589288d6de8eb1a4f\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0\",\n        \"version-display\": \"9.0.0\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0/windowsdesktop-runtime-9.0.0-win-arm64.exe\",\n            \"hash\": \"36ff3e8dd5f989c87a95b0220e618cb685104c74b4f7fcb553221983a804b67c6a1b57298830519dcd8f9233d78219adb3f1762716b83209326d25353c6bcb67\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0/windowsdesktop-runtime-9.0.0-win-arm64.zip\",\n            \"hash\": \"b0277fe40efd961c6853dd86dcd55f5958e6c588fdd9739d690907898f44edbce6171d43293e61792af817ebe4dabf24e8021743d52ae6ee43f98010f4d3b95b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0/windowsdesktop-runtime-9.0.0-win-x64.exe\",\n            \"hash\": \"e48e015327598623cac9081a556f76f4d4d74c33e35a7cecbd2989a5b2bcb6575017e922883fc841e10efdec3d9577a47ed2b036b7f431d8f8442bb1066e72ac\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0/windowsdesktop-runtime-9.0.0-win-x64.zip\",\n            \"hash\": \"b1c4a49d33cebaee3abcec44d151ba49784a5f221daaba3fc16249386fbd285a97bdd29124dc290b5615071a1f45be9bb0fd8c173626de20a0b7d2e399880d13\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0/windowsdesktop-runtime-9.0.0-win-x86.exe\",\n            \"hash\": \"f597d55205b776391ac1aeb56c40abf5274e6473193c4e6c48982582c135db199d8e75adba87bdacca8981752f04f596105548ab9cc267139e681c7858890543\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0/windowsdesktop-runtime-9.0.0-win-x86.zip\",\n            \"hash\": \"c11bbfa7bcc1dd9b165c802eba633dc8015ad5f38130b85d1b0c1bfe98546ab7326d00b98008ae324c19bd8baca94826df2ec483fc87d976749c58dad36d458d\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-10-08\",\n      \"release-version\": \"9.0.0-rc.2\",\n      \"security\": true,\n      \"cve-list\": [\n        {\n          \"cve-id\": \"CVE-2024-43483\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43483\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-43485\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43485\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-43484\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-43484\"\n        },\n        {\n          \"cve-id\": \"CVE-2024-38229\",\n          \"cve-url\": \"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-38229\"\n        }\n      ],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/preview/rc2/9.0.0-rc.2.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0-rc.2.24473.5\",\n        \"version-display\": \"9.0.0-rc.2\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-linux-arm.tar.gz\",\n            \"hash\": \"c3ea1494aed56c557406786e16dae25a2d1b09e086fa470bee7850203f3c995ff0878ba36707a11719db1e517c6fcba53b103a6987b4fda9158df536cbfd27d0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-linux-arm64.tar.gz\",\n            \"hash\": \"355cdb3ab0a01fbe23b7067916c7516b316ada360dea9b7735fe935eca1723ca1b32407eca3afa7c722bbf061990019a6d563bc3597fdf72940ceb38ae2ad04e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"59e2d7cb35a63984752d296bf02a1e8c2a8db0dcbb2bbce43375f9f7ea8ded93867ce4c20b09c03de94e3e33463f15cbf9aff058a9331daf0ac504c4771db96c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3de9320983e8e043eb5bc301e324425570b21ccf0d5eb97c3e1fde2ab97e98206d8d1784d96d6913be0bb4b8ce50c5cff956e7f8981ee0a1f1c9df227679212a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"d40a1861d4e550a46d4e9104176d107eaa0a1be94cc6ac583ef331e6ad31ccaf4d37a427620300a37376c86f122a920a2b7b40b4e4ac347be2d62a38dc83d965\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-linux-x64.tar.gz\",\n            \"hash\": \"ba0431e7bb82accab144cf1666c470549d8102a17f260cd7e0d988923a27f3ad5c10cadd160b5a180d5bb15972143f30fdb73b687d1f8ccc02e9e9334ab8c2cd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-osx-arm64.pkg\",\n            \"hash\": \"e482d903959159b3b17ce92fc562f7cc32acd3e63a143a9cb1d57eb08279e9a196e905ef94563c90529b1a1b2cfc25c48ea9cf5868caae6c54e2a6e978c4c1b2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-osx-arm64.tar.gz\",\n            \"hash\": \"7b50c5defc32183398294e4cb91a59060617678408a586ce981e0f47fb833c8531b30e03fc4657a09163460605730241e366c9213c381077e6547538e356e8b3\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-osx-x64.pkg\",\n            \"hash\": \"e73fe0397eb8d1237d7e6a900c4b44cacb985461c1ca20f17afaf718d20fca3f5658240e31254a3ea5e48ac73a905dfff82d0aedbea2be1617afe61b5681571b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-osx-x64.tar.gz\",\n            \"hash\": \"4d260dca0c229b640e90e4554b5161c0b9d95f8bb980eb53e61940be22c832849d3289107e1c8158c8189258761a27695e9a4296b9086a0d44c8c12440531fc8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-win-arm64.exe\",\n            \"hash\": \"acfeaec4566696bb22c276219eb7690007c13c09a681bfcbb245406b9308dad1e5620e7deb4fd5af07062b2e32175cc8f3611704a7708090cb99e6e1b847a7bd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-win-arm64.zip\",\n            \"hash\": \"34d0213403e43a89ff7499111af59793c1fc231defd9861cb999e2bd4b7aed5221cf2fd31d1ec3b926b42b4d802024bbd2c6cd676c226d90ac4392c8319508ab\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-win-x64.exe\",\n            \"hash\": \"521f57ed8f68227643e311db9449d6df16f5402705cd792147bb7d665ad6302abc4baec90792bcc5b8a42920b2f52b61a611bbfdb683dc517a531048b4d194b1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-win-x64.zip\",\n            \"hash\": \"bf1cb18fe8cf7f42d84ff02974949b27bc311e29320ec48bd7707815f69e4ff91abce701791962f0b59a2ac6d3fd3c05db2cf49fbe6651c85e6ff7cd114c0c91\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-win-x86.exe\",\n            \"hash\": \"87c84bafa2db77ea290990e94a011c5bca3078a71a854e6862527534920dfcc6ff2ae3b13a03ca2a7578f13257ba65d4c9dd6171ec79a73971e579848beb7535\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.2.24473.5/dotnet-runtime-9.0.0-rc.2.24473.5-win-x86.zip\",\n            \"hash\": \"03bc4281a2e55a37b2ef18859c84c7395d427985aab1817db3ce995ca83bb69d53e8420a0f38005e1fc56bbf93fdc120a2cd71018c6db5f0f1d25e75cd30e645\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.100-rc.2.24474.11\",\n        \"version-display\": \"9.0.100-rc.2\",\n        \"runtime-version\": \"9.0.0-rc.2.24473.5\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.12 latest preview)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-arm.tar.gz\",\n            \"hash\": \"736a0e1bf7791528e6c98848517f6ce71d94fa1a5a72b1e5da2c9b572709d57964ab53b20f1e2b9fc68e2cc739cdba3b91fc08d85e8407fbbfcd0d5fbb11c7d9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-arm64.tar.gz\",\n            \"hash\": \"b532dcbcb47c4fd2c906018d2ec663de1719179f7c9da8f62a3f21a62e34cd2609fb7ceec89f5aedb2a35247f67f543a02c684e1692053bff2fdc4184df63f53\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"a739f8d29744152d33b7b3b749386f0f513b66d1f2e363c1082bb876ded388e1cc6dd26b0f902b3bcdf9574edd3869f800b923648c3dda90dc91b76c4ad5cd97\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"2a55a8e0e31b520dd9cdf3efa80f527ae87bec3b80dba44bc613caab4756b73d1f145086489fab0f55a96688029aca14061ae258d1dcfc36ede8ee0b2a8f47b7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"242c82a361d739cb997619c982047b05fa46c8d72564eab84da49d2b831beb1c5cbf2bde580df0b6855874bf1a4360a263191277d5602dcdc6a019435a00ced8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-x64.tar.gz\",\n            \"hash\": \"126a92bfa9ef4e70609f8b27cde0fae1b144a91af8a46de949d803d2aa1bad0285b1b9b8fc60d40206d346aac49e48709bec4e76cdf6e549f8905086003e8098\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-osx-arm64.pkg\",\n            \"hash\": \"cc149335d94a79281d519745fd6c5bb3fb247cc7aa69ecc567c2bd0830dff9a327642353d4c9b84523a11465a009b0b34d990183120aae5bd1fd8b19e67ec097\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-osx-arm64.tar.gz\",\n            \"hash\": \"c245685c1257295697aeac6cf169cd6375d7e725ebb8760efcebec39fa6ebf6fe3ad5b6099426f899f8a0a0332c047977de7f8432a4e6f28a34848914a925ba1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-osx-x64.pkg\",\n            \"hash\": \"2ee81a99188368a44f8c2a10e366da7ceeb926d583d851c9b4b8137ed2e36b97115a1b282220cace0fe36ca07275f3bf5f0de071fd3f5a30a92c575ecbc4ad26\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-osx-x64.tar.gz\",\n            \"hash\": \"118fa956dd330d0df449e14685b362e2eb7b44fbe9541b97c125d93a78dc2e530288a3ba1eba3928d305f4a0b9254c8480c0b89304187226679f95bd6f1bc75a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-arm64.exe\",\n            \"hash\": \"0da1f676d50005313c90940ca8896102ce30e1931dbbf900e84eddeb27c5cfd68761165d0d1adb7e5db72c0c635dd2e70b887c71d3926d37774cd940b4070199\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-arm64.zip\",\n            \"hash\": \"5bc7758d0be1a23e761dc532ef0498abc3d3c3c8378fc06c4cde151ae692e7dc7f059829843dcf5fef52d16a5619a599b426e056128261a5b022837cdcada35b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-x64.exe\",\n            \"hash\": \"29091a2b4d08f7fdc77065f2805a82afae0129a6b886caec71124016843a29c6abcec828794aef1c9a73a84df3f7b7258863991f61a780ea362575da0ca6879b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-x64.zip\",\n            \"hash\": \"9abd147e58ec166ec1fb0ac0d7499dbafc82af8bc814ca83710f4d3d2e37194c841a603f66f278f05dd4efa27aeb6515e6357e8e7d074407cc5de8944d52e7c3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-x86.exe\",\n            \"hash\": \"42622d7145da2cd246c4490213ba0fd9e9a8c4f567a0f6b940f24029a6f342264be6b3f65ea79b46ee4048a7d74201d25ba98402ce4c245f82ee318f5442af1c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-x86.zip\",\n            \"hash\": \"e1e7935b5c8e7635eb8d7373a3ae760943785fafa3e6ac39343a614c279a0e4d4c0c8724ddb7e3af37c9d806ec11a4e240066fc090a2bd5c21e23c002798ece8\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.100-rc.2.24474.11\",\n          \"version-display\": \"9.0.100-rc.2\",\n          \"runtime-version\": \"9.0.0-rc.2.24473.5\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.12 latest preview)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-arm.tar.gz\",\n              \"hash\": \"736a0e1bf7791528e6c98848517f6ce71d94fa1a5a72b1e5da2c9b572709d57964ab53b20f1e2b9fc68e2cc739cdba3b91fc08d85e8407fbbfcd0d5fbb11c7d9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-arm64.tar.gz\",\n              \"hash\": \"b532dcbcb47c4fd2c906018d2ec663de1719179f7c9da8f62a3f21a62e34cd2609fb7ceec89f5aedb2a35247f67f543a02c684e1692053bff2fdc4184df63f53\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-musl-arm.tar.gz\",\n              \"hash\": \"a739f8d29744152d33b7b3b749386f0f513b66d1f2e363c1082bb876ded388e1cc6dd26b0f902b3bcdf9574edd3869f800b923648c3dda90dc91b76c4ad5cd97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-musl-arm64.tar.gz\",\n              \"hash\": \"2a55a8e0e31b520dd9cdf3efa80f527ae87bec3b80dba44bc613caab4756b73d1f145086489fab0f55a96688029aca14061ae258d1dcfc36ede8ee0b2a8f47b7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-musl-x64.tar.gz\",\n              \"hash\": \"242c82a361d739cb997619c982047b05fa46c8d72564eab84da49d2b831beb1c5cbf2bde580df0b6855874bf1a4360a263191277d5602dcdc6a019435a00ced8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-linux-x64.tar.gz\",\n              \"hash\": \"126a92bfa9ef4e70609f8b27cde0fae1b144a91af8a46de949d803d2aa1bad0285b1b9b8fc60d40206d346aac49e48709bec4e76cdf6e549f8905086003e8098\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-osx-arm64.pkg\",\n              \"hash\": \"cc149335d94a79281d519745fd6c5bb3fb247cc7aa69ecc567c2bd0830dff9a327642353d4c9b84523a11465a009b0b34d990183120aae5bd1fd8b19e67ec097\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-osx-arm64.tar.gz\",\n              \"hash\": \"c245685c1257295697aeac6cf169cd6375d7e725ebb8760efcebec39fa6ebf6fe3ad5b6099426f899f8a0a0332c047977de7f8432a4e6f28a34848914a925ba1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-osx-x64.pkg\",\n              \"hash\": \"2ee81a99188368a44f8c2a10e366da7ceeb926d583d851c9b4b8137ed2e36b97115a1b282220cace0fe36ca07275f3bf5f0de071fd3f5a30a92c575ecbc4ad26\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-osx-x64.tar.gz\",\n              \"hash\": \"118fa956dd330d0df449e14685b362e2eb7b44fbe9541b97c125d93a78dc2e530288a3ba1eba3928d305f4a0b9254c8480c0b89304187226679f95bd6f1bc75a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-arm64.exe\",\n              \"hash\": \"0da1f676d50005313c90940ca8896102ce30e1931dbbf900e84eddeb27c5cfd68761165d0d1adb7e5db72c0c635dd2e70b887c71d3926d37774cd940b4070199\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-arm64.zip\",\n              \"hash\": \"5bc7758d0be1a23e761dc532ef0498abc3d3c3c8378fc06c4cde151ae692e7dc7f059829843dcf5fef52d16a5619a599b426e056128261a5b022837cdcada35b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-x64.exe\",\n              \"hash\": \"29091a2b4d08f7fdc77065f2805a82afae0129a6b886caec71124016843a29c6abcec828794aef1c9a73a84df3f7b7258863991f61a780ea362575da0ca6879b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-x64.zip\",\n              \"hash\": \"9abd147e58ec166ec1fb0ac0d7499dbafc82af8bc814ca83710f4d3d2e37194c841a603f66f278f05dd4efa27aeb6515e6357e8e7d074407cc5de8944d52e7c3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-x86.exe\",\n              \"hash\": \"42622d7145da2cd246c4490213ba0fd9e9a8c4f567a0f6b940f24029a6f342264be6b3f65ea79b46ee4048a7d74201d25ba98402ce4c245f82ee318f5442af1c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.2.24474.11/dotnet-sdk-9.0.100-rc.2.24474.11-win-x86.zip\",\n              \"hash\": \"e1e7935b5c8e7635eb8d7373a3ae760943785fafa3e6ac39343a614c279a0e4d4c0c8724ddb7e3af37c9d806ec11a4e240066fc090a2bd5c21e23c002798ece8\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0-rc.2.24474.3\",\n        \"version-display\": \"9.0.0-rc.2\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24268.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-linux-arm.tar.gz\",\n            \"hash\": \"d6aaa61df66bc42296350f56a13e4f5a5b56770e62cdf4bb2a647f80db3bca632e7f8b64dbb2d2b8426e862edf3ca75bebcfe9db5f6a6e94ec08557a4f7a461b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-linux-arm64.tar.gz\",\n            \"hash\": \"b6de668ce8714476be78ae00ed66027f3a5b06d95c6768ad6b3eca4d0f396c91843267c0e8c03160b709a7acdcbc2b09047f1ec8d46309d40c3d31f849cc981f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"fa6c236044b167dfa0e389aaf3b8e42d1429f193af014b9ae6857e2dc1b64a65a8028c6ac17e83dbe5ec876e68ee9cb853dfe019c88b3a9fa15fcc6aa0b017f8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6303def8508ee4df979e6ee6801077da7d0517d3203bdff74a36cdbae57089d7c72691eda00a5daa740b283190950b5ca8ed0fa1112b7d2ab11c145909de9199\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"9c41aa3bfca63c948ff873cc341a091049841167e644cc14f1f543fea3be75b10808c3848303916ff3472003accd801f7bc81fcc86d92c1a5c9ecd29d9bde3ba\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-linux-x64.tar.gz\",\n            \"hash\": \"9370c26174cd7f1b2fef58e0a53041c94b7d5412f15ea5865fbc653a65b148b1f92e7992f147610a6ca2e92011ff28c43480ab26a6e7f8cd56f2189af0610be8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-osx-arm64.tar.gz\",\n            \"hash\": \"1dd5ea0b3800dd38bda62392809336039ba69b3ac3f1a8273a68664ca0c23b632848a348b8d9e9e0e76539b6e5e15824320b830571c2fae3df94ad0f26288d30\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-osx-x64.tar.gz\",\n            \"hash\": \"b62af025296774fd30f60ebe38a80612f8aa07802ffcf1c93d3da9052b461108fe5caec356f95ccd8772ea7514862c379afbb3c19b23c8e8b53af9a18408813e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-win-arm64.exe\",\n            \"hash\": \"b9c844bc25991492e94b9ec4c6636fb64de270018154dbc0c1cb3b63624e0df56b5c1eab22d0b8f9ca175d1efc878784b907e6fad7d8430fbe88be23d3c85d9f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-win-arm64.zip\",\n            \"hash\": \"e4eee89df6eb0b79d23f93d8221b5e7ce4f5d5cd29b5e75b730b8c121f72d15b7ece921027fc270302bbb49130d81d153ba5475b53a1216a4e6e51f4ec689666\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-win-x64.exe\",\n            \"hash\": \"710955c39094887356b5bf14e634511796962d3b84348e74d659b128eb0d40f351ecd881a129459661317fc647f0df8cad2929648b79982f3cbb3ce2ac413a88\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-win-x64.zip\",\n            \"hash\": \"16f3ceb3fac1949b6bc4f7f6b9eddbb4806f156fc5cea060c8411847688dcd3d56ec0b79ae13d2b5e49c1a224891795cb85b4425fdf171417b700fab981e8b82\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-win-x86.exe\",\n            \"hash\": \"2030ed1048032f51bb45b55da16a03b68fdb19a58d710d693214eceff6b1e4971fc625c4f221b67fc01561e8459a960efa1525631b73e907cffdc0c553baefe1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-9.0.0-rc.2.24474.3-win-x86.zip\",\n            \"hash\": \"1265946601b59350a071092656afbc6c501e4926b82876da951b923cf83155c7c0abcc735915f97e2f059402807028c7fbaa261788c9769c20f88c4738c86415\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-composite-9.0.0-rc.2.24474.3-linux-arm.tar.gz\",\n            \"hash\": \"49d9a1ad1dc35df3c3009a5378b52832b4e4c17cbbddadd50c1b3868a7a1fe312520392b961275b5587093573f9a5f8c230e33988459367fd6e0062cd3b3a354\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-composite-9.0.0-rc.2.24474.3-linux-arm64.tar.gz\",\n            \"hash\": \"f2383e700646cdda26796bfed343ac0e6753c9cb6eae4b36c3aa4a018cc66fe0ef6d55bd3340177aee6dad3ed1f41d77598eaef56ebcbb7f70e70becd774473b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-composite-9.0.0-rc.2.24474.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"d99e0acd14bfa0ad3be16d6923c052f8afdf1f169297fc3fc2799a3bdc24a9512c2b2eac9e2781ce80229b7e29a27c503b406bc5eaf0fcea3d46c0f1ed46c980\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-composite-9.0.0-rc.2.24474.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1af4fa6295698d857d9955a197b0d88e263e758a118ece8a7d8188fdfe8efdfd55b363b7f5102b5a47d8355e73f54312a4a9652bd7dd87a2400452bcde9ff4ff\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-composite-9.0.0-rc.2.24474.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"efad7ff66e5bac390e55b964c028ee25f6cdb4d7d58eb6c114db08f307c8d8139f60a10cdab5e3b09679ccd8f93b94f12400a0c295a09ac2666ba2ef3902fbc7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/aspnetcore-runtime-composite-9.0.0-rc.2.24474.3-linux-x64.tar.gz\",\n            \"hash\": \"0b215df947c2bef3cdd9bd298cea18f6c3f5e21fa46d2ab9f6faec3b9f7f062fb35819432e7e1015f27f793b4850f2cfa40040e60f28fbbfec258acd43094695\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.2.24474.3/dotnet-hosting-9.0.0-rc.2.24474.3-win.exe\",\n            \"hash\": \"270a38e4318a2783f1f3462b727304124bbc801a20ae1e6cef99200d8c5ee5d4991791876455b00df409b52d9f64ba7358e024e6f342cfae463654da9d078d73\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0-rc.2.24474.4\",\n        \"version-display\": \"9.0.0-rc.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.2.24474.4/windowsdesktop-runtime-9.0.0-rc.2.24474.4-win-arm64.exe\",\n            \"hash\": \"3d336f0e6e5ec7d18ca21b59858ccc0c7d683e3b0a68b0fc035a3a34119f377104259c89ab7d7a3f0af1071cd550409ab91eb0d4a4072e36571c86900194e82b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.2.24474.4/windowsdesktop-runtime-9.0.0-rc.2.24474.4-win-arm64.zip\",\n            \"hash\": \"dd9bf2b472dc076ba68346a866a67a86af192a39e132fa91b1b35385a1ae4af166cf56a5e3ccd12d33ab4aefafcd4388c75663de802e10452e63dea5dd80783c\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.2.24474.4/windowsdesktop-runtime-9.0.0-rc.2.24474.4-win-x64.exe\",\n            \"hash\": \"820ab1505e138cb5552d7904d6faff20ceea7c2dc087e3e0004ec6644139e51771e9c2f927ba7206d53db7f66732b750f389a2adec75f5f00f0ecc20abf31fcd\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.2.24474.4/windowsdesktop-runtime-9.0.0-rc.2.24474.4-win-x64.zip\",\n            \"hash\": \"8449e2233d2ad2f72215c3caaa8e13dd320ce8678500c98ffdb0483f9f10d983bee834138a266dea652faca6ebf821019c0e263bfe2be60ab2cb75266a30e6a5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.2.24474.4/windowsdesktop-runtime-9.0.0-rc.2.24474.4-win-x86.exe\",\n            \"hash\": \"65f24e6785f76bcad76c6284383f74c2f7cf5186fee4cd13f0e2796dad5aef2873e8cf73a7a04ce3250c37b1f6171dcabcc07133759e4cb959bb2dc68ba90738\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.2.24474.4/windowsdesktop-runtime-9.0.0-rc.2.24474.4-win-x86.zip\",\n            \"hash\": \"834e0936f2fce5ac079c3658986549c3d07ece93f96aa4cd8ebab4a9a612d09704b6d3e907018dfdbcfb74760aa2fe154de29188f0058b112c22c3dc1ef97dbb\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-09-10\",\n      \"release-version\": \"9.0.0-rc.1\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/preview/rc1/9.0.0-rc.1.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0-rc.1.24431.7\",\n        \"version-display\": \"9.0.0-rc.1\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-linux-arm.tar.gz\",\n            \"hash\": \"8a83de300e8f9ec67f705004f55229573dd8bfb106f6c42389efb296c2386ee27846f81baafe6b4269e9c7269037e5ec3f1376c72bc103e4641c9181a7e57647\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-linux-arm64.tar.gz\",\n            \"hash\": \"8542bb9381e4eca6f0ebceddec68525cc59e34f7244613cf33cb2151f570c3345cb6d081c492b01070e762d3440f02d4558234532d58ff3dc919057e06b7bdac\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"11189bcc13148694913ac5fb050b77db8104ac62dd39b970cd96aef399f7a7cee656a314b44f0113f96726e7ee0a269dea38637020fe06261a8b01ca0df9e4b4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dd62a73736b275a15b5affa3465a0ef3d69619a06ccaaa3916b331f45b3859a9028e78eb7cd85c766deffb9703c7bb96788f4061d549cbdf325bf81894310521\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"bd77015ca46b8928f70a61e6cfef23c5e308ad40c03ddd421c210141b1a38cd5c4d8edf5365e8baee227db5a6ac71fbea481c1a8b3c5ba6ea58330afdd7fe231\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-linux-x64.tar.gz\",\n            \"hash\": \"9f9a85b8d9f6362ed2c2d0edefd04999181b2c386647644fbc1d9f248255387324399edb1c40bc7fa8c47adc22e2d71db5f25ce794521d59e46c40593b5f6cc5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-osx-arm64.pkg\",\n            \"hash\": \"8a0dd36bd239c676302affa7ad25568cd6c4593c57d215a11c81884e5b0ae15d1c3e1a98e38e6211c9c597dd9568df60af63d33abd32fade9d10077d29f8077a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-osx-arm64.tar.gz\",\n            \"hash\": \"a825fca9edde53ab6abc0efe0c44d6fb25c5c77aeb2d35b6c414d42f364453ceb069ed9db8865c2bb82523989fceb7cccbf86047699590ff756a6b9c54c21d74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-osx-x64.pkg\",\n            \"hash\": \"a026498852db5902959e90ca53ea4567d28972c6bad1f23e42dd2cec2d966e2ff3b9824e3747566a942ac7149cde577b1af079ceca806f8d5a50015f7210fd00\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-osx-x64.tar.gz\",\n            \"hash\": \"f62f867eab633737c450ffb0543a726f1ba2f46a4265cb47978d88dad0c6b80a8db5ccf6f583842f85cb613b96d2f7c6806d669826f4b92b906e71d8d10e53e8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-win-arm64.exe\",\n            \"hash\": \"64a5655077cb6fbe40f7b3bdbcdeae41c16794ab93c86f00cb803bbab3f2d5207d5bad3f84a2e3fc92e1ebf322b7c47b25ed926b9ae17b1e3b3175820db1eed9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-win-arm64.zip\",\n            \"hash\": \"888f39b40a3baf573208b4d6d5e1d102e00da9128d086c8b706d5116f1325ad953ab44b6bdc7b82a3e5e59192e4b2cd53ba46849658ed7960293079ea58cf209\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-win-x64.exe\",\n            \"hash\": \"1a6c34911e922541c89c8138507119c22519081df5a33d30f238fc7c2d03b3cbf834c495d21cd2a11ac1d93f9296616d192f75eb326f8308e08e12bd905e6020\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-win-x64.zip\",\n            \"hash\": \"b73b3ab9ab37b703b00bcb71eb180caab3f4e32dca16afbe4bcb28b3608604456c288edd7fb9254c8facdebfe3d00b28e17e10d6abb96ca0768427b773983e26\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-win-x86.exe\",\n            \"hash\": \"90f74c10c717a663a0c400fb6998b0d33d1a7760c63a804f4e3a4505b6c9b0c5ae3a3a259b8d8cbaf7ce4b872d784b8473a25b65b4b1faaffb22ede870f0fab0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-rc.1.24431.7/dotnet-runtime-9.0.0-rc.1.24431.7-win-x86.zip\",\n            \"hash\": \"78451848ddbb5080865c9ea0ad5f67c26ebe9a708104eba72166e708abd73bb647b2ec063180c39b3100e5261312f7efac7c594f12fe4319864ce4e31cd5f7ec\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.100-rc.1.24452.12\",\n        \"version-display\": \"9.0.100-rc.1\",\n        \"runtime-version\": \"9.0.0-rc.1.24431.7\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"13.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-arm.tar.gz\",\n            \"hash\": \"f31a4a2c3080a921cfdd71933d1f57c2f57ff4c43f5a0ad6f52640bc791e54f8c0526d8e1206ad21f8682357a53cf6d488a8b01107e7c34beafe2c8c3425dd8c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-arm64.tar.gz\",\n            \"hash\": \"f5742537128801c199a127266175066058788a26e8a603cbd26a1c16e9ef33a5d418e4790a3cea722d7de483eee8b68e0de4bb1dfdf279713369ed3b4d163a11\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"8480900e14bd1034f586c3e17402be2f04cab250d79b4d1dda3aa887e9fafa683ad388adf7f25b5c7b0dc433375ce1c272b3d9419636e6db0f7bf300e841a0a5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"656bfa4e7c4a3ee280b99eaffa620b09b89b3a3b9f6d33c9d787c1f8938b84afb5aa43d80546e81a2bfd532770c282c59aea167f50d01a57027a2061e595f0e9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"b1d8004cf9c3ffb530fbb3d4259174cb076a32ba00268daa43dbf452fe6d46ccf979a63d7f53ae70a2fa7a101a9df1bd3b840552ac92a852119bb7385a65f65f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-x64.tar.gz\",\n            \"hash\": \"e8130817b779d0104a6eee33d98d97c3fad1c336013435f47c0e9e22370172b75da37ade76e49dec7cbe696884390d2e6941cc69e2bad5593d6d1c6b41083051\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-osx-arm64.pkg\",\n            \"hash\": \"c5a54b42d13ef1b20ed01e089c812f0c39e7a9a091330eb69387cc7e41f14fd319909321bd7cdc2c5f6b3d9f75fbe64b906028ad4a3ef1d75ece1a225676b14f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-osx-arm64.tar.gz\",\n            \"hash\": \"af30b31cd937e9fc97e164b83628c2c1ecd21329b75f742d9f5232aa68427d25b5d702cc565aa860d3c738c8727790569bf66a3ed74e5cef719ae589d302846f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-osx-x64.pkg\",\n            \"hash\": \"a0ac40a3b8a67447fe75b93c34a283049621de39a6791932320178c48e61cf7783eb1bcb3a6105ac5ff9c9aed718fefec8841f0172c8325f2c5cc0e30ced1e4d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-osx-x64.tar.gz\",\n            \"hash\": \"0d1f0718eeef006c3ecfbefeebf9df0772ec22c74db4bb635b6463b8aedfd3957274b908b51ec019ced69d3e7af4ae9252f18e87b14a4411e1089a4cc41e37d0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-arm64.exe\",\n            \"hash\": \"30a6ab47431eba8d82609f12739d7373e1a4ce903ab3f98a4e327b472fb7c3ebfdec6a8e2f3abd24af64a1962bd3aec0cc82c6030abbbae4c712e2037e9b3a5f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-arm64.zip\",\n            \"hash\": \"d8ed11c6490cb532cdadd9f36b75e11643cc4ce771d8d68efece94fa3be438c2304eabd890dff7363c7fdb18214bb7ef1534fe28a7a9d5672c4ede81a70ade0e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-x64.exe\",\n            \"hash\": \"f8f3002242c76b5eb786b8c7788556563a22151a7e09032e7b0edcf4de17c3c69cf7f8dd598b2c5752df62d40798bcc4bc63f6bed8ce377d0938fe8b0ce631d1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-x64.zip\",\n            \"hash\": \"88b4e63017663e807a26b6e3775cb67644f205a03e865f2b67c327e17120e46e0bf6aeb6f4c098cacb9822987d9f167a890c69d733e83dd998041d24c09ceb84\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-x86.exe\",\n            \"hash\": \"4da5b031405105db0cbd1a0c5656ac7ca481021f38694e7bbb6c1b3293ca3a398da2b504ac7726192defd9b7bee5e0231f18a334a0a7d4060e60e157d97b2619\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-x86.zip\",\n            \"hash\": \"376ab68351566f8eebb837959d2e5c441e33081ca67fe1aa1223bc9bb7f0e86b626da01be9f5fb7e5a8601e61b48bd5a73955a0911633951c68aedbff4b53a57\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.100-rc.1.24452.12\",\n          \"version-display\": \"9.0.100-rc.1\",\n          \"runtime-version\": \"9.0.0-rc.1.24431.7\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"13.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-arm.tar.gz\",\n              \"hash\": \"f31a4a2c3080a921cfdd71933d1f57c2f57ff4c43f5a0ad6f52640bc791e54f8c0526d8e1206ad21f8682357a53cf6d488a8b01107e7c34beafe2c8c3425dd8c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-arm64.tar.gz\",\n              \"hash\": \"f5742537128801c199a127266175066058788a26e8a603cbd26a1c16e9ef33a5d418e4790a3cea722d7de483eee8b68e0de4bb1dfdf279713369ed3b4d163a11\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-musl-arm.tar.gz\",\n              \"hash\": \"8480900e14bd1034f586c3e17402be2f04cab250d79b4d1dda3aa887e9fafa683ad388adf7f25b5c7b0dc433375ce1c272b3d9419636e6db0f7bf300e841a0a5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-musl-arm64.tar.gz\",\n              \"hash\": \"656bfa4e7c4a3ee280b99eaffa620b09b89b3a3b9f6d33c9d787c1f8938b84afb5aa43d80546e81a2bfd532770c282c59aea167f50d01a57027a2061e595f0e9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-musl-x64.tar.gz\",\n              \"hash\": \"b1d8004cf9c3ffb530fbb3d4259174cb076a32ba00268daa43dbf452fe6d46ccf979a63d7f53ae70a2fa7a101a9df1bd3b840552ac92a852119bb7385a65f65f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-linux-x64.tar.gz\",\n              \"hash\": \"e8130817b779d0104a6eee33d98d97c3fad1c336013435f47c0e9e22370172b75da37ade76e49dec7cbe696884390d2e6941cc69e2bad5593d6d1c6b41083051\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-osx-arm64.pkg\",\n              \"hash\": \"c5a54b42d13ef1b20ed01e089c812f0c39e7a9a091330eb69387cc7e41f14fd319909321bd7cdc2c5f6b3d9f75fbe64b906028ad4a3ef1d75ece1a225676b14f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-osx-arm64.tar.gz\",\n              \"hash\": \"af30b31cd937e9fc97e164b83628c2c1ecd21329b75f742d9f5232aa68427d25b5d702cc565aa860d3c738c8727790569bf66a3ed74e5cef719ae589d302846f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-osx-x64.pkg\",\n              \"hash\": \"a0ac40a3b8a67447fe75b93c34a283049621de39a6791932320178c48e61cf7783eb1bcb3a6105ac5ff9c9aed718fefec8841f0172c8325f2c5cc0e30ced1e4d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-osx-x64.tar.gz\",\n              \"hash\": \"0d1f0718eeef006c3ecfbefeebf9df0772ec22c74db4bb635b6463b8aedfd3957274b908b51ec019ced69d3e7af4ae9252f18e87b14a4411e1089a4cc41e37d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-arm64.exe\",\n              \"hash\": \"30a6ab47431eba8d82609f12739d7373e1a4ce903ab3f98a4e327b472fb7c3ebfdec6a8e2f3abd24af64a1962bd3aec0cc82c6030abbbae4c712e2037e9b3a5f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-arm64.zip\",\n              \"hash\": \"d8ed11c6490cb532cdadd9f36b75e11643cc4ce771d8d68efece94fa3be438c2304eabd890dff7363c7fdb18214bb7ef1534fe28a7a9d5672c4ede81a70ade0e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-x64.exe\",\n              \"hash\": \"f8f3002242c76b5eb786b8c7788556563a22151a7e09032e7b0edcf4de17c3c69cf7f8dd598b2c5752df62d40798bcc4bc63f6bed8ce377d0938fe8b0ce631d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-x64.zip\",\n              \"hash\": \"88b4e63017663e807a26b6e3775cb67644f205a03e865f2b67c327e17120e46e0bf6aeb6f4c098cacb9822987d9f167a890c69d733e83dd998041d24c09ceb84\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-x86.exe\",\n              \"hash\": \"4da5b031405105db0cbd1a0c5656ac7ca481021f38694e7bbb6c1b3293ca3a398da2b504ac7726192defd9b7bee5e0231f18a334a0a7d4060e60e157d97b2619\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-rc.1.24452.12/dotnet-sdk-9.0.100-rc.1.24452.12-win-x86.zip\",\n              \"hash\": \"376ab68351566f8eebb837959d2e5c441e33081ca67fe1aa1223bc9bb7f0e86b626da01be9f5fb7e5a8601e61b48bd5a73955a0911633951c68aedbff4b53a57\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0-rc.1.24452.1\",\n        \"version-display\": \"9.0.0-rc.1\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24246.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-linux-arm.tar.gz\",\n            \"hash\": \"1201ddd76c54a676cb287443ef1b3316d087b9f3557c797f724cd4fcb86986eb499b3122959b24976444e262285c05a8a0f8f3f282894631e58fa4de42bb5489\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-linux-arm64.tar.gz\",\n            \"hash\": \"84610a38fb9a98eb7bd26ba89a9c4998682ec3fffb5eade5bbafbafd63cac7d9a5279618bb5b2575d27feec098da5fe6f7150c67253f3f37762601590396e122\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"29dbeee2ca4379b33457e2b056588114fa31813506c5359a23145f23a41d063d05eaa097ea117623a40fab113516b45150bd17a2f057287562c33fe9168bf299\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9f4f1a3a4f39377779bf4f76ce0b9763102d9ca617ffdf61ff75a0d81c5cc63fb5042708ff10b1a83e558050d9b95bbaf159fa77e27cc03e0ad343441e164b5e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"0f945f9c7619918d619a66cfb6c8b01fd9939438ce8ef8be0797faea4cbd73cede6fd25c225855efb793be670bfc0f7198e9f231fa0511d7cf319d2fabbac9d3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-linux-x64.tar.gz\",\n            \"hash\": \"f8fd285d67bb044d631596869d6301e10a2a243c81c9a05096a66aff4fb3431529812c7482e6cf0e065e8e065fc50b16b50d7f2a495ab30077a68bd45b3ba376\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-osx-arm64.tar.gz\",\n            \"hash\": \"03f7e03352d1ad2d54e9de4c1cdd7a94c2311bb36d4c6296661fab286cddebf3f57204f73892efd53f43cfb13ba73cafae95d0522c47be03203d5fb69a0ecfe9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-osx-x64.tar.gz\",\n            \"hash\": \"ff4a6e35b41f5200521ea4b257b293e4d48f1786ccaa9cd85b55ba96ad36036dbc149d2ff820f1dff5f2d9acf6c38b6c3540e700c2c2db5fe6d82d4f85f461ae\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-win-arm64.exe\",\n            \"hash\": \"9dfd2fb830533936ba424a44abafb580bbbf01480b612b29965c779569bfd45a33925dac792c0a4d8c0ce80bf15307e86166b157b2a8ed8bf0643a517b36ba71\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-win-arm64.zip\",\n            \"hash\": \"73d3b632f718d34e0029a85ef43c69c8f68aab74eda4fb0758f3f6edbdb8d89e62752ba2fb51cccca23a2440ce328955b9f6ef9bafe6f181a9bda6e3443a9f7d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-win-x64.exe\",\n            \"hash\": \"da1a1d24f104c7a4b3ab993663620e599c4c54593858990196090983a285b0cec0321db0a9e9d4f040260046f2035850e3077d62a01fc11232a1847cb971c6e9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-win-x64.zip\",\n            \"hash\": \"089020e21b337c74860c2c67ba367bdc4c270da822f9f1b181e092a9d96e8d6ff2609f05bc6ac5410523aa991fb5fa876477362dcf2f72c4c2ea2ea0e295b3b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-win-x86.exe\",\n            \"hash\": \"fb864ba977436649e9a0e6ca6b9dfb58e6a62316259f5321e10a7fde8d590a054815b17c6e6754217089703fd4816046cac3f4e57b3b822c4df47e4f6fa36caa\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-9.0.0-rc.1.24452.1-win-x86.zip\",\n            \"hash\": \"eab9f7515bdc4b0577db2cfd83da3f3bb4f6ef5f9fb58ed50f8c0882c2dc1a9a26bbc177bdebf62ec87160d797022b3a5ffc4fe8126afa38737aff777bcd698f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-composite-9.0.0-rc.1.24452.1-linux-arm.tar.gz\",\n            \"hash\": \"33fe5cc1474420b97525635c4587328ee7a75ee9d41adadd82748beb82d98416f0ea1003f73cb71475ca9ae376c597e03eb046f370c94340f6973b508de46757\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-composite-9.0.0-rc.1.24452.1-linux-arm64.tar.gz\",\n            \"hash\": \"38bf53375c10224af2240209f65eeaed4f5519679b0e2cf217c662d2dffa9c3de35122aab560fd663b7964f294700e2c3059dfb64dfb4ac8e791a65f5a8d802c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-composite-9.0.0-rc.1.24452.1-linux-musl-arm.tar.gz\",\n            \"hash\": \"5a6709c2e707e05ace840ede35bbf462e6eff3d8497b1afa9909e5daf6adb735f1a1f14256238765d7dd4b326a933a3cd93f9aacab43d39c22eb9d2b0c592c0b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-composite-9.0.0-rc.1.24452.1-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9078ff4024ccae3acb05661c2be3f61ac8ca24a1cadd5999d1b7466c819ac36d2b57837c91f19f8bc00cba6cb8d0c694ada2d80de5a5eb930a66c0cf90273967\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-composite-9.0.0-rc.1.24452.1-linux-musl-x64.tar.gz\",\n            \"hash\": \"33ddf922b107124112d4cb42efe040d04299aabe77e0cf47791e0e7ee9ccd106bc5c56cf792b49965570a0cb55ff40693e20eb9e3b868557b53000a091a9adaf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/aspnetcore-runtime-composite-9.0.0-rc.1.24452.1-linux-x64.tar.gz\",\n            \"hash\": \"eb291957efda04e117be857279261fdbe657980003fe321ead8fa65121be903459db9cab4a5454e719fde4e9d353e266054d6c18c62bad9f9204993068f71a5c\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-rc.1.24452.1/dotnet-hosting-9.0.0-rc.1.24452.1-win.exe\",\n            \"hash\": \"221f75ee6e5a8fc27ccb24ab8b0fe0da70835f215355700b8ae9d9e278e939f16055793d2726732ba68d1607b778c55694654f7811cd7dc7b3f752606aed0503\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0-rc.1.24452.1\",\n        \"version-display\": \"9.0.0-rc.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.1.24452.1/windowsdesktop-runtime-9.0.0-rc.1.24452.1-win-arm64.exe\",\n            \"hash\": \"c95b712758f09bde75213c5e9d2313887bf57619ea300d1342287ebf5ef9ae272f6d833af9053a1f79452a6d6ce3c0604cd3b6de7ecdf32cdd106c3b79ec8bb2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.1.24452.1/windowsdesktop-runtime-9.0.0-rc.1.24452.1-win-arm64.zip\",\n            \"hash\": \"11a4f6fb62146abe7e4177eb81d5a9b9ef1860bdb87953dcb49802b3c1c5cf8d7dc07b0b698ab959b0b0ad70a6a73d1dd31244333f0d27818ce39db362a7c215\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.1.24452.1/windowsdesktop-runtime-9.0.0-rc.1.24452.1-win-x64.exe\",\n            \"hash\": \"032ae99f815ecb1c5b07377885955de621e49da4a3ddac994e251fc8dfb3911768a079e996d988e8cd6c9c154f2f9c0656c6f57ecce515fe90e88a0659381038\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.1.24452.1/windowsdesktop-runtime-9.0.0-rc.1.24452.1-win-x64.zip\",\n            \"hash\": \"e7d72c19182533a72e14a90b79f5467a913b81ca89cf453d51e1a1acc47b66e31ef35c13c08b12e5338787d1e7d0f4bad842aed3e1c58b7a0800020e308f7b9b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.1.24452.1/windowsdesktop-runtime-9.0.0-rc.1.24452.1-win-x86.exe\",\n            \"hash\": \"1ea195d2efa597af4e03aface594d868d5e935af9a72196f3ce212e3c93626abcd48f95aa9c25a736539fc9c32c80d25334ec377ca6c7406f22a2fb0709df080\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-rc.1.24452.1/windowsdesktop-runtime-9.0.0-rc.1.24452.1-win-x86.zip\",\n            \"hash\": \"20ba8fd3c04c03e9008db73b5a007c87a9b191badbe7e469f98c40b86dbf3dc80bc81d6435a75154c8b1879e5283c412bd843e2efca0a86b7ed5ebb893de8ea9\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-08-13\",\n      \"release-version\": \"9.0.0-preview.7\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/preview/preview7/9.0.0-preview.7.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0-preview.7.24405.7\",\n        \"version-display\": \"9.0.0-preview.7\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-linux-arm.tar.gz\",\n            \"hash\": \"6bf40d4e837f74f0ac92ce504c187b33ee1d6ba653dee8006bbaf5a6f923eeffba2cb9c2f938207856c84bb9e41d5c3f42d0a0b1dd62bbd9997e885beab6a3af\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-linux-arm64.tar.gz\",\n            \"hash\": \"f7440b679315c6d35b12d839a1cf52c961784d56524f52e96a7834bbda7bf4e5bfd726081148cf71fb19b3107c7b1f39681a2fae7e87f1d9fa0634b70a47f4b2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"d627507d36e0ee3e8a6253d0488bb2c85458ba124016b32c8a481ec3d603f4393b700f1cd08c5640aad1971546526898ffb049e9590cbd655dda4375b7d7757e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"57bb109d2bd66c6e273b54d4bbb4836a53375f1cb13bed1139c6bc950f85de774070014fd19ddb8b43588fa32f6de60811b43cbff5d29b1f537cb8206561fc5c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"343d911894ff3b61cf6ee560b5a5da14a8b84e9dffa2211529d885e81314a6b0e88b6018b3a116f05b0bcd6e80b2a1e8cb45547f193a49a3aafcdf3992b580e7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-linux-x64.tar.gz\",\n            \"hash\": \"9ede46bc2e6f87a9f592f888562a4cdda6ffa01ca9822f6d4ae586a7c478d3e4fe6c70758a4e9ecbba86445978c68f805d1d6d6f4d37fc653a2b7510309dd5dc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-osx-arm64.pkg\",\n            \"hash\": \"b6d520b49da68a823a0279ab93f5aef4f8381fe8fb45ea3e0998eccd111300331f1196d95e22f9d7bb64e74cc5f0dde2c33b63a4db3b56da60b3e0cf8c9e4cbb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-osx-arm64.tar.gz\",\n            \"hash\": \"ade75303e39c33af6d7ea10369bb87d5d446619d2ffa630db1e8342b1577efe6831d8f32316fb0e0536e56e0adb7978c4e1b75ddef9a2d1cda8657b8fc457356\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-osx-x64.pkg\",\n            \"hash\": \"1be6f9be0cab72e50a99350b4a8517a428c468b83e9c69eb0fe3253ae62586507f1600173efacc049dafae5252721120a27611c68854104d3f737ec3d87f47c7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-osx-x64.tar.gz\",\n            \"hash\": \"17352746d1b780272766c6ea20bdb0961f8004bafc529877644fa536bc0e7441eb48d65cd05c4eb9017249651361c773d89b1ec1c1720bd4fce0fe965614d48a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-win-arm64.exe\",\n            \"hash\": \"cf8b6518c1daf0d5c25d42c7ed5370a6f853b496903822cb254af9064bc91578ce8476d75c8373ad3492d182c3db4459a933afb28f134059937ab5b7c27b7dd6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-win-arm64.zip\",\n            \"hash\": \"5f45a3ccde7dd587451d45eaf70756877df4646f4b9411948e2b71bd7da2d48d513c54f0642e44d306d75e969a01f4d2931eb980de3c71cb1172604c89838432\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-win-x64.exe\",\n            \"hash\": \"7246da48251745c46acba6c3cf0c53e66eed0c17c8579e167a0cec928190e7a38ecc905dd1dcefc7e9e3baaf633186858b6dc7d4b8d52218192bc3580fabd05b\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-win-x64.zip\",\n            \"hash\": \"063c60a61ef96c06be677f9a418e807134563b8cd03be861924ab13325051070a570457a1e32ac676e8e70158a5fcf5e652b4484f15b517086e34faaee1071ee\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-win-x86.exe\",\n            \"hash\": \"e3292dfa9b747f15d7a928b2f09cc0e1e3662276303aea0535f96018d9ea58bfd36d5353638438bab611e491551fea8bf38773351065b13a3ef69d7f19ab9ea6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.7.24405.7/dotnet-runtime-9.0.0-preview.7.24405.7-win-x86.zip\",\n            \"hash\": \"545d98b9757995faff8222e18a918519ca0e4fe4ecfd3216d622bf380a5b1a49109b07957b22f7069b8aa2d1bc89e0d0be6dc1c079e7d95d481b77d164125923\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.100-preview.7.24407.12\",\n        \"version-display\": \"9.0.100-preview.7\",\n        \"runtime-version\": \"9.0.0-preview.7.24405.7\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-arm.tar.gz\",\n            \"hash\": \"b97c357cf8a2e129b222748e23b59343c4264b6dc9dbe00c5a01bf2d3f57c1a6bc61e5ec053b75ce0d17434977e1616d3efb7c4642aca18d8bb5fe7b6c0f906d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-arm64.tar.gz\",\n            \"hash\": \"c8ae08858c9ccf16d7b4879b7201ea22bd59e97f1924d4ff2b25079168c906d88a2864e6796244b67db612a36170969fef212879aa3b2232418795c7e7e6d526\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-musl-arm.tar.gz\",\n            \"hash\": \"cd27cfd56483c51f48d12c204e3de0bd490b081d2add0d3db9f1ae905cef7470613727beb5213c6e68a9dacd2c46ccab8e4bf2b37eb5a8ea19a5d30447c42918\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1ccb6b8ad6e2d32f3d27b234783cde01e25e5c319ca8c5f90320e1ea2cf4f2a3cc58841a9d781c3a63d8a03b458391dd45a16c96d20a0c4f80e570d6decd80f9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-musl-x64.tar.gz\",\n            \"hash\": \"f558d4d3e8ae430ce544a8157197f9084849998f8788e26b9a20f742761ac1ab09c12423e0d1eed1d3bed7a25788b717e3525586b10977f9bec414ae76ac3515\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-x64.tar.gz\",\n            \"hash\": \"3bc1bddb8bebbfa9e256487871c3984ebe2c9bc77b644dd25e4660f12c76042f500931135a080a97f265bc4c5504433150bde0a3ca19c3f7ad7127835076fc8e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-osx-arm64.pkg\",\n            \"hash\": \"43667fec64adddd6b61628a047c0cea2c4c14b4958a5e6589ba0df7a56727416d293c559c6a9089a8d703a8444ebf929df2db6f3362f40c96cee14aebcd6a815\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-osx-arm64.tar.gz\",\n            \"hash\": \"0af77ffeb27e44b2e695caabfa85254f94c77807be6d96fc6abdda1d71be266857320c5dc02d5df968da8963a52cd2aea4b4cad6dfc6540ad26b7b532bf83fd9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-osx-x64.pkg\",\n            \"hash\": \"ff9d18978e2e6b18baeb5b731a52f39458fa65fe2f6ff758e5b1b31b831817ca27149ce9231840ba39a88e2ec5f649b734097129cd8dbfef7f96bf21ec8a23d7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-osx-x64.tar.gz\",\n            \"hash\": \"b410a65d69f991ea55c81e5f7ea58c98ceef309d63ddd21a7689848a4a4516cdb898f8e36702a554a51fc22420cfbffe7a662a785175bbc1ebe1c33fcf6ffbf8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-arm64.exe\",\n            \"hash\": \"0d6db7e772809f87bd70c6b5468f37ff14b466c59f3f3c0f85848b2cb7e938f550768b0a8a70ddb3dae0f900a6abe69dd6c641393e772d857a5160167c4b76cc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-arm64.zip\",\n            \"hash\": \"69c9b7fd4772509a343907a3cc386660caff5295fda42e64ae62c52147ba2adbd9511fa976dd9738df0643a3596a5c7eaa3e51a0f8bc8ffd4101eea706a5dd2b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-x64.exe\",\n            \"hash\": \"53a429eec91b4335d2ff1822bd2b41c826b06a53d187d24645a991066f28498d93f06557bd1c471a9334dc02bcdb3b6d075cfa9d6c894bdfc0f29c0b6e0d7a02\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-x64.zip\",\n            \"hash\": \"99ed1ff4207b8e465b0a483649be860164fb9d4003ee08b1758d0db0df194dda523be4896572c21bfc6ca333f3408b48c14872cf5748a5af7c4d2682f29d8d3b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-x86.exe\",\n            \"hash\": \"fd527045869746eb27acde707a054618f5f9757ea44333d1088013de9d5efef0c398ebfc911127a6a1a3ea292572db4e1f5d0e687f3e3e44bf45a3aa7816595c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-x86.zip\",\n            \"hash\": \"ba3b33dc34e811e9d740e9af00844a5cc67372718e45226b859812b917ac50b9249397752c8b0b63ce87339df5530f1e27d8863bfd2690834e51c38cb3bf4be7\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.100-preview.7.24407.12\",\n          \"version-display\": \"9.0.100-preview.7\",\n          \"runtime-version\": \"9.0.0-preview.7.24405.7\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-arm.tar.gz\",\n              \"hash\": \"b97c357cf8a2e129b222748e23b59343c4264b6dc9dbe00c5a01bf2d3f57c1a6bc61e5ec053b75ce0d17434977e1616d3efb7c4642aca18d8bb5fe7b6c0f906d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-arm64.tar.gz\",\n              \"hash\": \"c8ae08858c9ccf16d7b4879b7201ea22bd59e97f1924d4ff2b25079168c906d88a2864e6796244b67db612a36170969fef212879aa3b2232418795c7e7e6d526\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-musl-arm.tar.gz\",\n              \"hash\": \"cd27cfd56483c51f48d12c204e3de0bd490b081d2add0d3db9f1ae905cef7470613727beb5213c6e68a9dacd2c46ccab8e4bf2b37eb5a8ea19a5d30447c42918\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-musl-arm64.tar.gz\",\n              \"hash\": \"1ccb6b8ad6e2d32f3d27b234783cde01e25e5c319ca8c5f90320e1ea2cf4f2a3cc58841a9d781c3a63d8a03b458391dd45a16c96d20a0c4f80e570d6decd80f9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-musl-x64.tar.gz\",\n              \"hash\": \"f558d4d3e8ae430ce544a8157197f9084849998f8788e26b9a20f742761ac1ab09c12423e0d1eed1d3bed7a25788b717e3525586b10977f9bec414ae76ac3515\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-linux-x64.tar.gz\",\n              \"hash\": \"3bc1bddb8bebbfa9e256487871c3984ebe2c9bc77b644dd25e4660f12c76042f500931135a080a97f265bc4c5504433150bde0a3ca19c3f7ad7127835076fc8e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-osx-arm64.pkg\",\n              \"hash\": \"43667fec64adddd6b61628a047c0cea2c4c14b4958a5e6589ba0df7a56727416d293c559c6a9089a8d703a8444ebf929df2db6f3362f40c96cee14aebcd6a815\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-osx-arm64.tar.gz\",\n              \"hash\": \"0af77ffeb27e44b2e695caabfa85254f94c77807be6d96fc6abdda1d71be266857320c5dc02d5df968da8963a52cd2aea4b4cad6dfc6540ad26b7b532bf83fd9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-osx-x64.pkg\",\n              \"hash\": \"ff9d18978e2e6b18baeb5b731a52f39458fa65fe2f6ff758e5b1b31b831817ca27149ce9231840ba39a88e2ec5f649b734097129cd8dbfef7f96bf21ec8a23d7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-osx-x64.tar.gz\",\n              \"hash\": \"b410a65d69f991ea55c81e5f7ea58c98ceef309d63ddd21a7689848a4a4516cdb898f8e36702a554a51fc22420cfbffe7a662a785175bbc1ebe1c33fcf6ffbf8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-arm64.exe\",\n              \"hash\": \"0d6db7e772809f87bd70c6b5468f37ff14b466c59f3f3c0f85848b2cb7e938f550768b0a8a70ddb3dae0f900a6abe69dd6c641393e772d857a5160167c4b76cc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-arm64.zip\",\n              \"hash\": \"69c9b7fd4772509a343907a3cc386660caff5295fda42e64ae62c52147ba2adbd9511fa976dd9738df0643a3596a5c7eaa3e51a0f8bc8ffd4101eea706a5dd2b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-x64.exe\",\n              \"hash\": \"53a429eec91b4335d2ff1822bd2b41c826b06a53d187d24645a991066f28498d93f06557bd1c471a9334dc02bcdb3b6d075cfa9d6c894bdfc0f29c0b6e0d7a02\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-x64.zip\",\n              \"hash\": \"99ed1ff4207b8e465b0a483649be860164fb9d4003ee08b1758d0db0df194dda523be4896572c21bfc6ca333f3408b48c14872cf5748a5af7c4d2682f29d8d3b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-x86.exe\",\n              \"hash\": \"fd527045869746eb27acde707a054618f5f9757ea44333d1088013de9d5efef0c398ebfc911127a6a1a3ea292572db4e1f5d0e687f3e3e44bf45a3aa7816595c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.7.24407.12/dotnet-sdk-9.0.100-preview.7.24407.12-win-x86.zip\",\n              \"hash\": \"ba3b33dc34e811e9d740e9af00844a5cc67372718e45226b859812b917ac50b9249397752c8b0b63ce87339df5530f1e27d8863bfd2690834e51c38cb3bf4be7\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0-preview.7.24406.2\",\n        \"version-display\": \"9.0.0-preview.7\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24219.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-linux-arm.tar.gz\",\n            \"hash\": \"c5a60fc24cfd9ccb27c022938a93668a344f1f3f1bdb41e01f4740bb798ad04341b5b30fd4aef129d936c909ad8473cf6072a76f999ec626221df9696c73dcc5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-linux-arm64.tar.gz\",\n            \"hash\": \"706925fde5bb93b98e347540fe0983ce0819a2ca2520ed2d5bfc4515cb6852587a30f29852b512509b660daf8ee76ff3c8bb2d2fd78e47c6ae156e6f00cde918\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"08b67ca34122f063370d0f24606174026d3e67f8767ac2e4c4393c214e608d47d82dad177a97c5e6e28d089412403f75012c00cdaabb109e461e266ad6a620c5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"df15606e28e68162739d6b5f3a3852664cbd8d78ff8e8ebed07e2f78c8699d0dd4bd2a3c3b5c98b63bfdae1106720fd4069d349d0d4e32037deea77a4e97efed\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"bddb66623e26d391d4587b46f6b7be5280788eb0355c558044016c1a12062005f2627bd3fdf51cb271f85eaa91fb920532ef235edd764e4ca63931595e1fb52b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-linux-x64.tar.gz\",\n            \"hash\": \"44f86c407b501a700aaeae2ce95cf544d85c08b41cdd12cee22bfcfdd03c4f6a16e495d9f8315f5e56a66b7e6187a4fc39d899f967a65f73883e40172343275c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-osx-arm64.tar.gz\",\n            \"hash\": \"8200af559c76f5bf12f5e0495c285a837dbe29c7ac2d6c562540f7077aa68fa65dc05205b4b219e72f78d55c20a75a514f6ccf3f53d6ecf34fd2cea0817a7ede\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-osx-x64.tar.gz\",\n            \"hash\": \"0f309d6b849ccec8e13812de9ff70fac5cc78785b71f356fc63e5070296305766892a3dfd74bae9b4775ec4449335d03d046494a416304f56e5ba7746f3316ca\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-win-arm64.exe\",\n            \"hash\": \"c3acd624e17bf532bc7c3a1045d551e94a1cc70b8c126c816c64dc788db0152c6737cb703bc76a04a84cf6a11dc589f46e38c1c825860d5f32514bb2fa41e54b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-win-arm64.zip\",\n            \"hash\": \"aa0fcb2d6f74856e9e65d13504c313d4237cb98e55b122c3a2fd89bb4c4307b65bd6386f7350e264d6e4499eaf55ff79766218a2708bb556a66502c62ecf6a7e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-win-x64.exe\",\n            \"hash\": \"a1b17cbe3b028f41c8d8b3c9608112692004259a62ce45efe658ff9506016b8c16e7482708b0f1a861bac21fed19205bed880c790d58c3d1cfd62b81933953ae\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-win-x64.zip\",\n            \"hash\": \"ce32f77bfb17c15c85968bd3062d6d628ce5d7b1b1bc5d1cab1c7b659253ad869c264b6e98773a57ce80cb818c22db5da79ed6b32affe6f8be0f1952069c7714\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-win-x86.exe\",\n            \"hash\": \"3b3bdf4c59fea2035881a95d611f06f64d468e57c85f1c4c04566e6286bfebe1f35837f61c28504697856a782dbcf3b613b51fac41003b3f5bec0ac816894971\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-9.0.0-preview.7.24406.2-win-x86.zip\",\n            \"hash\": \"42c04862e239e07b698dfdc1f39633c42ff196e84569660a1dc2f74ea910a705c91cd1f2453efbc8243de883c89452ede139647c272552e29fb9e57c7dacd494\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-composite-9.0.0-preview.7.24406.2-linux-arm.tar.gz\",\n            \"hash\": \"7839fa20a2a6459f2c4ba41844ac6c57a0eff6ffd8eaef0463ca44918405a0ab3d1b80e7d3943d7c14db21d0d2cf5490a44d1bdfbc9492138d80dbe228910960\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-composite-9.0.0-preview.7.24406.2-linux-arm64.tar.gz\",\n            \"hash\": \"9805dfd4167cf7d67153044265921df12883d67812342779f26b7f400658a117a25b54e29e83bbc8757899d6c96af52d7b35226ebaf2b7a9524b1114d580a741\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-composite-9.0.0-preview.7.24406.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"ada585f833f0d4617d36df8ccdf716553e275cb7b49bae3e44945fd3826d3152eef1830339d069cdc0d60f3947f031647929c7580c97ad768e8b32b7f06274ef\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-composite-9.0.0-preview.7.24406.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d4ec9d402d78a5da914642622a47da05e6c0b55c80ccbd1ba0c1a6c336e38f8598b0b30b986e5d0d296d1ff1783f53cb369d9a7a3c4da25b94c8c6ed4cf67291\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-composite-9.0.0-preview.7.24406.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"2edd041b05b65e35464d7941bd1453f97d510408f51ea6e08dadcc81a76529e3500f4c62c48249b68ac2662a42bf8b00d4bcc6f998d3bdf594929914a9d5deed\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/aspnetcore-runtime-composite-9.0.0-preview.7.24406.2-linux-x64.tar.gz\",\n            \"hash\": \"5a580a89c144a268ceeaf2171f2a60f31ab99c3c1879d043920cf4a0a70eb5d3aa0419029408f64ddb1930ebf830e4988d9356dd7dd7819fde570622aeeab7b5\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.7.24406.2/dotnet-hosting-9.0.0-preview.7.24406.2-win.exe\",\n            \"hash\": \"84426e1c134c0bf6227ed9610a252c562470b65c76a10153e5123b2939f3daaa2e7e067f65de9629ed8542b480ba8549dd0301b58ad94380b8b35cf096882b56\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0-preview.7.24405.2\",\n        \"version-display\": \"9.0.0-preview.7\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.7.24405.2/windowsdesktop-runtime-9.0.0-preview.7.24405.2-win-arm64.exe\",\n            \"hash\": \"c559f8c488d2b94e12e5fe7e61c89eb28ef74b7fe0f52b991e52361d417385521e60384b7db8b7ade2b81cd5f8e905bb31b2d1574e16c506bc998e81171ed0e1\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.7.24405.2/windowsdesktop-runtime-9.0.0-preview.7.24405.2-win-arm64.zip\",\n            \"hash\": \"463b8ac6e5b9f62eddec20009ff2517b2a5f90cc1d6047cc005fb446a344c1337cbf0f59ced2749e1b569ef44942c5c7150dbeb10e0ce1f9a76e9c45a1d1bbe4\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.7.24405.2/windowsdesktop-runtime-9.0.0-preview.7.24405.2-win-x64.exe\",\n            \"hash\": \"77ffd490b614126debd79a3984df39cacfaa11049e4d209ccbde0e37e48f8169183b369c294b2f5b4e51ed1bee78ae56b4fcb794a663b6c4515248346f838ea3\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.7.24405.2/windowsdesktop-runtime-9.0.0-preview.7.24405.2-win-x64.zip\",\n            \"hash\": \"296cf946d83670772dc6794f1019549f59987cfc50cdfa4d04e756fc16174381249b15fc0dd2b154f17be0df2fc4e2b25f95601a238765cf29ad103033125b2a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.7.24405.2/windowsdesktop-runtime-9.0.0-preview.7.24405.2-win-x86.exe\",\n            \"hash\": \"7eb2c020a8849ff267e6bbe441913773d5a1e8cdb4bcd81bccc73d424a55f398ca4228fcbbd48e191d333d4a6a0b37ed7a4db03edecdd19262dc3f0cbec77d03\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.7.24405.2/windowsdesktop-runtime-9.0.0-preview.7.24405.2-win-x86.zip\",\n            \"hash\": \"d29732075a45d16dfde9c02957ab2532053721c9cf3e41f37cd59afe866ed06138d82b1aa94668f0f0697abd07c983a309e6f79aac9f0b17a8470cff6be8e281\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-07-09\",\n      \"release-version\": \"9.0.0-preview.6\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/preview/preview6/9.0.0-preview.6.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0-preview.6.24327.7\",\n        \"version-display\": \"9.0.0-preview.6\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-linux-arm.tar.gz\",\n            \"hash\": \"8a3d23bdd25b69599c9ac6009c76bbb66af2b1312121da4951266630ffd3a31e91b6479ec1324814a1dcd850d145d47f03f3debea9e6b6d1292573824c239f6a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-linux-arm64.tar.gz\",\n            \"hash\": \"755961903291c262a1f5f7b70543016c8f85f6993e861a6f83f8509fd2a828f4a34f4161a3b9f15114663e8073b37937748befeef9ea9818d513aea1b27f944c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"cd49793061602577d7d1017c2e0f43c205bc48eff50b9234ff8a56d2a873ffb1167429f5f132e5ac201a460efeed83c82c404e47ae87fe336970fd04b3cff697\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"643fcc319138f31bb2cc7e7896e14caead677e16fa79b2d5031f339103f2bb5dbb9994485ed24281c93ecd32bea179861330c69e75d03db30a58d46fc932dad6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"7c477a29faed51ea6bc01a1314b3c8d5907d41b2bebce28b52db453722bee703e3edf167e3143b316eca572a1e976619f3925cfd965953376cda38157e9395c1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-linux-x64.tar.gz\",\n            \"hash\": \"09aa8c4e6ae3ada1a265a5cd2b46779a763163e4dd9a1892b44606b89cf147339e10b7c584dbcaf5404af0553f0ef6c5801436c217f4fe1a5d3bdb6d74aef1d1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-osx-arm64.pkg\",\n            \"hash\": \"6c04ea05763dedf173f374d7aac7b12749880e6c5e3e4b08dbfacc5b3a94000d409912875b5fcbe9b8b3e4e8dade7bfd2c81cff5469154e8aadf28abe70fcdd9\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-osx-arm64.tar.gz\",\n            \"hash\": \"9f038f1ddf51a6fdb96081932c889d63d9ee818de8b5e71af905ede052c17bb22293599baaf9295f42e560d8073d41785507f752fbba316b446664fb762a60f7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-osx-x64.pkg\",\n            \"hash\": \"b15a5a018dfcea34ccf1999826a16a6fab2688402bca889e5a19b57985f48bdcb1bb552908a98b14fb589ce7536e19ff7dfb98a6c05f31ec3a24d39bf2f38697\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-osx-x64.tar.gz\",\n            \"hash\": \"53d7fd172cc4bfd0a380847b7d38cfdab03f469579458e3c7ab26dbad82b54a663261b60ebc35009f232509e486657ebc4b8516866016510f66e9a3fbec53eb2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-win-arm64.exe\",\n            \"hash\": \"bc144ecf6a370c4885663513571ec865aeffac1ceb91f4b089bf5e6c39819c27577f9fb1dce5991952e2fc38d2a29eaddb851e14b4aa7b670934f6f9fefda39f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-win-arm64.zip\",\n            \"hash\": \"0fea090b348df52be11c7053429fd82227e5d5093ab758c756f091ebb2c1f6e47086bbb8a23ed1d6eb97b6b4960b0b67639ea6025b2d516e1e30f7cb458b3ead\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-win-x64.exe\",\n            \"hash\": \"3610d07f38263fb7a3f107b0c7a3b859f08103ec3eec7c9256e90f68313de9d88f306041e2eb79fcb4085152b86d8a6ca100e56aa7cb7a8e87b8c3cc08f12032\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-win-x64.zip\",\n            \"hash\": \"0f54db8195bc2082feb9895be1effe9e5beaef9158f18570dac752877177ced94bc8b2da12468dd3076d8ca5c573aed032bd47de589d52841adbdd27eb9c3b2f\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-win-x86.exe\",\n            \"hash\": \"bfbbbd3ff343b621a573a237468ae93e0ce186347b9147470c40dc938ec675fc6c16483753317062d17c404efb226d22a924e72d67bdcb649346453d36a063ba\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.6.24327.7/dotnet-runtime-9.0.0-preview.6.24327.7-win-x86.zip\",\n            \"hash\": \"09cc78ee9c8fa1da7415d007e541ad674b1a103349ff7467fdeb18483791fca6268411646ee1df030a136dc66f73473ccb020a65d48186ff557f701ef11bbdf0\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.100-preview.6.24328.19\",\n        \"version-display\": \"9.0.100-preview.6\",\n        \"runtime-version\": \"9.0.0-preview.6.24327.7\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-arm.tar.gz\",\n            \"hash\": \"9e57776a5fbb257e39318d485d02ec7a0b07c680cc6cf9dfc8a6cbebd98c6eb70f39131c3bdc1ea1a34a4df2c9cc9ed4f512ee4be8156f3ecd9f36c32e371e77\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-arm64.tar.gz\",\n            \"hash\": \"f4822637ed89f856736bb947cfc1fd4f1c81452016884cdf10ca9ac97c36d5bf810316d534263b3219843096fd5ffc15972714041f85caab243efb5fb910d7fe\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-musl-arm.tar.gz\",\n            \"hash\": \"b3e1bfb0f46c5d49fb44a38bd1725cf6cf2660f34ee3457fea7b73d477f41b686e34b363ebd5000e2d8e16e49f9fb800721106cf5546fc6c4f5fefccaa2ad955\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"49c15fb243534f54bf2711bc10b5e233acd2d76459110f87e9e756fb312f63a6ac61bba106028a73a9f76563230eabe66fc0c03a8dc8e82922231c333e8ab87e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"6e57001dac6b78de5976529543709b05d5cf57790a72904c72ad35215646a03c9f1219aeb6c4e979a7a86d6ca20f65b4febfe87f12291f61b52704291d40ff87\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-x64.tar.gz\",\n            \"hash\": \"ff040c456b096aeac707053517d5f9f5f0df92b6754a4af6b6fe635fd8f4a569589b8241cbad0c5db998dc5bc54682b2f1e4dc4f3d88024a3ef56c1ecc9f4c97\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-osx-arm64.pkg\",\n            \"hash\": \"a323f9856ca9ac447d0a34f7aa23fa8d3360b8db2ac63bc882227eb1bccb927f001879dd77dfa61ee9b5a188569f98c3f4139e7dfc2bcf0cf33b6d8db0bdf8ef\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-osx-arm64.tar.gz\",\n            \"hash\": \"0aee16fc9a8e9729a5016d12e656ea2f8f0703116a778d3e33cc05c7f2d9870239fb3a0f4e5d7152cd7d6942c41853855fced70f777cbb7d40b5a3e03da2b4c8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-osx-x64.pkg\",\n            \"hash\": \"ae2437e7450a2f001e380ef61bb2dff22ffaf087452dae2191122c5a3621b92751c8eed7a7a3d231d3ef7ca3189bffec6637e6f9b675ddb097c98b928445fd45\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-osx-x64.tar.gz\",\n            \"hash\": \"db4e9122cb0ba6d4560a6396cef194735ad41c22ee8cebbfedd41c7b8eca049209e9eedb5013927d6a1f76fea134b78e637c0b3d02523fa7f7a7d4311a059c18\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-arm64.exe\",\n            \"hash\": \"9ce4ef04fa4d9e4e7872adc104f54060761c2ced3f6c2a866f345cf2f36fd8ef5b044025afea64534b5faaa8ab5a3d81724b81ddcba6141818977a40c906b39d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-arm64.zip\",\n            \"hash\": \"d67792819626d5292fce195e57a541078e604f012d706f71b0eb3414249d32c8ab8e85ee46065c5503fc3d31601705d30543883876c862e95c2c31c032474eac\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-x64.exe\",\n            \"hash\": \"c13e4012dccb0037bcd7d48593947765a5faa05a2181bd2a3a7e32a5acfc74fecb251f602652d82410fb10b8f7174bf444e5a50dc226f137f0b1ced6a31976e5\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-x64.zip\",\n            \"hash\": \"cc4a5ecb76cbb5efbe229f8154451d6866e2157f4124fedf7588706b8a356babb0c1f1007317336803bf9674a988f2f6ac7e359d6390521ce4bd355fcb6831c0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-x86.exe\",\n            \"hash\": \"9ff4057a1c5e7b5fc088415244ea795462f708ba6fff4d68bd6cc0e2cb7d10ecfd7ad2b6157999e1a815cc6ba01fc816c9ab5a15976eccc2f5adbd7c815ef8bc\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-x86.zip\",\n            \"hash\": \"50587f8d0f40cbebc6a56eb5045a458e4f78f26a76c9a98313832ac6aa623120e72eb3028b39babeb635efc9518716bbe246f08339a5c75ff8b2453a32e22b7a\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.100-preview.6.24328.19\",\n          \"version-display\": \"9.0.100-preview.6\",\n          \"runtime-version\": \"9.0.0-preview.6.24327.7\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-arm.tar.gz\",\n              \"hash\": \"9e57776a5fbb257e39318d485d02ec7a0b07c680cc6cf9dfc8a6cbebd98c6eb70f39131c3bdc1ea1a34a4df2c9cc9ed4f512ee4be8156f3ecd9f36c32e371e77\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-arm64.tar.gz\",\n              \"hash\": \"f4822637ed89f856736bb947cfc1fd4f1c81452016884cdf10ca9ac97c36d5bf810316d534263b3219843096fd5ffc15972714041f85caab243efb5fb910d7fe\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-musl-arm.tar.gz\",\n              \"hash\": \"b3e1bfb0f46c5d49fb44a38bd1725cf6cf2660f34ee3457fea7b73d477f41b686e34b363ebd5000e2d8e16e49f9fb800721106cf5546fc6c4f5fefccaa2ad955\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-musl-arm64.tar.gz\",\n              \"hash\": \"49c15fb243534f54bf2711bc10b5e233acd2d76459110f87e9e756fb312f63a6ac61bba106028a73a9f76563230eabe66fc0c03a8dc8e82922231c333e8ab87e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-musl-x64.tar.gz\",\n              \"hash\": \"6e57001dac6b78de5976529543709b05d5cf57790a72904c72ad35215646a03c9f1219aeb6c4e979a7a86d6ca20f65b4febfe87f12291f61b52704291d40ff87\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-linux-x64.tar.gz\",\n              \"hash\": \"ff040c456b096aeac707053517d5f9f5f0df92b6754a4af6b6fe635fd8f4a569589b8241cbad0c5db998dc5bc54682b2f1e4dc4f3d88024a3ef56c1ecc9f4c97\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-osx-arm64.pkg\",\n              \"hash\": \"a323f9856ca9ac447d0a34f7aa23fa8d3360b8db2ac63bc882227eb1bccb927f001879dd77dfa61ee9b5a188569f98c3f4139e7dfc2bcf0cf33b6d8db0bdf8ef\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-osx-arm64.tar.gz\",\n              \"hash\": \"0aee16fc9a8e9729a5016d12e656ea2f8f0703116a778d3e33cc05c7f2d9870239fb3a0f4e5d7152cd7d6942c41853855fced70f777cbb7d40b5a3e03da2b4c8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-osx-x64.pkg\",\n              \"hash\": \"ae2437e7450a2f001e380ef61bb2dff22ffaf087452dae2191122c5a3621b92751c8eed7a7a3d231d3ef7ca3189bffec6637e6f9b675ddb097c98b928445fd45\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-osx-x64.tar.gz\",\n              \"hash\": \"db4e9122cb0ba6d4560a6396cef194735ad41c22ee8cebbfedd41c7b8eca049209e9eedb5013927d6a1f76fea134b78e637c0b3d02523fa7f7a7d4311a059c18\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-arm64.exe\",\n              \"hash\": \"9ce4ef04fa4d9e4e7872adc104f54060761c2ced3f6c2a866f345cf2f36fd8ef5b044025afea64534b5faaa8ab5a3d81724b81ddcba6141818977a40c906b39d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-arm64.zip\",\n              \"hash\": \"d67792819626d5292fce195e57a541078e604f012d706f71b0eb3414249d32c8ab8e85ee46065c5503fc3d31601705d30543883876c862e95c2c31c032474eac\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-x64.exe\",\n              \"hash\": \"c13e4012dccb0037bcd7d48593947765a5faa05a2181bd2a3a7e32a5acfc74fecb251f602652d82410fb10b8f7174bf444e5a50dc226f137f0b1ced6a31976e5\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-x64.zip\",\n              \"hash\": \"cc4a5ecb76cbb5efbe229f8154451d6866e2157f4124fedf7588706b8a356babb0c1f1007317336803bf9674a988f2f6ac7e359d6390521ce4bd355fcb6831c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-x86.exe\",\n              \"hash\": \"9ff4057a1c5e7b5fc088415244ea795462f708ba6fff4d68bd6cc0e2cb7d10ecfd7ad2b6157999e1a815cc6ba01fc816c9ab5a15976eccc2f5adbd7c815ef8bc\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.6.24328.19/dotnet-sdk-9.0.100-preview.6.24328.19-win-x86.zip\",\n              \"hash\": \"50587f8d0f40cbebc6a56eb5045a458e4f78f26a76c9a98313832ac6aa623120e72eb3028b39babeb635efc9518716bbe246f08339a5c75ff8b2453a32e22b7a\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0-preview.6.24328.4\",\n        \"version-display\": \"9.0.0-preview.6\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24180.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-linux-arm.tar.gz\",\n            \"hash\": \"592961f315d2ec54687c5c4f2a6a15eceea2f5eb7b4e3614adf777c395f611a280b454f43f98f528a1b4a96cc8514b2dcdf22bb30ba6cc182c40fd07f50ae7b5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-linux-arm64.tar.gz\",\n            \"hash\": \"55e5ea839ddf9cb40d538af961e26959a2dbeaa2dac5de3c85ea50b15927fd5f132ce614e2e4abeb2c8f46f13902cc5f04591f4d12196ae0f8761822e107972e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"836212e6c83f790096bcbc131f7bea1175a0ab17898c8e872e88bcb0e27b52e5f94cf27dcde815e54e102610cf2d002ffed4f325da815d3b6be416d2425f0d46\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"f7e0e8c258d4199c3e79fbdfd12f2ccd02cf57afa9bd53add921f40e05bf300c29dde18589eb446e1a13fb0833eabecf46fe15ce04fe5cba915fcab6ad1091ac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"c95601ea6775f229a7de6daf8ae92b947ae7942b134de7cb7073eab22114c940738b44273f6ddaafbabc5363c9f4cde1eff7423781b5a821eb9b0aa2535a3952\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-linux-x64.tar.gz\",\n            \"hash\": \"4e178bbd26c70a3f1690c2b84b01c5a43cbf546adc878617fdf4c39d10e8063684420126261aacabcaa7f72c697290c1c06d3e93d9f3babe57c72d5fe98346fb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-osx-arm64.tar.gz\",\n            \"hash\": \"181c501df6e92ecf85d4c81df755eb06b1734d1814653818164175977a40ac94044341d97c8d40b185dd70685eb55212e9fbb93c4538dbc48529433a336d6af2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-osx-x64.tar.gz\",\n            \"hash\": \"b80a2ab4ed45878a7817fb0a60da2e1a0f1a4f4477e8e15a6245e5b94fd4cf4fb57dc57a6daa9c8256648e42f1d33a7680a4b8b8eeb41a0d4fcd020b0e216e06\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-win-arm64.exe\",\n            \"hash\": \"17d77898cc0dbe726ed9db15903e1698f6a768b20a44409fb2f3527d5604f57b500fa5185bdc18932ce578406a887ee3fab9668866ff548ee8ad3a07d4c3c9cd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-win-arm64.zip\",\n            \"hash\": \"87db6953ae3919633447cf598b449b1bfac80c7a1ca8be1cd573076a90de0e67e312180804a27b487737fd75b42a77bedac0232c5e399b1a5c5acddbea834d7a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-win-x64.exe\",\n            \"hash\": \"27b9c3e84415ecb777d1bd8e2521825f9983a35ae1f3f0f17b9178d3012c805f65d9789644c3bb1a18731b33e5d760ab433984268d07c7b5b20dee42d65971ca\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-win-x64.zip\",\n            \"hash\": \"6fbb3aee8c4844b0d578edadb4f4120b4ddeaaee1f5925a7c986746227a50a7586993879b338e93e932c7bc2145285e096e67cab374a71b5617e1ad1111453c1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-win-x86.exe\",\n            \"hash\": \"fd935802e478dcf3bd539b41b280d008a06c605887d6515f8a659291a592a003cd0b9c19349e5b96da36c8eabb6b2e2b9b7cabd3c12b0d3f44df1d7d05b063b1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-9.0.0-preview.6.24328.4-win-x86.zip\",\n            \"hash\": \"c6ef82bbb4cd033183bc4e7938590ff595721e59cb80ec38a5b9d3985822972a027e1b18cf880161830a78e6b5cb3faff29ea71439fe4db6385002fdb4e5589c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-composite-9.0.0-preview.6.24328.4-linux-arm.tar.gz\",\n            \"hash\": \"7ba1c3965913cc462dd18e6076b0bd5b2060afcaa87da015036c4a855fd49a651c32c230963a610c5142a2d6a3d845b1d766df5273cfee78b20550c9d35ba61d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-composite-9.0.0-preview.6.24328.4-linux-arm64.tar.gz\",\n            \"hash\": \"4f400682bfdbb8644462ef49ed267142fca9b0823b80bddac759285b3eaa5e71a03d79e3d7bb1fd2264dfe68e40e9e647e619e0d4cdab24e18fd1bf7d8914c36\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-composite-9.0.0-preview.6.24328.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"bd2d95e485d363156931c7fd451937e88fab482aa1fab8d2425bd2b02192afb1513289ee7b121850f82ab19aaa66a952aeea69deb5e5806321f02ef22ca338ee\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-composite-9.0.0-preview.6.24328.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"bbe4754055920ecbe0dc4f16347834be3b5cc4fc8903e4ca9b520dd166dd02696a03ad6dd0a266f836d2cc437eed3c4cc372497f8321deea49733f7a690c13f8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-composite-9.0.0-preview.6.24328.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"519569f665d13409fdc9444d17ff9cf77275ebc4f0a6b29c290b70c51ca1be60ab557962b4ed118567956b0aa29c6bf84e74845b62ebf47e579174c44143b4b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/aspnetcore-runtime-composite-9.0.0-preview.6.24328.4-linux-x64.tar.gz\",\n            \"hash\": \"30249d6228d37f5a76ea75a130afedc71c62b7e7618474dd25aaf87734bdf39758bf4ba318924e74e3d955cf511e6b537f016cb88a30685fcd00e783aeb0ecef\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.6.24328.4/dotnet-hosting-9.0.0-preview.6.24328.4-win.exe\",\n            \"hash\": \"5820ce5df0099855ce078b8f7c2039f6680afa9f3a7374d20d33624a0774026533b98cfa48b9d846257a8c1b17fb5e843476d23c6b49687b412270a4b670ca04\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0-preview.6.24327.6\",\n        \"version-display\": \"9.0.0-preview.6\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.6.24327.6/windowsdesktop-runtime-9.0.0-preview.6.24327.6-win-arm64.exe\",\n            \"hash\": \"8f5d4d070541105ec838e79ec36e097e281ebc7f947fdada663ce8f91ea1733f4c25b711bdf90ace632135ff1b44c6ab4d06fd19b5ce5c860a2f36f33a0562ec\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.6.24327.6/windowsdesktop-runtime-9.0.0-preview.6.24327.6-win-arm64.zip\",\n            \"hash\": \"8c263fc12fc160eccced8069fff1e8d12d96a25dffd3402b35de7bd5ddab7591562445e4f05f82f49d7b989777e5b4496fa7593faa96e6ad9095cf79431831df\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.6.24327.6/windowsdesktop-runtime-9.0.0-preview.6.24327.6-win-x64.exe\",\n            \"hash\": \"88a39af22ef1e01e9161db019daf35edc2ea8a9bd359a4e10f9b9053bcd81babdf8867f2cffb43508914991648605646a3ad9c7d6e23e08d6010e9d64e573d28\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.6.24327.6/windowsdesktop-runtime-9.0.0-preview.6.24327.6-win-x64.zip\",\n            \"hash\": \"e16afec8e8615de42d766e3ba1c4318458c6cb1c9a08e60cd21eab32f36a7cd10acd942c05733e29a1997355155f7f188913da39cb4646e2d2205dc0b36a06cf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.6.24327.6/windowsdesktop-runtime-9.0.0-preview.6.24327.6-win-x86.exe\",\n            \"hash\": \"79b565fed3bcc8eed6e430dfd162ed59a8c6d9d8e860cb3ce9ed9237a2cf654310527d7667fee891cd1cc9c103e81fb6bceb23e08e8512c0dae7edf57d49a277\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.6.24327.6/windowsdesktop-runtime-9.0.0-preview.6.24327.6-win-x86.zip\",\n            \"hash\": \"076f7760efdb5c9123dea168bdebfb714b541b817f93b8ca73f6b91137ac90b71110c954721b1fae004de685c75eed4b50973b304b873b997d0698516c5ee91d\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-06-11\",\n      \"release-version\": \"9.0.0-preview.5\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/preview/preview5/9.0.0-preview.5.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0-preview.5.24306.7\",\n        \"version-display\": \"9.0.0-preview.5\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-linux-arm.tar.gz\",\n            \"hash\": \"0aafb3386223e1d06e6e2e92255a198a10780f9be82fe430f3a0ae450a145f8b266e1075825a9b20392d0741a226d6552ba3c06acaca11f4d223285e3794a651\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-linux-arm64.tar.gz\",\n            \"hash\": \"8e49eb2e279684c665031e04c915d63c19e617bf44194655374c957bb13d7f22c8c0e233196711c029653958f98788732e1bbf200d22fad27f76523d7506a91e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-linux-musl-arm.tar.gz\",\n            \"hash\": \"62aa5ac3fb049900dceb7eda01fc6d0392291ce15a26435c5ce502c0dac607d1d38c29864c3042838bf82da0294b10ff245211bac51f1c3a21e05eed8ec5a290\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-linux-musl-arm64.tar.gz\",\n            \"hash\": \"d81305d5715c84ea1c424102714198f974e977ba24b5f40ed38288c38b3b0d2ff55f0c4803a9535f8b4f2c1bc3456fdce94a30b9ba49dd02ebf4c259a80fe48e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-linux-musl-x64.tar.gz\",\n            \"hash\": \"8c41a36a84bfed4b74a20329566146558bb3cf4ba6b9aec56e93a1c7c2439a7a3c54dc7b152b1c822a6067cc7806557958c6f6389d535a83205651d9ed80ba51\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-linux-x64.tar.gz\",\n            \"hash\": \"6d5a313eb3213bca2ac209021218d978a7d8291041f4572780dfb48b5ccb7efe9ace509c75dad1db8e6a427c0bd5e4b2596c3e9f66eec5df4e717a66f8c3d7fa\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-osx-arm64.pkg\",\n            \"hash\": \"e1eb051ebf5e909c89dd24409a7ea888661f59600f97de0835aa01a4f443f21b7b9cd103c64f659778c4d5396582f4ecefce7b4fea91921f0f3d9b3e6a40f121\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-osx-arm64.tar.gz\",\n            \"hash\": \"7c61293b719016dc8212e5564a80a3686a6947d220e2243438616559995c2d415629bf583148513d0691325ebdac91b6a13cbf4d37d7328426b73989edd8ef7c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-osx-x64.pkg\",\n            \"hash\": \"c07849bc1360081e99c76b389bddede1a590ab0cedef5f53eba70c65a8eb6eab4e25ad5f0596ecd65ae1d55361164b2c04c57c22964e60ffe7b1cbb034c7dcf2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-osx-x64.tar.gz\",\n            \"hash\": \"617847ec35016e4c51359fb8585563a432b8a9ff2c6656d6c10f2e3db70c20dada36509a73b31622c91ccfd5246f51c1c0df79852035f65521ac3f78943f37ca\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-win-arm64.exe\",\n            \"hash\": \"1ba7123b16b25b6b04c8fde6b0c1e8298453cdd60c0a43b43374c8612071fd4939cc0ff62b6179b28dac654bbdcf2e81da3e249893718d41145b0d7d62f9f4d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-win-arm64.zip\",\n            \"hash\": \"d29287f4fef0999a5bc8aacbe327e374b83720d0f4c97fd9886e7e2f1f298b41d9ec3ba0d98f866ec63b6a25644a74a77eb291397a6d8f51b0e0a5920e98ded2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-win-x64.exe\",\n            \"hash\": \"9f8e928c896edc6807639286eb4d064ffa931a4a9c4cf166e6e3969ec5f3f2325a376810a8842376d9ef22fd832ab94b95772faf438593c37730b23316cce290\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-win-x64.zip\",\n            \"hash\": \"078864a20e4efe15aa1008bcd1696474dcbeca721e1c2d13dd8f11652630cc1b7adca74591fe910424c56e565fa499785eb882ce3889b87d476de0181dc71e83\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-win-x86.exe\",\n            \"hash\": \"49a755ac3c9ae403290856a2255f5574d180f29a5c3b6d5def899fd1f72adf886b0f051e7c73c02f56c021259b3d02d416d4f5531f87bf8f7adc2da58d6ff1e0\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.5.24306.7/dotnet-runtime-9.0.0-preview.5.24306.7-win-x86.zip\",\n            \"hash\": \"7b23fa2374bc68a2288e410a0a2c96e9b69c814f0f801b3ef68f8f49aadad26cebf20a1199dd415ac73670891124b5ac354131c03ac3b1f4921fa6c48706c86b\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.100-preview.5.24307.3\",\n        \"version-display\": \"9.0.100-preview.5\",\n        \"runtime-version\": \"9.0.0-preview.5.24306.7\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-arm.tar.gz\",\n            \"hash\": \"39b94bed670ffe0abe0482222cef8d706995ee00531e077b856c6cc600cecc81bfe34c1d0cea3172796b694fecd150f350e08d2884e237dfc024d942667b1676\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-arm64.tar.gz\",\n            \"hash\": \"3c6f7e6f2f56e86bc8a9633f50129cfa992c52c287dc89551b23cd62fa471199e90392eba7414659c8ff8eecf1dad04016615a98cf85f6c2045d61f6f14c9e73\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-musl-arm.tar.gz\",\n            \"hash\": \"347dc481e1c752e1560ac856d3dfe53b78c42e5c70d7eaeae820329a03a46b2ae9aacfa150fe8a8e141b82ee79373cd417c99f75166ee036cc5943fcb358db5d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4a98db47ab702ad98b647cdb4db2e429d41a8759c174c0b8ff16b98644feadb9b094d268701b4b8a0651e795d63971715231d36caeee197a24d7298081a20cd2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-musl-x64.tar.gz\",\n            \"hash\": \"085a930d44dc9c8048af4bd3cd0b370b4b8a8abc10393d118fa9594812d23cc37cd3ca56c5bbe35bac17c83885c411e32179fd689c350d59de09a8c8724b8bba\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-x64.tar.gz\",\n            \"hash\": \"13b9934b3e7b736ab802a8c580aad95ed4dff6b8f31047c71ce9ffcf4d07e55105d4b0170d309551707b9d232d297cb305c67ed5b5f7026f47ec072ee1bbc121\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-osx-arm64.pkg\",\n            \"hash\": \"c578766dc35c61bafeb6ab07e70b6e6664504d2e5560bc37aa50fc75690dac485bb635c86d9264670717a04514787a0344561ce428e30e25e17f820fc2cd8d09\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-osx-arm64.tar.gz\",\n            \"hash\": \"8c1a13d14f2502d3897871f82abd2c2df8cb41ff9d754e79693b99d0780deb910dad7486e05ec065c4a38490de00d251c64b0b2a734863e0a452f0ed23b1e1a0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-osx-x64.pkg\",\n            \"hash\": \"c82ca4055e7d2d8cae3f9a9924a9fc05392f3b58a5bf4b690efc233d61c061e185f2b125967733bf69936d5db8b1a4d06dcbc3c1d28d3bd131edcedf780a2697\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-osx-x64.tar.gz\",\n            \"hash\": \"ebb84f920a7bb663238a10007d784a7c90f66d073089371fc2c9d5556cba945918fd8b193e02eb3d889676952b79616398aa2555d7d46d080088f01f67ede43e\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-arm64.exe\",\n            \"hash\": \"a8e398611736c4a5a20402b2cb9de2b3320319e03b0904182f258d095523299c7c2ff6774df9301baf1d8bb4e1f5ae0985992ef21c89ef668f291db3f1dafb77\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-arm64.zip\",\n            \"hash\": \"137ae59e968091bca5316452d4345830b5743578a65167d493d3b12242f54d6cf40181471236060803a3e29e51bed254b86dc436582bece8915666dd0193cc0a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-x64.exe\",\n            \"hash\": \"911abd43eb7b7b49eed69304dfe2e0fab3360bf7e72d5e421b2954e1f6dc33e9db7dd4bf357382e57d71b663c3bf242284592a4130c9141d9c782e602edb6779\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-x64.zip\",\n            \"hash\": \"297797f709933f435021be0068bdf9e7051e493d60212c29a9746cb5e6672ee8f2f6a2b2c214f1d4753e87e449faf712f60edc7c4eb32d34e555dee07c8a04a2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-x86.exe\",\n            \"hash\": \"2223918e2b3bdc3623a7ff323ae5c930da47408c1276035c10408de80a65c9220d9bcab79435690f9d0473e60939935bd5ce77a532486deb89b26b9e9b4417f3\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-x86.zip\",\n            \"hash\": \"8d167c0926d6d3aaa7739c7417039b9be27aefa4b7f52fef3c6503173d3580dbda6e688bd68716e07441aa072d9bc94faaa34651c2ff0b57a06fec65a8a81260\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.100-preview.5.24307.3\",\n          \"version-display\": \"9.0.100-preview.5\",\n          \"runtime-version\": \"9.0.0-preview.5.24306.7\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-arm.tar.gz\",\n              \"hash\": \"39b94bed670ffe0abe0482222cef8d706995ee00531e077b856c6cc600cecc81bfe34c1d0cea3172796b694fecd150f350e08d2884e237dfc024d942667b1676\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-arm64.tar.gz\",\n              \"hash\": \"3c6f7e6f2f56e86bc8a9633f50129cfa992c52c287dc89551b23cd62fa471199e90392eba7414659c8ff8eecf1dad04016615a98cf85f6c2045d61f6f14c9e73\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-musl-arm.tar.gz\",\n              \"hash\": \"347dc481e1c752e1560ac856d3dfe53b78c42e5c70d7eaeae820329a03a46b2ae9aacfa150fe8a8e141b82ee79373cd417c99f75166ee036cc5943fcb358db5d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-musl-arm64.tar.gz\",\n              \"hash\": \"4a98db47ab702ad98b647cdb4db2e429d41a8759c174c0b8ff16b98644feadb9b094d268701b4b8a0651e795d63971715231d36caeee197a24d7298081a20cd2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-musl-x64.tar.gz\",\n              \"hash\": \"085a930d44dc9c8048af4bd3cd0b370b4b8a8abc10393d118fa9594812d23cc37cd3ca56c5bbe35bac17c83885c411e32179fd689c350d59de09a8c8724b8bba\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-linux-x64.tar.gz\",\n              \"hash\": \"13b9934b3e7b736ab802a8c580aad95ed4dff6b8f31047c71ce9ffcf4d07e55105d4b0170d309551707b9d232d297cb305c67ed5b5f7026f47ec072ee1bbc121\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-osx-arm64.pkg\",\n              \"hash\": \"c578766dc35c61bafeb6ab07e70b6e6664504d2e5560bc37aa50fc75690dac485bb635c86d9264670717a04514787a0344561ce428e30e25e17f820fc2cd8d09\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-osx-arm64.tar.gz\",\n              \"hash\": \"8c1a13d14f2502d3897871f82abd2c2df8cb41ff9d754e79693b99d0780deb910dad7486e05ec065c4a38490de00d251c64b0b2a734863e0a452f0ed23b1e1a0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-osx-x64.pkg\",\n              \"hash\": \"c82ca4055e7d2d8cae3f9a9924a9fc05392f3b58a5bf4b690efc233d61c061e185f2b125967733bf69936d5db8b1a4d06dcbc3c1d28d3bd131edcedf780a2697\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-osx-x64.tar.gz\",\n              \"hash\": \"ebb84f920a7bb663238a10007d784a7c90f66d073089371fc2c9d5556cba945918fd8b193e02eb3d889676952b79616398aa2555d7d46d080088f01f67ede43e\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-arm64.exe\",\n              \"hash\": \"a8e398611736c4a5a20402b2cb9de2b3320319e03b0904182f258d095523299c7c2ff6774df9301baf1d8bb4e1f5ae0985992ef21c89ef668f291db3f1dafb77\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-arm64.zip\",\n              \"hash\": \"137ae59e968091bca5316452d4345830b5743578a65167d493d3b12242f54d6cf40181471236060803a3e29e51bed254b86dc436582bece8915666dd0193cc0a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-x64.exe\",\n              \"hash\": \"911abd43eb7b7b49eed69304dfe2e0fab3360bf7e72d5e421b2954e1f6dc33e9db7dd4bf357382e57d71b663c3bf242284592a4130c9141d9c782e602edb6779\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-x64.zip\",\n              \"hash\": \"297797f709933f435021be0068bdf9e7051e493d60212c29a9746cb5e6672ee8f2f6a2b2c214f1d4753e87e449faf712f60edc7c4eb32d34e555dee07c8a04a2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-x86.exe\",\n              \"hash\": \"2223918e2b3bdc3623a7ff323ae5c930da47408c1276035c10408de80a65c9220d9bcab79435690f9d0473e60939935bd5ce77a532486deb89b26b9e9b4417f3\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.5.24307.3/dotnet-sdk-9.0.100-preview.5.24307.3-win-x86.zip\",\n              \"hash\": \"8d167c0926d6d3aaa7739c7417039b9be27aefa4b7f52fef3c6503173d3580dbda6e688bd68716e07441aa072d9bc94faaa34651c2ff0b57a06fec65a8a81260\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0-preview.5.24306.11\",\n        \"version-display\": \"9.0.0-preview.5\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24159.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-linux-arm.tar.gz\",\n            \"hash\": \"5f41868ee89d47b391968d7f01772e6c223ae12d7d86461d38972f56de8e6278ea0aaf723d736bb2f03ddfb7ba0627f1ce7f0447c62aa6b48854b5434b33da9b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-linux-arm64.tar.gz\",\n            \"hash\": \"6e6198d26b16ebae7bf7f7a428b0026d3c7edb20fa0acf844670a98cdb78a8b0d37cad5df22f35dc3379de8069fdc95318f5eeebcd5b03ad99cf595699116abb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"44628326e3efb241ee24e9a39abf6f4318d415d1977655d8fcdbdb8c61aa05f4b4c058dd8c0c52cf206c3979e5b5b2cad86cdb9f56e0a2b10bf2d9994ae8ebde\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"dfc4e8f082214ff796ca6b3c548b38b1e61221faa90eb96e1f19771f14197e2e4ee616057cd29b37addeba91098ba151859be8eb51015b1bc38113fe2d3c41b6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"f82ec65e016c0996b74c144c1a11de7d2f3bc8bf7a51f217d697fc8a019039995df23c7e64df1e98950ff5cb3a8f3c815735102288bd73efd1192a20f21761c2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-linux-x64.tar.gz\",\n            \"hash\": \"b4358041bfc42bf614644e7f3c38a4fb73185a8d3541065bfd6758622860b0d0addff6a7ab6e7439d029b0b54238864279d19f1b5096b5d7c0fd10c0435e652e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-osx-arm64.tar.gz\",\n            \"hash\": \"f6ed6cc22e20e986cf54ddd0c8868b524efcf84ccbcd5335bdb4ac44fbb08641850448aed5d85bcfd2d403b3a89a73cb932d73db1b590cfc704a58aa8ec79d5f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-osx-x64.tar.gz\",\n            \"hash\": \"104b0b8f216bd36710ee912c92c89c4a5be97774eb21cf090c5c12acbe3ff8a8ec22a2b2bca56feda8aa21690c734d5a4b8293569cbf45172ead6b587d3858fd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-win-arm64.exe\",\n            \"hash\": \"93c04f3dfd446180cf143d8839abba89f389b3def23489b249636cba3a7a032406066a0e6db67adb3f9a87897778ec11117599a6524b5e0b69b470edfee10314\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-win-arm64.zip\",\n            \"hash\": \"6f49d789c314b1f3ead17d2c9870f5255cfe53871418ba626946b4128bde87d24c7427bc9176d98c528f458a69aa11ec016bd0e4a23a8f129351dde43a84de5b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-win-x64.exe\",\n            \"hash\": \"0a1f2b3d84864c543fb1882eca2409730bdb8f661422e13d53f664d90b9133d1a651d095467e6881491f8326fd31ab533cff480352af2468e4369fa12fec5d23\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-win-x64.zip\",\n            \"hash\": \"b5d2160fb4af420ee73cb9205372518d9401333b91a1852758288b7fe9f198092ae4e029e4b49164d5c8303ca4c8fd0845280d70e2c79d5679ba6cec6c6045b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-win-x86.exe\",\n            \"hash\": \"1a209d3bcc4e29dc7afb0bb0aecc66e0762640030d89a32ecd61387c9eeb84f48147a095dfaef4b79c27d3b682a250e3f3de7776e7d0c95570d18f8bef41cdf1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-9.0.0-preview.5.24306.11-win-x86.zip\",\n            \"hash\": \"19d750ac6418996ae9bece2198ea576cba161bf5e4670f256ba2f17972f7bacbae35463bfbb40a32887739fa8b2dda906df395df150b356f2350e00279ad20bc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-composite-9.0.0-preview.5.24306.11-linux-arm.tar.gz\",\n            \"hash\": \"2b80333b0c8513ed18adfa715121290575c71e0101f920b8bc105d3d81ce3ba104a823d36a8ad5c871b6db42d1078b19f72979ca4e1225ff0f15980ab5aac5d7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-composite-9.0.0-preview.5.24306.11-linux-arm64.tar.gz\",\n            \"hash\": \"441abcf355a94f02929f3bb16899180ce3e253daebd7591696dd7f934e5d2033b341a1cb1944b06e0b205afabc3189432fdca26d89bd80f82db132d5589262dc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-composite-9.0.0-preview.5.24306.11-linux-musl-arm.tar.gz\",\n            \"hash\": \"976d8f04c387a42f107fd4a0c1ecef798cf1d3a3e961aa4f06bd9ddf08b15155cead38876d4cda60ec68664562d7883f03e642aadec32693c6a42265cfad4463\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-composite-9.0.0-preview.5.24306.11-linux-musl-arm64.tar.gz\",\n            \"hash\": \"ce547b2e4249f0028fb12b5d2f16560c959263874b63983797128ecc091099f374c89dd2386aaa8db9ac559114255932ccca9511378bc0a43db05e99408d333e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-composite-9.0.0-preview.5.24306.11-linux-musl-x64.tar.gz\",\n            \"hash\": \"abf43f18b74bca8a7e6e4c2faf136eae844012f6a1e77e886e2d5a414c0bfd450de6d0916a78951218e39f8c162ea5803a061e833fb73763e9c56ef821b684f9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/aspnetcore-runtime-composite-9.0.0-preview.5.24306.11-linux-x64.tar.gz\",\n            \"hash\": \"5273644b48020ae3cfddd4035f17b0499d9cb0bc253bf53b6332bba0e8460b1994f0a4d3ad7d644533d84fea481cc521294f91e9e28608b815d9b332de7fc075\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.5.24306.11/dotnet-hosting-9.0.0-preview.5.24306.11-win.exe\",\n            \"hash\": \"04a1299e7fbf65ad6587f58013c03cb557e34790193aeb98af95a29e26bf836649730d76060042b0a99566d85b02f4aa69a5558aa777865b087bd59cb6f8d836\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0-preview.5.24306.8\",\n        \"version-display\": \"9.0.0-preview.5\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.5.24306.8/windowsdesktop-runtime-9.0.0-preview.5.24306.8-win-arm64.exe\",\n            \"hash\": \"483b81fbada3d60b94c7bdd6163c04449243aadaf5805d0135ab732b9a2a7aaf1a271e6de37b0704b1586523751a30131ac42415bd841ffb4cf77d5eee9d63ed\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.5.24306.8/windowsdesktop-runtime-9.0.0-preview.5.24306.8-win-arm64.zip\",\n            \"hash\": \"d4b865cdcaf3e346b16eaabff77c4f2a911a408c37439dfdd4f632170dec2900b8745d0fc80fe8463ef25b768031c2b741663a8e02bdc930de56d14076996cc5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.5.24306.8/windowsdesktop-runtime-9.0.0-preview.5.24306.8-win-x64.exe\",\n            \"hash\": \"c294acd9d6b022193f12605adbb1cf8609990455990d46ed307a5b9cae2d0977b4e81dacbaa7539386059307b83e7f4de07c22644689f7df109346970bd569bf\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.5.24306.8/windowsdesktop-runtime-9.0.0-preview.5.24306.8-win-x64.zip\",\n            \"hash\": \"85e7a9465091f4bbe63c47938f042404e40ccf6b1f217713994fc67404a95607cb0664543cabc54b3aa017233243299139a1ac90570e36a0a3020bf9c15f141a\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.5.24306.8/windowsdesktop-runtime-9.0.0-preview.5.24306.8-win-x86.exe\",\n            \"hash\": \"0d406c96f0c38eb1a887bd7327c0bb4c75c456003098203b34100a7c64e06072e2d7b913714a9cd64f9fd727203f1b30f6aa51a99f40503b9da6d0a70a7fe1e9\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.5.24306.8/windowsdesktop-runtime-9.0.0-preview.5.24306.8-win-x86.zip\",\n            \"hash\": \"d3b44cdad9da672e4cd4480e2092f2492455b3e36f25782e323af9b79d29bd57997164c0395bbd10e4cbe8a8bcde63e021b8e64ef6a1fa8a3b137d276ec55d5f\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-05-21\",\n      \"release-version\": \"9.0.0-preview.4\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/preview/preview4/9.0.0-preview.4.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0-preview.4.24266.19\",\n        \"version-display\": \"9.0.0-preview.4\",\n        \"vs-support\": \"Visual Studio 2022 (v17.11 Preview 1)\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-linux-arm.tar.gz\",\n            \"hash\": \"9ecc3c6afdc445b0008d8f6bc7a0635ba6abc00ed0e5b66be3bc2e4a4da2579d0c1cce848635a5046a086f2c7154e3befeb9176219af7c8feadeb41a78b1ea5a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-linux-arm64.tar.gz\",\n            \"hash\": \"ce8c21b6c854b6772578e84d42e2df5f5144d5a15aff3e6d48953feb1aad517215b6349c20fc22542364a9c439fe19a562f070f88eabf14b5d95ab50fe1ecc00\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-linux-musl-arm.tar.gz\",\n            \"hash\": \"cd38668eb106653c9ce2ec62e8b0443f3c7c90105302afdf790153b19b677af6b931af5b2a836b226c54ab8b7f8609265f81c37653697ac15d2688cfb2261902\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-linux-musl-arm64.tar.gz\",\n            \"hash\": \"969aa069d1719e7dc0c5f1abfd13d3960e58111ecfd61cf557979ec4f3e30cfb2b9082250041bee49841ac5b40eef3f80caf921b63ea148825289ccfde582f6e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-linux-musl-x64.tar.gz\",\n            \"hash\": \"964110b4637ada5eb605aa035c30f4cde754a5ffbe26cb11b63d10cb6e0f3287e746662fb85c421c4c3b9b3a334755f59c123b65799b461d22e1d53c42ad496c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-linux-x64.tar.gz\",\n            \"hash\": \"b366a4f19f25281c5b325e737f8c9fe0fa97ca4e19e0e8f00cd42cac84f4134469d02558b07412c66cde62e53f1cb1a7efd68357713ce4d3e816c19ee538e9b6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-osx-arm64.pkg\",\n            \"hash\": \"247fca6bd0fcdb80cc4fdfee87520b2ae12c54eb8399bb625ba226cb845971d562037b37c2d507d4d7405976410929e41ab7f9bb02c17c66e080aaf99f0867ea\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-osx-arm64.tar.gz\",\n            \"hash\": \"f9e8188c71ab47631c28d3fb9314b382eec31ae5592a73eaf8c944fcdc240147ac23ef4530a871e9a5deaf311b84ac5b0d5a1f4b6ff22134a8f4eda4555c43a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-osx-x64.pkg\",\n            \"hash\": \"7efa0a175811039994d605e6ddc0aa007f28e17516230d335ee1a3af469515aff8ae681aed56a7fcaafecf52f17cd93d07bb7d0d4e219d14afd9e659b0e6358c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-osx-x64.tar.gz\",\n            \"hash\": \"9e7364e1448d98df03922bd315f788ce564dfcbec1a9e83c9e1437c22d8d52f72f061750de2f9e149e7662c168b7a781e7450d2c1e8b7f048cb62b360f12d6f6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-win-arm64.exe\",\n            \"hash\": \"6c3695d936ebfde747f5d656afe764fe2bcde551f2808e4018be4358f1a98e63cc91f340af6ec2f2370165a068eb12bb45f81e4e2d4d6c7ab916fa0c491e42e2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-win-arm64.zip\",\n            \"hash\": \"47e92441bdb222b3c69dab181504de00a1c89c75d9b42cc6b093c1ae81dc184fb962319c6cd3e6fc78835b27257e5799f04c6c8481ceee30af9163d97bb9f93a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-win-x64.exe\",\n            \"hash\": \"5b6865c131836c1bfb2b9e78c515b3ad5aab5fa5a7317d2024d216de8964b9e749a6878a43cbf8e1b8ed587ba4641011d5250c95f6b15c5e0a2c4a0bdf78bbfd\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-win-x64.zip\",\n            \"hash\": \"61ec667e4c6394ba21748a3529969e54ca514c37c42b5acca2a87dbf7f816d6c7c4add8962efa51db7b99a7177546ad439121c53053b5fe6e01763f77f42daf5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-win-x86.exe\",\n            \"hash\": \"5226d35e6325443448e2897a05394212a4b475025b5bf1e3702093f00daa05bb1a64be3a986114c528b1cbf7a50a3d358f8bbb5020451ca4e56aa61f6f977d76\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.4.24266.19/dotnet-runtime-9.0.0-preview.4.24266.19-win-x86.zip\",\n            \"hash\": \"df01e6fae6ec5aebda2ece30617bf9c4e04e105b4ccd8f3da8e790650e22c1333e5080a949f43814033fe60a2e8061be53c2923d17b2a31e61c6a0c77b726bab\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.100-preview.4.24267.66\",\n        \"version-display\": \"9.0.100-preview.4\",\n        \"runtime-version\": \"9.0.0-preview.4.24266.19\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-arm.tar.gz\",\n            \"hash\": \"3728477aaba64f03f28b4690caffcc90852960d7bb573cda142a49decc394ba38cd1090e7c00275d3f8e5af0ffd0cbbde04c27102cad72814d8503281bf1fe65\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-arm64.tar.gz\",\n            \"hash\": \"519d529c74a972484af49ea72053466e09fbfaec0142cd924705dddc117dc40901ac22ddcb11c05caf7b43ef8cf44ec8a0a9dd4c56fbd329b0f750513ae3100c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-musl-arm.tar.gz\",\n            \"hash\": \"952735f8b305ecf67f644acde4e5176a17399c4616a51a9a279d84763cb30ed67bac6b64caf2ed359f103794de5d4082d72da79f5fe5486b2f32a22e78893f32\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-musl-arm64.tar.gz\",\n            \"hash\": \"85e8caab9e74882fe4959f7078d7e4f736c0c2109b6167aeacec1518348945e093839774baf2a90163f8868ae5593912caf8477f5ac8ce20e0cca1bead066da8\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-musl-x64.tar.gz\",\n            \"hash\": \"5861ccc9b1670a134c6d76be3ba0aa3606c8c3c110cc8415d2015c921c86bc19cc6363e64f7a2f9a3dd261e042956e55d0c9c2e5410bcce2dcefe309dae631d1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-x64.tar.gz\",\n            \"hash\": \"28b63633a1e6f4078ccc60218b9f7b6663eb960f0ab1c41069ed8f7f67757fa22ce9f4c04d88b9015c417aad34a7a57986451682bd7aa7b966eda45ace23d283\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-osx-arm64.pkg\",\n            \"hash\": \"7d3ccf857593bfc53a60d6085d41b9e6afcb57c8e18e7e79bfc9d61bd269466c7c69cab4f3801496b1314bbaa134d6226b37493b01b70b20a8b4b7c6fa0bace6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-osx-arm64.tar.gz\",\n            \"hash\": \"3791e2134f7cae53c430ae5306f325eecb84058da07d90f276f8d4045701c6c85567472ffc2c535002bb3066817683c0a8e82d23ba6ce32a52f7217867db30d2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-osx-x64.pkg\",\n            \"hash\": \"a672acfbec52b2f636614a2cff682ddde5ecd8c82eab884608af1bb7ef508ef5bd202c25e31ecece7d81766ffae6c96b518841f215bb6361bbf66f45ca6c0a1b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-osx-x64.tar.gz\",\n            \"hash\": \"da35a51180e75a238b7a4b5d1a5b7e3e33f1a1c179b40957deee98c8e01a9bfade62e2c909d2e5b377f43cf2dc78687b34b349b27b2f8f841165c3c05b3fe443\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-arm64.exe\",\n            \"hash\": \"b855a6a68dd1e4fe93348d20a7940685ab46540a4037512d99e30269a9a941c8a740f71984876b876441597e2830aff4bc2940666043a3ba565016c491f982ee\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-arm64.zip\",\n            \"hash\": \"611c04fe90746c82c4902eb75a98e6219222cd82733388b79cc81fe3c9401ed261474e92993439e06efa6eec6230604bbb05a77a0894f030ea75dc22808d1edb\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-x64.exe\",\n            \"hash\": \"32eee5f12a564098fe19253a50260bffaad34fd92d7a2d10612993eeef0a78fc7aee051dff9c72738091f3c38029d4579886a626541f656e090497080ffce22d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-x64.zip\",\n            \"hash\": \"5abe780d515bf82692752d3defe6317bdd17171ddbd5aa9b769ba8f63edd713868c26b8735ba427c9f193ac0daac28c2cd87c4321565c3b2c4545b906f5c3587\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-x86.exe\",\n            \"hash\": \"2c3ad59a9e57b9a56aaf825f4eb23f90caffc1508c9bb5ef511865455e051fb65e2834f3ceb829931d6ee74ab81c52885c2c862d02c23a015593d6fc182030f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-x86.zip\",\n            \"hash\": \"ea8617ced22a2b4e0e048f3560e350cd720d5529776bd5cd5e165b139bf287624178870cdaad68e613a18122f3d2ca5e917c46ff8390a8a92631787e21a39243\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.100-preview.4.24267.66\",\n          \"version-display\": \"9.0.100-preview.4\",\n          \"runtime-version\": \"9.0.0-preview.4.24266.19\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-arm.tar.gz\",\n              \"hash\": \"3728477aaba64f03f28b4690caffcc90852960d7bb573cda142a49decc394ba38cd1090e7c00275d3f8e5af0ffd0cbbde04c27102cad72814d8503281bf1fe65\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-arm64.tar.gz\",\n              \"hash\": \"519d529c74a972484af49ea72053466e09fbfaec0142cd924705dddc117dc40901ac22ddcb11c05caf7b43ef8cf44ec8a0a9dd4c56fbd329b0f750513ae3100c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-musl-arm.tar.gz\",\n              \"hash\": \"952735f8b305ecf67f644acde4e5176a17399c4616a51a9a279d84763cb30ed67bac6b64caf2ed359f103794de5d4082d72da79f5fe5486b2f32a22e78893f32\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-musl-arm64.tar.gz\",\n              \"hash\": \"85e8caab9e74882fe4959f7078d7e4f736c0c2109b6167aeacec1518348945e093839774baf2a90163f8868ae5593912caf8477f5ac8ce20e0cca1bead066da8\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-musl-x64.tar.gz\",\n              \"hash\": \"5861ccc9b1670a134c6d76be3ba0aa3606c8c3c110cc8415d2015c921c86bc19cc6363e64f7a2f9a3dd261e042956e55d0c9c2e5410bcce2dcefe309dae631d1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-linux-x64.tar.gz\",\n              \"hash\": \"28b63633a1e6f4078ccc60218b9f7b6663eb960f0ab1c41069ed8f7f67757fa22ce9f4c04d88b9015c417aad34a7a57986451682bd7aa7b966eda45ace23d283\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-osx-arm64.pkg\",\n              \"hash\": \"7d3ccf857593bfc53a60d6085d41b9e6afcb57c8e18e7e79bfc9d61bd269466c7c69cab4f3801496b1314bbaa134d6226b37493b01b70b20a8b4b7c6fa0bace6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-osx-arm64.tar.gz\",\n              \"hash\": \"3791e2134f7cae53c430ae5306f325eecb84058da07d90f276f8d4045701c6c85567472ffc2c535002bb3066817683c0a8e82d23ba6ce32a52f7217867db30d2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-osx-x64.pkg\",\n              \"hash\": \"a672acfbec52b2f636614a2cff682ddde5ecd8c82eab884608af1bb7ef508ef5bd202c25e31ecece7d81766ffae6c96b518841f215bb6361bbf66f45ca6c0a1b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-osx-x64.tar.gz\",\n              \"hash\": \"da35a51180e75a238b7a4b5d1a5b7e3e33f1a1c179b40957deee98c8e01a9bfade62e2c909d2e5b377f43cf2dc78687b34b349b27b2f8f841165c3c05b3fe443\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-arm64.exe\",\n              \"hash\": \"b855a6a68dd1e4fe93348d20a7940685ab46540a4037512d99e30269a9a941c8a740f71984876b876441597e2830aff4bc2940666043a3ba565016c491f982ee\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-arm64.zip\",\n              \"hash\": \"611c04fe90746c82c4902eb75a98e6219222cd82733388b79cc81fe3c9401ed261474e92993439e06efa6eec6230604bbb05a77a0894f030ea75dc22808d1edb\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-x64.exe\",\n              \"hash\": \"32eee5f12a564098fe19253a50260bffaad34fd92d7a2d10612993eeef0a78fc7aee051dff9c72738091f3c38029d4579886a626541f656e090497080ffce22d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-x64.zip\",\n              \"hash\": \"5abe780d515bf82692752d3defe6317bdd17171ddbd5aa9b769ba8f63edd713868c26b8735ba427c9f193ac0daac28c2cd87c4321565c3b2c4545b906f5c3587\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-x86.exe\",\n              \"hash\": \"2c3ad59a9e57b9a56aaf825f4eb23f90caffc1508c9bb5ef511865455e051fb65e2834f3ceb829931d6ee74ab81c52885c2c862d02c23a015593d6fc182030f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.4.24267.66/dotnet-sdk-9.0.100-preview.4.24267.66-win-x86.zip\",\n              \"hash\": \"ea8617ced22a2b4e0e048f3560e350cd720d5529776bd5cd5e165b139bf287624178870cdaad68e613a18122f3d2ca5e917c46ff8390a8a92631787e21a39243\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0-preview.4.24267.6\",\n        \"version-display\": \"9.0.0-preview.4\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24138.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-linux-arm.tar.gz\",\n            \"hash\": \"e156c79c3e064e0d4ba2f2cb2fe53d2d427b2c5d62641e350278b31abe53e67ecd955de296b5e35f2e5fe491082fba8e09be67e1392874756be97487ab5a7994\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-linux-arm64.tar.gz\",\n            \"hash\": \"6f457cfc870a8ea3a8f9e5cbc6b4554dd98c7380ced6f4c6f05bf918545e22937b1c446cc696125e08f964f78dacb2215c0d9e42fdd86ea1c3a4a57af199dac1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"2cc4b0babc021c5cfa87ca25c1259485626b71834614f40468c6e1dac6468bba7585f2f0b373a42741be109653911fbebbac9036ace4e1f79e5b6eb8ca75b1d0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"02a4e69d6a627e80b76fa6d24d5f631420a92c83763bb65392a3b34d6bb24d24e24e49cedbaaa1b835c9815da8c01d64bb17b87aea8dd9771d80c6d99d5f1ecf\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"ac7c5caefd2285bf9e3d6d5afb6fd99e6fc23e534635cd3300acd043c042d21e0936670515a4e5d30bb58ef9503f9765787e4ff7bda675975dec5c9d46097677\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-linux-x64.tar.gz\",\n            \"hash\": \"ee65f640c894ac6e67589c40682b2fc215f2ab7037695589b9f92801073a0f8a8d071c3caf4608679f61e10830f02d21e916107f77b68c58e59b1f191ec8039a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-osx-arm64.tar.gz\",\n            \"hash\": \"2440f43ec72f5298679126527af6c1c410cc542a98ab4e0c5aca0ffda40d29b7dc52e1f1aaa869b2d5b86b7bcd80579bada8fe20d0ba9e48a64ea147ed3b4c0c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-osx-x64.tar.gz\",\n            \"hash\": \"614fc10a69d3c78a1b1478b1d49d1e5d7dcadb02b6edd1ece510b81075e19f6267a53c7252ee4cdba1c5df1353f17ad64a54a08459d3a3a8a4baf707e4bef7f2\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-win-arm64.exe\",\n            \"hash\": \"6e1aa5c31257030364e9140a6626e818f18f71f6cb3f14b7ae37f72200984069ad60020029bf3824ee46d1fbbe55d97b90f6e68cbac3d4060aed972c007ff536\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-win-arm64.zip\",\n            \"hash\": \"412daab92de5b9eb2a27c2b2146ec4e56f422b512b4b61cba0d96e34059f59116715e4eeaae30c59c8c6c57562262ccda353a589f47e969a5d61c0d0b6119e3e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-win-x64.exe\",\n            \"hash\": \"8864e666cf561f6ad1127d1add213293e4448fa83cdd589b2ae019346f29294d1ea12cd22f4939d0989435ab3f09c7493bd2466bf99179c2693bde9be4569c3a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-win-x64.zip\",\n            \"hash\": \"f57273459e202bf2ac7a1a2cefe7075a6400d6c8baf4da2426d76b488a5f935eb2b8ae6178c69d4b3fa252aed8b02453c2200d8f996555ac849fcb26839d8984\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-win-x86.exe\",\n            \"hash\": \"78f5e5f81f1e5af7f89dc608c0937498f23544627e97d443b6614e982ff707ae9276f64b2aa6213f09a5efa6e103a480df3477272df8b5ff0683a5d91ed603cd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-9.0.0-preview.4.24267.6-win-x86.zip\",\n            \"hash\": \"abd9d4c26dc916b8009d628bcb7d05d7688fd5ee2183adfca5323241b3b1a6bb299f383179659755c30197d14a33e1fb443e4acc26e0cdc79ace6e14f79dd8c7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-composite-9.0.0-preview.4.24267.6-linux-arm.tar.gz\",\n            \"hash\": \"45bd8e7829d00f37867fbd74e3801fdf69104db7c45e8a2e579059ef02e77ba96152a1073c7ce76ec33f2d88ddbaae92ad90dc21c741ec94ffaed8ecfcea3f1b\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-composite-9.0.0-preview.4.24267.6-linux-arm64.tar.gz\",\n            \"hash\": \"29acf67b87c29ea9e02ba05a48052ea323494d91c6c07cda8c82cca4704b60b12683fc05e8fde803fcbf00a2810d1e9581bd90125eb748a6b556b05b55f2e236\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-composite-9.0.0-preview.4.24267.6-linux-musl-arm.tar.gz\",\n            \"hash\": \"016b9e5efb3dd65fdd4a27b256cee6d10ae8541e26e5446dfec5c603f585555ac49e343dbf04db44efeb6ab5f973a2fb8ec253b6331bce3f6d5ff96c9ac80e60\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-composite-9.0.0-preview.4.24267.6-linux-musl-arm64.tar.gz\",\n            \"hash\": \"e7b353d80a12e91cab47d74e9d9624db5455a8cbaaf39c26e16d1f19dfda235a7598534c828c1c7d1ec8db85585aa8ee902267e9406e938bcb05eb1c97a5c81f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-composite-9.0.0-preview.4.24267.6-linux-musl-x64.tar.gz\",\n            \"hash\": \"bd6900bebedbc02cad6793f0ce25361591562118c205035821355522d1b0dd70143949377c02131d65a1bea536dc1ebcf310e4a441187b4159ac54e4be419158\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/aspnetcore-runtime-composite-9.0.0-preview.4.24267.6-linux-x64.tar.gz\",\n            \"hash\": \"4fbd2ff0a650bfc46fca485886aa53b17e78f1e4ea28ac2933429724a409b1739132d07be4da7c163a3713b73ec2448426921bf8ba8b3901d5b05998cc5a3f47\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.4.24267.6/dotnet-hosting-9.0.0-preview.4.24267.6-win.exe\",\n            \"hash\": \"19885f297d2f01e20b46b69c48b8a1fd02aaaa9bf44ab7ca8b7a8ae961b0147bfdff8b8a63cf2766fb6bbb8ffe3d5dac80b1efe2a12bc4a91cd798abcb09ae4d\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0-preview.4.24267.11\",\n        \"version-display\": \"9.0.0-preview.4\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.4.24267.11/windowsdesktop-runtime-9.0.0-preview.4.24267.11-win-arm64.exe\",\n            \"hash\": \"432e3d142eedb2a67eeeadb8d5aea906085d06540ed12cef9d3c6fdf55661024bf8b220ed8dbbefba3fbb6d23ed38916260e0ed935d97c39e92b941a74869367\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.4.24267.11/windowsdesktop-runtime-9.0.0-preview.4.24267.11-win-arm64.zip\",\n            \"hash\": \"18ecaf2ac89462b371e1e281c4336b00d8b1cf72ac0f7534cacd9f184423a57c330834293506c2f649df833e15c2ff7948f9e8befb8644512f962b71c0ff0f75\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.4.24267.11/windowsdesktop-runtime-9.0.0-preview.4.24267.11-win-x64.exe\",\n            \"hash\": \"0f46daf2f73ad038dec2b333c5b921148102622c2897a6651d76bba8a782f0bf6e29b20139c446eddf9bcfd31106eaf42832c48db7411587988fd772f486fa9b\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.4.24267.11/windowsdesktop-runtime-9.0.0-preview.4.24267.11-win-x64.zip\",\n            \"hash\": \"3f54ad4b62953d2438c1d9d55116ada0f1f98d41698a2f3b9d6baaac2e17a32186825935a4f83dc973f0c229396ecf82c2dbb255381343db3488c722f46d0eee\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.4.24267.11/windowsdesktop-runtime-9.0.0-preview.4.24267.11-win-x86.exe\",\n            \"hash\": \"d34b5653e4ccfc370a2667e5c8718a93b154e5f06e85f605b33d95186e067aad788a817ecf02858e7bf06c6f034868d89dc5974cf70f55756bded3a20cc9a549\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.4.24267.11/windowsdesktop-runtime-9.0.0-preview.4.24267.11-win-x86.zip\",\n            \"hash\": \"a5a15087e024beb729b2382af8c47ad38b08de2375eb4d49f9f5ab853725ff80325641f5bae0fa31ff9e62abb2194d648df36603c06c623d24216bd6cfbd93cc\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-04-11\",\n      \"release-version\": \"9.0.0-preview.3\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/preview/preview3/9.0.0-preview.3.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0-preview.3.24172.9\",\n        \"version-display\": \"9.0.0-preview.3\",\n        \"vs-support\": \"Visual Studio 2022 (v17.10 Preview 1)\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-linux-arm.tar.gz\",\n            \"hash\": \"ccbda0ce6e8220ec83bf9fd7eba030a96d2e9567bd4bf162e4b0ccc3ce8c08b855c6ec20b15f401e6b4341464d12dae219f3716102a001672fc441a4358e3445\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-linux-arm64.tar.gz\",\n            \"hash\": \"3f8bd80a03a63019d0c2038119a0bccfa5b1b700fc7c22565bff2e0af425fc0ca475c13b03a666aca2f954db9e53d7505db9cf984482d4a6be1d8019986324ab\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"c5638c562451f2c2d591e51e014edb15111ab49b8a71016bca3d4095a74d9064184a3f5bdeb236fda59ad98dd730221038628c5ac6105d9a4eae6664a98abf16\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"c8777c446cad3a37012e47625031552d517e27d32198ccb746b1544135abcf60bfc3ff7e801cfcfb72d2d8563604345e2da011fa0aa8939bacb13d8b619bea5d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"adace7cff420fcf0e437bdfc90b6a39b703c53301b95d2fbdaab15fb4a7acc6d8a40ce6107a8c0f30230c6c8145c28e8c0f33c2ab604c6d1946d80dd8d350c48\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-linux-x64.tar.gz\",\n            \"hash\": \"244963004ced27054eb1c5473adfa7a0e249cca4def0305e81136e39d00319e5be2c77f687034df7e1f026bf92321332d8904ce93851e215e9c213da105d37db\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-osx-arm64.pkg\",\n            \"hash\": \"15576674976f8927fc0fb277382d536692c4426a6483189ff192a082128b9c43d03eff1a6bd7de859e991bdb8fe75421ab3c45163552ef9e7c45441a483793de\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-osx-arm64.tar.gz\",\n            \"hash\": \"20ac79faf78b8e95e73778ab8f8c238aa282d2a6ab844406968f68e946a4a8258e8f01458794a4c77ebf7c0a1e9dcc76169ecc84dabcd1fe983209f968367887\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-osx-x64.pkg\",\n            \"hash\": \"dce9a57df606ed6b3e142aab69ac482c160ebd4be776552881ff80843ae777e13f25f160289bc1ddfa19e04446f85552de59e9d700bbc0354aa070bd99eda4e6\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-osx-x64.tar.gz\",\n            \"hash\": \"873078a50675fa576df27867231b37c7a09511893bb2f7c91f4cc1069e88ac4b6fa7c4eb439b6b39ba2522b7a3e2d2cc9fbec4e700e49402672e6358fdeaaf07\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-win-arm64.exe\",\n            \"hash\": \"77b0ea1bc5b722858e269ee0c61509729a3419b7da3ad6210d85e10e18d07ed2d46ef2311a1eadd077b1997f28d2cf483e3e6d34a6f56c8c4a871cdd27f77706\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-win-arm64.zip\",\n            \"hash\": \"7c51a32dc7dec38e9f923ebc43ad9d587d3bb209589124bfbd8102a2a6d155bac6cd1758bb35f6290a3e95a0abee98a83c383900fe6765f57871652d28f5691e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-win-x64.exe\",\n            \"hash\": \"9cecf9017cec09d32bed0d26e43ae00c2122380a25ef1426dc0ad3fa16f4e43e7ba071910ef56940d32540bd5053faa0a219aaa83be3b62c273f6216c3c7ab84\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-win-x64.zip\",\n            \"hash\": \"4b46ec7849a78d73ca71cb55f259bec2d320e26029b64b398bf16ea2ef14bdff2096a35fbabe929f21b5b97ae865688c5722b2b761babc09a0d53b8921434d91\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-win-x86.exe\",\n            \"hash\": \"b73bb3c6ac46fbbfb3e536f1579abaa0cf86e97001e049226dd60e3dc1be2ead8f9d825ac8775a8fa7a57786316e0c13a63931b2c2b66363da9e033e4c3b9047\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.3.24172.9/dotnet-runtime-9.0.0-preview.3.24172.9-win-x86.zip\",\n            \"hash\": \"5c70d0844fbd6b0178a8820f4a0f9c9204e35216ae3de5a121e29fbfbd53f23dd82978f6bdd551907578869984242c61a7dbea57bca3b6bea59c7af7ee7b7546\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.100-preview.3.24204.13\",\n        \"version-display\": \"9.0.100-preview.3\",\n        \"runtime-version\": \"9.0.0-preview.3.24172.9\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.10 Preview 1)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-arm.tar.gz\",\n            \"hash\": \"76e53d9b288ed800b9087d2a3bde25481642d84f133955f57ec69a35f2ef65237c937fc1f0f60b3c2190cd6e34f3bccc71b85fb2c37a08976e82e2d761ec40d0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-arm64.tar.gz\",\n            \"hash\": \"83c6fc2cdb8aba6d72661f2fc360147482dda7c22b69b3f0df9912efe7e0499f3c7b1d1a8577b3667ec3faf6cca99bfa887c663904847356c93e6f1e6f9917b9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"772b2af66459b4ad7cd8005a02799f7446fe7fdac97f488d7575b1d1ed2079af539420b01609da6caf0addc86bbca72e53949ba4979c31853a9d724f80756492\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"8f19023e96760e397261b1d0c765a789c01a7377b782ab8254b5f85c01048c305f8e627d796c8b6040a23ed12eefdd544200167bcb32871efe0c627359f3e7d4\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"e72027ffbeb7d5c9b8796620226ab410510ff57ad93f5e24f7a2ee281fd733daabff74a15f3dcbe04413fbd4bff0713fd298cac732eb0f71ee6c6dadf334e972\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-x64.tar.gz\",\n            \"hash\": \"7f487d92ee3b28061ef28e013295ebdf6703721b5e2e55ae2d7b18f1ff4fa4e3e01b6a8b508723ffb22dbc8437f0693d7c07f4dd8ef113d5da8a51b3645b3422\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-osx-arm64.pkg\",\n            \"hash\": \"43d167bea8ab900ff67674bd378ba09228f105be8d8b0c4866e867611072169a7ee1aca67cd04f06294d01fba2ae2c0427553e5552de10c41fc1096df4db9e54\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-osx-arm64.tar.gz\",\n            \"hash\": \"69452e7266bbccebc7acb9cec7b328f8fa1bca4b0720a27450b67c19d41ac9e8b5ca23f3da762c37769dadd0c65fcb1068b32c98b507d19cb9c5619b301f6860\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-osx-x64.pkg\",\n            \"hash\": \"7ae365e863a76a52b2c646bf34ca444b6ec08118edb4f52391d013c22f2fe9df1ceab75156b3c48d16d564baa02c71093b9b9e0edac01a6e2a0b311182bbe561\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-osx-x64.tar.gz\",\n            \"hash\": \"1c0d5a8751f36b4e2f0d2971600a6f870155dd12e0a0669951d99b1d50b8021c51a5c9df447ecd8bb53c3ceaa6f4467edc0eb357bcc8d26e272b5ea121f170f7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-arm64.exe\",\n            \"hash\": \"ad7114b1a961db4797a733cd2823aa6a5735103290b282f1b0a3bf0917d360d8fac931d629d94ecc3f8ffac50cb6bcf4c0afdcb48b1dbc621fc59348abccf524\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-arm64.zip\",\n            \"hash\": \"1fb88185859896b2fc6e0e6f867b6a27cdea13aa414c8c6b606ce72b48148fd938209fb49c073316689a5bcc739443a647fa60b98b6ffedb0fd508886096b7e9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x64.exe\",\n            \"hash\": \"d8f49442160a7a92b617a59eaf8fdc4ca776739429f79a7dfd5da4486629a8b6df1999cf2adb3d06ae715a31a8fc3aa355329a87d2780724874afa5028688898\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x64.zip\",\n            \"hash\": \"55114bd014d2613aa35e91148bad263cfe0fd8499995c9641bdfff1b7c2f10c70add06c1d9c016f60fe7c4d144725154187a7c0ad4b1296f1ec32e876ae3ceed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x86.exe\",\n            \"hash\": \"24bc29abc7c11988648584adbd17d9d3f8694b7b2ed622f860709a680f7eee97b12de34470c78a9718383cc33ee8934d19e3193475a6a7f304b65cdb02468f33\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x86.zip\",\n            \"hash\": \"e240c2ebfa0089b95077f297748988b9c1cfd662fc39616b225c479f810dbe7ffafc91c5c3faf7cdf633be2660e1aee3d201209122cc30a9a66be21273197741\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.100-preview.3.24204.13\",\n          \"version-display\": \"9.0.100-preview.3\",\n          \"runtime-version\": \"9.0.0-preview.3.24172.9\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-arm.tar.gz\",\n              \"hash\": \"76e53d9b288ed800b9087d2a3bde25481642d84f133955f57ec69a35f2ef65237c937fc1f0f60b3c2190cd6e34f3bccc71b85fb2c37a08976e82e2d761ec40d0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-arm64.tar.gz\",\n              \"hash\": \"83c6fc2cdb8aba6d72661f2fc360147482dda7c22b69b3f0df9912efe7e0499f3c7b1d1a8577b3667ec3faf6cca99bfa887c663904847356c93e6f1e6f9917b9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-musl-arm.tar.gz\",\n              \"hash\": \"772b2af66459b4ad7cd8005a02799f7446fe7fdac97f488d7575b1d1ed2079af539420b01609da6caf0addc86bbca72e53949ba4979c31853a9d724f80756492\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-musl-arm64.tar.gz\",\n              \"hash\": \"8f19023e96760e397261b1d0c765a789c01a7377b782ab8254b5f85c01048c305f8e627d796c8b6040a23ed12eefdd544200167bcb32871efe0c627359f3e7d4\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-musl-x64.tar.gz\",\n              \"hash\": \"e72027ffbeb7d5c9b8796620226ab410510ff57ad93f5e24f7a2ee281fd733daabff74a15f3dcbe04413fbd4bff0713fd298cac732eb0f71ee6c6dadf334e972\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-linux-x64.tar.gz\",\n              \"hash\": \"7f487d92ee3b28061ef28e013295ebdf6703721b5e2e55ae2d7b18f1ff4fa4e3e01b6a8b508723ffb22dbc8437f0693d7c07f4dd8ef113d5da8a51b3645b3422\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-osx-arm64.pkg\",\n              \"hash\": \"43d167bea8ab900ff67674bd378ba09228f105be8d8b0c4866e867611072169a7ee1aca67cd04f06294d01fba2ae2c0427553e5552de10c41fc1096df4db9e54\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-osx-arm64.tar.gz\",\n              \"hash\": \"69452e7266bbccebc7acb9cec7b328f8fa1bca4b0720a27450b67c19d41ac9e8b5ca23f3da762c37769dadd0c65fcb1068b32c98b507d19cb9c5619b301f6860\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-osx-x64.pkg\",\n              \"hash\": \"7ae365e863a76a52b2c646bf34ca444b6ec08118edb4f52391d013c22f2fe9df1ceab75156b3c48d16d564baa02c71093b9b9e0edac01a6e2a0b311182bbe561\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-osx-x64.tar.gz\",\n              \"hash\": \"1c0d5a8751f36b4e2f0d2971600a6f870155dd12e0a0669951d99b1d50b8021c51a5c9df447ecd8bb53c3ceaa6f4467edc0eb357bcc8d26e272b5ea121f170f7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-arm64.exe\",\n              \"hash\": \"ad7114b1a961db4797a733cd2823aa6a5735103290b282f1b0a3bf0917d360d8fac931d629d94ecc3f8ffac50cb6bcf4c0afdcb48b1dbc621fc59348abccf524\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-arm64.zip\",\n              \"hash\": \"1fb88185859896b2fc6e0e6f867b6a27cdea13aa414c8c6b606ce72b48148fd938209fb49c073316689a5bcc739443a647fa60b98b6ffedb0fd508886096b7e9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x64.exe\",\n              \"hash\": \"d8f49442160a7a92b617a59eaf8fdc4ca776739429f79a7dfd5da4486629a8b6df1999cf2adb3d06ae715a31a8fc3aa355329a87d2780724874afa5028688898\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x64.zip\",\n              \"hash\": \"55114bd014d2613aa35e91148bad263cfe0fd8499995c9641bdfff1b7c2f10c70add06c1d9c016f60fe7c4d144725154187a7c0ad4b1296f1ec32e876ae3ceed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x86.exe\",\n              \"hash\": \"24bc29abc7c11988648584adbd17d9d3f8694b7b2ed622f860709a680f7eee97b12de34470c78a9718383cc33ee8934d19e3193475a6a7f304b65cdb02468f33\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.3.24204.13/dotnet-sdk-9.0.100-preview.3.24204.13-win-x86.zip\",\n              \"hash\": \"e240c2ebfa0089b95077f297748988b9c1cfd662fc39616b225c479f810dbe7ffafc91c5c3faf7cdf633be2660e1aee3d201209122cc30a9a66be21273197741\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0-preview.3.24172.13\",\n        \"version-display\": \"9.0.0-preview.3\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24083.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-linux-arm.tar.gz\",\n            \"hash\": \"ad4540890752e278406a7a731705251e9e803100ea8784f3ea9ab499ae24bdf3fa09456b324834953775f5edea019a3e80c608d9ebfc7de0cb2ff430a0234e3c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-linux-arm64.tar.gz\",\n            \"hash\": \"e484d1530bb8462f5956d50b0055407a5b697f176f43a8e97b26d80c0507f9373b950f962a5144f7876e4c699b2fd29a63eeda71b090fb80c4885750d73cc42a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"70700a6ac11a4a4e192e8d536d7dbe746aa2b209fbe5522a9bb6b09988b1d40019d03327a1e79917f04a8008581b685f7b6fc925750ffc6e0de4877955ebbad8\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"6011b173f4f31ad942f4911623b1b0175e03c160ea55b2d50c454bc0a921ab3f35a5ad2f822590ccab5ea3470ba0f5ac9a617386e4538f82b235ff68e46ab6a9\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"8e6c42872a062f50e25432e0945a18ff4508d708983f004bfcb619c76d5e13b5dd0653cffc5931ec7834d1d7db174566b4d9d00016c838f98b351d821e012334\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-linux-x64.tar.gz\",\n            \"hash\": \"319f2700c3a954a1e6e0dd01b45c18dfe7d3728fe175b82cbdbdd928c2f64c5fc6f53b7c44f753cf59fb7c32649fab95f0245e5077ae3f607b8f59b5e9cd417d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-osx-arm64.tar.gz\",\n            \"hash\": \"c216b72b3ed028cc49ac5e6c50612b77eaadb7834e21a4ef89bce346c7eb1e55bcaced48131ba68ed00d381ea0321501e9b9a0cddff088dd6ff96d5b04be6e6c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-osx-x64.tar.gz\",\n            \"hash\": \"6f2f4b7ad18311259864f1fe2b2ab4b78e60e035213951eed77f9fcd41488bd9f1a6360bad348af130e3984cffb7e7d7b16406c5ae2bdbd4e75a6eb28924cb68\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-win-arm64.zip\",\n            \"hash\": \"023e2058f0f036c07ae383505305b4e46ea1be75bc5204be9d0ac864f88fa6d126e7ffeb158635c717e98a1b1f7e42b69dd44a5fe8ad4f17a332141ca91f1c8f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-win-x64.exe\",\n            \"hash\": \"3e2949483b1453bf0edea37eda3395f8c582c56fab65a4a315ed84e53b6ab9acda27764332911abbb16cf49c3b7844024a7235cba58f3c12f44643dccf45f768\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-win-x64.zip\",\n            \"hash\": \"6e3d9ff40c04eb382ce4d3603892733e43c58c47472c571efdc12e8be7f52a338fa46659137c9320fecaae4288ce81ca6f41a5bec32e73511b9014ebca7a4c99\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-win-x86.exe\",\n            \"hash\": \"b1e8df9ed48bdc53c03a309ffd58c5aa91f999067258f7e905573011a57f93b3b406a829dfe2f760d6fe68fb5cc8b347812b9a01b3e9722de08a2cda0bda94fc\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-9.0.0-preview.3.24172.13-win-x86.zip\",\n            \"hash\": \"501f5353a720e0e4a976c4cae5875da7ccb7a5cc9c93343f732bc182ac0a457f6cea8ba2edc33a7665849d558c213e3ffbb16b85110c61d47b776487da4b35b0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-composite-9.0.0-preview.3.24172.13-linux-arm.tar.gz\",\n            \"hash\": \"a6958b10bb735875670bb280b6187f963b65fa2a02f49848096b2a6c06526a39accefbf362394d6cb82d5cce65eb1819762365c7114cd7b7748908f814fdebca\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-composite-9.0.0-preview.3.24172.13-linux-arm64.tar.gz\",\n            \"hash\": \"88edee0dbe7c16409674db0442b5098a92d9d22f2d6e4d8bf27e44a6415f38023bab96174d45a33a9bfdcb88bf896ba6acfb36b6f7fec7323dbb18e472bebdc1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-composite-9.0.0-preview.3.24172.13-linux-musl-arm.tar.gz\",\n            \"hash\": \"370274b311ae9671f2aeb38b313b05cdbc6b04eeb96146ad82ab7b3b9e65fa2d2fbc03f4343026c4fb81106fa97fbfaaaf933127c8ae9bfc9c91fe6aa3c6786a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-composite-9.0.0-preview.3.24172.13-linux-musl-arm64.tar.gz\",\n            \"hash\": \"cf1432c021e7e639d1eefc18f7feeb0c2a11ebec19dddf3e101903d7a3171b1b9415270e8b4086a19f86ffe2a1cb6ec4e73c391ac3040caaf9dd32b2f8d06136\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-composite-9.0.0-preview.3.24172.13-linux-musl-x64.tar.gz\",\n            \"hash\": \"f6861aa3ef052d5a4140ce771cee2cd62c07256043581ff06e601d8d4f95a344bf90c86fbf22ec55d9a130e4b205b18e7711af3dba7a03e1741f2abd02f74f58\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/aspnetcore-runtime-composite-9.0.0-preview.3.24172.13-linux-x64.tar.gz\",\n            \"hash\": \"7a4b00241a2a91cf7dd3ca391b4f64edefc4179c351eeb0aa260c27680510be71b4fbc1f07ac7682208c73e879a40fdf3943b5cdf58456d7a4763665e46e8258\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.3.24172.13/dotnet-hosting-9.0.0-preview.3.24172.13-win.exe\",\n            \"hash\": \"bf6f9cbe3dea1e45f7fe831d9a8ccbb46f744c479f22449908e328a388d8517f5f38caac5cd8345166279b79f653a040399a85f18f75da63d983199ddd1ca340\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0-preview.3.24175.3\",\n        \"version-display\": \"9.0.0-preview.3\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.3.24175.3/windowsdesktop-runtime-9.0.0-preview.3.24175.3-win-arm64.exe\",\n            \"hash\": \"4b15257cd6b655483677a1b842b011ca6cc3937ae6ee3ee7873fdc99197911618d7049480ebf43642ca4eb65a43edc322f6ec62f0c20759406b0f95376d586b5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.3.24175.3/windowsdesktop-runtime-9.0.0-preview.3.24175.3-win-arm64.zip\",\n            \"hash\": \"0552d7553ec1a44d215d41bace840366e93530ff352a51988c297bd13bac4dfb09759473878de199e92aa8dda6323cf93b74dec1570f72b77cdec87e2b3448f6\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.3.24175.3/windowsdesktop-runtime-9.0.0-preview.3.24175.3-win-x64.exe\",\n            \"hash\": \"a0dcd0adbf301165d90085be2ef05cfdcc100224c6097a98ad056df70351f974bdf8dbc129e8927f5f473b6ccd0932288be0467d629f932c7db43a45e2b14af0\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.3.24175.3/windowsdesktop-runtime-9.0.0-preview.3.24175.3-win-x64.zip\",\n            \"hash\": \"58024d2eb7284a46d8393000e8d93083699fef472d9a9eedcecd17a98ad45b81636ac67fa6cda2e62c34e8a27038ff75d07de0fe5f8bc7d6e58da879777615c7\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.3.24175.3/windowsdesktop-runtime-9.0.0-preview.3.24175.3-win-x86.exe\",\n            \"hash\": \"2e2faa1c23a40a2459670a1af10b802e6e295dc3c3ac6e5f593fcb5de756912707009bb3e8a98f2f3e07b089b984083158417a5d3d383becbc0a0aaa33ffb3b5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.3.24175.3/windowsdesktop-runtime-9.0.0-preview.3.24175.3-win-x86.zip\",\n            \"hash\": \"4032a8bac5d08289dcc4b124ef1e5922ed3133f5ba9ec5bdfb86203fc93787f2fe68b1231ad1ba238341ba5bdc47e0eb6309c6bab3d0d56be9bca8d135e462e6\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-03-12\",\n      \"release-version\": \"9.0.0-preview.2\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/preview/preview2/9.0.0-preview.2.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0-preview.2.24128.5\",\n        \"version-display\": \"9.0.0-preview.2\",\n        \"vs-support\": \"Visual Studio 2022 (v17.10 Preview 1)\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-linux-arm.tar.gz\",\n            \"hash\": \"845b0a1eb3ba18637cecbe4105e6f7a26cf5e0c482177feb1570e1ec85eecb717d59ae5e189788bc4a4a4db23081c21369b8c462991fc4a426b52ddcca34b4bc\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-linux-arm64.tar.gz\",\n            \"hash\": \"5ae4c5f4acf1465c8aba29a90aa3ee99ab47ffece9f932e9fb4de8937d05feace4c5d3b53d4b8bf226eb99de16a0aad0e71f091827651f0722261513c8a8a2e7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"31ce6e4af959df846383b8ff5d7912b6f16bb8244dca675b1109153ff13298ac033b4675319eb30bbaea6dda8172cf87d0f4f5e1f3680086374fff97c41110d7\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"3384c37ae4dd0b0f9eda8a4b7bbdc24ab8fd82a9fba9977408b93ef2a49c4aeca7808faf6c28fa970cd07959c6883045cd0408d3c96f52d1bfe9282dd6cf06eb\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"192faff21e221e1211acc087a759925205ced69d47641df46495cdb508b2e9a6276b24da54c6046c6cdf5e82ca5fc3eef1febc05cdfe3459018b7c63bd764e2a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-linux-x64.tar.gz\",\n            \"hash\": \"6433959a75103f2f1108bbc16cfe348f9ba04fec1c8f9b6895019241bfcb7b21fab675cc13971f2c1a66b46b044a95f91e1e2b46e6e8bdd893d277906f82545a\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-osx-arm64.pkg\",\n            \"hash\": \"08e482abe56ca8282f53a32ef30f078397e16118fa1fcc83eda0a08b67e052668a111cad6b9f7245db8c27051a5d26ed70b3428964f593d1cb54b754022204b8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-osx-arm64.tar.gz\",\n            \"hash\": \"cc7b8626cdec48427ef79f14c0919a09a3500bdc1c2933c6b5cf80886cc590ab20ccbd07bdb3a6081e47b80f372db3b4887b5276a12252887b7360a7f23e9901\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-osx-x64.pkg\",\n            \"hash\": \"975279950f5644c9c7889ba5b1c6c4fb836a3561b68d1a6024ceb028860350c480a53e451f7317e0cbc3ea88813319c5108a2a99a04bb61731417d81b486aa37\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-osx-x64.tar.gz\",\n            \"hash\": \"9f83d1d7dbfb8c8df1c7530fed3ddbb1571e60100954051bf07b8ee758edc600d1d988819c91711cd8b4baa05dd97f9900d1edf2ae5035ac74930a920951f380\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-win-arm64.exe\",\n            \"hash\": \"e9f0e707f54b1dde058a7c47a29f3b02d2119814b3a7c752e6ef295a00ca3130e8c3d6b7a58b753c2148818d0ddf0baa335d98d0500602695a35ae16f76068a1\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-win-arm64.zip\",\n            \"hash\": \"3f284a3ae3e14566788edf0d093f4da83e7c0024931e32b04620b73c2739bded2061e3268caf36af6490b31dc257d26f1fceac5c53b88921217f3588cb870c43\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-win-x64.exe\",\n            \"hash\": \"dcb1fbdcc439c81dab9d17e60ec226bb0307e3a68c5e28683408b9b8900f6e81e9c457e6a5ff65d177e538e02514841a9d979cf017f1ff24c98513916a089c29\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-win-x64.zip\",\n            \"hash\": \"701283ab4dde1f23b621ae712b66e117b4d87f9dfe4aacfee0d1a0622e7b9135b54a940f132e3a59add88bae69ffad790b1acacfa03cc30f55d16572c34fd932\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-win-x86.exe\",\n            \"hash\": \"4b64d2d82c53e6f7e541c589eacbe273e4d71d22b538b4caa57a52de302613e32a1ae1d6f3312a4529ecd8ecf378411b0262e1902ae929f58ac09942894f8ec4\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.2.24128.5/dotnet-runtime-9.0.0-preview.2.24128.5-win-x86.zip\",\n            \"hash\": \"b472c78b3eb5d3762bf2cf2690efe0379a79958e34986a939f5f07b0c78950e9cbc423d072b99b31db8bf063b739434a9dc6cdae874ce64601e351474c9bd85a\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.100-preview.2.24157.14\",\n        \"version-display\": \"9.0.100-preview.2\",\n        \"runtime-version\": \"9.0.0-preview.2.24128.5\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.10 Preview 1)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-arm.tar.gz\",\n            \"hash\": \"51dde68d8cbe20e8e77fef7b940ae55158e8dbc31d219696228e82b2e4223b55a43dd2797c70101d3fcf2ca56bfd7370ff08daba5f0e457f54dbd8e171503f31\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-arm64.tar.gz\",\n            \"hash\": \"1d591e504352f765a35092394719451c024a628c69efb6a10d0a5d57947c466a004243e799b46147fdf6316a23b4335b1e8fb1fc5513def1dec9f96c6c845dc7\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-musl-arm.tar.gz\",\n            \"hash\": \"a0547586a2e1c04b1ac030637901c113abb7bcf3bfb4bb6e017d6c11ee6f5fc114dea4da57cf4f702765a0a0e5c19391623c73e9a3500d5f6713a000a9c14058\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-musl-arm64.tar.gz\",\n            \"hash\": \"a56d724d388576e8e6db78c67004a7296ae33a7c2ab00d8af132d3df12398cce3f81b08a50f9094942cbab6ffa66efdd805359a5ee9189dfacbafd7478d34285\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-musl-x64.tar.gz\",\n            \"hash\": \"51fd7da5986f7776a602d8aa3dee1952e86ba0676c1fdb392f7d13c642bc608489a897347707267fa030355042f6873024c92583a6bb8080397427bee35f087a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-x64.tar.gz\",\n            \"hash\": \"c44df5e11791e4b22720834ed7f28102e33ab475670fa8e132d73d5dd03d8f4ed3f4a548deac67a79e06db6f776c9f632eda4503b6fdc9eef7ffb001cc9963c0\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-osx-arm64.pkg\",\n            \"hash\": \"61e5819cfe28beab99b3a75425c9c0dd0afb01390170e21fdc0fc0ecd9518d20ce24d07048012e522b53d727f7bc94639f257cc6021fd1b39b57405ae6adaeb2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-osx-arm64.tar.gz\",\n            \"hash\": \"1c7166a594ba6c07d0233aac44428e561e2131f1f1812cdfee75807d19f1fe53f40f9d93e88d4a478c885993424ec2ec7b9aaf8f174332f587e6ff10813680ec\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-osx-x64.pkg\",\n            \"hash\": \"16d6a5e48cdce9e5e529c5572032d02213136b5b028a06a86c72c32765a87b30aaa62381bdde4f810e5b1ad7ab07103386002b6447bb8186888604794da7faed\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-osx-x64.tar.gz\",\n            \"hash\": \"a5a02f596e3976e65650d6a780903a755d4d700491c670b4f3c2f167224da632b98ad03ab7a087dc18561c5cc3ae6a3be78d5c6ca2f7312c7d7c417d909a481a\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-arm64.exe\",\n            \"hash\": \"86ec1715eb1373d22ea3ea49021c537484b481c03ce6a82df9ae81d911f5de28a8878f78871db66bc407d65bb84cc1ffe0099928a177ebab50910b6f6bbe1290\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-arm64.zip\",\n            \"hash\": \"c8d0ff7e90b6799f352ea69cbff376e7efd201ae5593d6199145225afb2caa920480191be2bdff1c364ade02e89fc157e06cd944f761ff3af0b08b4009b1c28f\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-x64.exe\",\n            \"hash\": \"7ea7ea590d222d84ab7326ff120a40b45364a01c386c881ea7efabfb869237b789743b0829b791895613d7f4f2584c411f38150f319bdc5fa3f2b9ee7e5b3bd2\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-x64.zip\",\n            \"hash\": \"83dcc6aee85e332993ad57b041e22c09c1ca946fc7befed54bc451ae0c2d2ec16b818d2323589a8a150cd2ef90239e990bbb2390d5ded458a4904be0052fa364\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-x86.exe\",\n            \"hash\": \"1ff5e7be6fe1a1a436be343553d12066ea8e94b1d80b5ed7d2979f3d2eadf3c5c7e2da5727be2d12cc6ad1d831562172fae4dc55d5a84075b00891ce8395126c\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-x86.zip\",\n            \"hash\": \"5c1b310ff5543d7416850d2044c4584f4a2286676b7cd05c32f505b95959bc66968f334cae1b35c852937cf289160f97f4129e15f5e5e220ab1d6c5bf61f1fd2\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.100-preview.2.24157.14\",\n          \"version-display\": \"9.0.100-preview.2\",\n          \"runtime-version\": \"9.0.0-preview.2.24128.5\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-arm.tar.gz\",\n              \"hash\": \"51dde68d8cbe20e8e77fef7b940ae55158e8dbc31d219696228e82b2e4223b55a43dd2797c70101d3fcf2ca56bfd7370ff08daba5f0e457f54dbd8e171503f31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-arm64.tar.gz\",\n              \"hash\": \"1d591e504352f765a35092394719451c024a628c69efb6a10d0a5d57947c466a004243e799b46147fdf6316a23b4335b1e8fb1fc5513def1dec9f96c6c845dc7\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-musl-arm.tar.gz\",\n              \"hash\": \"a0547586a2e1c04b1ac030637901c113abb7bcf3bfb4bb6e017d6c11ee6f5fc114dea4da57cf4f702765a0a0e5c19391623c73e9a3500d5f6713a000a9c14058\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-musl-arm64.tar.gz\",\n              \"hash\": \"a56d724d388576e8e6db78c67004a7296ae33a7c2ab00d8af132d3df12398cce3f81b08a50f9094942cbab6ffa66efdd805359a5ee9189dfacbafd7478d34285\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-musl-x64.tar.gz\",\n              \"hash\": \"51fd7da5986f7776a602d8aa3dee1952e86ba0676c1fdb392f7d13c642bc608489a897347707267fa030355042f6873024c92583a6bb8080397427bee35f087a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-linux-x64.tar.gz\",\n              \"hash\": \"c44df5e11791e4b22720834ed7f28102e33ab475670fa8e132d73d5dd03d8f4ed3f4a548deac67a79e06db6f776c9f632eda4503b6fdc9eef7ffb001cc9963c0\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-osx-arm64.pkg\",\n              \"hash\": \"61e5819cfe28beab99b3a75425c9c0dd0afb01390170e21fdc0fc0ecd9518d20ce24d07048012e522b53d727f7bc94639f257cc6021fd1b39b57405ae6adaeb2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-osx-arm64.tar.gz\",\n              \"hash\": \"1c7166a594ba6c07d0233aac44428e561e2131f1f1812cdfee75807d19f1fe53f40f9d93e88d4a478c885993424ec2ec7b9aaf8f174332f587e6ff10813680ec\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-osx-x64.pkg\",\n              \"hash\": \"16d6a5e48cdce9e5e529c5572032d02213136b5b028a06a86c72c32765a87b30aaa62381bdde4f810e5b1ad7ab07103386002b6447bb8186888604794da7faed\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-osx-x64.tar.gz\",\n              \"hash\": \"a5a02f596e3976e65650d6a780903a755d4d700491c670b4f3c2f167224da632b98ad03ab7a087dc18561c5cc3ae6a3be78d5c6ca2f7312c7d7c417d909a481a\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-arm64.exe\",\n              \"hash\": \"86ec1715eb1373d22ea3ea49021c537484b481c03ce6a82df9ae81d911f5de28a8878f78871db66bc407d65bb84cc1ffe0099928a177ebab50910b6f6bbe1290\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-arm64.zip\",\n              \"hash\": \"c8d0ff7e90b6799f352ea69cbff376e7efd201ae5593d6199145225afb2caa920480191be2bdff1c364ade02e89fc157e06cd944f761ff3af0b08b4009b1c28f\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-x64.exe\",\n              \"hash\": \"7ea7ea590d222d84ab7326ff120a40b45364a01c386c881ea7efabfb869237b789743b0829b791895613d7f4f2584c411f38150f319bdc5fa3f2b9ee7e5b3bd2\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-x64.zip\",\n              \"hash\": \"83dcc6aee85e332993ad57b041e22c09c1ca946fc7befed54bc451ae0c2d2ec16b818d2323589a8a150cd2ef90239e990bbb2390d5ded458a4904be0052fa364\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-x86.exe\",\n              \"hash\": \"1ff5e7be6fe1a1a436be343553d12066ea8e94b1d80b5ed7d2979f3d2eadf3c5c7e2da5727be2d12cc6ad1d831562172fae4dc55d5a84075b00891ce8395126c\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.2.24157.14/dotnet-sdk-9.0.100-preview.2.24157.14-win-x86.zip\",\n              \"hash\": \"5c1b310ff5543d7416850d2044c4584f4a2286676b7cd05c32f505b95959bc66968f334cae1b35c852937cf289160f97f4129e15f5e5e220ab1d6c5bf61f1fd2\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0-preview.2.24128.4\",\n        \"version-display\": \"9.0.0-preview.2\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24060.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-linux-arm.tar.gz\",\n            \"hash\": \"f1dd7f9d7a9faa408c081e869804f7b2a54d8a03d8cb3ac4378e0a015ce87e05ad0963684fb9f8369ba0860eceb9f8cd2774e92740564e96858a62b2a5d62b03\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-linux-arm64.tar.gz\",\n            \"hash\": \"6f7a5575d02197f1908c56d580f0a9049f393ae68a4ad4b73935e981d9c6766e028463d2828d3ba0aeb4049237516fee2e116196e790948fefd65436ea804f35\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"db34cb136e1bd5e3722e9dae9029cbb5bcaeb8f563e02e39ff51daa5b51ef4435cac60d77197da30753b79af45e2efd6aba7f75a02fe766859ecd863fe7da2c1\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"1158514625f2284a38a528b6182d98137ae7228512995723015d57c3a3e1e81436f87d18eb2b9d864398b609373bf4212a20943db97d5fb1acb29b0fcbc9b8e3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"6454787598b68f4402012057d1019d21f16df83b763c56b55557c0d45d2dc66a161dc41aa46a1b6324950315484fea5b7a5c8089f08cd69501d79c5f5fbf961c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-linux-x64.tar.gz\",\n            \"hash\": \"9d836edc539ace64ef8fa883bdfc881d89f4cf30d048640246dae9d54e46e79f2e82ebcdf366c1b69017d86d1bf1496acef5d56c3133297ea0bddb2df2eb4523\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-osx-arm64.tar.gz\",\n            \"hash\": \"81b5860e68e9e660a535568f96d8058ab6f98dd6b0a8305e3e3358ee721da610c08baf0b59a52d7e30184c39784ab18544f9328a55d8490d400d07be734059a4\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-osx-x64.tar.gz\",\n            \"hash\": \"c0c37a504f8c3113c90b8108f1f784fbb61387475e3eab37d303c49f627e06034ef6e917ee9c780e910cbf565c20050173f240f215fdead4fabb1f3795f3ac08\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-win-arm64.zip\",\n            \"hash\": \"513afe42770fbab74e7d5746587d5f4859f95ed801954e6a16fad6b5e6cc681d1fb40822764f38140ba7b74aa71ef42c502f0fe65abe0a5010d8d5b3b8d73e4e\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-win-x64.exe\",\n            \"hash\": \"0b55ba24806ba6337aa95e26b64ee5d3d4b1feb00ba0993dbcaadb03e17e0544ceeec0a4cfad82b97ec0b9454219d421d5ba12b1e4cfaeac12ddbee81f59091d\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-win-x64.zip\",\n            \"hash\": \"cdb4a42761d729bf68ca94414f85c9543bd46e8954680b37b66db15c26135def215933a2fbd38b231302f7ea4f6407a4290d00a25c5f8d7d58e780e55052c3dd\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-win-x86.exe\",\n            \"hash\": \"b9b8bbf176c545fa2b1e2765c8eb6ea632c9acf27d15f6e54f22451b3982c115af027a5a957fa37a9e762c41dc2fdc9c0a3ec22933dfc7effa5c468cb9e29e84\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-9.0.0-preview.2.24128.4-win-x86.zip\",\n            \"hash\": \"8f6e89659b3d641f3fe64f417023d8c3bd587eebc343c8cf478a44d945e79a039c2fef828484764ab43cfd30e5b3bc50c17b81590b2f6f1000b3ccf4e8a15ab3\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-composite-9.0.0-preview.2.24128.4-linux-arm.tar.gz\",\n            \"hash\": \"725a370e508db4b4be0b4e6cb1ba1070316877a6950bbfcbe0fad76dfcc8bf12cbe987a4ce3787a48eeeccd37c04189d3fa517f1ceeb78ad92fbb30e326819ce\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-composite-9.0.0-preview.2.24128.4-linux-arm64.tar.gz\",\n            \"hash\": \"ae20e3cabb39e4cb91cd3678f85290e89162d2007316719ca408093b9c8d5772a443926abac1cd909405d6a58b81ec0e96b8d00fc076c699081965e1d1e90b4f\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-composite-9.0.0-preview.2.24128.4-linux-musl-arm.tar.gz\",\n            \"hash\": \"de45c5866d477bc2685f3a9d6ebdd08e3cb7effc37df896fb1a10c5ab9dd95cc120e49e9d95930c078f9f8b7262ed567b85cb752ee93b236193eb3e90fc49657\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-composite-9.0.0-preview.2.24128.4-linux-musl-arm64.tar.gz\",\n            \"hash\": \"4030c12b8efd49a254a53454bae20407f3fdfba39c8ecf637ef9581b8cdb98b792d904d0be641561237b47f7daf83281b15e473b81a43c0f1052e6f42011f92a\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-composite-9.0.0-preview.2.24128.4-linux-musl-x64.tar.gz\",\n            \"hash\": \"18987fc174b6f52c65537e91a60d9590af3fee05c3f83b248abcbd17b8988996d79eeaefedbc0c42a2b9a815ce28c6babf4dbf3d3202fcf30bff28262ae22514\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/aspnetcore-runtime-composite-9.0.0-preview.2.24128.4-linux-x64.tar.gz\",\n            \"hash\": \"80e47ec27e40c11cce232b033c0fa961f3262eed9cb6743768d164af7fb5243e10464a7607fa1fffb4217446f5716382dfd836e7c8c5a118df6da4ac6203e689\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.2.24128.4/dotnet-hosting-9.0.0-preview.2.24128.4-win.exe\",\n            \"hash\": \"a959ade3fa01e191bf8b03adc89247a1a45374d354e3c27db06927e8e692d8368974e918ecf27a1a0bcd2020f2f11212d878d64a389f907345d053aa79b65449\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0-preview.2.24128.10\",\n        \"version-display\": \"9.0.0-preview.2\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.2.24128.10/windowsdesktop-runtime-9.0.0-preview.2.24128.10-win-arm64.exe\",\n            \"hash\": \"9bc150443a0358f44a9891c23d8dde0f05717291d91ef1458093426023621122cb23cafb3543d8969a99dd02dbd16238816034517dc9aa0c9ccf5d4164a447b2\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.2.24128.10/windowsdesktop-runtime-9.0.0-preview.2.24128.10-win-arm64.zip\",\n            \"hash\": \"8cb6cb9edf27ea32bd67164d108d8ce15e9850e5e1d9cadef427e273fc895a84484a081f5162c6ea693bf94d5ac751432ab78c25be4ea09cfda30335d6f8838f\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.2.24128.10/windowsdesktop-runtime-9.0.0-preview.2.24128.10-win-x64.exe\",\n            \"hash\": \"5cd41db47e7e52f62b8f2f0f312224117ec83c4fb27af08e5bdb9d560efaa58863c36a0c5a46d3acfe971bcb983a14af659579503cf53c9b4900054b5c3c2f70\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.2.24128.10/windowsdesktop-runtime-9.0.0-preview.2.24128.10-win-x64.zip\",\n            \"hash\": \"faf7c80e268b50d6eb36b27e4c3f0bc85361bfdcb6f58bb4d421c319f65e648c8960b3f501c968e0b321b83b84658faa311117ca20ff5756525cb5a056c0f6a5\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.2.24128.10/windowsdesktop-runtime-9.0.0-preview.2.24128.10-win-x86.exe\",\n            \"hash\": \"c7bd9a824c7594099d4d26759dbb181d49698cee8b35bb46d72fc88a09989b3b49d110058a40c1fc237f925a98e47b071e29396b68fb67a09c61a9fe4e391003\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.2.24128.10/windowsdesktop-runtime-9.0.0-preview.2.24128.10-win-x86.zip\",\n            \"hash\": \"559103fd16447f5f279d3174cfe2efb1d31215c175134a099df3653c5debeb37781fb98000444f918840bd3273fb0eabba58b5f1b172310e2078b4a7b213a710\"\n          }\n        ]\n      }\n    },\n    {\n      \"release-date\": \"2024-02-13\",\n      \"release-version\": \"9.0.0-preview.1\",\n      \"security\": false,\n      \"cve-list\": [],\n      \"release-notes\": \"https://github.com/dotnet/core/blob/main/release-notes/9.0/preview/preview1/9.0.0-preview.1.md\",\n      \"runtime\": {\n        \"version\": \"9.0.0-preview.1.24080.9\",\n        \"version-display\": \"9.0.0-preview.1\",\n        \"vs-support\": \"Visual Studio 2022 (v17.10 Preview 1)\",\n        \"vs-mac-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-linux-arm.tar.gz\",\n            \"hash\": \"8f5e104562dd8ecbe87433896ba7bdd48400f28f41d0ffebe39d160adb6f0f600dcd327acd653d6c8a6dd13f3b375784290f17fd129e2f20bf307ccdbc4ba285\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-linux-arm64.tar.gz\",\n            \"hash\": \"265b7bf094730be765bdaadec3215c1a7c51bff6fb18bb51cff383473e32d1ba821b6d046e0f7fa864400dc5cb68e35943057f5b6ae6e8c411375fc15fdbaf3c\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-linux-musl-arm.tar.gz\",\n            \"hash\": \"7e8d46ae5668cc13011b9b579f71f27fa5c5feb93be2f6ee3541e75a163bb9f82d5e7b41cd5290e964d1ce7644ffdb9832d1570d7d795821cfd8c12f029e5d74\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-linux-musl-arm64.tar.gz\",\n            \"hash\": \"9e5a8dac01bc070758fb07788ec693a2b1c98be2d8aa1036d70e778c024df93d5a9299a4198514b7a8712143de47af6ce830d059350ba8686c760c6a37a8811d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-linux-musl-x64.tar.gz\",\n            \"hash\": \"f6a42522f3bbf59e58e28f3b5ce0bdd2b81e5f0aa9634ea4be7221145853925c221bdf04988e9e7364efd578c665f5136af55edc2eb9e2b276877ccd92235d80\"\n          },\n          {\n            \"name\": \"dotnet-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-linux-x64.tar.gz\",\n            \"hash\": \"68f0b89227c8e0b3239477409708c1b0c5cc7d80afd6661dc2150946c66e2130cf560c2471609f0fd063f01ca1d8e72f74beec45ecb519cf58f1cdc434615054\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-osx-arm64.pkg\",\n            \"hash\": \"011963caf28e5fdd3a92b11732dffddf532f6c97ac5525682c32fc8ed3cb542f82aafdaa4020eef673f1b466533e2fdb133dab9334cff51840f45601c27a1a77\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-osx-arm64.tar.gz\",\n            \"hash\": \"63bf6a57f61c4dcf4e0cdcedb8ff6c76cb702a95d4e0033f17b4cd2a3e800e73ab16c401fb098416404ea5716c725c175f9422250b2a8816c08eed2702cd38e5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-osx-x64.pkg\",\n            \"hash\": \"d4cc85c39b4c287471784a61410458bc2078f44cf07146ea24ae11a8e96944297133802972de80623ac7aff10e57289628e1cd5cc9a64ac2fa3effec2b369418\"\n          },\n          {\n            \"name\": \"dotnet-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-osx-x64.tar.gz\",\n            \"hash\": \"f644ce6ee158bd86a4aba21bdd955a3aebb0367b5af618b6e77dc85922bc790b9c33b572606a15f566b2729a90923f66a933159124e803494105a695c890b775\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-win-arm64.exe\",\n            \"hash\": \"6027f09e7bd4612fe9cd1ac2550d0663cb80d63cec1a41cbd4a9f502d14c77ed83f83e3e47b87da28ce0820e894a0539624939d09e9363d52f2218696dc685e5\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-win-arm64.zip\",\n            \"hash\": \"3a800156e1680f46a0cdeeb60b780ee56e3150c52f1c6e9b440eb30529f2bc36dd928c51afd495396f8f4a7c1998e52168fedd2a1205ca0f7ccda2d880d12a4d\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-win-x64.exe\",\n            \"hash\": \"a535447c840aa27e21b69de7172f225ae5e3bea3ed632b81372a4cd20919a2ca4c6ae7c3963648bdb98d458fb204c5c5af3e85e0b44c8b5b803c1b3e4d8e791e\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-win-x64.zip\",\n            \"hash\": \"a417238c10646dac5ff47663b34d05ed51e96e224aa1f29dc2de03a96c273d72dbd3c890a36b728fc01d0a3d6ae50804ade78c9f29310cdab49dcecf8e0e6ad8\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-win-x86.exe\",\n            \"hash\": \"70f677e2171a2773a0b0dafd0deffce9bdbf97692e34d2032163ea21645394becb71afdeda332edd0f558dc7e7080ed4e4a695f2ee32aa3866e8d7b81ef919a2\"\n          },\n          {\n            \"name\": \"dotnet-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Runtime/9.0.0-preview.1.24080.9/dotnet-runtime-9.0.0-preview.1.24080.9-win-x86.zip\",\n            \"hash\": \"be777abcd6300a3628ea3a154d0c62fae0c4142f3a5e9c4eda5d315d4716014dd42cddc9cac25c2fccddb106bade516f30805584e07c086f2d3fc9a171135dfb\"\n          }\n        ]\n      },\n      \"sdk\": {\n        \"version\": \"9.0.100-preview.1.24101.2\",\n        \"version-display\": \"9.0.100-preview.1\",\n        \"runtime-version\": \"9.0.0-preview.1.24080.9\",\n        \"vs-version\": \"\",\n        \"vs-mac-version\": \"\",\n        \"vs-support\": \"Visual Studio 2022 (v17.10 Preview 1)\",\n        \"vs-mac-support\": \"\",\n        \"csharp-version\": \"12.0\",\n        \"fsharp-version\": \"8.0\",\n        \"vb-version\": \"16.9\",\n        \"files\": [\n          {\n            \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-arm.tar.gz\",\n            \"hash\": \"fa14b4545688097f490b9730a9063a3f7e7b779fd57a4bee43e61ef6f61c6aa5ba33ae5e1c8e0bc13dd060709d3eebbd04b044e06a9a70eecc73243db4107086\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-arm64.tar.gz\",\n            \"hash\": \"b7c29e4e4baf2d2ba7b29fc5a080df708c5a915e6fb1ce2ff93ffc8f18e7725fae5d569ab1349ef4b067d05d00886a17c8d1a95e211602db1ee5da820b5edefd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-musl-arm.tar.gz\",\n            \"hash\": \"821f7e1387a50b27c9fcad1e1955cc6aeb4012a0d1cef7273f882409ca18a42d97fe3fcad18eb141e8dd91afc16fa698a720763e4be6d7054af9c4e9104b43fd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-musl-arm64.tar.gz\",\n            \"hash\": \"93a0126c76bcd054a7119fb5e51b64980b130f55850d006d77ed4dd3a5f9ec79bfe49c0160c2c4dd58a01226c7264081f36b594e4b2d5c8d18a400ab57b86460\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-musl-x64.tar.gz\",\n            \"hash\": \"7b44faba92fcc228477dce2ecd3311f0d6b68c30f082ff020472b07fc2615aa0e591da9185667a172a6f708192c6610e6c20594f79cee8e1a046515ffbb8e26b\"\n          },\n          {\n            \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-x64.tar.gz\",\n            \"hash\": \"e176126d9a12075d91a0ad2b4dd50021a564258742d86560bd216ac36482c763087bd8affc68fe9a8d3c46f61f864bc2c7c2e455739d21614516c4f73fd281fd\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-osx-arm64.pkg\",\n            \"hash\": \"5375987c0a02eb33d820802ec9c76acb14ccecf1a35df1f894bf7e362e1400a8b48dad628267b65d8bda29850f1a70ff4cc0960cd57cd61dc7f155e155bc9de6\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-osx-arm64.tar.gz\",\n            \"hash\": \"901835cfc277c626d38c7a2bc1a6704115d240812631cd32f4b51833b41ddcd3a4a169a1bbda42a9446eb33b2337f6a8c6410bc3d1bae557c8898d427e2fc8c1\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.pkg\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-osx-x64.pkg\",\n            \"hash\": \"8254d65d65ef1bc038255e651ad962bc15249b2f5a760c31e628fa342f3a2bfd2dfd2aa96f1125cf8318d60e8ec99cb7a51dab1d780e606b4f3d47c2b7159f96\"\n          },\n          {\n            \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-osx-x64.tar.gz\",\n            \"hash\": \"90c6709c54c0f9f4d7100bbf9c3b8136b6468617034c23f6a60dc17092e311539d54b741e149b70f1b6a6e2c6be0aacc948d4c72abac724f47d5ea05e02a2939\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-arm64.exe\",\n            \"hash\": \"99c61acc8bf757793fa2a08eb29afcf3e365bf285fde929c58ce774424294570c26609468cc94f89d891f0c42769041d6ad9c6c759a0665727dba16288dd2f64\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-arm64.zip\",\n            \"hash\": \"38bc46731201d5796d7a7ee30446fc35f2c225a75c978b896e7b6b09c7d537b22f991acbd413f6352df39cb8e69d94634b085968256377d83843527e55268d0d\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-x64.exe\",\n            \"hash\": \"82dfbbe479df411c0a177459ed9af55c373561e5b23dfcd09eb1ba713764e0800519dc2b50138108520bb772c8aec696c31f99c85674cb7c7d7b999292668d31\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-x64.zip\",\n            \"hash\": \"a993f0a23dee43f43e51509094f385379183ae916ee04f891927bc2398fd3645bfd866d0960c9d0ccf11f7878856dd7317298a6e5ec6a17dd7f32fb3890855a9\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-x86.exe\",\n            \"hash\": \"9ee4c1da97526bffda9c1ad58e609bbbcad324dcb4e24b1cdd30f1feb0b37333e326b95ae08706e56f52c12ee20556151b13d7d5c04a0283f3420659c706ac63\"\n          },\n          {\n            \"name\": \"dotnet-sdk-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-x86.zip\",\n            \"hash\": \"1ea49121eebc8ad47dae4148bdda7ee9ca17f65f49af9a0ce39d42dfa3916ac4d8430d7d0c0c7f466f15fc0fdd844b891635e743ca4782571cdde76828f7d236\"\n          }\n        ]\n      },\n      \"sdks\": [\n        {\n          \"version\": \"9.0.100-preview.1.24101.2\",\n          \"version-display\": \"9.0.100-preview.1\",\n          \"runtime-version\": \"9.0.0-preview.1.24080.9\",\n          \"vs-version\": \"\",\n          \"vs-mac-version\": \"\",\n          \"vs-support\": \"Visual Studio 2022 (v17.10 Preview 1)\",\n          \"vs-mac-support\": \"\",\n          \"csharp-version\": \"12.0\",\n          \"fsharp-version\": \"8.0\",\n          \"vb-version\": \"16.9\",\n          \"files\": [\n            {\n              \"name\": \"dotnet-sdk-linux-arm.tar.gz\",\n              \"rid\": \"linux-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-arm.tar.gz\",\n              \"hash\": \"fa14b4545688097f490b9730a9063a3f7e7b779fd57a4bee43e61ef6f61c6aa5ba33ae5e1c8e0bc13dd060709d3eebbd04b044e06a9a70eecc73243db4107086\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-arm64.tar.gz\",\n              \"rid\": \"linux-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-arm64.tar.gz\",\n              \"hash\": \"b7c29e4e4baf2d2ba7b29fc5a080df708c5a915e6fb1ce2ff93ffc8f18e7725fae5d569ab1349ef4b067d05d00886a17c8d1a95e211602db1ee5da820b5edefd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm.tar.gz\",\n              \"rid\": \"linux-musl-arm\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-musl-arm.tar.gz\",\n              \"hash\": \"821f7e1387a50b27c9fcad1e1955cc6aeb4012a0d1cef7273f882409ca18a42d97fe3fcad18eb141e8dd91afc16fa698a720763e4be6d7054af9c4e9104b43fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-arm64.tar.gz\",\n              \"rid\": \"linux-musl-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-musl-arm64.tar.gz\",\n              \"hash\": \"93a0126c76bcd054a7119fb5e51b64980b130f55850d006d77ed4dd3a5f9ec79bfe49c0160c2c4dd58a01226c7264081f36b594e4b2d5c8d18a400ab57b86460\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-musl-x64.tar.gz\",\n              \"rid\": \"linux-musl-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-musl-x64.tar.gz\",\n              \"hash\": \"7b44faba92fcc228477dce2ecd3311f0d6b68c30f082ff020472b07fc2615aa0e591da9185667a172a6f708192c6610e6c20594f79cee8e1a046515ffbb8e26b\"\n            },\n            {\n              \"name\": \"dotnet-sdk-linux-x64.tar.gz\",\n              \"rid\": \"linux-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-linux-x64.tar.gz\",\n              \"hash\": \"e176126d9a12075d91a0ad2b4dd50021a564258742d86560bd216ac36482c763087bd8affc68fe9a8d3c46f61f864bc2c7c2e455739d21614516c4f73fd281fd\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.pkg\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-osx-arm64.pkg\",\n              \"hash\": \"5375987c0a02eb33d820802ec9c76acb14ccecf1a35df1f894bf7e362e1400a8b48dad628267b65d8bda29850f1a70ff4cc0960cd57cd61dc7f155e155bc9de6\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-arm64.tar.gz\",\n              \"rid\": \"osx-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-osx-arm64.tar.gz\",\n              \"hash\": \"901835cfc277c626d38c7a2bc1a6704115d240812631cd32f4b51833b41ddcd3a4a169a1bbda42a9446eb33b2337f6a8c6410bc3d1bae557c8898d427e2fc8c1\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.pkg\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-osx-x64.pkg\",\n              \"hash\": \"8254d65d65ef1bc038255e651ad962bc15249b2f5a760c31e628fa342f3a2bfd2dfd2aa96f1125cf8318d60e8ec99cb7a51dab1d780e606b4f3d47c2b7159f96\"\n            },\n            {\n              \"name\": \"dotnet-sdk-osx-x64.tar.gz\",\n              \"rid\": \"osx-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-osx-x64.tar.gz\",\n              \"hash\": \"90c6709c54c0f9f4d7100bbf9c3b8136b6468617034c23f6a60dc17092e311539d54b741e149b70f1b6a6e2c6be0aacc948d4c72abac724f47d5ea05e02a2939\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.exe\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-arm64.exe\",\n              \"hash\": \"99c61acc8bf757793fa2a08eb29afcf3e365bf285fde929c58ce774424294570c26609468cc94f89d891f0c42769041d6ad9c6c759a0665727dba16288dd2f64\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-arm64.zip\",\n              \"rid\": \"win-arm64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-arm64.zip\",\n              \"hash\": \"38bc46731201d5796d7a7ee30446fc35f2c225a75c978b896e7b6b09c7d537b22f991acbd413f6352df39cb8e69d94634b085968256377d83843527e55268d0d\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.exe\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-x64.exe\",\n              \"hash\": \"82dfbbe479df411c0a177459ed9af55c373561e5b23dfcd09eb1ba713764e0800519dc2b50138108520bb772c8aec696c31f99c85674cb7c7d7b999292668d31\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x64.zip\",\n              \"rid\": \"win-x64\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-x64.zip\",\n              \"hash\": \"a993f0a23dee43f43e51509094f385379183ae916ee04f891927bc2398fd3645bfd866d0960c9d0ccf11f7878856dd7317298a6e5ec6a17dd7f32fb3890855a9\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.exe\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-x86.exe\",\n              \"hash\": \"9ee4c1da97526bffda9c1ad58e609bbbcad324dcb4e24b1cdd30f1feb0b37333e326b95ae08706e56f52c12ee20556151b13d7d5c04a0283f3420659c706ac63\"\n            },\n            {\n              \"name\": \"dotnet-sdk-win-x86.zip\",\n              \"rid\": \"win-x86\",\n              \"url\": \"https://builds.dotnet.microsoft.com/dotnet/Sdk/9.0.100-preview.1.24101.2/dotnet-sdk-9.0.100-preview.1.24101.2-win-x86.zip\",\n              \"hash\": \"1ea49121eebc8ad47dae4148bdda7ee9ca17f65f49af9a0ce39d42dfa3916ac4d8430d7d0c0c7f466f15fc0fdd844b891635e743ca4782571cdde76828f7d236\"\n            }\n          ]\n        }\n      ],\n      \"aspnetcore-runtime\": {\n        \"version\": \"9.0.0-preview.1.24081.5\",\n        \"version-display\": \"9.0.0-preview.1\",\n        \"version-aspnetcoremodule\": [\n          \"19.0.24031.0\"\n        ],\n        \"vs-version\": \"\",\n        \"files\": [\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-linux-arm.tar.gz\",\n            \"hash\": \"688c07f9d896db90a1ea863b008fff5187d50b2aef352298f3e4c16522812f3dc9be22f8bdee89abde8554e7668bb9f35d0aa4746b1fd9c42ea0aa8ef84f1f83\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-linux-arm64.tar.gz\",\n            \"hash\": \"118967e64995d7c242738bf806928ecc52cfae3b0e0429a6951047eaf37d27bdde0adc0c6dc74e32d61b69565f7666cbfd4658396c37988e5d343debcc15bdf6\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"1d322b98cb039938a735267b29f49d1bb5b024fe2fda96608de725c2419d2da3cae8f6e3e7fa2594d0d7768180ced2bc1c2da20582380aa66954e34fe0ed01ea\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"b297d9cfa88fbd879f4e36a567b17109d5a0ac32102afdc5243c181f469f5c9beac0ec2ac776b68b7419ad9b9ddb932ef0c8f79a7cc14e6d62a491959685969c\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"5ddef8928f7db38a3bc9fdad0d7cf8bddd8dee698ce8b72e7e7eedca5d769b70eab79ed161576ea8a5eb65806f80b27f6668f200ddd6c9425ab724074c543b03\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-linux-x64.tar.gz\",\n            \"hash\": \"29bfe0b5b72608eba97151909308a67a47dc299902a46bf1a22d67bb5f8a0c87c6f4533c0c2d4679f9440f9ccccf549c434a4280c101f7633bdbdcf049c95817\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-arm64.tar.gz\",\n            \"rid\": \"osx-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-osx-arm64.tar.gz\",\n            \"hash\": \"09746054c291b10bacf3fba8ad147443fd41f42b6b04d9559281bc7d919ddc56ebe7402021997f6f24b745b3292368719cc2142d0eebba76226c5603545b6743\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-osx-x64.tar.gz\",\n            \"rid\": \"osx-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-osx-x64.tar.gz\",\n            \"hash\": \"3ed80631a3ca0a4684a70fc0f17d46257a63cc71c7497c958accb4d329eff4a7c832a29c028b608798fbed0b82e2c5b7d5533c57dff2188d4142559b57341192\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-win-arm64.zip\",\n            \"hash\": \"4ef745d883f519a3949ff7479950945a6952de6c0ab10aa0d9320dc9c6578221bf7551788f17d62a2c287f5a662ea81c3b747d1a1b28184a32f7cce47f0ef4cb\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-win-x64.exe\",\n            \"hash\": \"1644a3474e01a3b5805b341881b4450af885b043d7578360a7a0bfecb13158305d878c9624d697774e10ed5c84c976c1a7f541ecd585bd6d3d53084f6d9fb880\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-win-x64.zip\",\n            \"hash\": \"e8ebffbc89b516aedfab48fa8cfd9ec529437df21724b6e7f0a8b8b97eba29d274499a37fca0aaa0f7bd84ab3fb839a2ff09c6042f3abe568d4ec8191becbbd7\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-win-x86.exe\",\n            \"hash\": \"219addc5b3fc08f3e9c650171cb2804161c9a4c3a70f5367a32a2ef368a7850a8b18d232f27d5c265b323c4ccc7034f21d820558e2f05c59f8fd6f444e7c44ac\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-9.0.0-preview.1.24081.5-win-x86.zip\",\n            \"hash\": \"6e7730207fdfef400edac61ec142dd7440376699e25675d13fe05b347264f69b9a7cc3b047a8051b14c7862d144a465fe63fc9ff2a6d3c3c7a2a3cb46d1f6657\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm.tar.gz\",\n            \"rid\": \"linux-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-composite-9.0.0-preview.1.24081.5-linux-arm.tar.gz\",\n            \"hash\": \"2310efa27939af7f28ff3869a640a182a3fca6374b06db98fc9cdc6a5b49b75de9904bb47bb3e15334620357662ede933b08994b35d5bc1dd5c859ca73530602\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-arm64.tar.gz\",\n            \"rid\": \"linux-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-composite-9.0.0-preview.1.24081.5-linux-arm64.tar.gz\",\n            \"hash\": \"1ea9bc90557a4196eecc51f8965994c6feb446c671b19236b6593a8996641410cc15f2ed6b2a7be73217ae89683664cee2af68594e3a0164306b770778d96295\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm.tar.gz\",\n            \"rid\": \"linux-musl-arm\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-composite-9.0.0-preview.1.24081.5-linux-musl-arm.tar.gz\",\n            \"hash\": \"6f070ba486fdc59d1717c2089f322329d28a4996d5e165ac55f7ed07dc4f014fa18efc2ab36e50fbe0959d10960a346476fede4ef4115e8972ee105fc7b777a5\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-arm64.tar.gz\",\n            \"rid\": \"linux-musl-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-composite-9.0.0-preview.1.24081.5-linux-musl-arm64.tar.gz\",\n            \"hash\": \"5ef4134b9ecdc4b80bb402209fd2adba4c219d235e0f3a4d196c8d7ac0366c9fd40c6a515d1f585b3f9b3bcbeaf7bb9c41a64643ef2f065305abdd47014879c0\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-musl-x64.tar.gz\",\n            \"rid\": \"linux-musl-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-composite-9.0.0-preview.1.24081.5-linux-musl-x64.tar.gz\",\n            \"hash\": \"d5740881123b148f0e9b3d990f2407da9b0a4cb61e6e853c9eb709a52196dccc2e2cb8b9ee5c778fc6022fb5a45a076436020a4817089dbb67e2e126f717b342\"\n          },\n          {\n            \"name\": \"aspnetcore-runtime-composite-linux-x64.tar.gz\",\n            \"rid\": \"linux-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/aspnetcore-runtime-composite-9.0.0-preview.1.24081.5-linux-x64.tar.gz\",\n            \"hash\": \"8022e4a1d37089242905ca9c4fd5f37a22136f377a170a677f1005fc8ce32d5bbc6341c0b80236d8287022533d908a4d91120bac894ab418b20a056de2e45b61\"\n          },\n          {\n            \"name\": \"dotnet-hosting-win.exe\",\n            \"rid\": \"\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/9.0.0-preview.1.24081.5/dotnet-hosting-9.0.0-preview.1.24081.5-win.exe\",\n            \"hash\": \"67a972f36f9e31417e6746b9ea69fc033e945708c2e43be665239ac16f561e92960240f789d942ae886b4d4a38a49e1ed226e5b92f0eeb1e66d178c760cd4960\",\n            \"akams\": \"https://aka.ms/dotnetcore-9-0-windowshosting\"\n          }\n        ]\n      },\n      \"windowsdesktop\": {\n        \"version\": \"9.0.0-preview.1.24081.3\",\n        \"version-display\": \"9.0.0-preview.1\",\n        \"files\": [\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.exe\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.1.24081.3/windowsdesktop-runtime-9.0.0-preview.1.24081.3-win-arm64.exe\",\n            \"hash\": \"bf252da538951cce59469e1d2074d34c4b8bb04de33421c9b594c447c8d3b9e2e2cacd28e4f515ba1a2e430db18d11c70bffb07cdcb518a3d035cf88f777a768\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-arm64.zip\",\n            \"rid\": \"win-arm64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.1.24081.3/windowsdesktop-runtime-9.0.0-preview.1.24081.3-win-arm64.zip\",\n            \"hash\": \"2df2ba1949621525b70767bd1230928d8d82255e58a0f28a131ae4345d32e62ceeac41f42bac119c7b60eef0f9731d4920e522a4555e5d64a34ef361ef5128de\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.exe\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.1.24081.3/windowsdesktop-runtime-9.0.0-preview.1.24081.3-win-x64.exe\",\n            \"hash\": \"ef2731f34d6d2e732deaa5dff36e4fc04d6c2d6f600d0faf0a8f4f662e731fb6eeb778efa2dbc287dc04bdc00fda257f194ffb7821958cd4137683feaabe9d12\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x64.zip\",\n            \"rid\": \"win-x64\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.1.24081.3/windowsdesktop-runtime-9.0.0-preview.1.24081.3-win-x64.zip\",\n            \"hash\": \"15f93de63a9144e01528bafd169d62a0e7fa1fc5a85c4e7422a1553b79ddbbc7213488facc38d677b8fca90778c608d623f49ada121a16664d675a1d7e225d9e\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.exe\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.1.24081.3/windowsdesktop-runtime-9.0.0-preview.1.24081.3-win-x86.exe\",\n            \"hash\": \"0288cddb418da54bbc09fdf9640eaa8ea0c236e4cec8613b70c10f6a2e2f831104d68d0bbe11138ba51bf51861cfdb6fba532394e3e58a7ce255f28f7f71a474\"\n          },\n          {\n            \"name\": \"windowsdesktop-runtime-win-x86.zip\",\n            \"rid\": \"win-x86\",\n            \"url\": \"https://builds.dotnet.microsoft.com/dotnet/WindowsDesktop/9.0.0-preview.1.24081.3/windowsdesktop-runtime-9.0.0-preview.1.24081.3-win-x86.zip\",\n            \"hash\": \"e47ae91d7bf992e9dda09519551dc2dc9f5cec7b61542961c3b8c9ca67606204ed2f212934bed8a34bf6331d095683f018bb4418fed442e5b3ead1a11b479f28\"\n          }\n        ]\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "JexusManager/Resources/releases-index.json",
    "content": "{\n    \"$schema\": \"https://json.schemastore.org/dotnet-releases-index.json\",\n    \"releases-index\": [\n        {\n            \"channel-version\": \"10.0\",\n            \"latest-release\": \"10.0.0-preview.4\",\n            \"latest-release-date\": \"2025-05-13\",\n            \"security\": false,\n            \"latest-runtime\": \"10.0.0-preview.4.25258.110\",\n            \"latest-sdk\": \"10.0.100-preview.4.25258.110\",\n            \"product\": \".NET\",\n            \"support-phase\": \"preview\",\n            \"release-type\": \"lts\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/10.0/releases.json\",\n            \"supported-os.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/10.0/supported-os.json\"\n        },\n        {\n            \"channel-version\": \"9.0\",\n            \"latest-release\": \"9.0.5\",\n            \"latest-release-date\": \"2025-05-13\",\n            \"security\": true,\n            \"latest-runtime\": \"9.0.5\",\n            \"latest-sdk\": \"9.0.300\",\n            \"product\": \".NET\",\n            \"support-phase\": \"active\",\n            \"eol-date\": \"2026-05-12\",\n            \"release-type\": \"sts\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/9.0/releases.json\",\n            \"supported-os.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/9.0/supported-os.json\"\n        },\n        {\n            \"channel-version\": \"8.0\",\n            \"latest-release\": \"8.0.16\",\n            \"latest-release-date\": \"2025-05-13\",\n            \"security\": true,\n            \"latest-runtime\": \"8.0.16\",\n            \"latest-sdk\": \"8.0.409\",\n            \"product\": \".NET\",\n            \"support-phase\": \"active\",\n            \"eol-date\": \"2026-11-10\",\n            \"release-type\": \"lts\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/8.0/releases.json\",\n            \"supported-os.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/8.0/supported-os.json\"\n        },\n        {\n            \"channel-version\": \"7.0\",\n            \"latest-release\": \"7.0.20\",\n            \"latest-release-date\": \"2024-05-28\",\n            \"security\": true,\n            \"latest-runtime\": \"7.0.20\",\n            \"latest-sdk\": \"7.0.410\",\n            \"product\": \".NET\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2024-05-14\",\n            \"release-type\": \"sts\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/7.0/releases.json\",\n            \"supported-os.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/7.0/supported-os.json\"\n        },\n        {\n            \"channel-version\": \"6.0\",\n            \"latest-release\": \"6.0.36\",\n            \"latest-release-date\": \"2024-11-12\",\n            \"security\": false,\n            \"latest-runtime\": \"6.0.36\",\n            \"latest-sdk\": \"6.0.428\",\n            \"product\": \".NET\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2024-11-12\",\n            \"release-type\": \"lts\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/6.0/releases.json\",\n            \"supported-os.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/6.0/supported-os.json\"\n        },\n        {\n            \"channel-version\": \"5.0\",\n            \"latest-release\": \"5.0.17\",\n            \"latest-release-date\": \"2022-05-10\",\n            \"security\": true,\n            \"latest-runtime\": \"5.0.17\",\n            \"latest-sdk\": \"5.0.408\",\n            \"product\": \".NET\",\n            \"release-type\": \"sts\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2022-05-10\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/5.0/releases.json\"\n        },\n        {\n            \"channel-version\": \"3.1\",\n            \"latest-release\": \"3.1.32\",\n            \"latest-release-date\": \"2022-12-13\",\n            \"security\": true,\n            \"latest-runtime\": \"3.1.32\",\n            \"latest-sdk\": \"3.1.426\",\n            \"product\": \".NET Core\",\n            \"release-type\": \"lts\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2022-12-13\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/3.1/releases.json\"\n        },\n        {\n            \"channel-version\": \"3.0\",\n            \"latest-release\": \"3.0.3\",\n            \"latest-release-date\": \"2020-02-18\",\n            \"security\": false,\n            \"latest-runtime\": \"3.0.3\",\n            \"latest-sdk\": \"3.0.103\",\n            \"product\": \".NET Core\",\n            \"release-type\": \"sts\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2020-03-03\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/3.0/releases.json\"\n        },\n        {\n            \"channel-version\": \"2.1\",\n            \"latest-release\": \"2.1.30\",\n            \"latest-release-date\": \"2021-08-19\",\n            \"security\": true,\n            \"latest-runtime\": \"2.1.30\",\n            \"latest-sdk\": \"2.1.818\",\n            \"product\": \".NET Core\",\n            \"release-type\": \"lts\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2021-08-21\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/2.1/releases.json\"\n        },\n        {\n            \"channel-version\": \"2.2\",\n            \"latest-release\": \"2.2.8\",\n            \"latest-release-date\": \"2019-11-19\",\n            \"security\": true,\n            \"latest-runtime\": \"2.2.8\",\n            \"latest-sdk\": \"2.2.207\",\n            \"product\": \".NET Core\",\n            \"release-type\": \"sts\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2019-12-23\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/2.2/releases.json\"\n        },\n        {\n            \"channel-version\": \"2.0\",\n            \"latest-release\": \"2.0.9\",\n            \"latest-release-date\": \"2018-07-10\",\n            \"security\": true,\n            \"latest-runtime\": \"2.0.9\",\n            \"latest-sdk\": \"2.1.202\",\n            \"product\": \".NET Core\",\n            \"release-type\": \"sts\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2018-10-01\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/2.0/releases.json\"\n        },\n        {\n            \"channel-version\": \"1.1\",\n            \"latest-release\": \"1.1.13\",\n            \"latest-release-date\": \"2019-05-14\",\n            \"security\": true,\n            \"latest-runtime\": \"1.1.13\",\n            \"latest-sdk\": \"1.1.14\",\n            \"product\": \".NET Core\",\n            \"release-type\": \"lts\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2019-06-27\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/1.1/releases.json\"\n        },\n        {\n            \"channel-version\": \"1.0\",\n            \"latest-release\": \"1.0.16\",\n            \"latest-release-date\": \"2019-05-14\",\n            \"security\": true,\n            \"latest-runtime\": \"1.0.16\",\n            \"latest-sdk\": \"1.1.14\",\n            \"product\": \".NET Core\",\n            \"release-type\": \"lts\",\n            \"support-phase\": \"eol\",\n            \"eol-date\": \"2019-06-27\",\n            \"releases.json\": \"https://builds.dotnet.microsoft.com/dotnet/release-metadata/1.0/releases.json\"\n        }\n    ]\n}\n"
  },
  {
    "path": "JexusManager/Services/NavigationService.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Services\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Collections.ObjectModel;\n    using System.Windows.Forms;\n    using System.Linq;\n    using Microsoft.Extensions.Logging;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    internal sealed class NavigationService : INavigationService\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"NavigationService\");\n\n        public NavigationService(MainForm host)\n        {\n            _host = host;\n            _logger.LogInformation(\"NavigationService initialized\");\n        }\n        #region INavigationService\n\n        private readonly List<NavigationItem> _items = new List<NavigationItem>();\n        private readonly IMainForm _host;\n\n        public bool Navigate(Connection connection, ManagementConfigurationPath configurationPath, Type pageType, object navigationData)\n        {\n            _logger.LogDebug(\"Navigate requested to page type: {PageType}\", pageType.Name);\n            var item = new NavigationItem(connection, configurationPath, pageType, navigationData);\n            return NavigateToItem(item, true);\n        }\n\n        internal bool NavigateToItem(NavigationItem item, bool initializing)\n        {\n            _logger.LogDebug(\"NavigateToItem - item: {PageType}, initializing: {IsInitializing}\",\n                item.PageType.Name, initializing);\n\n            var previousItem = this.CurrentItem;\n            var previous = previousItem?.Page;\n            if (previous != null && previous.HasChanges)\n            {\n                var basic = (ModulePage)previous;\n                string msg = \"The changes you have made will be lost. Do you want to save changes?\";\n                _logger.LogDebug(\"Page has unsaved changes: {PageName}\", basic.Text);\n\n                if (\n                    _host.UIService.ShowMessage(\n                        msg,\n                        basic.Text,\n                        MessageBoxButtons.YesNoCancel,\n                        MessageBoxIcon.Exclamation,\n                        MessageBoxDefaultButton.Button3)\n                        == DialogResult.Yes)\n                {\n                    _logger.LogDebug(\"User chose to save changes\");\n                    var dialog = previous as ModuleDialogPage;\n                    if (dialog != null)\n                    {\n                        if (!dialog.ApplyChanges())\n                        {\n                            _logger.LogDebug(\"Failed to apply changes, cancelling navigation\");\n                            return false;\n                        }\n                    }\n                }\n                else if (_host.UIService.ShowMessage(msg, basic.Text, MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button3) == DialogResult.Cancel)\n                {\n                    // User cancelled navigation, so don't continue\n                    _logger.LogDebug(\"User cancelled navigation\");\n                    return false;\n                }\n            }\n\n            // The critical bug is here - we're manipulating the navigation history incorrectly\n            // when navigating to a new item vs. back/forward navigation\n            if (initializing)\n            {\n                // For new navigation, remove forward history and add the new item\n                var current = _items.IndexOf(CurrentItem);\n                if (current >= 0) // Only truncate if we have a current item\n                {\n                    _logger.LogDebug(\"Removing forward history from index {CurrentIndex} (current size: {HistorySize})\",\n                        current + 1, _items.Count);\n                    _items.RemoveRange(current + 1, _items.Count - 1 - current);\n                }\n                _logger.LogDebug(\"Adding new navigation item to history: {PageType}\", item.PageType.Name);\n                _items.Add(item);\n            }\n            // For back/forward navigation, the item is already in the history,\n            // so we just need to set the current item\n\n            CurrentItem = item;\n            _logger.LogDebug(\"Current item set to: {PageType}\", item.PageType.Name);\n\n            var page = CurrentItem.Page;\n            if (typeof(IModuleChildPage).IsAssignableFrom(item.PageType))\n            {\n                var pageInfo = previous?.PageInfo;\n                if (initializing)\n                {\n                    _logger.LogDebug(\"Initializing child page with parent: {ParentType}\",\n                        pageInfo?.GetType().Name ?? \"null\");\n                    page.Initialize(pageInfo?.AssociatedModule, pageInfo, item.NavigationData);\n                }\n\n                var child = (IModuleChildPage)page;\n                child.ParentPage = previous;\n            }\n\n            _host.LoadInner(page);\n            OnNavigationPerformed(new NavigationEventArgs(this.CurrentItem, previousItem, initializing));\n\n            // Log the current navigation stack\n            LogNavigationHistory();\n\n            return true;\n        }\n\n        public bool NavigateBack(int steps)\n        {\n            var current = _items.IndexOf(CurrentItem);\n            if (steps > current)\n            {\n                _logger.LogWarning(\"Attempted to navigate back {Steps} steps but only {Available} available\",\n                    steps, current);\n                throw new ArgumentOutOfRangeException();\n            }\n\n            _logger.LogDebug(\"Navigating back {Steps} steps from index {CurrentIndex}\", steps, current);\n            CurrentItem = _items[current - steps];\n            return NavigateToItem(CurrentItem, false);\n        }\n\n        public bool NavigateForward()\n        {\n            var current = _items.IndexOf(CurrentItem);\n            if (current == _items.Count - 1)\n            {\n                _logger.LogDebug(\"Attempted to navigate forward but already at the end of history\");\n                return false;\n            }\n\n            _logger.LogDebug(\"Navigating forward from index {CurrentIndex} to {NewIndex}\",\n                current, current + 1);\n            CurrentItem = _items[current + 1];\n            return NavigateToItem(CurrentItem, false);\n        }\n\n        public bool CanNavigateBack\n        {\n            get\n            {\n                var canNavigate = _items.IndexOf(CurrentItem) > 0;\n                _logger.LogTrace(\"CanNavigateBack: {Result}\", canNavigate);\n                return canNavigate;\n            }\n        }\n\n        public bool CanNavigateForward\n        {\n            get\n            {\n                var canNavigate = _items.IndexOf(CurrentItem) < _items.Count - 1;\n                _logger.LogTrace(\"CanNavigateForward: {Result}\", canNavigate);\n                return canNavigate;\n            }\n        }\n\n        public NavigationItem CurrentItem { get; private set; }\n\n        public ReadOnlyCollection<NavigationItem> History\n        {\n            get { return new ReadOnlyCollection<NavigationItem>(_items); }\n        }\n\n        public event NavigationEventHandler NavigationPerformed;\n        #endregion\n\n        private void OnNavigationPerformed(NavigationEventArgs e)\n        {\n            _logger.LogDebug(\"Navigation performed: {CurrentPageType} -> {PreviousPageType}, IsNew: {IsNew}\",\n                e.NewItem?.PageType.Name ?? \"null\",\n                e.OldItem?.PageType.Name ?? \"null\",\n                e.IsNew);\n\n            this.NavigationPerformed?.Invoke(this, e);\n        }\n\n        private void LogNavigationHistory()\n        {\n            var currentIndex = _items.IndexOf(CurrentItem);\n            var history = string.Join(\" -> \",\n                _items.Select((item, index) =>\n                    $\"{(index == currentIndex ? \"[\" : \"\")}\" +\n                    $\"{item.PageType.Name}\" +\n                    $\"{(index == currentIndex ? \"]\" : \"\")}\"));\n\n            _logger.LogDebug(\"Navigation history (current index: {CurrentIndex}): {History}\",\n                currentIndex, history);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/StringFormatter.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager\n{\n    internal static class StringFormatter\n    {\n        public static string RuntimeVersionToDisplay(this string text)\n        {\n            return string.IsNullOrWhiteSpace(text) ? \"No Managed Code\" : text.TrimStart('v');\n        }\n\n        public static string RuntimeVersionToDisplay2(this string text)\n        {\n            return string.IsNullOrWhiteSpace(text) ? \"No Managed Code\" : text;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/ThirdPartyNotices.txt",
    "content": "\nTHIRD-PARTY SOFTWARE NOTICES AND INFORMATION\nDo Not Translate or Localize\n\nJexus Manager incorporates third party material from the projects listed below. The original copyright notice and the license under which we received such third party material are set forth below. We reserves all other rights not expressly granted, whether by implication, estoppel or otherwise.\n\n1.  Bouncy Castle C# API (http://www.bouncycastle.org/csharp/)\n2.  CheckBox ComboBox Control (https://www.codeproject.com/articles/21085/checkbox-combobox-extending-the-combobox-class-and)\n3.  ActionList for Windows Forms/.NET (https://github.com/lextm/ActionListWinForms)\n6.  Enums.NET (https://github.com/TylerBrinkley/Enums.NET)\n8.  INI File Parser (https://github.com/rickyah/ini-parser)\n9.  ExpandCollapsePanel (https://github.com/alexander-makarov/ExpandCollapsePanel)\n10. Mono.Options and Mono.Security (https://github.com/mono/mono)\n11. JSON.NET (https://github.com/JamesNK/Newtonsoft.Json)\n12. Octokit - GitHub API Client Library for .NET (https://github.com/octokit/octokit.net)\n13. Ookii.Dialogs (http://www.ookii.org/software/dialogs/)\n14. PeNet (https://github.com/secana/PeNet)\n15. Rollbar.NET Notifier SDK (https://github.com/rollbar/Rollbar.NET)\n16. Microsoft ASP.NET Web API 2.2 Client Libraries (https://github.com/aspnet/AspNetWebStack)\n17. Reactive Extensions (https://github.com/dotnet/reactive)\n18. Vista.Controls.BreadcrumbBar (https://github.com/camalot/breadcrumbbar)\n\n%% Bouncy Castle C# API NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nThe MIT License (MIT)\n\nCopyright (c) 2000 - 2017 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \n=========================================\nEND OF Bouncy Castle C# API NOTICES, INFORMATION, AND LICENSE\n\n%% CheckBox ComboBox Control NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nThe Code Project Open License (CPOL)\n\nPreamble\n\nThis License governs Your use of the Work. This License is intended to allow developers to use the Source Code and Executable Files provided as part of the Work in any application in any form.\n\nThe main points subject to the terms of the License are:\n\n    Source Code and Executable Files can be used in commercial applications;\n    Source Code and Executable Files can be redistributed; and\n    Source Code can be modified to create derivative works.\n    No claim of suitability, guarantee, or any warranty whatsoever is provided. The software is provided \"as-is\".\n    The Article(s) accompanying the Work may not be distributed or republished without the Author's consent\n\nThis License is entered between You, the individual or other entity reading or otherwise making use of the Work licensed pursuant to this License and the individual or other entity which offers the Work under the terms of this License (\"Author\").\nLicense\n\nTHE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CODE PROJECT OPEN LICENSE (\"LICENSE\"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.\n\nBY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK.\n\n    Definitions.\n        \"Articles\" means, collectively, all articles written by Author which describes how the Source Code and Executable Files for the Work may be used by a user.\n        \"Author\" means the individual or entity that offers the Work under the terms of this License.\n        \"Derivative Work\" means a work based upon the Work or upon the Work and other pre-existing works.\n        \"Executable Files\" refer to the executables, binary files, configuration and any required data files included in the Work.\n        \"Publisher\" means the provider of the website, magazine, CD-ROM, DVD or other medium from or by which the Work is obtained by You.\n        \"Source Code\" refers to the collection of source code and configuration files used to create the Executable Files.\n        \"Standard Version\" refers to such a Work if it has not been modified, or has been modified in accordance with the consent of the Author, such consent being in the full discretion of the Author.\n        \"Work\" refers to the collection of files distributed by the Publisher, including the Source Code, Executable Files, binaries, data files, documentation, whitepapers and the Articles.\n        \"You\" is you, an individual or entity wishing to use the Work and exercise your rights under this License.\n    Fair Use/Fair Use Rights. Nothing in this License is intended to reduce, limit, or restrict any rights arising from fair use, fair dealing, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.\n    License Grant. Subject to the terms and conditions of this License, the Author hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:\n        You may use the standard version of the Source Code or Executable Files in Your own applications.\n        You may apply bug fixes, portability fixes and other modifications obtained from the Public Domain or from the Author. A Work modified in such a way shall still be considered the standard version and will be subject to this License.\n        You may otherwise modify Your copy of this Work (excluding the Articles) in any way to create a Derivative Work, provided that You insert a prominent notice in each changed file stating how, when and where You changed that file.\n        You may distribute the standard version of the Executable Files and Source Code or Derivative Work in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution.\n        The Articles discussing the Work published in any form by the author may not be distributed or republished without the Author's consent. The author retains copyright to any such Articles. You may use the Executable Files and Source Code pursuant to this License but you may not repost or republish or otherwise distribute or make available the Articles, without the prior written consent of the Author.\n    Any subroutines or modules supplied by You and linked into the Source Code or Executable Files of this Work shall not be considered part of this Work and will not be subject to the terms of this License.\n    Patent License. Subject to the terms and conditions of this License, each Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, import, and otherwise transfer the Work.\n    Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:\n        You agree not to remove any of the original copyright, patent, trademark, and attribution notices and associated disclaimers that may appear in the Source Code or Executable Files.\n        You agree not to advertise or in any way imply that this Work is a product of Your own.\n        The name of the Author may not be used to endorse or promote products derived from the Work without the prior written consent of the Author.\n        You agree not to sell, lease, or rent any part of the Work. This does not restrict you from including the Work or any part of the Work inside a larger software distribution that itself is being sold. The Work by itself, though, cannot be sold, leased or rented.\n        You may distribute the Executable Files and Source Code only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy of the Executable Files or Source Code You distribute and ensure that anyone receiving such Executable Files and Source Code agrees that the terms of this License apply to such Executable Files and/or Source Code. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute the Executable Files or Source Code with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License.\n        You agree not to use the Work for illegal, immoral or improper purposes, or on pages containing illegal, immoral or improper material. The Work is subject to applicable export laws. You agree to comply with all such laws and regulations that may apply to the Work after Your receipt of the Work.\n    Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED \"AS IS\", \"WHERE IS\" AND \"AS AVAILABLE\", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK (OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE WORKS.\n    Indemnity. You agree to defend, indemnify and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys’ fees) resulting from or relating to any use of the Work by You.\n    Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n    Termination.\n        This License and the rights granted hereunder will terminate automatically upon any breach by You of any term of this License. Individuals or entities who have received Derivative Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of this License.\n        If You bring a copyright, trademark, patent or any other infringement claim against any contributor over infringements You claim are made by the Work, your License from such contributor to the Work ends automatically.\n        Subject to the above terms and conditions, this License is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, the Author reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.\n    Publisher. The parties hereby confirm that the Publisher shall not, under any circumstances, be responsible for and shall not have any liability in respect of the subject matter of this License. The Publisher makes no warranty whatsoever in connection with the Work and shall not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. The Publisher reserves the right to cease making the Work available to You at any time without notice\n    Miscellaneous\n        This License shall be governed by the laws of the location of the head office of the Author or if the Author is an individual, the laws of location of the principal place of residence of the Author.\n        If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this License, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.\n        No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.\n        This License constitutes the entire agreement between the parties with respect to the Work licensed herein. There are no understandings, agreements or representations with respect to the Work not specified herein. The Author shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Author and You.\n=========================================\nEND OF CheckBox ComboBox Control NOTICES, INFORMATION, AND LICENSE\n\n%% ActionList for Windows Forms/.NET NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nCommon Public License (CPL)\n\nTHE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC\nLICENSE (\"AGREEMENT\"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM\nCONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.\n\n1. DEFINITIONS\n\n\"Contribution\" means:\n\na) in the case of the initial Contributor, the initial code and\ndocumentation distributed under this Agreement, and\n\nb) in the case of each subsequent Contributor:\n\ni) changes to the Program, and\n\nii) additions to the Program;\n\nwhere such changes and/or additions to the Program originate from and are\ndistributed by that particular Contributor. A Contribution 'originates' from a\nContributor if it was added to the Program by such Contributor itself or anyone\nacting on such Contributor's behalf. Contributions do not include additions to\nthe Program which: (i) are separate modules of software distributed in\nconjunction with the Program under their own license agreement, and (ii) are not\nderivative works of the Program.\n\n\"Contributor\" means any person or entity that distributes the Program.\n\n\"Licensed Patents \" mean patent claims licensable by a Contributor which are\nnecessarily infringed by the use or sale of its Contribution alone or when\ncombined with the Program.\n\n\"Program\" means the Contributions distributed in accordance with this Agreement.\n\n\"Recipient\" means anyone who receives the Program under this Agreement,\nincluding all Contributors.\n\n2. GRANT OF RIGHTS\n\na) Subject to the terms of this Agreement, each Contributor hereby grants\nRecipient a non-exclusive, worldwide, royalty-free copyright license to\nreproduce, prepare derivative works of, publicly display, publicly perform,\ndistribute and sublicense the Contribution of such Contributor, if any, and such\nderivative works, in source code and object code form.\n\nb) Subject to the terms of this Agreement, each Contributor hereby grants\nRecipient a non-exclusive, worldwide, royalty-free patent license under Licensed\nPatents to make, use, sell, offer to sell, import and otherwise transfer the\nContribution of such Contributor, if any, in source code and object code form.\nThis patent license shall apply to the combination of the Contribution and the\nProgram if, at the time the Contribution is added by the Contributor, such\naddition of the Contribution causes such combination to be covered by the\nLicensed Patents. The patent license shall not apply to any other combinations\nwhich include the Contribution. No hardware per se is licensed hereunder.\n\nc) Recipient understands that although each Contributor grants the licenses\nto its Contributions set forth herein, no assurances are provided by any\nContributor that the Program does not infringe the patent or other intellectual\nproperty rights of any other entity. Each Contributor disclaims any liability to\nRecipient for claims brought by any other entity based on infringement of\nintellectual property rights or otherwise. As a condition to exercising the\nrights and licenses granted hereunder, each Recipient hereby assumes sole\nresponsibility to secure any other intellectual property rights needed, if any.\nFor example, if a third party patent license is required to allow Recipient to\ndistribute the Program, it is Recipient's responsibility to acquire that license\nbefore distributing the Program.\n\nd) Each Contributor represents that to its knowledge it has sufficient\ncopyright rights in its Contribution, if any, to grant the copyright license set\nforth in this Agreement.\n\n3. REQUIREMENTS\n\nA Contributor may choose to distribute the Program in object code form under its\nown license agreement, provided that:\n\na) it complies with the terms and conditions of this Agreement; and\n\nb) its license agreement:\n\ni) effectively disclaims on behalf of all Contributors all warranties and\nconditions, express and implied, including warranties or conditions of title and\nnon-infringement, and implied warranties or conditions of merchantability and\nfitness for a particular purpose;\n\nii) effectively excludes on behalf of all Contributors all liability for\ndamages, including direct, indirect, special, incidental and consequential\ndamages, such as lost profits;\n\niii) states that any provisions which differ from this Agreement are offered\nby that Contributor alone and not by any other party; and\n\niv) states that source code for the Program is available from such\nContributor, and informs licensees how to obtain it in a reasonable manner on or\nthrough a medium customarily used for software exchange.\n\nWhen the Program is made available in source code form:\n\na) it must be made available under this Agreement; and\n\nb) a copy of this Agreement must be included with each copy of the Program.\n\nContributors may not remove or alter any copyright notices contained within the\nProgram.\n\nEach Contributor must identify itself as the originator of its Contribution, if\nany, in a manner that reasonably allows subsequent Recipients to identify the\noriginator of the Contribution.\n\n4. COMMERCIAL DISTRIBUTION\n\nCommercial distributors of software may accept certain responsibilities with\nrespect to end users, business partners and the like. While this license is\nintended to facilitate the commercial use of the Program, the Contributor who\nincludes the Program in a commercial product offering should do so in a manner\nwhich does not create potential liability for other Contributors. Therefore, if\na Contributor includes the Program in a commercial product offering, such\nContributor (\"Commercial Contributor\") hereby agrees to defend and indemnify\nevery other Contributor (\"Indemnified Contributor\") against any losses, damages\nand costs (collectively \"Losses\") arising from claims, lawsuits and other legal\nactions brought by a third party against the Indemnified Contributor to the\nextent caused by the acts or omissions of such Commercial Contributor in\nconnection with its distribution of the Program in a commercial product\noffering. The obligations in this section do not apply to any claims or Losses\nrelating to any actual or alleged intellectual property infringement. In order\nto qualify, an Indemnified Contributor must: a) promptly notify the Commercial\nContributor in writing of such claim, and b) allow the Commercial Contributor to\ncontrol, and cooperate with the Commercial Contributor in, the defense and any\nrelated settlement negotiations. The Indemnified Contributor may participate in\nany such claim at its own expense.\n\nFor example, a Contributor might include the Program in a commercial product\noffering, Product X. That Contributor is then a Commercial Contributor. If that\nCommercial Contributor then makes performance claims, or offers warranties\nrelated to Product X, those performance claims and warranties are such\nCommercial Contributor's responsibility alone. Under this section, the\nCommercial Contributor would have to defend claims against the other\nContributors related to those performance claims and warranties, and if a court\nrequires any other Contributor to pay any damages as a result, the Commercial\nContributor must pay those damages.\n\n5. NO WARRANTY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN\n\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR\nIMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each\nRecipient is solely responsible for determining the appropriateness of using and\ndistributing the Program and assumes all risks associated with its exercise of\nrights under this Agreement, including but not limited to the risks and costs of\nprogram errors, compliance with applicable laws, damage to or loss of data,\nprograms or equipment, and unavailability or interruption of operations.\n\n6. DISCLAIMER OF LIABILITY\n\nEXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY\nCONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST\nPROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS\nGRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n7. GENERAL\n\nIf any provision of this Agreement is invalid or unenforceable under applicable\nlaw, it shall not affect the validity or enforceability of the remainder of the\nterms of this Agreement, and without further action by the parties hereto, such\nprovision shall be reformed to the minimum extent necessary to make such\nprovision valid and enforceable.\n\nIf Recipient institutes patent litigation against a Contributor with respect to\na patent applicable to software (including a cross-claim or counterclaim in a\nlawsuit), then any patent licenses granted by that Contributor to such Recipient\nunder this Agreement shall terminate as of the date such litigation is filed. In\naddition, if Recipient institutes patent litigation against any entity\n(including a cross-claim or counterclaim in a lawsuit) alleging that the Program\nitself (excluding combinations of the Program with other software or hardware)\ninfringes such Recipient's patent(s), then such Recipient's rights granted under\nSection 2(b) shall terminate as of the date such litigation is filed.\n\nAll Recipient's rights under this Agreement shall terminate if it fails to\ncomply with any of the material terms or conditions of this Agreement and does\nnot cure such failure in a reasonable period of time after becoming aware of\nsuch noncompliance. If all Recipient's rights under this Agreement terminate,\nRecipient agrees to cease use and distribution of the Program as soon as\nreasonably practicable. However, Recipient's obligations under this Agreement\nand any licenses granted by Recipient relating to the Program shall continue and\nsurvive.\n\nEveryone is permitted to copy and distribute copies of this Agreement, but in\norder to avoid inconsistency the Agreement is copyrighted and may only be\nmodified in the following manner. The Agreement Steward reserves the right to\npublish new versions (including revisions) of this Agreement from time to time.\nNo one other than the Agreement Steward has the right to modify this Agreement.\nIBM is the initial Agreement Steward. IBM may assign the responsibility to serve\nas the Agreement Steward to a suitable separate entity. Each new version of the\nAgreement will be given a distinguishing version number. The Program (including\nContributions) may always be distributed subject to the version of the Agreement\nunder which it was received. In addition, after a new version of the Agreement\nis published, Contributor may elect to distribute the Program (including its\nContributions) under the new version. Except as expressly stated in Sections\n2(a) and 2(b) above, Recipient receives no rights or licenses to the\nintellectual property of any Contributor under this Agreement, whether\nexpressly, by implication, estoppel or otherwise. All rights in the Program not\nexpressly granted under this Agreement are reserved.\n\nThis Agreement is governed by the laws of the State of New York and the\nintellectual property laws of the United States of America. No party to this\nAgreement will bring a legal action under this Agreement more than one year\nafter the cause of action arose. Each party waives its rights to a jury trial in\nany resulting litigation.\n=========================================\nEND OF ActionList for Windows Forms/.NET NOTICES, INFORMATION, AND LICENSE\n\n%% Enums.NET NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nThe MIT License (MIT)\n\nCopyright (c) 2016 Tyler Brinkley\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n=========================================\nEND OF Enums.NET NOTICES, INFORMATION, AND LICENSE\n\n%% INI File Parser NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nThe MIT License (MIT)\n\nCopyright (c) 2008 Ricardo Amores Hernández\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n=========================================\nEND OF INI File Parser NOTICES, INFORMATION, AND LICENSE\n\n%% ExpandCollapsePanel NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nThe MIT License (MIT)\n\nCopyright (c) 2013 Alexander Makarov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n=========================================\nEND OF ExpandCollapsePanel NOTICES, INFORMATION, AND LICENSE\n\n%% Mono.Options and Mono.Security NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nThe MIT License (MIT)\n\nCopyright (c) .NET Foundation Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n=========================================\nEND OF Mono.Options and Mono.Security NOTICES, INFORMATION, AND LICENSE\n\n%% JSON.NET NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nThe MIT License (MIT)\n\nCopyright (c) 2007 James Newton-King\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n=========================================\nEND OF JSON.NET NOTICES, INFORMATION, AND LICENSE\n\n%% Octokit - GitHub API Client Library for .NET NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nCopyright (c) 2017 GitHub, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of \nthis software and associated documentation files (the \"Software\"), to deal in \nthe Software without restriction, including without limitation the rights to \nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so, \nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all \ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR \nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR \nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER \nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN \nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n=========================================\nEND OF Octokit - GitHub API Client Library for .NET NOTICES, INFORMATION, AND LICENSE\n\n%% Ookii.Dialogs NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nLicense agreement for Ookii.Dialogs.\n\nCopyright (c) Sven Groot (Ookii.org) 2009\nAll rights reserved.\n\n\nRedistribution and use in source and binary forms, with or without \nmodification, are permitted provided that the following conditions are met:\n\n1) Redistributions of source code must retain the above copyright notice, \n   this list of conditions and the following disclaimer. \n2) Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution. \n3) Neither the name of the ORGANIZATION nor the names of its contributors\n   may be used to endorse or promote products derived from this software\n   without specific prior written permission. \n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\nTHE POSSIBILITY OF SUCH DAMAGE.\n=========================================\nEND OF Ookii.Dialogs NOTICES, INFORMATION, AND LICENSE\n\n%% PeNet NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\n Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2016 Stefan Hausotte\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\nlimitations under the License.\n=========================================\nEND OF PeNet NOTICES, INFORMATION, AND LICENSE\n\n%% Rollbar.NET Notifier SDK NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nThe MIT License (MIT)\n\nCopyright (c) 2015 Valetude\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n=========================================\nEND OF Rollbar.NET Notifier SDK NOTICES, INFORMATION, AND LICENSE\n\n%% Microsoft ASP.NET Web API 2.2 Client Libraries NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nCopyright (c) .NET Foundation. All rights reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthese files except in compliance with the License. You may obtain a copy of the\nLicense at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed\nunder the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either express or implied. See the License for the\nspecific language governing permissions and limitations under the License.\n=========================================\nEND OF Microsoft ASP.NET Web API 2.2 Client Libraries NOTICES, INFORMATION, AND LICENSE\n\n%% Reactive Extensions NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nCopyright (c) .NET Foundation and Contributors\nAll Rights Reserved\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you\nmay not use this file except in compliance with the License. You may\nobtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied. See the License for the specific language governing permissions\nand limitations under the License.\n=========================================\nEND OF Reactive Extensions NOTICES, INFORMATION, AND LICENSE\n\n%% Vista.Controls.BreadcrumbBar NOTICES, INFORMATION, AND LICENSE BEGIN HERE\n=========================================\nUnknown\n=========================================\nEND OF Vista.Controls.BreadcrumbBar NOTICES, INFORMATION, AND LICENSE\n"
  },
  {
    "path": "JexusManager/Tree/ApplicationPoolsTreeNode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Tree\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.Design;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.Main;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal sealed class ApplicationPoolsTreeNode : ManagerTreeNode\n    {\n        public ApplicationPoolsTreeNode(IServiceProvider serviceProvider, ApplicationPoolCollection pools, ServerTreeNode server)\n            : base(\"Application Pools\", serviceProvider)\n        {\n            ImageIndex = 2;\n            SelectedImageIndex = 2;\n            Tag = pools;\n            ServerManager = pools.Parent;\n            ServerNode = server;\n        }\n\n        public override string PathToSite\n        {\n            get { return string.Empty; }\n        }\n\n        public override string Folder\n        {\n            get { return string.Empty; }\n        }\n\n        public override string Uri\n        {\n            get { return string.Empty; }\n        }\n\n        public override ServerManager ServerManager { get; set; }\n\n        public override ServerTreeNode ServerNode { get; }\n\n        public override void LoadPanels(MainForm mainForm, ServiceContainer serviceContainer, List<ModuleProvider> moduleProviders)\n        {\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var pools = (ApplicationPoolCollection)Tag;\n            var scope = ManagementScope.Server;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(mainForm, null, scope, pools.Parent, null, null, null, null, null));\n            IModulePage page = new ApplicationPoolsPage();\n            var mainModule = new MainModule();\n            mainModule.Initialize(serviceContainer, null);\n            page.Initialize(mainModule, null, null);\n            mainForm.LoadPage(page);\n        }\n\n        public override void HandleDoubleClick()\n        {\n        }\n\n        public override void Expand(MainForm mainForm)\n        { }\n\n        public override void AddApplication(ContextMenuStrip appMenu)\n        {\n        }\n\n        public override void AddVirtualDirectory(ContextMenuStrip vDirMenu)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Tree/ApplicationTreeNode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Tree\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.Design;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using JexusManager.Dialogs;\n    using JexusManager.Features.Main;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    using Application = Microsoft.Web.Administration.Application;\n\n    internal sealed class ApplicationTreeNode : ManagerTreeNode\n    {\n        private bool _loaded;\n\n        public ApplicationTreeNode(IServiceProvider serviceProvider, Application application, ServerTreeNode server)\n            : base(application.Path.Substring(application.Path.LastIndexOf('/') + 1), serviceProvider)\n        {\n            ImageIndex = 5;\n            SelectedImageIndex = 5;\n            Tag = application;\n            Application = application;\n            Nodes.Add(TempNodeName);\n            ServerManager = application.Server;\n            ServerNode = server;\n        }\n\n        public Application Application { get; }\n\n        public override string PathToSite\n        {\n            get { return Application.Path; }\n        }\n\n        public override string Folder\n        {\n            get\n            {\n                return Application.PhysicalPath.ExpandIisExpressEnvironmentVariables(Application.GetActualExecutable());\n            }\n        }\n\n        public override string Uri\n        {\n            get\n            {\n                foreach (Microsoft.Web.Administration.Binding binding in Application.Site.Bindings)\n                {\n                    if (binding.CanBrowse)\n                    {\n                        return binding.ToUri() + PathToSite;\n                    }\n                }\n\n                return string.Empty;\n            }\n        }\n\n        public override ServerManager ServerManager { get; set; }\n\n        public override ServerTreeNode ServerNode { get; }\n\n        public override void LoadPanels(MainForm mainForm, ServiceContainer serviceContainer, List<ModuleProvider> moduleProviders)\n        {\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var panel = new ApplicationPage(Application);\n            var scope = ManagementScope.Application;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(mainForm, Application.GetWebConfiguration(), scope, null, Application.Site,\n                    Application, null, null, this.Application.Location));\n            foreach (var provider in moduleProviders)\n            {\n                if (!provider.SupportsScope(scope))\n                {\n                    continue;\n                }\n\n                var definition = provider.GetModuleDefinition(null);\n                var type = Type.GetType(definition.ClientModuleTypeName);\n                if (type == null)\n                {\n                    continue;\n                }\n\n                if (!typeof(Module).IsAssignableFrom(type))\n                {\n                    continue;\n                }\n\n                var module = (Module)Activator.CreateInstance(type);\n                module.Initialize(serviceContainer, null);\n            }\n\n            IModulePage page = panel;\n            var mainModule = new MainModule();\n            mainModule.Initialize(serviceContainer, null);\n            page.Initialize(mainModule, null, null);\n            mainForm.LoadPage(page);\n        }\n\n        public override void Expand(MainForm mainForm)\n        {\n            if (_loaded)\n            {\n                return;\n            }\n\n            _loaded = true;\n            Nodes.Clear();\n            var rootFolder = Application.PhysicalPath.ExpandIisExpressEnvironmentVariables(Application.GetActualExecutable());\n            var rootLevel = GetLevel(Application.Path);\n            LoadChildren(Application, rootLevel, rootFolder, Application.Path, mainForm.PhysicalDirectoryMenu, mainForm.VirtualDirectoryMenu, mainForm.ApplicationMenu);\n        }\n\n        public override void AddApplication(ContextMenuStrip appMenu)\n        {\n            using var dialog = new NewApplicationDialog(ServiceProvider, Application.Site, PathToSite, Application.ApplicationPoolName, null);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            dialog.Application.Save();\n            AddToParent(this, new ApplicationTreeNode(ServiceProvider, dialog.Application, ServerNode) { ContextMenuStrip = appMenu });\n        }\n\n        public override void AddVirtualDirectory(ContextMenuStrip vDirMenu)\n        {\n            using var dialog = new NewVirtualDirectoryDialog(ServiceProvider, null, PathToSite, Application);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            //await dialog.VirtualDirectory.SaveAsync();\n            AddToParent(this, new VirtualDirectoryTreeNode(ServiceProvider, dialog.VirtualDirectory, ServerNode) { ContextMenuStrip = vDirMenu });\n        }\n\n        public override void HandleDoubleClick()\n        { }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Tree/Hierarchy/ManagerHierarchyInfo.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Collections.Generic;\nusing System.Windows.Forms;\nusing Microsoft.Web.Management.Client;\n\nnamespace JexusManager.Tree.Hierarchy\n{\n    /// <summary>\n    /// HierarchyInfo implementation for ManagerTreeNode objects.\n    /// </summary>\n    internal class ManagerHierarchyInfo : HierarchyInfo\n    {\n        private readonly ManagerTreeNode _treeNode;\n        private TaskListCollection _tasks;\n        private Hashtable _properties;\n\n        public ManagerHierarchyInfo(ManagerTreeNode treeNode)\n            : base(treeNode.ServiceProvider)\n        {\n            _treeNode = treeNode ?? throw new ArgumentNullException(nameof(treeNode));\n        }\n\n        /// <summary>\n        /// Gets the manager tree node associated with this hierarchy info.\n        /// </summary>\n        public ManagerTreeNode TreeNode => _treeNode;\n\n        public override string NodeType => _treeNode.GetType().Name;\n\n        public override string Text => _treeNode.Text;\n\n        public override string ToolTip => _treeNode.ToolTipText;\n\n        public override object Image => _treeNode.ImageIndex;\n\n        public override IDictionary Properties\n        {\n            get\n            {\n                if (_properties == null)\n                {\n                    _properties = new Hashtable();\n                }\n                return _properties;\n            }\n        }\n\n        public override bool SupportsChildren => _treeNode.Nodes.Count > 0;\n\n        protected override bool SupportsDelete => false;\n\n        protected override bool SupportsRename => false;\n\n        public override HierarchyPriority Priority => HierarchyPriority.Normal;\n\n        public override HierarchyVisibility Visibility => HierarchyVisibility.All;\n\n        public override bool IsExtendable => false;\n\n        protected override Connection Connection\n        {\n            get\n            {\n                // This would need to be implemented based on the actual connection type\n                // in the application, but for now returning null as a placeholder\n                return null;\n            }\n        }\n\n        protected override HierarchyInfo[] GetChildren()\n        {\n            if (!SupportsChildren)\n            {\n                return null;\n            }\n\n            var children = new List<HierarchyInfo>();\n            foreach (TreeNode node in _treeNode.Nodes)\n            {\n                if (node is ManagerTreeNode managerNode && managerNode.HierarchyInfo != null)\n                {\n                    children.Add(managerNode.HierarchyInfo);\n                }\n            }\n\n            return children.Count > 0 ? children.ToArray() : null;\n        }\n\n        public override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_tasks == null)\n                {\n                    _tasks = new TaskListCollection();\n                }\n                return _tasks;\n            }\n        }\n\n        protected override bool OnSelected()\n        {\n            // When this hierarchy info is selected, select the corresponding tree node\n            _treeNode.TreeView.SelectedNode = _treeNode;\n            return true;\n        }\n\n        public override void Refresh()\n        {\n            // Refresh the tree node\n            _treeNode.Nodes.Clear();\n\n            if (_treeNode.TreeView != null && _treeNode.TreeView.IsHandleCreated)\n            {\n                // Add a temporary node to ensure the node can be expanded\n                _treeNode.Nodes.Add(ManagerTreeNode.TempNodeName);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Tree/ManagerTreeNode.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Tree\n{\n    using System;\n    using System.IO;\n    using Microsoft.Extensions.Logging;\n    using JexusManager;\n    using JexusManager.Tree.Hierarchy;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Server;\n\n    using Application = Microsoft.Web.Administration.Application;\n    using System.Collections.Generic;\n    using System.Windows.Forms;\n    using System.ComponentModel.Design;\n    using Microsoft.Web.Management.Client;\n\n    internal abstract class ManagerTreeNode : TreeNode\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"ManagerTreeNode\");\n\n        public const string TempNodeName = \"ManagerTreeNodeTemp\";\n\n        public IServiceProvider ServiceProvider { get; set; }\n\n        protected ManagerTreeNode(string text, IServiceProvider serviceProvider) : base(text)\n        {\n            ServiceProvider = serviceProvider;\n            HierarchyInfo = new ManagerHierarchyInfo(this);\n        }\n\n        public abstract string PathToSite { get; }\n        public abstract string Folder { get; }\n\n        public abstract string Uri { get; }\n\n        public abstract ServerManager ServerManager { get; set; }\n\n        public abstract ServerTreeNode ServerNode { get; }\n\n        public abstract void LoadPanels(MainForm mainForm, ServiceContainer serviceContainer, List<ModuleProvider> moduleProviders);\n\n        public abstract void HandleDoubleClick();\n\n        protected void LoadChildren(Application rootApp, int rootLevel, string rootFolder, string pathToSite, ContextMenuStrip phyMenu, ContextMenuStrip vDirMenu, ContextMenuStrip appMenu)\n        {\n            try\n            {\n                var treeNodes = new List<TreeNode>();\n                foreach (VirtualDirectory virtualDirectory in rootApp.VirtualDirectories)\n                {\n                    var path = virtualDirectory.PathToSite();\n                    if (!path.StartsWith(pathToSite))\n                    {\n                        continue;\n                    }\n\n                    if (GetLevel(path) != rootLevel + 1)\n                    {\n                        continue;\n                    }\n\n                    // IMPORTANT: only create level+1 vDir nodes.\n                    var virtualDirectoryNode = new VirtualDirectoryTreeNode(ServiceProvider, virtualDirectory, ServerNode) { ContextMenuStrip = vDirMenu };\n                    treeNodes.Add(virtualDirectoryNode);\n                }\n\n                var loaded = new HashSet<string>();\n                if (Directory.Exists(rootFolder))\n                {\n                    // IMPORTANT: only create level+1 physical nodes.\n                    foreach (var folder in new DirectoryInfo(rootFolder).GetDirectories())\n                    {\n                        var path = folder.Name;\n                        var isApp = false;\n                        foreach (Application app in rootApp.Site.Applications)\n                        {\n                            if (!app.Path.StartsWith(pathToSite))\n                            {\n                                continue;\n                            }\n\n                            if (app.Path != pathToSite + '/' + path)\n                            {\n                                continue;\n                            }\n\n                            if (app.VirtualDirectories.Count == 0)\n                            {\n                                continue;\n                            }\n\n                            loaded.Add(app.Path);\n                            var appNode = new ApplicationTreeNode(ServiceProvider, app, ServerNode) { ContextMenuStrip = appMenu };\n                            treeNodes.Add(appNode);\n                            isApp = true;\n                        }\n\n                        if (isApp)\n                        {\n                            continue;\n                        }\n\n                        var directory = new PhysicalDirectoryTreeNode(ServiceProvider, new PhysicalDirectory(folder, path, rootApp), ServerNode)\n                        {\n                            ContextMenuStrip = phyMenu\n                        };\n                        treeNodes.Add(directory);\n                    }\n                }\n\n                foreach (Application application in rootApp.Site.Applications)\n                {\n                    if (application.IsRoot())\n                    {\n                        continue;\n                    }\n\n                    if (!application.Path.StartsWith(pathToSite))\n                    {\n                        continue;\n                    }\n\n                    if (loaded.Contains(application.Path))\n                    {\n                        continue;\n                    }\n\n                    if (GetLevel(application.Path) != rootLevel + 1)\n                    {\n                        continue;\n                    }\n\n                    if (application.VirtualDirectories.Count == 0)\n                    {\n                        continue;\n                    }\n\n                    // IMPORTANT: only create level+1 physical nodes.\n                    var appNode = new ApplicationTreeNode(ServiceProvider, application, ServerNode) { ContextMenuStrip = appMenu };\n                    treeNodes.Add(appNode);\n                }\n\n                treeNodes.Sort(s_comparer);\n                Nodes.AddRange(treeNodes.ToArray());\n            }\n            catch (IOException ex)\n            {\n                _logger.LogError(ex, \"Error loading children\");\n            }\n        }\n\n        private static readonly TreeNodeComparer s_comparer = new TreeNodeComparer();\n\n        private sealed class TreeNodeComparer : IComparer<TreeNode>\n        {\n            public int Compare(TreeNode x, TreeNode y)\n            {\n                return String.Compare(x.Text, y.Text, StringComparison.OrdinalIgnoreCase);\n            }\n        }\n\n        public abstract void Expand(MainForm mainForm);\n        public abstract void AddApplication(ContextMenuStrip appMenu);\n        public abstract void AddVirtualDirectory(ContextMenuStrip vDirMenu);\n\n        public void Explore()\n        {\n            DialogHelper.Explore(Folder);\n        }\n\n        public void EditPermissions()\n        {\n            Microsoft.Web.Administration.NativeMethods.ShowFileProperties(Folder);\n        }\n\n        public void Browse()\n        {\n            if (!string.IsNullOrWhiteSpace(Uri))\n            {\n                DialogHelper.ProcessStart(Uri);\n            }\n        }\n\n        protected static int GetLevel(string pathToSite)\n        {\n            return pathToSite.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries).Length;\n        }\n\n        internal static void AddToParent(TreeNode parentNode, ManagerTreeNode appNode)\n        {\n            parentNode.Nodes.Add(appNode);\n            parentNode.TreeView.SelectedNode = appNode;\n        }\n\n        public HierarchyInfo HierarchyInfo { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Tree/PhysicalDirectoryTreeNode.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Tree\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.Design;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using JexusManager.Dialogs;\n    using JexusManager.Features.Main;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal sealed class PhysicalDirectoryTreeNode : ManagerTreeNode\n    {\n        private bool _loaded;\n\n        public PhysicalDirectoryTreeNode(IServiceProvider serviceProvider, PhysicalDirectory physicalDirectory, ServerTreeNode server)\n            : base(physicalDirectory.Name, serviceProvider)\n        {\n            ImageIndex = 6;\n            SelectedImageIndex = 6;\n            PhysicalDirectory = physicalDirectory;\n            Nodes.Add(TempNodeName);\n            ServerManager = physicalDirectory.Application.Server;\n            ServerNode = server;\n        }\n\n        public PhysicalDirectory PhysicalDirectory { get; }\n\n        public override string PathToSite\n        {\n            get { return PhysicalDirectory.PathToSite; }\n        }\n\n        public override string Folder\n        {\n            get { return PhysicalDirectory.FullName; }\n        }\n\n        public override string Uri\n        {\n            get\n            {\n                foreach (Microsoft.Web.Administration.Binding binding in PhysicalDirectory.Application.Site.Bindings)\n                {\n                    if (binding.CanBrowse)\n                    {\n                        return binding.ToUri() + PathToSite;\n                    }\n                }\n\n                return string.Empty;\n            }\n        }\n\n        public override ServerManager ServerManager { get; set; }\n\n        public override ServerTreeNode ServerNode { get; }\n\n        public override void LoadPanels(MainForm mainForm, ServiceContainer serviceContainer, List<ModuleProvider> moduleProviders)\n        {\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var panel = new PhysicalDirectoryPage(PhysicalDirectory);\n            var scope = ManagementScope.Application;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(mainForm, PhysicalDirectory.Application.GetWebConfiguration(), scope, null,\n                    null, null, null, PhysicalDirectory, PhysicalDirectory.Application.Site.Name + PhysicalDirectory.PathToSite));\n            foreach (var provider in moduleProviders)\n            {\n                if (!provider.SupportsScope(scope))\n                {\n                    continue;\n                }\n\n                var definition = provider.GetModuleDefinition(null);\n                var type = Type.GetType(definition.ClientModuleTypeName);\n                if (type == null)\n                {\n                    continue;\n                }\n\n                if (!typeof(Module).IsAssignableFrom(type))\n                {\n                    continue;\n                }\n\n                var module = (Module)Activator.CreateInstance(type);\n                module.Initialize(serviceContainer, null);\n            }\n\n            IModulePage page = panel;\n            var mainModule = new MainModule();\n            mainModule.Initialize(serviceContainer, null);\n            page.Initialize(mainModule, null, null);\n            mainForm.LoadPage(page);\n        }\n\n        public override void Expand(MainForm mainForm)\n        {\n            if (_loaded)\n            {\n                return;\n            }\n\n            _loaded = true;\n            Nodes.Clear();\n            var rootFolder = PhysicalDirectory.FullName;\n            var rootLevel = GetLevel(PathToSite);\n            LoadChildren(PhysicalDirectory.Application, rootLevel, rootFolder, PathToSite, mainForm.PhysicalDirectoryMenu, mainForm.VirtualDirectoryMenu, mainForm.ApplicationMenu);\n        }\n\n        public override void AddApplication(ContextMenuStrip appMenu)\n        {\n            using var dialog = new NewApplicationDialog(ServiceProvider, PhysicalDirectory.Application.Site, PathToSite, PhysicalDirectory.Application.ApplicationPoolName, null);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            dialog.Application.Save();\n            AddToParent(this, new ApplicationTreeNode(ServiceProvider, dialog.Application, this.ServerNode) { ContextMenuStrip = appMenu });\n        }\n\n        public override void AddVirtualDirectory(ContextMenuStrip vDirMenu)\n        {\n            using var dialog = new NewVirtualDirectoryDialog(ServiceProvider, null, PathToSite, PhysicalDirectory.Application);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            //await dialog.VirtualDirectory.SaveAsync();\n            AddToParent(this, new VirtualDirectoryTreeNode(ServiceProvider, dialog.VirtualDirectory, this.ServerNode) { ContextMenuStrip = vDirMenu });\n        }\n\n        public override void HandleDoubleClick()\n        { }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Tree/PlaceholderTreeNode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace JexusManager.Tree\n{\n    using System.Collections.Generic;\n    using System.ComponentModel.Design;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.Main;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Server;\n\n    internal sealed class PlaceholderTreeNode : ManagerTreeNode\n    {\n        private static HomePage _homePage;\n\n        public PlaceholderTreeNode(string name, int image)\n            : base(name, null)\n        {\n            SelectedImageIndex = image;\n            ImageIndex = image;\n        }\n\n        public override string PathToSite => string.Empty;\n\n        public override string Folder => string.Empty;\n\n        public override string Uri => string.Empty;\n\n        public override ServerManager ServerManager { get; set; }\n\n        public override ServerTreeNode ServerNode => throw new InvalidOperationException(\"Server node access is invalid for home page node\");\n\n        public override void LoadPanels(MainForm mainForm, ServiceContainer serviceContainer, List<ModuleProvider> moduleProviders)\n        {\n            if (_homePage == null)\n            {\n                _homePage = new HomePage();\n            }\n\n            mainForm.LoadInner(_homePage);\n        }\n\n        public override void HandleDoubleClick()\n        {\n        }\n\n        public override void Expand(MainForm mainForm)\n        {\n        }\n\n        public override void AddApplication(ContextMenuStrip appMenu)\n        {\n        }\n\n        public override void AddVirtualDirectory(ContextMenuStrip vDirMenu)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Tree/ServerTreeNode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Windows.Forms;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\nusing Microsoft.Web.Administration;\nusing System.IO;\nusing JexusManager.Dialogs;\nusing System.ComponentModel.Design;\nusing System.Text;\nusing JexusManager.Services;\nusing System.Collections.Generic;\nusing Microsoft.Web.Management.Server;\nusing JexusManager.Features.Main;\nusing Microsoft.Web.Management.Client;\n\nnamespace JexusManager.Tree\n{\n    internal class ServerTreeNode : ManagerTreeNode\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"ServerTreeNode\");\n\n        private enum NodeStatus\n        {\n            Default = 0,\n            Loading = 1,\n            Loaded = 2\n        }\n\n        public string DisplayName;\n        public string HostName;\n        public string CertificateHash;\n        public string Credentials;\n        public bool IgnoreInCache;\n\n        public TreeNode PoolsNode { get; private set; }\n\n        public TreeNode SitesNode { get; private set; }\n\n        public override ServerTreeNode ServerNode => this;\n\n        public bool IsLocalhost;\n        public WorkingMode Mode;\n        private NodeStatus _status;\n        private bool readOnly;\n\n        private static string[] RestrictedPaths = new[]\n                {\n                    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)) + Path.DirectorySeparatorChar,\n                    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)) + Path.DirectorySeparatorChar,\n                    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows)) + Path.DirectorySeparatorChar\n                };\n\n        private ServerTreeNode(MainForm mainForm, IServiceProvider serviceProvider, string name, string hostName, string credentials, string hash, ServerManager server, bool isLocalhost, WorkingMode mode, bool ignoreInCache)\n            : base(GetNodeName(name, credentials, isLocalhost), serviceProvider)\n        {\n            MainForm = mainForm;\n            Tag = server;\n            ServerManager = server;\n            DisplayName = name;\n            HostName = hostName;\n            Credentials = credentials;\n            Mode = mode;\n            var elevated = PublicNativeMethods.IsProcessElevated;\n            if (Mode == WorkingMode.Iis)\n            {\n                if (elevated)\n                {\n                    ImageIndex = 8;\n                    SelectedImageIndex = 8;\n                }\n                else\n                {\n                    ImageIndex = 12;\n                    SelectedImageIndex = 12;\n                    readOnly = true;\n                }\n            }\n            else\n            {\n                var restricted = false;\n                foreach (var restrictedPath in RestrictedPaths)\n                {\n                    if (hostName.StartsWith(restrictedPath, StringComparison.OrdinalIgnoreCase))\n                    {\n                        restricted = true;\n                        break;\n                    }\n                }\n\n                if (restricted && !elevated)\n                {\n                    ImageIndex = 11;\n                    SelectedImageIndex = 11;\n                    readOnly = true;\n                }\n                else\n                {\n                    ImageIndex = 1;\n                    SelectedImageIndex = 1;\n                }\n            }\n\n            IsLocalhost = isLocalhost;\n            CertificateHash = hash;\n            IgnoreInCache = ignoreInCache;\n\n            if (mode == WorkingMode.Jexus)\n            {\n                ((JexusServerManager)server).ServerCertificateValidationCallback = (sender1, certificate, chain, sslPolicyErrors) =>\n                    {\n                        var remoteHash = certificate.GetCertHashString();\n                        if (remoteHash == CertificateHash)\n                        {\n                            return true;\n                        }\n\n                        using (var dialog = new CertificateErrorsDialog(certificate))\n                        {\n                            var result = dialog.ShowDialog();\n                            if (result == DialogResult.OK)\n                            {\n                                MainForm.SaveMenuItem.Enabled = true;\n                            }\n\n                            if (result != DialogResult.OK)\n                            {\n                                return false;\n                            }\n                        }\n\n                        CertificateHash = remoteHash;\n                        return true;\n                    };\n            }\n        }\n\n        public bool IsBusy => _status == NodeStatus.Loading;\n\n        public override void HandleDoubleClick()\n        {\n            if (readOnly)\n            {\n                MainForm.UIService.ShowMessage(\"Elevation is required. Please run Jexus Manager as administrator.\", Text);\n                return;\n            }\n\n            if (ServerManager != null)\n            {\n                return;\n            }\n\n            if (_status == NodeStatus.Loading)\n            {\n                return;\n            }\n\n            MainForm.DisconnectButton.Enabled = false;\n            _status = NodeStatus.Loading;\n            MainForm.ShowInfo($\"Connecting to {HostName}...\");\n            try\n            {\n                if (Mode == WorkingMode.IisExpress)\n                {\n                    ServerManager = new IisExpressServerManager(HostName);\n                }\n                else if (Mode == WorkingMode.Iis)\n                {\n                    ServerManager = new IisServerManager(false, HostName);\n                }\n                else\n                {\n                    ServerManager = new JexusServerManager(HostName, Credentials);\n                }\n\n                ServerManager.Name = DisplayName;\n\n                if (Mode == WorkingMode.Jexus)\n                {\n                    var server = (JexusServerManager)ServerManager;\n                    var version = AsyncHelper.RunSync(server.GetVersionAsync);\n                    if (version == null)\n                    {\n                        MainForm.UIService.ShowMessage(\"Authentication failed.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                        ServerManager = null;\n                        _status = NodeStatus.Default;\n                        MainForm.DisconnectButton.Enabled = true;\n                        return;\n                    }\n\n                    if (version < JexusServerManager.MinimumServerVersion)\n                    {\n                        var toContinue =\n                            MainForm.UIService.ShowMessage(\n                                $\"The server version is {version}, while minimum compatible version is {JexusServerManager.MinimumServerVersion}. Making changes might corrupt server configuration. Do you want to continue?\",\n                                Text,\n                                MessageBoxButtons.YesNoCancel,\n                                MessageBoxIcon.Question);\n                        if (toContinue != DialogResult.Yes)\n                        {\n                            ServerManager = null;\n                            _status = NodeStatus.Default;\n                            MainForm.DisconnectButton.Enabled = true;\n                            return;\n                        }\n                    }\n\n                    var conflict = AsyncHelper.RunSync(server.HelloAsync);\n                    if (Environment.MachineName != conflict)\n                    {\n                        MainForm.UIService.ShowMessage(\n                            $\"The server is also connected to {conflict}. Making changes on multiple clients might corrupt server configuration.\",\n                            Text,\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Warning);\n                    }\n                }\n\n                ServerManager.IsLocalhost = IsLocalhost;\n                var succeeded = LoadServer(MainForm.ApplicationPoolsMenu, MainForm.SitesMenu, MainForm.SiteMenu);\n                if (succeeded)\n                {\n                    Tag = ServerManager;\n                    MainForm.EnableServerMenuItems(true);\n                    _status = NodeStatus.Loaded;\n                    MainForm.DisconnectButton.Enabled = true;\n                }\n                else\n                {\n                    HandleServerConnectionFailed();\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error connecting to server\");\n                File.WriteAllText(DialogHelper.DebugLog, ex.ToString());\n                var last = ex;\n                while (last is AggregateException)\n                {\n                    last = last.InnerException;\n                }\n\n                var message = new StringBuilder();\n                message.AppendLine(\"Could not connect to the specified computer.\")\n                    .AppendLine()\n                    .AppendFormat(\"Details: {0}\", last?.Message);\n                MainForm.UIService.ShowMessage(message.ToString(), Text, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                HandleServerConnectionFailed();\n            }\n            finally\n            {\n                MainForm.HideInfo();\n            }\n        }\n\n        private void HandleServerConnectionFailed()\n        {\n            ServerManager = null;\n            _status = NodeStatus.Default;\n            MainForm.DisconnectButton.Enabled = true;\n        }\n\n        public MainForm MainForm { get; set; }\n\n        public override string PathToSite => string.Empty;\n\n        public override string Folder => string.Empty;\n\n        public override string Uri => string.Empty;\n\n        public override ServerManager ServerManager { get; set; }\n\n        public override void LoadPanels(MainForm mainForm, ServiceContainer serviceContainer, List<ModuleProvider> moduleProviders)\n        {\n            if (readOnly)\n            {\n                MainForm.UIService.ShowMessage(\"Elevation is required. Please run Jexus Manager as administrator.\", Text);\n                return;\n            }\n\n            if (ServerManager == null && _status != NodeStatus.Loaded)\n            {\n                return;\n            }\n\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var server = (ServerManager)Tag;\n            var panel = new ServerPage(server);\n            var scope = ManagementScope.Server;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(mainForm, server.GetApplicationHostConfiguration(), scope, server, null, null,\n                    null, null, null));\n\n            var moduleDefinitions = new List<ModuleDefinition>();\n            var modules = new List<Module>();\n            foreach (var provider in moduleProviders)\n            {\n                if (!provider.SupportsScope(scope))\n                {\n                    continue;\n                }\n\n                var definition = provider.GetModuleDefinition(null);\n                moduleDefinitions.Add(definition);\n                var type = Type.GetType(definition.ClientModuleTypeName);\n                if (type == null)\n                {\n                    continue;\n                }\n\n                if (!typeof(Module).IsAssignableFrom(type))\n                {\n                    continue;\n                }\n\n                var module = (Module)Activator.CreateInstance(type);\n                module.Initialize(serviceContainer, null);\n                modules.Add(module);\n            }\n\n            IModulePage page = panel;\n            var mainModule = new MainModule();\n            mainModule.Initialize(serviceContainer, null);\n            page.Initialize(mainModule, null, null);\n            mainForm.LoadPage(page);\n        }\n\n        internal static string GetNodeName(string name, string credentials, bool isLocalhost)\n        {\n            return isLocalhost\n                ? $\"{name} ({Environment.UserDomainName}\\\\{Environment.UserName})\"\n                : $\"{name} ({credentials.ExtractUser()})\";\n        }\n\n        public override void Expand(MainForm mainForm)\n        { }\n\n        public override void AddApplication(ContextMenuStrip appMenu)\n        {\n        }\n\n        public override void AddVirtualDirectory(ContextMenuStrip vDirMenu)\n        {\n        }\n\n        public bool LoadServer(ContextMenuStrip poolsMenu, ContextMenuStrip sitesMenu, ContextMenuStrip siteMenu)\n        {\n            if (readOnly)\n            {\n                MainForm.UIService.ShowMessage(\"Elevation is required. Please run Jexus Manager as administrator.\", Text);\n                return false;\n            }\n\n            if (ServerManager == null)\n            {\n                return false;\n            }\n\n            try\n            {\n                PoolsNode = new ApplicationPoolsTreeNode(ServiceProvider, ServerManager.ApplicationPools, this)\n                {\n                    ContextMenuStrip = poolsMenu\n                };\n                Nodes.Add(PoolsNode);\n            }\n            catch (Exception ex)\n            {\n                MainForm.UIService.ShowError(ex, string.Empty, Text, false);\n                return false;\n            }\n\n            SitesNode = new SitesTreeNode(ServiceProvider, ServerManager.Sites, this)\n            {\n                ContextMenuStrip = sitesMenu\n            };\n            Nodes.Add(SitesNode);\n            TreeView.SelectedNode = this;\n\n            foreach (Site site in ServerManager.Sites)\n            {\n                var siteNode = new SiteTreeNode(ServiceProvider, site, this) { ContextMenuStrip = siteMenu };\n                SitesNode.Nodes.Add(siteNode);\n            }\n\n            // TODO: re-enable web farm support.\n            //data.FarmNode = data.ServerNode.Nodes.Add(\"Server Farms\");\n            //data.FarmNode.ContextMenuStrip = cmsFarm;\n            //data.FarmNode.ImageIndex = 7;\n            //data.FarmNode.SelectedImageIndex = 7;\n            //data.FarmNode.Tag = data.Server;\n\n            return true;\n        }\n\n        public static ServerTreeNode CreateJexusNode(MainForm mainForm, IServiceProvider serviceProvider, string name, string hostName, string credentials, string hash, ServerManager server, bool isLocalhost)\n        {\n            return new ServerTreeNode(mainForm, serviceProvider, name, hostName, credentials, hash, server, isLocalhost, WorkingMode.Jexus, false);\n        }\n\n        public static ServerTreeNode CreateIisExpressNode(MainForm mainForm, IServiceProvider serviceProvider, string name, string fileName, ServerManager server, bool ignoreInCache)\n        {\n            return new ServerTreeNode(mainForm, serviceProvider, name, fileName, string.Empty, string.Empty, server, true, WorkingMode.IisExpress, ignoreInCache);\n        }\n\n        public static ServerTreeNode CreateIisNode(MainForm mainForm, IServiceProvider serviceProvider, string name, string fileName)\n        {\n            return new ServerTreeNode(mainForm, serviceProvider, name, fileName, string.Empty, string.Empty, null, true, WorkingMode.Iis, true);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Tree/SiteTreeNode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Tree\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.Design;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using JexusManager.Dialogs;\n    using JexusManager.Features.Main;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal sealed class SiteTreeNode : ManagerTreeNode\n    {\n        private bool _loaded;\n\n        public SiteTreeNode(IServiceProvider serviceProvider, Site site, ServerTreeNode server)\n            : base(site.Name, serviceProvider)\n        {\n            ImageIndex = 4;\n            SelectedImageIndex = 4;\n            Tag = site;\n            Site = site;\n            Nodes.Add(TempNodeName);\n            ServerManager = site.Server;\n            ServerNode = server;\n        }\n\n        public Site Site { get; }\n\n        public override string PathToSite\n        {\n            get { return \"/\"; }\n        }\n\n        public override string Uri\n        {\n            get\n            {\n                foreach (Microsoft.Web.Administration.Binding binding in Site.Bindings)\n                {\n                    if (binding.CanBrowse)\n                    {\n                        return binding.ToUri();\n                    }\n                }\n\n                return string.Empty;\n            }\n        }\n\n        public override ServerManager ServerManager { get; set; }\n\n        public override ServerTreeNode ServerNode { get; }\n\n        public override void LoadPanels(MainForm mainForm, ServiceContainer serviceContainer, List<ModuleProvider> moduleProviders)\n        {\n            if (Site.Applications.Count == 0)\n            {\n                return;\n            }\n\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var panel = new SitePage(Site);\n\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(mainForm, Site.GetWebConfiguration(), scope, null, Site, Site.Applications[0],\n                    null, null, Site.Name));\n            foreach (var provider in moduleProviders)\n            {\n                if (!provider.SupportsScope(scope))\n                {\n                    continue;\n                }\n\n                var definition = provider.GetModuleDefinition(null);\n                var type = Type.GetType(definition.ClientModuleTypeName);\n                if (type == null)\n                {\n                    continue;\n                }\n\n                if (!typeof(Module).IsAssignableFrom(type))\n                {\n                    continue;\n                }\n\n                var module = (Module)Activator.CreateInstance(type);\n                module.Initialize(serviceContainer, null);\n            }\n\n            IModulePage page = panel;\n            var mainModule = new MainModule();\n            mainModule.Initialize(serviceContainer, null);\n            page.Initialize(mainModule, null, null);\n            mainForm.LoadPage(page);\n        }\n\n        public override void Expand(MainForm mainForm)\n        {\n            if (_loaded)\n            {\n                return;\n            }\n\n            _loaded = true;\n            Nodes.Clear();\n            if (Site.Applications.Count == 0)\n            {\n                return;\n            }\n\n            var rootApp = Site.Applications[0];\n            var rootFolder = rootApp.PhysicalPath.ExpandIisExpressEnvironmentVariables(rootApp.GetActualExecutable());\n            LoadChildren(rootApp, 0, rootFolder, PathToSite, mainForm.PhysicalDirectoryMenu,\n                mainForm.VirtualDirectoryMenu, mainForm.ApplicationMenu);\n        }\n\n        public override void AddApplication(ContextMenuStrip appMenu)\n        {\n            using var dialog = new NewApplicationDialog(ServiceProvider, Site, PathToSite, Site.Applications[0].ApplicationPoolName, null);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            dialog.Application.Save();\n            AddToParent(this, new ApplicationTreeNode(ServiceProvider, dialog.Application, this.ServerNode) { ContextMenuStrip = appMenu });\n        }\n\n        public override void AddVirtualDirectory(ContextMenuStrip vDirMenu)\n        {\n            using var dialog = new NewVirtualDirectoryDialog(ServiceProvider, null, PathToSite, Site.Applications[0]);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            //await dialog.VirtualDirectory.SaveAsync();\n            AddToParent(this, new VirtualDirectoryTreeNode(ServiceProvider, dialog.VirtualDirectory, this.ServerNode) { ContextMenuStrip = vDirMenu });\n        }\n\n        public override string Folder\n        {\n            get\n            {\n                return Site.PhysicalPath.ExpandIisExpressEnvironmentVariables(Site.Applications[0].GetActualExecutable());\n            }\n        }\n\n        public override void HandleDoubleClick()\n        { }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Tree/SitesTreeNode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Tree\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.Design;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.Main;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal sealed class SitesTreeNode : ManagerTreeNode\n    {\n        public SitesTreeNode(IServiceProvider serviceProvider, SiteCollection sites, ServerTreeNode server)\n            : base(\"Sites\", serviceProvider)\n        {\n            ImageIndex = 3;\n            SelectedImageIndex = 3;\n            Tag = sites;\n            ServerManager = sites.Parent;\n            ServerNode = server;\n        }\n\n        public override string PathToSite\n        {\n            get { return string.Empty; }\n        }\n\n        public override string Folder\n        {\n            get { return string.Empty; }\n        }\n\n        public override string Uri\n        {\n            get { return string.Empty; }\n        }\n\n        public override ServerManager ServerManager { get; set; }\n\n        public override ServerTreeNode ServerNode { get; }\n\n        public override void LoadPanels(MainForm mainForm, ServiceContainer serviceContainer, List<ModuleProvider> moduleProviders)\n        {\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var sites = (SiteCollection)Tag;\n            var scope = ManagementScope.Server;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(mainForm, null, scope, sites.Parent, null, null, null, null, null));\n            IModulePage page = new SitesPage(mainForm);\n            var mainModule = new MainModule();\n            mainModule.Initialize(serviceContainer, null);\n            page.Initialize(mainModule, null, null);\n            mainForm.LoadPage(page);\n        }\n\n        public override void HandleDoubleClick()\n        {\n        }\n\n        public override void Expand(MainForm mainForm)\n        { }\n\n        public override void AddApplication(ContextMenuStrip appMenu)\n        {\n        }\n\n        public override void AddVirtualDirectory(ContextMenuStrip vDirMenu)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Tree/VirtualDirectoryTreeNode.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Tree\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel.Design;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using JexusManager.Dialogs;\n    using JexusManager.Features.Main;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal sealed class VirtualDirectoryTreeNode : ManagerTreeNode\n    {\n        private bool _loaded;\n\n        public VirtualDirectoryTreeNode(IServiceProvider serviceProvider, VirtualDirectory virtualDirectory, ServerTreeNode server)\n            : base(virtualDirectory.Path.PathToName(), serviceProvider)\n        {\n            ImageIndex = 7;\n            SelectedImageIndex = 7;\n            Tag = virtualDirectory;\n            VirtualDirectory = virtualDirectory;\n            Nodes.Add(TempNodeName);\n            ServerManager = virtualDirectory.Application.Server;\n            ServerNode = server;\n        }\n\n        public VirtualDirectory VirtualDirectory { get; }\n\n        public override string PathToSite\n        {\n            get { return VirtualDirectory.PathToSite(); }\n        }\n\n        public override string Uri\n        {\n            get\n            {\n                foreach (Microsoft.Web.Administration.Binding binding in VirtualDirectory.Application.Site.Bindings)\n                {\n                    if (binding.CanBrowse)\n                    {\n                        return binding.ToUri() + PathToSite;\n                    }\n                }\n\n                return string.Empty;\n            }\n        }\n\n        public override ServerManager ServerManager { get; set; }\n\n        public override ServerTreeNode ServerNode { get; }\n\n        public override string Folder\n        {\n            get\n            {\n                return VirtualDirectory.PhysicalPath.ExpandIisExpressEnvironmentVariables(VirtualDirectory.Application.GetActualExecutable());\n            }\n        }\n\n        public override void LoadPanels(MainForm mainForm, ServiceContainer serviceContainer, List<ModuleProvider> moduleProviders)\n        {\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var panel = new VirtualDirectoryPage(VirtualDirectory);\n            var scope = ManagementScope.Application;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(mainForm, VirtualDirectory.Application.GetWebConfiguration(), scope, null,\n                    null, null, VirtualDirectory, null, VirtualDirectory.Application.Site.Name + PathToSite));\n            foreach (var provider in moduleProviders)\n            {\n                if (!provider.SupportsScope(scope))\n                {\n                    continue;\n                }\n\n                var definition = provider.GetModuleDefinition(null);\n                var type = Type.GetType(definition.ClientModuleTypeName);\n                if (type == null)\n                {\n                    continue;\n                }\n\n                if (!typeof(Module).IsAssignableFrom(type))\n                {\n                    continue;\n                }\n\n                var module = (Module)Activator.CreateInstance(type);\n                module.Initialize(serviceContainer, null);\n            }\n\n            IModulePage page = panel;\n            var mainModule = new MainModule();\n            mainModule.Initialize(serviceContainer, null);\n            page.Initialize(mainModule, null, null);\n            mainForm.LoadPage(page);\n        }\n\n        public override void Expand(MainForm mainForm)\n        {\n            if (_loaded)\n            {\n                return;\n            }\n\n            _loaded = true;\n            Nodes.Clear();\n            var rootFolder = VirtualDirectory.PhysicalPath.ExpandIisExpressEnvironmentVariables(VirtualDirectory.Application.GetActualExecutable());\n            var rootLevel = GetLevel(PathToSite);\n            LoadChildren(VirtualDirectory.Application, rootLevel, rootFolder, PathToSite, mainForm.PhysicalDirectoryMenu, mainForm.VirtualDirectoryMenu, mainForm.ApplicationMenu);\n        }\n\n        public override void AddApplication(ContextMenuStrip appMenu)\n        {\n            using var dialog = new NewApplicationDialog(ServiceProvider, VirtualDirectory.Application.Site, PathToSite, VirtualDirectory.Application.ApplicationPoolName, null);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            dialog.Application.Save();\n            AddToParent(this, new ApplicationTreeNode(ServiceProvider, dialog.Application, this.ServerNode) { ContextMenuStrip = appMenu });\n        }\n\n        public override void AddVirtualDirectory(ContextMenuStrip vDirMenu)\n        {\n            using var dialog = new NewVirtualDirectoryDialog(ServiceProvider, null, PathToSite, VirtualDirectory.Application);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            //await dialog.VirtualDirectory.SaveAsync();\n            AddToParent(this, new VirtualDirectoryTreeNode(ServiceProvider, dialog.VirtualDirectory, this.ServerNode) { ContextMenuStrip = vDirMenu });\n        }\n\n        public override void HandleDoubleClick()\n        { }\n    }\n}\n"
  },
  {
    "path": "JexusManager/UpdateHelper.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Octokit;\n\nnamespace JexusManager\n{\n    using System;\n    using System.Net;\n    using System.Reflection;\n    using System.Threading.Tasks;\n\n    internal static class UpdateHelper\n    {\n        public enum UpdateErrorType\n        {\n            None,\n            ConnectionError,\n            NoReleaseFound,\n            Other\n        }\n\n        public class UpdateInfo\n        {\n            public bool UpdateAvailable { get; set; }\n            public Version CurrentVersion { get; set; }\n            public Version LatestVersion { get; set; }\n            public string ReleaseUrl { get; set; }\n            public string ErrorMessage { get; set; }\n            public UpdateErrorType ErrorType { get; set; } = UpdateErrorType.None;\n        }\n\n        public static async Task<UpdateInfo> CheckForUpdate()\n        {\n            var updateInfo = new UpdateInfo\n            {\n                ReleaseUrl = \"https://github.com/jexuswebserver/JexusManager/releases\",\n                CurrentVersion = Assembly.GetExecutingAssembly().GetName().Version\n            };\n\n            string version = null;\n            var previous = ServicePointManager.SecurityProtocol;\n            try\n            {\n                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;\n                var client = new GitHubClient(new ProductHeaderValue(\"JexusManager\"));\n                var releases = await client.Repository.Release.GetAll(\"jexuswebserver\", \"JexusManager\");\n                if (releases.Count == 0)\n                {\n                    updateInfo.ErrorMessage = \"No update is found.\";\n                    updateInfo.ErrorType = UpdateErrorType.NoReleaseFound;\n                    return updateInfo;\n                }\n\n                var recent = releases[0];\n                version = recent.TagName.Substring(1);\n            }\n            catch (Exception)\n            {\n                updateInfo.ErrorMessage = \"Cannot connect to GitHub.\";\n                updateInfo.ErrorType = UpdateErrorType.ConnectionError;\n                return updateInfo;\n            }\n            finally\n            {\n                ServicePointManager.SecurityProtocol = previous;\n            }\n\n            if (!Version.TryParse(version, out Version latest))\n            {\n                updateInfo.ErrorMessage = \"No update is found.\";\n                updateInfo.ErrorType = UpdateErrorType.NoReleaseFound;\n                return updateInfo;\n            }\n\n            updateInfo.LatestVersion = latest;\n            updateInfo.UpdateAvailable = updateInfo.CurrentVersion < latest;\n\n            return updateInfo;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/BrowsePage.Designer.cs",
    "content": "﻿namespace JexusManager.Wizards.ConnectionWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class BrowsePage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.txtType = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // txtType\n            // \n            this.txtType.AutoSize = true;\n            this.txtType.Location = new System.Drawing.Point(34, 75);\n            this.txtType.Name = \"txtType\";\n            this.txtType.Size = new System.Drawing.Size(117, 13);\n            this.txtType.TabIndex = 1;\n            this.txtType.Text = \"Configuration file name:\";\n            // \n            // txtName\n            // \n            this.txtName.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtName.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtName.Location = new System.Drawing.Point(37, 91);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(305, 20);\n            this.txtName.TabIndex = 2;\n            this.txtName.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(348, 89);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(32, 23);\n            this.btnBrowse.TabIndex = 3;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Click += new System.EventHandler(this.BtnBrowseClick);\n            // \n            // BrowsePage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.txtType);\n            this.Name = \"BrowsePage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n        private Label txtType;\n        private TextBox txtName;\n        private Button btnBrowse;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/BrowsePage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Wizards.ConnectionWizard\n{\n    using System;\n    using System.IO;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Windows.Forms;\n\n    public partial class BrowsePage : WizardPage\n    {\n        private bool _initialized;\n        private SolutionTypePage _solutionTypePage;\n        private FinishPage _finishPage;\n\n        public BrowsePage(SolutionTypePage solutionTypePage, FinishPage finishPage)\n        {\n            InitializeComponent();\n            _solutionTypePage = solutionTypePage;\n            _finishPage = finishPage;\n        }\n\n        protected internal override bool CanNavigateNext\n        {\n            get\n            {\n                return base.CanNavigateNext && File.Exists(txtName.Text);\n            }\n        }\n\n        private void TxtNameTextChanged(object sender, EventArgs e)\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            var data = (ConnectionWizardData)WizardData;\n            if (data.UseVisualStudio)\n            {\n                data.SolutionFile = txtName.Text;\n            }\n            else\n            {\n                data.FileName = txtName.Text;\n            }\n\n            UpdateWizard();\n        }\n\n        public override bool OnNext()\n        {\n            if (!IisExpressServerManager.ServerInstalled)\n            {\n                var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                service.ShowMessage(\"No IIS Express installation detected. Please install IIS Express before moving on.\", Caption, MessageBoxButtons.OK, MessageBoxIcon.Warning);\n                return false;\n            }\n\n            var data = (ConnectionWizardData)WizardData;\n            if (!data.UseVisualStudio)\n            {\n                var iisExpress = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), \"IIS Express\", \"AppServer\", \"applicationhost.config\");\n                var iisExpressX86 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), \"IIS Express\", \"AppServer\", \"applicationhost.config\");\n                var iisExpress2 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), \"IIS Express\", \"config\", \"templates\", \"PersonalWebServer\", \"applicationhost.config\");\n                var iisExpress2X86 = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), \"IIS Express\", \"config\", \"templates\", \"PersonalWebServer\", \"applicationhost.config\");\n                if (string.Equals(iisExpress, data.FileName, StringComparison.OrdinalIgnoreCase)\n                    || string.Equals(iisExpressX86, data.FileName, StringComparison.OrdinalIgnoreCase)\n                    || string.Equals(iisExpress2, data.FileName, StringComparison.OrdinalIgnoreCase)\n                    || string.Equals(iisExpress2X86, data.FileName, StringComparison.OrdinalIgnoreCase))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"This file coming from IIS Express installation cannot be used. Please select another file.\", Caption, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                    return false;\n                }\n\n                var iis = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), \"inetsrv\", \"config\", \"applicationHost.config\");\n                if (string.Equals(iis, data.FileName, StringComparison.OrdinalIgnoreCase))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"This file coming from IIS installation cannot be used. Please select another file.\", Caption, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                    return false;\n                }\n\n                var name = Path.GetFileName(data.FileName);\n                var badNames = new[] { \"administration.config\", \"redirection.config\", \"web.config\", \"aspnet.config\", \"web.config\" };\n                foreach (var bad in badNames)\n                {\n                    if (string.Equals(name, bad, StringComparison.OrdinalIgnoreCase))\n                    {\n                        var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                        service.ShowMessage(\n                            $\"This file '{data.FileName}' does not seem to be a valid IIS configuration file.\",\n                            Caption,\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return false;\n                    }\n                }\n\n                if (name.EndsWith(\".exe.config\", StringComparison.OrdinalIgnoreCase) ||\n                    name.EndsWith(\".dll.config\", StringComparison.OrdinalIgnoreCase))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\n                        $\"This file '{data.FileName}' does not seem to be a valid IIS configuration file.\",\n                        Caption,\n                        MessageBoxButtons.OK,\n                        MessageBoxIcon.Error,\n                        MessageBoxDefaultButton.Button1);\n                    return false;\n                }\n\n                data.Server = new IisExpressServerManager(data.FileName);\n            }\n\n            return true;\n        }\n\n        protected internal override void Activate()\n        {\n            base.Activate();\n            _initialized = false;\n            ConnectionWizardData wizardData = (ConnectionWizardData)WizardData;\n            txtName.Text = wizardData.UseVisualStudio ? wizardData.SolutionFile : wizardData.FileName;\n            Caption = wizardData.UseVisualStudio ? \"Specify a Visual Studio Solution File\" : \"Specify a Configuration File\";\n            txtType.Text = wizardData.UseVisualStudio ? \"Visual Studio solution file name:\" : \"Configuration file name:\";\n            if (wizardData.UseVisualStudio)\n            {\n                SetNextPage(_solutionTypePage);\n            }\n            else\n            {\n                SetNextPage(_finishPage);\n            }\n\n            _initialized = true;\n            txtName.Focus();\n            txtName.SelectAll();\n        }\n\n        private void BtnBrowseClick(object sender, EventArgs e)\n        {\n            ConnectionWizardData wizardData = (ConnectionWizardData)WizardData;\n            DialogHelper.ShowOpenFileDialog(\n                txtName,\n                wizardData.UseVisualStudio\n                    ? \"Solution Files|*.sln|All Files|*.*\"\n                    : \"Config Files|*.config|All Files|*.*\",\n                null);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/BrowsePage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/ConnectionWizard.Designer.cs",
    "content": "﻿namespace JexusManager.Wizards.ConnectionWizard\n{\n    using System.ComponentModel;\n\n    partial class ConnectionWizard\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.SuspendLayout();\n            // \n            // ConnectionWizard\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(669, 481);\n            this.HelpButton = true;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"ConnectionWizard\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Connect to Server\";\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n    }\n}"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/ConnectionWizard.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Wizards.ConnectionWizard\n{\n    using System;\n\n    using JexusManager.Main.Properties;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class ConnectionWizard : WizardForm\n    {\n        private readonly string[] _names;\n\n        private ConnectionWizardData _wizardData;\n\n        public ConnectionWizard(IServiceProvider serviceProvider, string[] names)\n            : base(serviceProvider)\n        {\n            _names = names;\n            InitializeComponent();\n            TaskGlyph = Resources.title_48;\n        }\n\n        protected internal override object WizardData\n        {\n            get { return _wizardData ?? (_wizardData = new ConnectionWizardData(_names)); }\n        }\n\n        protected override void CompleteWizard()\n        {\n            Close();\n        }\n\n        protected override WizardPage[] GetWizardPages()\n        {\n            var solutionType = new SolutionTypePage();\n            var server = new ServerPage();\n            var credentials = new CredentialsPage();\n            var finish = new FinishPage();\n            var browse = new BrowsePage(solutionType, finish);\n            var type = new TypePage(server, browse);\n            type.SetWizard(this);\n            solutionType.SetWizard(this);\n            solutionType.SetPreviousPage(browse);\n            solutionType.SetNextPage(finish);\n            browse.SetPreviousPage(type);\n            browse.SetWizard(this);\n            server.SetPreviousPage(type);\n            server.SetNextPage(credentials);\n            server.SetWizard(this);\n            credentials.SetPreviousPage(server);\n            credentials.SetNextPage(finish);\n            credentials.SetWizard(this);\n            finish.SetPreviousPage(credentials);\n            finish.SetWizard(this);\n            return new WizardPage[] { type, browse, solutionType, server, credentials, finish };\n        }\n\n        protected override void ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210463#ServerConnectionDetails\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/ConnectionWizard.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/ConnectionWizardData.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Wizards.ConnectionWizard\n{\n    using System.Linq;\n\n    using Microsoft.Web.Administration;\n\n    internal class ConnectionWizardData\n    {\n        private readonly string[] _names;\n\n        public ConnectionWizardData(string[] names)\n        {\n            _names = names;\n        }\n\n        public string Name;\n        public string UserName;\n        public string Password;\n        public string HostName;\n        public ServerManager Server { get; set; }\n        public string CertificateHash { get; set; }\n        public WorkingMode Mode { get; set; }\n        public bool UseVisualStudio { get; set; }\n        public string SolutionFile { get; set; }\n        public string FileName { get; set; }\n\n        public bool VerifyName(string text)\n        {\n            return !_names.Contains(text);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/CredentialsPage.Designer.cs",
    "content": "﻿namespace JexusManager.Wizards.ConnectionWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CredentialsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.txtConnect = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbUserName = new System.Windows.Forms.ComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPassword = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // txtConnect\n            // \n            this.txtConnect.AutoSize = true;\n            this.txtConnect.Location = new System.Drawing.Point(18, 22);\n            this.txtConnect.Name = \"txtConnect\";\n            this.txtConnect.Size = new System.Drawing.Size(73, 13);\n            this.txtConnect.TabIndex = 0;\n            this.txtConnect.Text = \"Connecting to\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(43, 54);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(61, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"User name:\";\n            // \n            // cbUserName\n            // \n            this.cbUserName.FormattingEnabled = true;\n            this.cbUserName.Location = new System.Drawing.Point(46, 70);\n            this.cbUserName.Name = \"cbUserName\";\n            this.cbUserName.Size = new System.Drawing.Size(235, 21);\n            this.cbUserName.TabIndex = 0;\n            this.cbUserName.TextChanged += new System.EventHandler(this.CbUserNameTextChanged);\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(43, 105);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(56, 13);\n            this.label3.TabIndex = 3;\n            this.label3.Text = \"Password:\";\n            // \n            // txtPassword\n            // \n            this.txtPassword.Location = new System.Drawing.Point(46, 121);\n            this.txtPassword.Name = \"txtPassword\";\n            this.txtPassword.Size = new System.Drawing.Size(235, 20);\n            this.txtPassword.TabIndex = 1;\n            this.txtPassword.UseSystemPasswordChar = true;\n            this.txtPassword.TextChanged += new System.EventHandler(this.CbUserNameTextChanged);\n            // \n            // CredentialsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.txtPassword);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.cbUserName);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtConnect);\n            this.Name = \"CredentialsPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label txtConnect;\n        private Label label2;\n        private ComboBox cbUserName;\n        private Label label3;\n        private TextBox txtPassword;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/CredentialsPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Wizards.ConnectionWizard\n{\n    using System;\n    using System.Windows.Forms;\n    using Microsoft.Extensions.Logging;\n    using JexusManager;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Administration;\n    using System.Threading;\n    using System.Net.Security;\n    using JexusManager.Dialogs;\n    using System.Text;\n\n    public partial class CredentialsPage : WizardPage\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"CredentialsPage\");\n\n        public CredentialsPage()\n        {\n            InitializeComponent();\n            Caption = \"Provide Credentials\";\n        }\n\n        protected internal override bool CanNavigateNext\n        {\n            get\n            {\n                return !string.IsNullOrWhiteSpace(cbUserName.Text)\n                    && !string.IsNullOrWhiteSpace(txtPassword.Text)\n                    && base.CanNavigateNext;\n            }\n        }\n\n        private void CbUserNameTextChanged(object sender, EventArgs e)\n        {\n            var wizardData = ((ConnectionWizardData)WizardData);\n            wizardData.UserName = cbUserName.Text;\n            wizardData.Password = txtPassword.Text;\n            UpdateWizard();\n        }\n\n        protected internal override void Activate()\n        {\n            base.Activate();\n            var wizardData = (ConnectionWizardData)WizardData;\n            txtConnect.Text = $\"Connecting to {wizardData.HostName.ExtractName()}.\";\n            cbUserName.Focus();\n        }\n\n        internal void ShowProgress(bool visible)\n        {\n            cbUserName.Enabled = !visible;\n            txtPassword.Enabled = !visible;\n        }\n\n        public override bool OnNext()\n        {\n            ShowProgress(true);\n            var context = SynchronizationContext.Current;\n\n            var result = OpenConnection(context);\n            ShowProgress(false);\n            return result;\n        }\n\n        private bool OpenConnection(SynchronizationContext context)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n\n            try\n            {\n                var data = (ConnectionWizardData)WizardData;\n                var server = new JexusServerManager(data.HostName, data.UserName + \"|\" + data.Password);\n                data.Server = server;\n                server.ServerCertificateValidationCallback =\n                    (sender1, certificate, chain, sslPolicyErrors) =>\n                    {\n                        var hash = certificate.GetCertHashString();\n                        if (server.AcceptedHash == hash)\n                        {\n                            return true;\n                        }\n\n                        if (sslPolicyErrors == SslPolicyErrors.None)\n                        {\n                            server.AcceptedHash = hash;\n                            return true;\n                        }\n\n                        using (var dialog = new CertificateErrorsDialog(certificate))\n                        {\n                            var result = dialog.ShowDialog();\n                            if (result != DialogResult.OK)\n                            {\n                                return false;\n                            }\n                        }\n\n                        server.AcceptedHash = hash;\n                        return true;\n                    };\n                var version = AsyncHelper.RunSync(() => server.GetVersionAsync());\n                if (version == null)\n                {\n                    service.ShowMessage(\"Authentication failed.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                    return false;\n                }\n\n                if (version < JexusServerManager.MinimumServerVersion)\n                {\n                    var toContinue =\n                        service?.ShowMessage(\n                            string.Format(\n                                \"The server version is {0}, while minimum compatible version is {1}. Making changes might corrupt server configuration. Do you want to continue?\",\n                                version,\n                                JexusServerManager.MinimumServerVersion),\n                            Text,\n                            MessageBoxButtons.YesNoCancel,\n                            MessageBoxIcon.Question);\n                    if (toContinue != DialogResult.Yes)\n                    {\n                        return false;\n                    }\n                }\n\n                var conflict = AsyncHelper.RunSync(() => server.HelloAsync());\n                if (Environment.MachineName != conflict)\n                {\n                    service?.ShowMessage($\"The server is also connected to {conflict}. Making changes on multiple clients might corrupt server configuration.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);\n                }\n\n                data.CertificateHash = server.AcceptedHash;\n                return true;\n            }\n            catch (Exception ex)\n            {\n                RaiseError(ex);\n                return false;\n            }\n        }\n\n        private void RaiseError(Exception ex)\n        {\n            _logger.LogError(ex, \"Error in credentials page\");\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var last = ex;\n            while (last is AggregateException)\n            {\n                last = last.InnerException;\n            }\n\n            var message = new StringBuilder();\n            message.AppendLine(\"Could not connect to the specified computer.\")\n                                .AppendLine()\n                                .AppendFormat(\"Details: {0}\", last?.Message);\n            service?.ShowMessage(message.ToString(), Text, MessageBoxButtons.OK, MessageBoxIcon.Error);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/CredentialsPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/FinishPage.Designer.cs",
    "content": "﻿namespace JexusManager.Wizards.ConnectionWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class FinishPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(34, 38);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(233, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Created a new connection successfully.\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(34, 75);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(93, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Connection name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(37, 91);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(305, 20);\n            this.txtName.TabIndex = 2;\n            this.txtName.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // FinishPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Name = \"FinishPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private Label label2;\n        private TextBox txtName;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/FinishPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Wizards.ConnectionWizard\n{\n    using System;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class FinishPage : WizardPage\n    {\n        private bool _initialized;\n\n        public FinishPage()\n        {\n            InitializeComponent();\n            Caption = \"Specify a Connection Name\";\n        }\n\n        protected internal override bool CanNavigateNext\n        {\n            get\n            {\n                return !string.IsNullOrWhiteSpace(txtName.Text)\n                       && ((ConnectionWizardData)WizardData).VerifyName(txtName.Text);\n            }\n        }\n\n        private void TxtNameTextChanged(object sender, EventArgs e)\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            ((ConnectionWizardData)WizardData).Name = txtName.Text;\n            this.UpdateWizard();\n        }\n\n        protected internal override void Activate()\n        {\n            base.Activate();\n            _initialized = false;\n            var connectionWizardData = (ConnectionWizardData)WizardData;\n            txtName.Text = connectionWizardData.HostName.ExtractName();\n            connectionWizardData.Name = txtName.Text;\n            _initialized = true;\n            txtName.Focus();\n            txtName.SelectAll();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/FinishPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/ServerPage.Designer.cs",
    "content": "﻿namespace JexusManager.Wizards.ConnectionWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ServerPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbHostName = new System.Windows.Forms.ComboBox();\n            this.SuspendLayout();\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F);\n            this.label2.Location = new System.Drawing.Point(21, 20);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(70, 13);\n            this.label2.TabIndex = 5;\n            this.label2.Text = \"Server name:\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(21, 60);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(273, 13);\n            this.label3.TabIndex = 6;\n            this.label3.Text = \"Example: localhost, www.site.net, or WESTSRV01:8080\\r\\n\";\n            // \n            // cbHostName\n            // \n            this.cbHostName.FormattingEnabled = true;\n            this.cbHostName.Location = new System.Drawing.Point(24, 36);\n            this.cbHostName.Name = \"cbHostName\";\n            this.cbHostName.Size = new System.Drawing.Size(335, 21);\n            this.cbHostName.TabIndex = 7;\n            this.cbHostName.TextChanged += new System.EventHandler(this.cbHostName_TextChanged);\n            // \n            // ServerPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.cbHostName);\n            this.Name = \"ServerPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label2;\n        private Label label3;\n        private ComboBox cbHostName;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/ServerPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Wizards.ConnectionWizard\n{\n    using System;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class ServerPage : WizardPage\n    {\n        public ServerPage()\n        {\n            InitializeComponent();\n            Caption = \"Specify Server Connection Details\";\n        }\n\n        protected internal override bool CanNavigateNext\n        {\n            get { return base.CanNavigateNext && !string.IsNullOrWhiteSpace(cbHostName.Text); }\n        }\n\n        private void cbHostName_TextChanged(object sender, EventArgs e)\n        {\n            var wizardData = ((ConnectionWizardData)WizardData);\n            wizardData.HostName = cbHostName.Text;\n            UpdateWizard();\n        }\n\n        protected internal override void Activate()\n        {\n            base.Activate();\n            cbHostName.Focus();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/ServerPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/SolutionTypePage.Designer.cs",
    "content": "﻿namespace JexusManager.Wizards.ConnectionWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class SolutionTypePage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.label2 = new System.Windows.Forms.Label();\n            this.rbVisualStudio = new System.Windows.Forms.RadioButton();\n            this.label3 = new System.Windows.Forms.Label();\n            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);\n            this.label5 = new System.Windows.Forms.Label();\n            this.rbRider = new System.Windows.Forms.RadioButton();\n            this.SuspendLayout();\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F);\n            this.label2.Location = new System.Drawing.Point(21, 20);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(107, 13);\n            this.label2.TabIndex = 5;\n            this.label2.Text = \"Configuration source:\";\n            // \n            // rbVisualStudio\n            // \n            this.rbVisualStudio.AutoSize = true;\n            this.rbVisualStudio.Location = new System.Drawing.Point(24, 51);\n            this.rbVisualStudio.Name = \"rbVisualStudio\";\n            this.rbVisualStudio.Size = new System.Drawing.Size(158, 17);\n            this.rbVisualStudio.TabIndex = 7;\n            this.rbVisualStudio.Text = \"From Visual Studio .vs folder\";\n            this.rbVisualStudio.UseVisualStyleBackColor = true;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(39, 71);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(374, 13);\n            this.label3.TabIndex = 10;\n            this.label3.Text = \"IIS Express configuration file used by Microsoft Visual Studio 2015 and above.\";\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(39, 143);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(241, 13);\n            this.label5.TabIndex = 13;\n            this.label5.Text = \"IIS Express configuration used by JetBrains Rider.\";\n            // \n            // rbRider\n            // \n            this.rbRider.AutoSize = true;\n            this.rbRider.Location = new System.Drawing.Point(24, 123);\n            this.rbRider.Name = \"rbRider\";\n            this.rbRider.Size = new System.Drawing.Size(131, 17);\n            this.rbRider.TabIndex = 12;\n            this.rbRider.Text = \"From Rider .idea folder\";\n            this.rbRider.UseVisualStyleBackColor = true;\n            // \n            // SolutionTypePage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.rbRider);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.rbVisualStudio);\n            this.Controls.Add(this.label2);\n            this.Name = \"SolutionTypePage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label2;\n        private RadioButton rbVisualStudio;\n        private Label label3;\n        private ToolTip toolTip1;\n        private Label label5;\n        private RadioButton rbRider;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/SolutionTypePage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Wizards.ConnectionWizard\n{\n    using System.IO;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class SolutionTypePage : WizardPage\n    {\n        private string _vsFile;\n        private string _riderFile;\n\n        public SolutionTypePage()\n        {\n            InitializeComponent();\n            Caption = \"Choose Configuration Source\";\n            if (Helper.IsRunningOnMono())\n            {\n                rbVisualStudio.Enabled = false;\n                rbRider.Enabled = false;\n                toolTip1.SetToolTip(rbVisualStudio, \"IIS Express is not supported when running on Mono.\");\n                toolTip1.SetToolTip(rbRider, \"IIS Express is not supported when running on Mono.\");\n            }\n\n            if (!IisExpressServerManager.ServerInstalled)\n            {\n                rbVisualStudio.Enabled = false;\n                rbRider.Enabled = false;\n                toolTip1.SetToolTip(rbVisualStudio, \"IIS Express is not installed to the default location.\");\n                toolTip1.SetToolTip(rbRider, \"IIS Express is not installed to the default location.\");\n            }\n        }\n\n        protected internal override void Activate()\n        {\n            base.Activate();\n            ConnectionWizardData data = (ConnectionWizardData)WizardData;\n            var folder = Path.GetDirectoryName(data.SolutionFile);\n            var solutionName = Path.GetFileNameWithoutExtension(data.SolutionFile);\n            _vsFile = Path.Combine(folder, \".vs\", \"config\", \"applicationHost.config\");\n            if (!File.Exists(_vsFile))\n            {\n                _vsFile = Path.Combine(folder, \".vs\", solutionName, \"config\", \"applicationHost.config\");\n            }\n\n            _riderFile = Path.Combine(folder, \".idea\", \"config\", \"applicationHost.config\");\n            rbVisualStudio.Enabled = File.Exists(_vsFile);\n            rbRider.Enabled = File.Exists(_riderFile);\n            if (rbVisualStudio.Enabled)\n            {\n                rbVisualStudio.Checked = true;\n            }\n            else if (rbRider.Enabled)\n            {\n                rbRider.Checked = true;\n            }\n        }\n\n        protected internal override bool CanNavigateNext => rbRider.Checked || rbVisualStudio.Checked;\n\n        public override bool OnNext()\n        {\n            ConnectionWizardData data = (ConnectionWizardData)WizardData;\n            data.FileName = rbRider.Checked ? _riderFile : _vsFile;\n            data.Server = new IisExpressServerManager(data.FileName);\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/SolutionTypePage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"toolTip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/TypePage.Designer.cs",
    "content": "﻿namespace JexusManager.Wizards.ConnectionWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class TypePage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.label2 = new System.Windows.Forms.Label();\n            this.rbJexus = new System.Windows.Forms.RadioButton();\n            this.rbIisExpress = new System.Windows.Forms.RadioButton();\n            this.rbIis = new System.Windows.Forms.RadioButton();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.label4 = new System.Windows.Forms.Label();\n            this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);\n            this.label5 = new System.Windows.Forms.Label();\n            this.rbVisualStudio = new System.Windows.Forms.RadioButton();\n            this.SuspendLayout();\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F);\n            this.label2.Location = new System.Drawing.Point(21, 20);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(64, 13);\n            this.label2.TabIndex = 5;\n            this.label2.Text = \"Server type:\";\n            // \n            // rbJexus\n            // \n            this.rbJexus.AutoSize = true;\n            this.rbJexus.Location = new System.Drawing.Point(24, 196);\n            this.rbJexus.Name = \"rbJexus\";\n            this.rbJexus.Size = new System.Drawing.Size(86, 17);\n            this.rbJexus.TabIndex = 6;\n            this.rbJexus.Text = \"Jexus Server\";\n            this.rbJexus.UseVisualStyleBackColor = true;\n            this.rbJexus.CheckedChanged += new System.EventHandler(this.RbJexusCheckedChanged);\n            // \n            // rbIisExpress\n            // \n            this.rbIisExpress.AutoSize = true;\n            this.rbIisExpress.Location = new System.Drawing.Point(24, 51);\n            this.rbIisExpress.Name = \"rbIisExpress\";\n            this.rbIisExpress.Size = new System.Drawing.Size(162, 17);\n            this.rbIisExpress.TabIndex = 7;\n            this.rbIisExpress.Text = \"IIS Express Configuration File\";\n            this.rbIisExpress.UseVisualStyleBackColor = true;\n            this.rbIisExpress.CheckedChanged += new System.EventHandler(this.RbJexusCheckedChanged);\n            // \n            // rbIis\n            // \n            this.rbIis.AutoSize = true;\n            this.rbIis.Enabled = false;\n            this.rbIis.Location = new System.Drawing.Point(24, 270);\n            this.rbIis.Name = \"rbIis\";\n            this.rbIis.Size = new System.Drawing.Size(78, 17);\n            this.rbIis.TabIndex = 8;\n            this.rbIis.Text = \"Remote IIS\";\n            this.rbIis.UseVisualStyleBackColor = true;\n            this.rbIis.CheckedChanged += new System.EventHandler(this.RbJexusCheckedChanged);\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(39, 216);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(385, 13);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"Jexus web server is a Linux based web server that supports ASP.NET and PHP.\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(39, 71);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(338, 13);\n            this.label3.TabIndex = 10;\n            this.label3.Text = \"IIS Express configuration files can be added as individual web servers.\";\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(39, 290);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(183, 13);\n            this.label4.TabIndex = 11;\n            this.label4.Text = \"Remote IIS web servers (unavailable)\";\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(39, 143);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(280, 13);\n            this.label5.TabIndex = 13;\n            this.label5.Text = \"Open a solution file to locate IIS Express configuration file.\";\n            // \n            // rbVisualStudio\n            // \n            this.rbVisualStudio.AutoSize = true;\n            this.rbVisualStudio.Location = new System.Drawing.Point(24, 123);\n            this.rbVisualStudio.Name = \"rbVisualStudio\";\n            this.rbVisualStudio.Size = new System.Drawing.Size(226, 17);\n            this.rbVisualStudio.TabIndex = 12;\n            this.rbVisualStudio.Text = \"Visual Studio IIS Express Configuration File\";\n            this.rbVisualStudio.UseVisualStyleBackColor = true;\n            this.rbVisualStudio.CheckedChanged += new System.EventHandler(this.RbJexusCheckedChanged);\n            // \n            // TypePage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.rbVisualStudio);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.rbIis);\n            this.Controls.Add(this.rbIisExpress);\n            this.Controls.Add(this.rbJexus);\n            this.Controls.Add(this.label2);\n            this.Name = \"TypePage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label2;\n        private RadioButton rbJexus;\n        private RadioButton rbIisExpress;\n        private RadioButton rbIis;\n        private Label label1;\n        private Label label3;\n        private Label label4;\n        private ToolTip toolTip1;\n        private Label label5;\n        private RadioButton rbVisualStudio;\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/TypePage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Wizards.ConnectionWizard\n{\n    using System;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class TypePage : WizardPage\n    {\n        private readonly ServerPage _jexusPage;\n\n        private readonly BrowsePage _iisExpressPage;\n\n        public TypePage(ServerPage jexusPage, BrowsePage iisExpressPage)\n        {\n            _jexusPage = jexusPage;\n            _iisExpressPage = iisExpressPage;\n            InitializeComponent();\n            Caption = \"Choose Server Type\";\n            if (Helper.IsRunningOnMono())\n            {\n                rbIisExpress.Enabled = false;\n                rbVisualStudio.Enabled = false;\n                toolTip1.SetToolTip(rbIisExpress, \"IIS Express is not supported when running on Mono.\");\n                toolTip1.SetToolTip(rbVisualStudio, \"IIS Express is not supported when running on Mono.\");\n            }\n\n            if (!IisExpressServerManager.ServerInstalled)\n            {\n                rbIisExpress.Enabled = false;\n                rbVisualStudio.Enabled = false;\n                toolTip1.SetToolTip(rbIisExpress, \"IIS Express is not installed to the default location.\");\n                toolTip1.SetToolTip(rbVisualStudio, \"IIS Express is not installed to the default location.\");\n            }\n\n            if (!JexusServerManager.Enabled)\n            {\n                rbJexus.Enabled = false;\n                toolTip1.SetToolTip(rbJexus, \"Jexus web server support must be enabled by --jexus switch.\");\n            }\n        }\n\n        private void RbJexusCheckedChanged(object sender, EventArgs e)\n        {\n            var wizardData = (ConnectionWizardData)WizardData;\n            if (rbJexus.Checked)\n            {\n                wizardData.Mode = WorkingMode.Jexus;\n            }\n            else if (rbIisExpress.Checked)\n            {\n                wizardData.Mode = WorkingMode.IisExpress;\n            }\n            else if (rbVisualStudio.Checked)\n            {\n                wizardData.Mode = WorkingMode.IisExpress;\n            }\n            else\n            {\n                wizardData.Mode = WorkingMode.Iis;\n            }\n\n            wizardData.UseVisualStudio = rbVisualStudio.Checked;\n            if (wizardData.Mode == WorkingMode.Jexus)\n            {\n                SetNextPage(_jexusPage);\n            }\n            else if (wizardData.Mode == WorkingMode.IisExpress)\n            {\n                SetNextPage(_iisExpressPage);\n            }\n\n            UpdateWizard();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager/Wizards/ConnectionWizard/TypePage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"toolTip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <assemblyIdentity version=\"1.0.0.0\" name=\"MyApplication.app\"/>\n  <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v2\">\n    <security>\n      <requestedPrivileges xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <!-- UAC Manifest Options\n             If you want to change the Windows User Account Control level replace the \n             requestedExecutionLevel node with one of the following.\n\n        <requestedExecutionLevel  level=\"asInvoker\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"requireAdministrator\" uiAccess=\"false\" />\n        <requestedExecutionLevel  level=\"highestAvailable\" uiAccess=\"false\" />\n\n            Specifying requestedExecutionLevel element will disable file and registry virtualization. \n            Remove this element if your application requires this virtualization for backwards\n            compatibility.\n        -->\n        <requestedExecutionLevel level=\"asInvoker\" uiAccess=\"false\" />\n      </requestedPrivileges>\n    </security>\n  </trustInfo>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on and is\n           is designed to work with. Uncomment the appropriate elements and Windows will \n           automatically selected the most compatible environment. -->\n\n      <!-- Windows Vista -->\n      <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\" />\n\n      <!-- Windows 7 -->\n      <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\" />\n\n      <!-- Windows 8 -->\n      <!--<supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\" />-->\n\n      <!-- Windows 8.1 -->\n      <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\" />\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n\n    </application>\n  </compatibility>\n\n  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher\n       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need \n       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should \n       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->\n  \n  <!--<application xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n    <windowsSettings>\n      <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true</dpiAware>\n    </windowsSettings>\n  </application>-->\n  \n\n  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->\n  <dependency>\n    <dependentAssembly>\n      <assemblyIdentity\n          type=\"win32\"\n          name=\"Microsoft.Windows.Common-Controls\"\n          version=\"6.0.0.0\"\n          processorArchitecture=\"*\"\n          publicKeyToken=\"6595b64144ccf1df\"\n          language=\"*\"\n        />\n    </dependentAssembly>\n  </dependency>\n\n</assembly>\n"
  },
  {
    "path": "JexusManager.BreadCrumb.Demo/JexusManager.BreadCrumb.Demo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <OutputType>WinExe</OutputType>\n    <RootNamespace>JexusManager.BreadCrumb.Demo</RootNamespace>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Breadcrumb\\JexusManager.Breadcrumb.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.BreadCrumb.Demo/MainForm.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Windows.Forms;\nusing JexusManager.Breadcrumb;\n\nnamespace JexusManager.BreadCrumb.Demo\n{\n    public partial class MainForm : Form\n    {\n        private readonly BreadcrumbControl _breadcrumb;\n        private readonly ToolStripBreadcrumbItem _toolStripBreadcrumb;\n        private readonly Panel _contentPanel;\n        private readonly ListBox _navigationHistoryListBox; public MainForm()\n        {\n            Text = \"BreadCrumb Control Demo\";\n            Size = new Size(800, 600);\n            StartPosition = FormStartPosition.CenterScreen;\n\n            // Create the standard breadcrumb control\n            _breadcrumb = new BreadcrumbControl\n            {\n                Dock = DockStyle.Top,\n                Height = 30,\n                Margin = new Padding(10),\n                Font = new Font(\"Segoe UI\", 9F),\n                HighlightColor = Color.FromArgb(0, 120, 215)\n            };\n            _breadcrumb.ItemClicked += Breadcrumb_ItemClicked;\n\n            // Create a ToolStrip with breadcrumb\n            var toolStrip = new ToolStrip\n            {\n                Dock = DockStyle.Top,\n                GripStyle = ToolStripGripStyle.Hidden,\n                RenderMode = ToolStripRenderMode.System\n            };\n\n            // Add some standard ToolStrip items\n            toolStrip.Items.Add(new ToolStripButton(\"Home\", null, (s, e) => InitializeNavigation())\n            {\n                DisplayStyle = ToolStripItemDisplayStyle.Image,\n                Image = SystemIcons.Application.ToBitmap()\n            });\n\n            toolStrip.Items.Add(new ToolStripSeparator());\n\n            // Create the ToolStripBreadcrumbItem\n            _toolStripBreadcrumb = new ToolStripBreadcrumbItem\n            {\n                Width = 500,\n                Font = new Font(\"Segoe UI\", 9F),\n                HighlightColor = Color.FromArgb(0, 120, 215)\n            };\n            _toolStripBreadcrumb.ItemClicked += ToolStripBreadcrumb_ItemClicked;\n\n            toolStrip.Items.Add(_toolStripBreadcrumb);\n\n            // Create the content panel\n            _contentPanel = new Panel\n            {\n                Dock = DockStyle.Fill,\n                BackColor = SystemColors.Window,\n                Padding = new Padding(10)\n            };\n\n            // Create navigation history list\n            _navigationHistoryListBox = new ListBox\n            {\n                Dock = DockStyle.Right,\n                Width = 250,\n                Font = new Font(\"Segoe UI\", 9F),\n                BorderStyle = BorderStyle.FixedSingle\n            };\n\n            // Create a splitter between panels\n            var splitter = new Splitter\n            {\n                Dock = DockStyle.Right,\n                Width = 3,\n                BackColor = SystemColors.ControlDark\n            };\n\n            // Create buttons for demonstration\n            var buttonPanel = new FlowLayoutPanel\n            {\n                Dock = DockStyle.Bottom,\n                Height = 40,\n                Padding = new Padding(5),\n                FlowDirection = FlowDirection.RightToLeft\n            };\n\n            var resetButton = new Button\n            {\n                Text = \"Reset Navigation\",\n                Height = 30,\n                Width = 150,\n                Margin = new Padding(5, 0, 0, 0)\n            };\n            resetButton.Click += ResetButton_Click;\n\n            var navigateButton = new Button\n            {\n                Text = \"Navigate Deeper\",\n                Height = 30,\n                Width = 150,\n                Margin = new Padding(5, 0, 0, 0)\n            };\n            navigateButton.Click += NavigateButton_Click;            // Add a label for each breadcrumb implementation\n            var standardLabel = new Label\n            {\n                Text = \"Standard Breadcrumb Control:\",\n                Dock = DockStyle.Top,\n                Height = 20,\n                Font = new Font(\"Segoe UI\", 8F),\n                ForeColor = SystemColors.GrayText,\n                Padding = new Padding(10, 3, 0, 0)\n            };\n\n            var toolstripLabel = new Label\n            {\n                Text = \"ToolStrip Breadcrumb Control:\",\n                Dock = DockStyle.Top,\n                Height = 20,\n                Font = new Font(\"Segoe UI\", 8F),\n                ForeColor = SystemColors.GrayText,\n                Padding = new Padding(10, 3, 0, 0)\n            };\n\n            // Add controls to the form\n            buttonPanel.Controls.Add(resetButton);\n            buttonPanel.Controls.Add(navigateButton);\n\n            Controls.Add(_contentPanel);\n            Controls.Add(splitter);\n            Controls.Add(_navigationHistoryListBox);\n            Controls.Add(buttonPanel);\n            Controls.Add(_breadcrumb);\n            Controls.Add(standardLabel);\n            Controls.Add(toolStrip);\n            Controls.Add(toolstripLabel);\n\n            // Initialize with Home\n            InitializeNavigation();\n        }\n        private void InitializeNavigation()\n        {\n            // Initialize standard breadcrumb\n            _breadcrumb.Clear();\n            _breadcrumb.AddItem(\"Home\", \"home\");\n\n            // Initialize toolstrip breadcrumb\n            _toolStripBreadcrumb.Clear();\n            _toolStripBreadcrumb.AddItem(\"Home\", \"home\");\n\n            UpdateContentPanel(\"Home Page\");\n            AddToNavigationHistory(\"Navigated to Home\");\n        }\n\n        private void ToolStripBreadcrumb_ItemClicked(object sender, BreadcrumbItemClickedEventArgs e)\n        {\n            // If we click on an item, remove all items after it\n            while (_toolStripBreadcrumb.Items.Count > e.Index + 1)\n            {\n                _toolStripBreadcrumb.RemoveLastItem();\n            }\n\n            // Also sync the standard breadcrumb to match\n            _breadcrumb.Clear();\n            foreach (var item in _toolStripBreadcrumb.Items)\n            {\n                _breadcrumb.AddItem(item.Text, item.Tag);\n            }\n\n            // Update the content panel based on the clicked item\n            UpdateContentPanel($\"{e.Item.Text} Page (ToolStrip)\");\n            AddToNavigationHistory($\"Navigated to {e.Item.Text} via ToolStrip breadcrumb\");\n        }\n\n        private void Breadcrumb_ItemClicked(object sender, BreadcrumbItemClickedEventArgs e)\n        {\n            // If we click on an item, remove all items after it\n            while (_breadcrumb.Items.Count > e.Index + 1)\n            {\n                _breadcrumb.RemoveLastItem();\n            }\n\n            // Update the content panel based on the clicked item\n            UpdateContentPanel($\"{e.Item.Text} Page\");\n            AddToNavigationHistory($\"Navigated to {e.Item.Text} via breadcrumb\");\n        }\n        private void NavigateButton_Click(object sender, EventArgs e)\n        {\n            // Generate a new level based on the current path\n            string[] sections = { \"Settings\", \"Users\", \"Products\", \"Reports\", \"Services\" };\n            string[] subsections = { \"List\", \"Details\", \"Edit\", \"Create\", \"Delete\", \"Properties\" };\n\n            Random random = new Random();\n\n            string newSection;\n\n            // If we're at the beginning, pick a main section\n            if (_breadcrumb.Items.Count <= 1)\n            {\n                newSection = sections[random.Next(sections.Length)];\n            }\n            // Otherwise, add a subsection\n            else\n            {\n                newSection = subsections[random.Next(subsections.Length)];\n            }\n\n            // Add the new item to both breadcrumb controls\n            string tagValue = $\"level_{_breadcrumb.Items.Count}\";\n            _breadcrumb.AddItem(newSection, tagValue);\n            _toolStripBreadcrumb.AddItem(newSection, tagValue);\n\n            // Update the content panel\n            UpdateContentPanel($\"{newSection} Page\");\n\n            // Add to navigation history\n            AddToNavigationHistory($\"Navigated to {newSection}\");\n        }\n\n        private void ResetButton_Click(object sender, EventArgs e)\n        {\n            InitializeNavigation();\n        }\n\n        private void UpdateContentPanel(string content)\n        {\n            // Clear existing controls\n            _contentPanel.Controls.Clear();\n\n            // Create a label to display the current \"page\"\n            var contentLabel = new Label\n            {\n                Text = content,\n                Font = new Font(\"Segoe UI\", 16F, FontStyle.Bold),\n                AutoSize = true,\n                Location = new Point(20, 20)\n            };\n\n            // Create a label to show current breadcrumb path\n            var fullPathLabel = new Label\n            {\n                Text = \"Current Path: \" + GetFullPath(),\n                Font = new Font(\"Segoe UI\", 10F),\n                AutoSize = true,\n                Location = new Point(20, 60)\n            };\n\n            // Add a description about what to do\n            var descriptionLabel = new Label\n            {\n                Text = \"Use the 'Navigate Deeper' button to navigate to a new section.\\n\" +\n                      \"Click on any item in the breadcrumb trail to navigate back to that level.\\n\" +\n                      \"The 'Reset Navigation' button will clear the path and return to Home.\",\n                Font = new Font(\"Segoe UI\", 9F),\n                AutoSize = true,\n                Location = new Point(20, 100)\n            };\n\n            _contentPanel.Controls.Add(contentLabel);\n            _contentPanel.Controls.Add(fullPathLabel);\n            _contentPanel.Controls.Add(descriptionLabel);\n        }\n\n        private string GetFullPath()\n        {\n            string path = string.Empty;\n\n            for (int i = 0; i < _breadcrumb.Items.Count; i++)\n            {\n                path += _breadcrumb.Items[i].Text;\n\n                if (i < _breadcrumb.Items.Count - 1)\n                {\n                    path += \" > \";\n                }\n            }\n\n            return path;\n        }\n\n        private void AddToNavigationHistory(string action)\n        {\n            _navigationHistoryListBox.Items.Insert(0, $\"[{DateTime.Now.ToLongTimeString()}] {action}\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.BreadCrumb.Demo/Program.cs",
    "content": "using System;\nusing System.Windows.Forms;\n\nnamespace JexusManager.BreadCrumb.Demo\n{\n    internal static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new MainForm());\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Breadcrumb/BreadcrumbControl.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Windows.Forms;\n\nnamespace JexusManager.Breadcrumb\n{\n    /// <summary>\n    /// A breadcrumb navigation control for Windows Forms applications.\n    /// </summary>\n    [ToolboxItem(true)]\n    public class BreadcrumbControl : Control\n    {\n        private readonly List<BreadcrumbItem> _items = new List<BreadcrumbItem>();\n        private int _selectedIndex = -1;\n        private int _hoveredIndex = -1;\n        private bool _mouseDown = false;\n        private Font _boldFont;\n        private int _scrollOffset = 0;\n        private bool _showScrollButtons = false;\n        private Rectangle _leftScrollButtonRect;\n        private Rectangle _rightScrollButtonRect;\n        private bool _leftScrollHovered;\n        private bool _rightScrollHovered;\n\n        // Fields for textbox mode\n        private bool _inTextBoxMode = false;\n        private TextBox _pathTextBox;\n        private string _pathSeparator = \"\\\\\";\n        private BorderStyle _borderStyle = BorderStyle.Fixed3D;\n\n        // Fields for context menu\n        private ContextMenuStrip _contextMenu;\n        private int _contextMenuSourceIndex = -1;\n        private bool _showDropdownButtons = true;\n        private int _dropdownButtonWidth = 16;\n        private bool _showIconArea = true;\n        private int _iconSize = 16;\n        private Rectangle _iconAreaRect;\n        private bool _showSelectedItemIcon = true;\n\n        /// <summary>\n        /// Occurs when a breadcrumb item is clicked.\n        /// </summary>\n        public event EventHandler<BreadcrumbItemClickedEventArgs> ItemClicked;\n\n        /// <summary>\n        /// Gets or sets the selected item index.\n        /// </summary>\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public int SelectedIndex\n        {\n            get => _selectedIndex;\n            set\n            {\n                if (_selectedIndex != value && value >= -1 && value < _items.Count)\n                {\n                    _selectedIndex = value;\n                    Invalidate();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets the collection of breadcrumb items.\n        /// </summary>\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public List<BreadcrumbItem> Items => _items;\n\n        /// <summary>\n        /// Gets or sets the background color for highlighted items.\n        /// </summary>\n        [Category(\"Appearance\")]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]\n        public Color HighlightColor { get; set; } = SystemColors.Highlight;\n\n        /// <summary>\n        /// Gets or sets whether horizontal scrolling is enabled.\n        /// </summary>\n        [Category(\"Behavior\")]\n        [DefaultValue(true)]\n        public bool EnableScrolling { get; set; } = true;\n\n        /// <summary>\n        /// Gets or sets the width of the scroll buttons.\n        /// </summary>\n        [Category(\"Appearance\")]\n        [DefaultValue(16)]\n        public int ScrollButtonWidth { get; set; } = 16;\n\n        /// <summary>\n        /// Gets the total width of all items.\n        /// </summary>\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public int TotalItemsWidth { get; private set; }\n\n        /// <summary>\n        /// Gets or sets the border style for the control.\n        /// </summary>\n        [Category(\"Appearance\")]\n        [DefaultValue(BorderStyle.Fixed3D)]\n        public BorderStyle BorderStyle\n        {\n            get => _borderStyle;\n            set\n            {\n                if (_borderStyle != value)\n                {\n                    _borderStyle = value;\n                    Invalidate();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the character used to separate path components in text mode.\n        /// </summary>\n        [Category(\"Behavior\")]\n        [DefaultValue(\"\\\\\")]\n        public string PathSeparator\n        {\n            get => _pathSeparator;\n            set\n            {\n                if (value != null && _pathSeparator != value)\n                {\n                    _pathSeparator = value;\n                    if (_inTextBoxMode && _pathTextBox != null)\n                    {\n                        _pathTextBox.Text = GetFullPath();\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets whether the control allows entering text mode by clicking on empty areas.\n        /// </summary>\n        [Category(\"Behavior\")]\n        [DefaultValue(true)]\n        public bool AllowTextMode { get; set; } = true;\n\n        /// <summary>\n        /// Gets or sets whether the control is currently in text editing mode.\n        /// </summary>\n        [Browsable(false)]\n        public bool IsInTextMode => _inTextBoxMode;\n\n        /// <summary>\n        /// Gets or sets whether to show dropdown buttons for breadcrumb items.\n        /// </summary>\n        [Category(\"Behavior\")]\n        [DefaultValue(true)]\n        public bool ShowDropdownButtons\n        {\n            get => _showDropdownButtons;\n            set\n            {\n                if (_showDropdownButtons != value)\n                {\n                    _showDropdownButtons = value;\n                    Invalidate();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the width of the dropdown buttons.\n        /// </summary>\n        [Category(\"Appearance\")]\n        [DefaultValue(16)]\n        public int DropdownButtonWidth\n        {\n            get => _dropdownButtonWidth;\n            set\n            {\n                if (_dropdownButtonWidth != value && value > 0)\n                {\n                    _dropdownButtonWidth = value;\n                    Invalidate();\n                }\n            }\n        }        /// <summary>\n                 /// Gets or sets whether to show a dedicated icon area on the left.\n                 /// </summary>\n        [Category(\"Appearance\")]\n        [DefaultValue(true)]\n        public bool ShowIconArea\n        {\n            get => _showIconArea;\n            set\n            {\n                if (_showIconArea != value)\n                {\n                    _showIconArea = value;\n                    Invalidate();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the size of icons used in the breadcrumb control.\n        /// </summary>\n        [Category(\"Appearance\")]\n        [DefaultValue(16)]\n        public int IconSize\n        {\n            get => _iconSize;\n            set\n            {\n                if (_iconSize != value && value > 0)\n                {\n                    _iconSize = value;\n                    Invalidate();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Occurs when the control requests child items for a breadcrumb item.\n        /// </summary>\n        public event EventHandler<BreadcrumbItemEventArgs> ItemChildrenRequested;        /// <summary>\n                                                                                         /// Initializes a new instance of the BreadcrumbControl class.\n                                                                                         /// </summary>\n        public BreadcrumbControl()\n        {\n            SetStyle(ControlStyles.OptimizedDoubleBuffer |\n                     ControlStyles.AllPaintingInWmPaint |\n                     ControlStyles.UserPaint |\n                     ControlStyles.ResizeRedraw, true);\n\n            this.BackColor = SystemColors.Window;\n            this.ForeColor = SystemColors.WindowText;\n\n            _boldFont = new Font(this.Font, FontStyle.Bold);\n\n            // Initialize context menu\n            _contextMenu = new ContextMenuStrip();\n            _contextMenu.Opening += ContextMenu_Opening;\n            _contextMenu.Closed += ContextMenu_Closed;\n        }\n\n        /// <summary>\n        /// Clears all items from the breadcrumb control.\n        /// </summary>\n        public void Clear()\n        {\n            _items.Clear();\n            _selectedIndex = -1;\n            _hoveredIndex = -1;\n            Invalidate();\n        }\n\n        /// <summary>\n        /// Adds a new item to the breadcrumb control.\n        /// </summary>\n        /// <param name=\"text\">The text of the item.</param>\n        /// <param name=\"tag\">The tag object associated with the item.</param>\n        /// <returns>The newly added BreadcrumbItem.</returns>\n        public BreadcrumbItem AddItem(string text, object tag = null)\n        {\n            var item = new BreadcrumbItem(text, tag);\n            _items.Add(item);\n            Invalidate();\n            return item;\n        }\n\n        /// <summary>\n        /// Adds a new item to the breadcrumb control.\n        /// </summary>\n        /// <param name=\"text\">The text of the item.</param>\n        /// <param name=\"tag\">The tag object associated with the item.</param>\n        /// <param name=\"icon\">The icon to display for this item.</param>\n        /// <returns>The newly added BreadcrumbItem.</returns>\n        public BreadcrumbItem AddItem(string text, object tag = null, Image icon = null)\n        {\n            var item = new BreadcrumbItem(text, tag, icon);\n            _items.Add(item);\n            Invalidate();\n            return item;\n        }\n\n        /// <summary>\n        /// Removes the last item from the breadcrumb control.\n        /// </summary>\n        public void RemoveLastItem()\n        {\n            if (_items.Count > 0)\n            {\n                _items.RemoveAt(_items.Count - 1);\n                if (_selectedIndex >= _items.Count)\n                {\n                    _selectedIndex = _items.Count - 1;\n                }\n                Invalidate();\n            }\n        }\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _boldFont?.Dispose();\n            }\n            base.Dispose(disposing);\n        }        /// <summary>\n                 /// Raises the Paint event.\n                 /// </summary>\n        protected override void OnPaint(PaintEventArgs e)\n        {\n            base.OnPaint(e);\n\n            Graphics g = e.Graphics;\n            g.SmoothingMode = SmoothingMode.AntiAlias;\n\n            // If in text mode, we don't draw breadcrumb items\n            if (_inTextBoxMode)\n            {\n                // Just draw the border\n                DrawBorder(g);\n                return;\n            }\n\n            int availableWidth = Width - Padding.Horizontal;\n            int contentWidth = MeasureTotalItemsWidth(g);\n            TotalItemsWidth = contentWidth;\n\n            // Determine if we need to show scroll buttons\n            _showScrollButtons = EnableScrolling && contentWidth > availableWidth;\n\n            // Adjust available width if scroll buttons are visible\n            if (_showScrollButtons)\n            {\n                availableWidth -= ScrollButtonWidth * 2;\n            }\n\n            // Ensure scroll offset is within valid range\n            if (_scrollOffset < 0)\n            {\n                _scrollOffset = 0;\n            }\n            else if (_scrollOffset > Math.Max(0, contentWidth - availableWidth))\n            {\n                _scrollOffset = Math.Max(0, contentWidth - availableWidth);\n            }\n\n            // Draw scroll buttons if needed\n            if (_showScrollButtons)\n            {\n                DrawScrollButtons(g);\n            }\n            // Calculate starting x position\n            int x = Padding.Left;\n\n            // Add space for icon area if enabled\n            int iconAreaWidth = 0;\n            if (_showIconArea && _selectedIndex >= 0 && _selectedIndex < _items.Count && _items[_selectedIndex].Icon != null)\n            {\n                iconAreaWidth = IconSize + 8; // Icon width plus padding\n\n                // Draw icon area with subtle separator\n                _iconAreaRect = new Rectangle(x, 0, iconAreaWidth, Height);\n\n                // Draw a light background for the icon area\n                using (Brush iconAreaBrush = new SolidBrush(Color.FromArgb(20, SystemColors.ControlDark)))\n                {\n                    g.FillRectangle(iconAreaBrush, _iconAreaRect);\n                }\n\n                // Draw a subtle separator line\n                using (Pen separatorPen = new Pen(Color.FromArgb(100, SystemColors.ControlDark)))\n                {\n                    g.DrawLine(separatorPen,\n                        x + iconAreaWidth - 1, 0,\n                        x + iconAreaWidth - 1, Height);\n                }\n\n                // Draw the icon centered in the icon area\n                if (_items[_selectedIndex].Icon != null)\n                {\n                    int iconX = x + (iconAreaWidth - IconSize) / 2;\n                    int iconY = (Height - IconSize) / 2;\n                    g.DrawImage(_items[_selectedIndex].Icon, new Rectangle(iconX, iconY, IconSize, IconSize));\n                }\n\n                // Update starting position for breadcrumb items\n                x += iconAreaWidth;\n            }\n\n            if (_showScrollButtons)\n            {\n                x += ScrollButtonWidth;\n            }\n\n            // Apply scroll offset\n            x -= _scrollOffset;\n\n            // Draw items\n            for (int i = 0; i < _items.Count; i++)\n            {\n                BreadcrumbItem item = _items[i];\n\n                // Determine font and colors based on state\n                Font itemFont = i == _selectedIndex ? _boldFont : Font;\n                Color textColor = ForeColor;\n                Brush backgroundBrush = null;\n\n                if (i == _hoveredIndex)\n                {\n                    backgroundBrush = new SolidBrush(Color.FromArgb(40, HighlightColor));\n                    if (_mouseDown)\n                    {\n                        backgroundBrush = new SolidBrush(Color.FromArgb(70, HighlightColor));\n                    }\n                }\n\n                // Measure text\n                SizeF textSize = g.MeasureString(item.Text, itemFont);\n\n                // Add extra width for dropdown button if needed\n                int dropdownButtonSpace = (_showDropdownButtons) ? DropdownButtonWidth : 0;\n\n                // Add space for icon if this is the selected item and ShowSelectedItemIcon is true\n                int iconSpace = 0;\n                if (i == _selectedIndex && _showSelectedItemIcon && item.Icon != null)\n                {\n                    iconSpace = IconSize + 4; // Icon width plus a little padding\n                }\n\n                int itemWidth = (int)Math.Ceiling(textSize.Width) + 10 + dropdownButtonSpace + iconSpace; // Add padding\n                int itemHeight = (int)Math.Ceiling(textSize.Height) + 4; // Add padding\n\n                // Calculate the bounds for this item\n                Rectangle itemBounds = new Rectangle(x, (Height - itemHeight) / 2, itemWidth, itemHeight);\n                item.Bounds = itemBounds;\n\n                // Calculate dropdown button bounds if needed\n                if (_showDropdownButtons)\n                {\n                    item.DropdownButtonBounds = new Rectangle(\n                        itemBounds.Right - DropdownButtonWidth - 2,\n                        itemBounds.Y,\n                        DropdownButtonWidth,\n                        itemBounds.Height);\n                }\n\n                // Check if item is at least partially visible\n                if (itemBounds.Right > Padding.Left + (_showScrollButtons ? ScrollButtonWidth : 0) &&\n                    itemBounds.Left < Width - Padding.Right - (_showScrollButtons ? ScrollButtonWidth : 0))\n                {\n                    // Draw background if hovered/selected\n                    if (backgroundBrush != null)\n                    {\n                        // Make sure we clip to visible area\n                        Rectangle visibleBounds = Rectangle.Intersect(itemBounds,\n                            new Rectangle(\n                                Padding.Left + (_showScrollButtons ? ScrollButtonWidth : 0),\n                                0,\n                                Width - Padding.Horizontal - (_showScrollButtons ? ScrollButtonWidth * 2 : 0),\n                                Height));\n\n                        if (!visibleBounds.IsEmpty)\n                        {\n                            using GraphicsPath path = RoundedRectangle(visibleBounds, 3);\n                            g.FillPath(backgroundBrush, path);\n                        }\n\n                        backgroundBrush.Dispose();\n                    }\n\n                    // Create a clipping region to avoid drawing outside visible area\n                    Rectangle clipRect = new Rectangle(\n                        Padding.Left + (_showScrollButtons ? ScrollButtonWidth : 0),\n                        0,\n                        Width - Padding.Horizontal - (_showScrollButtons ? ScrollButtonWidth * 2 : 0),\n                        Height);\n\n                    Region oldClip = g.Clip;\n                    g.Clip = new Region(clipRect);                    // Set initial text position - no more inline icon drawing as we have dedicated icon area\n                    int textX = x + 5;\n\n                    // Draw text\n                    using (Brush textBrush = new SolidBrush(textColor))\n                    {\n                        g.DrawString(item.Text, itemFont, textBrush,\n                            textX, (Height - textSize.Height) / 2);\n                    }                    // Draw dropdown button if enabled\n                    if (_showDropdownButtons)\n                    {\n                        // Draw a small solid triangle dropdown indicator\n                        int arrowX = itemBounds.Right - DropdownButtonWidth / 2 - 2;\n                        int arrowY = itemBounds.Y + itemBounds.Height / 2;\n                        int arrowSize = 4;\n\n                        Point[] trianglePoints = new Point[]\n                        {\n                                new Point(arrowX - arrowSize, arrowY - arrowSize),\n                                new Point(arrowX, arrowY),\n                                new Point(arrowX - arrowSize, arrowY + arrowSize)\n                        };\n\n                        using Brush triangleBrush = new SolidBrush(Color.FromArgb(180, textColor));\n                        g.FillPolygon(triangleBrush, trianglePoints);\n                    }\n\n                    g.Clip = oldClip;\n                }                // Update x position\n                x += itemWidth;\n            }\n\n            // Draw the border\n            DrawBorder(g);\n        }\n\n        /// <summary>\n        /// Draws the border around the control.\n        /// </summary>\n        private void DrawBorder(Graphics g)\n        {\n            if (_borderStyle == BorderStyle.None)\n                return;\n\n            Color borderColor = SystemColors.ControlDark;\n            Rectangle borderRect = new Rectangle(0, 0, Width - 1, Height - 1);\n\n            // Draw the appropriate border style\n            if (_borderStyle == BorderStyle.FixedSingle)\n            {\n                using Pen borderPen = new Pen(borderColor);\n                g.DrawRectangle(borderPen, borderRect);\n            }\n            else if (_borderStyle == BorderStyle.Fixed3D)\n            {\n                // Draw 3D border\n                using (Pen outerPen = new Pen(SystemColors.ControlDark))\n                {\n                    g.DrawRectangle(outerPen, borderRect);\n                }\n\n                using Pen innerPen = new Pen(SystemColors.ControlLightLight);\n                Rectangle innerRect = new Rectangle(1, 1, Width - 3, Height - 3);\n                g.DrawRectangle(innerPen, innerRect);\n            }\n        }\n        /// <summary>\n        /// Draws the left and right scroll buttons when scrolling is active.\n        /// </summary>\n        private void DrawScrollButtons(Graphics g)\n        {\n            int buttonSize = ScrollButtonWidth;\n            int yCenter = Height / 2;\n\n            // Left scroll button\n            _leftScrollButtonRect = new Rectangle(Padding.Left, 0, buttonSize, Height);\n            bool leftEnabled = _scrollOffset > 0;\n\n            // Right scroll button\n            _rightScrollButtonRect = new Rectangle(Width - Padding.Right - buttonSize, 0, buttonSize, Height);\n            bool rightEnabled = _scrollOffset < Math.Max(0, TotalItemsWidth - (Width - Padding.Horizontal - buttonSize * 2));\n\n            // Draw left button\n            Color leftBgColor = _leftScrollHovered\n                ? Color.FromArgb(leftEnabled ? 100 : 50, HighlightColor)\n                : Color.FromArgb(leftEnabled ? 60 : 30, SystemColors.ControlDark);\n\n            Color leftArrowColor = leftEnabled\n                ? ForeColor\n                : Color.FromArgb(120, SystemColors.ControlDark);\n\n            using (Brush bgBrush = new SolidBrush(leftBgColor))\n            {\n                // Draw a rounded rectangle for the left button background\n                using GraphicsPath path = RoundedRectangle(new Rectangle(\n                    _leftScrollButtonRect.X,\n                    (_leftScrollButtonRect.Height - _leftScrollButtonRect.Width) / 2,\n                    _leftScrollButtonRect.Width,\n                    _leftScrollButtonRect.Width), 3);\n                g.FillPath(bgBrush, path);\n\n                // Add a subtle border\n                using Pen borderPen = new Pen(Color.FromArgb(30, SystemColors.ControlDarkDark));\n                g.DrawPath(borderPen, path);\n            }\n\n            // Draw right button\n            Color rightBgColor = _rightScrollHovered\n                ? Color.FromArgb(rightEnabled ? 100 : 50, HighlightColor)\n                : Color.FromArgb(rightEnabled ? 60 : 30, SystemColors.ControlDark);\n\n            Color rightArrowColor = rightEnabled\n                ? ForeColor\n                : Color.FromArgb(120, SystemColors.ControlDark);\n\n            using (Brush bgBrush = new SolidBrush(rightBgColor))\n            {\n                // Draw a rounded rectangle for the right button background\n                using GraphicsPath path = RoundedRectangle(new Rectangle(\n                    _rightScrollButtonRect.X,\n                    (_rightScrollButtonRect.Height - _rightScrollButtonRect.Width) / 2,\n                    _rightScrollButtonRect.Width,\n                    _rightScrollButtonRect.Width), 3);\n                g.FillPath(bgBrush, path);\n\n                // Add a subtle border\n                using Pen borderPen = new Pen(Color.FromArgb(30, SystemColors.ControlDarkDark));\n                g.DrawPath(borderPen, path);\n            }\n\n            // Draw left arrow with a more distinct appearance\n            using (Pen arrowPen = new Pen(leftArrowColor, 2.0f))\n            {\n                int centerX = _leftScrollButtonRect.X + _leftScrollButtonRect.Width / 2;\n                int centerY = Height / 2;\n                int arrowSize = 4;\n\n                // Draw a left-pointing triangle\n                Point[] arrowPoints = new Point[]\n                {\n                    new Point(centerX + arrowSize, centerY - arrowSize),\n                    new Point(centerX - arrowSize, centerY),\n                    new Point(centerX + arrowSize, centerY + arrowSize)\n                };\n\n                g.DrawLines(arrowPen, arrowPoints);\n            }\n\n            // Draw right arrow with a more distinct appearance\n            using (Pen arrowPen = new Pen(rightArrowColor, 2.0f))\n            {\n                int centerX = _rightScrollButtonRect.X + _rightScrollButtonRect.Width / 2;\n                int centerY = Height / 2;\n                int arrowSize = 4;\n\n                // Draw a right-pointing triangle\n                Point[] arrowPoints = new Point[]\n                {\n                    new Point(centerX - arrowSize, centerY - arrowSize),\n                    new Point(centerX + arrowSize, centerY),\n                    new Point(centerX - arrowSize, centerY + arrowSize)\n                };\n\n                g.DrawLines(arrowPen, arrowPoints);\n            }\n        }\n\n        /// <summary>\n        /// Measures the total width required to display all items.\n        /// </summary>\n        private int MeasureTotalItemsWidth(Graphics g)\n        {\n            int totalWidth = 0;\n\n            for (int i = 0; i < _items.Count; i++)\n            {\n                // Measure item\n                Font itemFont = i == _selectedIndex ? _boldFont : Font;\n                SizeF textSize = g.MeasureString(_items[i].Text, itemFont);\n\n                // Add extra width for dropdown button if needed\n                int dropdownButtonSpace = (_showDropdownButtons) ? DropdownButtonWidth : 0;\n                // Add space for icon if this is the first item and ShowFirstItemIcon is true\n                int iconSpace = 0;\n                if (i == 0 && _showSelectedItemIcon && _items[i].Icon != null)\n                {\n                    iconSpace = IconSize + 4; // Icon width plus a little padding\n                }\n\n                int itemWidth = (int)Math.Ceiling(textSize.Width) + 10 + dropdownButtonSpace + iconSpace; // Add padding\n\n                totalWidth += itemWidth;\n            }\n\n            return totalWidth;\n        }\n\n        /// <summary>\n        /// Creates a rounded rectangle path.\n        /// </summary>\n        private GraphicsPath RoundedRectangle(Rectangle bounds, int radius)\n        {\n            int diameter = radius * 2;\n            Rectangle arc = new Rectangle(bounds.Location, new Size(diameter, diameter));\n            GraphicsPath path = new GraphicsPath();\n\n            // Top left arc\n            path.AddArc(arc, 180, 90);\n\n            // Top right arc\n            arc.X = bounds.Right - diameter;\n            path.AddArc(arc, 270, 90);\n\n            // Bottom right arc\n            arc.Y = bounds.Bottom - diameter;\n            path.AddArc(arc, 0, 90);\n\n            // Bottom left arc\n            arc.X = bounds.Left;\n            path.AddArc(arc, 90, 90);\n\n            path.CloseFigure();\n            return path;\n        }        /// <summary>\n                 /// Raises the MouseMove event.\n                 /// </summary>\n        protected override void OnMouseMove(MouseEventArgs e)\n        {\n            base.OnMouseMove(e);\n\n            // Check if hovering over scroll buttons\n            bool oldLeftHovered = _leftScrollHovered;\n            bool oldRightHovered = _rightScrollHovered;\n\n            _leftScrollHovered = _showScrollButtons && _leftScrollButtonRect.Contains(e.Location);\n            _rightScrollHovered = _showScrollButtons && _rightScrollButtonRect.Contains(e.Location);\n\n            // Only check for item hovering if not hovering over scroll buttons\n            int oldHoveredIndex = _hoveredIndex;\n            _hoveredIndex = -1;\n\n            if (!_leftScrollHovered && !_rightScrollHovered)\n            {\n                for (int i = 0; i < _items.Count; i++)\n                {\n                    if (_items[i].Bounds.Contains(e.Location))\n                    {\n                        _hoveredIndex = i;\n                        break;\n                    }\n                }\n            }\n\n            // Check if we need to repaint\n            if (oldHoveredIndex != _hoveredIndex ||\n                oldLeftHovered != _leftScrollHovered ||\n                oldRightHovered != _rightScrollHovered)\n            {\n                Invalidate();\n            }\n\n            // Update cursor\n            if (_hoveredIndex >= 0)\n            {\n                Cursor = Cursors.Hand;\n            }\n            else if (_leftScrollHovered || _rightScrollHovered)\n            {\n                Cursor = Cursors.Hand;\n            }\n            else\n            {\n                Cursor = Cursors.Default;\n            }\n        }\n\n        /// <summary>\n        /// Raises the MouseDown event.\n        /// </summary>\n        protected override void OnMouseDown(MouseEventArgs e)\n        {\n            base.OnMouseDown(e);\n            if (e.Button == MouseButtons.Left)\n            {\n                _mouseDown = true;\n\n                // Check for scroll button clicks\n                if (_leftScrollHovered)\n                {\n                    ScrollLeft();\n                }\n                else if (_rightScrollHovered)\n                {\n                    ScrollRight();\n                }\n\n                Invalidate();\n            }\n        }        /// <summary>\n                 /// Raises the MouseUp event.\n                 /// </summary>\n        protected override void OnMouseUp(MouseEventArgs e)\n        {\n            base.OnMouseUp(e);\n            if (e.Button == MouseButtons.Left)\n            {\n                _mouseDown = false;\n\n                // Only process clicks when not in text mode\n                if (!_inTextBoxMode)\n                {\n                    // If clicking on scroll buttons, they're handled in MouseDown\n                    if (_hoveredIndex >= 0 && !_leftScrollHovered && !_rightScrollHovered)\n                    {\n                        BreadcrumbItem item = _items[_hoveredIndex];\n\n                        // Check if click was on dropdown button\n                        if (_showDropdownButtons && item.DropdownButtonBounds.Contains(e.Location))\n                        {\n                            // Show the dropdown context menu\n                            ShowDropdownMenu(_hoveredIndex, item.DropdownButtonBounds);\n                        }\n                        else\n                        {\n                            // Normal item click\n                            _selectedIndex = _hoveredIndex;\n                            ItemClicked?.Invoke(this, new BreadcrumbItemClickedEventArgs(item, _hoveredIndex));\n                        }\n                    }\n                    else if (!_leftScrollHovered && !_rightScrollHovered && AllowTextMode)\n                    {\n                        // Click on empty area - enter text mode\n                        EnterTextMode();\n                    }\n                }\n\n                Invalidate();\n            }\n        }\n\n        /// <summary>\n        /// Raises the MouseLeave event.\n        /// </summary>\n        protected override void OnMouseLeave(EventArgs e)\n        {\n            base.OnMouseLeave(e);\n\n            bool needsInvalidate = _hoveredIndex >= 0 || _leftScrollHovered || _rightScrollHovered;\n\n            _hoveredIndex = -1;\n            _leftScrollHovered = false;\n            _rightScrollHovered = false;\n\n            if (needsInvalidate)\n            {\n                Invalidate();\n            }\n\n            Cursor = Cursors.Default;\n        }\n\n        /// <summary>\n        /// Scrolls the items to the left (revealing items on the right).\n        /// </summary>\n        public void ScrollRight()\n        {\n            if (_showScrollButtons)\n            {\n                int visibleWidth = Width - Padding.Horizontal - (ScrollButtonWidth * 2);\n                _scrollOffset += Math.Min(visibleWidth / 2, 50); // Scroll by half the visible area or 50px, whichever is smaller\n\n                // Make sure we don't scroll too far\n                int maxOffset = Math.Max(0, TotalItemsWidth - visibleWidth);\n                if (_scrollOffset > maxOffset)\n                {\n                    _scrollOffset = maxOffset;\n                }\n\n                Invalidate();\n            }\n        }\n\n        /// <summary>\n        /// Scrolls the items to the right (revealing items on the left).\n        /// </summary>\n        public void ScrollLeft()\n        {\n            if (_showScrollButtons)\n            {\n                int visibleWidth = Width - Padding.Horizontal - (ScrollButtonWidth * 2);\n                _scrollOffset -= Math.Min(visibleWidth / 2, 50); // Scroll by half the visible area or 50px, whichever is smaller\n\n                // Make sure we don't scroll too far\n                if (_scrollOffset < 0)\n                {\n                    _scrollOffset = 0;\n                }\n\n                Invalidate();\n            }\n        }\n\n        /// <summary>\n        /// Ensures the specified item is visible in the current view.\n        /// </summary>\n        /// <param name=\"index\">The index of the item to scroll into view.</param>\n        public void EnsureVisible(int index)\n        {\n            if (index < 0 || index >= _items.Count || !_showScrollButtons)\n                return;\n\n            BreadcrumbItem item = _items[index];\n\n            // Calculate visible area\n            int visibleLeft = Padding.Left + ScrollButtonWidth;\n            int visibleWidth = Width - Padding.Horizontal - (ScrollButtonWidth * 2);\n            int visibleRight = visibleLeft + visibleWidth;\n\n            // Calculate item's current position\n            int itemLeft = item.Bounds.Left + _scrollOffset;\n            int itemRight = item.Bounds.Right + _scrollOffset;\n\n            // If item is to the left of visible area, scroll left\n            if (itemLeft < visibleLeft)\n            {\n                _scrollOffset = itemLeft - Padding.Left - ScrollButtonWidth;\n            }\n            // If item is to the right of visible area, scroll right\n            else if (itemRight > visibleRight)\n            {\n                _scrollOffset = itemRight - visibleWidth - Padding.Left - ScrollButtonWidth;\n            }\n\n            // Ensure scroll offset is within valid range\n            if (_scrollOffset < 0)\n            {\n                _scrollOffset = 0;\n            }\n            else\n            {\n                int maxOffset = Math.Max(0, TotalItemsWidth - visibleWidth);\n                if (_scrollOffset > maxOffset)\n                {\n                    _scrollOffset = maxOffset;\n                }\n            }\n\n            Invalidate();\n        }\n\n        /// <summary>\n        /// Gets the full path representation of the breadcrumb items.\n        /// </summary>\n        /// <returns>A string representing the full path.</returns>\n        public string GetFullPath()\n        {\n            if (_items.Count == 0)\n                return string.Empty;\n\n            string path = string.Empty;\n\n            for (int i = 0; i < _items.Count; i++)\n            {\n                path += _items[i].Text;\n\n                if (i < _items.Count - 1)\n                {\n                    path += PathSeparator;\n                }\n            }\n\n            return path;\n        }\n\n        /// <summary>\n        /// Enters text editing mode.\n        /// </summary>\n        public void EnterTextMode()\n        {\n            if (_inTextBoxMode || !AllowTextMode)\n                return;\n\n            _inTextBoxMode = true;\n\n            // Create the text box if it doesn't exist\n            if (_pathTextBox == null)\n            {\n                _pathTextBox = new TextBox();\n                _pathTextBox.BorderStyle = BorderStyle.None;\n                _pathTextBox.Font = this.Font;\n                _pathTextBox.KeyDown += PathTextBox_KeyDown;\n                _pathTextBox.LostFocus += PathTextBox_LostFocus;\n                Controls.Add(_pathTextBox);\n            }\n\n            // Set initial path text\n            _pathTextBox.Text = GetFullPath();\n\n            // Position and size the text box\n            _pathTextBox.Location = new Point(Padding.Left + 3, (Height - _pathTextBox.Height) / 2);\n            _pathTextBox.Width = Width - Padding.Horizontal - 6;\n            _pathTextBox.Visible = true;\n            _pathTextBox.BringToFront();\n            _pathTextBox.Focus();\n            _pathTextBox.SelectAll();\n\n            Invalidate();\n        }\n\n        /// <summary>\n        /// Exits text editing mode.\n        /// </summary>\n        /// <param name=\"applyChanges\">Whether to apply any changes made in the text box.</param>\n        public void ExitTextMode(bool applyChanges)\n        {\n            if (!_inTextBoxMode)\n                return;\n\n            _inTextBoxMode = false;\n\n            if (_pathTextBox != null)\n            {\n                if (applyChanges)\n                {\n                    TryNavigateToPath(_pathTextBox.Text);\n                }\n\n                _pathTextBox.Visible = false;\n            }\n\n            Invalidate();\n        }\n\n        /// <summary>\n        /// Tries to navigate to the specified path.\n        /// </summary>\n        /// <param name=\"path\">The path to navigate to.</param>\n        /// <returns>True if navigation was successful, false otherwise.</returns>\n        public bool TryNavigateToPath(string path)\n        {\n            if (string.IsNullOrEmpty(path))\n                return false;\n\n            // Split the path into segments\n            string[] segments = path.Split(new[] { PathSeparator }, StringSplitOptions.None);\n\n            // Validate segments against current items\n            bool validPath = true;\n            int matchedSegments = 0;\n\n            for (int i = 0; i < segments.Length && i < _items.Count; i++)\n            {\n                if (segments[i] != _items[i].Text)\n                {\n                    validPath = false;\n                    break;\n                }\n\n                matchedSegments++;\n            }\n\n            // If path starts with valid segments but has more segments than current path,\n            // we could potentially extend the path (but we won't here, just consider it valid)\n            if (validPath && matchedSegments == _items.Count && segments.Length > _items.Count)\n            {\n                // Path is valid but has additional segments we don't have navigation for\n                // For this implementation, we'll consider this invalid\n                validPath = false;\n            }\n\n            // If path is valid but shorter than current path, truncate current path\n            if (validPath && matchedSegments < _items.Count)\n            {\n                while (_items.Count > matchedSegments)\n                {\n                    _items.RemoveAt(_items.Count - 1);\n                }\n\n                if (_items.Count > 0)\n                {\n                    _selectedIndex = _items.Count - 1;\n                    ItemClicked?.Invoke(this, new BreadcrumbItemClickedEventArgs(_items[_selectedIndex], _selectedIndex));\n                }\n                else\n                {\n                    _selectedIndex = -1;\n                }\n            }\n\n            return validPath;\n        }\n\n        private void PathTextBox_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Enter)\n            {\n                ExitTextMode(true);\n                e.SuppressKeyPress = true;\n                e.Handled = true;\n            }\n            else if (e.KeyCode == Keys.Escape)\n            {\n                ExitTextMode(false);\n                e.SuppressKeyPress = true;\n                e.Handled = true;\n            }\n        }\n\n        private void PathTextBox_LostFocus(object sender, EventArgs e)\n        {\n            // Exit text mode when focus is lost\n            BeginInvoke(new Action(() => ExitTextMode(false)));\n        }\n\n        /// <summary>\n        /// Shows the dropdown menu for a breadcrumb item.\n        /// </summary>\n        /// <param name=\"itemIndex\">The index of the item to show the dropdown for.</param>\n        /// <param name=\"dropdownButtonBounds\">The bounds of the dropdown button.</param>\n        private void ShowDropdownMenu(int itemIndex, Rectangle dropdownButtonBounds)\n        {\n            if (itemIndex < 0 || itemIndex >= _items.Count)\n                return;\n\n            // Set the current context menu source\n            _contextMenuSourceIndex = itemIndex;\n\n            // Position the context menu\n            Point menuLocation = PointToScreen(new Point(\n                dropdownButtonBounds.Right - dropdownButtonBounds.Width,\n                dropdownButtonBounds.Bottom));\n\n            // Show the context menu\n            _contextMenu.Show(menuLocation);\n        }\n\n        /// <summary>\n        /// Handles the Opening event of the context menu.\n        /// </summary>\n        private void ContextMenu_Opening(object sender, CancelEventArgs e)\n        {\n            // Clear existing items\n            _contextMenu.Items.Clear();\n\n            if (_contextMenuSourceIndex < 0 || _contextMenuSourceIndex >= _items.Count)\n            {\n                e.Cancel = true;\n                return;\n            }\n\n            BreadcrumbItem sourceItem = _items[_contextMenuSourceIndex];\n\n            // Check if the item has any child items\n            if (sourceItem.ChildItems.Count == 0)\n            {\n                // Raise event to request child items\n                ItemChildrenRequested?.Invoke(this, new BreadcrumbItemEventArgs(sourceItem, _contextMenuSourceIndex));\n            }\n\n            // If there are still no child items, cancel the menu\n            if (sourceItem.ChildItems.Count == 0)\n            {\n                e.Cancel = true;\n                return;\n            }\n\n            // Add items to the context menu\n            foreach (BreadcrumbItem childItem in sourceItem.ChildItems)\n            {\n                ToolStripMenuItem menuItem = new ToolStripMenuItem(childItem.Text);\n\n                // Set the tag to the child item for reference\n                menuItem.Tag = childItem;\n\n                // Add an icon if available\n                if (childItem.Icon != null)\n                {\n                    menuItem.Image = childItem.Icon;\n                }\n\n                // Handle click event\n                menuItem.Click += DropdownMenuItem_Click;\n\n                // Add to the menu\n                _contextMenu.Items.Add(menuItem);\n            }\n        }\n\n        /// <summary>\n        /// Handles the Closed event of the context menu.\n        /// </summary>\n        private void ContextMenu_Closed(object sender, ToolStripDropDownClosedEventArgs e)\n        {\n            _contextMenuSourceIndex = -1;\n        }\n\n        /// <summary>\n        /// Handles the Click event of a dropdown menu item.\n        /// </summary>\n        private void DropdownMenuItem_Click(object sender, EventArgs e)\n        {\n            if (sender is ToolStripMenuItem menuItem && menuItem.Tag is BreadcrumbItem selectedChildItem)\n            {\n                // If we're not at the end of the breadcrumb, trim the trail\n                if (_contextMenuSourceIndex < _items.Count - 1)\n                {\n                    while (_items.Count > _contextMenuSourceIndex + 1)\n                    {\n                        _items.RemoveAt(_items.Count - 1);\n                    }\n                }\n\n                // Add the selected child item to the breadcrumb\n                _items.Add(selectedChildItem);\n                _selectedIndex = _items.Count - 1;\n\n                // Notify of navigation\n                ItemClicked?.Invoke(this, new BreadcrumbItemClickedEventArgs(selectedChildItem, _selectedIndex));\n\n                // Redraw\n                Invalidate();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Breadcrumb/BreadcrumbItem.cs",
    "content": "using System.Collections.Generic;\nusing System.Drawing;\n\nnamespace JexusManager.Breadcrumb\n{\n    /// <summary>\n    /// Represents an individual item in a breadcrumb navigation control.\n    /// </summary>\n    public class BreadcrumbItem\n    {\n        /// <summary>\n        /// Gets or sets the display text of the breadcrumb item.\n        /// </summary>\n        public string Text { get; set; }\n\n        /// <summary>\n        /// Gets or sets the tag object associated with this breadcrumb item.\n        /// </summary>\n        public object? Tag { get; set; }\n\n        /// <summary>\n        /// Gets or sets the icon associated with this breadcrumb item.\n        /// </summary>\n        public Image? Icon { get; set; }\n\n        /// <summary>\n        /// Gets the collection of child items for this breadcrumb item.\n        /// </summary>\n        public List<BreadcrumbItem> ChildItems { get; } = new List<BreadcrumbItem>();\n\n        /// <summary>\n        /// Gets or sets the bounds rectangle for this item.\n        /// </summary>\n        internal Rectangle Bounds { get; set; }\n\n        /// <summary>\n        /// Gets or sets the bounds of the dropdown arrow button.\n        /// </summary>\n        internal Rectangle DropdownButtonBounds { get; set; }        /// <summary>\n                                                                     /// Initializes a new instance of the BreadcrumbItem class.\n                                                                     /// </summary>\n                                                                     /// <param name=\"text\">The display text of the breadcrumb item.</param>\n                                                                     /// <param name=\"tag\">The tag object associated with this breadcrumb item.</param>\n                                                                     /// <param name=\"icon\">The icon associated with this breadcrumb item.</param>\n        public BreadcrumbItem(string text, object? tag = null, Image? icon = null)\n        {\n            Text = text;\n            Tag = tag;\n            Icon = icon;\n        }\n\n        /// <summary>\n        /// Returns a string representation of this breadcrumb item.\n        /// </summary>\n        public override string ToString()\n        {\n            return Text;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Breadcrumb/BreadcrumbItemClickedEventArgs.cs",
    "content": "using System;\n\nnamespace JexusManager.Breadcrumb\n{\n    /// <summary>\n    /// Provides data for the BreadcrumbControl.ItemClicked event.\n    /// </summary>\n    public class BreadcrumbItemClickedEventArgs : EventArgs\n    {\n        /// <summary>\n        /// Gets the BreadcrumbItem that was clicked.\n        /// </summary>\n        public BreadcrumbItem Item { get; }\n\n        /// <summary>\n        /// Gets the index of the BreadcrumbItem that was clicked.\n        /// </summary>\n        public int Index { get; }\n\n        /// <summary>\n        /// Initializes a new instance of the BreadcrumbItemClickedEventArgs class.\n        /// </summary>\n        /// <param name=\"item\">The BreadcrumbItem that was clicked.</param>\n        /// <param name=\"index\">The index of the BreadcrumbItem that was clicked.</param>\n        public BreadcrumbItemClickedEventArgs(BreadcrumbItem item, int index)\n        {\n            Item = item;\n            Index = index;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Breadcrumb/BreadcrumbItemEventArgs.cs",
    "content": "using System;\n\nnamespace JexusManager.Breadcrumb\n{\n    /// <summary>\n    /// Provides data for the BreadcrumbControl.ItemChildrenRequested event.\n    /// </summary>\n    public class BreadcrumbItemEventArgs : EventArgs\n    {\n        /// <summary>\n        /// Gets the BreadcrumbItem for which children are requested.\n        /// </summary>\n        public BreadcrumbItem Item { get; }\n\n        /// <summary>\n        /// Gets the index of the BreadcrumbItem in the breadcrumb trail.\n        /// </summary>\n        public int Index { get; }\n\n        /// <summary>\n        /// Initializes a new instance of the BreadcrumbItemEventArgs class.\n        /// </summary>\n        /// <param name=\"item\">The BreadcrumbItem for which children are requested.</param>\n        /// <param name=\"index\">The index of the BreadcrumbItem in the breadcrumb trail.</param>\n        public BreadcrumbItemEventArgs(BreadcrumbItem item, int index)\n        {\n            Item = item;\n            Index = index;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Breadcrumb/JexusManager.Breadcrumb.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net9.0-windows10.0.17763.0</TargetFrameworks>\n    <UseWindowsForms>true</UseWindowsForms>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>..\\JexusManager\\JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Breadcrumb</RootNamespace>\n    <Nullable>enable</Nullable>\n    <LangVersion>latest</LangVersion>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'\">\n    <DefineConstants>$(DefineConstants)TRACE;DESIGN</DefineConstants>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Breadcrumb/ToolStripBreadcrumbItem.cs",
    "content": "using System.Windows.Forms;\nusing System.Drawing;\nusing System.ComponentModel;\n\nnamespace JexusManager.Breadcrumb\n{\n    /// <summary>\n    /// A ToolStripControlHost that wraps a BreadcrumbControl for use in ToolStrip containers.\n    /// </summary>\n    [ToolboxItem(true)]\n    public class ToolStripBreadcrumbItem : ToolStripControlHost\n    {\n        /// <summary>\n        /// Gets the underlying BreadcrumbControl being hosted.\n        /// </summary>\n        public BreadcrumbControl BreadcrumbControl => Control as BreadcrumbControl;        /// <summary>\n                                                                                           /// Initializes a new instance of the ToolStripBreadcrumbItem class.\n                                                                                           /// </summary>\n        public ToolStripBreadcrumbItem() : base(CreateControlInstance())\n        {\n            // Set default appearance\n            AutoSize = false;\n\n            // Set a minimum width to ensure the breadcrumb is visible\n            Width = 200;\n\n            // Adjust layout\n            Padding = new Padding(2);\n            Margin = new Padding(0, 1, 0, 2);\n        }\n        private static Control CreateControlInstance()\n        {\n            return new BreadcrumbControl\n            {\n                Margin = new Padding(0),\n                Padding = new Padding(0),\n                Dock = DockStyle.Fill,\n                Height = 22  // Set an explicit height to ensure visibility\n            };\n        }\n\n        /// <summary>\n        /// Gets or sets the selected item index in the breadcrumb control.\n        /// </summary>\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public int SelectedIndex\n        {\n            get => BreadcrumbControl.SelectedIndex;\n            set => BreadcrumbControl.SelectedIndex = value;\n        }\n\n        /// <summary>\n        /// Gets the collection of breadcrumb items.\n        /// </summary>\n        [Browsable(false)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public System.Collections.Generic.List<BreadcrumbItem> Items => BreadcrumbControl.Items;\n\n        /// <summary>\n        /// Gets or sets the background color for highlighted items.\n        /// </summary>\n        [Category(\"Appearance\")]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]\n        public Color HighlightColor\n        {\n            get => BreadcrumbControl.HighlightColor;\n            set => BreadcrumbControl.HighlightColor = value;\n        }        /// <summary>\n                 /// Subscribes to events from the hosted control.\n                 /// </summary>\n        protected override void OnSubscribeControlEvents(Control control)\n        {\n            base.OnSubscribeControlEvents(control);\n\n            // Subscribe to events from the BreadcrumbControl\n            if (control is BreadcrumbControl breadcrumbControl)\n            {\n                breadcrumbControl.ItemClicked += BreadcrumbControl_ItemClicked;\n            }\n        }\n\n        /// <summary>\n        /// Unsubscribes from events from the hosted control.\n        /// </summary>\n        protected override void OnUnsubscribeControlEvents(Control control)\n        {\n            base.OnUnsubscribeControlEvents(control);\n\n            // Unsubscribe from events from the BreadcrumbControl\n            if (control is BreadcrumbControl breadcrumbControl)\n            {\n                breadcrumbControl.ItemClicked -= BreadcrumbControl_ItemClicked;\n            }\n        }\n\n        // Forward events from the BreadcrumbControl        // Forward events from the BreadcrumbControl\n        private void BreadcrumbControl_ItemClicked(object sender, BreadcrumbItemClickedEventArgs e)\n        {\n            ItemClicked?.Invoke(this, e);\n        }\n\n        /// <summary>\n        /// Occurs when a breadcrumb item is clicked.\n        /// </summary>\n        public event System.EventHandler<BreadcrumbItemClickedEventArgs> ItemClicked;\n\n        /// <summary>\n        /// Clears all items from the breadcrumb control.\n        /// </summary>\n        public void Clear()\n        {\n            BreadcrumbControl.Clear();\n        }\n\n        /// <summary>\n        /// Adds a new item to the breadcrumb control.\n        /// </summary>\n        /// <param name=\"text\">The text of the item.</param>\n        /// <param name=\"tag\">The tag object associated with the item.</param>\n        /// <returns>The newly added BreadcrumbItem.</returns>\n        public BreadcrumbItem AddItem(string text, object tag = null)\n        {\n            return BreadcrumbControl.AddItem(text, tag);\n        }\n\n        /// <summary>\n        /// Removes the last item from the breadcrumb control.\n        /// </summary>\n        public void RemoveLastItem()\n        {\n            BreadcrumbControl.RemoveLastItem();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Access/AccessFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Access\n{\n    using System;\n    using System.Diagnostics;\n    using System.Resources;\n\n    using Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal class AccessFeature\n    {\n        public AccessFeature(Module module, ServerManager server, Application application)\n        {\n            Module = module;\n            Server = server;\n            Application = application;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/security/access\", null, false);\n            SslFlags = (long)section[\"sslFlags\"];\n\n            OnAccessSettingsSaved();\n        }\n\n        public string Directory { get; set; }\n\n        protected void OnAccessSettingsSaved()\n        {\n            AccessSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210534\");\n            return false;\n        }\n\n        public AccessSettingsSavedEventHandler AccessSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled => true;\n\n        public virtual Version MinimumFrameworkVersion => FxVersionNotRequired;\n\n        public Module Module { get; }\n        public ServerManager Server { get; set; }\n        public Application Application { get; set; }\n\n        public string Name => \"SSL Settings\";\n\n\n        public long SslFlags { get; set; }\n\n        public void CancelChanges()\n        {\n            Load();\n        }\n\n        public bool ApplyChanges()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/security/access\", null, false);\n            section[\"sslFlags\"] = SslFlags;\n            service.ServerManager.CommitChanges();\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Access/AccessModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Access\n{\n    using System;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class AccessModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)this.GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(AccessPage), \"SSL Settings\",\n                \"Specify requirements for SSL and client certificates.\",\n                Resources.access_36, Resources.access_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Access/AccessModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Access\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class AccessModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(this.Name, typeof(AccessModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return scope == ManagementScope.Site || scope == ManagementScope.Application;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Access/AccessPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Access\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AccessPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.rbRequire = new System.Windows.Forms.RadioButton();\n            this.rbAccept = new System.Windows.Forms.RadioButton();\n            this.rbIgnore = new System.Windows.Forms.RadioButton();\n            this.label4 = new System.Windows.Forms.Label();\n            this.cbSSL = new System.Windows.Forms.CheckBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 5;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.rbRequire);\n            this.panel2.Controls.Add(this.rbAccept);\n            this.panel2.Controls.Add(this.rbIgnore);\n            this.panel2.Controls.Add(this.label4);\n            this.panel2.Controls.Add(this.cbSSL);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 11;\n            // \n            // rbRequire\n            // \n            this.rbRequire.AutoSize = true;\n            this.rbRequire.Enabled = false;\n            this.rbRequire.Location = new System.Drawing.Point(29, 130);\n            this.rbRequire.Name = \"rbRequire\";\n            this.rbRequire.Size = new System.Drawing.Size(62, 17);\n            this.rbRequire.TabIndex = 8;\n            this.rbRequire.TabStop = true;\n            this.rbRequire.Text = \"Require\";\n            this.rbRequire.UseVisualStyleBackColor = true;\n            this.rbRequire.CheckedChanged += new System.EventHandler(this.CbSslCheckedChanged);\n            // \n            // rbAccept\n            // \n            this.rbAccept.AutoSize = true;\n            this.rbAccept.Enabled = false;\n            this.rbAccept.Location = new System.Drawing.Point(29, 107);\n            this.rbAccept.Name = \"rbAccept\";\n            this.rbAccept.Size = new System.Drawing.Size(59, 17);\n            this.rbAccept.TabIndex = 7;\n            this.rbAccept.TabStop = true;\n            this.rbAccept.Text = \"Accept\";\n            this.rbAccept.UseVisualStyleBackColor = true;\n            this.rbAccept.CheckedChanged += new System.EventHandler(this.CbSslCheckedChanged);\n            // \n            // rbIgnore\n            // \n            this.rbIgnore.AutoSize = true;\n            this.rbIgnore.Enabled = false;\n            this.rbIgnore.Location = new System.Drawing.Point(29, 84);\n            this.rbIgnore.Name = \"rbIgnore\";\n            this.rbIgnore.Size = new System.Drawing.Size(55, 17);\n            this.rbIgnore.TabIndex = 6;\n            this.rbIgnore.TabStop = true;\n            this.rbIgnore.Text = \"Ignore\";\n            this.rbIgnore.UseVisualStyleBackColor = true;\n            this.rbIgnore.CheckedChanged += new System.EventHandler(this.CbSslCheckedChanged);\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(13, 56);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(90, 13);\n            this.label4.TabIndex = 5;\n            this.label4.Text = \"Client certificates:\";\n            // \n            // cbSSL\n            // \n            this.cbSSL.AutoSize = true;\n            this.cbSSL.Enabled = false;\n            this.cbSSL.Location = new System.Drawing.Point(16, 21);\n            this.cbSSL.Name = \"cbSSL\";\n            this.cbSSL.Size = new System.Drawing.Size(86, 17);\n            this.cbSSL.TabIndex = 4;\n            this.cbSSL.Text = \"Require SSL\";\n            this.cbSSL.UseVisualStyleBackColor = true;\n            this.cbSSL.CheckedChanged += new System.EventHandler(this.CbSslCheckedChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(407, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"This page lets you modify the SSL settings for the content of a website or applic\" +\n    \"ation.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(136, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"SSL Settings\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // AccessPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"AccessPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private CheckBox cbSSL;\n        private ContextMenuStrip cmsActionPanel;\n        private RadioButton rbRequire;\n        private RadioButton rbAccept;\n        private RadioButton rbIgnore;\n        private Label label4;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Access/AccessPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Access\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Binding = Microsoft.Web.Administration.Binding;\n\n    internal partial class AccessPage : ModuleDialogPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly AccessPage _owner;\n\n            public PageTaskList(AccessPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private AccessFeature _feature;\n        private bool _hasChanges;\n        private bool _initialized;\n        private TaskList _taskList;\n\n        public AccessPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            var service = (IConfigurationService)this.GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new AccessFeature(this.Module, null, null);\n            _feature.AccessSettingsUpdated = this.Refresh;\n            _feature.Load();\n            base.Initialize(navigationData);\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ApplyChanges()\n        {\n            long result = 0;\n            if (cbSSL.Checked)\n            {\n                result |= 8;\n            }\n\n            if (rbAccept.Checked)\n            {\n                result |= 32;\n            }\n\n            if (rbRequire.Checked)\n            {\n                result |= 64;\n            }\n\n            _feature.SslFlags = result;\n            if (!_feature.ApplyChanges())\n            {\n                return false;\n            }\n\n            this.ClearChanges();\n            return true;\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            _feature.CancelChanges();\n            this.ClearChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get { return _hasChanges; }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get { return true; }\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            this.Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            this.Refresh();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        protected override void OnRefresh()\n        {\n            if (!_hasChanges)\n            {\n                cbSSL.Checked = (_feature.SslFlags & 8) == 8;\n                rbAccept.Checked = (_feature.SslFlags & 32) == 32;\n                rbRequire.Checked = (_feature.SslFlags & 64) == 64;\n                rbIgnore.Checked = !rbAccept.Checked && !rbRequire.Checked;\n\n                var service = (IConfigurationService)this.GetService(typeof(IConfigurationService));\n                if (service.Scope == ManagementScope.Site)\n                {\n                    var result = false;\n                    foreach (Binding binding in service.Site.Bindings)\n                    {\n                        if (binding.Protocol == \"https\")\n                        {\n                            result = true;\n                            break;\n                        }\n                    }\n\n                    cbSSL.Enabled = rbAccept.Enabled = rbIgnore.Enabled = rbRequire.Enabled = result;\n                }\n                else if (service.Scope == ManagementScope.Application)\n                {\n                    var result = false;\n                    foreach (Binding binding in service.Application.GetSite().Bindings)\n                    {\n                        if (binding.Protocol == \"https\")\n                        {\n                            result = true;\n                            break;\n                        }\n                    }\n\n                    cbSSL.Enabled = rbAccept.Enabled = rbIgnore.Enabled = rbRequire.Enabled = result;\n                }\n\n                _initialized = true;\n            }\n\n            this.Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n\n        private void CbSslCheckedChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Access/AccessPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Access/AccessSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Access\n{\n    public delegate void AccessSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Access/JexusManager.Features.Access.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Access</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.VisualBasic\" Version=\"10.4.0-preview.18571.3\" />\n    <PackageReference Include=\"Portable.BouncyCastle\" Version=\"1.9.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Access/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"b756b3a0-cfc8-4e71-a95a-0e9dc2a8d0c9\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "JexusManager.Features.Access/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Access.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Access.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap access_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"access_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Access/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"access_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\access_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Access/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Asp/AspFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Asp\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Resources;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal class AspFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly AspFeature _owner;\n\n            public FeatureTaskList(AspFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[0];\n            }\n        }\n\n        public AspFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        private TaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/asp\", null, false);\n            PropertyGridObject = new AspItem(section);\n            OnAspSettingsSaved();\n        }\n\n        public AspItem PropertyGridObject { get; set; }\n\n        protected void OnAspSettingsSaved()\n        {\n            AspSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210460\");\n            return false;\n        }\n\n        public AspSettingsSavedEventHandler AspSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public ServerManager Server { get; set; }\n        public Application Application { get; set; }\n\n        public string Name\n        {\n            get { return \"Asp\"; }\n        }\n\n        public bool IsEnabled { get; set; }\n\n        public void CancelChanges()\n        {\n            Load();\n        }\n\n        public bool ApplyChanges()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            PropertyGridObject.Apply();\n            service.ServerManager.CommitChanges();\n            return true;\n        }\n\n        public bool LongDateEnabled { get; set; }\n\n        public bool ExtensionEnabled { get; set; }\n\n        public bool SizeEnabled { get; set; }\n\n        public bool TimeEnabled { get; set; }\n\n        public bool DateEnabled { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Asp/AspItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Asp\n{\n    using System.ComponentModel;\n\n    using Microsoft.Web.Administration;\n    using System;\n\n    internal class AspItem\n    {\n        [Browsable(false)]\n        public ConfigurationElement Element { get; set; }\n\n        public AspItem(ConfigurationElement element)\n        {\n            Element = element;\n            CodePage = (uint)element[\"codePage\"];\n            BufferingOn = (bool)element[\"bufferingOn\"];\n            EnableChunkedEncoding = (bool)element[\"enableChunkedEncoding\"];\n            EnableAspHtmlFallback = (bool)element[\"enableAspHtmlFallback\"];\n            EnableParentPaths = (bool)element[\"enableParentPaths\"];\n            Lcid = (uint)element[\"lcid\"];\n            EnableApplicationRestart = (bool)element[\"enableApplicationRestart\"];\n            ScriptLanguage = (string)element[\"scriptLanguage\"];\n\n            SessionProperties = new SessionProperties();\n            var session = element.ChildElements[\"session\"];\n            SessionProperties.AllowSessionState = (bool)session[\"allowSessionState\"];\n            SessionProperties.KeepSessionIdSecure = (bool)session[\"keepSessionIdSecure\"];\n            SessionProperties.Max = (uint)session[\"max\"];\n            SessionProperties.Timeout = (TimeSpan)session[\"timeout\"];\n\n            ComPlusProperties = new ComPlusProperties();\n            var comPlus = element.ChildElements[\"comPlus\"];\n            var flags = (long)comPlus[\"appServiceFlags\"];\n            ComPlusProperties.EnableSxS = (flags & 2L) == 2L;\n            ComPlusProperties.EnableTracker = (flags & 1L) == 1L;\n            ComPlusProperties.UsePartition = (flags & 4L) == 4L;\n            ComPlusProperties.SxsName = (string)comPlus[\"sxsName\"];\n            ComPlusProperties.PartitionId = (string)comPlus[\"partitionId\"];\n            ComPlusProperties.TrackThreadingModel = (bool)comPlus[\"trackThreadingModel\"];\n            ComPlusProperties.ExecuteInMta = (bool)comPlus[\"executeInMta\"];\n\n            CachingProperties = new CachingProperties();\n            var cache = element.ChildElements[\"cache\"];\n            CachingProperties.DiskTemplateCacheDirectory = (string)cache[\"diskTemplateCacheDirectory\"];\n            CachingProperties.EnableTypelibCache = (bool)cache[\"enableTypelibCache\"];\n            CachingProperties.MaxDiskTemplateCacheFiles = (uint)cache[\"maxDiskTemplateCacheFiles\"];\n            CachingProperties.ScriptFileCacheSize = (uint)cache[\"scriptFileCacheSize\"];\n            CachingProperties.ScriptEngineCacheMax = (uint)cache[\"scriptEngineCacheMax\"];\n\n            DebuggingProperties = new DebuggingProperties();\n            DebuggingProperties.CalcLineNumber = (bool)element[\"calcLineNumber\"];\n            DebuggingProperties.ExceptionCatchEnable = (bool)element[\"exceptionCatchEnable\"];\n            DebuggingProperties.AppAllowClientDebug = (bool)element[\"appAllowClientDebug\"];\n            DebuggingProperties.LogErrorRequests = (bool)element[\"logErrorRequests\"];\n            DebuggingProperties.AppAllowDebugging = (bool)element[\"appAllowDebugging\"];\n            DebuggingProperties.ErrorsToNTLog = (bool)element[\"errorsToNTLog\"];\n            DebuggingProperties.RunOnEndAnonymously = (bool)element[\"runOnEndAnonymously\"];\n            DebuggingProperties.ScriptErrorMessage = (string)element[\"scriptErrorMessage\"];\n            DebuggingProperties.ScriptErrorSentToBrowser = (bool)element[\"scriptErrorSentToBrowser\"];\n\n            LimitsProperties = new LimitsProperties();\n            var limits = element.ChildElements[\"limits\"];\n            LimitsProperties.QueueConnectionTestTime = (TimeSpan)limits[\"queueConnectionTestTime\"];\n            LimitsProperties.MaxRequestEntityAllowed = (uint)limits[\"maxRequestEntityAllowed\"];\n            LimitsProperties.RequestQueueMax = (uint)limits[\"requestQueueMax\"];\n            LimitsProperties.QueueTimeout = (TimeSpan)limits[\"queueTimeout\"];\n            LimitsProperties.BufferingLimit = (uint)limits[\"bufferingLimit\"];\n            LimitsProperties.ScriptTimeout = (TimeSpan)limits[\"scriptTimeout\"];\n            LimitsProperties.ProcessorThreadMax = (uint)limits[\"processorThreadMax\"];\n        }\n\n        public void Apply()\n        {\n            Element[\"codePage\"] = CodePage;\n            Element[\"bufferingOn\"] = BufferingOn;\n            Element[\"enableChunkedEncoding\"] = EnableChunkedEncoding;\n            Element[\"enableAspHtmlFallback\"] = EnableAspHtmlFallback;\n            Element[\"enableParentPaths\"] = EnableParentPaths;\n            Element[\"lcid\"] = Lcid;\n            Element[\"enableApplicationRestart\"] = EnableApplicationRestart;\n            Element[\"scriptLanguage\"] = ScriptLanguage;\n\n            var session = Element.ChildElements[\"session\"];\n            session[\"allowSessionState\"] = SessionProperties.AllowSessionState;\n            session[\"keepSessionIdSecure\"] = SessionProperties.KeepSessionIdSecure;\n            session[\"max\"] = SessionProperties.Max;\n            session[\"timeout\"] = SessionProperties.Timeout;\n\n            var comPlus = Element.ChildElements[\"comPlus\"];\n            var flags = 0L;\n            if (ComPlusProperties.EnableSxS)\n            {\n                flags &= 2L;\n            }\n\n            if (ComPlusProperties.EnableTracker)\n            {\n                flags &= 1L;\n            }\n\n            if (ComPlusProperties.UsePartition)\n            {\n                flags &= 4L;\n            }\n\n            comPlus[\"appServiceFlags\"] = flags;\n\n            var attribute = comPlus.GetAttribute(\"sxsName\");\n            if (string.IsNullOrWhiteSpace(ComPlusProperties.SxsName))\n            {\n                attribute.Delete();\n            }\n            else\n            {\n                attribute.Value = ComPlusProperties.SxsName;\n            }\n\n            comPlus[\"partitionId\"] = ComPlusProperties.PartitionId;\n            comPlus[\"trackThreadingModel\"] = ComPlusProperties.TrackThreadingModel;\n            comPlus[\"executeInMta\"] = ComPlusProperties.ExecuteInMta;\n\n            var cache = Element.ChildElements[\"cache\"];\n            cache[\"diskTemplateCacheDirectory\"] = CachingProperties.DiskTemplateCacheDirectory;\n            cache[\"enableTypelibCache\"] = CachingProperties.EnableTypelibCache;\n            cache[\"maxDiskTemplateCacheFiles\"] = CachingProperties.MaxDiskTemplateCacheFiles;\n            cache[\"scriptFileCacheSize\"] = CachingProperties.ScriptFileCacheSize;\n            cache[\"scriptEngineCacheMax\"] = CachingProperties.ScriptEngineCacheMax;\n\n            Element[\"calcLineNumber\"] = DebuggingProperties.CalcLineNumber;\n            Element[\"exceptionCatchEnable\"] = DebuggingProperties.ExceptionCatchEnable;\n            Element[\"appAllowClientDebug\"] = DebuggingProperties.AppAllowClientDebug;\n            Element[\"logErrorRequests\"] = DebuggingProperties.LogErrorRequests;\n            Element[\"appAllowDebugging\"] = DebuggingProperties.AppAllowDebugging;\n            Element[\"errorsToNTLog\"] = DebuggingProperties.ErrorsToNTLog;\n            Element[\"runOnEndAnonymously\"] = DebuggingProperties.RunOnEndAnonymously;\n            Element[\"scriptErrorMessage\"] = DebuggingProperties.ScriptErrorMessage;\n            Element[\"scriptErrorSentToBrowser\"] = DebuggingProperties.ScriptErrorSentToBrowser;\n\n            var limits = Element.ChildElements[\"limits\"];\n            limits[\"queueConnectionTestTime\"] = LimitsProperties.QueueConnectionTestTime;\n            limits[\"maxRequestEntityAllowed\"] = LimitsProperties.MaxRequestEntityAllowed;\n            limits[\"requestQueueMax\"] = LimitsProperties.RequestQueueMax;\n            limits[\"queueTimeout\"] = LimitsProperties.QueueTimeout;\n            limits[\"bufferingLimit\"] = LimitsProperties.BufferingLimit;\n            limits[\"scriptTimeout\"] = LimitsProperties.ScriptTimeout;\n            limits[\"processorThreadMax\"] = LimitsProperties.ProcessorThreadMax;\n        }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"Specifies the default character set for an application. For example, code page 1252 supports a Latin character set used in American English and many European alphabets.\")]\n        [DisplayName(\"Code Page\")]\n        [DefaultValue(0)]\n        public uint CodePage { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"Specifies whether output from an ASP application will be buffered.\")]\n        [DisplayName(\"Enable Buffering\")]\n        [DefaultValue(true)]\n        public bool BufferingOn { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"Specifies whether HTTP 1.1 chunked transfer encoding is enabled for the World Wide Web Publishing Service (WWW service).\")]\n        [DisplayName(\"Enable Chunked Encoding\")]\n        [DefaultValue(true)]\n        public bool EnableChunkedEncoding { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"Controls the behavior of ASP when a new request is to be rejected due to a full request queue. A true value for this property will cause an .htm file with a similar name as the requested .asp file, if it exists, to be sent instead of the .asp file. The naming convention for the .htm file is the name of the .asp file with _asp appended. For example, if the .asp file is hello.asp, then the .htm file should be hello_asp.htm\")]\n        [DisplayName(\"Enable HTML Fallback\")]\n        [DefaultValue(true)]\n        public bool EnableAspHtmlFallback { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"Specifies whether an ASP page allows paths relative to the current directory (using the ..\\\\ notation) or above the current directory.\")]\n        [DisplayName(\"Enable Parent Paths\")]\n        [DefaultValue(false)]\n        public bool EnableParentPaths { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"Properties related to ASP limits.\")]\n        [DisplayName(\"Limits Properties\")]\n        public LimitsProperties LimitsProperties { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"This is the default locale identifier (LCID) for an application. LCIDs define how dates, times, and currencies are formatted.\")]\n        [DisplayName(\"Locale ID\")]\n        [DefaultValue(0)]\n        public uint Lcid { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"Specifies whether an ASP application is automatically restarted.\")]\n        [DisplayName(\"Restart On Config Change\")]\n        [DefaultValue(true)]\n        public bool EnableApplicationRestart { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Compilation\")]\n        [Description(\"Properties related to debug settings.\")]\n        [DisplayName(\"Debugging Properties\")]\n        public DebuggingProperties DebuggingProperties { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Compilation\")]\n        [Description(\"Specifies the default script language for all ASP applications running on the Web server.\")]\n        [DisplayName(\"Script Language\")]\n        [DefaultValue(\"VBScript\")]\n        public string ScriptLanguage { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Services\")]\n        [Description(\"Properties related to ASP cache.\")]\n        [DisplayName(\"Caching Properties\")]\n        public CachingProperties CachingProperties { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Services\")]\n        [Description(\"Properties related to ASP COM Plus.\")]\n        [DisplayName(\"COM Plus Properties\")]\n        public ComPlusProperties ComPlusProperties { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Services\")]\n        [Description(\"Properties related to ASP session.\")]\n        [DisplayName(\"Session Properties\")]\n        public SessionProperties SessionProperties { get; set; }\n    }\n\n    [TypeConverter(typeof(ExpandableObjectConverter))]\n    public class SessionProperties\n    {\n        [Browsable(true)]\n        [Description(\"Enables session state persistence for the ASP application.\")]\n        [DisplayName(\"Enable Session State\")]\n        [DefaultValue(true)]\n        public bool AllowSessionState { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the maximum number of concurrent sessions that IIS allows.\")]\n        [DisplayName(\"Maximum Sessions\")]\n        [DefaultValue(4294967295)]\n        public uint Max { get; set; }\n\n        [Browsable(true)]\n        [Description(\"When enabled, ensures that a SessionID is sent as a secure cookie if assigned over a secure channel.\")]\n        [DisplayName(\"New ID On Secure Connection\")]\n        [DefaultValue(true)]\n        public bool KeepSessionIdSecure { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the default amount of time that a session object is maintained after the last request associated with the object is made.\")]\n        [DisplayName(\"Time-out\")]\n        [DefaultValue(typeof(TimeSpan), \"00:20:00\")]\n        public TimeSpan Timeout { get; set; }\n\n        public override string ToString()\n        {\n            return string.Empty;\n        }\n    }\n\n    [TypeConverter(typeof(ExpandableObjectConverter))]\n    public class ComPlusProperties\n    {\n        [Browsable(true)]\n        [Description(\"A value of true enables COM+ side-by-side assemblies, which allow ASP applications to specify which version of a system DLL or classic COM component to use, such as MDAC, MFS, MSVCRT, MSXML, and so on.\")]\n        [DisplayName(\"Enable Side by Side Component\")]\n        [DefaultValue(false)]\n        public bool EnableSxS { get; set; }\n\n        [Browsable(true)]\n        [Description(\"A value of true enables COM+ tracker, which allows administrators or developers to debug ASP applications.\")]\n        [DisplayName(\"Enable Tracker\")]\n        [DefaultValue(false)]\n        public bool EnableTracker { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies whether ASP should run in a multithreaded environment.\")]\n        [DisplayName(\"Execute In MTA\")]\n        [DefaultValue(false)]\n        public bool ExecuteInMta { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies whether IIS checks the threading model of any components that your application creates.\")]\n        [DisplayName(\"Honor Component Threading Model\")]\n        [DefaultValue(false)]\n        public bool TrackThreadingModel { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Set this property to the Globally Unique Identifier (GUID) of the COM+ partition. Also, set the Use Partition flag to true.\")]\n        [DisplayName(\"Partition ID\")]\n        [DefaultValue(\"00000000-0000-0000-0000-000000000000\")]\n        public string PartitionId { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Set this property to the name of the COM+ application. Also, set the enable side-by-side flag to true.\")]\n        [DisplayName(\"Side By Side Component\")]\n        [DefaultValue(\"\")]\n        public string SxsName { get; set; }\n\n        [Browsable(true)]\n        [Description(\"A value of true enables COM+ partitioning, which can be used to isolate applications into their own COM+ partitions. COM+ partitions can hold different versions of your own custom COM components. If you set this flag, also set the Partition ID property.\")]\n        [DisplayName(\"Use Partition\")]\n        [DefaultValue(false)]\n        public bool UsePartition { get; set; }\n\n        public override string ToString()\n        {\n            return string.Empty;\n        }\n    }\n\n    [TypeConverter(typeof(ExpandableObjectConverter))]\n    public class CachingProperties\n    {\n        [Browsable(true)]\n        [Description(\"Contains the name of the directory that ASP uses to store compiled ASP templates to disk after overflow of the in-memory cache.\")]\n        [DisplayName(\"Cache Directory Path\")]\n        [DefaultValue(\"%SystemDrive%\\\\inetpub\\\\temp\\\\ASP Compiled Templates\")]\n        public string DiskTemplateCacheDirectory { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies whether type libraries are cached on the server.\")]\n        [DisplayName(\"Enable Type Library Caching\")]\n        [DefaultValue(true)]\n        public bool EnableTypelibCache { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the maximum number of compiled ASP templates that can be stored.\")]\n        [DisplayName(\"Maximum Disk Cached Files\")]\n        [DefaultValue(2000)]\n        public uint MaxDiskTemplateCacheFiles { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the number of precompiled script files to cache. If set to 0, no script files are cached. If set to 4294967295, all script files requested are cached. This property is used to tune performance, depending on the amount of available memory and the amount of script traffic.\")]\n        [DisplayName(\"Maximum Memory Cached Files\")]\n        [DefaultValue(500)]\n        public uint ScriptFileCacheSize { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the maximum number of scripting engines that ASP pages will keep cached in memory.\")]\n        [DisplayName(\"Maximum Script Engines Cached\")]\n        [DefaultValue(250)]\n        public uint ScriptEngineCacheMax { get; set; }\n\n        public override string ToString()\n        {\n            return string.Empty;\n        }\n    }\n\n    [TypeConverter(typeof(ExpandableObjectConverter))]\n    public class DebuggingProperties\n    {\n        [Browsable(true)]\n        [Description(\"Specifies whether ASP calculates and stores the line number of each executed line of code to provide the number in an error report.\")]\n        [DisplayName(\"Calculate Line Numbers\")]\n        [DefaultValue(true)]\n        public bool CalcLineNumber { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies whether ASP pages trap exceptions thrown by components. If set to false (or, disabled), the Microsoft Script Debugger tool does not catch exceptions sent by the component that you are debugging.\")]\n        [DisplayName(\"Catch COM Component Exceptions\")]\n        [DefaultValue(true)]\n        public bool ExceptionCatchEnable { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies whether ASP client-side debugging is enabled.\")]\n        [DisplayName(\"Enable Client-side Debugging\")]\n        [DefaultValue(false)]\n        public bool AppAllowClientDebug { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Controls whether the Web server writes ASP errors to the application section of the Windows event log. ASP errors are written to the client browser and to the IIS log files by default.\")]\n        [DisplayName(\"Enable Log Error Requests\")]\n        [DefaultValue(true)]\n        public bool LogErrorRequests { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies whether ASP debugging is enabled on the server.\")]\n        [DisplayName(\"Enable Server-side Debugging\")]\n        [DefaultValue(false)]\n        public bool AppAllowDebugging { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies which ASP errors are written to the Windows event log. ASP errors are written to the client browser and to the IIS log files by default.\")]\n        [DisplayName(\"Log Errors to NT Log\")]\n        [DefaultValue(false)]\n        public bool ErrorsToNTLog { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies whether the SessionOnEnd and ApplicationOnEnd global ASP functions should be run as the anonymous user.\")]\n        [DisplayName(\"Run On End Functions Anonymously\")]\n        [DefaultValue(true)]\n        public bool RunOnEndAnonymously { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the error message to send to the browser if specific debugging errors are not sent to the client.\")]\n        [DisplayName(\"Script Error Message\")]\n        [DefaultValue(\"An error occurred on the server when processing the URL. Please contact the system administrator. &lt;p/> If you are the system administrator please click &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkID=82731&quot;>here&lt;/a> to find out more about this error.\")]\n        public string ScriptErrorMessage { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies whether the Web server writes debugging specifics (file name, error, line number, description) to the client browser, in addition to logging them to the Windows Event Log.\")]\n        [DisplayName(\"Send Errors To Browser\")]\n        [DefaultValue(false)]\n        public bool ScriptErrorSentToBrowser { get; set; }\n\n        public override string ToString()\n        {\n            return string.Empty;\n        }\n    }\n\n    [TypeConverter(typeof(ExpandableObjectConverter))]\n    public class LimitsProperties\n    {\n        [Browsable(true)]\n        [Description(\"When a request is queued longer than the time specified in this property, ASP checks whether the client is still connected before executing the request. If the client is no longer connected, the request is not processed and it is deleted from the queue.\")]\n        [DisplayName(\"Client Connection Test Interval\")]\n        [DefaultValue(typeof(TimeSpan), \"00:00:03\")]\n        public TimeSpan QueueConnectionTestTime { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the maximum number of bytes allowed in the entity body of an ASP request.\")]\n        [DisplayName(\"Maximum Requesting Entity Body Limit\")]\n        [DefaultValue(200000)]\n        public uint MaxRequestEntityAllowed { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the maximum number of concurrent ASP requests that are permitted into the queue.\")]\n        [DisplayName(\"Queue Length\")]\n        [DefaultValue(3000)]\n        public uint RequestQueueMax { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the amount of time that an ASP script request is allowed to wait in the queue.\")]\n        [DisplayName(\"Request Queue Time-out\")]\n        [DefaultValue(typeof(TimeSpan), \"00:00:00\")]\n        public TimeSpan QueueTimeout { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Sets the maximum size of the ASP buffer. When response buffering is enabled, this property controls the maximum number of bytes that an ASP page can write to the response buffer before a flush occurs.\")]\n        [DisplayName(\"Response Buffering Limit\")]\n        [DefaultValue(4194304)]\n        public uint BufferingLimit { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the default length of time that ASP pages allow a script to run before terminating the script and writing an event to the Windows Event Log.\")]\n        [DisplayName(\"Script Time-out\")]\n        [DefaultValue(typeof(TimeSpan), \"00:01:30\")]\n        public TimeSpan ScriptTimeout { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies the maximum number of worker threads per processor that IIS may create.\")]\n        [DisplayName(\"Threads Per Processor Limit\")]\n        [DefaultValue(25)]\n        public uint ProcessorThreadMax { get; set; }\n\n        public override string ToString()\n        {\n            return string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Asp/AspModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Asp\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class AspModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)this.GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(\n                this,\n                typeof(AspPage),\n                \"ASP\",\n                \"Configure properties for ASP applications\",\n                Resources.asp_36,\n                Resources.asp_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Asp/AspModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Asp\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class AspModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(this.Name, typeof(AspModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Asp/AspPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Asp\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AspPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.pgASP = new System.Windows.Forms.PropertyGrid();\n            this.toolStrip1 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();\n            this.toolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 5;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.pgASP);\n            this.panel2.Controls.Add(this.toolStrip1);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 11;\n            // \n            // pgASP\n            // \n            this.pgASP.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;\n            this.pgASP.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.pgASP.Location = new System.Drawing.Point(0, 25);\n            this.pgASP.Name = \"pgASP\";\n            this.pgASP.Size = new System.Drawing.Size(560, 515);\n            this.pgASP.TabIndex = 1;\n            this.pgASP.ToolbarVisible = false;\n            this.pgASP.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.PgAspPropertyValueChanged);\n            // \n            // toolStrip1\n            // \n            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel1,\n            this.toolStripComboBox1});\n            this.toolStrip1.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip1.Name = \"toolStrip1\";\n            this.toolStrip1.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip1.TabIndex = 0;\n            this.toolStrip1.Text = \"toolStrip1\";\n            // \n            // toolStripLabel1\n            // \n            this.toolStripLabel1.Name = \"toolStripLabel1\";\n            this.toolStripLabel1.Size = new System.Drawing.Size(48, 22);\n            this.toolStripLabel1.Text = \"Display:\";\n            // \n            // toolStripComboBox1\n            // \n            this.toolStripComboBox1.Items.AddRange(new object[] {\n            \"Friendly Names\",\n            \"Configuration Names\",\n            \"Both Names\"});\n            this.toolStripComboBox1.Name = \"toolStripComboBox1\";\n            this.toolStripComboBox1.Size = new System.Drawing.Size(121, 25);\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(48, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"ASP\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // AspPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"AspPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip1.ResumeLayout(false);\n            this.toolStrip1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private PropertyGrid pgASP;\n        private ToolStrip toolStrip1;\n        private ToolStripLabel toolStripLabel1;\n        private ToolStripComboBox toolStripComboBox1;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Asp/AspPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Asp\n{\n    using System.Reflection;\n    using System.Runtime.InteropServices;\n    using System.Windows.Forms;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    internal partial class AspPage : ModulePropertiesPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly AspPage _owner;\n\n            public PageTaskList(AspPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private AspFeature _feature;\n        private bool _hasChanges;\n        private bool _initialized;\n        private TaskList _taskList;\n\n        public AspPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new AspFeature(Module);\n            _feature.AspSettingsUpdated = Refresh;\n            _feature.Load();\n            base.Initialize(navigationData);\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ApplyChanges()\n        {\n            try\n            {\n                if (!_feature.ApplyChanges())\n                {\n                    return false;\n                }\n            }\n            catch (COMException ex)\n            {\n                ShowError(ex, false);\n                return true;\n            }\n\n            ClearChanges();\n            return true;\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            _feature.CancelChanges();\n            ClearChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get { return _hasChanges; }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get { return true; }\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            Refresh();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        protected override void OnRefresh()\n        {\n            if (!_hasChanges)\n            {\n                pgASP.SelectedObject = _feature.PropertyGridObject;\n                _initialized = true;\n            }\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n\n        private void PgAspPropertyValueChanged(object s, PropertyValueChangedEventArgs e)\n        {\n            InformChanges();\n        }\n\n        protected override PropertyBag GetProperties()\n        {\n            return null;\n        }\n\n        protected override PropertyBag UpdateProperties(out bool updateSuccessful)\n        {\n            updateSuccessful = false;\n            return null;\n        }\n\n        protected override void ProcessProperties(PropertyBag properties)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Asp/AspPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>281, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Asp/AspSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Asp\n{\n    public delegate void AspSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Asp/JexusManager.Features.Asp.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Asp</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.VisualBasic\" Version=\"10.4.0-preview.18571.3\" />\n    <PackageReference Include=\"Portable.BouncyCastle\" Version=\"1.9.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Asp/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"0adf28c5-377f-4aa3-b732-aa8c8aeebb16\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "JexusManager.Features.Asp/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Asp.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Asp.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap asp_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"asp_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Asp/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"asp_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\asp_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Asp/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Authentication/AnonymousAuthenticationFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Win32;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class AnonymousAuthenticationFeature : AuthenticationFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly AnonymousAuthenticationFeature _owner;\n\n            public FeatureTaskList(AnonymousAuthenticationFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (!_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                }\n\n                result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n        }\n\n        private FeatureTaskList _taskList;\n\n        public AnonymousAuthenticationFeature(Module module) : base(module)\n        {\n        }\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", null, false);\n            var anonymousEnabled = (bool)section[\"enabled\"];\n            SetEnabled(anonymousEnabled);\n        }\n\n        public void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var anonymousSection = service.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", null, false);\n            anonymousSection[\"enabled\"] = true;\n            service.ServerManager.CommitChanges();\n            SetEnabled(true);\n        }\n\n        public void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var anonymousSection = service.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", null, false);\n            anonymousSection[\"enabled\"] = false;\n            service.ServerManager.CommitChanges();\n            SetEnabled(false);\n        }\n\n        private void Edit()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var anonymousSection = service.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", null, false);\n            using (var dialog = new AnonymousEditDialog(Module, new AnonymousItem(anonymousSection), this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnAuthenticationSettingsSaved();\n        }\n\n        public override Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210461#Anonymous\");\n            return true;\n        }\n\n        public override bool IsFeatureEnabled\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.IisExpress)\n                {\n                    return true;\n                }\n\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.Iis)\n                {\n                    var reg = Registry.LocalMachine.OpenSubKey(@\"Software\\Microsoft\\InetStp\\Components\");\n                    if (reg == null)\n                    {\n                        return false;\n                    }\n\n                    return (int)reg.GetValue(\"AnonymousAuthentication\", 0) == 1;\n                }\n\n                return false;\n            }\n        }\n\n        public override AuthenticationType AuthenticationType\n        {\n            get { return AuthenticationType.Other; }\n        }\n\n        public override string Name\n        {\n            get { return \"Anonymous Authentication\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/AnonymousEditDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authentication\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AnonymousEditDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.rbSpecific = new System.Windows.Forms.RadioButton();\n            this.rbPool = new System.Windows.Forms.RadioButton();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnSet = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(7, 15);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(124, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Anonymous user identity:\";\n            // \n            // rbSpecific\n            // \n            this.rbSpecific.AutoSize = true;\n            this.rbSpecific.Location = new System.Drawing.Point(10, 42);\n            this.rbSpecific.Name = \"rbSpecific\";\n            this.rbSpecific.Size = new System.Drawing.Size(89, 17);\n            this.rbSpecific.TabIndex = 1;\n            this.rbSpecific.TabStop = true;\n            this.rbSpecific.Text = \"Specific user:\";\n            this.rbSpecific.UseVisualStyleBackColor = true;\n            // \n            // rbPool\n            // \n            this.rbPool.AutoSize = true;\n            this.rbPool.Location = new System.Drawing.Point(10, 111);\n            this.rbPool.Name = \"rbPool\";\n            this.rbPool.Size = new System.Drawing.Size(136, 17);\n            this.rbPool.TabIndex = 2;\n            this.rbPool.TabStop = true;\n            this.rbPool.Text = \"Application pool identity\";\n            this.rbPool.UseVisualStyleBackColor = true;\n            // \n            // txtName\n            // \n            this.txtName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.txtName.Location = new System.Drawing.Point(29, 74);\n            this.txtName.Name = \"txtName\";\n            this.txtName.ReadOnly = true;\n            this.txtName.Size = new System.Drawing.Size(275, 20);\n            this.txtName.TabIndex = 3;\n            // \n            // btnSet\n            // \n            this.btnSet.Location = new System.Drawing.Point(310, 72);\n            this.btnSet.Name = \"btnSet\";\n            this.btnSet.Size = new System.Drawing.Size(95, 23);\n            this.btnSet.TabIndex = 4;\n            this.btnSet.Text = \"Set...\";\n            this.btnSet.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(313, 146);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(92, 23);\n            this.btnCancel.TabIndex = 5;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(217, 146);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 6;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // AnonymousEditDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(414, 181);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnSet);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.rbPool);\n            this.Controls.Add(this.rbSpecific);\n            this.Controls.Add(this.label1);\n            this.Name = \"AnonymousEditDialog\";\n            this.Text = \"Edit Anonymous Authentication Credentials\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private RadioButton rbSpecific;\n        private RadioButton rbPool;\n        private TextBox txtName;\n        private Button btnSet;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/AnonymousEditDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Linq;\n    using System.Reactive.Disposables;\n    using Microsoft.Web.Management.Client.Extensions;\n\n    public partial class AnonymousEditDialog : DialogForm\n    {\n        public AnonymousEditDialog(IServiceProvider serviceProvider, AnonymousItem existing, AuthenticationFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    rbPool.Checked = txtName.Text.Length == 0;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnSet, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using (var dialog = new CredentialsDialog(ServiceProvider, existing.Name, feature))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n\n                        txtName.Text = dialog.UserName;\n                        existing.Name = dialog.UserName;\n                        existing.Password = dialog.Password;\n                    }\n                    SetButton();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogResult = DialogResult.OK;\n                    if (rbPool.Checked)\n                    {\n                        existing.Name = string.Empty;\n                        // TODO: reset password.\n                        existing.Password = string.Empty;\n                    }\n\n                    existing.Apply();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(rbPool, \"CheckedChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(rbSpecific, \"CheckedChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnSet.Enabled = !rbPool.Checked;\n                    SetButton();\n                    /*var toElevate = !rbPool.Checked;\n                    if (toElevate)\n                    {\n                        NativeMethods.TryAddShieldToButton(btnOK);\n                    }\n                    else\n                    {\n                        NativeMethods.RemoveShieldFromButton(btnOK);\n                    }*/\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n\n            txtName.Text = \"test\"; // IMPORTANT: trigger a change event.\n            txtName.Text = existing.Name;\n        }\n\n        private void SetButton()\n        {\n            // TODO: disable if not elevated. Need to find an in-place elevation approach.\n            btnOK.Enabled = rbPool.Checked || (txtName.Text.Length != 0/* && NativeMethods.IsProcessElevated*/);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/AnonymousEditDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/AnonymousItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using Microsoft.Web.Administration;\n\n    public class AnonymousItem\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public AnonymousItem(ConfigurationElement element)\n        {\n            Element = element;\n            Name = (string)element[\"userName\"];\n            Password = (string)element[\"password\"];\n        }\n\n        public string Name { get; set; }\n        public string Password { get; set; }\n\n        public void Apply()\n        {\n            Element[\"userName\"] = Name;\n            Element[\"password\"] = Password;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/AuthenticationModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class AuthenticationModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(AuthenticationPage), \"Authentication\", \"Configure authentication settings for sites and applications\", Resources.authentication_36, Resources.authentication_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/AuthenticationModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class AuthenticationModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(AuthenticationModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/AuthenticationPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authentication\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AuthenticationPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chResponse = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.btnHelp = new System.Windows.Forms.ToolStripButton();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.tsActionPanel.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 3;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 9;\n            this.pictureBox1.TabStop = false;\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 8;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chStatus,\n            this.chResponse});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 200;\n            // \n            // chStatus\n            // \n            this.chStatus.Text = \"Status\";\n            this.chStatus.Width = 100;\n            // \n            // chResponse\n            // \n            this.chResponse.Text = \"Response Type\";\n            this.chResponse.Width = 150;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel3,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Response Type\",\n            \"Status\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(149, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Authentication\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.btnHelp});\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // btnHelp\n            // \n            this.btnHelp.Name = \"btnHelp\";\n            this.btnHelp.Size = new System.Drawing.Size(214, 4);\n            // \n            // AuthenticationPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"AuthenticationPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.tsActionPanel.ResumeLayout(false);\n            this.tsActionPanel.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chStatus;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ToolStripButton btnHelp;\n        private Label label3;\n        private PictureBox pictureBox1;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private ColumnHeader chResponse;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/AuthenticationPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Server;\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n    using Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class AuthenticationPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly AuthenticationPage _owner;\n\n            public PageTaskList(AuthenticationPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class AuthenticationListViewItem : ListViewItem\n        {\n            private readonly AuthenticationPage _page;\n            private readonly ListViewSubItem _status;\n\n            public AuthenticationListViewItem(AuthenticationFeature feature, AuthenticationPage page)\n                : base(feature.Name)\n            {\n                _page = page;\n                Feature = feature;\n                _status = new ListViewSubItem(this, feature.IsEnabled ? \"Enabled\" : \"Disabled\");\n                SubItems.Add(_status);\n                SubItems.Add(new ListViewSubItem(this, GetString(feature.AuthenticationType)));\n                feature.AuthenticationSettingsUpdated = AuthenticationSettingsUpdated;\n            }\n\n            private void AuthenticationSettingsUpdated()\n            {\n                _status.Text = Feature.IsEnabled ? \"Enabled\" : \"Disabled\";\n                _page.ListView1SelectedIndexChanged(ListView, EventArgs.Empty);\n            }\n\n            private string GetString(AuthenticationType authenticationType)\n            {\n                switch (authenticationType)\n                {\n                    case AuthenticationType.ChallengeBase:\n                    case AuthenticationType.ClientCertificateBased:\n                        return \"HTTP 401 Challenge\";\n                    case AuthenticationType.LoginRedirectBased:\n                        return \"HTTP 302 Login/Redirect\";\n                    case AuthenticationType.Other:\n                        return string.Empty;\n                    default:\n                        throw new ArgumentOutOfRangeException(nameof(authenticationType));\n                }\n            }\n\n            public AuthenticationFeature Feature { get; }\n        }\n\n        private TaskList _taskList;\n\n        public AuthenticationPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            var certificateFeature = new ClientCertificateAuthenticationFeature(Module);\n            if (certificateFeature.IsFeatureEnabled)\n            {\n                listView1.Items.Add(new AuthenticationListViewItem(certificateFeature, this));\n                certificateFeature.Load();\n            }\n\n            var anonymousFeature = new AnonymousAuthenticationFeature(Module);\n            if (anonymousFeature.IsFeatureEnabled)\n            {\n                listView1.Items.Add(new AuthenticationListViewItem(anonymousFeature, this));\n                anonymousFeature.Load();\n            }\n\n            // TODO: Elevation is needed to modify root web.config.\n            var impersonationFeature = new ImpersonationFeature(Module);\n            if (impersonationFeature.IsFeatureEnabled)\n            {\n                listView1.Items.Add(new AuthenticationListViewItem(impersonationFeature, this));\n                impersonationFeature.Load();\n            }\n\n            var basicFeature = new BasicAuthenticationFeature(Module);\n            if (basicFeature.IsFeatureEnabled)\n            {\n                listView1.Items.Add(new AuthenticationListViewItem(basicFeature, this));\n                basicFeature.Load();\n            }\n\n            var digestFeature = new DigestAuthenticationFeature(Module);\n            if (digestFeature.IsFeatureEnabled)\n            {\n                listView1.Items.Add(new AuthenticationListViewItem(digestFeature, this));\n                digestFeature.Load();\n            }\n\n            var formsFeature = new FormsAuthenticationFeature(Module);\n            if (formsFeature.IsFeatureEnabled)\n            {\n                listView1.Items.Add(new AuthenticationListViewItem(formsFeature, this));\n                formsFeature.Load();\n            }\n\n            var windowsFeature = new WindowsAuthenticationFeature(Module);\n            if (windowsFeature.IsFeatureEnabled)\n            {\n                listView1.Items.Add(new AuthenticationListViewItem(windowsFeature, this));\n                windowsFeature.Load();\n            }\n\n            InitializeListPage();\n        }\n\n        protected override void InitializeListPage()\n        {\n            TaskList extra = null;\n            if (listView1.SelectedItems.Count != 0)\n            {\n                var item = (AuthenticationListViewItem)listView1.SelectedItems[0];\n                extra = item.Feature.GetTaskList();\n            }\n\n            new ColumnClickHook().HandleColumnClick(listView1);\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel, extra);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            InitializeListPage();\n        }\n\n        protected override bool ShowHelp()\n        {\n            if (listView1.SelectedItems.Count == 0)\n            {\n                DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210461\");\n                return true;\n            }\n\n            return ((AuthenticationListViewItem)listView1.SelectedItems[0]).Feature.ShowHelp();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), (item, selectedGroup) =>\n            {\n                // Determine the group key based on the selected grouping option\n                switch (selectedGroup)\n                {\n                    case \"Response Type\":\n                        return item.SubItems[2].Text;\n                    case \"Status\":\n                        return item.SubItems[1].Text;\n                    default:\n                        return \"Unknown\";\n                }\n            });\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/AuthenticationPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>807, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>702, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/BasicAuthenticationFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Win32;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class BasicAuthenticationFeature : AuthenticationFeature\n    {\n        private FeatureTaskList _taskList;\n\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly BasicAuthenticationFeature _owner;\n\n            public FeatureTaskList(BasicAuthenticationFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (!_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                }\n\n                result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n        }\n\n        public BasicAuthenticationFeature(Module module) : base(module)\n        {\n        }\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/security/authentication/basicAuthentication\", null, false);\n            var basicEnabled = (bool)section[\"enabled\"];\n            SetEnabled(basicEnabled);\n        }\n\n        public void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var basicSection = service.GetSection(\"system.webServer/security/authentication/basicAuthentication\", null, false);\n            basicSection[\"enabled\"] = true;\n            service.ServerManager.CommitChanges();\n            SetEnabled(true);\n        }\n\n        public void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var basicSection = service.GetSection(\"system.webServer/security/authentication/basicAuthentication\", null, false);\n            basicSection[\"enabled\"] = false;\n            service.ServerManager.CommitChanges();\n            SetEnabled(false);\n        }\n\n        private void Edit()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var basicSection = service.GetSection(\"system.webServer/security/authentication/basicAuthentication\", null, false);\n            using (var dialog = new BasicEditDialog(Module, new BasicItem(basicSection), this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnAuthenticationSettingsSaved();\n        }\n\n        public override Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210461#Basic\");\n            return true;\n        }\n\n        public override bool IsFeatureEnabled\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.IisExpress)\n                {\n                    return true;\n                }\n\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.Iis)\n                {\n                    var reg = Registry.LocalMachine.OpenSubKey(@\"Software\\Microsoft\\InetStp\\Components\");\n                    if (reg == null)\n                    {\n                        return false;\n                    }\n\n                    return (int)reg.GetValue(\"BasicAuthentication\", 0) == 1;\n                }\n\n                return false;\n            }\n        }\n\n        public override AuthenticationType AuthenticationType\n        {\n            get { return AuthenticationType.ChallengeBase; }\n        }\n\n        public override string Name\n        {\n            get { return \"Basic Authentication\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/BasicEditDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authentication\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class BasicEditDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtDomain = new System.Windows.Forms.TextBox();\n            this.txtRealm = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(257, 131);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(161, 131);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(81, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Default domain:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(13, 64);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(40, 13);\n            this.label2.TabIndex = 3;\n            this.label2.Text = \"Realm:\";\n            // \n            // txtDomain\n            // \n            this.txtDomain.Location = new System.Drawing.Point(16, 29);\n            this.txtDomain.Name = \"txtDomain\";\n            this.txtDomain.Size = new System.Drawing.Size(336, 20);\n            this.txtDomain.TabIndex = 4;\n            // \n            // txtRealm\n            // \n            this.txtRealm.Location = new System.Drawing.Point(16, 80);\n            this.txtRealm.Name = \"txtRealm\";\n            this.txtRealm.Size = new System.Drawing.Size(336, 20);\n            this.txtRealm.TabIndex = 5;\n            // \n            // BasicEditDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(364, 166);\n            this.Controls.Add(this.txtRealm);\n            this.Controls.Add(this.txtDomain);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"BasicEditDialog\";\n            this.Text = \"Edit Basic Authentication Settings\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private Label label2;\n        private TextBox txtDomain;\n        private TextBox txtRealm;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/BasicEditDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Linq;\n    using System.Reactive.Disposables;\n    using Microsoft.Web.Management.Client.Extensions;\n\n    public partial class BasicEditDialog : DialogForm\n    {\n        public BasicEditDialog(IServiceProvider serviceProvider, BasicItem existing, AuthenticationFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            txtDomain.Text = existing.Domain;\n            txtRealm.Text = existing.Realm;\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    existing.Domain = txtDomain.Text;\n                    existing.Realm = txtRealm.Text;\n                    existing.Apply();\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/BasicEditDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/BasicItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using Microsoft.Web.Administration;\n\n    public class BasicItem\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public BasicItem(ConfigurationElement element)\n        {\n            Element = element;\n            Domain = (string)element[\"defaultLogonDomain\"];\n            Realm = (string)element[\"realm\"];\n        }\n\n        public string Domain { get; set; }\n        public string Realm { get; set; }\n\n        public void Apply()\n        {\n            Element[\"defaultLogonDomain\"] = Domain;\n            Element[\"realm\"] = Realm;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/ClientCertificateAuthenticationFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Win32;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class ClientCertificateAuthenticationFeature : AuthenticationFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly ClientCertificateAuthenticationFeature _owner;\n\n            public FeatureTaskList(ClientCertificateAuthenticationFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (!_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n        }\n\n        private FeatureTaskList _taskList;\n\n        public ClientCertificateAuthenticationFeature(Module module) : base(module)\n        {\n        }\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var anonymousSection = service.GetSection(\"system.webServer/security/authentication/clientCertificateMappingAuthentication\", null, false);\n            var anonymousEnabled = (bool)anonymousSection[\"enabled\"];\n            SetEnabled(anonymousEnabled);\n        }\n\n        public void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var anonymousSection = service.GetSection(\"system.webServer/security/authentication/clientCertificateMappingAuthentication\", null, false);\n            anonymousSection[\"enabled\"] = true;\n            service.ServerManager.CommitChanges();\n            SetEnabled(true);\n        }\n\n        public void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var anonymousSection = service.GetSection(\"system.webServer/security/authentication/clientCertificateMappingAuthentication\", null, false);\n            anonymousSection[\"enabled\"] = false;\n            service.ServerManager.CommitChanges();\n            SetEnabled(false);\n        }\n\n        public override Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210461#Active_Directory\");\n            return true;\n        }\n\n        public override bool IsFeatureEnabled\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.IisExpress)\n                {\n                    return true;\n                }\n\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.Iis)\n                {\n                    var reg = Registry.LocalMachine.OpenSubKey(@\"Software\\Microsoft\\InetStp\\Components\");\n                    if (reg == null)\n                    {\n                        return false;\n                    }\n\n                    return (int)reg.GetValue(\"ClientCertificateMappingAuthentication\", 0) == 1;\n                }\n\n                return false;\n            }\n        }\n\n        public override AuthenticationType AuthenticationType\n        {\n            get { return AuthenticationType.ClientCertificateBased; }\n        }\n\n        public override string Name\n        {\n            get { return \"Active Directory Client Certificate Authentication\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/CredentialsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authentication\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CredentialsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtPassword = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtConfirm = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(207, 176);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(111, 176);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(61, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"User name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(16, 29);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(286, 20);\n            this.txtName.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(13, 67);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(56, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Password:\";\n            // \n            // txtPassword\n            // \n            this.txtPassword.Location = new System.Drawing.Point(16, 83);\n            this.txtPassword.Name = \"txtPassword\";\n            this.txtPassword.PasswordChar = '*';\n            this.txtPassword.Size = new System.Drawing.Size(286, 20);\n            this.txtPassword.TabIndex = 5;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(13, 122);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(93, 13);\n            this.label3.TabIndex = 6;\n            this.label3.Text = \"Confirm password:\";\n            // \n            // txtConfirm\n            // \n            this.txtConfirm.Location = new System.Drawing.Point(16, 138);\n            this.txtConfirm.Name = \"txtConfirm\";\n            this.txtConfirm.PasswordChar = '*';\n            this.txtConfirm.Size = new System.Drawing.Size(286, 20);\n            this.txtConfirm.TabIndex = 7;\n            // \n            // CredentialsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(314, 211);\n            this.Controls.Add(this.txtConfirm);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtPassword);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"CredentialsDialog\";\n            this.Text = \"Set Credentials\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private TextBox txtName;\n        private Label label2;\n        private TextBox txtPassword;\n        private Label label3;\n        private TextBox txtConfirm;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/CredentialsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Linq;\n    using System.Reactive.Disposables;\n    using Microsoft.Web.Management.Client.Extensions;\n\n    public partial class CredentialsDialog : DialogForm\n    {\n        public CredentialsDialog(IServiceProvider serviceProvider, string name, AuthenticationFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            btnOK.Enabled = false;\n            txtName.Text = name;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPassword, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtConfirm, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                    && !string.IsNullOrWhiteSpace(txtPassword.Text)\n                    && txtConfirm.Text == txtPassword.Text;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    UserName = txtName.Text;\n                    Password = txtPassword.Text;\n                    // TODO: verify user\n                    // DialogResult = DialogResult.Cancel;\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string Password { get; set; }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string UserName { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/CredentialsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/DigestAuthenticationFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Win32;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class DigestAuthenticationFeature : AuthenticationFeature\n    {\n        private FeatureTaskList _taskList;\n\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly DigestAuthenticationFeature _owner;\n\n            public FeatureTaskList(DigestAuthenticationFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (!_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                }\n\n                result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n        }\n\n        public DigestAuthenticationFeature(Module module) : base(module)\n        {\n        }\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var digestSection = service.GetSection(\"system.webServer/security/authentication/digestAuthentication\", null, false);\n            var digestEnabled = (bool)digestSection[\"enabled\"];\n            SetEnabled(digestEnabled);\n        }\n\n        public void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var digestSection = service.GetSection(\"system.webServer/security/authentication/digestAuthentication\", null, false);\n            digestSection[\"enabled\"] = true;\n            service.ServerManager.CommitChanges();\n            SetEnabled(true);\n        }\n\n        public void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var digestSection = service.GetSection(\"system.webServer/security/authentication/digestAuthentication\", null, false);\n            digestSection[\"enabled\"] = false;\n            service.ServerManager.CommitChanges();\n            SetEnabled(false);\n        }\n\n        private void Edit()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var digestSection = service.GetSection(\"system.webServer/security/authentication/digestAuthentication\", null, false);\n            using (var dialog = new DigestEditDialog(Module, new DigestItem(digestSection), this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnAuthenticationSettingsSaved();\n        }\n\n        public override Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210461#Digest\");\n            return true;\n        }\n\n        public override bool IsFeatureEnabled\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.IisExpress)\n                {\n                    return true;\n                }\n\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.Iis)\n                {\n                    var reg = Registry.LocalMachine.OpenSubKey(@\"Software\\Microsoft\\InetStp\\Components\");\n                    if (reg == null)\n                    {\n                        return false;\n                    }\n\n                    return (int)reg.GetValue(\"DigestAuthentication\", 0) == 1;\n                }\n\n                return false;\n            }\n        }\n\n        public override AuthenticationType AuthenticationType\n        {\n            get { return AuthenticationType.ChallengeBase; }\n        }\n\n        public override string Name\n        {\n            get { return \"Digest Authentication\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/DigestEditDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authentication\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class DigestEditDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtRealm = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(257, 79);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(161, 79);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(13, 12);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(40, 13);\n            this.label2.TabIndex = 3;\n            this.label2.Text = \"Realm:\";\n            // \n            // txtRealm\n            // \n            this.txtRealm.Location = new System.Drawing.Point(16, 28);\n            this.txtRealm.Name = \"txtRealm\";\n            this.txtRealm.Size = new System.Drawing.Size(336, 20);\n            this.txtRealm.TabIndex = 5;\n            // \n            // DigestEditDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(364, 116);\n            this.Controls.Add(this.txtRealm);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"DigestEditDialog\";\n            this.Text = \"Edit Digest Authentication Settings\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label2;\n        private TextBox txtRealm;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/DigestEditDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Disposables;\n    using Microsoft.Web.Management.Client.Extensions;\n\n    public partial class DigestEditDialog : DialogForm\n    {\n        public DigestEditDialog(IServiceProvider serviceProvider, DigestItem item, AuthenticationFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            txtRealm.Text = item.Realm;\n            txtRealm.SelectAll();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    item.Realm = txtRealm.Text;\n                    item.Apply();\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/DigestEditDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/DigestItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using Microsoft.Web.Administration;\n\n    public class DigestItem\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public DigestItem(ConfigurationElement element)\n        {\n            Element = element;\n            Realm = (string)element[\"realm\"];\n        }\n\n        public string Realm { get; set; }\n\n        public void Apply()\n        {\n            Element[\"realm\"] = Realm;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/FormsAuthenticationFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class FormsAuthenticationFeature : AuthenticationFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly FormsAuthenticationFeature _owner;\n\n            public FeatureTaskList(FormsAuthenticationFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (_owner.Scope == ManagementScope.Server && !PublicNativeMethods.IsProcessElevated)\n                {\n                }\n                else\n                {\n                    // TODO: Elevation is needed to modify root web.config.\n                    if (!_owner.IsEnabled)\n                    {\n                        result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                    }\n\n                    if (_owner.IsEnabled)\n                    {\n                        result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                    }\n                }\n\n                result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n        }\n\n        private FeatureTaskList _taskList;\n\n        public FormsAuthenticationFeature(Module module)\n            : base(module)\n        {\n        }\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.web/authentication\");\n            var enabled = 3L == (long)section[\"mode\"];\n            SetEnabled(enabled);\n            Scope = service.Scope;\n        }\n\n        public void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.web/authentication\");\n            section[\"mode\"] = \"Forms\";\n            service.ServerManager.CommitChanges();\n            SetEnabled(true);\n        }\n\n        public void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.web/authentication\");\n            section[\"mode\"] = \"Windows\";\n            service.ServerManager.CommitChanges();\n            SetEnabled(false);\n        }\n\n        private void Edit()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.web/authentication\");\n            using (var dialog = new FormsEditDialog(Module, new FormsItem(section.GetChildElement(\"forms\")), Scope == ManagementScope.Server && !PublicNativeMethods.IsProcessElevated, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnAuthenticationSettingsSaved();\n        }\n\n        private ManagementScope Scope { get; set; }\n\n        public override Version MinimumFrameworkVersion => FxVersion20;\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210461#Forms\");\n            return true;\n        }\n\n        public override bool IsFeatureEnabled => true;\n\n        public override AuthenticationType AuthenticationType => AuthenticationType.LoginRedirectBased;\n\n        public override string Name => \"Forms Authentication\";\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/FormsEditDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authentication\n{\n    using System.Windows.Forms;\n\n    partial class FormsEditDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtURL = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtTimeout = new System.Windows.Forms.TextBox();\n            this.gbCookie = new System.Windows.Forms.GroupBox();\n            this.cbExpire = new System.Windows.Forms.CheckBox();\n            this.cbSSL = new System.Windows.Forms.CheckBox();\n            this.cbProtectedMode = new System.Windows.Forms.ComboBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.cbMode = new System.Windows.Forms.ComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.gbCookie.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(287, 396);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(191, 396);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 18);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(61, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Login URL:\";\n            // \n            // txtURL\n            // \n            this.txtURL.Location = new System.Drawing.Point(12, 34);\n            this.txtURL.Name = \"txtURL\";\n            this.txtURL.Size = new System.Drawing.Size(209, 20);\n            this.txtURL.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 70);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(209, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Authentication cookie time-out (in minutes):\";\n            // \n            // txtTimeout\n            // \n            this.txtTimeout.Location = new System.Drawing.Point(12, 86);\n            this.txtTimeout.Name = \"txtTimeout\";\n            this.txtTimeout.Size = new System.Drawing.Size(92, 20);\n            this.txtTimeout.TabIndex = 5;\n            // \n            // gbCookie\n            // \n            this.gbCookie.Controls.Add(this.cbExpire);\n            this.gbCookie.Controls.Add(this.cbSSL);\n            this.gbCookie.Controls.Add(this.cbProtectedMode);\n            this.gbCookie.Controls.Add(this.label5);\n            this.gbCookie.Controls.Add(this.txtName);\n            this.gbCookie.Controls.Add(this.label4);\n            this.gbCookie.Controls.Add(this.cbMode);\n            this.gbCookie.Controls.Add(this.label3);\n            this.gbCookie.Location = new System.Drawing.Point(12, 112);\n            this.gbCookie.Name = \"gbCookie\";\n            this.gbCookie.Size = new System.Drawing.Size(370, 264);\n            this.gbCookie.TabIndex = 6;\n            this.gbCookie.TabStop = false;\n            this.gbCookie.Text = \"Cookie settings\";\n            // \n            // cbExpire\n            // \n            this.cbExpire.AutoSize = true;\n            this.cbExpire.Location = new System.Drawing.Point(19, 224);\n            this.cbExpire.Name = \"cbExpire\";\n            this.cbExpire.Size = new System.Drawing.Size(224, 17);\n            this.cbExpire.TabIndex = 7;\n            this.cbExpire.Text = \"Extend cookie expiration on every request\";\n            this.cbExpire.UseVisualStyleBackColor = true;\n            // \n            // cbSSL\n            // \n            this.cbSSL.AutoSize = true;\n            this.cbSSL.Location = new System.Drawing.Point(19, 190);\n            this.cbSSL.Name = \"cbSSL\";\n            this.cbSSL.Size = new System.Drawing.Size(86, 17);\n            this.cbSSL.TabIndex = 6;\n            this.cbSSL.Text = \"Require SSL\";\n            this.cbSSL.UseVisualStyleBackColor = true;\n            // \n            // cbProtectedMode\n            // \n            this.cbProtectedMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbProtectedMode.FormattingEnabled = true;\n            this.cbProtectedMode.Items.AddRange(new object[] {\n            \"Encryption and validation\",\n            \"None\",\n            \"Encryption\",\n            \"Validation\"});\n            this.cbProtectedMode.Location = new System.Drawing.Point(19, 153);\n            this.cbProtectedMode.Name = \"cbProtectedMode\";\n            this.cbProtectedMode.Size = new System.Drawing.Size(176, 21);\n            this.cbProtectedMode.TabIndex = 5;\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(16, 137);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(85, 13);\n            this.label5.TabIndex = 4;\n            this.label5.Text = \"Protected mode:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(19, 97);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(176, 20);\n            this.txtName.TabIndex = 3;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(16, 81);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(38, 13);\n            this.label4.TabIndex = 2;\n            this.label4.Text = \"Name:\";\n            // \n            // cbMode\n            // \n            this.cbMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbMode.FormattingEnabled = true;\n            this.cbMode.Items.AddRange(new object[] {\n            \"Do not use cookies\",\n            \"Use cookies\",\n            \"Auto Detect\",\n            \"Use device profile\"});\n            this.cbMode.Location = new System.Drawing.Point(19, 43);\n            this.cbMode.Name = \"cbMode\";\n            this.cbMode.Size = new System.Drawing.Size(176, 21);\n            this.cbMode.TabIndex = 1;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(16, 27);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(37, 13);\n            this.label3.TabIndex = 0;\n            this.label3.Text = \"Mode:\";\n            // \n            // FormsEditDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(394, 431);\n            this.Controls.Add(this.gbCookie);\n            this.Controls.Add(this.txtTimeout);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtURL);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"FormsEditDialog\";\n            this.Text = \"Edit Forms Authentication Settings\";\n            this.gbCookie.ResumeLayout(false);\n            this.gbCookie.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Button btnCancel;\n        private System.Windows.Forms.Button btnOK;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.TextBox txtURL;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.TextBox txtTimeout;\n        private System.Windows.Forms.GroupBox gbCookie;\n        private System.Windows.Forms.CheckBox cbExpire;\n        private System.Windows.Forms.CheckBox cbSSL;\n        private System.Windows.Forms.ComboBox cbProtectedMode;\n        private System.Windows.Forms.Label label5;\n        private System.Windows.Forms.TextBox txtName;\n        private System.Windows.Forms.Label label4;\n        private System.Windows.Forms.ComboBox cbMode;\n        private System.Windows.Forms.Label label3;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/FormsEditDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.ComponentModel;\n\nnamespace JexusManager.Features.Authentication\n{\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n    using System;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    public partial class FormsEditDialog : DialogForm\n    {\n        public FormsEditDialog(IServiceProvider serviceProvider, FormsItem existing, bool readOnly, AuthenticationFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            txtURL.Text = existing.LoginUrl;\n            txtTimeout.Text = TimeSpanExtensions.GetTotalMinutes(existing.Timeout).ToString();\n\n            cbMode.SelectedIndex = (int)existing.Mode;\n            txtName.Text = existing.Name;\n            cbProtectedMode.SelectedIndex = (int)existing.ProtectedMode;\n            cbSSL.Checked = existing.RequireSsl;\n            cbExpire.Checked = existing.SlidinngExpiration;\n            btnOK.Enabled = false;\n\n            gbCookie.Enabled = !readOnly;\n            txtURL.Enabled = !readOnly;\n            txtTimeout.Enabled = !readOnly;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (string.IsNullOrWhiteSpace(txtURL.Text))\n                    {\n                        ShowMessage(\n                            \"You must specify a login page URL.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    int minutes;\n                    if (!int.TryParse(txtTimeout.Text, out minutes))\n                    {\n                        ShowMessage(\n                            \"You must specify a valid, positive integer for the authentication time-out.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    if (string.IsNullOrWhiteSpace(txtName.Text))\n                    {\n                        ShowMessage(\n                            \"You must specify a cookie name.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    existing.LoginUrl = txtURL.Text;\n                    existing.Timeout = new TimeSpan(0, 0, minutes, 0);\n                    existing.Mode = cbMode.SelectedIndex;\n                    existing.Name = txtName.Text;\n                    existing.ProtectedMode = cbProtectedMode.SelectedIndex;\n                    existing.RequireSsl = cbSSL.Checked;\n                    existing.SlidinngExpiration = cbExpire.Checked;\n                    existing.Apply();\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbSSL, \"CheckedChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtURL, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(cbMode, \"SelectedIndexChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/FormsEditDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/FormsItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n\n    using Microsoft.Web.Administration;\n\n\n    public class FormsItem\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public FormsItem(ConfigurationElement element)\n        {\n            Element = element;\n            LoginUrl = (string)element[\"loginUrl\"];\n            Timeout = (TimeSpan)element[\"timeout\"];\n            Mode = (long)element[\"cookieless\"];\n            Name = (string)element[\"name\"];\n            ProtectedMode = (long)element[\"protection\"];\n            RequireSsl = (bool)element[\"requireSSL\"];\n            SlidinngExpiration = (bool)element[\"slidingExpiration\"];\n        }\n\n        public long Mode { get; set; }\n\n        public long ProtectedMode { get; set; }\n\n        public bool RequireSsl { get; set; }\n\n        public bool SlidinngExpiration { get; set; }\n\n        public string Name { get; set; }\n\n        public TimeSpan Timeout { get; set; }\n\n        public string LoginUrl { get; set; }\n\n        public void Apply()\n        {\n            Element[\"loginUrl\"] = LoginUrl;\n            Element[\"timeout\"] = Timeout;\n            Element[\"cookieless\"] = Mode;\n            Element[\"name\"] = Name;\n            Element[\"protection\"] = ProtectedMode;\n            Element[\"requireSSL\"] = RequireSsl;\n            Element[\"slidingExpiration\"] = SlidinngExpiration;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/ImpersonationEditDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authentication\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ImpersonationEditDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.rbSpecific = new System.Windows.Forms.RadioButton();\n            this.rbPool = new System.Windows.Forms.RadioButton();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnSet = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(7, 15);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(116, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Identity to impersonate:\";\n            // \n            // rbSpecific\n            // \n            this.rbSpecific.AutoSize = true;\n            this.rbSpecific.Location = new System.Drawing.Point(10, 42);\n            this.rbSpecific.Name = \"rbSpecific\";\n            this.rbSpecific.Size = new System.Drawing.Size(89, 17);\n            this.rbSpecific.TabIndex = 1;\n            this.rbSpecific.TabStop = true;\n            this.rbSpecific.Text = \"Specific user:\";\n            this.rbSpecific.UseVisualStyleBackColor = true;\n            // \n            // rbPool\n            // \n            this.rbPool.AutoSize = true;\n            this.rbPool.Location = new System.Drawing.Point(10, 111);\n            this.rbPool.Name = \"rbPool\";\n            this.rbPool.Size = new System.Drawing.Size(114, 17);\n            this.rbPool.TabIndex = 2;\n            this.rbPool.TabStop = true;\n            this.rbPool.Text = \"Authenticated user\";\n            this.rbPool.UseVisualStyleBackColor = true;\n            // \n            // txtName\n            // \n            this.txtName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.txtName.Location = new System.Drawing.Point(29, 74);\n            this.txtName.Name = \"txtName\";\n            this.txtName.ReadOnly = true;\n            this.txtName.Size = new System.Drawing.Size(275, 20);\n            this.txtName.TabIndex = 3;\n            // \n            // btnSet\n            // \n            this.btnSet.Location = new System.Drawing.Point(310, 72);\n            this.btnSet.Name = \"btnSet\";\n            this.btnSet.Size = new System.Drawing.Size(95, 23);\n            this.btnSet.TabIndex = 4;\n            this.btnSet.Text = \"Set...\";\n            this.btnSet.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(313, 146);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(92, 23);\n            this.btnCancel.TabIndex = 5;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(217, 146);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 6;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // ImpersonationEditDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(414, 181);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnSet);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.rbPool);\n            this.Controls.Add(this.rbSpecific);\n            this.Controls.Add(this.label1);\n            this.Name = \"ImpersonationEditDialog\";\n            this.Text = \"Edit ASP.NET Impersonation Settings\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private RadioButton rbSpecific;\n        private RadioButton rbPool;\n        private TextBox txtName;\n        private Button btnSet;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/ImpersonationEditDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Disposables;\n    using Microsoft.Web.Management.Client.Extensions;\n\n    public partial class ImpersonationEditDialog : DialogForm\n    {\n        public ImpersonationEditDialog(IServiceProvider serviceProvider, ImpersonationItem existing, AuthenticationFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            using (var container = new CompositeDisposable())\n            {\n                FormClosed += (sender, args) => container.Dispose();\n\n                container.Add(\n                    Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                    .Sample(TimeSpan.FromSeconds(0.5))\n                    .ObserveOn(System.Threading.SynchronizationContext.Current)\n                    .Subscribe(evt =>\n                    {\n                        rbPool.Checked = txtName.Text.Length == 0;\n                    }));\n\n                container.Add(\n                    Observable.FromEventPattern<EventArgs>(btnSet, \"Click\")\n                    .ObserveOn(System.Threading.SynchronizationContext.Current)\n                    .Subscribe(evt =>\n                    {\n                        using (var dialog = new CredentialsDialog(ServiceProvider, existing.Name, feature))\n                        {\n                            if (dialog.ShowDialog() != DialogResult.OK)\n                            {\n                                return;\n                            }\n\n                            txtName.Text = dialog.UserName;\n                            existing.Name = txtName.Text;\n                            existing.Password = dialog.Password;\n                        }\n                        SetButton();\n                    }));\n\n                container.Add(\n                    Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                    .ObserveOn(System.Threading.SynchronizationContext.Current)\n                    .Subscribe(evt =>\n                    {\n                        DialogResult = DialogResult.OK;\n                        if (rbPool.Checked)\n                        {\n                            existing.Name = string.Empty;\n                            // TODO: reset password.\n                            existing.Password = null;\n                        }\n\n                        existing.Apply();\n                    }));\n\n                container.Add(\n                    Observable.FromEventPattern<EventArgs>(rbPool, \"CheckedChanged\")\n                    .Merge(Observable.FromEventPattern<EventArgs>(rbSpecific, \"CheckedChanged\"))\n                    .Sample(TimeSpan.FromSeconds(0.5))\n                    .ObserveOn(System.Threading.SynchronizationContext.Current)\n                    .Subscribe(evt =>\n                    {\n                        btnSet.Enabled = !rbPool.Checked;\n                        SetButton();\n                        var toElevate = !rbPool.Checked;\n                        if (toElevate)\n                        {\n                            NativeMethods.TryAddShieldToButton(btnOK);\n                        }\n                        else\n                        {\n                            NativeMethods.RemoveShieldFromButton(btnOK);\n                        }\n                    }));\n\n                container.Add(\n                    Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                    .ObserveOn(System.Threading.SynchronizationContext.Current)\n                    .Subscribe(EnvironmentVariableTarget =>\n                    {\n                        feature.ShowHelp();\n                    }));\n            }\n\n            txtName.Text = \"test\"; // IMPORTANT: trigger a change event.\n            txtName.Text = existing.Name;\n        }\n\n        private void SetButton()\n        {\n            // TODO: disable if not elevated. Need to find an in-place elevation approach.\n            btnOK.Enabled = rbPool.Checked || (txtName.Text.Length != 0 && Microsoft.Web.Administration.PublicNativeMethods.IsProcessElevated);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/ImpersonationEditDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/ImpersonationFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class ImpersonationFeature : AuthenticationFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly ImpersonationFeature _owner;\n\n            public FeatureTaskList(ImpersonationFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (!_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                }\n\n                result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n        }\n\n        private FeatureTaskList _taskList;\n\n        public ImpersonationFeature(Module module) : base(module)\n        {\n        }\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.web/identity\");\n            var enabled = (bool)section[\"impersonate\"];\n            SetEnabled(enabled);\n        }\n\n        private void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.web/identity\");\n            section[\"impersonate\"] = true;\n            service.ServerManager.CommitChanges();\n            SetEnabled(true);\n        }\n\n        private void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.web/identity\");\n            section[\"impersonate\"] = false;\n            service.ServerManager.CommitChanges();\n            SetEnabled(false);\n        }\n\n        private void Edit()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.web/identity\");\n            using (var dialog = new ImpersonationEditDialog(Module, new ImpersonationItem(section), this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnAuthenticationSettingsSaved();\n        }\n\n        public override Version MinimumFrameworkVersion => FxVersion20;\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210461#Impersonation\");\n            return true;\n        }\n\n        public override bool IsFeatureEnabled\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                return service.Scope == ManagementScope.Server && PublicNativeMethods.IsProcessElevated;\n            }\n        }\n\n        public override AuthenticationType AuthenticationType => AuthenticationType.Other;\n\n        public override string Name => \"ASP.NET Impersonation\";\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/ImpersonationItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using Microsoft.Web.Administration;\n\n    public class ImpersonationItem\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public ImpersonationItem(ConfigurationElement element)\n        {\n            Element = element;\n            Name = (string)element[\"userName\"];\n            Password = (string)element[\"password\"];\n        }\n\n        public string Name { get; set; }\n        public string Password { get; set; }\n\n        public void Apply()\n        {\n            Element[\"userName\"] = Name;\n            Element[\"password\"] = Password;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/JexusManager.Features.Authentication.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Authentication</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Authentication/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"aa7ccfc5-b695-4773-ba79-77cf6c36908f\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n                              + \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n                              + \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n                              + \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n                              + \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.Authentication/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Authentication.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Authentication.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap authentication_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"authentication_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"authentication_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\authentication_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/ProviderItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using Microsoft.Web.Administration;\n\n    public class ProviderItem\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public ProviderItem(ConfigurationElement element)\n        {\n            Element = element;\n            if (element == null)\n            {\n                return;\n            }\n\n            Value = (string)element[\"value\"];\n        }\n\n        public string Value { get; set; }\n\n        public void Apply()\n        {\n            Element[\"value\"] = Value;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/ProvidersDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authentication\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ProvidersDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.lbProviders = new System.Windows.Forms.ListBox();\n            this.btnUp = new System.Windows.Forms.Button();\n            this.btnDown = new System.Windows.Forms.Button();\n            this.btnRemove = new System.Windows.Forms.Button();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbAvailable = new System.Windows.Forms.ComboBox();\n            this.btnAdd = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(14, 18);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(96, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Enabled Providers:\";\n            // \n            // lbProviders\n            // \n            this.lbProviders.FormattingEnabled = true;\n            this.lbProviders.Location = new System.Drawing.Point(17, 34);\n            this.lbProviders.Name = \"lbProviders\";\n            this.lbProviders.Size = new System.Drawing.Size(290, 108);\n            this.lbProviders.TabIndex = 1;\n            // \n            // btnUp\n            // \n            this.btnUp.Location = new System.Drawing.Point(316, 34);\n            this.btnUp.Name = \"btnUp\";\n            this.btnUp.Size = new System.Drawing.Size(85, 23);\n            this.btnUp.TabIndex = 2;\n            this.btnUp.Text = \"Move Up\";\n            this.btnUp.UseVisualStyleBackColor = true;\n            // \n            // btnDown\n            // \n            this.btnDown.Location = new System.Drawing.Point(316, 64);\n            this.btnDown.Name = \"btnDown\";\n            this.btnDown.Size = new System.Drawing.Size(85, 23);\n            this.btnDown.TabIndex = 3;\n            this.btnDown.Text = \"Move Down\";\n            this.btnDown.UseVisualStyleBackColor = true;\n            // \n            // btnRemove\n            // \n            this.btnRemove.Location = new System.Drawing.Point(316, 94);\n            this.btnRemove.Name = \"btnRemove\";\n            this.btnRemove.Size = new System.Drawing.Size(85, 23);\n            this.btnRemove.TabIndex = 4;\n            this.btnRemove.Text = \"Remove\";\n            this.btnRemove.UseVisualStyleBackColor = true;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(14, 154);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(314, 26);\n            this.label2.TabIndex = 5;\n            this.label2.Text = \"Select a provider from the list of available providers and click Add\\r\\nto add it t\" +\n    \"o the enabled providers.\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(14, 198);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(100, 13);\n            this.label3.TabIndex = 6;\n            this.label3.Text = \"Available Providers:\";\n            // \n            // cbAvailable\n            // \n            this.cbAvailable.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbAvailable.FormattingEnabled = true;\n            this.cbAvailable.Location = new System.Drawing.Point(17, 214);\n            this.cbAvailable.Name = \"cbAvailable\";\n            this.cbAvailable.Size = new System.Drawing.Size(290, 21);\n            this.cbAvailable.TabIndex = 7;\n            // \n            // btnAdd\n            // \n            this.btnAdd.Location = new System.Drawing.Point(316, 212);\n            this.btnAdd.Name = \"btnAdd\";\n            this.btnAdd.Size = new System.Drawing.Size(85, 23);\n            this.btnAdd.TabIndex = 8;\n            this.btnAdd.Text = \"Add\";\n            this.btnAdd.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(312, 281);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 9;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(216, 281);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 10;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // ProvidersDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(419, 316);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnAdd);\n            this.Controls.Add(this.cbAvailable);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.btnRemove);\n            this.Controls.Add(this.btnDown);\n            this.Controls.Add(this.btnUp);\n            this.Controls.Add(this.lbProviders);\n            this.Controls.Add(this.label1);\n            this.Name = \"ProvidersDialog\";\n            this.Text = \"Providers\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private ListBox lbProviders;\n        private Button btnUp;\n        private Button btnDown;\n        private Button btnRemove;\n        private Label label2;\n        private Label label3;\n        private ComboBox cbAvailable;\n        private Button btnAdd;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/ProvidersDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Reactive.Disposables;\n    using System.ComponentModel;\n    using Microsoft.Web.Management.Client.Extensions;\n\n    public partial class ProvidersDialog : DialogForm\n    {\n        private readonly string[] _allProviders = { \"Negotiate\", \"NTLM\", \"Negotiate:Kerberos\" };\n\n        public ProvidersDialog(IServiceProvider serviceProvider, WindowsItem item, AuthenticationFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            foreach (var provider in item.Providers)\n            {\n                lbProviders.Items.Add(provider.Value);\n            }\n\n            foreach (var each in _allProviders)\n            {\n                if (!lbProviders.Items.Contains(each))\n                {\n                    cbAvailable.Items.Add(each);\n                }\n            }\n\n            btnOK.Enabled = false;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRemove, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    cbAvailable.Items.Add(lbProviders.SelectedItem);\n                    lbProviders.Items.Remove(lbProviders.SelectedItem);\n                    cbAvailable.Enabled = true;\n                    btnOK.Enabled = true;\n                }));\n\n            var add = Observable.FromEventPattern<EventArgs>(btnAdd, \"Click\");\n            var load = Observable.FromEventPattern<EventArgs>(this, \"Load\");\n            container.Add(\n                add.ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var selected = cbAvailable.Text;\n                    lbProviders.Items.Add(selected);\n                    cbAvailable.Items.RemoveAt(cbAvailable.SelectedIndex);\n                    cbAvailable.SelectedIndex = -1;\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbAvailable, \"SelectedIndexChanged\")\n                .Merge(load)\n                .Merge(add)\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnAdd.Enabled = cbAvailable.SelectedIndex > -1;\n                    if (cbAvailable.Items.Count == 0)\n                    {\n                        cbAvailable.Enabled = false;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    item.Providers.Clear();\n                    foreach (string provider in lbProviders.Items)\n                    {\n                        item.Providers.Add(new ProviderItem(null) { Value = provider });\n                    }\n\n                    item.Apply();\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(lbProviders, \"SelectedIndexChanged\")\n                .Merge(load)\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnRemove.Enabled = lbProviders.SelectedIndex > -1;\n                    btnUp.Enabled = lbProviders.SelectedIndex > 0;\n                    btnDown.Enabled = lbProviders.SelectedIndex > -1 && lbProviders.SelectedIndex < lbProviders.Items.Count - 1;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnUp, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var current = lbProviders.SelectedItem;\n                    var up = lbProviders.SelectedIndex - 1;\n                    lbProviders.Items.RemoveAt(lbProviders.SelectedIndex);\n                    lbProviders.Items.Insert(up, current);\n                    lbProviders.SelectedIndex = up;\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnDown, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var current = lbProviders.SelectedItem;\n                    var down = lbProviders.SelectedIndex + 1;\n                    lbProviders.Items.RemoveAt(lbProviders.SelectedIndex);\n                    lbProviders.Items.Insert(down, current);\n                    lbProviders.SelectedIndex = down;\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/ProvidersDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/WindowsAdvancedDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authentication\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class WindowsAdvancedDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WindowsAdvancedDialog));\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbExtended = new System.Windows.Forms.ComboBox();\n            this.cbKernelMode = new System.Windows.Forms.CheckBox();\n            this.textBox1 = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(106, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Extended Protection:\";\n            // \n            // cbExtended\n            // \n            this.cbExtended.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbExtended.FormattingEnabled = true;\n            this.cbExtended.Items.AddRange(new object[] {\n            \"Off\",\n            \"Accept\",\n            \"Required\"});\n            this.cbExtended.Location = new System.Drawing.Point(16, 39);\n            this.cbExtended.Name = \"cbExtended\";\n            this.cbExtended.Size = new System.Drawing.Size(121, 21);\n            this.cbExtended.TabIndex = 1;\n            // \n            // cbKernelMode\n            // \n            this.cbKernelMode.AutoSize = true;\n            this.cbKernelMode.Checked = true;\n            this.cbKernelMode.CheckState = System.Windows.Forms.CheckState.Checked;\n            this.cbKernelMode.Location = new System.Drawing.Point(16, 89);\n            this.cbKernelMode.Name = \"cbKernelMode\";\n            this.cbKernelMode.Size = new System.Drawing.Size(191, 17);\n            this.cbKernelMode.TabIndex = 2;\n            this.cbKernelMode.Text = \"Enable Kernel-mode authentication\";\n            this.cbKernelMode.UseVisualStyleBackColor = true;\n            // \n            // textBox1\n            // \n            this.textBox1.Location = new System.Drawing.Point(16, 112);\n            this.textBox1.Multiline = true;\n            this.textBox1.Name = \"textBox1\";\n            this.textBox1.ReadOnly = true;\n            this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;\n            this.textBox1.Size = new System.Drawing.Size(461, 158);\n            this.textBox1.TabIndex = 3;\n            this.textBox1.Text = resources.GetString(\"textBox1.Text\");\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(286, 301);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 4;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(382, 301);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 5;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // WindowsAdvancedDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(489, 336);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.textBox1);\n            this.Controls.Add(this.cbKernelMode);\n            this.Controls.Add(this.cbExtended);\n            this.Controls.Add(this.label1);\n            this.Name = \"WindowsAdvancedDialog\";\n            this.Text = \"Advanced Settings\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private ComboBox cbExtended;\n        private CheckBox cbKernelMode;\n        private TextBox textBox1;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/WindowsAdvancedDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    public partial class WindowsAdvancedDialog : DialogForm\n    {\n        public WindowsAdvancedDialog(IServiceProvider serviceProvider, WindowsItem item, AuthenticationFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            btnOK.Enabled = false;\n            cbExtended.SelectedIndex = item.TokenChecking;\n            cbKernelMode.Checked = item.UseKernelMode;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbExtended, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbKernelMode, \"CheckedChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    item.TokenChecking = cbExtended.SelectedIndex;\n                    item.UseKernelMode = cbKernelMode.Checked;\n                    item.Apply();\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/WindowsAdvancedDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"textBox1.Text\" xml:space=\"preserve\">\n    <value>By default, IIS enables kernel-mode authentication, which may improve authentication performance and prevent authentication problems with application pools configured to use a custom identity. As a best practice, do not disable this setting if Kerberos authentication is used in your environment and the application pool is configured to use a custom identity.</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authentication/WindowsAuthenticationFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Extensions;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Win32;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class WindowsAuthenticationFeature : AuthenticationFeature\n    {\n        private FeatureTaskList _taskList;\n\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly WindowsAuthenticationFeature _owner;\n\n            public FeatureTaskList(WindowsAuthenticationFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (!_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Edit\", \"Advanced Settings...\", string.Empty).SetUsage());\n                    result.Add(new MethodTaskItem(\"Providers\", \"Providers...\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Providers()\n            {\n                _owner.Providers();\n            }\n        }\n\n        public WindowsAuthenticationFeature(Module module) : base(module)\n        {\n        }\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var windowsSection = service.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", null, false);\n            var windowsEnabled = (bool)windowsSection[\"enabled\"];\n            SetEnabled(windowsEnabled);\n        }\n\n        public void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var windowsSection = service.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", null, false);\n            windowsSection[\"enabled\"] = true;\n            service.ServerManager.CommitChanges();\n            SetEnabled(true);\n        }\n\n        public void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var windowsSection = service.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", null, false);\n            windowsSection[\"enabled\"] = false;\n            service.ServerManager.CommitChanges();\n            SetEnabled(false);\n        }\n\n        private void Edit()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var windowsSection = service.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", null, false);\n            using (var dialog = new WindowsAdvancedDialog(Module, new WindowsItem(windowsSection), this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnAuthenticationSettingsSaved();\n        }\n\n        private void Providers()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var windowsSection = service.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", null, false);\n            using (var dialog = new ProvidersDialog(Module, new WindowsItem(windowsSection), this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnAuthenticationSettingsSaved();\n        }\n\n        public override Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210461#Windows\");\n            return true;\n        }\n\n        public override bool IsFeatureEnabled\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.IisExpress)\n                {\n                    return true;\n                }\n\n                if (service.ServerManager.Mode == Microsoft.Web.Administration.WorkingMode.Iis)\n                {\n                    var reg = Registry.LocalMachine.OpenSubKey(@\"Software\\Microsoft\\InetStp\\Components\");\n                    if (reg == null)\n                    {\n                        return false;\n                    }\n\n                    return (int)reg.GetValue(\"WindowsAuthentication\", 0) == 1;\n                }\n\n                return false;\n            }\n        }\n\n        public override AuthenticationType AuthenticationType\n        {\n            get { return AuthenticationType.ChallengeBase; }\n        }\n\n        public override string Name\n        {\n            get { return \"Windows Authentication\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/WindowsItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authentication\n{\n    using System;\n    using System.Collections.Generic;\n\n    using Microsoft.Web.Administration;\n\n    public class WindowsItem\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public WindowsItem(ConfigurationElement element)\n        {\n            Element = element;\n            var extended = element.ChildElements[\"extendedProtection\"];\n            TokenChecking = Convert.ToInt32((long)extended[\"tokenChecking\"]);\n            UseKernelMode = (bool)element[\"useKernelMode\"];\n\n            var providers = element.GetCollection(\"providers\");\n            Providers = new List<ProviderItem>(providers.Count);\n            foreach (ConfigurationElement provider in providers)\n            {\n                Providers.Add(new ProviderItem(provider));\n            }\n        }\n\n        public List<ProviderItem> Providers { get; set; }\n\n        public int TokenChecking { get; set; }\n        public bool UseKernelMode { get; set; }\n\n        public void Apply()\n        {\n            Element[\"useKernelMode\"] = UseKernelMode;\n            var extended = Element.ChildElements[\"extendedProtection\"];\n            extended[\"tokenChecking\"] = (long)TokenChecking;\n\n            var providers = Element.GetCollection(\"providers\");\n            providers.Clear();\n            foreach (var item in Providers)\n            {\n                if (item.Element == null)\n                {\n                    item.Element = providers.CreateElement();\n                    item.Apply();\n                }\n\n                providers.Add(item.Element);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authentication/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Authorization/AuthorizationFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Authorization\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Authorization feature.\n    /// </summary>\n    internal class AuthorizationFeature : FeatureBase<AuthorizationRule>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly AuthorizationFeature _owner;\n\n            public FeatureTaskList(AuthorizationFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"AddAllow\", \"Add Allow Rule...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"AddDeny\", \"Add Deny Rule...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Set\", \"Edit...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddAllow()\n            {\n                _owner.AddAllow();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddDeny()\n            {\n                _owner.AddDeny();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Edit();\n            }\n        }\n\n        public AuthorizationFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/security/authorization\");\n            return section.GetCollection();\n        }\n\n        public void Load()\n        {\n            LoadItems();\n        }\n\n        public void AddAllow()\n        {\n            using var dialog = new NewRuleDialog(Module, null, true, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void AddDeny()\n        {\n            using var dialog = new NewRuleDialog(Module, null, false, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected authorization rule?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            using var dialog = new NewRuleDialog(Module, SelectedItem, false, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            AuthorizationSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210462\");\n            return false;\n        }\n\n        public AuthorizationSettingsSavedEventHandler AuthorizationSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"Authorization Rules\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/AuthorizationModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authorization\n{\n    using System;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class AuthorizationModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)this.GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(AuthorizationPage), \"Authorization Rules\",\n                \"Configure rules for authorizing users to access websites and applications\", Resources.authorization_36,\n                Resources.authorization_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/AuthorizationModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authorization\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class AuthorizationModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(this.Name, typeof(AuthorizationModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/AuthorizationPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authorization\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AuthorizationPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chMode = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chUsers = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chRoles = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chVerbs = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chMode,\n            this.chUsers,\n            this.chRoles,\n            this.chVerbs,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 13);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 527);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1_SelectedIndexChanged);\n            // \n            // chMode\n            // \n            this.chMode.Text = \"Mode\";\n            this.chMode.Width = 80;\n            // \n            // chUsers\n            // \n            this.chUsers.Text = \"Users\";\n            this.chUsers.Width = 120;\n            // \n            // chRoles\n            // \n            this.chRoles.Text = \"Roles\";\n            this.chRoles.Width = 120;\n            // \n            // chVerbs\n            // \n            this.chVerbs.Text = \"Verbs\";\n            this.chVerbs.Width = 120;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 120;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(427, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to specify rules for authorizing users to access websites and ap\" +\n    \"plications.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(199, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Authorization Rules\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // AuthorizationPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"AuthorizationPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chMode;\n        private ColumnHeader chUsers;\n        private ColumnHeader chType;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private ColumnHeader chRoles;\n        private ColumnHeader chVerbs;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/AuthorizationPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authorization\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class AuthorizationPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly AuthorizationPage _owner;\n\n            public PageTaskList(AuthorizationPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class AuthorizationListViewItem : ListViewItem, IFeatureListViewItem<AuthorizationRule>\n        {\n            public AuthorizationRule Item { get; }\n\n            private readonly AuthorizationPage _page;\n\n            public AuthorizationListViewItem(AuthorizationRule item, AuthorizationPage page)\n                : base(item.AccessType == 0L ? \"Allow\" : \"Deny\")\n            {\n                this.Item = item;\n                _page = page;\n                this.SubItems.Add(new ListViewSubItem(this, item.UsersString));\n                this.SubItems.Add(new ListViewSubItem(this, item.Roles));\n                this.SubItems.Add(new ListViewSubItem(this, item.Verbs));\n                this.SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private AuthorizationFeature _feature;\n        private PageTaskList _taskList;\n\n        public AuthorizationPage()\n        {\n            this.InitializeComponent();\n        }\n\n        public override ModuleListPageViewModes ViewModes\n        {\n            get\n            {\n                return ModuleListPageViewModes.Details;\n            }\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new AuthorizationFeature(Module);\n            _feature.AuthorizationSettingsUpdated = this.InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new AuthorizationListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (AuthorizationListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            this.Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/AuthorizationPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>602, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authorization/AuthorizationRule.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authorization\n{\n    using Microsoft.Web.Administration;\n\n    internal class AuthorizationRule : IItem<AuthorizationRule>\n    {\n        public AuthorizationRule(ConfigurationElement element)\n        {\n            this.Element = element;\n            this.Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inhertied\";\n            if (element == null)\n            {\n                Users = Roles = Verbs = string.Empty;\n                return;\n            }\n\n            this.AccessType = (long)element[\"accessType\"];\n            this.Users = (string)element[\"users\"];\n            this.Roles = (string)element[\"roles\"];\n            this.Verbs = (string)element[\"verbs\"];\n        }\n\n        public string Verbs { get; set; }\n\n        public string Roles { get; set; }\n\n        public string Users { get; set; }\n\n        public long AccessType { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public string Flag { get; set; }\n\n        public string UsersString\n        {\n            get\n            {\n                return Users == \"*\" ? \"All Users\" : Users == \"?\" ? \"Anonymous Users\" : Users;\n            }\n        }\n\n        public bool Equals(AuthorizationRule other)\n        {\n            // all properties\n            return Match(other) && other.AccessType == AccessType;\n        }\n\n        public void Apply()\n        {\n            Element[\"accessType\"] = AccessType;\n            Element[\"users\"] = Users;\n            Element[\"roles\"] = Roles;\n            Element[\"verbs\"] = Verbs;\n        }\n\n        public bool Match(AuthorizationRule other)\n        {\n            // match combined keys.\n            return other != null && other.Verbs == this.Verbs && other.Roles == this.Roles && other.Users == this.Users;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/AuthorizationSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authorization\n{\n    public delegate void AuthorizationSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/JexusManager.Features.Authorization.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Authorization</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Authorization/NewRuleDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Authorization\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewRuleDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.rbAll = new System.Windows.Forms.RadioButton();\n            this.rbRoles = new System.Windows.Forms.RadioButton();\n            this.txtRoles = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtUsers = new System.Windows.Forms.TextBox();\n            this.rbAnonymous = new System.Windows.Forms.RadioButton();\n            this.rbUsers = new System.Windows.Forms.RadioButton();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbVerbs = new System.Windows.Forms.CheckBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtVerbs = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(342, 386);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(241, 386);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 9);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(180, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Allow access to this Web content to:\";\n            // \n            // rbAll\n            // \n            this.rbAll.AutoSize = true;\n            this.rbAll.Checked = true;\n            this.rbAll.Location = new System.Drawing.Point(15, 34);\n            this.rbAll.Name = \"rbAll\";\n            this.rbAll.Size = new System.Drawing.Size(64, 17);\n            this.rbAll.TabIndex = 3;\n            this.rbAll.TabStop = true;\n            this.rbAll.Text = \"All users\";\n            this.rbAll.UseVisualStyleBackColor = true;\n            // \n            // rbRoles\n            // \n            this.rbRoles.AutoSize = true;\n            this.rbRoles.Location = new System.Drawing.Point(15, 102);\n            this.rbRoles.Name = \"rbRoles\";\n            this.rbRoles.Size = new System.Drawing.Size(167, 17);\n            this.rbRoles.TabIndex = 4;\n            this.rbRoles.Text = \"Specified roles or user groups:\";\n            this.rbRoles.UseVisualStyleBackColor = true;\n            // \n            // txtRoles\n            // \n            this.txtRoles.Enabled = false;\n            this.txtRoles.Location = new System.Drawing.Point(33, 125);\n            this.txtRoles.Name = \"txtRoles\";\n            this.txtRoles.Size = new System.Drawing.Size(404, 20);\n            this.txtRoles.TabIndex = 6;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(30, 148);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(118, 13);\n            this.label2.TabIndex = 7;\n            this.label2.Text = \"Example: Administrators\";\n            // \n            // txtUsers\n            // \n            this.txtUsers.Enabled = false;\n            this.txtUsers.Location = new System.Drawing.Point(33, 196);\n            this.txtUsers.Name = \"txtUsers\";\n            this.txtUsers.Size = new System.Drawing.Size(404, 20);\n            this.txtUsers.TabIndex = 8;\n            // \n            // rbAnonymous\n            // \n            this.rbAnonymous.AutoSize = true;\n            this.rbAnonymous.Location = new System.Drawing.Point(15, 69);\n            this.rbAnonymous.Name = \"rbAnonymous\";\n            this.rbAnonymous.Size = new System.Drawing.Size(121, 17);\n            this.rbAnonymous.TabIndex = 9;\n            this.rbAnonymous.TabStop = true;\n            this.rbAnonymous.Text = \"All anonymous users\";\n            this.rbAnonymous.UseVisualStyleBackColor = true;\n            // \n            // rbUsers\n            // \n            this.rbUsers.AutoSize = true;\n            this.rbUsers.Location = new System.Drawing.Point(15, 173);\n            this.rbUsers.Name = \"rbUsers\";\n            this.rbUsers.Size = new System.Drawing.Size(100, 17);\n            this.rbUsers.TabIndex = 10;\n            this.rbUsers.TabStop = true;\n            this.rbUsers.Text = \"Specified users:\";\n            this.rbUsers.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(30, 219);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(115, 13);\n            this.label1.TabIndex = 11;\n            this.label1.Text = \"Example: User1, User2\";\n            // \n            // cbVerbs\n            // \n            this.cbVerbs.AutoSize = true;\n            this.cbVerbs.Location = new System.Drawing.Point(15, 253);\n            this.cbVerbs.Name = \"cbVerbs\";\n            this.cbVerbs.Size = new System.Drawing.Size(174, 17);\n            this.cbVerbs.TabIndex = 12;\n            this.cbVerbs.Text = \"Apply this rule to specific verbs:\";\n            this.cbVerbs.UseVisualStyleBackColor = true;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(30, 299);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(110, 13);\n            this.label3.TabIndex = 13;\n            this.label3.Text = \"Example: GET, POST\";\n            // \n            // txtVerbs\n            // \n            this.txtVerbs.Enabled = false;\n            this.txtVerbs.Location = new System.Drawing.Point(33, 276);\n            this.txtVerbs.Name = \"txtVerbs\";\n            this.txtVerbs.Size = new System.Drawing.Size(404, 20);\n            this.txtVerbs.TabIndex = 14;\n            // \n            // NewRuleDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(449, 421);\n            this.Controls.Add(this.txtVerbs);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.cbVerbs);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.rbUsers);\n            this.Controls.Add(this.rbAnonymous);\n            this.Controls.Add(this.txtUsers);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtRoles);\n            this.Controls.Add(this.rbRoles);\n            this.Controls.Add(this.rbAll);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewRuleDialog\";\n            this.Text = \"Add Allow Restriction Rule\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private RadioButton rbAll;\n        private RadioButton rbRoles;\n        private TextBox txtRoles;\n        private Label label2;\n        private TextBox txtUsers;\n        private RadioButton rbAnonymous;\n        private RadioButton rbUsers;\n        private Label label1;\n        private CheckBox cbVerbs;\n        private Label label3;\n        private TextBox txtVerbs;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/NewRuleDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Authorization\n{\n    using System;\n    using System.ComponentModel;\n    using System.Linq;\n    using System.Reactive.Linq;\n    using System.Reactive.Disposables;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewRuleDialog : DialogForm\n    {\n        public NewRuleDialog(IServiceProvider serviceProvider, AuthorizationRule existing, bool allowed, AuthorizationFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            var _allowed = existing == null ? allowed : existing.AccessType == 0L;\n            Text = string.Format(\"{0} {1} Authorization Rule\", existing == null ? \"Add\" : \"Edit\", _allowed ? \"Allow\" : \"Deny\");\n            txtDescription.Text = _allowed\n                ? \"Allow access to this Web content to:\"\n                : \"Deny access to this Web content to:\";\n            Item = existing ?? new AuthorizationRule(null);\n            if (existing != null)\n            {\n                txtRoles.Text = Item.Roles;\n                txtVerbs.Text = Item.Verbs;\n                if (Item.Users == \"*\")\n                {\n                    rbAll.Checked = true;\n                }\n                else if (Item.Users == \"?\")\n                {\n                    rbAnonymous.Checked = true;\n                }\n                else\n                {\n                    rbUsers.Checked = true;\n                    txtUsers.Text = Item.Users;\n                }\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.AccessType = _allowed ? 0L : 1L;\n                    Item.Roles = string.Empty;\n                    if (rbAll.Checked)\n                    {\n                        Item.Users = \"*\";\n                    }\n                    else if (rbAnonymous.Checked)\n                    {\n                        Item.Users = \"?\";\n                    }\n                    else if (rbUsers.Checked)\n                    {\n                        Item.Users = txtUsers.Text;\n                    }\n\n                    if (rbRoles.Checked)\n                    {\n                        Item.Roles = txtRoles.Text;\n                        Item.Users = string.Empty;\n                    }\n\n                    if (cbVerbs.Checked)\n                    {\n                        Item.Verbs = txtVerbs.Text;\n                    }\n\n                    if (feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"This authorization rule already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(rbAll, \"CheckedChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(rbRoles, \"CheckedChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(rbAnonymous, \"CheckedChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(rbUsers, \"CheckedChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(cbVerbs, \"CheckedChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtVerbs.Enabled = cbVerbs.Checked;\n                    txtRoles.Enabled = rbRoles.Checked;\n                    txtUsers.Enabled = rbUsers.Checked;\n                    btnOK.Enabled = (rbRoles.Checked && !string.IsNullOrWhiteSpace(txtRoles.Text))\n                        || (rbUsers.Checked && !string.IsNullOrWhiteSpace(txtUsers.Text))\n                        || rbAll.Checked\n                        || rbAnonymous.Checked;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtRoles, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtUsers, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtVerbs, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public AuthorizationRule Item { get; private set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/NewRuleDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authorization/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"fefd62be-aa83-42b9-a79d-2df0150f4f81\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.Authorization/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Authorization.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Authorization.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap authorization_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"authorization_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Authorization/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"authorization_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\authorization_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Authorization/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Caching/CachingAdvancedDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Caching\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class CachingAdvancedDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtHeaders = new System.Windows.Forms.TextBox();\n            this.txtString = new System.Windows.Forms.TextBox();\n            this.cbHeaders = new System.Windows.Forms.CheckBox();\n            this.cbString = new System.Windows.Forms.CheckBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(347, 256);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(251, 256);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.label3);\n            this.groupBox1.Controls.Add(this.label2);\n            this.groupBox1.Controls.Add(this.txtHeaders);\n            this.groupBox1.Controls.Add(this.txtString);\n            this.groupBox1.Controls.Add(this.cbHeaders);\n            this.groupBox1.Controls.Add(this.cbString);\n            this.groupBox1.Controls.Add(this.label1);\n            this.groupBox1.Location = new System.Drawing.Point(12, 12);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(430, 238);\n            this.groupBox1.TabIndex = 2;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Multiple File Versions\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(37, 183);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(217, 13);\n            this.label3.TabIndex = 6;\n            this.label3.Text = \"Example: Accept-Language, Accept-Charset\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(37, 102);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(124, 13);\n            this.label2.TabIndex = 5;\n            this.label2.Text = \"Example: Locale, Culture\";\n            // \n            // txtHeaders\n            // \n            this.txtHeaders.Enabled = false;\n            this.txtHeaders.Location = new System.Drawing.Point(40, 160);\n            this.txtHeaders.Name = \"txtHeaders\";\n            this.txtHeaders.Size = new System.Drawing.Size(321, 20);\n            this.txtHeaders.TabIndex = 4;\n            // \n            // txtString\n            // \n            this.txtString.Enabled = false;\n            this.txtString.Location = new System.Drawing.Point(40, 79);\n            this.txtString.Name = \"txtString\";\n            this.txtString.Size = new System.Drawing.Size(321, 20);\n            this.txtString.TabIndex = 3;\n            // \n            // cbHeaders\n            // \n            this.cbHeaders.AutoSize = true;\n            this.cbHeaders.Location = new System.Drawing.Point(21, 137);\n            this.cbHeaders.Name = \"cbHeaders\";\n            this.cbHeaders.Size = new System.Drawing.Size(69, 17);\n            this.cbHeaders.TabIndex = 2;\n            this.cbHeaders.Text = \"Headers:\";\n            this.cbHeaders.UseVisualStyleBackColor = true;\n            // \n            // cbString\n            // \n            this.cbString.AutoSize = true;\n            this.cbString.Location = new System.Drawing.Point(21, 56);\n            this.cbString.Name = \"cbString\";\n            this.cbString.Size = new System.Drawing.Size(136, 17);\n            this.cbString.TabIndex = 1;\n            this.cbString.Text = \"Query string variable(s):\";\n            this.cbString.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(18, 31);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(208, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Cache different versions of a file based on:\";\n            // \n            // CachingAdvancedDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(454, 291);\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"CachingAdvancedDialog\";\n            this.Text = \"Advanced Output Cache Rule Settings\";\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private GroupBox groupBox1;\n        private Label label3;\n        private Label label2;\n        private TextBox txtHeaders;\n        private TextBox txtString;\n        private CheckBox cbHeaders;\n        private CheckBox cbString;\n        private Label label1;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingAdvancedDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Caching\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class CachingAdvancedDialog : DialogForm\n    {\n        public CachingAdvancedDialog(IServiceProvider serviceProvider, CachingItem item, CachingFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbString.Checked = !string.IsNullOrWhiteSpace(item.VaryByQueryString);\n            txtString.Text = item.VaryByQueryString;\n\n            cbHeaders.Checked = !string.IsNullOrWhiteSpace(item.VaryByHeaders);\n            txtHeaders.Text = item.VaryByHeaders;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    item.VaryByHeaders = txtHeaders.Text;\n                    item.VaryByQueryString = txtString.Text;\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbString, \"CheckedChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtString.Enabled = cbString.Checked;\n                    if (!cbString.Checked)\n                    {\n                        txtString.Text = string.Empty;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbHeaders, \"CheckedChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtHeaders.Enabled = cbHeaders.Checked;\n                    if (!cbHeaders.Checked)\n                    {\n                        txtHeaders.Text = string.Empty;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingAdvancedDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Caching/CachingFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Caching\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class CachingFeature : FeatureBase<CachingItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly CachingFeature _owner;\n\n            public FeatureTaskList(CachingFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"Set\", \"Edit Feature Settings...\", string.Empty).SetUsage());\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n        }\n\n        public CachingFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            LoadItems();\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewCachingDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Set()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/caching\");\n            using (var dialog = new CachingSettingsDialog(Module, section, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected restriction?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(CachingItem item)\n        {\n            using var dialog = new NewCachingDialog(Module, item, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange([\"No Grouping\", \"Entry Type\"]);\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[3].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/caching\");\n            return section.GetCollection(\"profiles\");\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            CachingSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210522\");\n            return false;\n        }\n\n        public CachingSettingsSavedEventHandler CachingSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"Output Caching\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Caching\n{\n    using System;\n\n    using Microsoft.Web.Administration;\n\n    internal class CachingItem : IItem<CachingItem>\n    {\n        public CachingItem(ConfigurationElement element)\n        {\n            Element = element;\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inhertied\";\n            if (element == null)\n            {\n                Extension = VaryByQueryString = VaryByHeaders = string.Empty;\n                return;\n            }\n\n            Extension = (string)element[\"extension\"];\n            Policy = (long)element[\"policy\"];\n            KernelCachePolicy = (long)element[\"kernelCachePolicy\"];\n            Duration = (TimeSpan)element[\"duration\"];\n            VaryByQueryString = (string)element[\"varyByQueryString\"];\n            VaryByHeaders = (string)element[\"varyByHeaders\"];\n        }\n\n        public string VaryByHeaders { get; set; }\n\n        public string VaryByQueryString { get; set; }\n\n        public TimeSpan Duration { get; set; }\n\n        public long KernelCachePolicy { get; set; }\n\n        public long Policy { get; set; }\n\n        public string Extension { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public string Flag { get; set; }\n\n        public bool Equals(CachingItem other)\n        {\n            // all properties\n            return Match(other);\n        }\n\n        public void Apply()\n        {\n            Element[\"extension\"] = Extension;\n            Element[\"policy\"] = Policy;\n            Element[\"kernelCachePolicy\"] = KernelCachePolicy;\n            Element[\"duration\"] = Duration;\n            Element[\"varyByQueryString\"] = VaryByQueryString;\n            Element[\"varyByHeaders\"] = VaryByHeaders;\n        }\n\n        public bool Match(CachingItem other)\n        {\n            // match combined keys.\n            return other != null && other.Extension == Extension;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Caching\n{\n    using System;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class CachingModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(\n                this,\n                typeof(CachingPage),\n                \"Output Caching\",\n                \"Specify rules for caching served content in the output cache\",\n                Resources.caching_36,\n                Resources.caching_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Caching\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class CachingModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(CachingModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Caching\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CachingPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chExtension = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chUser = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chKernel = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chExtension,\n            this.chUser,\n            this.chKernel,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chExtension\n            // \n            this.chExtension.Text = \"Extension\";\n            this.chExtension.Width = 120;\n            // \n            // chUser\n            // \n            this.chUser.Text = \"User-Mode Policy\";\n            this.chUser.Width = 120;\n            // \n            // chKernel\n            // \n            this.chKernel.Text = \"Kernel-Mode Policy\";\n            this.chKernel.Width = 120;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroupSelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(567, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to configure output cache settings and to specify rules for cach\" +\n    \"ing served content in the output cache.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(161, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Output Caching\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 120;\n            // \n            // CachingPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"CachingPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private ColumnHeader chExtension;\n        private ColumnHeader chUser;\n        private ColumnHeader chKernel;\n        private ColumnHeader chType;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Caching\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class CachingPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly CachingPage _owner;\n\n            public PageTaskList(CachingPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class CachingListViewItem : ListViewItem, IFeatureListViewItem<CachingItem>\n        {\n            public CachingItem Item { get; }\n\n            private readonly CachingPage _page;\n\n            public CachingListViewItem(CachingItem item, CachingPage page)\n                : base(item.Extension)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, ToString(item.Policy)));\n                SubItems.Add(new ListViewSubItem(this, ToString(item.KernelCachePolicy)));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n\n            private static string ToString(long policy)\n            {\n                switch (policy)\n                {\n                    case 0L:\n                        return \"Do not cache\";\n                    case 1L:\n                        return \"Cache until change\";\n                    case 2:\n                        return \"Cache for time period\";\n                    case 3:\n                        return \"Prevent all caching\";\n                }\n\n                return string.Empty;\n            }\n        }\n\n        private CachingFeature _feature;\n        private PageTaskList _taskList;\n\n        public CachingPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new CachingFeature(Module);\n            _feature.CachingSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new CachingListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (CachingListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroupSelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(\n                listView1,\n                cbGroup.SelectedItem.ToString(),\n                _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>602, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>497, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Caching/CachingSettingsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Caching\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class CachingSettingsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.cbUser = new System.Windows.Forms.CheckBox();\n            this.cbKernel = new System.Windows.Forms.CheckBox();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtSize = new System.Windows.Forms.TextBox();\n            this.cbLimit = new System.Windows.Forms.CheckBox();\n            this.txtLimit = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // cbUser\n            // \n            this.cbUser.AutoSize = true;\n            this.cbUser.Location = new System.Drawing.Point(12, 12);\n            this.cbUser.Name = \"cbUser\";\n            this.cbUser.Size = new System.Drawing.Size(92, 17);\n            this.cbUser.TabIndex = 1;\n            this.cbUser.Text = \"Enable cache\";\n            this.cbUser.UseVisualStyleBackColor = true;\n            // \n            // cbKernel\n            // \n            this.cbKernel.AutoSize = true;\n            this.cbKernel.Location = new System.Drawing.Point(12, 49);\n            this.cbKernel.Name = \"cbKernel\";\n            this.cbKernel.Size = new System.Drawing.Size(124, 17);\n            this.cbKernel.TabIndex = 2;\n            this.cbKernel.Text = \"Enable kernel cache\";\n            this.cbKernel.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(227, 191);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(131, 191);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 83);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(205, 13);\n            this.label1.TabIndex = 6;\n            this.label1.Text = \"Maximum cached response size (in bytes):\";\n            // \n            // txtSize\n            // \n            this.txtSize.Enabled = false;\n            this.txtSize.Location = new System.Drawing.Point(12, 99);\n            this.txtSize.Name = \"txtSize\";\n            this.txtSize.Size = new System.Drawing.Size(249, 20);\n            this.txtSize.TabIndex = 7;\n            // \n            // cbLimit\n            // \n            this.cbLimit.AutoSize = true;\n            this.cbLimit.Enabled = false;\n            this.cbLimit.Location = new System.Drawing.Point(12, 125);\n            this.cbLimit.Name = \"cbLimit\";\n            this.cbLimit.Size = new System.Drawing.Size(137, 17);\n            this.cbLimit.TabIndex = 8;\n            this.cbLimit.Text = \"Cache size limit (in MB):\";\n            this.cbLimit.UseVisualStyleBackColor = true;\n            // \n            // txtLimit\n            // \n            this.txtLimit.Enabled = false;\n            this.txtLimit.Location = new System.Drawing.Point(30, 148);\n            this.txtLimit.Name = \"txtLimit\";\n            this.txtLimit.Size = new System.Drawing.Size(245, 20);\n            this.txtLimit.TabIndex = 9;\n            // \n            // CachingSettingsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(334, 226);\n            this.Controls.Add(this.txtLimit);\n            this.Controls.Add(this.cbLimit);\n            this.Controls.Add(this.txtSize);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.cbKernel);\n            this.Controls.Add(this.cbUser);\n            this.Name = \"CachingSettingsDialog\";\n            this.Text = \"Edit Output Cache Settings\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n        private CheckBox cbUser;\n        private CheckBox cbKernel;\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private TextBox txtSize;\n        private CheckBox cbLimit;\n        private TextBox txtLimit;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingSettingsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Caching\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class CachingSettingsDialog : DialogForm\n    {\n        public CachingSettingsDialog(IServiceProvider serviceProvider, ConfigurationElement element, CachingFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbUser.Checked = (bool)element[\"enabled\"];\n            cbKernel.Checked = (bool)element[\"enableKernelCache\"];\n            txtSize.Text = element[\"maxResponseSize\"].ToString();\n            var limit = (uint)element[\"maxCacheSize\"];\n            cbLimit.Checked = limit != 0;\n            if (cbLimit.Checked)\n            {\n                txtLimit.Text = limit.ToString();\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .Subscribe(evt =>\n                {\n                    element[\"enableKernelCache\"] = cbKernel.Checked;\n                    element[\"enabled\"] = cbUser.Checked;\n                    element[\"maxResponseSize\"] = uint.Parse(txtSize.Text);\n                    if (!cbLimit.Checked)\n                    {\n                        element[\"maxCacheSize\"] = 0U;\n                    }\n                    else\n                    {\n                        element[\"maxCacheSize\"] = uint.Parse(txtLimit.Text);\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/CachingSettingsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Caching/CachingSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Caching\n{\n    public delegate void CachingSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/JexusManager.Features.Caching.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Caching</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Caching/NewCachingDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Caching\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewCachingDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtExtension = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbUser = new System.Windows.Forms.CheckBox();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.btnAdvanced = new System.Windows.Forms.Button();\n            this.txtUserTime = new System.Windows.Forms.TextBox();\n            this.rbUserNo = new System.Windows.Forms.RadioButton();\n            this.rbUserTime = new System.Windows.Forms.RadioButton();\n            this.rbUserFile = new System.Windows.Forms.RadioButton();\n            this.groupBox2 = new System.Windows.Forms.GroupBox();\n            this.txtKernelTime = new System.Windows.Forms.TextBox();\n            this.rbKernelNo = new System.Windows.Forms.RadioButton();\n            this.rbKernelTime = new System.Windows.Forms.RadioButton();\n            this.rbKernelFile = new System.Windows.Forms.RadioButton();\n            this.cbKernel = new System.Windows.Forms.CheckBox();\n            this.groupBox1.SuspendLayout();\n            this.groupBox2.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(377, 506);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(276, 506);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(9, 48);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(113, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Example: .aspx or .axd\";\n            // \n            // txtExtension\n            // \n            this.txtExtension.Location = new System.Drawing.Point(12, 25);\n            this.txtExtension.Name = \"txtExtension\";\n            this.txtExtension.Size = new System.Drawing.Size(338, 20);\n            this.txtExtension.TabIndex = 8;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 9);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(103, 13);\n            this.label3.TabIndex = 11;\n            this.label3.Text = \"File name extension:\";\n            // \n            // cbUser\n            // \n            this.cbUser.AutoSize = true;\n            this.cbUser.Location = new System.Drawing.Point(12, 89);\n            this.cbUser.Name = \"cbUser\";\n            this.cbUser.Size = new System.Drawing.Size(118, 17);\n            this.cbUser.TabIndex = 16;\n            this.cbUser.Text = \"User-mode caching\";\n            this.cbUser.UseVisualStyleBackColor = true;\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.btnAdvanced);\n            this.groupBox1.Controls.Add(this.txtUserTime);\n            this.groupBox1.Controls.Add(this.rbUserNo);\n            this.groupBox1.Controls.Add(this.rbUserTime);\n            this.groupBox1.Controls.Add(this.rbUserFile);\n            this.groupBox1.Location = new System.Drawing.Point(15, 112);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(438, 192);\n            this.groupBox1.TabIndex = 17;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"File Cache Monitoring\";\n            // \n            // btnAdvanced\n            // \n            this.btnAdvanced.Location = new System.Drawing.Point(280, 163);\n            this.btnAdvanced.Name = \"btnAdvanced\";\n            this.btnAdvanced.Size = new System.Drawing.Size(152, 23);\n            this.btnAdvanced.TabIndex = 8;\n            this.btnAdvanced.Text = \"Advanced...\";\n            this.btnAdvanced.UseVisualStyleBackColor = true;\n            // \n            // txtUserTime\n            // \n            this.txtUserTime.Location = new System.Drawing.Point(35, 76);\n            this.txtUserTime.Name = \"txtUserTime\";\n            this.txtUserTime.Size = new System.Drawing.Size(190, 20);\n            this.txtUserTime.TabIndex = 7;\n            // \n            // rbUserNo\n            // \n            this.rbUserNo.AutoSize = true;\n            this.rbUserNo.Location = new System.Drawing.Point(15, 125);\n            this.rbUserNo.Name = \"rbUserNo\";\n            this.rbUserNo.Size = new System.Drawing.Size(116, 17);\n            this.rbUserNo.TabIndex = 6;\n            this.rbUserNo.TabStop = true;\n            this.rbUserNo.Text = \"Prevent all caching\";\n            this.rbUserNo.UseVisualStyleBackColor = true;\n            // \n            // rbUserTime\n            // \n            this.rbUserTime.AutoSize = true;\n            this.rbUserTime.Location = new System.Drawing.Point(15, 53);\n            this.rbUserTime.Name = \"rbUserTime\";\n            this.rbUserTime.Size = new System.Drawing.Size(155, 17);\n            this.rbUserTime.TabIndex = 5;\n            this.rbUserTime.TabStop = true;\n            this.rbUserTime.Text = \"At time intervals (hh:mm:ss):\";\n            this.rbUserTime.UseVisualStyleBackColor = true;\n            // \n            // rbUserFile\n            // \n            this.rbUserFile.AutoSize = true;\n            this.rbUserFile.Location = new System.Drawing.Point(15, 19);\n            this.rbUserFile.Name = \"rbUserFile\";\n            this.rbUserFile.Size = new System.Drawing.Size(166, 17);\n            this.rbUserFile.TabIndex = 4;\n            this.rbUserFile.TabStop = true;\n            this.rbUserFile.Text = \"Using file change notifications\";\n            this.rbUserFile.UseVisualStyleBackColor = true;\n            // \n            // groupBox2\n            // \n            this.groupBox2.Controls.Add(this.txtKernelTime);\n            this.groupBox2.Controls.Add(this.rbKernelNo);\n            this.groupBox2.Controls.Add(this.rbKernelTime);\n            this.groupBox2.Controls.Add(this.rbKernelFile);\n            this.groupBox2.Location = new System.Drawing.Point(15, 333);\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.Size = new System.Drawing.Size(438, 164);\n            this.groupBox2.TabIndex = 19;\n            this.groupBox2.TabStop = false;\n            this.groupBox2.Text = \"File Cache Monitoring\";\n            // \n            // txtKernelTime\n            // \n            this.txtKernelTime.Location = new System.Drawing.Point(35, 76);\n            this.txtKernelTime.Name = \"txtKernelTime\";\n            this.txtKernelTime.Size = new System.Drawing.Size(190, 20);\n            this.txtKernelTime.TabIndex = 3;\n            // \n            // rbKernelNo\n            // \n            this.rbKernelNo.AutoSize = true;\n            this.rbKernelNo.Location = new System.Drawing.Point(15, 125);\n            this.rbKernelNo.Name = \"rbKernelNo\";\n            this.rbKernelNo.Size = new System.Drawing.Size(116, 17);\n            this.rbKernelNo.TabIndex = 2;\n            this.rbKernelNo.TabStop = true;\n            this.rbKernelNo.Text = \"Prevent all caching\";\n            this.rbKernelNo.UseVisualStyleBackColor = true;\n            // \n            // rbKernelTime\n            // \n            this.rbKernelTime.AutoSize = true;\n            this.rbKernelTime.Location = new System.Drawing.Point(15, 53);\n            this.rbKernelTime.Name = \"rbKernelTime\";\n            this.rbKernelTime.Size = new System.Drawing.Size(152, 17);\n            this.rbKernelTime.TabIndex = 1;\n            this.rbKernelTime.TabStop = true;\n            this.rbKernelTime.Text = \"At time intervals (hh:mm:ss)\";\n            this.rbKernelTime.UseVisualStyleBackColor = true;\n            // \n            // rbKernelFile\n            // \n            this.rbKernelFile.AutoSize = true;\n            this.rbKernelFile.Location = new System.Drawing.Point(15, 19);\n            this.rbKernelFile.Name = \"rbKernelFile\";\n            this.rbKernelFile.Size = new System.Drawing.Size(166, 17);\n            this.rbKernelFile.TabIndex = 0;\n            this.rbKernelFile.TabStop = true;\n            this.rbKernelFile.Text = \"Using file change notifications\";\n            this.rbKernelFile.UseVisualStyleBackColor = true;\n            // \n            // cbKernel\n            // \n            this.cbKernel.AutoSize = true;\n            this.cbKernel.Location = new System.Drawing.Point(12, 310);\n            this.cbKernel.Name = \"cbKernel\";\n            this.cbKernel.Size = new System.Drawing.Size(126, 17);\n            this.cbKernel.TabIndex = 18;\n            this.cbKernel.Text = \"Kernel-mode caching\";\n            this.cbKernel.UseVisualStyleBackColor = true;\n            // \n            // NewCachingDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(484, 541);\n            this.Controls.Add(this.groupBox2);\n            this.Controls.Add(this.cbKernel);\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.cbUser);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtExtension);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewCachingDialog\";\n            this.Text = \"Add Cache Rule\";\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.groupBox2.ResumeLayout(false);\n            this.groupBox2.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtExtension;\n        private Label label3;\n        private CheckBox cbUser;\n        private GroupBox groupBox1;\n        private Button btnAdvanced;\n        private TextBox txtUserTime;\n        private RadioButton rbUserNo;\n        private RadioButton rbUserTime;\n        private RadioButton rbUserFile;\n        private GroupBox groupBox2;\n        private TextBox txtKernelTime;\n        private RadioButton rbKernelNo;\n        private RadioButton rbKernelTime;\n        private RadioButton rbKernelFile;\n        private CheckBox cbKernel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/NewCachingDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Caching\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewCachingDialog : DialogForm\n    {\n        public NewCachingDialog(IServiceProvider serviceProvider, CachingItem existing, CachingFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add Cache Rule\" : \"Edit Cache Rule\";\n            Item = existing ?? new CachingItem(null);\n            if (existing == null)\n            {\n                return;\n            }\n\n            txtExtension.Text = Item.Extension;\n            cbUser.Checked = Item.Policy != 0L;\n            rbUserFile.Checked = Item.Policy == 1L;\n            rbUserTime.Checked = Item.Policy == 2L;\n            rbUserNo.Checked = Item.Policy == 3L;\n\n            cbKernel.Checked = Item.KernelCachePolicy != 0L;\n            rbKernelFile.Checked = Item.KernelCachePolicy == 1L;\n            rbKernelTime.Checked = Item.KernelCachePolicy == 2L;\n            rbKernelNo.Checked = Item.KernelCachePolicy == 3L;\n\n            txtKernelTime.Text = txtUserTime.Text = Item.Duration.ToString();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Extension = txtExtension.Text;\n                    Item.Duration = TimeSpan.Parse(txtKernelTime.Text);\n                    if (!cbUser.Checked)\n                    {\n                        Item.Policy = 0L;\n                    }\n                    else if (rbUserFile.Checked)\n                    {\n                        Item.Policy = 1L;\n                    }\n                    else if (rbUserTime.Checked)\n                    {\n                        Item.Policy = 2L;\n                    }\n                    else if (rbUserNo.Checked)\n                    {\n                        Item.Policy = 3L;\n                    }\n\n                    if (!cbKernel.Checked)\n                    {\n                        Item.KernelCachePolicy = 0L;\n                    }\n                    else if (rbKernelFile.Checked)\n                    {\n                        Item.KernelCachePolicy = 1L;\n                    }\n                    else if (rbKernelTime.Checked)\n                    {\n                        Item.KernelCachePolicy = 2L;\n                    }\n                    else if (rbKernelNo.Checked)\n                    {\n                        Item.KernelCachePolicy = 3L;\n                    }\n\n                    if (feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"This rule already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnAdvanced, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using var dialog = new CachingAdvancedDialog(ServiceProvider, Item, feature);\n                    dialog.ShowDialog();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtExtension, \"TextChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtExtension.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public CachingItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/NewCachingDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Caching/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"30a30352-ca83-446e-8af8-598ea7397988\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.Caching/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Caching.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Caching.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap caching_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"caching_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Caching/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"caching_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\caching_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Caching/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Certificates/CertificatesFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nusing System;\nusing System.ComponentModel;\nusing System.Security.Cryptography;\nusing System.Windows.Forms;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\nusing System.Reflection;\nusing System.Collections;\nusing Microsoft.Web.Management.Client.Win32;\nusing System.Security.Cryptography.X509Certificates;\nusing Microsoft.Web.Management.Client;\nusing System.Resources;\nusing System.Collections.Generic;\nusing JexusManager.Services;\nusing Microsoft.Web.Administration;\nusing System.Diagnostics;\nusing JexusManager.Features.Certificates.Wizards.CertificateRequestWizard;\nusing JexusManager.Features.Certificates.Wizards.CertificateRenewWizard;\n\nnamespace JexusManager.Features.Certificates\n{\n    public class CertificatesFeature : FeatureBase<CertificatesItem>\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"CertificatesFeature\");\n\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly CertificatesFeature _owner;\n\n            public FeatureTaskList(CertificatesFeature owner)\n            {\n                _owner = owner;\n            }\n\n            private const string LocalhostIssuer = \"CN=localhost\";\n            private readonly string _localMachineIssuer = $\"CN={Environment.MachineName}\";\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Import\", \"Import...\", string.Empty).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"CreateRequest\", \"Create Certificate Request...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"Complete\", \"Complete Certificate Request...\", string.Empty).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"CreateDomain\", \"Create Domain Certificate...\", string.Empty).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"CreateSelf\", \"Create Self-Signed Certificate...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"View\", \"View...\", string.Empty).SetUsage());\n                    X509Certificate2 certificate = _owner.SelectedItem.Item;\n                    if (certificate.HasPrivateKey)\n                    {\n                        try\n                        {\n                            ECDsaCng eCdsa = certificate.GetECDsaPrivateKey() as ECDsaCng;\n                            if (eCdsa != null)\n                            {\n                                if (eCdsa.Key.ExportPolicy.HasFlag(CngExportPolicies.AllowExport))\n                                {\n                                    result.Add(new MethodTaskItem(\"Export\", \"Export...\", string.Empty).SetUsage());\n                                    if (certificate.Issuer != LocalhostIssuer && certificate.Issuer != _localMachineIssuer)\n                                    {\n                                        // result.Add(new MethodTaskItem(\"Renew\", \"Renew...\", string.Empty).SetUsage());\n                                    }\n                                }\n                            }\n                            else if (certificate.GetRSAPrivateKey() is RSACng cng)\n                            {\n                                if (cng.Key.ExportPolicy.HasFlag(CngExportPolicies.AllowExport))\n                                {\n                                    result.Add(new MethodTaskItem(\"Export\", \"Export...\", string.Empty).SetUsage());\n                                    if (certificate.Issuer != LocalhostIssuer && certificate.Issuer != _localMachineIssuer)\n                                    {\n                                        // result.Add(new MethodTaskItem(\"Renew\", \"Renew...\", string.Empty).SetUsage());\n                                    }\n                                }\n                            }\n                            else if (certificate.GetRSAPrivateKey() is RSACryptoServiceProvider keyInfo)\n                            {\n                                if (keyInfo.CspKeyContainerInfo.Exportable)\n                                {\n                                    result.Add(new MethodTaskItem(\"Export\", \"Export...\", string.Empty).SetUsage());\n                                    if (certificate.Issuer != LocalhostIssuer && certificate.Issuer != _localMachineIssuer)\n                                    {\n                                        // result.Add(new MethodTaskItem(\"Renew\", \"Renew...\", string.Empty).SetUsage());\n                                    }\n                                }\n                            }\n                        }\n                        catch (CryptographicException ex)\n                        {\n                            if (ex.HResult != Microsoft.Web.Administration.NativeMethods.BadKeySet)\n                            {\n                                // TODO: add CNG support.\n                                _logger.LogError(ex, \"Cryptographic error in certificates feature. HResult: {HResult}\", ex.HResult);\n                            }\n                        }\n                    }\n\n                    result.Add(RemoveTaskItem);\n                    if (certificate.Issuer == LocalhostIssuer || certificate.Issuer == _localMachineIssuer || certificate.Issuer == certificate.Subject)\n                    {\n                        X509Chain chain = new X509Chain();\n                        chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;\n                        chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;\n                        chain.Build(certificate);\n                        if (chain.ChainStatus.Length > 0) // not trusted yet\n                        {\n                            result.Add(new MethodTaskItem(\"Trust\", \"Trust Self-Signed Certificate\", string.Empty).SetUsage());\n                        }\n                    }\n                }\n\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                if (!_owner.AutomicRebindEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable Automatic Rebind of Renewed Certificate\", string.Empty).SetUsage());\n                }\n\n                if (_owner.AutomicRebindEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable Automatic Rebind of Renewed Certificate\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Import()\n            {\n                _owner.Import();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void View()\n            {\n                _owner.View();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Export()\n            {\n                _owner.Export();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Renew()\n            {\n                _owner.Renew();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void CreateRequest()\n            {\n                _owner.CreateRequest();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Complete()\n            {\n                _owner.Complete();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void CreateDomain()\n            {\n                _owner.CreateDomain();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void CreateSelf()\n            {\n                _owner.CreateSelf();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Trust()\n            {\n                _owner.Trust();\n            }\n        }\n\n        public CertificatesFeature(Microsoft.Web.Management.Client.Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            Items = new List<CertificatesItem>();\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            if (service.ServerManager.Mode == WorkingMode.Jexus)\n            {\n                var server = (JexusServerManager)service.Server;\n                var certificate = AsyncHelper.RunSync(() => server.GetCertificateAsync());\n                if (certificate != null)\n                {\n                    Items.Add(new CertificatesItem(certificate, \"Jexus\", this));\n                }\n            }\n            else\n            {\n                X509Store personal = new X509Store(\"MY\", StoreLocation.LocalMachine);\n                personal.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);\n                foreach (var certificate in personal.Certificates)\n                {\n                    Items.Add(new CertificatesItem(certificate, \"Personal\", this));\n                }\n\n                personal.Close();\n\n                if (Environment.OSVersion.Version >= Version.Parse(\"6.2\"))\n                {\n                    // IMPORTANT: WebHosting store is available since Windows 8.\n                    X509Store hosting = new X509Store(\"WebHosting\", StoreLocation.LocalMachine);\n                    try\n                    {\n                        hosting.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);\n                        foreach (var certificate in hosting.Certificates)\n                        {\n                            Items.Add(new CertificatesItem(certificate, \"WebHosting\", this));\n                        }\n\n                        hosting.Close();\n                    }\n                    catch (CryptographicException ex)\n                    {\n                        if (ex.HResult != Microsoft.Web.Administration.NativeMethods.NonExistingStore)\n                        {\n                            _logger.LogError(ex, \"CryptographicException {HResult} from CertificatesFeature.\", ex.HResult);\n                            throw;\n                        }\n                    }\n                }\n            }\n\n            OnCertificatesSettingsSaved();\n        }\n\n        public void Import()\n        {\n            using (var dialog = new ImportCertificateDialog(Module, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                Items.Add(new CertificatesItem(dialog.Item, dialog.Store, this));\n            }\n            OnCertificatesSettingsSaved();\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove this certificate, and permanently remove it from the certificate store?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            DeleteCertificate();\n        }\n\n        private void DeleteCertificate()\n        {\n            try\n            {\n                // remove certificate and mapping\n                using var process = new Process();\n                var start = process.StartInfo;\n                start.Verb = \"runas\";\n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                start.Arguments =\n                    $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /h:\\\"{SelectedItem.Item.Thumbprint}\\\" /s:{(SelectedItem.Store == \"Personal\" ? \"MY\" : \"WebHosting\")}\\\"\";\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                process.Start();\n                process.WaitForExit();\n\n                if (process.ExitCode == 0)\n                {\n                    Items.Remove(SelectedItem);\n                    SelectedItem = null;\n                    OnCertificatesSettingsSaved();\n                }\n            }\n            catch (Win32Exception ex)\n            {\n                var message = Microsoft.Web.Administration.NativeMethods.KnownCases(ex.NativeErrorCode);\n                if (string.IsNullOrEmpty(message))\n                {\n                    _logger.LogError(ex, \"Win32 error deleting certificate. Native error code: {Code}\", ex.NativeErrorCode);\n                }\n                else\n                {\n                    var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    dialog.ShowError(ex, message, Name, false);\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error deleting certificate\");\n            }\n        }\n\n        protected void OnCertificatesSettingsSaved()\n        {\n            CertificatesSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210528\");\n            return false;\n        }\n\n        private void Disable()\n        {\n        }\n\n        private void Enable()\n        {\n        }\n\n        private void CreateSelf()\n        {\n            using (var dialog = new SelfCertificateDialog(Module, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                Items.Add(new CertificatesItem(dialog.Item, dialog.Store, this));\n            }\n            OnCertificatesSettingsSaved();\n        }\n\n        private void CreateDomain()\n        {\n        }\n\n        private void Complete()\n        {\n            using (var dialog = new CompleteRequestDialog(Module, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                Items.Add(new CertificatesItem(dialog.Item, dialog.Store, this));\n            }\n            OnCertificatesSettingsSaved();\n        }\n\n        private void CreateRequest()\n        {\n            using var wizard = new CertificateRequestWizard(Module, this);\n            wizard.ShowDialog();\n        }\n\n        private void Export()\n        {\n            using var dialog = new ExportCertificateDialog(SelectedItem.Item, Module, this);\n            dialog.ShowDialog();\n        }\n\n        private void Renew()\n        {\n            using var wizard = new CertificateRenewWizard(SelectedItem.Item, Module, this);\n            wizard.ShowDialog();\n        }\n\n        internal void View()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(CertificatesItem item)\n        {\n            DialogHelper.DisplayCertificate(item.Item, IntPtr.Zero);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange([\"No Grouping\", \"Expiration Date\", \"Issued By\", \"Certificate Store\"]);\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Expiration Date\":\n                    return item.SubItems[3].Text;\n                case \"Issued By\":\n                    return item.SubItems[2].Text;\n                case \"Certificate Store\":\n                    return item.SubItems[5].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        private void Trust()\n        {\n            var cert = SelectedItem.Item;\n            var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);\n            store.Open(OpenFlags.ReadWrite);\n            if (store.Certificates.Find(X509FindType.FindByThumbprint, cert.Thumbprint, false).Count == 0)\n            {\n                try\n                {\n                    store.Add(cert);\n                    var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    dialog.ShowMessage(\"This certificate is now trusted by the logon user.\", Name);\n                }\n                catch (CryptographicException ex)\n                {\n                    if (ex.HResult != Microsoft.Web.Administration.NativeMethods.UserCancelled)\n                    {\n                        var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                        dialog.ShowMessage($\"An unexpected error happened. HResult is {ex.HResult}. Contact your system administrator.\", Name,\n                            MessageBoxButtons.OK, MessageBoxIcon.Error);\n                    }\n\n                    // add operation cancelled.\n                }\n            }\n\n            store.Close();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n        }\n\n        public bool AutomicRebindEnabled { get; set; }\n\n        public CertificatesSettingsSavedEventHandler CertificatesSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get\n            {\n                return \"Server Certificates\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/CertificatesItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates\n{\n    using System.Security.Cryptography.X509Certificates;\n    using Microsoft.Web.Administration;\n\n    public class CertificatesItem : IItem<CertificatesItem>\n    {\n        public CertificatesItem(X509Certificate2 certificate, string store, CertificatesFeature feature)\n        {\n            Item = certificate;\n            Store = store;\n            Feature = feature;\n        }\n\n        public X509Certificate2 Item { get; set; }\n        public string Store { get; set; }\n        public CertificatesFeature Feature { get; private set; }\n        public string Flag { get; set; }\n        public ConfigurationElement Element { get; set; }\n\n        public void Apply()\n        {\n        }\n\n        public bool Equals(CertificatesItem other)\n        {\n            return other != null && Equals(other.Item);\n        }\n\n        public bool Equals(X509Certificate2 other)\n        {\n            return other != null && other.GetCertHashString() == Item.GetCertHashString();\n        }\n\n        public bool Match(CertificatesItem other)\n        {\n            return Equals(other);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/CertificatesModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class CertificatesModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(CertificatesPage), \"Server Certificates\",\n                \"Request and manage certificates for websites that use SSL\", Resources.certificates_36,\n                Resources.certificates_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/CertificatesModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class CertificatesModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(CertificatesModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return scope == ManagementScope.Server;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/CertificatesPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CertificatesPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chIssuedTo = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chIssuedBy = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chExpiration = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chHash = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chStore = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbFilter = new System.Windows.Forms.ToolStripComboBox();\n            this.btnGo = new System.Windows.Forms.ToolStripSplitButton();\n            this.protocolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\n            this.btnShowAll = new System.Windows.Forms.ToolStripButton();\n            this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"contextMenuStrip1\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 9;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chIssuedTo,\n            this.chIssuedBy,\n            this.chExpiration,\n            this.chHash,\n            this.chStore});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.listView1_SelectedIndexChanged);            \n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 180;\n            // \n            // chIssuedTo\n            // \n            this.chIssuedTo.Text = \"Issued To\";\n            this.chIssuedTo.Width = 180;\n            // \n            // chIssuedBy\n            // \n            this.chIssuedBy.Text = \"Issued By\";\n            this.chIssuedBy.Width = 180;\n            // \n            // chExpiration\n            // \n            this.chExpiration.Text = \"Expiration Date\";\n            this.chExpiration.Width = 120;\n            // \n            // chHash\n            // \n            this.chHash.Text = \"Certificate Hash\";\n            this.chHash.Width = 180;\n            // \n            // chStore\n            // \n            this.chStore.Text = \"Certificate Store\";\n            this.chStore.Width = 120;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbFilter,\n            this.btnGo,\n            this.btnShowAll,\n            this.toolStripSeparator7,\n            this.toolStripLabel3,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(36, 22);\n            this.toolStripLabel2.Text = \"Filter:\";\n            // \n            // cbFilter\n            // \n            this.cbFilter.Name = \"cbFilter\";\n            this.cbFilter.Size = new System.Drawing.Size(121, 25);\n            // \n            // btnGo\n            // \n            this.btnGo.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.protocolToolStripMenuItem});\n            this.btnGo.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnGo.Name = \"btnGo\";\n            this.btnGo.Size = new System.Drawing.Size(54, 22);\n            this.btnGo.Text = \"Go\";\n            this.btnGo.ToolTipText = \"Go\";\n            // \n            // protocolToolStripMenuItem\n            // \n            this.protocolToolStripMenuItem.Name = \"protocolToolStripMenuItem\";\n            this.protocolToolStripMenuItem.Size = new System.Drawing.Size(88, 22);\n            this.protocolToolStripMenuItem.Text = \"All\";\n            // \n            // btnShowAll\n            // \n            this.btnShowAll.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnShowAll.Name = \"btnShowAll\";\n            this.btnShowAll.Size = new System.Drawing.Size(73, 22);\n            this.btnShowAll.Text = \"Show All\";\n            // \n            // toolStripSeparator7\n            // \n            this.toolStripSeparator7.Name = \"toolStripSeparator7\";\n            this.toolStripSeparator7.Size = new System.Drawing.Size(6, 25);\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(545, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to request and manage certificates that the Web server can use w\" +\n    \"ith websites configured for SSL.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 8;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(189, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Server Certificates\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // CertificatesPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"CertificatesPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chIssuedTo;\n        private ColumnHeader chIssuedBy;\n        private ColumnHeader chExpiration;\n        private ColumnHeader chHash;\n        private ColumnHeader chStore;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ContextMenuStrip cmsActionPanel;\n        private PictureBox pictureBox1;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbFilter;\n        private ToolStripSplitButton btnGo;\n        private ToolStripMenuItem protocolToolStripMenuItem;\n        private ToolStripButton btnShowAll;\n        private ToolStripSeparator toolStripSeparator7;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/CertificatesPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class CertificatesPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly CertificatesPage _owner;\n\n            public PageTaskList(CertificatesPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class CertificatesListViewItem : ListViewItem, IFeatureListViewItem<CertificatesItem>\n        {\n            public CertificatesItem Item { get; }\n            private readonly CertificatesPage _page;\n\n            public CertificatesListViewItem(CertificatesItem item, CertificatesPage page)\n                : base(item.Item.FriendlyName)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Item.GetNameInfo(X509NameType.SimpleName, false)));\n                SubItems.Add(new ListViewSubItem(this, item.Item.GetNameInfo(X509NameType.SimpleName, true)));\n                SubItems.Add(new ListViewSubItem(this, item.Item.GetExpirationDateString()));\n                SubItems.Add(new ListViewSubItem(this, item.Item.GetCertHashString()));\n                SubItems.Add(new ListViewSubItem(this, item.Store));\n            }\n        }\n\n        private CertificatesFeature _feature;\n        private PageTaskList _taskList;\n\n        public CertificatesPage()\n        {\n            InitializeComponent();\n            btnGo.Image = DefaultTaskList.GoImage;\n            btnShowAll.Image = DefaultTaskList.ShowAllImage;\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new CertificatesFeature(Module);\n            _feature.CertificatesSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new CertificatesListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (CertificatesListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void listView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/CertificatesPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>122, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>451, 56</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>179</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/CertificatesSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates\n{\n    public delegate void CertificatesSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/CompleteRequestDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CompleteRequestDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.txtTitle = new System.Windows.Forms.Label();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbStore = new System.Windows.Forms.ComboBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.label4 = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.panel1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.SuspendLayout();\n            // \n            // panel1\n            // \n            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel1.BackColor = System.Drawing.Color.White;\n            this.panel1.Controls.Add(this.pictureBox1);\n            this.panel1.Controls.Add(this.txtTitle);\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(670, 65);\n            this.panel1.TabIndex = 11;\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Image = global::JexusManager.Features.Certificates.Properties.Resources.certificates_48;\n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(48, 48);\n            this.pictureBox1.TabIndex = 1;\n            this.pictureBox1.TabStop = false;\n            // \n            // txtTitle\n            // \n            this.txtTitle.AutoSize = true;\n            this.txtTitle.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.txtTitle.Location = new System.Drawing.Point(87, 22);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(326, 24);\n            this.txtTitle.TabIndex = 2;\n            this.txtTitle.Text = \"Specify Certificate Authority Response\";\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(23, 82);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(502, 26);\n            this.label1.TabIndex = 12;\n            this.label1.Text = \"Specify a previously created certificate request by retrieving the file that cont\" +\n    \"ains the certificate authority\\'s\\r\\nresponse.\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(23, 180);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(75, 13);\n            this.label2.TabIndex = 13;\n            this.label2.Text = \"Friendly name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(26, 196);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(238, 20);\n            this.txtName.TabIndex = 2;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(23, 246);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(229, 13);\n            this.label3.TabIndex = 15;\n            this.label3.Text = \"Select a certificate store for the new certificate:\";\n            // \n            // cbStore\n            // \n            this.cbStore.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbStore.FormattingEnabled = true;\n            this.cbStore.Items.AddRange(new object[] {\n            \"Personal\",\n            \"Web Hosting\"});\n            this.cbStore.Location = new System.Drawing.Point(26, 262);\n            this.cbStore.Name = \"cbStore\";\n            this.cbStore.Size = new System.Drawing.Size(238, 21);\n            this.cbStore.TabIndex = 3;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(466, 441);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(85, 23);\n            this.btnOK.TabIndex = 4;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(557, 441);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(85, 23);\n            this.btnCancel.TabIndex = 5;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(23, 119);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(278, 13);\n            this.label4.TabIndex = 19;\n            this.label4.Text = \"File name containing the certification authority\\'s response:\";\n            // \n            // txtPath\n            // \n            this.txtPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtPath.Location = new System.Drawing.Point(26, 135);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(360, 20);\n            this.txtPath.TabIndex = 0;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(392, 133);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(30, 23);\n            this.btnBrowse.TabIndex = 1;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // CompleteRequestDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(654, 476);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.cbStore);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.panel1);\n            this.Name = \"CompleteRequestDialog\";\n            this.Text = \"Complete Certificate Request\";\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Panel panel1;\n        private PictureBox pictureBox1;\n        private Label txtTitle;\n        private Label label1;\n        private Label label2;\n        private TextBox txtName;\n        private Label label3;\n        private ComboBox cbStore;\n        private Button btnOK;\n        private Button btnCancel;\n        private Label label4;\n        private TextBox txtPath;\n        private Button btnBrowse;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/CompleteRequestDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\nusing Microsoft.Web.Administration;\n\nnamespace JexusManager.Features.Certificates\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n    using Microsoft.Extensions.Logging;\n    using JexusManager;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using Mono.Security.Authenticode;\n    using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.IO;\n    using System.Diagnostics;\n\n    public partial class CompleteRequestDialog : DialogForm\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"CompleteRequestDialog\");\n\n        public CompleteRequestDialog(IServiceProvider serviceProvider, CertificatesFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbStore.SelectedIndex = 0;\n            if (Environment.OSVersion.Version < Version.Parse(\"6.2\"))\n            {\n                // IMPORTANT: WebHosting store is available since Windows 8.\n                cbStore.Enabled = false;\n            }\n\n            if (!Helper.IsRunningOnMono())\n            {\n                NativeMethods.TryAddShieldToButton(btnOK);\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                        && !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (!File.Exists(txtPath.Text))\n                    {\n                        ShowMessage(\n                            string.Format(\n                                \"There was an error while performing this operation.{0}{0}Details:{0}{0}Could not find file '{1}'.\",\n                                Environment.NewLine,\n                                txtPath.Text),\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    var p12File = DialogHelper.GetTempFileName();\n                    var p12pwd = \"test\";\n                    try\n                    {\n                        // TODO: check administrator permission.\n                        var x509 = X509CertificateLoader.LoadCertificateFromFile(txtPath.Text);\n                        var filename = DialogHelper.GetPrivateKeyFile(x509.Subject);\n                        if (!File.Exists(filename))\n                        {\n                            ShowMessage(\n                                string.Format(\n                                    \"There was an error while performing this operation.{0}{0}Details:{0}{0}Could not find private key for '{1}'.\",\n                                    Environment.NewLine,\n                                    txtPath.Text),\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        x509.CopyWithPrivateKey(PrivateKey.CreateFromFile(filename).RSA);\n                        x509.FriendlyName = txtName.Text;\n                        var raw = x509.Export(X509ContentType.Pfx, p12pwd);\n                        File.WriteAllBytes(p12File, raw);\n                        Item = x509;\n                    }\n                    catch (Exception ex)\n                    {\n                        ShowError(ex, Text, false);\n                        return;\n                    }\n\n                    Store = cbStore.SelectedIndex == 0 ? \"Personal\" : \"WebHosting\";\n\n                    Install(p12File, p12pwd);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtPath, \"*.cer|*.cer|*.*|*.*\", null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string Store { get; set; }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public X509Certificate2 Item { get; set; }\n\n        private void Install(string p12File, string p12pwd)\n        {\n            try\n            {\n                // add certificate\n                using var process = new Process();\n                var start = process.StartInfo;\n                start.Verb = \"runas\";\n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                start.Arguments = $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /f:\\\"{p12File}\\\" /p:{p12pwd} /n:\\\"{txtName.Text}\\\" /s:{(cbStore.SelectedIndex == 0 ? \"MY\" : \"WebHosting\")}\\\"\";\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                process.Start();\n                process.WaitForExit();\n                File.Delete(p12File);\n                if (process.ExitCode == 0)\n                {\n                    DialogResult = DialogResult.OK;\n                }\n                else\n                {\n                    MessageBox.Show(process.ExitCode.ToString());\n                }\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                if (ex.NativeErrorCode != (int)Windows.Win32.Foundation.WIN32_ERROR.ERROR_CANCELLED)\n                {\n                    _logger.LogError(ex, \"Win32 error during certificate installation. Native error code: {Code}\", ex.NativeErrorCode);\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error during certificate installation\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/CompleteRequestDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/ExportCertificateDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ExportCertificateDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.txtPassword = new System.Windows.Forms.TextBox();\n            this.txtConfirm = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 18);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(52, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Export to:\";\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(15, 34);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(277, 20);\n            this.txtPath.TabIndex = 1;\n            // \n            // txtPassword\n            // \n            this.txtPassword.Location = new System.Drawing.Point(15, 95);\n            this.txtPassword.Name = \"txtPassword\";\n            this.txtPassword.PasswordChar = '*';\n            this.txtPassword.Size = new System.Drawing.Size(317, 20);\n            this.txtPassword.TabIndex = 2;\n            // \n            // txtConfirm\n            // \n            this.txtConfirm.Location = new System.Drawing.Point(15, 159);\n            this.txtConfirm.Name = \"txtConfirm\";\n            this.txtConfirm.PasswordChar = '*';\n            this.txtConfirm.Size = new System.Drawing.Size(317, 20);\n            this.txtConfirm.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 79);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(56, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Password:\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 143);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(93, 13);\n            this.label3.TabIndex = 5;\n            this.label3.Text = \"Confirm password:\";\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(242, 216);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(90, 23);\n            this.btnCancel.TabIndex = 6;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(151, 216);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(85, 23);\n            this.btnOK.TabIndex = 7;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(299, 32);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(33, 23);\n            this.btnBrowse.TabIndex = 8;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // ExportCertificateDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(344, 251);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtConfirm);\n            this.Controls.Add(this.txtPassword);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label1);\n            this.Name = \"ExportCertificateDialog\";\n            this.Text = \"Export Certificate\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtPath;\n        private TextBox txtPassword;\n        private TextBox txtConfirm;\n        private Label label2;\n        private Label label3;\n        private Button btnCancel;\n        private Button btnOK;\n        private Button btnBrowse;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/ExportCertificateDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates\n{\n    using System;\n    using System.ComponentModel;\n    using System.IO;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class ExportCertificateDialog : DialogForm\n    {\n        public ExportCertificateDialog(X509Certificate certificate2, IServiceProvider serviceProvider, CertificatesFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPassword, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtConfirm, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtPath.Text)\n                                    && !string.IsNullOrWhiteSpace(txtPassword.Text)\n                                    && !string.IsNullOrWhiteSpace(txtConfirm.Text)\n                                    && txtPassword.Text == txtConfirm.Text;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowSaveFileDialog(txtPath, \"*.pfx|*.pfx|*.*|*.*\", null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    File.WriteAllBytes(txtPath.Text, certificate2.Export(X509ContentType.Pfx, txtPassword.Text));\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/ExportCertificateDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/ImportCertificateDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ImportCertificateDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtFile = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtPassword = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbStore = new System.Windows.Forms.ComboBox();\n            this.cbExport = new System.Windows.Forms.CheckBox();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(252, 278);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(156, 278);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(317, 36);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(30, 23);\n            this.btnBrowse.TabIndex = 2;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(9, 22);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(99, 13);\n            this.label1.TabIndex = 3;\n            this.label1.Text = \"Certificate file (.pfx):\";\n            // \n            // txtFile\n            // \n            this.txtFile.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtFile.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtFile.Location = new System.Drawing.Point(12, 38);\n            this.txtFile.Name = \"txtFile\";\n            this.txtFile.Size = new System.Drawing.Size(299, 20);\n            this.txtFile.TabIndex = 4;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(9, 70);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(56, 13);\n            this.label2.TabIndex = 5;\n            this.label2.Text = \"Password:\";\n            // \n            // txtPassword\n            // \n            this.txtPassword.Location = new System.Drawing.Point(12, 86);\n            this.txtPassword.Name = \"txtPassword\";\n            this.txtPassword.Size = new System.Drawing.Size(335, 20);\n            this.txtPassword.TabIndex = 6;\n            this.txtPassword.UseSystemPasswordChar = true;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(9, 162);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(118, 13);\n            this.label3.TabIndex = 7;\n            this.label3.Text = \"Select Certificate Store:\";\n            // \n            // cbStore\n            // \n            this.cbStore.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbStore.Enabled = false;\n            this.cbStore.FormattingEnabled = true;\n            this.cbStore.Items.AddRange(new object[] {\n            \"Jexus\"});\n            this.cbStore.Location = new System.Drawing.Point(12, 178);\n            this.cbStore.Name = \"cbStore\";\n            this.cbStore.Size = new System.Drawing.Size(335, 21);\n            this.cbStore.TabIndex = 8;\n            // \n            // cbExport\n            // \n            this.cbExport.AutoSize = true;\n            this.cbExport.Enabled = false;\n            this.cbExport.Location = new System.Drawing.Point(12, 227);\n            this.cbExport.Name = \"cbExport\";\n            this.cbExport.Size = new System.Drawing.Size(190, 17);\n            this.cbExport.TabIndex = 9;\n            this.cbExport.Text = \"Allow this certificate to be exported\";\n            this.cbExport.UseVisualStyleBackColor = true;\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(12, 133);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(335, 20);\n            this.txtName.TabIndex = 11;\n            this.txtName.UseSystemPasswordChar = true;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(9, 117);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(75, 13);\n            this.label4.TabIndex = 10;\n            this.label4.Text = \"Friendly name:\";\n            // \n            // ImportCertificateDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(367, 318);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.cbExport);\n            this.Controls.Add(this.cbStore);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtPassword);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtFile);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"ImportCertificateDialog\";\n            this.Text = \"Import Certificate\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Button btnBrowse;\n        private Label label1;\n        private TextBox txtFile;\n        private Label label2;\n        private TextBox txtPassword;\n        private Label label3;\n        private ComboBox cbStore;\n        private CheckBox cbExport;\n        private TextBox txtName;\n        private Label label4;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/ImportCertificateDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\n\nnamespace JexusManager.Features.Certificates\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n    using Microsoft.Extensions.Logging;\n    using JexusManager;\n\n    using Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Org.BouncyCastle.Crypto;\n    using Org.BouncyCastle.OpenSsl;\n    using Org.BouncyCastle.Security;\n    using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Diagnostics;\n    using System.Reactive.Linq;\n    using System.Reactive.Disposables;\n    using System.Text;\n    using System.IO;\n\n    internal partial class ImportCertificateDialog : DialogForm\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"ImportCertificateDialog\");\n\n        public ImportCertificateDialog(IServiceProvider serviceProvider, CertificatesFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbStore.SelectedIndex = 0;\n            if (Environment.OSVersion.Version < Version.Parse(\"6.2\"))\n            {\n                // IMPORTANT: WebHosting store is available since Windows 8.\n                cbStore.Enabled = false;\n            }\n\n            if (!Helper.IsRunningOnMono())\n            {\n                JexusManager.NativeMethods.TryAddShieldToButton(btnOK);\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtFile, \".pfx|*.pfx|*.*|*.*\", null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtFile, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtFile.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    try\n                    {\n                        // Load your certificate from file\n                        Item = X509CertificateLoader.LoadPkcs12FromFile(txtFile.Text, txtPassword.Text, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);\n                        Item.FriendlyName = txtName.Text;\n                        Store = cbStore.SelectedIndex == 0 ? \"Personal\" : \"WebHosting\";\n                        var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                        if (service.ServerManager.Mode == WorkingMode.Jexus)\n                        {\n                            var server = (JexusServerManager)service.Server;\n                            // Public Key;\n                            StringBuilder publicBuilder = new StringBuilder();\n                            publicBuilder.AppendLine(\"-----BEGIN CERTIFICATE-----\");\n                            publicBuilder.AppendLine(Convert.ToBase64String(Item.Export(X509ContentType.Cert), Base64FormattingOptions.InsertLineBreaks));\n                            publicBuilder.AppendLine(\"-----END CERTIFICATE-----\");\n                            var file = AsyncHelper.RunSync(() => server.SaveCertificateAsync(publicBuilder.ToString()));\n                            server.SetCertificate(file);\n                            // Private Key\n                            var rsa = Item.GetRSAPrivateKey();\n                            MemoryStream memoryStream = new MemoryStream();\n                            TextWriter streamWriter = new StreamWriter(memoryStream);\n                            PemWriter pemWriter = new PemWriter(streamWriter);\n                            AsymmetricCipherKeyPair keyPair = DotNetUtilities.GetRsaKeyPair(rsa);\n                            pemWriter.WriteObject(keyPair.Private);\n                            streamWriter.Flush();\n                            string output = Encoding.ASCII.GetString(memoryStream.GetBuffer()).Trim();\n                            int indexOfFooter = output.IndexOf(\"-----END RSA PRIVATE KEY-----\", StringComparison.Ordinal);\n                            memoryStream.Close();\n                            streamWriter.Close();\n                            string key = output.Substring(0, indexOfFooter + 29);\n                            var keyFile = AsyncHelper.RunSync(() => server.SaveKeyAsync(key));\n                            server.SetKeyFile(keyFile);\n                            service.ServerManager.CommitChanges();\n                        }\n                        else\n                        {\n                            Install(txtFile.Text, txtPassword.Text);\n                        }\n                    }\n                    catch (Exception ex)\n                    {\n                        ShowError(ex, Text, false);\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string Store { get; set; }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public X509Certificate2 Item { get; set; }\n\n        private void Install(string fileName, string password)\n        {\n            try\n            {\n                // install certificate\n                using var process = new Process();\n                var start = process.StartInfo;\n                start.Verb = \"runas\";\n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                start.Arguments = $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /f:\\\"{fileName}\\\" /p:\\\"{password}\\\" /n:\\\"{txtName.Text}\\\" /s:{(cbStore.SelectedIndex == 0 ? \"MY\" : \"WebHosting\")}\\\"\";\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                process.Start();\n                process.WaitForExit();\n\n                if (process.ExitCode == 0)\n                {\n                    DialogResult = DialogResult.OK;\n                }\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                if (ex.NativeErrorCode != (int)Windows.Win32.Foundation.WIN32_ERROR.ERROR_CANCELLED)\n                {\n                    _logger.LogError(ex, \"Win32 error during certificate installation. Native error code: {Code}\", ex.NativeErrorCode);\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error during certificate installation\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/ImportCertificateDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/JexusManager.Features.Certificates.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Certificates</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Mono.Security\" Version=\"5.4.0.201\" />\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"d37cf28b-10f1-4f28-b933-c5e18d7f09aa\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Certificates.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Certificates.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap certificates_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"certificates_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap certificates_48 {\n            get {\n                object obj = ResourceManager.GetObject(\"certificates_48\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"certificates_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\certificates_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"certificates_48\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\certificates_48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/SelfCertificateDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class SelfCertificateDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.txtTitle = new System.Windows.Forms.Label();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbStore = new System.Windows.Forms.ComboBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.label4 = new System.Windows.Forms.Label();\n            this.txtCommonName = new System.Windows.Forms.TextBox();\n            this.cbLength = new System.Windows.Forms.ComboBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.label6 = new System.Windows.Forms.Label();\n            this.cbHashing = new System.Windows.Forms.ComboBox();\n            this.dtpFrom = new System.Windows.Forms.DateTimePicker();\n            this.dtpTo = new System.Windows.Forms.DateTimePicker();\n            this.label7 = new System.Windows.Forms.Label();\n            this.label8 = new System.Windows.Forms.Label();\n            this.cbGenerate = new System.Windows.Forms.CheckBox();\n            this.label9 = new System.Windows.Forms.Label();\n            this.panel1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.SuspendLayout();\n            // \n            // panel1\n            // \n            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel1.BackColor = System.Drawing.Color.White;\n            this.panel1.Controls.Add(this.pictureBox1);\n            this.panel1.Controls.Add(this.txtTitle);\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(670, 65);\n            this.panel1.TabIndex = 11;\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Image = global::JexusManager.Features.Certificates.Properties.Resources.certificates_48;\n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(48, 48);\n            this.pictureBox1.TabIndex = 1;\n            this.pictureBox1.TabStop = false;\n            // \n            // txtTitle\n            // \n            this.txtTitle.AutoSize = true;\n            this.txtTitle.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.txtTitle.Location = new System.Drawing.Point(87, 22);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(200, 24);\n            this.txtTitle.TabIndex = 2;\n            this.txtTitle.Text = \"Specify Friendly Name\";\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(23, 82);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(483, 26);\n            this.label1.TabIndex = 12;\n            this.label1.Text = \"Specify a file name for the certificate request. This information can be sent to \" +\n    \"a certificate authority for\\r\\nsigning:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(23, 126);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(201, 13);\n            this.label2.TabIndex = 13;\n            this.label2.Text = \"Specify a friendly name for the certificate:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(26, 142);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(360, 20);\n            this.txtName.TabIndex = 14;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(23, 179);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(229, 13);\n            this.label3.TabIndex = 15;\n            this.label3.Text = \"Select a certificate store for the new certificate:\";\n            // \n            // cbStore\n            // \n            this.cbStore.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbStore.FormattingEnabled = true;\n            this.cbStore.Items.AddRange(new object[] {\n            \"Personal\",\n            \"Web Hosting\"});\n            this.cbStore.Location = new System.Drawing.Point(26, 195);\n            this.cbStore.Name = \"cbStore\";\n            this.cbStore.Size = new System.Drawing.Size(238, 21);\n            this.cbStore.TabIndex = 16;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(466, 441);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(85, 23);\n            this.btnOK.TabIndex = 17;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(557, 441);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(85, 23);\n            this.btnCancel.TabIndex = 18;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(23, 235);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(105, 13);\n            this.label4.TabIndex = 19;\n            this.label4.Text = \"Specify DNS names:\";\n            // \n            // txtCommonName\n            // \n            this.txtCommonName.Location = new System.Drawing.Point(26, 251);\n            this.txtCommonName.Name = \"txtCommonName\";\n            this.txtCommonName.Size = new System.Drawing.Size(360, 20);\n            this.txtCommonName.TabIndex = 20;\n            // \n            // cbLength\n            // \n            this.cbLength.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbLength.FormattingEnabled = true;\n            this.cbLength.Items.AddRange(new object[] {\n            \"512\",\n            \"1024\",\n            \"2048\",\n            \"4096\",\n            \"8192\",\n            \"16384\"});\n            this.cbLength.Location = new System.Drawing.Point(26, 331);\n            this.cbLength.Name = \"cbLength\";\n            this.cbLength.Size = new System.Drawing.Size(238, 21);\n            this.cbLength.TabIndex = 22;\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(23, 315);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(54, 13);\n            this.label5.TabIndex = 21;\n            this.label5.Text = \"Bit length:\";\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(23, 372);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(87, 13);\n            this.label6.TabIndex = 23;\n            this.label6.Text = \"Hashing method:\";\n            // \n            // cbHashing\n            // \n            this.cbHashing.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbHashing.FormattingEnabled = true;\n            this.cbHashing.Items.AddRange(new object[] {\n            \"SHA1\",\n            \"SHA2 (SHA256)\"});\n            this.cbHashing.Location = new System.Drawing.Point(26, 388);\n            this.cbHashing.Name = \"cbHashing\";\n            this.cbHashing.Size = new System.Drawing.Size(238, 21);\n            this.cbHashing.TabIndex = 24;\n            // \n            // dtpFrom\n            // \n            this.dtpFrom.Location = new System.Drawing.Point(351, 332);\n            this.dtpFrom.Name = \"dtpFrom\";\n            this.dtpFrom.Size = new System.Drawing.Size(200, 20);\n            this.dtpFrom.TabIndex = 25;\n            // \n            // dtpTo\n            // \n            this.dtpTo.Location = new System.Drawing.Point(351, 388);\n            this.dtpTo.Name = \"dtpTo\";\n            this.dtpTo.Size = new System.Drawing.Size(200, 20);\n            this.dtpTo.TabIndex = 26;\n            // \n            // label7\n            // \n            this.label7.AutoSize = true;\n            this.label7.Location = new System.Drawing.Point(351, 372);\n            this.label7.Name = \"label7\";\n            this.label7.Size = new System.Drawing.Size(45, 13);\n            this.label7.TabIndex = 27;\n            this.label7.Text = \"Valid to:\";\n            // \n            // label8\n            // \n            this.label8.AutoSize = true;\n            this.label8.Location = new System.Drawing.Point(351, 315);\n            this.label8.Name = \"label8\";\n            this.label8.Size = new System.Drawing.Size(56, 13);\n            this.label8.TabIndex = 28;\n            this.label8.Text = \"Valid from:\";\n            // \n            // cbGenerate\n            // \n            this.cbGenerate.AutoSize = true;\n            this.cbGenerate.Checked = true;\n            this.cbGenerate.CheckState = System.Windows.Forms.CheckState.Checked;\n            this.cbGenerate.Location = new System.Drawing.Point(26, 416);\n            this.cbGenerate.Name = \"cbGenerate\";\n            this.cbGenerate.Size = new System.Drawing.Size(198, 17);\n            this.cbGenerate.TabIndex = 29;\n            this.cbGenerate.Text = \"Generate Subject Alternative Names\";\n            this.cbGenerate.UseVisualStyleBackColor = true;\n            // \n            // label9\n            // \n            this.label9.AutoSize = true;\n            this.label9.Location = new System.Drawing.Point(26, 278);\n            this.label9.Name = \"label9\";\n            this.label9.Size = new System.Drawing.Size(188, 13);\n            this.label9.TabIndex = 30;\n            this.label9.Text = \"Example: consoto.com, *.consoto.com\";\n            // \n            // SelfCertificateDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(654, 476);\n            this.Controls.Add(this.label9);\n            this.Controls.Add(this.cbGenerate);\n            this.Controls.Add(this.label8);\n            this.Controls.Add(this.label7);\n            this.Controls.Add(this.dtpTo);\n            this.Controls.Add(this.dtpFrom);\n            this.Controls.Add(this.cbHashing);\n            this.Controls.Add(this.label6);\n            this.Controls.Add(this.cbLength);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.txtCommonName);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.cbStore);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.panel1);\n            this.Name = \"SelfCertificateDialog\";\n            this.Text = \"Create Self-Signed Certificate\";\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Panel panel1;\n        private PictureBox pictureBox1;\n        private Label txtTitle;\n        private Label label1;\n        private Label label2;\n        private TextBox txtName;\n        private Label label3;\n        private ComboBox cbStore;\n        private Button btnOK;\n        private Button btnCancel;\n        private Label label4;\n        private TextBox txtCommonName;\n        private ComboBox cbLength;\n        private Label label5;\n        private Label label6;\n        private ComboBox cbHashing;\n        private DateTimePicker dtpFrom;\n        private DateTimePicker dtpTo;\n        private Label label7;\n        private Label label8;\n        private CheckBox cbGenerate;\n        private Label label9;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/SelfCertificateDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\nusing Microsoft.Web.Administration;\n\nnamespace JexusManager.Features.Certificates\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Windows.Forms;\n    using Microsoft.Extensions.Logging;\n    using Microsoft.Web.Management.Client.Win32;\n    using Org.BouncyCastle.Asn1;\n    using Org.BouncyCastle.Asn1.X509;\n    using Org.BouncyCastle.Crypto;\n    using Org.BouncyCastle.Crypto.Generators;\n    using Org.BouncyCastle.Crypto.Operators;\n    using Org.BouncyCastle.Crypto.Prng;\n    using Org.BouncyCastle.Math;\n    using Org.BouncyCastle.Pkcs;\n    using Org.BouncyCastle.Security;\n    using Org.BouncyCastle.Utilities;\n    using Org.BouncyCastle.X509;\n    using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;\n\n    internal partial class SelfCertificateDialog : DialogForm\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"SelfCertificateDialog\");\n\n        public SelfCertificateDialog(IServiceProvider serviceProvider, CertificatesFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbStore.SelectedIndex = 0;\n            cbLength.SelectedIndex = 3;\n            cbHashing.SelectedIndex = 1;\n            txtCommonName.Text = Environment.MachineName;\n            dtpFrom.Value = DateTime.Now;\n            dtpTo.Value = dtpFrom.Value.AddYears(1);\n\n            if (Environment.OSVersion.Version < Version.Parse(\"6.2\"))\n            {\n                // IMPORTANT: WebHosting store is available since Windows 8.\n                cbStore.Enabled = false;\n            }\n\n            if (!Helper.IsRunningOnMono())\n            {\n                NativeMethods.TryAddShieldToButton(btnOK);\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var names = txtCommonName.Text;\n                    if (string.IsNullOrWhiteSpace(names))\n                    {\n                        ShowMessage(\"DNS names cannot be empty.\", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    var dnsNames = names.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(item => item.Trim()).ToArray();\n                    if (dnsNames.Length == 0)\n                    {\n                        ShowMessage(\"DNS names cannot be empty.\", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    // Generate certificate\n                    string defaultIssuer = string.Format(\"CN={0}\", dnsNames[0]);\n                    string defaultSubject = defaultIssuer;\n\n                    string subject = defaultSubject;\n                    string issuer = defaultIssuer;\n\n                    if (subject == null)\n                        throw new Exception(\"Missing Subject Name\");\n\n                    DateTime notBefore = dtpFrom.Value;\n                    DateTime notAfter = dtpTo.Value;\n\n                    var random = new SecureRandom(new CryptoApiRandomGenerator());\n                    var kpgen = new RsaKeyPairGenerator();\n                    kpgen.Init(new KeyGenerationParameters(random, int.Parse(cbLength.Text)));\n                    var cerKp = kpgen.GenerateKeyPair();\n\n                    X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();\n\n                    var serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(long.MaxValue), random);\n                    certGen.SetSerialNumber(serialNumber);\n                    certGen.SetIssuerDN(new X509Name(issuer));\n                    certGen.SetNotBefore(notBefore);\n                    certGen.SetNotAfter(notAfter);\n                    if (dnsNames.Length == 1)\n                    {\n                        certGen.SetSubjectDN(new X509Name(subject));\n                    }\n\n                    certGen.SetPublicKey(cerKp.Public);\n                    certGen.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(true));\n\n                    var keyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(cerKp.Public);\n                    certGen.AddExtension(X509Extensions.SubjectKeyIdentifier, true, new SubjectKeyIdentifier(keyInfo));\n                    certGen.AddExtension(X509Extensions.AuthorityKeyIdentifier, true, new AuthorityKeyIdentifier(keyInfo));\n                    certGen.AddExtension(X509Extensions.ExtendedKeyUsage, true, new ExtendedKeyUsage(KeyPurposeID.IdKPServerAuth));\n\n                    if (cbGenerate.Checked)\n                    {\n                        var subjectAlternativeNames = new List<Asn1Encodable>();\n                        foreach (var item in dnsNames)\n                        {\n                            subjectAlternativeNames.Add(new GeneralName(GeneralName.DnsName, item));\n                        }\n                        var subjectAlternativeNamesExtension = new DerSequence(subjectAlternativeNames.ToArray());\n                        certGen.AddExtension(X509Extensions.SubjectAlternativeName, true, subjectAlternativeNamesExtension);\n                    }\n\n                    string hashName = cbHashing.SelectedIndex == 0 ? \"SHA1WithRSA\" : \"SHA256WithRSA\";\n                    var factory = new Asn1SignatureFactory(hashName, cerKp.Private, random);\n\n                    string p12File = Path.GetTempFileName();\n                    string p12pwd = \"test\";\n\n                    try\n                    {\n                        Org.BouncyCastle.X509.X509Certificate x509 = certGen.Generate(factory);\n                        var store = new Pkcs12Store();\n                        var certificateEntry = new X509CertificateEntry(x509);\n                        var friendlyName = txtName.Text;\n                        store.SetCertificateEntry(friendlyName, certificateEntry);\n                        store.SetKeyEntry(friendlyName, new AsymmetricKeyEntry(cerKp.Private), new[] { certificateEntry });\n                        var stream = new MemoryStream();\n                        store.Save(stream, p12pwd.ToCharArray(), random);\n                        File.WriteAllBytes(p12File, stream.ToArray());\n\n                        Item = X509CertificateLoader.LoadPkcs12FromFile(p12File, p12pwd);\n                        Item.FriendlyName = friendlyName;\n                        Store = cbStore.SelectedIndex == 0 ? \"Personal\" : \"WebHosting\";\n\n                        try\n                        {\n                            using var process = new Process();\n                            // add certificate\n                            var start = process.StartInfo;\n                            start.Verb = \"runas\";\n                            start.UseShellExecute = true;\n                            start.FileName = \"cmd\";\n                            start.Arguments = $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /f:\\\"{p12File}\\\" /p:{p12pwd} /n:\\\"{txtName.Text}\\\" /s:{(cbStore.SelectedIndex == 0 ? \"MY\" : \"WebHosting\")}\\\"\";\n                            start.CreateNoWindow = true;\n                            start.WindowStyle = ProcessWindowStyle.Hidden;\n                            process.Start();\n                            process.WaitForExit();\n                            if (process.ExitCode == 0)\n                            {\n                                DialogResult = DialogResult.OK;\n                            }\n                            else\n                            {\n                                ShowMessage(process.ExitCode.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                            }\n                        }\n                        catch (Win32Exception ex)\n                        {\n                            // elevation is cancelled.\n                            var message = Microsoft.Web.Administration.NativeMethods.KnownCases(ex.NativeErrorCode);\n                            if (string.IsNullOrEmpty(message))\n                            {\n                                _logger.LogError(ex, \"Win32 error installing certificate. Native error code: {Code}\", ex.NativeErrorCode);\n                            }\n                            else\n                            {\n                                ShowError(ex, message, false);\n                            }\n                        }\n                        catch (Exception ex)\n                        {\n                            ShowError(ex, $\"unexpected exception\", false);\n                            _logger.LogError(ex, \"Error installing certificate\");\n                        }\n                        finally\n                        {\n                            if (File.Exists(p12File))\n                            {\n                                File.Delete(p12File);\n                            }\n                        }\n\n                        // TODO: flatten the two try catch.\n                    }\n                    catch (Exception ex)\n                    {\n                        ShowError(ex, Text, false);\n                        _logger.LogError(ex, \"Error validating certificate\");\n                        return;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string Store { get; set; }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public X509Certificate2 Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/SelfCertificateDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/CertificateRenewWizard.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates.Wizards.CertificateRenewWizard\n{\n    using System.ComponentModel;\n\n    partial class CertificateRenewWizard\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.SuspendLayout();\n            // \n            // CertificateRequestWizard\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(669, 481);\n            this.Name = \"CertificateRequestWizard\";\n            this.Text = \"Connect to Server\";\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/CertificateRenewWizard.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates.Wizards.CertificateRenewWizard\n{\n    using System;\n    using System.IO;\n    using System.Security.Cryptography;\n    using System.Security.Cryptography.X509Certificates;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Org.BouncyCastle.Asn1;\n    using Org.BouncyCastle.Asn1.X509;\n    using Org.BouncyCastle.Crypto.Parameters;\n    using Org.BouncyCastle.Pkcs;\n    using Org.BouncyCastle.Security;\n    using Properties;\n    using Org.BouncyCastle.Crypto.Operators;\n    using Mono.Security.Authenticode;\n\n    internal partial class CertificateRenewWizard : DefaultWizardForm\n    {\n        private readonly X509Certificate2 _existing;\n        private readonly CertificatesFeature _feature;\n        private CertificateRenewWizardData _wizardData;\n\n        public CertificateRenewWizard(X509Certificate2 existing, IServiceProvider serviceProvider, CertificatesFeature feature)\n            : base(serviceProvider)\n        {\n            _existing = existing;\n            _feature = feature;\n            InitializeComponent();\n            TaskGlyph = Resources.certificates_48;\n        }\n\n        protected override object WizardData\n        {\n            get { return _wizardData ?? (_wizardData = new CertificateRenewWizardData()); }\n        }\n\n        protected override void CompleteWizard()\n        {\n            X509Name subjectName = new X509Name(_existing.Subject);\n\n            var useRsa = true;\n            AsymmetricAlgorithm privateKey = _existing.GetRSAPrivateKey();\n            if (privateKey == null)\n            {\n                useRsa = false;\n                privateKey = _existing.GetECDsaPrivateKey();\n                ShowError(null, \"Renewing ECDSA based certificates is not yet supported.\", false);\n                return;\n            }\n\n            // Generate the private/public keypair\n            var keyPair = DotNetUtilities.GetKeyPair(privateKey);\n\n            // Generate the CSR \n            Asn1Set attributes = new DerSet(\n                new DerSequence(\n                    new DerObjectIdentifier(\"1.3.6.1.4.1.311.13.2.3\"),\n                    new DerSet(new DerIA5String(Environment.OSVersion.Version.ToString()))),\n                new DerSequence(\n                    new DerObjectIdentifier(\"1.3.6.1.4.1.311.21.20\"),\n                    new DerSet(\n                        new DerSequence(\n                            new DerInteger(5),\n                            new DerUtf8String(Environment.MachineName),\n                            new DerUtf8String(Environment.UserName),\n                            new DerUtf8String(\"JexusManager.exe\")))),\n                new DerSequence(\n                    new DerObjectIdentifier(\"1.3.6.1.4.1.311.13.2.2\"),\n                    new DerSet(\n                        new DerSequence(\n                            new DerInteger(1),\n                            new DerBmpString(\"Microsoft RSA SChannel Cryptographic Provider\"),\n                            new DerBitString(new byte[0])))),\n                new DerSequence(\n                    new DerObjectIdentifier(\"1.2.840.113549.1.9.14\"),\n                    new DerSet(\n                        new DerSequence(\n                            new DerSequence(\n                                new DerObjectIdentifier(\"2.5.29.15\"),\n                                new DerBoolean(new byte[] { 0x01 }),\n                                new DerOctetString(new byte[] { 0x03, 0x02, 0x04, 0xF0 })),\n                            new DerSequence(\n                                new DerObjectIdentifier(\"2.5.29.37\"),\n                                new DerOctetString(new byte[]\n                                {\n                                    0x30, 0x0a, 0x06, 0x08,\n                                    0x2b, 0x06, 0x01, 0x05,\n                                    0x05, 0x07, 0x03, 0x01 })),\n                            new DerSequence(\n                                new DerObjectIdentifier(\"1.2.840.113549.1.9.15\"),\n                                new DerOctetString(new byte[]\n                                {\n                                    0x30, 0x69, 0x30, 0x0e,\n                                    0x06, 0x08, 0x2a, 0x86,\n                                    0x48, 0x86, 0xf7, 0x0d,\n                                    0x03, 0x02, 0x02, 0x02,\n                                    0x00, 0x80, 0x30, 0x0e,\n                                    0x06, 0x08, 0x2a, 0x86,\n                                    0x48, 0x86, 0xf7, 0x0d,\n                                    0x03, 0x04, 0x02, 0x02,\n                                    0x00, 0x80, 0x30, 0x0b,\n                                    0x06, 0x09, 0x60, 0x86,\n                                    0x48, 0x01, 0x65, 0x03,\n                                    0x04, 0x01, 0x2a, 0x30,\n                                    0x0b, 0x06, 0x09, 0x60,\n                                    0x86, 0x48, 0x01, 0x65,\n                                    0x03, 0x04, 0x01, 0x2d,\n                                    0x30, 0x0b, 0x06, 0x09,\n                                    0x60, 0x86, 0x48, 0x01,\n                                    0x65, 0x03, 0x04, 0x01,\n                                    0x02, 0x30, 0x0b, 0x06,\n                                    0x09, 0x60, 0x86, 0x48,\n                                    0x01, 0x65, 0x03, 0x04,\n                                    0x01, 0x05, 0x30, 0x07,\n                                    0x06, 0x05, 0x2b, 0x0e,\n                                    0x03, 0x02, 0x07, 0x30,\n                                    0x0a, 0x06, 0x08, 0x2a,\n                                    0x86, 0x48, 0x86, 0xf7,\n                                    0x0d, 0x03, 0x07\n                                })),\n                            new DerSequence(\n                                new DerObjectIdentifier(\"2.5.29.14\"),\n                                new DerOctetString(new byte[]\n                                {\n                                    0x04, 0x14, 0xaa, 0x25,\n                                    0xd9, 0xa2, 0x39, 0x7e,\n                                    0x49, 0xd2, 0x94, 0x85,\n                                    0x7e, 0x82, 0xa8, 0x8f,\n                                    0x3b, 0x20, 0xf1, 0x4e, 0x65, 0xe5\n                                }))))));\n\n            var signing = new Asn1SignatureFactory(useRsa ? \"SHA256withRSA\" : \"SHA256WithECDSA\", keyPair.Private);\n            Pkcs10CertificationRequest kpGen = new Pkcs10CertificationRequest(signing, subjectName, keyPair.Public, attributes);\n            using (var stream = new StreamWriter(_wizardData.FileName))\n            {\n                stream.WriteLine(_wizardData.UseIisStyle ? \"-----BEGIN NEW CERTIFICATE REQUEST-----\" : \"-----BEGIN CERTIFICATE REQUEST-----\");\n                stream.WriteLine(Convert.ToBase64String(kpGen.GetDerEncoded(), Base64FormattingOptions.InsertLineBreaks));\n                stream.WriteLine(_wizardData.UseIisStyle ? \"-----END NEW CERTIFICATE REQUEST-----\" : \"-----END CERTIFICATE REQUEST-----\");\n            }\n\n            var key = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyPair.Private);\n            PrivateKey pvk = new PrivateKey();\n            pvk.RSA = new RSACryptoServiceProvider();\n            pvk.RSA.ImportParameters(key);\n\n            var file = DialogHelper.GetPrivateKeyFile(_existing.Subject);\n            var folder = Path.GetDirectoryName(file);\n            if (!Directory.Exists(folder))\n            {\n                Directory.CreateDirectory(folder);\n            }\n\n            pvk.Save(file);\n        }\n\n        protected override bool CanComplete\n        {\n            get\n            {\n                var data = (CertificateRenewWizardData)WizardData;\n                return data?.IsComplete ?? false;\n            }\n        }\n\n        protected override WizardPage[] GetWizardPages()\n        {\n            var optionsPage = new OptionsPage();\n            optionsPage.SetWizard(this);\n            var finish = new FinishPage();\n            finish.SetWizard(this);\n            return new WizardPage[] { optionsPage, finish };\n        }\n\n        protected override void ShowHelp()\n        {\n            _feature.ShowHelp();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/CertificateRenewWizard.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/CertificateRenewWizardData.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates.Wizards.CertificateRenewWizard\n{\n    internal class CertificateRenewWizardData\n    {\n        public string FileName { get; set; }\n\n        public bool IsComplete\n        {\n            get { return !string.IsNullOrWhiteSpace(FileName); }\n        }\n\n        public bool UseIisStyle { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/FinishPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates.Wizards.CertificateRenewWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class FinishPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtConnect = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.rbOpen = new System.Windows.Forms.RadioButton();\n            this.rbIis = new System.Windows.Forms.RadioButton();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(20, 74);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(259, 13);\n            this.label2.TabIndex = 7;\n            this.label2.Text = \"Specify a file name for the certificate renewal request:\";\n            // \n            // txtConnect\n            // \n            this.txtConnect.AutoSize = true;\n            this.txtConnect.Location = new System.Drawing.Point(20, 25);\n            this.txtConnect.Name = \"txtConnect\";\n            this.txtConnect.Size = new System.Drawing.Size(503, 26);\n            this.txtConnect.TabIndex = 6;\n            this.txtConnect.Text = \"Specify the file name for the certificate request. This information can be sent t\" +\n    \"o a certification authority for \\r\\nsigning.\";\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(23, 90);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(358, 20);\n            this.txtPath.TabIndex = 8;\n            this.txtPath.TextChanged += new System.EventHandler(this.txtPath_TextChanged);\n            this.txtPath.VisibleChanged += new System.EventHandler(this.txtPath_TextChanged);\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(387, 88);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(30, 25);\n            this.btnBrowse.TabIndex = 9;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.rbOpen);\n            this.groupBox1.Controls.Add(this.rbIis);\n            this.groupBox1.Location = new System.Drawing.Point(23, 132);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(200, 100);\n            this.groupBox1.TabIndex = 10;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Request file style\";\n            // \n            // rbOpen\n            // \n            this.rbOpen.AutoSize = true;\n            this.rbOpen.Location = new System.Drawing.Point(15, 55);\n            this.rbOpen.Name = \"rbOpen\";\n            this.rbOpen.Size = new System.Drawing.Size(71, 17);\n            this.rbOpen.TabIndex = 12;\n            this.rbOpen.Text = \"OpenSSL\";\n            this.rbOpen.UseVisualStyleBackColor = true;\n            this.rbOpen.CheckedChanged += new System.EventHandler(this.FileStyle_Changed);\n            // \n            // rbIis\n            // \n            this.rbIis.AutoSize = true;\n            this.rbIis.Checked = true;\n            this.rbIis.Location = new System.Drawing.Point(15, 32);\n            this.rbIis.Name = \"rbIis\";\n            this.rbIis.Size = new System.Drawing.Size(38, 17);\n            this.rbIis.TabIndex = 11;\n            this.rbIis.TabStop = true;\n            this.rbIis.Text = \"IIS\";\n            this.rbIis.UseVisualStyleBackColor = true;\n            this.rbIis.CheckedChanged += new System.EventHandler(this.FileStyle_Changed);\n            // \n            // FinishPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtConnect);\n            this.Name = \"FinishPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n        private Label label2;\n        private Label txtConnect;\n        private TextBox txtPath;\n        private Button btnBrowse;\n        private GroupBox groupBox1;\n        private RadioButton rbOpen;\n        private RadioButton rbIis;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/FinishPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates.Wizards.CertificateRenewWizard\n{\n    using System;\n\n    public partial class FinishPage : DefaultWizardPage\n    {\n        private bool _initialized;\n\n        public FinishPage()\n        {\n            InitializeComponent();\n            Caption = \"Specify save as file name\";\n        }\n\n\n        private void txtPath_TextChanged(object sender, EventArgs e)\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            ((CertificateRenewWizardData)WizardData).FileName = txtPath.Text;\n            ((DefaultWizardForm)Wizard).UpdateWizard();\n        }\n\n        protected override void Activate()\n        {\n            base.Activate();\n            _initialized = false;\n            txtPath.Text = ((CertificateRenewWizardData)WizardData).FileName;\n            _initialized = true;\n            txtPath.Focus();\n            txtPath.SelectAll();\n        }\n\n        private void btnBrowse_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ShowSaveFileDialog(txtPath, \"*.txt|*.txt|*.*|*.*\", null);\n        }\n\n        private void FileStyle_Changed(object sender, EventArgs e)\n        {\n            ((CertificateRenewWizardData)WizardData).UseIisStyle = rbIis.Checked;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/FinishPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/OptionsPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates.Wizards.CertificateRenewWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class OptionsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.RenewDomain = new System.Windows.Forms.RadioButton();\n            this.label1 = new System.Windows.Forms.Label();\n            this.rbRequestRenewal = new System.Windows.Forms.RadioButton();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.rbCompleteRenewal = new System.Windows.Forms.RadioButton();\n            this.SuspendLayout();\n            // \n            // RenewDomain\n            // \n            this.RenewDomain.AutoSize = true;\n            this.RenewDomain.Checked = true;\n            this.RenewDomain.Location = new System.Drawing.Point(27, 42);\n            this.RenewDomain.Name = \"RenewDomain\";\n            this.RenewDomain.Size = new System.Drawing.Size(161, 17);\n            this.RenewDomain.TabIndex = 0;\n            this.RenewDomain.TabStop = true;\n            this.RenewDomain.Text = \"Renew an existing certificate\";\n            this.RenewDomain.UseVisualStyleBackColor = true;\n            this.RenewDomain.Click += new System.EventHandler(this.Option_Click);\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(50, 62);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(387, 13);\n            this.label1.TabIndex = 1;\n            this.label1.Text = \"Lets you renew an existing certificate by using a certificate server in your doma\" +\n    \"in.\";\n            // \n            // rbRequestRenewal\n            // \n            this.rbRequestRenewal.AutoSize = true;\n            this.rbRequestRenewal.Location = new System.Drawing.Point(27, 99);\n            this.rbRequestRenewal.Name = \"rbRequestRenewal\";\n            this.rbRequestRenewal.Size = new System.Drawing.Size(192, 17);\n            this.rbRequestRenewal.TabIndex = 2;\n            this.rbRequestRenewal.Text = \"Create a renewal certificate request\";\n            this.rbRequestRenewal.UseVisualStyleBackColor = true;\n            this.rbRequestRenewal.Click += new System.EventHandler(this.Option_Click);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(50, 119);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(421, 13);\n            this.label2.TabIndex = 3;\n            this.label2.Text = \"Lets you package renewal information to submit to a certification authority at a \" +\n    \"later time.\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(50, 176);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(466, 26);\n            this.label3.TabIndex = 4;\n            this.label3.Text = \"Lets you complete the certificate renewal request by using the certificate that w\" +\n    \"as received from a\\r\\ncertification authority.\";\n            // \n            // rbCompleteRenewal\n            // \n            this.rbCompleteRenewal.AutoSize = true;\n            this.rbCompleteRenewal.Location = new System.Drawing.Point(27, 156);\n            this.rbCompleteRenewal.Name = \"rbCompleteRenewal\";\n            this.rbCompleteRenewal.Size = new System.Drawing.Size(196, 17);\n            this.rbCompleteRenewal.TabIndex = 5;\n            this.rbCompleteRenewal.Text = \"Complete certificate renewal request\";\n            this.rbCompleteRenewal.UseVisualStyleBackColor = true;\n            this.rbCompleteRenewal.Click += new System.EventHandler(this.Option_Click);\n            // \n            // OptionsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.rbCompleteRenewal);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.rbRequestRenewal);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.RenewDomain);\n            this.Name = \"OptionsPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private RadioButton RenewDomain;\n        private Label label1;\n        private RadioButton rbRequestRenewal;\n        private Label label2;\n        private Label label3;\n        private RadioButton rbCompleteRenewal;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/OptionsPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates.Wizards.CertificateRenewWizard\n{\n    using System;\n\n    public partial class OptionsPage : DefaultWizardPage\n    {\n        public OptionsPage()\n        {\n            InitializeComponent();\n            Caption = \"Renew an existing certificate\";\n        }\n\n        private void Option_Click(object sender, EventArgs e)\n        {\n            if (rbRequestRenewal.Checked)\n            {\n                var finish = (DefaultWizardPage)Pages[1];\n                SetNextPage(finish);\n                finish.SetPreviousPage(this);\n            }\n\n            UpdateWizard();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRenewWizard/OptionsPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/CertificateRequestWizard.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates.Wizards.CertificateRequestWizard\n{\n    using System.ComponentModel;\n\n    partial class CertificateRequestWizard\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.SuspendLayout();\n            // \n            // CertificateRequestWizard\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(669, 481);\n            this.Name = \"CertificateRequestWizard\";\n            this.Text = \"Connect to Server\";\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/CertificateRequestWizard.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates.Wizards.CertificateRequestWizard\n{\n    using System;\n    using System.IO;\n    using System.Security.Cryptography;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Org.BouncyCastle.Asn1;\n    using Org.BouncyCastle.Asn1.X509;\n    using Org.BouncyCastle.Crypto;\n    using Org.BouncyCastle.Crypto.Generators;\n    using Org.BouncyCastle.Crypto.Parameters;\n    using Org.BouncyCastle.Crypto.Prng;\n    using Org.BouncyCastle.Pkcs;\n    using Org.BouncyCastle.Security;\n    using Properties;\n    using Org.BouncyCastle.Crypto.Operators;\n    using Mono.Security.Authenticode;\n\n    internal partial class CertificateRequestWizard : DefaultWizardForm\n    {\n        private CertificateRequestWizardData _wizardData;\n        private CertificatesFeature _feature;\n\n        public CertificateRequestWizard(IServiceProvider serviceProvider, CertificatesFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            TaskGlyph = Resources.certificates_48;\n            _feature = feature;\n        }\n\n        protected override object WizardData\n        {\n            get { return _wizardData ?? (_wizardData = new CertificateRequestWizardData()); }\n        }\n\n        protected override void CompleteWizard()\n        {\n            // Generate the CSR \n            X509Name subjectName;\n            try\n            {\n                subjectName = new X509Name(string.Format(\"C={0},ST={1},L={2},O={3},OU={4},CN={5}\",\n                        _wizardData.Country,\n                        _wizardData.State,\n                        _wizardData.City,\n                        _wizardData.Organization,\n                        _wizardData.Unit,\n                        _wizardData.CommonName));\n\n            }\n            catch (ArgumentException ex)\n            {\n                ShowError(ex, Text, false);\n                return;\n            }\n\n            // Generate the private/public keypair \n            RsaKeyPairGenerator kpgen = new RsaKeyPairGenerator();\n            CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator();\n            kpgen.Init(new KeyGenerationParameters(new SecureRandom(randomGenerator), _wizardData.Length));\n            AsymmetricCipherKeyPair keyPair = kpgen.GenerateKeyPair();\n            // Generate the CSR \n\n            Asn1Set attributes = new DerSet(\n                new DerSequence(\n                    new DerObjectIdentifier(\"1.3.6.1.4.1.311.13.2.3\"),\n                    new DerSet(new DerIA5String(Environment.OSVersion.Version.ToString()))),\n                new DerSequence(\n                    new DerObjectIdentifier(\"1.3.6.1.4.1.311.21.20\"),\n                    new DerSet(\n                        new DerSequence(\n                            new DerInteger(5),\n                            new DerUtf8String(Environment.MachineName),\n                            new DerUtf8String(Environment.UserName),\n                            new DerUtf8String(\"JexusManager.exe\")))),\n                new DerSequence(\n                    new DerObjectIdentifier(\"1.3.6.1.4.1.311.13.2.2\"),\n                    new DerSet(\n                        new DerSequence(\n                            new DerInteger(1),\n                            new DerBmpString(\"Microsoft RSA SChannel Cryptographic Provider\"),\n                            new DerBitString(new byte[0])))),\n                new DerSequence(\n                    new DerObjectIdentifier(\"1.2.840.113549.1.9.14\"),\n                    new DerSet(\n                        new DerSequence(\n                            new DerSequence(\n                                new DerObjectIdentifier(\"2.5.29.15\"),\n                                new DerBoolean(new byte[] { 0x01 }),\n                                new DerOctetString(new byte[] { 0x03, 0x02, 0x04, 0xF0 })),\n                            new DerSequence(\n                                new DerObjectIdentifier(\"2.5.29.37\"),\n                                new DerOctetString(new byte[]\n                                {\n                                    0x30, 0x0a, 0x06, 0x08,\n                                    0x2b, 0x06, 0x01, 0x05,\n                                    0x05, 0x07, 0x03, 0x01 })),\n                            new DerSequence(\n                                new DerObjectIdentifier(\"1.2.840.113549.1.9.15\"),\n                                new DerOctetString(new byte[]\n                                {\n                                    0x30, 0x69, 0x30, 0x0e,\n                                    0x06, 0x08, 0x2a, 0x86,\n                                    0x48, 0x86, 0xf7, 0x0d,\n                                    0x03, 0x02, 0x02, 0x02,\n                                    0x00, 0x80, 0x30, 0x0e,\n                                    0x06, 0x08, 0x2a, 0x86,\n                                    0x48, 0x86, 0xf7, 0x0d,\n                                    0x03, 0x04, 0x02, 0x02,\n                                    0x00, 0x80, 0x30, 0x0b,\n                                    0x06, 0x09, 0x60, 0x86,\n                                    0x48, 0x01, 0x65, 0x03,\n                                    0x04, 0x01, 0x2a, 0x30,\n                                    0x0b, 0x06, 0x09, 0x60,\n                                    0x86, 0x48, 0x01, 0x65,\n                                    0x03, 0x04, 0x01, 0x2d,\n                                    0x30, 0x0b, 0x06, 0x09,\n                                    0x60, 0x86, 0x48, 0x01,\n                                    0x65, 0x03, 0x04, 0x01,\n                                    0x02, 0x30, 0x0b, 0x06,\n                                    0x09, 0x60, 0x86, 0x48,\n                                    0x01, 0x65, 0x03, 0x04,\n                                    0x01, 0x05, 0x30, 0x07,\n                                    0x06, 0x05, 0x2b, 0x0e,\n                                    0x03, 0x02, 0x07, 0x30,\n                                    0x0a, 0x06, 0x08, 0x2a,\n                                    0x86, 0x48, 0x86, 0xf7,\n                                    0x0d, 0x03, 0x07\n                                })),\n                            new DerSequence(\n                                new DerObjectIdentifier(\"2.5.29.14\"),\n                                new DerOctetString(new byte[]\n                                {\n                                    0x04, 0x14, 0xaa, 0x25,\n                                    0xd9, 0xa2, 0x39, 0x7e,\n                                    0x49, 0xd2, 0x94, 0x85,\n                                    0x7e, 0x82, 0xa8, 0x8f,\n                                    0x3b, 0x20, 0xf1, 0x4e, 0x65, 0xe5\n                                }))))));\n\n            var signing = new Asn1SignatureFactory(\"SHA256withRSA\", keyPair.Private);\n            Pkcs10CertificationRequest kpGen = new Pkcs10CertificationRequest(signing, subjectName, keyPair.Public, attributes);\n            using (var stream = new StreamWriter(_wizardData.FileName))\n            {\n                stream.WriteLine(_wizardData.UseIisStyle ? \"-----BEGIN NEW CERTIFICATE REQUEST-----\" : \"-----BEGIN CERTIFICATE REQUEST-----\");\n                stream.WriteLine(Convert.ToBase64String(kpGen.GetDerEncoded(), Base64FormattingOptions.InsertLineBreaks));\n                stream.WriteLine(_wizardData.UseIisStyle ? \"-----END NEW CERTIFICATE REQUEST-----\" : \"-----END CERTIFICATE REQUEST-----\");\n            }\n\n            var key = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyPair.Private);\n            PrivateKey pvk = new PrivateKey();\n            pvk.RSA = new RSACryptoServiceProvider();\n            pvk.RSA.ImportParameters(key);\n\n            var file = DialogHelper.GetPrivateKeyFile(subjectName.ToString());\n            var folder = Path.GetDirectoryName(file);\n            if (!Directory.Exists(folder))\n            {\n                Directory.CreateDirectory(folder);\n            }\n\n            pvk.Save(file);\n        }\n\n        protected override bool CanComplete\n        {\n            get\n            {\n                var data = (CertificateRequestWizardData)WizardData;\n                return data?.IsComplete ?? false;\n            }\n        }\n\n        protected override WizardPage[] GetWizardPages()\n        {\n            var properties = new PropertiesPage();\n            var keys = new KeysPage();\n            var finish = new FinishPage();\n            properties.SetNextPage(keys);\n            properties.SetWizard(this);\n            keys.SetPreviousPage(properties);\n            keys.SetNextPage(finish);\n            keys.SetWizard(this);\n            finish.SetPreviousPage(keys);\n            finish.SetWizard(this);\n            return new WizardPage[] { properties, keys, finish };\n        }\n\n        protected override void ShowHelp()\n        {\n            _feature.ShowHelp();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/CertificateRequestWizard.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/CertificateRequestWizardData.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates.Wizards.CertificateRequestWizard\n{\n    internal class CertificateRequestWizardData\n    {\n        public string CommonName;\n        public string Organization { get; set; }\n        public string Unit { get; set; }\n        public string City { get; set; }\n        public string State { get; set; }\n        public string Country { get; set; }\n        public int Provider = 1;\n        public int Length { get; set; }\n        public string FileName { get; set; }\n\n        public bool IsComplete\n        {\n            get { return !string.IsNullOrWhiteSpace(FileName); }\n        }\n\n        public bool UseIisStyle { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/FinishPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates.Wizards.CertificateRequestWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class FinishPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtConnect = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.rbIis = new System.Windows.Forms.RadioButton();\n            this.rbOpen = new System.Windows.Forms.RadioButton();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(20, 74);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(219, 13);\n            this.label2.TabIndex = 7;\n            this.label2.Text = \"Specify a file name for the certificate request:\";\n            // \n            // txtConnect\n            // \n            this.txtConnect.AutoSize = true;\n            this.txtConnect.Location = new System.Drawing.Point(20, 25);\n            this.txtConnect.Name = \"txtConnect\";\n            this.txtConnect.Size = new System.Drawing.Size(495, 26);\n            this.txtConnect.TabIndex = 6;\n            this.txtConnect.Text = \"Specify the file name for the certificate request. This information can be sent t\" +\n    \"o a certificate authority for \\r\\nsigning.\";\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(23, 90);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(358, 20);\n            this.txtPath.TabIndex = 8;\n            this.txtPath.TextChanged += new System.EventHandler(this.txtPath_TextChanged);\n            this.txtPath.VisibleChanged += new System.EventHandler(this.txtPath_TextChanged);\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(387, 88);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(30, 25);\n            this.btnBrowse.TabIndex = 9;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.rbOpen);\n            this.groupBox1.Controls.Add(this.rbIis);\n            this.groupBox1.Location = new System.Drawing.Point(23, 132);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(200, 100);\n            this.groupBox1.TabIndex = 10;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Request file style\";\n            // \n            // rbIis\n            // \n            this.rbIis.AutoSize = true;\n            this.rbIis.Checked = true;\n            this.rbIis.Location = new System.Drawing.Point(15, 32);\n            this.rbIis.Name = \"rbIis\";\n            this.rbIis.Size = new System.Drawing.Size(38, 17);\n            this.rbIis.TabIndex = 11;\n            this.rbIis.TabStop = true;\n            this.rbIis.Text = \"IIS\";\n            this.rbIis.UseVisualStyleBackColor = true;\n            this.rbIis.CheckedChanged += new System.EventHandler(this.FileStyle_Changed);\n            // \n            // rbOpen\n            // \n            this.rbOpen.AutoSize = true;\n            this.rbOpen.Location = new System.Drawing.Point(15, 55);\n            this.rbOpen.Name = \"rbOpen\";\n            this.rbOpen.Size = new System.Drawing.Size(71, 17);\n            this.rbOpen.TabIndex = 12;\n            this.rbOpen.Text = \"OpenSSL\";\n            this.rbOpen.UseVisualStyleBackColor = true;\n            this.rbOpen.CheckedChanged += new System.EventHandler(this.FileStyle_Changed);\n            // \n            // FinishPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtConnect);\n            this.Name = \"FinishPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n        private Label label2;\n        private Label txtConnect;\n        private TextBox txtPath;\n        private Button btnBrowse;\n        private GroupBox groupBox1;\n        private RadioButton rbOpen;\n        private RadioButton rbIis;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/FinishPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates.Wizards.CertificateRequestWizard\n{\n    using System;\n    using System.Windows.Forms;\n\n    public partial class FinishPage : DefaultWizardPage\n    {\n        private bool _initialized;\n\n        public FinishPage()\n        {\n            InitializeComponent();\n            Caption = \"File Name\";\n        }\n\n\n        private void txtPath_TextChanged(object sender, EventArgs e)\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            ((CertificateRequestWizardData)WizardData).FileName = txtPath.Text;\n            ((DefaultWizardForm)Wizard).UpdateWizard();\n        }\n\n        protected override void Activate()\n        {\n            base.Activate();\n            _initialized = false;\n            txtPath.Text = ((CertificateRequestWizardData)WizardData).FileName;\n            _initialized = true;\n            txtPath.Focus();\n            txtPath.SelectAll();\n        }\n\n        private void btnBrowse_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ShowSaveFileDialog(txtPath, \"*.txt|*.txt|*.*|*.*\", null);\n        }\n\n        private void FileStyle_Changed(object sender, EventArgs e)\n        {\n            ((CertificateRequestWizardData)WizardData).UseIisStyle = rbIis.Checked;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/FinishPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/KeysPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates.Wizards.CertificateRequestWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class KeysPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(KeysPage));\n            this.txtConnect = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbProvider = new System.Windows.Forms.ComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbLength = new System.Windows.Forms.ComboBox();\n            this.SuspendLayout();\n            // \n            // txtConnect\n            // \n            this.txtConnect.AutoSize = true;\n            this.txtConnect.Location = new System.Drawing.Point(20, 25);\n            this.txtConnect.Name = \"txtConnect\";\n            this.txtConnect.Size = new System.Drawing.Size(515, 39);\n            this.txtConnect.TabIndex = 0;\n            this.txtConnect.Text = resources.GetString(\"txtConnect.Text\");\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(20, 73);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(153, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Cryptographic service provider:\";\n            // \n            // cbProvider\n            // \n            this.cbProvider.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbProvider.FormattingEnabled = true;\n            this.cbProvider.Items.AddRange(new object[] {\n            \"Microsoft DH SChannel Cryptographic Provider\",\n            \"Microsoft RSA SChannel Cryptographic Provider\"});\n            this.cbProvider.Location = new System.Drawing.Point(23, 89);\n            this.cbProvider.Name = \"cbProvider\";\n            this.cbProvider.Size = new System.Drawing.Size(392, 21);\n            this.cbProvider.TabIndex = 0;\n            this.cbProvider.SelectedIndexChanged += new System.EventHandler(this.CbProviderSelectedIndexChanged);\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(20, 124);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(54, 13);\n            this.label3.TabIndex = 3;\n            this.label3.Text = \"Bit length:\";\n            // \n            // cbLength\n            // \n            this.cbLength.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbLength.FormattingEnabled = true;\n            this.cbLength.Location = new System.Drawing.Point(23, 140);\n            this.cbLength.Name = \"cbLength\";\n            this.cbLength.Size = new System.Drawing.Size(121, 21);\n            this.cbLength.TabIndex = 4;\n            this.cbLength.SelectedIndexChanged += new System.EventHandler(this.CbLengthSelectedIndexChanged);\n            // \n            // KeysPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.cbLength);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.cbProvider);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtConnect);\n            this.Name = \"KeysPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label txtConnect;\n        private Label label2;\n        private ComboBox cbProvider;\n        private Label label3;\n        private ComboBox cbLength;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/KeysPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates.Wizards.CertificateRequestWizard\n{\n    using System;\n\n    public partial class KeysPage : DefaultWizardPage\n    {\n        public KeysPage()\n        {\n            InitializeComponent();\n            Caption = \"Cryptographic Service Provider Properties\";\n        }\n\n        protected override void Activate()\n        {\n            base.Activate();\n            var wizardData = (CertificateRequestWizardData)WizardData;\n            cbProvider.SelectedIndex = wizardData.Provider;\n        }\n\n        private void CbProviderSelectedIndexChanged(object sender, EventArgs e)\n        {\n            cbLength.Items.Clear();\n            if (cbProvider.SelectedIndex == 0)\n            {\n                cbLength.Items.Add(\"512\");\n                cbLength.Items.Add(\"1024\");\n                cbLength.SelectedIndex = 0;\n            }\n            else\n            {\n                cbLength.Items.Add(\"384\");\n                cbLength.Items.Add(\"512\");\n                cbLength.Items.Add(\"1024\");\n                cbLength.Items.Add(\"2048\");\n                cbLength.Items.Add(\"4096\");\n                cbLength.Items.Add(\"8192\");\n                cbLength.Items.Add(\"16384\");\n                cbLength.SelectedIndex = 2;\n            }\n        }\n\n        private void CbLengthSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var wizardData = (CertificateRequestWizardData)WizardData;\n            wizardData.Provider = cbProvider.SelectedIndex;\n            wizardData.Length = int.Parse(cbLength.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/KeysPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"txtConnect.Text\" xml:space=\"preserve\">\n    <value>Select a cryptographic service provider and a bit length. The bit length of the encryption key determines the \ncertificate's encryption strength. The greater the bit length, the stronger the security. However, a greater bit\nlength may decrease performance.</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/PropertiesPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Certificates.Wizards.CertificateRequestWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class PropertiesPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtCommonName = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label4 = new System.Windows.Forms.Label();\n            this.label5 = new System.Windows.Forms.Label();\n            this.label6 = new System.Windows.Forms.Label();\n            this.label7 = new System.Windows.Forms.Label();\n            this.txtOrganization = new System.Windows.Forms.TextBox();\n            this.txtUnit = new System.Windows.Forms.TextBox();\n            this.txtCity = new System.Windows.Forms.TextBox();\n            this.txtState = new System.Windows.Forms.TextBox();\n            this.cbCountry = new System.Windows.Forms.ComboBox();\n            this.SuspendLayout();\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F);\n            this.label2.Location = new System.Drawing.Point(20, 69);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(80, 13);\n            this.label2.TabIndex = 5;\n            this.label2.Text = \"Common name:\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(20, 25);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(494, 26);\n            this.label3.TabIndex = 6;\n            this.label3.Text = \"Specify the required information for the certificate. State/province and City/loc\" +\n    \"ality must be specified as \\r\\nofficial names and they cannot contain abbreviation\" +\n    \"s.\\r\\n\";\n            // \n            // txtCommonName\n            // \n            this.txtCommonName.Location = new System.Drawing.Point(180, 66);\n            this.txtCommonName.Name = \"txtCommonName\";\n            this.txtCommonName.Size = new System.Drawing.Size(299, 20);\n            this.txtCommonName.TabIndex = 7;\n            this.txtCommonName.TextChanged += new System.EventHandler(this.txtCommonName_TextChanged);\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(20, 95);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(69, 13);\n            this.label1.TabIndex = 8;\n            this.label1.Text = \"Organization:\";\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(20, 121);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(97, 13);\n            this.label4.TabIndex = 9;\n            this.label4.Text = \"Organizational unit:\";\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(20, 147);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(64, 13);\n            this.label5.TabIndex = 10;\n            this.label5.Text = \"City/locality:\";\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(20, 173);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(81, 13);\n            this.label6.TabIndex = 11;\n            this.label6.Text = \"State/province:\";\n            // \n            // label7\n            // \n            this.label7.AutoSize = true;\n            this.label7.Location = new System.Drawing.Point(20, 199);\n            this.label7.Name = \"label7\";\n            this.label7.Size = new System.Drawing.Size(80, 13);\n            this.label7.TabIndex = 12;\n            this.label7.Text = \"Country/region:\";\n            // \n            // txtOrganization\n            // \n            this.txtOrganization.Location = new System.Drawing.Point(180, 92);\n            this.txtOrganization.Name = \"txtOrganization\";\n            this.txtOrganization.Size = new System.Drawing.Size(299, 20);\n            this.txtOrganization.TabIndex = 13;\n            this.txtOrganization.TextChanged += new System.EventHandler(this.txtOrganization_TextChanged);\n            // \n            // txtUnit\n            // \n            this.txtUnit.Location = new System.Drawing.Point(180, 118);\n            this.txtUnit.Name = \"txtUnit\";\n            this.txtUnit.Size = new System.Drawing.Size(94, 20);\n            this.txtUnit.TabIndex = 14;\n            this.txtUnit.TextChanged += new System.EventHandler(this.txtUnit_TextChanged);\n            // \n            // txtCity\n            // \n            this.txtCity.Location = new System.Drawing.Point(180, 144);\n            this.txtCity.Name = \"txtCity\";\n            this.txtCity.Size = new System.Drawing.Size(154, 20);\n            this.txtCity.TabIndex = 15;\n            this.txtCity.TextChanged += new System.EventHandler(this.txtCity_TextChanged);\n            // \n            // txtState\n            // \n            this.txtState.Location = new System.Drawing.Point(180, 170);\n            this.txtState.Name = \"txtState\";\n            this.txtState.Size = new System.Drawing.Size(154, 20);\n            this.txtState.TabIndex = 16;\n            this.txtState.TextChanged += new System.EventHandler(this.txtState_TextChanged);\n            // \n            // cbCountry\n            // \n            this.cbCountry.FormattingEnabled = true;\n            this.cbCountry.Location = new System.Drawing.Point(180, 196);\n            this.cbCountry.Name = \"cbCountry\";\n            this.cbCountry.Size = new System.Drawing.Size(299, 21);\n            this.cbCountry.TabIndex = 17;\n            this.cbCountry.Text = \"US\";\n            this.cbCountry.TextChanged += new System.EventHandler(this.cbCountry_TextChanged);\n            // \n            // PropertiesPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.cbCountry);\n            this.Controls.Add(this.txtState);\n            this.Controls.Add(this.txtCity);\n            this.Controls.Add(this.txtUnit);\n            this.Controls.Add(this.txtOrganization);\n            this.Controls.Add(this.label7);\n            this.Controls.Add(this.label6);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtCommonName);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label3);\n            this.Name = \"PropertiesPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.Load += new System.EventHandler(this.PropertiesPage_Load);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label2;\n        private Label label3;\n        private TextBox txtCommonName;\n        private Label label1;\n        private Label label4;\n        private Label label5;\n        private Label label6;\n        private Label label7;\n        private TextBox txtOrganization;\n        private TextBox txtUnit;\n        private TextBox txtCity;\n        private TextBox txtState;\n        private ComboBox cbCountry;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/PropertiesPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Certificates.Wizards.CertificateRequestWizard\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Globalization;\n    using System.Linq;\n    using System.Threading.Tasks;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class PropertiesPage : DefaultWizardPage\n    {\n        public PropertiesPage()\n        {\n            InitializeComponent();\n            Caption = \"Distinguished Name Properties\";\n        }\n\n        protected override bool CanNavigateNext\n        {\n            get\n            {\n                return base.CanNavigateNext\n                  && !string.IsNullOrWhiteSpace(txtCommonName.Text)\n                  && !string.IsNullOrWhiteSpace(txtOrganization.Text)\n                  && !string.IsNullOrWhiteSpace(txtUnit.Text)\n                  && !string.IsNullOrWhiteSpace(txtCity.Text)\n                  && !string.IsNullOrWhiteSpace(txtState.Text)\n                  && !string.IsNullOrWhiteSpace(cbCountry.Text);\n            }\n        }\n\n        private void txtCommonName_TextChanged(object sender, EventArgs e)\n        {\n            var wizardData = ((CertificateRequestWizardData)WizardData);\n            wizardData.CommonName = txtCommonName.Text;\n            UpdateWizard();\n        }\n\n        protected override void Activate()\n        {\n            base.Activate();\n            txtCommonName.SelectAll();\n            txtCommonName.Focus();\n        }\n\n        private void txtOrganization_TextChanged(object sender, EventArgs e)\n        {\n            var wizardData = ((CertificateRequestWizardData)WizardData);\n            wizardData.Organization = txtOrganization.Text;\n            UpdateWizard();\n        }\n\n        private void txtUnit_TextChanged(object sender, EventArgs e)\n        {\n            var wizardData = ((CertificateRequestWizardData)WizardData);\n            wizardData.Unit = txtUnit.Text;\n            UpdateWizard();\n        }\n\n        private void txtCity_TextChanged(object sender, EventArgs e)\n        {\n            var wizardData = ((CertificateRequestWizardData)WizardData);\n            wizardData.City = txtCity.Text;\n            UpdateWizard();\n        }\n\n        private void txtState_TextChanged(object sender, EventArgs e)\n        {\n            var wizardData = ((CertificateRequestWizardData)WizardData);\n            wizardData.State = txtState.Text;\n            UpdateWizard();\n        }\n\n        private void cbCountry_TextChanged(object sender, EventArgs e)\n        {\n            var wizardData = ((CertificateRequestWizardData)WizardData);\n            wizardData.Country = cbCountry.Text;\n            UpdateWizard();\n        }\n\n        private void PropertiesPage_Load(object sender, EventArgs e)\n        {\n            var result = new HashSet<string>();\n            CultureInfo[] cinfo = CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures);\n            foreach (CultureInfo cul in cinfo)\n            {\n                RegionInfo ri;\n                try\n                {\n                    ri = new RegionInfo(cul.Name);\n                    result.Add(ri.TwoLetterISORegionName);\n                }\n                catch\n                {\n                }\n            }\n\n            var codes = result.ToList();\n            codes.Sort();\n\n            foreach (var code in codes)\n            {\n                cbCountry.Items.Add(code);\n            }\n\n            cbCountry.Text = \"US\";\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Certificates/Wizards/CertificateRequestWizard/PropertiesPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Certificates/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\"/>\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\"/>\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6.1\"/></startup></configuration>\n"
  },
  {
    "path": "JexusManager.Features.Cgi/CgiFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Cgi\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Resources;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal class CgiFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly CgiFeature _owner;\n\n            public FeatureTaskList(CgiFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[0];\n            }\n        }\n\n        public CgiFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        private TaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/cgi\", null, false);\n            PropertyGridObject = new CgiItem(section);\n            OnCgiSettingsSaved();\n        }\n\n        public CgiItem PropertyGridObject { get; set; }\n\n        protected void OnCgiSettingsSaved()\n        {\n            CgiSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210534\");\n            return false;\n        }\n\n        public CgiSettingsSavedEventHandler CgiSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public ServerManager Server { get; set; }\n        public Application Application { get; set; }\n\n        public string Name\n        {\n            get { return \"Cgi\"; }\n        }\n\n        public bool IsEnabled { get; set; }\n\n        public void CancelChanges()\n        {\n            Load();\n        }\n\n        public bool ApplyChanges()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            PropertyGridObject.Apply();\n            service.ServerManager.CommitChanges();\n            return true;\n        }\n\n        public bool LongDateEnabled { get; set; }\n\n        public bool ExtensionEnabled { get; set; }\n\n        public bool SizeEnabled { get; set; }\n\n        public bool TimeEnabled { get; set; }\n\n        public bool DateEnabled { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Cgi/CgiItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Cgi\n{\n    using System;\n    using System.ComponentModel;\n\n    using Microsoft.Web.Administration;\n\n    internal class CgiItem\n    {\n        [Browsable(false)]\n        public ConfigurationElement Element { get; set; }\n\n        public CgiItem(ConfigurationElement element)\n        {\n            this.Element = element;\n            CreateCgiWithNewConsole = (bool)element[\"createCGIWithNewConsole\"];\n            CreateProcessAsUser = (bool)element[\"createProcessAsUser\"];\n            Timeout = (TimeSpan)element[\"timeout\"];\n        }\n\n        public void Apply()\n        {\n            Element[\"createCGIWithNewConsole\"] = CreateCgiWithNewConsole;\n            Element[\"createProcessAsUser\"] = CreateProcessAsUser;\n            Element[\"timeout\"] = Timeout;\n        }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"Indicates whether a CGI application runs in its own console. If the value is set to true, each CGI application creates a new console when started. A value of false indicaes that CGI applications should run without a console.\")]\n        [DisplayName(\"Use New Console For Each Invocation\")]\n        [DefaultValue(false)]\n        public bool CreateCgiWithNewConsole { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Security\")]\n        [Description(\"Specifies whether a CGI process is created in the system context or in the context of the requesting user.\")]\n        [DisplayName(\"Impersonate User\")]\n        [DefaultValue(true)]\n        public bool CreateProcessAsUser { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Behavior\")]\n        [Description(\"Specifies the time-out value for CGI applications.\")]\n        [DisplayName(\"Timeout (hh:mm:ss)\")]\n        [DefaultValue(typeof(TimeSpan), \"0:15:00\")]\n        public TimeSpan Timeout { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Cgi/CgiModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Cgi\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class CgiModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)this.GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(\n                this,\n                typeof(CgiPage),\n                \"CGI\",\n                \"Configure properties for CGI programs\",\n                Resources.cgi_36,\n                Resources.cgi_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Cgi/CgiModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Cgi\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class CgiModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(this.Name, typeof(CgiModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Cgi/CgiPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Cgi\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CgiPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.pgCGI = new System.Windows.Forms.PropertyGrid();\n            this.toolStrip1 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();\n            this.toolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 5;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.pgCGI);\n            this.panel2.Controls.Add(this.toolStrip1);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 11;\n            // \n            // pgCGI\n            // \n            this.pgCGI.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;\n            this.pgCGI.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.pgCGI.Location = new System.Drawing.Point(0, 25);\n            this.pgCGI.Name = \"pgCGI\";\n            this.pgCGI.Size = new System.Drawing.Size(560, 515);\n            this.pgCGI.TabIndex = 1;\n            this.pgCGI.ToolbarVisible = false;\n            this.pgCGI.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.PgCgiPropertyValueChanged);\n            // \n            // toolStrip1\n            // \n            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel1,\n            this.toolStripComboBox1});\n            this.toolStrip1.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip1.Name = \"toolStrip1\";\n            this.toolStrip1.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip1.TabIndex = 0;\n            this.toolStrip1.Text = \"toolStrip1\";\n            // \n            // toolStripLabel1\n            // \n            this.toolStripLabel1.Name = \"toolStripLabel1\";\n            this.toolStripLabel1.Size = new System.Drawing.Size(48, 22);\n            this.toolStripLabel1.Text = \"Display:\";\n            // \n            // toolStripComboBox1\n            // \n            this.toolStripComboBox1.Items.AddRange(new object[] {\n            \"Friendly Names\",\n            \"Configuration Names\",\n            \"Both Names\"});\n            this.toolStripComboBox1.Name = \"toolStripComboBox1\";\n            this.toolStripComboBox1.Size = new System.Drawing.Size(121, 25);\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(48, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"CGI\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // CgiPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"CgiPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip1.ResumeLayout(false);\n            this.toolStrip1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private PropertyGrid pgCGI;\n        private ToolStrip toolStrip1;\n        private ToolStripLabel toolStripLabel1;\n        private ToolStripComboBox toolStripComboBox1;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Cgi/CgiPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Cgi\n{\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    internal partial class CgiPage : ModulePropertiesPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly CgiPage _owner;\n\n            public PageTaskList(CgiPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private CgiFeature _feature;\n        private bool _hasChanges;\n        private bool _initialized;\n        private TaskList _taskList;\n\n        public CgiPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new CgiFeature(Module);\n            _feature.CgiSettingsUpdated = Refresh;\n            _feature.Load();\n            base.Initialize(navigationData);\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ApplyChanges()\n        {\n            if (!_feature.ApplyChanges())\n            {\n                return false;\n            }\n\n            ClearChanges();\n            return true;\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            _feature.CancelChanges();\n            ClearChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get { return _hasChanges; }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get { return true; }\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            Refresh();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        protected override void OnRefresh()\n        {\n            if (!_hasChanges)\n            {\n                pgCGI.SelectedObject = _feature.PropertyGridObject;\n                _initialized = true;\n            }\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n\n        private void PgCgiPropertyValueChanged(object s, PropertyValueChangedEventArgs e)\n        {\n            InformChanges();\n        }\n\n        protected override PropertyBag GetProperties()\n        {\n            return null;\n        }\n\n        protected override PropertyBag UpdateProperties(out bool updateSuccessful)\n        {\n            updateSuccessful = false;\n            return null;\n        }\n\n        protected override void ProcessProperties(PropertyBag properties)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Cgi/CgiPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>281, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Cgi/CgiSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Cgi\n{\n    public delegate void CgiSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Cgi/JexusManager.Features.Cgi.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Cgi</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Cgi/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"0adf28c5-377f-4aa3-b732-aa8c8aeebb16\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "JexusManager.Features.Cgi/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Cgi.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Cgi.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap cgi_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"cgi_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Cgi/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"cgi_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\cgi_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Cgi/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Compression/CompressionFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Compression\n{\n    using System;\n    using System.Diagnostics;\n    using System.Resources;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Windows.Forms;\n\n    internal class CompressionFeature\n    {\n        public CompressionFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var urlCompressionSection = service.GetSection(\"system.webServer/urlCompression\");\n            StaticEnabled = (bool)urlCompressionSection[\"doStaticCompression\"];\n            DynamicEnabled = (bool)urlCompressionSection[\"doDynamicCompression\"];\n            if (service.Server != null)\n            {\n                var httpCompressionSection = service.GetSection(\"system.webServer/httpCompression\");\n                DoDiskSpaceLimiting = (bool)httpCompressionSection[\"doDiskSpaceLimiting\"];\n                MaxDiskSpaceUsage = httpCompressionSection[\"maxDiskSpaceUsage\"].ToString();\n                Directory = httpCompressionSection[\"directory\"].ToString();\n                MinFileSizeForComp = httpCompressionSection[\"minFileSizeForComp\"].ToString();\n                DoFileSize = MinFileSizeForComp != \"0\";\n            }\n\n            OnCompressionSettingsSaved();\n        }\n\n        public string Directory { get; set; }\n\n        protected void OnCompressionSettingsSaved()\n        {\n            CompressionSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210466\");\n            return false;\n        }\n\n        public CompressionSettingsSavedEventHandler CompressionSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public string Name\n        {\n            get\n            {\n                return \"Compression\";\n            }\n        }\n\n        public string MinFileSizeForComp { get; set; }\n        public string MaxDiskSpaceUsage { get; set; }\n        public bool DoDiskSpaceLimiting { get; set; }\n        public bool DynamicEnabled { get; set; }\n        public bool StaticEnabled { get; set; }\n\n        public string FileSize\n        {\n            get { return DoFileSize ? MinFileSizeForComp : \"0\"; }\n        }\n\n        public bool DoFileSize { get; set; }\n\n        public void CancelChanges()\n        {\n            Load();\n        }\n\n        public bool ApplyChanges()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var urlCompressionSection = service.GetSection(\"system.webServer/urlCompression\");\n            urlCompressionSection[\"doStaticCompression\"] = StaticEnabled;\n            urlCompressionSection[\"doDynamicCompression\"] = DynamicEnabled;\n\n            if (service.Server != null)\n            {\n                uint fileSize;\n                if (!uint.TryParse(MinFileSizeForComp, out fileSize) || fileSize > 4294967295)\n                {\n                    var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    dialog.ShowMessage($\"'{MinFileSizeForComp}' is an invalid value for file size. The value must be between 0 and 4294967295.\", Name, MessageBoxButtons.OK, MessageBoxIcon.Warning);\n                    return false;\n                }\n\n                uint diskspace;\n                if (!uint.TryParse(MaxDiskSpaceUsage, out diskspace) || diskspace > 2147483647)\n                {\n                    var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    dialog.ShowMessage($\"'{MaxDiskSpaceUsage}' is an invalid value for maximum disk space usage. The value must be between 0 and 2147483647.\", Name, MessageBoxButtons.OK, MessageBoxIcon.Warning);\n                    return false;\n                }\n\n                var httpCompressionSection = service.GetSection(\"system.webServer/httpCompression\");\n                httpCompressionSection[\"doDiskSpaceLimiting\"] = DoDiskSpaceLimiting;\n                httpCompressionSection[\"maxDiskSpaceUsage\"] = diskspace;\n                httpCompressionSection[\"directory\"] = Directory;\n                httpCompressionSection[\"minFileSizeForComp\"] = fileSize;\n            }\n\n            service.ServerManager.CommitChanges();\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Compression/CompressionModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Compression\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class CompressionModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(CompressionPage), \"Compression\",\n                \"Configure settings to compress responses\",\n                Resources.compression_36, Resources.compression_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Compression/CompressionModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Compression\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class CompressionModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(CompressionModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Compression/CompressionPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Compression\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CompressionPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.gbStatic = new System.Windows.Forms.GroupBox();\n            this.txtDiskspaceLimit = new System.Windows.Forms.TextBox();\n            this.cbDiskspaceLimit = new System.Windows.Forms.CheckBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.txtFileSize = new System.Windows.Forms.TextBox();\n            this.cbFileSize = new System.Windows.Forms.CheckBox();\n            this.cbDynamic = new System.Windows.Forms.CheckBox();\n            this.cbStatic = new System.Windows.Forms.CheckBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.gbStatic.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 5;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.gbStatic);\n            this.panel2.Controls.Add(this.cbDynamic);\n            this.panel2.Controls.Add(this.cbStatic);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 11;\n            // \n            // gbStatic\n            // \n            this.gbStatic.Controls.Add(this.txtDiskspaceLimit);\n            this.gbStatic.Controls.Add(this.cbDiskspaceLimit);\n            this.gbStatic.Controls.Add(this.btnBrowse);\n            this.gbStatic.Controls.Add(this.txtPath);\n            this.gbStatic.Controls.Add(this.label4);\n            this.gbStatic.Controls.Add(this.txtFileSize);\n            this.gbStatic.Controls.Add(this.cbFileSize);\n            this.gbStatic.Location = new System.Drawing.Point(16, 80);\n            this.gbStatic.Name = \"gbStatic\";\n            this.gbStatic.Size = new System.Drawing.Size(450, 210);\n            this.gbStatic.TabIndex = 5;\n            this.gbStatic.TabStop = false;\n            this.gbStatic.Text = \"Static Compression\";\n            // \n            // txtDiskspaceLimit\n            // \n            this.txtDiskspaceLimit.Location = new System.Drawing.Point(27, 172);\n            this.txtDiskspaceLimit.Name = \"txtDiskspaceLimit\";\n            this.txtDiskspaceLimit.Size = new System.Drawing.Size(110, 20);\n            this.txtDiskspaceLimit.TabIndex = 6;\n            this.txtDiskspaceLimit.TextChanged += new System.EventHandler(this.txtDiskspaceLimit_TextChanged);\n            // \n            // cbDiskspaceLimit\n            // \n            this.cbDiskspaceLimit.AutoSize = true;\n            this.cbDiskspaceLimit.Location = new System.Drawing.Point(6, 142);\n            this.cbDiskspaceLimit.Name = \"cbDiskspaceLimit\";\n            this.cbDiskspaceLimit.Size = new System.Drawing.Size(232, 17);\n            this.cbDiskspaceLimit.TabIndex = 5;\n            this.cbDiskspaceLimit.Text = \"Per application pool disk space limit (in MB):\";\n            this.cbDiskspaceLimit.UseVisualStyleBackColor = true;\n            this.cbDiskspaceLimit.CheckedChanged += new System.EventHandler(this.cbDiskspaceLimit_CheckedChanged);\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(387, 107);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(30, 23);\n            this.btnBrowse.TabIndex = 4;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);\n            // \n            // txtPath\n            // \n            this.txtPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;\n            this.txtPath.Location = new System.Drawing.Point(6, 109);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(375, 20);\n            this.txtPath.TabIndex = 3;\n            this.txtPath.TextChanged += new System.EventHandler(this.txtPath_TextChanged);\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(6, 82);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(84, 13);\n            this.label4.TabIndex = 2;\n            this.label4.Text = \"Cache directory:\";\n            // \n            // txtFileSize\n            // \n            this.txtFileSize.Location = new System.Drawing.Point(27, 46);\n            this.txtFileSize.Name = \"txtFileSize\";\n            this.txtFileSize.Size = new System.Drawing.Size(110, 20);\n            this.txtFileSize.TabIndex = 1;\n            this.txtFileSize.TextChanged += new System.EventHandler(this.txtFileSize_TextChanged);\n            // \n            // cbFileSize\n            // \n            this.cbFileSize.AutoSize = true;\n            this.cbFileSize.Location = new System.Drawing.Point(6, 19);\n            this.cbFileSize.Name = \"cbFileSize\";\n            this.cbFileSize.Size = new System.Drawing.Size(217, 17);\n            this.cbFileSize.TabIndex = 0;\n            this.cbFileSize.Text = \"Only compress files larger than (in bytes):\";\n            this.cbFileSize.UseVisualStyleBackColor = true;\n            this.cbFileSize.CheckedChanged += new System.EventHandler(this.cbFileSize_CheckedChanged);\n            // \n            // cbDynamic\n            // \n            this.cbDynamic.AutoSize = true;\n            this.cbDynamic.Location = new System.Drawing.Point(16, 21);\n            this.cbDynamic.Name = \"cbDynamic\";\n            this.cbDynamic.Size = new System.Drawing.Size(202, 17);\n            this.cbDynamic.TabIndex = 4;\n            this.cbDynamic.Text = \"Enable dynamic content compression\";\n            this.cbDynamic.UseVisualStyleBackColor = true;\n            this.cbDynamic.CheckedChanged += new System.EventHandler(this.cbDynamic_CheckedChanged);\n            // \n            // cbStatic\n            // \n            this.cbStatic.AutoSize = true;\n            this.cbStatic.Location = new System.Drawing.Point(16, 44);\n            this.cbStatic.Name = \"cbStatic\";\n            this.cbStatic.Size = new System.Drawing.Size(188, 17);\n            this.cbStatic.TabIndex = 3;\n            this.cbStatic.Text = \"Enable static content compression\";\n            this.cbStatic.UseVisualStyleBackColor = true;\n            this.cbStatic.CheckedChanged += new System.EventHandler(this.cbStatic_CheckedChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(818, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to configure settings for compression of responses. This can imp\" +\n    \"rove the perceived performance of a website greatly and reduce bandwidth-related\" +\n    \" charges.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(138, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Compression\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // CompressionPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"CompressionPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.gbStatic.ResumeLayout(false);\n            this.gbStatic.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private CheckBox cbStatic;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private CheckBox cbDynamic;\n        private GroupBox gbStatic;\n        private TextBox txtDiskspaceLimit;\n        private CheckBox cbDiskspaceLimit;\n        private Button btnBrowse;\n        private TextBox txtPath;\n        private Label label4;\n        private TextBox txtFileSize;\n        private CheckBox cbFileSize;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Compression/CompressionPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Compression\n{\n    using System;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    internal partial class CompressionPage : ModuleDialogPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly CompressionPage _owner;\n\n            public PageTaskList(CompressionPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private CompressionFeature _feature;\n        private bool _hasChanges;\n        private bool _initialized;\n        private TaskList _taskList;\n\n        public CompressionPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new CompressionFeature(Module);\n            _feature.CompressionSettingsUpdated = Refresh;\n            _feature.Load();\n            base.Initialize(navigationData);\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void cbStatic_CheckedChanged(object sender, EventArgs e)\n        {\n            _feature.StaticEnabled = cbStatic.Checked;\n            InformChanges();\n        }\n\n        private void cbDynamic_CheckedChanged(object sender, EventArgs e)\n        {\n            _feature.DynamicEnabled = cbDynamic.Checked;\n            InformChanges();\n        }\n\n        private void btnBrowse_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ShowBrowseDialog(txtPath, null);\n            _feature.Directory = txtPath.Text;\n            InformChanges();\n        }\n\n        private void cbFileSize_CheckedChanged(object sender, EventArgs e)\n        {\n            _feature.DoFileSize = cbFileSize.Checked;\n            InformChanges();\n        }\n\n        private void cbDiskspaceLimit_CheckedChanged(object sender, EventArgs e)\n        {\n            _feature.DoDiskSpaceLimiting = cbDiskspaceLimit.Checked;\n            InformChanges();\n        }\n\n        private void txtFileSize_TextChanged(object sender, EventArgs e)\n        {\n            _feature.MinFileSizeForComp = txtFileSize.Text;\n            InformChanges();\n        }\n\n        private void txtPath_TextChanged(object sender, EventArgs e)\n        {\n            _feature.Directory = txtPath.Text;\n            InformChanges();\n        }\n\n        private void txtDiskspaceLimit_TextChanged(object sender, EventArgs e)\n        {\n            _feature.MaxDiskSpaceUsage = txtDiskspaceLimit.Text;\n            InformChanges();\n        }\n\n        protected override bool ApplyChanges()\n        {\n            if (!_feature.ApplyChanges())\n            {\n                return false;\n            }\n\n            ClearChanges();\n            return true;\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            _feature.CancelChanges();\n            ClearChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get { return _hasChanges; }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get\n            {\n                return !gbStatic.Visible || (!string.IsNullOrWhiteSpace(txtFileSize.Text)\n                    && !string.IsNullOrWhiteSpace(txtPath.Text)\n                    && !string.IsNullOrWhiteSpace(txtDiskspaceLimit.Text));\n            }\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            Refresh();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        protected override void OnRefresh()\n        {\n            if (!_hasChanges)\n            {\n                cbDynamic.Checked = _feature.DynamicEnabled;\n                cbStatic.Checked = _feature.StaticEnabled;\n\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                gbStatic.Visible = service.Scope == ManagementScope.Server;\n                if (service.Scope == ManagementScope.Server)\n                {\n                    txtDiskspaceLimit.Enabled = cbDiskspaceLimit.Checked = _feature.DoDiskSpaceLimiting;\n                    txtDiskspaceLimit.Text = _feature.MaxDiskSpaceUsage.ToString();\n                    txtPath.Text = _feature.Directory;\n                    txtFileSize.Text = _feature.FileSize;\n                    txtFileSize.Enabled = cbFileSize.Checked = _feature.DoFileSize;\n                }\n\n                _initialized = true;\n            }\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Compression/CompressionPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Compression/CompressionSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Compression\n{\n    public delegate void CompressionSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Compression/JexusManager.Features.Compression.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Compression</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Compression/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"cd9a8535-a6b1-46bb-8acb-73d5e393147e\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "JexusManager.Features.Compression/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Compression.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Compression.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap compression_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"compression_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Compression/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"compression_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\compression_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Compression/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/DefaultDocumentFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.DefaultDocument\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class DefaultDocumentFeature : FeatureBase<DocumentItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly DefaultDocumentFeature _owner;\n\n            public FeatureTaskList(DefaultDocumentFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                    result.Add(GetMoveUpTaskItem(_owner.CanMoveUp));\n                    result.Add(GetMoveDownTaskItem(_owner.CanMoveDown));\n                }\n\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                if (!_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.CanRevert)\n                {\n                    result.Add(RevertTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveUp()\n            {\n                _owner.MoveUp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveDown()\n            {\n                _owner.MoveDown();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n        }\n\n        public DefaultDocumentFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/defaultDocument\");\n            var enabled = (bool)section[\"enabled\"];\n            CanRevert = section.CanRevert();\n            SetEnabled(enabled);\n\n            LoadItems();\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewDefaultDocumentDialog(Module, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            var index = this.Items.FindIndex(item => item.Flag == \"Local\");\n            this.InsertItem(index == -1 ? 0 : index, dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                service.ShowMessage(\n                    \"Are you sure that you want to remove the selected default document?\",\n                    \"Confirm Remove\", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void MoveUp()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    service.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            this.MoveUpItem();\n        }\n\n        public void MoveDown()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    service.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            this.MoveDownItem();\n        }\n\n        public void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/defaultDocument\");\n            section[\"enabled\"] = true;\n            SetEnabled(true);\n            service.ServerManager.CommitChanges();\n        }\n\n        public void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/defaultDocument\");\n            section[\"enabled\"] = false;\n            SetEnabled(false);\n            service.ServerManager.CommitChanges();\n        }\n\n        public void Revert()\n        {\n            if (!CanRevert)\n            {\n                throw new InvalidOperationException(\"Revert operation cannot be done at server level\");\n            }\n\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                service.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            this.RevertItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/defaultDocument\");\n            return section.GetCollection(\"files\");\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            DefaultDocumentSettingsUpdated?.Invoke();\n        }\n\n        public void SetEnabled(bool enabled)\n        {\n            IsEnabled = enabled;\n            this.OnSettingsSaved();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210478\");\n            return false;\n        }\n\n        public DefaultDocumentSettingsSavedEventHandler DefaultDocumentSettingsUpdated { get; set; }\n        public string Description { get; }\n        public bool IsEnabled { get; private set; }\n        public bool CanRevert { get; private set; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"Default Document\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/DefaultDocumentModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DefaultDocument\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    public class DefaultDocumentModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(DefaultDocumentPage), \"Default Document\", \"Configure default files to return when clients do not specify a file in a request\", Resources.default_document_36, Resources.default_document_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/DefaultDocumentModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DefaultDocument\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class DefaultDocumentModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(DefaultDocumentModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/DefaultDocumentPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.DefaultDocument\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class DefaultDocumentPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.panel2.SuspendLayout();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 3;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 9;\n            this.pictureBox1.TabStop = false;\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 8;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 13);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 527);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1_SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 200;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 80;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(666, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to specify the default files(s) to return when a client does not\" +\n    \" request a specific file. Set default documents in order of priority.\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(183, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Default Document\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // DefaultDocumentPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"DefaultDocumentPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chType;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Label label2;\n        private Label label3;\n        private PictureBox pictureBox1;\n        private Panel panel2;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/DefaultDocumentPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DefaultDocument\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class DefaultDocumentPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly DefaultDocumentPage _owner;\n\n            public PageTaskList(DefaultDocumentPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class DefaultDocumentListViewItem : ListViewItem, IFeatureListViewItem<DocumentItem>\n        {\n            public DocumentItem Item { get; }\n            private readonly DefaultDocumentPage _page;\n\n            public DefaultDocumentListViewItem(DocumentItem item, DefaultDocumentPage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private DefaultDocumentFeature _feature;\n        private PageTaskList _taskList;\n\n        public DefaultDocumentPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new DefaultDocumentFeature(Module);\n            _feature.DefaultDocumentSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new DefaultDocumentListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem != null)\n            {\n                foreach (DefaultDocumentListViewItem item in listView1.Items)\n                {\n                    if (item.Item == _feature.SelectedItem)\n                    {\n                        item.Selected = true;\n                    }\n                }\n            }\n\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            // TODO: use WatchDog to suppress extra refresh (one selection triggers this event twice)\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/DefaultDocumentPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>807, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>702, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/DefaultDocumentSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DefaultDocument\n{\n    public delegate void DefaultDocumentSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/DocumentItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DefaultDocument\n{\n    using Microsoft.Web.Administration;\n\n    public class DocumentItem : IItem<DocumentItem>\n    {\n        public ConfigurationElement Element { get; set; }\n        public string Name { get; set; }\n        public string Flag { get; set; }\n\n        public DocumentItem(ConfigurationElement element)\n        {\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            Element = element;\n            if (element == null)\n            {\n                return;\n            }\n\n            Name = (string)element[\"value\"];\n        }\n\n        public bool Equals(DocumentItem other)\n        {\n            return Match(other);\n        }\n\n        public void Apply()\n        {\n            Element[\"value\"] = Name;\n        }\n\n        public bool Match(DocumentItem other)\n        {\n            return other != null && other.Name == Name;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/JexusManager.Features.DefaultDocument.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.DefaultDocument</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/NewDefaultDocumentDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.DefaultDocument\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class NewDefaultDocumentDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(242, 91);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(141, 91);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(17, 29);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(320, 20);\n            this.txtName.TabIndex = 2;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(14, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(38, 13);\n            this.label1.TabIndex = 3;\n            this.label1.Text = \"Name:\";\n            // \n            // NewDefaultDocumentDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 126);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.HelpButton = true;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"NewDefaultDocumentDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Add Default Document\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private TextBox txtName;\n        private Label label1;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/NewDefaultDocumentDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DefaultDocument\n{\n    using System;\n    using System.ComponentModel;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class NewDefaultDocumentDialog : DialogForm\n    {\n        public NewDefaultDocumentDialog(IServiceProvider serviceProvider, DefaultDocumentFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var name = txtName.Text.Trim();\n                    var invalid = \"*\".ToCharArray();\n                    foreach (var ch in invalid)\n                    {\n                        if (name.Contains(ch))\n                        {\n                            MessageBox.Show($\"The specific default document contains the following invalid character: {ch}.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                            return;\n                        }\n                    }\n\n                    foreach (var item in feature.Items)\n                    {\n                        if (string.Equals(item.Name, name, StringComparison.OrdinalIgnoreCase))\n                        {\n                            MessageBox.Show(\"The specific default document already exists in the default documents list.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Error);\n                            return;\n                        }\n                    }\n\n                    Item = new DocumentItem(null);\n                    Item.Name = name;\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public DocumentItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/NewDefaultDocumentDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"1e54f67a-3538-4f8d-b2ee-5da6a821a528\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.DefaultDocument.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.DefaultDocument.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap default_document_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"default_document_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"default_document_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\default_document_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.DefaultDocument/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/DirectoryBrowseFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DirectoryBrowse\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Resources;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class DirectoryBrowseFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly DirectoryBrowseFeature _owner;\n\n            public FeatureTaskList(DirectoryBrowseFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (!_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n        }\n\n        public DirectoryBrowseFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        private TaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/directoryBrowse\");\n            var enabled = (bool)section[\"enabled\"];\n            var flags = (long)section[\"showFlags\"];\n            TimeEnabled = (flags & 4) == 4;\n            SizeEnabled = (flags & 8) == 8;\n            ExtensionEnabled = (flags & 16) == 16;\n            DateEnabled = (flags & 2) == 2;\n            LongDateEnabled = (flags & 32) == 32;\n            SetEnabled(enabled);\n        }\n\n        private void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            ConfigurationSection section = service.GetSection(\"system.webServer/directoryBrowse\");\n            section[\"enabled\"] = true;\n            SetEnabled(true);\n        }\n\n        private void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            ConfigurationSection section = service.GetSection(\"system.webServer/directoryBrowse\");\n            section[\"enabled\"] = false;\n            SetEnabled(false);\n        }\n\n        public void SetEnabled(bool enabled)\n        {\n            IsEnabled = enabled;\n            OnDirectoryBrowseSettingsSaved();\n        }\n\n        protected void OnDirectoryBrowseSettingsSaved()\n        {\n            DirectoryBrowseSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210534\");\n            return false;\n        }\n\n        public DirectoryBrowseSettingsSavedEventHandler DirectoryBrowseSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n\n        public string Name\n        {\n            get { return \"Directory Browsing\"; }\n        }\n\n        public bool IsEnabled { get; set; }\n\n        public void CancelChanges()\n        {\n            Load();\n        }\n\n        public bool ApplyChanges()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/directoryBrowse\");\n            section[\"enabled\"] = IsEnabled;\n            long flags = 0;\n            if (DateEnabled)\n            {\n                flags |= 2;\n            }\n\n            if (TimeEnabled)\n            {\n                flags |= 4;\n            }\n\n            if (SizeEnabled)\n            {\n                flags |= 8;\n            }\n\n            if (ExtensionEnabled)\n            {\n                flags |= 16;\n            }\n\n            if (LongDateEnabled)\n            {\n                flags |= 32;\n            }\n\n            section[\"showFlags\"] = flags;\n            service.ServerManager.CommitChanges();\n            return true;\n        }\n\n        public bool LongDateEnabled { get; set; }\n\n        public bool ExtensionEnabled { get; set; }\n\n        public bool SizeEnabled { get; set; }\n\n        public bool TimeEnabled { get; set; }\n\n        public bool DateEnabled { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/DirectoryBrowseModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DirectoryBrowse\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class DirectoryBrowseModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)this.GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(\n                this,\n                typeof(DirectoryBrowsePage),\n                \"Directory Browsing\",\n                \"Configure information to display in a directory listing\",\n                Resources.directory_browsing_36,\n                Resources.directory_browsing_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/DirectoryBrowseModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DirectoryBrowse\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class DirectoryBrowseModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(this.Name, typeof(DirectoryBrowseModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/DirectoryBrowsePage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.DirectoryBrowse\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class DirectoryBrowsePage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.cbLongDate = new System.Windows.Forms.CheckBox();\n            this.cbDate = new System.Windows.Forms.CheckBox();\n            this.cbExtension = new System.Windows.Forms.CheckBox();\n            this.cbSize = new System.Windows.Forms.CheckBox();\n            this.cbTime = new System.Windows.Forms.CheckBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 5;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.cbLongDate);\n            this.panel2.Controls.Add(this.cbDate);\n            this.panel2.Controls.Add(this.cbExtension);\n            this.panel2.Controls.Add(this.cbSize);\n            this.panel2.Controls.Add(this.cbTime);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 11;\n            // \n            // cbLongDate\n            // \n            this.cbLongDate.AutoSize = true;\n            this.cbLongDate.Enabled = false;\n            this.cbLongDate.Location = new System.Drawing.Point(33, 158);\n            this.cbLongDate.Name = \"cbLongDate\";\n            this.cbLongDate.Size = new System.Drawing.Size(74, 17);\n            this.cbLongDate.TabIndex = 8;\n            this.cbLongDate.Text = \"Long date\";\n            this.cbLongDate.UseVisualStyleBackColor = true;\n            this.cbLongDate.CheckedChanged += new System.EventHandler(this.CbSslCheckedChanged);\n            // \n            // cbDate\n            // \n            this.cbDate.AutoSize = true;\n            this.cbDate.Enabled = false;\n            this.cbDate.Location = new System.Drawing.Point(16, 125);\n            this.cbDate.Name = \"cbDate\";\n            this.cbDate.Size = new System.Drawing.Size(49, 17);\n            this.cbDate.TabIndex = 7;\n            this.cbDate.Text = \"Date\";\n            this.cbDate.UseVisualStyleBackColor = true;\n            this.cbDate.CheckedChanged += new System.EventHandler(this.CbDateCheckedChanged);\n            // \n            // cbExtension\n            // \n            this.cbExtension.AutoSize = true;\n            this.cbExtension.Enabled = false;\n            this.cbExtension.Location = new System.Drawing.Point(16, 90);\n            this.cbExtension.Name = \"cbExtension\";\n            this.cbExtension.Size = new System.Drawing.Size(72, 17);\n            this.cbExtension.TabIndex = 6;\n            this.cbExtension.Text = \"Extension\";\n            this.cbExtension.UseVisualStyleBackColor = true;\n            this.cbExtension.CheckedChanged += new System.EventHandler(this.CbSslCheckedChanged);\n            // \n            // cbSize\n            // \n            this.cbSize.AutoSize = true;\n            this.cbSize.Enabled = false;\n            this.cbSize.Location = new System.Drawing.Point(16, 54);\n            this.cbSize.Name = \"cbSize\";\n            this.cbSize.Size = new System.Drawing.Size(46, 17);\n            this.cbSize.TabIndex = 5;\n            this.cbSize.Text = \"Size\";\n            this.cbSize.UseVisualStyleBackColor = true;\n            this.cbSize.CheckedChanged += new System.EventHandler(this.CbSslCheckedChanged);\n            // \n            // cbTime\n            // \n            this.cbTime.AutoSize = true;\n            this.cbTime.Enabled = false;\n            this.cbTime.Location = new System.Drawing.Point(16, 21);\n            this.cbTime.Name = \"cbTime\";\n            this.cbTime.Size = new System.Drawing.Size(49, 17);\n            this.cbTime.TabIndex = 4;\n            this.cbTime.Text = \"Time\";\n            this.cbTime.UseVisualStyleBackColor = true;\n            this.cbTime.CheckedChanged += new System.EventHandler(this.CbSslCheckedChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(357, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to specify the information that displays in a directory listing.\" +\n    \"\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(192, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Directory Browsing\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // DirectoryBrowsePage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"DirectoryBrowsePage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private CheckBox cbTime;\n        private ContextMenuStrip cmsActionPanel;\n        private CheckBox cbLongDate;\n        private CheckBox cbDate;\n        private CheckBox cbExtension;\n        private CheckBox cbSize;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/DirectoryBrowsePage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DirectoryBrowse\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class DirectoryBrowsePage : ModuleDialogPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly DirectoryBrowsePage _owner;\n\n            public PageTaskList(DirectoryBrowsePage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private DirectoryBrowseFeature _feature;\n        private bool _hasChanges;\n        private bool _initialized;\n        private TaskList _taskList;\n\n        public DirectoryBrowsePage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new DirectoryBrowseFeature(Module);\n            _feature.DirectoryBrowseSettingsUpdated = Refresh;\n            _feature.Load();\n            base.Initialize(navigationData);\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ApplyChanges()\n        {\n            _feature.TimeEnabled = cbTime.Checked;\n            _feature.SizeEnabled = cbSize.Checked;\n            _feature.ExtensionEnabled = cbExtension.Checked;\n            _feature.DateEnabled = cbDate.Checked;\n            _feature.LongDateEnabled = cbLongDate.Checked;\n            if (!_feature.ApplyChanges())\n            {\n                return false;\n            }\n\n            ClearChanges();\n            return true;\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            _feature.CancelChanges();\n            ClearChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get { return _hasChanges; }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get { return true; }\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            Refresh();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        protected override void OnRefresh()\n        {\n            cbTime.Enabled = cbSize.Enabled = cbExtension.Enabled = cbDate.Enabled = _feature.IsEnabled;\n            if (!_hasChanges)\n            {\n                cbTime.Checked = _feature.TimeEnabled;\n                cbSize.Checked = _feature.SizeEnabled;\n                cbExtension.Checked = _feature.ExtensionEnabled;\n                cbDate.Checked = _feature.DateEnabled;\n                cbLongDate.Checked = _feature.LongDateEnabled;\n                _initialized = true;\n            }\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n\n        private void CbDateCheckedChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n            cbLongDate.Enabled = cbDate.Checked && cbDate.Enabled;\n        }\n\n        private void CbSslCheckedChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/DirectoryBrowsePage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/DirectoryBrowseSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.DirectoryBrowse\n{\n    public delegate void DirectoryBrowseSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/JexusManager.Features.DirectoryBrowse.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.DirectoryBrowse</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"5fb94cd1-af29-4396-a27f-891243f12e8c\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.DirectoryBrowse.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.DirectoryBrowse.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap directory_browsing_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"directory_browsing_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"directory_browsing_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\directory_browsing_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.DirectoryBrowse/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.FastCgi/EnvironmentVariables.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System.ComponentModel;\n\n    internal class EnvironmentVariables\n    {\n        [Category(\"Misc\")]\n        [DisplayName(\"Name\")]\n        [DefaultValue(\"Name\")]\n        public string Name { get; set; }\n\n        [Category(\"Misc\")]\n        [DisplayName(\"Value\")]\n        public string Value { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/EnvironmentVariablesCollection.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System.Collections;\n\n    internal class EnvironmentVariablesCollection : CollectionBase\n    {\n        public EnvironmentVariables this[int index]\n        {\n            get\n            {\n                return (EnvironmentVariables)List[index];\n            }\n        }\n\n        public void Add(EnvironmentVariables variable)\n        {\n            List.Add(variable);\n        }\n\n        public void Remove(EnvironmentVariables variable)\n        {\n            List.Remove(variable);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/EnvironmentVariablesCollectionEditor.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System;\n    using System.ComponentModel.Design;\n\n    internal class EnvironmentVariablesCollectionEditor : CollectionEditor\n    {\n        public EnvironmentVariablesCollectionEditor(Type type)\n            : base(type)\n        {\n        }\n\n        protected override string GetDisplayText(object value)\n        {\n            EnvironmentVariables item = (EnvironmentVariables)value;\n            return item.Name;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/ErrorMode.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System.ComponentModel;\n\n    internal enum ErrorMode : long\n    {\n        [Description(\"ReturnStdErrIn500\")]\n        ReturnStdErrIn500 = 0,\n\n        [Description(\"ReturnGeneric500\")]\n        ReturnGeneric500 = 1,\n\n        [Description(\"IgnoreAndReturn200\")]\n        IgnoreAndReturn200 = 2,\n\n        [Description(\"TerminateProcess\")]\n        TerminateProcess = 3\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/FastCgiFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Authorization feature.\n    /// </summary>\n    internal class FastCgiFeature : FeatureBase<FastCgiItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly FastCgiFeature _owner;\n\n            public FeatureTaskList(FastCgiFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"AddAllow\", \"Add Application...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Set\", \"Edit...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddAllow()\n            {\n                _owner.AddAllow();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Edit();\n            }\n        }\n\n        public FastCgiFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            // IMPORTANT: force to be server only.\n            var section = service.ServerManager.GetApplicationHostConfiguration().GetSection(\"system.webServer/fastCgi\");\n            return section.GetCollection();\n        }\n\n        public void Load()\n        {\n            LoadItems();\n        }\n\n        public void AddAllow()\n        {\n            using var dialog = new NewApplicationDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected FastCGI Application?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(FastCgiItem item)\n        {\n            using var dialog = new NewApplicationDialog(Module, SelectedItem, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                SelectedItem.Reset();\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            FastCgiSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210483\");\n            return false;\n        }\n\n        public FastCgiSettingsSavedEventHandler FastCgiSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"FastCGI Settings\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/FastCgiItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System.ComponentModel;\n\n    using Microsoft.Web.Administration;\n\n    internal class FastCgiItem : IItem<FastCgiItem>\n    {\n        public FastCgiItem(ConfigurationElement element)\n        {\n            Element = element;\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inhertied\";\n            EnvironmentVariables = new EnvironmentVariablesCollection();\n            AdvancedSettings = new AdvancedSettings();\n            if (element == null)\n            {\n                Path = Arguments = MonitorChangesTo = string.Empty;\n                MaxInstances = 4U;\n                InstanceMaxRequests = 200U;\n                ActivityTimeout = 30U;\n                IdleTimeout = 300U;\n                QueueLength = 1000U;\n                RapidFailsPerMinute = 10U;\n                RequestTimeout = 90U;\n                return;\n            }\n\n            Reset();\n        }\n\n        public void Reset()\n        {\n            Path = (string)Element[\"fullPath\"];\n            Arguments = (string)Element[\"arguments\"];\n\n            MonitorChangesTo = (string)Element[\"monitorChangesTo\"];\n            ErrorMode = (ErrorMode)Element[\"stderrMode\"];\n            MaxInstances = (uint)Element[\"maxInstances\"];\n            IdleTimeout = (uint)Element[\"idleTimeout\"];\n            ActivityTimeout = (uint)Element[\"activityTimeout\"];\n            RequestTimeout = (uint)Element[\"requestTimeout\"];\n            InstanceMaxRequests = (uint)Element[\"instanceMaxRequests\"];\n            SignalBeforeTerminateSeconds = (uint)Element[\"signalBeforeTerminateSeconds\"];\n            AdvancedSettings.Protocol = (Protocol)Element[\"protocol\"];\n            QueueLength = (uint)Element[\"queueLength\"];\n            AdvancedSettings.FlushNamedPipe = (bool)Element[\"flushNamedPipe\"];\n            RapidFailsPerMinute = (uint)Element[\"rapidFailsPerMinute\"];\n\n            foreach (ConfigurationElement child in Element.GetCollection(\"environmentVariables\"))\n            {\n                EnvironmentVariables.Add(\n                    new EnvironmentVariables { Name = (string)child[\"name\"], Value = (string)child[\"value\"] });\n            }\n        }\n\n        [Browsable(false)]\n        public string Arguments { get; set; }\n\n        [Browsable(false)]\n        public string Path { get; set; }\n\n        [Browsable(false)]\n        public ConfigurationElement Element { get; set; }\n\n        [Browsable(false)]\n        public string Flag { get; set; }\n\n        public bool Equals(FastCgiItem other)\n        {\n            // all properties\n            return Match(other);\n        }\n\n        public void Apply()\n        {\n            Element[\"fullPath\"] = Path;\n            Element[\"arguments\"] = Arguments;\n\n            Element[\"monitorChangesTo\"] = MonitorChangesTo;\n            Element[\"stderrMode\"] = ErrorMode;\n            Element[\"maxInstances\"] = MaxInstances;\n            Element[\"idleTimeout\"] = IdleTimeout;\n            Element[\"activityTimeout\"] = ActivityTimeout;\n            Element[\"requestTimeout\"] = RequestTimeout;\n            Element[\"instanceMaxRequests\"] = InstanceMaxRequests;\n            Element[\"signalBeforeTerminateSeconds\"] = SignalBeforeTerminateSeconds;\n            Element[\"protocol\"] = AdvancedSettings.Protocol;\n            Element[\"queueLength\"] = QueueLength;\n            Element[\"flushNamedPipe\"] = AdvancedSettings.FlushNamedPipe;\n            Element[\"rapidFailsPerMinute\"] = RapidFailsPerMinute;\n\n            var collection = Element.GetCollection(\"environmentVariables\");\n            collection.Clear();\n            foreach (EnvironmentVariables item in EnvironmentVariables)\n            {\n                var newElement = collection.CreateElement();\n                newElement[\"name\"] = item.Name;\n                newElement[\"value\"] = item.Value;\n                collection.Add(newElement);\n            }\n        }\n\n        public bool Match(FastCgiItem other)\n        {\n            // match combined keys.\n            return other != null && other.Arguments == Arguments && other.Path == Path;\n        }\n\n        [Browsable(true)]\n        [Category(\"General\")]\n        [Description(\"Specifies optional environment variables that will be set in the FastCGI executable.\")]\n        [DisplayName(\"Environment Variables\")]\n        [Editor(typeof(EnvironmentVariablesCollectionEditor),\n            typeof(System.Drawing.Design.UITypeEditor))]\n        public EnvironmentVariablesCollection EnvironmentVariables { get; set; }\n\n        [Browsable(true)]\n        [Category(\"General\")]\n        [Description(\"Specifies the number of requests a FastCGI process for this application is allowed to handle.\")]\n        [DisplayName(\"Instance MaxRequests\")]\n        [DefaultValue(200U)]\n        public uint InstanceMaxRequests { get; set; }\n\n        [Browsable(true)]\n        [Category(\"General\")]\n        [Description(\"Specifies the maximum number of FastCGI process that are allowed in the application's process pool.\")]\n        [DisplayName(\"Max Instances\")]\n        [DefaultValue(4U)]\n        public uint MaxInstances { get; set; }\n\n        [Browsable(true)]\n        [Category(\"General\")]\n        [Description(\"Specifies path to a file changes to which will trigger recycle of FastCGI processes.\")]\n        [DisplayName(\"Monitor changes to file\")]\n        [DefaultValue(\"\")]\n        [Editor(typeof(System.Windows.Forms.Design.FileNameEditor), typeof(System.Drawing.Design.UITypeEditor))]\n        public string MonitorChangesTo { get; set; }\n\n        [Browsable(true)]\n        [Category(\"General\")]\n        [Description(\"Specifies how FastCGI module should behave when FastCGI process sends text on standard error stream.\")]\n        [DisplayName(\"Standard error mode\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        public ErrorMode ErrorMode { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"Specifies the time, in seconds, that a FastCGI process for this application is allowed to run without communicating with IIS.\")]\n        [DisplayName(\"Activity Timeout\")]\n        [DefaultValue(30U)]\n        public uint ActivityTimeout { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [DisplayName(\"Advanced Settings\")]\n        public AdvancedSettings AdvancedSettings { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"Specifies the time, in seconds, that a FastCGI process for this application is allowed to remain idle.\")]\n        [DisplayName(\"Idle Timeout\")]\n        [DefaultValue(300U)]\n        public uint IdleTimeout { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"Maximum number of requests that are permitted into FastCGI handler queue.\")]\n        [DisplayName(\"Queue Length\")]\n        [DefaultValue(1000U)]\n        public uint QueueLength { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"Specifies the number of FastCGI process failures allowed in a single minute before the FastCGI handler takes it off line.\")]\n        [DisplayName(\"Rapid Fails PerMinute\")]\n        [DefaultValue(10U)]\n        public uint RapidFailsPerMinute { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"Specifies the maximum allowed time, in seconds, for request processing.\")]\n        [DisplayName(\"Request Timeout\")]\n        [DefaultValue(90U)]\n        public uint RequestTimeout { get; set; }\n\n        [Browsable(true)]\n        [Category(\"Process Model\")]\n        [Description(\"Specifies the amount of time, in seconds, that IIS will wait after IIS signals a FastCGI application that it needs to shut down.\")]\n        [DisplayName(\"Signal Before Terminate\")]\n        [DefaultValue(300U)]\n        public uint SignalBeforeTerminateSeconds { get; set; }\n    }\n\n    [TypeConverter(typeof(ExpandableObjectConverter))]\n    internal class AdvancedSettings\n    {\n        [Browsable(true)]\n        [Description(\"Specifies whether or not the named pipe between FastCGI processes for this application is flushed before shutting down the application.\")]\n        [DisplayName(\"FlushNamedpipe\")]\n        public bool FlushNamedPipe { get; set; }\n\n        [Browsable(true)]\n        [Description(\"Specifies protocol to be used to communicate with FastCGI process.\")]\n        [DisplayName(\"Protocol\")]\n        [TypeConverter(typeof(DescriptionConverter))]\n        public Protocol Protocol { get; set; }\n\n        public override string ToString()\n        {\n            return string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/FastCgiModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class FastCgiModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(FastCgiPage), \"FastCGI Settings\",\n                \"Configure FastCGI process application pools\", Resources.response_header_36,\n                Resources.response_header_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/FastCgiModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class FastCgiModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(FastCgiModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return scope == ManagementScope.Server;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/FastCgiPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.FastCgi\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class FastCgiPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chArguments = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chInstances = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chRequests = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chPath,\n            this.chArguments,\n            this.chInstances,\n            this.chRequests});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 13);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 527);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chPath\n            // \n            this.chPath.Text = \"Full Path\";\n            this.chPath.Width = 300;\n            // \n            // chArguments\n            // \n            this.chArguments.Text = \"Arguments\";\n            this.chArguments.Width = 200;\n            // \n            // chInstances\n            // \n            this.chInstances.Text = \"Max. Instances\";\n            this.chInstances.Width = 120;\n            // \n            // chRequests\n            // \n            this.chRequests.Text = \"Instance Max. Requests\";\n            this.chRequests.Width = 180;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(393, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to configure FastCGI applications used by websites on this serve\" +\n    \"r.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(174, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"FastCGI Settings\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // FastCgiPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"FastCgiPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chPath;\n        private ColumnHeader chArguments;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private ColumnHeader chInstances;\n        private ColumnHeader chRequests;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/FastCgiPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class FastCgiPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly FastCgiPage _owner;\n\n            public PageTaskList(FastCgiPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class FastCgiListViewItem : ListViewItem, IFeatureListViewItem<FastCgiItem>\n        {\n            public FastCgiItem Item { get; }\n\n            private readonly FastCgiPage _page;\n\n            public FastCgiListViewItem(FastCgiItem item, FastCgiPage page)\n                : base(item.Path)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Arguments));\n                SubItems.Add(new ListViewSubItem(this, item.MaxInstances.ToString()));\n                SubItems.Add(new ListViewSubItem(this, item.InstanceMaxRequests.ToString()));\n            }\n        }\n\n        private FastCgiFeature _feature;\n        private PageTaskList _taskList;\n\n        public FastCgiPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new FastCgiFeature(Module);\n            _feature.FastCgiSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new FastCgiListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (FastCgiListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/FastCgiPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>602, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.FastCgi/FastCgiSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    public delegate void FastCgiSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/JexusManager.Features.FastCgi.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.FastCgi</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/NewApplicationDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.FastCgi\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewApplicationDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtArguments = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.pgProperties = new System.Windows.Forms.PropertyGrid();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(382, 471);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(281, 471);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtPath\n            // \n            this.txtPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtPath.Location = new System.Drawing.Point(15, 25);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(420, 20);\n            this.txtPath.TabIndex = 6;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 9);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(51, 13);\n            this.label2.TabIndex = 7;\n            this.label2.Text = \"Full Path:\";\n            // \n            // txtArguments\n            // \n            this.txtArguments.Location = new System.Drawing.Point(15, 80);\n            this.txtArguments.Name = \"txtArguments\";\n            this.txtArguments.Size = new System.Drawing.Size(462, 20);\n            this.txtArguments.TabIndex = 8;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 64);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(60, 13);\n            this.label1.TabIndex = 11;\n            this.label1.Text = \"Arguments:\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 114);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(98, 13);\n            this.label3.TabIndex = 13;\n            this.label3.Text = \"FastCGI Properties:\";\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(441, 23);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(35, 23);\n            this.btnBrowse.TabIndex = 14;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // pgProperties\n            // \n            this.pgProperties.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;\n            this.pgProperties.LineColor = System.Drawing.SystemColors.ControlDark;\n            this.pgProperties.Location = new System.Drawing.Point(15, 130);\n            this.pgProperties.Name = \"pgProperties\";\n            this.pgProperties.Size = new System.Drawing.Size(461, 335);\n            this.pgProperties.TabIndex = 15;\n            this.pgProperties.ToolbarVisible = false;\n            // \n            // NewApplicationDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(489, 506);\n            this.Controls.Add(this.pgProperties);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtArguments);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewApplicationDialog\";\n            this.Text = \"Add FastCGI Application\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private TextBox txtPath;\n        private Label label2;\n        private TextBox txtArguments;\n        private Label label1;\n        private Label label3;\n        private Button btnBrowse;\n        private PropertyGrid pgProperties;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/NewApplicationDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System;\n    using System.ComponentModel;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewApplicationDialog : DialogForm\n    {\n        public NewApplicationDialog(IServiceProvider serviceProvider, FastCgiItem existing, FastCgiFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = string.Format(\"{0} FastCGI Application\", existing == null ? \"Add\" : \"Edit\");\n            txtPath.ReadOnly = txtArguments.ReadOnly = existing != null;\n            Item = existing ?? new FastCgiItem(null);\n            txtPath.Text = Item.Path;\n            txtArguments.Text = Item.Arguments;\n            pgProperties.SelectedObject = Item;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Path = txtPath.Text;\n                    Item.Arguments = txtArguments.Text;\n\n                    if (!txtPath.ReadOnly && feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"This FastCGI application already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(pgProperties, \"PropertyValueChanged\"))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtPath, \"CGI Executables|*.exe|CGI Files|*.dll|All Files|*.*\", null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public FastCgiItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/NewApplicationDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.FastCgi/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"aa816b3f-8b23-4440-a276-898958204a6d\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager.Features.Handlers, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.FastCgi.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.FastCgi.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap response_header_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"response_header_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"response_header_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\response_header_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.FastCgi/Protocol.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.FastCgi\n{\n    using System.ComponentModel;\n\n    internal enum Protocol : long\n    {\n        [Description(\"NamedPipe\")]\n        NamedPipe = 0,\n\n        [Description(\"Tcp\")]\n        Tcp = 1\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.FastCgi/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Handlers/HandlersFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class HandlersFeature : FeatureBase<HandlersItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly HandlersFeature _owner;\n\n            public FeatureTaskList(HandlersFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (_owner.IsInOrder)\n                {\n                    result.Add(GetMoveUpTaskItem(_owner.CanMoveUp));\n                    result.Add(GetMoveDownTaskItem(_owner.CanMoveDown));\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Unorder\", \"View Unordered List...\", string.Empty).SetUsage());\n                }\n                else\n                {\n                    result.Add(new MethodTaskItem(\"AddManaged\", \"Add Managed Handler...\", string.Empty).SetUsage());\n                    result.Add(new MethodTaskItem(\"AddScript\", \"Add Script Map...\", string.Empty).SetUsage());\n                    result.Add(new MethodTaskItem(\"AddWildcard\", \"Add Wildcard Script Map...\", string.Empty).SetUsage());\n                    result.Add(new MethodTaskItem(\"Add\", \"Add Module Mapping...\", string.Empty).SetUsage());\n                    if (_owner.SelectedItem != null)\n                    {\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                        result.Add(new MethodTaskItem(\"Rename\", \"Rename\", string.Empty).SetUsage());\n                        result.Add(RemoveTaskItem);\n                    }\n\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Set\", \"Edit Feature Permissions...\", string.Empty).SetUsage());\n                    if (_owner.CanRevert)\n                    {\n                        result.Add(RevertTaskItem);\n                    }\n\n                    result.Add(new MethodTaskItem(\"InOrder\", \"View Ordered List...\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddManaged()\n            {\n                _owner.AddManaged();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddScript()\n            {\n                _owner.AddScript();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddWildcard()\n            {\n                _owner.AddWildcard();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.Rename();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveUp()\n            {\n                _owner.MoveUp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveDown()\n            {\n                _owner.MoveDown();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void InOrder()\n            {\n                _owner.InOrder();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Unorder()\n            {\n                _owner.Unorder();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n        }\n\n        public HandlersFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            Items = new List<HandlersItem>();\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n\n            // server level modules are in \"\" location.\n            ConfigurationSection section = service.Scope == ManagementScope.Server ? service.GetSection(\"system.webServer/handlers\", string.Empty) : service.GetSection(\"system.webServer/handlers\", null, false);\n            AccessPolicy = (long)section[\"accessPolicy\"];\n            CanRevert = service.Scope != ManagementScope.Server;\n            IsInOrder = false;\n            LoadItems();\n        }\n\n        public long AccessPolicy { get; set; }\n\n        public void Add()\n        {\n            using var dialog = new NewMappingDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void AddManaged()\n        {\n            using var dialog = new NewHandlerDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void AddScript()\n        {\n            using var dialog = new NewScriptMapDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void AddWildcard()\n        {\n            using var dialog = new NewWildcardDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Set()\n        {\n            using (var dialog = new PermissionsDialog(Module, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected authorization rule?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(HandlersItem item)\n        {\n            HandlersItem newItem;\n\n            if (!string.IsNullOrWhiteSpace(item.Type))\n            {\n                using var dialog = new NewHandlerDialog(Module, item, this);\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                newItem = dialog.Item;\n            }\n            else if (SelectedItem.Modules == \"IsapiModule\" && !string.IsNullOrWhiteSpace(item.ScriptProcessor))\n            {\n                using var dialog = new NewScriptMapDialog(Module, item, this);\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                newItem = dialog.Item;\n            }\n            else\n            {\n                using var dialog = new NewMappingDialog(Module, item, this);\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                newItem = dialog.Item;\n            }\n\n            EditItem(newItem);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange([\"No Grouping\", \"Entry Type\", \"Path Type\", \"State\"]);\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[5].Text;\n                case \"Path Type\":\n                    return item.SubItems[3].Text;\n                case \"State\":\n                    return item.SubItems[2].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        public void Rename()\n        {\n            RenameInline(SelectedItem);\n        }\n\n        public void MoveUp()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveUpItem();\n        }\n\n        public void MoveDown()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveDownItem();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            // server level modules are in \"\" location.\n            ConfigurationSection section = service.Scope == ManagementScope.Server ? service.GetSection(\"system.webServer/handlers\", string.Empty) : service.GetSection(\"system.webServer/handlers\", null, false);\n            return section.GetCollection();\n        }\n\n        public void InOrder()\n        {\n            IsInOrder = true;\n            OnSettingsSaved();\n        }\n\n        public void Unorder()\n        {\n            IsInOrder = false;\n            OnSettingsSaved();\n        }\n\n        public void Revert()\n        {\n            if (!CanRevert)\n            {\n                throw new InvalidOperationException(\"Revert operation cannot be done at server level\");\n            }\n\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                dialog.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RevertItems();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            HandlersSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210505\");\n            return false;\n        }\n\n        public bool IsInOrder { get; private set; }\n\n        public bool CanRevert { get; private set; }\n\n        public HandlersSettingsSavedEventHandler HandlersSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n\n        public string Name\n        {\n            get { return \"Handler Mappings\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/HandlersItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System.Collections.Generic;\n    using System.Linq;\n\n    using Microsoft.Web.Administration;\n\n    internal class HandlersItem : IItem<HandlersItem>\n    {\n        public HandlersItem(ConfigurationElement element)\n        {\n            this.Element = element;\n            this.Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inhertied\";\n            if (element == null)\n            {\n                this.PreConditions = new List<string>(0);\n                Verb = \"*\";\n                Path = Modules = ScriptProcessor = Type = string.Empty;\n                ResponseBufferLimit = 4194304;\n                RequireAccess = 3;\n                return;\n            }\n\n            this.Name = (string)element[\"name\"];\n            this.Path = (string)element[\"path\"];\n            this.ResourceType = (long)element[\"resourceType\"];\n            this.Verb = (string)element[\"verb\"];\n            this.RequireAccess = (long)element[\"requireAccess\"];\n            this.Modules = (string)element[\"modules\"];\n            this.ScriptProcessor = (string)element[\"scriptProcessor\"];\n            this.Type = (string)element[\"type\"];\n            var content = (string)element[\"preCondition\"];\n            this.PreConditions = content.Split(',').ToList();\n            ResponseBufferLimit = (uint)element[\"responseBufferLimit\"];\n            AllowPathInfo = (bool)element[\"allowPathInfo\"];\n        }\n\n        public bool AllowPathInfo { get; set; }\n\n        public uint ResponseBufferLimit { get; set; }\n\n        public string ScriptProcessor { get; set; }\n\n        public long RequireAccess { get; set; }\n\n        public string Verb { get; set; }\n\n        public long ResourceType { get; set; }\n\n        public string Path { get; set; }\n\n        public List<string> PreConditions { get; set; }\n\n        public string Type { get; set; }\n\n        public string Modules { get; set; }\n\n        public string Name { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public string Flag { get; set; }\n\n        public string GetState(long accessPolicy)\n        {\n            if (this.RequireAccess == 0L)\n            {\n                return \"Enabled\";\n            }\n\n            if (this.RequireAccess == 1L && (accessPolicy & 1L) == 1L)\n            {\n                return \"Enabled\";\n            }\n\n            if (this.RequireAccess == 2L && (accessPolicy & 2L) == 2L)\n            {\n                return \"Enabled\";\n            }\n\n            if (this.RequireAccess == 3L && (accessPolicy & 512L) == 512L)\n            {\n                return \"Enabled\";\n            }\n\n            if (this.RequireAccess == 4L && (accessPolicy & 4L) == 4L)\n            {\n                return \"Enabled\";\n            }\n\n            return \"Disabled\";\n        }\n\n        public string PathType\n        {\n            get\n            {\n                switch (this.ResourceType)\n                {\n                    case 0:\n                        return \"File\";\n                    case 1:\n                        return \"Folder\";\n                    case 2:\n                        return \"File or Folder\";\n                    case 3:\n                        return \"Unspecified\";\n                }\n\n                return \"Unspecified\";\n            }\n        }\n\n        public string TypeString\n        {\n            get\n            {\n                return !string.IsNullOrWhiteSpace(this.Type) ? this.Type : this.Modules;\n            }\n        }\n\n        public bool Equals(HandlersItem other)\n        {\n            // all properties\n            return this.Match(other) && other.Type == this.Type;\n        }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"path\"] = Path;\n            Element[\"resourceType\"] = ResourceType;\n            Element[\"verb\"] = Verb;\n            Element[\"requireAccess\"] = RequireAccess;\n            Element[\"modules\"] = Modules;\n            Element[\"scriptProcessor\"] = ScriptProcessor;\n            Element[\"type\"] = Type;\n            Element[\"preCondition\"] = PreConditions.Combine(\",\");\n            Element[\"responseBufferLimit\"] = ResponseBufferLimit;\n            Element[\"allowPathInfo\"] = AllowPathInfo;\n        }\n\n        public bool Match(HandlersItem other)\n        {\n            // match combined keys.\n            return other != null && other.Name == this.Name;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/HandlersModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class HandlersModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)this.GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(HandlersPage), \"Handler Mappings\",\n                \"Specify resources that handle responses for specific request types\", Resources.handlers_36,\n                Resources.handlers_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/HandlersModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class HandlersModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(this.Name, typeof(HandlersModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/HandlersPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Handlers\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class HandlersPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chState = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.cbPathType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chHandler = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chPath,\n            this.chState,\n            this.cbPathType,\n            this.chHandler,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 180;\n            // \n            // chPath\n            // \n            this.chPath.Text = \"Path\";\n            this.chPath.Width = 120;\n            // \n            // chState\n            // \n            this.chState.Text = \"State\";\n            this.chState.Width = 100;\n            // \n            // cbPathType\n            // \n            this.cbPathType.Text = \"Path Type\";\n            this.cbPathType.Width = 100;\n            // \n            // chHandler\n            // \n            this.chHandler.Text = \"Handler\";\n            this.chHandler.Width = 180;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 80;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroupSelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(595, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to specify the resources, such as DLLs and managed code, that ha\" +\n    \"ndle responses for specific request types.\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(187, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Handler Mappings\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // HandlersPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"HandlersPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chType;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private ColumnHeader chName;\n        private ColumnHeader chPath;\n        private ColumnHeader chHandler;\n        private ColumnHeader chState;\n        private ColumnHeader cbPathType;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/HandlersPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class HandlersPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly HandlersPage _owner;\n\n            public PageTaskList(HandlersPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class HandlersListViewItem : ListViewItem, IFeatureListViewItem<HandlersItem>\n        {\n            public HandlersItem Item { get; }\n\n            private readonly HandlersPage _page;\n\n            public HandlersListViewItem(HandlersItem item, HandlersPage page)\n                : base(item.Name)\n            {\n                this.Item = item;\n                _page = page;\n                this.SubItems.Add(new ListViewSubItem(this, item.Path));\n                this.SubItems.Add(new ListViewSubItem(this, item.GetState(page._feature.AccessPolicy)));\n                this.SubItems.Add(new ListViewSubItem(this, item.PathType));\n                this.SubItems.Add(new ListViewSubItem(this, item.TypeString));\n                this.SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private HandlersFeature _feature;\n        private PageTaskList _taskList;\n\n        public HandlersPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new HandlersFeature(Module);\n            _feature.HandlersSettingsUpdated = InitializeListPage;\n            _feature.Load();\n\n            _feature.InitializeMouseClick(listView1, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n            },\n            text =>\n            {\n                if (_feature.FindDuplicate(item => item.Name, text))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"A handler with this name already exists.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    return false;\n                }\n\n                return true;\n            });\n        }\n\n        protected override void InitializeListPage()\n        {\n            toolStrip2.Visible = !_feature.IsInOrder;\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new HandlersListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (HandlersListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroupSelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/HandlersPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>602, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>497, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Handlers/HandlersSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    public delegate void HandlersSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/JexusManager.Features.Handlers.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Handlers</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Features.FastCgi\\JexusManager.Features.FastCgi.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Modules\\JexusManager.Features.Modules.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Handlers/NewHandlerDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Handlers\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewHandlerDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtType = new System.Windows.Forms.ComboBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.btnRestrictions = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(332, 301);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(231, 301);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 156);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(38, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 172);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(269, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // txtType\n            // \n            this.txtType.Location = new System.Drawing.Point(15, 96);\n            this.txtType.Name = \"txtType\";\n            this.txtType.Size = new System.Drawing.Size(393, 21);\n            this.txtType.TabIndex = 8;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 80);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(34, 13);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"Type:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 120);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(227, 13);\n            this.label2.TabIndex = 10;\n            this.label2.Text = \"Example: System.Web.UI.PageHandlerFactory\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 9);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(74, 13);\n            this.label3.TabIndex = 11;\n            this.label3.Text = \"Request path:\";\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(15, 25);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(297, 20);\n            this.txtPath.TabIndex = 12;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(12, 48);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(128, 13);\n            this.label4.TabIndex = 13;\n            this.label4.Text = \"Example: *.bas, wsvc.axd\";\n            // \n            // btnRestrictions\n            // \n            this.btnRestrictions.Location = new System.Drawing.Point(15, 216);\n            this.btnRestrictions.Name = \"btnRestrictions\";\n            this.btnRestrictions.Size = new System.Drawing.Size(140, 23);\n            this.btnRestrictions.TabIndex = 14;\n            this.btnRestrictions.Text = \"Request Restrictions...\";\n            this.btnRestrictions.UseVisualStyleBackColor = true;\n            // \n            // NewHandlerDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(439, 336);\n            this.Controls.Add(this.btnRestrictions);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtType);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewHandlerDialog\";\n            this.Text = \"Add Managed Handler\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewRestrictionDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtName;\n        private ComboBox txtType;\n        private Label label1;\n        private Label label2;\n        private Label label3;\n        private TextBox txtPath;\n        private Label label4;\n        private Button btnRestrictions;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/NewHandlerDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewHandlerDialog : DialogForm\n    {\n        private readonly HandlersFeature _feature;\n\n        public NewHandlerDialog(IServiceProvider serviceProvider, HandlersItem existing, HandlersFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add Managed Handler\" : \"Edit Managed Handler\";\n            txtName.ReadOnly = existing != null;\n            _feature = feature;\n            Item = existing ?? new HandlersItem(null);\n            if (existing != null)\n            {\n                txtType.Text = Item.Type;\n                txtName.Text = Item.Name;\n                txtPath.Text = Item.Path;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Type = txtType.Text;\n                    Item.Name = txtName.Text;\n                    Item.Path = txtPath.Text;\n                    if (!txtName.ReadOnly && _feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"A handler with this name already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtType, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                                    && !string.IsNullOrWhiteSpace(txtType.Text)\n                                    && !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRestrictions, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var dialog = new RestrictionsDialog(ServiceProvider, Item);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public HandlersItem Item { get; set; }\n\n        private void NewRestrictionDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210505#Add_Handler\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/NewHandlerDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Handlers/NewMappingDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Handlers\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewMappingDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtExecutable = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.btnRestrictions = new System.Windows.Forms.Button();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtModule = new System.Windows.Forms.ComboBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(332, 301);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 7;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(231, 301);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 6;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 175);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(38, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 191);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(269, 20);\n            this.txtName.TabIndex = 4;\n            // \n            // txtExecutable\n            // \n            this.txtExecutable.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtExecutable.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtExecutable.Location = new System.Drawing.Point(15, 140);\n            this.txtExecutable.Name = \"txtExecutable\";\n            this.txtExecutable.Size = new System.Drawing.Size(367, 20);\n            this.txtExecutable.TabIndex = 2;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 124);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(109, 13);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"Executable (optional):\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 9);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(74, 13);\n            this.label3.TabIndex = 11;\n            this.label3.Text = \"Request path:\";\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(15, 25);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(297, 20);\n            this.txtPath.TabIndex = 0;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(12, 48);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(128, 13);\n            this.label4.TabIndex = 13;\n            this.label4.Text = \"Example: *.bas, wsvc.axd\";\n            // \n            // btnRestrictions\n            // \n            this.btnRestrictions.Location = new System.Drawing.Point(15, 220);\n            this.btnRestrictions.Name = \"btnRestrictions\";\n            this.btnRestrictions.Size = new System.Drawing.Size(140, 23);\n            this.btnRestrictions.TabIndex = 5;\n            this.btnRestrictions.Text = \"Request Restrictions...\";\n            this.btnRestrictions.UseVisualStyleBackColor = true;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(388, 138);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(28, 23);\n            this.btnBrowse.TabIndex = 3;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 76);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(45, 13);\n            this.label2.TabIndex = 17;\n            this.label2.Text = \"Module:\";\n            // \n            // txtModule\n            // \n            this.txtModule.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;\n            this.txtModule.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;\n            this.txtModule.Location = new System.Drawing.Point(15, 92);\n            this.txtModule.Name = \"txtModule\";\n            this.txtModule.Size = new System.Drawing.Size(393, 21);\n            this.txtModule.TabIndex = 1;\n            // \n            // NewMappingDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(439, 336);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtModule);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.btnRestrictions);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtExecutable);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewMappingDialog\";\n            this.Text = \"Add Module Mapping\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewRestrictionDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtName;\n        private TextBox txtExecutable;\n        private Label label1;\n        private Label label3;\n        private TextBox txtPath;\n        private Label label4;\n        private Button btnRestrictions;\n        private Button btnBrowse;\n        private Label label2;\n        private ComboBox txtModule;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/NewMappingDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n    using System.ComponentModel;\n    using System.IO;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.FastCgi;\n    using JexusManager.Features.Modules;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewMappingDialog : DialogForm\n    {\n        private readonly HandlersFeature _feature;\n\n        public NewMappingDialog(IServiceProvider serviceProvider, HandlersItem existing, HandlersFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add Module Mapping\" : \"Edit Module Mapping\";\n            txtName.ReadOnly = existing != null;\n            _feature = feature;\n            Item = existing ?? new HandlersItem(null);\n\n            var modules = new ModulesFeature((Module)serviceProvider);\n            modules.Load();\n            foreach (var module in modules.Items.Where(module => !module.IsManaged).OrderBy(module => module.Name))\n            {\n                txtModule.Items.Add(module.Name);\n            }\n\n            if (existing != null)\n            {\n                txtExecutable.Text = Item.ScriptProcessor;\n                txtModule.Text = Item.Modules;\n                txtName.Text = Item.Name;\n                txtPath.Text = Item.Path;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.ScriptProcessor = txtExecutable.Text;\n                    Item.Modules = txtModule.Text;\n                    Item.Name = txtName.Text;\n                    Item.Path = txtPath.Text;\n                    if ((txtModule.Text == \"FastCgiModule\" || txtModule.Text == \"CgiModule\")\n                        && !string.Equals(Path.GetExtension(Item.ScriptProcessor), \".exe\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        ShowMessage(\"The executable specified for the CgiModule or the FastCgiModule should be a .exe file.\");\n                        return;\n                    }\n\n                    if (!txtName.ReadOnly)\n                    {\n                        if (_feature.Items.Any(item => item.Match(Item)))\n                        {\n                            ShowMessage(\n                                \"A handler with this name already exists.\",\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        var path = txtExecutable.Text;\n                        string arguments = string.Empty;\n                        var index = path.IndexOf('|');\n                        if (index > -1)\n                        {\n                            arguments = path.Substring(index + 1);\n                            path = path.Substring(0, index);\n                        }\n\n                        if (!string.IsNullOrWhiteSpace(path))\n                        {\n                            var ext = Path.GetExtension(path);\n                            if (!string.Equals(ext, \".dll\", StringComparison.OrdinalIgnoreCase) &&\n                                !string.Equals(ext, \".exe\", StringComparison.OrdinalIgnoreCase))\n                            {\n                                // TODO: test path with spaces case.\n                                ShowMessage(\"The specific executable for the handler must be a .dll or .exe file. If the path to the script processor (only in the case of a .exe file) has spaces, use double quotation marks to specify the executable.\",\n                                    MessageBoxButtons.OK,\n                                    MessageBoxIcon.Warning,\n                                    MessageBoxDefaultButton.Button1);\n                                return;\n                            }\n\n                            if (!File.Exists(path))\n                            {\n                                ShowMessage(\n                                    \"The specific executable does not exist on the server.\",\n                                    MessageBoxButtons.OK,\n                                    MessageBoxIcon.Error,\n                                    MessageBoxDefaultButton.Button1);\n                                return;\n                            }\n                        }\n\n                        if (txtModule.Text == \"FastCgiModule\")\n                        {\n                            // IMPORTANT: it is IIS Manager behavior to prompt before verifying duplicate items.\n                            var result = ShowMessage(\n                                \"Do you want to create a FastCGI application for this executable? Click \\\"Yes\\\" to add the entry to the FastCGI collection and to enable this executable to run as a FastCGI application.\",\n                                MessageBoxButtons.YesNoCancel,\n                                MessageBoxIcon.Information,\n                                MessageBoxDefaultButton.Button1);\n                            if (result == DialogResult.Yes)\n                            {\n                                var fastCgi = new FastCgiFeature((Module)ServiceProvider);\n                                fastCgi.Load();\n                                if (fastCgi.Items.All(item => item.Path != path && item.Arguments != arguments))\n                                {\n                                    fastCgi.AddItem(new FastCgiItem(null) { Path = path, Arguments = arguments });\n                                }\n                            }\n                        }\n                    }\n\n                    try\n                    {\n                        if (txtModule.Text != \"FastCgiModule\" && txtModule.Text != \"CgiModule\")\n                        {\n                            var bit32Condition = \"bitness32\";\n                            var bit64Condition = \"bitness64\";\n                            var bit32 = DialogHelper.GetImageArchitecture(txtExecutable.Text);\n                            if (bit32 && !Item.PreConditions.Contains(bit32Condition))\n                            {\n                                Item.PreConditions.Add(bit32Condition);\n                            }\n                            else if (!bit32 && !Item.PreConditions.Contains(bit64Condition))\n                            {\n                                Item.PreConditions.Add(bit64Condition);\n                            }\n                        }\n                    }\n                    catch (Exception)\n                    {\n                        ShowMessage(\n                            \"The specific executable is invalid.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtExecutable, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                                    && !string.IsNullOrWhiteSpace(txtModule.Text)\n                                    && !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRestrictions, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var dialog = new RestrictionsDialog(ServiceProvider, Item);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtExecutable, \"(*.dll)|*.dll|(*.exe)|*.exe\", null);\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public HandlersItem Item { get; set; }\n\n        private void NewRestrictionDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210505#Add_Module\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/NewMappingDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Handlers/NewScriptMapDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Handlers\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewScriptMapDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtExecutable = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.btnRestrictions = new System.Windows.Forms.Button();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(332, 301);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(231, 301);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 156);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(38, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 172);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(269, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // txtExecutable\n            // \n            this.txtExecutable.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtExecutable.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtExecutable.Location = new System.Drawing.Point(15, 96);\n            this.txtExecutable.Name = \"txtExecutable\";\n            this.txtExecutable.Size = new System.Drawing.Size(367, 20);\n            this.txtExecutable.TabIndex = 8;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 80);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(63, 13);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"Executable:\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 9);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(74, 13);\n            this.label3.TabIndex = 11;\n            this.label3.Text = \"Request path:\";\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(15, 25);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(297, 20);\n            this.txtPath.TabIndex = 12;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(12, 48);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(128, 13);\n            this.label4.TabIndex = 13;\n            this.label4.Text = \"Example: *.bas, wsvc.axd\";\n            // \n            // btnRestrictions\n            // \n            this.btnRestrictions.Location = new System.Drawing.Point(15, 216);\n            this.btnRestrictions.Name = \"btnRestrictions\";\n            this.btnRestrictions.Size = new System.Drawing.Size(140, 23);\n            this.btnRestrictions.TabIndex = 14;\n            this.btnRestrictions.Text = \"Request Restrictions...\";\n            this.btnRestrictions.UseVisualStyleBackColor = true;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(388, 94);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(28, 23);\n            this.btnBrowse.TabIndex = 15;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // NewScriptMapDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(439, 336);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.btnRestrictions);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtExecutable);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewScriptMapDialog\";\n            this.Text = \"Add Script Map\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewRestrictionDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtName;\n        private TextBox txtExecutable;\n        private Label label1;\n        private Label label3;\n        private TextBox txtPath;\n        private Label label4;\n        private Button btnRestrictions;\n        private Button btnBrowse;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/NewScriptMapDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewScriptMapDialog : DialogForm\n    {\n        private readonly HandlersFeature _feature;\n\n        public NewScriptMapDialog(IServiceProvider serviceProvider, HandlersItem existing, HandlersFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add Script Map\" : \"Edit Script Map\";\n            txtName.ReadOnly = existing != null;\n            _feature = feature;\n            Item = existing ?? new HandlersItem(null);\n            if (existing == null)\n            {\n                Item.Modules = \"IsapiModule\";\n            }\n            else\n            {\n                txtExecutable.Text = Item.ScriptProcessor;\n                txtName.Text = Item.Name;\n                txtPath.Text = Item.Path;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.ScriptProcessor = txtExecutable.Text;\n                    Item.Name = txtName.Text;\n                    Item.Path = txtPath.Text;\n                    if (!txtName.ReadOnly && _feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"A handler with this name already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtExecutable, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n       && !string.IsNullOrWhiteSpace(txtExecutable.Text)\n       && !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRestrictions, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var dialog = new RestrictionsDialog(ServiceProvider, Item);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtExecutable, \"(*.dll)|*.dll|(*.exe)|*.exe\", null);\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public HandlersItem Item { get; set; }\n\n        private void NewRestrictionDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210505#Add_ScriptMap\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/NewScriptMapDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Handlers/NewWildcardDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Handlers\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewWildcardDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtExecutable = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(332, 301);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(231, 301);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 156);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(38, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 172);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(269, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // txtExecutable\n            // \n            this.txtExecutable.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtExecutable.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtExecutable.Location = new System.Drawing.Point(15, 96);\n            this.txtExecutable.Name = \"txtExecutable\";\n            this.txtExecutable.Size = new System.Drawing.Size(367, 20);\n            this.txtExecutable.TabIndex = 8;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 80);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(63, 13);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"Executable:\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 9);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(74, 13);\n            this.label3.TabIndex = 11;\n            this.label3.Text = \"Request path:\";\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(15, 25);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.ReadOnly = true;\n            this.txtPath.Size = new System.Drawing.Size(297, 20);\n            this.txtPath.TabIndex = 12;\n            this.txtPath.Text = \"*\";\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(388, 94);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(28, 23);\n            this.btnBrowse.TabIndex = 15;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // NewWildcardDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(439, 336);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtExecutable);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewWildcardDialog\";\n            this.Text = \"Add Wildcard Script Map\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewRestrictionDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtName;\n        private TextBox txtExecutable;\n        private Label label1;\n        private Label label3;\n        private TextBox txtPath;\n        private Button btnBrowse;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/NewWildcardDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewWildcardDialog : DialogForm\n    {\n        private readonly HandlersFeature _feature;\n\n        public NewWildcardDialog(IServiceProvider serviceProvider, HandlersItem existing, HandlersFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add Wildcard Script Map\" : \"Edit Wildcard Script Map\";\n            txtName.ReadOnly = existing != null;\n            _feature = feature;\n            Item = existing ?? new HandlersItem(null);\n            if (existing == null)\n            {\n                Item.Modules = \"IsapiModule\";\n            }\n            else\n            {\n                txtExecutable.Text = Item.ScriptProcessor;\n                txtName.Text = Item.Name;\n                txtPath.Text = Item.Path;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.ScriptProcessor = txtExecutable.Text;\n                    Item.Name = txtName.Text;\n                    Item.Path = txtPath.Text;\n                    if (!txtName.ReadOnly && _feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"A handler with this name already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtExecutable, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                        && !string.IsNullOrWhiteSpace(txtExecutable.Text)\n                        && !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtExecutable, \"(*.dll)|*.dll|(*.exe)|*.exe\", null);\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public HandlersItem Item { get; set; }\n\n        private void NewRestrictionDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210505#Add_Wildcard\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/NewWildcardDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Handlers/PermissionsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Handlers\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class PermissionsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbRead = new System.Windows.Forms.CheckBox();\n            this.cbScript = new System.Windows.Forms.CheckBox();\n            this.cbExecute = new System.Windows.Forms.CheckBox();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(65, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Permissions:\";\n            // \n            // cbRead\n            // \n            this.cbRead.AutoSize = true;\n            this.cbRead.Location = new System.Drawing.Point(15, 38);\n            this.cbRead.Name = \"cbRead\";\n            this.cbRead.Size = new System.Drawing.Size(52, 17);\n            this.cbRead.TabIndex = 1;\n            this.cbRead.Text = \"Read\";\n            this.cbRead.UseVisualStyleBackColor = true;\n            // \n            // cbScript\n            // \n            this.cbScript.AutoSize = true;\n            this.cbScript.Location = new System.Drawing.Point(15, 61);\n            this.cbScript.Name = \"cbScript\";\n            this.cbScript.Size = new System.Drawing.Size(53, 17);\n            this.cbScript.TabIndex = 2;\n            this.cbScript.Text = \"Script\";\n            this.cbScript.UseVisualStyleBackColor = true;\n            // \n            // cbExecute\n            // \n            this.cbExecute.AutoSize = true;\n            this.cbExecute.Location = new System.Drawing.Point(37, 84);\n            this.cbExecute.Name = \"cbExecute\";\n            this.cbExecute.Size = new System.Drawing.Size(65, 17);\n            this.cbExecute.TabIndex = 3;\n            this.cbExecute.Text = \"Execute\";\n            this.cbExecute.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(192, 131);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(96, 131);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // PermissionsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(299, 166);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.cbExecute);\n            this.Controls.Add(this.cbScript);\n            this.Controls.Add(this.cbRead);\n            this.Controls.Add(this.label1);\n            this.Name = \"PermissionsDialog\";\n            this.Text = \"Edit Feature Permissions\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private CheckBox cbRead;\n        private CheckBox cbScript;\n        private CheckBox cbExecute;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/PermissionsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class PermissionsDialog : DialogForm\n    {\n        public PermissionsDialog(IServiceProvider serviceProvider, HandlersFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbRead.Checked = (feature.AccessPolicy & 1L) == 1L;\n            cbScript.Checked = (feature.AccessPolicy & 512L) == 512L;\n            cbExecute.Checked = (feature.AccessPolicy & 4L) == 4L;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (cbRead.Checked)\n                    {\n                        feature.AccessPolicy |= 1L;\n                    }\n                    else\n                    {\n                        feature.AccessPolicy &= ~1L;\n                    }\n\n                    if (cbScript.Checked)\n                    {\n                        feature.AccessPolicy |= 512L;\n                    }\n                    else\n                    {\n                        feature.AccessPolicy &= ~512L;\n                    }\n\n                    if (cbExecute.Checked)\n                    {\n                        feature.AccessPolicy |= 4L;\n                    }\n                    else\n                    {\n                        feature.AccessPolicy &= ~4L;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/PermissionsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Handlers/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"bd450763-248d-4117-9af0-51a625667b61\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.Handlers/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Handlers.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Handlers.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap handlers_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"handlers_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"handlers_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\handlers_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Handlers/RestrictionsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Handlers\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class RestrictionsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.tabControl1 = new System.Windows.Forms.TabControl();\n            this.tabPage1 = new System.Windows.Forms.TabPage();\n            this.rbEither = new System.Windows.Forms.RadioButton();\n            this.rbFolder = new System.Windows.Forms.RadioButton();\n            this.rbFile = new System.Windows.Forms.RadioButton();\n            this.cbInvoke = new System.Windows.Forms.CheckBox();\n            this.tabPage2 = new System.Windows.Forms.TabPage();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtVerbs = new System.Windows.Forms.TextBox();\n            this.rbSelectedVerbs = new System.Windows.Forms.RadioButton();\n            this.rbAllVerbs = new System.Windows.Forms.RadioButton();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tabPage3 = new System.Windows.Forms.TabPage();\n            this.rbExecute = new System.Windows.Forms.RadioButton();\n            this.rbScript = new System.Windows.Forms.RadioButton();\n            this.rbWrite = new System.Windows.Forms.RadioButton();\n            this.rbRead = new System.Windows.Forms.RadioButton();\n            this.label3 = new System.Windows.Forms.Label();\n            this.rbNone = new System.Windows.Forms.RadioButton();\n            this.tabControl1.SuspendLayout();\n            this.tabPage1.SuspendLayout();\n            this.tabPage2.SuspendLayout();\n            this.tabPage3.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(332, 301);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(236, 301);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // tabControl1\n            // \n            this.tabControl1.Controls.Add(this.tabPage1);\n            this.tabControl1.Controls.Add(this.tabPage2);\n            this.tabControl1.Controls.Add(this.tabPage3);\n            this.tabControl1.Location = new System.Drawing.Point(12, 12);\n            this.tabControl1.Name = \"tabControl1\";\n            this.tabControl1.SelectedIndex = 0;\n            this.tabControl1.Size = new System.Drawing.Size(415, 283);\n            this.tabControl1.TabIndex = 2;\n            // \n            // tabPage1\n            // \n            this.tabPage1.Controls.Add(this.rbEither);\n            this.tabPage1.Controls.Add(this.rbFolder);\n            this.tabPage1.Controls.Add(this.rbFile);\n            this.tabPage1.Controls.Add(this.cbInvoke);\n            this.tabPage1.Location = new System.Drawing.Point(4, 22);\n            this.tabPage1.Name = \"tabPage1\";\n            this.tabPage1.Padding = new System.Windows.Forms.Padding(3);\n            this.tabPage1.Size = new System.Drawing.Size(407, 257);\n            this.tabPage1.TabIndex = 0;\n            this.tabPage1.Text = \"Mapping\";\n            this.tabPage1.UseVisualStyleBackColor = true;\n            // \n            // rbEither\n            // \n            this.rbEither.AutoSize = true;\n            this.rbEither.Enabled = false;\n            this.rbEither.Location = new System.Drawing.Point(44, 110);\n            this.rbEither.Name = \"rbEither\";\n            this.rbEither.Size = new System.Drawing.Size(82, 17);\n            this.rbEither.TabIndex = 3;\n            this.rbEither.TabStop = true;\n            this.rbEither.Text = \"File or folder\";\n            this.rbEither.UseVisualStyleBackColor = true;\n            // \n            // rbFolder\n            // \n            this.rbFolder.AutoSize = true;\n            this.rbFolder.Enabled = false;\n            this.rbFolder.Location = new System.Drawing.Point(44, 73);\n            this.rbFolder.Name = \"rbFolder\";\n            this.rbFolder.Size = new System.Drawing.Size(54, 17);\n            this.rbFolder.TabIndex = 2;\n            this.rbFolder.TabStop = true;\n            this.rbFolder.Text = \"Folder\";\n            this.rbFolder.UseVisualStyleBackColor = true;\n            // \n            // rbFile\n            // \n            this.rbFile.AutoSize = true;\n            this.rbFile.Enabled = false;\n            this.rbFile.Location = new System.Drawing.Point(44, 40);\n            this.rbFile.Name = \"rbFile\";\n            this.rbFile.Size = new System.Drawing.Size(41, 17);\n            this.rbFile.TabIndex = 1;\n            this.rbFile.TabStop = true;\n            this.rbFile.Text = \"File\";\n            this.rbFile.UseVisualStyleBackColor = true;\n            // \n            // cbInvoke\n            // \n            this.cbInvoke.AutoSize = true;\n            this.cbInvoke.Location = new System.Drawing.Point(23, 17);\n            this.cbInvoke.Name = \"cbInvoke\";\n            this.cbInvoke.Size = new System.Drawing.Size(231, 17);\n            this.cbInvoke.TabIndex = 0;\n            this.cbInvoke.Text = \"Invoke handler only if request is mapped to:\";\n            this.cbInvoke.UseVisualStyleBackColor = true;\n            // \n            // tabPage2\n            // \n            this.tabPage2.Controls.Add(this.label2);\n            this.tabPage2.Controls.Add(this.txtVerbs);\n            this.tabPage2.Controls.Add(this.rbSelectedVerbs);\n            this.tabPage2.Controls.Add(this.rbAllVerbs);\n            this.tabPage2.Controls.Add(this.label1);\n            this.tabPage2.Location = new System.Drawing.Point(4, 22);\n            this.tabPage2.Name = \"tabPage2\";\n            this.tabPage2.Padding = new System.Windows.Forms.Padding(3);\n            this.tabPage2.Size = new System.Drawing.Size(407, 257);\n            this.tabPage2.TabIndex = 1;\n            this.tabPage2.Text = \"Verbs\";\n            this.tabPage2.UseVisualStyleBackColor = true;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(49, 137);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(110, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Example: GET, POST\";\n            // \n            // txtVerbs\n            // \n            this.txtVerbs.Enabled = false;\n            this.txtVerbs.Location = new System.Drawing.Point(52, 114);\n            this.txtVerbs.Name = \"txtVerbs\";\n            this.txtVerbs.Size = new System.Drawing.Size(241, 20);\n            this.txtVerbs.TabIndex = 3;\n            // \n            // rbSelectedVerbs\n            // \n            this.rbSelectedVerbs.AutoSize = true;\n            this.rbSelectedVerbs.Location = new System.Drawing.Point(34, 82);\n            this.rbSelectedVerbs.Name = \"rbSelectedVerbs\";\n            this.rbSelectedVerbs.Size = new System.Drawing.Size(151, 17);\n            this.rbSelectedVerbs.TabIndex = 2;\n            this.rbSelectedVerbs.TabStop = true;\n            this.rbSelectedVerbs.Text = \"One of the following verbs:\";\n            this.rbSelectedVerbs.UseVisualStyleBackColor = true;\n            // \n            // rbAllVerbs\n            // \n            this.rbAllVerbs.AutoSize = true;\n            this.rbAllVerbs.Location = new System.Drawing.Point(34, 47);\n            this.rbAllVerbs.Name = \"rbAllVerbs\";\n            this.rbAllVerbs.Size = new System.Drawing.Size(65, 17);\n            this.rbAllVerbs.TabIndex = 1;\n            this.rbAllVerbs.TabStop = true;\n            this.rbAllVerbs.Text = \"All verbs\";\n            this.rbAllVerbs.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(31, 21);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(160, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Specify the verbs to be handled:\";\n            // \n            // tabPage3\n            // \n            this.tabPage3.Controls.Add(this.rbExecute);\n            this.tabPage3.Controls.Add(this.rbScript);\n            this.tabPage3.Controls.Add(this.rbWrite);\n            this.tabPage3.Controls.Add(this.rbRead);\n            this.tabPage3.Controls.Add(this.label3);\n            this.tabPage3.Controls.Add(this.rbNone);\n            this.tabPage3.Location = new System.Drawing.Point(4, 22);\n            this.tabPage3.Name = \"tabPage3\";\n            this.tabPage3.Padding = new System.Windows.Forms.Padding(3);\n            this.tabPage3.Size = new System.Drawing.Size(407, 257);\n            this.tabPage3.TabIndex = 2;\n            this.tabPage3.Text = \"Access\";\n            this.tabPage3.UseVisualStyleBackColor = true;\n            // \n            // rbExecute\n            // \n            this.rbExecute.AutoSize = true;\n            this.rbExecute.Location = new System.Drawing.Point(47, 138);\n            this.rbExecute.Name = \"rbExecute\";\n            this.rbExecute.Size = new System.Drawing.Size(64, 17);\n            this.rbExecute.TabIndex = 5;\n            this.rbExecute.TabStop = true;\n            this.rbExecute.Text = \"Execute\";\n            this.rbExecute.UseVisualStyleBackColor = true;\n            // \n            // rbScript\n            // \n            this.rbScript.AutoSize = true;\n            this.rbScript.Location = new System.Drawing.Point(47, 115);\n            this.rbScript.Name = \"rbScript\";\n            this.rbScript.Size = new System.Drawing.Size(52, 17);\n            this.rbScript.TabIndex = 4;\n            this.rbScript.TabStop = true;\n            this.rbScript.Text = \"Script\";\n            this.rbScript.UseVisualStyleBackColor = true;\n            // \n            // rbWrite\n            // \n            this.rbWrite.AutoSize = true;\n            this.rbWrite.Location = new System.Drawing.Point(47, 92);\n            this.rbWrite.Name = \"rbWrite\";\n            this.rbWrite.Size = new System.Drawing.Size(50, 17);\n            this.rbWrite.TabIndex = 3;\n            this.rbWrite.TabStop = true;\n            this.rbWrite.Text = \"Write\";\n            this.rbWrite.UseVisualStyleBackColor = true;\n            // \n            // rbRead\n            // \n            this.rbRead.AutoSize = true;\n            this.rbRead.Location = new System.Drawing.Point(47, 69);\n            this.rbRead.Name = \"rbRead\";\n            this.rbRead.Size = new System.Drawing.Size(51, 17);\n            this.rbRead.TabIndex = 2;\n            this.rbRead.TabStop = true;\n            this.rbRead.Text = \"Read\";\n            this.rbRead.UseVisualStyleBackColor = true;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(34, 16);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(211, 13);\n            this.label3.TabIndex = 1;\n            this.label3.Text = \"Specify the access required by the handler:\";\n            // \n            // rbNone\n            // \n            this.rbNone.AutoSize = true;\n            this.rbNone.Location = new System.Drawing.Point(47, 46);\n            this.rbNone.Name = \"rbNone\";\n            this.rbNone.Size = new System.Drawing.Size(51, 17);\n            this.rbNone.TabIndex = 0;\n            this.rbNone.TabStop = true;\n            this.rbNone.Text = \"None\";\n            this.rbNone.UseVisualStyleBackColor = true;\n            // \n            // RestrictionsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(439, 336);\n            this.Controls.Add(this.tabControl1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"RestrictionsDialog\";\n            this.Text = \"Request Restrictions\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.RestrictionsDialogHelpButtonClicked);\n            this.tabControl1.ResumeLayout(false);\n            this.tabPage1.ResumeLayout(false);\n            this.tabPage1.PerformLayout();\n            this.tabPage2.ResumeLayout(false);\n            this.tabPage2.PerformLayout();\n            this.tabPage3.ResumeLayout(false);\n            this.tabPage3.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private TabControl tabControl1;\n        private TabPage tabPage1;\n        private RadioButton rbEither;\n        private RadioButton rbFolder;\n        private RadioButton rbFile;\n        private CheckBox cbInvoke;\n        private TabPage tabPage2;\n        private Label label2;\n        private TextBox txtVerbs;\n        private RadioButton rbSelectedVerbs;\n        private RadioButton rbAllVerbs;\n        private Label label1;\n        private TabPage tabPage3;\n        private RadioButton rbExecute;\n        private RadioButton rbScript;\n        private RadioButton rbWrite;\n        private RadioButton rbRead;\n        private Label label3;\n        private RadioButton rbNone;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/RestrictionsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Handlers\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class RestrictionsDialog : DialogForm\n    {\n        public RestrictionsDialog(IServiceProvider serviceProvider, HandlersItem item)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbInvoke.Checked = item.ResourceType != 3L;\n            rbFile.Checked = item.ResourceType == 0L;\n            rbFolder.Checked = item.ResourceType == 1L;\n            rbEither.Checked = item.ResourceType == 2L;\n\n            rbNone.Checked = item.RequireAccess == 0L;\n            rbRead.Checked = item.RequireAccess == 1L;\n            rbWrite.Checked = item.RequireAccess == 2L;\n            rbScript.Checked = item.RequireAccess == 3L;\n            rbExecute.Checked = item.RequireAccess == 4L;\n\n            rbAllVerbs.Checked = item.Verb == \"*\";\n            rbSelectedVerbs.Checked = !rbAllVerbs.Checked;\n            if (rbSelectedVerbs.Checked)\n            {\n                txtVerbs.Text = item.Verb;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (!cbInvoke.Checked)\n                    {\n                        item.ResourceType = 3L;\n                    }\n                    else if (rbFile.Checked)\n                    {\n                        item.ResourceType = 0L;\n                    }\n                    else if (rbFolder.Checked)\n                    {\n                        item.ResourceType = 1L;\n                    }\n                    else if (rbEither.Checked)\n                    {\n                        item.ResourceType = 2L;\n                    }\n\n                    if (rbNone.Checked)\n                    {\n                        item.RequireAccess = 0L;\n                    }\n                    else if (rbRead.Checked)\n                    {\n                        item.RequireAccess = 1L;\n                    }\n                    else if (rbWrite.Checked)\n                    {\n                        item.RequireAccess = 2L;\n                    }\n                    else if (rbScript.Checked)\n                    {\n                        item.RequireAccess = 3L;\n                    }\n                    else if (rbExecute.Checked)\n                    {\n                        item.RequireAccess = 4L;\n                    }\n\n                    if (rbAllVerbs.Checked)\n                    {\n                        item.Verb = \"*\";\n                    }\n                    else if (rbSelectedVerbs.Checked)\n                    {\n                        item.Verb = txtVerbs.Text;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbInvoke, \"CheckedChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    rbFile.Enabled = rbFolder.Enabled = rbEither.Enabled = cbInvoke.Checked;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(rbSelectedVerbs, \"CheckedChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(rbAllVerbs, \"CheckedChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtVerbs.Enabled = rbSelectedVerbs.Checked;\n                }));\n        }\n\n        private void RestrictionsDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210505#Request_Restrictions\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Handlers/RestrictionsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Handlers/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.HttpApi/HttpApiFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Client;\nusing System;\n\nnamespace JexusManager.Features.HttpApi\n{\n    public abstract class HttpApiFeature<T> : FeatureBase<T>, IHttpApiFeature\n        where T : class, IItem<T>\n    {\n        protected HttpApiFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        public abstract TaskList GetTaskList();\n\n        public abstract void Load();\n\n        protected override void OnSettingsSaved()\n        {\n            HttpApiSettingsUpdate?.Invoke();\n        }\n\n        public abstract bool ShowHelp();\n\n        public HttpApiSettingsSavedEventHandler HttpApiSettingsUpdate { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public abstract string Name { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/HttpApiModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpApi\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class HttpApiModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(HttpApiPage), \"HTTP API\",\n                \"Manage certificate bindings for websites that use SSL\", Resources.http_36,\n                Resources.http_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/HttpApiModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpApi\n{\n    using System;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Server;\n\n    public class HttpApiModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(HttpApiModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return scope == ManagementScope.Server && !Helper.IsRunningOnMono();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/HttpApiPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.HttpApi\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class HttpApiPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.tabControl1 = new System.Windows.Forms.TabControl();\n            this.tpIP = new System.Windows.Forms.TabPage();\n            this.lvIP = new System.Windows.Forms.ListView();\n            this.chAddress = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPort = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chApp = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chAppId = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chHash = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chStore = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.tpSNI = new System.Windows.Forms.TabPage();\n            this.lvSni = new System.Windows.Forms.ListView();\n            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.columnHeader8 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.tpURL = new System.Windows.Forms.TabPage();\n            this.lvURL = new System.Windows.Forms.ListView();\n            this.columnHeader7 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.columnHeader10 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.tabControl1.SuspendLayout();\n            this.tpIP.SuspendLayout();\n            this.tpSNI.SuspendLayout();\n            this.tpURL.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"contextMenuStrip1\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.tabControl1);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 9;\n            // \n            // tabControl1\n            // \n            this.tabControl1.Controls.Add(this.tpIP);\n            this.tabControl1.Controls.Add(this.tpSNI);\n            this.tabControl1.Controls.Add(this.tpURL);\n            this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tabControl1.Location = new System.Drawing.Point(0, 13);\n            this.tabControl1.Name = \"tabControl1\";\n            this.tabControl1.SelectedIndex = 0;\n            this.tabControl1.Size = new System.Drawing.Size(560, 527);\n            this.tabControl1.TabIndex = 2;\n            this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.TabControl1SelectedIndexChanged);\n            // \n            // tpIP\n            // \n            this.tpIP.Controls.Add(this.lvIP);\n            this.tpIP.Location = new System.Drawing.Point(4, 22);\n            this.tpIP.Name = \"tpIP\";\n            this.tpIP.Padding = new System.Windows.Forms.Padding(3);\n            this.tpIP.Size = new System.Drawing.Size(552, 501);\n            this.tpIP.TabIndex = 0;\n            this.tpIP.Text = \"IP Based\";\n            this.tpIP.UseVisualStyleBackColor = true;\n            // \n            // lvIP\n            // \n            this.lvIP.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chAddress,\n            this.chPort,\n            this.chApp,\n            this.chAppId,\n            this.chHash,\n            this.chStore,\n            this.chStatus});\n            this.lvIP.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.lvIP.FullRowSelect = true;\n            this.lvIP.HideSelection = false;\n            this.lvIP.Location = new System.Drawing.Point(3, 3);\n            this.lvIP.Margin = new System.Windows.Forms.Padding(5);\n            this.lvIP.MultiSelect = false;\n            this.lvIP.Name = \"lvIP\";\n            this.lvIP.Size = new System.Drawing.Size(546, 495);\n            this.lvIP.TabIndex = 1;\n            this.lvIP.UseCompatibleStateImageBehavior = false;\n            this.lvIP.View = System.Windows.Forms.View.Details;\n            this.lvIP.KeyDown += new System.Windows.Forms.KeyEventHandler(this.LvIPKeyDown);\n            this.lvIP.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LvIPMouseDoubleClick);\n            this.lvIP.SelectedIndexChanged += new System.EventHandler(this.LvIPSelectedIndexChanged);\n            // \n            // chAddress\n            // \n            this.chAddress.Text = \"Address\";\n            this.chAddress.Width = 180;\n            // \n            // chPort\n            // \n            this.chPort.Text = \"Port\";\n            this.chPort.Width = 80;\n            // \n            // chApp\n            // \n            this.chApp.Text = \"Application Name\";\n            this.chApp.Width = 100;\n            // \n            // chAppId\n            // \n            this.chAppId.Text = \"Application ID\";\n            this.chAppId.Width = 180;\n            // \n            // chHash\n            // \n            this.chHash.Text = \"Certificate Hash\";\n            this.chHash.Width = 180;\n            // \n            // chStore\n            // \n            this.chStore.Text = \"Certificate Store\";\n            this.chStore.Width = 120;\n            // \n            // chStatus\n            // \n            this.chStatus.Text = \"Certificate Status\";\n            this.chStatus.Width = 80;\n            // \n            // tpSNI\n            // \n            this.tpSNI.Controls.Add(this.lvSni);\n            this.tpSNI.Location = new System.Drawing.Point(4, 22);\n            this.tpSNI.Name = \"tpSNI\";\n            this.tpSNI.Padding = new System.Windows.Forms.Padding(3);\n            this.tpSNI.Size = new System.Drawing.Size(552, 501);\n            this.tpSNI.TabIndex = 1;\n            this.tpSNI.Text = \"SNI\";\n            this.tpSNI.UseVisualStyleBackColor = true;\n            // \n            // lvSni\n            // \n            this.lvSni.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.columnHeader1,\n            this.columnHeader2,\n            this.columnHeader3,\n            this.columnHeader4,\n            this.columnHeader5,\n            this.columnHeader6,\n            this.columnHeader8});\n            this.lvSni.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.lvSni.FullRowSelect = true;\n            this.lvSni.HideSelection = false;\n            this.lvSni.Location = new System.Drawing.Point(3, 3);\n            this.lvSni.Margin = new System.Windows.Forms.Padding(5);\n            this.lvSni.MultiSelect = false;\n            this.lvSni.Name = \"lvSni\";\n            this.lvSni.Size = new System.Drawing.Size(546, 495);\n            this.lvSni.TabIndex = 2;\n            this.lvSni.UseCompatibleStateImageBehavior = false;\n            this.lvSni.View = System.Windows.Forms.View.Details;\n            this.lvSni.KeyDown += new System.Windows.Forms.KeyEventHandler(this.LvSniKeyDown);\n            this.lvSni.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LvSniMouseDoubleClick);\n            this.lvSni.SelectedIndexChanged += new System.EventHandler(this.LvSniSelectedIndexChanged);\n            // \n            // columnHeader1\n            // \n            this.columnHeader1.Text = \"Host Name\";\n            this.columnHeader1.Width = 180;\n            // \n            // columnHeader2\n            // \n            this.columnHeader2.Text = \"Port\";\n            this.columnHeader2.Width = 80;\n            // \n            // columnHeader3\n            // \n            this.columnHeader3.Text = \"Application Name\";\n            this.columnHeader3.Width = 100;\n            // \n            // columnHeader4\n            // \n            this.columnHeader4.Text = \"Application ID\";\n            this.columnHeader4.Width = 180;\n            // \n            // columnHeader5\n            // \n            this.columnHeader5.Text = \"Certificate Hash\";\n            this.columnHeader5.Width = 180;\n            // \n            // columnHeader6\n            // \n            this.columnHeader6.Text = \"Certificate Store\";\n            this.columnHeader6.Width = 120;\n            // \n            // columnHeader8\n            // \n            this.columnHeader8.Text = \"Certificate Status\";\n            this.columnHeader8.Width = 80;\n            // \n            // tpURL\n            // \n            this.tpURL.Controls.Add(this.lvURL);\n            this.tpURL.Location = new System.Drawing.Point(4, 22);\n            this.tpURL.Name = \"tpURL\";\n            this.tpURL.Padding = new System.Windows.Forms.Padding(3);\n            this.tpURL.Size = new System.Drawing.Size(552, 501);\n            this.tpURL.TabIndex = 2;\n            this.tpURL.Text = \"URL Reservation\";\n            this.tpURL.UseVisualStyleBackColor = true;\n            // \n            // lvURL\n            // \n            this.lvURL.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.columnHeader7,\n            this.columnHeader10});\n            this.lvURL.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.lvURL.FullRowSelect = true;\n            this.lvURL.HideSelection = false;\n            this.lvURL.Location = new System.Drawing.Point(3, 3);\n            this.lvURL.Margin = new System.Windows.Forms.Padding(5);\n            this.lvURL.MultiSelect = false;\n            this.lvURL.Name = \"lvURL\";\n            this.lvURL.Size = new System.Drawing.Size(546, 495);\n            this.lvURL.TabIndex = 2;\n            this.lvURL.UseCompatibleStateImageBehavior = false;\n            this.lvURL.View = System.Windows.Forms.View.Details;\n            this.lvURL.KeyDown += new System.Windows.Forms.KeyEventHandler(this.LvURLKeyDown);\n            this.lvURL.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LvURLMouseDoubleClick);\n            this.lvURL.SelectedIndexChanged += new System.EventHandler(this.LvURLSelectedIndexChanged);\n            // \n            // columnHeader7\n            // \n            this.columnHeader7.Text = \"URL Prefix\";\n            this.columnHeader7.Width = 180;\n            // \n            // columnHeader10\n            // \n            this.columnHeader10.Text = \"Security Descriptor\";\n            this.columnHeader10.Width = 180;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(523, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to manage certificate bindings that the Web server can use with \" +\n    \"websites configured for SSL.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 8;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(106, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"HTTP API\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // HttpApiPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"HttpApiPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.tabControl1.ResumeLayout(false);\n            this.tpIP.ResumeLayout(false);\n            this.tpSNI.ResumeLayout(false);\n            this.tpURL.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ContextMenuStrip cmsActionPanel;\n        private PictureBox pictureBox1;\n        private Panel panel2;\n        private TabControl tabControl1;\n        private TabPage tpIP;\n        private ListView lvIP;\n        private ColumnHeader chAddress;\n        private ColumnHeader chPort;\n        private ColumnHeader chApp;\n        private ColumnHeader chAppId;\n        private ColumnHeader chHash;\n        private ColumnHeader chStore;\n        private ColumnHeader chStatus;\n        private TabPage tpSNI;\n        private TabPage tpURL;\n        private ListView lvSni;\n        private ColumnHeader columnHeader1;\n        private ColumnHeader columnHeader2;\n        private ColumnHeader columnHeader3;\n        private ColumnHeader columnHeader4;\n        private ColumnHeader columnHeader5;\n        private ColumnHeader columnHeader6;\n        private ColumnHeader columnHeader8;\n        private ListView lvURL;\n        private ColumnHeader columnHeader7;\n        private ColumnHeader columnHeader10;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/HttpApiPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpApi\n{\n    using System;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Security.Cryptography;\n\n    internal partial class HttpApiPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly HttpApiPage _owner;\n\n            public PageTaskList(HttpApiPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class SniMappingListViewItem : ListViewItem, IFeatureListViewItem<SniMappingItem>\n        {\n            public SniMappingItem Item { get; }\n            private readonly HttpApiPage _page;\n\n            public SniMappingListViewItem(SniMappingItem item, HttpApiPage page)\n                : base(item.Host)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Port));\n                SubItems.Add(new ListViewSubItem(this, BindingUtility.GetAppName(item.AppId)));\n                SubItems.Add(new ListViewSubItem(this, item.AppId));\n                SubItems.Add(new ListViewSubItem(this, item.Hash));\n                SubItems.Add(new ListViewSubItem(this, item.Store));\n\n                string flag = \"Broken\";\n                using X509Store personal = new X509Store(item.Store, StoreLocation.LocalMachine);\n                try\n                {\n                    personal.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);\n                    var found = personal.Certificates.Find(X509FindType.FindByThumbprint, item.Hash, false);\n                    if (found.Count > 0)\n                    {\n                        flag = \"Healthy\";\n                    }\n\n                    personal.Close();\n                }\n                catch (CryptographicException)\n                {\n                    flag = \"Unknown\";\n                }\n\n                SubItems.Add(new ListViewSubItem(this, flag));\n            }\n        }\n\n        private sealed class IpMappingListViewItem : ListViewItem, IFeatureListViewItem<IpMappingItem>\n        {\n            public IpMappingItem Item { get; }\n            private readonly HttpApiPage _page;\n\n            public IpMappingListViewItem(IpMappingItem item, HttpApiPage page)\n                : base(item.Address)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Port));\n                SubItems.Add(new ListViewSubItem(this, BindingUtility.GetAppName(item.AppId)));\n                SubItems.Add(new ListViewSubItem(this, item.AppId));\n                SubItems.Add(new ListViewSubItem(this, item.Hash));\n                SubItems.Add(new ListViewSubItem(this, item.Store));\n\n                string flag = \"Broken\";\n                using X509Store personal = new X509Store(item.Store, StoreLocation.LocalMachine);\n                try\n                {\n                    personal.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);\n                    var found = personal.Certificates.Find(X509FindType.FindByThumbprint, item.Hash, false);\n                    if (found.Count > 0)\n                    {\n                        flag = \"Healthy\";\n                    }\n\n                    personal.Close();\n                }\n                catch (CryptographicException)\n                {\n                    flag = \"Unknown\";\n                }\n\n                SubItems.Add(new ListViewSubItem(this, flag));\n            }\n        }\n\n        private sealed class ReservedUrlListViewItem : ListViewItem, IFeatureListViewItem<ReservedUrlsItem>\n        {\n            public ReservedUrlsItem Item { get; }\n            private readonly HttpApiPage _page;\n\n            public ReservedUrlListViewItem(ReservedUrlsItem item, HttpApiPage page)\n                : base(item.UrlPrefix)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.SecurityDescriptor));\n            }\n        }\n\n        private PageTaskList _taskList;\n\n        public HttpApiPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            var ip = new IpMappingFeature(Module);\n            ip.HttpApiSettingsUpdate = RefreshIp;\n            ip.Load();\n            ip.InitializeColumnClick(lvIP);\n            // TODO: add grouping?\n            tpIP.Tag = ip;\n            RefreshIp();\n\n            var sni = new SniMappingFeature(Module);\n            sni.HttpApiSettingsUpdate = RefreshSni;\n            sni.Load();\n            sni.InitializeColumnClick(lvSni);\n            tpSNI.Tag = sni;\n\n            var url = new ReservedUrlsFeature(Module);\n            url.HttpApiSettingsUpdate = RefreshUrl;\n            url.Load();\n            url.InitializeColumnClick(lvURL);\n            tpURL.Tag = url;\n        }\n\n        private void RefreshSni()\n        {\n            var feature = (SniMappingFeature)tpSNI.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvSni.Items.Clear();\n            foreach (var file in feature.Items)\n            {\n                lvSni.Items.Add(new SniMappingListViewItem(file, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (SniMappingListViewItem item in lvSni.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void RefreshIp()\n        {\n            var feature = (IpMappingFeature)tpIP.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvIP.Items.Clear();\n            foreach (var file in feature.Items)\n            {\n                lvIP.Items.Add(new IpMappingListViewItem(file, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (IpMappingListViewItem item in lvIP.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void RefreshUrl()\n        {\n            var feature = (ReservedUrlsFeature)tpURL.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvURL.Items.Clear();\n            foreach (var file in feature.Items)\n            {\n                lvURL.Items.Add(new ReservedUrlListViewItem(file, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (ReservedUrlListViewItem item in lvURL.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void InitializeListPage()\n        {\n        }\n\n        protected override void Refresh()\n        {\n            var feature = (IHttpApiFeature)tabControl1.SelectedTab.Tag;\n            var extra = feature?.GetTaskList();\n            Tasks.Fill(tsActionPanel, cmsActionPanel, extra);\n            base.Refresh();\n        }\n\n        private void LvSniKeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete && lvSni.SelectedItems.Count > 0)\n            {\n                var feature = (SniMappingFeature)tpSNI.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvSniMouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            var feature = (SniMappingFeature)tpSNI.Tag;\n            feature.HandleMouseDoubleClick(lvSni);\n        }\n\n        private void LvSniSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (SniMappingFeature)tpSNI.Tag;\n            feature.HandleSelectedIndexChanged(lvSni);\n            Refresh();\n        }\n\n        private void LvIPKeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete && lvIP.SelectedItems.Count > 0)\n            {\n                var feature = (IpMappingFeature)tpIP.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvIPMouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            var feature = (IpMappingFeature)tpIP.Tag;\n            feature.HandleMouseDoubleClick(lvIP);\n        }\n\n        private void LvIPSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (IpMappingFeature)tpIP.Tag;\n            feature.HandleSelectedIndexChanged(lvIP);\n            Refresh();\n        }\n\n        private void LvURLKeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete && lvURL.SelectedItems.Count > 0)\n            {\n                var feature = (ReservedUrlsFeature)tpURL.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvURLMouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            var feature = (ReservedUrlsFeature)tpURL.Tag;\n            feature.HandleMouseDoubleClick(lvURL);\n        }\n\n        private void LvURLSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (ReservedUrlsFeature)tpURL.Tag;\n            feature.HandleSelectedIndexChanged(lvURL);\n            Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            var feature = (IHttpApiFeature)tabControl1.SelectedTab.Tag;\n            feature.ShowHelp();\n            return true;\n        }\n\n        private void TabControl1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (IHttpApiFeature)tabControl1.SelectedTab.Tag;\n            feature.HttpApiSettingsUpdate.Invoke();\n            Refresh();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/HttpApiPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>122, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"$this.TrayHeight\" type=\"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>179</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpApi/HttpApiSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpApi\n{\n    public delegate void HttpApiSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/IHttpApiFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Management.Client;\n\nnamespace JexusManager.Features.HttpApi\n{\n    internal interface IHttpApiFeature\n    {\n        TaskList GetTaskList();\n\n        bool ShowHelp();\n\n        HttpApiSettingsSavedEventHandler HttpApiSettingsUpdate { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/IpMappingFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\nusing System.Reflection;\nusing System.Collections;\nusing Microsoft.Web.Management.Client.Win32;\nusing Microsoft.Web.Management.Client;\nusing System.Collections.Generic;\nusing Org.BouncyCastle.Utilities.Encoders;\nusing System.Diagnostics;\nusing Microsoft.Web.Administration;\nusing System.Security.Cryptography.X509Certificates;\nusing System.Security.Cryptography;\nusing JexusManager.Services;\n\nnamespace JexusManager.Features.HttpApi\n{\n    internal class IpMappingFeature : HttpApiFeature<IpMappingItem>\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"IpMappingFeature\");\n\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly IpMappingFeature _owner;\n\n            public FeatureTaskList(IpMappingFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(RemoveTaskItem);\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"View\", \"View Certificate...\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void View()\n            {\n                _owner.View();\n            }\n        }\n\n        public IpMappingFeature(Microsoft.Web.Management.Client.Module module)\n            : base(module)\n        {\n        }\n\n        private FeatureTaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            Items = new List<IpMappingItem>();\n            var ipMappings = Microsoft.Web.Administration.NativeMethods.QuerySslCertificateInfo();\n            foreach (var mapping in ipMappings)\n            {\n                Items.Add(new IpMappingItem(mapping.IpPort.Address.ToString(), mapping.IpPort.Port.ToString(), mapping.AppId.ToString(), Hex.ToHexString(mapping.Hash), mapping.StoreName, this));\n            }\n\n            OnHttpApiSettingsSaved();\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove this IP mapping?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            DeleteMapping();\n        }\n\n        private void DeleteMapping()\n        {\n            try\n            {\n                // remove IP mapping\n                using var process = new Process();\n                var start = process.StartInfo;\n                start.Verb = \"runas\";\n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                start.Arguments =\n                    $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /a:\\\"{SelectedItem.Address}\\\" /o:{SelectedItem.Port}\\\"\";\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                process.Start();\n                process.WaitForExit();\n\n                if (process.ExitCode == 0)\n                {\n                    Items.Remove(SelectedItem);\n                    SelectedItem = null;\n                    OnHttpApiSettingsSaved();\n                }\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                if (ex.NativeErrorCode != (int)Windows.Win32.Foundation.WIN32_ERROR.ERROR_CANCELLED)\n                {\n                    _logger.LogError(ex, \"Win32 error deleting IP mapping. Native error code: {Code}\", ex.NativeErrorCode);\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error deleting IP mapping\");\n            }\n        }\n\n        private void View()\n        {\n            X509Certificate2 cert = null;\n            using (X509Store personal = new X509Store(SelectedItem.Store, StoreLocation.LocalMachine))\n            {\n                try\n                {\n                    personal.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);\n                    var found = personal.Certificates.Find(X509FindType.FindByThumbprint, SelectedItem.Hash, false);\n                    if (found.Count > 0)\n                    {\n                        cert = found[0];\n                    }\n\n                    personal.Close();\n                }\n                catch (CryptographicException ex)\n                {\n                    var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    dialog.ShowError(ex, $\"This mapping might point to an invalid certificate. Thumbprint {SelectedItem.Hash}, Store {SelectedItem.Store}.\", Name, false);\n                    return;\n                }\n            }\n\n            if (cert != null)\n            {\n                DialogHelper.DisplayCertificate(cert, IntPtr.Zero);\n            }\n        }\n\n        protected void OnHttpApiSettingsSaved()\n        {\n            HttpApiSettingsUpdate?.Invoke();\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"https://msdn.microsoft.com/library/windows/desktop/cc307243(v=vs.85).aspx\");\n            return false;\n        }\n\n        public bool AutomicRebindEnabled { get; set; }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            return null;\n        }\n\n        public override string Name => \"IP Mappings\";\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/IpMappingItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\n\nnamespace JexusManager.Features.HttpApi\n{\n    internal class IpMappingItem : IItem<IpMappingItem>\n    {\n        public IpMappingItem(string address, string port, string appId, string hash, string store, IpMappingFeature feature)\n        {\n            Address = address;\n            Port = port;\n            AppId = appId;\n            Hash = hash;\n            Store = store;\n            Feature = feature;\n        }\n\n        public string Hash { get; set; }\n        public string Address { get; set; }\n        public string Port { get; set; }\n        public string AppId { get; set; }\n        public string Store { get; set; }\n        public IpMappingFeature Feature { get; private set; }\n\n        public string Flag { get; set; }\n        public ConfigurationElement Element { get; set; }\n\n        public void Apply()\n        { }\n\n        public bool Equals(IpMappingItem other)\n        {\n            return Match(other);\n        }\n\n        public bool Match(IpMappingItem other)\n        {\n            return other != null && other.Hash == Hash && other.Store == Store && other.Address == Address\n                   && other.Port == Port && other.AppId == AppId;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/JexusManager.Features.HttpApi.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.HttpApi</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/NewReservedUrlDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.HttpApi\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewReservedUrlDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtAddress = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));\n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(327, 67);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Anchor = System.Windows.Forms.AnchorStyles.Bottom;\n            this.btnOK.Location = new System.Drawing.Point(226, 67);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 9);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(61, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"URL Prefix:\";\n            // \n            // txtAddress\n            // \n            this.txtAddress.Location = new System.Drawing.Point(15, 25);\n            this.txtAddress.Name = \"txtAddress\";\n            this.txtAddress.Size = new System.Drawing.Size(407, 20);\n            this.txtAddress.TabIndex = 5;\n            // \n            // NewRestrictionDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(434, 102);\n            this.Controls.Add(this.txtAddress);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewRestrictionDialog\";\n            this.Text = \"Add URL Reservation\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtAddress;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/NewReservedUrlDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpApi\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewReservedUrlDialog : DialogForm\n    {\n        public NewReservedUrlDialog(IServiceProvider serviceProvider, ReservedUrlsFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtAddress, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = txtAddress.Text.Length > 0;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new ReservedUrlsItem(txtAddress.Text, \"D:(A;;GX;;;WD)\", feature);\n                    if (feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"A URL reservation already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ReservedUrlsItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/NewReservedUrlDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpApi/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"2b03e7fe-3dbd-4914-ad8c-4cb7007a9eed\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.HttpApi.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.HttpApi.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap http_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"http_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"http_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\http_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpApi/ReservedUrlsFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing JexusManager.Services;\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Client;\nusing Microsoft.Web.Management.Client.Win32;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\nusing System.Reflection;\nusing System.Diagnostics;\n\nnamespace JexusManager.Features.HttpApi\n{\n    public class ReservedUrlsFeature : HttpApiFeature<ReservedUrlsItem>\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"ReservedUrlsFeature\");\n\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly ReservedUrlsFeature _owner;\n\n            public FeatureTaskList(ReservedUrlsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            private const string LocalhostIssuer = \"CN=localhost\";\n            private readonly string _localMachineIssuer = string.Format(\"CN={0}\", Environment.MachineName);\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"CreateSelf\", \"Add...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void CreateSelf()\n            {\n                _owner.Create();\n            }\n\n        }\n\n        public ReservedUrlsFeature(Microsoft.Web.Management.Client.Module module)\n            : base(module)\n        {\n        }\n\n        private FeatureTaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            Items = new List<ReservedUrlsItem>();\n            var httpNamespaceAcls = Microsoft.Web.Administration.NativeMethods.QueryHttpNamespaceAcls();\n            foreach (var mapping in httpNamespaceAcls)\n            {\n                Items.Add(new ReservedUrlsItem(mapping.UrlPrefix, mapping.SecurityDescriptor, this));\n            }\n\n            OnHttpApiSettingsSaved();\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove this URL reservation?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            DeleteReservedUrl();\n        }\n\n        private void DeleteReservedUrl()\n        {\n            try\n            {\n                // remove reserved URL\n                using var process = new Process();\n                var start = process.StartInfo;\n                start.Verb = \"runas\";\n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                start.Arguments = $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /u:\\\"{SelectedItem.UrlPrefix}\\\" /d:\\\"{SelectedItem.SecurityDescriptor}\\\"\";\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                process.Start();\n                process.WaitForExit();\n\n                if (process.ExitCode == 0)\n                {\n                    Items.Remove(SelectedItem);\n                    SelectedItem = null;\n                    OnHttpApiSettingsSaved();\n                }\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                if (ex.NativeErrorCode != (int)Windows.Win32.Foundation.WIN32_ERROR.ERROR_CANCELLED)\n                {\n                    _logger.LogError(ex, \"Win32 error deleting reserved URL. Native error code: {Code}\", ex.NativeErrorCode);\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error deleting reserved URL\");\n            }\n        }\n\n        protected void OnHttpApiSettingsSaved()\n        {\n            HttpApiSettingsUpdate?.Invoke();\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"https://msdn.microsoft.com/library/windows/desktop/cc307243(v=vs.85).aspx\");\n            return false;\n        }\n\n        private void Create()\n        {\n            using var dialog = new NewReservedUrlDialog(Module, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            var message = BindingUtility.AddReservedUrl(dialog.Item.UrlPrefix);\n            if (string.IsNullOrEmpty(message))\n            {\n                Items.Add(dialog.Item);\n                OnHttpApiSettingsSaved();\n            }\n            else\n            {\n                var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                service.ShowMessage($\"Invalid URL prefix input is detected. {message}\", Name, MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            return null;\n        }\n\n        public override string Name => \"URL Reservations\";\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/ReservedUrlsItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\n\nnamespace JexusManager.Features.HttpApi\n{\n    public class ReservedUrlsItem : IItem<ReservedUrlsItem>\n    {\n        public string UrlPrefix { get; set; }\n        public string SecurityDescriptor { get; set; }\n\n        public ReservedUrlsItem(string urlPrefix, string securityDescriptor, ReservedUrlsFeature feature)\n        {\n            SecurityDescriptor = securityDescriptor;\n            UrlPrefix = urlPrefix;\n            Feature = feature;\n        }\n\n        public ReservedUrlsFeature Feature { get; private set; }\n\n        public string Flag { get; set; }\n        public ConfigurationElement Element { get; set; }\n\n        public void Apply()\n        { }\n\n        public bool Equals(ReservedUrlsItem other)\n        {\n            return Match(other) && other.SecurityDescriptor == SecurityDescriptor;\n        }\n\n        public bool Match(ReservedUrlsItem other)\n        {\n            return other != null && other.UrlPrefix == UrlPrefix;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/SniMappingFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nusing System;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\n\nnamespace JexusManager.Features.HttpApi\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n    using Services;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Org.BouncyCastle.Utilities.Encoders;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Security.Cryptography;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class SniMappingFeature : HttpApiFeature<SniMappingItem>\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"SniMappingFeature\");\n\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly SniMappingFeature _owner;\n\n            public FeatureTaskList(SniMappingFeature owner)\n            {\n                _owner = owner;\n            }\n\n            private const string LocalhostIssuer = \"CN=localhost\";\n            private readonly string _localMachineIssuer = $\"CN={Environment.MachineName}\";\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(RemoveTaskItem);\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"View\", \"View Certificate...\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void View()\n            {\n                _owner.View();\n            }\n        }\n\n        public SniMappingFeature(Module module)\n            : base(module)\n        {\n        }\n\n        private FeatureTaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public override void Load()\n        {\n            Items = new List<SniMappingItem>();\n            var sniMappings = NativeMethods.QuerySslSniInfo();\n            foreach (var mapping in sniMappings)\n            {\n                Items.Add(new SniMappingItem(mapping.Host, mapping.Port.ToString(), mapping.AppId.ToString(), Hex.ToHexString(mapping.Hash), mapping.StoreName, this));\n            }\n\n            OnHttpApiSettingsSaved();\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove this SNI mapping?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            DeleteMapping();\n        }\n\n        private void DeleteMapping()\n        {\n            try\n            {\n                // remove certificate and mapping\n                using var process = new Process();\n                var start = process.StartInfo;\n                start.Verb = \"runas\";\n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                start.Arguments =\n                    $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /x:\\\"{SelectedItem.Host}\\\" /o:{SelectedItem.Port}\\\"\";\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                process.Start();\n                process.WaitForExit();\n\n                if (process.ExitCode == 0)\n                {\n                    Items.Remove(SelectedItem);\n                    SelectedItem = null;\n                    this.OnHttpApiSettingsSaved();\n                }\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                if (ex.NativeErrorCode != (int)Windows.Win32.Foundation.WIN32_ERROR.ERROR_CANCELLED)\n                {\n                    _logger.LogError(ex, \"Win32 error deleting SNI mapping. Native error code: {Code}\", ex.NativeErrorCode);\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error deleting SNI mapping\");\n            }\n        }\n\n        private void View()\n        {\n            X509Certificate2 cert = null;\n            X509Store personal = new X509Store(SelectedItem.Store, StoreLocation.LocalMachine);\n            try\n            {\n                personal.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);\n                var found = personal.Certificates.Find(X509FindType.FindByThumbprint, SelectedItem.Hash, false);\n                if (found.Count > 0)\n                {\n                    cert = found[0];\n                }\n\n                personal.Close();\n            }\n            catch (CryptographicException ex)\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                dialog.ShowError(ex, $\"This mapping might point to an invalid certificate. Thumbprint {SelectedItem.Hash}, Store {SelectedItem.Store}.\", Name, false);\n                return;\n            }\n\n            if (cert != null)\n            {\n                DialogHelper.DisplayCertificate(cert, IntPtr.Zero);\n            }\n        }\n\n        protected void OnHttpApiSettingsSaved()\n        {\n            HttpApiSettingsUpdate?.Invoke();\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"https://msdn.microsoft.com/library/windows/desktop/cc307243(v=vs.85).aspx\");\n            return false;\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            return null;\n        }\n\n        public bool AutomicRebindEnabled { get; set; }\n\n        public override string Name => \"SNI Mappings\";\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/SniMappingItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpApi\n{\n    using Microsoft.Web.Administration;\n\n    internal class SniMappingItem : IItem<SniMappingItem>\n    {\n        public SniMappingItem(string host, string port, string appId, string hash, string store, SniMappingFeature feature)\n        {\n            Host = host;\n            Port = port;\n            AppId = appId;\n            Hash = hash;\n            Store = store;\n            Feature = feature;\n        }\n\n        public string Hash { get; set; }\n        public string Host { get; set; }\n        public string Port { get; set; }\n        public string AppId { get; set; }\n        public string Store { get; set; }\n        public SniMappingFeature Feature { get; private set; }\n\n        public string Flag { get; set; }\n        public ConfigurationElement Element { get; set; }\n\n        public void Apply()\n        { }\n\n        public bool Equals(SniMappingItem other)\n        {\n            return Match(other);\n        }\n\n        public bool Match(SniMappingItem other)\n        {\n            return other != null && other.Hash == Hash && other.Store == Store && other.Host == Host\n                   && other.Port == Port && other.AppId == AppId;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpApi/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.HttpErrors/EditDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.HttpErrors\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class EditDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.rbRemote = new System.Windows.Forms.RadioButton();\n            this.rbDetailed = new System.Windows.Forms.RadioButton();\n            this.rbCustom = new System.Windows.Forms.RadioButton();\n            this.label1 = new System.Windows.Forms.Label();\n            this.groupBox2 = new System.Windows.Forms.GroupBox();\n            this.btnSelect = new System.Windows.Forms.Button();\n            this.cbType = new System.Windows.Forms.ComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.groupBox1.SuspendLayout();\n            this.groupBox2.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.rbRemote);\n            this.groupBox1.Controls.Add(this.rbDetailed);\n            this.groupBox1.Controls.Add(this.rbCustom);\n            this.groupBox1.Controls.Add(this.label1);\n            this.groupBox1.Location = new System.Drawing.Point(12, 12);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(399, 152);\n            this.groupBox1.TabIndex = 0;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Error Responses\";\n            // \n            // rbRemote\n            // \n            this.rbRemote.AutoSize = true;\n            this.rbRemote.Location = new System.Drawing.Point(10, 94);\n            this.rbRemote.Name = \"rbRemote\";\n            this.rbRemote.Size = new System.Drawing.Size(290, 30);\n            this.rbRemote.TabIndex = 3;\n            this.rbRemote.TabStop = true;\n            this.rbRemote.Text = \"Detailed errors for local requests and custom error pages\\r\\nfor remote requests\";\n            this.rbRemote.UseVisualStyleBackColor = true;\n            // \n            // rbDetailed\n            // \n            this.rbDetailed.AutoSize = true;\n            this.rbDetailed.Location = new System.Drawing.Point(10, 71);\n            this.rbDetailed.Name = \"rbDetailed\";\n            this.rbDetailed.Size = new System.Drawing.Size(93, 17);\n            this.rbDetailed.TabIndex = 2;\n            this.rbDetailed.TabStop = true;\n            this.rbDetailed.Text = \"Detailed errors\";\n            this.rbDetailed.UseVisualStyleBackColor = true;\n            // \n            // rbCustom\n            // \n            this.rbCustom.AutoSize = true;\n            this.rbCustom.Location = new System.Drawing.Point(10, 48);\n            this.rbCustom.Name = \"rbCustom\";\n            this.rbCustom.Size = new System.Drawing.Size(116, 17);\n            this.rbCustom.TabIndex = 1;\n            this.rbCustom.TabStop = true;\n            this.rbCustom.Text = \"Custom error pages\";\n            this.rbCustom.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(7, 20);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(217, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"When the server encounters an error, return:\";\n            // \n            // groupBox2\n            // \n            this.groupBox2.Controls.Add(this.btnSelect);\n            this.groupBox2.Controls.Add(this.cbType);\n            this.groupBox2.Controls.Add(this.label3);\n            this.groupBox2.Controls.Add(this.txtPath);\n            this.groupBox2.Controls.Add(this.label2);\n            this.groupBox2.Location = new System.Drawing.Point(12, 182);\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.Size = new System.Drawing.Size(399, 155);\n            this.groupBox2.TabIndex = 1;\n            this.groupBox2.TabStop = false;\n            this.groupBox2.Text = \"Default Page\";\n            // \n            // btnSelect\n            // \n            this.btnSelect.Location = new System.Drawing.Point(284, 50);\n            this.btnSelect.Name = \"btnSelect\";\n            this.btnSelect.Size = new System.Drawing.Size(34, 23);\n            this.btnSelect.TabIndex = 4;\n            this.btnSelect.Text = \"...\";\n            this.btnSelect.UseVisualStyleBackColor = true;\n            // \n            // cbType\n            // \n            this.cbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbType.FormattingEnabled = true;\n            this.cbType.Items.AddRange(new object[] {\n            \"File\",\n            \"Execute URL\",\n            \"Redirect\"});\n            this.cbType.Location = new System.Drawing.Point(10, 115);\n            this.cbType.Name = \"cbType\";\n            this.cbType.Size = new System.Drawing.Size(238, 21);\n            this.cbType.TabIndex = 3;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(7, 88);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(59, 13);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Path Type:\";\n            // \n            // txtPath\n            // \n            this.txtPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtPath.Location = new System.Drawing.Point(10, 52);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(268, 20);\n            this.txtPath.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(7, 27);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(32, 13);\n            this.label2.TabIndex = 0;\n            this.label2.Text = \"Path:\";\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(236, 351);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 2;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(332, 351);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 3;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // EditDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(439, 386);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.groupBox2);\n            this.Controls.Add(this.groupBox1);\n            this.Name = \"EditDialog\";\n            this.Text = \"Edit Error Pages Settings\";\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.groupBox2.ResumeLayout(false);\n            this.groupBox2.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private GroupBox groupBox1;\n        private RadioButton rbRemote;\n        private RadioButton rbDetailed;\n        private RadioButton rbCustom;\n        private Label label1;\n        private GroupBox groupBox2;\n        private Button btnSelect;\n        private ComboBox cbType;\n        private Label label3;\n        private TextBox txtPath;\n        private Label label2;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/EditDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpErrors\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class EditDialog : DialogForm\n    {\n        public EditDialog(IServiceProvider serviceProvider, ConfigurationElement element, HttpErrorsFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            var mode = (long)element[\"errorMode\"];\n            rbCustom.Checked = mode == 1;\n            rbDetailed.Checked = mode == 2;\n            rbRemote.Checked = mode == 0;\n\n            var defaultMode = (long)element[\"defaultResponseMode\"];\n            cbType.SelectedIndex = (int)defaultMode;\n\n            txtPath.Text = (string)element[\"defaultPath\"];\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnSelect, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtPath, string.Empty, null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (rbCustom.Checked)\n                    {\n                        element[\"errorMode\"] = 1L;\n                    }\n                    else if (rbDetailed.Checked)\n                    {\n                        element[\"errorMode\"] = 2L;\n                    }\n                    else\n                    {\n                        element[\"errorMode\"] = 0L;\n                    }\n\n                    element[\"defaultResponseMode\"] = (long)cbType.SelectedIndex;\n                    element[\"defaultPath\"] = txtPath.Text;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/EditDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpErrors/HttpErrorsFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.HttpErrors\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class HttpErrorsFeature : FeatureBase<HttpErrorsItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly HttpErrorsFeature _owner;\n\n            public FeatureTaskList(HttpErrorsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                    if (_owner.SelectedItem.Flag == \"Local\")\n                    {\n                        result.Add(new MethodTaskItem(\"Change\", \"Change Status Code\", string.Empty).SetUsage());\n                    }\n\n                    result.Add(RemoveTaskItem);\n                }\n\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"Set\", \"Edit Feature Settings...\", string.Empty).SetUsage());\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n        }\n\n        public HttpErrorsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            LoadItems();\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewErrorDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected custom error page?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(HttpErrorsItem item)\n        {\n            using var dialog = new NewErrorDialog(Module, item, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange([\"No Grouping\", \"Entry Type\", \"Type\"]);\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[3].Text;\n                case \"Type\":\n                    return item.SubItems[2].Text;\n                default:\n                    return string.Empty;\n            }\n        }\n\n        public void Set()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/httpErrors\");\n            using (var dialog = new EditDialog(Module, section, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection section = service.GetSection(\"system.webServer/httpErrors\");\n            return section.GetCollection();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            HttpErrorsSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210481\");\n            return false;\n        }\n\n        public HttpErrorsSettingsSavedEventHandler HttpErrorsSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get\n            {\n                return \"Error Pages\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/HttpErrorsItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpErrors\n{\n    using Microsoft.Web.Administration;\n\n    internal class HttpErrorsItem : IItem<HttpErrorsItem>\n    {\n        public HttpErrorsItem(ConfigurationElement element)\n        {\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            Element = element;\n            if (element == null)\n            {\n                Prefix = Path = string.Empty;\n                Response = \"File\";\n                Substatus = -1;\n                return;\n            }\n\n            Status = (uint)element[\"statusCode\"];\n            Substatus = (int)element[\"subStatusCode\"];\n            Path = (string)element[\"path\"];\n            Prefix = (string)element[\"prefixLanguageFilePath\"];\n            Response = element.Schema.AttributeSchemas[\"responseMode\"].Format(element[\"responseMode\"]);\n        }\n\n        public string Prefix { get; set; }\n\n        public uint Status { get; set; }\n        public int Substatus { get; set; }\n        public string Path { get; set; }\n        public string Response { get; set; }\n        public string Flag { get; set; }\n        public ConfigurationElement Element { get; set; }\n\n        public string FullPath\n        {\n            get { return string.IsNullOrEmpty(Prefix) ? Path : string.Format(\"{0}\\\\<LANGUAGE-TAG>\\\\{1}\", Prefix, Path); }\n        }\n\n        public string Code\n        {\n            get { return Substatus == -1 || Substatus == 0 ? Status.ToString() : string.Format(\"{0}.{1}\", Status, Substatus); }\n        }\n\n        public bool Equals(HttpErrorsItem other)\n        {\n            return Match(other);\n        }\n\n        public bool Match(HttpErrorsItem other)\n        {\n            return other != null && other.Status == Status && other.Substatus == Substatus;\n        }\n\n        public void Apply()\n        {\n            Element[\"statusCode\"] = Status;\n            Element[\"subStatusCode\"] = Substatus;\n            Element[\"prefixLanguageFilePath\"] = Prefix;\n            Element[\"path\"] = Path;\n            Element[\"responseMode\"] = Response;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/HttpErrorsModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpErrors\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class HttpErrorsModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(HttpErrorsPage), \"Error Pages\",\n                \"Configure pages to return when errors occur\", Resources.custom_error_36,\n                Resources.custom_error_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/HttpErrorsModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpErrors\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class HttpErrorsModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(HttpErrorsModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/HttpErrorsPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.HttpErrors\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class HttpErrorsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chStatus = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 5;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 11;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chStatus,\n            this.chPath,\n            this.chPage,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown); \n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);            \n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.listView1_SelectedIndexChanged);\n            // \n            // chStatus\n            // \n            this.chStatus.Text = \"Status Code\";\n            this.chStatus.Width = 120;\n            // \n            // chPath\n            // \n            this.chPath.Text = \"Path\";\n            this.chPath.Width = 150;\n            // \n            // chPage\n            // \n            this.chPage.Text = \"Type\";\n            this.chPage.Width = 120;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 120;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel3,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(796, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to configure HTTP error responses. The error responses can be cu\" +\n    \"stom error pages, or detailed error messages that contain troubleshooting inform\" +\n    \"ation.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(126, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Error Pages\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // CustomErrorsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"HttpErrorsPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chStatus;\n        private ColumnHeader chPath;\n        private ColumnHeader chType;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ColumnHeader chPage;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/HttpErrorsPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpErrors\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class HttpErrorsPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly HttpErrorsPage _owner;\n\n            public PageTaskList(HttpErrorsPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class CustomErrorsListViewItem : ListViewItem, IFeatureListViewItem<HttpErrorsItem>\n        {\n            public HttpErrorsItem Item { get; }\n            private readonly HttpErrorsPage _page;\n\n            public CustomErrorsListViewItem(HttpErrorsItem item, HttpErrorsPage page)\n                : base(item.Code)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.FullPath));\n                SubItems.Add(new ListViewSubItem(this, item.Response));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private HttpErrorsFeature _feature;\n        private PageTaskList _taskList;\n\n        public HttpErrorsPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new HttpErrorsFeature(Module);\n            _feature.HttpErrorsSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new CustomErrorsListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem != null)\n            {\n                foreach (CustomErrorsListViewItem item in listView1.Items)\n                {\n                    if (item.Item == _feature.SelectedItem)\n                    {\n                        item.Selected = true;\n                    }\n                }\n            }\n\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, EventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void listView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/HttpErrorsPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>281, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpErrors/HttpErrorsSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpErrors\n{\n    public delegate void HttpErrorsSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/JexusManager.Features.HttpErrors.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.HttpErrors</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/LocalErrorDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.HttpErrors\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class LocalErrorDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtDirectory = new System.Windows.Forms.TextBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.label4 = new System.Windows.Forms.Label();\n            this.label5 = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(76, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Directory path:\";\n            // \n            // txtDirectory\n            // \n            this.txtDirectory.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtDirectory.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;\n            this.txtDirectory.Location = new System.Drawing.Point(15, 25);\n            this.txtDirectory.Name = \"txtDirectory\";\n            this.txtDirectory.Size = new System.Drawing.Size(300, 20);\n            this.txtDirectory.TabIndex = 1;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(321, 23);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(85, 23);\n            this.btnBrowse.TabIndex = 2;\n            this.btnBrowse.Text = \"Browse...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 48);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(164, 13);\n            this.label2.TabIndex = 3;\n            this.label2.Text = \"Example: d:\\\\errors, relative\\\\errors\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 79);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(89, 13);\n            this.label3.TabIndex = 4;\n            this.label3.Text = \"Relative file path:\";\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(15, 95);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(255, 20);\n            this.txtPath.TabIndex = 5;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(226, 211);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 6;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(322, 211);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 7;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(12, 118);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(148, 13);\n            this.label4.TabIndex = 8;\n            this.label4.Text = \"Example: \\\\NotFound\\\\404.htm\";\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(12, 161);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(226, 13);\n            this.label5.TabIndex = 9;\n            this.label5.Text = \"Example: d:\\\\errors\\\\EN-US\\\\NotFound\\\\404.htm\";\n            // \n            // LocalErrorDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(429, 246);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.txtDirectory);\n            this.Controls.Add(this.label1);\n            this.Name = \"LocalErrorDialog\";\n            this.Text = \"Set Localized Custom Error Path\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtDirectory;\n        private Button btnBrowse;\n        private Label label2;\n        private Label label3;\n        private TextBox txtPath;\n        private Button btnOK;\n        private Button btnCancel;\n        private Label label4;\n        private Label label5;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/LocalErrorDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpErrors\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class LocalErrorDialog : DialogForm\n    {\n        public LocalErrorDialog(IServiceProvider serviceProvider, HttpErrorsItem item, HttpErrorsFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            txtDirectory.Text = item.Prefix;\n            txtPath.Text = item.Path;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowBrowseDialog(txtDirectory, null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    item.Prefix = txtDirectory.Text;\n                    item.Path = txtPath.Text;\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/LocalErrorDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpErrors/NewErrorDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.HttpErrors\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewErrorDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtStatusCode = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.btnSet = new System.Windows.Forms.Button();\n            this.label6 = new System.Windows.Forms.Label();\n            this.txtRedirect = new System.Windows.Forms.TextBox();\n            this.label7 = new System.Windows.Forms.Label();\n            this.label5 = new System.Windows.Forms.Label();\n            this.txtExecute = new System.Windows.Forms.TextBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.cbLocalize = new System.Windows.Forms.CheckBox();\n            this.txtStatic = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.rbRedirect = new System.Windows.Forms.RadioButton();\n            this.rbExecute = new System.Windows.Forms.RadioButton();\n            this.rbStatic = new System.Windows.Forms.RadioButton();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(67, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Status code:\";\n            // \n            // txtStatusCode\n            // \n            this.txtStatusCode.Location = new System.Drawing.Point(12, 25);\n            this.txtStatusCode.Name = \"txtStatusCode\";\n            this.txtStatusCode.Size = new System.Drawing.Size(120, 20);\n            this.txtStatusCode.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 48);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(113, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Example: 404 or 404.2\";\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.btnSet);\n            this.groupBox1.Controls.Add(this.label6);\n            this.groupBox1.Controls.Add(this.txtRedirect);\n            this.groupBox1.Controls.Add(this.label7);\n            this.groupBox1.Controls.Add(this.label5);\n            this.groupBox1.Controls.Add(this.txtExecute);\n            this.groupBox1.Controls.Add(this.label4);\n            this.groupBox1.Controls.Add(this.cbLocalize);\n            this.groupBox1.Controls.Add(this.txtStatic);\n            this.groupBox1.Controls.Add(this.label3);\n            this.groupBox1.Controls.Add(this.rbRedirect);\n            this.groupBox1.Controls.Add(this.rbExecute);\n            this.groupBox1.Controls.Add(this.rbStatic);\n            this.groupBox1.Location = new System.Drawing.Point(12, 77);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(470, 343);\n            this.groupBox1.TabIndex = 3;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Response Action\";\n            // \n            // btnSet\n            // \n            this.btnSet.Location = new System.Drawing.Point(376, 75);\n            this.btnSet.Name = \"btnSet\";\n            this.btnSet.Size = new System.Drawing.Size(88, 23);\n            this.btnSet.TabIndex = 12;\n            this.btnSet.Text = \"Set...\";\n            this.btnSet.UseVisualStyleBackColor = true;\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(33, 306);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(220, 13);\n            this.label6.TabIndex = 11;\n            this.label6.Text = \"Example: http://www.contoso.com/404.aspx\";\n            // \n            // txtRedirect\n            // \n            this.txtRedirect.Location = new System.Drawing.Point(36, 283);\n            this.txtRedirect.Name = \"txtRedirect\";\n            this.txtRedirect.Size = new System.Drawing.Size(334, 20);\n            this.txtRedirect.TabIndex = 10;\n            // \n            // label7\n            // \n            this.label7.AutoSize = true;\n            this.label7.Location = new System.Drawing.Point(33, 267);\n            this.label7.Name = \"label7\";\n            this.label7.Size = new System.Drawing.Size(76, 13);\n            this.label7.TabIndex = 9;\n            this.label7.Text = \"Absolute URL:\";\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(33, 207);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(158, 13);\n            this.label5.TabIndex = 8;\n            this.label5.Text = \"Example: /ErrorPages/404.aspx\";\n            // \n            // txtExecute\n            // \n            this.txtExecute.Location = new System.Drawing.Point(36, 184);\n            this.txtExecute.Name = \"txtExecute\";\n            this.txtExecute.Size = new System.Drawing.Size(334, 20);\n            this.txtExecute.TabIndex = 7;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(33, 168);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(127, 13);\n            this.label4.TabIndex = 6;\n            this.label4.Text = \"URL (relative to site root):\";\n            // \n            // cbLocalize\n            // \n            this.cbLocalize.AutoSize = true;\n            this.cbLocalize.Location = new System.Drawing.Point(36, 104);\n            this.cbLocalize.Name = \"cbLocalize\";\n            this.cbLocalize.Size = new System.Drawing.Size(245, 17);\n            this.cbLocalize.TabIndex = 5;\n            this.cbLocalize.Text = \"Try to return the error file in the client language\";\n            this.cbLocalize.UseVisualStyleBackColor = true;\n            // \n            // txtStatic\n            // \n            this.txtStatic.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtStatic.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtStatic.Location = new System.Drawing.Point(36, 77);\n            this.txtStatic.Name = \"txtStatic\";\n            this.txtStatic.Size = new System.Drawing.Size(334, 20);\n            this.txtStatic.TabIndex = 4;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(33, 61);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(50, 13);\n            this.label3.TabIndex = 3;\n            this.label3.Text = \"File path:\";\n            // \n            // rbRedirect\n            // \n            this.rbRedirect.AutoSize = true;\n            this.rbRedirect.Location = new System.Drawing.Point(15, 235);\n            this.rbRedirect.Name = \"rbRedirect\";\n            this.rbRedirect.Size = new System.Drawing.Size(158, 17);\n            this.rbRedirect.TabIndex = 2;\n            this.rbRedirect.Text = \"Respond with a 302 redirect\";\n            this.rbRedirect.UseVisualStyleBackColor = true;\n            // \n            // rbExecute\n            // \n            this.rbExecute.AutoSize = true;\n            this.rbExecute.Checked = true;\n            this.rbExecute.Location = new System.Drawing.Point(15, 137);\n            this.rbExecute.Name = \"rbExecute\";\n            this.rbExecute.Size = new System.Drawing.Size(150, 17);\n            this.rbExecute.TabIndex = 1;\n            this.rbExecute.TabStop = true;\n            this.rbExecute.Text = \"Execute a URL on the site\";\n            this.rbExecute.UseVisualStyleBackColor = true;\n            // \n            // rbStatic\n            // \n            this.rbStatic.AutoSize = true;\n            this.rbStatic.Location = new System.Drawing.Point(15, 28);\n            this.rbStatic.Name = \"rbStatic\";\n            this.rbStatic.Size = new System.Drawing.Size(265, 17);\n            this.rbStatic.TabIndex = 0;\n            this.rbStatic.Text = \"Insert content from static file into the error response\";\n            this.rbStatic.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(387, 451);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(287, 451);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // NewErrorDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(494, 486);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtStatusCode);\n            this.Controls.Add(this.label1);\n            this.Name = \"NewErrorDialog\";\n            this.Text = \"Add Custom Error Page\";\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtStatusCode;\n        private Label label2;\n        private GroupBox groupBox1;\n        private Label label6;\n        private TextBox txtRedirect;\n        private Label label7;\n        private Label label5;\n        private TextBox txtExecute;\n        private Label label4;\n        private CheckBox cbLocalize;\n        private TextBox txtStatic;\n        private Label label3;\n        private RadioButton rbRedirect;\n        private RadioButton rbExecute;\n        private RadioButton rbStatic;\n        private Button btnCancel;\n        private Button btnOK;\n        private Button btnSet;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/NewErrorDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpErrors\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewErrorDialog : DialogForm\n    {\n        public NewErrorDialog(IServiceProvider serviceProvider, HttpErrorsItem item, HttpErrorsFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            txtStatusCode.ReadOnly = item != null;\n            if (item != null)\n            {\n                txtStatusCode.Text = item.Code;\n            }\n\n            Text = item == null ? \"Add Custom Error Page\" : \"Edit Custom Error Page\";\n            Item = item ?? new HttpErrorsItem(null);\n            var mode = Item.Response;\n            rbStatic.Checked = mode == \"File\";\n            rbExecute.Checked = mode == \"ExecuteURL\";\n            rbRedirect.Checked = mode == \"Redirect\";\n            UpdateUI(Item);\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtStatusCode, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtRedirect, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtExecute, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtStatic, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtStatusCode.Text) &&\n                        !(string.IsNullOrWhiteSpace(txtExecute.Text) && string.IsNullOrWhiteSpace(txtStatic.Text) && string.IsNullOrWhiteSpace(txtRedirect.Text));\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var index = txtStatusCode.Text.IndexOf('.');\n                    if (index == -1)\n                    {\n                        int statusCode;\n                        var statusParsed = int.TryParse(txtStatusCode.Text, out statusCode);\n                        if (!statusParsed || statusCode < 100 || statusCode > 999)\n                        {\n                            ShowMessage(\n                                string.Format(\n                                    \"'{0}' is an invalid status code. Status codes must be numbers in the form of 400 or 400.1. Status codes must be between 100 and 999. Sub-status codes must be between 1 and 999.\",\n                                    txtStatusCode.Text),\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        Item.Status = uint.Parse(txtStatusCode.Text);\n                        Item.Substatus = -1;\n                    }\n                    else\n                    {\n                        var status = index == 0 ? string.Empty : txtStatusCode.Text.Substring(0, index);\n                        var substatus = index == txtStatusCode.Text.Length - 1 ? string.Empty : txtStatusCode.Text.Substring(index + 1);\n                        uint statusCode;\n                        var statusParsed = uint.TryParse(status, out statusCode);\n                        int substatusCode;\n                        var substatusParsed = int.TryParse(substatus, out substatusCode);\n                        if (!statusParsed || statusCode < 100 || statusCode > 999 || !substatusParsed || substatusCode < 1 ||\n                            substatusCode > 999)\n                        {\n                            ShowMessage(\n                                string.Format(\n                                    \"'{0}' is an invalid status code. Status codes must be numbers in the form of 400 or 400.1. Status codes must be between 100 and 999. Sub-status codes must be between 1 and 999.\",\n                                    txtStatusCode.Text),\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        Item.Status = statusCode;\n                        Item.Substatus = substatusCode;\n                    }\n\n                    if (Item.Response == \"Redirect\")\n                    {\n                        Item.Path = txtRedirect.Text;\n                    }\n                    else if (Item.Response == \"ExecuteURL\")\n                    {\n                        if (!Item.Path.StartsWith(\"/\", StringComparison.OrdinalIgnoreCase))\n                        {\n                            ShowMessage(\n                                \"The specific URL is invalid. It must be a relative URL path that begins with \\\"/\\\"\",\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        Item.Path = txtExecute.Text;\n                    }\n                    else\n                    {\n                        Item.Path = txtStatic.Text;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(rbRedirect, \"CheckedChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(rbExecute, \"CheckedChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(rbStatic, \"CheckedChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (rbStatic.Checked)\n                    {\n                        Item.Response = \"File\";\n                    }\n                    else if (rbExecute.Checked)\n                    {\n                        Item.Response = \"ExecuteURL\";\n                    }\n                    else\n                    {\n                        Item.Response = \"Redirect\";\n                    }\n\n                    UpdateUI(Item);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnSet, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (cbLocalize.Checked)\n                    {\n                        using (var dialog = new LocalErrorDialog(ServiceProvider, Item, feature))\n                        {\n                            if (dialog.ShowDialog() != DialogResult.OK)\n                            {\n                                return;\n                            }\n                        }\n\n                        txtStatic.Text = Item.FullPath;\n                    }\n                    else\n                    {\n                        DialogHelper.ShowOpenFileDialog(txtStatic, string.Empty, null);\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbLocalize, \"CheckedChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnSet.Text = cbLocalize.Checked ? \"Set...\" : \"Browse...\";\n                    txtStatic.Text = string.Empty;\n                    txtStatic.ReadOnly = cbLocalize.Checked;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        private void UpdateUI(HttpErrorsItem item)\n        {\n            cbLocalize.Checked = !string.IsNullOrEmpty(item.Prefix);\n            var mode = item.Response;\n            if (mode == \"File\")\n            {\n                txtStatic.Text = string.IsNullOrEmpty(item.Prefix) ? item.Path : item.FullPath;\n                txtStatic.ReadOnly = cbLocalize.Checked;\n                txtExecute.Text = string.Empty;\n                txtRedirect.Text = string.Empty;\n            }\n            else if (mode == \"ExecuteURL\")\n            {\n                txtStatic.Text = string.Empty;\n                txtExecute.Text = Item.Path;\n                txtRedirect.Text = string.Empty;\n            }\n            else\n            {\n                txtStatic.Text = string.Empty;\n                txtExecute.Text = string.Empty;\n                txtRedirect.Text = Item.Path;\n            }\n\n            txtExecute.Enabled = mode == \"ExecuteURL\";\n            txtRedirect.Enabled = mode == \"Redirect\";\n            cbLocalize.Enabled = btnSet.Enabled = txtStatic.Enabled = mode == \"File\";\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public HttpErrorsItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/NewErrorDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpErrors/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"76f1fa9f-3e56-4d5c-9324-d69db260efa9\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.HttpErrors.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.HttpErrors.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap custom_error_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"custom_error_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpErrors/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"custom_error_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\custom_error_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpErrors/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/HttpRedirectFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpRedirect\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Resources;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal class HttpRedirectFeature\n    {\n        public HttpRedirectFeature(Module module, ServerManager server, Application application)\n        {\n            this.Module = module;\n            this.Server = server;\n            this.Application = application;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)this.GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (this.Module as IServiceProvider).GetService(type);\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)this.GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/httpRedirect\");\n            this.Enabled = (bool)section[\"enabled\"];\n            this.Link = (string)section[\"destination\"];\n            this.Exact = (bool)section[\"exactDestination\"];\n            this.OnlyRoot = !(bool)section[\"childOnly\"];\n            this.Mode = (long)section[\"httpResponseStatus\"];\n\n            SupportedModes = new List<long>();\n            foreach (ConfigurationEnumValue item in section.Schema.AttributeSchemas[\"httpResponseStatus\"].GetEnumValues())\n            {\n                SupportedModes.Add(item.Value);\n            }\n\n            this.OnHttpRedirectSettingsSaved();\n        }\n\n        public List<long> SupportedModes { get; set; }\n\n        public string Directory { get; set; }\n\n        protected void OnHttpRedirectSettingsSaved()\n        {\n            this.HttpRedirectSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210508\");\n            return false;\n        }\n\n        public HttpRedirectSettingsSavedEventHandler HttpRedirectSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public ServerManager Server { get; set; }\n        public Application Application { get; set; }\n\n        public string Name\n        {\n            get { return \"HTTP Redirect\"; }\n        }\n\n\n        public bool Enabled { get; set; }\n        public string Link { get; set; }\n        public bool Exact { get; set; }\n        public bool OnlyRoot { get; set; }\n        public long Mode { get; set; }\n\n        public void CancelChanges()\n        {\n            this.Load();\n        }\n\n        public bool ApplyChanges()\n        {\n            var service = (IConfigurationService)this.GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/httpRedirect\");\n            section[\"enabled\"] = this.Enabled;\n            section[\"destination\"] = this.Link;\n            section[\"exactDestination\"] = this.Exact;\n            section[\"childOnly\"] = !this.OnlyRoot;\n            if (section.Schema.AttributeSchemas[\"httpResponseStatus\"].GetEnumValues().GetName(this.Mode) == null)\n            {\n                section[\"httpResponseStatus\"] = 301;\n            }\n            else\n            {\n                section[\"httpResponseStatus\"] = this.Mode;\n            }\n\n            service.ServerManager.CommitChanges();\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/HttpRedirectModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpRedirect\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class HttpRedirectModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)this.GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(\n                this,\n                typeof(HttpRedirectPage),\n                \"HTTP Redirect\",\n                \"Specify rules for redirecting incoming requests to another file or URL\",\n                Resources.http_redirect_36,\n                Resources.http_redirect_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/HttpRedirectModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpRedirect\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class HttpRedirectModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(this.Name, typeof(HttpRedirectModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/HttpRedirectPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.HttpRedirect\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class HttpRedirectPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.cbCode = new System.Windows.Forms.ComboBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.cbThis = new System.Windows.Forms.CheckBox();\n            this.cbExact = new System.Windows.Forms.CheckBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.txtLink = new System.Windows.Forms.TextBox();\n            this.cbRedirect = new System.Windows.Forms.CheckBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.groupBox1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 5;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.groupBox1);\n            this.panel2.Controls.Add(this.label4);\n            this.panel2.Controls.Add(this.txtLink);\n            this.panel2.Controls.Add(this.cbRedirect);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 11;\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.cbCode);\n            this.groupBox1.Controls.Add(this.label5);\n            this.groupBox1.Controls.Add(this.cbThis);\n            this.groupBox1.Controls.Add(this.cbExact);\n            this.groupBox1.Location = new System.Drawing.Point(16, 97);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(529, 171);\n            this.groupBox1.TabIndex = 7;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Redirect Behavior\";\n            // \n            // cbCode\n            // \n            this.cbCode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbCode.Enabled = false;\n            this.cbCode.FormattingEnabled = true;\n            this.cbCode.Location = new System.Drawing.Point(17, 121);\n            this.cbCode.Name = \"cbCode\";\n            this.cbCode.Size = new System.Drawing.Size(303, 21);\n            this.cbCode.TabIndex = 3;\n            this.cbCode.SelectedIndexChanged += new System.EventHandler(this.CbCodeSelectedIndexChanged);\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(14, 105);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(67, 13);\n            this.label5.TabIndex = 2;\n            this.label5.Text = \"Status code:\";\n            // \n            // cbThis\n            // \n            this.cbThis.AutoSize = true;\n            this.cbThis.Enabled = false;\n            this.cbThis.Location = new System.Drawing.Point(17, 72);\n            this.cbThis.Name = \"cbThis\";\n            this.cbThis.Size = new System.Drawing.Size(344, 17);\n            this.cbThis.TabIndex = 1;\n            this.cbThis.Text = \"Only redirect requests to content in this directory (not subdirectories)\";\n            this.cbThis.UseVisualStyleBackColor = true;\n            this.cbThis.CheckedChanged += new System.EventHandler(this.CbExactCheckedChanged);\n            // \n            // cbExact\n            // \n            this.cbExact.AutoSize = true;\n            this.cbExact.Enabled = false;\n            this.cbExact.Location = new System.Drawing.Point(17, 35);\n            this.cbExact.Name = \"cbExact\";\n            this.cbExact.Size = new System.Drawing.Size(375, 17);\n            this.cbExact.TabIndex = 0;\n            this.cbExact.Text = \"Redirect all requests to exact destination (instead of relative to destination)\";\n            this.cbExact.UseVisualStyleBackColor = true;\n            this.cbExact.CheckedChanged += new System.EventHandler(this.CbExactCheckedChanged);\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(30, 67);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(201, 13);\n            this.label4.TabIndex = 6;\n            this.label4.Text = \"Example: http://www.contoso.com/sales\";\n            // \n            // txtLink\n            // \n            this.txtLink.Enabled = false;\n            this.txtLink.Location = new System.Drawing.Point(33, 44);\n            this.txtLink.Name = \"txtLink\";\n            this.txtLink.Size = new System.Drawing.Size(383, 20);\n            this.txtLink.TabIndex = 5;\n            this.txtLink.TextChanged += new System.EventHandler(this.TxtLinkTextChanged);\n            // \n            // cbRedirect\n            // \n            this.cbRedirect.AutoSize = true;\n            this.cbRedirect.Location = new System.Drawing.Point(16, 21);\n            this.cbRedirect.Name = \"cbRedirect\";\n            this.cbRedirect.Size = new System.Drawing.Size(197, 17);\n            this.cbRedirect.TabIndex = 4;\n            this.cbRedirect.Text = \"Redirect requests to this destination:\";\n            this.cbRedirect.UseVisualStyleBackColor = true;\n            this.cbRedirect.CheckedChanged += new System.EventHandler(this.CbSslCheckedChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(416, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to specify rules for redirecting incoming requests to another fi\" +\n    \"le or URL.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(153, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"HTTP Redirect\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // HttpRedirectPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"HttpRedirectPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private CheckBox cbRedirect;\n        private ContextMenuStrip cmsActionPanel;\n        private GroupBox groupBox1;\n        private ComboBox cbCode;\n        private Label label5;\n        private CheckBox cbThis;\n        private CheckBox cbExact;\n        private Label label4;\n        private TextBox txtLink;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/HttpRedirectPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpRedirect\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class HttpRedirectPage : ModuleDialogPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly HttpRedirectPage _owner;\n\n            public PageTaskList(HttpRedirectPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private class CodeItem\n        {\n            public long Code { get; set; }\n            public string Description { get; set; }\n\n            public CodeItem(long code, string description)\n            {\n                Code = code;\n                Description = description;\n            }\n\n            public override string ToString()\n            {\n                return Description;\n            }\n        }\n\n        private HttpRedirectFeature _feature;\n        private bool _hasChanges;\n        private bool _initialized;\n        private TaskList _taskList;\n\n        public HttpRedirectPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new HttpRedirectFeature(Module, null, null);\n            _feature.HttpRedirectSettingsUpdated = Refresh;\n            _feature.Load();\n\n            base.Initialize(navigationData);\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ApplyChanges()\n        {\n            _feature.Enabled = cbRedirect.Checked;\n            _feature.Link = txtLink.Text;\n            _feature.Exact = cbExact.Checked;\n            _feature.OnlyRoot = cbThis.Checked;\n            _feature.Mode = ((CodeItem)(cbCode.SelectedItem)).Code;\n            if (!_feature.ApplyChanges())\n            {\n                return false;\n            }\n\n            ClearChanges();\n            return true;\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            _feature.CancelChanges();\n            ClearChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get { return _hasChanges; }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get { return true; }\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            Refresh();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        protected override void OnRefresh()\n        {\n            if (!_hasChanges)\n            {\n                if (!_initialized)\n                {\n                    var lines = new List<CodeItem>\n                                    {\n                                        new CodeItem(302, \"Found(302)\"),\n                                        new CodeItem(301, \"Permanent(301)\"),\n                                        new CodeItem(307, \"Temporary(307)\"),\n                                        new CodeItem(308, \"Permanent Redirect (308)\")\n                                    };\n                    foreach (var line in lines)\n                    {\n                        if (_feature.SupportedModes.Contains(line.Code))\n                        {\n                            cbCode.Items.Add(line);\n                        }\n                    }\n                }\n\n                cbRedirect.Checked = _feature.Enabled;\n                txtLink.Text = _feature.Link;\n                cbExact.Checked = _feature.Exact;\n                cbThis.Checked = _feature.OnlyRoot;\n                foreach (CodeItem item in cbCode.Items)\n                {\n                    if (item.Code == _feature.Mode)\n                    {\n                        cbCode.SelectedItem = item;\n                    }\n                }\n\n                _initialized = true;\n            }\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n\n        private void CbSslCheckedChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n            txtLink.Enabled = cbCode.Enabled = cbExact.Enabled = cbThis.Enabled = cbRedirect.Checked;\n        }\n\n        private void CbExactCheckedChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n        }\n\n        private void CbCodeSelectedIndexChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n        }\n\n        private void TxtLinkTextChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/HttpRedirectPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/HttpRedirectSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.HttpRedirect\n{\n    public delegate void HttpRedirectSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/JexusManager.Features.HttpRedirect.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.HttpRedirect</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"c0c1dde1-6447-4d3e-bc1a-f62cabbdbb53\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.HttpRedirect.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.HttpRedirect.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap http_redirect_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"http_redirect_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"http_redirect_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\http_redirect_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.HttpRedirect/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.IpSecurity/DynamicDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.IpSecurity\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class DynamicDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.cbConcurrent = new System.Windows.Forms.CheckBox();\n            this.cbInterval = new System.Windows.Forms.CheckBox();\n            this.cbLogging = new System.Windows.Forms.CheckBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtConcurrent = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtNumer = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPeriod = new System.Windows.Forms.TextBox();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // cbConcurrent\n            // \n            this.cbConcurrent.AutoSize = true;\n            this.cbConcurrent.Location = new System.Drawing.Point(31, 22);\n            this.cbConcurrent.Name = \"cbConcurrent\";\n            this.cbConcurrent.Size = new System.Drawing.Size(317, 17);\n            this.cbConcurrent.TabIndex = 0;\n            this.cbConcurrent.Text = \"Deny IP Address based on the number of concurrent requests\";\n            this.cbConcurrent.UseVisualStyleBackColor = true;\n            // \n            // cbInterval\n            // \n            this.cbInterval.AutoSize = true;\n            this.cbInterval.Location = new System.Drawing.Point(31, 141);\n            this.cbInterval.Name = \"cbInterval\";\n            this.cbInterval.Size = new System.Drawing.Size(362, 17);\n            this.cbInterval.TabIndex = 1;\n            this.cbInterval.Text = \"Deny IP Address based on the number of requests over a period of time\";\n            this.cbInterval.UseVisualStyleBackColor = true;\n            // \n            // cbLogging\n            // \n            this.cbLogging.AutoSize = true;\n            this.cbLogging.Location = new System.Drawing.Point(31, 298);\n            this.cbLogging.Name = \"cbLogging\";\n            this.cbLogging.Size = new System.Drawing.Size(154, 17);\n            this.cbLogging.TabIndex = 2;\n            this.cbLogging.Text = \"Enable Logging Only Mode\";\n            this.cbLogging.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(56, 56);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(201, 13);\n            this.label1.TabIndex = 3;\n            this.label1.Text = \"Maximum number of concurrent requests:\";\n            // \n            // txtConcurrent\n            // \n            this.txtConcurrent.Enabled = false;\n            this.txtConcurrent.Location = new System.Drawing.Point(59, 81);\n            this.txtConcurrent.Name = \"txtConcurrent\";\n            this.txtConcurrent.Size = new System.Drawing.Size(140, 20);\n            this.txtConcurrent.TabIndex = 4;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(56, 173);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(147, 13);\n            this.label2.TabIndex = 5;\n            this.label2.Text = \"Maximum number of requests:\";\n            // \n            // txtNumer\n            // \n            this.txtNumer.Enabled = false;\n            this.txtNumer.Location = new System.Drawing.Point(59, 199);\n            this.txtNumer.Name = \"txtNumer\";\n            this.txtNumer.Size = new System.Drawing.Size(140, 20);\n            this.txtNumer.TabIndex = 6;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(56, 235);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(142, 13);\n            this.label3.TabIndex = 7;\n            this.label3.Text = \"Time Period (in milliseconds):\";\n            // \n            // txtPeriod\n            // \n            this.txtPeriod.Enabled = false;\n            this.txtPeriod.Location = new System.Drawing.Point(59, 262);\n            this.txtPeriod.Name = \"txtPeriod\";\n            this.txtPeriod.Size = new System.Drawing.Size(140, 20);\n            this.txtPeriod.TabIndex = 8;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(442, 356);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 9;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(346, 356);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 10;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // DynamicDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(549, 391);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.txtPeriod);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtNumer);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtConcurrent);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.cbLogging);\n            this.Controls.Add(this.cbInterval);\n            this.Controls.Add(this.cbConcurrent);\n            this.Name = \"DynamicDialog\";\n            this.Text = \"Dynamic IP Restriction Settings\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private CheckBox cbConcurrent;\n        private CheckBox cbInterval;\n        private CheckBox cbLogging;\n        private Label label1;\n        private TextBox txtConcurrent;\n        private Label label2;\n        private TextBox txtNumer;\n        private Label label3;\n        private TextBox txtPeriod;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/DynamicDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IpSecurity\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class DynamicDialog : DialogForm\n    {\n        public DynamicDialog(IServiceProvider serviceProvider, ConfigurationSection section, IpSecurityFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            var concurrent = section.ChildElements[\"denyByConcurrentRequests\"];\n            cbConcurrent.Checked = (bool)concurrent[\"enabled\"];\n            txtConcurrent.Text = concurrent[\"maxConcurrentRequests\"].ToString();\n            var rate = section.ChildElements[\"denyByRequestRate\"];\n            cbInterval.Checked = (bool)rate[\"enabled\"];\n            txtNumer.Text = rate[\"maxRequests\"].ToString();\n            txtPeriod.Text = rate[\"requestIntervalInMilliseconds\"].ToString();\n            cbLogging.Checked = (bool)section[\"enableLoggingOnlyMode\"];\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            var load = Observable.FromEventPattern<EventArgs>(this, \"Load\");\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbInterval, \"CheckedChanged\")\n                .Merge(load)\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtPeriod.Enabled = txtNumer.Enabled = cbInterval.Checked;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbConcurrent, \"CheckedChanged\")\n                .Merge(load)\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtConcurrent.Enabled = cbConcurrent.Checked;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    uint result;\n                    if (!uint.TryParse(txtConcurrent.Text, out result))\n                    {\n                        ShowMessage(\n                            \"Input string was not in a correct format\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    concurrent[\"enabled\"] = cbConcurrent.Checked;\n                    concurrent[\"maxConcurrentRequests\"] = result;\n                    rate[\"enabled\"] = cbInterval.Checked;\n                    if (!uint.TryParse(txtNumer.Text, out result))\n                    {\n                        // TODO: show validator error.\n                        ShowMessage(\n                            \"Input string was not in a correct format\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    rate[\"maxRequests\"] = result;\n                    if (!uint.TryParse(txtNumer.Text, out result))\n                    {\n                        // TODO: show validator error.\n                        ShowMessage(\n                            \"Input string was not in a correct format\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    rate[\"requestIntervalInMilliseconds\"] = result;\n                    section[\"enableLoggingOnlyMode\"] = cbLogging.Checked;\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/DynamicDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.IpSecurity/IpSecurityFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.IpSecurity\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class IpSecurityFeature : FeatureBase<IpSecurityItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly IpSecurityFeature _owner;\n\n            public FeatureTaskList(IpSecurityFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"AddAllow\", \"Add Allow Entry...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"AddDeny\", \"Add Deny Entry...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage()); // IMPORTANT: this is where IIS Manager was wrong\n                result.Add(new MethodTaskItem(\"Set\", \"Edit Feature Settings...\", string.Empty).SetUsage());\n                if (_owner.CanRevert)\n                {\n                    result.Add(RevertTaskItem);\n                }\n\n                result.Add(new MethodTaskItem(\"View\", \"View Ordered List...\", string.Empty).SetUsage());\n                if (_owner.IsFeatureEnabled)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Dynamic\", \"Edit Dynamic Restriction Settings...\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddAllow()\n            {\n                _owner.AddAllow();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddDeny()\n            {\n                _owner.AddDeny();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void View()\n            {\n                _owner.View();\n            }\n            [Obfuscation(Exclude = true)]\n            public void Dynamic()\n            {\n                _owner.Dynamic();\n            }\n        }\n\n        public IpSecurityFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            CanRevert = service.Scope != ManagementScope.Server;\n            LoadItems();\n        }\n\n        public void AddAllow()\n        {\n            using var dialog = new NewRestrictionDialog(Module, true, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void AddDeny()\n        {\n            using var dialog = new NewRestrictionDialog(Module, false, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected restriction?\", Name,\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Revert()\n        {\n            if (!CanRevert)\n            {\n                throw new InvalidOperationException(\"Revert operation cannot be done at server level\");\n            }\n\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                dialog.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RevertItems();\n        }\n\n        public void Set()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/security/ipSecurity\", null, false);\n            using (var dialog = new SetRestrictionsDialog(Module, section, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n        }\n\n        public void View()\n        {\n        }\n\n        public void Dynamic()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/security/dynamicIpSecurity\", null, false);\n            using (var dialog = new DynamicDialog(Module, section, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange(\"No Grouping\", \"Entry Type\", \"Mode\");\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[2].Text;\n                case \"Mode\":\n                    return item.Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection section = service.GetSection(\"system.webServer/security/ipSecurity\", null, false);\n            return section.GetCollection();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            IpSecuritySettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210513\");\n            return false;\n        }\n\n        public bool CanRevert { get; private set; }\n\n        public IpSecuritySettingsSavedEventHandler IpSecuritySettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion => FxVersionNotRequired;\n\n        public string Name => \"IP Address and Domain Restrictions\";\n\n        public override bool IsFeatureEnabled\n        {\n            get\n            {\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                var section = service.GetSection(\"system.webServer/security/dynamicIpSecurity\", null, false);\n                return section != null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/IpSecurityItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IpSecurity\n{\n    using Microsoft.Web.Administration;\n\n    internal class IpSecurityItem : IItem<IpSecurityItem>\n    {\n        public IpSecurityItem(ConfigurationElement element)\n        {\n            Element = element;\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            if (element == null)\n            {\n                Mask = \"255.255.255.255\";\n                return;\n            }\n\n            Address = (string)element[\"ipAddress\"];\n            Mask = (string)element[\"subnetMask\"];\n            Allowed = (bool)element[\"allowed\"];\n        }\n\n        public ConfigurationElement Element { get; set; }\n        public string Address { get; set; }\n        public string Mask { get; set; }\n        public bool Allowed { get; set; }\n        public string Flag { get; set; }\n\n        public void Apply()\n        {\n            Element[\"ipAddress\"] = Address;\n            Element[\"subnetMask\"] = Mask;\n            Element[\"allowed\"] = Allowed;\n        }\n\n        public bool Equals(IpSecurityItem other)\n        {\n            return other != null && other.Address == Address && other.Mask == Mask && other.Allowed == Allowed;\n        }\n\n        public bool Match(IpSecurityItem other)\n        {\n            return other != null && other.Address == Address && other.Mask == Mask;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/IpSecurityModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IpSecurity\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class IpSecurityModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(IpSecurityPage), \"IP Address and Domain Restrictions\",\n                \"Restrict or grant access to Web content based on IP addresses or domain names\", Resources.ip_restriction_36,\n                Resources.ip_restriction_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/IpSecurityModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IpSecurity\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class IpSecurityModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(IpSecurityModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/IpSecurityPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.IpSecurity\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class IpSecurityPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chMode = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chRequestor = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chMode,\n            this.chRequestor,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);            \n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.listView1_SelectedIndexChanged);\n            // \n            // chMode\n            // \n            this.chMode.Text = \"Mode\";\n            this.chMode.Width = 80;\n            // \n            // chRequestor\n            // \n            this.chRequestor.Text = \"Requestor\";\n            this.chRequestor.Width = 150;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 120;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(653, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to restrict or grant access to Web content based on IP addresses\" +\n    \" or domain names. Set the restrictions in order of priority.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(356, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"IP Address and Domain Restrictions\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // IpSecurityPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"IpSecurityPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chMode;\n        private ColumnHeader chRequestor;\n        private ColumnHeader chType;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/IpSecurityPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IpSecurity\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class IpSecurityPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly IpSecurityPage _owner;\n\n            public PageTaskList(IpSecurityPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class IpSecurityListViewItem : ListViewItem, IFeatureListViewItem<IpSecurityItem>\n        {\n            public IpSecurityItem Item { get; }\n            private readonly IpSecurityPage _page;\n\n            public IpSecurityListViewItem(IpSecurityItem item, IpSecurityPage page)\n                : base(item.Allowed ? \"Allow\" : \"Deny\")\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Mask == string.Empty ? item.Address : string.Format(\"{0}({1})\", item.Address, item.Mask)));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private IpSecurityFeature _feature;\n        private PageTaskList _taskList;\n\n        public IpSecurityPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new IpSecurityFeature(Module);\n            _feature.IpSecuritySettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new IpSecurityListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (IpSecurityListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, EventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void listView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/IpSecurityPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>602, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>497, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.IpSecurity/IpSecuritySettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IpSecurity\n{\n    public delegate void IpSecuritySettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/JexusManager.Features.IpSecurity.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.IpSecurity</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/NewRestrictionDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.IpSecurity\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewRestrictionDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.rbAddress = new System.Windows.Forms.RadioButton();\n            this.rbRange = new System.Windows.Forms.RadioButton();\n            this.txtAddress = new System.Windows.Forms.TextBox();\n            this.txtRange = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtMask = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(327, 336);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(226, 336);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 9);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(280, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Allow access for the following IP address or domain name:\";\n            // \n            // rbAddress\n            // \n            this.rbAddress.AutoSize = true;\n            this.rbAddress.Checked = true;\n            this.rbAddress.Location = new System.Drawing.Point(15, 34);\n            this.rbAddress.Name = \"rbAddress\";\n            this.rbAddress.Size = new System.Drawing.Size(116, 17);\n            this.rbAddress.TabIndex = 3;\n            this.rbAddress.TabStop = true;\n            this.rbAddress.Text = \"Specify IP address:\";\n            this.rbAddress.UseVisualStyleBackColor = true;\n            // \n            // rbRange\n            // \n            this.rbRange.AutoSize = true;\n            this.rbRange.Location = new System.Drawing.Point(15, 92);\n            this.rbRange.Name = \"rbRange\";\n            this.rbRange.Size = new System.Drawing.Size(108, 17);\n            this.rbRange.TabIndex = 4;\n            this.rbRange.Text = \"IP address range:\";\n            this.rbRange.UseVisualStyleBackColor = true;\n            // \n            // txtAddress\n            // \n            this.txtAddress.Location = new System.Drawing.Point(33, 57);\n            this.txtAddress.Name = \"txtAddress\";\n            this.txtAddress.Size = new System.Drawing.Size(314, 20);\n            this.txtAddress.TabIndex = 5;\n            // \n            // txtRange\n            // \n            this.txtRange.Enabled = false;\n            this.txtRange.Location = new System.Drawing.Point(33, 125);\n            this.txtRange.Name = \"txtRange\";\n            this.txtRange.Size = new System.Drawing.Size(314, 20);\n            this.txtRange.TabIndex = 6;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(33, 164);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(77, 13);\n            this.label2.TabIndex = 7;\n            this.label2.Text = \"Mask or Prefix:\";\n            // \n            // txtMask\n            // \n            this.txtMask.Enabled = false;\n            this.txtMask.Location = new System.Drawing.Point(33, 192);\n            this.txtMask.Name = \"txtMask\";\n            this.txtMask.Size = new System.Drawing.Size(314, 20);\n            this.txtMask.TabIndex = 8;\n            // \n            // NewRestrictionDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(434, 371);\n            this.Controls.Add(this.txtMask);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtRange);\n            this.Controls.Add(this.txtAddress);\n            this.Controls.Add(this.rbRange);\n            this.Controls.Add(this.rbAddress);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.HelpButton = true;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"NewRestrictionDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Add Allow Restriction Rule\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private RadioButton rbAddress;\n        private RadioButton rbRange;\n        private TextBox txtAddress;\n        private TextBox txtRange;\n        private Label label2;\n        private TextBox txtMask;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/NewRestrictionDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IpSecurity\n{\n    using System;\n    using System.ComponentModel;\n    using System.Linq;\n    using System.Net;\n    using System.Net.Sockets;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewRestrictionDialog : DialogForm\n    {\n        public NewRestrictionDialog(IServiceProvider serviceProvider, bool allowed, IpSecurityFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = allowed ? \"Add Allow Restriction Rule\" : \"Add Deny Restriction Rule\";\n            txtDescription.Text = allowed\n                ? \"Allow access for the following IP address or domain name:\"\n                : \"Deny access for the following IP address or domain name:\";\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(rbAddress, \"CheckedChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(rbRange, \"CheckedChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtAddress.Enabled = rbAddress.Checked;\n                    txtRange.Enabled = rbRange.Checked;\n                    txtMask.Enabled = rbRange.Checked;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (rbAddress.Checked)\n                    {\n                        IPAddress result;\n                        var passed = IPAddress.TryParse(txtAddress.Text, out result);\n                        if (!passed)\n                        {\n                            MessageBox.Show(string.Format(\"'{0}' is an invalid IP address.\", txtAddress.Text), Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                            return;\n                        }\n\n                        Item = new IpSecurityItem(null);\n                        Item.Address = txtAddress.Text;\n                        Item.Mask = string.Empty;\n                        Item.Allowed = allowed;\n                        if (feature.Items.Any(item => item.Match(Item)))\n                        {\n                            ShowMessage(\n                                \"A restriction for this domain name or IP address already exists.\",\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        DialogResult = DialogResult.OK;\n                        return;\n                    }\n\n                    IPAddress result1;\n                    var passed1 = IPAddress.TryParse(txtRange.Text, out result1);\n                    if (!passed1)\n                    {\n                        ShowMessage(\n                            string.Format(\"'{0}' is an invalid IP address.\", txtRange.Text),\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Exclamation,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    var passed2 = IPAddress.TryParse(txtMask.Text, out result1);\n                    if (!passed2)\n                    {\n                        int value;\n                        var passed3 = int.TryParse(txtMask.Text, out value);\n                        if (!passed3 ||\n                            (result1.AddressFamily == AddressFamily.InterNetwork\n                            && (value < 0 || value > 32)) ||\n                            (result1.AddressFamily == AddressFamily.InterNetworkV6\n                            && (value < 0 || value > 128)))\n                        {\n                            ShowMessage(\n                                string.Format(\n                                    \"'{0}' is an invalid subnet mask. It must be a valid IP address or an integer value between 0-32 for IPv4 ad 0-128 for IPv6.\",\n                                    txtMask.Text),\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Exclamation,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n                    }\n\n                    Item = new IpSecurityItem(null);\n                    Item.Address = txtRange.Text;\n                    Item.Mask = txtMask.Text;\n                    Item.Allowed = allowed;\n                    if (feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"A restriction for this domain name or IP address already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IpSecurityItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/NewRestrictionDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.IpSecurity/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"361e2f47-289f-480f-b976-a6e3f7d96edc\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.IpSecurity.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.IpSecurity.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap ip_restriction_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"ip_restriction_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"ip_restriction_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ip_restriction_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.IpSecurity/SetRestrictionsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.IpSecurity\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class SetRestrictionsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbAccess = new System.Windows.Forms.ComboBox();\n            this.cbDomain = new System.Windows.Forms.CheckBox();\n            this.cbProxy = new System.Windows.Forms.CheckBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbAction = new System.Windows.Forms.ComboBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(242, 201);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(146, 201);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(150, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Access for unspecified clients:\";\n            // \n            // cbAccess\n            // \n            this.cbAccess.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbAccess.FormattingEnabled = true;\n            this.cbAccess.Items.AddRange(new object[] {\n            \"Allow\",\n            \"Deny\"});\n            this.cbAccess.Location = new System.Drawing.Point(12, 25);\n            this.cbAccess.Name = \"cbAccess\";\n            this.cbAccess.Size = new System.Drawing.Size(224, 21);\n            this.cbAccess.TabIndex = 3;\n            // \n            // cbDomain\n            // \n            this.cbDomain.AutoSize = true;\n            this.cbDomain.Location = new System.Drawing.Point(12, 64);\n            this.cbDomain.Name = \"cbDomain\";\n            this.cbDomain.Size = new System.Drawing.Size(149, 17);\n            this.cbDomain.TabIndex = 4;\n            this.cbDomain.Text = \"Enable domain restrictions\";\n            this.cbDomain.UseVisualStyleBackColor = true;\n            // \n            // cbProxy\n            // \n            this.cbProxy.AutoSize = true;\n            this.cbProxy.Location = new System.Drawing.Point(12, 96);\n            this.cbProxy.Name = \"cbProxy\";\n            this.cbProxy.Size = new System.Drawing.Size(118, 17);\n            this.cbProxy.TabIndex = 5;\n            this.cbProxy.Text = \"Enable Proxy Mode\";\n            this.cbProxy.UseVisualStyleBackColor = true;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 131);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(95, 13);\n            this.label2.TabIndex = 6;\n            this.label2.Text = \"Deny Action Type:\";\n            // \n            // cbAction\n            // \n            this.cbAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbAction.FormattingEnabled = true;\n            this.cbAction.Items.AddRange(new object[] {\n            \"Unauthorized\",\n            \"Forbidden\",\n            \"Not Found\",\n            \"Abort\"});\n            this.cbAction.Location = new System.Drawing.Point(12, 147);\n            this.cbAction.Name = \"cbAction\";\n            this.cbAction.Size = new System.Drawing.Size(178, 21);\n            this.cbAction.TabIndex = 7;\n            // \n            // SetRestrictionsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 236);\n            this.Controls.Add(this.cbAction);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.cbProxy);\n            this.Controls.Add(this.cbDomain);\n            this.Controls.Add(this.cbAccess);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"SetRestrictionsDialog\";\n            this.Text = \"Edit IP and Domain Restrictions Settings\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private ComboBox cbAccess;\n        private CheckBox cbDomain;\n        private CheckBox cbProxy;\n        private Label label2;\n        private ComboBox cbAction;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/SetRestrictionsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IpSecurity\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class SetRestrictionsDialog : DialogForm\n    {\n        public SetRestrictionsDialog(IServiceProvider serviceProvider, ConfigurationSection section, IpSecurityFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbDomain.Checked = (bool)section[\"enableReverseDns\"];\n            cbAccess.SelectedIndex = (bool)section[\"allowUnlisted\"] ? 0 : 1;\n            cbProxy.Enabled = section.Schema.AttributeSchemas[\"enabled\"] != null;\n            if (cbProxy.Enabled)\n            {\n                cbProxy.Checked = (bool)section[\"enableProxyMode\"];\n            }\n\n            cbAction.Enabled = section.Schema.AttributeSchemas[\"denyAction\"] != null;\n            if (cbAction.Enabled)\n            {\n                var action = (long)section[\"denyAction\"];\n                if (action == 0L)\n                {\n                    cbAction.SelectedIndex = 0;\n                }\n                else if (action == 401L)\n                {\n                    cbAction.SelectedIndex = 1;\n                }\n                else if (action == 403L)\n                {\n                    cbAction.SelectedIndex = 2;\n                }\n                else\n                {\n                    cbAction.SelectedIndex = 3;\n                }\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    section[\"enableReverseDns\"] = cbDomain.Checked;\n                    section[\"allowUnlisted\"] = cbAccess.SelectedIndex == 0;\n                    if (cbProxy.Enabled)\n                    {\n                        section[\"enableProxyMode\"] = cbProxy.Checked;\n                    }\n\n                    if (cbAction.Enabled)\n                    {\n                        if (cbAction.SelectedIndex == 0)\n                        {\n                            section[\"denyAction\"] = 0L;\n                        }\n                        else if (cbAction.SelectedIndex == 1)\n                        {\n                            section[\"denyAction\"] = 401L;\n                        }\n                        else if (cbAction.SelectedIndex == 2)\n                        {\n                            section[\"denyAction\"] = 403L;\n                        }\n                        else\n                        {\n                            section[\"denyAction\"] = 404L;\n                        }\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IpSecurity/SetRestrictionsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.IpSecurity/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/IsapiCgiRestrictionFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.IsapiCgiRestriction\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class IsapiCgiRestrictionFeature : FeatureBase<IsapiCgiRestrictionItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly IsapiCgiRestrictionFeature _owner;\n\n            public FeatureTaskList(IsapiCgiRestrictionFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    if (_owner.SelectedItem.Allowed)\n                    {\n                        result.Add(new MethodTaskItem(\"Deny\", \"Deny...\", string.Empty).SetUsage());\n                    }\n                    else\n                    {\n                        result.Add(new MethodTaskItem(\"Allow\", \"Allow...\", string.Empty).SetUsage());\n                    }\n\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new MethodTaskItem(\"Set\", \"Edit Feature Settings...\", string.Empty).SetUsage());\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Deny()\n            {\n                _owner.Deny();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Allow()\n            {\n                _owner.Allow();\n            }\n        }\n\n        public IsapiCgiRestrictionFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            LoadItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection section = service.GetSection(\"system.webServer/security/isapiCgiRestriction\", null, false);\n            return section.GetCollection();\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewRestrictionDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Deny()\n        {\n            SetAllowed(false);\n        }\n\n        public void Allow()\n        {\n            SetAllowed(true);\n        }\n\n        private void SetAllowed(bool allowed)\n        {\n            SelectedItem.Allowed = allowed;\n            SelectedItem.Apply();\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public void Set()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/security/isapiCgiRestriction\");\n            using (var dialog = new SettingsDialog(Module, section, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected restriction?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(IsapiCgiRestrictionItem item)\n        {\n            using var dialog = new NewRestrictionDialog(Module, item, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange([\"No Grouping\", \"Restriction\"]);\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Restriction\":\n                    return item.SubItems[1].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            IsapiCgiRestrictionSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210515\");\n            return false;\n        }\n\n        public IsapiCgiRestrictionSettingsSavedEventHandler IsapiCgiRestrictionSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"ISAPI and CGI Restrictions\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/IsapiCgiRestrictionItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiCgiRestriction\n{\n    using Microsoft.Web.Administration;\n\n    internal class IsapiCgiRestrictionItem : IItem<IsapiCgiRestrictionItem>\n    {\n        public IsapiCgiRestrictionItem(ConfigurationElement element)\n        {\n            Element = element;\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inhertied\";\n            if (element == null)\n            {\n                return;\n            }\n\n            Description = (string)element[\"description\"];\n            Path = (string)element[\"path\"];\n            Allowed = (bool)element[\"allowed\"];\n        }\n\n        public bool Allowed { get; set; }\n\n        public string Path { get; set; }\n\n        public string Description { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public string Flag { get; set; }\n\n        public bool Equals(IsapiCgiRestrictionItem other)\n        {\n            // all properties\n            return Match(other) && other.Description == Description;\n        }\n\n        public void Apply()\n        {\n            Element[\"description\"] = Description;\n            Element[\"path\"] = Path;\n            Element[\"allowed\"] = Allowed;\n        }\n\n        public bool Match(IsapiCgiRestrictionItem other)\n        {\n            // match combined keys.\n            return other != null && other.Path == Path;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/IsapiCgiRestrictionModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiCgiRestriction\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class IsapiCgiRestrictionModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(IsapiCgiRestrictionPage), \"ISAPI and CGI Restrictions\",\n                \"Restrict or enable ISAPI and CGI extensions on the Web server\", Resources.isapi_cgi_restriction_36,\n                Resources.isapi_cgi_restriction_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/IsapiCgiRestrictionModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiCgiRestriction\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class IsapiCgiRestrictionModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(IsapiCgiRestrictionModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return scope == ManagementScope.Server;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/IsapiCgiRestrictionPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.IsapiCgiRestriction\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class IsapiCgiRestrictionPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chDescription = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chRestriction = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chDescription,\n            this.chRestriction,\n            this.chPath});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chDescription\n            // \n            this.chDescription.Text = \"Description\";\n            this.chDescription.Width = 125;\n            // \n            // chRestriction\n            // \n            this.chRestriction.Text = \"Restriction\";\n            this.chRestriction.Width = 120;\n            // \n            // chPath\n            // \n            this.chPath.Text = \"Path\";\n            this.chPath.Width = 400;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroupSelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(426, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to specify the ISAPI and CGI extensions that can run on the Web \" +\n    \"server.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(267, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"ISAPI and CGI Restrictions\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // IsapiCgiRestrictionPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"IsapiCgiRestrictionPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private ColumnHeader chDescription;\n        private ColumnHeader chRestriction;\n        private ColumnHeader chPath;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/IsapiCgiRestrictionPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiCgiRestriction\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class IsapiCgiRestrictionPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly IsapiCgiRestrictionPage _owner;\n\n            public PageTaskList(IsapiCgiRestrictionPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class IsapiCgiRestrictionListViewItem : ListViewItem, IFeatureListViewItem<IsapiCgiRestrictionItem>\n        {\n            public IsapiCgiRestrictionItem Item { get; }\n\n            private readonly IsapiCgiRestrictionPage _page;\n\n            public IsapiCgiRestrictionListViewItem(IsapiCgiRestrictionItem item, IsapiCgiRestrictionPage page)\n                : base(item.Description)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Allowed ? \"Allowed\" : \"Not Allowed\"));\n                SubItems.Add(new ListViewSubItem(this, item.Path));\n            }\n        }\n\n        private IsapiCgiRestrictionFeature _feature;\n        private PageTaskList _taskList;\n\n        public IsapiCgiRestrictionPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new IsapiCgiRestrictionFeature(Module);\n            _feature.IsapiCgiRestrictionSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new IsapiCgiRestrictionListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (IsapiCgiRestrictionListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroupSelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/IsapiCgiRestrictionPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>602, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>497, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/IsapiCgiRestrictionSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiCgiRestriction\n{\n    public delegate void IsapiCgiRestrictionSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/JexusManager.Features.IsapiCgiRestriction.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.IsapiCgiRestriction</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/NewRestrictionDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.IsapiCgiRestriction\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewRestrictionDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.cbAllowed = new System.Windows.Forms.CheckBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(292, 166);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(186, 166);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 58);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(63, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Description:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(12, 74);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(375, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // txtPath\n            // \n            this.txtPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtPath.Location = new System.Drawing.Point(12, 25);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(338, 20);\n            this.txtPath.TabIndex = 8;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 9);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(94, 13);\n            this.label3.TabIndex = 11;\n            this.label3.Text = \"ISAPI or CGI path:\";\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(359, 23);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(28, 23);\n            this.btnBrowse.TabIndex = 15;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // cbAllowed\n            // \n            this.cbAllowed.AutoSize = true;\n            this.cbAllowed.Location = new System.Drawing.Point(12, 100);\n            this.cbAllowed.Name = \"cbAllowed\";\n            this.cbAllowed.Size = new System.Drawing.Size(176, 17);\n            this.cbAllowed.TabIndex = 16;\n            this.cbAllowed.Text = \"Allow extension path to execute\";\n            this.cbAllowed.UseVisualStyleBackColor = true;\n            // \n            // NewRestrictionDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(399, 201);\n            this.Controls.Add(this.cbAllowed);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewRestrictionDialog\";\n            this.Text = \"Add ISAPI or CGI Restriction\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtName;\n        private TextBox txtPath;\n        private Label label3;\n        private Button btnBrowse;\n        private CheckBox cbAllowed;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/NewRestrictionDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiCgiRestriction\n{\n    using System;\n    using System.ComponentModel;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewRestrictionDialog : DialogForm\n    {\n        public NewRestrictionDialog(IServiceProvider serviceProvider, IsapiCgiRestrictionItem existing, IsapiCgiRestrictionFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add ISAPI or CGI Restriction\" : \"Edit ISAPI or CGI Restriction\";\n            Item = existing ?? new IsapiCgiRestrictionItem(null);\n            if (existing != null)\n            {\n                txtPath.Text = Item.Path;\n                txtName.Text = Item.Description;\n                cbAllowed.Checked = Item.Allowed;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Path = txtPath.Text;\n                    Item.Description = txtName.Text;\n                    Item.Allowed = cbAllowed.Checked;\n                    if (feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"This restriction already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtPath, \"(*.dll)|*.dll|(*.exe)|*.exe|All files (*.*)|*.*\", null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IsapiCgiRestrictionItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/NewRestrictionDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"1571b862-8cd9-4314-9ccf-b1339d50298b\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.IsapiCgiRestriction.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.IsapiCgiRestriction.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap isapi_cgi_restriction_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"isapi_cgi_restriction_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"isapi_cgi_restriction_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\isapi_cgi_restriction_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/SettingsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.IsapiCgiRestriction\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class SettingsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.cbCgi = new System.Windows.Forms.CheckBox();\n            this.cbIsapi = new System.Windows.Forms.CheckBox();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // cbCgi\n            // \n            this.cbCgi.AutoSize = true;\n            this.cbCgi.Location = new System.Drawing.Point(12, 12);\n            this.cbCgi.Name = \"cbCgi\";\n            this.cbCgi.Size = new System.Drawing.Size(171, 17);\n            this.cbCgi.TabIndex = 1;\n            this.cbCgi.Text = \"Allow unspecified CGI modules\";\n            this.cbCgi.UseVisualStyleBackColor = true;\n            // \n            // cbIsapi\n            // \n            this.cbIsapi.AutoSize = true;\n            this.cbIsapi.Location = new System.Drawing.Point(12, 49);\n            this.cbIsapi.Name = \"cbIsapi\";\n            this.cbIsapi.Size = new System.Drawing.Size(180, 17);\n            this.cbIsapi.TabIndex = 2;\n            this.cbIsapi.Text = \"Allow unspecified ISAPI modules\";\n            this.cbIsapi.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(227, 96);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(131, 96);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // SettingsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(334, 131);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.cbIsapi);\n            this.Controls.Add(this.cbCgi);\n            this.Name = \"SettingsDialog\";\n            this.Text = \"Edit ISAPI and CGI Restrictions Settings\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n        private CheckBox cbCgi;\n        private CheckBox cbIsapi;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/SettingsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiCgiRestriction\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class SettingsDialog : DialogForm\n    {\n        public SettingsDialog(IServiceProvider serviceProvider, ConfigurationElement element, IsapiCgiRestrictionFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbCgi.Checked = (bool)element[\"notListedCgisAllowed\"];\n            cbIsapi.Checked = (bool)element[\"notListedIsapisAllowed\"];\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    element[\"notListedIsapisAllowed\"] = cbIsapi.Checked;\n                    element[\"notListedCgisAllowed\"] = cbCgi.Checked;\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/SettingsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.IsapiCgiRestriction/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/IsapiFiltersFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.IsapiFilters\n{\n    using System;\n    using System.Collections;\n    using System.Linq;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class IsapiFiltersFeature : FeatureBase<IsapiFiltersItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly IsapiFiltersFeature _owner;\n\n            public FeatureTaskList(IsapiFiltersFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (_owner.IsInOrder)\n                {\n                    result.Add(GetMoveUpTaskItem(_owner.CanMoveUp));\n                    result.Add(GetMoveDownTaskItem(_owner.CanMoveDown));\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Unorder\", \"View Unordered List...\", string.Empty).SetUsage());\n                }\n                else\n                {\n                    result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                    if (_owner.SelectedItem != null)\n                    {\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                        result.Add(new MethodTaskItem(\"Rename\", \"Rename\", string.Empty).SetUsage());\n                        result.Add(RemoveTaskItem);\n                    }\n\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    if (_owner.CanRevert)\n                    {\n                        result.Add(RevertTaskItem);\n                    }\n\n                    result.Add(new MethodTaskItem(\"InOrder\", \"View Ordered List...\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.Rename();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveUp()\n            {\n                _owner.MoveUp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveDown()\n            {\n                _owner.MoveDown();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void InOrder()\n            {\n                _owner.InOrder();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Unorder()\n            {\n                _owner.Unorder();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n        }\n\n        public IsapiFiltersFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            CanRevert = service.Scope != ManagementScope.Server;\n            IsInOrder = false;\n            LoadItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection section = service.GetSection(\"system.webServer/isapiFilters\", null, false);\n            return section.GetCollection();\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewFilterDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected authorization rule?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(IsapiFiltersItem item)\n        {\n            using var dialog = new NewFilterDialog(Module, item, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange(\"No Grouping\", \"Entry Type\");\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[2].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        public void Rename()\n        {\n            RenameInline(SelectedItem);\n        }\n\n        public void MoveUp()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveUpItem();\n        }\n\n        public void MoveDown()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveDownItem();\n        }\n\n        public void InOrder()\n        {\n            IsInOrder = true;\n            OnSettingsSaved();\n        }\n\n        public void Unorder()\n        {\n            IsInOrder = false;\n            OnSettingsSaved();\n        }\n\n        public void Revert()\n        {\n            if (!CanRevert)\n            {\n                throw new InvalidOperationException(\"Revert operation cannot be done at server level\");\n            }\n\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                dialog.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RevertItems();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            IsapiFiltersSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"https://go.microsoft.com/fwlink/?LinkId=210516\");\n            return false;\n        }\n\n        public bool IsInOrder { get; private set; }\n\n        public bool CanRevert { get; private set; }\n\n        public IsapiFiltersSettingsSavedEventHandler IsapiFiltersSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"ISAPI Filters\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/IsapiFiltersItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiFilters\n{\n    using System.Collections.Generic;\n    using System.Linq;\n\n    using Microsoft.Web.Administration;\n\n    internal class IsapiFiltersItem : IItem<IsapiFiltersItem>\n    {\n        public IsapiFiltersItem(ConfigurationElement element)\n        {\n            Element = element;\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            if (element == null)\n            {\n                Path = string.Empty;\n                PreConditions = new List<string>(0);\n                return;\n            }\n\n            Name = (string)element[\"name\"];\n            Path = (string)element[\"path\"];\n            var content = (string)element[\"preCondition\"];\n            PreConditions = content.Split(',').ToList();\n            EnableCache = (bool)element[\"enableCache\"];\n        }\n\n        public List<string> PreConditions { get; set; }\n\n        public bool EnableCache { get; set; }\n\n        public string Path { get; set; }\n\n        public string Name { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public string Flag { get; set; }\n\n        public bool Equals(IsapiFiltersItem other)\n        {\n            // all properties\n            return Match(other) && other.Path == Path;\n        }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"path\"] = Path;\n            Element[\"preCondition\"] = PreConditions.Combine(\",\");\n            Element[\"enableCache\"] = EnableCache;\n        }\n\n        public bool Match(IsapiFiltersItem other)\n        {\n            // match combined keys.\n            return other != null && other.Name == Name;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/IsapiFiltersModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiFilters\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class IsapiFiltersModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(IsapiFiltersPage), \"ISAPI Filters\",\n                \"Specify ISAPI filters that modify IIS functionality\", Resources.isapi_filters_36,\n                Resources.isapi_filters_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/IsapiFiltersModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiFilters\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class IsapiFiltersModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(IsapiFiltersModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/IsapiFiltersPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.IsapiFilters\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class IsapiFiltersPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chExecutable = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chExecutable,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);            \n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 120;\n            // \n            // chExecutable\n            // \n            this.chExecutable.Text = \"Executable\";\n            this.chExecutable.Width = 180;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 120;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroupSelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(421, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to configure ISAPI filters that process requests made to the Web\" +\n    \" server.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(129, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"ISAPI Filters\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // IsapiFiltersPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"IsapiFiltersPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chType;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private ColumnHeader chName;\n        private ColumnHeader chExecutable;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/IsapiFiltersPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiFilters\n{\n    using System;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class IsapiFiltersPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly IsapiFiltersPage _owner;\n\n            public PageTaskList(IsapiFiltersPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class IsapiFiltersListViewItem : ListViewItem, IFeatureListViewItem<IsapiFiltersItem>\n        {\n            public IsapiFiltersItem Item { get; }\n\n            private readonly IsapiFiltersPage _page;\n\n            public IsapiFiltersListViewItem(IsapiFiltersItem item, IsapiFiltersPage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Path));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private IsapiFiltersFeature _feature;\n        private PageTaskList _taskList;\n\n        public IsapiFiltersPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new IsapiFiltersFeature(Module);\n            _feature.IsapiFiltersSettingsUpdated = InitializeListPage;\n            _feature.Load();\n\n            _feature.InitializeMouseClick(listView1, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n            },\n            text =>\n            {\n                if (_feature.FindDuplicate(item => item.Name, text))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"An ISAPI filter with this name already exists.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    return false;\n                }\n\n                return true;\n            });\n        }\n\n        protected override void InitializeListPage()\n        {\n            toolStrip2.Visible = !_feature.IsInOrder;\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new IsapiFiltersListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (IsapiFiltersListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroupSelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/IsapiFiltersPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>602, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>497, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/IsapiFiltersSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiFilters\n{\n    public delegate void IsapiFiltersSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/JexusManager.Features.IsapiFilters.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.IsapiFilters</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/NewFilterDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.IsapiFilters\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewFilterDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(317, 186);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(216, 186);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 9);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(61, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Filter name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(269, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // txtPath\n            // \n            this.txtPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtPath.Location = new System.Drawing.Point(15, 82);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(360, 20);\n            this.txtPath.TabIndex = 8;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 66);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(63, 13);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"Executable:\";\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(381, 80);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(28, 23);\n            this.btnBrowse.TabIndex = 10;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // NewFilterDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(424, 221);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewFilterDialog\";\n            this.Text = \"Add ISAPI Filter\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtName;\n        private TextBox txtPath;\n        private Label label1;\n        private Button btnBrowse;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/NewFilterDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.IsapiFilters\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewFilterDialog : DialogForm\n    {\n        public NewFilterDialog(IServiceProvider serviceProvider, IsapiFiltersItem existing, IsapiFiltersFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add ISAPI Filter\" : \"Edit ISAPI Filter\";\n            txtName.ReadOnly = existing != null;\n            Item = existing ?? new IsapiFiltersItem(null);\n            if (existing != null)\n            {\n                txtPath.Text = Item.Path;\n                txtName.Text = Item.Name;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Path = txtPath.Text;\n                    Item.Name = txtName.Text;\n                    if (!txtName.ReadOnly && feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"A filter with this name already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    try\n                    {\n                        var bit32Condition = \"bitness32\";\n                        var bit64Condition = \"bitness64\";\n                        var bit32 = DialogHelper.GetImageArchitecture(txtPath.Text);\n                        if (bit32 && !Item.PreConditions.Contains(bit32Condition))\n                        {\n                            Item.PreConditions.Add(bit32Condition);\n                        }\n                        else if (!bit32 && !Item.PreConditions.Contains(bit64Condition))\n                        {\n                            Item.PreConditions.Add(bit64Condition);\n                        }\n                    }\n                    catch (Exception)\n                    {\n                        ShowMessage(\n                            \"The specific filter is invalid.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                                    && !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtPath, \"(*.dll)|*.dll|All Files (*.*)|*.*\", null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IsapiFiltersItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/NewFilterDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"dba682a8-0579-4f41-a852-18235a9a4a93\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.IsapiFilters.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.IsapiFilters.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap isapi_filters_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"isapi_filters_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"isapi_filters_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\isapi_filters_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.IsapiFilters/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Jexus/JexusFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Jexus\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Resources;\n    using System.Text;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal class JexusFeature\n    {\n        public JexusFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            if (service.ServerManager.Mode != WorkingMode.Jexus)\n            {\n                IsFeatureEnabled = false;\n                return;\n            }\n\n            IsFeatureEnabled = true;\n            var settings = service.Server == null ? service.Application.GetExtra() : service.Server.GetExtra();\n            var text = new StringBuilder();\n            foreach (var key in settings.Keys)\n            {\n                foreach (var item in settings[key])\n                {\n                    text.AppendFormat(\"{0}={1}\", key, item).AppendLine();\n                }\n            }\n\n            Contents = text.ToString();\n            OnJexusSettingsSaved();\n        }\n\n        public string Contents { get; set; }\n\n        protected void OnJexusSettingsSaved()\n        {\n            JexusSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"https://server.jexusmanager.com/en/latest/tutorials/configuration.html\");\n            return false;\n        }\n\n        public JexusSettingsSavedEventHandler JexusSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public bool IsFeatureEnabled { get; private set; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n\n        public string Name\n        {\n            get\n            {\n                return \"Jexus Specific\";\n            }\n        }\n\n        public void CancelChanges()\n        {\n            Load();\n        }\n\n        public bool ApplyChanges()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            if (service.Server == null)\n            {\n                service.Application.GetExtra().Clear();\n            }\n            else\n            {\n                service.Server.GetExtra().Clear();\n            }\n\n            var reader = new StringReader(Contents);\n            string line;\n            while ((line = reader.ReadLine()) != null)\n            {\n                var index = line.IndexOf('=');\n                if (index == -1)\n                {\n                    continue;\n                }\n\n                var key = line.Substring(0, index).Trim();\n                if (key.Length == 0)\n                {\n                    continue;\n                }\n\n                var value = line.Substring(index + 1).Trim();\n                if (service.Server == null)\n                {\n                    var extra = service.Application.GetExtra();\n                    if (extra.ContainsKey(key))\n                    {\n                        extra[key].Add(value);\n                    }\n                    else\n                    {\n                        extra.Add(key, new List<string> { value });\n                    }\n                }\n                else\n                {\n                    var extra = service.Server.GetExtra();\n                    if (extra.ContainsKey(key))\n                    {\n                        extra[key].Add(value);\n                    }\n                    else\n                    {\n                        extra.Add(key, new List<string> { value });\n                    }\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Jexus/JexusManager.Features.Jexus.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Jexus</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Jexus/JexusModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Jexus\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class JexusModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)this.GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(JexusPage), \"Jexus Specific\",\n                \"Configure Jexus specific settings\",\n                Resources.jexus_36, Resources.jexus_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Jexus/JexusModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Jexus\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class JexusModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(this.Name, typeof(JexusModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Jexus/JexusPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Jexus\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class JexusPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.txtSettings = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 5;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.txtSettings);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 11;\n            // \n            // txtSettings\n            // \n            this.txtSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.txtSettings.Location = new System.Drawing.Point(16, 18);\n            this.txtSettings.Multiline = true;\n            this.txtSettings.Name = \"txtSettings\";\n            this.txtSettings.Size = new System.Drawing.Size(529, 505);\n            this.txtSettings.TabIndex = 3;\n            this.txtSettings.TextChanged += new System.EventHandler(this.txtSettings_TextChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(251, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to configure Jexus specific settings.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(151, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Jexus Specific\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // JexusPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"JexusPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private TextBox txtSettings;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Jexus/JexusPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Jexus\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class JexusPage : ModuleDialogPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly JexusPage _owner;\n\n            public PageTaskList(JexusPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private JexusFeature _feature;\n        private bool _hasChanges;\n        private bool _initialized;\n        private TaskList _taskList;\n\n        public JexusPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new JexusFeature(Module);\n            _feature.JexusSettingsUpdated = Refresh;\n            _feature.Load();\n            txtSettings.Enabled = _feature.IsFeatureEnabled;\n            base.Initialize(navigationData);\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void txtSettings_TextChanged(object sender, EventArgs e)\n        {\n            _feature.Contents = txtSettings.Text;\n            InformChanges();\n        }\n\n        protected override bool ApplyChanges()\n        {\n            if (!_feature.ApplyChanges())\n            {\n                return false;\n            }\n\n            ClearChanges();\n            return true;\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            _feature.CancelChanges();\n            ClearChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get { return _hasChanges; }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get { return true; }\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            Refresh();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        protected override void OnRefresh()\n        {\n            if (!_hasChanges)\n            {\n                txtSettings.Text = _feature.Contents;\n                _initialized = true;\n            }\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Jexus/JexusPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Jexus/JexusSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Jexus\n{\n    public delegate void JexusSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Jexus/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"ea333ee8-6551-4b5b-a733-119c5560608d\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "JexusManager.Features.Jexus/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Jexus.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Jexus.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap jexus_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"jexus_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Jexus/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"jexus_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\jexus_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Jexus/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Logging/AddFieldDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Logging\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AddFieldDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbType = new System.Windows.Forms.ComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbSource = new System.Windows.Forms.ComboBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(22, 20);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(63, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Field Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(25, 36);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(351, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(22, 76);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(71, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Source Type:\";\n            // \n            // cbType\n            // \n            this.cbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbType.FormattingEnabled = true;\n            this.cbType.Items.AddRange(new object[] {\n            \"Request Header\",\n            \"Response Header\",\n            \"Server Variable\"});\n            this.cbType.Location = new System.Drawing.Point(25, 92);\n            this.cbType.Name = \"cbType\";\n            this.cbType.Size = new System.Drawing.Size(351, 21);\n            this.cbType.TabIndex = 3;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(22, 137);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(44, 13);\n            this.label3.TabIndex = 4;\n            this.label3.Text = \"Source:\";\n            // \n            // cbSource\n            // \n            this.cbSource.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.cbSource.FormattingEnabled = true;\n            this.cbSource.Location = new System.Drawing.Point(25, 153);\n            this.cbSource.Name = \"cbSource\";\n            this.cbSource.Size = new System.Drawing.Size(351, 21);\n            this.cbSource.TabIndex = 5;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(226, 251);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 6;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(322, 251);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 7;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // AddFieldDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(429, 286);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.cbSource);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.cbType);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Name = \"AddFieldDialog\";\n            this.Text = \"Add Custom Field\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AddFieldDialog_HelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private Label label2;\n        private ComboBox cbType;\n        private Label label3;\n        private ComboBox cbSource;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/AddFieldDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Logging\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class AddFieldDialog : DialogForm\n    {\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public CustomLogField Custom { get; private set; }\n\n        public AddFieldDialog(IServiceProvider serviceProvider, CustomLogField custom, Fields logFile)\n            : base(serviceProvider)\n        {\n            Custom = custom;\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(this, \"Load\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (custom != null)\n                    {\n                        txtName.Text = custom.LogFieldName;\n                        cbType.SelectedIndex = (int)custom.SourceType;\n                        cbSource.Text = custom.SourceName;\n                    }\n                    else\n                    {\n                        cbType.SelectedIndex = 0;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(cbSource, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text) && !string.IsNullOrWhiteSpace(cbSource.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbType, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    cbSource.Items.Clear();\n                    if (cbType.SelectedIndex == 0)\n                    {\n                        cbSource.Items.AddRange(new object[]\n                        {\n                    \"Accept\",\n                    \"Accept_Charset\",\n                    \"Accept_Encoding\",\n                    \"Authorization\",\n                    \"Cache-Control\",\n                    \"Connection\",\n                    \"Content-Length\",\n                    \"Content-MD5\",\n                    \"Content-Type\",\n                    \"Date\",\n                    \"Expect\",\n                    \"From\",\n                    \"Host\",\n                    \"If-Match\",\n                    \"If-Modified-Since\",\n                    \"If-None-Match\",\n                    \"If-Range\",\n                    \"If-Unmodified-Since\",\n                    \"Max-Forwards\",\n                    \"Pragma\",\n                    \"Proxy-Authorization\",\n                    \"Range\",\n                    \"Referer\",\n                    \"TE\",\n                    \"Upgrade\",\n                    \"User-Agent\",\n                    \"Via\",\n                    \"Warning\"\n                        });\n                    }\n                    else if (cbType.SelectedIndex == 1)\n                    {\n                        cbSource.Items.AddRange(new object[]\n                        {\n                    \"Accept-Range\",\n                    \"Content-Type\",\n                    \"ETag\",\n                    \"Last-Modified\",\n                    \"Server\"\n                        });\n                    }\n                    else if (cbType.SelectedIndex == 2)\n                    {\n                        cbSource.Items.AddRange(DialogHelper.Conditions);\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var type = (CustomLogFieldSourceType)Enum.ToObject(typeof(CustomLogFieldSourceType), cbType.SelectedIndex);\n                    if (Custom == null)\n                    {\n                        Custom = logFile.Element.CustomLogFields.CreateElement();\n                        logFile.CustomLogFields.Add(Custom);\n                    }\n\n                    Custom.LogFieldName = txtName.Text;\n                    Custom.SourceType = type;\n                    Custom.SourceName = cbSource.Text;\n\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        private void AddFieldDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210517#W3CLoggingFields\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/AddFieldDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Logging/Fields.cs",
    "content": "﻿using Microsoft.Web.Administration;\nusing System.Collections.Generic;\n\nnamespace JexusManager.Features.Logging\n{\n    class Fields\n    {\n        public SiteLogFile Element { get; }\n        public List<CustomLogField> CustomLogFields { get; internal set; }\n        public LogExtFileFlags LogExtFileFlags { get; internal set; }\n\n\n        public Fields(SiteLogFile file)\n        {\n            Element = file;\n            CustomLogFields = new List<CustomLogField>();\n            foreach (CustomLogField item in file.CustomLogFields)\n            {\n                CustomLogFields.Add(item);\n            }\n\n            LogExtFileFlags = file.LogExtFileFlags;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/FieldsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Logging\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class FieldsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lvStandard = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label1 = new System.Windows.Forms.Label();\n            this.lvCustom = new System.Windows.Forms.ListView();\n            this.chField = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chSource = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label2 = new System.Windows.Forms.Label();\n            this.btnAdd = new System.Windows.Forms.Button();\n            this.btnRemove = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnEdit = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // lvStandard\n            // \n            this.lvStandard.CheckBoxes = true;\n            this.lvStandard.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName});\n            this.lvStandard.FullRowSelect = true;\n            this.lvStandard.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;\n            this.lvStandard.Location = new System.Drawing.Point(12, 36);\n            this.lvStandard.Name = \"lvStandard\";\n            this.lvStandard.Size = new System.Drawing.Size(545, 235);\n            this.lvStandard.TabIndex = 0;\n            this.lvStandard.UseCompatibleStateImageBehavior = false;\n            this.lvStandard.View = System.Windows.Forms.View.Details;\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 350;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(9, 20);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(83, 13);\n            this.label1.TabIndex = 1;\n            this.label1.Text = \"Standard Fields:\";\n            // \n            // lvCustom\n            // \n            this.lvCustom.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chField,\n            this.chType,\n            this.chSource});\n            this.lvCustom.FullRowSelect = true;\n            this.lvCustom.Location = new System.Drawing.Point(12, 315);\n            this.lvCustom.Name = \"lvCustom\";\n            this.lvCustom.Size = new System.Drawing.Size(545, 200);\n            this.lvCustom.TabIndex = 2;\n            this.lvCustom.UseCompatibleStateImageBehavior = false;\n            this.lvCustom.View = System.Windows.Forms.View.Details;\n            // \n            // chField\n            // \n            this.chField.Text = \"Log Field\";\n            this.chField.Width = 175;\n            // \n            // chType\n            // \n            this.chType.Text = \"Source Type\";\n            this.chType.Width = 175;\n            // \n            // chSource\n            // \n            this.chSource.Text = \"Source\";\n            this.chSource.Width = 175;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(9, 299);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(75, 13);\n            this.label2.TabIndex = 3;\n            this.label2.Text = \"Custom Fields:\";\n            // \n            // btnAdd\n            // \n            this.btnAdd.Location = new System.Drawing.Point(12, 521);\n            this.btnAdd.Name = \"btnAdd\";\n            this.btnAdd.Size = new System.Drawing.Size(100, 23);\n            this.btnAdd.TabIndex = 4;\n            this.btnAdd.Text = \"Add Field...\";\n            this.btnAdd.UseVisualStyleBackColor = true;\n            // \n            // btnRemove\n            // \n            this.btnRemove.Enabled = false;\n            this.btnRemove.Location = new System.Drawing.Point(118, 521);\n            this.btnRemove.Name = \"btnRemove\";\n            this.btnRemove.Size = new System.Drawing.Size(105, 23);\n            this.btnRemove.TabIndex = 5;\n            this.btnRemove.Text = \"Remove Field\";\n            this.btnRemove.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(366, 567);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 6;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(462, 567);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 7;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnEdit\n            // \n            this.btnEdit.Enabled = false;\n            this.btnEdit.Location = new System.Drawing.Point(467, 521);\n            this.btnEdit.Name = \"btnEdit\";\n            this.btnEdit.Size = new System.Drawing.Size(90, 23);\n            this.btnEdit.TabIndex = 8;\n            this.btnEdit.Text = \"Edit Field...\";\n            this.btnEdit.UseVisualStyleBackColor = true;\n            // \n            // FieldsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(569, 602);\n            this.Controls.Add(this.btnEdit);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnRemove);\n            this.Controls.Add(this.btnAdd);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.lvCustom);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.lvStandard);\n            this.Name = \"FieldsDialog\";\n            this.Text = \"W3C Logging Fields\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.FieldsDialog_HelpButtonClicked);\n            this.Shown += new System.EventHandler(this.FieldsDialog_Shown);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private ListView lvStandard;\n        private Label label1;\n        private ListView lvCustom;\n        private ColumnHeader chField;\n        private ColumnHeader chType;\n        private ColumnHeader chSource;\n        private Label label2;\n        private Button btnAdd;\n        private Button btnRemove;\n        private Button btnOK;\n        private Button btnCancel;\n        private Button btnEdit;\n        private ColumnHeader chName;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/FieldsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Logging\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reflection;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class FieldsDialog : DialogForm\n    {\n        private class StandardListViewItem : ListViewItem\n        {\n            public StandardListViewItem(LogExtFileFlags flag)\n            {\n                Text = ToString(flag);\n                Flag = flag;\n            }\n\n            public LogExtFileFlags Flag { get; }\n\n            private static string ToString(LogExtFileFlags flag)\n            {\n                FieldInfo fi = typeof(LogExtFileFlags).GetField(flag.ToString());\n                DescriptionAttribute dna =\n                    (DescriptionAttribute)Attribute.GetCustomAttribute(\n                        fi, typeof(DescriptionAttribute));\n                return dna.Description;\n            }\n        }\n\n        private class CustomListViewItem : ListViewItem\n        {\n            public CustomLogField Custom { get; }\n\n            public CustomListViewItem(CustomLogField custom)\n            {\n                Custom = custom;\n                Text = custom.LogFieldName;\n                SubItems.Add(ToString(custom.SourceType));\n                SubItems.Add(custom.SourceName);\n            }\n\n            private static string ToString(CustomLogFieldSourceType type)\n            {\n                switch (type)\n                {\n                    case CustomLogFieldSourceType.RequestHeader:\n                        return \"Request Header\";\n                    case CustomLogFieldSourceType.ResponseHeader:\n                        return \"Response Header\";\n                    case CustomLogFieldSourceType.ServerVariable:\n                        return \"Server Variable\";\n                    default:\n                        throw new ArgumentOutOfRangeException(nameof(type), type, null);\n                }\n            }\n\n            public void Update()\n            {\n                Text = Custom.LogFieldName;\n                SubItems[0].Text = ToString(Custom.SourceType);\n                SubItems[1].Text = Custom.SourceName;\n            }\n        }\n\n        private bool enabled;\n\n        public FieldsDialog(IServiceProvider serviceProvider, Fields logFile)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            if (logFile.CustomLogFields != null)\n            {\n                foreach (CustomLogField custom in logFile.CustomLogFields)\n                {\n                    lvCustom.Items.Add(new CustomListViewItem(custom));\n                }\n            }\n\n            foreach (LogExtFileFlags flag in Enum.GetValues(typeof(LogExtFileFlags)))\n            {\n                lvStandard.Items.Add(new StandardListViewItem(flag)\n                {\n                    Checked = (logFile.LogExtFileFlags & flag) == flag\n                });\n            }\n\n            btnAdd.Enabled = logFile.CustomLogFields != null;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(lvCustom, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnRemove.Enabled = lvCustom.SelectedItems.Count > 0;\n                    btnEdit.Enabled = lvCustom.SelectedItems.Count == 1;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(lvStandard, \"ItemChecked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (enabled)\n                    {\n                        btnOK.Enabled = true;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnAdd, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using (var dialog = new AddFieldDialog(ServiceProvider, null, logFile))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n\n                        lvCustom.Items.Add(new CustomListViewItem(dialog.Custom));\n                    }\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnEdit, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var selected = (CustomListViewItem)lvCustom.SelectedItems[0];\n                    using (var dialog = new AddFieldDialog(ServiceProvider, selected.Custom, logFile))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n                    }\n\n                    selected.Update();\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRemove, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    foreach (CustomListViewItem item in lvCustom.SelectedItems)\n                    {\n                        item.Remove();\n                        item.Custom.Delete();\n                        logFile.CustomLogFields.Remove(item.Custom);\n                    }\n\n                    btnOK.Enabled = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    LogExtFileFlags flags = 0;\n                    foreach (StandardListViewItem item in lvStandard.Items)\n                    {\n                        if (item.Checked)\n                        {\n                            flags |= item.Flag;\n                        }\n                    }\n\n                    logFile.LogExtFileFlags = flags;\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        private void FieldsDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210517#W3CLoggingFields\");\n        }\n\n        private void FieldsDialog_Shown(object sender, EventArgs e)\n        {\n            enabled = true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/FieldsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Logging/JexusManager.Features.Logging.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Logging</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Logging/LoggingFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Logging\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class LoggingFeature\n    {\n        private sealed class FeatureTaskList : TaskList\n        {\n            private readonly LoggingFeature _owner;\n\n            public FeatureTaskList(LoggingFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (!_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Enable\", \"Enable\", string.Empty).SetUsage());\n                }\n\n                if (_owner.IsEnabled)\n                {\n                    result.Add(new MethodTaskItem(\"Disable\", \"Disable\", string.Empty).SetUsage());\n                }\n\n                result.Add(new MethodTaskItem(\"View\", \"View Log Files...\", string.Empty).SetUsage());\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void View()\n            {\n                _owner.View();\n            }\n        }\n\n        public LoggingFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.applicationHost/log\", null, false);\n            Mode = (long)section.Attributes[\"centralLogFileMode\"].Value;\n            Encoding = (bool)section.Attributes[\"logInUTF8\"].Value ? 0 : 1;\n\n            if (service.Server != null)\n            {\n                var section2 = service.GetSection(\"system.applicationHost/sites\");\n                var element = section2.ChildElements[\"siteDefaults\"].ChildElements[\"logFile\"];\n                var parent = section2.ChildElements[\"siteDefaults\"];\n                Fields = new Fields(new SiteLogFile(element, parent));\n                LogFormat = (long)element.Attributes[\"logFormat\"].Value;\n                Directory = element.Attributes[\"directory\"].Value.ToString();\n                if (element.Schema.AttributeSchemas[\"logTargetW3C\"] != null)\n                {\n                    LogTargetW3C = (long)element.Attributes[\"logTargetW3C\"].Value;\n                }\n                else\n                {\n                    LogTargetW3C = -1;\n                }\n\n                LocalTimeRollover = (bool)element.Attributes[\"localTimeRollover\"].Value;\n                TruncateSizeString = element.Attributes[\"truncateSize\"].Value.ToString();\n                Period = (long)element.Attributes[\"period\"].Value;\n            }\n            else\n            {\n                Site site = service.Application.GetSite();\n                var logFile = site.LogFile;\n                Fields = new Fields(logFile);\n                LogFormat = (long)logFile.LogFormat;\n                Directory = Path.Combine(logFile.Directory, $\"W3SVC{site.Id}\");\n                if (logFile.Schema.AttributeSchemas[\"logTargetW3C\"] != null)\n                {\n                    LogTargetW3C = (long)logFile.LogTargetW3C;\n                }\n                else\n                {\n                    LogTargetW3C = -1;\n                }\n\n                LocalTimeRollover = logFile.LocalTimeRollover;\n                TruncateSizeString = logFile.TruncateSize.ToString();\n                Period = (long)logFile.Period;\n            }\n\n            CanBrowse = service.Application == null || service.Application.IsRoot();\n            CanEncoding = service.Server != null;\n\n            ConfigurationSection httpLoggingSection1 = service.GetSection(\"system.webServer/httpLogging\", null, false);\n            var dontLog = (bool)httpLoggingSection1[\"dontLog\"];\n            SetEnabled(!dontLog);\n        }\n\n        public long Period { get; set; }\n\n        public string TruncateSizeString { get; set; }\n\n        public bool LocalTimeRollover { get; set; }\n\n        public long LogTargetW3C { get; set; }\n\n        public bool CanBrowse { get; set; }\n\n        public long LogFormat { get; set; }\n\n        public string Directory { get; set; }\n\n        public int Encoding { get; set; }\n\n        public long Mode { get; set; }\n\n        public Fields Fields { get; set; }\n\n        private void Enable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            ConfigurationSection httpLoggingSection1 = service.GetSection(\"system.webServer/httpLogging\", null, false);\n            httpLoggingSection1[\"dontLog\"] = false;\n            SetEnabled(true);\n        }\n\n        private void Disable()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            ConfigurationSection httpLoggingSection1 = service.GetSection(\"system.webServer/httpLogging\", null, false);\n            httpLoggingSection1[\"dontLog\"] = true;\n            SetEnabled(false);\n        }\n\n        private void View()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var path = Directory.ExpandIisExpressEnvironmentVariables(\n                service.Server != null ? null : service.Application.GetActualExecutable());\n            if (System.IO.Directory.Exists(path))\n            {\n                DialogHelper.ProcessStart(path);\n                return;\n            }\n\n            var ui = (IManagementUIService)GetService(typeof(IManagementUIService));\n            ui.ShowMessage(\"The specific log directory is invalid.\", Name, MessageBoxButtons.OK, MessageBoxIcon.Warning);\n        }\n\n        internal bool SelectFields()\n        {\n            using var dialog = new FieldsDialog(Module, Fields);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return false;\n            }\n\n            return true;\n        }\n\n        protected void OnLoggingSettingsSaved()\n        {\n            LoggingSettingsUpdated?.Invoke();\n        }\n\n        public void SetEnabled(bool enabled)\n        {\n            IsEnabled = enabled;\n            OnLoggingSettingsSaved();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210517\");\n            return false;\n        }\n\n        public LoggingSettingsSavedEventHandler LoggingSettingsUpdated { get; set; }\n        public string Description { get; }\n        public bool IsEnabled { get; private set; }\n\n        public virtual bool IsFeatureEnabled => true;\n\n        public virtual Version MinimumFrameworkVersion => FxVersionNotRequired;\n\n        public Module Module { get; }\n\n        public string Name => \"Logging\";\n\n        public bool CanEncoding { get; set; }\n\n        public void CancelChanges()\n        {\n            Load();\n        }\n\n        public bool ApplyChanges()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            if (service.Server != null)\n            {\n                var section = service.GetSection(\"system.applicationHost/log\");\n                section.Attributes[\"centralLogFileMode\"].Value = Mode;\n                section.Attributes[\"logInUTF8\"].Value = Encoding == 0;\n\n                var section2 = service.GetSection(\"system.applicationHost/sites\");\n                var element = section2.ChildElements[\"siteDefaults\"].ChildElements[\"logFile\"];\n                element.Attributes[\"logFormat\"].Value = LogFormat;\n                element.Attributes[\"directory\"].Value = Directory;\n                if (element.Schema.AttributeSchemas[\"logTargetW3C\"] != null)\n                {\n                    element.Attributes[\"logTargetW3C\"].Value = LogTargetW3C;\n                }\n\n                element.Attributes[\"localTimeRollover\"].Value = LocalTimeRollover;\n                element.Attributes[\"truncateSize\"].Value = Int64.Parse(TruncateSizeString);\n                element.Attributes[\"period\"].Value = Period;\n\n                var collection = element.GetCollection(\"customFields\");\n                collection.Clear();\n                foreach (var item in Fields.CustomLogFields)\n                {\n                    collection.Add(item);\n                }\n\n                element.Attributes[\"logExtFileFlags\"].Value = (long)Fields.LogExtFileFlags;\n            }\n            else\n            {\n                var logFile = service.Application.GetSite().LogFile;\n                logFile.LogFormat = (LogFormat)LogFormat;\n                logFile.Directory = Directory;\n                if (logFile.Schema.AttributeSchemas[\"logTargetW3C\"] != null)\n                {\n                    logFile.LogTargetW3C = (LogTargetW3C)LogTargetW3C;\n                }\n\n                logFile.LocalTimeRollover = LocalTimeRollover;\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                long size;\n                if (!long.TryParse(TruncateSizeString, out size))\n                {\n                    dialog.ShowMessage(\"The maximum file size must be a valid, positive integer.\", Name, MessageBoxButtons.OK, MessageBoxIcon.Warning);\n                    return false;\n                }\n\n                if (size < 1048576 || size > 4294967295)\n                {\n                    dialog.ShowMessage(\"The specified number is invalid. The valid range is between 1 MB and 4 GB.\", Name, MessageBoxButtons.OK, MessageBoxIcon.Warning);\n                    return false;\n                }\n\n                logFile.TruncateSize = size;\n                logFile.Period = (LoggingRolloverPeriod)Period;\n                logFile.CustomLogFields.Clear();\n                foreach (var item in Fields.CustomLogFields)\n                {\n                    logFile.CustomLogFields.Add(item);\n                }\n\n                logFile.LogExtFileFlags = Fields.LogExtFileFlags;\n            }\n\n            service.ServerManager.CommitChanges();\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/LoggingModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Logging\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class LoggingModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(LoggingPage), \"Logging\",\n                \"Configure how IIS logs requests on the Web server\",\n                Resources.logging_36, Resources.logging_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/LoggingModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Logging\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class LoggingModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(LoggingModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/LoggingPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Logging\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class LoggingPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.label2 = new System.Windows.Forms.Label();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.gbRollover = new System.Windows.Forms.GroupBox();\n            this.cbLocalTime = new System.Windows.Forms.CheckBox();\n            this.rbNoFile = new System.Windows.Forms.RadioButton();\n            this.txtSize = new System.Windows.Forms.TextBox();\n            this.rbSize = new System.Windows.Forms.RadioButton();\n            this.cbSchedule = new System.Windows.Forms.ComboBox();\n            this.rbSchedule = new System.Windows.Forms.RadioButton();\n            this.label9 = new System.Windows.Forms.Label();\n            this.groupBox2 = new System.Windows.Forms.GroupBox();\n            this.rbBoth = new System.Windows.Forms.RadioButton();\n            this.rbEvent = new System.Windows.Forms.RadioButton();\n            this.rbFile = new System.Windows.Forms.RadioButton();\n            this.label8 = new System.Windows.Forms.Label();\n            this.label4 = new System.Windows.Forms.Label();\n            this.cbLogType = new System.Windows.Forms.ComboBox();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.cbEncoding = new System.Windows.Forms.ComboBox();\n            this.label7 = new System.Windows.Forms.Label();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label6 = new System.Windows.Forms.Label();\n            this.btnSelect = new System.Windows.Forms.Button();\n            this.cbFormat = new System.Windows.Forms.ComboBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.gbRollover.SuspendLayout();\n            this.groupBox2.SuspendLayout();\n            this.groupBox1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.label2);\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 4;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(7, 48);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(338, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to configure how IIS logs requests on the Web server.\";\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.AutoScroll = true;\n            this.panel2.Controls.Add(this.gbRollover);\n            this.panel2.Controls.Add(this.groupBox2);\n            this.panel2.Controls.Add(this.label4);\n            this.panel2.Controls.Add(this.cbLogType);\n            this.panel2.Controls.Add(this.groupBox1);\n            this.panel2.Location = new System.Drawing.Point(10, 69);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 7;\n            // \n            // gbRollover\n            // \n            this.gbRollover.Controls.Add(this.cbLocalTime);\n            this.gbRollover.Controls.Add(this.rbNoFile);\n            this.gbRollover.Controls.Add(this.txtSize);\n            this.gbRollover.Controls.Add(this.rbSize);\n            this.gbRollover.Controls.Add(this.cbSchedule);\n            this.gbRollover.Controls.Add(this.rbSchedule);\n            this.gbRollover.Controls.Add(this.label9);\n            this.gbRollover.Location = new System.Drawing.Point(6, 429);\n            this.gbRollover.Name = \"gbRollover\";\n            this.gbRollover.Size = new System.Drawing.Size(517, 219);\n            this.gbRollover.TabIndex = 7;\n            this.gbRollover.TabStop = false;\n            this.gbRollover.Text = \"Log File Rollover\";\n            // \n            // cbLocalTime\n            // \n            this.cbLocalTime.AutoSize = true;\n            this.cbLocalTime.Location = new System.Drawing.Point(9, 189);\n            this.cbLocalTime.Name = \"cbLocalTime\";\n            this.cbLocalTime.Size = new System.Drawing.Size(218, 17);\n            this.cbLocalTime.TabIndex = 6;\n            this.cbLocalTime.Text = \"Use local time for file naming and rollover\";\n            this.cbLocalTime.UseVisualStyleBackColor = true;\n            this.cbLocalTime.CheckedChanged += new System.EventHandler(this.cbLocalTime_CheckedChanged);\n            // \n            // rbNoFile\n            // \n            this.rbNoFile.AutoSize = true;\n            this.rbNoFile.Location = new System.Drawing.Point(9, 154);\n            this.rbNoFile.Name = \"rbNoFile\";\n            this.rbNoFile.Size = new System.Drawing.Size(151, 17);\n            this.rbNoFile.TabIndex = 5;\n            this.rbNoFile.TabStop = true;\n            this.rbNoFile.Text = \"Do not create new log files\";\n            this.rbNoFile.UseVisualStyleBackColor = true;\n            this.rbNoFile.CheckedChanged += new System.EventHandler(this.rbSchedule_CheckedChanged);\n            // \n            // txtSize\n            // \n            this.txtSize.Location = new System.Drawing.Point(24, 128);\n            this.txtSize.Name = \"txtSize\";\n            this.txtSize.Size = new System.Drawing.Size(110, 20);\n            this.txtSize.TabIndex = 4;\n            this.txtSize.TextChanged += new System.EventHandler(this.txtSize_TextChanged);\n            // \n            // rbSize\n            // \n            this.rbSize.AutoSize = true;\n            this.rbSize.Location = new System.Drawing.Point(9, 105);\n            this.rbSize.Name = \"rbSize\";\n            this.rbSize.Size = new System.Drawing.Size(154, 17);\n            this.rbSize.TabIndex = 3;\n            this.rbSize.TabStop = true;\n            this.rbSize.Text = \"Maximum file size (in bytes):\";\n            this.rbSize.UseVisualStyleBackColor = true;\n            this.rbSize.CheckedChanged += new System.EventHandler(this.rbSchedule_CheckedChanged);\n            // \n            // cbSchedule\n            // \n            this.cbSchedule.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbSchedule.FormattingEnabled = true;\n            this.cbSchedule.Items.AddRange(new object[] {\n            \"Hourly\",\n            \"Daily\",\n            \"Weekly\",\n            \"Monthly\"});\n            this.cbSchedule.Location = new System.Drawing.Point(24, 78);\n            this.cbSchedule.Name = \"cbSchedule\";\n            this.cbSchedule.Size = new System.Drawing.Size(175, 21);\n            this.cbSchedule.TabIndex = 2;\n            this.cbSchedule.SelectedIndexChanged += new System.EventHandler(this.cbSchedule_SelectedIndexChanged);\n            // \n            // rbSchedule\n            // \n            this.rbSchedule.AutoSize = true;\n            this.rbSchedule.Location = new System.Drawing.Point(9, 55);\n            this.rbSchedule.Name = \"rbSchedule\";\n            this.rbSchedule.Size = new System.Drawing.Size(73, 17);\n            this.rbSchedule.TabIndex = 1;\n            this.rbSchedule.TabStop = true;\n            this.rbSchedule.Text = \"Schedule:\";\n            this.rbSchedule.UseVisualStyleBackColor = true;\n            this.rbSchedule.CheckedChanged += new System.EventHandler(this.rbSchedule_CheckedChanged);\n            // \n            // label9\n            // \n            this.label9.AutoSize = true;\n            this.label9.Location = new System.Drawing.Point(21, 29);\n            this.label9.Name = \"label9\";\n            this.label9.Size = new System.Drawing.Size(268, 13);\n            this.label9.TabIndex = 0;\n            this.label9.Text = \"Select the method that IIS uses to create a new log file.\";\n            // \n            // groupBox2\n            // \n            this.groupBox2.Controls.Add(this.rbBoth);\n            this.groupBox2.Controls.Add(this.rbEvent);\n            this.groupBox2.Controls.Add(this.rbFile);\n            this.groupBox2.Controls.Add(this.label8);\n            this.groupBox2.Location = new System.Drawing.Point(6, 265);\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.Size = new System.Drawing.Size(517, 147);\n            this.groupBox2.TabIndex = 6;\n            this.groupBox2.TabStop = false;\n            this.groupBox2.Text = \"Log Event Destination\";\n            // \n            // rbBoth\n            // \n            this.rbBoth.AutoSize = true;\n            this.rbBoth.Location = new System.Drawing.Point(9, 110);\n            this.rbBoth.Name = \"rbBoth\";\n            this.rbBoth.Size = new System.Drawing.Size(159, 17);\n            this.rbBoth.TabIndex = 3;\n            this.rbBoth.TabStop = true;\n            this.rbBoth.Text = \"Both log file and ETW event\";\n            this.rbBoth.UseVisualStyleBackColor = true;\n            this.rbBoth.CheckedChanged += new System.EventHandler(this.rbFile_CheckedChanged);\n            // \n            // rbEvent\n            // \n            this.rbEvent.AutoSize = true;\n            this.rbEvent.Location = new System.Drawing.Point(9, 83);\n            this.rbEvent.Name = \"rbEvent\";\n            this.rbEvent.Size = new System.Drawing.Size(102, 17);\n            this.rbEvent.TabIndex = 2;\n            this.rbEvent.TabStop = true;\n            this.rbEvent.Text = \"ETW event only\";\n            this.rbEvent.UseVisualStyleBackColor = true;\n            this.rbEvent.CheckedChanged += new System.EventHandler(this.rbFile_CheckedChanged);\n            // \n            // rbFile\n            // \n            this.rbFile.AutoSize = true;\n            this.rbFile.Location = new System.Drawing.Point(9, 56);\n            this.rbFile.Name = \"rbFile\";\n            this.rbFile.Size = new System.Drawing.Size(81, 17);\n            this.rbFile.TabIndex = 1;\n            this.rbFile.TabStop = true;\n            this.rbFile.Text = \"Log file only\";\n            this.rbFile.UseVisualStyleBackColor = true;\n            this.rbFile.CheckedChanged += new System.EventHandler(this.rbFile_CheckedChanged);\n            // \n            // label8\n            // \n            this.label8.AutoSize = true;\n            this.label8.Location = new System.Drawing.Point(13, 28);\n            this.label8.Name = \"label8\";\n            this.label8.Size = new System.Drawing.Size(254, 13);\n            this.label8.TabIndex = 0;\n            this.label8.Text = \"Select the destination where IIS will write log events.\";\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(3, 6);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(81, 13);\n            this.label4.TabIndex = 3;\n            this.label4.Text = \"One log file per:\";\n            // \n            // cbLogType\n            // \n            this.cbLogType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbLogType.Enabled = false;\n            this.cbLogType.FormattingEnabled = true;\n            this.cbLogType.Items.AddRange(new object[] {\n            \"Server\",\n            \"Site\"});\n            this.cbLogType.Location = new System.Drawing.Point(6, 22);\n            this.cbLogType.Name = \"cbLogType\";\n            this.cbLogType.Size = new System.Drawing.Size(121, 21);\n            this.cbLogType.TabIndex = 4;\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.cbEncoding);\n            this.groupBox1.Controls.Add(this.label7);\n            this.groupBox1.Controls.Add(this.btnBrowse);\n            this.groupBox1.Controls.Add(this.txtPath);\n            this.groupBox1.Controls.Add(this.label6);\n            this.groupBox1.Controls.Add(this.btnSelect);\n            this.groupBox1.Controls.Add(this.cbFormat);\n            this.groupBox1.Controls.Add(this.label5);\n            this.groupBox1.Location = new System.Drawing.Point(6, 50);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(517, 188);\n            this.groupBox1.TabIndex = 5;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Log File\";\n            // \n            // cbEncoding\n            // \n            this.cbEncoding.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbEncoding.Enabled = false;\n            this.cbEncoding.FormattingEnabled = true;\n            this.cbEncoding.Items.AddRange(new object[] {\n            \"UTF-8\",\n            \"ANSI\"});\n            this.cbEncoding.Location = new System.Drawing.Point(9, 152);\n            this.cbEncoding.Name = \"cbEncoding\";\n            this.cbEncoding.Size = new System.Drawing.Size(158, 21);\n            this.cbEncoding.TabIndex = 7;\n            this.cbEncoding.SelectedIndexChanged += new System.EventHandler(this.cbEncoding_SelectedIndexChanged);\n            // \n            // label7\n            // \n            this.label7.AutoSize = true;\n            this.label7.Location = new System.Drawing.Point(6, 136);\n            this.label7.Name = \"label7\";\n            this.label7.Size = new System.Drawing.Size(55, 13);\n            this.label7.TabIndex = 6;\n            this.label7.Text = \"Encoding:\";\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Enabled = false;\n            this.btnBrowse.Location = new System.Drawing.Point(379, 95);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(95, 23);\n            this.btnBrowse.TabIndex = 5;\n            this.btnBrowse.Text = \"Browse...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);\n            // \n            // txtPath\n            // \n            this.txtPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystemDirectories;\n            this.txtPath.Location = new System.Drawing.Point(9, 97);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(364, 20);\n            this.txtPath.TabIndex = 4;\n            this.txtPath.TextChanged += new System.EventHandler(this.txtPath_TextChanged);\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(6, 81);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(52, 13);\n            this.label6.TabIndex = 3;\n            this.label6.Text = \"Directory:\";\n            // \n            // btnSelect\n            // \n            this.btnSelect.Enabled = false;\n            this.btnSelect.Location = new System.Drawing.Point(173, 42);\n            this.btnSelect.Name = \"btnSelect\";\n            this.btnSelect.Size = new System.Drawing.Size(95, 23);\n            this.btnSelect.TabIndex = 2;\n            this.btnSelect.Text = \"Select Fields...\";\n            this.btnSelect.UseVisualStyleBackColor = true;\n            this.btnSelect.Click += new System.EventHandler(this.btnSelect_Click);\n            // \n            // cbFormat\n            // \n            this.cbFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbFormat.Enabled = false;\n            this.cbFormat.FormattingEnabled = true;\n            this.cbFormat.Items.AddRange(new object[] {\n            \"IIS\",\n            \"NCSA\",\n            \"W3C\",\n            \"Custom\"});\n            this.cbFormat.Location = new System.Drawing.Point(9, 44);\n            this.cbFormat.Name = \"cbFormat\";\n            this.cbFormat.Size = new System.Drawing.Size(158, 21);\n            this.cbFormat.TabIndex = 1;\n            this.cbFormat.SelectedIndexChanged += new System.EventHandler(this.cbFormat_SelectedIndexChanged);\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(6, 28);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(42, 13);\n            this.label5.TabIndex = 0;\n            this.label5.Text = \"Format:\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 6;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(89, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Logging\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, -17);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // LoggingPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"LoggingPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.gbRollover.ResumeLayout(false);\n            this.gbRollover.PerformLayout();\n            this.groupBox2.ResumeLayout(false);\n            this.groupBox2.PerformLayout();\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private GroupBox groupBox1;\n        private ComboBox cbEncoding;\n        private Label label7;\n        private Button btnBrowse;\n        private TextBox txtPath;\n        private Label label6;\n        private Button btnSelect;\n        private ComboBox cbFormat;\n        private Label label5;\n        private ComboBox cbLogType;\n        private Label label4;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private GroupBox gbRollover;\n        private CheckBox cbLocalTime;\n        private RadioButton rbNoFile;\n        private TextBox txtSize;\n        private RadioButton rbSize;\n        private ComboBox cbSchedule;\n        private RadioButton rbSchedule;\n        private Label label9;\n        private GroupBox groupBox2;\n        private RadioButton rbBoth;\n        private RadioButton rbEvent;\n        private RadioButton rbFile;\n        private Label label8;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/LoggingPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Logging\n{\n    using System;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class LoggingPage : ModuleDialogPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly LoggingPage _owner;\n\n            public PageTaskList(LoggingPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private const string MaxLogSize = \"4294967295\";\n        private PageTaskList _taskList;\n        private LoggingFeature _feature;\n        private bool _hasChanges;\n        private bool _initialized;\n\n        public LoggingPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new LoggingFeature(Module);\n            _feature.LoggingSettingsUpdated = Refresh;\n            _feature.Load();\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void btnBrowse_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ShowBrowseDialog(txtPath, null);\n            _feature.Directory = txtPath.Text;\n            InformChanges();\n        }\n\n        private void cbFormat_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            btnSelect.Enabled = cbFormat.SelectedIndex == cbFormat.Items.Count - 1;\n            _feature.LogFormat = cbFormat.SelectedIndex;\n            InformChanges();\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            Refresh();\n        }\n\n        protected override void OnRefresh()\n        {\n            if (!_hasChanges)\n            {\n                cbLogType.SelectedIndex = (int)_feature.Mode;\n                cbEncoding.SelectedIndex = _feature.Encoding;\n                cbFormat.SelectedIndex = (int)_feature.LogFormat;\n                txtPath.Text = _feature.Directory;\n                txtPath.Enabled = _feature.CanBrowse && _feature.IsEnabled;\n                btnSelect.Enabled = _feature.CanBrowse && _feature.IsEnabled;\n                btnBrowse.Enabled = _feature.CanBrowse && _feature.IsEnabled;\n                cbFormat.Enabled = _feature.CanBrowse && _feature.IsEnabled;\n                cbEncoding.Enabled = _feature.CanEncoding && _feature.IsEnabled;\n                gbRollover.Enabled = _feature.CanBrowse && _feature.IsEnabled;\n\n                rbFile.Enabled = rbEvent.Enabled = rbBoth.Enabled = _feature.LogTargetW3C == -1;\n                if (_feature.LogTargetW3C != -1)\n                {\n                    switch (_feature.LogTargetW3C)\n                    {\n                        case 1:\n                            rbFile.Checked = true;\n                            break;\n                        case 2:\n                            rbEvent.Checked = true;\n                            break;\n                        default:\n                            rbBoth.Checked = true;\n                            break;\n                    }\n                }\n\n                rbSchedule.Checked = cbSchedule.Enabled = _feature.Period > 0;\n                rbSize.Checked = txtSize.Enabled = _feature.Period == 0 && _feature.TruncateSizeString != MaxLogSize;\n                rbNoFile.Checked = _feature.Period == 0 && _feature.TruncateSizeString == MaxLogSize;\n                txtSize.Text = txtSize.Enabled ? _feature.TruncateSizeString.ToString() : string.Empty;\n\n                switch (_feature.Period)\n                {\n                    case 2:\n                        cbSchedule.SelectedIndex = 2;\n                        break;\n                    case 1:\n                        cbSchedule.SelectedIndex = 1;\n                        break;\n                    case 4:\n                        cbSchedule.SelectedIndex = 0;\n                        break;\n                    case 3:\n                        cbSchedule.SelectedIndex = 3;\n                        break;\n                }\n\n                cbLocalTime.Checked = _feature.LocalTimeRollover;\n\n                _initialized = true;\n            }\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        private void txtPath_TextChanged(object sender, EventArgs e)\n        {\n            _feature.Directory = txtPath.Text;\n            InformChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get { return _hasChanges; }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get { return !rbSize.Checked || !string.IsNullOrWhiteSpace(txtSize.Text); }\n        }\n\n        private void cbEncoding_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.Encoding = cbEncoding.SelectedIndex;\n            InformChanges();\n        }\n\n        protected override bool ApplyChanges()\n        {\n            if (!_feature.ApplyChanges())\n            {\n                return false;\n            }\n\n            ClearChanges();\n            return true;\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            _feature.CancelChanges();\n            ClearChanges();\n        }\n\n        private void btnSelect_Click(object sender, EventArgs e)\n        {\n            if (_feature.SelectFields())\n            {\n                InformChanges();\n            }\n        }\n\n        private void rbFile_CheckedChanged(object sender, EventArgs e)\n        {\n            if (rbFile.Checked)\n            {\n                _feature.LogTargetW3C = 1;\n            }\n            else if (rbEvent.Checked)\n            {\n                _feature.LogTargetW3C = 2;\n            }\n            else\n            {\n                _feature.LogTargetW3C = 3;\n            }\n\n            InformChanges();\n        }\n\n        private void rbSchedule_CheckedChanged(object sender, EventArgs e)\n        {\n            cbSchedule.Enabled = rbSchedule.Checked;\n            txtSize.Enabled = rbSize.Checked;\n            if (rbSchedule.Checked)\n            {\n                switch (cbSchedule.SelectedIndex)\n                {\n                    case 0:\n                        _feature.Period = 4;\n                        break;\n                    case 1:\n                        _feature.Period = 1;\n                        break;\n                    case 2:\n                        _feature.Period = 2;\n                        break;\n                    case 3:\n                        _feature.Period = 3;\n                        break;\n                }\n            }\n            else if (rbSize.Checked)\n            {\n                _feature.Period = 0;\n                _feature.TruncateSizeString = txtSize.Text;\n            }\n            else\n            {\n                _feature.Period = 0;\n                _feature.TruncateSizeString = MaxLogSize;\n            }\n\n            InformChanges();\n        }\n\n        private void cbLocalTime_CheckedChanged(object sender, EventArgs e)\n        {\n            _feature.LocalTimeRollover = cbLocalTime.Checked;\n            InformChanges();\n        }\n\n        private void cbSchedule_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            switch (cbSchedule.SelectedIndex)\n            {\n                case 0:\n                    _feature.Period = 4;\n                    break;\n                case 1:\n                    _feature.Period = 1;\n                    break;\n                case 2:\n                    _feature.Period = 2;\n                    break;\n                case 3:\n                    _feature.Period = 3;\n                    break;\n            }\n\n            InformChanges();\n        }\n\n        private void txtSize_TextChanged(object sender, EventArgs e)\n        {\n            if (txtSize.Enabled)\n            {\n                _feature.TruncateSizeString = txtSize.Text;\n                InformChanges();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/LoggingPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Logging/LoggingSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Logging\n{\n    public delegate void LoggingSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"5c2ae18d-d829-481b-8fca-8ad0f69e68c8\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "JexusManager.Features.Logging/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Logging.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Logging.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap logging_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"logging_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Logging/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"logging_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\logging_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Logging/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.MimeMap/JexusManager.Features.MimeMap.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.MimeMap</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/MimeMapFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.MimeMap\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class MimeMapFeature : FeatureBase<MimeMapItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly MimeMapFeature _owner;\n\n            public FeatureTaskList(MimeMapFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n        }\n\n        public MimeMapFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            ConfigurationSection section = service.GetSection(\"system.webServer/staticContent\");\n            CanRevert = section.CanRevert();\n            LoadItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection section = service.GetSection(\"system.webServer/staticContent\");\n            return section.GetCollection();\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewMapItemDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected authorization rule?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(MimeMapItem item)\n        {\n            using var dialog = new NewMapItemDialog(Module, SelectedItem, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange(\"No Grouping\", \"Entry Type\", \"Content Type\");\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[2].Text;\n                case \"Content Type\":\n                    return item.SubItems[1].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            MimeMapSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210520\");\n            return false;\n        }\n\n        public bool CanRevert { get; private set; }\n\n        public MimeMapSettingsSavedEventHandler MimeMapSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"MIME Types\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/MimeMapItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.MimeMap\n{\n    using Microsoft.Web.Administration;\n\n    internal class MimeMapItem : IItem<MimeMapItem>\n    {\n        public MimeMapItem(ConfigurationElement element)\n        {\n            this.Element = element;\n            this.Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inhertied\";\n            if (element == null)\n            {\n                return;\n            }\n\n            this.FileExtension = (string)element[\"fileExtension\"];\n            this.MimeType = (string)element[\"mimeType\"];\n        }\n\n        public string MimeType { get; set; }\n\n        public string FileExtension { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public string Flag { get; set; }\n\n        public bool Equals(MimeMapItem other)\n        {\n            // all properties\n            return this.Match(other) && other.MimeType == this.MimeType;\n        }\n\n        public void Apply()\n        {\n            this.Element[\"fileExtension\"] = this.FileExtension;\n            this.Element[\"mimeType\"] = this.MimeType;\n        }\n\n        public bool Match(MimeMapItem other)\n        {\n            // match combined keys.\n            return other != null && other.FileExtension == this.FileExtension;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/MimeMapModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.MimeMap\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class MimeMapModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)this.GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(MimeMapPage), \"MIME Types\",\n                \"Configure extensions and associated content types that are served as static files\", Resources.mime_map_36,\n                Resources.mime_map_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/MimeMapModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.MimeMap\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class MimeMapModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(this.Name, typeof(MimeMapModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/MimeMapPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.MimeMap\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class MimeMapPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chExtension = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chMime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chExtension,\n            this.chMime,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.listView1_SelectedIndexChanged);\n            // \n            // chExtension\n            // \n            this.chExtension.Text = \"Extension\";\n            this.chExtension.Width = 120;\n            // \n            // chMime\n            // \n            this.chMime.Text = \"MIME Type\";\n            this.chMime.Width = 120;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 120;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(649, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to manage the list of file name extensions and associated conten\" +\n    \"t types that are served as static files by the Web server.\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(132, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"MIME Types\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // MimeMapPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"MimeMapPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chType;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private ColumnHeader chExtension;\n        private ColumnHeader chMime;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/MimeMapPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.MimeMap\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class MimeMapPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly MimeMapPage _owner;\n\n            public PageTaskList(MimeMapPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class MimeMapListViewItem : ListViewItem, IFeatureListViewItem<MimeMapItem>\n        {\n            public MimeMapItem Item { get; }\n\n            private readonly MimeMapPage _page;\n\n            public MimeMapListViewItem(MimeMapItem item, MimeMapPage page)\n                : base(item.FileExtension)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.MimeType));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private MimeMapFeature _feature;\n        private PageTaskList _taskList;\n\n        public MimeMapPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new MimeMapFeature(Module);\n            _feature.MimeMapSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new MimeMapListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (MimeMapListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, EventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void listView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/MimeMapPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>602, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>497, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.MimeMap/MimeMapSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.MimeMap\n{\n    public delegate void MimeMapSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/NewMapItemDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.MimeMap\n{\n    using System;\n    using System.ComponentModel;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewMapItemDialog : DialogForm\n    {\n        public NewMapItemDialog(IServiceProvider serviceProvider, MimeMapItem existing, MimeMapFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = string.Format(\"{0} MIME Type\", existing == null ? \"Add\" : \"Edit\");\n            Item = existing ?? new MimeMapItem(null);\n            if (existing != null)\n            {\n                txtExtension.Text = Item.FileExtension;\n                txtType.Text = Item.MimeType;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.FileExtension = txtExtension.Text;\n                    Item.MimeType = txtType.Text;\n                    if (feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"This MIME map already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtExtension, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtType, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtExtension.Text)\n                        && !string.IsNullOrWhiteSpace(txtType.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public MimeMapItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/NewMapItemDialog.designer.cs",
    "content": "﻿namespace JexusManager.Features.MimeMap\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewMapItemDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtExtension = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtType = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(227, 131);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(126, 131);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 9);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(103, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"File name extension:\";\n            // \n            // txtExtension\n            // \n            this.txtExtension.Enabled = false;\n            this.txtExtension.Location = new System.Drawing.Point(15, 25);\n            this.txtExtension.Name = \"txtExtension\";\n            this.txtExtension.Size = new System.Drawing.Size(133, 20);\n            this.txtExtension.TabIndex = 6;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 64);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(61, 13);\n            this.label2.TabIndex = 7;\n            this.label2.Text = \"MIME type:\";\n            // \n            // txtType\n            // \n            this.txtType.Location = new System.Drawing.Point(15, 80);\n            this.txtType.Name = \"txtType\";\n            this.txtType.Size = new System.Drawing.Size(307, 20);\n            this.txtType.TabIndex = 8;\n            // \n            // NewMapItemDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(334, 166);\n            this.Controls.Add(this.txtType);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtExtension);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewMapItemDialog\";\n            this.Text = \"Add MIME Type\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtExtension;\n        private Label label2;\n        private TextBox txtType;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/NewMapItemDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.MimeMap/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"fd1a63c6-458f-496b-9923-80eca082c7ec\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.MimeMap.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.MimeMap.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap mime_map_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"mime_map_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.MimeMap/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"mime_map_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\mime_map_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.MimeMap/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Modules/GlobalModule.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Modules\n{\n    using Microsoft.Web.Administration;\n    using System.Collections.Generic;\n    using System.Linq;\n\n    internal class GlobalModule : IItem<GlobalModule>\n    {\n        public GlobalModule(ConfigurationElement element)\n        {\n            if (element == null)\n            {\n                Name = string.Empty;\n                Image = string.Empty;\n                PreConditions = new List<string>(0);\n                return;\n            }\n\n            Name = (string)element[\"name\"];\n            Image = (string)element[\"image\"];\n            var content = (string)element[\"preCondition\"];\n            PreConditions = content.Split(',').ToList();\n            Element = element;\n        }\n\n        public List<string> PreConditions { get; set; }\n\n        public string Name { get; set; }\n\n        public string Image { get; set; }\n\n        public bool Loaded { get; set; }\n\n        public bool Equals(GlobalModule other)\n        {\n            return Match(other) && other.Image == Image;\n        }\n\n        public string Flag { get; set; }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"image\"] = Image;\n            Element[\"preCondition\"] = PreConditions.Combine(\",\");\n        }\n\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(GlobalModule other)\n        {\n            return other != null && other.Name == Name;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/JexusManager.Features.Modules.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Modules</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Modules/ModulesFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.Modules\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Reflection;\n    using System.Windows.Forms;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class ModulesFeature : FeatureBase<ModulesItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly ModulesFeature _owner;\n\n            public FeatureTaskList(ModulesFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (_owner.IsInOrder)\n                {\n                    result.Add(GetMoveUpTaskItem(_owner.CanMoveUp));\n                    result.Add(GetMoveDownTaskItem(_owner.CanMoveDown));\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Unorder\", \"View Unordered List...\", string.Empty).SetUsage());\n                }\n                else\n                {\n                    result.Add(new MethodTaskItem(\"AddManaged\", \"Add Managed Module...\", string.Empty).SetUsage());\n                    result.Add(new MethodTaskItem(\"Add\", \"Configure Native Modules...\", string.Empty).SetUsage());\n                    if (_owner.SelectedItem != null)\n                    {\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage(_owner.SelectedItem.IsManaged));\n                        result.Add(RemoveTaskItem);\n                    }\n\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    if (_owner.CanRevert)\n                    {\n                        result.Add(RevertTaskItem);\n                    }\n\n                    result.Add(new MethodTaskItem(\"InOrder\", \"View Ordered List...\", string.Empty).SetUsage());\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddManaged()\n            {\n                _owner.AddManaged();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.Rename();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveUp()\n            {\n                _owner.MoveUp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveDown()\n            {\n                _owner.MoveDown();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void InOrder()\n            {\n                _owner.InOrder();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Unorder()\n            {\n                _owner.Unorder();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n        }\n\n        public ModulesFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            GlobalModules = new List<GlobalModule>();\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n\n            ConfigurationSection globalSection = service.GetSection(\"system.webServer/globalModules\", null, false);\n            ConfigurationElementCollection globalCollection = globalSection.GetCollection();\n            foreach (ConfigurationElement addElement in globalCollection)\n            {\n                GlobalModules.Add(new GlobalModule(addElement));\n            }\n\n            CanRevert = service.Scope != ManagementScope.Server;\n            IsInOrder = false;\n            LoadItems();\n        }\n\n        public override void LoadItems()\n        {\n            Items.Clear();\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            ConfigurationElementCollection collection = GetCollection(service);\n            foreach (ConfigurationElement addElement in collection)\n            {\n                var item = new ModulesItem(addElement);\n                item.Load(this);\n                Items.Add(item);\n            }\n\n            OnSettingsSaved();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            // server level modules are in \"\" location.\n            ConfigurationSection section = service.Scope == ManagementScope.Server ? service.GetSection(\"system.webServer/modules\", string.Empty) : service.GetSection(\"system.webServer/modules\", null, false);\n            return section.GetCollection();\n        }\n\n        public List<GlobalModule> GlobalModules { get; set; }\n\n        public void Add()\n        {\n            using (var dialog = new NativeModulesDialog(Module, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                foreach (var item in dialog.Items)\n                {\n                    Items.Add(item);\n                    SelectedItem = item;\n                    // server level modules are in \"\" location.\n                    ConfigurationElementCollection collection = GetCollection(service);\n                    item.AppendTo(collection);\n                }\n\n                // TODO: how to add item?\n                service.ServerManager.CommitChanges();\n            }\n            OnSettingsSaved();\n        }\n\n        public void AddManaged()\n        {\n            using var dialog = new NewModuleDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void AddGlobal(GlobalModule item)\n        {\n            GlobalModules.Add(item);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            ConfigurationSection globalSection = service.GetSection(\"system.webServer/globalModules\", null, false);\n            ConfigurationElementCollection globalCollection = globalSection.GetCollection();\n            item.AppendTo(globalCollection);\n            service.ServerManager.CommitChanges();\n        }\n\n        public void RemoveGlobal(GlobalModule item)\n        {\n            GlobalModules.Remove(item);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            ConfigurationSection globalSection = service.GetSection(\"system.webServer/globalModules\", null, false);\n            ConfigurationElementCollection globalCollection = globalSection.GetCollection();\n            globalCollection.Remove(item.Element);\n            service.ServerManager.CommitChanges();\n        }\n\n        public void Remove()\n        {\n            // TODO: add multiple support\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected module or modules?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(ModulesItem item)\n        {\n            using var dialog = new NewModuleDialog(Module, SelectedItem, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange(\"No Grouping\", \"Entry Type\", \"Module Type\");\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[3].Text;\n                case \"Module Type\":\n                    return item.SubItems[2].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        public void Rename()\n        {\n        }\n\n        public void MoveUp()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveUpItem();\n        }\n\n        public void MoveDown()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveDownItem();\n        }\n\n        public void InOrder()\n        {\n            IsInOrder = true;\n            OnSettingsSaved();\n        }\n\n        public void Unorder()\n        {\n            IsInOrder = false;\n            OnSettingsSaved();\n        }\n\n        public void Revert()\n        {\n            if (!CanRevert)\n            {\n                throw new InvalidOperationException(\"Revert operation cannot be done at server level\");\n            }\n\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                dialog.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RevertItems();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            ModulesSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210521\");\n            return false;\n        }\n\n        public bool IsInOrder { get; private set; }\n\n        public bool CanRevert { get; private set; }\n\n        public ModulesSettingsSavedEventHandler ModulesSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"Modules\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/ModulesItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Modules\n{\n    using System.Collections.Generic;\n    using System.Linq;\n\n    using Microsoft.Web.Administration;\n\n    internal class ModulesItem : IItem<ModulesItem>\n    {\n        public ModulesItem(ConfigurationElement element)\n        {\n            Element = element;\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inhertied\";\n            if (element == null)\n            {\n                PreConditions = new List<string>();\n                Type = string.Empty;\n                return;\n            }\n\n            Name = (string)element[\"name\"];\n            Type = (string)element[\"type\"];\n            var content = (string)element[\"preCondition\"];\n            PreConditions = content.Split(',').ToList();\n\n            IsLocked = element.GetIsLocked();\n            if (!string.IsNullOrWhiteSpace(Type))\n            {\n                IsManaged = true;\n            }\n        }\n\n        public ModulesItem Load(ModulesFeature feature)\n        {\n            if (IsManaged)\n            {\n                return this;\n            }\n\n            foreach (var item in feature.GlobalModules)\n            {\n                if (item.Name == Name)\n                {\n                    Type = item.Image;\n                    item.Loaded = true;\n                    GlobalModule = item;\n                    IsManaged = false;\n                    break;\n                }\n            }\n\n            return this;\n        }\n\n        public string IsLocked { get; set; }\n\n        public GlobalModule GlobalModule { get; set; }\n\n        public List<string> PreConditions { get; set; }\n\n        public string Type { get; set; }\n\n        public string Name { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public string Flag { get; set; }\n\n        public bool IsManaged { get; set; }\n\n        public bool ForManagedOnly\n        {\n            get\n            {\n                return PreConditions.Contains(\"managedHandler\");\n            }\n\n            set\n            {\n                var current = PreConditions.Contains(\"managedHandler\");\n                if (value == current)\n                {\n                    return;\n                }\n\n                if (value)\n                {\n                    PreConditions.Add(\"managedHandler\");\n                }\n                else\n                {\n                    PreConditions.Remove(\"managedHandler\");\n                }\n            }\n        }\n\n        public string ModuleName\n        {\n            get\n            {\n                return IsManaged\n                    ? Type\n                    : GlobalModule == null\n                        ? string.Empty\n                        : GlobalModule.Image;\n            }\n        }\n\n        public bool Equals(ModulesItem other)\n        {\n            // all properties\n            return Match(other) && other.Type == Type;\n        }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            if (IsManaged)\n            {\n                Element[\"type\"] = Type;\n            }\n\n            Element[\"preCondition\"] = PreConditions.Combine(\",\");\n            Element.SetIsLocked(IsLocked);\n        }\n\n        public bool Match(ModulesItem other)\n        {\n            // match combined keys.\n            return other != null && other.Name == Name;\n        }\n\n        public void Unload()\n        {\n            if (GlobalModule == null)\n            {\n                return;\n            }\n\n            GlobalModule.Loaded = false;\n            GlobalModule = null;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/ModulesModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Modules\n{\n    using System;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n    using Properties;\n\n    internal class ModulesModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(ModulesPage), \"Modules\",\n                \"Configure native and managed code modules that process requests on the Web server\", Resources.modules_36,\n                Resources.modules_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/ModulesModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Modules\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class ModulesModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(ModulesModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/ModulesPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Modules\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ModulesPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chCode = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chModule = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chCode,\n            this.chModule,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 180;\n            // \n            // chCode\n            // \n            this.chCode.Text = \"Code\";\n            this.chCode.Width = 180;\n            // \n            // chModule\n            // \n            this.chModule.Text = \"Module Type\";\n            this.chModule.Width = 120;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 120;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(551, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to configure the native and managed code modules that process re\" +\n    \"quests made to the Web server.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(94, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Modules\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // ModulesPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ModulesPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chType;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private ColumnHeader chName;\n        private ColumnHeader chCode;\n        private ColumnHeader chModule;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/ModulesPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Modules\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class ModulesPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly ModulesPage _owner;\n\n            public PageTaskList(ModulesPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class ModulesListViewItem : ListViewItem, IFeatureListViewItem<ModulesItem>\n        {\n            public ModulesItem Item { get; }\n\n            private readonly ModulesPage _page;\n\n            public ModulesListViewItem(ModulesItem item, ModulesPage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.ModuleName));\n                SubItems.Add(new ListViewSubItem(this, item.IsManaged ? \"Managed\" : \"Native\"));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private ModulesFeature _feature;\n        private PageTaskList _taskList;\n\n        public ModulesPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new ModulesFeature(Module);\n            _feature.ModulesSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            toolStrip2.Visible = !_feature.IsInOrder;\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new ModulesListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (ModulesListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/ModulesPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>602, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>497, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Modules/ModulesSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Modules\n{\n    public delegate void ModulesSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/NativeModulesDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Modules\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class NativeModulesDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lvModules = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label1 = new System.Windows.Forms.Label();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnRegister = new System.Windows.Forms.Button();\n            this.btnEdit = new System.Windows.Forms.Button();\n            this.btnRemove = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // lvModules\n            // \n            this.lvModules.CheckBoxes = true;\n            this.lvModules.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName});\n            this.lvModules.FullRowSelect = true;\n            this.lvModules.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;\n            this.lvModules.HideSelection = false;\n            this.lvModules.Location = new System.Drawing.Point(12, 25);\n            this.lvModules.MultiSelect = false;\n            this.lvModules.Name = \"lvModules\";\n            this.lvModules.Size = new System.Drawing.Size(300, 270);\n            this.lvModules.TabIndex = 1;\n            this.lvModules.UseCompatibleStateImageBehavior = false;\n            this.lvModules.View = System.Windows.Forms.View.Details;\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 350;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(237, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Select one or more registered modules to enable:\";\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(347, 301);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 3;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(251, 301);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 4;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnRegister\n            // \n            this.btnRegister.Location = new System.Drawing.Point(318, 25);\n            this.btnRegister.Name = \"btnRegister\";\n            this.btnRegister.Size = new System.Drawing.Size(124, 23);\n            this.btnRegister.TabIndex = 5;\n            this.btnRegister.Text = \"Register...\";\n            this.btnRegister.UseVisualStyleBackColor = true;\n            // \n            // btnEdit\n            // \n            this.btnEdit.Enabled = false;\n            this.btnEdit.Location = new System.Drawing.Point(318, 54);\n            this.btnEdit.Name = \"btnEdit\";\n            this.btnEdit.Size = new System.Drawing.Size(124, 23);\n            this.btnEdit.TabIndex = 6;\n            this.btnEdit.Text = \"Edit...\";\n            this.btnEdit.UseVisualStyleBackColor = true;\n            // \n            // btnRemove\n            // \n            this.btnRemove.Enabled = false;\n            this.btnRemove.Location = new System.Drawing.Point(318, 83);\n            this.btnRemove.Name = \"btnRemove\";\n            this.btnRemove.Size = new System.Drawing.Size(124, 23);\n            this.btnRemove.TabIndex = 7;\n            this.btnRemove.Text = \"Remove\";\n            this.btnRemove.UseVisualStyleBackColor = true;\n            // \n            // NativeModulesDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(454, 336);\n            this.Controls.Add(this.btnRemove);\n            this.Controls.Add(this.btnEdit);\n            this.Controls.Add(this.btnRegister);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.lvModules);\n            this.Name = \"NativeModulesDialog\";\n            this.Text = \"Configure Native Modules\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private ListView lvModules;\n        private ColumnHeader chName;\n        private Label label1;\n        private Button btnCancel;\n        private Button btnOK;\n        private Button btnRegister;\n        private Button btnEdit;\n        private Button btnRemove;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/NativeModulesDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Modules\n{\n    using System;\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class NativeModulesDialog : DialogForm\n    {\n        public NativeModulesDialog(IServiceProvider serviceProvider, ModulesFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            if (feature.CanRevert)\n            {\n                btnRegister.Visible = btnEdit.Visible = btnRemove.Visible = false;\n                lvModules.Width += 130;\n            }\n\n            foreach (var global in feature.GlobalModules)\n            {\n                if (feature.Items.Any(module => module.Name == global.Name))\n                {\n                    continue;\n                }\n\n                var item = lvModules.Items.Add(global.Name);\n                item.Tag = global;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Items = new List<ModulesItem>();\n                    foreach (ListViewItem item in lvModules.Items)\n                    {\n                        if (!item.Checked)\n                        {\n                            continue;\n                        }\n\n                        var module = (GlobalModule)item.Tag;\n                        module.Loaded = true;\n                        Items.Add(new ModulesItem(null) { Name = module.Name }.Load(feature));\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(lvModules, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnEdit.Enabled = btnRemove.Enabled = lvModules.SelectedItems.Count > 0;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRegister, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using var dialog = new NewNativeDialog(ServiceProvider, null);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n\n                    var item = lvModules.Items.Add(dialog.Item.Name);\n                    item.Tag = dialog.Item;\n                    feature.AddGlobal(dialog.Item);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnEdit, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    GlobalModule item = (GlobalModule)lvModules.SelectedItems[0].Tag;\n                    using var dialog = new NewNativeDialog(ServiceProvider, item);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n\n                    dialog.Item.Apply();\n                    lvModules.SelectedItems[0].Text = dialog.Item.Name;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRemove, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    if (\n                        dialog.ShowMessage(\"Are you sure that you want to remove the selected native module registration?\", \"Confirm Remove\",\n                            MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                        DialogResult.Yes)\n                    {\n                        return;\n                    }\n\n                    GlobalModule item = (GlobalModule)lvModules.SelectedItems[0].Tag;\n                    feature.RemoveGlobal(item);\n                    lvModules.SelectedItems[0].Remove();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public List<ModulesItem> Items { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/NativeModulesDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Modules/NewModuleDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Modules\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewModuleDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtPath = new System.Windows.Forms.ComboBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbManagedHandler = new System.Windows.Forms.CheckBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(317, 186);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(216, 186);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 9);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(38, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(269, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(15, 82);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(360, 21);\n            this.txtPath.TabIndex = 8;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 66);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(34, 13);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"Type:\";\n            // \n            // cbManagedHandler\n            // \n            this.cbManagedHandler.AutoSize = true;\n            this.cbManagedHandler.Location = new System.Drawing.Point(15, 130);\n            this.cbManagedHandler.Name = \"cbManagedHandler\";\n            this.cbManagedHandler.Size = new System.Drawing.Size(361, 17);\n            this.cbManagedHandler.TabIndex = 10;\n            this.cbManagedHandler.Text = \"Invoke only for requests to ASP.NET applications or managed handlers\";\n            this.cbManagedHandler.UseVisualStyleBackColor = true;\n            // \n            // NewModuleDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(424, 221);\n            this.Controls.Add(this.cbManagedHandler);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewModuleDialog\";\n            this.Text = \"Add Managed Module\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtName;\n        private ComboBox txtPath;\n        private Label label1;\n        private CheckBox cbManagedHandler;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/NewModuleDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Modules\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewModuleDialog : DialogForm\n    {\n        public NewModuleDialog(IServiceProvider serviceProvider, ModulesItem existing, ModulesFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add Managed Module\" : \"Edit Managed Module\";\n            txtName.ReadOnly = existing != null;\n            Item = existing ?? new ModulesItem(null);\n            if (existing != null)\n            {\n                txtPath.Text = Item.Type;\n                txtName.Text = Item.Name;\n                cbManagedHandler.Checked = Item.ForManagedOnly;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Type = txtPath.Text;\n                    Item.Name = txtName.Text;\n                    Item.ForManagedOnly = cbManagedHandler.Checked;\n                    if (!txtName.ReadOnly && feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"A module with this name already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                                    && !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ModulesItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/NewModuleDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Modules/NewNativeDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Modules\n{\n    internal sealed partial class NewNativeDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(327, 136);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(231, 136);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(38, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(12, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(260, 20);\n            this.txtName.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 57);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(32, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Path:\";\n            // \n            // txtPath\n            // \n            this.txtPath.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtPath.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem;\n            this.txtPath.Location = new System.Drawing.Point(12, 73);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(372, 20);\n            this.txtPath.TabIndex = 5;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(390, 71);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(30, 23);\n            this.btnBrowse.TabIndex = 6;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // NewNativeDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(434, 171);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewNativeDialog\";\n            this.Text = \"Register Native Module\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Button btnCancel;\n        private System.Windows.Forms.Button btnOK;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.TextBox txtName;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.TextBox txtPath;\n        private System.Windows.Forms.Button btnBrowse;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/NewNativeDialog.cs",
    "content": "﻿using System.ComponentModel;\n// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Modules\n{\n    using System;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewNativeDialog : DialogForm\n    {\n        public NewNativeDialog(IServiceProvider serviceProvider, GlobalModule existing)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            if (existing != null)\n            {\n                txtName.Text = existing.Name;\n                txtPath.Text = existing.Image;\n                Text = \"Edit Native Module Registration\";\n                txtName.SelectAll();\n                Item = existing;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowOpenFileDialog(txtPath, \"(*.dll)|*.dll|All Files (*.*)|*.*\", null);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                                   && !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (Item == null)\n                    {\n                        Item = new GlobalModule(null);\n                    }\n\n                    Item.Name = txtName.Text;\n                    Item.Image = txtPath.Text;\n\n                    try\n                    {\n                        var bit32Condition = \"bitness32\";\n                        var bit64Condition = \"bitness64\";\n                        var bit32 = DialogHelper.GetImageArchitecture(txtPath.Text);\n                        if (bit32 && !Item.PreConditions.Contains(bit32Condition))\n                        {\n                            Item.PreConditions.Add(bit32Condition);\n                        }\n                        else if (!bit32 && !Item.PreConditions.Contains(bit64Condition))\n                        {\n                            Item.PreConditions.Add(bit64Condition);\n                        }\n                    }\n                    catch (Exception)\n                    {\n                        ShowMessage(\n                            \"The specific module is invalid.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    ShowMessage(\"The module has been added successfully, but its section definition(s) might haven't yet been added to the applicationHost.config file. You can add them manually. Please refer to its documentation for more details.\",\n                        MessageBoxButtons.OK,\n                        MessageBoxIcon.Warning,\n                        MessageBoxDefaultButton.Button1);\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public GlobalModule Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/NewNativeDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Modules/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"8bfab6bc-57c1-44fc-88e2-b3ce5b75be9f\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager.Features.Handlers, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.Modules/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Modules.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Modules.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap modules_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"modules_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Modules/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"modules_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\modules_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Modules/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/AppliesToItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Administration;\n\n    internal class AppliesToItem\n    {\n        public ConfigurationElement Child { get; set; }\n\n        public AppliesToItem(ConfigurationElement child)\n        {\n            this.Child = child;\n            if (child == null)\n            {\n                return;\n            }\n\n            this.FileExtension = (string)child[\"fileExtension\"];\n        }\n\n        public string FileExtension { get; set; }\n\n        public void Apply()\n        {\n            Child[\"fileExtension\"] = FileExtension;\n        }\n\n        public void AppendTo(ConfigurationElementCollection appliesToCollection)\n        {\n            if (Child == null)\n            {\n                Child = appliesToCollection.CreateElement();\n                appliesToCollection.Add(Child);\n            }\n\n            Apply();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/DenyStringsItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Administration;\n\n    internal class DenyStringsItem\n    {\n        public ConfigurationElement Child { get; set; }\n\n        public DenyStringsItem(ConfigurationElement child)\n        {\n            this.Child = child;\n            if (child == null)\n            {\n                return;\n            }\n\n            this.DenyString = (string)child[\"string\"];\n        }\n\n        public string DenyString { get; set; }\n\n        public void Apply()\n        {\n            Child[\"string\"] = DenyString;\n        }\n\n        public void AppendTo(ConfigurationElementCollection denyStringsCollection)\n        {\n            if (Child == null)\n            {\n                Child = denyStringsCollection.CreateElement();\n                denyStringsCollection.Add(Child);\n            }\n\n            Apply();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/FileExtensionsFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class FileExtensionsFeature : RequestFilteringFeature<FileExtensionsItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly FileExtensionsFeature _owner;\n\n            public FeatureTaskList(FileExtensionsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n\n                result.Add(new MethodTaskItem(\"AddExtension\", \"Allow File Name Extension...\", string.Empty).SetUsage());\n                result.Add(\n                    new MethodTaskItem(\"AddDenyExtension\", \"Deny File Name Extension...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddExtension()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddDenyExtension()\n            {\n                _owner.AddDeny();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n        }\n\n        public FileExtensionsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        private TaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Add()\n        {\n            CreateExtension(true);\n        }\n\n        public void AddDeny()\n        {\n            CreateExtension(false);\n        }\n\n        private void CreateExtension(bool allowed)\n        {\n            using var dialog = new NewExtensionDialog(Module, this, allowed);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\n                    \"Are you sure that you want to remove the selected file extension?\",\n                    Name,\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1) != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public override void Load()\n        {\n            LoadItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection requestFilteringSection = service.GetSection(\"system.webServer/security/requestFiltering\");\n            return requestFilteringSection.GetCollection(\"fileExtensions\");\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526\");\n            return true;\n        }\n\n        public override string Name\n        {\n            get\n            {\n                return \"File Name Extensions\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/FileExtensionsItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Administration;\n\n    internal class FileExtensionsItem : IItem<FileExtensionsItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(FileExtensionsItem other)\n        {\n            return other != null && other.Extension == Extension;\n        }\n\n        public FileExtensionsItem(ConfigurationElement element)\n        {\n            this.Element = element;\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            if (element == null)\n            {\n                return;\n            }\n\n            Extension = (string)element[\"fileExtension\"];\n            Allowed = (bool)element[\"allowed\"];\n        }\n\n        public string Flag { get; set; }\n\n        public bool Allowed { get; set; }\n\n        public string Extension { get; set; }\n\n        public void Apply()\n        {\n            Element[\"fileExtension\"] = Extension;\n            Element[\"allowed\"] = Allowed;\n        }\n\n        public bool Equals(FileExtensionsItem other)\n        {\n            return Match(other) && other.Allowed == Allowed;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/FilteringRulesFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class FilteringRulesFeature : RequestFilteringFeature<FilteringRulesItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly FilteringRulesFeature _owner;\n\n            public FeatureTaskList(FilteringRulesFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n\n                result.Add(new MethodTaskItem(\"AddRule\", \"Add Filtering Rule...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(new MethodTaskItem(\"EditRule\", \"Edit Filtering Rule...\", string.Empty).SetUsage());\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddRule()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void EditRule()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n        }\n\n        public FilteringRulesFeature(Module module)\n            : base(module)\n        {\n        }\n\n        private TaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewRuleDialog(this.Module, null);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(FilteringRulesItem item)\n        {\n            using var dialog = new NewRuleDialog(Module, item);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)this.GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected rule?\", this.Name,\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public override void Load()\n        {\n            LoadItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection requestFilteringSection =\n                service.GetSection(\"system.webServer/security/requestFiltering\");\n            return requestFilteringSection.GetCollection(\"filteringRules\");\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Rules\");\n            return true;\n        }\n\n        public override string Name\n        {\n            get\n            {\n                return \"Rules\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/FilteringRulesItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Text;\n\n    using Microsoft.Web.Administration;\n\n    internal class FilteringRulesItem : IItem<FilteringRulesItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(FilteringRulesItem other)\n        {\n            return other != null && other.Name == Name;\n        }\n\n        public string Name { get; set; }\n\n        public string ScanString\n        {\n            get\n            {\n                var result = new StringBuilder(\"Header\");\n                if (ScanUrl)\n                {\n                    result.Insert(0, \"Url, \");\n                }\n\n                if (ScanQueryString)\n                {\n                    result.Insert(0, \"Query string, \");\n                }\n\n                return result.ToString();\n            }\n        }\n\n        public string AppliesToString\n        {\n            get\n            {\n                return Extensions.Select(item => item.FileExtension).Combine(\", \");\n            }\n        }\n\n        public string DenyStringsString\n        {\n            get\n            {\n                return DenyStrings.Select(item => item.DenyString).Combine(\", \");\n            }\n        }\n\n        public bool ScanUrl { get; set; }\n        public bool ScanQueryString { get; set; }\n        public List<ScanHeadersItem> Headers { get; set; }\n        public List<AppliesToItem> Extensions { get; set; }\n        public List<DenyStringsItem> DenyStrings { get; set; }\n        public string Flag { get; set; }\n\n        public FilteringRulesItem(ConfigurationElement element)\n        {\n            Element = element;\n            Headers = new List<ScanHeadersItem>();\n            Extensions = new List<AppliesToItem>();\n            DenyStrings = new List<DenyStringsItem>();\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            if (element == null)\n            {\n                return;\n            }\n\n            Name = (string)element[\"name\"];\n            ScanQueryString = (bool)element[\"scanQueryString\"];\n            ScanUrl = (bool)element[\"scanUrl\"];\n            foreach (ConfigurationElement child in element.GetCollection(\"scanHeaders\"))\n            {\n                Headers.Add(new ScanHeadersItem(child));\n            }\n\n            foreach (ConfigurationElement child in element.GetCollection(\"appliesTo\"))\n            {\n                Extensions.Add(new AppliesToItem(child));\n            }\n\n            foreach (ConfigurationElement child in element.GetCollection(\"denyStrings\"))\n            {\n                DenyStrings.Add(new DenyStringsItem(child));\n            }\n        }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"scanQueryString\"] = ScanQueryString;\n            Element[\"scanUrl\"] = ScanUrl;\n            var collection = Element.GetCollection(\"scanHeaders\");\n            collection.Clear();\n            collection.Delete();\n            foreach (var header in Headers)\n            {\n                header.AppendTo(collection);\n            }\n\n            var appliesToCollection = Element.GetCollection(\"appliesTo\");\n            appliesToCollection.Clear();\n            appliesToCollection.Delete();\n            foreach (var header in Extensions)\n            {\n                header.AppendTo(appliesToCollection);\n            }\n\n            var denyStringsCollection = Element.GetCollection(\"denyStrings\");\n            denyStringsCollection.Clear();\n            denyStringsCollection.Delete();\n            foreach (var header in DenyStrings)\n            {\n                header.AppendTo(denyStringsCollection);\n            }\n        }\n\n        public bool Equals(FilteringRulesItem other)\n        {\n            return Match(other);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/HeadersFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class HeadersFeature : RequestFilteringFeature<HeadersItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly HeadersFeature _owner;\n\n            public FeatureTaskList(HeadersFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n\n                {\n                    result.Add(new MethodTaskItem(\"AddHeader\", \"Add Header...\", string.Empty).SetUsage());\n                    if (_owner.SelectedItem != null)\n                    {\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        result.Add(RemoveTaskItem);\n                    }\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddHeader()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n        }\n\n        public HeadersFeature(Module module)\n            : base(module)\n        {\n        }\n\n        private TaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n        public void Add()\n        {\n            using var dialog = new NewHeaderDialog(this.Module);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            this.AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)this.GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected header?\", this.Name,\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public override void Load()\n        {\n            LoadItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection requestFilteringSection =\n                service.GetSection(\"system.webServer/security/requestFiltering\");\n\n\n            ConfigurationElement childElement = requestFilteringSection.ChildElements[\"requestLimits\"];\n            return childElement.GetCollection(\"headerLimits\");\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Headers\");\n            return true;\n        }\n\n        public override string Name\n        {\n            get\n            {\n                return \"Headers\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/HeadersItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Administration;\n\n    internal class HeadersItem : IItem<HeadersItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(HeadersItem other)\n        {\n            return other != null && other.Header == Header;\n        }\n\n        public HeadersItem(ConfigurationElement element)\n        {\n            this.Element = element;\n            if (element == null)\n            {\n                return;\n            }\n\n            Header = (string)element[\"header\"];\n            SizeLimit = (uint)element[\"sizeLimit\"];\n        }\n\n        public uint SizeLimit { get; set; }\n\n        public string Header { get; set; }\n\n        public void Apply()\n        {\n            Element[\"header\"] = Header;\n            Element[\"sizeLimit\"] = SizeLimit;\n        }\n\n        public string Flag { get; set; }\n\n        public bool Equals(HeadersItem other)\n        {\n            return Match(other) && other.SizeLimit == SizeLimit;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/HiddenSegmentsFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class HiddenSegmentsFeature : RequestFilteringFeature<HiddenSegmentsItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly HiddenSegmentsFeature _owner;\n\n            public FeatureTaskList(HiddenSegmentsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n\n                result.Add(new MethodTaskItem(\"AddSegement\", \"Add Hidden Segment...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddSegment()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n        }\n\n        public HiddenSegmentsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        private TaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewHiddenSegmentDialog(this.Module);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            this.AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)this.GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected hidden segment?\", this.Name,\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public override void Load()\n        {\n            LoadItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection requestFilteringSection =\n                service.GetSection(\"system.webServer/security/requestFiltering\");\n            return requestFilteringSection.GetCollection(\"hiddenSegments\");\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Hidden_Segments\");\n            return true;\n        }\n\n        public override string Name\n        {\n            get\n            {\n                return \" Hidden Segments\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/HiddenSegmentsItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Administration;\n\n    internal class HiddenSegmentsItem : IItem<HiddenSegmentsItem>\n    {\n        public HiddenSegmentsItem(ConfigurationElement element)\n        {\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            Element = element;\n            if (element == null)\n            {\n                return;\n            }\n\n            Segment = (string)element[\"segment\"];\n        }\n\n        public string Segment { get; set; }\n        public string Flag { get; set; }\n        public ConfigurationElement Element { get; set; }\n\n        public bool Equals(HiddenSegmentsItem other)\n        {\n            return Match(other);\n        }\n\n        public bool Match(HiddenSegmentsItem other)\n        {\n            return other != null && other.Segment == Segment;\n        }\n\n        public void Apply()\n        {\n            Element[\"segment\"] = Segment;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/IRequestFilteringFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Management.Client;\n\n    internal interface IRequestFilteringFeature\n    {\n        TaskList GetTaskList();\n\n        bool ShowHelp();\n\n        RequestFilteringSettingsSavedEventHandler RequestFilteringSettingsUpdate { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/JexusManager.Features.RequestFiltering.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.RequestFiltering</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewExtensionDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.RequestFiltering\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal sealed partial class NewExtensionDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(103, 13);\n            this.label1.TabIndex = 7;\n            this.label1.Text = \"File name extension:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(320, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(139, 87);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(240, 87);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // NewExtensionDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 126);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewExtensionDialog\";\n            this.Text = \"Allow File Name Extension\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewHiddenSegmentDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewExtensionDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewExtensionDialog : DialogForm\n    {\n        public NewExtensionDialog(IServiceProvider serviceProvider, FileExtensionsFeature feature, bool allowed)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = string.Format(\"{0} File Name Extension\", allowed ? \"Allow\" : \"Deny\");\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new FileExtensionsItem(null) { Extension = txtName.Text };\n                    if (feature.Items.Any(item => item.Match(Item)))\n                    {\n                        var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                        service.ShowMessage(\n                            \"The file extension specified already exists.\",\n                            Text,\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public FileExtensionsItem Item { get; set; }\n\n        private void NewHiddenSegmentDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Allow_Extension\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewExtensionDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewHeaderDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.RequestFiltering\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal sealed partial class NewHeaderDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lblName = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtLimit = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // lblName\n            // \n            this.lblName.AutoSize = true;\n            this.lblName.Location = new System.Drawing.Point(12, 9);\n            this.lblName.Name = \"lblName\";\n            this.lblName.Size = new System.Drawing.Size(45, 13);\n            this.lblName.TabIndex = 7;\n            this.lblName.Text = \"Header:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(320, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(141, 131);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(242, 131);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 65);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(50, 13);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"Size limit:\";\n            // \n            // txtLimit\n            // \n            this.txtLimit.Location = new System.Drawing.Point(16, 81);\n            this.txtLimit.Name = \"txtLimit\";\n            this.txtLimit.Size = new System.Drawing.Size(320, 20);\n            this.txtLimit.TabIndex = 8;\n            // \n            // NewHeaderDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 166);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtLimit);\n            this.Controls.Add(this.lblName);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewHeaderDialog\";\n            this.Text = \"Allow Query String\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewHiddenSegmentDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label lblName;\n        private TextBox txtName;\n        private Button btnOK;\n        private Button btnCancel;\n        private Label label1;\n        private TextBox txtLimit;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewHeaderDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewHeaderDialog : DialogForm\n    {\n        public NewHeaderDialog(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtLimit, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                && !string.IsNullOrWhiteSpace(txtLimit.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new HeadersItem(null) { Header = txtName.Text, SizeLimit = uint.Parse(txtLimit.Text) };\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public HeadersItem Item { get; set; }\n\n        private void NewHiddenSegmentDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Allow_Header\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewHeaderDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewHiddenSegmentDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.RequestFiltering\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class NewHiddenSegmentDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(87, 13);\n            this.label1.TabIndex = 7;\n            this.label1.Text = \"Hidden segment:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(320, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(139, 87);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(240, 87);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // NewHiddenSegmentDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 126);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewHiddenSegmentDialog\";\n            this.Text = \"Add Hidden Segment\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewHiddenSegmentDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewHiddenSegmentDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class NewHiddenSegmentDialog : DialogForm\n    {\n        public NewHiddenSegmentDialog(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new HiddenSegmentsItem(null);\n                    Item.Segment = txtName.Text;\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public HiddenSegmentsItem Item { get; set; }\n\n        private void NewHiddenSegmentDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Add_Hidden\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewHiddenSegmentDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewQueryDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.RequestFiltering\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal sealed partial class NewQueryDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lblName = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // lblName\n            // \n            this.lblName.AutoSize = true;\n            this.lblName.Location = new System.Drawing.Point(12, 9);\n            this.lblName.Name = \"lblName\";\n            this.lblName.Size = new System.Drawing.Size(66, 13);\n            this.lblName.TabIndex = 7;\n            this.lblName.Text = \"Query string:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(320, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(139, 87);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(240, 87);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // NewQueryDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 126);\n            this.Controls.Add(this.lblName);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewQueryDialog\";\n            this.Text = \"Allow Query String\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewHiddenSegmentDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label lblName;\n        private TextBox txtName;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewQueryDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewQueryDialog : DialogForm\n    {\n        public NewQueryDialog(IServiceProvider serviceProvider, bool allowed)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = allowed ? \"Allow Query String\" : \"Deny Query String\";\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new QueryStringsItem(null, allowed) { QueryString = txtName.Text };\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public QueryStringsItem Item { get; set; }\n\n        private void NewHiddenSegmentDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Allow_Query\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewQueryDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewRuleDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.RequestFiltering\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal sealed partial class NewRuleDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lblName = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.cbUrl = new System.Windows.Forms.CheckBox();\n            this.cbQuery = new System.Windows.Forms.CheckBox();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.dgvHeaders = new System.Windows.Forms.DataGridView();\n            this.groupBox2 = new System.Windows.Forms.GroupBox();\n            this.dgvExtensions = new System.Windows.Forms.DataGridView();\n            this.groupBox3 = new System.Windows.Forms.GroupBox();\n            this.dgvStrings = new System.Windows.Forms.DataGridView();\n            this.chString = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.chExtension = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.chHeader = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.groupBox1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.dgvHeaders)).BeginInit();\n            this.groupBox2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.dgvExtensions)).BeginInit();\n            this.groupBox3.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.dgvStrings)).BeginInit();\n            this.SuspendLayout();\n            // \n            // lblName\n            // \n            this.lblName.AutoSize = true;\n            this.lblName.Location = new System.Drawing.Point(12, 9);\n            this.lblName.Name = \"lblName\";\n            this.lblName.Size = new System.Drawing.Size(38, 13);\n            this.lblName.TabIndex = 7;\n            this.lblName.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(320, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(251, 591);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(352, 591);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // cbUrl\n            // \n            this.cbUrl.AutoSize = true;\n            this.cbUrl.Location = new System.Drawing.Point(15, 62);\n            this.cbUrl.Name = \"cbUrl\";\n            this.cbUrl.Size = new System.Drawing.Size(65, 17);\n            this.cbUrl.TabIndex = 8;\n            this.cbUrl.Text = \"Scan url\";\n            this.cbUrl.UseVisualStyleBackColor = true;\n            // \n            // cbQuery\n            // \n            this.cbQuery.AutoSize = true;\n            this.cbQuery.Location = new System.Drawing.Point(15, 97);\n            this.cbQuery.Name = \"cbQuery\";\n            this.cbQuery.Size = new System.Drawing.Size(108, 17);\n            this.cbQuery.TabIndex = 9;\n            this.cbQuery.Text = \"Scan query string\";\n            this.cbQuery.UseVisualStyleBackColor = true;\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.dgvHeaders);\n            this.groupBox1.Location = new System.Drawing.Point(15, 120);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(432, 130);\n            this.groupBox1.TabIndex = 10;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Scan Headers\";\n            // \n            // dgvHeaders\n            // \n            this.dgvHeaders.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\n            this.dgvHeaders.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\n            this.chHeader});\n            this.dgvHeaders.Location = new System.Drawing.Point(6, 19);\n            this.dgvHeaders.Name = \"dgvHeaders\";\n            this.dgvHeaders.Size = new System.Drawing.Size(420, 105);\n            this.dgvHeaders.TabIndex = 0;\n            // \n            // groupBox2\n            // \n            this.groupBox2.Controls.Add(this.dgvExtensions);\n            this.groupBox2.Location = new System.Drawing.Point(15, 266);\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.Size = new System.Drawing.Size(432, 130);\n            this.groupBox2.TabIndex = 11;\n            this.groupBox2.TabStop = false;\n            this.groupBox2.Text = \"Applied To\";\n            // \n            // dgvExtensions\n            // \n            this.dgvExtensions.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\n            this.dgvExtensions.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\n            this.chExtension});\n            this.dgvExtensions.Location = new System.Drawing.Point(6, 19);\n            this.dgvExtensions.Name = \"dgvExtensions\";\n            this.dgvExtensions.Size = new System.Drawing.Size(420, 105);\n            this.dgvExtensions.TabIndex = 0;\n            // \n            // groupBox3\n            // \n            this.groupBox3.Controls.Add(this.dgvStrings);\n            this.groupBox3.Location = new System.Drawing.Point(15, 418);\n            this.groupBox3.Name = \"groupBox3\";\n            this.groupBox3.Size = new System.Drawing.Size(432, 130);\n            this.groupBox3.TabIndex = 11;\n            this.groupBox3.TabStop = false;\n            this.groupBox3.Text = \"Deny Strings\";\n            // \n            // dgvStrings\n            // \n            this.dgvStrings.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\n            this.dgvStrings.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\n            this.chString});\n            this.dgvStrings.Location = new System.Drawing.Point(6, 19);\n            this.dgvStrings.Name = \"dgvStrings\";\n            this.dgvStrings.Size = new System.Drawing.Size(420, 105);\n            this.dgvStrings.TabIndex = 0;\n            // \n            // chString\n            // \n            this.chString.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;\n            this.chString.HeaderText = \"String\";\n            this.chString.Name = \"chString\";\n            // \n            // chExtension\n            // \n            this.chExtension.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;\n            this.chExtension.HeaderText = \"File Extension\";\n            this.chExtension.Name = \"chExtension\";\n            // \n            // chHeader\n            // \n            this.chHeader.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;\n            this.chHeader.HeaderText = \"Header\";\n            this.chHeader.Name = \"chHeader\";\n            // \n            // NewRuleDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(459, 626);\n            this.Controls.Add(this.groupBox3);\n            this.Controls.Add(this.groupBox2);\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.cbQuery);\n            this.Controls.Add(this.cbUrl);\n            this.Controls.Add(this.lblName);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewRuleDialog\";\n            this.Text = \"Add Filtering Rule\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewHiddenSegmentDialogHelpButtonClicked);\n            this.groupBox1.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.dgvHeaders)).EndInit();\n            this.groupBox2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.dgvExtensions)).EndInit();\n            this.groupBox3.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.dgvStrings)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label lblName;\n        private TextBox txtName;\n        private Button btnOK;\n        private Button btnCancel;\n        private CheckBox cbUrl;\n        private CheckBox cbQuery;\n        private GroupBox groupBox1;\n        private DataGridView dgvHeaders;\n        private DataGridViewTextBoxColumn chHeader;\n        private GroupBox groupBox2;\n        private DataGridView dgvExtensions;\n        private DataGridViewTextBoxColumn chExtension;\n        private GroupBox groupBox3;\n        private DataGridView dgvStrings;\n        private DataGridViewTextBoxColumn chString;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewRuleDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewRuleDialog : DialogForm\n    {\n        public NewRuleDialog(IServiceProvider serviceProvider, FilteringRulesItem existing)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add Filtering Rule\" : \"Edit Filtering Rule\";\n            txtName.ReadOnly = existing != null;\n            if (existing != null)\n            {\n                txtName.Text = existing.Name;\n                dgvHeaders.DataSource = existing.Headers;\n                dgvExtensions.DataSource = existing.Extensions;\n                dgvStrings.DataSource = existing.DenyStrings;\n                cbUrl.Checked = existing.ScanUrl;\n                cbQuery.Checked = existing.ScanQueryString;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new FilteringRulesItem(null) { Name = txtName.Text };\n                    Item.ScanQueryString = cbQuery.Checked;\n                    Item.ScanUrl = cbUrl.Checked;\n                    Item.Headers.Clear();\n                    foreach (DataGridViewRow row in dgvHeaders.Rows)\n                    {\n                        if (row.IsNewRow)\n                        {\n                            continue;\n                        }\n\n                        var header = row.Cells[0].Value.ToString();\n                        Item.Headers.Add(new ScanHeadersItem(null) { RequestHeader = header });\n                    }\n\n                    Item.Extensions.Clear();\n                    foreach (DataGridViewRow row in dgvExtensions.Rows)\n                    {\n                        if (row.IsNewRow)\n                        {\n                            continue;\n                        }\n\n                        var header = row.Cells[0].Value.ToString();\n                        Item.Extensions.Add(new AppliesToItem(null) { FileExtension = header });\n                    }\n\n                    Item.DenyStrings.Clear();\n                    foreach (DataGridViewRow row in dgvStrings.Rows)\n                    {\n                        if (row.IsNewRow)\n                        {\n                            continue;\n                        }\n\n                        var header = row.Cells[0].Value.ToString();\n                        Item.DenyStrings.Add(new DenyStringsItem(null) { DenyString = header });\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(dgvHeaders, \"RowsAdded\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(dgvExtensions, \"RowsAdded\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(dgvStrings, \"RowsAdded\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n    && dgvHeaders.RowCount > 1\n    && dgvExtensions.RowCount > 1\n    && dgvStrings.RowCount > 1;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public FilteringRulesItem Item { get; set; }\n\n        private void NewHiddenSegmentDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Add_Filtering\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewRuleDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"chHeader.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"chExtension.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"chString.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"chExtension.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"chHeader.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewUrlDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.RequestFiltering\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal sealed partial class NewUrlDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lblName = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // lblName\n            // \n            this.lblName.AutoSize = true;\n            this.lblName.Location = new System.Drawing.Point(12, 9);\n            this.lblName.Name = \"lblName\";\n            this.lblName.Size = new System.Drawing.Size(32, 13);\n            this.lblName.TabIndex = 7;\n            this.lblName.Text = \"URL:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(320, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(139, 87);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(240, 87);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // NewUrlDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 126);\n            this.Controls.Add(this.lblName);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewUrlDialog\";\n            this.Text = \"Allow URL\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewHiddenSegmentDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label lblName;\n        private TextBox txtName;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewUrlDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewUrlDialog : DialogForm\n    {\n        public NewUrlDialog(IServiceProvider serviceProvider, bool allowed)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = allowed ? \"Allow URL\" : \"Deny Sequence\";\n            lblName.Text = allowed ? \"URL:\" : \"URL sequence\";\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new UrlsItem(null, allowed) { Url = txtName.Text };\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public UrlsItem Item { get; set; }\n\n        private void NewHiddenSegmentDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Add_Sequence\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewUrlDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewVerbDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.RequestFiltering\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal sealed partial class NewVerbDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lblName = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // lblName\n            // \n            this.lblName.AutoSize = true;\n            this.lblName.Location = new System.Drawing.Point(12, 9);\n            this.lblName.Name = \"lblName\";\n            this.lblName.Size = new System.Drawing.Size(66, 13);\n            this.lblName.TabIndex = 7;\n            this.lblName.Text = \"Query string:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(320, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(139, 87);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(240, 87);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // NewVerbDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 126);\n            this.Controls.Add(this.lblName);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewVerbDialog\";\n            this.Text = \"Allow Query String\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewHiddenSegmentDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label lblName;\n        private TextBox txtName;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewVerbDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewVerbDialog : DialogForm\n    {\n        public NewVerbDialog(IServiceProvider serviceProvider, bool allowed)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = allowed ? \"Allow Verb\" : \"Deny Verb\";\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new VerbsItem(null) { Verb = txtName.Text, Allowed = allowed };\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public VerbsItem Item { get; set; }\n\n        private void NewHiddenSegmentDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Allow_Verb\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/NewVerbDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"56d44318-5979-4fc5-9f01-4d7f78709a0e\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.RequestFiltering.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.RequestFiltering.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap extensions_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"extensions_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap headers_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"headers_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap hidden_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"hidden_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap map_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"map_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap query_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"query_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap request_filtering_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"request_filtering_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap url_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"url_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap verbs_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"verbs_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"extensions_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\extensions_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"headers_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\headers_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"hidden_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\hidden_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"map_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\map_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"query_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\query_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"request_filtering_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\request_filtering_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"url_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\url_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"verbs_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\verbs_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/QueryStringsFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class QueryStringsFeature : RequestFilteringFeature<QueryStringsItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly QueryStringsFeature _owner;\n\n            public FeatureTaskList(QueryStringsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"AddQuery\", \"Allow Query String...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"AddDenyQuery\", \"Deny Query String...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddQuery()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddDenyQuery()\n            {\n                _owner.AddDeny();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n        }\n\n        public QueryStringsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        private TaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewQueryDialog(Module, true);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void AddDeny()\n        {\n            using var dialog = new NewQueryDialog(Module, false);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected query string?\", Name,\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/security/requestFiltering\");\n            ConfigurationElement hiddenSegmentsElement = section.ChildElements[\"alwaysAllowedQueryStrings\"];\n            return hiddenSegmentsElement.GetCollection();\n        }\n\n        protected override ConfigurationElementCollection GetSecondaryCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/security/requestFiltering\");\n            ConfigurationElement hiddenSegmentsElement = section.ChildElements[\"denyQueryStringSequences\"];\n            return hiddenSegmentsElement.GetCollection();\n        }\n\n        public override void Load()\n        {\n            LoadItems();\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Query_Strings\");\n            return true;\n        }\n\n        public override string Name\n        {\n            get\n            {\n                return \"Query Strings\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/QueryStringsItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Administration;\n\n    internal class QueryStringsItem : IDuoItem<QueryStringsItem>\n    {\n        public bool Allowed { get; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(QueryStringsItem other)\n        {\n            return other != null && other.QueryString == QueryString;\n        }\n\n        public QueryStringsItem(ConfigurationElement element, bool allowed)\n        {\n            this.Allowed = allowed;\n            this.Element = element;\n            if (element == null)\n            {\n                return;\n            }\n\n            if (allowed)\n            {\n                QueryString = (string)element[\"queryString\"];\n            }\n            else\n            {\n                QueryString = (string)element[\"sequence\"];\n            }\n        }\n\n        public string QueryString { get; set; }\n\n        public void Apply()\n        {\n            if (Allowed)\n            {\n                Element[\"queryString\"] = QueryString;\n            }\n            else\n            {\n                Element[\"sequence\"] = QueryString;\n            }\n        }\n\n        public string Flag { get; set; }\n\n        public bool Equals(QueryStringsItem other)\n        {\n            return Match(other) && other.Allowed == Allowed;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/RequestFilteringFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal abstract class RequestFilteringFeature<T> : FeatureBase<T>, IRequestFilteringFeature\n        where T : class, IItem<T>\n    {\n        protected RequestFilteringFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        public abstract TaskList GetTaskList();\n\n        public abstract void Load();\n\n        protected override void OnSettingsSaved()\n        {\n            this.RequestFilteringSettingsUpdate?.Invoke();\n        }\n\n        public abstract bool ShowHelp();\n\n        public RequestFilteringSettingsSavedEventHandler RequestFilteringSettingsUpdate { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public abstract string Name { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/RequestFilteringModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class RequestFilteringModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(RequestFilteringPage), \"Request Filtering\",\n                \"Use this feature to configure filtering rules\", Resources.request_filtering_36,\n                Resources.request_filtering_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/RequestFilteringModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class RequestFilteringModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(RequestFilteringModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/RequestFilteringPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class RequestFilteringPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            components = new Container();\n            splitContainer1 = new SplitContainer();\n            cmsActionPanel = new ContextMenuStrip(components);\n            panel2 = new Panel();\n            tabControl1 = new TabControl();\n            tpExtensions = new TabPage();\n            lvExtensions = new ListView();\n            chExtension = new ColumnHeader();\n            chAllowedExtension = new ColumnHeader();\n            tpRules = new TabPage();\n            lvRules = new ListView();\n            columnHeader2 = new ColumnHeader();\n            columnHeader10 = new ColumnHeader();\n            columnHeader11 = new ColumnHeader();\n            columnHeader12 = new ColumnHeader();\n            tpSegments = new TabPage();\n            lvSegments = new ListView();\n            chName = new ColumnHeader();\n            tpUrl = new TabPage();\n            lvUrls = new ListView();\n            columnHeader3 = new ColumnHeader();\n            columnHeader9 = new ColumnHeader();\n            tpVerbs = new TabPage();\n            lvVerbs = new ListView();\n            columnHeader4 = new ColumnHeader();\n            columnHeader8 = new ColumnHeader();\n            tpHeaders = new TabPage();\n            lvHeaders = new ListView();\n            columnHeader5 = new ColumnHeader();\n            columnHeader7 = new ColumnHeader();\n            tpQuery = new TabPage();\n            lvQueries = new ListView();\n            columnHeader6 = new ColumnHeader();\n            columnHeader1 = new ColumnHeader();\n            imageList1 = new ImageList(components);\n            label2 = new Label();\n            pictureBox1 = new PictureBox();\n            label3 = new Label();\n            tableLayoutPanel1 = new TableLayoutPanel();\n            panel1 = new Panel();\n            label1 = new Label();\n            tsActionPanel = new ToolStrip();\n            ((ISupportInitialize)splitContainer1).BeginInit();\n            splitContainer1.Panel1.SuspendLayout();\n            splitContainer1.Panel2.SuspendLayout();\n            splitContainer1.SuspendLayout();\n            panel2.SuspendLayout();\n            tabControl1.SuspendLayout();\n            tpExtensions.SuspendLayout();\n            tpRules.SuspendLayout();\n            tpSegments.SuspendLayout();\n            tpUrl.SuspendLayout();\n            tpVerbs.SuspendLayout();\n            tpHeaders.SuspendLayout();\n            tpQuery.SuspendLayout();\n            ((ISupportInitialize)pictureBox1).BeginInit();\n            tableLayoutPanel1.SuspendLayout();\n            panel1.SuspendLayout();\n            SuspendLayout();\n            // \n            // splitContainer1\n            // \n            splitContainer1.Dock = DockStyle.Fill;\n            splitContainer1.Location = new System.Drawing.Point(0, 0);\n            splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            splitContainer1.Panel1.ContextMenuStrip = cmsActionPanel;\n            splitContainer1.Panel1.Controls.Add(panel2);\n            splitContainer1.Panel1.Controls.Add(pictureBox1);\n            splitContainer1.Panel1.Controls.Add(label3);\n            // \n            // splitContainer1.Panel2\n            // \n            splitContainer1.Panel2.Controls.Add(tableLayoutPanel1);\n            splitContainer1.Panel2MinSize = 200;\n            splitContainer1.Size = new System.Drawing.Size(800, 600);\n            splitContainer1.SplitterDistance = 580;\n            splitContainer1.TabIndex = 4;\n            splitContainer1.SplitterMoved += SplitContainer1SplitterMoved;\n            // \n            // cmsActionPanel\n            // \n            cmsActionPanel.Name = \"cmsActionPanel\";\n            cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            panel2.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;\n            panel2.Controls.Add(tabControl1);\n            panel2.Controls.Add(label2);\n            panel2.Location = new System.Drawing.Point(10, 50);\n            panel2.Name = \"panel2\";\n            panel2.Size = new System.Drawing.Size(560, 540);\n            panel2.TabIndex = 6;\n            // \n            // tabControl1\n            // \n            tabControl1.Controls.Add(tpExtensions);\n            tabControl1.Controls.Add(tpRules);\n            tabControl1.Controls.Add(tpSegments);\n            tabControl1.Controls.Add(tpUrl);\n            tabControl1.Controls.Add(tpVerbs);\n            tabControl1.Controls.Add(tpHeaders);\n            tabControl1.Controls.Add(tpQuery);\n            tabControl1.Dock = DockStyle.Fill;\n            tabControl1.ImageList = imageList1;\n            tabControl1.Location = new System.Drawing.Point(0, 13);\n            tabControl1.Name = \"tabControl1\";\n            tabControl1.SelectedIndex = 0;\n            tabControl1.Size = new System.Drawing.Size(560, 527);\n            tabControl1.TabIndex = 2;\n            tabControl1.SelectedIndexChanged += TabControl1SelectedIndexChanged;\n            // \n            // tpExtensions\n            // \n            tpExtensions.Controls.Add(lvExtensions);\n            tpExtensions.Location = new System.Drawing.Point(4, 23);\n            tpExtensions.Name = \"tpExtensions\";\n            tpExtensions.Size = new System.Drawing.Size(552, 500);\n            tpExtensions.TabIndex = 2;\n            tpExtensions.Text = \"File Name Extensions\";\n            tpExtensions.UseVisualStyleBackColor = true;\n            // \n            // lvExtensions\n            // \n            lvExtensions.Columns.AddRange(new ColumnHeader[] { chExtension, chAllowedExtension });\n            lvExtensions.Dock = DockStyle.Fill;\n            lvExtensions.FullRowSelect = true;\n            lvExtensions.Location = new System.Drawing.Point(0, 0);\n            lvExtensions.Margin = new Padding(5);\n            lvExtensions.MultiSelect = false;\n            lvExtensions.Name = \"lvExtensions\";\n            lvExtensions.Size = new System.Drawing.Size(552, 500);\n            lvExtensions.TabIndex = 1;\n            lvExtensions.UseCompatibleStateImageBehavior = false;\n            lvExtensions.View = View.Details;\n            lvExtensions.SelectedIndexChanged += LvExtensionsSelectedIndexChanged;\n            lvExtensions.KeyDown += LvExtensions_KeyDown;\n            lvExtensions.MouseDoubleClick += LvExtensions_MouseDoubleClick;\n            // \n            // chExtension\n            // \n            chExtension.Text = \"Extension\";\n            chExtension.Width = 105;\n            // \n            // chAllowedExtension\n            // \n            chAllowedExtension.Text = \"Allowed\";\n            // \n            // tpRules\n            // \n            tpRules.Controls.Add(lvRules);\n            tpRules.Location = new System.Drawing.Point(4, 23);\n            tpRules.Name = \"tpRules\";\n            tpRules.Size = new System.Drawing.Size(552, 500);\n            tpRules.TabIndex = 3;\n            tpRules.Text = \"Rules\";\n            tpRules.UseVisualStyleBackColor = true;\n            // \n            // lvRules\n            // \n            lvRules.Columns.AddRange(new ColumnHeader[] { columnHeader2, columnHeader10, columnHeader11, columnHeader12 });\n            lvRules.Dock = DockStyle.Fill;\n            lvRules.FullRowSelect = true;\n            lvRules.Location = new System.Drawing.Point(0, 0);\n            lvRules.Margin = new Padding(5);\n            lvRules.MultiSelect = false;\n            lvRules.Name = \"lvRules\";\n            lvRules.Size = new System.Drawing.Size(552, 500);\n            lvRules.TabIndex = 1;\n            lvRules.UseCompatibleStateImageBehavior = false;\n            lvRules.View = View.Details;\n            lvRules.SelectedIndexChanged += LvRulesSelectedIndexChanged;\n            lvRules.KeyDown += LvRules_KeyDown;\n            lvRules.MouseDoubleClick += LvRules_MouseDoubleClick;\n            // \n            // columnHeader2\n            // \n            columnHeader2.Text = \"Name\";\n            columnHeader2.Width = 105;\n            // \n            // columnHeader10\n            // \n            columnHeader10.Text = \"Scan\";\n            columnHeader10.Width = 105;\n            // \n            // columnHeader11\n            // \n            columnHeader11.Text = \"Applied To\";\n            columnHeader11.Width = 105;\n            // \n            // columnHeader12\n            // \n            columnHeader12.Text = \"Deny Strings\";\n            columnHeader12.Width = 105;\n            // \n            // tpSegments\n            // \n            tpSegments.Controls.Add(lvSegments);\n            tpSegments.Location = new System.Drawing.Point(4, 23);\n            tpSegments.Name = \"tpSegments\";\n            tpSegments.Padding = new Padding(3);\n            tpSegments.Size = new System.Drawing.Size(552, 500);\n            tpSegments.TabIndex = 0;\n            tpSegments.Text = \"Hidden Segments\";\n            tpSegments.UseVisualStyleBackColor = true;\n            // \n            // lvSegments\n            // \n            lvSegments.Columns.AddRange(new ColumnHeader[] { chName });\n            lvSegments.Dock = DockStyle.Fill;\n            lvSegments.FullRowSelect = true;\n            lvSegments.Location = new System.Drawing.Point(3, 3);\n            lvSegments.Margin = new Padding(5);\n            lvSegments.MultiSelect = false;\n            lvSegments.Name = \"lvSegments\";\n            lvSegments.Size = new System.Drawing.Size(552, 500);\n            lvSegments.TabIndex = 0;\n            lvSegments.UseCompatibleStateImageBehavior = false;\n            lvSegments.View = View.Details;\n            lvSegments.SelectedIndexChanged += LvSegmentsSelectedIndexChanged;\n            lvSegments.KeyDown += LvSegments_KeyDown;\n            lvSegments.MouseDoubleClick += LvSegments_MouseDoubleClick;\n            // \n            // chName\n            // \n            chName.Text = \"Segment\";\n            chName.Width = 200;\n            // \n            // tpUrl\n            // \n            tpUrl.Controls.Add(lvUrls);\n            tpUrl.Location = new System.Drawing.Point(4, 24);\n            tpUrl.Name = \"tpUrl\";\n            tpUrl.Padding = new Padding(3);\n            tpUrl.Size = new System.Drawing.Size(552, 500);\n            tpUrl.TabIndex = 1;\n            tpUrl.Text = \"URL\";\n            tpUrl.UseVisualStyleBackColor = true;\n            // \n            // lvUrls\n            // \n            lvUrls.Columns.AddRange(new ColumnHeader[] { columnHeader3, columnHeader9 });\n            lvUrls.Dock = DockStyle.Fill;\n            lvUrls.FullRowSelect = true;\n            lvUrls.Location = new System.Drawing.Point(3, 3);\n            lvUrls.Margin = new Padding(5);\n            lvUrls.MultiSelect = false;\n            lvUrls.Name = \"lvUrls\";\n            lvUrls.Size = new System.Drawing.Size(552, 500);\n            lvUrls.TabIndex = 1;\n            lvUrls.UseCompatibleStateImageBehavior = false;\n            lvUrls.View = View.Details;\n            lvUrls.SelectedIndexChanged += LvUrlsSelectedIndexChanged;\n            lvUrls.KeyDown += LvUrls_KeyDown;\n            lvUrls.MouseDoubleClick += LvUrls_MouseDoubleClick;\n            // \n            // columnHeader3\n            // \n            columnHeader3.Text = \"Url\";\n            columnHeader3.Width = 145;\n            // \n            // columnHeader9\n            // \n            columnHeader9.Text = \"Action\";\n            columnHeader9.Width = 145;\n            // \n            // tpVerbs\n            // \n            tpVerbs.Controls.Add(lvVerbs);\n            tpVerbs.Location = new System.Drawing.Point(4, 23);\n            tpVerbs.Name = \"tpVerbs\";\n            tpVerbs.Size = new System.Drawing.Size(552, 500);\n            tpVerbs.TabIndex = 4;\n            tpVerbs.Text = \"HTTP Verbs\";\n            tpVerbs.UseVisualStyleBackColor = true;\n            // \n            // lvVerbs\n            // \n            lvVerbs.Columns.AddRange(new ColumnHeader[] { columnHeader4, columnHeader8 });\n            lvVerbs.Dock = DockStyle.Fill;\n            lvVerbs.FullRowSelect = true;\n            lvVerbs.Location = new System.Drawing.Point(0, 0);\n            lvVerbs.Margin = new Padding(5);\n            lvVerbs.MultiSelect = false;\n            lvVerbs.Name = \"lvVerbs\";\n            lvVerbs.Size = new System.Drawing.Size(552, 500);\n            lvVerbs.TabIndex = 1;\n            lvVerbs.UseCompatibleStateImageBehavior = false;\n            lvVerbs.View = View.Details;\n            lvVerbs.SelectedIndexChanged += LvVerbsSelectedIndexChanged;\n            lvVerbs.KeyDown += LvVerbs_KeyDown;\n            lvVerbs.MouseDoubleClick += LvVerbs_MouseDoubleClick;\n            // \n            // columnHeader4\n            // \n            columnHeader4.Text = \"Verb\";\n            columnHeader4.Width = 175;\n            // \n            // columnHeader8\n            // \n            columnHeader8.Text = \"Allowed\";\n            // \n            // tpHeaders\n            // \n            tpHeaders.Controls.Add(lvHeaders);\n            tpHeaders.Location = new System.Drawing.Point(4, 23);\n            tpHeaders.Name = \"tpHeaders\";\n            tpHeaders.Size = new System.Drawing.Size(552, 500);\n            tpHeaders.TabIndex = 5;\n            tpHeaders.Text = \"Headers\";\n            tpHeaders.UseVisualStyleBackColor = true;\n            // \n            // lvHeaders\n            // \n            lvHeaders.Columns.AddRange(new ColumnHeader[] { columnHeader5, columnHeader7 });\n            lvHeaders.Dock = DockStyle.Fill;\n            lvHeaders.FullRowSelect = true;\n            lvHeaders.Location = new System.Drawing.Point(0, 0);\n            lvHeaders.Margin = new Padding(5);\n            lvHeaders.MultiSelect = false;\n            lvHeaders.Name = \"lvHeaders\";\n            lvHeaders.Size = new System.Drawing.Size(552, 500);\n            lvHeaders.TabIndex = 1;\n            lvHeaders.UseCompatibleStateImageBehavior = false;\n            lvHeaders.View = View.Details;\n            lvHeaders.SelectedIndexChanged += LvHeadersSelectedIndexChanged;\n            lvHeaders.KeyDown += LvHeaders_KeyDown;\n            lvHeaders.MouseDoubleClick += LvHeaders_MouseDoubleClick;\n            // \n            // columnHeader5\n            // \n            columnHeader5.Text = \"Header\";\n            columnHeader5.Width = 175;\n            // \n            // columnHeader7\n            // \n            columnHeader7.Text = \"Size Limit\";\n            // \n            // tpQuery\n            // \n            tpQuery.Controls.Add(lvQueries);\n            tpQuery.Location = new System.Drawing.Point(4, 23);\n            tpQuery.Name = \"tpQuery\";\n            tpQuery.Size = new System.Drawing.Size(552, 500);\n            tpQuery.TabIndex = 6;\n            tpQuery.Text = \"Query Strings\";\n            tpQuery.UseVisualStyleBackColor = true;\n            // \n            // lvQueries\n            // \n            lvQueries.Columns.AddRange(new ColumnHeader[] { columnHeader6, columnHeader1 });\n            lvQueries.Dock = DockStyle.Fill;\n            lvQueries.FullRowSelect = true;\n            lvQueries.Location = new System.Drawing.Point(0, 0);\n            lvQueries.Margin = new Padding(5);\n            lvQueries.MultiSelect = false;\n            lvQueries.Name = \"lvQueries\";\n            lvQueries.Size = new System.Drawing.Size(552, 500);\n            lvQueries.TabIndex = 1;\n            lvQueries.UseCompatibleStateImageBehavior = false;\n            lvQueries.View = View.Details;\n            lvQueries.SelectedIndexChanged += LvQueriesSelectedIndexChanged;\n            lvQueries.KeyDown += LvQueries_KeyDown;\n            lvQueries.MouseDoubleClick += LvQueries_MouseDoubleClick;\n            // \n            // columnHeader6\n            // \n            columnHeader6.Text = \"Query String\";\n            columnHeader6.Width = 145;\n            // \n            // columnHeader1\n            // \n            columnHeader1.Text = \"Action\";\n            columnHeader1.Width = 145;\n            // \n            // imageList1\n            // \n            imageList1.ColorDepth = ColorDepth.Depth8Bit;\n            imageList1.ImageSize = new System.Drawing.Size(16, 16);\n            imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // label2\n            // \n            label2.AutoSize = true;\n            label2.Dock = DockStyle.Top;\n            label2.Location = new System.Drawing.Point(0, 0);\n            label2.Margin = new Padding(5);\n            label2.Name = \"label2\";\n            label2.Size = new System.Drawing.Size(204, 13);\n            label2.TabIndex = 1;\n            label2.Text = \"Use this feature to configure filtering rules.\";\n            // \n            // pictureBox1\n            // \n            pictureBox1.Location = new System.Drawing.Point(10, 10);\n            pictureBox1.Name = \"pictureBox1\";\n            pictureBox1.Size = new System.Drawing.Size(32, 32);\n            pictureBox1.TabIndex = 5;\n            pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            label3.AutoSize = true;\n            label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0);\n            label3.Location = new System.Drawing.Point(48, 10);\n            label3.Name = \"label3\";\n            label3.Size = new System.Drawing.Size(175, 25);\n            label3.TabIndex = 2;\n            label3.Text = \"Request Filtering\";\n            // \n            // tableLayoutPanel1\n            // \n            tableLayoutPanel1.ColumnCount = 1;\n            tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));\n            tableLayoutPanel1.Controls.Add(panel1, 0, 0);\n            tableLayoutPanel1.Controls.Add(tsActionPanel, 0, 1);\n            tableLayoutPanel1.Dock = DockStyle.Fill;\n            tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            tableLayoutPanel1.RowCount = 2;\n            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 23F));\n            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));\n            tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            panel1.Controls.Add(label1);\n            panel1.Dock = DockStyle.Fill;\n            panel1.Location = new System.Drawing.Point(0, 0);\n            panel1.Margin = new Padding(0);\n            panel1.Name = \"panel1\";\n            panel1.Size = new System.Drawing.Size(216, 23);\n            panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            label1.AutoSize = true;\n            label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 0);\n            label1.Location = new System.Drawing.Point(3, 5);\n            label1.Name = \"label1\";\n            label1.Size = new System.Drawing.Size(49, 13);\n            label1.TabIndex = 0;\n            label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            tsActionPanel.CanOverflow = false;\n            tsActionPanel.Dock = DockStyle.Fill;\n            tsActionPanel.GripStyle = ToolStripGripStyle.Hidden;\n            tsActionPanel.LayoutStyle = ToolStripLayoutStyle.VerticalStackWithOverflow;\n            tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            tsActionPanel.Name = \"tsActionPanel\";\n            tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            tsActionPanel.TabIndex = 2;\n            tsActionPanel.Text = \"toolStrip1\";\n            // \n            // RequestFilteringPage\n            // \n            AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            AutoScaleMode = AutoScaleMode.Font;\n            Controls.Add(splitContainer1);\n            Name = \"RequestFilteringPage\";\n            Size = new System.Drawing.Size(800, 600);\n            splitContainer1.Panel1.ResumeLayout(false);\n            splitContainer1.Panel1.PerformLayout();\n            splitContainer1.Panel2.ResumeLayout(false);\n            ((ISupportInitialize)splitContainer1).EndInit();\n            splitContainer1.ResumeLayout(false);\n            panel2.ResumeLayout(false);\n            panel2.PerformLayout();\n            tabControl1.ResumeLayout(false);\n            tpExtensions.ResumeLayout(false);\n            tpRules.ResumeLayout(false);\n            tpSegments.ResumeLayout(false);\n            tpUrl.ResumeLayout(false);\n            tpVerbs.ResumeLayout(false);\n            tpHeaders.ResumeLayout(false);\n            tpQuery.ResumeLayout(false);\n            ((ISupportInitialize)pictureBox1).EndInit();\n            tableLayoutPanel1.ResumeLayout(false);\n            tableLayoutPanel1.PerformLayout();\n            panel1.ResumeLayout(false);\n            panel1.PerformLayout();\n            ResumeLayout(false);\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView lvSegments;\n        private ColumnHeader chName;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private TabControl tabControl1;\n        private TabPage tpExtensions;\n        private TabPage tpRules;\n        private TabPage tpSegments;\n        private TabPage tpUrl;\n        private TabPage tpVerbs;\n        private TabPage tpHeaders;\n        private TabPage tpQuery;\n        private ImageList imageList1;\n        private ListView lvExtensions;\n        private ColumnHeader chExtension;\n        private ListView lvRules;\n        private ColumnHeader columnHeader2;\n        private ListView lvUrls;\n        private ColumnHeader columnHeader3;\n        private ListView lvVerbs;\n        private ColumnHeader columnHeader4;\n        private ListView lvHeaders;\n        private ColumnHeader columnHeader5;\n        private ListView lvQueries;\n        private ColumnHeader columnHeader6;\n        private ColumnHeader chAllowedExtension;\n        private ColumnHeader columnHeader10;\n        private ColumnHeader columnHeader11;\n        private ColumnHeader columnHeader12;\n        private ColumnHeader columnHeader9;\n        private ColumnHeader columnHeader8;\n        private ColumnHeader columnHeader7;\n        private ColumnHeader columnHeader1;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/RequestFilteringPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class RequestFilteringPage : ModuleListPage\n    {\n        private sealed class PageTaskList : DefaultTaskList\n        {\n            private readonly RequestFilteringPage _owner;\n\n            public PageTaskList(RequestFilteringPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Set\", \"Edit Feature Settings...\", string.Empty).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(HelpTaskItem);\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class ExtensionListViewItem : ListViewItem, IFeatureListViewItem<FileExtensionsItem>\n        {\n            public FileExtensionsItem Item { get; }\n            private readonly RequestFilteringPage _page;\n\n            public ExtensionListViewItem(FileExtensionsItem item, RequestFilteringPage page)\n                : base(item.Extension)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Allowed ? \"True\" : \"False\"));\n            }\n        }\n\n        private sealed class RuleListViewItem : ListViewItem, IFeatureListViewItem<FilteringRulesItem>\n        {\n            public FilteringRulesItem Item { get; }\n            private readonly RequestFilteringPage _page;\n\n            public RuleListViewItem(FilteringRulesItem item, RequestFilteringPage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.ScanString));\n                SubItems.Add(new ListViewSubItem(this, item.AppliesToString));\n                SubItems.Add(new ListViewSubItem(this, item.DenyStringsString));\n            }\n        }\n\n        private sealed class SegmentListViewItem : ListViewItem, IFeatureListViewItem<HiddenSegmentsItem>\n        {\n            public HiddenSegmentsItem Item { get; }\n            private readonly RequestFilteringPage _page;\n\n            public SegmentListViewItem(HiddenSegmentsItem item, RequestFilteringPage page)\n                : base(item.Segment)\n            {\n                Item = item;\n                _page = page;\n            }\n        }\n\n        private sealed class UrlListViewItem : ListViewItem, IFeatureListViewItem<UrlsItem>\n        {\n            public UrlsItem Item { get; }\n            private readonly RequestFilteringPage _page;\n\n            public UrlListViewItem(UrlsItem item, RequestFilteringPage page)\n                : base(item.Url)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Allowed ? \"always allow\" : \"Deny\"));\n            }\n        }\n\n        private sealed class VerbListViewItem : ListViewItem, IFeatureListViewItem<VerbsItem>\n        {\n            public VerbsItem Item { get; }\n            private readonly RequestFilteringPage _page;\n\n            public VerbListViewItem(VerbsItem item, RequestFilteringPage page)\n                : base(item.Verb)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Allowed ? \"True\" : \"False\"));\n            }\n        }\n\n        private sealed class HeaderListViewItem : ListViewItem, IFeatureListViewItem<HeadersItem>\n        {\n            public HeadersItem Item { get; }\n            private readonly RequestFilteringPage _page;\n\n            public HeaderListViewItem(HeadersItem item, RequestFilteringPage page)\n                : base(item.Header)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.SizeLimit.ToString()));\n            }\n        }\n\n        private sealed class QueryListViewItem : ListViewItem, IFeatureListViewItem<QueryStringsItem>\n        {\n            public QueryStringsItem Item { get; }\n            private readonly RequestFilteringPage _page;\n\n            public QueryListViewItem(QueryStringsItem item, RequestFilteringPage page)\n                : base(item.QueryString)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Allowed ? \"Always allow\" : \"Deny\"));\n            }\n        }\n\n        private PageTaskList _taskList;\n\n        public RequestFilteringPage()\n        {\n            InitializeComponent();\n            imageList1.Images.Add(Resources.extensions_16);\n            imageList1.Images.Add(Resources.map_16);\n            imageList1.Images.Add(Resources.hidden_16);\n            imageList1.Images.Add(Resources.url_16);\n            imageList1.Images.Add(Resources.verbs_16);\n            imageList1.Images.Add(Resources.headers_16);\n            imageList1.Images.Add(Resources.query_16);\n            tpExtensions.ImageIndex = 0;\n            tpRules.ImageIndex = 1;\n            tpSegments.ImageIndex = 2;\n            tpUrl.ImageIndex = 3;\n            tpVerbs.ImageIndex = 4;\n            tpHeaders.ImageIndex = 5;\n            tpQuery.ImageIndex = 6;\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            var extensions = new FileExtensionsFeature(Module);\n            extensions.RequestFilteringSettingsUpdate = RefreshExtensions;\n            extensions.Load();\n            tpExtensions.Tag = extensions;\n            extensions.InitializeColumnClick(lvExtensions);\n            RefreshExtensions();\n\n            var rules = new FilteringRulesFeature(Module);\n            rules.RequestFilteringSettingsUpdate = RefreshRules;\n            rules.Load();\n            rules.InitializeColumnClick(lvRules);\n            tpRules.Tag = rules;\n\n            var segments = new HiddenSegmentsFeature(Module);\n            segments.RequestFilteringSettingsUpdate = RefreshSegments;\n            segments.Load();\n            segments.InitializeColumnClick(lvSegments);\n            tpSegments.Tag = segments;\n\n            var urls = new UrlsFeature(Module);\n            urls.RequestFilteringSettingsUpdate = RefreshUrls;\n            urls.Load();\n            urls.InitializeColumnClick(lvUrls);\n            tpUrl.Tag = urls;\n\n            var verbs = new VerbsFeature(Module);\n            verbs.RequestFilteringSettingsUpdate = RefreshVerbs;\n            verbs.Load();\n            verbs.InitializeColumnClick(lvVerbs);\n            tpVerbs.Tag = verbs;\n\n            var headers = new HeadersFeature(Module);\n            headers.RequestFilteringSettingsUpdate = RefreshHeaders;\n            headers.Load();\n            headers.InitializeColumnClick(lvHeaders);\n            tpHeaders.Tag = headers;\n\n            var queries = new QueryStringsFeature(Module);\n            queries.RequestFilteringSettingsUpdate = RefreshQueries;\n            queries.Load();\n            queries.InitializeColumnClick(lvQueries);\n            tpQuery.Tag = queries;\n        }\n\n        protected override void InitializeListPage()\n        {\n        }\n\n        private void RefreshExtensions()\n        {\n            var feature = (FileExtensionsFeature)tpExtensions.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvExtensions.Items.Clear();\n            foreach (var file in feature.Items)\n            {\n                lvExtensions.Items.Add(new ExtensionListViewItem(file, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (ExtensionListViewItem item in lvExtensions.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void RefreshRules()\n        {\n            var feature = (FilteringRulesFeature)tpRules.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvRules.Items.Clear();\n            foreach (var file in feature.Items)\n            {\n                lvRules.Items.Add(new RuleListViewItem(file, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (RuleListViewItem item in lvRules.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void RefreshSegments()\n        {\n            var feature = (HiddenSegmentsFeature)tpSegments.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvSegments.Items.Clear();\n            foreach (var file in feature.Items)\n            {\n                lvSegments.Items.Add(new SegmentListViewItem(file, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (SegmentListViewItem item in lvSegments.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void RefreshUrls()\n        {\n            var feature = (UrlsFeature)tpUrl.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvUrls.Items.Clear();\n            foreach (var url in feature.Items)\n            {\n                lvUrls.Items.Add(new UrlListViewItem(url, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (UrlListViewItem item in lvUrls.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void RefreshVerbs()\n        {\n            var feature = (VerbsFeature)tpVerbs.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvVerbs.Items.Clear();\n            foreach (var url in feature.Items)\n            {\n                lvVerbs.Items.Add(new VerbListViewItem(url, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (VerbListViewItem item in lvVerbs.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void RefreshHeaders()\n        {\n            var feature = (HeadersFeature)tpHeaders.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvHeaders.Items.Clear();\n            foreach (var url in feature.Items)\n            {\n                lvHeaders.Items.Add(new HeaderListViewItem(url, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (HeaderListViewItem item in lvHeaders.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void RefreshQueries()\n        {\n            var feature = (QueryStringsFeature)tpQuery.Tag;\n            if (feature == null)\n            {\n                return;\n            }\n\n            lvQueries.Items.Clear();\n            foreach (var url in feature.Items)\n            {\n                lvQueries.Items.Add(new QueryListViewItem(url, this));\n            }\n\n            if (feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (QueryListViewItem item in lvQueries.Items)\n            {\n                if (item.Item == feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            var feature = (IRequestFilteringFeature)tabControl1.SelectedTab.Tag;\n            if (feature != null)\n            {\n                TaskList extra = feature.GetTaskList();\n                Tasks.Fill(tsActionPanel, cmsActionPanel, extra);\n            }\n\n            base.Refresh();\n        }\n\n        private void LvExtensions_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                var feature = (FileExtensionsFeature)tpExtensions.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvExtensions_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            var feature = (FileExtensionsFeature)tpExtensions.Tag;\n            feature.HandleMouseDoubleClick(lvExtensions);\n        }\n\n        private void LvExtensionsSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (FileExtensionsFeature)tpExtensions.Tag;\n            feature.HandleSelectedIndexChanged(lvExtensions);\n            Refresh();\n        }\n\n        private void LvRules_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                var feature = (FilteringRulesFeature)tpRules.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvRules_MouseDoubleClick(Object sender, MouseEventArgs e)\n        {\n            var feature = (FilteringRulesFeature)tpRules.Tag;\n            feature.HandleMouseDoubleClick(lvRules);\n        }\n\n        private void LvRulesSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (FilteringRulesFeature)tpRules.Tag;\n            feature.HandleSelectedIndexChanged(lvRules);\n            Refresh();\n        }\n\n        private void LvSegments_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                var feature = (HiddenSegmentsFeature)tpSegments.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvSegments_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            var feature = (HiddenSegmentsFeature)tpSegments.Tag;\n            feature.HandleMouseDoubleClick(lvSegments);\n        }\n\n        private void LvSegmentsSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (HiddenSegmentsFeature)tpSegments.Tag;\n            feature.HandleSelectedIndexChanged(lvSegments);\n            Refresh();\n        }\n\n        private void LvUrls_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                var feature = (UrlsFeature)tpUrl.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvUrls_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            var feature = (UrlsFeature)tpUrl.Tag;\n            feature.HandleMouseDoubleClick(lvUrls);\n        }\n\n        private void LvUrlsSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (UrlsFeature)tpUrl.Tag;\n            feature.HandleSelectedIndexChanged(lvUrls);\n            Refresh();\n        }\n\n        private void LvVerbs_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                var feature = (VerbsFeature)tpVerbs.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvVerbs_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            var feature = (VerbsFeature)tpVerbs.Tag;\n            feature.HandleMouseDoubleClick(lvVerbs);\n        }\n\n        private void LvVerbsSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (VerbsFeature)tpVerbs.Tag;\n            feature.HandleSelectedIndexChanged(lvVerbs);\n            Refresh();\n        }\n\n        private void LvHeaders_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                var feature = (HeadersFeature)tpHeaders.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvHeaders_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            var feature = (HeadersFeature)tpHeaders.Tag;\n            feature.HandleMouseDoubleClick(lvHeaders);\n        }\n\n        private void LvHeadersSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (HeadersFeature)tpHeaders.Tag;\n            feature.HandleSelectedIndexChanged(lvHeaders);\n            Refresh();\n        }\n\n        private void LvQueries_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                var feature = (QueryStringsFeature)tpQuery.Tag;\n                feature.Remove();\n            }\n        }\n\n        private void LvQueries_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            var feature = (QueryStringsFeature)tpQuery.Tag;\n            feature.HandleMouseDoubleClick(lvQueries);\n        }\n\n        private void LvQueriesSelectedIndexChanged(object sender, EventArgs e)\n        {\n            var feature = (QueryStringsFeature)tpQuery.Tag;\n            feature.HandleSelectedIndexChanged(lvQueries);\n            Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            var feature = (IRequestFilteringFeature)tabControl1.SelectedTab.Tag;\n            feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void TabControl1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            var item = tabControl1.SelectedTab;\n            if (item == null)\n            {\n                return;\n            }\n\n            var feature = (IRequestFilteringFeature)item.Tag;\n            feature?.RequestFilteringSettingsUpdate?.Invoke();\n            Refresh();\n        }\n\n        public void Set()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/security/requestFiltering\");\n            using (var dialog = new SegmentSettingsDialog(Module, section))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/RequestFilteringPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema \n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>281, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/RequestFilteringSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    public delegate void RequestFilteringSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/ScanHeadersItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Administration;\n\n    internal class ScanHeadersItem : IItem<ScanHeadersItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(ScanHeadersItem other)\n        {\n            return other != null && other.RequestHeader == RequestHeader;\n        }\n\n        public ScanHeadersItem(ConfigurationElement element)\n        {\n            this.Element = element;\n            if (element == null)\n            {\n                return;\n            }\n\n            this.RequestHeader = (string)element[\"requestHeader\"];\n        }\n\n        public string RequestHeader { get; set; }\n\n        public string Flag { get; set; }\n\n        public void Apply()\n        {\n            this.Element[\"requestHeader\"] = RequestHeader;\n        }\n\n        public bool Equals(ScanHeadersItem other)\n        {\n            return Match(other);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/SegmentSettingsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.RequestFiltering\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class SegmentSettingsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.cbDouble = new System.Windows.Forms.CheckBox();\n            this.cbHigh = new System.Windows.Forms.CheckBox();\n            this.cbVerb = new System.Windows.Forms.CheckBox();\n            this.cbExtension = new System.Windows.Forms.CheckBox();\n            this.groupBox2 = new System.Windows.Forms.GroupBox();\n            this.txtQuery = new System.Windows.Forms.TextBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtURL = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtContent = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.groupBox1.SuspendLayout();\n            this.groupBox2.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.cbDouble);\n            this.groupBox1.Controls.Add(this.cbHigh);\n            this.groupBox1.Controls.Add(this.cbVerb);\n            this.groupBox1.Controls.Add(this.cbExtension);\n            this.groupBox1.Location = new System.Drawing.Point(12, 12);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(355, 164);\n            this.groupBox1.TabIndex = 0;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"General\";\n            // \n            // cbDouble\n            // \n            this.cbDouble.AutoSize = true;\n            this.cbDouble.Location = new System.Drawing.Point(6, 125);\n            this.cbDouble.Name = \"cbDouble\";\n            this.cbDouble.Size = new System.Drawing.Size(132, 17);\n            this.cbDouble.TabIndex = 3;\n            this.cbDouble.Text = \"Allow double escaping\";\n            this.cbDouble.UseVisualStyleBackColor = true;\n            // \n            // cbHigh\n            // \n            this.cbHigh.AutoSize = true;\n            this.cbHigh.Location = new System.Drawing.Point(6, 90);\n            this.cbHigh.Name = \"cbHigh\";\n            this.cbHigh.Size = new System.Drawing.Size(141, 17);\n            this.cbHigh.TabIndex = 2;\n            this.cbHigh.Text = \"Allow high-bit characters\";\n            this.cbHigh.UseVisualStyleBackColor = true;\n            // \n            // cbVerb\n            // \n            this.cbVerb.AutoSize = true;\n            this.cbVerb.Location = new System.Drawing.Point(6, 53);\n            this.cbVerb.Name = \"cbVerb\";\n            this.cbVerb.Size = new System.Drawing.Size(119, 17);\n            this.cbVerb.TabIndex = 1;\n            this.cbVerb.Text = \"Allow unlisted verbs\";\n            this.cbVerb.UseVisualStyleBackColor = true;\n            // \n            // cbExtension\n            // \n            this.cbExtension.AutoSize = true;\n            this.cbExtension.Location = new System.Drawing.Point(6, 19);\n            this.cbExtension.Name = \"cbExtension\";\n            this.cbExtension.Size = new System.Drawing.Size(188, 17);\n            this.cbExtension.TabIndex = 0;\n            this.cbExtension.Text = \"Allow unlisted file name extensions\";\n            this.cbExtension.UseVisualStyleBackColor = true;\n            // \n            // groupBox2\n            // \n            this.groupBox2.Controls.Add(this.txtQuery);\n            this.groupBox2.Controls.Add(this.label3);\n            this.groupBox2.Controls.Add(this.txtURL);\n            this.groupBox2.Controls.Add(this.label2);\n            this.groupBox2.Controls.Add(this.txtContent);\n            this.groupBox2.Controls.Add(this.label1);\n            this.groupBox2.Location = new System.Drawing.Point(12, 182);\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.Size = new System.Drawing.Size(355, 184);\n            this.groupBox2.TabIndex = 1;\n            this.groupBox2.TabStop = false;\n            this.groupBox2.Text = \"Request Limits\";\n            // \n            // txtQuery\n            // \n            this.txtQuery.Location = new System.Drawing.Point(6, 146);\n            this.txtQuery.Name = \"txtQuery\";\n            this.txtQuery.Size = new System.Drawing.Size(228, 20);\n            this.txtQuery.TabIndex = 5;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(3, 130);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(146, 13);\n            this.label3.TabIndex = 4;\n            this.label3.Text = \"Maximum query string (Bytes):\";\n            // \n            // txtURL\n            // \n            this.txtURL.Location = new System.Drawing.Point(6, 91);\n            this.txtURL.Name = \"txtURL\";\n            this.txtURL.Size = new System.Drawing.Size(228, 20);\n            this.txtURL.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(3, 75);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(146, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Maximum URL length (Bytes):\";\n            // \n            // txtContent\n            // \n            this.txtContent.Location = new System.Drawing.Point(6, 43);\n            this.txtContent.Name = \"txtContent\";\n            this.txtContent.Size = new System.Drawing.Size(228, 20);\n            this.txtContent.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(3, 27);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(199, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Maximum allowed content length (Bytes):\";\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(272, 401);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 2;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(176, 401);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 3;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // SegmentSettingsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(379, 436);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.groupBox2);\n            this.Controls.Add(this.groupBox1);\n            this.Name = \"SegmentSettingsDialog\";\n            this.Text = \"Edit Request Filtering Settings\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.SegmentSettingsDialog_HelpButtonClicked);\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.groupBox2.ResumeLayout(false);\n            this.groupBox2.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private GroupBox groupBox1;\n        private CheckBox cbDouble;\n        private CheckBox cbHigh;\n        private CheckBox cbVerb;\n        private CheckBox cbExtension;\n        private GroupBox groupBox2;\n        private TextBox txtQuery;\n        private Label label3;\n        private TextBox txtURL;\n        private Label label2;\n        private TextBox txtContent;\n        private Label label1;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/SegmentSettingsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class SegmentSettingsDialog : DialogForm\n    {\n        public SegmentSettingsDialog(IServiceProvider serviceProvider, ConfigurationSection section)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbExtension.Checked = (bool)section.ChildElements[\"fileExtensions\"][\"allowUnlisted\"];\n            cbVerb.Checked = (bool)section.ChildElements[\"verbs\"][\"allowUnlisted\"];\n            cbHigh.Checked = (bool)section[\"allowHighBitCharacters\"];\n            cbDouble.Checked = (bool)section[\"allowDoubleEscaping\"];\n            var limits = section.ChildElements[\"requestLimits\"];\n            txtContent.Text = limits[\"maxAllowedContentLength\"].ToString();\n            txtURL.Text = limits[\"maxUrl\"].ToString();\n            txtQuery.Text = limits[\"maxQueryString\"].ToString();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    section.ChildElements[\"fileExtensions\"][\"allowUnlisted\"] = cbExtension.Checked;\n                    section.ChildElements[\"verbs\"][\"allowUnlisted\"] = cbVerb.Checked;\n                    section[\"allowHighBitCharacters\"] = cbHigh.Checked;\n                    section[\"allowDoubleEscaping\"] = cbDouble.Checked;\n\n                    uint result;\n                    if (!uint.TryParse(txtContent.Text, out result))\n                    {\n                        ShowMessage(\n                            string.Format(\n                                \"'{0}' is an invalid maximum {1}. Enter an integer between 0 and 4294967295\",\n                                txtContent.Text,\n                                \"content length\"),\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        txtContent.SelectAll();\n                        return;\n                    }\n\n                    limits[\"maxAllowedContentLength\"] = result;\n\n                    if (!uint.TryParse(txtURL.Text, out result))\n                    {\n                        ShowMessage(\n                            string.Format(\n                                \"'{0}' is an invalid maximum {1}. Enter an integer between 0 and 4294967295\",\n                                txtURL.Text,\n                                \"URL length\"),\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        txtURL.SelectAll();\n                        return;\n                    }\n\n                    limits[\"maxUrl\"] = result;\n\n                    if (!uint.TryParse(txtQuery.Text, out result))\n                    {\n                        ShowMessage(\n                            string.Format(\n                                \"'{0}' is an invalid maximum {1}. Enter an integer between 0 and 4294967295\",\n                                txtQuery.Text,\n                                \"query string length\"),\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        txtQuery.SelectAll();\n                        return;\n                    }\n\n                    limits[\"maxQueryString\"] = result;\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtContent, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtQuery, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtURL, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtContent.Text) &&\n                                                !string.IsNullOrWhiteSpace(txtURL.Text) &&\n                                                !string.IsNullOrWhiteSpace(txtQuery.Text);\n                }));\n        }\n\n        private void SegmentSettingsDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Edit_Filtering\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/SegmentSettingsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/UrlsFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class UrlsFeature : RequestFilteringFeature<UrlsItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly UrlsFeature _owner;\n\n            public FeatureTaskList(UrlsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n\n                result.Add(new MethodTaskItem(\"AddUrl\", \"Allow URL...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"AddDenyUrl\", \"Deny Sequence...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddUrl()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddDenyUrl()\n            {\n                _owner.AddDeny();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n        }\n\n        public UrlsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        private TaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewUrlDialog(this.Module, true);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            this.AddItem(dialog.Item);\n        }\n\n        public void AddDeny()\n        {\n            using var dialog = new NewUrlDialog(this.Module, false);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            this.AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)this.GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected URL?\", this.Name,\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection requestFilteringSection =\n                service.GetSection(\"system.webServer/security/requestFiltering\");\n            return requestFilteringSection.GetCollection(\"alwaysAllowedUrls\");\n        }\n\n        protected override ConfigurationElementCollection GetSecondaryCollection(IConfigurationService service)\n        {\n            ConfigurationSection requestFilteringSection =\n                service.GetSection(\"system.webServer/security/requestFiltering\");\n            return requestFilteringSection.GetCollection(\"denyUrlSequences\");\n        }\n\n        public override void Load()\n        {\n            LoadItems();\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#URL_Page\");\n            return true;\n        }\n\n        public override string Name\n        {\n            get\n            {\n                return \"URL\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/UrlsItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Administration;\n\n    internal class UrlsItem : IDuoItem<UrlsItem>\n    {\n        public bool Allowed { get; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(UrlsItem other)\n        {\n            return other != null && other.Url == Url;\n        }\n\n        public UrlsItem(ConfigurationElement element, bool allowed)\n        {\n            this.Allowed = allowed;\n            this.Element = element;\n            if (element == null)\n            {\n                return;\n            }\n\n            if (allowed)\n            {\n                Url = (string)element[\"url\"];\n            }\n            else\n            {\n                Url = (string)element[\"sequence\"];\n            }\n        }\n\n        public string Url { get; set; }\n\n        public void Apply()\n        {\n            if (Allowed)\n            {\n                Element[\"url\"] = Url;\n            }\n            else\n            {\n                Element[\"sequence\"] = Url;\n            }\n        }\n\n        public string Flag { get; set; }\n\n        public bool Equals(UrlsItem other)\n        {\n            return Match(other) && other.Allowed == Allowed;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/VerbsFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class VerbsFeature : RequestFilteringFeature<VerbsItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly VerbsFeature _owner;\n\n            public FeatureTaskList(VerbsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"AddVerb\", \"Allow Verb...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"AddDenyVerb\", \"Deny Verb...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddVerb()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddDenyVerb()\n            {\n                _owner.AddDeny();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n        }\n\n        public VerbsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        private TaskList _taskList;\n\n        public override TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewVerbDialog(Module, true);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void AddDeny()\n        {\n            using var dialog = new NewVerbDialog(Module, false);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected verb?\", Name,\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection requestFilteringSection =\n                service.GetSection(\"system.webServer/security/requestFiltering\");\n            return requestFilteringSection.GetCollection(\"verbs\");\n        }\n\n        public override void Load()\n        {\n            LoadItems();\n        }\n\n        public override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210526#Http_Verbs\");\n            return true;\n        }\n\n        public override string Name\n        {\n            get\n            {\n                return \"HTTP Verbs\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/VerbsItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.RequestFiltering\n{\n    using Microsoft.Web.Administration;\n\n    internal class VerbsItem : IItem<VerbsItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(VerbsItem other)\n        {\n            return other != null && other.Verb == Verb;\n        }\n\n        public VerbsItem(ConfigurationElement element)\n        {\n            this.Element = element;\n            if (element == null)\n            {\n                return;\n            }\n\n            Verb = (string)element[\"verb\"];\n            Allowed = (bool)element[\"allowed\"];\n        }\n\n        public bool Allowed { get; set; }\n\n        public string Verb { get; set; }\n\n        public void Apply()\n        {\n            Element[\"verb\"] = Verb;\n            Element[\"allowed\"] = Allowed;\n        }\n\n        public string Flag { get; set; }\n\n        public bool Equals(VerbsItem other)\n        {\n            return Match(other) && other.Allowed == Allowed;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.RequestFiltering/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/JexusManager.Features.ResponseHeaders.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.ResponseHeaders</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/NewHeaderDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.ResponseHeaders\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewHeaderDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtValue = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.Location = new System.Drawing.Point(252, 146);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(156, 146);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(38, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(332, 20);\n            this.txtName.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 60);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(37, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Value:\";\n            // \n            // txtValue\n            // \n            this.txtValue.Location = new System.Drawing.Point(15, 76);\n            this.txtValue.Name = \"txtValue\";\n            this.txtValue.Size = new System.Drawing.Size(332, 20);\n            this.txtValue.TabIndex = 5;\n            // \n            // NewHeaderDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(359, 181);\n            this.Controls.Add(this.txtValue);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewHeaderDialog\";\n            this.Text = \"Add Custom HTTP Response Header\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private TextBox txtName;\n        private Label label2;\n        private TextBox txtValue;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/NewHeaderDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.ResponseHeaders\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewHeaderDialog : DialogForm\n    {\n        public NewHeaderDialog(IServiceProvider serviceProvider, ResponseHeadersItem selectedItem, ResponseHeadersFeature feature)\n            : base(serviceProvider)\n        {\n            Item = selectedItem;\n            InitializeComponent();\n            Text = selectedItem == null ? \"Add Custom HTTP Response Header\" : \"Edit Custom HTTP Response Header\";\n            if (selectedItem != null)\n            {\n                txtName.Text = Item.Name;\n                txtValue.Text = Item.Value;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (feature.FindDuplicate(item => item.Name, txtName.Text))\n                    {\n                        ShowMessage(\n                            \"A header with this name already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    Item ??= new ResponseHeadersItem(null);\n                    Item.Name = txtName.Text;\n                    Item.Value = txtValue.Text;\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ResponseHeadersItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/NewHeaderDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"7184ae3d-12d2-444d-b75a-2589f66e6b54\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.ResponseHeaders.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.ResponseHeaders.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap response_header_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"response_header_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"response_header_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\response_header_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/ResponseHeadersFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.ResponseHeaders\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class ResponseHeadersFeature : FeatureBase<ResponseHeadersItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly ResponseHeadersFeature _owner;\n\n            public FeatureTaskList(ResponseHeadersFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"Set\", \"Set Common Headers...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n        }\n\n        public ResponseHeadersFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            LoadItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/httpProtocol\");\n            return section.GetCollection(\"customHeaders\");\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewHeaderDialog(Module, null, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            this.AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected header?\", Name,\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(ResponseHeadersItem item)\n        {\n            using var dialog = new NewHeaderDialog(Module, SelectedItem, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange([\"No Grouping\", \"Entry Type\"]);\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[2].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        public void Set()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var staticContent = service.GetSection(\"system.webServer/staticContent\");\n            using (var dialog = new SetCommonHeadersDialog(Module, service.GetSection(\"system.webServer/httpProtocol\"), staticContent.ChildElements[\"clientCache\"], this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            ResponseHeadersSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210509\");\n            return false;\n        }\n\n        public ResponseHeadersSettingsSavedEventHandler ResponseHeadersSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"HTTP Response Headers\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/ResponseHeadersItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.ResponseHeaders\n{\n    using Microsoft.Web.Administration;\n\n    internal class ResponseHeadersItem : IItem<ResponseHeadersItem>\n    {\n        public string Name { get; internal set; }\n        public string Value { get; internal set; }\n        public string Flag { get; set; }\n        public ConfigurationElement Element { get; set; }\n\n        public ResponseHeadersItem(ConfigurationElement element)\n        {\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            Element = element;\n            if (element == null)\n            {\n                Value = string.Empty;\n                return;\n            }\n\n            Name = (string)element[\"name\"];\n            Value = (string)element[\"value\"];\n        }\n\n        public bool Equals(ResponseHeadersItem other)\n        {\n            return Match(other);\n        }\n\n        public bool Match(ResponseHeadersItem other)\n        {\n            return other != null && other.Name == Name;\n        }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"value\"] = Value;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/ResponseHeadersModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.ResponseHeaders\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class ResponseHeadersModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(ResponseHeadersPage), \"HTTP Response Headers\",\n                \"Configure HTTP headers that are added to responses from the Web server\", Resources.response_header_36,\n                Resources.response_header_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/ResponseHeadersModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.ResponseHeaders\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class ResponseHeadersModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(ResponseHeadersModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/ResponseHeadersPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.ResponseHeaders\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ResponseHeadersPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 4;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chValue,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 120;\n            // \n            // chValue\n            // \n            this.chValue.Text = \"Value\";\n            this.chValue.Width = 120;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 120;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(450, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to configure HTTP headers that are added to responses from the W\" +\n    \"eb server.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(257, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"HTTP Response Headers\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // ResponseHeadersPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ResponseHeadersPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chValue;\n        private ColumnHeader chType;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ToolStrip tsActionPanel;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/ResponseHeadersPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.ResponseHeaders\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class ResponseHeadersPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly ResponseHeadersPage _owner;\n\n            public PageTaskList(ResponseHeadersPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class ResponseHeadersListViewItem : ListViewItem, IFeatureListViewItem<ResponseHeadersItem>\n        {\n            public ResponseHeadersItem Item { get; }\n            private readonly ResponseHeadersPage _page;\n\n            public ResponseHeadersListViewItem(ResponseHeadersItem item, ResponseHeadersPage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Value));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private ResponseHeadersFeature _feature;\n        private PageTaskList _taskList;\n\n        public ResponseHeadersPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new ResponseHeadersFeature(Module);\n            _feature.ResponseHeadersSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new ResponseHeadersListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (ResponseHeadersListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/ResponseHeadersPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>281, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/ResponseHeadersSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.ResponseHeaders\n{\n    public delegate void ResponseHeadersSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/SetCommonHeadersDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.ResponseHeaders\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class SetCommonHeadersDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.cbKeepAlive = new System.Windows.Forms.CheckBox();\n            this.cbExpired = new System.Windows.Forms.CheckBox();\n            this.rbImmediate = new System.Windows.Forms.RadioButton();\n            this.rbAfter = new System.Windows.Forms.RadioButton();\n            this.txtAfter = new System.Windows.Forms.TextBox();\n            this.cbUnit = new System.Windows.Forms.ComboBox();\n            this.rbTime = new System.Windows.Forms.RadioButton();\n            this.dtpDate = new System.Windows.Forms.DateTimePicker();\n            this.dtpTime = new System.Windows.Forms.DateTimePicker();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // cbKeepAlive\n            // \n            this.cbKeepAlive.AutoSize = true;\n            this.cbKeepAlive.Location = new System.Drawing.Point(12, 12);\n            this.cbKeepAlive.Name = \"cbKeepAlive\";\n            this.cbKeepAlive.Size = new System.Drawing.Size(143, 17);\n            this.cbKeepAlive.TabIndex = 0;\n            this.cbKeepAlive.Text = \"Enable HTTP keep-alive\";\n            this.cbKeepAlive.UseVisualStyleBackColor = true;\n            // \n            // cbExpired\n            // \n            this.cbExpired.AutoSize = true;\n            this.cbExpired.Location = new System.Drawing.Point(12, 35);\n            this.cbExpired.Name = \"cbExpired\";\n            this.cbExpired.Size = new System.Drawing.Size(123, 17);\n            this.cbExpired.TabIndex = 1;\n            this.cbExpired.Text = \"Expire Web content:\";\n            this.cbExpired.UseVisualStyleBackColor = true;\n            this.cbExpired.CheckedChanged += new System.EventHandler(this.cbExpired_CheckedChanged);\n            // \n            // rbImmediate\n            // \n            this.rbImmediate.AutoSize = true;\n            this.rbImmediate.Enabled = false;\n            this.rbImmediate.Location = new System.Drawing.Point(33, 58);\n            this.rbImmediate.Name = \"rbImmediate\";\n            this.rbImmediate.Size = new System.Drawing.Size(80, 17);\n            this.rbImmediate.TabIndex = 2;\n            this.rbImmediate.TabStop = true;\n            this.rbImmediate.Text = \"Immediately\";\n            this.rbImmediate.UseVisualStyleBackColor = true;\n            // \n            // rbAfter\n            // \n            this.rbAfter.AutoSize = true;\n            this.rbAfter.Enabled = false;\n            this.rbAfter.Location = new System.Drawing.Point(33, 81);\n            this.rbAfter.Name = \"rbAfter\";\n            this.rbAfter.Size = new System.Drawing.Size(47, 17);\n            this.rbAfter.TabIndex = 3;\n            this.rbAfter.TabStop = true;\n            this.rbAfter.Text = \"After\";\n            this.rbAfter.UseVisualStyleBackColor = true;\n            this.rbAfter.CheckedChanged += new System.EventHandler(this.rbAfter_CheckedChanged);\n            // \n            // txtAfter\n            // \n            this.txtAfter.Enabled = false;\n            this.txtAfter.Location = new System.Drawing.Point(53, 104);\n            this.txtAfter.Name = \"txtAfter\";\n            this.txtAfter.Size = new System.Drawing.Size(60, 20);\n            this.txtAfter.TabIndex = 4;\n            // \n            // cbUnit\n            // \n            this.cbUnit.Enabled = false;\n            this.cbUnit.FormattingEnabled = true;\n            this.cbUnit.Items.AddRange(new object[] {\n            \"Second(s)\",\n            \"Minute(s)\",\n            \"Hour(s)\",\n            \"Day(s)\"});\n            this.cbUnit.Location = new System.Drawing.Point(119, 104);\n            this.cbUnit.Name = \"cbUnit\";\n            this.cbUnit.Size = new System.Drawing.Size(121, 21);\n            this.cbUnit.TabIndex = 5;\n            // \n            // rbTime\n            // \n            this.rbTime.AutoSize = true;\n            this.rbTime.Enabled = false;\n            this.rbTime.Location = new System.Drawing.Point(33, 130);\n            this.rbTime.Name = \"rbTime\";\n            this.rbTime.Size = new System.Drawing.Size(209, 17);\n            this.rbTime.TabIndex = 6;\n            this.rbTime.TabStop = true;\n            this.rbTime.Text = \"On (Coordinated Universal Time (UTC))\";\n            this.rbTime.UseVisualStyleBackColor = true;\n            this.rbTime.CheckedChanged += new System.EventHandler(this.rbTime_CheckedChanged);\n            // \n            // dtpDate\n            // \n            this.dtpDate.Enabled = false;\n            this.dtpDate.Location = new System.Drawing.Point(53, 166);\n            this.dtpDate.Name = \"dtpDate\";\n            this.dtpDate.Size = new System.Drawing.Size(200, 20);\n            this.dtpDate.TabIndex = 7;\n            // \n            // dtpTime\n            // \n            this.dtpTime.Enabled = false;\n            this.dtpTime.Format = System.Windows.Forms.DateTimePickerFormat.Time;\n            this.dtpTime.Location = new System.Drawing.Point(259, 166);\n            this.dtpTime.Name = \"dtpTime\";\n            this.dtpTime.Size = new System.Drawing.Size(101, 20);\n            this.dtpTime.TabIndex = 8;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(352, 221);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 9;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(256, 221);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 10;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);\n            // \n            // SetCommonHeadersDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(459, 256);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.dtpTime);\n            this.Controls.Add(this.dtpDate);\n            this.Controls.Add(this.rbTime);\n            this.Controls.Add(this.cbUnit);\n            this.Controls.Add(this.txtAfter);\n            this.Controls.Add(this.rbAfter);\n            this.Controls.Add(this.rbImmediate);\n            this.Controls.Add(this.cbExpired);\n            this.Controls.Add(this.cbKeepAlive);\n            this.Name = \"SetCommonHeadersDialog\";\n            this.Text = \"Set Common HTTP Response Headers\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private CheckBox cbKeepAlive;\n        private CheckBox cbExpired;\n        private RadioButton rbImmediate;\n        private RadioButton rbAfter;\n        private TextBox txtAfter;\n        private ComboBox cbUnit;\n        private RadioButton rbTime;\n        private DateTimePicker dtpDate;\n        private DateTimePicker dtpTime;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/SetCommonHeadersDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.ResponseHeaders\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class SetCommonHeadersDialog : DialogForm\n    {\n        private readonly ConfigurationSection _httpProtocolSection;\n        private readonly ConfigurationElement _staticContent;\n\n        public SetCommonHeadersDialog(IServiceProvider serviceProvider, ConfigurationSection httpProtocolSection, ConfigurationElement staticContent, ResponseHeadersFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            _httpProtocolSection = httpProtocolSection;\n            _staticContent = staticContent;\n            cbKeepAlive.Checked = (bool)httpProtocolSection[\"allowKeepAlive\"];\n            var mode = (long)_staticContent[\"cacheControlMode\"];\n            cbExpired.Checked = mode != 0L;\n            rbImmediate.Checked = mode == 1L;\n            rbAfter.Checked = mode == 2L;\n            rbTime.Checked = mode == 3L;\n            string time = (string)_staticContent[\"httpExpires\"];\n            DateTime output;\n            if (DateTime.TryParse(time, out output))\n            {\n                dtpDate.Value = output;\n                dtpTime.Value = output;\n            }\n\n            var span = (TimeSpan)_staticContent[\"cacheControlMaxAge\"];\n            if (span.Seconds == 0)\n            {\n                if (span.Minutes == 0)\n                {\n                    if (span.Hours == 0)\n                    {\n                        cbUnit.SelectedIndex = 3;\n                        txtAfter.Text = span.Days.ToString();\n                    }\n                    else\n                    {\n                        cbUnit.SelectedIndex = 2;\n                        txtAfter.Text = (span.Hours + span.Days * 24).ToString();\n                    }\n                }\n                else\n                {\n                    cbUnit.SelectedIndex = 1;\n                    txtAfter.Text = (span.Minutes + (span.Hours + span.Days * 24) * 60).ToString();\n                }\n            }\n            else\n            {\n                cbUnit.SelectedIndex = 0;\n                txtAfter.Text = (span.Seconds + (span.Minutes + (span.Hours + span.Days * 24) * 60) * 60).ToString();\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        private void btnOK_Click(object sender, EventArgs e)\n        {\n            _httpProtocolSection[\"allowKeepAlive\"] = cbKeepAlive.Checked;\n            if (cbExpired.Checked)\n            {\n                if (rbImmediate.Checked)\n                {\n                    _staticContent[\"cacheControlMode\"] = 1L;\n                }\n                else if (rbAfter.Checked)\n                {\n                    _staticContent[\"cacheControlMode\"] = 2L;\n                    long value;\n                    if (!long.TryParse(txtAfter.Text, out value) || value < 0)\n                    {\n                        ShowMessage(\n                            GetMessage(cbUnit.SelectedIndex),\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    if (cbUnit.SelectedIndex == 0)\n                    {\n                        if (value > GetMax(cbUnit.SelectedIndex))\n                        {\n                            ShowMessage(\n                                GetMessage(cbUnit.SelectedIndex),\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        _staticContent[\"cacheControlMaxAge\"] = TimeSpan.FromSeconds(value);\n                    }\n                    else if (cbUnit.SelectedIndex == 1)\n                    {\n                        if (value > GetMax(cbUnit.SelectedIndex))\n                        {\n                            ShowMessage(\n                                GetMessage(cbUnit.SelectedIndex),\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        _staticContent[\"cacheControlMaxAge\"] = TimeSpan.FromMinutes(value);\n                    }\n                    else if (cbUnit.SelectedIndex == 2)\n                    {\n                        if (value > GetMax(cbUnit.SelectedIndex))\n                        {\n                            ShowMessage(\n                                GetMessage(cbUnit.SelectedIndex),\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        _staticContent[\"cacheControlMaxAge\"] = TimeSpan.FromHours(value);\n                    }\n                    else\n                    {\n                        if (value > GetMax(cbUnit.SelectedIndex))\n                        {\n                            ShowMessage(\n                                GetMessage(cbUnit.SelectedIndex),\n                                MessageBoxButtons.OK,\n                                MessageBoxIcon.Error,\n                                MessageBoxDefaultButton.Button1);\n                            return;\n                        }\n\n                        _staticContent[\"cacheControlMaxAge\"] = TimeSpan.FromDays(value);\n                    }\n                }\n                else\n                {\n                    _staticContent[\"cacheControlMode\"] = 3L;\n                    // Wed, 27 May 2015 00:00:00 GMT\n                    _staticContent[\"httpExpires\"] = (dtpDate.Value.Date + dtpTime.Value.TimeOfDay).ToString(\"R\");\n                }\n            }\n            else\n            {\n                _staticContent[\"cacheControlMode\"] = 0L;\n            }\n\n            DialogResult = DialogResult.OK;\n        }\n\n        private string GetMessage(int selectedIndex)\n        {\n            return string.Format(\n                \"The specified expiration value is invalid. The valid range is between 0 and {0} {1}.\", GetMax(selectedIndex), cbUnit.Text);\n        }\n\n        private readonly long[] _max = { 922337203686, 15372286728, 256204778, 10675199 };\n\n        private long GetMax(int index)\n        {\n            return _max[index];\n        }\n\n        private void cbExpired_CheckedChanged(object sender, EventArgs e)\n        {\n            rbImmediate.Enabled = cbExpired.Checked;\n            rbAfter.Enabled = cbExpired.Checked;\n            rbTime.Enabled = cbExpired.Checked;\n            rbAfter_CheckedChanged(sender, e);\n            rbTime_CheckedChanged(sender, e);\n        }\n\n        private void rbAfter_CheckedChanged(object sender, EventArgs e)\n        {\n            txtAfter.Enabled = rbAfter.Checked && rbAfter.Enabled;\n            cbUnit.Enabled = rbAfter.Checked && rbAfter.Enabled;\n        }\n\n        private void rbTime_CheckedChanged(object sender, EventArgs e)\n        {\n            dtpDate.Enabled = rbTime.Checked && rbTime.Enabled;\n            dtpTime.Enabled = rbTime.Checked && rbTime.Enabled;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/SetCommonHeadersDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.ResponseHeaders/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.Rewrite/AddProviderDialog.Designer.cs",
    "content": "namespace JexusManager.Features.Rewrite\n{\n    partial class AddProviderDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbManagedType = new System.Windows.Forms.ComboBox();\n            this.SuspendLayout();            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(38, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(12, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(446, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(383, 151);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(75, 23);\n            this.btnCancel.TabIndex = 5;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(302, 151);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(75, 23);\n            this.btnOK.TabIndex = 4;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 71);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(79, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Managed Type:\";\n            // \n            // cbManagedType\n            // \n            this.cbManagedType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbManagedType.FormattingEnabled = true;\n            this.cbManagedType.Items.AddRange(new object[] {\n            \"System.Web.Routing.RouteCollection, System.Web.Routing, Version=4.0.0.0\",\n            \"System.Web.Configuration.MachineKeySection, System.Web, Version=4.0.0.0\",\n            \"Microsoft.Web.Iis.Rewrite.ManagedProviders.RewriteMapCollection\"});\n            this.cbManagedType.Location = new System.Drawing.Point(12, 87);\n            this.cbManagedType.Name = \"cbManagedType\";\n            this.cbManagedType.Size = new System.Drawing.Size(446, 21);\n            this.cbManagedType.TabIndex = 3;\n            //            // AddProviderDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(470, 186);\n            this.Controls.Add(this.cbManagedType);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.HelpButton = true;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"AddProviderDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Add Provider\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.TextBox txtName;\n        private System.Windows.Forms.Button btnCancel;\n        private System.Windows.Forms.Button btnOK;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.ComboBox cbManagedType;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/AddProviderDialog.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class AddProviderDialog : DialogForm\n    {\n        private readonly ProvidersFeature _feature;\n\n        public AddProviderDialog(Module module, ProvidersFeature feature, ProviderItem existing = null)\n            : base(module)\n        {\n            InitializeComponent();\n            _feature = feature;\n\n            Text = existing == null ? \"Add Provider\" : \"Edit Provider\";\n            if (existing != null)\n            {\n                txtName.Text = existing.Name;\n                txtName.ReadOnly = true;\n\n                // Find the matching managed type if possible\n                for (int i = 0; i < cbManagedType.Items.Count; i++)\n                {\n                    if (cbManagedType.Items[i].ToString() == existing.Type)\n                    {\n                        cbManagedType.SelectedIndex = i;\n                        break;\n                    }\n                }\n\n                if (cbManagedType.SelectedIndex < 0)\n                {\n                    cbManagedType.SelectedIndex = 0;\n                }\n            }\n            else\n            {\n                cbManagedType.SelectedIndex = 0;\n            }\n\n            Item = existing;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (feature.FindDuplicate(item => item.Name, txtName.Text))\n                    {\n                        ShowMessage(\n                            \"A rewrite provider with this name already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    Item ??= new ProviderItem(null);\n                    Item.Name = txtName.Text;\n                    Item.Type = cbManagedType.Text;\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    _feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ProviderItem Item { get; private set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/AddProviderSettingDialog.Designer.cs",
    "content": "namespace JexusManager.Features.Rewrite\n{\n    partial class AddProviderSettingDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbName = new System.Windows.Forms.ComboBox();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtValue = new System.Windows.Forms.TextBox();\n            this.cbEncrypt = new System.Windows.Forms.CheckBox();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(38, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Name:\";\n            // \n            // cbName\n            // \n            this.cbName.FormattingEnabled = true;\n            this.cbName.Location = new System.Drawing.Point(12, 25);\n            this.cbName.Name = \"cbName\";\n            this.cbName.Size = new System.Drawing.Size(446, 21);\n            this.cbName.TabIndex = 1;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(383, 151);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(75, 23);\n            this.btnCancel.TabIndex = 6;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(302, 151);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(75, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 71);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(37, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Value:\";\n            // \n            // txtValue\n            // \n            this.txtValue.Location = new System.Drawing.Point(12, 87);\n            this.txtValue.Name = \"txtValue\";\n            this.txtValue.Size = new System.Drawing.Size(446, 20);\n            this.txtValue.TabIndex = 3;\n            // \n            // cbEncrypt\n            // \n            this.cbEncrypt.AutoSize = true;\n            this.cbEncrypt.Location = new System.Drawing.Point(12, 113);\n            this.cbEncrypt.Name = \"cbEncrypt\";\n            this.cbEncrypt.Size = new System.Drawing.Size(87, 17);\n            this.cbEncrypt.TabIndex = 4;\n            this.cbEncrypt.Text = \"Encrypt value\";\n            this.cbEncrypt.UseVisualStyleBackColor = true;\n            // \n            // AddProviderSettingDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(470, 186);\n            this.Controls.Add(this.cbEncrypt);\n            this.Controls.Add(this.txtValue);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.cbName);\n            this.Controls.Add(this.label1);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.HelpButton = true;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"AddProviderSettingDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Add Provider Setting\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.ComboBox cbName;\n        private System.Windows.Forms.Button btnCancel;\n        private System.Windows.Forms.Button btnOK;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.TextBox txtValue;\n        private System.Windows.Forms.CheckBox cbEncrypt;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/AddProviderSettingDialog.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\nusing System.Reactive.Disposables;\nusing System.Reactive.Linq;\nusing System.Windows.Forms;\nusing Microsoft.Web.Management.Client;\nusing Microsoft.Web.Management.Client.Win32;\n\nnamespace JexusManager.Features.Rewrite\n{\n    internal partial class AddProviderSettingDialog : DialogForm\n    {\n        private readonly SettingsFeature _feature;\n\n        public AddProviderSettingDialog(Module module, SettingsFeature feature, SettingItem existing = null)\n            : base(module)\n        {\n            InitializeComponent();\n            _feature = feature;\n\n            Text = existing == null ? \"Add Provider Setting\" : \"Edit Provider Setting\";\n\n            // Add common setting names to the combo box\n            cbName.Items.Add(\"connectionString\");\n            cbName.Items.Add(\"defaultProvider\");\n            cbName.Items.Add(\"providerName\");\n\n            if (existing != null)\n            {\n                cbName.Text = existing.Key;\n                txtValue.Text = existing.Value;\n                // TODO: disabled temp\n                cbEncrypt.Enabled = false;\n            }\n            else\n            {\n                cbName.SelectedIndex = 0;\n            }\n\n            Item = existing;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtValue, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(cbName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (_feature.FindDuplicate(item => item.Key, cbName.Text))\n                    {\n                        ShowMessage(\n                            \"A rewrite provider setting with this name already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    Item ??= new SettingItem(null);\n                    Item.Key = cbName.Text;\n                    Item.Value = txtValue.Text;\n                    Item.Encrypted = cbEncrypt.Checked;\n\n                    DialogResult = DialogResult.OK;\n                }));\n            container.Add(Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    _feature.ShowHelp();\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public SettingItem Item { get; private set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/ConditionItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using Microsoft.Web.Administration;\n\n    public class ConditionItem : IItem<ConditionItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public ConditionItem(ConfigurationElement element)\n        {\n            Element = element;\n            if (element == null)\n            {\n                Input = \"{QUERY_STRING}\";\n                MatchType = 4;\n                IgnoreCase = true;\n                return;\n            }\n\n            Input = (string)element[\"input\"];\n            Pattern = (string)element[\"pattern\"];\n            IgnoreCase = (bool)element[\"ignoreCase\"];\n\n            var root = (long)element[\"matchType\"];\n            var negate = (bool)element[\"negate\"];\n            var value = root == 0 ? 2 : root - 1;\n            MatchType = (int)value * 2 + (negate ? 1 : 0);\n        }\n\n        public bool IgnoreCase { get; set; }\n\n        public string Pattern { get; set; }\n\n        public string Input { get; set; }\n\n        public int MatchType { get; set; }\n\n        public string Flag { get; set; }\n\n        public void Apply()\n        {\n            Element[\"input\"] = Input;\n            Element[\"pattern\"] = Pattern;\n            Element[\"ignoreCase\"] = IgnoreCase;\n            Element[\"negate\"] = MatchType % 2 == 1;\n            var value = MatchType / 2;\n            Element[\"matchType\"] = value == 2 ? 0 : value + 1;\n        }\n\n        public bool Match(ConditionItem other)\n        {\n            return other != null && Input == other.Input && MatchType == other.MatchType && Pattern == other.Pattern && IgnoreCase == other.IgnoreCase;\n        }\n\n        public bool Equals(ConditionItem other)\n        {\n            return Match(other);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/ConditionListViewItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System.Windows.Forms;\n\n    internal class ConditionListViewItem : ListViewItem\n    {\n        private readonly ListViewSubItem _matchType;\n\n        private readonly ListViewSubItem _pattern;\n\n        public ConditionListViewItem(ConditionItem condition)\n            : base(condition.Input)\n        {\n            _matchType = new ListViewSubItem(this, GetText(condition.MatchType));\n            this.SubItems.Add(_matchType);\n            _pattern = new ListViewSubItem(this, condition.MatchType > 3 ? condition.Pattern : \"N/A\");\n            this.SubItems.Add(_pattern);\n            this.Item = condition;\n        }\n\n        public ConditionItem Item { get; }\n\n        public void Update()\n        {\n            this.Text = this.Item.Input;\n            _matchType.Text = GetText(this.Item.MatchType);\n            _pattern.Text = this.Item.MatchType > 3 ? this.Item.Pattern : \"N/A\";\n        }\n\n        private static string GetText(int matchType)\n        {\n            switch (matchType)\n            {\n                case 0:\n                    return \"Is File\";\n                case 1:\n                    return \"Is Not File\";\n                case 2:\n                    return \"Is Directory\";\n                case 3:\n                    return \"Is Not Directory\";\n                case 4:\n                    return \"Matches the Pattern\";\n                case 5:\n                    return \"Does Not Match the Pattern\";\n            }\n\n            return string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddAllowedVariableDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AddAllowedVariableDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(110, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Server variable name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(16, 39);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(351, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(176, 81);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 2;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(272, 81);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 3;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // AddVariableDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(379, 116);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Name = \"AddVariableDialog\";\n            this.Text = \"Add Server Variable\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AddVariableDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddAllowedVariableDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"AddVariableDialog.cs\" company=\"\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class AddAllowedVariableDialog : DialogForm\n    {\n        public AddAllowedVariableDialog(IServiceProvider serviceProvider, AllowedVariablesFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (feature.Items.Any(item => txtName.Text == item.Name))\n                    {\n                        ShowMessage(\n                            \"The specified server variable already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    Item = new AllowedVariableItem(null, feature) { Name = txtName.Text };\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n        }\n\n        private void AddVariableDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=163108\");\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public AllowedVariableItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddAllowedVariableDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddConditionDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class AddConditionDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtInput = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbCheck = new System.Windows.Forms.ComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPattern = new System.Windows.Forms.TextBox();\n            this.btnTest = new System.Windows.Forms.Button();\n            this.cbIgnore = new System.Windows.Forms.CheckBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(352, 241);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(256, 241);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(9, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(80, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Condition input:\";\n            // \n            // txtInput\n            // \n            this.txtInput.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;\n            this.txtInput.Location = new System.Drawing.Point(12, 25);\n            this.txtInput.Name = \"txtInput\";\n            this.txtInput.Size = new System.Drawing.Size(435, 20);\n            this.txtInput.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(9, 67);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(103, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Check if input string:\";\n            // \n            // cbCheck\n            // \n            this.cbCheck.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbCheck.FormattingEnabled = true;\n            this.cbCheck.Items.AddRange(new object[] {\n            \"Is a File\",\n            \"Is Not a File\",\n            \"Is a Directory\",\n            \"Is Not a Directory\",\n            \"Matches the Pattern\",\n            \"Does Not Match the Pattern\"});\n            this.cbCheck.Location = new System.Drawing.Point(12, 83);\n            this.cbCheck.Name = \"cbCheck\";\n            this.cbCheck.Size = new System.Drawing.Size(243, 21);\n            this.cbCheck.TabIndex = 5;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(9, 130);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(44, 13);\n            this.label3.TabIndex = 6;\n            this.label3.Text = \"Pattern:\";\n            // \n            // txtPattern\n            // \n            this.txtPattern.Location = new System.Drawing.Point(12, 146);\n            this.txtPattern.Name = \"txtPattern\";\n            this.txtPattern.Size = new System.Drawing.Size(305, 20);\n            this.txtPattern.TabIndex = 7;\n            // \n            // btnTest\n            // \n            this.btnTest.Location = new System.Drawing.Point(323, 144);\n            this.btnTest.Name = \"btnTest\";\n            this.btnTest.Size = new System.Drawing.Size(125, 23);\n            this.btnTest.TabIndex = 8;\n            this.btnTest.Text = \"Test pattern...\";\n            this.btnTest.UseVisualStyleBackColor = true;\n            // \n            // cbIgnore\n            // \n            this.cbIgnore.AutoSize = true;\n            this.cbIgnore.Location = new System.Drawing.Point(12, 184);\n            this.cbIgnore.Name = \"cbIgnore\";\n            this.cbIgnore.Size = new System.Drawing.Size(82, 17);\n            this.cbIgnore.TabIndex = 9;\n            this.cbIgnore.Text = \"Ignore case\";\n            this.cbIgnore.UseVisualStyleBackColor = true;\n            // \n            // AddConditionDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(459, 276);\n            this.Controls.Add(this.cbIgnore);\n            this.Controls.Add(this.btnTest);\n            this.Controls.Add(this.txtPattern);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.cbCheck);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtInput);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"AddConditionDialog\";\n            this.Text = \"Add Condition\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AddConditionDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private TextBox txtInput;\n        private Label label2;\n        private ComboBox cbCheck;\n        private Label label3;\n        private TextBox txtPattern;\n        private Button btnTest;\n        private CheckBox cbIgnore;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddConditionDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class AddConditionDialog : DialogForm\n    {\n        public AddConditionDialog(IServiceProvider serviceProvider, ConditionItem existing)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Item = existing ?? new ConditionItem(null);\n            txtInput.Text = Item.Input;\n            txtPattern.Text = Item.Pattern;\n            cbIgnore.Checked = Item.IgnoreCase;\n            cbCheck.SelectedIndex = Item.MatchType;\n            txtInput.AutoCompleteSource = AutoCompleteSource.CustomSource;\n            var source = new AutoCompleteStringCollection();\n            foreach (var item in DialogHelper.Conditions)\n            {\n                source.Add($\"{{{item}}}\");\n            }\n\n            txtInput.AutoCompleteCustomSource = source;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            var check = Observable.FromEventPattern<EventArgs>(cbCheck, \"SelectedIndexChanged\");\n            container.Add(\n                check.ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Merge(Observable.FromEventPattern<EventArgs>(this, \"Load\"))\n                .Subscribe(evt =>\n                {\n                    txtPattern.Enabled = btnTest.Enabled = cbIgnore.Enabled = cbCheck.SelectedIndex > 3;\n                    if (!txtPattern.Enabled)\n                    {\n                        txtPattern.Text = string.Empty;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtPattern, \"TextChanged\")\n                .Merge(check)\n                .Merge(Observable.FromEventPattern<EventArgs>(txtInput, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtInput.Text) && (cbCheck.SelectedIndex < 4 || !string.IsNullOrWhiteSpace(txtPattern.Text));\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Input = txtInput.Text;\n                    Item.Pattern = txtPattern.Text;\n                    Item.IgnoreCase = cbIgnore.Checked;\n                    Item.MatchType = cbCheck.SelectedIndex;\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnTest, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using var dialog = new RegexTestDialog(ServiceProvider, txtPattern.Text, cbIgnore.Checked, true);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n\n                    txtPattern.Text = dialog.Pattern;\n                    cbIgnore.Checked = dialog.IgnoreCase;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ConditionItem Item { get; private set; }\n\n        private void AddConditionDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130403&amp;clcid=0x409\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddConditionDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddMapDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AddMapDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtOriginal = new System.Windows.Forms.TextBox();\n            this.txtNew = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(216, 156);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 0;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(312, 156);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 1;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(74, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Original value:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 73);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(61, 13);\n            this.label2.TabIndex = 3;\n            this.label2.Text = \"New value:\";\n            // \n            // txtOriginal\n            // \n            this.txtOriginal.Location = new System.Drawing.Point(12, 29);\n            this.txtOriginal.Name = \"txtOriginal\";\n            this.txtOriginal.Size = new System.Drawing.Size(395, 20);\n            this.txtOriginal.TabIndex = 4;\n            // \n            // txtNew\n            // \n            this.txtNew.Location = new System.Drawing.Point(12, 89);\n            this.txtNew.Name = \"txtNew\";\n            this.txtNew.Size = new System.Drawing.Size(395, 20);\n            this.txtNew.TabIndex = 5;\n            // \n            // AddMapDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(419, 191);\n            this.Controls.Add(this.txtNew);\n            this.Controls.Add(this.txtOriginal);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Name = \"AddMapDialog\";\n            this.Text = \"Add Mapping Entry\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AddMapDialog_HelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnOK;\n        private Button btnCancel;\n        private Label label1;\n        private Label label2;\n        private TextBox txtOriginal;\n        private TextBox txtNew;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddMapDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class AddMapDialog : DialogForm\n    {\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public MapRule Item { get; set; }\n\n        public AddMapDialog(IServiceProvider serviceProvider, MapRule existing, MapsFeature feature)\n            : base(serviceProvider)\n        {\n            Item = existing;\n            InitializeComponent();\n            Text = existing == null ? \"Add Mapping Entry\" : \"Edit Mapping Entry\";\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtOriginal, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtOriginal.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (Item == null)\n                    {\n                        Item = new MapRule(null, feature);\n                    }\n\n                    Item.Original = txtOriginal.Text;\n                    Item.New = txtNew.Text;\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        private void AddMapDialog_HelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130406&amp;clcid=0x409\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddMapDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddMapsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AddMapsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(110, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Server variable name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(16, 39);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(351, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(176, 81);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 2;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(272, 81);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 3;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // AddVariableDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(379, 116);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Name = \"AddVariableDialog\";\n            this.Text = \"Add Server Variable\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AddVariableDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddMapsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"AddVariableDialog.cs\" company=\"\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class AddMapsDialog : DialogForm\n    {\n        public AddMapsDialog(IServiceProvider serviceProvider, MapsFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (feature.Items.Any(item => txtName.Text == item.Name))\n                    {\n                        ShowMessage(\n                            \"The specified server variable already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    Item = new MapItem(null, feature) { Name = txtName.Text, DefaultValue = string.Empty };\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n        }\n\n        private void AddVariableDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=163108\");\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public MapItem Item { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddMapsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddServerVariableDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class AddServerVariableDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbName = new System.Windows.Forms.ComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtValue = new System.Windows.Forms.TextBox();\n            this.cbReplace = new System.Windows.Forms.CheckBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(242, 211);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(146, 211);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(110, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Server variable name:\";\n            // \n            // cbName\n            // \n            this.cbName.FormattingEnabled = true;\n            this.cbName.Location = new System.Drawing.Point(15, 25);\n            this.cbName.Name = \"cbName\";\n            this.cbName.Size = new System.Drawing.Size(294, 21);\n            this.cbName.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 84);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(37, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Value:\";\n            // \n            // txtValue\n            // \n            this.txtValue.Location = new System.Drawing.Point(15, 100);\n            this.txtValue.Name = \"txtValue\";\n            this.txtValue.Size = new System.Drawing.Size(294, 20);\n            this.txtValue.TabIndex = 5;\n            // \n            // cbReplace\n            // \n            this.cbReplace.AutoSize = true;\n            this.cbReplace.Location = new System.Drawing.Point(15, 149);\n            this.cbReplace.Name = \"cbReplace\";\n            this.cbReplace.Size = new System.Drawing.Size(151, 17);\n            this.cbReplace.TabIndex = 6;\n            this.cbReplace.Text = \"Replace the existing value\";\n            this.cbReplace.UseVisualStyleBackColor = true;\n            // \n            // AddServerVariableDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(349, 246);\n            this.Controls.Add(this.cbReplace);\n            this.Controls.Add(this.txtValue);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.cbName);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"AddServerVariableDialog\";\n            this.Text = \"Set Server Variable\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AddServerVariableDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private ComboBox cbName;\n        private Label label2;\n        private TextBox txtValue;\n        private CheckBox cbReplace;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddServerVariableDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class AddServerVariableDialog : DialogForm\n    {\n        public AddServerVariableDialog(IServiceProvider serviceProvider, ServerVariableItem existing)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Item = existing ?? new ServerVariableItem(null);\n            cbName.Text = Item.Name;\n            txtValue.Text = Item.Value;\n            cbReplace.Checked = Item.Replace;\n            var service = (IConfigurationService)serviceProvider.GetService(typeof(IConfigurationService));\n            var rulesSection = service.GetSection(\"system.webServer/rewrite/allowedServerVariables\");\n            ConfigurationElementCollection rulesCollection = rulesSection.GetCollection();\n            foreach (ConfigurationElement ruleElement in rulesCollection)\n            {\n                cbName.Items.Add(ruleElement[\"name\"]);\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtValue, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(cbName, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(cbName.Text) && !string.IsNullOrWhiteSpace(txtValue.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Name = cbName.Text;\n                    Item.Value = txtValue.Text;\n                    Item.Replace = cbReplace.Checked;\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ServerVariableItem Item { get; set; }\n\n        private void AddServerVariableDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=163108\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AddServerVariableDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AllowedVariableItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using Microsoft.Web.Administration;\n\n    internal class AllowedVariableItem : IItem<AllowedVariableItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(AllowedVariableItem other)\n        {\n            return other != null && other.Name == Name;\n        }\n\n        private readonly AllowedVariablesFeature _feature;\n\n        public string Name { get; internal set; }\n\n        public string Flag { get; set; }\n\n        public AllowedVariableItem(ConfigurationElement element, AllowedVariablesFeature feature)\n        {\n            this.Element = element;\n            _feature = feature;\n            this.Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            if (element == null)\n            {\n                return;\n            }\n\n            this.Name = (string)element[\"name\"];\n        }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n        }\n\n        public bool Equals(AllowedVariableItem other)\n        {\n            return Match(other);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/AllowedVariablesFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright company=\"\" file=\"RewriteFeature.cs\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Drawing;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class AllowedVariablesFeature : FeatureBase<AllowedVariableItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly AllowedVariablesFeature _owner;\n\n            public FeatureTaskList(AllowedVariablesFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Rename\", \"Rename\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                if (_owner.CanRevert)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RevertTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n        }\n\n        public AllowedVariablesFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/rewrite/allowedServerVariables\");\n            CanRevert = section.CanRevert();\n            LoadItems();\n        }\n\n        public void Add()\n        {\n            using (var dialog = new AddAllowedVariableDialog(Module, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                AddItem(dialog.Item);\n            }\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected entry?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        internal protected void OnRewriteSettingsSaved()\n        {\n            RewriteSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130403&amp;clcid=0x409\");\n            return false;\n        }\n\n        public void Revert()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                dialog.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RevertItems();\n        }\n\n        private void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(AllowedVariableItem item)\n        {\n            RenameInline(item);\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange([\"No Grouping\", \"Entry Type\"]);\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[1].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/rewrite/allowedServerVariables\");\n            return section.GetCollection();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnRewriteSettingsSaved();\n        }\n\n        public bool CanRevert { get; private set; }\n\n        public RewriteSettingsSavedEventHandler RewriteSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/InboundFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.Linq;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public class InboundFeature : FeatureBase<InboundRule>\n    {\n        public InboundFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var outSection = service.GetSection(\"system.webServer/rewrite/rules\");\n            return outSection.GetCollection();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            RewriteSettingsUpdated?.Invoke();\n        }\n\n        public void Refresh()\n        {\n            OnSettingsSaved();\n        }\n\n        public RewriteSettingsSavedEventHandler RewriteSettingsUpdated { get; set; }\n\n        public string Name\n        {\n            get { return \"URL Rewrite\"; }\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/rewrite/rules\");\n            CanRevert = section.CanRevert();\n            LoadItems();\n        }\n\n        public bool CanRevert { get; set; }\n\n        public void Add()\n        {\n            int index = 0;\n            string name;\n            do\n            {\n                index++;\n                name = string.Format(\"LowerCaseRule{0}\", index);\n            }\n            while (Items.All(item => item.Name != name));\n            var newRule = new InboundRule(null);\n            newRule.Name = name;\n            newRule.Input = \"URL Path\";\n            newRule.PatternSyntax = 0L;\n            newRule.PatternUrl = \"[A-Z]\";\n            newRule.Type = 2L;\n            newRule.ActionUrl = \"{ToLower:{URL}}\";\n            newRule.IgnoreCase = false;\n            newRule.RedirectType = 301;\n\n            AddItem(newRule);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected rule?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void AddConditions()\n        {\n            using var dialog = new AddConditionDialog(Module, null);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            var newItem = dialog.Item;\n            SelectedItem.Conditions.Add(newItem);\n        }\n\n        public void MoveUp()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveUpItem();\n        }\n\n        public void MoveDown()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveDownItem();\n        }\n\n        public void Disable()\n        {\n            SelectedItem.Enabled = false;\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            SelectedItem.Element[\"enabled\"] = false;\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public void Enable()\n        {\n            SelectedItem.Enabled = true;\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            SelectedItem.Element[\"enabled\"] = true;\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public void Revert()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                dialog.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RevertItems();\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(InboundRule item)\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service.Navigate(null, null, typeof(InboundRulePage), new Tuple<InboundFeature, InboundRule>(this, item));\n            OnSettingsSaved();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/InboundRule.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.Collections.Generic;\n\n    using Microsoft.Web.Administration;\n\n    public class InboundRule : IItem<InboundRule>\n    {\n        public InboundRule(ConfigurationElement element)\n        {\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            Element = element;\n            ServerVariables = new List<ServerVariableItem>();\n            Conditions = new List<ConditionItem>();\n            if (element == null)\n            {\n                Type = 1;\n                IgnoreCase = true;\n                AppendQueryString = true;\n                Enabled = true;\n                return;\n            }\n\n            CancelChanges();\n        }\n\n        public string Name { get; set; }\n\n        public string Input { get; set; }\n\n        public bool Negate { get; set; }\n\n        public string PatternUrl { get; set; }\n\n        public long Type { get; set; }\n\n        public string ActionUrl { get; set; }\n\n        public bool StopProcessing { get; set; }\n\n        public string Flag { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public bool Enabled { get; set; }\n\n        public RuleSettingsUpdatedEventHandler RuleSettingsUpdated { get; set; }\n\n        public bool IgnoreCase { get; set; }\n\n        public long PatternSyntax { get; set; }\n\n        public bool AppendQueryString { get; set; }\n\n        public bool LogRewrittenUrl { get; set; }\n\n        public int RedirectType { get; set; }\n\n        public uint StatusCode { get; set; }\n\n        public uint SubStatusCode { get; set; }\n\n        public string StatusReason { get; set; }\n\n        public string StatusDescription { get; set; }\n\n        public List<ServerVariableItem> ServerVariables { get; }\n\n        public List<ConditionItem> Conditions { get; }\n\n        public bool Equals(InboundRule other)\n        {\n            return Match(other);\n        }\n\n        public bool Match(InboundRule other)\n        {\n            return other != null && other.Name == Name;\n        }\n\n        public bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130425&amp;clcid=0x409\");\n            return true;\n        }\n\n        public void CancelChanges()\n        {\n            if (Element == null)\n            {\n                return;\n            }\n\n            Name = (string)Element[\"name\"];\n            Enabled = (bool)Element[\"enabled\"];\n            PatternSyntax = (long)Element[\"patternSyntax\"];\n            StopProcessing = (bool)Element[\"stopProcessing\"];\n            ConfigurationElement matchElement = Element.ChildElements[\"match\"];\n            PatternUrl = (string)matchElement[\"url\"];\n            Negate = (bool)matchElement[\"negate\"];\n            IgnoreCase = (bool)matchElement[\"ignoreCase\"];\n            ConfigurationElement actionElement = Element.ChildElements[\"action\"];\n            Type = (long)actionElement[\"type\"];\n            ActionUrl = (string)actionElement[\"url\"];\n            AppendQueryString = (bool)actionElement[\"appendQueryString\"];\n            LogRewrittenUrl = (bool)actionElement[\"logRewrittenUrl\"];\n            var redirect = (long)actionElement[\"redirectType\"];\n            switch (redirect)\n            {\n                case 301:\n                    RedirectType = 0;\n                    break;\n                case 302:\n                    RedirectType = 1;\n                    break;\n                case 303:\n                    RedirectType = 2;\n                    break;\n                case 307:\n                    RedirectType = 3;\n                    break;\n            }\n\n            StatusCode = (uint)actionElement[\"statusCode\"];\n            SubStatusCode = (uint)actionElement[\"subStatusCode\"];\n            StatusReason = (string)actionElement[\"statusReason\"];\n            StatusDescription = (string)actionElement[\"statusDescription\"];\n\n            var conditions = Element.ChildElements[\"conditions\"];\n            TrackAllCaptures = (bool)conditions[\"trackAllCaptures\"];\n            LogicalGrouping = (long)conditions[\"logicalGrouping\"];\n\n            Conditions.Clear();\n            foreach (ConfigurationElement condition in conditions.GetCollection())\n            {\n                var item = new ConditionItem(condition);\n                Conditions.Add(item);\n            }\n\n            ServerVariables.Clear();\n            var variables = Element.ChildElements[\"serverVariables\"];\n            foreach (ConfigurationElement variable in variables.GetCollection())\n            {\n                var item = new ServerVariableItem(variable);\n                ServerVariables.Add(item);\n            }\n        }\n\n        public long LogicalGrouping { get; set; }\n\n        public bool TrackAllCaptures { get; set; }\n\n        public bool ApplyChanges()\n        {\n            Apply();\n            return true;\n        }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"enabled\"] = Enabled;\n            Element[\"patternSyntax\"] = PatternSyntax;\n            Element[\"stopProcessing\"] = StopProcessing;\n            ConfigurationElement matchElement = Element.ChildElements[\"match\"];\n            matchElement[\"url\"] = PatternUrl;\n            matchElement[\"negate\"] = Negate;\n            matchElement[\"ignoreCase\"] = IgnoreCase;\n            ConfigurationElement actionElement = Element.ChildElements[\"action\"];\n            actionElement[\"type\"] = Type;\n            actionElement[\"url\"] = ActionUrl;\n            actionElement[\"appendQueryString\"] = AppendQueryString;\n            actionElement[\"logRewrittenUrl\"] = LogRewrittenUrl;\n\n            switch (RedirectType)\n            {\n                case 0:\n                    actionElement[\"redirectType\"] = 301L;\n                    break;\n                case 1:\n                    actionElement[\"redirectType\"] = 302L;\n                    break;\n                case 2:\n                    actionElement[\"redirectType\"] = 303L;\n                    break;\n                case 3:\n                    actionElement[\"redirectType\"] = 307L;\n                    break;\n            }\n\n            actionElement[\"statusCode\"] = StatusCode;\n            actionElement[\"subStatusCode\"] = SubStatusCode;\n            actionElement[\"statusReason\"] = StatusReason;\n            actionElement[\"statusDescription\"] = StatusDescription;\n\n            var conditions = Element.ChildElements[\"conditions\"];\n            conditions[\"trackAllCaptures\"] = TrackAllCaptures;\n            conditions[\"logicalGrouping\"] = LogicalGrouping;\n            var conditionsCollection = conditions.GetCollection();\n            conditionsCollection.Clear();\n            foreach (var condition in Conditions)\n            {\n                condition.AppendTo(conditionsCollection);\n            }\n\n            var variableCollection = Element.ChildElements[\"serverVariables\"].GetCollection();\n            variableCollection.Clear();\n            foreach (var variable in ServerVariables)\n            {\n                variable.AppendTo(variableCollection);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/InboundRulePage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using MakarovDev.ExpandCollapsePanel;\n\n    partial class InboundRulePage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();\n            this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();\n            this.advancedFlowLayoutPanel1 = new MakarovDev.ExpandCollapsePanel.AdvancedFlowLayoutPanel();\n            this.gbMatch = new MakarovDev.ExpandCollapsePanel.ExpandCollapsePanel();\n            this.cbIgnoreCase = new System.Windows.Forms.CheckBox();\n            this.btnTest = new System.Windows.Forms.Button();\n            this.txtPattern = new System.Windows.Forms.TextBox();\n            this.label6 = new System.Windows.Forms.Label();\n            this.cbType = new System.Windows.Forms.ComboBox();\n            this.label5 = new System.Windows.Forms.Label();\n            this.cbMatch = new System.Windows.Forms.ComboBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.gbConditions = new MakarovDev.ExpandCollapsePanel.ExpandCollapsePanel();\n            this.btnDown = new System.Windows.Forms.Button();\n            this.btnUp = new System.Windows.Forms.Button();\n            this.btnRemove = new System.Windows.Forms.Button();\n            this.btnEdit = new System.Windows.Forms.Button();\n            this.lvConditions = new System.Windows.Forms.ListView();\n            this.chInput = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPattern = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.cbTrack = new System.Windows.Forms.CheckBox();\n            this.btnAdd = new System.Windows.Forms.Button();\n            this.cbAny = new System.Windows.Forms.ComboBox();\n            this.label20 = new System.Windows.Forms.Label();\n            this.gbVariables = new MakarovDev.ExpandCollapsePanel.ExpandCollapsePanel();\n            this.btnVarRemove = new System.Windows.Forms.Button();\n            this.btnVarEdit = new System.Windows.Forms.Button();\n            this.btnVarAdd = new System.Windows.Forms.Button();\n            this.btnVarUp = new System.Windows.Forms.Button();\n            this.btnVarDown = new System.Windows.Forms.Button();\n            this.lvVariables = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chReplace = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.groupBox2 = new MakarovDev.ExpandCollapsePanel.ExpandCollapsePanel();\n            this.gbRedirect = new System.Windows.Forms.GroupBox();\n            this.cbRedirect = new System.Windows.Forms.ComboBox();\n            this.label14 = new System.Windows.Forms.Label();\n            this.cbAppendRedirect = new System.Windows.Forms.CheckBox();\n            this.txtRedirect = new System.Windows.Forms.TextBox();\n            this.label9 = new System.Windows.Forms.Label();\n            this.gbCustom = new System.Windows.Forms.GroupBox();\n            this.txtError = new System.Windows.Forms.TextBox();\n            this.txtReason = new System.Windows.Forms.TextBox();\n            this.label13 = new System.Windows.Forms.Label();\n            this.label12 = new System.Windows.Forms.Label();\n            this.txtStatus = new System.Windows.Forms.TextBox();\n            this.label11 = new System.Windows.Forms.Label();\n            this.txtSubstatus = new System.Windows.Forms.TextBox();\n            this.label10 = new System.Windows.Forms.Label();\n            this.cbStop = new System.Windows.Forms.CheckBox();\n            this.gbRewrite = new System.Windows.Forms.GroupBox();\n            this.cbLog = new System.Windows.Forms.CheckBox();\n            this.cbAppend = new System.Windows.Forms.CheckBox();\n            this.txtUrl = new System.Windows.Forms.TextBox();\n            this.label8 = new System.Windows.Forms.Label();\n            this.cbAction = new System.Windows.Forms.ComboBox();\n            this.label7 = new System.Windows.Forms.Label();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.panel3 = new System.Windows.Forms.Panel();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.tableLayoutPanel2.SuspendLayout();\n            this.tableLayoutPanel3.SuspendLayout();\n            this.advancedFlowLayoutPanel1.SuspendLayout();\n            this.gbMatch.SuspendLayout();\n            this.gbConditions.SuspendLayout();\n            this.gbVariables.SuspendLayout();\n            this.groupBox2.SuspendLayout();\n            this.gbRedirect.SuspendLayout();\n            this.gbCustom.SuspendLayout();\n            this.gbRewrite.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.panel3.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.tableLayoutPanel2);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // tableLayoutPanel2\n            // \n            this.tableLayoutPanel2.ColumnCount = 1;\n            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\n            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 0, 1);\n            this.tableLayoutPanel2.Controls.Add(this.panel3, 0, 0);\n            this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel2.Name = \"tableLayoutPanel2\";\n            this.tableLayoutPanel2.RowCount = 3;\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel2.Size = new System.Drawing.Size(580, 600);\n            this.tableLayoutPanel2.TabIndex = 12;\n            // \n            // tableLayoutPanel3\n            // \n            this.tableLayoutPanel3.ColumnCount = 1;\n            this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel3.Controls.Add(this.advancedFlowLayoutPanel1, 0, 1);\n            this.tableLayoutPanel3.Controls.Add(this.panel2, 0, 0);\n            this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 63);\n            this.tableLayoutPanel3.Name = \"tableLayoutPanel3\";\n            this.tableLayoutPanel3.RowCount = 2;\n            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F));\n            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel3.Size = new System.Drawing.Size(574, 514);\n            this.tableLayoutPanel3.TabIndex = 8;\n            // \n            // advancedFlowLayoutPanel1\n            // \n            this.advancedFlowLayoutPanel1.AutoScroll = true;\n            this.advancedFlowLayoutPanel1.Controls.Add(this.gbMatch);\n            this.advancedFlowLayoutPanel1.Controls.Add(this.gbConditions);\n            this.advancedFlowLayoutPanel1.Controls.Add(this.gbVariables);\n            this.advancedFlowLayoutPanel1.Controls.Add(this.groupBox2);\n            this.advancedFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.advancedFlowLayoutPanel1.Location = new System.Drawing.Point(3, 63);\n            this.advancedFlowLayoutPanel1.Name = \"advancedFlowLayoutPanel1\";\n            this.advancedFlowLayoutPanel1.Size = new System.Drawing.Size(568, 448);\n            this.advancedFlowLayoutPanel1.TabIndex = 7;\n            // \n            // gbMatch\n            // \n            this.gbMatch.ButtonStyle = MakarovDev.ExpandCollapsePanel.ExpandCollapseButton.ExpandButtonStyle.Circle;\n            this.gbMatch.Controls.Add(this.cbIgnoreCase);\n            this.gbMatch.Controls.Add(this.btnTest);\n            this.gbMatch.Controls.Add(this.txtPattern);\n            this.gbMatch.Controls.Add(this.label6);\n            this.gbMatch.Controls.Add(this.cbType);\n            this.gbMatch.Controls.Add(this.label5);\n            this.gbMatch.Controls.Add(this.cbMatch);\n            this.gbMatch.Controls.Add(this.label4);\n            this.gbMatch.ExpandedHeight = 182;\n            this.gbMatch.Location = new System.Drawing.Point(3, 3);\n            this.gbMatch.Name = \"gbMatch\";\n            this.gbMatch.Size = new System.Drawing.Size(545, 182);\n            this.gbMatch.TabIndex = 5;\n            this.gbMatch.Text = \"Match URL\";\n            this.gbMatch.UseAnimation = true;\n            // \n            // cbIgnoreCase\n            // \n            this.cbIgnoreCase.AutoSize = true;\n            this.cbIgnoreCase.Location = new System.Drawing.Point(18, 153);\n            this.cbIgnoreCase.Name = \"cbIgnoreCase\";\n            this.cbIgnoreCase.Size = new System.Drawing.Size(90, 19);\n            this.cbIgnoreCase.TabIndex = 7;\n            this.cbIgnoreCase.Text = \"Ignore case\";\n            this.cbIgnoreCase.UseVisualStyleBackColor = true;\n            this.cbIgnoreCase.CheckedChanged += new System.EventHandler(this.CbAppendRedirectCheckedChanged);\n            // \n            // btnTest\n            // \n            this.btnTest.Location = new System.Drawing.Point(549, 125);\n            this.btnTest.Name = \"btnTest\";\n            this.btnTest.Size = new System.Drawing.Size(95, 23);\n            this.btnTest.TabIndex = 6;\n            this.btnTest.Text = \"Test patterns...\";\n            this.btnTest.UseVisualStyleBackColor = true;\n            this.btnTest.Click += new System.EventHandler(this.BtnTestClick);\n            // \n            // txtPattern\n            // \n            this.txtPattern.Location = new System.Drawing.Point(18, 126);\n            this.txtPattern.Name = \"txtPattern\";\n            this.txtPattern.Size = new System.Drawing.Size(525, 21);\n            this.txtPattern.TabIndex = 5;\n            this.txtPattern.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(15, 98);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(49, 15);\n            this.label6.TabIndex = 4;\n            this.label6.Text = \"Pattern:\";\n            // \n            // cbType\n            // \n            this.cbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbType.FormattingEnabled = true;\n            this.cbType.Items.AddRange(new object[] {\n            \"Regular Expressions\",\n            \"Wildcards\",\n            \"Exact Match\"});\n            this.cbType.Location = new System.Drawing.Point(379, 56);\n            this.cbType.Name = \"cbType\";\n            this.cbType.Size = new System.Drawing.Size(265, 21);\n            this.cbType.TabIndex = 3;\n            this.cbType.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(376, 40);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(42, 15);\n            this.label5.TabIndex = 2;\n            this.label5.Text = \"Using:\";\n            // \n            // cbMatch\n            // \n            this.cbMatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbMatch.FormattingEnabled = true;\n            this.cbMatch.Items.AddRange(new object[] {\n            \"Matches the Pattern\",\n            \"Does Not Match the Pattern\"});\n            this.cbMatch.Location = new System.Drawing.Point(18, 56);\n            this.cbMatch.Name = \"cbMatch\";\n            this.cbMatch.Size = new System.Drawing.Size(265, 21);\n            this.cbMatch.TabIndex = 1;\n            this.cbMatch.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(15, 40);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(98, 15);\n            this.label4.TabIndex = 0;\n            this.label4.Text = \"Requested URL:\";\n            // \n            // gbConditions\n            // \n            this.gbConditions.ButtonStyle = MakarovDev.ExpandCollapsePanel.ExpandCollapseButton.ExpandButtonStyle.Circle;\n            this.gbConditions.Controls.Add(this.btnDown);\n            this.gbConditions.Controls.Add(this.btnUp);\n            this.gbConditions.Controls.Add(this.btnRemove);\n            this.gbConditions.Controls.Add(this.btnEdit);\n            this.gbConditions.Controls.Add(this.lvConditions);\n            this.gbConditions.Controls.Add(this.cbTrack);\n            this.gbConditions.Controls.Add(this.btnAdd);\n            this.gbConditions.Controls.Add(this.cbAny);\n            this.gbConditions.Controls.Add(this.label20);\n            this.gbConditions.ExpandedHeight = 300;\n            this.gbConditions.IsExpanded = false;\n            this.gbConditions.Location = new System.Drawing.Point(3, 191);\n            this.gbConditions.Name = \"gbConditions\";\n            this.gbConditions.Size = new System.Drawing.Size(545, 35);\n            this.gbConditions.TabIndex = 9;\n            this.gbConditions.Text = \"Conditions\";\n            this.gbConditions.UseAnimation = true;\n            // \n            // btnDown\n            // \n            this.btnDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnDown.Location = new System.Drawing.Point(539, 233);\n            this.btnDown.Name = \"btnDown\";\n            this.btnDown.Size = new System.Drawing.Size(95, 23);\n            this.btnDown.TabIndex = 12;\n            this.btnDown.Text = \"Move Down\";\n            this.btnDown.UseVisualStyleBackColor = false;\n            this.btnDown.Click += new System.EventHandler(this.BtnDownClick);\n            // \n            // btnUp\n            // \n            this.btnUp.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnUp.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnUp.Location = new System.Drawing.Point(539, 204);\n            this.btnUp.Name = \"btnUp\";\n            this.btnUp.Size = new System.Drawing.Size(95, 23);\n            this.btnUp.TabIndex = 11;\n            this.btnUp.Text = \"Move Up\";\n            this.btnUp.UseVisualStyleBackColor = false;\n            this.btnUp.Click += new System.EventHandler(this.BtnUpClick);\n            // \n            // btnRemove\n            // \n            this.btnRemove.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnRemove.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnRemove.Location = new System.Drawing.Point(539, 155);\n            this.btnRemove.Name = \"btnRemove\";\n            this.btnRemove.Size = new System.Drawing.Size(95, 23);\n            this.btnRemove.TabIndex = 10;\n            this.btnRemove.Text = \"Remove\";\n            this.btnRemove.UseVisualStyleBackColor = false;\n            this.btnRemove.Click += new System.EventHandler(this.BtnRemoveClick);\n            // \n            // btnEdit\n            // \n            this.btnEdit.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnEdit.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnEdit.Location = new System.Drawing.Point(539, 126);\n            this.btnEdit.Name = \"btnEdit\";\n            this.btnEdit.Size = new System.Drawing.Size(95, 23);\n            this.btnEdit.TabIndex = 9;\n            this.btnEdit.Text = \"Edit...\";\n            this.btnEdit.UseVisualStyleBackColor = false;\n            this.btnEdit.Click += new System.EventHandler(this.BtnEditClick);\n            // \n            // lvConditions\n            // \n            this.lvConditions.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.lvConditions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chInput,\n            this.chType,\n            this.chPattern});\n            this.lvConditions.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));\n            this.lvConditions.FullRowSelect = true;\n            this.lvConditions.HideSelection = false;\n            this.lvConditions.Location = new System.Drawing.Point(8, 84);\n            this.lvConditions.MultiSelect = false;\n            this.lvConditions.Name = \"lvConditions\";\n            this.lvConditions.Size = new System.Drawing.Size(525, 185);\n            this.lvConditions.TabIndex = 8;\n            this.lvConditions.UseCompatibleStateImageBehavior = false;\n            this.lvConditions.View = System.Windows.Forms.View.Details;\n            this.lvConditions.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvConditions_ItemSelectionChanged);\n            // \n            // chInput\n            // \n            this.chInput.Text = \"Input\";\n            this.chInput.Width = 100;\n            // \n            // chType\n            // \n            this.chType.Text = \"Type\";\n            this.chType.Width = 160;\n            // \n            // chPattern\n            // \n            this.chPattern.Text = \"Pattern\";\n            this.chPattern.Width = 180;\n            // \n            // cbTrack\n            // \n            this.cbTrack.AutoSize = true;\n            this.cbTrack.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.cbTrack.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.cbTrack.Location = new System.Drawing.Point(18, 275);\n            this.cbTrack.Name = \"cbTrack\";\n            this.cbTrack.Size = new System.Drawing.Size(239, 19);\n            this.cbTrack.TabIndex = 7;\n            this.cbTrack.Text = \"Track capture groups across conditions\";\n            this.cbTrack.UseVisualStyleBackColor = false;\n            // \n            // btnAdd\n            // \n            this.btnAdd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnAdd.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnAdd.Location = new System.Drawing.Point(539, 97);\n            this.btnAdd.Name = \"btnAdd\";\n            this.btnAdd.Size = new System.Drawing.Size(95, 23);\n            this.btnAdd.TabIndex = 6;\n            this.btnAdd.Text = \"Add...\";\n            this.btnAdd.UseVisualStyleBackColor = false;\n            this.btnAdd.Click += new System.EventHandler(this.BtnAddClick);\n            // \n            // cbAny\n            // \n            this.cbAny.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.cbAny.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbAny.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));\n            this.cbAny.FormattingEnabled = true;\n            this.cbAny.Items.AddRange(new object[] {\n            \"Match All\",\n            \"Match Any\"});\n            this.cbAny.Location = new System.Drawing.Point(18, 56);\n            this.cbAny.Name = \"cbAny\";\n            this.cbAny.Size = new System.Drawing.Size(131, 21);\n            this.cbAny.TabIndex = 1;\n            // \n            // label20\n            // \n            this.label20.AutoSize = true;\n            this.label20.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.label20.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.label20.Location = new System.Drawing.Point(15, 40);\n            this.label20.Name = \"label20\";\n            this.label20.Size = new System.Drawing.Size(102, 15);\n            this.label20.TabIndex = 0;\n            this.label20.Text = \"Logical grouping:\";\n            // \n            // gbVariables\n            // \n            this.gbVariables.ButtonStyle = MakarovDev.ExpandCollapsePanel.ExpandCollapseButton.ExpandButtonStyle.Circle;\n            this.gbVariables.Controls.Add(this.btnVarRemove);\n            this.gbVariables.Controls.Add(this.btnVarEdit);\n            this.gbVariables.Controls.Add(this.btnVarAdd);\n            this.gbVariables.Controls.Add(this.btnVarUp);\n            this.gbVariables.Controls.Add(this.btnVarDown);\n            this.gbVariables.Controls.Add(this.lvVariables);\n            this.gbVariables.ExpandedHeight = 229;\n            this.gbVariables.IsExpanded = false;\n            this.gbVariables.Location = new System.Drawing.Point(3, 232);\n            this.gbVariables.Name = \"gbVariables\";\n            this.gbVariables.Size = new System.Drawing.Size(545, 35);\n            this.gbVariables.TabIndex = 8;\n            this.gbVariables.Text = \"Server Variables\";\n            this.gbVariables.UseAnimation = true;\n            // \n            // btnVarRemove\n            // \n            this.btnVarRemove.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnVarRemove.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnVarRemove.Location = new System.Drawing.Point(539, 113);\n            this.btnVarRemove.Name = \"btnVarRemove\";\n            this.btnVarRemove.Size = new System.Drawing.Size(95, 23);\n            this.btnVarRemove.TabIndex = 17;\n            this.btnVarRemove.Text = \"Remove\";\n            this.btnVarRemove.UseVisualStyleBackColor = false;\n            this.btnVarRemove.Click += new System.EventHandler(this.BtnVarRemoveClick);\n            // \n            // btnVarEdit\n            // \n            this.btnVarEdit.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnVarEdit.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnVarEdit.Location = new System.Drawing.Point(539, 84);\n            this.btnVarEdit.Name = \"btnVarEdit\";\n            this.btnVarEdit.Size = new System.Drawing.Size(95, 23);\n            this.btnVarEdit.TabIndex = 16;\n            this.btnVarEdit.Text = \"Edit..\";\n            this.btnVarEdit.UseVisualStyleBackColor = false;\n            this.btnVarEdit.Click += new System.EventHandler(this.BtnVarEditClick);\n            // \n            // btnVarAdd\n            // \n            this.btnVarAdd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnVarAdd.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnVarAdd.Location = new System.Drawing.Point(539, 55);\n            this.btnVarAdd.Name = \"btnVarAdd\";\n            this.btnVarAdd.Size = new System.Drawing.Size(95, 23);\n            this.btnVarAdd.TabIndex = 15;\n            this.btnVarAdd.Text = \"Add...\";\n            this.btnVarAdd.UseVisualStyleBackColor = false;\n            this.btnVarAdd.Click += new System.EventHandler(this.BtnVarAddClick);\n            // \n            // btnVarUp\n            // \n            this.btnVarUp.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnVarUp.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnVarUp.Location = new System.Drawing.Point(539, 166);\n            this.btnVarUp.Name = \"btnVarUp\";\n            this.btnVarUp.Size = new System.Drawing.Size(95, 23);\n            this.btnVarUp.TabIndex = 14;\n            this.btnVarUp.Text = \"Move Up\";\n            this.btnVarUp.UseVisualStyleBackColor = false;\n            this.btnVarUp.Click += new System.EventHandler(this.BtnVarUpClick);\n            // \n            // btnVarDown\n            // \n            this.btnVarDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnVarDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnVarDown.Location = new System.Drawing.Point(539, 195);\n            this.btnVarDown.Name = \"btnVarDown\";\n            this.btnVarDown.Size = new System.Drawing.Size(95, 23);\n            this.btnVarDown.TabIndex = 13;\n            this.btnVarDown.Text = \"Move Down\";\n            this.btnVarDown.UseVisualStyleBackColor = false;\n            this.btnVarDown.Click += new System.EventHandler(this.BtnVarDownClick);\n            // \n            // lvVariables\n            // \n            this.lvVariables.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.lvVariables.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chValue,\n            this.chReplace});\n            this.lvVariables.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));\n            this.lvVariables.FullRowSelect = true;\n            this.lvVariables.HideSelection = false;\n            this.lvVariables.Location = new System.Drawing.Point(8, 43);\n            this.lvVariables.MultiSelect = false;\n            this.lvVariables.Name = \"lvVariables\";\n            this.lvVariables.Size = new System.Drawing.Size(525, 185);\n            this.lvVariables.TabIndex = 9;\n            this.lvVariables.UseCompatibleStateImageBehavior = false;\n            this.lvVariables.View = System.Windows.Forms.View.Details;\n            this.lvVariables.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvVariables_ItemSelectionChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 100;\n            // \n            // chValue\n            // \n            this.chValue.Text = \"Value\";\n            this.chValue.Width = 160;\n            // \n            // chReplace\n            // \n            this.chReplace.Text = \"Replace\";\n            this.chReplace.Width = 180;\n            // \n            // groupBox2\n            // \n            this.groupBox2.ButtonStyle = MakarovDev.ExpandCollapsePanel.ExpandCollapseButton.ExpandButtonStyle.Circle;\n            this.groupBox2.Controls.Add(this.gbRedirect);\n            this.groupBox2.Controls.Add(this.gbCustom);\n            this.groupBox2.Controls.Add(this.cbStop);\n            this.groupBox2.Controls.Add(this.gbRewrite);\n            this.groupBox2.Controls.Add(this.cbAction);\n            this.groupBox2.Controls.Add(this.label7);\n            this.groupBox2.ExpandedHeight = 280;\n            this.groupBox2.Location = new System.Drawing.Point(3, 273);\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.Size = new System.Drawing.Size(545, 280);\n            this.groupBox2.TabIndex = 6;\n            this.groupBox2.Text = \"Action\";\n            this.groupBox2.UseAnimation = true;\n            // \n            // gbRedirect\n            // \n            this.gbRedirect.Controls.Add(this.cbRedirect);\n            this.gbRedirect.Controls.Add(this.label14);\n            this.gbRedirect.Controls.Add(this.cbAppendRedirect);\n            this.gbRedirect.Controls.Add(this.txtRedirect);\n            this.gbRedirect.Controls.Add(this.label9);\n            this.gbRedirect.Location = new System.Drawing.Point(18, 84);\n            this.gbRedirect.Name = \"gbRedirect\";\n            this.gbRedirect.Size = new System.Drawing.Size(626, 176);\n            this.gbRedirect.TabIndex = 4;\n            this.gbRedirect.TabStop = false;\n            this.gbRedirect.Text = \"Action Properties\";\n            // \n            // cbRedirect\n            // \n            this.cbRedirect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbRedirect.FormattingEnabled = true;\n            this.cbRedirect.Items.AddRange(new object[] {\n            \"Permanent (301)\",\n            \"Found (302)\",\n            \"See Other (303)\",\n            \"Temporary (307)\"});\n            this.cbRedirect.Location = new System.Drawing.Point(21, 122);\n            this.cbRedirect.Name = \"cbRedirect\";\n            this.cbRedirect.Size = new System.Drawing.Size(584, 21);\n            this.cbRedirect.TabIndex = 4;\n            this.cbRedirect.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label14\n            // \n            this.label14.AutoSize = true;\n            this.label14.Location = new System.Drawing.Point(18, 101);\n            this.label14.Name = \"label14\";\n            this.label14.Size = new System.Drawing.Size(81, 15);\n            this.label14.TabIndex = 3;\n            this.label14.Text = \"Redirect type:\";\n            // \n            // cbAppendRedirect\n            // \n            this.cbAppendRedirect.AutoSize = true;\n            this.cbAppendRedirect.Checked = true;\n            this.cbAppendRedirect.CheckState = System.Windows.Forms.CheckState.Checked;\n            this.cbAppendRedirect.Location = new System.Drawing.Point(21, 72);\n            this.cbAppendRedirect.Name = \"cbAppendRedirect\";\n            this.cbAppendRedirect.Size = new System.Drawing.Size(134, 19);\n            this.cbAppendRedirect.TabIndex = 2;\n            this.cbAppendRedirect.Text = \"Append query string\";\n            this.cbAppendRedirect.UseVisualStyleBackColor = true;\n            this.cbAppendRedirect.CheckedChanged += new System.EventHandler(this.CbAppendRedirectCheckedChanged);\n            // \n            // txtRedirect\n            // \n            this.txtRedirect.Location = new System.Drawing.Point(21, 43);\n            this.txtRedirect.Name = \"txtRedirect\";\n            this.txtRedirect.Size = new System.Drawing.Size(584, 21);\n            this.txtRedirect.TabIndex = 1;\n            this.txtRedirect.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label9\n            // \n            this.label9.AutoSize = true;\n            this.label9.Location = new System.Drawing.Point(18, 26);\n            this.label9.Name = \"label9\";\n            this.label9.Size = new System.Drawing.Size(84, 15);\n            this.label9.TabIndex = 0;\n            this.label9.Text = \"Redirect URL:\";\n            // \n            // gbCustom\n            // \n            this.gbCustom.Controls.Add(this.txtError);\n            this.gbCustom.Controls.Add(this.txtReason);\n            this.gbCustom.Controls.Add(this.label13);\n            this.gbCustom.Controls.Add(this.label12);\n            this.gbCustom.Controls.Add(this.txtStatus);\n            this.gbCustom.Controls.Add(this.label11);\n            this.gbCustom.Controls.Add(this.txtSubstatus);\n            this.gbCustom.Controls.Add(this.label10);\n            this.gbCustom.Location = new System.Drawing.Point(18, 84);\n            this.gbCustom.Name = \"gbCustom\";\n            this.gbCustom.Size = new System.Drawing.Size(626, 197);\n            this.gbCustom.TabIndex = 4;\n            this.gbCustom.TabStop = false;\n            this.gbCustom.Text = \"Action Properties\";\n            // \n            // txtError\n            // \n            this.txtError.Location = new System.Drawing.Point(21, 164);\n            this.txtError.Name = \"txtError\";\n            this.txtError.Size = new System.Drawing.Size(584, 21);\n            this.txtError.TabIndex = 9;\n            this.txtError.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // txtReason\n            // \n            this.txtReason.Location = new System.Drawing.Point(21, 117);\n            this.txtReason.Name = \"txtReason\";\n            this.txtReason.Size = new System.Drawing.Size(584, 21);\n            this.txtReason.TabIndex = 8;\n            this.txtReason.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label13\n            // \n            this.label13.AutoSize = true;\n            this.label13.Location = new System.Drawing.Point(18, 143);\n            this.label13.Name = \"label13\";\n            this.label13.Size = new System.Drawing.Size(100, 15);\n            this.label13.TabIndex = 7;\n            this.label13.Text = \"Error description:\";\n            // \n            // label12\n            // \n            this.label12.AutoSize = true;\n            this.label12.Location = new System.Drawing.Point(18, 101);\n            this.label12.Name = \"label12\";\n            this.label12.Size = new System.Drawing.Size(53, 15);\n            this.label12.TabIndex = 6;\n            this.label12.Text = \"Reason:\";\n            // \n            // txtStatus\n            // \n            this.txtStatus.Location = new System.Drawing.Point(133, 23);\n            this.txtStatus.Name = \"txtStatus\";\n            this.txtStatus.Size = new System.Drawing.Size(472, 21);\n            this.txtStatus.TabIndex = 5;\n            this.txtStatus.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label11\n            // \n            this.label11.AutoSize = true;\n            this.label11.Location = new System.Drawing.Point(18, 64);\n            this.label11.Name = \"label11\";\n            this.label11.Size = new System.Drawing.Size(94, 15);\n            this.label11.TabIndex = 4;\n            this.label11.Text = \"Substatus code:\";\n            // \n            // txtSubstatus\n            // \n            this.txtSubstatus.Location = new System.Drawing.Point(133, 61);\n            this.txtSubstatus.Name = \"txtSubstatus\";\n            this.txtSubstatus.Size = new System.Drawing.Size(472, 21);\n            this.txtSubstatus.TabIndex = 1;\n            this.txtSubstatus.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label10\n            // \n            this.label10.AutoSize = true;\n            this.label10.Location = new System.Drawing.Point(18, 26);\n            this.label10.Name = \"label10\";\n            this.label10.Size = new System.Drawing.Size(74, 15);\n            this.label10.TabIndex = 0;\n            this.label10.Text = \"Status code:\";\n            // \n            // cbStop\n            // \n            this.cbStop.AutoSize = true;\n            this.cbStop.Location = new System.Drawing.Point(18, 243);\n            this.cbStop.Name = \"cbStop\";\n            this.cbStop.Size = new System.Drawing.Size(224, 19);\n            this.cbStop.TabIndex = 3;\n            this.cbStop.Text = \"Stop processing of subsequent rules\";\n            this.cbStop.UseVisualStyleBackColor = true;\n            this.cbStop.CheckedChanged += new System.EventHandler(this.CbAppendRedirectCheckedChanged);\n            // \n            // gbRewrite\n            // \n            this.gbRewrite.Controls.Add(this.cbLog);\n            this.gbRewrite.Controls.Add(this.cbAppend);\n            this.gbRewrite.Controls.Add(this.txtUrl);\n            this.gbRewrite.Controls.Add(this.label8);\n            this.gbRewrite.Location = new System.Drawing.Point(18, 84);\n            this.gbRewrite.Name = \"gbRewrite\";\n            this.gbRewrite.Size = new System.Drawing.Size(626, 143);\n            this.gbRewrite.TabIndex = 2;\n            this.gbRewrite.TabStop = false;\n            this.gbRewrite.Text = \"Action Properties\";\n            // \n            // cbLog\n            // \n            this.cbLog.AutoSize = true;\n            this.cbLog.Location = new System.Drawing.Point(21, 108);\n            this.cbLog.Name = \"cbLog\";\n            this.cbLog.Size = new System.Drawing.Size(125, 19);\n            this.cbLog.TabIndex = 3;\n            this.cbLog.Text = \"Log rewritten URL\";\n            this.cbLog.UseVisualStyleBackColor = true;\n            this.cbLog.CheckedChanged += new System.EventHandler(this.CbAppendRedirectCheckedChanged);\n            // \n            // cbAppend\n            // \n            this.cbAppend.AutoSize = true;\n            this.cbAppend.Checked = true;\n            this.cbAppend.CheckState = System.Windows.Forms.CheckState.Checked;\n            this.cbAppend.Location = new System.Drawing.Point(21, 72);\n            this.cbAppend.Name = \"cbAppend\";\n            this.cbAppend.Size = new System.Drawing.Size(134, 19);\n            this.cbAppend.TabIndex = 2;\n            this.cbAppend.Text = \"Append query string\";\n            this.cbAppend.UseVisualStyleBackColor = true;\n            this.cbAppend.CheckedChanged += new System.EventHandler(this.CbAppendRedirectCheckedChanged);\n            // \n            // txtUrl\n            // \n            this.txtUrl.Location = new System.Drawing.Point(21, 43);\n            this.txtUrl.Name = \"txtUrl\";\n            this.txtUrl.Size = new System.Drawing.Size(584, 21);\n            this.txtUrl.TabIndex = 1;\n            this.txtUrl.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label8\n            // \n            this.label8.AutoSize = true;\n            this.label8.Location = new System.Drawing.Point(18, 26);\n            this.label8.Name = \"label8\";\n            this.label8.Size = new System.Drawing.Size(80, 15);\n            this.label8.TabIndex = 0;\n            this.label8.Text = \"Rewrite URL:\";\n            // \n            // cbAction\n            // \n            this.cbAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbAction.FormattingEnabled = true;\n            this.cbAction.Items.AddRange(new object[] {\n            \"None\",\n            \"Rewrite\",\n            \"Redirect\",\n            \"Custom Response\",\n            \"Abort Request\"});\n            this.cbAction.Location = new System.Drawing.Point(18, 56);\n            this.cbAction.Name = \"cbAction\";\n            this.cbAction.Size = new System.Drawing.Size(140, 21);\n            this.cbAction.TabIndex = 1;\n            this.cbAction.SelectedIndexChanged += new System.EventHandler(this.CbActionSelectedIndexChanged);\n            this.cbAction.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label7\n            // \n            this.label7.AutoSize = true;\n            this.label7.Location = new System.Drawing.Point(15, 40);\n            this.label7.Name = \"label7\";\n            this.label7.Size = new System.Drawing.Size(68, 15);\n            this.label7.TabIndex = 0;\n            this.label7.Text = \"Action type:\";\n            // \n            // panel2\n            // \n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Controls.Add(this.txtName);\n            this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel2.Location = new System.Drawing.Point(3, 3);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(568, 54);\n            this.panel2.TabIndex = 11;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(18, 11);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(38, 13);\n            this.label2.TabIndex = 3;\n            this.label2.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(21, 27);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(665, 20);\n            this.txtName.TabIndex = 4;\n            this.txtName.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // panel3\n            // \n            this.panel3.Controls.Add(this.pictureBox1);\n            this.panel3.Controls.Add(this.label3);\n            this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel3.Location = new System.Drawing.Point(3, 3);\n            this.panel3.Name = \"panel3\";\n            this.panel3.Size = new System.Drawing.Size(574, 54);\n            this.panel3.TabIndex = 8;\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(182, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Edit Inbound Rule\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // InboundRulePage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"InboundRulePage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.tableLayoutPanel2.ResumeLayout(false);\n            this.tableLayoutPanel3.ResumeLayout(false);\n            this.advancedFlowLayoutPanel1.ResumeLayout(false);\n            this.gbMatch.ResumeLayout(false);\n            this.gbMatch.PerformLayout();\n            this.gbConditions.ResumeLayout(false);\n            this.gbConditions.PerformLayout();\n            this.gbVariables.ResumeLayout(false);\n            this.gbVariables.PerformLayout();\n            this.groupBox2.ResumeLayout(false);\n            this.groupBox2.PerformLayout();\n            this.gbRedirect.ResumeLayout(false);\n            this.gbRedirect.PerformLayout();\n            this.gbCustom.ResumeLayout(false);\n            this.gbCustom.PerformLayout();\n            this.gbRewrite.ResumeLayout(false);\n            this.gbRewrite.PerformLayout();\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.panel3.ResumeLayout(false);\n            this.panel3.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private TableLayoutPanel tableLayoutPanel2;\n        private TableLayoutPanel tableLayoutPanel3;\n        private AdvancedFlowLayoutPanel advancedFlowLayoutPanel1;\n        private ExpandCollapsePanel gbMatch;\n        private CheckBox cbIgnoreCase;\n        private Button btnTest;\n        private TextBox txtPattern;\n        private Label label6;\n        private ComboBox cbType;\n        private Label label5;\n        private ComboBox cbMatch;\n        private Label label4;\n        private ExpandCollapsePanel gbConditions;\n        private Button btnDown;\n        private Button btnUp;\n        private Button btnRemove;\n        private Button btnEdit;\n        private ListView lvConditions;\n        private ColumnHeader chInput;\n        private ColumnHeader chType;\n        private ColumnHeader chPattern;\n        private CheckBox cbTrack;\n        private Button btnAdd;\n        private ComboBox cbAny;\n        private Label label20;\n        private ExpandCollapsePanel gbVariables;\n        private Button btnVarRemove;\n        private Button btnVarEdit;\n        private Button btnVarAdd;\n        private Button btnVarUp;\n        private Button btnVarDown;\n        private ListView lvVariables;\n        private ColumnHeader chName;\n        private ColumnHeader chValue;\n        private ColumnHeader chReplace;\n        private ExpandCollapsePanel groupBox2;\n        private GroupBox gbRedirect;\n        private ComboBox cbRedirect;\n        private Label label14;\n        private CheckBox cbAppendRedirect;\n        private TextBox txtRedirect;\n        private Label label9;\n        private GroupBox gbCustom;\n        private TextBox txtError;\n        private TextBox txtReason;\n        private Label label13;\n        private Label label12;\n        private TextBox txtStatus;\n        private Label label11;\n        private TextBox txtSubstatus;\n        private Label label10;\n        private CheckBox cbStop;\n        private GroupBox gbRewrite;\n        private CheckBox cbLog;\n        private CheckBox cbAppend;\n        private TextBox txtUrl;\n        private Label label8;\n        private ComboBox cbAction;\n        private Label label7;\n        private Panel panel2;\n        private Label label2;\n        private TextBox txtName;\n        private Panel panel3;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/InboundRulePage.cs",
    "content": "﻿using System.ComponentModel;\n// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n    using JexusManager.Services;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class InboundRulePage : ModuleDialogPage, IModuleChildPage\n    {\n        private sealed class PageTaskList : DefaultTaskList\n        {\n            private readonly InboundRulePage _owner;\n\n            public PageTaskList(InboundRulePage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                           {\n                               GetBackTaskItem(\"Back\", \"Back to Rules\"),\n                               MethodTaskItem.CreateSeparator().SetUsage(),\n                               HelpTaskItem\n                           };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Back()\n            {\n                _owner.Back();\n            }\n        }\n\n        private class ServerVariableListViewItem : ListViewItem\n        {\n            private readonly ListViewSubItem _value;\n\n            private readonly ListViewSubItem _replace;\n\n            public ServerVariableListViewItem(ServerVariableItem variable)\n                : base(variable.Name)\n            {\n                _value = new ListViewSubItem(this, variable.Value);\n                SubItems.Add(_value);\n                _replace = new ListViewSubItem(this, variable.Replace.ToString());\n                SubItems.Add(_replace);\n                Item = variable;\n            }\n\n            public ServerVariableItem Item { get; }\n\n            public void Update()\n            {\n                Text = Item.Name;\n                _value.Text = Item.Value;\n                _replace.Text = Item.Replace.ToString();\n            }\n        }\n\n        private bool _hasChanges;\n\n        private bool _initialized;\n\n        private TaskList _taskList;\n\n        private InboundFeature _feature;\n\n        public InboundRulePage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)ServiceProvider.GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            var info = (Tuple<InboundFeature, InboundRule>)navigationData;\n            _feature = info.Item1;\n            Rule = info.Item2;\n            txtName.ReadOnly = Rule != null;\n            if (Rule != null)\n            {\n                // TODO: invoke RuleSettingsUpdate somewhere.\n                Rule.RuleSettingsUpdated = Refresh;\n            }\n\n            if (Rule == null)\n            {\n                Rule = new InboundRule(null);\n                Rule.Enabled = true;\n            }\n\n            Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130425&amp;clcid=0x409\");\n            return true;\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void Back()\n        {\n            if (_hasChanges)\n            {\n                var result = ShowMessage(\n                    \"The changes you have made will be lost. Do you want to save changes?\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1);\n                if (result == DialogResult.Cancel)\n                {\n                    return;\n                }\n\n                if (result == DialogResult.Yes)\n                {\n                    var applied = ApplyChanges();\n                    if (!applied)\n                    {\n                        return;\n                    }\n                }\n            }\n\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(1);\n            _feature.SelectedItem = Rule;\n            _feature.Refresh();\n        }\n\n        private void TxtNameTextChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public InboundRule Rule { get; set; }\n\n        private void BtnTestClick(object sender, EventArgs e)\n        {\n            using var dialog = new RegexTestDialog(Module, txtPattern.Text, cbIgnoreCase.Checked, false);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            txtPattern.Text = dialog.Pattern;\n            cbIgnoreCase.Checked = dialog.IgnoreCase;\n        }\n\n        protected override bool ApplyChanges()\n        {\n            if (!CanApplyChanges)\n            {\n                ShowMessage(\"The data in the page is invalid. Correct the data and try again.\");\n                return false;\n            }\n\n            uint status = 0;\n            uint substatus = 0;\n            if (cbAction.SelectedIndex == 3)\n            {\n                if (!uint.TryParse(txtStatus.Text, out status) || status < 100 || status > 999\n                    || (status > 299 && status < 308))\n                {\n                    ShowMessage(\n                        string.Format(\n                            \"The specific code '{0}' is not valid. The status code must be between 100 and 999 and cannot contain values between 300 and 307.\",\n                            txtStatus.Text),\n                        MessageBoxButtons.OK,\n                        MessageBoxIcon.Warning,\n                        MessageBoxDefaultButton.Button1);\n                    return false;\n                }\n\n                if (!uint.TryParse(txtSubstatus.Text, out substatus) || substatus > 999)\n                {\n                    ShowMessage(\n                        string.Format(\n                            \"The specified code '{0}' is not valid. Sub-status codes must be between 0 and 999.\",\n                            txtSubstatus.Text),\n                        MessageBoxButtons.OK,\n                        MessageBoxIcon.Warning,\n                        MessageBoxDefaultButton.Button1);\n                    return false;\n                }\n            }\n\n            Rule.Name = txtName.Text;\n            Rule.PatternSyntax = cbType.SelectedIndex;\n            Rule.StopProcessing = cbStop.Checked;\n            Rule.PatternUrl = txtPattern.Text;\n            Rule.IgnoreCase = cbIgnoreCase.Checked;\n            Rule.Negate = cbMatch.SelectedIndex == 1;\n            Rule.Type = cbAction.SelectedIndex;\n            Rule.ActionUrl = cbAction.SelectedIndex == 1 ? txtUrl.Text : txtRedirect.Text;\n            Rule.AppendQueryString = cbAction.SelectedIndex == 1 ? cbAppend.Checked : cbAppendRedirect.Checked;\n            Rule.LogRewrittenUrl = cbLog.Checked;\n            Rule.RedirectType = cbRedirect.SelectedIndex;\n            Rule.StatusCode = status;\n            Rule.SubStatusCode = substatus;\n            Rule.StatusReason = txtReason.Text;\n            Rule.StatusDescription = txtError.Text;\n\n            if (txtName.ReadOnly)\n            {\n                _feature.EditItem(Rule);\n            }\n            else\n            {\n                txtName.ReadOnly = true;\n                _feature.AddItem(Rule);\n            }\n\n            if (!Rule.ApplyChanges())\n            {\n                return false;\n            }\n\n            ClearChanges();\n            return true;\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            Rule.CancelChanges();\n            ClearChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get\n            {\n                return _hasChanges;\n            }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get\n            {\n                return !string.IsNullOrWhiteSpace(txtName.Text) && !string.IsNullOrWhiteSpace(txtPattern.Text) &&\n                    (\n                        (cbAction.SelectedIndex == 1 && !string.IsNullOrWhiteSpace(txtUrl.Text)) ||\n                        (cbAction.SelectedIndex == 2 && !string.IsNullOrWhiteSpace(txtRedirect.Text)) ||\n                        (cbAction.SelectedIndex == 3 && !string.IsNullOrWhiteSpace(txtReason.Text) && !string.IsNullOrWhiteSpace(txtError.Text) && !string.IsNullOrWhiteSpace(txtStatus.Text) && !string.IsNullOrWhiteSpace(txtSubstatus.Text)));\n            }\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            _initialized = false;\n            Refresh();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        protected override void OnRefresh()\n        {\n            if (!_hasChanges)\n            {\n                cbAction.SelectedIndex = 1;\n                cbAppend.Checked = true;\n                cbAppendRedirect.Checked = true;\n                cbIgnoreCase.Checked = true;\n                cbMatch.SelectedIndex = 0;\n                cbStop.Checked = false;\n                cbType.SelectedIndex = 0;\n                cbLog.Checked = false;\n                cbRedirect.SelectedIndex = 0;\n                cbAny.SelectedIndex = 0;\n                if (Rule != null)\n                {\n                    txtName.Text = Rule.Name;\n                    cbAction.SelectedIndex = (int)Rule.Type;\n                    cbAppend.Checked = cbAppendRedirect.Checked = Rule.AppendQueryString;\n                    cbIgnoreCase.Checked = Rule.IgnoreCase;\n                    txtRedirect.Text = txtUrl.Text = Rule.ActionUrl;\n                    cbMatch.SelectedIndex = Rule.Negate ? 1 : 0;\n                    cbStop.Checked = Rule.StopProcessing;\n                    cbType.SelectedIndex = (int)Rule.PatternSyntax;\n                    txtPattern.Text = Rule.PatternUrl;\n                    cbLog.Checked = Rule.LogRewrittenUrl;\n                    cbRedirect.SelectedIndex = Rule.RedirectType;\n                    txtStatus.Text = Rule.StatusCode.ToString();\n                    txtSubstatus.Text = Rule.SubStatusCode.ToString();\n                    txtReason.Text = Rule.StatusReason;\n                    txtError.Text = Rule.StatusDescription;\n\n                    lvVariables.Items.Clear();\n                    foreach (var variable in Rule.ServerVariables)\n                    {\n                        lvVariables.Items.Add(new ServerVariableListViewItem(variable));\n                        gbVariables.IsExpanded = true;\n                    }\n\n                    lvConditions.Items.Clear();\n                    foreach (var condition in Rule.Conditions)\n                    {\n                        lvConditions.Items.Add(new ConditionListViewItem(condition));\n                        gbConditions.IsExpanded = true;\n                    }\n\n                    cbAny.SelectedIndex = (int)Rule.LogicalGrouping;\n                    cbTrack.Checked = Rule.TrackAllCaptures;\n                }\n\n                _initialized = true;\n            }\n\n            CbActionSelectedIndexChanged(null, null);\n            cbStop.Visible = cbAction.SelectedIndex == 0 || cbAction.SelectedIndex == 1;\n            UpdateVariablesButtons();\n            UpdateConditionsButtons();\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IModulePage ParentPage { get; set; }\n\n        private void CbActionSelectedIndexChanged(object sender, EventArgs e)\n        {\n            gbRewrite.Visible = cbAction.SelectedIndex == 1;\n            gbRedirect.Visible = cbAction.SelectedIndex == 2;\n            gbCustom.Visible = cbAction.SelectedIndex == 3;\n        }\n\n        private void CbAppendRedirectCheckedChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n        }\n\n        private void BtnAddClick(object sender, EventArgs e)\n        {\n            using (var dialog = new AddConditionDialog(ServiceProvider, null))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                var newItem = dialog.Item;\n                Rule.Conditions.Add(newItem);\n                var listViewItem = new ConditionListViewItem(newItem);\n                lvConditions.Items.Add(listViewItem);\n                listViewItem.Selected = true;\n            }\n            InformChanges();\n        }\n\n        private void BtnRemoveClick(object sender, EventArgs e)\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (dialog.ShowMessage(\n                \"Are you sure that you want to remove the selected condition?\",\n                \"Confirm Remove\",\n                MessageBoxButtons.YesNoCancel,\n                MessageBoxIcon.Question,\n                MessageBoxDefaultButton.Button1) != DialogResult.Yes)\n            {\n                return;\n            }\n\n            var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n            listViewItem.Remove();\n            var item = listViewItem.Item;\n            Rule.Conditions.Remove(item);\n            InformChanges();\n        }\n\n        private void BtnEditClick(object sender, EventArgs e)\n        {\n            var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n            using (var dialog = new AddConditionDialog(ServiceProvider, listViewItem.Item))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            listViewItem.Update();\n            InformChanges();\n        }\n\n        private void BtnDownClick(object sender, EventArgs e)\n        {\n            var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n            var index = listViewItem.Index;\n\n            var item = listViewItem.Item;\n            Rule.Conditions.RemoveAt(index);\n            listViewItem.Remove();\n\n            Rule.Conditions.Insert(index + 1, item);\n            lvConditions.Items.Insert(index + 1, listViewItem);\n            listViewItem.Selected = true;\n            InformChanges();\n        }\n\n        private void BtnUpClick(object sender, EventArgs e)\n        {\n            var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n            var index = listViewItem.Index;\n\n            var item = listViewItem.Item;\n            Rule.Conditions.RemoveAt(index);\n            listViewItem.Remove();\n\n            Rule.Conditions.Insert(index - 1, item);\n            lvConditions.Items.Insert(index - 1, listViewItem);\n            listViewItem.Selected = true;\n            InformChanges();\n        }\n\n        private void UpdateConditionsButtons()\n        {\n            var hasSelection = lvConditions.SelectedItems.Count > 0;\n            btnRemove.Enabled = btnEdit.Enabled = hasSelection;\n            btnDown.Enabled = hasSelection\n                                   && lvConditions.SelectedItems[0].Index < lvConditions.Items.Count - 1;\n            btnUp.Enabled = hasSelection && lvConditions.SelectedItems[0].Index > 0;\n        }\n\n        private void BtnVarAddClick(object sender, EventArgs e)\n        {\n            using (var dialog = new AddServerVariableDialog(ServiceProvider, null))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                var newItem = dialog.Item;\n                Rule.ServerVariables.Add(newItem);\n                var listViewItem = new ServerVariableListViewItem(newItem);\n                lvVariables.Items.Add(listViewItem);\n                listViewItem.Selected = true;\n            }\n            InformChanges();\n        }\n\n        private void BtnVarRemoveClick(object sender, EventArgs e)\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (dialog.ShowMessage(\n                \"Are you sure that you want to remove the selected entry?\",\n                \"Confirm Remove\",\n                MessageBoxButtons.YesNoCancel,\n                MessageBoxIcon.Question,\n                MessageBoxDefaultButton.Button1) != DialogResult.Yes)\n            {\n                return;\n            }\n\n            var listViewItem = ((ServerVariableListViewItem)lvVariables.SelectedItems[0]);\n            listViewItem.Remove();\n            var item = listViewItem.Item;\n            Rule.ServerVariables.Remove(item);\n            InformChanges();\n        }\n\n        private void BtnVarEditClick(object sender, EventArgs e)\n        {\n            var listViewItem = ((ServerVariableListViewItem)lvVariables.SelectedItems[0]);\n            using (var dialog = new AddServerVariableDialog(ServiceProvider, listViewItem.Item))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            listViewItem.Update();\n            InformChanges();\n        }\n\n        private void BtnVarDownClick(object sender, EventArgs e)\n        {\n            var listViewItem = ((ServerVariableListViewItem)lvVariables.SelectedItems[0]);\n            var index = listViewItem.Index;\n\n            var item = listViewItem.Item;\n            Rule.ServerVariables.RemoveAt(index);\n            listViewItem.Remove();\n\n            Rule.ServerVariables.Insert(index + 1, item);\n            lvVariables.Items.Insert(index + 1, listViewItem);\n            listViewItem.Selected = true;\n            InformChanges();\n        }\n\n        private void BtnVarUpClick(object sender, EventArgs e)\n        {\n            var listViewItem = ((ServerVariableListViewItem)lvVariables.SelectedItems[0]);\n            var index = listViewItem.Index;\n\n            var item = listViewItem.Item;\n            Rule.ServerVariables.RemoveAt(index);\n            listViewItem.Remove();\n\n            Rule.ServerVariables.Insert(index - 1, item);\n            lvVariables.Items.Insert(index - 1, listViewItem);\n            listViewItem.Selected = true;\n            InformChanges();\n        }\n\n        private void UpdateVariablesButtons()\n        {\n            var hasSelection = lvVariables.SelectedItems.Count > 0;\n            btnVarRemove.Enabled = btnVarEdit.Enabled = hasSelection;\n            btnVarDown.Enabled = hasSelection\n                                      && lvVariables.SelectedItems[0].Index < lvVariables.Items.Count - 1;\n            btnVarUp.Enabled = hasSelection && lvVariables.SelectedItems[0].Index > 0;\n        }\n\n        private void lvConditions_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)\n        {\n            UpdateConditionsButtons();\n        }\n\n        private void lvVariables_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)\n        {\n            UpdateVariablesButtons();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/InboundRulePage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Windows.Forms;\n    using JexusManager.Services;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal class MapItem : FeatureBase<MapRule>, IItem<MapItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(MapItem other)\n        {\n            return other != null && other.Name == Name;\n        }\n\n        private readonly MapsFeature _feature;\n\n        public string Name { get; internal set; }\n\n        public string Flag { get; set; }\n\n        public string DefaultValue { get; set; }\n\n        public MapSettingsUpdatedEventHandler MapSettingsUpdated { get; set; }\n\n        public MapItem(ConfigurationElement element, MapsFeature feature)\n            : base(feature.Module)\n        {\n            this.Element = element;\n            _feature = feature;\n            this.Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            this.Name = element == null ? string.Empty : (string)element[\"name\"];\n            IgnoreCase = element == null ? true : (bool)element[\"ignoreCase\"];\n            DefaultValue = element == null ? string.Empty : (string)element[\"defaultValue\"];\n            this.Items = new List<MapRule>();\n            if (element != null)\n            {\n                var collection = element.GetCollection();\n                foreach (ConfigurationElement rule in collection)\n                {\n                    this.Items.Add(new MapRule(rule, _feature));\n                }\n            }\n        }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"defaultValue\"] = DefaultValue;\n            Element[\"ignoreCase\"] = IgnoreCase;\n        }\n\n        internal protected void OnRewriteSettingsSaved()\n        {\n            MapSettingsUpdated?.Invoke();\n            _feature.OnRewriteSettingsSaved();\n        }\n\n        public bool IgnoreCase { get; set; }\n\n        public bool Equals(MapItem other)\n        {\n            return Match(other) && other.DefaultValue == DefaultValue && other.IgnoreCase == IgnoreCase;\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            return Element.GetCollection();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnRewriteSettingsSaved();\n        }\n\n        public void Add()\n        {\n            using (var dialog = new AddMapDialog(Module, null, _feature))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                var newItem = dialog.Item;\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                ConfigurationElementCollection rulesCollection = SelectedItem.Element.GetCollection();\n\n                if (SelectedItem != newItem)\n                {\n                    Items.Add(newItem);\n                    SelectedItem = newItem;\n                }\n                else if (newItem.Flag != \"Local\")\n                {\n                    rulesCollection.Remove(newItem.Element);\n                    newItem.Flag = \"Local\";\n                }\n\n                newItem.AppendTo(rulesCollection);\n                service.ServerManager.CommitChanges();\n            }\n\n            OnRewriteSettingsSaved();\n        }\n\n        public void Edit()\n        {\n            using (var dialog = new AddMapDialog(Module, SelectedItem, _feature))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                var newItem = dialog.Item;\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                ConfigurationElementCollection rulesCollection = SelectedItem.Element.GetCollection();\n\n                if (SelectedItem != newItem)\n                {\n                    Items.Add(newItem);\n                    SelectedItem = newItem;\n                }\n                else if (newItem.Flag != \"Local\")\n                {\n                    rulesCollection.Remove(newItem.Element);\n                    newItem.Flag = \"Local\";\n                }\n\n                newItem.AppendTo(rulesCollection);\n                service.ServerManager.CommitChanges();\n            }\n\n            OnRewriteSettingsSaved();\n        }\n\n        public void Set()\n        {\n            using (var dialog = new MapSettingsDialog(Module, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            OnRewriteSettingsSaved();\n        }\n\n        internal void Select()\n        {\n            _feature.SelectedItem = this;\n        }\n\n        internal void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected entry?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            Items.Remove(SelectedItem);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            ConfigurationElementCollection collection = Element.GetCollection();\n            collection.Remove(SelectedItem.Element);\n            service.ServerManager.CommitChanges();\n\n            SelectedItem = null;\n            OnRewriteSettingsSaved();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class MapPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel3 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chOriginal = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chNew = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.panel4 = new System.Windows.Forms.Panel();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.tableLayoutPanel2.SuspendLayout();\n            this.panel3.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            this.panel4.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 7;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.tableLayoutPanel2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 9;\n            // \n            // tableLayoutPanel2\n            // \n            this.tableLayoutPanel2.ColumnCount = 1;\n            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel2.Controls.Add(this.panel3, 0, 1);\n            this.tableLayoutPanel2.Controls.Add(this.panel4, 0, 0);\n            this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel2.Name = \"tableLayoutPanel2\";\n            this.tableLayoutPanel2.RowCount = 3;\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel2.Size = new System.Drawing.Size(560, 540);\n            this.tableLayoutPanel2.TabIndex = 10;\n            // \n            // panel3\n            // \n            this.panel3.Controls.Add(this.listView1);\n            this.panel3.Controls.Add(this.toolStrip2);\n            this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel3.Location = new System.Drawing.Point(3, 63);\n            this.panel3.Name = \"panel3\";\n            this.panel3.Size = new System.Drawing.Size(554, 454);\n            this.panel3.TabIndex = 10;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chOriginal,\n            this.chNew});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(554, 429);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chOriginal\n            // \n            this.chOriginal.Text = \"Original Value\";\n            this.chOriginal.Width = 200;\n            // \n            // chNew\n            // \n            this.chNew.Text = \"New Value\";\n            this.chNew.Width = 200;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel3,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(554, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Category\",\n            \"Area\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // panel4\n            // \n            this.panel4.Controls.Add(this.txtName);\n            this.panel4.Controls.Add(this.label2);\n            this.panel4.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel4.Location = new System.Drawing.Point(3, 3);\n            this.panel4.Name = \"panel4\";\n            this.panel4.Size = new System.Drawing.Size(554, 54);\n            this.panel4.TabIndex = 11;\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(16, 26);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(177, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(13, 10);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(98, 13);\n            this.label2.TabIndex = 0;\n            this.label2.Text = \"Rewrite map name:\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 8;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(175, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Edit Rewrite Map\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // MapPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"MapPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.tableLayoutPanel2.ResumeLayout(false);\n            this.panel3.ResumeLayout(false);\n            this.panel3.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            this.panel4.ResumeLayout(false);\n            this.panel4.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n        private ContextMenuStrip cmsActionPanel;\n        private SplitContainer splitContainer1;\n        private Panel panel2;\n        private ListView listView1;\n        private ColumnHeader chOriginal;\n        private ColumnHeader chNew;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private TableLayoutPanel tableLayoutPanel2;\n        private Panel panel3;\n        private Panel panel4;\n        private TextBox txtName;\n        private Label label2;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapPage.cs",
    "content": "﻿using System.ComponentModel;\n// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"InboundRulePage.cs\" company=\"LeXtudio\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class MapPage : ModuleListPage, IModuleChildPage\n    {\n        private sealed class PageTaskList : DefaultTaskList\n        {\n            private readonly MapPage _owner;\n\n            public PageTaskList(MapPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add Mapping Entry...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"Set\", \"Edit Map Settings...\", string.Empty).SetUsage());\n                if (_owner._feature.SelectedItem != null)\n                {\n                    //result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit Mapping Entry...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(GetBackTaskItem(\"BackMore\", \"Back to Rewrite Maps\"));\n                result.Add(GetBackTaskItem(\"Back\", \"Back to Rules\"));\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(HelpTaskItem);\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Back()\n            {\n                _owner.Back();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void BackMore()\n            {\n                _owner.BackMore();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n        }\n\n        private sealed class MapListViewItem : ListViewItem, IFeatureListViewItem<MapRule>\n        {\n            public MapRule Item { get; }\n            private readonly MapPage _page;\n\n            public MapListViewItem(MapRule item, MapPage page)\n                : base(item.Original)\n            {\n                this.Item = item;\n                _page = page;\n                this.SubItems.Add(new ListViewSubItem(this, item.New));\n            }\n        }\n\n        private TaskList _taskList;\n        private MapItem _feature;\n\n        public MapPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var info = (MapItem)navigationData;\n\n            // TODO: pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = info;\n            txtName.ReadOnly = this._feature != null;\n            if (this._feature != null)\n            {\n                this._feature.MapSettingsUpdated = this.InitializeListPage;\n                txtName.Text = this._feature.Name;\n            }\n\n            this._feature?.OnRewriteSettingsSaved();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in this._feature.Items)\n            {\n                listView1.Items.Add(new MapListViewItem(file, this));\n            }\n\n            if (this._feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (MapListViewItem item in listView1.Items)\n            {\n                if (item.Item == this._feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        public void ListView1MouseDoubleClick(object sender, EventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n\n\n        protected override void Refresh()\n        {\n            this.Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130425&amp;clcid=0x409\");\n            return true;\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void Back()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(2);\n            _feature.Select();\n            _feature.OnRewriteSettingsSaved();\n        }\n\n        private void BackMore()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(1);\n        }\n\n        public void Add()\n        {\n            _feature.Add();\n        }\n\n        public void Remove()\n        {\n            _feature.Remove();\n        }\n\n        private void Edit()\n        {\n            _feature.Edit();\n        }\n\n        private void Set()\n        {\n            _feature.Set();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IModulePage ParentPage { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>556, 56</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>661, 56</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapRule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using Microsoft.Web.Administration;\n\n    internal class MapRule : IItem<MapRule>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(MapRule other)\n        {\n            return other != null && other.Original == Original;\n        }\n\n        private MapsFeature _feature;\n\n        public MapRule(ConfigurationElement element, MapsFeature feature)\n        {\n            this.Element = element;\n            _feature = feature;\n            if (element != null)\n            {\n                this.Original = (string)element[\"key\"];\n                this.New = (string)element[\"value\"];\n            }\n\n            this.Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n        }\n\n        public string Original { get; set; }\n\n        public string New { get; set; }\n\n        public string Flag { get; set; }\n\n        public void Apply()\n        {\n            Element[\"key\"] = Original;\n            Element[\"value\"] = New;\n        }\n\n        public bool Equals(MapRule other)\n        {\n            return Match(other) && other.New == New;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapSettingsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class MapSettingsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.cbIgnore = new System.Windows.Forms.CheckBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtDefaultValue = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // btnOK\n            // \n            this.btnOK.Location = new System.Drawing.Point(216, 176);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 0;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(312, 176);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 1;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // cbIgnore\n            // \n            this.cbIgnore.AutoSize = true;\n            this.cbIgnore.Location = new System.Drawing.Point(15, 129);\n            this.cbIgnore.Name = \"cbIgnore\";\n            this.cbIgnore.Size = new System.Drawing.Size(218, 17);\n            this.cbIgnore.TabIndex = 2;\n            this.cbIgnore.Text = \"Ignore case when performing key lookup\";\n            this.cbIgnore.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(98, 13);\n            this.label1.TabIndex = 3;\n            this.label1.Text = \"Rewrite map name:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 69);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(282, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Default value to use when the key is not found in the map:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(392, 20);\n            this.txtName.TabIndex = 5;\n            // \n            // txtDefaultValue\n            // \n            this.txtDefaultValue.Location = new System.Drawing.Point(15, 85);\n            this.txtDefaultValue.Name = \"txtDefaultValue\";\n            this.txtDefaultValue.Size = new System.Drawing.Size(392, 20);\n            this.txtDefaultValue.TabIndex = 6;\n            // \n            // MapSettingsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(419, 211);\n            this.Controls.Add(this.txtDefaultValue);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.cbIgnore);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Name = \"MapSettingsDialog\";\n            this.Text = \"Edit Rewrite Map\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.MapSettingsDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnOK;\n        private Button btnCancel;\n        private CheckBox cbIgnore;\n        private Label label1;\n        private Label label2;\n        private TextBox txtName;\n        private TextBox txtDefaultValue;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapSettingsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class MapSettingsDialog : DialogForm\n    {\n        public MapSettingsDialog(IServiceProvider serviceProvider, MapItem item)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            if (item != null)\n            {\n                txtName.Text = item.Name;\n                txtName.ReadOnly = true;\n                txtDefaultValue.Text = item.DefaultValue;\n                cbIgnore.Checked = item.IgnoreCase;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    item.Name = txtName.Text;\n                    item.DefaultValue = txtDefaultValue.Text;\n                    item.IgnoreCase = cbIgnore.Checked;\n                    item.Apply();\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        private void MapSettingsDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130406&amp;clcid=0x409\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapSettingsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapSettingsUpdatedEventHandler.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    internal delegate void MapSettingsUpdatedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapsFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright company=\"\" file=\"RewriteFeature.cs\">\n//   \n// </copyright>\n// \n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class MapsFeature : FeatureBase<MapItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly MapsFeature _owner;\n\n            public FeatureTaskList(MapsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add Rewrite Map...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit Rewrite Map\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n        }\n\n        public MapsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ??= new FeatureTaskList(this);\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var rulesSection = service.GetSection(\"system.webServer/rewrite/rewriteMaps\");\n            CanRevert = rulesSection.CanRevert();\n            LoadItems();\n        }\n\n        public void Add()\n        {\n            using var dialog = new AddMapsDialog(Module, this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected entry?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        internal protected void OnRewriteSettingsSaved()\n        {\n            RewriteSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130403&amp;clcid=0x409\");\n            return false;\n        }\n\n        internal void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(MapItem item)\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service.Navigate(null, null, typeof(MapPage), SelectedItem);\n            OnRewriteSettingsSaved();\n        }\n\n        public void Revert()\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                service.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RevertItems();\n        }\n\n        public bool CanRevert { get; private set; } = true;\n\n        public RewriteSettingsSavedEventHandler RewriteSettingsUpdated { get; set; }\n        public string Description { get; }\n\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name { get; }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/rewrite/rewriteMaps\");\n            return section.GetCollection();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnRewriteSettingsSaved();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapsPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class MapsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chNumber = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 7;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 9;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chNumber,\n            this.chValue});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 25);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 515);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;            \n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 200;\n            // \n            // chNumber\n            // \n            this.chNumber.Text = \"Number of Items\";\n            this.chNumber.Width = 200;\n            // \n            // chValue\n            // \n            this.chValue.Text = \"Default Value\";\n            this.chValue.Width = 200;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel3,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 0);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Category\",\n            \"Area\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 8;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(191, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"URL Rewrite Maps\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // MapsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"MapsPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n        private ContextMenuStrip cmsActionPanel;\n        private SplitContainer splitContainer1;\n        private Panel panel2;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chNumber;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ColumnHeader chValue;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapsPage.cs",
    "content": "﻿using System.ComponentModel;\n// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"InboundRulePage.cs\" company=\"LeXtudio\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class MapsPage : ModuleListPage, IModuleChildPage\n    {\n        private sealed class PageTaskList : DefaultTaskList\n        {\n            private readonly MapsPage _owner;\n\n            public PageTaskList(MapsPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                           {\n                               GetBackTaskItem(\"Back\", \"Back to Rules\"),\n                               MethodTaskItem.CreateSeparator().SetUsage(),\n                               RevertTaskItem,\n                               MethodTaskItem.CreateSeparator().SetUsage(),\n                               HelpTaskItem\n                           };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Back()\n            {\n                _owner.Back();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n        }\n\n        private sealed class MapsListViewItem : ListViewItem, IFeatureListViewItem<MapItem>\n        {\n            public MapItem Item { get; }\n            private readonly MapsPage _page;\n\n            public MapsListViewItem(MapItem item, MapsPage page)\n                : base(item.Name)\n            {\n                this.Item = item;\n                _page = page;\n                this.SubItems.Add(new ListViewSubItem(this, item.Items.Count.ToString()));\n                this.SubItems.Add(new ListViewSubItem(this, item.DefaultValue));\n            }\n        }\n\n        private TaskList _taskList;\n        private MapsFeature _feature;\n\n        public MapsPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new MapsFeature(Module);\n            _feature.RewriteSettingsUpdated = this.InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new MapsListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (MapsListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            this.Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130425&amp;clcid=0x409\");\n            return true;\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void Back()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(1);\n        }\n\n        private void Revert()\n        {\n            _feature.Revert();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IModulePage ParentPage { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/MapsPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>556, 56</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>661, 56</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/ServerVariableItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using Microsoft.Web.Administration;\n\n    public class ServerVariableItem : IItem<ServerVariableItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public ServerVariableItem(ConfigurationElement element)\n        {\n            Element = element;\n            if (element == null)\n            {\n                Replace = true;\n                return;\n            }\n\n            Name = (string)element[\"name\"];\n            Value = (string)element[\"value\"];\n            Replace = (bool)element[\"replace\"];\n        }\n\n        public bool Replace { get; set; }\n\n        public string Value { get; set; }\n\n        public string Name { get; set; }\n\n        public string Flag { get; set; }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"value\"] = Value;\n            Element[\"replace\"] = Replace;\n        }\n\n        public bool Match(ServerVariableItem other)\n        {\n            return other != null && Name == other.Name;\n        }\n\n        public bool Equals(ServerVariableItem other)\n        {\n            return Match(other) && Value == other.Value && Replace == other.Replace;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/ServerVariablesPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Inbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ServerVariablesPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chEntry = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 7;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 9;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chEntry});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 300;\n            // \n            // chEntry\n            // \n            this.chEntry.Text = \"Entry Type\";\n            this.chEntry.Width = 300;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel3,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(490, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to manage the list of server variables that you can set or chang\" +\n    \"e by using rewrite rules.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 8;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(252, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Allowed Server Variables\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // ServerVariablesPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ServerVariablesPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n        private ContextMenuStrip cmsActionPanel;\n        private SplitContainer splitContainer1;\n        private Panel panel2;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chEntry;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private Label label2;\n        private PictureBox pictureBox1;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/ServerVariablesPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"InboundRulePage.cs\" company=\"LeXtudio\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Inbound\n{\n    using System;\n    using System.Collections;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class ServerVariablesPage : ModuleListPage, IModuleChildPage\n    {\n        private sealed class PageTaskList : DefaultTaskList\n        {\n            private readonly ServerVariablesPage _owner;\n\n            public PageTaskList(ServerVariablesPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                           {\n                               GetBackTaskItem(\"Back\", \"Back to Rules\"),\n                               MethodTaskItem.CreateSeparator().SetUsage(),\n                               HelpTaskItem\n                           };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Back()\n            {\n                _owner.Back();\n            }\n        }\n\n        private sealed class VariableListViewItem : ListViewItem, IFeatureListViewItem<AllowedVariableItem>\n        {\n            public AllowedVariableItem Item { get; }\n            private readonly ServerVariablesPage _page;\n\n            public VariableListViewItem(AllowedVariableItem item, ServerVariablesPage page)\n                : base(item.Name)\n            {\n                this.Item = item;\n                _page = page;\n                this.SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private TaskList _taskList;\n        private AllowedVariablesFeature _feature;\n\n        public ServerVariablesPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new AllowedVariablesFeature(Module);\n            _feature.RewriteSettingsUpdated = this.InitializeListPage;\n            _feature.Load();\n\n            _feature.InitializeMouseClick(listView1, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n            },\n            text =>\n            {\n                if (_feature.FindDuplicate(item => item.Name, text))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"A server variable with this name already exists.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    return false;\n                }\n\n                return true;\n            });\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new VariableListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n            _feature.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (VariableListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override void Refresh()\n        {\n            this.Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130425&amp;clcid=0x409\");\n            return true;\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void Back()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(1);\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IModulePage ParentPage { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Inbound/ServerVariablesPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>556, 56</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>661, 56</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/JexusManager.Features.Rewrite.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.Rewrite</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"MakarovDev.ExpandCollapsePanel\" Version=\"1.0.0\" />\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\lib\\CheckBoxComboBox\\CheckBoxComboBox.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/NewRewriteRuleDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class NewRewriteRuleDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.ilLarge = new System.Windows.Forms.ImageList(this.components);\n            this.ilSmall = new System.Windows.Forms.ImageList(this.components);\n            this.txtDescription = new System.Windows.Forms.TextBox();\n            this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();\n            this.toolStrip1 = new System.Windows.Forms.ToolStrip();\n            this.btnBig = new System.Windows.Forms.ToolStripButton();\n            this.btnSmall = new System.Windows.Forms.ToolStripButton();\n            this.toolStripContainer1.TopToolStripPanel.SuspendLayout();\n            this.toolStripContainer1.SuspendLayout();\n            this.toolStrip1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(567, 386);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(471, 386);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(22, 25);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(112, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Select a rule template:\";\n            // \n            // listView1\n            // \n            this.listView1.Location = new System.Drawing.Point(25, 41);\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(622, 258);\n            this.listView1.TabIndex = 3;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.SmallIcon;\n            // \n            // ilLarge\n            // \n            this.ilLarge.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;\n            this.ilLarge.ImageSize = new System.Drawing.Size(32, 32);\n            this.ilLarge.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // ilSmall\n            // \n            this.ilSmall.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;\n            this.ilSmall.ImageSize = new System.Drawing.Size(16, 16);\n            this.ilSmall.TransparentColor = System.Drawing.Color.Transparent;\n            // \n            // txtDescription\n            // \n            this.txtDescription.Location = new System.Drawing.Point(25, 299);\n            this.txtDescription.Multiline = true;\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.ReadOnly = true;\n            this.txtDescription.Size = new System.Drawing.Size(622, 64);\n            this.txtDescription.TabIndex = 4;\n            // \n            // toolStripContainer1\n            // \n            // \n            // toolStripContainer1.ContentPanel\n            // \n            this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(50, 0);\n            this.toolStripContainer1.Location = new System.Drawing.Point(597, 13);\n            this.toolStripContainer1.Name = \"toolStripContainer1\";\n            this.toolStripContainer1.Size = new System.Drawing.Size(50, 23);\n            this.toolStripContainer1.TabIndex = 5;\n            this.toolStripContainer1.Text = \"toolStripContainer1\";\n            // \n            // toolStripContainer1.TopToolStripPanel\n            // \n            this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1);\n            // \n            // toolStrip1\n            // \n            this.toolStrip1.CanOverflow = false;\n            this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;\n            this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.btnBig,\n            this.btnSmall});\n            this.toolStrip1.Location = new System.Drawing.Point(3, 0);\n            this.toolStrip1.Name = \"toolStrip1\";\n            this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;\n            this.toolStrip1.Size = new System.Drawing.Size(49, 25);\n            this.toolStrip1.TabIndex = 0;\n            // \n            // btnBig\n            // \n            this.btnBig.CheckOnClick = true;\n            this.btnBig.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnBig.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnBig.Name = \"btnBig\";\n            this.btnBig.Size = new System.Drawing.Size(23, 22);\n            this.btnBig.Text = \"Large icon view\";\n            // \n            // btnSmall\n            // \n            this.btnSmall.Checked = true;\n            this.btnSmall.CheckOnClick = true;\n            this.btnSmall.CheckState = System.Windows.Forms.CheckState.Checked;\n            this.btnSmall.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\n            this.btnSmall.ImageTransparentColor = System.Drawing.Color.Magenta;\n            this.btnSmall.Name = \"btnSmall\";\n            this.btnSmall.Size = new System.Drawing.Size(23, 22);\n            this.btnSmall.Text = \"Small icon view\";\n            // \n            // NewRewriteRuleDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(674, 421);\n            this.Controls.Add(this.toolStripContainer1);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.listView1);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewRewriteRuleDialog\";\n            this.Text = \"Add Rule(s)\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewRewriteRuleDialogHelpButtonClicked);\n            this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false);\n            this.toolStripContainer1.TopToolStripPanel.PerformLayout();\n            this.toolStripContainer1.ResumeLayout(false);\n            this.toolStripContainer1.PerformLayout();\n            this.toolStrip1.ResumeLayout(false);\n            this.toolStrip1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private ListView listView1;\n        private TextBox txtDescription;\n        private ImageList ilSmall;\n        private ImageList ilLarge;\n        private ToolStripContainer toolStripContainer1;\n        private ToolStrip toolStrip1;\n        private ToolStripButton btnBig;\n        private ToolStripButton btnSmall;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/NewRewriteRuleDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class NewRewriteRuleDialog : DialogForm\n    {\n        public NewRewriteRuleDialog(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            btnBig.Image = DefaultTaskList.BasicSettingsImage;\n            btnSmall.Image = DefaultTaskList.ViewImage;\n\n            ilLarge.Images.Add(Resources.blank_32);\n            ilLarge.Images.Add(Resources.map_32);\n            ilLarge.Images.Add(Resources.blocking_32);\n            ilLarge.Images.Add(Resources.blankout_32);\n            ilLarge.Images.Add(Resources.lowercase_32);\n\n            ilSmall.Images.Add(Resources.blank_16);\n            ilSmall.Images.Add(Resources.map_16);\n            ilSmall.Images.Add(Resources.blocking_16);\n            ilSmall.Images.Add(Resources.blankout_16);\n            ilSmall.Images.Add(Resources.lowercase_16);\n            listView1.LargeImageList = ilLarge;\n            listView1.SmallImageList = ilSmall;\n            ListViewGroup listViewGroup1 = new ListViewGroup(\"Inbound rules\", HorizontalAlignment.Left);\n            ListViewGroup listViewGroup2 = new ListViewGroup(\"Inbound and Outbound Rules\", HorizontalAlignment.Left);\n            ListViewGroup listViewGroup3 = new ListViewGroup(\"Outbound rules\", HorizontalAlignment.Left);\n            ListViewGroup listViewGroup4 = new ListViewGroup(\n                \"Search Engine Optimization (SEO)\",\n                HorizontalAlignment.Left);\n            ListViewItem listViewItem1 = new ListViewItem(\"Blank rule\");\n            listViewItem1.ImageIndex = 0;\n            ListViewItem listViewItem2 = new ListViewItem(\"Rule with rewrite map\");\n            listViewItem2.ImageIndex = 1;\n            ListViewItem listViewItem3 = new ListViewItem(\"Request blocking\");\n            listViewItem3.ImageIndex = 2;\n            ListViewItem listViewItem4 = new ListViewItem(\"User-friendly URL\");\n            listViewItem4.ImageIndex = 1;\n            ListViewItem listViewItem5 = new ListViewItem(\"Blank rule\");\n            listViewItem5.ImageIndex = 3;\n            ListViewItem listViewItem6 = new ListViewItem(\"Enforce lowercase URLs\");\n            listViewItem6.ImageIndex = 4;\n\n            listViewGroup1.Header = \"Inbound rules\";\n            listViewGroup1.Name = \"lvgIn\";\n            listViewGroup2.Header = \"Inbound and Outbound Rules\";\n            listViewGroup2.Name = \"lvgInOut\";\n            listViewGroup3.Header = \"Outbound rules\";\n            listViewGroup3.Name = \"lvgOut\";\n            listViewGroup4.Header = \"Search Engine Optimization (SEO)\";\n            listViewGroup4.Name = \"lvgSeo\";\n            listView1.Groups.AddRange(new[] { listViewGroup1, listViewGroup2, listViewGroup3, listViewGroup4 });\n            listViewItem1.Group = listViewGroup1;\n            listViewItem1.ToolTipText =\n                \"Select this template to create a new inbound rule without any preset values. This template opens the \\\"Edit Rule\\\" page that you can use to define a new rewrite rule for changing the requested URL address.\";\n            listViewItem2.Group = listViewGroup1;\n            listViewItem2.ToolTipText =\n                \"Select this template to create a rewrite or redirect rule that uses a rewrite map. The rewrite map for this rule can contain a large number of static mappings between original URLs and rewritten URLs or redirection URLs, depending on whether the rule is rewriting or redirecting requests.\";\n            listViewItem3.Group = listViewGroup1;\n            listViewItem3.ToolTipText =\n                \"Select this template to create a rule that will block client requests based on ce\"\n                + \"rtain text patterns in the URL path, query string, HTTP headers, and server vari\" + \"ables.\";\n            listViewItem4.Group = listViewGroup2;\n            listViewItem4.ToolTipText =\n                \"Select this template to create rules for enabling user-friendly URLs for your dynamic Web applications. This template creates rules that rewrite user-friendly URLs to internal URLs that your Web application understands.\";\n            listViewItem5.Group = listViewGroup3;\n            listViewItem5.ToolTipText =\n                \"Select this template to create a new outbound rule without any preset values. This template opens the \\\"Edit Rule\\\" page that you can use to define a new rewrite rule for changing the content of an HTTP response.\";\n            listViewItem6.Group = listViewGroup4;\n            listViewItem6.ToolTipText =\n                \"Use this template to create a rule that will enforce the use of lowercase letters\" + \" in the URL.\";\n            listView1.Items.AddRange(\n                new[] { listViewItem1, listViewItem2, listViewItem3, listViewItem4, listViewItem5, listViewItem6 });\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(listView1, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtDescription.Text = listView1.SelectedItems.Count == 0\n                        ? string.Empty\n                        : listView1.SelectedItems[0].ToolTipText;\n                    btnOK.Enabled = listView1.SelectedItems.Count > 0;\n                }));\n\n            var doubleClick = Observable.FromEventPattern<EventArgs>(listView1, \"DoubleClick\");\n            container.Add(\n                doubleClick.ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (listView1.SelectedItems.Count == 0)\n                    {\n                        return;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .Merge(doubleClick)\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    SelectedIndex = listView1.SelectedIndices[0];\n                    DialogResult = DialogResult.OK;\n                }));\n\n            var big = Observable.FromEventPattern<EventArgs>(btnBig, \"Click\");\n            container.Add(\n                big.ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnSmall.Checked = !btnBig.Checked;\n                }));\n\n            var small = Observable.FromEventPattern<EventArgs>(btnSmall, \"Click\");\n            container.Add(\n                small.ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnBig.Checked = !btnSmall.Checked;\n                }));\n\n            container.Add(\n                big.Merge(small)\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    listView1.View = btnBig.Checked ? View.LargeIcon : View.SmallIcon;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public int SelectedIndex { get; private set; }\n\n        private void NewRewriteRuleDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130421&amp;clcid=0x409\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/NewRewriteRuleDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"ilLarge.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>127, 17</value>\n  </metadata>\n  <metadata name=\"ilSmall.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>215, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/NewRuleBlockingDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class NewRuleBlockingDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.cbInput = new System.Windows.Forms.ComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbMatch = new System.Windows.Forms.ComboBox();\n            this.lblPattern = new System.Windows.Forms.Label();\n            this.txtPattern = new System.Windows.Forms.TextBox();\n            this.lblExample = new System.Windows.Forms.Label();\n            this.label5 = new System.Windows.Forms.Label();\n            this.cbMode = new System.Windows.Forms.ComboBox();\n            this.label6 = new System.Windows.Forms.Label();\n            this.cbResponse = new System.Windows.Forms.ComboBox();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(282, 361);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(186, 361);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(13, 13);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(121, 13);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"Block access based on:\";\n            // \n            // cbInput\n            // \n            this.cbInput.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbInput.FormattingEnabled = true;\n            this.cbInput.Items.AddRange(new object[] {\n            \"URL Path\",\n            \"User-agent Header\",\n            \"IP Address\",\n            \"Query String\",\n            \"Referer\",\n            \"Host Header\"});\n            this.cbInput.Location = new System.Drawing.Point(12, 29);\n            this.cbInput.Name = \"cbInput\";\n            this.cbInput.Size = new System.Drawing.Size(365, 21);\n            this.cbInput.TabIndex = 3;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(13, 72);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(96, 13);\n            this.label2.TabIndex = 4;\n            this.label2.Text = \"Block request that:\";\n            // \n            // cbMatch\n            // \n            this.cbMatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbMatch.FormattingEnabled = true;\n            this.cbMatch.Items.AddRange(new object[] {\n            \"Matches the Pattern\",\n            \"Does Not Match the Pattern\"});\n            this.cbMatch.Location = new System.Drawing.Point(12, 88);\n            this.cbMatch.Name = \"cbMatch\";\n            this.cbMatch.Size = new System.Drawing.Size(365, 21);\n            this.cbMatch.TabIndex = 5;\n            // \n            // lblPattern\n            // \n            this.lblPattern.AutoSize = true;\n            this.lblPattern.Location = new System.Drawing.Point(13, 135);\n            this.lblPattern.Name = \"lblPattern\";\n            this.lblPattern.Size = new System.Drawing.Size(100, 13);\n            this.lblPattern.TabIndex = 6;\n            this.lblPattern.Text = \"Pattern (URL Path):\";\n            // \n            // txtPattern\n            // \n            this.txtPattern.Location = new System.Drawing.Point(12, 151);\n            this.txtPattern.Name = \"txtPattern\";\n            this.txtPattern.Size = new System.Drawing.Size(365, 20);\n            this.txtPattern.TabIndex = 7;\n            // \n            // lblExample\n            // \n            this.lblExample.AutoSize = true;\n            this.lblExample.Location = new System.Drawing.Point(13, 174);\n            this.lblExample.Name = \"lblExample\";\n            this.lblExample.Size = new System.Drawing.Size(94, 13);\n            this.lblExample.TabIndex = 8;\n            this.lblExample.Text = \"Example: IMG*.jpg\";\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(13, 212);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(37, 13);\n            this.label5.TabIndex = 9;\n            this.label5.Text = \"Using:\";\n            // \n            // cbMode\n            // \n            this.cbMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbMode.FormattingEnabled = true;\n            this.cbMode.Items.AddRange(new object[] {\n            \"Regular Expressions\",\n            \"Wildcards\"});\n            this.cbMode.Location = new System.Drawing.Point(12, 228);\n            this.cbMode.Name = \"cbMode\";\n            this.cbMode.Size = new System.Drawing.Size(365, 21);\n            this.cbMode.TabIndex = 10;\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(13, 271);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(73, 13);\n            this.label6.TabIndex = 11;\n            this.label6.Text = \"How to block:\";\n            // \n            // cbResponse\n            // \n            this.cbResponse.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbResponse.FormattingEnabled = true;\n            this.cbResponse.Items.AddRange(new object[] {\n            \"Send an HTTP 401 (Unauthorized) Response\",\n            \"Send an HTTP 403 (Forbidden) Response\",\n            \"Send an HTTP 404 (File Not Found) Response\",\n            \"Abort Request\"});\n            this.cbResponse.Location = new System.Drawing.Point(12, 287);\n            this.cbResponse.Name = \"cbResponse\";\n            this.cbResponse.Size = new System.Drawing.Size(365, 21);\n            this.cbResponse.TabIndex = 12;\n            // \n            // NewRuleBlockingDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(389, 396);\n            this.Controls.Add(this.cbResponse);\n            this.Controls.Add(this.label6);\n            this.Controls.Add(this.cbMode);\n            this.Controls.Add(this.label5);\n            this.Controls.Add(this.lblExample);\n            this.Controls.Add(this.txtPattern);\n            this.Controls.Add(this.lblPattern);\n            this.Controls.Add(this.cbMatch);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.cbInput);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewRuleBlockingDialog\";\n            this.Text = \"Add Request Blocking Rule\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewRuleBlockingHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private ComboBox cbInput;\n        private Label label2;\n        private ComboBox cbMatch;\n        private Label lblPattern;\n        private TextBox txtPattern;\n        private Label lblExample;\n        private Label label5;\n        private ComboBox cbMode;\n        private Label label6;\n        private ComboBox cbResponse;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/NewRuleBlockingDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.Rewrite.Inbound;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class NewRuleBlockingDialog : DialogForm\n    {\n        public NewRuleBlockingDialog(IServiceProvider serviceProvider, InboundFeature rewriteFeature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbMode.SelectedIndex = 1;\n            cbInput.SelectedIndex = 0;\n            cbMatch.SelectedIndex = 0;\n            cbResponse.SelectedIndex = 1;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbInput, \"SelectedIndexChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(cbMode, \"SelectedIndexChanged\"))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    switch (cbInput.SelectedIndex)\n                    {\n                        case 0:\n                            lblPattern.Text = \"Pattern (URL Path):\";\n                            lblExample.Text = cbMode.SelectedIndex == 1 ? \"Example: IMG*.jpg\" : \"Example: ^IMG.*\\\\.jpg$\";\n                            break;\n                        case 1:\n                            lblPattern.Text = \"Pattern (User-agent Header):\";\n                            lblExample.Text = cbMode.SelectedIndex == 1 ? \"Example: Mozilla/4*\" : \"Example: ^Mozilla/[1234].*\";\n                            break;\n                        case 2:\n                            lblPattern.Text = \"Pattern (IP Address):\";\n                            lblExample.Text = cbMode.SelectedIndex == 1 ? \"Exmaple: 192.168.1.*\" : \"Example: 192\\\\.168\\\\.1\\\\.[1-9]\";\n                            break;\n                        case 3:\n                            lblPattern.Text = \"Pattern (Query String):\";\n                            lblExample.Text = cbMode.SelectedIndex == 1 ? \"Example: *id=*&p=*\" : \"Example: id=[0-9]+&p=[a-z]+\";\n                            break;\n                        case 4:\n                            lblPattern.Text = \"Pattern (Referer):\";\n                            lblExample.Text = cbMode.SelectedIndex == 1 ? \"Example: http://*.consoto.com\" : \"Example: http://(?:www\\\\.)?contoso\\\\.com$\";\n                            break;\n                        case 5:\n                            lblPattern.Text = \"Pattern (Host Header):\";\n                            lblExample.Text = cbMode.SelectedIndex == 1 ? \"Example: *.consoto.com\" : \"Example: (?:www\\\\.)?contoso\\\\.com$\";\n                            break;\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtPattern, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtPattern.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var inputType = cbInput.SelectedIndex;\n                    var pattern = txtPattern.Text;\n                    var match = cbMatch.SelectedIndex;\n                    var response = cbResponse.SelectedIndex;\n                    var mode = cbMode.SelectedIndex;\n\n                    int index = 0;\n                    string name;\n                    do\n                    {\n                        index++;\n                        name = string.Format(\"RequestBlockingRule{0}\", index);\n                    }\n                    while (rewriteFeature.Items.All(item => item.Name != name));\n                    var newRule = new InboundRule(null);\n                    newRule.Name = name;\n                    newRule.Input = \"URL Path\";\n                    newRule.Enabled = true;\n                    newRule.PatternSyntax = mode == 0 ? 0L : 1L;\n                    newRule.PatternUrl = mode == 0 ? \".*\" : \"*\";\n                    newRule.Type = response == 3 ? 4L : 3L;\n                    newRule.ActionUrl = \"{C:1}\";\n                    newRule.RedirectType = 301;\n                    newRule.StatusCode = GetStatusCode(response);\n                    newRule.SubStatusCode = 0;\n                    newRule.StatusReason = GetReason(response);\n                    newRule.StatusDescription = GetMessage(response);\n                    newRule.Conditions.Add(\n                        new ConditionItem(null)\n                        {\n                            Input = GetInput(inputType),\n                            MatchType = match == 0 ? 4 : 5,\n                            Pattern = pattern,\n                            IgnoreCase = true\n                        });\n                    rewriteFeature.AddItem(newRule);\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        private void NewRuleBlockingHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130412&amp;clcid=0x409\");\n        }\n\n        private string GetInput(int inputType)\n        {\n            switch (inputType)\n            {\n                case 0:\n                    return \"{URL}\";\n                case 1:\n                    return \"{HTTP_USER_AGENT}\";\n                case 2:\n                    return \"{REMOTE_ADDR}\";\n                case 3:\n                    return \"{QUERY_STRING}\";\n                case 4:\n                    return \"{HTTP_REFERER}\";\n                case 5:\n                    return \"{HTTP_HOST}\";\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(inputType));\n            }\n        }\n\n        private string GetMessage(int response)\n        {\n            return response == 0\n                       ? UnauthorizedText\n                       : response == 1 ? ForbiddenText : response == 2 ? FileNotFoundText : string.Empty;\n        }\n\n        private string GetReason(int response)\n        {\n            return response == 0\n                       ? \"Unauthorized: Access is denied due to invalid credentials\"\n                       : response == 1\n                             ? \"Forbidden: Access is denied.\"\n                             : response == 2 ? \"File or directory not found.\" : string.Empty;\n        }\n\n        private uint GetStatusCode(int response)\n        {\n            return response == 0 ? 401U : response == 1 ? 403U : response == 2 ? 404U : 0U;\n        }\n\n        private const string UnauthorizedText = \"You do not have permission to view this directory or page using the credentials that you supplied.\";\n\n        private const string ForbiddenText =\n            \"You do not have permission to view this directory or page using the credentials that you supplied.\";\n\n        private const string FileNotFoundText = \"The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.\";\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/NewRuleBlockingDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/NewRuleWithRewriteMapsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class NewRuleWithRewriteMapsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NewRuleWithRewriteMapsDialog));\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbAction = new System.Windows.Forms.ComboBox();\n            this.cbMap = new System.Windows.Forms.ComboBox();\n            this.lblDescription = new System.Windows.Forms.Label();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 25);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(124, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Selection the rule action:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(9, 84);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(115, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Select the rewrite map:\";\n            // \n            // cbAction\n            // \n            this.cbAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbAction.FormattingEnabled = true;\n            this.cbAction.Items.AddRange(new object[] {\n            \"Rewrite\",\n            \"Redirect\"});\n            this.cbAction.Location = new System.Drawing.Point(12, 41);\n            this.cbAction.Name = \"cbAction\";\n            this.cbAction.Size = new System.Drawing.Size(395, 21);\n            this.cbAction.TabIndex = 3;\n            // \n            // cbMap\n            // \n            this.cbMap.FormattingEnabled = true;\n            this.cbMap.Location = new System.Drawing.Point(12, 100);\n            this.cbMap.Name = \"cbMap\";\n            this.cbMap.Size = new System.Drawing.Size(395, 21);\n            this.cbMap.TabIndex = 4;\n            this.cbMap.Text = \"<Select or Specify a Rewrite Map...>\";\n            // \n            // lblDescription\n            // \n            this.lblDescription.AutoSize = true;\n            this.lblDescription.Location = new System.Drawing.Point(12, 148);\n            this.lblDescription.Name = \"lblDescription\";\n            this.lblDescription.Size = new System.Drawing.Size(327, 130);\n            this.lblDescription.TabIndex = 5;\n            this.lblDescription.Text = resources.GetString(\"lblDescription.Text\");\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(312, 351);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 6;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(216, 351);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 7;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // NewRuleWithRewriteMapsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(419, 386);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.lblDescription);\n            this.Controls.Add(this.cbMap);\n            this.Controls.Add(this.cbAction);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Name = \"NewRuleWithRewriteMapsDialog\";\n            this.Text = \"Add Rule with Rewrite Map\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewRuleWithRewriteMapsDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private Label label2;\n        private ComboBox cbAction;\n        private ComboBox cbMap;\n        private Label lblDescription;\n        private Button btnCancel;\n        private Button btnOK;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/NewRuleWithRewriteMapsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.Rewrite.Inbound;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class NewRuleWithRewriteMapsDialog : DialogForm\n    {\n        public NewRuleWithRewriteMapsDialog(IServiceProvider serviceProvider, InboundFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var rulesSection = service.GetSection(\"system.webServer/rewrite/rewriteMaps\");\n            ConfigurationElementCollection rulesCollection = rulesSection.GetCollection();\n            foreach (ConfigurationElement ruleElement in rulesCollection)\n            {\n                cbMap.Items.Add(ruleElement[\"name\"]);\n            }\n\n            cbAction.SelectedIndex = 0;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbMap, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = cbMap.SelectedIndex > -1;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var action = cbAction.Text;\n                    var map = cbMap.Text;\n\n                    int index = 0;\n                    string name;\n                    do\n                    {\n                        index++;\n                        name = string.Format(\"{0} rule{1} for {2}\", action, index, map);\n                    }\n                    while (feature.Items.All(item => item.Name != name));\n                    var rule = new InboundRule(null);\n                    rule.Name = name;\n                    rule.Input = \"URL Path\";\n                    rule.PatternSyntax = 0L;\n                    rule.PatternUrl = \".*\";\n                    rule.Type = action == \"Rewrite\" ? 1L : 2L;\n                    rule.ActionUrl = \"{C:1}\";\n                    rule.RedirectType = 301;\n                    rule.Conditions.Add(\n                        new ConditionItem(null)\n                        {\n                            Input = string.Format(\"{{{0}:{{REQUEST_URI}}}}\", map),\n                            MatchType = 4,\n                            Pattern = \"(.+)\",\n                            IgnoreCase = true\n                        });\n\n                    feature.AddItem(rule);\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbAction, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    lblDescription.Text = cbAction.SelectedIndex == 0 ? s_rewriteText : s_redirectText;\n                }));\n        }\n\n        private void NewRuleWithRewriteMapsDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130413&amp;clcid=0x409\");\n        }\n\n        private static readonly string s_rewriteText =\n            \"The map for this rule should define a set of static mappings between\" + Environment.NewLine\n            + \"original URLs and rewritten URLs.\" + Environment.NewLine + Environment.NewLine\n            + \"For example, the map can contain an original URL as:\" + Environment.NewLine + Environment.NewLine\n            + \"/home\" + Environment.NewLine + Environment.NewLine + \"and the corresponding rewritten URL as:\"\n            + Environment.NewLine + Environment.NewLine + \"/default.aspx? id = 1\";\n\n        private static readonly string s_redirectText =\n            \"The map for this rule should define a set of static mappings between\" + Environment.NewLine\n            + \"requested URLs and redirection URLs.\" + Environment.NewLine + Environment.NewLine\n            + \"For example, the map can contain a requested URL as:\" + Environment.NewLine + Environment.NewLine\n            + \"/default.aspx?tabid=1&&id=234\" + Environment.NewLine + Environment.NewLine\n            + \"and the corresponding redirection URL as:\" + Environment.NewLine + Environment.NewLine\n            + \"/about/contact, when redirecting within the same domain, or\" + Environment.NewLine\n            + \"http://contoso.com/about/contact, when redirecting across domains.\";\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/NewRuleWithRewriteMapsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"lblDescription.Text\" xml:space=\"preserve\">\n    <value>The map for this rule should define a set of static mappings between\noriginal URLs and rewritten URLs.\n\nFor example, the map can contain an original URL as:\n\n/home\n\nand the corresponding rewritten URL as:\n\n/default.aspx?id=1</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/AddCustomTagDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Outbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client;\n\n    partial class AddCustomTagDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n        private Module module;\n        private object p;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtAttribute = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(58, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Tag name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(12, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(315, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 71);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(95, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Matching attribute:\";\n            // \n            // txtAttribute\n            // \n            this.txtAttribute.Location = new System.Drawing.Point(12, 87);\n            this.txtAttribute.Name = \"txtAttribute\";\n            this.txtAttribute.Size = new System.Drawing.Size(315, 20);\n            this.txtAttribute.TabIndex = 3;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(136, 151);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 4;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(232, 151);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 5;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // AddCustomTagDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(339, 186);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.txtAttribute);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Name = \"AddCustomTagDialog\";\n            this.Text = \"Add Custom Tag\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AddCustomTagDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private Label label2;\n        private TextBox txtAttribute;\n        private Button btnOK;\n        private Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/AddCustomTagDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class AddCustomTagDialog : DialogForm\n    {\n        public AddCustomTagDialog(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtAttribute, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text) && !string.IsNullOrWhiteSpace(txtAttribute.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new CustomTagItem(null);\n                    Item.Name = txtName.Text;\n                    Item.Attribute = txtAttribute.Text;\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public CustomTagItem Item { get; set; }\n\n        private void AddCustomTagDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=163112\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/AddCustomTagDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/AddCustomTagsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Outbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AddCustomTagsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.dgvTags = new System.Windows.Forms.DataGridView();\n            this.chName = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.chAttribute = new System.Windows.Forms.DataGridViewTextBoxColumn();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.btnRemove = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            ((System.ComponentModel.ISupportInitialize)(this.dgvTags)).BeginInit();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 9);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(260, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Provide a unique name for the custom tags collection:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(12, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(415, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // dgvTags\n            // \n            this.dgvTags.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\n            this.dgvTags.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\n            this.chName,\n            this.chAttribute});\n            this.dgvTags.Location = new System.Drawing.Point(12, 51);\n            this.dgvTags.Name = \"dgvTags\";\n            this.dgvTags.Size = new System.Drawing.Size(325, 275);\n            this.dgvTags.TabIndex = 2;\n            // \n            // chName\n            // \n            this.chName.HeaderText = \"Tag Name\";\n            this.chName.Name = \"chName\";\n            this.chName.Width = 140;\n            // \n            // chAttribute\n            // \n            this.chAttribute.HeaderText = \"Matching Attribute\";\n            this.chAttribute.Name = \"chAttribute\";\n            this.chAttribute.Width = 140;\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.btnRemove);\n            this.groupBox1.Location = new System.Drawing.Point(337, 45);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(90, 281);\n            this.groupBox1.TabIndex = 3;\n            this.groupBox1.TabStop = false;\n            // \n            // btnRemove\n            // \n            this.btnRemove.Enabled = false;\n            this.btnRemove.Location = new System.Drawing.Point(5, 19);\n            this.btnRemove.Name = \"btnRemove\";\n            this.btnRemove.Size = new System.Drawing.Size(85, 23);\n            this.btnRemove.TabIndex = 0;\n            this.btnRemove.Text = \"Remove\";\n            this.btnRemove.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(236, 356);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 4;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(332, 356);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 5;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // AddCustomTagsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(439, 391);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.dgvTags);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Name = \"AddCustomTagsDialog\";\n            this.Text = \"Add Custom Tags Collection\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AddCustomTagsDialogHelpButtonClicked);\n            ((System.ComponentModel.ISupportInitialize)(this.dgvTags)).EndInit();\n            this.groupBox1.ResumeLayout(false);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private DataGridView dgvTags;\n        private GroupBox groupBox1;\n        private Button btnRemove;\n        private Button btnOK;\n        private Button btnCancel;\n        private DataGridViewTextBoxColumn chName;\n        private DataGridViewTextBoxColumn chAttribute;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/AddCustomTagsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class AddCustomTagsDialog : DialogForm\n    {\n        public AddCustomTagsDialog(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRemove, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    foreach (DataGridViewRow row in dgvTags.SelectedRows)\n                    {\n                        if (!row.IsNewRow)\n                        {\n                            dgvTags.Rows.Remove(row);\n                        }\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item = new CustomTagsItem(null);\n                    Item.Name = txtName.Text;\n                    foreach (DataGridViewRow row in dgvTags.Rows)\n                    {\n                        var tag = new CustomTagItem(null);\n                        tag.Name = row.Cells[0].Value.ToString();\n                        tag.Attribute = row.Cells[1].Value.ToString();\n                        Item.Add(tag);\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<DataGridViewCellEventArgs>(dgvTags, \"RowEnter\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnRemove.Enabled = !dgvTags.SelectedRows[0].IsNewRow;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public CustomTagsItem Item { get; set; }\n\n        private void AddCustomTagsDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=163112\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/AddCustomTagsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"chName.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n  <metadata name=\"chAttribute.UserAddedColumn\" type=\"System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>True</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/AddPreconditionDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Outbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class AddPreConditionDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.cbUsing = new System.Windows.Forms.ComboBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbGrouping = new System.Windows.Forms.ComboBox();\n            this.lvConditions = new System.Windows.Forms.ListView();\n            this.chInput = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPattern = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.btnAdd = new System.Windows.Forms.Button();\n            this.btnEdit = new System.Windows.Forms.Button();\n            this.btnRemove = new System.Windows.Forms.Button();\n            this.btnMoveUp = new System.Windows.Forms.Button();\n            this.btnMoveDown = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 18);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(38, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(12, 34);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(228, 20);\n            this.txtName.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(12, 81);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(37, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Using:\";\n            // \n            // cbUsing\n            // \n            this.cbUsing.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbUsing.FormattingEnabled = true;\n            this.cbUsing.Items.AddRange(new object[] {\n            \"Regular Expressions\",\n            \"Wildcards\"});\n            this.cbUsing.Location = new System.Drawing.Point(12, 97);\n            this.cbUsing.Name = \"cbUsing\";\n            this.cbUsing.Size = new System.Drawing.Size(228, 21);\n            this.cbUsing.TabIndex = 3;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(12, 146);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(88, 13);\n            this.label3.TabIndex = 4;\n            this.label3.Text = \"Logical grouping:\";\n            // \n            // cbGrouping\n            // \n            this.cbGrouping.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGrouping.FormattingEnabled = true;\n            this.cbGrouping.Items.AddRange(new object[] {\n            \"Matches All\",\n            \"Matches Any\"});\n            this.cbGrouping.Location = new System.Drawing.Point(12, 162);\n            this.cbGrouping.Name = \"cbGrouping\";\n            this.cbGrouping.Size = new System.Drawing.Size(134, 21);\n            this.cbGrouping.TabIndex = 5;\n            // \n            // lvConditions\n            // \n            this.lvConditions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chInput,\n            this.chType,\n            this.chPattern});\n            this.lvConditions.FullRowSelect = true;\n            this.lvConditions.HideSelection = false;\n            this.lvConditions.Location = new System.Drawing.Point(12, 189);\n            this.lvConditions.MultiSelect = false;\n            this.lvConditions.Name = \"lvConditions\";\n            this.lvConditions.Size = new System.Drawing.Size(539, 204);\n            this.lvConditions.TabIndex = 6;\n            this.lvConditions.UseCompatibleStateImageBehavior = false;\n            this.lvConditions.View = System.Windows.Forms.View.Details;\n            // \n            // chInput\n            // \n            this.chInput.Text = \"Input\";\n            this.chInput.Width = 105;\n            // \n            // chType\n            // \n            this.chType.Text = \"Type\";\n            this.chType.Width = 160;\n            // \n            // chPattern\n            // \n            this.chPattern.Text = \"Pattern\";\n            this.chPattern.Width = 180;\n            // \n            // btnAdd\n            // \n            this.btnAdd.Location = new System.Drawing.Point(557, 194);\n            this.btnAdd.Name = \"btnAdd\";\n            this.btnAdd.Size = new System.Drawing.Size(110, 23);\n            this.btnAdd.TabIndex = 7;\n            this.btnAdd.Text = \"Add...\";\n            this.btnAdd.UseVisualStyleBackColor = true;\n            // \n            // btnEdit\n            // \n            this.btnEdit.Location = new System.Drawing.Point(557, 223);\n            this.btnEdit.Name = \"btnEdit\";\n            this.btnEdit.Size = new System.Drawing.Size(110, 23);\n            this.btnEdit.TabIndex = 8;\n            this.btnEdit.Text = \"Edit...\";\n            this.btnEdit.UseVisualStyleBackColor = true;\n            // \n            // btnRemove\n            // \n            this.btnRemove.Location = new System.Drawing.Point(557, 252);\n            this.btnRemove.Name = \"btnRemove\";\n            this.btnRemove.Size = new System.Drawing.Size(110, 23);\n            this.btnRemove.TabIndex = 9;\n            this.btnRemove.Text = \"Remove\";\n            this.btnRemove.UseVisualStyleBackColor = true;\n            // \n            // btnMoveUp\n            // \n            this.btnMoveUp.Location = new System.Drawing.Point(557, 332);\n            this.btnMoveUp.Name = \"btnMoveUp\";\n            this.btnMoveUp.Size = new System.Drawing.Size(110, 23);\n            this.btnMoveUp.TabIndex = 10;\n            this.btnMoveUp.Text = \"Move Up\";\n            this.btnMoveUp.UseVisualStyleBackColor = true;\n            // \n            // btnMoveDown\n            // \n            this.btnMoveDown.Location = new System.Drawing.Point(557, 361);\n            this.btnMoveDown.Name = \"btnMoveDown\";\n            this.btnMoveDown.Size = new System.Drawing.Size(110, 23);\n            this.btnMoveDown.TabIndex = 11;\n            this.btnMoveDown.Text = \"Move Down\";\n            this.btnMoveDown.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(572, 431);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 12;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(476, 431);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 13;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // AddPreconditionDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(679, 466);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnMoveDown);\n            this.Controls.Add(this.btnMoveUp);\n            this.Controls.Add(this.btnRemove);\n            this.Controls.Add(this.btnEdit);\n            this.Controls.Add(this.btnAdd);\n            this.Controls.Add(this.lvConditions);\n            this.Controls.Add(this.cbGrouping);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.cbUsing);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label1);\n            this.Name = \"AddPreconditionDialog\";\n            this.Text = \"Add Precondition\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.AddPreconditionDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtName;\n        private Label label2;\n        private ComboBox cbUsing;\n        private Label label3;\n        private ComboBox cbGrouping;\n        private ListView lvConditions;\n        private Button btnAdd;\n        private Button btnEdit;\n        private Button btnRemove;\n        private Button btnMoveUp;\n        private Button btnMoveDown;\n        private Button btnCancel;\n        private Button btnOK;\n        private ColumnHeader chInput;\n        private ColumnHeader chType;\n        private ColumnHeader chPattern;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/AddPreconditionDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.Rewrite.Inbound;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class AddPreConditionDialog : DialogForm\n    {\n        public AddPreConditionDialog(IServiceProvider serviceProvider, PreConditionItem existing)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Item = existing ?? new PreConditionItem(null);\n            if (existing != null)\n            {\n                txtName.Text = Item.Name;\n                cbUsing.SelectedIndex = (int)Item.PatternSyntax;\n                cbGrouping.SelectedIndex = (int)Item.LogicalGrouping;\n                foreach (var condition in Item.Conditions)\n                {\n                    lvConditions.Items.Add(new ConditionListViewItem(condition));\n                }\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnAdd, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    using var dialog = new AddConditionDialog(ServiceProvider, null);\n                    if (dialog.ShowDialog() != DialogResult.OK)\n                    {\n                        return;\n                    }\n\n                    var newItem = dialog.Item;\n                    Item.Conditions.Add(newItem);\n                    var listViewItem = new ConditionListViewItem(newItem);\n                    lvConditions.Items.Add(listViewItem);\n                    listViewItem.Selected = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnRemove, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    if (\n                        dialog.ShowMessage(\"Are you sure that you want to remove the selected condition?\", \"Confirm Remove\",\n                            MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                        DialogResult.Yes)\n                    {\n                        return;\n                    }\n\n                    var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n                    listViewItem.Remove();\n                    var item = listViewItem.Item;\n                    Item.Conditions.Remove(item);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnEdit, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n                    using (var dialog = new AddConditionDialog(ServiceProvider, listViewItem.Item))\n                    {\n                        if (dialog.ShowDialog() != DialogResult.OK)\n                        {\n                            return;\n                        }\n                    }\n\n                    listViewItem.Update();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnMoveDown, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n                    var index = listViewItem.Index;\n\n                    var item = listViewItem.Item;\n                    Item.Conditions.RemoveAt(index);\n                    listViewItem.Remove();\n\n                    Item.Conditions.Insert(index + 1, item);\n                    lvConditions.Items.Insert(index + 1, listViewItem);\n                    listViewItem.Selected = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnMoveUp, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n                    var index = listViewItem.Index;\n\n                    var item = listViewItem.Item;\n                    Item.Conditions.RemoveAt(index);\n                    listViewItem.Remove();\n\n                    Item.Conditions.Insert(index - 1, item);\n                    lvConditions.Items.Insert(index - 1, listViewItem);\n                    listViewItem.Selected = true;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<ListViewItemSelectionChangedEventArgs>(lvConditions, \"ItemSelectionChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var hasSelection = lvConditions.SelectedItems.Count > 0;\n                    btnRemove.Enabled = btnEdit.Enabled = hasSelection;\n                    btnMoveDown.Enabled = hasSelection && lvConditions.SelectedItems[0].Index < lvConditions.Items.Count - 1;\n                    btnMoveUp.Enabled = hasSelection && lvConditions.SelectedItems[0].Index > 0;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Name = txtName.Text;\n                    Item.PatternSyntax = cbUsing.SelectedIndex;\n                    Item.LogicalGrouping = cbGrouping.SelectedIndex;\n                    Item.Conditions.Clear();\n                    foreach (ConditionListViewItem item in lvConditions.Items)\n                    {\n                        Item.Conditions.Add(item.Item);\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public PreConditionItem Item { get; set; }\n\n        private void AddPreconditionDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=163111\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/AddPreconditionDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/CustomTagItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using Microsoft.Web.Administration;\n\n    public class CustomTagItem : IItem<CustomTagItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public bool Match(CustomTagItem other)\n        {\n            return other != null && other.Name == Name;\n        }\n\n        public CustomTagItem(ConfigurationElement element)\n        {\n            this.Element = element;\n            if (element == null)\n            {\n                return;\n            }\n\n            this.Name = (string)element[\"name\"];\n            this.Attribute = (string)element[\"attribute\"];\n        }\n\n        public string Attribute { get; set; }\n\n        public string Name { get; set; }\n\n        public string Flag { get; set; }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"attribute\"] = Attribute;\n        }\n\n        public bool Equals(CustomTagItem other)\n        {\n            return Match(other) && other.Attribute == Attribute;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/CustomTagsFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright company=\"\" file=\"RewriteFeature.cs\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class CustomTagsFeature : FeatureBase<CustomTagsItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly CustomTagsFeature _owner;\n\n            public FeatureTaskList(CustomTagsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"AddGroup\", \"Add Group...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"Add\", \"Add Custom Tag...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Rename\", \"Rename\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddGroup()\n            {\n                _owner.AddGroup();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.Edit();\n            }\n        }\n\n        public CustomTagsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/rewrite/outboundRules\");\n            CanRevert = section.CanRevert();\n            LoadItems();\n        }\n\n        public void AddGroup()\n        {\n            using (var dialog = new AddCustomTagsDialog(Module))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                AddItem(dialog.Item);\n            }\n        }\n\n        public void Add()\n        {\n            using (var dialog = new AddCustomTagDialog(Module))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                var newItem = dialog.Item;\n                var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n                SelectedItem.Add(newItem);\n                service.ServerManager.CommitChanges();\n            }\n            OnRewriteSettingsSaved();\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected entry?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Edit()\n        {\n            RenameInline(SelectedItem);\n        }\n\n        internal protected void OnRewriteSettingsSaved()\n        {\n            RewriteSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130403&amp;clcid=0x409\");\n            return false;\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/rewrite/outboundRules\");\n            return section.GetCollection(\"customTags\");\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnRewriteSettingsSaved();\n        }\n\n        public bool CanRevert { get; private set; }\n\n        public RewriteSettingsSavedEventHandler RewriteSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/CustomTagsItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System.Collections.Generic;\n\n    using Microsoft.Web.Administration;\n\n    public class CustomTagsItem : IItem<CustomTagsItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public CustomTagsItem(ConfigurationElement element)\n        {\n            Element = element;\n            Tags = new List<CustomTagItem>();\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            if (element == null)\n            {\n                return;\n            }\n\n            Name = (string)element[\"name\"];\n            var collection = element.GetCollection();\n            foreach (ConfigurationElement item in collection)\n            {\n                Tags.Add(new CustomTagItem(item));\n            }\n        }\n\n        public List<CustomTagItem> Tags { get; set; }\n\n        public string Name { get; set; }\n\n        public string Flag { get; set; }\n\n        public string TagString { get; private set; }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            var collection = Element.GetCollection();\n            collection.Clear();\n            foreach (var item in Tags)\n            {\n                item.AppendTo(collection);\n            }\n        }\n\n        public void Add(CustomTagItem newItem)\n        {\n            // TODO: add\n        }\n\n        public bool Match(CustomTagsItem other)\n        {\n            return other != null && Name == other.Name;\n        }\n\n        public bool Equals(CustomTagsItem other)\n        {\n            return Match(other) && TagString == other.TagString;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/CustomTagsPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Outbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class CustomTagsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chCount = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chEntry = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 7;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 9;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chCount,\n            this.chEntry});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Collection Name\";\n            this.chName.Width = 350;\n            // \n            // chCount\n            // \n            this.chCount.Text = \"Count\";\n            this.chCount.Width = 200;\n            // \n            // chEntry\n            // \n            this.chEntry.Text = \"Entry Type\";\n            this.chEntry.Width = 200;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel3,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Category\",\n            \"Area\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(470, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Preconditions are used to determine whether the response should be evaluated by o\" +\n    \"utbound rules.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 8;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(335, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Preconditions for Outbound Rules\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // PreConditionsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"PreConditionsPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n        private ContextMenuStrip cmsActionPanel;\n        private SplitContainer splitContainer1;\n        private Panel panel2;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chEntry;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private Label label2;\n        private PictureBox pictureBox1;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ColumnHeader chCount;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/CustomTagsPage.cs",
    "content": "﻿using System.ComponentModel;\n// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"InboundRulePage.cs\" company=\"LeXtudio\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class CustomTagsPage : ModuleListPage, IModuleChildPage\n    {\n        private sealed class PageTaskList : DefaultTaskList\n        {\n            private readonly CustomTagsPage _owner;\n\n            public PageTaskList(CustomTagsPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                           {\n                               GetBackTaskItem(\"Back\", \"Back to Rules\"),\n                               MethodTaskItem.CreateSeparator().SetUsage(),\n                               HelpTaskItem\n                           };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Back()\n            {\n                _owner.Back();\n            }\n        }\n\n        private sealed class CustomTagsListViewItem : ListViewItem, IFeatureListViewItem<CustomTagsItem>\n        {\n            public CustomTagsItem Item { get; }\n            private readonly CustomTagsPage _page;\n\n            public CustomTagsListViewItem(CustomTagsItem item, CustomTagsPage page)\n                : base(item.Name)\n            {\n                this.Item = item;\n                _page = page;\n                this.SubItems.Add(new ListViewSubItem(this, item.TagString));\n                this.SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n\n            public void Update()\n            {\n                // TODO: how to update.\n            }\n        }\n\n        private TaskList _taskList;\n        private CustomTagsFeature _feature;\n\n        public CustomTagsPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new CustomTagsFeature(Module);\n            _feature.RewriteSettingsUpdated = this.InitializeListPage;\n            _feature.Load();\n\n            _feature.InitializeMouseClick(listView1, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n            },\n            text =>\n            {\n                if (_feature.FindDuplicate(item => item.Name, text))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"A custom tag with this name already exists.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    return false;\n                }\n                return true;\n            });\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new CustomTagsListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (CustomTagsListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            this.Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130425&amp;clcid=0x409\");\n            return true;\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void Back()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(1);\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IModulePage ParentPage { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/CustomTagsPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>556, 56</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>661, 56</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/OutboundFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    public class OutboundFeature : FeatureBase<OutboundRule>\n    {\n        public OutboundFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/rewrite/outboundRules\");\n            return section.GetCollection();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            RewriteSettingsUpdated?.Invoke();\n        }\n\n        public void Refresh()\n        {\n            OnSettingsSaved();\n        }\n\n        public RewriteSettingsSavedEventHandler RewriteSettingsUpdated { get; set; }\n\n        public string Name\n        {\n            get\n            {\n                return \"URL Rewrite\";\n            }\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var outSection = service.GetSection(\"system.webServer/rewrite/outboundRules\");\n            var preConditions = outSection.ChildElements[\"preConditions\"];\n\n            PreConditions = new List<PreConditionItem>();\n            Tags = new List<CustomTagsItem>();\n            foreach (ConfigurationElement condition in preConditions.GetCollection())\n            {\n                var item = new PreConditionItem(condition);\n                PreConditions.Add(item);\n            }\n\n            var tags = outSection.ChildElements[\"customTags\"];\n            foreach (ConfigurationElement condition in tags.GetCollection())\n            {\n                var item = new CustomTagsItem(condition);\n                Tags.Add(item);\n            }\n\n            LoadItems();\n        }\n\n        public List<CustomTagsItem> Tags { get; set; }\n\n        public List<PreConditionItem> PreConditions { get; set; }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(OutboundRule item)\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service.Navigate(null, null, typeof(OutboundRulePage), new Tuple<OutboundFeature, OutboundRule>(this, item));\n            OnSettingsSaved();\n        }\n\n        public void MoveUp()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveUpItem();\n        }\n\n        public void MoveDown()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveDownItem();\n        }\n\n        public void Disable()\n        {\n            SelectedItem.Enabled = false;\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            SelectedItem.Element[\"enabled\"] = false;\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public void Enable()\n        {\n            SelectedItem.Enabled = true;\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            SelectedItem.Element[\"enabled\"] = true;\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected rule?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/OutboundRule.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System.Collections.Generic;\n    using System.Diagnostics;\n\n    using Microsoft.Web.Administration;\n\n    public class OutboundRule : IItem<OutboundRule>\n    {\n        public OutboundRule(ConfigurationElement element)\n        {\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            Element = element;\n            Conditions = new List<ConditionItem>();\n            if (element == null)\n            {\n                Input = \"URL path after '/'\";\n                return;\n            }\n\n            CancelChanges();\n        }\n\n        public string Name { get; set; }\n\n        public string Input { get; set; }\n\n        public bool Scope { get; set; }\n\n        public string Pattern { get; set; }\n\n        public long Action { get; set; }\n\n        public bool Stopping { get; set; }\n\n        public string Flag { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public bool Enabled { get; set; }\n\n        public RuleSettingsUpdatedEventHandler RuleSettingsUpdated { get; set; }\n\n        public bool IgnoreCase { get; set; }\n\n        public long Syntax { get; set; }\n\n        public List<ConditionItem> Conditions { get; }\n\n        public bool Equals(OutboundRule other)\n        {\n            return Match(other);\n        }\n\n        public bool Match(OutboundRule other)\n        {\n            return other != null && other.Name == Name;\n        }\n\n        public bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130425&amp;clcid=0x409\");\n            return true;\n        }\n\n        public void CancelChanges()\n        {\n            Name = (string)Element[\"name\"];\n            PreCondition = (string)Element[\"preCondition\"];\n            Enabled = (bool)Element[\"enabled\"];\n            Syntax = (long)Element[\"patternSyntax\"];\n            Stopping = (bool)Element[\"stopProcessing\"];\n            ConfigurationElement matchElement = Element.ChildElements[\"match\"];\n            Filter = (long)matchElement[\"filterByTags\"];\n            CustomTags = (string)matchElement[\"customTags\"];\n            ServerVariable = (string)matchElement[\"serverVariable\"];\n            Pattern = (string)matchElement[\"pattern\"];\n            IgnoreCase = (bool)matchElement[\"ignoreCase\"];\n            Negate = (bool)matchElement[\"negate\"];\n\n            var conditions = Element.ChildElements[\"conditions\"];\n            TrackAllCaptures = (bool)conditions[\"trackAllCaptures\"];\n            LogicalGrouping = (long)conditions[\"logicalGrouping\"];\n            foreach (ConfigurationElement condition in conditions.GetCollection())\n            {\n                var item = new ConditionItem(condition);\n                Conditions.Add(item);\n            }\n\n            ConfigurationElement actionElement = Element.ChildElements[\"action\"];\n            Action = (long)actionElement[\"type\"];\n            Value = (string)actionElement[\"value\"];\n            Replace = (bool)actionElement[\"replace\"];\n        }\n\n        public bool Negate { get; set; }\n\n        public bool Replace { get; set; }\n\n        public string Value { get; set; }\n\n        public string ServerVariable { get; set; }\n\n        public long Filter { get; set; }\n\n        public string PreCondition { get; set; }\n\n        public long LogicalGrouping { get; set; }\n\n        public bool TrackAllCaptures { get; set; }\n\n        public string CustomTags { get; set; }\n\n        public bool ApplyChanges()\n        {\n            Apply();\n            return true;\n        }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"preCondition\"] = PreCondition;\n            Element[\"enabled\"] = Enabled;\n            Element[\"patternSyntax\"] = Syntax;\n            Element[\"stopProcessing\"] = Stopping;\n            ConfigurationElement matchElement = Element.ChildElements[\"match\"];\n            matchElement[\"filterByTags\"] = Filter;\n            matchElement[\"customTags\"] = CustomTags;\n            matchElement[\"serverVariable\"] = ServerVariable;\n            matchElement[\"ignoreCase\"] = IgnoreCase;\n            matchElement[\"pattern\"] = Pattern;\n            matchElement[\"negate\"] = Negate;\n            ConfigurationElement actionElement = Element.ChildElements[\"action\"];\n            actionElement[\"type\"] = Action;\n            actionElement[\"value\"] = Value;\n            actionElement[\"replace\"] = Replace;\n\n            var conditions = Element.ChildElements[\"conditions\"];\n            conditions[\"trackAllCaptures\"] = TrackAllCaptures;\n            conditions[\"logicalGrouping\"] = LogicalGrouping;\n            var conditionsCollection = conditions.GetCollection();\n            conditionsCollection.Clear();\n            foreach (var condition in Conditions)\n            {\n                condition.AppendTo(conditionsCollection);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/OutboundRulePage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Outbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    using MakarovDev.ExpandCollapsePanel;\n\n    using PresentationControls;\n\n    partial class OutboundRulePage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            PresentationControls.CheckBoxProperties checkBoxProperties1 = new PresentationControls.CheckBoxProperties();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();\n            this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();\n            this.advancedFlowLayoutPanel1 = new MakarovDev.ExpandCollapsePanel.AdvancedFlowLayoutPanel();\n            this.gbMatch = new MakarovDev.ExpandCollapsePanel.ExpandCollapsePanel();\n            this.lblVariable = new System.Windows.Forms.Label();\n            this.lblTagMatch = new System.Windows.Forms.Label();\n            this.label18 = new System.Windows.Forms.Label();\n            this.cbUsing = new System.Windows.Forms.ComboBox();\n            this.cbTags = new System.Windows.Forms.ComboBox();\n            this.lblCustomTags = new System.Windows.Forms.Label();\n            this.cbContent = new System.Windows.Forms.ComboBox();\n            this.lblContent = new System.Windows.Forms.Label();\n            this.cbIgnoreCase = new System.Windows.Forms.CheckBox();\n            this.btnTest = new System.Windows.Forms.Button();\n            this.txtPattern = new System.Windows.Forms.TextBox();\n            this.label6 = new System.Windows.Forms.Label();\n            this.cbMatch = new PresentationControls.CheckBoxComboBox();\n            this.cbScope = new System.Windows.Forms.ComboBox();\n            this.label4 = new System.Windows.Forms.Label();\n            this.txtVariable = new System.Windows.Forms.TextBox();\n            this.gbConditions = new MakarovDev.ExpandCollapsePanel.ExpandCollapsePanel();\n            this.btnDown = new System.Windows.Forms.Button();\n            this.btnUp = new System.Windows.Forms.Button();\n            this.btnRemove = new System.Windows.Forms.Button();\n            this.btnEdit = new System.Windows.Forms.Button();\n            this.lvConditions = new System.Windows.Forms.ListView();\n            this.chInput = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPattern = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.cbTrack = new System.Windows.Forms.CheckBox();\n            this.btnAdd = new System.Windows.Forms.Button();\n            this.label19 = new System.Windows.Forms.Label();\n            this.cbAny = new System.Windows.Forms.ComboBox();\n            this.label20 = new System.Windows.Forms.Label();\n            this.groupBox2 = new MakarovDev.ExpandCollapsePanel.ExpandCollapsePanel();\n            this.cbStop = new System.Windows.Forms.CheckBox();\n            this.gbRewrite = new System.Windows.Forms.GroupBox();\n            this.txtValue = new System.Windows.Forms.TextBox();\n            this.label8 = new System.Windows.Forms.Label();\n            this.cbAction = new System.Windows.Forms.ComboBox();\n            this.label7 = new System.Windows.Forms.Label();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.btnEditPrecondition = new System.Windows.Forms.Button();\n            this.cbPreCondition = new System.Windows.Forms.ComboBox();\n            this.label15 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.panel3 = new System.Windows.Forms.Panel();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.tableLayoutPanel2.SuspendLayout();\n            this.tableLayoutPanel3.SuspendLayout();\n            this.advancedFlowLayoutPanel1.SuspendLayout();\n            this.gbMatch.SuspendLayout();\n            this.gbConditions.SuspendLayout();\n            this.groupBox2.SuspendLayout();\n            this.gbRewrite.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.panel3.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.tableLayoutPanel2);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // tableLayoutPanel2\n            // \n            this.tableLayoutPanel2.ColumnCount = 1;\n            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\n            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 0, 1);\n            this.tableLayoutPanel2.Controls.Add(this.panel3, 0, 0);\n            this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel2.Name = \"tableLayoutPanel2\";\n            this.tableLayoutPanel2.RowCount = 3;\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel2.Size = new System.Drawing.Size(580, 600);\n            this.tableLayoutPanel2.TabIndex = 12;\n            // \n            // tableLayoutPanel3\n            // \n            this.tableLayoutPanel3.ColumnCount = 1;\n            this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel3.Controls.Add(this.advancedFlowLayoutPanel1, 0, 1);\n            this.tableLayoutPanel3.Controls.Add(this.panel2, 0, 0);\n            this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 63);\n            this.tableLayoutPanel3.Name = \"tableLayoutPanel3\";\n            this.tableLayoutPanel3.RowCount = 2;\n            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 120F));\n            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel3.Size = new System.Drawing.Size(574, 514);\n            this.tableLayoutPanel3.TabIndex = 8;\n            // \n            // advancedFlowLayoutPanel1\n            // \n            this.advancedFlowLayoutPanel1.AutoScroll = true;\n            this.advancedFlowLayoutPanel1.Controls.Add(this.gbMatch);\n            this.advancedFlowLayoutPanel1.Controls.Add(this.gbConditions);\n            this.advancedFlowLayoutPanel1.Controls.Add(this.groupBox2);\n            this.advancedFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.advancedFlowLayoutPanel1.Location = new System.Drawing.Point(3, 123);\n            this.advancedFlowLayoutPanel1.Name = \"advancedFlowLayoutPanel1\";\n            this.advancedFlowLayoutPanel1.Size = new System.Drawing.Size(568, 388);\n            this.advancedFlowLayoutPanel1.TabIndex = 7;\n            // \n            // gbMatch\n            // \n            this.gbMatch.ButtonStyle = MakarovDev.ExpandCollapsePanel.ExpandCollapseButton.ExpandButtonStyle.Circle;\n            this.gbMatch.Controls.Add(this.lblVariable);\n            this.gbMatch.Controls.Add(this.lblTagMatch);\n            this.gbMatch.Controls.Add(this.label18);\n            this.gbMatch.Controls.Add(this.cbUsing);\n            this.gbMatch.Controls.Add(this.cbTags);\n            this.gbMatch.Controls.Add(this.lblCustomTags);\n            this.gbMatch.Controls.Add(this.cbContent);\n            this.gbMatch.Controls.Add(this.lblContent);\n            this.gbMatch.Controls.Add(this.cbIgnoreCase);\n            this.gbMatch.Controls.Add(this.btnTest);\n            this.gbMatch.Controls.Add(this.txtPattern);\n            this.gbMatch.Controls.Add(this.label6);\n            this.gbMatch.Controls.Add(this.cbMatch);\n            this.gbMatch.Controls.Add(this.cbScope);\n            this.gbMatch.Controls.Add(this.label4);\n            this.gbMatch.Controls.Add(this.txtVariable);\n            this.gbMatch.ExpandedHeight = 182;\n            this.gbMatch.Location = new System.Drawing.Point(3, 3);\n            this.gbMatch.Name = \"gbMatch\";\n            this.gbMatch.Size = new System.Drawing.Size(545, 300);\n            this.gbMatch.TabIndex = 5;\n            this.gbMatch.Text = \"Match\";\n            // \n            // lblVariable\n            // \n            this.lblVariable.AutoSize = true;\n            this.lblVariable.Location = new System.Drawing.Point(15, 76);\n            this.lblVariable.Name = \"lblVariable\";\n            this.lblVariable.Size = new System.Drawing.Size(90, 15);\n            this.lblVariable.TabIndex = 15;\n            this.lblVariable.Text = \"Variable name:\";\n            // \n            // lblTagMatch\n            // \n            this.lblTagMatch.AutoSize = true;\n            this.lblTagMatch.Location = new System.Drawing.Point(15, 76);\n            this.lblTagMatch.Name = \"lblTagMatch\";\n            this.lblTagMatch.Size = new System.Drawing.Size(142, 15);\n            this.lblTagMatch.TabIndex = 14;\n            this.lblTagMatch.Text = \"Match the content within:\";\n            // \n            // label18\n            // \n            this.label18.AutoSize = true;\n            this.label18.Location = new System.Drawing.Point(397, 145);\n            this.label18.Name = \"label18\";\n            this.label18.Size = new System.Drawing.Size(42, 15);\n            this.label18.TabIndex = 13;\n            this.label18.Text = \"Using:\";\n            // \n            // cbUsing\n            // \n            this.cbUsing.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbUsing.FormattingEnabled = true;\n            this.cbUsing.Items.AddRange(new object[] {\n            \"Regular Expressions\",\n            \"Wildcards\",\n            \"Exact Match\"});\n            this.cbUsing.Location = new System.Drawing.Point(400, 163);\n            this.cbUsing.Name = \"cbUsing\";\n            this.cbUsing.Size = new System.Drawing.Size(265, 21);\n            this.cbUsing.TabIndex = 12;\n            // \n            // cbTags\n            // \n            this.cbTags.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbTags.Enabled = false;\n            this.cbTags.FormattingEnabled = true;\n            this.cbTags.Location = new System.Drawing.Point(400, 94);\n            this.cbTags.Name = \"cbTags\";\n            this.cbTags.Size = new System.Drawing.Size(265, 21);\n            this.cbTags.TabIndex = 11;\n            this.cbTags.SelectedIndexChanged += new System.EventHandler(this.CbTagsSelectedIndexChanged);\n            // \n            // lblCustomTags\n            // \n            this.lblCustomTags.AutoSize = true;\n            this.lblCustomTags.Location = new System.Drawing.Point(397, 76);\n            this.lblCustomTags.Name = \"lblCustomTags\";\n            this.lblCustomTags.Size = new System.Drawing.Size(78, 15);\n            this.lblCustomTags.TabIndex = 10;\n            this.lblCustomTags.Text = \"Custom tags:\";\n            // \n            // cbContent\n            // \n            this.cbContent.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbContent.FormattingEnabled = true;\n            this.cbContent.Items.AddRange(new object[] {\n            \"Matches the Pattern\",\n            \"Does Not Match the Pattern\"});\n            this.cbContent.Location = new System.Drawing.Point(18, 163);\n            this.cbContent.Name = \"cbContent\";\n            this.cbContent.Size = new System.Drawing.Size(270, 21);\n            this.cbContent.TabIndex = 9;\n            // \n            // lblContent\n            // \n            this.lblContent.AutoSize = true;\n            this.lblContent.Location = new System.Drawing.Point(15, 145);\n            this.lblContent.Name = \"lblContent\";\n            this.lblContent.Size = new System.Drawing.Size(52, 15);\n            this.lblContent.TabIndex = 8;\n            this.lblContent.Text = \"Content:\";\n            // \n            // cbIgnoreCase\n            // \n            this.cbIgnoreCase.AutoSize = true;\n            this.cbIgnoreCase.Location = new System.Drawing.Point(18, 263);\n            this.cbIgnoreCase.Name = \"cbIgnoreCase\";\n            this.cbIgnoreCase.Size = new System.Drawing.Size(90, 19);\n            this.cbIgnoreCase.TabIndex = 7;\n            this.cbIgnoreCase.Text = \"Ignore case\";\n            this.cbIgnoreCase.UseVisualStyleBackColor = true;\n            this.cbIgnoreCase.CheckedChanged += new System.EventHandler(this.CbAppendRedirectCheckedChanged);\n            // \n            // btnTest\n            // \n            this.btnTest.Location = new System.Drawing.Point(549, 236);\n            this.btnTest.Name = \"btnTest\";\n            this.btnTest.Size = new System.Drawing.Size(95, 23);\n            this.btnTest.TabIndex = 6;\n            this.btnTest.Text = \"Test patterns...\";\n            this.btnTest.UseVisualStyleBackColor = true;\n            this.btnTest.Click += new System.EventHandler(this.BtnTestClick);\n            // \n            // txtPattern\n            // \n            this.txtPattern.Location = new System.Drawing.Point(18, 236);\n            this.txtPattern.Name = \"txtPattern\";\n            this.txtPattern.Size = new System.Drawing.Size(525, 21);\n            this.txtPattern.TabIndex = 5;\n            this.txtPattern.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(15, 218);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(49, 15);\n            this.label6.TabIndex = 4;\n            this.label6.Text = \"Pattern:\";\n            // \n            // cbMatch\n            // \n            checkBoxProperties1.ForeColor = System.Drawing.SystemColors.ControlText;\n            this.cbMatch.CheckBoxProperties = checkBoxProperties1;\n            this.cbMatch.DisplayMemberSingleItem = \"\";\n            this.cbMatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbMatch.FormattingEnabled = true;\n            this.cbMatch.Items.AddRange(new object[] {\n            \"A (href attribute)\",\n            \"Area (href attribute)\",\n            \"Base (href attribute)\",\n            \"Form (action attribute)\",\n            \"Frame (src,longdesc attributes)\",\n            \"Head (profile attribute)\",\n            \"IFrame (src,longdesc attributes)\",\n            \"Img (src,longdesc,usemap attributes)\",\n            \"Input (src,usemap attributes)\",\n            \"Link (href attribute)\",\n            \"Script (src attribute)\",\n            \"Use Custom Tags\"});\n            this.cbMatch.Location = new System.Drawing.Point(18, 94);\n            this.cbMatch.Name = \"cbMatch\";\n            this.cbMatch.Size = new System.Drawing.Size(270, 21);\n            this.cbMatch.TabIndex = 3;\n            this.cbMatch.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // cbScope\n            // \n            this.cbScope.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbScope.FormattingEnabled = true;\n            this.cbScope.Items.AddRange(new object[] {\n            \"Response\",\n            \"Server Variable\"});\n            this.cbScope.Location = new System.Drawing.Point(18, 43);\n            this.cbScope.Name = \"cbScope\";\n            this.cbScope.Size = new System.Drawing.Size(140, 21);\n            this.cbScope.TabIndex = 1;\n            this.cbScope.SelectedIndexChanged += new System.EventHandler(this.CbScopeSelectedIndexChanged);\n            this.cbScope.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Location = new System.Drawing.Point(15, 27);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(97, 15);\n            this.label4.TabIndex = 0;\n            this.label4.Text = \"Matching scope:\";\n            // \n            // txtVariable\n            // \n            this.txtVariable.Location = new System.Drawing.Point(18, 94);\n            this.txtVariable.Name = \"txtVariable\";\n            this.txtVariable.Size = new System.Drawing.Size(553, 21);\n            this.txtVariable.TabIndex = 16;\n            // \n            // gbConditions\n            // \n            this.gbConditions.ButtonStyle = MakarovDev.ExpandCollapsePanel.ExpandCollapseButton.ExpandButtonStyle.Circle;\n            this.gbConditions.Controls.Add(this.btnDown);\n            this.gbConditions.Controls.Add(this.btnUp);\n            this.gbConditions.Controls.Add(this.btnRemove);\n            this.gbConditions.Controls.Add(this.btnEdit);\n            this.gbConditions.Controls.Add(this.lvConditions);\n            this.gbConditions.Controls.Add(this.cbTrack);\n            this.gbConditions.Controls.Add(this.btnAdd);\n            this.gbConditions.Controls.Add(this.label19);\n            this.gbConditions.Controls.Add(this.cbAny);\n            this.gbConditions.Controls.Add(this.label20);\n            this.gbConditions.ExpandedHeight = 288;\n            this.gbConditions.IsExpanded = false;\n            this.gbConditions.Location = new System.Drawing.Point(3, 309);\n            this.gbConditions.Name = \"gbConditions\";\n            this.gbConditions.Size = new System.Drawing.Size(545, 35);\n            this.gbConditions.TabIndex = 9;\n            this.gbConditions.Text = \"Conditions\";\n            // \n            // btnDown\n            // \n            this.btnDown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnDown.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnDown.Location = new System.Drawing.Point(539, 219);\n            this.btnDown.Name = \"btnDown\";\n            this.btnDown.Size = new System.Drawing.Size(95, 23);\n            this.btnDown.TabIndex = 12;\n            this.btnDown.Text = \"Move Down\";\n            this.btnDown.UseVisualStyleBackColor = false;\n            this.btnDown.Click += new System.EventHandler(this.BtnDownClick);\n            // \n            // btnUp\n            // \n            this.btnUp.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnUp.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnUp.Location = new System.Drawing.Point(539, 190);\n            this.btnUp.Name = \"btnUp\";\n            this.btnUp.Size = new System.Drawing.Size(95, 23);\n            this.btnUp.TabIndex = 11;\n            this.btnUp.Text = \"Move Up\";\n            this.btnUp.UseVisualStyleBackColor = false;\n            this.btnUp.Click += new System.EventHandler(this.BtnUpClick);\n            // \n            // btnRemove\n            // \n            this.btnRemove.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnRemove.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnRemove.Location = new System.Drawing.Point(539, 141);\n            this.btnRemove.Name = \"btnRemove\";\n            this.btnRemove.Size = new System.Drawing.Size(95, 23);\n            this.btnRemove.TabIndex = 10;\n            this.btnRemove.Text = \"Remove\";\n            this.btnRemove.UseVisualStyleBackColor = false;\n            this.btnRemove.Click += new System.EventHandler(this.BtnRemoveClick);\n            // \n            // btnEdit\n            // \n            this.btnEdit.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnEdit.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnEdit.Location = new System.Drawing.Point(539, 112);\n            this.btnEdit.Name = \"btnEdit\";\n            this.btnEdit.Size = new System.Drawing.Size(95, 23);\n            this.btnEdit.TabIndex = 9;\n            this.btnEdit.Text = \"Edit...\";\n            this.btnEdit.UseVisualStyleBackColor = false;\n            this.btnEdit.Click += new System.EventHandler(this.BtnEditClick);\n            // \n            // lvConditions\n            // \n            this.lvConditions.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.lvConditions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chInput,\n            this.chType,\n            this.chPattern});\n            this.lvConditions.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));\n            this.lvConditions.FullRowSelect = true;\n            this.lvConditions.HideSelection = false;\n            this.lvConditions.Location = new System.Drawing.Point(8, 70);\n            this.lvConditions.MultiSelect = false;\n            this.lvConditions.Name = \"lvConditions\";\n            this.lvConditions.Size = new System.Drawing.Size(525, 185);\n            this.lvConditions.TabIndex = 8;\n            this.lvConditions.UseCompatibleStateImageBehavior = false;\n            this.lvConditions.View = System.Windows.Forms.View.Details;\n            // \n            // chInput\n            // \n            this.chInput.Text = \"Input\";\n            this.chInput.Width = 100;\n            // \n            // chType\n            // \n            this.chType.Text = \"Type\";\n            this.chType.Width = 160;\n            // \n            // chPattern\n            // \n            this.chPattern.Text = \"Pattern\";\n            this.chPattern.Width = 180;\n            // \n            // cbTrack\n            // \n            this.cbTrack.AutoSize = true;\n            this.cbTrack.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.cbTrack.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.cbTrack.Location = new System.Drawing.Point(18, 261);\n            this.cbTrack.Name = \"cbTrack\";\n            this.cbTrack.Size = new System.Drawing.Size(239, 19);\n            this.cbTrack.TabIndex = 7;\n            this.cbTrack.Text = \"Track capture groups across conditions\";\n            this.cbTrack.UseVisualStyleBackColor = false;\n            // \n            // btnAdd\n            // \n            this.btnAdd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.btnAdd.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.btnAdd.Location = new System.Drawing.Point(539, 83);\n            this.btnAdd.Name = \"btnAdd\";\n            this.btnAdd.Size = new System.Drawing.Size(95, 23);\n            this.btnAdd.TabIndex = 6;\n            this.btnAdd.Text = \"Add...\";\n            this.btnAdd.UseVisualStyleBackColor = false;\n            this.btnAdd.Click += new System.EventHandler(this.BtnAddClick);\n            // \n            // label19\n            // \n            this.label19.AutoSize = true;\n            this.label19.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.label19.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.label19.Location = new System.Drawing.Point(376, 27);\n            this.label19.Name = \"label19\";\n            this.label19.Size = new System.Drawing.Size(42, 15);\n            this.label19.TabIndex = 2;\n            this.label19.Text = \"Using:\";\n            // \n            // cbAny\n            // \n            this.cbAny.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.cbAny.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbAny.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));\n            this.cbAny.FormattingEnabled = true;\n            this.cbAny.Items.AddRange(new object[] {\n            \"Match All\",\n            \"Match Any\"});\n            this.cbAny.Location = new System.Drawing.Point(18, 43);\n            this.cbAny.Name = \"cbAny\";\n            this.cbAny.Size = new System.Drawing.Size(131, 21);\n            this.cbAny.TabIndex = 1;\n            // \n            // label20\n            // \n            this.label20.AutoSize = true;\n            this.label20.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));\n            this.label20.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(70)))), ((int)(((byte)(130)))), ((int)(((byte)(180)))));\n            this.label20.Location = new System.Drawing.Point(15, 27);\n            this.label20.Name = \"label20\";\n            this.label20.Size = new System.Drawing.Size(102, 15);\n            this.label20.TabIndex = 0;\n            this.label20.Text = \"Logical grouping:\";\n            // \n            // groupBox2\n            // \n            this.groupBox2.ButtonStyle = MakarovDev.ExpandCollapsePanel.ExpandCollapseButton.ExpandButtonStyle.Circle;\n            this.groupBox2.Controls.Add(this.cbStop);\n            this.groupBox2.Controls.Add(this.gbRewrite);\n            this.groupBox2.Controls.Add(this.cbAction);\n            this.groupBox2.Controls.Add(this.label7);\n            this.groupBox2.ExpandedHeight = 261;\n            this.groupBox2.Location = new System.Drawing.Point(3, 350);\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.Size = new System.Drawing.Size(545, 264);\n            this.groupBox2.TabIndex = 6;\n            this.groupBox2.Text = \"Action\";\n            // \n            // cbStop\n            // \n            this.cbStop.AutoSize = true;\n            this.cbStop.Location = new System.Drawing.Point(17, 178);\n            this.cbStop.Name = \"cbStop\";\n            this.cbStop.Size = new System.Drawing.Size(224, 19);\n            this.cbStop.TabIndex = 3;\n            this.cbStop.Text = \"Stop processing of subsequent rules\";\n            this.cbStop.UseVisualStyleBackColor = true;\n            this.cbStop.CheckedChanged += new System.EventHandler(this.CbAppendRedirectCheckedChanged);\n            // \n            // gbRewrite\n            // \n            this.gbRewrite.Controls.Add(this.txtValue);\n            this.gbRewrite.Controls.Add(this.label8);\n            this.gbRewrite.Location = new System.Drawing.Point(18, 70);\n            this.gbRewrite.Name = \"gbRewrite\";\n            this.gbRewrite.Size = new System.Drawing.Size(626, 90);\n            this.gbRewrite.TabIndex = 2;\n            this.gbRewrite.TabStop = false;\n            this.gbRewrite.Text = \"Action Properties\";\n            // \n            // txtValue\n            // \n            this.txtValue.Location = new System.Drawing.Point(21, 43);\n            this.txtValue.Name = \"txtValue\";\n            this.txtValue.Size = new System.Drawing.Size(584, 21);\n            this.txtValue.TabIndex = 1;\n            this.txtValue.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label8\n            // \n            this.label8.AutoSize = true;\n            this.label8.Location = new System.Drawing.Point(18, 26);\n            this.label8.Name = \"label8\";\n            this.label8.Size = new System.Drawing.Size(41, 15);\n            this.label8.TabIndex = 0;\n            this.label8.Text = \"Value:\";\n            // \n            // cbAction\n            // \n            this.cbAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbAction.FormattingEnabled = true;\n            this.cbAction.Items.AddRange(new object[] {\n            \"None\",\n            \"Rewrite\",\n            \"Redirect\",\n            \"Custom Response\",\n            \"Abort Request\"});\n            this.cbAction.Location = new System.Drawing.Point(18, 42);\n            this.cbAction.Name = \"cbAction\";\n            this.cbAction.Size = new System.Drawing.Size(140, 21);\n            this.cbAction.TabIndex = 1;\n            this.cbAction.SelectedIndexChanged += new System.EventHandler(this.CbActionSelectedIndexChanged);\n            this.cbAction.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // label7\n            // \n            this.label7.AutoSize = true;\n            this.label7.Location = new System.Drawing.Point(15, 26);\n            this.label7.Name = \"label7\";\n            this.label7.Size = new System.Drawing.Size(68, 15);\n            this.label7.TabIndex = 0;\n            this.label7.Text = \"Action type:\";\n            // \n            // panel2\n            // \n            this.panel2.Controls.Add(this.btnEditPrecondition);\n            this.panel2.Controls.Add(this.cbPreCondition);\n            this.panel2.Controls.Add(this.label15);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Controls.Add(this.txtName);\n            this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel2.Location = new System.Drawing.Point(3, 3);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(568, 114);\n            this.panel2.TabIndex = 11;\n            // \n            // btnEditPrecondition\n            // \n            this.btnEditPrecondition.Enabled = false;\n            this.btnEditPrecondition.Location = new System.Drawing.Point(542, 88);\n            this.btnEditPrecondition.Name = \"btnEditPrecondition\";\n            this.btnEditPrecondition.Size = new System.Drawing.Size(53, 23);\n            this.btnEditPrecondition.TabIndex = 7;\n            this.btnEditPrecondition.Text = \"Edit...\";\n            this.btnEditPrecondition.UseVisualStyleBackColor = true;\n            this.btnEditPrecondition.Click += new System.EventHandler(this.BtnEditPreconditionClick);\n            // \n            // cbPreCondition\n            // \n            this.cbPreCondition.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbPreCondition.FormattingEnabled = true;\n            this.cbPreCondition.Location = new System.Drawing.Point(21, 90);\n            this.cbPreCondition.Name = \"cbPreCondition\";\n            this.cbPreCondition.Size = new System.Drawing.Size(515, 21);\n            this.cbPreCondition.TabIndex = 6;\n            this.cbPreCondition.SelectedIndexChanged += new System.EventHandler(this.CbPreConditionSelectedIndexChanged);\n            // \n            // label15\n            // \n            this.label15.AutoSize = true;\n            this.label15.Location = new System.Drawing.Point(18, 74);\n            this.label15.Name = \"label15\";\n            this.label15.Size = new System.Drawing.Size(69, 13);\n            this.label15.TabIndex = 5;\n            this.label15.Text = \"Precondition:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(18, 11);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(38, 13);\n            this.label2.TabIndex = 3;\n            this.label2.Text = \"Name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(21, 27);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(665, 20);\n            this.txtName.TabIndex = 4;\n            this.txtName.TextChanged += new System.EventHandler(this.TxtNameTextChanged);\n            // \n            // panel3\n            // \n            this.panel3.Controls.Add(this.pictureBox1);\n            this.panel3.Controls.Add(this.label3);\n            this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel3.Location = new System.Drawing.Point(3, 3);\n            this.panel3.Name = \"panel3\";\n            this.panel3.Size = new System.Drawing.Size(574, 54);\n            this.panel3.TabIndex = 8;\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 10;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(199, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Edit Outbound Rule\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // OutboundRulePage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"OutboundRulePage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.tableLayoutPanel2.ResumeLayout(false);\n            this.tableLayoutPanel3.ResumeLayout(false);\n            this.advancedFlowLayoutPanel1.ResumeLayout(false);\n            this.gbMatch.ResumeLayout(false);\n            this.gbMatch.PerformLayout();\n            this.gbConditions.ResumeLayout(false);\n            this.gbConditions.PerformLayout();\n            this.groupBox2.ResumeLayout(false);\n            this.groupBox2.PerformLayout();\n            this.gbRewrite.ResumeLayout(false);\n            this.gbRewrite.PerformLayout();\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.panel3.ResumeLayout(false);\n            this.panel3.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private TableLayoutPanel tableLayoutPanel2;\n        private TableLayoutPanel tableLayoutPanel3;\n        private AdvancedFlowLayoutPanel advancedFlowLayoutPanel1;\n        private ExpandCollapsePanel gbMatch;\n        private CheckBox cbIgnoreCase;\n        private Button btnTest;\n        private TextBox txtPattern;\n        private Label label6;\n        private CheckBoxComboBox cbMatch;\n        private ComboBox cbScope;\n        private Label label4;\n        private ExpandCollapsePanel gbConditions;\n        private Button btnDown;\n        private Button btnUp;\n        private Button btnRemove;\n        private Button btnEdit;\n        private ListView lvConditions;\n        private ColumnHeader chInput;\n        private ColumnHeader chType;\n        private ColumnHeader chPattern;\n        private CheckBox cbTrack;\n        private Button btnAdd;\n        private Label label19;\n        private ComboBox cbAny;\n        private Label label20;\n        private ExpandCollapsePanel groupBox2;\n        private CheckBox cbStop;\n        private GroupBox gbRewrite;\n        private TextBox txtValue;\n        private Label label8;\n        private ComboBox cbAction;\n        private Label label7;\n        private Panel panel2;\n        private Label label2;\n        private TextBox txtName;\n        private Panel panel3;\n        private Button btnEditPrecondition;\n        private ComboBox cbPreCondition;\n        private Label label15;\n        private Label lblTagMatch;\n        private Label label18;\n        private ComboBox cbUsing;\n        private ComboBox cbTags;\n        private Label lblCustomTags;\n        private ComboBox cbContent;\n        private Label lblContent;\n        private TextBox txtVariable;\n        private Label lblVariable;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/OutboundRulePage.cs",
    "content": "﻿using System.ComponentModel;\n// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"InboundRulePage.cs\" company=\"LeXtudio\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Linq;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.Rewrite.Inbound;\n    using JexusManager.Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using PresentationControls;\n\n    public partial class OutboundRulePage : ModuleDialogPage, IModuleChildPage\n    {\n        private sealed class PageTaskList : DefaultTaskList\n        {\n            private readonly OutboundRulePage _owner;\n\n            public PageTaskList(OutboundRulePage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    GetBackTaskItem(\"Back\", \"Back to Rules\"),\n                    MethodTaskItem.CreateSeparator().SetUsage(),\n                    HelpTaskItem\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Back()\n            {\n                _owner.Back();\n            }\n        }\n\n        private class ConditionListViewItem : ListViewItem\n        {\n            private readonly ListViewSubItem _matchType;\n\n            private readonly ListViewSubItem _pattern;\n\n            public ConditionListViewItem(ConditionItem condition)\n                : base(condition.Input)\n            {\n                _matchType = new ListViewSubItem(this, GetText(condition.MatchType));\n                SubItems.Add(_matchType);\n                _pattern = new ListViewSubItem(this, condition.Pattern);\n                SubItems.Add(_pattern);\n                Item = condition;\n            }\n\n            public ConditionItem Item { get; }\n\n            public void Update()\n            {\n                Text = Item.Input;\n                _matchType.Text = GetText(Item.MatchType);\n                _pattern.Text = Item.MatchType > 3 ? Item.Pattern : \"N/A\";\n            }\n\n            private static string GetText(int matchType)\n            {\n                switch (matchType)\n                {\n                    case 0:\n                        return \"Is File\";\n                    case 1:\n                        return \"Is Not File\";\n                    case 2:\n                        return \"Is Directory\";\n                    case 3:\n                        return \"Is Not Directory\";\n                    case 4:\n                        return \"Matches the Pattern\";\n                    case 5:\n                        return \"Does Not Match the Pattern\";\n                }\n\n                return string.Empty;\n            }\n        }\n\n        private bool _hasChanges;\n        private bool _initialized;\n        private TaskList _taskList;\n        private OutboundFeature _feature;\n\n        public OutboundRulePage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            // TODO: pictureBox1.Image\n            var info = (Tuple<OutboundFeature, OutboundRule>)navigationData;\n            _feature = info.Item1;\n            Rule = info.Item2;\n            if (Rule != null)\n            {\n                foreach (var preCondition in _feature.PreConditions)\n                {\n                    cbPreCondition.Items.Add(preCondition.Name);\n                }\n\n                foreach (var customTags in _feature.Tags)\n                {\n                    cbTags.Items.Add(customTags.Name);\n                }\n\n                // TODO: invoke RuleSettingsUpdate somewhere.\n                Rule.RuleSettingsUpdated = Refresh;\n            }\n\n            cbPreCondition.Items.Add(\"<None>\");\n            cbPreCondition.Items.Add(\"<Create New Precondition...>\");\n            cbTags.Items.Add(\"<Create New Tags Collection...>\");\n\n            if (Rule == null)\n            {\n                Rule = new OutboundRule(null);\n            }\n\n            Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130425&amp;clcid=0x409\");\n            return true;\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void Back()\n        {\n            if (_hasChanges)\n            {\n                var result = ShowMessage(\"The changes you have made will be lost. Do you want to save changes?\", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);\n                if (result == DialogResult.Cancel)\n                {\n                    return;\n                }\n\n                if (result == DialogResult.Yes)\n                {\n                    var applied = ApplyChanges();\n                    if (!applied)\n                    {\n                        return;\n                    }\n                }\n            }\n\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(1);\n            _feature.SelectedItem = Rule;\n            _feature.Refresh();\n        }\n\n        private void TxtNameTextChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public OutboundRule Rule { get; set; }\n\n        private void BtnTestClick(object sender, EventArgs e)\n        {\n            using var dialog = new RegexTestDialog(Module, txtPattern.Text, cbIgnoreCase.Checked, false);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            txtPattern.Text = dialog.Pattern;\n            cbIgnoreCase.Checked = dialog.IgnoreCase;\n        }\n\n        protected override bool ApplyChanges()\n        {\n            if (!CanApplyChanges)\n            {\n                ShowMessage(\"The data in the page is invalid. Correct the data and try again.\");\n                return false;\n            }\n\n            var filter = GetFilter(cbMatch);\n            Rule.Name = txtName.Text;\n            Rule.PreCondition = cbPreCondition.Text == \"<None>\" ? string.Empty : cbPreCondition.Text;\n            Rule.CustomTags = cbTags.Text;\n            Rule.Enabled = true;\n            Rule.Syntax = cbUsing.SelectedIndex;\n            Rule.Stopping = cbStop.Checked;\n            Rule.Filter = filter;\n            Rule.ServerVariable = txtVariable.Text;\n            Rule.Pattern = txtPattern.Text;\n            Rule.Negate = cbContent.SelectedIndex == 1;\n            Rule.IgnoreCase = cbIgnoreCase.Checked;\n            Rule.TrackAllCaptures = cbTrack.Checked;\n            Rule.LogicalGrouping = cbAny.SelectedIndex;\n            Rule.Action = cbAction.SelectedIndex;\n            Rule.Value = txtValue.Text;\n            Rule.Replace = !string.IsNullOrWhiteSpace(txtValue.Text);\n            Rule.Conditions.Clear();\n            foreach (ConditionListViewItem item in lvConditions.Items)\n            {\n                Rule.Conditions.Add(item.Item);\n            }\n\n            if (txtName.ReadOnly)\n            {\n                _feature.EditItem(Rule);\n            }\n            else\n            {\n                txtName.ReadOnly = true;\n                _feature.AddItem(Rule);\n            }\n\n            if (!Rule.ApplyChanges())\n            {\n                return false;\n            }\n\n            ClearChanges();\n            return true;\n        }\n\n        public static long GetFilter(CheckBoxComboBox box)\n        {\n            long result = 0L;\n            for (int index = 0; index < box.CheckBoxItems.Count - 1; index++)\n            {\n                if (box.CheckBoxItems[index].Checked)\n                {\n                    result |= 1 << index;\n                }\n            }\n\n            return box.CheckBoxItems[box.CheckBoxItems.Count - 1].Checked ? result | 32768 : result;\n        }\n\n        public static void SetFilter(long filter, CheckBoxComboBox box)\n        {\n            box.CheckBoxItems[box.CheckBoxItems.Count - 1].Checked = (filter & 32768) != 0;\n            for (int index = 0; index < box.CheckBoxItems.Count - 1; index++)\n            {\n                box.CheckBoxItems[index].Checked = (filter & 1 << index) != 0;\n            }\n        }\n\n        protected override void CancelChanges()\n        {\n            _initialized = false;\n            _hasChanges = false;\n            Rule?.CancelChanges();\n            ClearChanges();\n        }\n\n        protected override bool HasChanges\n        {\n            get { return _hasChanges; }\n        }\n\n        protected override bool CanApplyChanges\n        {\n            get\n            {\n                return !string.IsNullOrWhiteSpace(txtName.Text) &&\n                       !string.IsNullOrWhiteSpace(txtPattern.Text) &&\n                       !string.IsNullOrWhiteSpace(txtValue.Text);\n            }\n        }\n\n        private void InformChanges()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            _hasChanges = true;\n            Refresh();\n        }\n\n        private void ClearChanges()\n        {\n            _hasChanges = false;\n            _initialized = false;\n            Refresh();\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        protected override void OnRefresh()\n        {\n            if (!_hasChanges)\n            {\n                txtName.ReadOnly = !string.IsNullOrEmpty(Rule.Name);\n                cbPreCondition.SelectedIndex = 0;\n                cbAction.SelectedIndex = 0;\n                cbIgnoreCase.Checked = true;\n                cbScope.SelectedIndex = 0;\n                cbStop.Checked = false;\n                cbUsing.SelectedIndex = 0;\n                cbContent.SelectedIndex = 0;\n                cbAny.SelectedIndex = 0;\n                if (Rule != null)\n                {\n                    SetFilter(Rule.Filter, cbMatch);\n                    txtName.Text = Rule.Name;\n                    cbPreCondition.Text = string.IsNullOrEmpty(Rule.PreCondition) ? \"<None>\" : Rule.PreCondition;\n                    cbTags.Text = Rule.CustomTags;\n                    cbAction.SelectedIndex = (int)Rule.Action;\n                    cbIgnoreCase.Checked = Rule.IgnoreCase;\n                    txtVariable.Text = Rule.ServerVariable;\n                    cbScope.SelectedIndex = string.IsNullOrWhiteSpace(Rule.ServerVariable) ? 0 : 1;\n                    cbStop.Checked = Rule.Stopping;\n                    cbUsing.SelectedIndex = (int)Rule.Syntax;\n                    cbContent.SelectedIndex = Rule.Negate ? 1 : 0;\n                    txtPattern.Text = Rule.Pattern;\n                    txtValue.Text = Rule.Value;\n\n                    lvConditions.Items.Clear();\n                    foreach (var condition in Rule.Conditions)\n                    {\n                        lvConditions.Items.Add(new ConditionListViewItem(condition));\n                        gbConditions.IsExpanded = true;\n                    }\n\n                    cbAny.SelectedIndex = (int)Rule.LogicalGrouping;\n                    cbTrack.Checked = Rule.TrackAllCaptures;\n                }\n\n                _initialized = true;\n            }\n\n            cbTags.Enabled = cbMatch.CheckBoxItems[12].Checked;\n            CbActionSelectedIndexChanged(null, null);\n            cbStop.Visible = cbAction.SelectedIndex == 0 || cbAction.SelectedIndex == 1;\n            UpdateConditionsButtons();\n\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IModulePage ParentPage { get; set; }\n\n        private void CbActionSelectedIndexChanged(object sender, EventArgs e)\n        {\n            gbRewrite.Visible = cbAction.SelectedIndex == 1;\n        }\n\n        private void CbAppendRedirectCheckedChanged(object sender, EventArgs e)\n        {\n            InformChanges();\n        }\n\n        private void BtnAddClick(object sender, EventArgs e)\n        {\n            using (var dialog = new AddConditionDialog(ServiceProvider, null))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n\n                var newItem = dialog.Item;\n                var listViewItem = new ConditionListViewItem(newItem);\n                lvConditions.Items.Add(listViewItem);\n                listViewItem.Selected = true;\n            }\n            InformChanges();\n        }\n\n        private void BtnRemoveClick(object sender, EventArgs e)\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected condition?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n            listViewItem.Remove();\n            InformChanges();\n        }\n\n        private void BtnEditClick(object sender, EventArgs e)\n        {\n            var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n            using (var dialog = new AddConditionDialog(ServiceProvider, listViewItem.Item))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            listViewItem.Update();\n            InformChanges();\n        }\n\n        private void BtnDownClick(object sender, EventArgs e)\n        {\n            var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n            var index = listViewItem.Index;\n\n            var item = listViewItem.Item;\n            listViewItem.Remove();\n            lvConditions.Items.Insert(index + 1, listViewItem);\n            listViewItem.Selected = true;\n            InformChanges();\n        }\n\n        private void BtnUpClick(object sender, EventArgs e)\n        {\n            var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);\n            var index = listViewItem.Index;\n\n            var item = listViewItem.Item;\n            listViewItem.Remove();\n            lvConditions.Items.Insert(index - 1, listViewItem);\n            listViewItem.Selected = true;\n            InformChanges();\n        }\n\n        private void UpdateConditionsButtons()\n        {\n            var hasSelection = lvConditions.SelectedItems.Count > 0;\n            btnRemove.Enabled = btnEdit.Enabled = hasSelection;\n            btnDown.Enabled = hasSelection && lvConditions.SelectedItems[0].Index < lvConditions.Items.Count - 1;\n            btnUp.Enabled = hasSelection && lvConditions.SelectedItems[0].Index > 0;\n        }\n\n        private void CbScopeSelectedIndexChanged(object sender, EventArgs e)\n        {\n            lblTagMatch.Visible = lblCustomTags.Visible = cbTags.Visible = cbMatch.Visible = cbScope.SelectedIndex == 0;\n            lblContent.Text = cbScope.SelectedIndex == 0 ? \"Content:\" : \"Variable value:\";\n            lblVariable.Visible = txtVariable.Visible = cbScope.SelectedIndex == 1;\n        }\n\n        private void CbPreConditionSelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (cbPreCondition.SelectedIndex == cbPreCondition.Items.Count - 1)\n            {\n                using var dialog = new AddPreConditionDialog(ServiceProvider, null);\n                if (dialog.ShowDialog() == DialogResult.OK)\n                {\n                    cbPreCondition.Items.Insert(0, dialog.Item.Name);\n                    _feature.PreConditions.Add(dialog.Item);\n                    Rule.PreCondition = dialog.Item.Name;\n                    cbPreCondition.SelectedIndex = 0;\n                }\n            }\n\n            btnEditPrecondition.Enabled = cbPreCondition.SelectedIndex + 2 < cbPreCondition.Items.Count;\n        }\n\n        private void BtnEditPreconditionClick(object sender, EventArgs e)\n        {\n            using var dialog = new AddPreConditionDialog(ServiceProvider, _feature.PreConditions.FirstOrDefault(item => item.Name == cbPreCondition.Text));\n            if (dialog.ShowDialog() == DialogResult.OK)\n            {\n                return;\n            }\n        }\n\n        private void CbTagsSelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (cbTags.SelectedIndex == cbTags.Items.Count - 1)\n            {\n                using var dialog = new AddCustomTagsDialog(ServiceProvider);\n                if (dialog.ShowDialog() == DialogResult.OK)\n                {\n                    cbTags.Items.Insert(0, dialog.Item.Name);\n                    _feature.Tags.Add(dialog.Item);\n                    Rule.CustomTags = dialog.Item.Name;\n                    cbPreCondition.SelectedIndex = 0;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/OutboundRulePage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/PreConditionItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System.Collections.Generic;\n\n    using Microsoft.Web.Administration;\n\n    public class PreConditionItem : IItem<PreConditionItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public PreConditionItem(ConfigurationElement element)\n        {\n            Element = element;\n            Conditions = new List<ConditionItem>();\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            if (element == null)\n            {\n                return;\n            }\n\n            Name = (string)element[\"name\"];\n            LogicalGrouping = (long)element[\"logicalGrouping\"];\n            PatternSyntax = (long)element[\"patternSyntax\"];\n            var items = element.GetCollection();\n            foreach (ConfigurationElement item in items)\n            {\n                var subElement = new ConditionItem(item);\n                Conditions.Add(subElement);\n            }\n        }\n\n        public List<ConditionItem> Conditions { get; set; }\n\n        public long PatternSyntax { get; set; }\n\n        public long LogicalGrouping { get; set; }\n\n        public string Name { get; set; }\n\n        public string Flag { get; set; }\n\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"logicalGrouping\"] = LogicalGrouping;\n            Element[\"patternSyntax\"] = PatternSyntax;\n\n            var conditions = Element.GetCollection();\n            conditions.Clear();\n            foreach (var item in Conditions)\n            {\n                item.AppendTo(conditions);\n            }\n        }\n\n        public bool Match(PreConditionItem other)\n        {\n            return other != null && Name == other.Name;\n        }\n\n        public bool Equals(PreConditionItem other)\n        {\n            return Match(other) && LogicalGrouping == other.LogicalGrouping && PatternSyntax == other.PatternSyntax; // TODO: compare children.\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/PreConditionsFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright company=\"\" file=\"RewriteFeature.cs\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    internal class PreConditionsFeature : FeatureBase<PreConditionItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly PreConditionsFeature _owner;\n\n            public FeatureTaskList(PreConditionsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                    result.Add(new MethodTaskItem(\"Rename\", \"Rename\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                if (_owner.CanRevert)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RevertTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.Rename();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n        }\n\n        public PreConditionsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.GetSection(\"system.webServer/rewrite/outboundRules\"); \n            CanRevert = section.CanRevert();\n            LoadItems();\n        }\n\n        public void Add()\n        {\n            using var dialog = new AddPreConditionDialog(Module, null);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(PreConditionItem item)\n        {\n            // TODO: how to edit.\n            using var dialog = new AddPreConditionDialog(Module, item);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected entry?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        internal protected void OnRewriteSettingsSaved()\n        {\n            RewriteSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130403&amp;clcid=0x409\");\n            return false;\n        }\n\n        public void Revert()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                dialog.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RevertItems();\n        }\n\n        private void Rename()\n        {\n            RenameInline(SelectedItem);\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/rewrite/outboundRules\");\n            return section.GetCollection(\"preConditions\");\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnRewriteSettingsSaved();\n        }\n\n        public bool CanRevert { get; private set; }\n\n        public RewriteSettingsSavedEventHandler RewriteSettingsUpdated { get; set; }\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/PreConditionsPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite.Outbound\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class PreConditionsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chCount = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chEntry = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel3 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 7;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 9;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chCount,\n            this.chEntry});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Collection Name\";\n            this.chName.Width = 350;\n            // \n            // chCount\n            // \n            this.chCount.Text = \"Count\";\n            this.chCount.Width = 200;\n            // \n            // chEntry\n            // \n            this.chEntry.Text = \"Entry Type\";\n            this.chEntry.Width = 200;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel3,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel3\n            // \n            this.toolStripLabel3.Name = \"toolStripLabel3\";\n            this.toolStripLabel3.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel3.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Items.AddRange(new object[] {\n            \"No Grouping\",\n            \"Category\",\n            \"Area\"});\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(470, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Preconditions are used to determine whether the response should be evaluated by o\" +\n    \"utbound rules.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 8;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(335, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Preconditions for Outbound Rules\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // PreConditionsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"PreConditionsPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n        private ContextMenuStrip cmsActionPanel;\n        private SplitContainer splitContainer1;\n        private Panel panel2;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chEntry;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel3;\n        private ToolStripComboBox cbGroup;\n        private Label label2;\n        private PictureBox pictureBox1;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ColumnHeader chCount;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/PreConditionsPage.cs",
    "content": "﻿using System.ComponentModel;\n// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n// <copyright file=\"InboundRulePage.cs\" company=\"LeXtudio\">\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Outbound\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class PreConditionsPage : ModuleListPage, IModuleChildPage\n    {\n        private sealed class PageTaskList : DefaultTaskList\n        {\n            private readonly PreConditionsPage _owner;\n\n            public PageTaskList(PreConditionsPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                           {\n                               GetBackTaskItem(\"Back\", \"Back to Rules\"),\n                               MethodTaskItem.CreateSeparator().SetUsage(),\n                               HelpTaskItem\n                           };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Back()\n            {\n                _owner.Back();\n            }\n        }\n\n        private sealed class PreConditionListViewItem : ListViewItem, IFeatureListViewItem<PreConditionItem>\n        {\n            public PreConditionItem Item { get; }\n            private readonly PreConditionsPage _page;\n\n            public PreConditionListViewItem(PreConditionItem item, PreConditionsPage page)\n                : base(item.Name)\n            {\n                this.Item = item;\n                _page = page;\n                this.SubItems.Add(new ListViewSubItem(this, item.Conditions.Count.ToString()));\n                this.SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n\n            public void Update()\n            {\n                // TODO: how to update.\n            }\n        }\n\n        private TaskList _taskList;\n        private PreConditionsFeature _feature;\n\n        public PreConditionsPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new PreConditionsFeature(Module);\n            _feature.RewriteSettingsUpdated = InitializeListPage;\n            _feature.Load();\n\n            _feature.InitializeMouseClick(listView1, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n            },\n            text =>\n            {\n                if (_feature.FindDuplicate(item => item.Name, text))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"A precondition with this name already exists.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    return false;\n                }\n\n                return true;\n            });\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new PreConditionListViewItem(file, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (PreConditionListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            this.Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130425&amp;clcid=0x409\");\n            return true;\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void Back()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(1);\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IModulePage ParentPage { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Outbound/PreConditionsPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>556, 56</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>661, 56</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"425cee66-72b3-42c0-989c-685b28b05230\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.Rewrite.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap blank_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"blank_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap blank_32 {\n            get {\n                object obj = ResourceManager.GetObject(\"blank_32\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap blankout_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"blankout_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap blankout_32 {\n            get {\n                object obj = ResourceManager.GetObject(\"blankout_32\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap blocking_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"blocking_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap blocking_32 {\n            get {\n                object obj = ResourceManager.GetObject(\"blocking_32\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap error_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"error_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap info_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"info_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap lowercase_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"lowercase_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap lowercase_32 {\n            get {\n                object obj = ResourceManager.GetObject(\"lowercase_32\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap map_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"map_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap map_32 {\n            get {\n                object obj = ResourceManager.GetObject(\"map_32\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap tick_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"tick_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap url_rewrite_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"url_rewrite_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"blankout_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\blankout_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"blankout_32\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\blankout_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"blank_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\blank_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"blank_32\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\blank_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"blocking_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\blocking_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"blocking_32\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\blocking_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"error_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\error_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"info_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\info_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"lowercase_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\lowercase_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"lowercase_32\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\lowercase_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"map_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\map_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"map_32\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\map_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"tick_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\tick_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"url_rewrite_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\url_rewrite_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/ProviderItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Threading;\n    using Microsoft.Web.Administration;\n\n    /// <summary>\n    /// Represents a URL rewrite provider item in system.webServer/rewrite/providers.\n    /// </summary>\n    public class ProviderItem : IItem<ProviderItem>\n    {\n\n        /// <summary>\n        /// Gets or sets the name of the provider.\n        /// </summary>\n        public string Name\n        {\n            get; set;\n        }\n\n        /// <summary>\n        /// Gets or sets the type of the provider.\n        /// </summary>\n        public string Type\n        {\n            get; set;\n        }\n\n        /// <summary>\n        /// Gets the settings collection for this provider.\n        /// </summary>\n        public IList<SettingItem> Settings { get; } = new List<SettingItem>();\n\n        /// <summary>\n        /// Gets a flag indicating whether this item is locally stored or inherited.\n        /// </summary>\n        public string Flag { get; set; }\n\n        /// <summary>\n        /// Gets the configuration element representing this provider.\n        /// </summary>\n        public ConfigurationElement Element { get; set; }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ProviderItem\"/> class.\n        /// </summary>\n        /// <param name=\"element\">The provider configuration element.</param>\n        public ProviderItem(ConfigurationElement element)\n        {\n            Element = element;\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inhertied\";\n            if (element == null)\n            {\n                Name = string.Empty;\n                Type = string.Empty;\n                return;\n            }\n\n            Reset();\n        }\n\n        private void Reset()\n        {\n            Name = (string)Element[\"name\"];\n            Type = (string)Element[\"type\"];\n            // Load settings from the provider's settings collection\n            var settingsCollection = Element.GetChildElement(\"settings\")?.GetCollection();\n            if (settingsCollection != null)\n            {\n                foreach (ConfigurationElement setting in settingsCollection)\n                {\n                    Settings.Add(new SettingItem(setting));\n                }\n            }\n        }\n\n        /// <summary>\n        /// Updates an existing provider item with the current values.\n        /// </summary>\n        public void Apply()\n        {\n            Element[\"name\"] = Name;\n            Element[\"type\"] = Type;\n\n            var settings = Element.GetCollection(\"settings\");\n            settings.Clear();\n            foreach (var item in Settings)\n            {\n                item.AppendTo(settings);\n            }\n        }\n\n        /// <summary>\n        /// Determines whether this provider item equals another provider item.\n        /// </summary>\n        /// <param name=\"other\">The provider item to compare with.</param>\n        /// <returns>True if the items are equal, false otherwise.</returns>\n        public bool Equals(ProviderItem other)\n        {\n            return Match(other) && Type == other.Type;\n        }\n\n        /// <summary>\n        /// Determines whether this provider item has the same key values as another provider item.\n        /// </summary>\n        /// <param name=\"other\">The provider item to compare with.</param>\n        /// <returns>True if the items match, false otherwise.</returns>\n        public bool Match(ProviderItem other)\n        {\n            if (other is null)\n                return false;\n\n            return Name == other.Name;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/ProvidersFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Features;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class ProvidersFeature : FeatureBase<ProviderItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly ProvidersFeature _owner;\n\n            public FeatureTaskList(ProvidersFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add Provider...\", string.Empty).SetUsage());\n\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(new MethodTaskItem(\"ViewSettings\", \"View Settings\", string.Empty).SetUsage());\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                    result.Add(new MethodTaskItem(\"Rename\", \"Rename\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                if (_owner.CanRevert)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RevertTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ViewSettings()\n            {\n                _owner.ViewSettings();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.Rename();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        public ProvidersFeature(Module module)\n            : base(module)\n        {\n        }\n\n        private FeatureTaskList _taskList;\n\n        public bool CanRevert { get; private set; }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            LoadItems();\n        }\n\n        internal protected void OnRewriteSettingsSaved()\n        {\n            RewriteSettingsUpdated?.Invoke();\n        }\n\n        public bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=183852\");\n            return false;\n        }\n\n        public void Add()\n        {\n            using var dialog = new AddProviderDialog(Module, this, null);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void ViewSettings()\n        {\n            var navigationService = (INavigationService)GetService(typeof(INavigationService));\n            navigationService.Navigate(null, null, typeof(SettingsPage), SelectedItem);\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(ProviderItem item)\n        {\n            using var dialog = new AddProviderDialog(Module, this, item);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public void Rename()\n        {\n            RenameInline(SelectedItem);\n        }\n\n        public void Remove()\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (service.ShowMessage(\n                    \"Are you sure you want to remove this provider?\",\n                    \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1) != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        public void Revert()\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                service.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            this.RevertItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            var section = service.GetSection(\"system.webServer/rewrite/providers\");\n            return section.GetCollection();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnRewriteSettingsSaved();\n        }\n\n        public RewriteSettingsSavedEventHandler RewriteSettingsUpdated { get; set; }\n\n        public string Name\n        {\n            get { return \"URL Rewrite Providers\"; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        private static readonly Version FxVersionNotRequired = new Version();\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/ProvidersPage.Designer.cs",
    "content": "namespace JexusManager.Features.Rewrite\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ProvidersPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chProviderType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chEntryType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 3;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\n            | System.Windows.Forms.AnchorStyles.Left)\n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 8;\n            // \n            // listView1\n            //\n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chProviderType,\n            this.chEntryType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 13);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 527);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1_SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 200;\n            // \n            // chProviderType\n            // \n            this.chProviderType.Text = \"Provider Type\";\n            this.chProviderType.Width = 150;\n            // \n            // chEntryType\n            // \n            this.chEntryType.Text = \"Entry Type\";\n            this.chEntryType.Width = 100;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(324, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Use this feature to view and manage your URL Rewrite providers.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 9;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(106, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Providers\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // ProvidersPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"ProvidersPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chName;\n        private ColumnHeader chProviderType;\n        private ColumnHeader chEntryType;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Label label2;\n        private Label label3;\n        private PictureBox pictureBox1;\n        private Panel panel2;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/ProvidersPage.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.Collections;\n    using System.ComponentModel;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class ProvidersPage : ModuleListPage, IModuleChildPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly ProvidersPage _owner;\n\n            public PageTaskList(ProvidersPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                           {\n                               GetBackTaskItem(\"Back\", \"Back to Rules\"),\n                               MethodTaskItem.CreateSeparator().SetUsage(),\n                               HelpTaskItem\n                           };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Back()\n            {\n                _owner.Back();\n            }\n        }\n\n        private sealed class ProviderListViewItem : ListViewItem, IFeatureListViewItem<ProviderItem>\n        {\n            public ProviderItem Item { get; }\n            private readonly ProvidersPage _page;\n\n            public ProviderListViewItem(ProviderItem item, ProvidersPage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Type));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private ProvidersFeature _feature;\n        private PageTaskList _taskList;\n\n        public ProvidersPage()\n        {\n            InitializeComponent();\n\n            // Set the labels from resources if needed\n            label3.Text = \"Rewrite Providers\";\n            label2.Text = \"Providers implement custom rewrite logic and can be invoked from inbound and outbound rewrite rules.\";\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new ProvidersFeature(Module);\n            _feature.RewriteSettingsUpdated = InitializeListPage;\n            _feature.Load();\n\n            _feature.InitializeMouseClick(listView1, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n            },\n            text =>\n            {\n                if (_feature.FindDuplicate(item => item.Name, text))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"A rewrite provider with this name already exists.\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    return false;\n                }\n\n                return true;\n            });\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var provider in _feature.Items)\n            {\n                listView1.Items.Add(new ProviderListViewItem(provider, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem != null)\n            {\n                foreach (ProviderListViewItem item in listView1.Items)\n                {\n                    if (item.Item == _feature.SelectedItem)\n                    {\n                        item.Selected = true;\n                    }\n                }\n            }\n\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void Back()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(1);\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IModulePage ParentPage { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RegexTestDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class RegexTestDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtData = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPattern = new System.Windows.Forms.TextBox();\n            this.cbIgnoreCase = new System.Windows.Forms.CheckBox();\n            this.btnClose = new System.Windows.Forms.Button();\n            this.btnTest = new System.Windows.Forms.Button();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.lvResults = new System.Windows.Forms.ListView();\n            this.cbReference = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.cbValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.txtTitle = new System.Windows.Forms.Label();\n            this.pbMessage = new System.Windows.Forms.PictureBox();\n            this.txtMessage = new System.Windows.Forms.Label();\n            this.groupBox1.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pbMessage)).BeginInit();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(21, 21);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(87, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Input data to test\";\n            // \n            // txtData\n            // \n            this.txtData.Location = new System.Drawing.Point(24, 37);\n            this.txtData.Name = \"txtData\";\n            this.txtData.Size = new System.Drawing.Size(427, 20);\n            this.txtData.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(21, 60);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(158, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Example: catalog/products/sale\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(21, 96);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(138, 13);\n            this.label3.TabIndex = 3;\n            this.label3.Text = \"Pattern (regular expression):\";\n            // \n            // txtPattern\n            // \n            this.txtPattern.Location = new System.Drawing.Point(24, 112);\n            this.txtPattern.Name = \"txtPattern\";\n            this.txtPattern.Size = new System.Drawing.Size(427, 20);\n            this.txtPattern.TabIndex = 4;\n            // \n            // cbIgnoreCase\n            // \n            this.cbIgnoreCase.AutoSize = true;\n            this.cbIgnoreCase.Location = new System.Drawing.Point(24, 138);\n            this.cbIgnoreCase.Name = \"cbIgnoreCase\";\n            this.cbIgnoreCase.Size = new System.Drawing.Size(82, 17);\n            this.cbIgnoreCase.TabIndex = 5;\n            this.cbIgnoreCase.Text = \"Ignore case\";\n            this.cbIgnoreCase.UseVisualStyleBackColor = true;\n            // \n            // btnClose\n            // \n            this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnClose.Location = new System.Drawing.Point(367, 451);\n            this.btnClose.Name = \"btnClose\";\n            this.btnClose.Size = new System.Drawing.Size(95, 23);\n            this.btnClose.TabIndex = 6;\n            this.btnClose.Text = \"Close\";\n            this.btnClose.UseVisualStyleBackColor = true;\n            // \n            // btnTest\n            // \n            this.btnTest.Location = new System.Drawing.Point(24, 161);\n            this.btnTest.Name = \"btnTest\";\n            this.btnTest.Size = new System.Drawing.Size(95, 23);\n            this.btnTest.TabIndex = 7;\n            this.btnTest.Text = \"Test\";\n            this.btnTest.UseVisualStyleBackColor = true;\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.lvResults);\n            this.groupBox1.Controls.Add(this.txtTitle);\n            this.groupBox1.Controls.Add(this.pbMessage);\n            this.groupBox1.Controls.Add(this.txtMessage);\n            this.groupBox1.Location = new System.Drawing.Point(24, 206);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(427, 223);\n            this.groupBox1.TabIndex = 8;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Test Results\";\n            // \n            // lvResults\n            // \n            this.lvResults.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.cbReference,\n            this.cbValue});\n            this.lvResults.FullRowSelect = true;\n            this.lvResults.Location = new System.Drawing.Point(18, 74);\n            this.lvResults.MultiSelect = false;\n            this.lvResults.Name = \"lvResults\";\n            this.lvResults.Size = new System.Drawing.Size(392, 123);\n            this.lvResults.TabIndex = 3;\n            this.lvResults.UseCompatibleStateImageBehavior = false;\n            this.lvResults.View = System.Windows.Forms.View.Details;\n            this.lvResults.Visible = false;\n            // \n            // cbReference\n            // \n            this.cbReference.Text = \"Back Reference\";\n            this.cbReference.Width = 180;\n            // \n            // cbValue\n            // \n            this.cbValue.Text = \"Value\";\n            this.cbValue.Width = 180;\n            // \n            // txtTitle\n            // \n            this.txtTitle.AutoSize = true;\n            this.txtTitle.Location = new System.Drawing.Point(15, 58);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(82, 13);\n            this.txtTitle.TabIndex = 2;\n            this.txtTitle.Text = \"Capture groups:\";\n            this.txtTitle.Visible = false;\n            // \n            // pbMessage\n            // \n            this.pbMessage.Location = new System.Drawing.Point(18, 25);\n            this.pbMessage.Name = \"pbMessage\";\n            this.pbMessage.Size = new System.Drawing.Size(16, 16);\n            this.pbMessage.TabIndex = 1;\n            this.pbMessage.TabStop = false;\n            // \n            // txtMessage\n            // \n            this.txtMessage.AutoSize = true;\n            this.txtMessage.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.txtMessage.Location = new System.Drawing.Point(40, 28);\n            this.txtMessage.Name = \"txtMessage\";\n            this.txtMessage.Size = new System.Drawing.Size(0, 13);\n            this.txtMessage.TabIndex = 0;\n            this.txtMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            // \n            // RegexTestDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnClose;\n            this.ClientSize = new System.Drawing.Size(474, 486);\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.btnTest);\n            this.Controls.Add(this.btnClose);\n            this.Controls.Add(this.cbIgnoreCase);\n            this.Controls.Add(this.txtPattern);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtData);\n            this.Controls.Add(this.label1);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.HelpButton = true;\n            this.MaximizeBox = false;\n            this.MinimizeBox = false;\n            this.Name = \"RegexTestDialog\";\n            this.ShowIcon = false;\n            this.ShowInTaskbar = false;\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"Test Pattern\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.RegexTestDialogHelpButtonClicked);\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pbMessage)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private TextBox txtData;\n        private Label label2;\n        private Label label3;\n        private TextBox txtPattern;\n        private CheckBox cbIgnoreCase;\n        private Button btnClose;\n        private Button btnTest;\n        private GroupBox groupBox1;\n        private Label txtMessage;\n        private PictureBox pbMessage;\n        private ListView lvResults;\n        private ColumnHeader cbReference;\n        private ColumnHeader cbValue;\n        private Label txtTitle;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RegexTestDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Text.RegularExpressions;\n    using System.Windows.Forms;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    public partial class RegexTestDialog : DialogForm\n    {\n        private const string Failed = \"The input data to test does not match the pattern.\";\n        private const string Hint = \"Specify the input data to test, and then click \\\"Test\\\" to see the results.\";\n        private const string Succeeded = \"The input URL path matches the pattern.\";\n        private readonly string _pattern;\n        private readonly bool _ignore;\n\n        private readonly bool _condition;\n\n        public RegexTestDialog(IServiceProvider serviceProvider, string pattern, bool ignoreCase, bool condition)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            txtPattern.Text = pattern;\n            cbIgnoreCase.Checked = ignoreCase;\n            _pattern = pattern;\n            _ignore = ignoreCase;\n            _condition = condition;\n            txtMessage.Text = Hint;\n            pbMessage.Image = Resources.info_16;\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtPattern, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnTest.Enabled = !string.IsNullOrWhiteSpace(txtPattern.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnTest, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Regex expression = null;\n                    try\n                    {\n                        expression = new Regex(\n                            txtPattern.Text,\n                            cbIgnoreCase.Checked ? RegexOptions.IgnoreCase : RegexOptions.None);\n                    }\n                    catch (ArgumentException ex)\n                    {\n                        // TODO: find a way to generate better error message.\n                        ShowMessage(ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);\n                    }\n\n                    bool success = false;\n                    Match result = null;\n                    if (expression != null)\n                    {\n                        result = expression.Match(txtData.Text);\n                        success = result.Success;\n                    }\n\n                    pbMessage.Image = success ? Resources.tick_16 : Resources.error_16;\n                    txtMessage.Text = success ? Succeeded : Failed;\n                    txtTitle.Visible = success;\n                    lvResults.Visible = success;\n                    if (success)\n                    {\n                        lvResults.Items.Clear();\n                        var count = 0;\n                        foreach (Group group in result.Groups)\n                        {\n                            lvResults.Items.Add(new ListViewItem(new[]\n                            {\n                                string.Format(_condition ? \"{{C:{0}}}\" : \"{{R:{0}}}\", count++),\n                                group.Value\n                            }));\n                        }\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnClose, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (txtPattern.Text == _pattern && cbIgnoreCase.Checked == _ignore)\n                    {\n                        return;\n                    }\n\n                    var result = MessageBox.Show(\"The pattern configuration has been changed. Do you want to save these changes?\", Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);\n                    if (result == DialogResult.Yes)\n                    {\n                        DialogResult = DialogResult.OK;\n                    }\n                    else if (result == DialogResult.No)\n                    {\n                        return;\n                    }\n\n                    DialogResult = DialogResult.None;\n                }));\n        }\n\n        public bool IgnoreCase\n        {\n            get { return cbIgnoreCase.Checked; }\n        }\n\n        public string Pattern\n        {\n            get { return txtPattern.Text; }\n        }\n\n        private void RegexTestDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130409&amp;clcid=0x409\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RegexTestDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/Resources/ProvidersPage.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"PageTitle\" xml:space=\"preserve\">\n    <value>Providers</value>\n  </data>\n  <data name=\"PageDescription\" xml:space=\"preserve\">\n    <value>Use this feature to view and manage your URL Rewrite providers.</value>\n  </data>\n  <data name=\"ColumnName\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"ColumnType\" xml:space=\"preserve\">\n    <value>Type</value>\n  </data>\n  <data name=\"ActionsLabel\" xml:space=\"preserve\">\n    <value>Actions</value>\n  </data>\n</root>\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RewriteFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n// --------------------------------------------------------------------------------------------------------------------\n//   \n// </copyright>\n// \n// --------------------------------------------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.Collections;\n    using System.Diagnostics;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.Rewrite.Inbound;\n    using JexusManager.Features.Rewrite.Outbound;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    /// <summary>\n    /// Description of DefaultDocumentFeature.\n    /// </summary>\n    public class RewriteFeature\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly RewriteFeature _owner;\n\n            public FeatureTaskList(RewriteFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add Rule(s)...\", string.Empty).SetUsage());\n                if (_owner.Inbound.CanRevert)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(RevertTaskItem);\n                }\n\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new TextTaskItem(\"Manage Server Variables\", string.Empty, true));\n                result.Add(new MethodTaskItem(\"ViewServerVariables\", \"View Server Variables...\", string.Empty).SetUsage());\n                result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                result.Add(new TextTaskItem(\"Manage Providers\", string.Empty, true));\n                result.Add(new MethodTaskItem(\"ViewMaps\", \"View Rewrite Maps...\", string.Empty).SetUsage());\n                result.Add(new MethodTaskItem(\"ViewProviders\", \"View Providers...\", string.Empty).SetUsage());\n\n                if (_owner.Inbound.SelectedItem != null)\n                {\n                    var groupTaskItem = new GroupTaskItem(\"Conditions\", \"Conditions\", string.Empty, true);\n                    groupTaskItem.Items.Add(new MethodTaskItem(\"AddConditions\", \"Add...\", string.Empty).SetUsage());\n                    result.Add(groupTaskItem);\n                }\n\n                var inboundGroup = new GroupTaskItem(\"InboundRules\", \"Inbound Rules\", string.Empty, true);\n                result.Add(inboundGroup);\n                if (_owner.Inbound.SelectedItem != null)\n                {\n                    inboundGroup.Items.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                    inboundGroup.Items.Add(new MethodTaskItem(\"Rename\", \"Rename\", string.Empty).SetUsage());\n                    inboundGroup.Items.Add(RemoveTaskItem);\n                    if (!_owner.Inbound.SelectedItem.Enabled)\n                    {\n                        inboundGroup.Items.Add(new MethodTaskItem(\"Enable\", \"Enable Rule\", string.Empty).SetUsage());\n                    }\n\n                    if (_owner.Inbound.SelectedItem.Enabled)\n                    {\n                        inboundGroup.Items.Add(new MethodTaskItem(\"Disable\", \"Disable Rule\", string.Empty).SetUsage());\n                    }\n\n                    inboundGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    inboundGroup.Items.Add(GetMoveUpTaskItem(_owner.Inbound.CanMoveUp));\n                    inboundGroup.Items.Add(GetMoveDownTaskItem(_owner.Inbound.CanMoveDown));\n                    inboundGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                }\n\n                inboundGroup.Items.Add(new MethodTaskItem(\"Import\", \"Import Rules...\", string.Empty).SetUsage());\n\n                var outboundGroup = new GroupTaskItem(\"OutboundRules\", \"Outbound Rules\", string.Empty, true);\n                result.Add(outboundGroup);\n                if (_owner.Outbound.SelectedItem != null)\n                {\n                    outboundGroup.Items.Add(new MethodTaskItem(\"EditOut\", \"Edit...\", string.Empty).SetUsage());\n                    outboundGroup.Items.Add(new MethodTaskItem(\"RenameOut\", \"Rename\", string.Empty).SetUsage());\n                    outboundGroup.Items.Add(GetRemoveTaskItem(\"Remove2\"));\n                    if (!_owner.Outbound.SelectedItem.Enabled)\n                    {\n                        outboundGroup.Items.Add(new MethodTaskItem(\"EnableOut\", \"Enable Rule\", string.Empty).SetUsage());\n                    }\n\n                    if (_owner.Outbound.SelectedItem.Enabled)\n                    {\n                        outboundGroup.Items.Add(new MethodTaskItem(\"DisableOut\", \"Disable Rule\", string.Empty).SetUsage());\n                    }\n\n                    outboundGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    outboundGroup.Items.Add(GetMoveUpTaskItem(\"MoveUpOut\", _owner.Outbound.CanMoveUp));\n                    outboundGroup.Items.Add(GetMoveDownTaskItem(\"MoveDownOut\", _owner.Outbound.CanMoveDown));\n                    outboundGroup.Items.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                }\n\n                outboundGroup.Items.Add(new MethodTaskItem(\"ViewPreconditions\", \"View Preconditions...\", string.Empty).SetUsage());\n                outboundGroup.Items.Add(new MethodTaskItem(\"ViewTags\", \"View Custom Tags...\", string.Empty).SetUsage());\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Inbound.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Inbound.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Rename()\n            {\n                _owner.RenameIn();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Inbound.Revert();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Enable()\n            {\n                _owner.Inbound.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Disable()\n            {\n                _owner.Inbound.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveUp()\n            {\n                _owner.Inbound.MoveUp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveDown()\n            {\n                _owner.Inbound.MoveDown();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Remove2()\n            {\n                _owner.Outbound.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void EditOut()\n            {\n                _owner.Outbound.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void RenameOut()\n            {\n                _owner.RenameOut();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void EnableOut()\n            {\n                _owner.Outbound.Enable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void DisableOut()\n            {\n                _owner.Outbound.Disable();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void MoveUpOut()\n            {\n                _owner.Outbound.MoveUp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void MoveDownOut()\n            {\n                _owner.Outbound.MoveDown();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Import()\n            {\n                _owner.Import();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ViewServerVariables()\n            {\n                _owner.ViewServerVariables();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ViewMaps()\n            {\n                _owner.ViewMaps();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ViewProviders()\n            {\n                _owner.ViewProviders();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void AddConditions()\n            {\n                _owner.Inbound.AddConditions();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ViewPreconditions()\n            {\n                _owner.ViewPreconditions();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ViewTags()\n            {\n                _owner.ViewTags();\n            }\n        }\n\n        public RewriteFeature(Module module)\n        {\n            Module = module;\n            Inbound = new InboundFeature(module);\n            Outbound = new OutboundFeature(module);\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), string.Empty, false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            Inbound.Load();\n            Outbound.Load();\n        }\n\n        public void Add()\n        {\n            using var dialog = new NewRewriteRuleDialog(Inbound.Module);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            if (dialog.SelectedIndex == 0)\n            {\n                var service = (INavigationService)GetService(typeof(INavigationService));\n                service.Navigate(null, null, typeof(InboundRulePage), new Tuple<InboundFeature, InboundRule>(Inbound, null));\n                Inbound.Refresh();\n            }\n            else if (dialog.SelectedIndex == 1)\n            {\n                using var rule = new NewRuleWithRewriteMapsDialog(Inbound.Module, Inbound);\n                if (rule.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n            else if (dialog.SelectedIndex == 2)\n            {\n                using var rule = new NewRuleBlockingDialog(Inbound.Module, Inbound);\n                if (rule.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n            else if (dialog.SelectedIndex == 4)\n            {\n                var service = (INavigationService)GetService(typeof(INavigationService));\n                service.Navigate(null, null, typeof(OutboundRulePage), new Tuple<OutboundFeature, OutboundRule>(Outbound, null));\n                Outbound.Refresh();\n            }\n            else if (dialog.SelectedIndex == 5)\n            {\n                var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                if (\n                    service.ShowMessage(\"Search engines treat Web sites that can be accessed by more than one URL, each differing only in letter casing, as if they are two different sites. This results in a reduced ranking for the Web site. Use this rule template to create a redirect rule that will enforce the use of lowercase letters in the URL.\" + Environment.NewLine + Environment.NewLine + \"Do you want to create a rule?\", \"Add a rule that will enforce lowercase URLs\",\n                        MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                    DialogResult.Yes)\n                {\n                    return;\n                }\n\n                Inbound.Add();\n            }\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=130403&amp;clcid=0x409\");\n            return false;\n        }\n\n        private void ViewTags()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service.Navigate(null, null, typeof(CustomTagsPage), null);\n        }\n\n        private void ViewPreconditions()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service.Navigate(null, null, typeof(PreConditionsPage), null);\n        }\n\n        private void ViewProviders()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service.Navigate(null, null, typeof(ProvidersPage), null);\n        }\n\n        private void ViewMaps()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service.Navigate(null, null, typeof(MapsPage), null);\n        }\n\n        private void ViewServerVariables()\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service.Navigate(null, null, typeof(ServerVariablesPage), null);\n        }\n\n        private void Import()\n        {\n        }\n\n        private void RenameIn()\n        {\n            Inbound.RenameInline(Inbound.SelectedItem);\n        }\n\n        private void RenameOut()\n        {\n            Outbound.RenameInline(Outbound.SelectedItem);\n        }\n\n        public string Description { get; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n\n        public string Name\n        {\n            get\n            {\n                return \"URL Rewrite\";\n            }\n        }\n\n        public InboundFeature Inbound { get; }\n\n        public OutboundFeature Outbound { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RewriteModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class RewriteModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(RewritePage), \"URL Rewrite\",\n                \"Provide URL and content rewriting capabilities based on rules\", Resources.url_rewrite_36,\n                Resources.url_rewrite_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RewriteModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class RewriteModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(RewriteModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RewritePage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.Rewrite\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class RewritePage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();\n            this.lvIn = new System.Windows.Forms.ListView();\n            this.chNameIn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chInputIn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chMatchIn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPatternIn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chActionIn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chUrl = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chStopIn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chTypeIn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.lvOut = new System.Windows.Forms.ListView();\n            this.chNameOut = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chInputOut = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chMatchOut = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chPatternOut = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chActionOut = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chStopOut = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chTypeOut = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label4 = new System.Windows.Forms.Label();\n            this.label5 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.tableLayoutPanel2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 5;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.SplitContainer1SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.tableLayoutPanel2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // tableLayoutPanel2\n            // \n            this.tableLayoutPanel2.ColumnCount = 1;\n            this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel2.Controls.Add(this.lvIn, 0, 1);\n            this.tableLayoutPanel2.Controls.Add(this.lvOut, 0, 3);\n            this.tableLayoutPanel2.Controls.Add(this.label4, 0, 0);\n            this.tableLayoutPanel2.Controls.Add(this.label5, 0, 2);\n            this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 13);\n            this.tableLayoutPanel2.Name = \"tableLayoutPanel2\";\n            this.tableLayoutPanel2.RowCount = 5;\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 25F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\n            this.tableLayoutPanel2.Size = new System.Drawing.Size(560, 527);\n            this.tableLayoutPanel2.TabIndex = 3;\n            // \n            // lvIn\n            // \n            this.lvIn.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chNameIn,\n            this.chInputIn,\n            this.chMatchIn,\n            this.chPatternIn,\n            this.chActionIn,\n            this.chUrl,\n            this.chStopIn,\n            this.chTypeIn});\n            this.lvIn.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.lvIn.FullRowSelect = true;\n            this.lvIn.HideSelection = false;\n            this.lvIn.LabelEdit = true;\n            this.lvIn.Location = new System.Drawing.Point(5, 30);\n            this.lvIn.Margin = new System.Windows.Forms.Padding(5);\n            this.lvIn.MultiSelect = false;\n            this.lvIn.Name = \"lvIn\";\n            this.lvIn.Size = new System.Drawing.Size(550, 218);\n            this.lvIn.TabIndex = 1;\n            this.lvIn.UseCompatibleStateImageBehavior = false;\n            this.lvIn.View = System.Windows.Forms.View.Details;\n            this.lvIn.KeyDown += new System.Windows.Forms.KeyEventHandler(this.LvInKeyDown);\n            this.lvIn.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LvInMouseDoubleClick);\n            this.lvIn.SelectedIndexChanged += new System.EventHandler(this.LvInSelectedIndexChanged);\n            // \n            // chNameIn\n            // \n            this.chNameIn.Text = \"Name\";\n            this.chNameIn.Width = 180;\n            // \n            // chInputIn\n            // \n            this.chInputIn.Text = \"Input\";\n            this.chInputIn.Width = 180;\n            // \n            // chMatchIn\n            // \n            this.chMatchIn.Text = \"Match\";\n            this.chMatchIn.Width = 180;\n            // \n            // chPatternIn\n            // \n            this.chPatternIn.Text = \"Pattern\";\n            this.chPatternIn.Width = 180;\n            // \n            // chActionIn\n            // \n            this.chActionIn.Text = \"Action Type\";\n            this.chActionIn.Width = 100;\n            // \n            // chUrl\n            // \n            this.chUrl.Text = \"Action URL\";\n            this.chUrl.Width = 100;\n            // \n            // chStopIn\n            // \n            this.chStopIn.Text = \"Stop Processing\";\n            this.chStopIn.Width = 80;\n            // \n            // chTypeIn\n            // \n            this.chTypeIn.Text = \"Entry Type\";\n            this.chTypeIn.Width = 80;\n            // \n            // lvOut\n            // \n            this.lvOut.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chNameOut,\n            this.chInputOut,\n            this.chMatchOut,\n            this.chPatternOut,\n            this.chActionOut,\n            this.chValue,\n            this.chStopOut,\n            this.chTypeOut});\n            this.lvOut.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.lvOut.FullRowSelect = true;\n            this.lvOut.HideSelection = false;\n            this.lvOut.Location = new System.Drawing.Point(5, 283);\n            this.lvOut.Margin = new System.Windows.Forms.Padding(5);\n            this.lvOut.MultiSelect = false;\n            this.lvOut.Name = \"lvOut\";\n            this.lvOut.Size = new System.Drawing.Size(550, 218);\n            this.lvOut.TabIndex = 0;\n            this.lvOut.UseCompatibleStateImageBehavior = false;\n            this.lvOut.View = System.Windows.Forms.View.Details;\n            this.lvOut.KeyDown += new System.Windows.Forms.KeyEventHandler(this.LvInKeyDown);\n            this.lvOut.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LvOutMouseDoubleClick);\n            this.lvOut.SelectedIndexChanged += new System.EventHandler(this.LvOutSelectedIndexChanged);\n            // \n            // chNameOut\n            // \n            this.chNameOut.Text = \"Name\";\n            this.chNameOut.Width = 180;\n            // \n            // chInputOut\n            // \n            this.chInputOut.Text = \"Input\";\n            this.chInputOut.Width = 100;\n            // \n            // chMatchOut\n            // \n            this.chMatchOut.Text = \"Match\";\n            this.chMatchOut.Width = 100;\n            // \n            // chPatternOut\n            // \n            this.chPatternOut.Text = \"Pattern\";\n            this.chPatternOut.Width = 100;\n            // \n            // chActionOut\n            // \n            this.chActionOut.Text = \"Action Type\";\n            this.chActionOut.Width = 100;\n            // \n            // chValue\n            // \n            this.chValue.Text = \"Action Value\";\n            this.chValue.Width = 100;\n            // \n            // chStopOut\n            // \n            this.chStopOut.Text = \"Stop Processing\";\n            this.chStopOut.Width = 80;\n            // \n            // chTypeOut\n            // \n            this.chTypeOut.Text = \"Entry Type\";\n            this.chTypeOut.Width = 80;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.label4.Location = new System.Drawing.Point(3, 0);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(554, 25);\n            this.label4.TabIndex = 2;\n            this.label4.Text = \"Inbound rules that are applied to the requested URL address:\";\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(3, 253);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(403, 13);\n            this.label5.TabIndex = 3;\n            this.label5.Text = \"Outbound rules that are applied to the headers or the content of an HTTP response\" +\n    \":\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(551, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Provides rewriting capabilities based on rules for the requested URL address and \" +\n    \"the content of an HTTP response.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(132, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"URL Rewrite\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // RewritePage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"RewritePage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.tableLayoutPanel2.ResumeLayout(false);\n            this.tableLayoutPanel2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private TableLayoutPanel tableLayoutPanel2;\n        private ListView lvIn;\n        private ColumnHeader chNameIn;\n        private ColumnHeader chInputIn;\n        private ColumnHeader chMatchIn;\n        private ColumnHeader chPatternIn;\n        private ColumnHeader chActionIn;\n        private ColumnHeader chUrl;\n        private ColumnHeader chStopIn;\n        private ColumnHeader chTypeIn;\n        private ListView lvOut;\n        private ColumnHeader chNameOut;\n        private Label label4;\n        private Label label5;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private ColumnHeader chInputOut;\n        private ColumnHeader chMatchOut;\n        private ColumnHeader chPatternOut;\n        private ColumnHeader chActionOut;\n        private ColumnHeader chValue;\n        private ColumnHeader chStopOut;\n        private ColumnHeader chTypeOut;\n        private Panel panel2;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RewritePage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.Collections;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Features.Rewrite.Inbound;\n    using JexusManager.Features.Rewrite.Outbound;\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class RewritePage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly RewritePage _owner;\n\n            public PageTaskList(RewritePage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class InboundRuleListViewItem : ListViewItem, IFeatureListViewItem<InboundRule>\n        {\n            public InboundRule Item { get; }\n            private readonly RewritePage _page;\n\n            public InboundRuleListViewItem(InboundRule item, RewritePage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Input));\n                SubItems.Add(new ListViewSubItem(this, item.Negate ? \"Does not matches\" : \"Matches\"));\n                SubItems.Add(new ListViewSubItem(this, item.PatternUrl));\n                SubItems.Add(new ListViewSubItem(this, ToString(item.Type)));\n                SubItems.Add(new ListViewSubItem(this, item.ActionUrl));\n                SubItems.Add(new ListViewSubItem(this, item.StopProcessing ? \"True\" : \"False\"));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n\n            private static string ToString(long action)\n            {\n                switch (action)\n                {\n                    case 0:\n                        return \"None\";\n                    case 1:\n                        return \"Rewrite\";\n                    case 2:\n                        return \"Redirect\";\n                    case 3:\n                        return \"Custom Response\";\n                }\n\n                return \"Abort Request\";\n            }\n        }\n\n        private sealed class OutboundRuleListViewItem : ListViewItem, IFeatureListViewItem<OutboundRule>\n        {\n            public OutboundRule Item { get; private set; }\n\n            private readonly RewritePage _page;\n\n            public OutboundRuleListViewItem(OutboundRule item, RewritePage page)\n                : base(item.Name)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Input));\n                SubItems.Add(new ListViewSubItem(this, item.Negate ? \"Does not match\" : \"Matches\"));\n                SubItems.Add(new ListViewSubItem(this, item.Pattern));\n                SubItems.Add(new ListViewSubItem(this, ToString(item.Action)));\n                SubItems.Add(new ListViewSubItem(this, item.Value));\n                SubItems.Add(new ListViewSubItem(this, item.Stopping ? \"True\" : \"False\"));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n\n            private static string ToString(long action)\n            {\n                switch (action)\n                {\n                    case 0:\n                        return \"None\";\n                    case 1:\n                        return \"Rewrite\";\n                    case 2:\n                        return \"Redirect\";\n                    case 3:\n                        return \"Custom Response\";\n                }\n\n                return \"Abort Request\";\n            }\n        }\n\n        private RewriteFeature _feature;\n        private PageTaskList _taskList;\n\n        public RewritePage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)ServiceProvider.GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new RewriteFeature(Module);\n            _feature.Inbound.RewriteSettingsUpdated = InitializeInbound;\n            _feature.Outbound.RewriteSettingsUpdated = InitializeOutbound;\n            _feature.Load();\n\n            _feature.Inbound.InitializeMouseClick(lvIn, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n            },\n            text =>\n            {\n                if (_feature.Inbound.FindDuplicate(item => item.Name, text))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"The specific rule already exists\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    return false;\n                }\n\n                return true;\n            });\n\n            _feature.Outbound.InitializeMouseClick(lvOut, (item, text) =>\n            {\n                item.Name = text;\n                item.Apply();\n            },\n            text =>\n            {\n                if (_feature.Outbound.FindDuplicate(item => item.Name, text))\n                {\n                    var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n                    service.ShowMessage(\"The specific rule already exists\", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                    return false;\n                }\n\n                return true;\n            });\n        }\n\n        protected override void InitializeListPage()\n        {\n            InitializeInbound();\n            InitializeOutbound();\n        }\n\n        private void InitializeInbound()\n        {\n            lvIn.Items.Clear();\n            foreach (var file in _feature.Inbound.Items)\n            {\n                lvIn.Items.Add(new InboundRuleListViewItem(file, this));\n            }\n\n            _feature.Inbound.InitializeColumnClick(lvIn);\n\n            if (_feature.Inbound.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (InboundRuleListViewItem item in lvIn.Items)\n            {\n                if (item.Item == _feature.Inbound.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        private void InitializeOutbound()\n        {\n            lvOut.Items.Clear();\n            foreach (var file in _feature.Outbound.Items)\n            {\n                lvOut.Items.Add(new OutboundRuleListViewItem(file, this));\n            }\n\n            _feature.Outbound.InitializeColumnClick(lvOut);\n\n            if (_feature.Outbound.SelectedItem == null)\n            {\n                this.Refresh();\n                return;\n            }\n\n            foreach (OutboundRuleListViewItem item in lvOut.Items)\n            {\n                if (item.Item == _feature.Outbound.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void LvInMouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.Inbound.HandleMouseDoubleClick(lvIn);\n        }\n\n        private void LvInKeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Inbound.Remove();\n            }\n        }\n\n        private void LvInSelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.Inbound.HandleSelectedIndexChanged(lvIn);\n            Refresh();\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        private void SplitContainer1SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        private void btnRenameIn_Click(object sender, EventArgs e)\n        {\n            lvIn.SelectedItems[0].BeginEdit();\n        }\n\n        private void LvOutMouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.Outbound.HandleMouseDoubleClick(lvOut);\n        }\n\n        private void LvOutKeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Outbound.Remove();\n            }\n        }\n\n        private void LvOutSelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.Outbound.HandleSelectedIndexChanged(lvOut);\n            Refresh();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RewritePage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.Rewrite/RewriteSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    public delegate void RewriteSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/RuleSettingsUpdatedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    public delegate void RuleSettingsUpdatedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/SettingItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using Microsoft.Web.Administration;\n\n    public class SettingItem : IItem<SettingItem>\n    {\n        public ConfigurationElement Element { get; set; }\n\n        public SettingItem(ConfigurationElement element)\n        {\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            Element = element;\n            if (element == null)\n            {\n                Key = string.Empty;\n                Value = string.Empty;\n                return;\n            }\n\n            Key = (string)element[\"key\"];\n            Value = (string)element[\"value\"];\n            // TODO:\n            //var temp = (string)element[\"encryptedValue\"];\n            //if (temp != null)\n            //{\n            //    Encrypted = true;\n            //    Value = temp;\n            //}\n        }\n\n        public string Key { get; set; }\n\n        public string Value { get; set; }\n\n        public bool Encrypted { get; set; }\n\n        public string Flag { get; set; }\n\n        public void Apply()\n        {\n            Element[\"key\"] = Key;\n            if (Encrypted)\n            {\n                Element[\"encryptedValue\"] = Value;\n                Element[\"value\"] = null;\n            }\n            else\n            {\n                //Element[\"encryptedValue\"] = null;\n                Element[\"value\"] = Value;\n            }\n        }\n\n        public bool Match(SettingItem other)\n        {\n            return other != null && Key == other.Key;\n        }\n\n        public bool Equals(SettingItem other)\n        {\n            return Match(other) && Value == other.Value;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/SettingsFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.Rewrite\n{\n    using System;\n    using System.Collections;\n    using System.Collections.Generic;\n    using System.Linq;\n    using System.Reflection;\n    using System.Windows.Forms;\n    using JexusManager.Services;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    internal class SettingsFeature : FeatureBase<SettingItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly SettingsFeature _owner;\n\n            public FeatureTaskList(SettingsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                result.Add(new MethodTaskItem(\"Add\", \"Add Setting...\", string.Empty).SetUsage());\n\n                if (_owner.SelectedItem != null)\n                {\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                    result.Add(RemoveTaskItem);\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n        }\n\n        private FeatureTaskList _taskList;\n        private readonly ProviderItem _provider;\n\n        public SettingsFeature(Module module, ProviderItem provider)\n            : base(module)\n        {\n            _provider = provider;\n        }\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            LoadItems();\n        }\n\n        public void Add()\n        {\n            using var dialog = new AddProviderSettingDialog(Module, this, null);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        protected override void DoubleClick(SettingItem item)\n        {\n            using var dialog = new AddProviderSettingDialog(Module, this, item);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (service.ShowMessage(\n                    \"Are you sure you want to remove this setting?\",\n                    \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel,\n                    MessageBoxIcon.Question,\n                    MessageBoxDefaultButton.Button1) != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            return _provider.Element.GetCollection(\"settings\");\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            OnSettingsUpdated();\n        }\n\n        public bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkID=183852\");\n            return false;\n        }\n\n        private void OnSettingsUpdated()\n        {\n            SettingsUpdated?.Invoke();\n        }\n\n        public SettingsUpdatedEventHandler SettingsUpdated { get; set; }\n\n        public string Description => \"Configure provider settings\";\n\n        public virtual Version MinimumFrameworkVersion => new Version();\n\n        public string Name => \"Provider Settings\";\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange(new object[] {\n                \"No Grouping\",\n                \"Encrypted\"\n            });\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            if (selectedGroup == \"Encrypted\")\n            {\n                return item.SubItems[2].Text == \"Yes\" ? \"Encrypted\" : \"Unencrypted\";\n            }\n\n            return \"Unknown\";\n        }\n    }\n\n    public delegate void SettingsUpdatedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/SettingsPage.Designer.cs",
    "content": "namespace JexusManager.Features.Rewrite\n{\n    partial class SettingsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chEncrypted = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.label2 = new System.Windows.Forms.Label();\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 3;\n            this.splitContainer1.SplitterMoved += new System.Windows.Forms.SplitterEventHandler(this.splitContainer1_SplitterMoved);\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\n            | System.Windows.Forms.AnchorStyles.Left)\n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 8;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chName,\n            this.chValue,\n            this.chEncrypted});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1_KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1_SelectedIndexChanged);\n            // \n            // chName\n            // \n            this.chName.Text = \"Name\";\n            this.chName.Width = 200;\n            // \n            // chValue\n            // \n            this.chValue.Text = \"Value\";\n            this.chValue.Width = 200;\n            // \n            // chEncrypted\n            // \n            this.chEncrypted.Text = \"Encrypted\";\n            this.chEncrypted.Width = 100;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 2;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(324, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"Configure settings for the selected provider.\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 9;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(106, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Settings\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // SettingsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"SettingsPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n        }\n\n        #endregion\n\n        private System.Windows.Forms.SplitContainer splitContainer1;\n        private System.Windows.Forms.ListView listView1;\n        private System.Windows.Forms.ColumnHeader chName;\n        private System.Windows.Forms.ColumnHeader chValue;\n        private System.Windows.Forms.ColumnHeader chEncrypted;\n        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;\n        private System.Windows.Forms.Panel panel1;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.ToolStrip tsActionPanel;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.Label label3;\n        private System.Windows.Forms.PictureBox pictureBox1;\n        private System.Windows.Forms.Panel panel2;\n        private System.Windows.Forms.ContextMenuStrip cmsActionPanel;\n        private System.Windows.Forms.ToolStripComboBox cbGroup;\n        private System.Windows.Forms.ToolStrip toolStrip2;\n        private System.Windows.Forms.ToolStripLabel toolStripLabel2;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/SettingsPage.cs",
    "content": "using System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Reflection;\nusing System.Windows.Forms;\nusing JexusManager.Services;\nusing Microsoft.Web.Management.Client;\nusing Microsoft.Web.Management.Client.Win32;\n\nnamespace JexusManager.Features.Rewrite\n{\n    internal partial class SettingsPage : ModuleListPage, IModuleChildPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly SettingsPage _owner;\n\n            public PageTaskList(SettingsPage owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                return new TaskItem[]\n                {\n                    GetBackTaskItem(\"BackToProviders\", \"Back to Providers\"),\n                    GetBackTaskItem(\"BackToRules\", \"Back to Rules\"),\n                    MethodTaskItem.CreateSeparator().SetUsage(),\n                    HelpTaskItem\n                };\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Back()\n            {\n                _owner.Back();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void BackToProviders()\n            {\n                _owner.BackToProviders();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void BackToRules()\n            {\n                _owner.BackToRules();\n            }\n        }\n\n        private sealed class SettingListViewItem : ListViewItem, IFeatureListViewItem<SettingItem>\n        {\n            public SettingItem Item { get; }\n            private readonly SettingsPage _page;\n\n            public SettingListViewItem(SettingItem item, SettingsPage page)\n                : base(item.Key)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.Value));\n                SubItems.Add(new ListViewSubItem(this, item.Encrypted ? \"Yes\" : \"No\"));\n            }\n        }\n\n        private SettingsFeature _feature;\n        private PageTaskList _taskList;\n        private ProviderItem _provider;\n\n        public SettingsPage()\n        {\n            InitializeComponent();\n\n            label3.Text = \"Provider Settings\";\n            label2.Text = \"Configure settings for the selected provider.\";\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _provider = navigationData as ProviderItem;\n            if (_provider == null)\n            {\n                throw new InvalidOperationException(\"Provider must be specified for settings page\");\n            }\n\n            _feature = new SettingsFeature(Module, _provider);\n            _feature.SettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            listView1.Items.Clear();\n            foreach (var setting in _feature.Items)\n            {\n                listView1.Items.Add(new SettingListViewItem(setting, this));\n            }\n\n            _feature.InitializeColumnClick(listView1);\n\n            // Initialize grouping support\n            _feature?.InitializeGrouping(cbGroup);\n\n            if (_feature.SelectedItem != null)\n            {\n                foreach (SettingListViewItem item in listView1.Items)\n                {\n                    if (item.Item == _feature.SelectedItem)\n                    {\n                        item.Selected = true;\n                    }\n                }\n            }\n\n            Refresh();\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n        private void ListView1_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            if (listView1.SelectedItems.Count <= 0)\n            {\n                return;\n            }\n\n            var item = listView1.SelectedItems[0] as SettingListViewItem;\n            _feature.SelectedItem = item?.Item;\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void ListView1_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            if (listView1.SelectedItems.Count <= 0)\n            {\n                _feature.SelectedItem = null;\n            }\n            else\n            {\n                var item = listView1.SelectedItems[0] as SettingListViewItem;\n                _feature.SelectedItem = item?.Item;\n            }\n\n            Refresh();\n        }\n\n        private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)\n        {\n            if (splitContainer1.Panel2.Width > 500)\n            {\n                splitContainer1.SplitterDistance = splitContainer1.Width - 500;\n            }\n        }\n\n        protected override bool ShowHelp()\n        {\n            return _feature.ShowHelp();\n        }\n\n        private void Back()\n        {\n            Back(1);\n        }\n\n        [Obfuscation(Exclude = true)]\n        public void BackToProviders()\n        {\n            Back(1);\n        }\n\n        [Obfuscation(Exclude = true)]\n        public void BackToRules()\n        {\n            Back(2);\n        }\n\n        private void Back(int levels)\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service?.NavigateBack(levels);\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public IModulePage ParentPage { get; set; }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/SettingsPage.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>154, 17</value>\n  </metadata>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>259, 17</value>\n  </metadata>\n</root>\n"
  },
  {
    "path": "JexusManager.Features.Rewrite/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/JexusManager.Features.TraceFailedRequests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager.Features.TraceFailedRequests</RootNamespace>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.Reactive\" Version=\"6.0.1\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Shared\\JexusManager.Shared.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/NewTraceDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.TraceFailedRequests\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    sealed partial class NewTraceDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.txtDescription = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(317, 186);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 0;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(216, 186);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(95, 23);\n            this.btnOK.TabIndex = 1;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // txtDescription\n            // \n            this.txtDescription.AutoSize = true;\n            this.txtDescription.Location = new System.Drawing.Point(12, 9);\n            this.txtDescription.Name = \"txtDescription\";\n            this.txtDescription.Size = new System.Drawing.Size(61, 13);\n            this.txtDescription.TabIndex = 2;\n            this.txtDescription.Text = \"Filter name:\";\n            // \n            // txtName\n            // \n            this.txtName.Location = new System.Drawing.Point(15, 25);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(269, 20);\n            this.txtName.TabIndex = 6;\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(15, 82);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.Size = new System.Drawing.Size(360, 20);\n            this.txtPath.TabIndex = 8;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(12, 66);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(63, 13);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"Executable:\";\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(381, 80);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(28, 23);\n            this.btnBrowse.TabIndex = 10;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            // \n            // NewFilterDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(424, 221);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtPath);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.txtDescription);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Name = \"NewFilterDialog\";\n            this.Text = \"Add ISAPI Filter\";\n            this.HelpButtonClicked += new System.ComponentModel.CancelEventHandler(this.NewRestrictionDialogHelpButtonClicked);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Button btnCancel;\n        private Button btnOK;\n        private Label txtDescription;\n        private TextBox txtName;\n        private TextBox txtPath;\n        private Label label1;\n        private Button btnBrowse;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/NewTraceDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests\n{\n    using System;\n    using System.ComponentModel;\n    using System.Linq;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal sealed partial class NewTraceDialog : DialogForm\n    {\n        public NewTraceDialog(IServiceProvider serviceProvider, TraceFailedRequestsItem existing, TraceFailedRequestsFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            Text = existing == null ? \"Add ISAPI Filter\" : \"Edit ISAPI Filter\";\n            txtName.ReadOnly = existing != null;\n            Item = existing ?? new TraceFailedRequestsItem(null);\n            if (existing != null)\n            {\n                txtPath.Text = Item.Path;\n            }\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    Item.Path = txtPath.Text;\n                    if (!txtName.ReadOnly && feature.Items.Any(item => item.Match(Item)))\n                    {\n                        ShowMessage(\n                            \"A filter with this name already exists.\",\n                            MessageBoxButtons.OK,\n                            MessageBoxIcon.Error,\n                            MessageBoxDefaultButton.Button1);\n                        return;\n                    }\n\n                    DialogResult = DialogResult.OK;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtName, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtPath, \"TextChanged\"))\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text)\n                                    && !string.IsNullOrWhiteSpace(txtPath.Text);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnBrowse, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    DialogHelper.ShowBrowseDialog(txtPath, null);\n                }));\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public TraceFailedRequestsItem Item { get; set; }\n\n        private void NewRestrictionDialogHelpButtonClicked(object sender, CancelEventArgs e)\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210482\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/NewTraceDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"FC5634B0-3FDC-4A8A-B7D1-0C049BEB3E94\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Features.TraceFailedRequests.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Features.TraceFailedRequests.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap trace_failed_requests_36 {\n            get {\n                object obj = ResourceManager.GetObject(\"trace_failed_requests_36\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap trace_failed_requests_48 {\n            get {\n                object obj = ResourceManager.GetObject(\"trace_failed_requests_48\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"trace_failed_requests_36\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\trace_failed_requests_36.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"trace_failed_requests_48\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\trace_failed_requests_48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/SettingsDialog.Designer.cs",
    "content": "﻿namespace JexusManager.Features.TraceFailedRequests\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    internal partial class SettingsDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.cbEnabled = new System.Windows.Forms.CheckBox();\n            this.btnCancel = new System.Windows.Forms.Button();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.txtDirectory = new System.Windows.Forms.TextBox();\n            this.txtNumber = new System.Windows.Forms.TextBox();\n            this.btnBrowse = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // cbEnabled\n            // \n            this.cbEnabled.AutoSize = true;\n            this.cbEnabled.Location = new System.Drawing.Point(12, 12);\n            this.cbEnabled.Name = \"cbEnabled\";\n            this.cbEnabled.Size = new System.Drawing.Size(65, 17);\n            this.cbEnabled.TabIndex = 1;\n            this.cbEnabled.Text = \"Enabled\";\n            this.cbEnabled.UseVisualStyleBackColor = true;\n            // \n            // btnCancel\n            // \n            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;\n            this.btnCancel.Location = new System.Drawing.Point(314, 180);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(95, 23);\n            this.btnCancel.TabIndex = 4;\n            this.btnCancel.Text = \"Cancel\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnOK\n            // \n            this.btnOK.Enabled = false;\n            this.btnOK.Location = new System.Drawing.Point(218, 180);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(90, 23);\n            this.btnOK.TabIndex = 5;\n            this.btnOK.Text = \"OK\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(9, 46);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(52, 13);\n            this.label1.TabIndex = 6;\n            this.label1.Text = \"Directory:\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(9, 101);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(152, 13);\n            this.label2.TabIndex = 7;\n            this.label2.Text = \"Maximum number of trace files:\";\n            // \n            // txtDirectory\n            // \n            this.txtDirectory.Location = new System.Drawing.Point(12, 62);\n            this.txtDirectory.Name = \"txtDirectory\";\n            this.txtDirectory.Size = new System.Drawing.Size(358, 20);\n            this.txtDirectory.TabIndex = 8;\n            // \n            // txtNumber\n            // \n            this.txtNumber.Location = new System.Drawing.Point(12, 117);\n            this.txtNumber.Name = \"txtNumber\";\n            this.txtNumber.Size = new System.Drawing.Size(116, 20);\n            this.txtNumber.TabIndex = 9;\n            // \n            // btnBrowse\n            // \n            this.btnBrowse.Location = new System.Drawing.Point(376, 60);\n            this.btnBrowse.Name = \"btnBrowse\";\n            this.btnBrowse.Size = new System.Drawing.Size(34, 23);\n            this.btnBrowse.TabIndex = 10;\n            this.btnBrowse.Text = \"...\";\n            this.btnBrowse.UseVisualStyleBackColor = true;\n            this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);\n            // \n            // SettingsDialog\n            // \n            this.AcceptButton = this.btnOK;\n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.CancelButton = this.btnCancel;\n            this.ClientSize = new System.Drawing.Size(421, 215);\n            this.Controls.Add(this.btnBrowse);\n            this.Controls.Add(this.txtNumber);\n            this.Controls.Add(this.txtDirectory);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.cbEnabled);\n            this.Name = \"SettingsDialog\";\n            this.Text = \"Edit Website Failed Request Tracing Settings\";\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n        private CheckBox cbEnabled;\n        private Button btnCancel;\n        private Button btnOK;\n        private Label label1;\n        private Label label2;\n        private TextBox txtDirectory;\n        private TextBox txtNumber;\n        private Button btnBrowse;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/SettingsDialog.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests\n{\n    using System;\n    using System.ComponentModel;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class SettingsDialog : DialogForm\n    {\n        public SettingsDialog(IServiceProvider serviceProvider, SiteTraceFailedRequestsLogging element, TraceFailedRequestsFeature feature)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n            cbEnabled.Checked = element.Enabled;\n            txtDirectory.Text = element.Directory;\n            txtNumber.Text = element.MaxLogFiles.ToString();\n\n            var container = new CompositeDisposable();\n            FormClosed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtDirectory, \"TextChanged\")\n                .Merge(Observable.FromEventPattern<EventArgs>(txtNumber, \"TextChanged\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(cbEnabled, \"CheckedChanged\"))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    btnOK.Enabled = !string.IsNullOrWhiteSpace(txtDirectory.Text)\n                        && !string.IsNullOrWhiteSpace(txtNumber.Text);\n                    txtDirectory.Enabled = cbEnabled.Checked;\n                    txtNumber.Enabled = cbEnabled.Checked;\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(btnOK, \"Click\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    if (uint.TryParse(txtNumber.Text, out uint number) && number > 0 && number <= 10000)\n                    {\n                        element.MaxLogFiles = number;\n                        element.Enabled = cbEnabled.Checked;\n                        element.Directory = txtDirectory.Text;\n                        DialogResult = DialogResult.OK;\n                        return;\n                    }\n\n                    // TODO: can this come from validator?\n                    ShowMessage(\n                        \"The 'Maximum Number of Trace Files' property is invalid. The value must be a valid integer between 1 and 10000.\",\n                        MessageBoxButtons.OK,\n                        MessageBoxIcon.Exclamation,\n                        MessageBoxDefaultButton.Button1);\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<CancelEventArgs>(this, \"HelpButtonClicked\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(EnvironmentVariableTarget =>\n                {\n                    feature.ShowHelp();\n                }));\n        }\n\n        private void btnBrowse_Click(object sender, EventArgs e)\n        {\n            DialogHelper.ShowBrowseDialog(txtDirectory, null);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/SettingsDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/TraceFailedRequestsFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/*\n * Created by SharpDevelop.\n * User: lextm\n * Time: 11:06 AM\n * \n * To change this template use Tools | Options | Coding | Edit Standard Headers.\n */\n\nnamespace JexusManager.Features.TraceFailedRequests\n{\n    using System;\n    using System.Collections;\n    using System.Linq;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n    using JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard;\n    using System.IO;\n\n    /// <summary>\n    /// Description of TraceFailedRequests feature.\n    /// </summary>\n    internal class TraceFailedRequestsFeature : FeatureBase<TraceFailedRequestsItem>\n    {\n        private sealed class FeatureTaskList : DefaultTaskList\n        {\n            private readonly TraceFailedRequestsFeature _owner;\n\n            public FeatureTaskList(TraceFailedRequestsFeature owner)\n            {\n                _owner = owner;\n            }\n\n            public override ICollection GetTaskItems()\n            {\n                var result = new ArrayList();\n                if (_owner.IsInOrder)\n                {\n                    result.Add(GetMoveUpTaskItem(_owner.CanMoveUp));\n                    result.Add(GetMoveDownTaskItem(_owner.CanMoveDown));\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                    result.Add(new MethodTaskItem(\"Unorder\", \"View Unordered List...\", string.Empty).SetUsage());\n                }\n                else\n                {\n                    result.Add(new MethodTaskItem(\"Add\", \"Add...\", string.Empty).SetUsage());\n                    if (_owner.SelectedItem != null)\n                    {\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        result.Add(new MethodTaskItem(\"Edit\", \"Edit...\", string.Empty).SetUsage());\n                        result.Add(RemoveTaskItem);\n                    }\n\n                    result.Add(MethodTaskItem.CreateSeparator().SetUsage(true, MethodTaskItemUsages.TaskList));\n                    if (_owner.CanRevert)\n                    {\n                        result.Add(RevertTaskItem);\n                    }\n\n                    result.Add(new MethodTaskItem(\"InOrder\", \"View Ordered List...\", string.Empty).SetUsage());\n\n                    if (_owner.IsSite)\n                    {\n                        result.Add(new MethodTaskItem(\"ViewTraceLogs\", \"View Trace Logs...\", string.Empty).SetUsage());\n                        result.Add(MethodTaskItem.CreateSeparator().SetUsage());\n                        result.Add(new MethodTaskItem(\"Set\", \"Edit Site Tracing...\", string.Empty).SetUsage());\n                    }\n                }\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Add()\n            {\n                _owner.Add();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void Remove()\n            {\n                _owner.Remove();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Edit()\n            {\n                _owner.Edit();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveUp()\n            {\n                _owner.MoveUp();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void MoveDown()\n            {\n                _owner.MoveDown();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void InOrder()\n            {\n                _owner.InOrder();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Unorder()\n            {\n                _owner.Unorder();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Revert()\n            {\n                _owner.Revert();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ViewTraceLogs()\n            {\n                _owner.ViewTraceLogs();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void Set()\n            {\n                _owner.Set();\n            }\n        }\n\n        public TraceFailedRequestsFeature(Module module)\n            : base(module)\n        {\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private FeatureTaskList _taskList;\n\n        public TaskList GetTaskList()\n        {\n            return _taskList ?? (_taskList = new FeatureTaskList(this));\n        }\n\n        public void Load()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            CanRevert = service.Scope != ManagementScope.Server;\n            IsInOrder = false;\n            IsSite = service.Scope == ManagementScope.Site;\n            LoadItems();\n        }\n\n        protected override ConfigurationElementCollection GetCollection(IConfigurationService service)\n        {\n            ConfigurationSection section = service.GetSection(\"system.webServer/tracing/traceFailedRequests\");\n            return section.GetCollection();\n        }\n\n        public void Add()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using var dialog = new AddTraceWizard(Module, null, service.GetSection(\"system.webServer/tracing/traceProviderDefinitions\"), this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            AddItem(dialog.Item);\n        }\n\n        public void Remove()\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            if (\n                dialog.ShowMessage(\"Are you sure that you want to remove the selected faile request tracing rule?\", \"Confirm Remove\",\n                    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=\n                DialogResult.Yes)\n            {\n                return;\n            }\n\n            RemoveItem();\n        }\n\n        protected override void DoubleClick(TraceFailedRequestsItem item)\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            using var dialog = new AddTraceWizard(Module, item, service.GetSection(\"system.webServer/tracing/traceProviderDefinitions\"), this);\n            if (dialog.ShowDialog() != DialogResult.OK)\n            {\n                return;\n            }\n\n            EditItem(dialog.Item);\n        }\n\n        public void Edit()\n        {\n            DoubleClick(SelectedItem);\n        }\n\n        public void MoveUp()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveUpItem();\n        }\n\n        public void MoveDown()\n        {\n            if (Items.Any(item => item.Flag != \"Local\"))\n            {\n                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n                var result =\n                    dialog.ShowMessage(\n                        \"The list order will be changed for this feature. If you continue, changes made to this feature at a parent level will no longer be inherited at this level. Do you want to continue?\",\n                        Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return;\n                }\n            }\n\n            MoveDownItem();\n        }\n\n        public void InOrder()\n        {\n            IsInOrder = true;\n            OnSettingsSaved();\n        }\n\n        public void Unorder()\n        {\n            IsInOrder = false;\n            OnSettingsSaved();\n        }\n\n        public void Revert()\n        {\n            if (!CanRevert)\n            {\n                throw new InvalidOperationException(\"Revert operation cannot be done at server level\");\n            }\n\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            var result =\n                dialog.ShowMessage(\n                    \"Reverting to the parent configuration will result in the loss of all settings in the local configuration file for this feature. Are you sure you want to continue?\",\n                    Name, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,\n                    MessageBoxDefaultButton.Button1);\n            if (result != DialogResult.Yes)\n            {\n                return;\n            }\n\n            RevertItems();\n        }\n\n        public void ViewTraceLogs()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            Site site = service.Site;\n            var path = Path.Combine(site.TraceFailedRequestsLogging.Directory, $\"W3SVC{site.Id}\").ExpandIisExpressEnvironmentVariables(\n                service.Server != null ? null : service.Application.GetActualExecutable());\n            if (System.IO.Directory.Exists(path))\n            {\n                DialogHelper.ProcessStart(path);\n                return;\n            }\n\n            var ui = (IManagementUIService)GetService(typeof(IManagementUIService));\n            ui.ShowMessage(\"The specific log directory is invalid.\", Name, MessageBoxButtons.OK, MessageBoxIcon.Warning);\n        }\n\n        public void Set()\n        {\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            var section = service.Site.TraceFailedRequestsLogging;\n            using (var dialog = new SettingsDialog(Module, section, this))\n            {\n                if (dialog.ShowDialog() != DialogResult.OK)\n                {\n                    return;\n                }\n            }\n\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        protected override void OnSettingsSaved()\n        {\n            TraceFailedRequestsSettingsUpdated?.Invoke();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210482\");\n            return false;\n        }\n\n        public override string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            // Determine the group key based on the selected grouping option\n            switch (selectedGroup)\n            {\n                case \"Entry Type\":\n                    return item.SubItems[4].Text;\n                default:\n                    return \"Unknown\";\n            }\n        }\n\n        public override void InitializeGrouping(ToolStripComboBox cbGroup)\n        {\n            cbGroup.Items.AddRange([\"No Grouping\", \"Entry Type\"]);\n        }\n\n        public bool IsInOrder { get; private set; }\n\n        public bool CanRevert { get; private set; }\n\n        public bool IsSite { get; private set; }\n\n        public TraceFailedRequestsSettingsSavedEventHandler TraceFailedRequestsSettingsUpdated { get; set; }\n\n        public string Description { get; }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public string Name\n        {\n            get { return \"Failed Request Tracing Rules\"; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/TraceFailedRequestsItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests\n{\n    using JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard;\n    using Microsoft.Web.Administration;\n    using System;\n    using System.Collections.Generic;\n\n    internal class TraceFailedRequestsItem : IItem<TraceFailedRequestsItem>\n    {\n        private IList<Provider> _providers;\n\n        public TraceFailedRequestsItem(ConfigurationElement element)\n        {\n            Element = element;\n            Flag = element == null || element.IsLocallyStored ? \"Local\" : \"Inherited\";\n            if (element == null)\n            {\n                Path = string.Empty;\n                return;\n            }\n\n            Path = (string)element[\"path\"];\n            var failureDefinitions = element.GetChildElement(\"failureDefinitions\");\n            Verbosity = (long)failureDefinitions[\"verbosity\"];\n            Codes = failureDefinitions[\"statusCodes\"].ToString();\n            TimeTaken = (TimeSpan)failureDefinitions[\"timeTaken\"];\n        }\n\n        public string Path { get; set; }\n\n        public long Verbosity { get; set; }\n\n        public ConfigurationElement Element { get; set; }\n\n        public string Flag { get; set; }\n\n        public bool Equals(TraceFailedRequestsItem other)\n        {\n            // all properties\n            return Match(other);\n        }\n\n        public void Apply()\n        {\n            Element[\"path\"] = Path;\n            var collection = Element.GetCollection(\"traceAreas\");\n            collection.Clear();\n            if (_providers == null)\n            {\n                _providers = new List<Provider>();\n                _providers.Add(new Provider\n                {\n                    Name = \"ASP\"\n                });\n                _providers.Add(new Provider\n                {\n                    Name = \"ASPNET\",\n                    SelectedAreas = new List<string>\n                    {\n                        \"Infrastructure\",\n                        \"Module\",\n                        \"Page\",\n                        \"AppServices\"\n                    }\n                });\n                _providers.Add(new Provider\n                {\n                    Name = \"ISAPI Extension\"\n                });\n                _providers.Add(new Provider\n                {\n                    Name = \"WWW Server\",\n                    SelectedAreas = new List<string>\n                    {\n                        \"Authentication\",\n                        \"Security\",\n                        \"Filter\",\n                        \"StaticFile\",\n                        \"CGI\",\n                        \"Compression\",\n                        \"Cache\",\n                        \"RequestNotifications\",\n                        \"Module\",\n                        \"Rewrite\",\n                        \"WebSocket\"\n                    }\n                });\n            }\n\n            foreach (Provider provider in _providers)\n            {\n                var add = collection.CreateElement(\"add\");\n                add[\"provider\"] = provider.Name;\n                add[\"verbosity\"] = provider.Verbosity;\n                add[\"areas\"] = provider.SelectedAreas.Combine(\",\");\n                collection.Add(add);\n            }\n\n            Element.ChildElements[\"failureDefinitions\"][\"statusCodes\"] = Codes;\n        }\n\n        public bool Match(TraceFailedRequestsItem other)\n        {\n            // match combined keys.\n            return other != null && other.Path == Path;\n        }\n\n        internal string GetProviders()\n        {\n            var collection = Element.ChildElements[\"traceAreas\"].GetCollection();\n            var providers = new List<string>(collection.Count);\n            foreach (ConfigurationElement item in collection)\n            {\n                providers.Add(item.GetAttribute(\"provider\").Value.ToString());\n            }\n\n            return providers.Combine(\",\");\n        }\n\n        internal void SetProviders(IList<Provider> providers)\n        {\n            _providers = providers;\n        }\n\n        public string Codes { get; set; }\n\n        public TimeSpan TimeTaken { get; set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/TraceFailedRequestsModule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests\n{\n    using System;\n\n    using Properties;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Server;\n\n    internal class TraceFailedRequestsModule : Module\n    {\n        protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            base.Initialize(serviceProvider, moduleInfo);\n            var controlPanel = (IControlPanel)GetService(typeof(IControlPanel));\n            var modulePage = new ModulePageInfo(this, typeof(TraceFailedRequestsPage), \"Failed Request Tracing Rules\",\n                \"Configure logging of failed request traces\", Resources.trace_failed_requests_36,\n                Resources.trace_failed_requests_36);\n            controlPanel.RegisterPage(modulePage);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/TraceFailedRequestsModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests\n{\n    using System;\n\n    using Microsoft.Web.Management.Server;\n\n    public class TraceFailedRequestsModuleProvider : ModuleProvider\n    {\n        public override Type ServiceType\n        {\n            get { return null; }\n        }\n\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return new ModuleDefinition(Name, typeof(TraceFailedRequestsModule).AssemblyQualifiedName);\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/TraceFailedRequestsPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.TraceFailedRequests\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class TraceFailedRequestsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (this.components != null))\n            {\n                this.components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TraceFailedRequestsPage));\n            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\n            this.cmsActionPanel = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.panel2 = new System.Windows.Forms.Panel();\n            this.listView1 = new System.Windows.Forms.ListView();\n            this.chPath = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chProviders = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chStatusCodes = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.toolStrip2 = new System.Windows.Forms.ToolStrip();\n            this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();\n            this.cbGroup = new System.Windows.Forms.ToolStripComboBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();\n            this.panel1 = new System.Windows.Forms.Panel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.tsActionPanel = new System.Windows.Forms.ToolStrip();\n            this.chTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            this.chType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\n            this.splitContainer1.Panel1.SuspendLayout();\n            this.splitContainer1.Panel2.SuspendLayout();\n            this.splitContainer1.SuspendLayout();\n            this.panel2.SuspendLayout();\n            this.toolStrip2.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.tableLayoutPanel1.SuspendLayout();\n            this.panel1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // splitContainer1\n            // \n            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\n            this.splitContainer1.Name = \"splitContainer1\";\n            // \n            // splitContainer1.Panel1\n            // \n            this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White;\n            this.splitContainer1.Panel1.ContextMenuStrip = this.cmsActionPanel;\n            this.splitContainer1.Panel1.Controls.Add(this.panel2);\n            this.splitContainer1.Panel1.Controls.Add(this.pictureBox1);\n            this.splitContainer1.Panel1.Controls.Add(this.label3);\n            // \n            // splitContainer1.Panel2\n            // \n            this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel1);\n            this.splitContainer1.Panel2MinSize = 200;\n            this.splitContainer1.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.SplitterDistance = 580;\n            this.splitContainer1.TabIndex = 6;\n            // \n            // cmsActionPanel\n            // \n            this.cmsActionPanel.Name = \"cmsActionPanel\";\n            this.cmsActionPanel.Size = new System.Drawing.Size(61, 4);\n            // \n            // panel2\n            // \n            this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.panel2.Controls.Add(this.listView1);\n            this.panel2.Controls.Add(this.toolStrip2);\n            this.panel2.Controls.Add(this.label2);\n            this.panel2.Location = new System.Drawing.Point(10, 50);\n            this.panel2.Name = \"panel2\";\n            this.panel2.Size = new System.Drawing.Size(560, 540);\n            this.panel2.TabIndex = 6;\n            // \n            // listView1\n            // \n            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {\n            this.chPath,\n            this.chProviders,\n            this.chStatusCodes,\n            this.chTime,\n            this.chType});\n            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.listView1.FullRowSelect = true;\n            this.listView1.HideSelection = false;\n            this.listView1.Location = new System.Drawing.Point(0, 38);\n            this.listView1.Margin = new System.Windows.Forms.Padding(5);\n            this.listView1.MultiSelect = false;\n            this.listView1.Name = \"listView1\";\n            this.listView1.Size = new System.Drawing.Size(560, 502);\n            this.listView1.TabIndex = 0;\n            this.listView1.UseCompatibleStateImageBehavior = false;\n            this.listView1.View = System.Windows.Forms.View.Details;\n            this.listView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ListView1KeyDown);\n            this.listView1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ListView1_MouseDoubleClick);\n            this.listView1.SelectedIndexChanged += new System.EventHandler(this.ListView1SelectedIndexChanged);\n            // \n            // chPath\n            // \n            this.chPath.Text = \"Path\";\n            this.chPath.Width = 120;\n            // \n            // chProviders\n            // \n            this.chProviders.Text = \"Associated Providers\";\n            this.chProviders.Width = 120;\n            // \n            // chStatusCodes\n            // \n            this.chStatusCodes.Text = \"Status Codes\";\n            this.chStatusCodes.Width = 120;\n            // \n            // toolStrip2\n            // \n            this.toolStrip2.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.toolStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.toolStripLabel2,\n            this.cbGroup});\n            this.toolStrip2.Location = new System.Drawing.Point(0, 13);\n            this.toolStrip2.Name = \"toolStrip2\";\n            this.toolStrip2.Size = new System.Drawing.Size(560, 25);\n            this.toolStrip2.TabIndex = 3;\n            this.toolStrip2.Text = \"toolStrip2\";\n            // \n            // toolStripLabel2\n            // \n            this.toolStripLabel2.Name = \"toolStripLabel2\";\n            this.toolStripLabel2.Size = new System.Drawing.Size(59, 22);\n            this.toolStripLabel2.Text = \"Group by:\";\n            // \n            // cbGroup\n            // \n            this.cbGroup.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbGroup.Name = \"cbGroup\";\n            this.cbGroup.Size = new System.Drawing.Size(121, 25);\n            this.cbGroup.SelectedIndexChanged += new System.EventHandler(this.CbGroup_SelectedIndexChanged);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Dock = System.Windows.Forms.DockStyle.Top;\n            this.label2.Location = new System.Drawing.Point(0, 0);\n            this.label2.Margin = new System.Windows.Forms.Padding(5);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(1381, 13);\n            this.label2.TabIndex = 1;\n            this.label2.Text = resources.GetString(\"label2.Text\");\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Location = new System.Drawing.Point(10, 10);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(32, 32);\n            this.pictureBox1.TabIndex = 5;\n            this.pictureBox1.TabStop = false;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label3.Location = new System.Drawing.Point(48, 10);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(296, 25);\n            this.label3.TabIndex = 2;\n            this.label3.Text = \"Failed Request Tracing Rules\";\n            // \n            // tableLayoutPanel1\n            // \n            this.tableLayoutPanel1.ColumnCount = 1;\n            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));\n            this.tableLayoutPanel1.Controls.Add(this.panel1, 0, 0);\n            this.tableLayoutPanel1.Controls.Add(this.tsActionPanel, 0, 1);\n            this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);\n            this.tableLayoutPanel1.Name = \"tableLayoutPanel1\";\n            this.tableLayoutPanel1.RowCount = 2;\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 23F));\n            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\n            this.tableLayoutPanel1.Size = new System.Drawing.Size(216, 600);\n            this.tableLayoutPanel1.TabIndex = 1;\n            // \n            // panel1\n            // \n            this.panel1.BackColor = System.Drawing.SystemColors.ActiveBorder;\n            this.panel1.Controls.Add(this.label1);\n            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.panel1.Location = new System.Drawing.Point(0, 0);\n            this.panel1.Margin = new System.Windows.Forms.Padding(0);\n            this.panel1.Name = \"panel1\";\n            this.panel1.Size = new System.Drawing.Size(216, 23);\n            this.panel1.TabIndex = 1;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label1.Location = new System.Drawing.Point(3, 5);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(49, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Actions\";\n            // \n            // tsActionPanel\n            // \n            this.tsActionPanel.CanOverflow = false;\n            this.tsActionPanel.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.tsActionPanel.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;\n            this.tsActionPanel.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;\n            this.tsActionPanel.Location = new System.Drawing.Point(0, 23);\n            this.tsActionPanel.Name = \"tsActionPanel\";\n            this.tsActionPanel.Size = new System.Drawing.Size(216, 577);\n            this.tsActionPanel.TabIndex = 2;\n            this.tsActionPanel.Text = \"toolStrip1\";\n            // \n            // chTime\n            // \n            this.chTime.Text = \"Time Taken\";\n            this.chTime.Width = 100;\n            // \n            // chType\n            // \n            this.chType.Text = \"Entry Type\";\n            this.chType.Width = 100;\n            // \n            // TraceFailedRequestsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.splitContainer1);\n            this.Name = \"TraceFailedRequestsPage\";\n            this.Size = new System.Drawing.Size(800, 600);\n            this.splitContainer1.Panel1.ResumeLayout(false);\n            this.splitContainer1.Panel1.PerformLayout();\n            this.splitContainer1.Panel2.ResumeLayout(false);\n            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\n            this.splitContainer1.ResumeLayout(false);\n            this.panel2.ResumeLayout(false);\n            this.panel2.PerformLayout();\n            this.toolStrip2.ResumeLayout(false);\n            this.toolStrip2.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.tableLayoutPanel1.ResumeLayout(false);\n            this.tableLayoutPanel1.PerformLayout();\n            this.panel1.ResumeLayout(false);\n            this.panel1.PerformLayout();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private SplitContainer splitContainer1;\n        private ListView listView1;\n        private ColumnHeader chStatusCodes;\n        private Label label2;\n        private Label label3;\n        private TableLayoutPanel tableLayoutPanel1;\n        private Panel panel1;\n        private Label label1;\n        private ToolStrip tsActionPanel;\n        private Panel panel2;\n        private ToolStrip toolStrip2;\n        private ToolStripLabel toolStripLabel2;\n        private ToolStripComboBox cbGroup;\n        private PictureBox pictureBox1;\n        private ContextMenuStrip cmsActionPanel;\n        private ColumnHeader chPath;\n        private ColumnHeader chProviders;\n        private ColumnHeader chTime;\n        private ColumnHeader chType;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/TraceFailedRequestsPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using JexusManager.Properties;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n\n    internal partial class TraceFailedRequestsPage : ModuleListPage\n    {\n        private sealed class PageTaskList : ShowHelpTaskList\n        {\n            private readonly TraceFailedRequestsPage _owner;\n\n            public PageTaskList(TraceFailedRequestsPage owner)\n            {\n                _owner = owner;\n            }\n\n            [Obfuscation(Exclude = true)]\n            public override void ShowHelp()\n            {\n                _owner.ShowHelp();\n            }\n        }\n\n        private sealed class TraceFailedRequestsListViewItem : ListViewItem, IFeatureListViewItem<TraceFailedRequestsItem>\n        {\n            public TraceFailedRequestsItem Item { get; }\n            private readonly TraceFailedRequestsPage _page;\n            public TraceFailedRequestsListViewItem(TraceFailedRequestsItem item, TraceFailedRequestsPage page)\n                : base(item.Path)\n            {\n                Item = item;\n                _page = page;\n                SubItems.Add(new ListViewSubItem(this, item.GetProviders()));\n                SubItems.Add(new ListViewSubItem(this, item.Codes));\n                SubItems.Add(new ListViewSubItem(this, item.TimeTaken.ToString()));\n                SubItems.Add(new ListViewSubItem(this, item.Flag));\n            }\n        }\n\n        private TraceFailedRequestsFeature _feature;\n        private PageTaskList _taskList;\n\n        public TraceFailedRequestsPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void Initialize(object navigationData)\n        {\n            base.Initialize(navigationData);\n            var service = (IConfigurationService)GetService(typeof(IConfigurationService));\n            pictureBox1.Image = service.Scope.GetImage();\n\n            _feature = new TraceFailedRequestsFeature(Module);\n            _feature.TraceFailedRequestsSettingsUpdated = InitializeListPage;\n            _feature.Load();\n        }\n\n        protected override void InitializeListPage()\n        {\n            toolStrip2.Visible = !_feature.IsInOrder;\n            listView1.Items.Clear();\n            foreach (var file in _feature.Items)\n            {\n                listView1.Items.Add(new TraceFailedRequestsListViewItem(file, this));\n            }\n\n            _feature.InitializeGrouping(cbGroup);\n            _feature.InitializeColumnClick(listView1);\n\n            if (_feature.SelectedItem == null)\n            {\n                Refresh();\n                return;\n            }\n\n            foreach (TraceFailedRequestsListViewItem item in listView1.Items)\n            {\n                if (item.Item == _feature.SelectedItem)\n                {\n                    item.Selected = true;\n                }\n            }\n        }\n\n        protected override void Refresh()\n        {\n            Tasks.Fill(tsActionPanel, cmsActionPanel);\n            base.Refresh();\n        }\n\n        private void ListView1SelectedIndexChanged(object sender, EventArgs e)\n        {\n            _feature.HandleSelectedIndexChanged(listView1);\n            Refresh();\n        }\n\n        private void ListView1KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Delete)\n            {\n                _feature.Remove();\n            }\n        }\n\n        private void ListView1_MouseDoubleClick(object sender, MouseEventArgs e)\n        {\n            _feature.HandleMouseDoubleClick(listView1);\n        }\n\n        private void CbGroup_SelectedIndexChanged(object sender, EventArgs e)\n        {\n            DialogHelper.HandleGrouping(listView1, cbGroup.SelectedItem.ToString(), _feature.GetGroupKey);\n        }\n\n        protected override bool ShowHelp()\n        {\n            _feature.ShowHelp();\n            return true;\n        }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new PageTaskList(this);\n                }\n\n                base.Tasks.Add(_feature.GetTaskList());\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/TraceFailedRequestsPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cmsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>248, 17</value>\n  </metadata>\n  <metadata name=\"toolStrip2.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>143, 17</value>\n  </metadata>\n  <data name=\"label2.Text\" xml:space=\"preserve\">\n    <value>Use this feature to configure tracing for failed requests. A request trace is logged either when an error status code is generated or when the time taken for the request exceeds a specified duration. If both conditions have been fulfilled, the first condition that is met will generate the request trace.</value>\n  </data>\n  <metadata name=\"tsActionPanel.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n</root>"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/TraceFailedRequestsSettingsSavedEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests\n{\n    public delegate void TraceFailedRequestsSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/AddTraceWizard.Designer.cs",
    "content": "﻿namespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    using System.ComponentModel;\n\n    partial class AddTraceWizard\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.SuspendLayout();\n            // \n            // AddTraceWizard\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(669, 481);\n            this.Name = \"AddTraceWizard\";\n            this.Text = \"Add Failed Request Tracing Rule\";\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/AddTraceWizard.cs",
    "content": "﻿using System.ComponentModel;\n// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    using System;\n    using System.Linq;\n    using System.Windows.Forms;\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n    using Properties;\n\n    internal partial class AddTraceWizard : WizardForm\n    {\n        private readonly TraceFailedRequestsItem _existing;\n        private readonly ConfigurationElement _config;\n        private readonly AddTraceWizardData _wizardData;\n        private readonly TraceFailedRequestsFeature _feature;\n\n        public AddTraceWizard(IServiceProvider serviceProvider, TraceFailedRequestsItem existing, ConfigurationElement config, TraceFailedRequestsFeature feature)\n            : base(serviceProvider)\n        {\n            _existing = existing;\n            _config = config;\n            _feature = feature;\n            _wizardData = new AddTraceWizardData(config, existing);\n            InitializeComponent();\n            TaskGlyph = Resources.trace_failed_requests_48;\n            Text = existing == null ? \"Add Failed Request Tracing Rule\" : \"Edit Failed Request Tracing Rule\";\n        }\n\n        protected override object WizardData\n        {\n            get { return _wizardData; }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public TraceFailedRequestsItem Item { get; private set; }\n\n        protected override void CompleteWizard()\n        {\n            Item = _existing == null ? new TraceFailedRequestsItem(null) : _existing;\n            _wizardData.Apply(Item);\n            if (_existing == null && _feature.Items.Any(item => item.Match(Item)))\n            {\n                ShowMessage(\n                    \"A failed request trace for this content already exists.\",\n                    MessageBoxButtons.OK,\n                    MessageBoxIcon.Error,\n                    MessageBoxDefaultButton.Button1);\n                DialogResult = DialogResult.None;\n                return;\n            }\n\n            DialogResult = DialogResult.OK;\n            Close();\n        }\n\n        protected override bool CanComplete\n        {\n            get\n            {\n                var data = (AddTraceWizardData)WizardData;\n                return data.IsValid;\n            }\n        }\n\n        protected override WizardPage[] GetWizardPages()\n        {\n            var contentPage = new ContentPage();\n            contentPage.SetWizard(this);\n            var conditionsPage = new ConditionsPage();\n            conditionsPage.SetWizard(this);\n            var providersPage = new ProvidersPage();\n            providersPage.SetWizard(this);\n            contentPage.SetNextPage(conditionsPage);\n            conditionsPage.SetPreviousPage(contentPage);\n            conditionsPage.SetNextPage(providersPage);\n            providersPage.SetPreviousPage(conditionsPage);\n            return [contentPage, conditionsPage, providersPage];\n        }\n\n        protected override void ShowHelp()\n        {\n            DialogHelper.ProcessStart(\"http://go.microsoft.com/fwlink/?LinkId=210482\");\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/AddTraceWizard.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/AddTraceWizardData.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.Web.Administration;\n\nnamespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    internal class AddTraceWizardData\n    {\n        public AddTraceWizardData(ConfigurationElement config, TraceFailedRequestsItem existing)\n        {\n            Editing = existing != null;\n            if (existing == null)\n            {\n                FileName = \"*\";\n            }\n            else\n            {\n                FileName = existing.Path;\n                Codes = existing.Codes;\n                Time = existing.TimeTaken.GetTotalSeconds();\n                Verbosity = existing.Verbosity;\n            }\n\n            var collection = config.GetCollection();\n            foreach (ConfigurationElement item in collection)\n            {\n                var name = item.GetAttribute(\"name\").Value.ToString();\n                var areas = item.ChildElements[\"areas\"].GetCollection();\n                var provider = new Provider { Name = name, Areas = new List<string>(areas.Count) };\n                foreach (ConfigurationElement area in areas)\n                {\n                    provider.Areas.Add(area[\"name\"].ToString());\n                }\n\n                Providers.Add(provider);\n            }\n\n            if (existing != null)\n            {\n                var selection = existing.Element.GetCollection(\"traceAreas\");\n                foreach (ConfigurationElement item in selection)\n                {\n                    var name = item[\"provider\"].ToString();\n                    var areas = item[\"areas\"].ToString();\n                    foreach (var provider in Providers)\n                    {\n                        if (provider.Name == name)\n                        {\n                            provider.Selected = true;\n                            foreach (var area in areas.Split(','))\n                            {\n                                provider.SelectedAreas.Add(area);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n\n        internal void Apply(TraceFailedRequestsItem item)\n        {\n            item.Codes = Codes;\n            item.Path = FileName;\n            item.TimeTaken = TimeSpan.FromSeconds(Time);\n            item.Verbosity = Verbosity;\n            item.SetProviders(Providers);\n        }\n\n        public string FileName { get; set; }\n\n        public string Codes { get; set; }\n\n        public long Time { get; set; }\n\n        public long Verbosity { get; set; }\n\n        public bool Editing { get; }\n\n        public IList<Provider> Providers { get; } = new List<Provider>();\n\n        public bool IsValid\n        {\n            get\n            {\n                return Providers.Any(item => item.Selected);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/ConditionsPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ConditionsPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.txtConnect = new System.Windows.Forms.Label();\n            this.cbCodes = new System.Windows.Forms.CheckBox();\n            this.txtCodes = new System.Windows.Forms.TextBox();\n            this.cbTime = new System.Windows.Forms.CheckBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtTime = new System.Windows.Forms.TextBox();\n            this.cbEventSeverity = new System.Windows.Forms.CheckBox();\n            this.cbSeverity = new System.Windows.Forms.ComboBox();\n            this.SuspendLayout();\n            // \n            // txtConnect\n            // \n            this.txtConnect.AutoSize = true;\n            this.txtConnect.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.txtConnect.Location = new System.Drawing.Point(20, 25);\n            this.txtConnect.Name = \"txtConnect\";\n            this.txtConnect.Size = new System.Drawing.Size(311, 13);\n            this.txtConnect.TabIndex = 6;\n            this.txtConnect.Text = \"Under which condition(s) should a request be traced?\";\n            // \n            // cbCodes\n            // \n            this.cbCodes.AutoSize = true;\n            this.cbCodes.Location = new System.Drawing.Point(23, 62);\n            this.cbCodes.Name = \"cbCodes\";\n            this.cbCodes.Size = new System.Drawing.Size(97, 17);\n            this.cbCodes.TabIndex = 7;\n            this.cbCodes.Text = \"Status code(s):\";\n            this.cbCodes.UseVisualStyleBackColor = true;\n            // \n            // txtCodes\n            // \n            this.txtCodes.Enabled = false;\n            this.txtCodes.Location = new System.Drawing.Point(49, 86);\n            this.txtCodes.Name = \"txtCodes\";\n            this.txtCodes.Size = new System.Drawing.Size(282, 20);\n            this.txtCodes.TabIndex = 8;\n            // \n            // cbTime\n            // \n            this.cbTime.AutoSize = true;\n            this.cbTime.Location = new System.Drawing.Point(23, 143);\n            this.cbTime.Name = \"cbTime\";\n            this.cbTime.Size = new System.Drawing.Size(142, 17);\n            this.cbTime.TabIndex = 9;\n            this.cbTime.Text = \"Time taken (in seconds):\";\n            this.cbTime.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(49, 113);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(122, 13);\n            this.label1.TabIndex = 10;\n            this.label1.Text = \"Example: 401.3-999,405\";\n            // \n            // txtTime\n            // \n            this.txtTime.Enabled = false;\n            this.txtTime.Location = new System.Drawing.Point(49, 166);\n            this.txtTime.Name = \"txtTime\";\n            this.txtTime.Size = new System.Drawing.Size(123, 20);\n            this.txtTime.TabIndex = 11;\n            // \n            // cbEventSeverity\n            // \n            this.cbEventSeverity.AutoSize = true;\n            this.cbEventSeverity.Location = new System.Drawing.Point(23, 203);\n            this.cbEventSeverity.Name = \"cbEventSeverity\";\n            this.cbEventSeverity.Size = new System.Drawing.Size(98, 17);\n            this.cbEventSeverity.TabIndex = 12;\n            this.cbEventSeverity.Text = \"Event Severity:\";\n            this.cbEventSeverity.UseVisualStyleBackColor = true;\n            // \n            // cbSeverity\n            // \n            this.cbSeverity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbSeverity.Enabled = false;\n            this.cbSeverity.FormattingEnabled = true;\n            this.cbSeverity.Items.AddRange(new object[] {\n            \"Error\",\n            \"Critical Error\",\n            \"Warning\"});\n            this.cbSeverity.Location = new System.Drawing.Point(49, 226);\n            this.cbSeverity.Name = \"cbSeverity\";\n            this.cbSeverity.Size = new System.Drawing.Size(239, 21);\n            this.cbSeverity.TabIndex = 13;\n            // \n            // ConditionsPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.cbSeverity);\n            this.Controls.Add(this.cbEventSeverity);\n            this.Controls.Add(this.txtTime);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.cbTime);\n            this.Controls.Add(this.txtCodes);\n            this.Controls.Add(this.cbCodes);\n            this.Controls.Add(this.txtConnect);\n            this.Name = \"ConditionsPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n        private Label txtConnect;\n        private CheckBox cbCodes;\n        private TextBox txtCodes;\n        private CheckBox cbTime;\n        private Label label1;\n        private TextBox txtTime;\n        private CheckBox cbEventSeverity;\n        private ComboBox cbSeverity;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/ConditionsPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    using System;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    public partial class ConditionsPage : DefaultWizardPage\n    {\n        private bool _initialized;\n\n        public ConditionsPage()\n        {\n            InitializeComponent();\n            Caption = \"Define Trace Conditions\";\n\n            var container = new CompositeDisposable();\n            Disposed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbCodes, \"CheckedChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtCodes.Enabled = cbCodes.Checked;\n                    UpdateWizard();\n                }));\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbTime, \"CheckedChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtTime.Enabled = cbTime.Checked;\n                    UpdateWizard();\n                }));\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbEventSeverity, \"CheckedChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    cbSeverity.Enabled = cbEventSeverity.Checked;\n                    UpdateWizard();\n                }));\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtCodes, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    UpdateWizard();\n                }));\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(txtTime, \"TextChanged\")\n                .Sample(TimeSpan.FromSeconds(0.5))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    UpdateWizard();\n                }));\n        }\n\n        protected override bool CanNavigateNext\n        {\n            get\n            {\n                var canNavigateNext = cbCodes.Checked && !string.IsNullOrWhiteSpace(txtCodes.Text)\n                    && (!cbTime.Checked || (cbTime.Checked && !string.IsNullOrWhiteSpace(txtTime.Text)));\n                return base.CanNavigateNext && canNavigateNext;\n            }\n        }\n\n        public override bool OnNext()\n        {\n            if (cbCodes.Checked)\n            {\n                if (!IsValidCodes(txtCodes.Text))\n                {\n                    ShowMessage($\"'{txtCodes.Text}' is an invalid status code. Status codes must be numbers in the form of 400 or 400.1. Status codes must be between 100 and 999. Sub-status codes must be between 1 and 999.\", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);\n                    return false;\n                }\n            }\n\n            long time = 0;\n            if (cbTime.Checked)\n            {\n                if (!long.TryParse(txtTime.Text, out time) || time < 0 || time > 922337203685)\n                {\n                    ShowMessage(\"The time interval must be a positive integer between 0 and 922,337,203,685\", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);\n                    return false;\n                }\n            }\n\n            var data = (AddTraceWizardData)WizardData;\n            data.Codes = txtCodes.Text;\n            data.Time = time;\n            if (cbEventSeverity.Checked)\n            {\n                switch (cbSeverity.SelectedIndex)\n                {\n                    case 0:\n                        data.Verbosity = 2;\n                        break;\n                    case 1:\n                        data.Verbosity = 1;\n                        break;\n                    case 2:\n                        data.Verbosity = 3;\n                        break;\n                }\n            }\n            else\n            {\n                data.Verbosity = 0;\n            }\n\n            return true;\n        }\n\n        private static bool IsValidCodes(string text)\n        {\n            string[] sections = text.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n            foreach (var section in sections)\n            {\n                string[] bounds = section.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);\n                foreach (var bound in bounds)\n                {\n                    string[] codes = bound.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);\n                    if (codes.Length == 0)\n                    {\n                        return false;\n                    }\n\n                    if (!int.TryParse(codes[0], out int status) || status < 100 || status > 999)\n                    {\n                        return false;\n                    }\n\n                    if (codes.Length == 2)\n                    {\n                        if (!int.TryParse(codes[1], out int subStatus) || subStatus < 1 || subStatus > 999)\n                        {\n                            return false;\n                        }\n                    }\n                }\n            }\n\n            return true;\n        }\n\n        protected override void Activate()\n        {\n            var data = (AddTraceWizardData)WizardData;\n            cbCodes.Checked = !string.IsNullOrEmpty(data.Codes);\n            txtCodes.Text = data.Codes;\n\n            cbTime.Checked = data.Time > 0;\n            txtTime.Text = cbTime.Checked ? data.Time.ToString() : string.Empty;\n\n            cbEventSeverity.Checked = data.Verbosity > 0;\n            cbSeverity.Enabled = cbEventSeverity.Checked;\n            if (cbSeverity.Enabled)\n            {\n                switch (data.Verbosity)\n                {\n                    case 1:\n                        cbSeverity.SelectedIndex = 1;\n                        break;\n                    case 2:\n                        cbSeverity.SelectedIndex = 0;\n                        break;\n                    case 3:\n                        cbSeverity.SelectedIndex = 2;\n                        break;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/ConditionsPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/ContentPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ContentPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.rbAll = new System.Windows.Forms.RadioButton();\n            this.rbAspNet = new System.Windows.Forms.RadioButton();\n            this.rbAsp = new System.Windows.Forms.RadioButton();\n            this.label4 = new System.Windows.Forms.Label();\n            this.rbCustom = new System.Windows.Forms.RadioButton();\n            this.label1 = new System.Windows.Forms.Label();\n            this.txtContent = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // rbAll\n            // \n            this.rbAll.AutoSize = true;\n            this.rbAll.Checked = true;\n            this.rbAll.Location = new System.Drawing.Point(27, 42);\n            this.rbAll.Name = \"rbAll\";\n            this.rbAll.Size = new System.Drawing.Size(88, 17);\n            this.rbAll.TabIndex = 0;\n            this.rbAll.TabStop = true;\n            this.rbAll.Text = \"All content (*)\";\n            this.rbAll.UseVisualStyleBackColor = true;\n            // \n            // rbAspNet\n            // \n            this.rbAspNet.AutoSize = true;\n            this.rbAspNet.Location = new System.Drawing.Point(27, 84);\n            this.rbAspNet.Name = \"rbAspNet\";\n            this.rbAspNet.Size = new System.Drawing.Size(109, 17);\n            this.rbAspNet.TabIndex = 2;\n            this.rbAspNet.Text = \"ASP.NET (*.aspx)\";\n            this.rbAspNet.UseVisualStyleBackColor = true;\n            // \n            // rbAsp\n            // \n            this.rbAsp.AutoSize = true;\n            this.rbAsp.Location = new System.Drawing.Point(27, 127);\n            this.rbAsp.Name = \"rbAsp\";\n            this.rbAsp.Size = new System.Drawing.Size(79, 17);\n            this.rbAsp.TabIndex = 5;\n            this.rbAsp.Text = \"ASP (*.asp)\";\n            this.rbAsp.UseVisualStyleBackColor = true;\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.label4.Location = new System.Drawing.Point(24, 17);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(177, 13);\n            this.label4.TabIndex = 6;\n            this.label4.Text = \"What would you like to trace?\";\n            // \n            // rbCustom\n            // \n            this.rbCustom.AutoSize = true;\n            this.rbCustom.Location = new System.Drawing.Point(27, 173);\n            this.rbCustom.Name = \"rbCustom\";\n            this.rbCustom.Size = new System.Drawing.Size(63, 17);\n            this.rbCustom.TabIndex = 7;\n            this.rbCustom.Text = \"Custom:\";\n            this.rbCustom.UseVisualStyleBackColor = true;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(42, 229);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(88, 13);\n            this.label1.TabIndex = 8;\n            this.label1.Text = \"Example: tr*.aspx\";\n            // \n            // txtContent\n            // \n            this.txtContent.Enabled = false;\n            this.txtContent.Location = new System.Drawing.Point(45, 196);\n            this.txtContent.Name = \"txtContent\";\n            this.txtContent.Size = new System.Drawing.Size(195, 20);\n            this.txtContent.TabIndex = 9;\n            // \n            // ContentPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.txtContent);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.rbCustom);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.rbAsp);\n            this.Controls.Add(this.rbAspNet);\n            this.Controls.Add(this.rbAll);\n            this.Name = \"ContentPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private RadioButton rbAll;\n        private RadioButton rbAspNet;\n        private RadioButton rbAsp;\n        private Label label4;\n        private RadioButton rbCustom;\n        private Label label1;\n        private TextBox txtContent;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/ContentPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    using System;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n\n    public partial class ContentPage : DefaultWizardPage\n    {\n        public ContentPage()\n        {\n            InitializeComponent();\n            Caption = \"Specify Content to Trace\";\n\n            var container = new CompositeDisposable();\n            Disposed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(rbAll, \"Click\")\n                .Merge(Observable.FromEventPattern<EventArgs>(rbAspNet, \"Click\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(rbAsp, \"Click\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(rbCustom, \"Click\"))\n                .Merge(Observable.FromEventPattern<EventArgs>(txtContent, \"TextChanged\"))\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    txtContent.Enabled = rbCustom.Checked && rbCustom.Enabled;\n                    UpdateWizard();\n                }));\n        }\n\n        public override bool OnNext()\n        {\n            var data = (AddTraceWizardData)WizardData;\n            if (rbAspNet.Checked)\n            {\n                data.FileName = \"*.aspx\";\n            }\n            else if (rbAsp.Checked)\n            {\n                data.FileName = \"*.asp\";\n            }\n            else if (rbAll.Checked)\n            {\n                data.FileName = \"*\";\n            }\n            else\n            {\n                data.FileName = txtContent.Text;\n            }\n\n            return base.OnNext();\n        }\n\n        protected override bool CanNavigateNext\n        {\n            get\n            {\n                var canNavigateNext = rbAll.Checked || rbAsp.Checked || rbAspNet.Checked || (rbCustom.Checked && !string.IsNullOrWhiteSpace(txtContent.Text));\n                return base.CanNavigateNext && canNavigateNext;\n            }\n        }\n\n        protected override void Activate()\n        {\n            var data = (AddTraceWizardData)WizardData;\n            rbAll.Enabled = rbAspNet.Enabled = rbAsp.Enabled = rbCustom.Enabled = txtContent.Enabled = !data.Editing;\n            if (data.FileName == \"*.aspx\")\n            {\n                rbAspNet.Checked = true;\n            }\n            else if (data.FileName == \"*.asp\")\n            {\n                rbAsp.Checked = true;\n            }\n            else if (data.FileName == \"*\")\n            {\n                rbAll.Checked = true;\n            }\n            else\n            {\n                rbCustom.Checked = true;\n                txtContent.Text = data.FileName;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/ContentPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/Provider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    using System.Collections.Generic;\n\n    internal class Provider\n    {\n        public string Name { get; set; }\n        public List<string> Areas { get; set; } = new List<string>();\n        public List<string> SelectedAreas { get; set; } = new List<string>();\n        public int Verbosity { get; set; } = 5;\n\n        public bool Selected { get; set; }\n\n        public override string ToString()\n        {\n            return Name;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/ProvidersPage.Designer.cs",
    "content": "﻿namespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    using System.ComponentModel;\n    using System.Windows.Forms;\n\n    partial class ProvidersPage\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.clbProviders = new System.Windows.Forms.CheckedListBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.groupBox1 = new System.Windows.Forms.GroupBox();\n            this.clbAreas = new System.Windows.Forms.CheckedListBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.cbVerbosity = new System.Windows.Forms.ComboBox();\n            this.groupBox1.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(16, 16);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(54, 13);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"Providers:\";\n            // \n            // clbProviders\n            // \n            this.clbProviders.CheckOnClick = true;\n            this.clbProviders.FormattingEnabled = true;\n            this.clbProviders.Location = new System.Drawing.Point(19, 32);\n            this.clbProviders.Name = \"clbProviders\";\n            this.clbProviders.Size = new System.Drawing.Size(156, 289);\n            this.clbProviders.TabIndex = 1;\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(23, 29);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(53, 13);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"Verbosity:\";\n            // \n            // groupBox1\n            // \n            this.groupBox1.Controls.Add(this.clbAreas);\n            this.groupBox1.Controls.Add(this.label3);\n            this.groupBox1.Controls.Add(this.cbVerbosity);\n            this.groupBox1.Controls.Add(this.label2);\n            this.groupBox1.Location = new System.Drawing.Point(198, 32);\n            this.groupBox1.Name = \"groupBox1\";\n            this.groupBox1.Size = new System.Drawing.Size(273, 289);\n            this.groupBox1.TabIndex = 3;\n            this.groupBox1.TabStop = false;\n            this.groupBox1.Text = \"Provider Properties\";\n            // \n            // clbAreas\n            // \n            this.clbAreas.CheckOnClick = true;\n            this.clbAreas.FormattingEnabled = true;\n            this.clbAreas.Location = new System.Drawing.Point(26, 96);\n            this.clbAreas.Name = \"clbAreas\";\n            this.clbAreas.Size = new System.Drawing.Size(222, 184);\n            this.clbAreas.TabIndex = 5;\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Location = new System.Drawing.Point(23, 80);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(37, 13);\n            this.label3.TabIndex = 4;\n            this.label3.Text = \"Areas:\";\n            // \n            // cbVerbosity\n            // \n            this.cbVerbosity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\n            this.cbVerbosity.FormattingEnabled = true;\n            this.cbVerbosity.Items.AddRange(new object[] {\n            \"General \",\n            \"Critical Errors\",\n            \"Errors\",\n            \"Warning\",\n            \"Information\",\n            \"Verbose\"});\n            this.cbVerbosity.Location = new System.Drawing.Point(26, 45);\n            this.cbVerbosity.Name = \"cbVerbosity\";\n            this.cbVerbosity.Size = new System.Drawing.Size(222, 21);\n            this.cbVerbosity.TabIndex = 3;\n            // \n            // ProvidersPage\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.groupBox1);\n            this.Controls.Add(this.clbProviders);\n            this.Controls.Add(this.label1);\n            this.Name = \"ProvidersPage\";\n            this.Size = new System.Drawing.Size(670, 380);\n            this.groupBox1.ResumeLayout(false);\n            this.groupBox1.PerformLayout();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private Label label1;\n        private CheckedListBox clbProviders;\n        private Label label2;\n        private GroupBox groupBox1;\n        private CheckedListBox clbAreas;\n        private Label label3;\n        private ComboBox cbVerbosity;\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/ProvidersPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features.TraceFailedRequests.Wizards.AddTraceWizard\n{\n    using System;\n    using System.Reactive.Disposables;\n    using System.Reactive.Linq;\n    using System.Windows.Forms;\n\n    public partial class ProvidersPage : DefaultWizardPage\n    {\n        private bool _initialized;\n\n        public ProvidersPage()\n        {\n            InitializeComponent();\n            Caption = \"Select Trace Providers\";\n\n            var container = new CompositeDisposable();\n            Disposed += (sender, args) => container.Dispose();\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(clbProviders, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var data = (AddTraceWizardData)WizardData;\n                    var provider = clbProviders.SelectedItem as Provider;\n                    cbVerbosity.Enabled = provider != null;\n                    if (provider != null)\n                    {\n                        cbVerbosity.SelectedIndex = provider.Verbosity;\n                        clbAreas.Items.Clear();\n                        foreach (var area in provider.Areas)\n                        {\n                            clbAreas.Items.Add(area, provider.SelectedAreas.Contains(area));\n                        }\n                    }\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<ItemCheckEventArgs>(clbProviders, \"ItemCheck\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var provider = clbProviders.SelectedItem as Provider;\n                    if (provider != null)\n                    {\n                        provider.Selected = evt.EventArgs.NewValue == CheckState.Checked;\n                    }\n\n                    VerifyFinish();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(cbVerbosity, \"SelectedIndexChanged\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var provider = clbProviders.SelectedItem as Provider;\n                    provider.Verbosity = cbVerbosity.SelectedIndex;\n                    VerifyFinish();\n                }));\n\n            container.Add(\n                Observable.FromEventPattern<EventArgs>(clbAreas, \"ItemCheck\")\n                .ObserveOn(System.Threading.SynchronizationContext.Current)\n                .Subscribe(evt =>\n                {\n                    var provider = clbProviders.SelectedItem as Provider;\n                    provider.SelectedAreas.Clear();\n                    foreach (string item in clbAreas.CheckedItems)\n                    {\n                        provider.SelectedAreas.Add(item);\n                    }\n\n                    VerifyFinish();\n                }));\n        }\n\n        private void VerifyFinish()\n        {\n            var data = (AddTraceWizardData)WizardData;\n            data.Providers.Clear();\n            foreach (Provider provider in clbProviders.CheckedItems)\n            {\n                data.Providers.Add(provider);\n            }\n\n            UpdateWizard();\n        }\n\n        protected override void Activate()\n        {\n            base.Activate();\n            _initialized = false;\n            var data = (AddTraceWizardData)WizardData;\n            foreach (var provider in data.Providers)\n            {\n                if (!data.Editing)\n                {\n                    // IMPORTANT: select all providers and areas for new rule.\n                    provider.Selected = true;\n                    provider.SelectedAreas.AddRange(provider.Areas);\n                }\n\n                clbProviders.Items.Add(provider, provider.Selected);\n            }\n\n            cbVerbosity.Enabled = false;\n            _initialized = true;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/Wizards/AddTraceWizard/ProvidersPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "JexusManager.Features.TraceFailedRequests/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\"/>\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\"/>\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\"/></startup></configuration>\n"
  },
  {
    "path": "JexusManager.Notifications/JexusManager.Notifications.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net9.0-windows10.0.17763.0</TargetFrameworks>\n    <UseWindowsForms>true</UseWindowsForms>\n    <LangVersion>latest</LangVersion>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>..\\JexusManager\\JexusManager.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n\n</Project>"
  },
  {
    "path": "JexusManager.Notifications/NotificationControl.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Drawing.Drawing2D;\nusing System.Drawing.Imaging;\nusing System.Windows.Forms;\n\nnamespace JexusManager.Notifications\n{\n    /// <summary>\n    /// A control that displays notifications similar to Teams messages\n    /// </summary>\n    public class NotificationControl : Control\n    {\n        private readonly Timer _fadeTimer = new Timer();\n        private readonly int _displayDuration;\n        private readonly int _fadeDuration;\n        private double _opacity = 1.0;\n        private readonly Color _backColor;\n        private readonly Color _borderColor;\n        private readonly Color _textColor;\n        private readonly string _title;\n        private readonly string _message;\n        private readonly Image _icon;\n        private readonly Action _clickAction;\n        private readonly Font _titleFont;\n        private readonly Font _messageFont;\n        private bool _isFading;\n        private readonly NotificationType _type;\n        \n        /// <summary>\n        /// The type of notification to display\n        /// </summary>\n        public enum NotificationType\n        {\n            /// <summary>\n            /// Information notification\n            /// </summary>\n            Info,\n            \n            /// <summary>\n            /// Success notification\n            /// </summary>\n            Success,\n            \n            /// <summary>\n            /// Warning notification\n            /// </summary>\n            Warning,\n            \n            /// <summary>\n            /// Error notification\n            /// </summary>\n            Error\n        }\n        \n        /// <summary>\n        /// Creates a new notification control\n        /// </summary>\n        /// <param name=\"title\">Title of the notification</param>\n        /// <param name=\"message\">Message content</param>\n        /// <param name=\"type\">Type of notification</param>\n        /// <param name=\"displayDuration\">How long to display in milliseconds</param>\n        /// <param name=\"fadeDuration\">How long to fade out in milliseconds</param>\n        /// <param name=\"clickAction\">Optional action to perform when clicked</param>\n        public NotificationControl(string title, string message, NotificationType type = NotificationType.Info,\n            int displayDuration = 5000, int fadeDuration = 500, Action clickAction = null)\n        {\n            _title = title;\n            _message = message;\n            _type = type;\n            _displayDuration = displayDuration;\n            _fadeDuration = fadeDuration;\n            _clickAction = clickAction;\n\n            // Set up default sizes and styling\n            Width = 300;\n            Height = 80;\n            DoubleBuffered = true;\n            \n            // Determine styling based on notification type\n            switch (type)\n            {\n                case NotificationType.Success:\n                    _backColor = Color.FromArgb(232, 245, 233);\n                    _borderColor = Color.FromArgb(76, 175, 80);\n                    _textColor = Color.FromArgb(30, 70, 32);\n                    _icon = SystemIcons.Information.ToBitmap();\n                    break;\n                case NotificationType.Warning:\n                    _backColor = Color.FromArgb(255, 243, 224);\n                    _borderColor = Color.FromArgb(255, 152, 0);\n                    _textColor = Color.FromArgb(102, 60, 0);\n                    _icon = SystemIcons.Warning.ToBitmap();\n                    break;\n                case NotificationType.Error:\n                    _backColor = Color.FromArgb(253, 236, 234);\n                    _borderColor = Color.FromArgb(244, 67, 54);\n                    _textColor = Color.FromArgb(97, 26, 21);\n                    _icon = SystemIcons.Error.ToBitmap();\n                    break;\n                case NotificationType.Info:\n                default:\n                    _backColor = Color.FromArgb(227, 242, 253);\n                    _borderColor = Color.FromArgb(33, 150, 243);\n                    _textColor = Color.FromArgb(13, 71, 161);\n                    _icon = SystemIcons.Information.ToBitmap();\n                    break;\n            }\n\n            // Font settings\n            _titleFont = new Font(Font.FontFamily, 10f, FontStyle.Bold);\n            _messageFont = new Font(Font.FontFamily, 9f);\n            \n            // Set up the timer for auto-dismiss\n            _fadeTimer.Interval = 50;\n            _fadeTimer.Tick += FadeTimer_Tick;\n            \n            // Handle clicks on the notification\n            Click += NotificationControl_Click;\n        }\n        \n        /// <summary>\n        /// Starts the display and fade out timers\n        /// </summary>\n        public new void Show()\n        {\n            // Reset opacity\n            _opacity = 1.0;\n            Visible = true;\n            \n            // Start the timer to begin the fade after display duration\n            if (_displayDuration > 0)\n            {\n                Timer displayTimer = new Timer { Interval = _displayDuration };\n                displayTimer.Tick += (sender, args) =>\n                {\n                    displayTimer.Stop();\n                    StartFade();\n                };\n                displayTimer.Start();\n            }\n        }\n\n        /// <summary>\n        /// Begins the fade out animation\n        /// </summary>\n        public void StartFade()\n        {\n            if (_fadeDuration > 0)\n            {\n                _isFading = true;\n                _fadeTimer.Start();\n            }\n            else\n            {\n                // If no fade, just hide immediately\n                Visible = false;\n                Parent?.Controls.Remove(this);\n                Dispose();\n            }\n        }\n        \n        private void FadeTimer_Tick(object sender, EventArgs e)\n        {\n            // Reduce opacity gradually\n            _opacity -= 1.0 / (_fadeDuration / _fadeTimer.Interval);\n            \n            if (_opacity <= 0)\n            {\n                _opacity = 0;\n                _fadeTimer.Stop();\n                Visible = false;\n                Parent?.Controls.Remove(this);\n                Dispose();\n            }\n            \n            Invalidate();\n        }\n        \n        private void NotificationControl_Click(object sender, EventArgs e)\n        {\n            _clickAction?.Invoke();\n            \n            // Stop fading if currently fading\n            if (_isFading)\n            {\n                _fadeTimer.Stop();\n            }\n            \n            // Hide and dispose the notification\n            Visible = false;\n            Parent?.Controls.Remove(this);\n            Dispose();\n        }\n\n        /// <summary>\n        /// Paints the notification\n        /// </summary>\n        protected override void OnPaint(PaintEventArgs e)\n        {\n            base.OnPaint(e);\n\n            Graphics g = e.Graphics;\n            g.SmoothingMode = SmoothingMode.AntiAlias;\n            \n            // Apply opacity\n            ColorMatrix matrix = new ColorMatrix { Matrix33 = (float)_opacity };\n            ImageAttributes attributes = new ImageAttributes();\n            attributes.SetColorMatrix(matrix);\n            \n            // Define the rounded rectangle path\n            GraphicsPath path = new GraphicsPath();\n            int radius = 6;\n            Rectangle rect = new Rectangle(0, 0, Width - 1, Height - 1);\n            \n            // Top left corner\n            path.AddArc(rect.X, rect.Y, radius * 2, radius * 2, 180, 90);\n            \n            // Top right corner\n            path.AddArc(rect.Right - radius * 2, rect.Y, radius * 2, radius * 2, 270, 90);\n            \n            // Bottom right corner\n            path.AddArc(rect.Right - radius * 2, rect.Bottom - radius * 2, radius * 2, radius * 2, 0, 90);\n            \n            // Bottom left corner\n            path.AddArc(rect.X, rect.Bottom - radius * 2, radius * 2, radius * 2, 90, 90);\n            \n            path.CloseAllFigures();\n            \n            // Fill the background\n            using (SolidBrush brush = new SolidBrush(Color.FromArgb((int)(_opacity * 255), _backColor)))\n            {\n                g.FillPath(brush, path);\n            }\n            \n            // Draw the border\n            using (Pen pen = new Pen(Color.FromArgb((int)(_opacity * 255), _borderColor), 2))\n            {\n                g.DrawPath(pen, path);\n            }\n            \n            // Left side color bar\n            using (SolidBrush brush = new SolidBrush(Color.FromArgb((int)(_opacity * 255), _borderColor)))\n            {\n                g.FillRectangle(brush, new Rectangle(1, 1, 5, Height - 2));\n            }\n            \n            // Draw icon if available\n            if (_icon != null)\n            {\n                g.DrawImage(_icon, new Rectangle(15, 10, 24, 24));\n            }\n            \n            // Draw title\n            using (SolidBrush brush = new SolidBrush(Color.FromArgb((int)(_opacity * 255), _textColor)))\n            {\n                g.DrawString(_title, _titleFont, brush, new PointF(50, 10));\n                \n                // Draw message\n                g.DrawString(_message, _messageFont, brush, new RectangleF(50, 32, Width - 60, Height - 40));\n            }\n            \n            // Draw close button\n            using (Pen pen = new Pen(Color.FromArgb((int)(_opacity * 200), _textColor), 2))\n            {\n                // X shape for close button\n                g.DrawLine(pen, Width - 18, 12, Width - 12, 18);\n                g.DrawLine(pen, Width - 18, 18, Width - 12, 12);\n            }\n        }\n\n        /// <summary>\n        /// Handles disposal of resources\n        /// </summary>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                _fadeTimer.Stop();\n                _fadeTimer.Dispose();\n                _titleFont.Dispose();\n                _messageFont.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Notifications/NotificationManager.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Windows.Forms;\n\nnamespace JexusManager.Notifications\n{\n    /// <summary>\n    /// Manager class for displaying multiple notifications\n    /// </summary>\n    public class NotificationManager\n    {\n        private static readonly Dictionary<Form, NotificationManager> Instances = new Dictionary<Form, NotificationManager>();\n        private readonly Form _parentForm;\n        private readonly List<NotificationControl> _activeNotifications = new List<NotificationControl>();\n        private readonly int _spacing = 10;\n        private readonly NotificationPosition _position;\n        \n        /// <summary>\n        /// Position for notifications on screen\n        /// </summary>\n        public enum NotificationPosition\n        {\n            /// <summary>\n            /// Bottom right corner\n            /// </summary>\n            BottomRight,\n            \n            /// <summary>\n            /// Bottom left corner\n            /// </summary>\n            BottomLeft,\n            \n            /// <summary>\n            /// Top right corner\n            /// </summary>\n            TopRight,\n            \n            /// <summary>\n            /// Top left corner\n            /// </summary>\n            TopLeft,\n            \n            /// <summary>\n            /// Bottom center\n            /// </summary>\n            BottomCenter\n        }\n\n        /// <summary>\n        /// Gets the notification manager for a specific form\n        /// </summary>\n        /// <param name=\"form\">Parent form</param>\n        /// <param name=\"position\">Position for notifications</param>\n        /// <returns>Notification manager instance</returns>\n        public static NotificationManager GetInstance(Form form, NotificationPosition position = NotificationPosition.BottomRight)\n        {\n            if (!Instances.TryGetValue(form, out var manager))\n            {\n                manager = new NotificationManager(form, position);\n                Instances.Add(form, manager);\n\n                // Add handler to clean up the instance when form is closed\n                form.FormClosed += (sender, args) =>\n                {\n                    if (sender is Form closedForm && Instances.ContainsKey(closedForm))\n                    {\n                        Instances.Remove(closedForm);\n                    }\n                };\n            }\n            \n            return manager;\n        }\n\n        private NotificationManager(Form parentForm, NotificationPosition position)\n        {\n            _parentForm = parentForm;\n            _position = position;\n        }\n\n        /// <summary>\n        /// Shows a notification\n        /// </summary>\n        /// <param name=\"title\">Notification title</param>\n        /// <param name=\"message\">Notification message content</param>\n        /// <param name=\"type\">Type of notification</param>\n        /// <param name=\"displayDuration\">How long to display in milliseconds</param>\n        /// <param name=\"fadeDuration\">How long to fade out in milliseconds</param>\n        /// <param name=\"clickAction\">Optional action to perform when notification is clicked</param>\n        /// <returns>The created notification control</returns>\n        public NotificationControl Show(string title, string message, \n            NotificationControl.NotificationType type = NotificationControl.NotificationType.Info, \n            int displayDuration = 5000, int fadeDuration = 500, Action clickAction = null)\n        {\n            // Create the notification control\n            var notification = new NotificationControl(title, message, type, displayDuration, fadeDuration, clickAction)\n            {\n                Visible = false // Will be shown after positioning\n            };\n            \n            _parentForm.BeginInvoke(new Action(() =>\n            {\n                // Add to parent form\n                _parentForm.Controls.Add(notification);\n                notification.BringToFront();\n                \n                // Add to active notifications and position\n                _activeNotifications.Add(notification);\n                \n                // Register for removal\n                notification.Disposed += (sender, args) =>\n                {\n                    if (sender is NotificationControl n)\n                    {\n                        _activeNotifications.Remove(n);\n                        RepositionNotifications();\n                    }\n                };\n                \n                RepositionNotifications();\n                notification.Show();\n            }));\n            \n            return notification;\n        }\n\n        /// <summary>\n        /// Recalculate and reposition all active notifications\n        /// </summary>\n        private void RepositionNotifications()\n        {\n            // If there are no notifications, nothing to reposition\n            if (_activeNotifications.Count == 0)\n            {\n                return;\n            }\n            \n            int x = _spacing;\n            int y = _spacing;\n            int notificationWidth = _activeNotifications[0].Width;\n            int notificationHeight = _activeNotifications[0].Height;\n            \n            // Set starting position based on parent form and notification position setting\n            switch (_position)\n            {\n                case NotificationPosition.BottomRight:\n                    x = _parentForm.ClientSize.Width - notificationWidth - _spacing;\n                    y = _parentForm.ClientSize.Height - notificationHeight - _spacing;\n                    break;\n                    \n                case NotificationPosition.BottomLeft:\n                    x = _spacing;\n                    y = _parentForm.ClientSize.Height - notificationHeight - _spacing;\n                    break;\n                    \n                case NotificationPosition.BottomCenter:\n                    x = (_parentForm.ClientSize.Width - notificationWidth) / 2;\n                    y = _parentForm.ClientSize.Height - notificationHeight - _spacing;\n                    break;\n                    \n                case NotificationPosition.TopRight:\n                    x = _parentForm.ClientSize.Width - notificationWidth - _spacing;\n                    y = _spacing;\n                    break;\n                    \n                case NotificationPosition.TopLeft:\n                    x = _spacing;\n                    y = _spacing;\n                    break;\n            }\n\n            // Position all notifications\n            for (int i = 0; i < _activeNotifications.Count; i++)\n            {\n                var notification = _activeNotifications[i];\n                \n                switch (_position)\n                {\n                    case NotificationPosition.BottomRight:\n                    case NotificationPosition.BottomLeft:\n                    case NotificationPosition.BottomCenter:\n                        // Stack upwards from bottom\n                        notification.Location = new Point(x, y - (i * (notification.Height + _spacing)));\n                        break;\n                        \n                    case NotificationPosition.TopRight:\n                    case NotificationPosition.TopLeft:\n                        // Stack downwards from top\n                        notification.Location = new Point(x, y + (i * (notification.Height + _spacing)));\n                        break;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Dismiss all active notifications\n        /// </summary>\n        public void DismissAll()\n        {\n            foreach (var notification in _activeNotifications.ToArray())\n            {\n                notification.StartFade();\n            }\n        }\n    }\n}"
  },
  {
    "path": "JexusManager.Notifications.Demo/JexusManager.Notifications.Demo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net48</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <LangVersion>latest</LangVersion>\n    <ApplicationIcon>..\\JexusManager\\iis.ico</ApplicationIcon>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Notifications\\JexusManager.Notifications.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Windows.Forms\" />\n  </ItemGroup>\n\n</Project>"
  },
  {
    "path": "JexusManager.Notifications.Demo/JexusManager.Notifications.Demo.slnx",
    "content": "<Solution>\n  <Project Path=\"../JexusManager.Notifications/JexusManager.Notifications.csproj\" />\n  <Project Path=\"JexusManager.Notifications.Demo.csproj\" />\n</Solution>\n"
  },
  {
    "path": "JexusManager.Notifications.Demo/MainForm.Designer.cs",
    "content": "namespace JexusManager.Notifications.Demo\n{\n    partial class MainForm\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.btnInfo = new System.Windows.Forms.Button();\n            this.btnSuccess = new System.Windows.Forms.Button();\n            this.btnWarning = new System.Windows.Forms.Button();\n            this.btnError = new System.Windows.Forms.Button();\n            this.grpCustom = new System.Windows.Forms.GroupBox();\n            this.btnCustomMessage = new System.Windows.Forms.Button();\n            this.txtMessage = new System.Windows.Forms.TextBox();\n            this.lblMessage = new System.Windows.Forms.Label();\n            this.txtTitle = new System.Windows.Forms.TextBox();\n            this.lblTitle = new System.Windows.Forms.Label();\n            this.grpSettings = new System.Windows.Forms.GroupBox();\n            this.numFadeDuration = new System.Windows.Forms.NumericUpDown();\n            this.lblFadeDuration = new System.Windows.Forms.Label();\n            this.numDuration = new System.Windows.Forms.NumericUpDown();\n            this.lblDuration = new System.Windows.Forms.Label();\n            this.grpType = new System.Windows.Forms.GroupBox();\n            this.rbError = new System.Windows.Forms.RadioButton();\n            this.rbWarning = new System.Windows.Forms.RadioButton();\n            this.rbSuccess = new System.Windows.Forms.RadioButton();\n            this.rbInfo = new System.Windows.Forms.RadioButton();\n            this.grpPosition = new System.Windows.Forms.GroupBox();\n            this.rbTopLeft = new System.Windows.Forms.RadioButton();\n            this.rbTopRight = new System.Windows.Forms.RadioButton();\n            this.rbBottomLeft = new System.Windows.Forms.RadioButton();\n            this.rbBottomRight = new System.Windows.Forms.RadioButton();\n            this.rbBottomCenter = new System.Windows.Forms.RadioButton();\n            this.btnChangePosition = new System.Windows.Forms.Button();\n            this.lblCurrentPosition = new System.Windows.Forms.Label();\n            this.btnDismissAll = new System.Windows.Forms.Button();\n            this.chkShowClickMessage = new System.Windows.Forms.CheckBox();\n            this.grpQuickNotifications = new System.Windows.Forms.GroupBox();\n            this.lblDescription = new System.Windows.Forms.Label();\n            this.grpCustom.SuspendLayout();\n            this.grpSettings.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.numFadeDuration)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.numDuration)).BeginInit();\n            this.grpType.SuspendLayout();\n            this.grpPosition.SuspendLayout();\n            this.grpQuickNotifications.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // btnInfo\n            // \n            this.btnInfo.Location = new System.Drawing.Point(17, 30);\n            this.btnInfo.Name = \"btnInfo\";\n            this.btnInfo.Size = new System.Drawing.Size(120, 30);\n            this.btnInfo.TabIndex = 0;\n            this.btnInfo.Text = \"Info Notification\";\n            this.btnInfo.UseVisualStyleBackColor = true;\n            this.btnInfo.Click += new System.EventHandler(this.btnInfo_Click);\n            // \n            // btnSuccess\n            // \n            this.btnSuccess.Location = new System.Drawing.Point(143, 30);\n            this.btnSuccess.Name = \"btnSuccess\";\n            this.btnSuccess.Size = new System.Drawing.Size(120, 30);\n            this.btnSuccess.TabIndex = 1;\n            this.btnSuccess.Text = \"Success Notification\";\n            this.btnSuccess.UseVisualStyleBackColor = true;\n            this.btnSuccess.Click += new System.EventHandler(this.btnSuccess_Click);\n            // \n            // btnWarning\n            // \n            this.btnWarning.Location = new System.Drawing.Point(17, 66);\n            this.btnWarning.Name = \"btnWarning\";\n            this.btnWarning.Size = new System.Drawing.Size(120, 30);\n            this.btnWarning.TabIndex = 2;\n            this.btnWarning.Text = \"Warning Notification\";\n            this.btnWarning.UseVisualStyleBackColor = true;\n            this.btnWarning.Click += new System.EventHandler(this.btnWarning_Click);\n            // \n            // btnError\n            // \n            this.btnError.Location = new System.Drawing.Point(143, 66);\n            this.btnError.Name = \"btnError\";\n            this.btnError.Size = new System.Drawing.Size(120, 30);\n            this.btnError.TabIndex = 3;\n            this.btnError.Text = \"Error Notification\";\n            this.btnError.UseVisualStyleBackColor = true;\n            this.btnError.Click += new System.EventHandler(this.btnError_Click);\n            // \n            // grpCustom\n            // \n            this.grpCustom.Controls.Add(this.btnCustomMessage);\n            this.grpCustom.Controls.Add(this.txtMessage);\n            this.grpCustom.Controls.Add(this.lblMessage);\n            this.grpCustom.Controls.Add(this.txtTitle);\n            this.grpCustom.Controls.Add(this.lblTitle);\n            this.grpCustom.Location = new System.Drawing.Point(12, 214);\n            this.grpCustom.Name = \"grpCustom\";\n            this.grpCustom.Size = new System.Drawing.Size(552, 146);\n            this.grpCustom.TabIndex = 4;\n            this.grpCustom.TabStop = false;\n            this.grpCustom.Text = \"Custom Notification\";\n            // \n            // btnCustomMessage\n            // \n            this.btnCustomMessage.Location = new System.Drawing.Point(417, 102);\n            this.btnCustomMessage.Name = \"btnCustomMessage\";\n            this.btnCustomMessage.Size = new System.Drawing.Size(120, 30);\n            this.btnCustomMessage.TabIndex = 4;\n            this.btnCustomMessage.Text = \"Show Notification\";\n            this.btnCustomMessage.UseVisualStyleBackColor = true;\n            this.btnCustomMessage.Click += new System.EventHandler(this.btnCustomMessage_Click);\n            // \n            // txtMessage\n            // \n            this.txtMessage.Location = new System.Drawing.Point(86, 61);\n            this.txtMessage.Multiline = true;\n            this.txtMessage.Name = \"txtMessage\";\n            this.txtMessage.Size = new System.Drawing.Size(451, 35);\n            this.txtMessage.TabIndex = 3;\n            // \n            // lblMessage\n            // \n            this.lblMessage.AutoSize = true;\n            this.lblMessage.Location = new System.Drawing.Point(14, 64);\n            this.lblMessage.Name = \"lblMessage\";\n            this.lblMessage.Size = new System.Drawing.Size(66, 17);\n            this.lblMessage.TabIndex = 2;\n            this.lblMessage.Text = \"Message:\";\n            // \n            // txtTitle\n            // \n            this.txtTitle.Location = new System.Drawing.Point(86, 28);\n            this.txtTitle.Name = \"txtTitle\";\n            this.txtTitle.Size = new System.Drawing.Size(451, 22);\n            this.txtTitle.TabIndex = 1;\n            // \n            // lblTitle\n            // \n            this.lblTitle.AutoSize = true;\n            this.lblTitle.Location = new System.Drawing.Point(14, 31);\n            this.lblTitle.Name = \"lblTitle\";\n            this.lblTitle.Size = new System.Drawing.Size(39, 17);\n            this.lblTitle.TabIndex = 0;\n            this.lblTitle.Text = \"Title:\";\n            // \n            // grpSettings\n            // \n            this.grpSettings.Controls.Add(this.numFadeDuration);\n            this.grpSettings.Controls.Add(this.lblFadeDuration);\n            this.grpSettings.Controls.Add(this.numDuration);\n            this.grpSettings.Controls.Add(this.lblDuration);\n            this.grpSettings.Location = new System.Drawing.Point(12, 366);\n            this.grpSettings.Name = \"grpSettings\";\n            this.grpSettings.Size = new System.Drawing.Size(268, 100);\n            this.grpSettings.TabIndex = 5;\n            this.grpSettings.TabStop = false;\n            this.grpSettings.Text = \"Duration Settings\";\n            // \n            // numFadeDuration\n            // \n            this.numFadeDuration.Location = new System.Drawing.Point(121, 62);\n            this.numFadeDuration.Maximum = new decimal(new int[] {\n            5000,\n            0,\n            0,\n            0});\n            this.numFadeDuration.Minimum = new decimal(new int[] {\n            100,\n            0,\n            0,\n            0});\n            this.numFadeDuration.Name = \"numFadeDuration\";\n            this.numFadeDuration.Size = new System.Drawing.Size(120, 22);\n            this.numFadeDuration.TabIndex = 3;\n            this.numFadeDuration.Value = new decimal(new int[] {\n            500,\n            0,\n            0,\n            0});\n            // \n            // lblFadeDuration\n            // \n            this.lblFadeDuration.AutoSize = true;\n            this.lblFadeDuration.Location = new System.Drawing.Point(14, 64);\n            this.lblFadeDuration.Name = \"lblFadeDuration\";\n            this.lblFadeDuration.Size = new System.Drawing.Size(101, 17);\n            this.lblFadeDuration.TabIndex = 2;\n            this.lblFadeDuration.Text = \"Fade Duration:\";\n            // \n            // numDuration\n            // \n            this.numDuration.Location = new System.Drawing.Point(121, 29);\n            this.numDuration.Maximum = new decimal(new int[] {\n            60,\n            0,\n            0,\n            0});\n            this.numDuration.Minimum = new decimal(new int[] {\n            1,\n            0,\n            0,\n            0});\n            this.numDuration.Name = \"numDuration\";\n            this.numDuration.Size = new System.Drawing.Size(120, 22);\n            this.numDuration.TabIndex = 1;\n            this.numDuration.Value = new decimal(new int[] {\n            5,\n            0,\n            0,\n            0});\n            // \n            // lblDuration\n            // \n            this.lblDuration.AutoSize = true;\n            this.lblDuration.Location = new System.Drawing.Point(14, 31);\n            this.lblDuration.Name = \"lblDuration\";\n            this.lblDuration.Size = new System.Drawing.Size(101, 17);\n            this.lblDuration.TabIndex = 0;\n            this.lblDuration.Text = \"Duration (sec):\";\n            // \n            // grpType\n            // \n            this.grpType.Controls.Add(this.rbError);\n            this.grpType.Controls.Add(this.rbWarning);\n            this.grpType.Controls.Add(this.rbSuccess);\n            this.grpType.Controls.Add(this.rbInfo);\n            this.grpType.Location = new System.Drawing.Point(286, 366);\n            this.grpType.Name = \"grpType\";\n            this.grpType.Size = new System.Drawing.Size(278, 100);\n            this.grpType.TabIndex = 6;\n            this.grpType.TabStop = false;\n            this.grpType.Text = \"Notification Type\";\n            // \n            // rbError\n            // \n            this.rbError.AutoSize = true;\n            this.rbError.Location = new System.Drawing.Point(143, 62);\n            this.rbError.Name = \"rbError\";\n            this.rbError.Size = new System.Drawing.Size(58, 21);\n            this.rbError.TabIndex = 3;\n            this.rbError.Text = \"Error\";\n            this.rbError.UseVisualStyleBackColor = true;\n            // \n            // rbWarning\n            // \n            this.rbWarning.AutoSize = true;\n            this.rbWarning.Location = new System.Drawing.Point(17, 62);\n            this.rbWarning.Name = \"rbWarning\";\n            this.rbWarning.Size = new System.Drawing.Size(83, 21);\n            this.rbWarning.TabIndex = 2;\n            this.rbWarning.Text = \"Warning\";\n            this.rbWarning.UseVisualStyleBackColor = true;\n            // \n            // rbSuccess\n            // \n            this.rbSuccess.AutoSize = true;\n            this.rbSuccess.Location = new System.Drawing.Point(143, 29);\n            this.rbSuccess.Name = \"rbSuccess\";\n            this.rbSuccess.Size = new System.Drawing.Size(82, 21);\n            this.rbSuccess.TabIndex = 1;\n            this.rbSuccess.Text = \"Success\";\n            this.rbSuccess.UseVisualStyleBackColor = true;\n            // \n            // rbInfo\n            // \n            this.rbInfo.AutoSize = true;\n            this.rbInfo.Checked = true;\n            this.rbInfo.Location = new System.Drawing.Point(17, 29);\n            this.rbInfo.Name = \"rbInfo\";\n            this.rbInfo.Size = new System.Drawing.Size(51, 21);\n            this.rbInfo.TabIndex = 0;\n            this.rbInfo.TabStop = true;\n            this.rbInfo.Text = \"Info\";\n            this.rbInfo.UseVisualStyleBackColor = true;\n            // \n            // grpPosition\n            // \n            this.grpPosition.Controls.Add(this.rbTopLeft);\n            this.grpPosition.Controls.Add(this.rbTopRight);\n            this.grpPosition.Controls.Add(this.rbBottomLeft);\n            this.grpPosition.Controls.Add(this.rbBottomRight);\n            this.grpPosition.Controls.Add(this.rbBottomCenter);\n            this.grpPosition.Controls.Add(this.btnChangePosition);\n            this.grpPosition.Location = new System.Drawing.Point(12, 472);\n            this.grpPosition.Name = \"grpPosition\";\n            this.grpPosition.Size = new System.Drawing.Size(552, 122);\n            this.grpPosition.TabIndex = 7;\n            this.grpPosition.TabStop = false;\n            this.grpPosition.Text = \"Notification Position\";\n            // \n            // rbTopLeft\n            // \n            this.rbTopLeft.AutoSize = true;\n            this.rbTopLeft.Location = new System.Drawing.Point(143, 62);\n            this.rbTopLeft.Name = \"rbTopLeft\";\n            this.rbTopLeft.Size = new System.Drawing.Size(82, 21);\n            this.rbTopLeft.TabIndex = 7;\n            this.rbTopLeft.Text = \"Top Left\";\n            this.rbTopLeft.UseVisualStyleBackColor = true;\n            // \n            // rbTopRight\n            // \n            this.rbTopRight.AutoSize = true;\n            this.rbTopRight.Location = new System.Drawing.Point(17, 62);\n            this.rbTopRight.Name = \"rbTopRight\";\n            this.rbTopRight.Size = new System.Drawing.Size(91, 21);\n            this.rbTopRight.TabIndex = 6;\n            this.rbTopRight.Text = \"Top Right\";\n            this.rbTopRight.UseVisualStyleBackColor = true;\n            // \n            // rbBottomLeft\n            // \n            this.rbBottomLeft.AutoSize = true;\n            this.rbBottomLeft.Location = new System.Drawing.Point(143, 29);\n            this.rbBottomLeft.Name = \"rbBottomLeft\";\n            this.rbBottomLeft.Size = new System.Drawing.Size(102, 21);\n            this.rbBottomLeft.TabIndex = 5;\n            this.rbBottomLeft.Text = \"Bottom Left\";\n            this.rbBottomLeft.UseVisualStyleBackColor = true;\n            // \n            // rbBottomRight\n            // \n            this.rbBottomRight.AutoSize = true;\n            this.rbBottomRight.Checked = true;\n            this.rbBottomRight.Location = new System.Drawing.Point(17, 29);\n            this.rbBottomRight.Name = \"rbBottomRight\";\n            this.rbBottomRight.Size = new System.Drawing.Size(111, 21);\n            this.rbBottomRight.TabIndex = 4;\n            this.rbBottomRight.TabStop = true;\n            this.rbBottomRight.Text = \"Bottom Right\";\n            this.rbBottomRight.UseVisualStyleBackColor = true;\n            // \n            // rbBottomCenter\n            // \n            this.rbBottomCenter.AutoSize = true;\n            this.rbBottomCenter.Location = new System.Drawing.Point(17, 95);\n            this.rbBottomCenter.Name = \"rbBottomCenter\";\n            this.rbBottomCenter.Size = new System.Drawing.Size(122, 21);\n            this.rbBottomCenter.TabIndex = 8;\n            this.rbBottomCenter.Text = \"Bottom Center\";\n            this.rbBottomCenter.UseVisualStyleBackColor = true;\n            // \n            // btnChangePosition\n            // \n            this.btnChangePosition.Location = new System.Drawing.Point(295, 29);\n            this.btnChangePosition.Name = \"btnChangePosition\";\n            this.btnChangePosition.Size = new System.Drawing.Size(242, 30);\n            this.btnChangePosition.TabIndex = 5;\n            this.btnChangePosition.Text = \"Apply Position Change\";\n            this.btnChangePosition.UseVisualStyleBackColor = true;\n            this.btnChangePosition.Click += new System.EventHandler(this.btnChangePosition_Click);\n            // \n            // lblCurrentPosition\n            // \n            this.lblCurrentPosition.AutoSize = true;\n            this.lblCurrentPosition.Location = new System.Drawing.Point(307, 511);\n            this.lblCurrentPosition.Name = \"lblCurrentPosition\";\n            this.lblCurrentPosition.Size = new System.Drawing.Size(176, 17);\n            this.lblCurrentPosition.TabIndex = 6;\n            this.lblCurrentPosition.Text = \"Current Position: BottomRight\";\n            // \n            // btnDismissAll\n            // \n            this.btnDismissAll.Location = new System.Drawing.Point(295, 62);\n            this.btnDismissAll.Name = \"btnDismissAll\";\n            this.btnDismissAll.Size = new System.Drawing.Size(242, 30);\n            this.btnDismissAll.TabIndex = 6;\n            this.btnDismissAll.Text = \"Dismiss All Notifications\";\n            this.btnDismissAll.UseVisualStyleBackColor = true;\n            this.btnDismissAll.Click += new System.EventHandler(this.btnDismissAll_Click);\n            // \n            // chkShowClickMessage\n            // \n            this.chkShowClickMessage.AutoSize = true;\n            this.chkShowClickMessage.Location = new System.Drawing.Point(12, 578);\n            this.chkShowClickMessage.Name = \"chkShowClickMessage\";\n            this.chkShowClickMessage.Size = new System.Drawing.Size(235, 21);\n            this.chkShowClickMessage.TabIndex = 8;\n            this.chkShowClickMessage.Text = \"Show message when notification clicked\";\n            this.chkShowClickMessage.UseVisualStyleBackColor = true;\n            // \n            // grpQuickNotifications\n            // \n            this.grpQuickNotifications.Controls.Add(this.btnInfo);\n            this.grpQuickNotifications.Controls.Add(this.btnSuccess);\n            this.grpQuickNotifications.Controls.Add(this.btnDismissAll);\n            this.grpQuickNotifications.Controls.Add(this.btnWarning);\n            this.grpQuickNotifications.Controls.Add(this.btnError);\n            this.grpQuickNotifications.Location = new System.Drawing.Point(12, 95);\n            this.grpQuickNotifications.Name = \"grpQuickNotifications\";\n            this.grpQuickNotifications.Size = new System.Drawing.Size(552, 113);\n            this.grpQuickNotifications.TabIndex = 9;\n            this.grpQuickNotifications.TabStop = false;\n            this.grpQuickNotifications.Text = \"Quick Notifications\";\n            // \n            // lblDescription\n            // \n            this.lblDescription.Font = new System.Drawing.Font(\"Microsoft Sans Serif\", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));\n            this.lblDescription.Location = new System.Drawing.Point(12, 9);\n            this.lblDescription.Name = \"lblDescription\";\n            this.lblDescription.Size = new System.Drawing.Size(552, 83);\n            this.lblDescription.TabIndex = 10;\n            this.lblDescription.Text = \"This demo shows how to use the JexusManager.Notifications control to display notif\" +\n    \"ications similar to Microsoft Teams. Use the options below to try different notif\" +\n    \"ication types and settings.\";\n            // \n            // MainForm\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(576, 611);\n            this.Controls.Add(this.lblDescription);\n            this.Controls.Add(this.grpQuickNotifications);\n            this.Controls.Add(this.chkShowClickMessage);\n            this.Controls.Add(this.lblCurrentPosition);\n            this.Controls.Add(this.grpPosition);\n            this.Controls.Add(this.grpType);\n            this.Controls.Add(this.grpSettings);\n            this.Controls.Add(this.grpCustom);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;\n            this.MaximizeBox = false;\n            this.Name = \"MainForm\";\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\n            this.Text = \"Notification Control Demo\";\n            this.grpCustom.ResumeLayout(false);\n            this.grpCustom.PerformLayout();\n            this.grpSettings.ResumeLayout(false);\n            this.grpSettings.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.numFadeDuration)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.numDuration)).EndInit();\n            this.grpType.ResumeLayout(false);\n            this.grpType.PerformLayout();\n            this.grpPosition.ResumeLayout(false);\n            this.grpPosition.PerformLayout();\n            this.grpQuickNotifications.ResumeLayout(false);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Button btnInfo;\n        private System.Windows.Forms.Button btnSuccess;\n        private System.Windows.Forms.Button btnWarning;\n        private System.Windows.Forms.Button btnError;\n        private System.Windows.Forms.GroupBox grpCustom;\n        private System.Windows.Forms.Button btnCustomMessage;\n        private System.Windows.Forms.TextBox txtMessage;\n        private System.Windows.Forms.Label lblMessage;\n        private System.Windows.Forms.TextBox txtTitle;\n        private System.Windows.Forms.Label lblTitle;\n        private System.Windows.Forms.GroupBox grpSettings;\n        private System.Windows.Forms.NumericUpDown numFadeDuration;\n        private System.Windows.Forms.Label lblFadeDuration;\n        private System.Windows.Forms.NumericUpDown numDuration;\n        private System.Windows.Forms.Label lblDuration;\n        private System.Windows.Forms.GroupBox grpType;\n        private System.Windows.Forms.RadioButton rbError;\n        private System.Windows.Forms.RadioButton rbWarning;\n        private System.Windows.Forms.RadioButton rbSuccess;\n        private System.Windows.Forms.RadioButton rbInfo;\n        private System.Windows.Forms.GroupBox grpPosition;\n        private System.Windows.Forms.RadioButton rbTopLeft;\n        private System.Windows.Forms.RadioButton rbTopRight;\n        private System.Windows.Forms.RadioButton rbBottomLeft;\n        private System.Windows.Forms.RadioButton rbBottomRight;\n        private System.Windows.Forms.RadioButton rbBottomCenter;\n        private System.Windows.Forms.Button btnChangePosition;\n        private System.Windows.Forms.Label lblCurrentPosition;\n        private System.Windows.Forms.Button btnDismissAll;\n        private System.Windows.Forms.CheckBox chkShowClickMessage;\n        private System.Windows.Forms.GroupBox grpQuickNotifications;\n        private System.Windows.Forms.Label lblDescription;\n    }\n}"
  },
  {
    "path": "JexusManager.Notifications.Demo/MainForm.cs",
    "content": "using System;\nusing System.Windows.Forms;\n\nnamespace JexusManager.Notifications.Demo\n{\n    public partial class MainForm : Form\n    {\n        private NotificationManager _notificationManager;\n\n        public MainForm()\n        {\n            InitializeComponent();\n            \n            // Create notification manager with bottom right position\n            _notificationManager = NotificationManager.GetInstance(this, NotificationManager.NotificationPosition.BottomRight);\n        }\n\n        private void btnInfo_Click(object sender, EventArgs e)\n        {\n            ShowNotification(\"Information\", \"This is an information notification.\", \n                NotificationControl.NotificationType.Info);\n        }\n\n        private void btnSuccess_Click(object sender, EventArgs e)\n        {\n            ShowNotification(\"Success\", \"The operation completed successfully.\", \n                NotificationControl.NotificationType.Success);\n        }\n\n        private void btnWarning_Click(object sender, EventArgs e)\n        {\n            ShowNotification(\"Warning\", \"Please be careful with this operation.\", \n                NotificationControl.NotificationType.Warning);\n        }\n\n        private void btnError_Click(object sender, EventArgs e)\n        {\n            ShowNotification(\"Error\", \"An error occurred while performing the operation.\", \n                NotificationControl.NotificationType.Error);\n        }\n\n        private void btnCustomMessage_Click(object sender, EventArgs e)\n        {\n            if (!string.IsNullOrEmpty(txtTitle.Text) && !string.IsNullOrEmpty(txtMessage.Text))\n            {\n                ShowNotification(txtTitle.Text, txtMessage.Text, GetSelectedNotificationType());\n            }\n            else\n            {\n                MessageBox.Show(\"Please enter both a title and a message.\", \"Input Required\", \n                    MessageBoxButtons.OK, MessageBoxIcon.Warning);\n            }\n        }\n\n        private void btnChangePosition_Click(object sender, EventArgs e)\n        {\n            // Create new notification manager with selected position\n            _notificationManager = NotificationManager.GetInstance(this, GetSelectedPosition());\n            lblCurrentPosition.Text = $\"Current Position: {GetSelectedPosition()}\";\n        }\n\n        private void btnDismissAll_Click(object sender, EventArgs e)\n        {\n            _notificationManager.DismissAll();\n        }\n\n        private NotificationControl.NotificationType GetSelectedNotificationType()\n        {\n            if (rbSuccess.Checked)\n                return NotificationControl.NotificationType.Success;\n            if (rbWarning.Checked)\n                return NotificationControl.NotificationType.Warning;\n            if (rbError.Checked)\n                return NotificationControl.NotificationType.Error;\n            \n            return NotificationControl.NotificationType.Info;\n        }\n\n        private NotificationManager.NotificationPosition GetSelectedPosition()\n        {\n            if (rbBottomLeft.Checked)\n                return NotificationManager.NotificationPosition.BottomLeft;\n            if (rbTopRight.Checked)\n                return NotificationManager.NotificationPosition.TopRight;\n            if (rbTopLeft.Checked)\n                return NotificationManager.NotificationPosition.TopLeft;\n            if (rbBottomCenter.Checked)\n                return NotificationManager.NotificationPosition.BottomCenter;\n            \n            return NotificationManager.NotificationPosition.BottomRight;\n        }\n\n        private void ShowNotification(string title, string message, NotificationControl.NotificationType type)\n        {\n            int duration = (int)numDuration.Value * 1000;\n            int fade = (int)numFadeDuration.Value;\n            \n            _notificationManager.Show(title, message, type, duration, fade, () => \n            {\n                if (chkShowClickMessage.Checked)\n                {\n                    MessageBox.Show($\"You clicked a notification: {title}\", \"Notification Clicked\", \n                        MessageBoxButtons.OK, MessageBoxIcon.Information);\n                }\n            });\n        }\n    }\n}"
  },
  {
    "path": "JexusManager.Notifications.Demo/Program.cs",
    "content": "using System;\nusing System.Windows.Forms;\n\nnamespace JexusManager.Notifications.Demo\n{\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new MainForm());\n        }\n    }\n}"
  },
  {
    "path": "JexusManager.Shared/ApplicationExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace JexusManager\n{\n    public static class ApplicationExtensions\n    {\n        public static Site GetSite(this Application application)\n        {\n            return application.Site;\n        }\n\n        public static IDictionary<string, List<string>> GetExtra(this Application application)\n        {\n            return application.Extra;\n        }\n\n        public static string GetPoolName(this Application application)\n        {\n            // TODO: Windows Server 2025 seems to use v4.0 as default and override the schema.\n            var pool = application.Server.ApplicationPools.First(item => item.Name == application.ApplicationPoolName);\n            return $\"{pool.Name} ({pool.ManagedRuntimeVersion})\";\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/BindingUtility.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing Exception = System.Exception;\n\nnamespace Microsoft.Web.Administration\n{\n    using System.Diagnostics;\n    using System.IO;\n    using System.Linq;\n    using System.Net;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Windows.Forms;\n    using Microsoft.Extensions.Logging;\n    using JexusManager;\n    using Org.BouncyCastle.Utilities.Encoders;\n    using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;\n\n    public enum CertificateMappingState\n    {\n        HostNameNotMatched,\n        RegistrationFailed,\n        RegistrationSucceeded,\n        UacCancelled,\n        Win32ErrorOccurred,\n        GenericErrorOccurred,\n        CertificateHashNotMatched,\n        CertificateStoreNotMatched,\n        IpEndPointInvalid,\n    }\n\n    public static class BindingUtility\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"BindingUtility\");\n\n        private const string AppIdIisExpress = \"214124cd-d05b-4309-9af9-9caa44b2b74a\";\n\n        private const string AppIdIis = \"4dc3e181-e14b-4a21-b022-59fc669b0914\";\n        private const string SubjectAlternativeNameOid = \"2.5.29.17\";\n        private const string DnsNamePrefix = \"DNS Name=\";\n\n        internal static void Reinitialize(this Binding original, Binding binding)\n        {\n            if (original.Parent.Parent.Server.SupportsSni)\n            {\n                if (original.GetIsSni() && (!binding.GetIsSni() || original.Host != binding.Host))\n                {\n                    original.CleanUpMapping();\n                }\n\n                original.SslFlags = binding.SslFlags;\n            }\n\n            original.BindingInformation = binding.BindingInformation;\n            original.Protocol = binding.Protocol;\n            original.CertificateHash = binding.CertificateHash;\n            original.CertificateStoreName = binding.CertificateStoreName;\n            binding.Delete();\n        }\n\n        internal static (CertificateMappingState state, string message) FixCertificateMapping(this Binding binding, X509Certificate2 certificate2, bool suppressHostNameMatching = false)\n        {\n            if (binding.Protocol == \"http\")\n            {\n                return (CertificateMappingState.RegistrationSucceeded, null);\n            }\n\n            if (binding.Parent.Parent.Server.SupportsSni)\n            {\n                if (binding.GetIsSni())\n                {\n                    if (!suppressHostNameMatching && !certificate2.MatchHostName(binding.Host))\n                    {\n                        return (CertificateMappingState.HostNameNotMatched, \"SNI mode requires host name matches common name of the certificate\");\n                    }\n\n                    // handle SNI\n                    var sni = NativeMethods.QuerySslSniInfo(new Tuple<string, int>(binding.Host,\n                        binding.EndPoint.Port));\n                    return AddMapping(binding, sni, true);\n                }\n            }\n\n            // handle IP based\n            if (binding.EndPoint == null)\n            {\n                return (CertificateMappingState.IpEndPointInvalid, \"This binding does not have valid IP endpoint\");\n            }\n\n            var certificate = NativeMethods.QuerySslCertificateInfo(binding.EndPoint);\n            return AddMapping(binding, certificate, false);\n        }\n\n        private static (CertificateMappingState state, string message) AddMapping(this Binding binding, NativeMethods.ISslCertificateInfo certificate, bool sni)\n        {\n            var arguments = binding.ToAddMappingArguments(sni);\n            if (certificate == null)\n            {\n                return ManipulateCertificateMapping(arguments);\n            }\n\n            if (!certificate.Hash.SequenceEqual(binding.CertificateHash))\n            {\n                var result =\n                    MessageBox.Show(\n                        \"At least one other site is using the same HTTPS binding and the binding is configured with a different certificate. Are you sure that you want to reuse this HTTPS binding and reassign the other site or sites to use the new certificate?\",\n                        \"TODO\",\n                        MessageBoxButtons.YesNo,\n                        MessageBoxIcon.Question,\n                        MessageBoxDefaultButton.Button1);\n                if (result != DialogResult.Yes)\n                {\n                    return (CertificateMappingState.CertificateHashNotMatched, \"Certificate hash does not match. Please use the certificate that matches HTTPS binding\");\n                }\n\n                return ManipulateCertificateMapping(arguments);\n            }\n\n            if (string.Equals(certificate.StoreName, binding.CertificateStoreName, StringComparison.OrdinalIgnoreCase))\n            {\n                return (CertificateMappingState.RegistrationSucceeded, null);\n            }\n\n            // TODO: can this happen?\n            return (CertificateMappingState.CertificateStoreNotMatched, \"Certificate store name does not match. Please use the certificate that matches HTTPS binding\");\n        }\n\n        private static (CertificateMappingState state, string message) ManipulateCertificateMapping(string arguments)\n        {\n            try\n            {\n                // register mapping\n                using var process = new Process();\n                var start = process.StartInfo;\n                start.Verb = \"runas\";\n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                start.Arguments = arguments;\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                process.Start();\n                process.WaitForExit();\n\n                if (process.ExitCode != 0)\n                {\n                    return (CertificateMappingState.RegistrationFailed, \"Register new certificate failed: access is denied\");\n                }\n\n                return (CertificateMappingState.RegistrationSucceeded, null);\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                var message = NativeMethods.KnownCases(ex.NativeErrorCode);\n                if (string.IsNullOrEmpty(message))\n                {\n                    _logger.LogWarning(ex, \"Win32 error during certificate mapping. Native error code: {Code}\", ex.NativeErrorCode);\n                    return (CertificateMappingState.Win32ErrorOccurred, $\"Register new certificate failed: unknown (native {ex.NativeErrorCode})\");\n                }\n\n                return (CertificateMappingState.UacCancelled, $\"Register new certificate failed: {message}\");\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Unhandled error during certificate mapping\");\n                return (CertificateMappingState.GenericErrorOccurred, $\"Register new certificate failed: unknown ({ex.Message})\");\n            }\n        }\n\n        internal static bool? Verify(string protocol, string address, string port, CertificateInfo certificate)\n        {\n            IPAddress ip = IPAddress.Any;\n            if (address != StringExtensions.AllUnassigned && !IPAddress.TryParse(address, out ip))\n            {\n                return null;\n            }\n\n            if (!int.TryParse(port, out int portNumber))\n            {\n                return null;\n            }\n\n            if (portNumber < 1 || portNumber > 65535)\n            {\n                return null;\n            }\n\n            if (protocol != \"https\")\n            {\n                return false;\n            }\n\n            if (certificate == null)\n            {\n                // no certificate\n                return null;\n            }\n\n            var found = NativeMethods.QuerySslCertificateInfo(new IPEndPoint(ip, portNumber));\n            if (found == null)\n            {\n                // need to create mapping\n                return true;\n            }\n\n            if (found.Hash.SequenceEqual(certificate.Certificate.GetCertHash()))\n            {\n                // hash match, no need to change mapping\n                return false;\n            }\n\n            // replace mapping\n            return true;\n        }\n\n        public static string GetAppName(string appId)\n        {\n            if (appId == AppIdIis)\n            {\n                return \"IIS\";\n            }\n\n            if (appId == AppIdIisExpress)\n            {\n                return \"IIS Express\";\n            }\n\n            return string.Empty;\n        }\n\n        public static string CleanUpMapping(this Binding binding)\n        {\n            if (binding.Protocol == \"http\")\n            {\n                return string.Empty;\n            }\n\n            var sni = true;\n#if !IIS\n            sni = binding.GetIsSni();\n#endif            \n            return binding.RemoveMapping(sni);\n        }\n\n        private static string RemoveMapping(this Binding binding, bool sni)\n        {\n            var arguments = binding.ToRemoveMappingArguments(sni);\n            try\n            {\n                // remove sni mapping\n                using var process = new Process();\n                var start = process.StartInfo;\n                start.Verb = \"runas\";\n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                start.Arguments = arguments;\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                process.Start();\n                process.WaitForExit();\n\n                if (process.ExitCode != 0)\n                {\n                    return \"Remove SNI certificate failed: access is denied\";\n                }\n\n                return string.Empty;\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                var message = NativeMethods.KnownCases(ex.NativeErrorCode);\n                if (string.IsNullOrEmpty(message))\n                {\n                    _logger.LogWarning(ex, \"Win32 error during mapping removal. Native error code: {Code}\", ex.NativeErrorCode);\n                    return $\"Remove SNI certificate failed: unknown (native {ex.NativeErrorCode})\";\n                }\n\n                return $\"Remove SNI certificate failed: {message}\";\n            }\n            catch (NullReferenceException ex)\n            {\n                _logger.LogError(ex, \"Null reference during mapping removal. Binding: {Binding}, EndPoint null: {IsNull}\",\n                    binding.ToString(), binding.EndPoint == null);\n                return $\"Remove SNI certificate failed: unknown ({ex.Message})\";\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Unhandled error during mapping removal\");\n                return $\"Remove SNI certificate failed: unknown ({ex.Message})\";\n            }\n        }\n\n        private static string ToRemoveMappingArguments(this Binding binding, bool sni)\n        {\n            var hash = binding.CertificateHash == null ? string.Empty : Hex.ToHexString(binding.CertificateHash);\n            // TODO: should app ID and port number to verified?\n            return sni\n                ? $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /h:\\\"{hash}\\\" /s:{binding.CertificateStoreName}\\\" /i:{AppIdIisExpress} /o:{binding.EndPoint.Port} /x:{binding.Host}\"\n                : $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /h:\\\"{hash}\\\" /s:{binding.CertificateStoreName}\\\" /i:{AppIdIisExpress} /o:{binding.EndPoint.Port}\";\n        }\n\n        public static string AddReservedUrl(string url)\n        {\n            try\n            {\n                // add reserved URL\n                using var process = new Process();\n                var start = process.StartInfo;\n                start.Verb = \"runas\";\n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                start.Arguments = $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /u:\\\"{url}\\\"\";\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                process.Start();\n                process.WaitForExit();\n                if (process.ExitCode != 0)\n                {\n                    return $\"Process exited unexpectedly: {process.ExitCode}\";\n                }\n\n                return string.Empty;\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                var message = NativeMethods.KnownCases(ex.NativeErrorCode);\n                if (string.IsNullOrEmpty(message))\n                {\n                    _logger.LogWarning(ex, \"Win32 error adding reserved URL. Native error code: {Code}\", ex.NativeErrorCode);\n                    return $\"failed to add reserved URL: unknown ({message})\";\n                }\n                else\n                {\n                    return $\"failed to add reserved URL: {message}\";\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error adding reserved URL: {Url}\", url);\n                return $\"failed to add reserved URL: unknown ({ex.Message})\";\n            }\n        }\n\n        public static string ToUrlPrefix(this Binding binding)\n        {\n            var name = binding.Host == \"*\" || binding.Host == string.Empty ? \"*\" : binding.Host;\n            return $\"{binding.Protocol}://{name}:{binding.EndPoint.Port}/\";\n        }\n\n        public static bool MatchHostName(this X509Certificate2 certificate, string host)\n        {\n            var extension = certificate.Extensions[SubjectAlternativeNameOid];\n            if (extension != null)\n            {\n                var names = extension.Format(true);\n                var lines = new StringReader(names);\n                string line;\n                while ((line = lines.ReadLine()) != null)\n                {\n                    if (line.StartsWith(DnsNamePrefix) && line.Substring(DnsNamePrefix.Length).MatchHostName(host))\n                    {\n                        return true;\n                    }\n                }\n            }\n\n            return certificate.GetNameInfo(X509NameType.SimpleName, false).MatchHostName(host);\n        }\n\n        private static string ToAddMappingArguments(this Binding binding, bool sni)\n        {\n            return sni\n                ? $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /h:\\\"{Hex.ToHexString(binding.CertificateHash)}\\\" /s:{binding.CertificateStoreName}\\\" /i:{AppIdIisExpress} /a:{binding.EndPoint.Address} /o:{binding.EndPoint.Port} /x:{binding.Host}\"\n                : $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /h:\\\"{Hex.ToHexString(binding.CertificateHash)}\\\" /s:{binding.CertificateStoreName}\\\" /i:{AppIdIisExpress} /a:{binding.EndPoint.Address} /o:{binding.EndPoint.Port}\";\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/CertificateInfo.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Security.Cryptography.X509Certificates;\n\nnamespace JexusManager\n{\n    internal sealed class CertificateInfo\n    {\n        public X509Certificate2 Certificate { get; }\n        public string Store { get; }\n\n        public CertificateInfo(X509Certificate2 certificate, string store)\n        {\n            Certificate = certificate;\n            Store = store;\n        }\n\n        public override string ToString()\n        {\n            var friendlyName = Certificate.FriendlyName;\n            var dnsName = Certificate.GetNameInfo(X509NameType.SimpleName, false);\n            if (!string.IsNullOrWhiteSpace(friendlyName))\n            {\n                return friendlyName;\n            }\n\n            return string.IsNullOrWhiteSpace(dnsName) ? \"<Unknown>\" : dnsName;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/ColumnClickHook.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\nusing System.Windows.Forms;\nusing System;\n\nnamespace JexusManager\n{\n    using System.Windows.Forms;\n\n    public class ColumnClickHook\n    {\n        // Simple comparer for sorting ListView items by text.\n        private class ListViewItemComparer : System.Collections.IComparer\n        {\n            private readonly int _column;\n            private readonly SortOrder _order;\n\n            public ListViewItemComparer(int column, SortOrder order)\n            {\n                _column = column;\n                _order = order;\n            }\n\n            public int Compare(object x, object y)\n            {\n                var itemX = x as ListViewItem;\n                var itemY = y as ListViewItem;\n\n                if (itemX == null || itemY == null)\n                {\n                    return 0;\n                }\n\n                int result = string.Compare(itemX.SubItems[_column].Text, itemY.SubItems[_column].Text);\n\n                return _order == SortOrder.Descending ? -result : result;\n            }\n        }\n\n        private int _sortColumn = -1;\n\n        public void HandleColumnClick(ListView listView1)\n        {\n            listView1.ColumnClick += (o, e) =>\n            {\n                // Determine if the clicked column is already the one being sorted.\n                if (e.Column == _sortColumn)\n                {\n                    // Reverse the current sort direction for this column.\n                    listView1.Sorting = listView1.Sorting == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending;\n                }\n                else\n                {\n                    // Set the column number that is to be sorted; default to ascending.\n                    _sortColumn = e.Column;\n                    listView1.Sorting = SortOrder.Ascending;\n                }\n\n                // Sort the items in the ListView.\n                listView1.Sorting = listView1.Sorting;\n                listView1.ListViewItemSorter = new ListViewItemComparer(e.Column, listView1.Sorting);\n                listView1.Sort();\n\n                // Update the column header to show the sorting indicator\n                IndicatorHelper.SetSortIcon(listView1, e.Column, listView1.Sorting);\n            };\n        }\n    }\n\n    public static class IndicatorHelper\n    {\n        private const int HDI_FORMAT = 0x0004;\n        private const int HDF_SORTUP = 0x0400; // Arrow pointing up\n        private const int HDF_SORTDOWN = 0x0200; // Arrow pointing down\n        private const int LVM_GETHEADER = 0x101F;\n        private const int HDM_GETITEM = 0x120B;\n        private const int HDM_SETITEM = 0x120C;\n\n        [DllImport(\"user32.dll\", CharSet = CharSet.Auto)]\n        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);\n\n        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]\n        private struct HDITEM\n        {\n            public int mask;\n            public int cxy;\n            [MarshalAs(UnmanagedType.LPTStr)]\n            public string pszText;\n            public IntPtr hbm;\n            public int cchTextMax;\n            public int fmt;\n            public IntPtr lParam;\n            // If running on 64-bit, add padding\n            public int iImage;\n            public int iOrder;\n        }\n\n        public static void SetSortIcon(ListView listView, int columnIndex, SortOrder order)\n        {\n            IntPtr headerHandle = SendMessage(listView.Handle, LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero);\n\n            for (int i = 0; i < listView.Columns.Count; i++)\n            {\n                var item = new HDITEM\n                {\n                    mask = HDI_FORMAT\n                };\n\n                // Get the current header item\n                IntPtr itemPtr = Marshal.AllocHGlobal(Marshal.SizeOf(item));\n                Marshal.StructureToPtr(item, itemPtr, false);\n                SendMessage(headerHandle, HDM_GETITEM, new IntPtr(i), itemPtr);\n\n                // Update the format to add or remove the sort arrow\n                item = Marshal.PtrToStructure<HDITEM>(itemPtr);\n                if (i == columnIndex)\n                {\n                    if (order == SortOrder.Ascending)\n                    {\n                        item.fmt &= ~HDF_SORTDOWN; // Remove the descending flag\n                        item.fmt |= HDF_SORTUP;   // Add the ascending flag\n                    }\n                    else if (order == SortOrder.Descending)\n                    {\n                        item.fmt &= ~HDF_SORTUP;  // Remove the ascending flag\n                        item.fmt |= HDF_SORTDOWN; // Add the descending flag\n                    }\n                }\n                else\n                {\n                    // Remove any sorting indicator for other columns\n                    item.fmt &= ~HDF_SORTUP;\n                    item.fmt &= ~HDF_SORTDOWN;\n                }\n\n                // Set the updated header item\n                Marshal.StructureToPtr(item, itemPtr, false);\n                SendMessage(headerHandle, HDM_SETITEM, new IntPtr(i), itemPtr);\n                Marshal.FreeHGlobal(itemPtr);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/ConfigurationElementExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\n\nnamespace JexusManager\n{\n    public static class ConfigurationElementExtensions\n    {\n        public static string GetIsLocked(this ConfigurationElement element)\n        {\n            return element.IsLocked;\n        }\n\n        public static void SetIsLocked(this ConfigurationElement element, string value)\n        {\n            element.IsLocked = value;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/ConfigurationSectionExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\n\nnamespace JexusManager\n{\n    public static class ConfigurationSectionExtensions\n    {\n        public static bool CanRevert(this ConfigurationSection section)\n        {\n            return !string.IsNullOrEmpty(section.Location);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/DefaultWizardForm.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Management.Client.Win32;\nusing System;\n\nnamespace JexusManager\n{\n    public abstract class DefaultWizardForm : WizardForm\n    {\n        public DefaultWizardForm(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        { }\n\n        public new void UpdateWizard()\n        {\n            base.UpdateWizard();\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/DefaultWizardPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Management.Client.Win32;\n\nnamespace JexusManager\n{\n#if DESIGN\n    public class DefaultWizardPage : WizardPage\n#else\n    public abstract class DefaultWizardPage : WizardPage\n#endif\n    {\n        public new void SetNextPage(WizardPage page)\n        {\n            base.SetNextPage(page);\n        }\n\n        public new void SetPreviousPage(WizardPage page)\n        {\n            base.SetPreviousPage(page);\n        }\n\n        public new void SetWizard(WizardForm wizard)\n        {\n            base.SetWizard(wizard);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/DescriptionConverter.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager\n{\n    using System;\n    using System.ComponentModel;\n    using System.Globalization;\n    using System.Reflection;\n\n    public class DescriptionConverter : EnumConverter\n    {\n        private readonly Type _enumType;\n\n        /// <summary>Initializing instance</summary>\n        /// <param name=\"type\">type Enum</param>\n        /// this is only one function, that you must\n        /// change. All another functions for enums\n        /// you can use by Ctrl+C/Ctrl+V\n        public DescriptionConverter(Type type)\n            : base(type)\n        {\n            _enumType = type;\n        }\n\n        public override bool CanConvertTo(ITypeDescriptorContext context,\n            Type destType)\n        {\n            return destType == typeof(string);\n        }\n\n        public override object ConvertTo(ITypeDescriptorContext context,\n            CultureInfo culture,\n            object value, Type destType)\n        {\n            FieldInfo fi = _enumType.GetField(Enum.GetName(_enumType, value));\n            DescriptionAttribute dna =\n                (DescriptionAttribute)Attribute.GetCustomAttribute(\n                    fi, typeof(DescriptionAttribute));\n\n            if (dna != null)\n                return dna.Description;\n            return value.ToString();\n        }\n\n        public override bool CanConvertFrom(ITypeDescriptorContext context,\n            Type srcType)\n        {\n            return srcType == typeof(string);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context,\n            CultureInfo culture,\n            object value)\n        {\n            foreach (FieldInfo fi in _enumType.GetFields())\n            {\n                DescriptionAttribute dna =\n                    (DescriptionAttribute)Attribute.GetCustomAttribute(\n                        fi, typeof(DescriptionAttribute));\n\n                if ((dna != null) && ((string)value == dna.Description))\n                    return Enum.Parse(_enumType, fi.Name);\n            }\n\n            return Enum.Parse(_enumType, (string)value);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/DialogHelper.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager\n{\n    using JexusManager.Services;\n    using JexusManager.Notifications;\n    using Microsoft.Web.Administration;\n    using System;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.IO;\n    using System.Linq;\n    using System.Runtime.InteropServices;\n    using System.Security.Cryptography;\n    using System.Security.Cryptography.X509Certificates;\n    using System.Windows.Forms;\n    using Microsoft.Extensions.Logging;\n    using System.Net;\n    using System.Collections.Generic;\n    using Site = Microsoft.Web.Administration.Site;\n\n    public static class DialogHelper\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"DialogHelper\");\n\n        public static string[] Conditions = new[]\n                            {\n                        \"ALL_HTTP\",\n                        \"ALL_RAW\",\n                        \"APPL_MD_PATH\",\n                        \"APPL_PHYSICAL_PATH\",\n                        \"AUTH_PASSWORD\",\n                        \"AUTH_TYPE\",\n                        \"AUTH_USER\",\n                        \"CERT_COOKIE\",\n                        \"CERT_FLAGS\",\n                        \"CERT_ISSUER\",\n                        \"CERT_KEYSIZE\",\n                        \"CERT_SECRETKEYSIZE\",\n                        \"CERT_SERIALNUMBER\",\n                        \"CERT_SERVER_ISSUER\",\n                        \"CERT_SERVER_SUBJECT\",\n                        \"CERT_SUBJECT\",\n                        \"CONTENT_LENGTH\",\n                        \"CONTENT_TYPE\",\n                        \"GATEWAY_INTERFACE\",\n                        \"HTTP_ACCEPT\",\n                        \"HTTP_ACCEPT_ENCODING\",\n                        \"HTTP_ACCEPT_LANGUAGE\",\n                        \"HTTP_CONNECTION\",\n                        \"HTTP_COOKIE\",\n                        \"HTTP_HOST\",\n                        \"HTTP_METHOD\",\n                        \"HTTP_REFERER\",\n                        \"HTTP_URL\",\n                        \"HTTP_USER_AGENT\",\n                        \"HTTP_VERSION\",\n                        \"HTTPS\",\n                        \"HTTPS_KEYSIZE\",\n                        \"HTTPS_SECRETKEYSIZE\",\n                        \"HTTPS_SERVER_ISSUER\",\n                        \"HTTPS_SERVER_SUBJECT\",\n                        \"INSTANCE_ID\",\n                        \"INSTANCE_META_PATH\",\n                        \"LOCAL_ADDR\",\n                        \"LOGON_USER\",\n                        \"PATH_INFO\",\n                        \"PATH_TRANSLATED\",\n                        \"QUERY_STRING\",\n                        \"REMOTE_ADDR\",\n                        \"REMOTE_HOST\",\n                        \"REMOTE_PORT\",\n                        \"REMOTE_USER\",\n                        \"REQUEST_METHOD\",\n                        \"SCRIPT_NAME\",\n                        \"SERVER_NAME\",\n                        \"SERVER_PORT\",\n                        \"SERVER_PORT_SECURE\",\n                        \"SERVER_PROTOCOL\",\n                        \"SERVER_SOFTWARE\",\n                        \"UNMAPPED_REMOTE_USER\",\n                        \"URL\"\n                            };\n        public static void ShowBrowseDialog(TextBox textBox, string executable)\n        {\n            var fallback = new FolderBrowserDialog { SelectedPath = textBox.Text.ExpandIisExpressEnvironmentVariables(executable) };\n            if (fallback.ShowDialog() == DialogResult.Cancel)\n            {\n                return;\n            }\n\n            textBox.Text = fallback.SelectedPath;\n        }\n\n        public static void ShowOpenFileDialog(TextBox textBox, string filter, string executable)\n        {\n            var initial = textBox.Text.ExpandIisExpressEnvironmentVariables(executable);\n            string initialDirectory;\n            try\n            {\n                initialDirectory = string.IsNullOrEmpty(initial) ? string.Empty : Path.GetDirectoryName(initial);\n            }\n            catch (ArgumentException)\n            {\n                initialDirectory = string.Empty;\n            }\n\n            var dialog = new OpenFileDialog\n            {\n                InitialDirectory = initialDirectory,\n                Filter = filter\n            };\n            try\n            {\n                if (dialog.ShowDialog() == DialogResult.Cancel)\n                {\n                    return;\n                }\n            }\n            catch (COMException ex)\n            {\n                if (ex.StackTrace.Contains(\"System.Windows.Forms.OpenFileDialog.CreateVistaDialog()\"))\n                {\n                    // IMPORTANT: use a workaround to suppress failure.\n                    dialog.AutoUpgradeEnabled = false;\n                    if (dialog.ShowDialog() == DialogResult.Cancel)\n                    {\n                        return;\n                    }\n                }\n            }\n\n            textBox.Text = dialog.FileName;\n        }\n\n        public static string ShowSaveFileDialog(TextBox textBox, string filter, string executable)\n        {\n            var initial = textBox?.Text.ExpandIisExpressEnvironmentVariables(executable);\n            string initialDirectory;\n            try\n            {\n                initialDirectory = string.IsNullOrEmpty(initial) ? string.Empty : Path.GetDirectoryName(initial);\n            }\n            catch (ArgumentException)\n            {\n                initialDirectory = string.Empty;\n            }\n\n            var dialog = new SaveFileDialog\n            {\n                InitialDirectory = initialDirectory,\n                Filter = filter,\n                FileName = textBox?.Text\n            };\n            try\n            {\n                if (dialog.ShowDialog() == DialogResult.Cancel)\n                {\n                    return string.Empty;\n                }\n            }\n            catch (COMException ex)\n            {\n                if (ex.StackTrace.Contains(\"System.Windows.Forms.SaveFileDialog.CreateVistaDialog()\"))\n                {\n                    // IMPORTANT: use a workaround to suppress failure.\n                    dialog.AutoUpgradeEnabled = false;\n                    if (dialog.ShowDialog() == DialogResult.Cancel)\n                    {\n                        return string.Empty;\n                    }\n                }\n            }\n\n            if (textBox != null)\n            {\n                textBox.Text = dialog.FileName;\n            }\n\n            return dialog.FileName;\n        }\n\n        public static bool GetImageArchitecture(string filepath)\n        {\n            var file = new PEFile.PEFile(filepath);\n            if (file.Header.IsManaged)\n            {\n                throw new BadImageFormatException(\".NET assembly is not supported.\");\n            }\n\n            return !file.Header.IsPE64;\n        }\n\n        public static void DisplayCertificate(X509Certificate2 x509Certificate2, IntPtr handle)\n        {\n            if (!Helper.IsRunningOnMono())\n            {\n                X509Certificate2UI.DisplayCertificate(x509Certificate2, handle);\n                return;\n            }\n\n            var file = GetTempFileName() + \".crt\";\n            var bytes = x509Certificate2.Export(X509ContentType.Cert);\n            File.WriteAllBytes(file, bytes);\n            Process.Start(\"explorer.exe\", file);\n        }\n\n        public static void Explore(string folder)\n        {\n            try\n            {\n                if (Helper.IsRunningOnMono())\n                {\n                    Process.Start(folder);\n                }\n                else\n                {\n                    // IMPORANT: to avoid jumping to another folder with \".com\"\n                    // More info can be found in https://forums.iis.net/p/1239773/2144186.aspx?\n                    Process.Start(\"explorer.exe\", folder);\n                }\n            }\n            catch (Exception ex)\n            {\n                // TODO: use dialog service.\n                MessageBox.Show(ex.Message, \"Jexus Manager\", MessageBoxButtons.OK, MessageBoxIcon.Error);\n            }\n        }\n\n        public static void LoadCertificates(ComboBox comboBox, byte[] hash, string store, IConfigurationService service)\n        {\n            comboBox.Items.Add(\"No selected\");\n            comboBox.SelectedIndex = 0;\n            if (service == null)\n            {\n                throw new InvalidOperationException(\"null service\");\n            }\n\n            if (service.ServerManager.Mode == WorkingMode.Jexus)\n            {\n                var certificate = AsyncHelper.RunSync(() => ((JexusServerManager)service.ServerManager).GetCertificateAsync());\n                if (certificate == null)\n                {\n                    return;\n                }\n\n                comboBox.Items.Add(new CertificateInfo(certificate, \"Jexus\"));\n                if (hash != null &&\n                    hash.SequenceEqual(certificate.GetCertHash()))\n                {\n                    comboBox.SelectedIndex = 1;\n                }\n\n                return;\n            }\n\n            using (X509Store store1 = new X509Store(\"MY\", StoreLocation.LocalMachine))\n            {\n                try\n                {\n                    store1.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);\n                    foreach (var certificate in store1.Certificates)\n                    {\n                        var index = comboBox.Items.Add(new CertificateInfo(certificate, store1.Name));\n                        if (hash != null &&\n                            hash.SequenceEqual(certificate.GetCertHash()) &&\n                            store1.Name == store)\n                        {\n                            comboBox.SelectedIndex = index;\n                        }\n                    }\n\n                    store1.Close();\n                }\n                catch (CryptographicException ex)\n                {\n                    if (ex.HResult != Microsoft.Web.Administration.NativeMethods.NonExistingStore)\n                    {\n                        _logger.LogWarning(ex, \"Error accessing MY certificate store. HResult: {HResult}\", ex.HResult);\n                        throw;\n                    }\n                }\n            }\n\n            if (Environment.OSVersion.Version < Version.Parse(\"6.2\"))\n            {\n                // IMPORTANT: WebHosting store is available since Windows 8.\n                return;\n            }\n\n            using X509Store store2 = new X509Store(\"WebHosting\", StoreLocation.LocalMachine);\n            try\n            {\n                store2.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);\n                foreach (var certificate1 in store2.Certificates)\n                {\n                    var index1 = comboBox.Items.Add(new CertificateInfo(certificate1, store2.Name));\n                    if (hash != null &&\n                        hash.SequenceEqual(certificate1.GetCertHash()) &&\n                        store2.Name == store)\n                    {\n                        comboBox.SelectedIndex = index1;\n                    }\n                }\n\n                store2.Close();\n            }\n            catch (CryptographicException ex)\n            {\n                if (ex.HResult != Microsoft.Web.Administration.NativeMethods.NonExistingStore)\n                {\n                    _logger.LogWarning(ex, \"Error accessing WebHosting certificate store. HResult: {HResult}\", ex.HResult);\n                    throw;\n                }\n            }\n        }\n\n        public static void LoadAddresses(ComboBox cbAddress)\n        {\n            const string DefaultBinding = \"All Unassigned\";\n            cbAddress.Items.Add(DefaultBinding);\n            foreach (\n                IPAddress address in\n                    Dns.GetHostEntry(string.Empty).AddressList.Where(address => !address.IsIPv6LinkLocal))\n            {\n                cbAddress.Items.Add(address);\n            }\n\n            cbAddress.Text = DefaultBinding;\n        }\n\n        public static string GetTempFileName()\n        {\n            return GetSpecialFolder(\"temp\", \"temp\");\n        }\n\n        private static string GetSpecialFolder(string name, string file)\n        {\n            var result = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), \"Jexus Manager\", name);\n            if (!Directory.Exists(result))\n            {\n                try\n                {\n                    Directory.CreateDirectory(result);\n                }\n                catch (IOException ex)\n                {\n                    _logger.LogError(ex, \"Error creating directory {Path}\", result);\n                }\n            }\n\n            return Path.Combine(result, file);\n        }\n\n        public static string GetPrivateKeyFile(string file)\n        {\n            return GetSpecialFolder(\"PrivateKey\", $\"{file.Replace('*', '_')}.txt\");\n        }\n\n        public static string ListIisExpress => GetSpecialFolder(\"lists\", \"iisExpressList\");\n\n        public static string ListJexus => GetSpecialFolder(\"lists\", \"list\");\n\n        public static string DebugLog => GetSpecialFolder(\"temp\", \"debug\");\n\n        public static void ProcessStart(string url)\n        {\n            var browser = Environment.GetEnvironmentVariable(JexusManagerOptions.VariableNameBrowser);\n            var useDefault = string.IsNullOrWhiteSpace(browser);\n            try\n            {\n                using var process = new Process\n                {\n                    StartInfo = new ProcessStartInfo\n                    {\n                        FileName = useDefault ? url : browser,\n                        Arguments = useDefault ? string.Empty : url,\n                        UseShellExecute = true\n                    }\n                };\n                process.Start();\n            }\n            catch (Win32Exception)\n            {\n                Help.ShowHelp(null, url);\n            }\n        }\n\n        public static void BrowseFile(string file)\n        {\n            var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), \"explorer.exe\");\n            if (File.Exists(path))\n            {\n                Process.Start(path, $\"/select,\\\"{file}\\\"\");\n                return;\n            }\n\n            _logger.LogWarning(\"Windows Explorer not found at {Path}\", path);\n        }\n\n        public static void SiteStart(Site site, IMainForm form)\n        {\n            site.Start();\n            if (site.Server.Mode == WorkingMode.IisExpress)\n            {\n                var pid = site.Applications[0].GetPool()?.WorkerProcesses[0]?.ProcessId;\n                MessageBoxShow($\"Worker process {pid} has been started for {site.Name}.\", form);\n            }\n        }\n\n        internal static void SiteRestart(Site site, IMainForm form)\n        {\n            site.Restart();\n            if (site.Server.Mode == WorkingMode.IisExpress)\n            {\n                var pid = site.Applications[0].GetPool()?.WorkerProcesses[0]?.ProcessId;\n                MessageBoxShow($\"Worker process {pid} has been started for {site.Name}.\", form);\n            }\n        }\n\n        public static void MessageBoxShow(string message, IMainForm form, bool error = false)\n        {\n            // Get the active form to show notification on\n            Form activeForm = (Form)form;\n            if (activeForm == null)\n            {\n                // Fall back to creating a simple message box if no active form\n                MessageBox.Show(message, \"Jexus Manager\", MessageBoxButtons.OK, \n                    error ? MessageBoxIcon.Error : MessageBoxIcon.Information);\n                return;\n            }\n\n            // Create notification manager for the active form\n            var notificationManager = NotificationManager.GetInstance(activeForm, \n                NotificationManager.NotificationPosition.BottomCenter);\n\n            // Determine notification type based on error flag\n            var notificationType = error \n                ? NotificationControl.NotificationType.Error \n                : NotificationControl.NotificationType.Info;\n\n            // Show the notification\n            notificationManager.Show(\n                title: \"Jexus Manager\",\n                message: message,\n                type: notificationType,\n                displayDuration: 10000, // 10 seconds, matching previous implementation\n                fadeDuration: 500);\n        }\n\n        public static void HandleGrouping(ListView listView1, string selectedGroup, Func<ListViewItem, string, string> GetGroupKey)\n        {\n            // Clear existing groups and items\n            listView1.Groups.Clear();\n            foreach (ListViewItem item in listView1.Items)\n            {\n                item.Group = null;\n            }\n\n            if (selectedGroup == \"No Grouping\")\n            {\n                // No grouping, return\n                return;\n            }\n\n            // Create groups based on the selected option\n            Dictionary<string, ListViewGroup> groups = new Dictionary<string, ListViewGroup>();\n            foreach (ListViewItem item in listView1.Items)\n            {\n                string groupKey = GetGroupKey(item, selectedGroup);\n                if (string.IsNullOrWhiteSpace(groupKey))\n                {\n                    groupKey = \"Other\";\n                }\n\n                if (!groups.ContainsKey(groupKey))\n                {\n                    // Create a new group if it doesn't exist\n                    ListViewGroup group = new ListViewGroup(groupKey, groupKey);\n                    groups[groupKey] = group;\n                    listView1.Groups.Add(group);\n                }\n\n                // Assign the item to the appropriate group\n                item.Group = groups[groupKey];\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Features/DefaultTaskList.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing JexusManager.Properties;\nusing Microsoft.Web.Management.Client;\nusing Microsoft.Web.Management.Client.Win32;\nusing System.Drawing;\nusing System.Reflection;\n\nnamespace JexusManager.Features\n{\n    public abstract class DefaultTaskList : TaskList\n    {\n        public static Image BasicSettingsImage\n        {\n            get { return Resources.basic_settings_16; }\n        }\n\n        public static Image RemoveImage\n        {\n            // TODO: remove this property some day.\n            get { return Resources.remove_16; }\n        }\n\n        public static Image ShowAllImage\n        {\n            get { return Resources.show_all_16; }\n        }\n\n        public static Image GoImage\n        {\n            get { return Resources.go_16; }\n        }\n\n        public static Image ViewImage\n        {\n            get { return Resources.view_16; }\n        }\n\n        public MethodTaskItem RemoveTaskItem\n        {\n            get\n            {\n                return GetRemoveTaskItem(\"Remove\");\n            }\n        }\n\n        public MethodTaskItem RevertTaskItem\n        {\n            get\n            {\n                return new MethodTaskItem(\"Revert\", \"Revert To Parent\", string.Empty).SetUsage();\n            }\n        }\n\n        public MethodTaskItem HelpTaskItem\n        {\n            get\n            {\n                return new MethodTaskItem(\"ShowHelp\", \"Help\", string.Empty, string.Empty, Resources.help_16).SetUsage();\n            }\n        }\n\n        public MethodTaskItem GetBackTaskItem(string methodName, string text)\n        {\n            return new MethodTaskItem(methodName, text, string.Empty, string.Empty, Resources.back_16).SetUsage();\n        }\n\n        public MethodTaskItem GetMoveUpTaskItem(bool enabled)\n        {\n            return GetMoveUpTaskItem(\"MoveUp\", enabled);\n        }\n\n        public MethodTaskItem GetMoveDownTaskItem(bool enabled)\n        {\n            return GetMoveDownTaskItem(\"MoveDown\", enabled);\n        }\n\n        public MethodTaskItem GetRemoveTaskItem(string methodName)\n        {\n            return new MethodTaskItem(methodName, \"Remove\", string.Empty, string.Empty, Resources.remove_16).SetUsage();\n        }\n\n        public MethodTaskItem GetMoveUpTaskItem(string methodName, bool enabled)\n        {\n            return new MethodTaskItem(methodName, \"Move Up\", string.Empty, string.Empty,\n                    Resources.move_up_16).SetUsage(enabled);\n        }\n\n        public MethodTaskItem GetMoveDownTaskItem(string methodName, bool enabled)\n        {\n            return new MethodTaskItem(methodName, \"Move Down\", string.Empty, string.Empty,\n                        Resources.move_down_16).SetUsage(enabled);\n        }\n\n        [Obfuscation(Exclude = true)]\n        public virtual void Remove()\n        {\n        }\n\n        [Obfuscation(Exclude = true)]\n        public virtual void MoveUp()\n        {\n        }\n\n        [Obfuscation(Exclude = true)]\n        public virtual void MoveDown()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Features/FeatureBase.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features\n{\n    using System;\n    using System.Collections.Generic;\n    using System.IO;\n    using System.Linq;\n    using System.Reflection;\n    using System.Resources;\n    using System.Windows.Forms;\n    using JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client.Win32;\n\n    using Module = Microsoft.Web.Management.Client.Module;\n\n    public abstract class FeatureBase<T>\n        where T : class, IItem<T>\n    {\n        private ListView? _listView;\n        private ListViewItem? _lastSelectedItem = null;\n\n        protected FeatureBase(Module module)\n        {\n            Module = module;\n            Items = [];\n        }\n\n        public List<T> Items { get; set; }\n        public T? SelectedItem { get; set; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public Module Module { get; }\n\n        public bool CanMoveUp\n        {\n            get\n            {\n                return SelectedItem != null && Items.IndexOf(SelectedItem) > 0\n                       && Items.All(item => item.Element.IsLocked == \"false\" && item.Element.LockAttributes.Count == 0);\n            }\n        }\n        public bool CanMoveDown\n        {\n            get\n            {\n                return SelectedItem != null && Items.IndexOf(SelectedItem) < Items.Count - 1\n                       && Items.All(item => item.Element.IsLocked == \"false\" && item.Element.LockAttributes.Count == 0);\n            }\n        }\n\n        protected abstract ConfigurationElementCollection GetCollection(IConfigurationService service);\n\n        protected object? GetService(Type type)\n        {\n            return (Module as IServiceProvider)?.GetService(type);\n        }\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager? resourceManager)\n        {\n            var service = GetService(typeof(IManagementUIService)) as IManagementUIService;\n            service?.ShowError(ex, resourceManager?.GetString(\"General\"), \"\", false);\n        }\n\n        protected abstract void OnSettingsSaved();\n\n        public virtual void LoadItems()\n        {\n            Items.Clear();\n            if (GetService(typeof(IConfigurationService)) is not IConfigurationService service)\n            {\n                throw new InvalidOperationException(\"IConfigurationService is not available.\");\n            }\n\n            ConfigurationElementCollection collection = GetCollection(service);\n            foreach (ConfigurationElement addElement in collection)\n            {\n                var type = typeof(T);\n                var constructors = type.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);\n                var constructorInfo = constructors[0];\n                var item =\n                    (T)\n                    constructorInfo.Invoke(\n                        constructorInfo.GetParameters().Length == 1\n                            ? new object[] { addElement }\n                            : [addElement, true]);\n                Items.Add(item);\n            }\n\n            var secondary = GetSecondaryCollection(service);\n            if (secondary != null)\n            {\n                foreach (ConfigurationElement addElement in secondary)\n                {\n                    var type = typeof(T);\n                    var constructors = type.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);\n                    var constructorInfo = constructors[0];\n                    var item =\n                        (T)\n                        constructorInfo.Invoke(\n                            constructorInfo.GetParameters().Length == 1\n                                ? new object[] { addElement }\n                                : [addElement, false]);\n                    Items.Add(item);\n                }\n            }\n\n            OnSettingsSaved();\n        }\n\n        public virtual void AddItem(T item)\n        {\n            Items.Add(item);\n            SelectedItem = item;\n            if (GetService(typeof(IConfigurationService)) is not IConfigurationService service)\n            {\n                throw new InvalidOperationException(\"IConfigurationService is not available.\");\n            }\n\n            var collection = GetCollection(service, item);\n            if (collection == null)\n            {\n                throw new InvalidOperationException(\"ConfigurationElementCollection is not available.\");\n            }\n\n            item.AppendTo(collection);\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        private ConfigurationElementCollection? GetCollection(IConfigurationService service, T item)\n        {\n            var duo = item as IDuoItem<T>;\n            if (duo == null || duo.Allowed)\n            {\n                return GetCollection(service);\n            }\n\n            return GetSecondaryCollection(service);\n        }\n\n        public virtual void InsertItem(int index, T item)\n        {\n            Items.Insert(index, item);\n            SelectedItem = item;\n            if (GetService(typeof(IConfigurationService)) is not IConfigurationService service)\n            {\n                throw new InvalidOperationException(\"IConfigurationService is not available.\");\n            }\n\n            var collection = GetCollection(service);\n            item.Element = collection.CreateElement();\n            item.Apply();\n            collection.AddAt(index, item.Element);\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public virtual void EditItem(T newItem)\n        {\n            if (GetService(typeof(IConfigurationService)) is not IConfigurationService service)\n            {\n                throw new InvalidOperationException(\"IConfigurationService is not available.\");\n            }\n\n            if (newItem.Flag != \"Local\")\n            {\n                ConfigurationElementCollection collection = GetCollection(service);\n                collection.Remove(newItem.Element);\n                newItem.AppendTo(collection);\n                newItem.Flag = \"Local\";\n            }\n            else\n            {\n                newItem.Apply();\n            }\n\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public virtual void RemoveItem()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            Items.Remove(SelectedItem);\n            if (GetService(typeof(IConfigurationService)) is not IConfigurationService service)\n            {\n                throw new InvalidOperationException(\"IConfigurationService is not available.\");\n            }\n\n            var collection = GetCollection(service, SelectedItem);\n            if (collection == null)\n            {\n                throw new InvalidOperationException(\"ConfigurationElementCollection is not available.\");\n            }\n\n            try\n            {\n                collection.Remove(SelectedItem.Element);\n            }\n            catch (FileLoadException ex)\n            {\n                DisplayErrorMessage(ex, null);\n                return;\n            }\n\n            service.ServerManager.CommitChanges();\n\n            SelectedItem = default;\n            OnSettingsSaved();\n        }\n\n        public virtual void MoveUpItem()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            int index = Items.IndexOf(SelectedItem);\n            Items.Remove(SelectedItem);\n            Items.Insert(index - 1, SelectedItem);\n\n            if (GetService(typeof(IConfigurationService)) is not IConfigurationService service)\n            {\n                throw new InvalidOperationException(\"IConfigurationService is not available.\");\n            }\n\n            var collection = GetCollection(service);\n            var element = collection[index];\n            collection.Remove(element);\n            collection.AddAt(index - 1, element);\n\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public virtual void MoveDownItem()\n        {\n            if (SelectedItem == null)\n            {\n                return;\n            }\n\n            int index = Items.IndexOf(SelectedItem);\n            Items.Remove(SelectedItem);\n            Items.Insert(index + 1, SelectedItem);\n\n            if (GetService(typeof(IConfigurationService)) is not IConfigurationService service)\n            {\n                throw new InvalidOperationException(\"IConfigurationService is not available.\");\n            }\n\n            var collection = GetCollection(service);\n            var element = collection[index];\n            collection.Remove(element);\n            collection.AddAt(index + 1, element);\n\n            service.ServerManager.CommitChanges();\n            OnSettingsSaved();\n        }\n\n        public virtual void RevertItems()\n        {\n            if (GetService(typeof(IConfigurationService)) is not IConfigurationService service)\n            {\n                throw new InvalidOperationException(\"IConfigurationService is not available.\");\n            }\n\n            var collection = GetCollection(service);\n            collection.Revert();\n\n            service.ServerManager.CommitChanges();\n            SelectedItem = null;\n            LoadItems();\n        }\n\n        protected virtual ConfigurationElementCollection? GetSecondaryCollection(IConfigurationService service)\n        {\n            return null;\n        }\n\n        #region Event handlers\n        protected virtual void DoubleClick(T item)\n        { }\n\n        public void HandleMouseDoubleClick(ListView listView)\n        {\n            if (listView.SelectedItems.Count == 0)\n            {\n                return;\n            }\n\n            var item = (IFeatureListViewItem<T>)listView.SelectedItems[0];\n            DoubleClick(item.Item);\n        }\n\n        public void HandleSelectedIndexChanged(ListView listView)\n        {\n            if (listView.SelectedItems.Count > 0)\n            {\n                var item = (IFeatureListViewItem<T>)listView.SelectedItems[0];\n                SelectedItem = item.Item;\n            }\n            else\n            {\n                _lastSelectedItem = null;\n                SelectedItem = null;\n            }\n        }\n\n        public void InitializeMouseClick(ListView listView1, Action<T, string> updatePropertyAction, Func<string, bool> validateAction)\n        {\n            _listView = listView1;\n            listView1.LabelEdit = true;\n            listView1.AfterLabelEdit += (s, e) =>\n            {\n                if (string.IsNullOrEmpty(e.Label))\n                {\n                    e.CancelEdit = true;\n                    return;\n                }\n\n                if (validateAction != null && !validateAction(e.Label))\n                {\n                    e.CancelEdit = true;\n                    return;\n                }\n\n                if (SelectedItem == null)\n                {\n                    e.CancelEdit = true;\n                    return;\n                }\n\n                updatePropertyAction(SelectedItem, e.Label);\n            };\n\n            listView1.MouseClick += (s, e) =>\n            {\n                var info = listView1.HitTest(e.Location);\n                if (info?.Item == null)\n                    return;\n\n                if (_lastSelectedItem == info.Item)\n                {\n                    info.Item.BeginEdit();\n                }\n\n                _lastSelectedItem = info.Item;\n            };\n        }\n\n        public void RenameInline(T item)\n        {\n            var index = Items.IndexOf(item);\n            if (_listView == null)\n            {\n                return;\n            }\n\n            if (index >= 0 && index < _listView.Items.Count)\n            {\n                _listView.Items[index].BeginEdit();\n            }\n        }\n\n        public bool FindDuplicate(Func<T, string> value, string text)\n        {\n            // TODO: seem to be duplicate to the Match pattern. \n            return Items.Where(item => item != SelectedItem)\n                .Any(item => string.Equals(value(item), text, StringComparison.Ordinal));\n        }\n\n        public virtual string GetGroupKey(ListViewItem item, string selectedGroup)\n        {\n            return \"Unknown\";\n        }\n\n        public virtual void InitializeGrouping(ToolStripComboBox cbGroup)\n        { }\n\n        public void InitializeColumnClick(ListView listView)\n        {\n            var hook = new ColumnClickHook();\n            hook.HandleColumnClick(listView);\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Features/IDuoItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\n\nnamespace JexusManager.Features\n{\n    public interface IDuoItem<T> : IItem<T>\n    {\n        bool Allowed { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Features/IFeatureListViewItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features\n{\n    public interface IFeatureListViewItem<IItem>\n    {\n        IItem Item { get; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Features/IItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features\n{\n    using Microsoft.Web.Administration;\n\n    public static class ItemExtensions\n    {\n        public static void AppendTo<T>(this IItem<T> item, ConfigurationElementCollection collection)\n        {\n            item.Element = collection.CreateElement();\n            item.Apply();\n            collection.Add(item.Element);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Features/ScopeExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features\n{\n    using System;\n    using System.Drawing;\n\n    using JexusManager.Properties;\n\n    using Microsoft.Web.Management.Server;\n\n    public static class ScopeExtensions\n    {\n        public static Image GetImage(this ManagementScope scope)\n        {\n            switch (scope)\n            {\n                case ManagementScope.Application:\n                    return Resources.application_32;\n                case ManagementScope.Server:\n                    return Resources.title_32;\n                case ManagementScope.Site:\n                    return Resources.site_32;\n                default:\n                    throw new ArgumentOutOfRangeException();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Features/ShowHelpTaskList.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing JexusManager.Properties;\nusing Microsoft.Web.Management.Client;\nusing Microsoft.Web.Management.Client.Win32;\nusing System.Collections;\nusing System.Reflection;\n\nnamespace JexusManager.Features\n{\n    public abstract class ShowHelpTaskList : DefaultTaskList\n    {\n        public override ICollection GetTaskItems()\n        {\n            return new TaskItem[]\n            {\n                HelpTaskItem\n            };\n        }\n\n        [Obfuscation(Exclude = true)]\n        public abstract void ShowHelp();\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Features/TaskItemExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Reflection;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\nusing Microsoft.Web.Management.Client.Win32;\nusing System.Windows.Forms;\nusing System.Collections;\nusing JexusManager.Properties;\nusing System.Drawing;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public static class TaskItemExtensions\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"TaskItemExtensions\");\n\n        public static void Fill(this TaskListCollection tasks, ToolStrip actionPanel, ContextMenuStrip actionMenu, TaskList extra = null)\n        {\n            actionPanel.Items.Clear();\n            actionMenu?.Items.Clear();\n            if (extra != null)\n            {\n                TaskListFill(actionPanel, actionMenu, extra, extra.GetTaskItems());\n            }\n\n            foreach (var item in tasks.GetTaskListItems(null))\n            {\n                TaskListFill(actionPanel, actionMenu, item.Key, item.Value);\n            }\n\n            actionPanel.Items.RemoveAt(actionPanel.Items.Count - 1);\n            actionMenu?.Items.RemoveAt(actionMenu.Items.Count - 1);\n        }\n\n        private static void TaskListFill(ToolStrip actionPanel, ContextMenuStrip actionMenu, TaskList extra, ICollection items)\n        {\n            if (items.Count == 0)\n            {\n                return;\n            }\n\n            foreach (TaskItem task in items)\n            {\n                task.TaskItemFill(extra, actionPanel, actionMenu, null);\n            }\n\n            actionPanel.Items.Add(new ToolStripSeparator());\n            actionMenu?.Items.Add(new ToolStripSeparator());\n        }\n\n        public static MethodTaskItem SetUsage(this MethodTaskItem method, bool enabled = true, MethodTaskItemUsages usage = MethodTaskItemUsages.ContextMenu | MethodTaskItemUsages.TaskList)\n        {\n            method.Enabled = enabled;\n            method.Usage = usage;\n            return method;\n        }\n\n        private static void TaskItemFill(this TaskItem item, TaskList list, ToolStrip actionPanel, ContextMenuStrip actionMenu, ToolStripMenuItem parent)\n        {\n            var method = item as MethodTaskItem;\n            if (method != null)\n            {\n                if (method.Text == \"-\")\n                {\n                    actionPanel.Items.Add(new ToolStripSeparator());\n                    if ((method.Usage & MethodTaskItemUsages.ContextMenu) == MethodTaskItemUsages.ContextMenu)\n                    {\n                        if (parent == null)\n                        {\n                            actionMenu.Items.Add(new ToolStripSeparator());\n                        }\n                        else\n                        {\n                            parent.DropDownItems.Add(new ToolStripSeparator());\n                        }\n                    }\n\n                    return;\n                }\n\n                var result = new ToolStripButton(method.Text, method.Image ?? Resources.transparent_16,\n                    (o, args) =>\n                    {\n                        try\n                        {\n                            list.InvokeMethod(method.MethodName, method.UserData);\n                        }\n                        catch (TargetInvocationException ex)\n                        {\n                            if (ex.InnerException is UnauthorizedAccessException)\n                            {\n                                _logger.LogError(ex.InnerException, \"Error invoking task method {Method}\", method.MethodName);\n                                MessageBox.Show($\"{ex.InnerException.Message}. Running Jexus Manager as administrator might resolve it.\", \"Jexus Manager\", MessageBoxButtons.OK, MessageBoxIcon.Error);\n                                return;\n                            }\n\n                            throw new InvalidOperationException($\"menu item {method.Text} function {method.MethodName}\", ex);\n                        }\n                    })\n                {\n                    ImageAlign = ContentAlignment.MiddleLeft,\n                    ImageTransparentColor = Color.Magenta,\n                    TextAlign = ContentAlignment.MiddleLeft,\n                    Enabled = method.Enabled,\n                    AutoToolTip = false\n                };\n                actionPanel.Items.Add(result);\n                if ((method.Usage & MethodTaskItemUsages.ContextMenu) == MethodTaskItemUsages.ContextMenu)\n                {\n                    var result2 = new ToolStripMenuItem(method.Text, method.Image ?? Resources.transparent_16,\n                        (o, args) =>\n                        {\n                            try\n                            {\n                                list.InvokeMethod(method.MethodName, method.UserData);\n                            }\n                            catch (TargetInvocationException ex)\n                            {\n                                if (ex.InnerException is UnauthorizedAccessException)\n                                {\n                                    _logger.LogError(ex.InnerException, \"Error invoking task method {Method}\", method.MethodName);\n                                    MessageBox.Show($\"{ex.InnerException.Message}. Running Jexus Manager as administrator might resolve it.\", \"Jexus Manager\", MessageBoxButtons.OK, MessageBoxIcon.Error);\n                                    return;\n                                }\n\n                                throw new InvalidOperationException($\"menu item {method.Text} function {method.MethodName}\", ex);\n                            }\n                        })\n                    {\n                        ImageTransparentColor = Color.Magenta,\n                        Enabled = method.Enabled,\n                        AutoToolTip = false\n                    };\n                    if (parent == null)\n                    {\n                        actionMenu.Items.Add(result2);\n                    }\n                    else\n                    {\n                        parent.DropDownItems.Add(result2);\n                    }\n                }\n\n                return;\n            }\n\n            var text = item as TextTaskItem;\n            if (text != null)\n            {\n                var result = new ToolStripLabel(text.Text, text.Image ?? Resources.transparent_16)\n                {\n                    ImageAlign = ContentAlignment.MiddleLeft,\n                    ImageTransparentColor = Color.Magenta,\n                    TextAlign = ContentAlignment.MiddleLeft,\n                    Enabled = text.Enabled\n                };\n                if (text.IsHeading)\n                {\n                    result.Font = new Font(result.Font, FontStyle.Bold);\n                }\n\n                actionPanel.Items.Add(result);\n                return;\n            }\n\n            var group = item as GroupTaskItem;\n            if (group != null)\n            {\n                var result = new ToolStripLabel(group.Text)\n                {\n                    ImageAlign = ContentAlignment.MiddleLeft,\n                    ImageTransparentColor = Color.Magenta,\n                    TextAlign = ContentAlignment.MiddleLeft,\n                    Enabled = group.Enabled\n                };\n                if (group.IsHeading)\n                {\n                    result.Font = new Font(result.Font, FontStyle.Bold);\n                    result.BackColor = SystemColors.ControlDarkDark;\n                }\n\n                actionPanel.Items.Add(result);\n                ToolStripMenuItem result2 = null;\n                if (actionMenu != null)\n                {\n                    result2 = new ToolStripMenuItem(group.Text);\n                    if (parent == null)\n                    {\n                        actionMenu.Items.Add(result2);\n                    }\n                    else\n                    {\n                        parent.DropDownItems.Add(result2);\n                    }\n                }\n\n                foreach (TaskItem subItem in group.Items)\n                {\n                    TaskItemFill(subItem, list, actionPanel, actionMenu, result2);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Features/TimeSpanExtensions.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Features\n{\n    using System;\n\n    public static class TimeSpanExtensions\n    {\n        public static int GetTotalMinutes(this TimeSpan time)\n        {\n            return time.Minutes + (time.Hours + time.Days * 24) * 60;\n        }\n\n        public static long GetTotalSeconds(this TimeSpan time)\n        {\n            return time.Seconds + (time.Minutes + (time.Hours + time.Days * 24) * 60) * 60;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/IMainForm.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Microsoft.Web.Management.Client;\nusing Microsoft.Web.Management.Client.Win32;\n\nnamespace JexusManager\n{\n    public interface IMainForm\n    {\n        IManagementUIService UIService { get; }\n\n        void AddSiteNode(Site newSite);\n        void EndProgress();\n        void LoadInner(IModulePage page);\n        void LoadPage(IModulePage page);\n        void LoadPageAndSelectNode(IModulePage page, object navigationData); // TODO: delete this ultimately\n        void LoadPools();\n        void LoadSites();\n        void RemoveSiteNode(Site selectedItem);\n        void BeginProgress();\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/JexusManager.Shared.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <RootNamespace>JexusManager</RootNamespace>\n    <Nullable>enable</Nullable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Diagnostics.Tracing.TraceEvent\" Version=\"3.1.21\" />\n    <PackageReference Include=\"Portable.BouncyCastle\" Version=\"1.9.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.Web.Administration\\Microsoft.Web.Administration.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Management\\Microsoft.Web.Management.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Notifications\\JexusManager.Notifications.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "JexusManager.Shared/NativeMethods.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Administration;\n\n// ReSharper disable InconsistentNaming\n\nnamespace JexusManager\n{\n    using System.Drawing;\n    using System.Runtime.InteropServices;\n    using System.Windows.Forms;\n\n    public static class NativeMethods\n    {\n        [DllImport(\"user32\")]\n        public static extern uint SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);\n\n        internal const int BCM_SETSHIELD = (0x1600 + 0x000C); //Elevated button\n\n        private static void AddShieldToButton(Button b)\n        {\n            b.FlatStyle = FlatStyle.System;\n            SendMessage(b.Handle, BCM_SETSHIELD, IntPtr.Zero, (IntPtr)1);\n        }\n\n        public static void TryAddShieldToButton(Button button)\n        {\n            if (!PublicNativeMethods.IsProcessElevated)\n            {\n                AddShieldToButton(button);\n            }\n        }\n\n        public static void RemoveShieldFromButton(Button b)\n        {\n            b.FlatStyle = FlatStyle.System;\n            SendMessage(b.Handle, BCM_SETSHIELD, IntPtr.Zero, (IntPtr)0);\n        }\n\n\n        // BOOL WINAPI CryptAcquireCertificatePrivateKey(\n        //\t\tPCCERT_CONTEXT pCert,\n        //\t\tDWORD dwFlags,\n        //\t\tvoid* pvReserved,\n        //\t\tHCRYPTPROV* phCryptProv,\n        //\t\tDWORD* pdwKeySpec,\n        //\t\tBOOL* pfCallerFreeProv\n        // );\n        [DllImport(\"Crypt32.dll\", SetLastError = true)]\n\n        public static extern bool CryptAcquireCertificatePrivateKey(\n            IntPtr pCert,\n            int dwFlags,\n            IntPtr pvReserved,\n            ref IntPtr phCryptProv,\n            ref int pdwKeySpec,\n            ref bool pfCallerFreeProv);\n\n        [System.Runtime.InteropServices.DllImport(\"Kernel32\")]\n        public static extern bool CloseHandle(IntPtr handle);\n\n        [DllImport(\"user32.dll\")]\n        static extern IntPtr LoadImage(\n            IntPtr hinst,\n            string lpszName,\n            uint uType,\n            int cxDesired,\n            int cyDesired,\n            uint fuLoad);\n\n        public static Bitmap GetShieldIcon()\n        {\n            var size = SystemInformation.SmallIconSize;\n            var image = LoadImage(IntPtr.Zero, \"#106\", 1, size.Width, size.Height, 0);\n\n            if (image == IntPtr.Zero)\n            {\n                return null;\n            }\n\n            using var icon = Icon.FromHandle(image);\n            var bitmap = new Bitmap(size.Width, size.Height);\n            using (var g = Graphics.FromImage(bitmap))\n            {\n                g.DrawIcon(icon, new Rectangle(0, 0, size.Width, size.Height));\n            }\n\n            return bitmap;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/PhysicalDirectory.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager\n{\n    using System.IO;\n\n    using Microsoft.Web.Administration;\n\n    public class PhysicalDirectory\n    {\n        public PhysicalDirectory(DirectoryInfo physicalDirectory, string path, Application application)\n        {\n            Name = physicalDirectory.Name;\n            FullName = physicalDirectory.FullName;\n            Application = application ?? throw new System.ArgumentNullException(nameof(application));\n            PathToSite = Application.IsRoot() ? '/' + path : Application.Path + '/' + path;\n            LocationPath = Application.Site.Name + PathToSite;\n        }\n\n        public Application Application { get; }\n        public string FullName { get; private set; }\n        public string Name { get; private set; }\n        public string PathToSite { get; }\n        public string LocationPath { get; private set; }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2016-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"e4040a45-b156-4048-b1a4-bd262ba18047\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "JexusManager.Shared/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace JexusManager.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"JexusManager.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap application_32 {\n            get {\n                object obj = ResourceManager.GetObject(\"application_32\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap back_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"back_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap basic_settings_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"basic_settings_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap go_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"go_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap help_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"help_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap move_down_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"move_down_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap move_up_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"move_up_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap remove_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"remove_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap show_all_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"show_all_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap site_32 {\n            get {\n                object obj = ResourceManager.GetObject(\"site_32\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap title_32 {\n            get {\n                object obj = ResourceManager.GetObject(\"title_32\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap transparent_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"transparent_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static System.Drawing.Bitmap view_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"view_16\", resourceCulture);\n                return ((System.Drawing.Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"application_32\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\application_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"title_32\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\title_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"site_32\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\site_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"transparent_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\transparent_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"help_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\help_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"remove_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\remove_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"go_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\go_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"show_all_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\show_all_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"move_down_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\move_down_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"move_up_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\move_up_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"view_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\view_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"back_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\back_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"basic_settings_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\basic_settings_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "JexusManager.Shared/ServerManagerExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing System.Collections.Generic;\n\nnamespace JexusManager\n{\n    public static class ServerManagerExtensions\n    {\n        public static IDictionary<string, List<string>> GetExtra(this ServerManager server)\n        {\n            return server.Extra;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Services/ConfigurationService.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Services\n{\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Server;\n    using System;\n    using System.Windows.Forms;\n\n    public class ConfigurationService : IConfigurationService\n    {\n        public ManagementScope Scope { get; set; }\n        public ServerManager Server { get; set; }\n        public Microsoft.Web.Administration.Application Application { get; set; }\n        public Site Site { get; set; }\n        public IMainForm Form { get; set; }\n        public VirtualDirectory VirtualDirectory { get; set; }\n        public PhysicalDirectory PhysicalDirectory { get; set; }\n        private readonly Configuration _config;\n\n        private readonly string _location;\n\n        public ConfigurationService(IMainForm form, Configuration config, ManagementScope scope, ServerManager server, Site site, Microsoft.Web.Administration.Application application, VirtualDirectory virtualDirectory, PhysicalDirectory physicalDirectory, string location)\n        {\n            Scope = scope;\n            Server = server;\n            Application = application;\n            Site = site;\n            Form = form;\n            VirtualDirectory = virtualDirectory;\n            PhysicalDirectory = physicalDirectory;\n            _config = config;\n            _location = location;\n        }\n\n        public Configuration GetConfiguration()\n        {\n            return _config;\n        }\n\n        public ServerManager ServerManager\n        {\n            get\n            {\n                var result = Server ??\n                       Site?.Server ??\n                       Application?.Server ??\n                       VirtualDirectory?.Application.Server ??\n                       PhysicalDirectory?.Application.Server;\n                if (result == null)\n                    throw new InvalidOperationException(\"server manager cannot be null\");\n\n                return result;\n            }\n        }\n\n        public ConfigurationSection GetSection(string sectionPath, string locationPath = null, bool acceptNonLocallyStored = true)\n        {\n            var config = GetConfiguration();\n            ConfigurationSection section;\n            if (PhysicalDirectory != null)\n            {\n                section = config.GetSection(sectionPath, PhysicalDirectory.LocationPath);\n            }\n            else if (VirtualDirectory != null)\n            {\n                section = config.GetSection(sectionPath, VirtualDirectory.LocationPath());\n            }\n            else if (Application != null)\n            {\n                section = config.GetSection(sectionPath, Application.LocationPath());\n            }\n            else\n            {\n                section = locationPath == null ? config.GetSection(sectionPath) : config.GetSection(sectionPath, locationPath);\n            }\n\n            if (acceptNonLocallyStored)\n            {\n                return section;\n            }\n\n            if (section == null)\n            {\n                throw new InvalidOperationException(\"null section\");\n            }\n\n            return section.IsLocallyStored ? section : ServerManager.GetApplicationHostConfiguration().GetSection(sectionPath, _location);\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Services/ControlPanel.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Services\n{\n    using System;\n    using System.Collections.Generic;\n    using System.Collections.ObjectModel;\n\n    using Microsoft.Web.Management.Client;\n\n    public sealed class ControlPanel : IControlPanel\n    {\n        #region IControlPanel\n        private readonly List<ModulePageInfo> _pages = new List<ModulePageInfo>();\n\n        public ReadOnlyCollection<ControlPanelCategoryInfo> GetCategories(string categorization)\n        {\n            return new ReadOnlyCollection<ControlPanelCategoryInfo>(new List<ControlPanelCategoryInfo>());\n        }\n\n        public ControlPanelCategoryInfo GetCategory(string categorization, ModulePageInfo pageInfo)\n        {\n            return null;\n        }\n\n        public ModulePageInfo GetPage(Type pageType)\n        {\n            return null;\n        }\n\n        public ReadOnlyCollection<ModulePageInfo> GetPages(Module module)\n        {\n            return new ReadOnlyCollection<ModulePageInfo>(new List<ModulePageInfo>());\n        }\n\n        public ReadOnlyCollection<ModulePageInfo> GetPages(string categorization, string categoryName)\n        {\n            return new ReadOnlyCollection<ModulePageInfo>(new List<ModulePageInfo>());\n        }\n\n        public void RegisterCategory(ControlPanelCategoryInfo categoryInfo)\n        {\n        }\n\n        public void RegisterHomepage(ModulePageInfo homepageInfo)\n        {\n        }\n\n        public void RegisterPage(ModulePageInfo itemPageInfo)\n        {\n            _pages.Add(itemPageInfo);\n        }\n\n        public void RegisterPage(string categoryName, ModulePageInfo itemPageInfo)\n        {\n        }\n\n        public ReadOnlyCollection<ControlPanelCategorization> Categorizations\n        {\n            get { return null; }\n        }\n\n        public ModulePageInfo ControlPanelPage\n        {\n            get { return null; }\n        }\n\n        public ReadOnlyCollection<ModulePageInfo> Pages\n        {\n            get { return new ReadOnlyCollection<ModulePageInfo>(_pages); }\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Services/IConfigurationService.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Services\n{\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Server;\n    using System.Windows.Forms;\n\n    public interface IConfigurationService\n    {\n        Configuration GetConfiguration();\n        ManagementScope Scope { get; set; }\n        Microsoft.Web.Administration.Application Application { get; set; }\n        ServerManager Server { get; set; }\n        Site Site { get; set; }\n        IMainForm Form { get; set; }\n        VirtualDirectory VirtualDirectory { get; set; }\n        PhysicalDirectory PhysicalDirectory { get; }\n\n        ServerManager ServerManager { get; }\n\n        ConfigurationSection GetSection(string systemWebserverSecurityAccess, string location = null, bool acceptNonLocallyStored = true);\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/Services/ManagementUIService.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace JexusManager.Services\n{\n    using System;\n    using System.Collections;\n    using System.Drawing;\n    using System.Windows.Forms;\n\n    using Microsoft.Web.Management.Client.Win32;\n    using System.Text;\n\n    public sealed class ManagementUIService : IManagementUIService\n    {\n        public ManagementUIService(IWin32Window dialogOwner)\n        {\n            DialogOwner = dialogOwner;\n        }\n\n        public void ShowContextMenu(Point location)\n        {\n        }\n\n        public DialogResult ShowDialog(DialogForm form)\n        {\n            return form.ShowDialog(DialogOwner);\n        }\n\n        public void ShowError(Exception exception, string message, string caption, bool isWarning)\n        {\n            message = new StringBuilder()\n                .AppendLine(\"There was an error while performing this operation.\")\n                .AppendLine()\n                .AppendLine(\"Details:\")\n                .AppendLine()\n                .AppendLine(exception.Message)\n                .ToString();\n            ShowMessage(message, caption, MessageBoxButtons.OK, isWarning ? MessageBoxIcon.Warning : MessageBoxIcon.Error);\n        }\n\n        public void ShowMessage(string text, string caption)\n        {\n            ShowMessage(text, caption, MessageBoxButtons.OK, MessageBoxIcon.Information);\n        }\n\n        public DialogResult ShowMessage(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)\n        {\n            return ShowMessage(text, caption, buttons, icon, MessageBoxDefaultButton.Button1);\n        }\n\n        public DialogResult ShowMessage(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon,\n            MessageBoxDefaultButton defaultButton)\n        {\n            try\n            {\n                return MessageBox.Show(DialogOwner, text, caption, buttons, icon, defaultButton);\n            }\n            catch (ObjectDisposedException)\n            {\n                return MessageBox.Show(text, caption, buttons, icon, defaultButton);\n            }\n        }\n\n        public object StartProgress(string text, MethodInvoker cancelMethod)\n        {\n            return null;\n        }\n\n        public void StopProgress(object token)\n        {\n        }\n\n        public void Update()\n        {\n        }\n\n        public ManagementUIColorTable Colors\n        {\n            get { return null; }\n        }\n\n        public IWin32Window DialogOwner { get; }\n\n        public bool RightToLeftLayout\n        {\n            get { return false; }\n        }\n\n        public IDictionary Styles\n        {\n            get { return null; }\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/StringCompareExtensions.cs",
    "content": "﻿// Copyright (c) Jonathan Wood. All rights reserved.\n// \n// Use of this article and any related source code or other files is governed by the terms and conditions of The Code Project Open License.\n// http://www.blackbeltcoder.com/Articles/net/implementing-vbs-like-operator-in-c\n\nusing System.Collections.Generic;\n\nnamespace JexusManager\n{\n    static class StringCompareExtensions\n    {\n        /// <summary>\n        /// Implement's VB's Like operator logic.\n        /// </summary>\n        public static bool IsLike(this string s, string pattern)\n        {\n            // Characters matched so far\n            int matched = 0;\n\n            // Loop through pattern string\n            for (int i = 0; i < pattern.Length;)\n            {\n                // Check for end of string\n                if (matched > s.Length)\n                    return false;\n\n                // Get next pattern character\n                char c = pattern[i++];\n                if (c == '[') // Character list\n                {\n                    // Test for exclude character\n                    bool exclude = (i < pattern.Length && pattern[i] == '!');\n                    if (exclude)\n                        i++;\n                    // Build character list\n                    int j = pattern.IndexOf(']', i);\n                    if (j < 0)\n                        j = s.Length;\n                    HashSet<char> charList = CharListToSet(pattern.Substring(i, j - i));\n                    i = j + 1;\n\n                    if (charList.Contains(s[matched]) == exclude)\n                        return false;\n                    matched++;\n                }\n                else if (c == '?') // Any single character\n                {\n                    matched++;\n                }\n                else if (c == '#') // Any single digit\n                {\n                    if (!char.IsDigit(s[matched]))\n                        return false;\n                    matched++;\n                }\n                else if (c == '*') // Zero or more characters\n                {\n                    if (i < pattern.Length)\n                    {\n                        // Matches all characters until\n                        // next character in pattern\n                        char next = pattern[i];\n                        int j = s.IndexOf(next, matched);\n                        if (j < 0)\n                            return false;\n                        matched = j;\n                    }\n                    else\n                    {\n                        // Matches all remaining characters\n                        matched = s.Length;\n                        break;\n                    }\n                }\n                else // Exact character\n                {\n                    if (matched >= s.Length || c != s[matched])\n                        return false;\n                    matched++;\n                }\n            }\n            // Return true if all characters matched\n            return (matched == s.Length);\n        }\n\n        /// <summary>\n        /// Converts a string of characters to a HashSet of characters. If the string\n        /// contains character ranges, such as A-Z, all characters in the range are\n        /// also added to the returned set of characters.\n        /// </summary>\n        /// <param name=\"charList\">Character list string</param>\n        private static HashSet<char> CharListToSet(string charList)\n        {\n            HashSet<char> set = new HashSet<char>();\n\n            for (int i = 0; i < charList.Length; i++)\n            {\n                if ((i + 1) < charList.Length && charList[i + 1] == '-')\n                {\n                    // Character range\n                    char startChar = charList[i++];\n                    i++; // Hyphen\n                    char endChar = (char)0;\n                    if (i < charList.Length)\n                        endChar = charList[i++];\n                    for (int j = startChar; j <= endChar; j++)\n                        set.Add((char)j);\n                }\n                else set.Add(charList[i]);\n            }\n            return set;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/StringUtility.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.VisualBasic.CompilerServices;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace JexusManager\n{\n    public static class StringUtility\n    {\n        public static string Combine<T>(this IEnumerable<T> item, string connector)\n        {\n            var preConditions = item.ToList();\n            if (preConditions.Count == 0)\n            {\n                return string.Empty;\n            }\n\n            var result = new StringBuilder(preConditions[0].ToString());\n            for (int index = 1; index < preConditions.Count; index++)\n            {\n                result.Append(connector).Append(preConditions[index]);\n            }\n\n            return result.ToString();\n        }\n\n        public static bool IsWildcard(this string host)\n        {\n            if (string.IsNullOrEmpty(host))\n            {\n                return false;\n            }\n\n            if (host == \"*\")\n            {\n                return true;\n            }\n\n            var index = host.IndexOf('.');\n            if (index != 1)\n            {\n                return false;\n            }\n\n            return host[0] == '*' && host.IndexOf('*', 1) == -1;\n        }\n\n        public static bool IsValidHost(this string host, bool supportsWildcard = false)\n        {\n            return supportsWildcard && host.IsWildcard() ? host.TrimStart('*', '.').IsValidBody() : host.IsValidBody();\n        }\n\n        private static bool IsValidBody(this string host)\n        {\n            var invalid = \"\\\"/\\\\[]:|<>+=;,?*$%#@{}^`\".ToCharArray();\n            foreach (var ch in invalid)\n            {\n                if (host.Contains(ch))\n                {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        public static bool MatchHostName(this string name, string host)\n        {\n            if (host.IsWildcard())\n            {\n                // IMPORTANT: wildcard host name requires wildcard certificate.\n                return name == host;\n            }\n\n            if (name.IsWildcard())\n            {\n                // IMPORTANT: wildcard certificate.\n#if NETCOREAPP3_1\n                return host.IsLike(name);\n#else\n                return LikeOperator.LikeString(host, name, Microsoft.VisualBasic.CompareMethod.Text);\n#endif\n            }\n\n            return name == host;\n        }\n    }\n}\n"
  },
  {
    "path": "JexusManager.Shared/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "JexusManager.slnx",
    "content": "<Solution>\n  <Folder Name=\"/.nuget/\" />\n  <Folder Name=\"/Controls/\">\n    <Project Path=\"JexusManager.Breadcrumb/JexusManager.Breadcrumb.csproj\" />\n    <Project Path=\"JexusManager.Notifications/JexusManager.Notifications.csproj\" />\n    <Project Path=\"lib/CheckBoxComboBox/CheckBoxComboBox.csproj\" Id=\"70a25201-8ea4-48f8-a4a6-ed13adf8823c\" />\n  </Folder>\n  <Folder Name=\"/Features/\">\n    <Project Path=\"JexusManager.Features.Access/JexusManager.Features.Access.csproj\" />\n    <Project Path=\"JexusManager.Features.Asp/JexusManager.Features.Asp.csproj\" />\n    <Project Path=\"JexusManager.Features.Authentication/JexusManager.Features.Authentication.csproj\" />\n    <Project Path=\"JexusManager.Features.Authorization/JexusManager.Features.Authorization.csproj\" />\n    <Project Path=\"JexusManager.Features.Caching/JexusManager.Features.Caching.csproj\" />\n    <Project Path=\"JexusManager.Features.Certificates/JexusManager.Features.Certificates.csproj\" />\n    <Project Path=\"JexusManager.Features.Cgi/JexusManager.Features.Cgi.csproj\" />\n    <Project Path=\"JexusManager.Features.Compression/JexusManager.Features.Compression.csproj\" />\n    <Project Path=\"JexusManager.Features.DefaultDocument/JexusManager.Features.DefaultDocument.csproj\" />\n    <Project Path=\"JexusManager.Features.DirectoryBrowse/JexusManager.Features.DirectoryBrowse.csproj\" />\n    <Project Path=\"JexusManager.Features.FastCgi/JexusManager.Features.FastCgi.csproj\" />\n    <Project Path=\"JexusManager.Features.Handlers/JexusManager.Features.Handlers.csproj\" />\n    <Project Path=\"JexusManager.Features.HttpApi/JexusManager.Features.HttpApi.csproj\" />\n    <Project Path=\"JexusManager.Features.HttpErrors/JexusManager.Features.HttpErrors.csproj\" />\n    <Project Path=\"JexusManager.Features.HttpRedirect/JexusManager.Features.HttpRedirect.csproj\" />\n    <Project Path=\"JexusManager.Features.IpSecurity/JexusManager.Features.IpSecurity.csproj\" />\n    <Project Path=\"JexusManager.Features.IsapiCgiRestriction/JexusManager.Features.IsapiCgiRestriction.csproj\" />\n    <Project Path=\"JexusManager.Features.IsapiFilters/JexusManager.Features.IsapiFilters.csproj\" />\n    <Project Path=\"JexusManager.Features.Jexus/JexusManager.Features.Jexus.csproj\" />\n    <Project Path=\"JexusManager.Features.Logging/JexusManager.Features.Logging.csproj\" />\n    <Project Path=\"JexusManager.Features.MimeMap/JexusManager.Features.MimeMap.csproj\" />\n    <Project Path=\"JexusManager.Features.Modules/JexusManager.Features.Modules.csproj\" />\n    <Project Path=\"JexusManager.Features.RequestFiltering/JexusManager.Features.RequestFiltering.csproj\" />\n    <Project Path=\"JexusManager.Features.ResponseHeaders/JexusManager.Features.ResponseHeaders.csproj\" />\n    <Project Path=\"JexusManager.Features.Rewrite/JexusManager.Features.Rewrite.csproj\" />\n    <Project Path=\"JexusManager.Features.TraceFailedRequests/JexusManager.Features.TraceFailedRequests.csproj\" />\n  </Folder>\n  <Project Path=\"CertificateInstaller/CertificateInstaller.csproj\" />\n  <Project Path=\"JexusManager.Shared/JexusManager.Shared.csproj\" />\n  <Project Path=\"JexusManager/JexusManager.csproj\" />\n  <Project Path=\"Microsoft.Web.Administration/Microsoft.Web.Administration.csproj\" />\n  <Project Path=\"Microsoft.Web.Configuration.AppHostFileProvider/Microsoft.Web.Configuration.AppHostFileProvider.csproj\" />\n  <Project Path=\"Microsoft.Web.Management/Microsoft.Web.Management.csproj\" />\n  <!-- <Project Path=\"Tests.IIS/Tests.IIS.csproj\" /> -->\n  <Project Path=\"Tests.JexusManager/Tests.JexusManager.csproj\" />\n  <Project Path=\"Tests/Tests.csproj\" />\n</Solution>\n"
  },
  {
    "path": "LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2014-2017 Lex Li\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Microsoft.Web.Administration/Application.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.CompilerServices;\nusing System.Security.Authentication.ExtendedProtection;\nusing System.Xml;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class Application : ConfigurationElement, IItem<Application>\n    {\n        private Configuration _configuration;\n\n        internal Application(ApplicationCollection parent)\n            : this(null, parent)\n        {\n        }\n\n        internal Application(ConfigurationElement element, ApplicationCollection parent)\n            : base(element, \"application\", null, parent, null, null)\n        {\n            Parent = parent;\n            if (Parent.Parent == null)\n            {\n                throw new ArgumentException(\"Site cannot be null\", nameof(parent));\n            }\n\n            // IMPORTANT: avoid duplicate application tag.\n            ForceCreateEntity();\n            if (string.IsNullOrWhiteSpace(Path))\n            {\n                // IMPORTANT: fix path attribute after initialization.\n                Path = \"/\";\n            }\n\n            VirtualDirectories = new VirtualDirectoryCollection(this);\n            if (element == null)\n            {\n                return;\n            }\n\n            foreach (ConfigurationElement node in (ConfigurationElementCollection)element)\n            {\n                VirtualDirectories.InternalAdd(new VirtualDirectory(node, VirtualDirectories));\n            }\n\n            Location = Site.Name + Path;\n            foreach (ApplicationPool pool in Server.ApplicationPools)\n            {\n                if (pool.Name == ApplicationPoolName)\n                {\n                    pool.ApplicationCount++;\n                }\n            }\n        }\n\n        internal string Location { get; set; }\n\n        internal override void AddChild(ConfigurationElement child)\n        {\n            if (child is VirtualDirectory virtualDirectory)\n            {\n                VirtualDirectories.Add(virtualDirectory);\n            }\n            else\n            {\n                base.AddChild(child);\n            }\n        }\n\n        public Configuration GetWebConfiguration()\n        {\n            if (_configuration != null)\n            {\n                // TODO: return _configuration;\n            }\n\n            string root = null;\n            foreach (VirtualDirectory child in VirtualDirectories)\n            {\n                if (child.Path == VirtualDirectory.RootPath)\n                {\n                    root = child.PhysicalPath.ExpandIisExpressEnvironmentVariables(this.GetActualExecutable());\n                    break;\n                }\n            }\n\n            if (this.IsRoot())\n            {\n                var server = Server.GetConfigurationCache().FileContext;\n                if (root == null)\n                {\n                    var site = new Configuration(new FileContext(Server, null, server, Site.Name, false, false, Server.ReadOnly, (Entity as IXmlLineInfo).LineNumber));\n                    return _configuration = site;\n                }\n                else\n                {\n                    var physicalPath = Server.GetPhysicalPath(root);\n                    var siteFile = System.IO.Path.Combine(physicalPath,\n                        \"web.config\").ExpandIisExpressEnvironmentVariables(this.GetActualExecutable());\n                    Server.CleanSiteFile(siteFile);\n\n                    // TODO: test ACL to set ReadOnly.\n                    var site = new Configuration(new FileContext(Server, siteFile, server, Site.Name, false, false, Server.ReadOnly));\n                    return _configuration = site;\n                }\n            }\n\n            string start = null;\n            Configuration parent = null;\n            while (parent == null)\n            {\n                var parentPath = (start ?? Path).GetParentPath();\n                foreach (Application app in Site.Applications)\n                {\n                    if (app.Path != parentPath)\n                    {\n                        continue;\n                    }\n\n                    parent = app.GetWebConfiguration();\n                    break;\n                }\n\n                if (start == parentPath)\n                {\n                    break;\n                }\n\n                start = parentPath;\n            }\n\n            if (root == null)\n            {\n                var app = new Configuration(new FileContext(Server, null, parent?.FileContext, Site.Name, false, false, Server.ReadOnly, (Entity as IXmlLineInfo).LineNumber));\n                return _configuration = app;\n            }\n\n            var fullPath = Site.Name + Path;\n            var appFile = System.IO.Path.Combine(root, \"web.config\");\n            // TODO: test ACL to set ReadOnly.\n            return _configuration = new Configuration(new FileContext(Server, appFile, parent?.FileContext, fullPath, false, false, Server.ReadOnly));\n        }\n\n        public override string ToString()\n        {\n            return Name;\n        }\n\n        public string ApplicationPoolName\n        {\n            get\n            {\n                var attribute = GetAttribute(\"applicationPool\");\n                return attribute.IsInheritedFromDefaultValue\n                    ? Server.ApplicationDefaults.ApplicationPoolName\n                    : (string)attribute.Value;\n            }\n\n            set\n            {\n                var attribute = GetAttribute(\"applicationPool\");\n                if (value == Server.ApplicationDefaults.ApplicationPoolName)\n                {\n                    attribute.Delete();\n                    return;\n                }\n\n                attribute.Value = value;\n            }\n        }\n\n        public string EnabledProtocols\n        {\n            get { return (string)this[\"enabledProtocols\"]; }\n            set { this[\"enabledProtocols\"] = value; }\n        }\n\n        public string Path\n        {\n            get { return (string)this[\"path\"]; }\n            set { this[\"path\"] = value; }\n        }\n\n        public VirtualDirectoryCollection VirtualDirectories { get; internal set; }\n\n        public VirtualDirectoryDefaults VirtualDirectoryDefaults\n        {\n            get { return (VirtualDirectoryDefaults)ChildElements[\"virtualDirectoryDefaults\"]; }\n        }\n\n        internal SortedDictionary<string, List<string>> Extra { get; set; } = new SortedDictionary<string, List<string>>();\n        internal ApplicationCollection Parent { get; private set; }\n\n        internal ServerManager Server\n        {\n            get { return Parent.Parent.Parent.Parent; }\n        }\n\n        internal static readonly string RootPath = Helper.RootPath;\n\n        internal string Name { get; set; }\n\n        internal Site Site\n        {\n            get { return Parent.Parent; }\n        }\n\n        internal ApplicationCollection Remove()\n        {\n            if (Path == RootPath)\n            {\n                throw new InvalidOperationException(\"Root application cannot be removed. Please remove the site.\");\n            }\n\n            var newApps = new ApplicationCollection(Site);\n            foreach (Application item in Parent)\n            {\n                if (item == this)\n                {\n                    item.Delete();\n                    continue;\n                }\n\n                item.Parent = newApps;\n                newApps.Add(item);\n            }\n\n            newApps.Parent.Applications = newApps;\n            return newApps;\n        }\n\n        internal string ToFileName()\n        {\n            var merged = Parent.Parent.Name + Path;\n            return merged.TrimEnd('/').Replace('/', '_');\n        }\n\n        internal void Save()\n        {\n            _configuration?.FileContext.Save();\n            _configuration?.OnCacheInvalidated();\n        }\n\n        internal void Load(string path, string physicalPath)\n        {\n            VirtualDirectories.Add(\n                new VirtualDirectory(null, VirtualDirectories) { Path = path, PhysicalPath = physicalPath });\n        }\n\n        public void Apply()\n        {\n        }\n\n        public bool Match(Application other)\n        {\n            return Equals(other);\n        }\n\n        public bool Equals(Application other)\n        {\n            return other != null && other.Path != Path;\n        }\n\n        internal string PhysicalPath\n        {\n            get\n            {\n                if (VirtualDirectories.Count == 0)\n                {\n                    return string.Empty;\n                }\n\n                return VirtualDirectories[0].PhysicalPath;\n            }\n\n            set\n            {\n                if (VirtualDirectories.Count == 0)\n                {\n                    return;\n                }\n\n                VirtualDirectories[0].PhysicalPath = value;\n            }\n        }\n\n        public string Flag { get; set; } = \"Local\";\n        public ConfigurationElement Element\n        {\n            get { return this; }\n            set { }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationCollection : ConfigurationElementCollectionBase<Application>\n    {\n        internal ApplicationCollection(Site site)\n            : base(null, \"site\", null, site.ParentElement, site.InnerEntity, null)\n        {\n            Parent = site;\n        }\n\n        public Application Add(string path, string physicalPath)\n        {\n            var result = new Application(this) { Path = path };\n            result.Load(VirtualDirectory.RootPath, physicalPath);\n            Add(result);\n            return result;\n        }\n\n        protected override Application CreateNewElement(string elementTagName)\n        {\n            throw new NotImplementedException();\n        }\n\n        private static readonly char[] SChars = { '\\\\', '?', ';', ':', '@', '&', '=', '+', '$', ',', '|', '\"', '<', '>', '*' };\n\n        public static char[] InvalidApplicationPathCharacters()\n        {\n            return SChars;\n        }\n\n        internal Site Parent { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationDefaults.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationDefaults : ConfigurationElement\n    {\n        internal ApplicationDefaults(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, null, null, parent, null, null)\n        {\n        }\n\n        public string ApplicationPoolName\n        {\n            get { return (string)this[\"applicationPool\"]; }\n            set { this[\"applicationPool\"] = value; }\n        }\n\n        public string EnabledProtocols\n        {\n            get { return (string)this[\"enabledProtocols\"]; }\n            set { this[\"enabledProtocols\"] = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationDomain.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public class ApplicationDomain : ConfigurationElement\n    {\n        internal ApplicationDomain(ConfigurationElement parent)\n            : base(null, \"applicationDomain\", null, parent, null, null)\n        { }\n\n        public void Unload()\n        { }\n        public string Id { get; private set; }\n        public int Idle { get; private set; }\n        public string PhysicalPath { get; private set; }\n        public string VirtualPath { get; private set; }\n        public WorkerProcess WorkerProcess { get; private set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationDomainCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationDomainCollection : ConfigurationElementCollectionBase<ApplicationDomain>\n    {\n        internal ApplicationDomainCollection()\n        { }\n\n        protected override ApplicationDomain CreateNewElement(string elementTagName)\n        {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPathValidator.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Web.Administration\n{\n    [Obfuscation(Exclude = true, ApplyToMembers = false)]\n    internal class ApplicationPathValidator : ConfigurationValidatorBase\n    {\n        public override void Validate(object value)\n        {\n            var data = (string)value;\n            string message = $\"Invalid application path {data}\\r\\n\";\n            if (string.IsNullOrWhiteSpace(data))\n            {\n                throw new COMException(message);\n            }\n\n            if (data[0] != '/')\n            {\n                throw new COMException(message);\n            }\n\n            if (data.Length > 1 && data[data.Length - 1] == '/')\n            {\n                throw new COMException(message);\n            }\n\n            var items = data.Split('/');\n            foreach (var item in items)\n            {\n                if (item == \".\" || item == \"..\")\n                {\n                    throw new COMException(message);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPool.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationPool : ConfigurationElement, IItem<ApplicationPool>\n    {\n        private ApplicationPoolProcessModel _processModel;\n        private ApplicationPoolRecycling _recycling;\n        private ApplicationPoolFailure _failure;\n        private ApplicationPoolCpu _cpu;\n        private WorkerProcessCollection _workerProcesses;\n\n        private ObjectState? _state;\n        internal const string ManagedRuntimeVersion40 = \"v4.0\";\n        internal const string ManagedRuntimeVersion20 = \"v2.0\";\n        internal readonly static string ManagedRuntimeVersionNone = string.Empty;\n\n        internal ApplicationPool(ConfigurationElement element, ApplicationPoolCollection parent)\n            : base(element, \"add\", null, parent, null, null)\n        {\n            Parent = parent;\n            _workerProcesses = new WorkerProcessCollection(GetCollection(\"workerProcesses\"), parent.Parent);\n        }\n\n        internal ApplicationPoolCollection Parent { get; }\n        internal ServerManager Server => Parent.Parent;\n\n        public ObjectState Recycle()\n        {\n            State = ObjectState.Started;\n            Server.Recycle(this);\n            return State;\n        }\n\n        public ObjectState Start()\n        {\n            // TODO: add timeout.\n            State = ObjectState.Starting;\n            Server.Start(this);\n            return State;\n        }\n\n        public ObjectState Stop()\n        {\n            // TODO: add timeout.\n            State = ObjectState.Starting;\n            Server.Stop(this);\n            return State;\n        }\n\n        public bool AutoStart\n        {\n            get { return (bool)this[\"autoStart\"]; }\n            set { this[\"autoStart\"] = value; }\n        }\n\n        public ApplicationPoolCpu Cpu\n        {\n            get { return _cpu ?? (_cpu = new ApplicationPoolCpu(ChildElements[\"cpu\"], this)); }\n        }\n\n        public bool Enable32BitAppOnWin64\n        {\n            get { return (bool)this[\"enable32BitAppOnWin64\"]; }\n            set { this[\"enable32BitAppOnWin64\"] = value; }\n        }\n\n        public bool EnableEmulationOnWinArm64\n        {\n            get { return (bool)this[\"enableEmulationOnWinArm64\"]; }\n            set { this[\"enableEmulationOnWinArm64\"] = value; }\n        }\n\n        public ApplicationPoolFailure Failure\n        {\n            get { return _failure ?? (_failure = new ApplicationPoolFailure(ChildElements[\"failure\"], this)); }\n        }\n\n        public ManagedPipelineMode ManagedPipelineMode\n        {\n            get { return (ManagedPipelineMode)Enum.ToObject(typeof(ManagedPipelineMode), this[\"managedPipelineMode\"]); }\n            set { this[\"managedPipelineMode\"] = (long)value; }\n        }\n\n        public string ManagedRuntimeVersion\n        {\n            get { return this[\"managedRuntimeVersion\"].ToString(); }\n            set { this[\"managedRuntimeVersion\"] = value; }\n        }\n\n        public string Name\n        {\n            get { return this[\"name\"].ToString(); }\n            set { this[\"name\"] = value; }\n        }\n\n        public ApplicationPoolProcessModel ProcessModel\n        {\n            get { return _processModel ?? (_processModel = new ApplicationPoolProcessModel(ChildElements[\"processModel\"], this)); }\n        }\n\n        public long QueueLength\n        {\n            get { return Convert.ToInt64((uint)this[\"queueLength\"]); }\n            set { this[\"queueLength\"] = Convert.ToUInt32(value); }\n        }\n\n        public ApplicationPoolRecycling Recycling\n        {\n            get { return _recycling ?? (_recycling = new ApplicationPoolRecycling(ChildElements[\"recycling\"], this)); }\n        }\n\n        public StartMode StartMode\n        {\n            get { return (StartMode)Enum.ToObject(typeof(StartMode), this[\"startMode\"]); }\n            set { this[\"startMode\"] = (long)value; }\n        }\n\n        public ObjectState State\n        {\n            get\n            {\n                if (_state == null || _state == ObjectState.Starting || _state == ObjectState.Stopping)\n                {\n                    var result = GetState();\n                    _state = result ? ObjectState.Started : ObjectState.Stopped;\n                }\n\n                return _state.Value;\n            }\n\n            private set\n            {\n                _state = value;\n            }\n        }\n\n        private bool GetState()\n        {\n            return Server.GetPoolState(this);\n        }\n\n        public WorkerProcessCollection WorkerProcesses\n        {\n            get { return _workerProcesses; }\n        }\n\n        public override string ToString()\n        {\n            return Name;\n        }\n\n        public void Apply()\n        {\n        }\n\n        public bool Match(ApplicationPool other)\n        {\n            return Equals(other);\n        }\n\n        public bool Equals(ApplicationPool other)\n        {\n            return other != null && Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase);\n        }\n\n        internal int ApplicationCount { get; set; }\n        public string Flag { get; set; } = \"Local\";\n\n        public ConfigurationElement Element\n        {\n            get { return this; }\n            set { }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPoolCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationPoolCollection : ConfigurationElementCollectionBase<ApplicationPool>\n    {\n        internal ApplicationPoolCollection(ServerManager parent)\n            : this(null, parent)\n        { }\n\n        internal ApplicationPoolCollection(ConfigurationElement collection, ServerManager parent)\n            : base(collection, \"applicationPools\", parent.ApplicationPoolCollection?.Schema, null, collection?.InnerEntity, null)\n        {\n            Parent = parent;\n            Section = collection?.Section;\n            if (collection == null)\n            {\n                return;\n            }\n\n            foreach (ConfigurationElement element in collection.GetCollection())\n            {\n                if (Schema.CollectionSchema.ContainsAddElement(element.ElementTagName))\n                {\n                    InternalAdd(new ApplicationPool(element, this));\n                }\n            }\n        }\n\n        public ApplicationPool Add(string name)\n        {\n            var result = new ApplicationPool(null, this) { Name = name };\n            Add(result);\n            return result;\n        }\n\n        protected override ApplicationPool CreateNewElement(string elementTagName)\n        {\n            var result = new ApplicationPool(null, this);\n            Add(result);\n            return result;\n        }\n\n        private static readonly char[] SChars = { '\\\\', '/', '\"', '|', '<', '>', ':', '*', '?', ']', '[', '+', '=', ';', ',', '@', '&' };\n\n        public static char[] InvalidApplicationPoolNameCharacters()\n        {\n            return SChars;\n        }\n\n        internal ServerManager Parent { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPoolCpu.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationPoolCpu : ConfigurationElement\n    {\n        internal ApplicationPoolCpu(ApplicationPool parent)\n            : this(null, parent)\n        { }\n\n        internal ApplicationPoolCpu(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"cpu\", null, parent, null, null)\n        {\n        }\n\n        public ProcessorAction Action\n        {\n            get { return (ProcessorAction)Enum.ToObject(typeof(ProcessorAction), this[\"action\"]); }\n            set { this[\"action\"] = (long)value; }\n        }\n\n        public long Limit\n        {\n            get { return Convert.ToInt64(this[\"limit\"]); }\n            set { this[\"limit\"] = Convert.ToUInt32(value); }\n        }\n\n        public TimeSpan ResetInterval\n        {\n            get { return (TimeSpan)this[\"resetInterval\"]; }\n            set { this[\"resetInterval\"] = value; }\n        }\n\n        public bool SmpAffinitized\n        {\n            get { return (bool)this[\"smpAffinitized\"]; }\n            set { this[\"smpAffinitized\"] = value; }\n        }\n\n        public long SmpProcessorAffinityMask\n        {\n            get { return Convert.ToInt64(this[\"smpProcessorAffinityMask\"]); }\n            set { this[\"smpProcessorAffinityMask\"] = Convert.ToUInt32(value); }\n        }\n\n        public long SmpProcessorAffinityMask2\n        {\n            get { return Convert.ToInt64(this[\"smpProcessorAffinityMask2\"]); }\n            set { this[\"smpProcessorAffinityMask2\"] = Convert.ToUInt32(value); }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPoolDefaults.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationPoolDefaults : ConfigurationElement\n    {\n        private ApplicationPoolRecycling _recycling;\n        private ApplicationPoolProcessModel _model;\n        private ApplicationPoolFailure _failure;\n        private ApplicationPoolCpu _cpu;\n\n        internal ApplicationPoolDefaults(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"applicationPoolDefaults\", null, parent, null, null)\n        {\n        }\n\n        public bool AutoStart\n        {\n            get { return (bool)this[\"autoStart\"]; }\n            set { this[\"autoStart\"] = value; }\n        }\n\n        public ApplicationPoolCpu Cpu\n        {\n            get { return _cpu ?? (_cpu = new ApplicationPoolCpu(ChildElements[\"cpu\"], this)); }\n        }\n\n        public bool Enable32BitAppOnWin64\n        {\n            get { return (bool)this[\"enable32BitAppOnWin64\"]; }\n            set { this[\"enable32BitAppOnWin64\"] = value; }\n        }\n\n        public ApplicationPoolFailure Failure\n        {\n            get { return _failure ?? (_failure = new ApplicationPoolFailure(ChildElements[\"failure\"], this)); }\n        }\n\n        public ManagedPipelineMode ManagedPipelineMode\n        {\n            get { return (ManagedPipelineMode)Enum.ToObject(typeof(ManagedPipelineMode), this[\"managedPipelineMode\"]); }\n            set { this[\"managedPipelineMode\"] = (long)value; }\n        }\n\n        public string ManagedRuntimeVersion\n        {\n            get { return this[\"managedRuntimeVersion\"].ToString(); }\n            set { this[\"managedRuntimeVersion\"] = value; }\n        }\n\n        public ApplicationPoolProcessModel ProcessModel\n        {\n            get { return _model ?? (_model = new ApplicationPoolProcessModel(ChildElements[\"processModel\"], this)); }\n        }\n\n        public long QueueLength\n        {\n            get { return Convert.ToInt64(this[\"queueLength\"]); }\n            set { this[\"queueLength\"] = Convert.ToUInt32(value); }\n        }\n\n        public ApplicationPoolRecycling Recycling\n        {\n            get { return _recycling ?? (_recycling = new ApplicationPoolRecycling(ChildElements[\"recycling\"], this)); }\n        }\n\n        public StartMode StartMode\n        {\n            get { return (StartMode)Enum.ToObject(typeof(StartMode), this[\"startMode\"]); }\n            set { this[\"startMode\"] = (long)value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPoolFailure.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationPoolFailure : ConfigurationElement\n    {\n        internal ApplicationPoolFailure(ApplicationPool parent)\n            : this(null, parent)\n        { }\n\n        internal ApplicationPoolFailure(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"failure\", null, parent, null, null)\n        {\n        }\n\n        public string AutoShutdownExe\n        {\n            get { return this[\"autoShutdownExe\"].ToString(); }\n            set { this[\"autoShutdownExe\"] = value; }\n        }\n\n        public string AutoShutdownParams\n        {\n            get { return this[\"autoShutdownParams\"].ToString(); }\n            set { this[\"autoShutdownParams\"] = value; }\n        }\n\n        public LoadBalancerCapabilities LoadBalancerCapabilities\n        {\n            get { return (LoadBalancerCapabilities)Enum.ToObject(typeof(LoadBalancerCapabilities), this[\"loadBalancerCapabilities\"]); }\n            set { this[\"loadBalancerCapabilities\"] = (long)value; }\n        }\n\n        public string OrphanActionExe\n        {\n            get { return (string)this[\"orphanActionExe\"]; }\n            set { this[\"orphanActionExe\"] = value; }\n        }\n\n        public string OrphanActionParams\n        {\n            get { return (string)this[\"orphanActionParams\"]; }\n            set { this[\"orphanActionParams\"] = value; }\n        }\n\n        public bool OrphanWorkerProcess\n        {\n            get { return (bool)this[\"orphanWorkerProcess\"]; }\n            set { this[\"orphanWorkerProcess\"] = value; }\n        }\n\n        public bool RapidFailProtection\n        {\n            get { return (bool)this[\"rapidFailProtection\"]; }\n            set { this[\"rapidFailProtection\"] = value; }\n        }\n\n        public TimeSpan RapidFailProtectionInterval\n        {\n            get { return (TimeSpan)this[\"rapidFailProtectionInterval\"]; }\n            set { this[\"rapidFailProtectionInterval\"] = value; }\n        }\n\n        public long RapidFailProtectionMaxCrashes\n        {\n            get { return Convert.ToInt64(this[\"rapidFailProtectionMaxCrashes\"]); }\n            set { this[\"rapidFailProtectionMaxCrashes\"] = Convert.ToUInt32(value); }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPoolNameValidator.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Web.Administration\n{\n    [Obfuscation(Exclude = true, ApplyToMembers = false)]\n    internal class ApplicationPoolNameValidator : ConfigurationValidatorBase\n    {\n        public override void Validate(object value)\n        {\n            var data = (string)value;\n            if (string.IsNullOrWhiteSpace(data))\n            {\n                throw new COMException(\"Invalid application pool name\\r\\n\");\n            }\n\n            foreach (var ch in ApplicationPoolCollection.InvalidApplicationPoolNameCharacters())\n            {\n                if (data.Contains(ch))\n                {\n                    throw new COMException(\"Invalid application pool name\\r\\n\");\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPoolPeriodicRestart.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationPoolPeriodicRestart : ConfigurationElement\n    {\n        private ScheduleCollection _collection;\n\n        internal ApplicationPoolPeriodicRestart(ConfigurationElement parent)\n            : this(null, parent)\n        {\n        }\n\n        internal ApplicationPoolPeriodicRestart(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"periodicRestart\", null, parent, null, null)\n        {\n        }\n\n        public long Memory\n        {\n            get { return Convert.ToInt64((uint)this[\"memory\"]); }\n            set { this[\"memory\"] = Convert.ToUInt32(value); }\n        }\n\n        public long PrivateMemory\n        {\n            get { return Convert.ToInt64((uint)this[\"privateMemory\"]); }\n            set { this[\"privateMemory\"] = Convert.ToUInt32(value); }\n        }\n\n        public long Requests\n        {\n            get { return Convert.ToInt64((uint)this[\"requests\"]); }\n            set { this[\"requests\"] = Convert.ToUInt32(value); }\n        }\n\n        public ScheduleCollection Schedule\n        {\n            get { return _collection ?? (_collection = new ScheduleCollection(ChildElements[\"schedule\"], this)); }\n        }\n\n        public TimeSpan Time\n        {\n            get { return (TimeSpan)this[\"time\"]; }\n            set { this[\"time\"] = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPoolProcessModel.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationPoolProcessModel : ConfigurationElement\n    {\n        internal ApplicationPoolProcessModel(ConfigurationElement parent)\n            : this(null, parent)\n        {\n        }\n\n        internal ApplicationPoolProcessModel(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"processModel\", null, parent, null, null)\n        {\n        }\n\n        public ProcessModelIdentityType IdentityType\n        {\n            get { return (ProcessModelIdentityType)Enum.ToObject(typeof(ProcessModelIdentityType), this[\"identityType\"]); }\n            set { this[\"identityType\"] = (long)value; }\n        }\n\n        public TimeSpan IdleTimeout\n        {\n            get { return (TimeSpan)this[\"idleTimeout\"]; }\n            set { this[\"idleTimeout\"] = value; }\n        }\n\n        public IdleTimeoutAction IdleTimeoutAction\n        {\n            get { return (IdleTimeoutAction)Enum.ToObject(typeof(IdleTimeoutAction), this[\"idleTimeoutAction\"]); }\n            set { this[\"idleTimeoutAction\"] = (long)value; }\n        }\n\n        public bool LoadUserProfile\n        {\n            get { return (bool)this[\"loadUserProfile\"]; }\n            set { this[\"loadUserProfile\"] = value; }\n        }\n\n        public ProcessModelLogEventOnProcessModel LogEventOnProcessModel\n        {\n            get { return (ProcessModelLogEventOnProcessModel)Enum.ToObject(typeof(ProcessModelLogEventOnProcessModel), this[\"logEventOnProcessModel\"]); }\n            set { this[\"logEventOnProcessModel\"] = (long)value; }\n        }\n\n        public long MaxProcesses\n        {\n            get { return Convert.ToInt64(this[\"maxProcesses\"]); }\n            set { this[\"maxProcesses\"] = Convert.ToUInt32(value); }\n        }\n\n        public string Password\n        {\n            get { return (string)this[\"password\"]; }\n            set { this[\"password\"] = value; }\n        }\n\n        public bool PingingEnabled\n        {\n            get { return (bool)this[\"pingingEnabled\"]; }\n            set { this[\"pingingEnabled\"] = value; }\n        }\n\n        public TimeSpan PingInterval\n        {\n            get { return (TimeSpan)this[\"pingInterval\"]; }\n            set { this[\"pingInterval\"] = value; }\n        }\n\n        public TimeSpan PingResponseTime\n        {\n            get { return (TimeSpan)this[\"pingResponseTime\"]; }\n            set { this[\"pingResponseTime\"] = value; }\n        }\n\n        public TimeSpan ShutdownTimeLimit\n        {\n            get { return (TimeSpan)this[\"shutdownTimeLimit\"]; }\n            set { this[\"shutdownTimeLimit\"] = value; }\n        }\n\n        public TimeSpan StartupTimeLimit\n        {\n            get { return (TimeSpan)this[\"startupTimeLimit\"]; }\n            set { this[\"startupTimeLimit\"] = value; }\n        }\n\n        public string UserName\n        {\n            get { return this[\"userName\"].ObjectToString(); }\n            set { this[\"userName\"] = value; }\n        }\n\n        public override string ToString()\n        {\n            switch (IdentityType)\n            {\n                case ProcessModelIdentityType.LocalSystem:\n                case ProcessModelIdentityType.LocalService:\n                case ProcessModelIdentityType.NetworkService:\n                    return IdentityType.ToString();\n                case ProcessModelIdentityType.ApplicationPoolIdentity:\n                    return $\"IIS AppPool\\\\{ParentElement[\"name\"]}\";\n                case ProcessModelIdentityType.SpecificUser:\n                    return this.UserName;\n                default:\n                    throw new ArgumentOutOfRangeException();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ApplicationPoolRecycling.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ApplicationPoolRecycling : ConfigurationElement\n    {\n        private ApplicationPoolPeriodicRestart _restart;\n\n        internal ApplicationPoolRecycling(ConfigurationElement parent)\n            : this(null, parent)\n        {\n        }\n\n        internal ApplicationPoolRecycling(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"recycling\", null, parent, null, null)\n        {\n        }\n\n        public bool DisallowOverlappingRotation\n        {\n            get { return (bool)this[\"disallowOverlappingRotation\"]; }\n            set { this[\"disallowOverlappingRotation\"] = value; }\n        }\n\n        public bool DisallowRotationOnConfigChange\n        {\n            get { return (bool)this[\"disallowRotationOnConfigChange\"]; }\n            set { this[\"disallowRotationOnConfigChange\"] = value; }\n        }\n\n        public RecyclingLogEventOnRecycle LogEventOnRecycle\n        {\n            get { return (RecyclingLogEventOnRecycle)Enum.ToObject(typeof(RecyclingLogEventOnRecycle), this[\"logEventOnRecycle\"]); }\n            set { this[\"logEventOnRecycle\"] = (long)value; }\n        }\n\n        public ApplicationPoolPeriodicRestart PeriodicRestart\n        {\n            get { return _restart ?? (_restart = new ApplicationPoolPeriodicRestart(ChildElements[\"periodicRestart\"], this)); }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/AspNetCoreHelper.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved. \n//  \n// Licensed under the MIT license. See LICENSE file in the project root for full license information. \nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Xml.Linq;\nusing System.Xml.XPath;\nusing JexusManager;\nusing Microsoft.Extensions.Logging;\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class AspNetCoreHelper\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"AspNetCoreHelper\");\n\n        internal static void FixConfigFile(string fileName)\n        {\n            var doc = XDocument.Load(fileName);\n            var virturalDirectories = doc.Descendants(\"virtualDirectory\");\n            var fixSection = false;\n            foreach (var vDir in virturalDirectories)\n            {\n                string[] projects;\n                try\n                {\n                    projects = Directory.GetFiles(vDir.Attribute(\"physicalPath\").Value, \"*.csproj\");\n                    if (projects.Length != 1)\n                    {\n                        continue;\n                    }\n                }\n                catch (IOException)\n                {\n                    continue;\n                }\n\n                var project = projects[0];\n                var xml = XDocument.Load(project);\n                Debug.Assert(xml.Root != null, \"xml.Root != null\");\n                var sdk = xml.Root.Attribute(\"Sdk\")?.Value;\n                if (sdk != \"Microsoft.NET.Sdk.Web\")\n                {\n                    // Not web project\n                    continue;\n                }\n\n                fixSection = true;\n                var siteName = vDir.Ancestors(\"site\").Select(s => s.Attribute(\"name\").Value).FirstOrDefault();\n                FixSite(doc, siteName);\n            }\n\n            if (fixSection)\n            {\n                FixSection(doc);\n                doc.Save(fileName);\n            }\n        }\n\n        private static void FixSite(XDocument xml, string siteName)\n        {\n            // Find the <location> element with a \"path\" attribute equal to site name\n            XElement locationElement = xml.Descendants(\"location\")\n                .FirstOrDefault(e => e.Attribute(\"path\")?.Value == siteName);\n\n            // Create a new <location> element for site name\n            XElement newLocationElement = new XElement(\"location\",\n                new XAttribute(\"path\", siteName),\n                new XAttribute(\"inheritInChildApplications\", \"false\"),\n                new XElement(\"system.webServer\",\n                    new XElement(\"modules\",\n                        new XElement(\"remove\", new XAttribute(\"name\", \"WebMatrixSupportModule\"))),\n                    new XElement(\"handlers\",\n                        new XElement(\"add\",\n                            new XAttribute(\"name\", \"aspNetCore\"),\n                            new XAttribute(\"path\", \"*\"),\n                            new XAttribute(\"verb\", \"*\"),\n                            new XAttribute(\"modules\", \"AspNetCoreModuleV2\"),\n                            new XAttribute(\"resourceType\", \"Unspecified\"))),\n                    new XElement(\"aspNetCore\",\n                        new XAttribute(\"processPath\", \"%LAUNCHER_PATH%\"),\n                        new XAttribute(\"stdoutLogEnabled\", \"false\"),\n                        new XAttribute(\"hostingModel\", \"InProcess\"),\n                        new XAttribute(\"startupTimeLimit\", \"3600\"),\n                        new XAttribute(\"requestTimeout\", \"23:00:00\")),\n                    new XElement(\"httpCompression\",\n                        new XElement(\"dynamicTypes\",\n                            new XElement(\"add\",\n                                new XAttribute(\"mimeType\", \"text/event-stream\"),\n                                new XAttribute(\"enabled\", \"false\"))))));\n\n            if (locationElement != null)\n            {\n                // Replace the existing <location> element with the new one\n                locationElement.ReplaceWith(newLocationElement);\n            }\n            else\n            {\n                // Add the new <location> element to the <configuration> element\n                xml.Element(\"configuration\").Add(newLocationElement);\n            }\n        }\n\n        private static void FixSection(XDocument xml)\n        {\n            // Find all descendant elements named \"section\"\n            IEnumerable<XElement> sections = xml.Descendants(\"section\");\n\n            // Check if any of the \"section\" elements have a \"name\" attribute equal to \"aspNetCore\"\n            bool aspNetCoreExists = sections.Any(s => s.Attribute(\"name\")?.Value == \"aspNetCore\");\n\n            if (!aspNetCoreExists)\n            {\n                // Create a new section element for \"aspNetCore\"\n                XElement aspNetCoreSection = new XElement(\"section\",\n                    new XAttribute(\"name\", \"aspNetCore\"),\n                    new XAttribute(\"overrideModeDefault\", \"Allow\"));\n\n                // Find the sectionGroup element with the name \"system.webServer\"\n                XElement sectionGroup = xml.Descendants(\"sectionGroup\")\n                    .FirstOrDefault(sg => sg.Attribute(\"name\")?.Value == \"system.webServer\");\n\n                if (sectionGroup != null)\n                {\n                    // Add the \"aspNetCore\" section element to the sectionGroup\n                    sectionGroup.Add(aspNetCoreSection);\n                }\n            }\n\n            // Find the <globalModules> element in <system.webServer>\n            XElement globalModulesElement = xml.Descendants(\"system.webServer\")\n                .Elements(\"globalModules\").FirstOrDefault();\n\n            // Check if the <globalModules> element already contains an <add> element with name=\"AspNetCoreModuleV2\"\n            bool aspNetCoreModuleExists = globalModulesElement?.Descendants(\"add\")\n                .Any(e => e.Attribute(\"name\")?.Value == \"AspNetCoreModuleV2\") ?? false;\n\n            if (!aspNetCoreModuleExists)\n            {\n                // Create a new <add> element for AspNetCoreModuleV2\n                XElement aspNetCoreModuleElement = new XElement(\"add\",\n                    new XAttribute(\"name\", \"AspNetCoreModuleV2\"),\n                    new XAttribute(\"image\", \"%IIS_BIN%\\\\Asp.Net Core Module\\\\V2\\\\aspnetcorev2.dll\"));\n\n                // Add the new <add> element to the <globalModules> element\n                globalModulesElement.Add(aspNetCoreModuleElement);\n            }\n\n            // Find the <modules> element under <system.webServer> inside <location>\n            XElement modulesElement = xml.Descendants(\"location\")\n                .Where(e => e.Attribute(\"path\")?.Value == \"\")\n                .Elements(\"system.webServer\")\n                .Elements(\"modules\")\n                .FirstOrDefault();\n\n            // Check if the <modules> element already contains an <add> element with name=\"AspNetCoreModuleV2\"\n            bool aspNetCoreModuleExistsInLocation = modulesElement?.Descendants(\"add\")\n                .Any(e => e.Attribute(\"name\")?.Value == \"AspNetCoreModuleV2\") ?? false;\n\n            if (!aspNetCoreModuleExistsInLocation)\n            {\n                // Create a new <add> element for AspNetCoreModuleV2\n                XElement aspNetCoreModuleElement = new XElement(\"add\",\n                    new XAttribute(\"name\", \"AspNetCoreModuleV2\"));\n\n                modulesElement.Add(aspNetCoreModuleElement);\n            }\n        }\n\n        public static void InjectEnvironmentVariables(Site site, ProcessStartInfo startInfo, string actualExecutable)\n        {\n            // TODO: make this site extension method.\n            var root = site.PhysicalPath.ExpandIisExpressEnvironmentVariables(actualExecutable);\n            string[] projects;\n            try\n            {\n                projects = Directory.GetFiles(root, \"*.csproj\");\n                if (projects.Length != 1)\n                {\n                    return;\n                }\n            }\n            catch (IOException)\n            {\n                return;\n            }\n\n            var project = projects[0];\n            var xml = XDocument.Load(project);\n            Debug.Assert(xml.Root != null, \"xml.Root != null\");\n            var sdk = xml.Root.Attribute(\"Sdk\")?.Value;\n            if (sdk == \"Microsoft.NET.Sdk.BlazorWebAssembly\")\n            {\n                // Blazor WASM\n                string dotnet = RestoreAndBuild(root);\n                string devServerVersion = xml.Descendants(\"PackageReference\")\n                    .Where(e => (string)e.Attribute(\"Include\") == \"Microsoft.AspNetCore.Components.WebAssembly.DevServer\")\n                    .Select(e => (string)e.Attribute(\"Version\"))\n                    .FirstOrDefault();\n                if (devServerVersion == null)\n                {\n                    _logger.LogWarning(\"Blazor dev server missing in project {Project}\", project);\n                    return;\n                }\n\n                XElement framework = xml.Root.XPathSelectElement(\"/Project/PropertyGroup/TargetFramework\");\n                Debug.Assert(framework != null, nameof(framework) + \" != null\");\n                string input = framework.Value;\n                int index = input.IndexOf(\"net\");\n                if (index == -1)\n                {\n                    _logger.LogWarning(\"Unknown framework {Framework} in project {Project}\", input, project);\n                    return;\n                }\n\n                string versionString = input.Substring(index + 3);\n                var latestFramework = Version.TryParse(versionString, out Version version);\n                var primary = Path.Combine(Path.Combine(root, \"bin\", \"Debug\", input), $\"{Path.GetFileNameWithoutExtension(project)}.dll\");\n\n                var devServerLibrary = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), \".nuget\", \"packages\", \"microsoft.aspnetcore.components.webassembly.devserver\", devServerVersion, \"tools\", \"blazor-devserver.dll\");\n                if (!File.Exists(devServerLibrary))\n                {\n                    _logger.LogWarning(\"Cannot find Blazor dev server library version {Version}\", devServerVersion);\n                    return;\n                }\n\n                var launcherArgs = $\"\\\"{devServerLibrary}\\\" --applicationpath \\\"{primary}\\\"\";\n                startInfo.EnvironmentVariables.Add(\"ANCM_LAUNCHER_PATH\", dotnet);\n                startInfo.EnvironmentVariables.Add(\"ANCM_LAUNCHER_ARGS\", launcherArgs);\n            }\n            else if (sdk == \"Microsoft.NET.Sdk.Web\")\n            {\n                string dotnet = RestoreAndBuild(root);\n                XElement framework = xml.Root.XPathSelectElement(\"/Project/PropertyGroup/TargetFramework\");\n                Debug.Assert(framework != null, nameof(framework) + \" != null\");\n                string input = framework.Value;\n                int index = input.IndexOf(\"net\");\n                if (index == -1)\n                {\n                    _logger.LogWarning(\"Unknown framework {Framework} in project {Project}\", input, project);\n                    return;\n                }\n\n                string versionString = input.Substring(index + 3);\n                var latestFramework = Version.TryParse(versionString, out Version version);\n                var primary = Path.Combine(Path.Combine(root, \"bin\", \"Debug\", input), $\"{Path.GetFileNameWithoutExtension(project)}.exe\");\n                var baseVersion = Version.Parse(\"5.0\");\n                if (File.Exists(primary)) // found default executables.\n                {\n                    if (latestFramework)\n                    {\n                        if (version >= baseVersion)\n                        {\n                            startInfo.EnvironmentVariables.Add(\"ANCM_LAUNCHER_PATH\", primary); // New environment variable in ANCM since 5.0 preview.\n                            startInfo.EnvironmentVariables.Add(\"ASPNETCORE_ENVIRONMENT\", \"Development\");\n                        }\n                        else\n                        {\n                            _logger.LogInformation(\"ASP.NET Core {Version} is older than baseline {Baseline}\", version, baseVersion);\n                        }\n                    }\n                    else\n                    {\n                        // Shortcut for .NET Core 3.0/3.1 apps.\n                        startInfo.EnvironmentVariables.Add(\"LAUNCHER_PATH\", primary); // To replace %LAUNCHER_PATH% in \".vs\\xxx\\applicationHost.config\"\n                    }\n\n                    return;\n                }\n\n                // .NET Core 2.2 and below, special treatment.\n                primary = Path.Combine(Path.Combine(root, \"bin\", \"Debug\", input), $\"{Path.GetFileNameWithoutExtension(project)}.dll\");\n                if (!File.Exists(primary))\n                {\n                    var files = Directory.GetFiles(Path.Combine(root, \"bin\", \"Debug\", input), \"*.dll\");\n                    if (files.Length == 1)\n                    {\n                        _logger.LogDebug(\"Expected assembly not found, using alternative: {Assembly}\", files[0]);\n                        primary = files[0];\n                    }\n                    else\n                    {\n                        primary = null;\n                    }\n                }\n\n                if (primary == null)\n                {\n                    _logger.LogWarning(\"Could not find compiled assembly for framework {Framework} in {Path}\", input, root);\n                    return;\n                }\n\n                var file = Environment.ExpandEnvironmentVariables(@\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe\");\n                var args = \"-latest -products * -requires Microsoft.Component.MSBuild -property installationPath\";\n                if (!File.Exists(file))\n                {\n                    // Not VS 15.2 and above\n                    _logger.LogWarning(\"Visual Studio 15.2 or above not detected. VSWhere not found at {Path}\", file);\n                    return;\n                }\n\n                var vswhere = Process.Start(new ProcessStartInfo\n                {\n                    FileName = file,\n                    Arguments = args,\n                    RedirectStandardOutput = true,\n                    UseShellExecute = false\n                });\n                Debug.Assert(vswhere != null, nameof(vswhere) + \" != null\");\n                var folder = vswhere.StandardOutput.ReadToEnd().TrimEnd();\n\n                var launcher = $@\"{folder}\\Common7\\IDE\\Extensions\\Microsoft\\Web Tools\\ProjectSystem\\VSIISExeLauncher.exe\";\n                if (!File.Exists(launcher))\n                {\n                    _logger.LogWarning(\"VSIISExeLauncher not found at {Path}\", launcher);\n                    return;\n                }\n\n                var rootAssembly = primary.Replace(@\"\\\", @\"\\\\\");\n                var launcherArgs = $\"-p \\\"{dotnet.Replace(@\"\\\", @\"\\\\\")}\\\" -a \\\"exec \\\\\\\"{rootAssembly}\\\\\\\"\\\" -pidFile \\\"{Path.GetTempFileName().Replace(@\"\\\", @\"\\\\\")}\\\" -wd \\\"{root.Replace(@\"\\\", @\"\\\\\")}\\\"\";\n                startInfo.EnvironmentVariables.Add(\"LAUNCHER_PATH\", launcher);\n                startInfo.EnvironmentVariables.Add(\"LAUNCHER_ARGS\", launcherArgs);\n            }\n        }\n\n        private static string RestoreAndBuild(string root)\n        {\n            var dotnet = Environment.ExpandEnvironmentVariables(@\"%ProgramFiles%\\dotnet\\dotnet.exe\");\n            _logger.LogInformation(\"Running dotnet restore in {Path}\", root);\n            var restore = Process.Start(new ProcessStartInfo\n            {\n                FileName = dotnet,\n                Arguments = \"restore\",\n                WorkingDirectory = root\n            });\n            Debug.Assert(restore != null, nameof(restore) + \" != null\");\n            restore.WaitForExit();\n\n            _logger.LogInformation(\"Running dotnet build in {Path}\", root);\n            var build = Process.Start(new ProcessStartInfo\n            {\n                FileName = dotnet,\n                Arguments = \"build\",\n                WorkingDirectory = root\n            });\n            Debug.Assert(build != null, nameof(build) + \" != null\");\n            build.WaitForExit();\n            return dotnet;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/AsyncHelper.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.Web.Administration\n{\n    public static class AsyncHelper\n    {\n        private static readonly TaskFactory s_myTaskFactory = new\n          TaskFactory(CancellationToken.None,\n                      TaskCreationOptions.None,\n                      TaskContinuationOptions.None,\n                      TaskScheduler.Default);\n\n        public static TResult RunSync<TResult>(Func<Task<TResult>> func)\n        {\n            return s_myTaskFactory\n              .StartNew(func)\n              .Unwrap()\n              .GetAwaiter()\n              .GetResult();\n        }\n\n        public static void RunSync(Func<Task> func)\n        {\n            s_myTaskFactory\n              .StartNew(func)\n              .Unwrap()\n              .GetAwaiter()\n              .GetResult();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/AuthenticationLogonMethod.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public enum AuthenticationLogonMethod\n    {\n        Interactive = 0,\n        Batch = 1,\n        Network = 2,\n        ClearText = 3\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Binding.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Net;\nusing System.Runtime.InteropServices;\nusing System.Windows.Forms;\nusing System.Xml;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class Binding : ConfigurationElement\n    {\n        private IPEndPoint _endPoint;\n        private string _host;\n\n        private bool _initialized;\n\n        public Binding(ConfigurationElement element, BindingCollection parent)\n            : base(element, \"binding\", null, parent, null, null)\n        {\n            Parent = parent;\n        }\n\n        internal Binding(string protocol, string bindingInformation, byte[] hash, string store, SslFlags flags, BindingCollection parent)\n            : base(null, \"binding\", null, parent, null, null)\n        {\n            BindingInformation = bindingInformation;\n            Protocol = protocol;\n            CertificateHash = hash;\n            CertificateStoreName = store;\n            if (parent.Parent.Server.SupportsSni)\n            {\n                SslFlags = flags;\n            }\n\n            Parent = parent;\n        }\n\n        public override string ToString()\n        {\n            return EndPoint == null ? BindingInformation : $\"{EndPoint.Address.AddressToDisplay()}:{EndPoint.Port}:{Host.HostToDisplay()}\";\n        }\n\n        public string BindingInformation\n        {\n            get\n            {\n                Initialize();\n                return (string)this[\"bindingInformation\"];\n            }\n\n            set\n            {\n                this[\"bindingInformation\"] = value;\n                _initialized = false;\n            }\n        }\n\n        private void Initialize()\n        {\n            if (_initialized)\n            {\n                return;\n            }\n\n            _initialized = true;\n            if (!CanBrowse)\n            {\n                _host = string.Empty;\n                _endPoint = null;\n                return;\n            }\n\n            var value = (string)this[\"bindingInformation\"];\n            var last = value.LastIndexOf(':');\n            if (last > 0)\n            {\n                _host = value.Substring(last + 1);\n                var next = value.LastIndexOf(':', last - 1);\n                var port = value.Substring(next + 1, last - next - 1);\n                if (next > -1)\n                {\n                    var address = value.Substring(0, next);\n                    if (PortIsValid(port, out int number, null, false))\n                    {\n                        try\n                        {\n                            _endPoint = new IPEndPoint(address.DisplayToAddress(), number);\n                        }\n                        catch (FormatException)\n                        {\n                        }\n                    }\n                }\n            }\n\n            if (Protocol != \"https\" || CertificateHash != null)\n            {\n                return;\n            }\n\n            if (Helper.IsRunningOnMono())\n            {\n                // TODO: how to do it on Mono?\n                return;\n            }\n\n            RefreshCertificate();\n        }\n\n        public byte[] CertificateHash { get; set; }\n        public string CertificateStoreName { get; set; }\n\n        public IPEndPoint EndPoint\n        {\n            get\n            {\n                Initialize();\n                return _endPoint;\n            }\n        }\n\n        public string Host\n        {\n            get\n            {\n                Initialize();\n                return _host;\n            }\n        }\n\n        // ReSharper disable once InconsistentNaming\n        public bool IsIPPortHostBinding { get; internal set; }\n\n        public string Protocol\n        {\n            get\n            {\n                Initialize();\n                return (string)this[\"protocol\"];\n            }\n\n            set\n            {\n                this[\"protocol\"] = value;\n                _initialized = false;\n            }\n        }\n\n        public SslFlags SslFlags\n        {\n            get\n            {\n                Initialize();\n                if (ContainsAttribute(\"sslFlags\"))\n                {\n                    if (RawAttributes.ContainsKey(\"sslFlags\"))\n                    {\n                        try\n                        {\n                            var input = RawAttributes[\"sslFlags\"];\n                            var result = Enum.Parse(typeof(SslFlags), input);\n                            return (SslFlags)result;\n                        }\n                        catch\n                        {\n                            throw new COMException($\"Filename: \\\\\\\\?\\\\{FileContext.FileName}\\r\\nLine number: {(Entity as IXmlLineInfo).LineNumber}\\r\\nError: The 'sslFlags' attribute is invalid.  Not a valid unsigned integer\\r\\n\\r\\n\\r\\n\");\n                        }\n                    }\n                }\n\n                return SslFlags.None;\n            }\n\n            set\n            {\n                if (ContainsAttribute(\"sslFlags\"))\n                {\n                    this[\"sslFlags\"] = (uint)value;\n                    _initialized = false;\n                }\n            }\n        }\n\n        public bool UseDsMapper { get; set; }\n\n        internal BindingCollection Parent { get; }\n\n        internal string ToUri()\n        {\n            var value = BindingInformation;\n            var last = value.LastIndexOf(':');\n            string host = null;\n            string address = null;\n            string port = null;\n            if (last > 0)\n            {\n                host = value.Substring(last + 1);\n                var next = value.LastIndexOf(':', last - 1);\n                port = value.Substring(next + 1, last - next - 1);\n                if (next > -1)\n                {\n                    address = value.Substring(0, next);\n                }\n            }\n\n            string domain;\n            if (EndPoint == null)\n            {\n                if (string.IsNullOrWhiteSpace(port))\n                {\n                    domain = \"localhost\";\n                }\n                else if (PortIsValid(port, out int validPort, null, false))\n                {\n                    domain = $\"localhost:{validPort}\";\n                }\n                else\n                {\n                    throw new ArgumentException(\"Value does not fall within the expected range.\");\n                }\n\n                return $\"{Protocol}://{domain}\";\n            }\n\n            domain = !string.IsNullOrWhiteSpace(host)\n                ? host\n                : address == \"*\" || address == \"0.0.0.0\"\n                    ? Parent.Parent.Parent.Parent.HostName.ExtractName()\n                    : address;\n            return IsDefaultPort\n                ? $\"{Protocol}://{domain}\"\n                : $\"{Protocol}://{domain}:{EndPoint.Port}\";\n        }\n\n        internal string ToIisUrl()\n        {\n            return ToUri() + \"/\";\n        }\n\n        private bool IsDefaultPort\n        {\n            get\n            {\n                if (EndPoint == null)\n                {\n                    return true;\n                }\n\n                if (Protocol == \"http\")\n                {\n                    return EndPoint.Port == 80;\n                }\n\n                if (Protocol == \"https\")\n                {\n                    return EndPoint.Port == 443;\n                }\n\n                return false;\n            }\n        }\n\n        internal bool CanBrowse => Protocol == \"http\" || Protocol == \"https\";\n\n        internal SecureBindingDetectionResult DetectConflicts(byte[] hash, string store)\n        {\n            if (SslFlags == SslFlags.Sni)\n            {\n                var sni = NativeMethods.QuerySslSniInfo(new Tuple<string, int>(_host, _endPoint.Port));\n                if (sni != null)\n                {\n                    if (sni.StoreName == store && hash != null && sni.Hash != null && hash.SequenceEqual(sni.Hash))\n                    {\n                        // true if detect existing SNI mapping.\n                        return SecureBindingDetectionResult.Duplicate;\n                    }\n\n                    return SecureBindingDetectionResult.Conflicting;\n                }\n\n                return SecureBindingDetectionResult.None;\n            }\n\n            var certificate = NativeMethods.QuerySslCertificateInfo(_endPoint);\n            if (certificate != null)\n            {\n                if (certificate.StoreName == store && hash != null && certificate.Hash != null && hash.SequenceEqual(certificate.Hash))\n                {\n                    // true if detect existing IP mapping.\n                    return SecureBindingDetectionResult.Duplicate;\n                }\n\n                return SecureBindingDetectionResult.Conflicting;\n            }\n\n            return SecureBindingDetectionResult.None;\n        }\n\n        internal bool GetIsSni()\n        {\n            if (!ContainsAttribute(\"sslFlags\"))\n            {\n                return false;\n            }\n\n            var value = this[\"sslFlags\"];\n            return ((uint)value & 1U) == 1U;\n        }\n\n        public void RefreshCertificate()\n        {\n            if (Parent.Parent.Server.SupportsSni)\n            {\n                if (GetIsSni())\n                {\n                    try\n                    {\n                        var sni = NativeMethods.QuerySslSniInfo(new Tuple<string, int>(_host, _endPoint.Port));\n                        if (sni == null)\n                        {\n                            CertificateHash = null;\n                            CertificateStoreName = string.Empty;\n                            SslFlags = SslFlags.Sni;\n                            return;\n                        }\n                        else\n                        {\n                            CertificateHash = sni.Hash;\n                            CertificateStoreName = sni.StoreName;\n                            SslFlags = SslFlags.Sni;\n                            return;\n                        }\n                    }\n                    catch (Win32Exception)\n                    {\n                        CertificateHash = null;\n                        CertificateStoreName = string.Empty;\n                        SslFlags = SslFlags.Sni;\n                        return;\n                    }\n                }\n            }\n\n            if (_endPoint == null)\n            {\n                CertificateHash = null;\n                CertificateStoreName = string.Empty;\n                return;\n            }\n\n            var certificate = NativeMethods.QuerySslCertificateInfo(_endPoint);\n            if (certificate == null)\n            {\n                CertificateHash = null;\n                CertificateStoreName = string.Empty;\n                return;\n            }\n\n            CertificateHash = certificate.Hash;\n            CertificateStoreName = certificate.StoreName;\n        }\n\n        internal static bool PortIsValid(string portText, out int port, string text, bool showDialog = true)\n        {\n            const string theServerPortNumberMustBeAPositiveIntegerBetweenAnd = \"The server port number must be a positive integer between 1 and 65535\";\n            try\n            {\n                port = int.Parse(portText);\n            }\n            catch (Exception)\n            {\n                if (showDialog)\n                {\n                    MessageBox.Show(theServerPortNumberMustBeAPositiveIntegerBetweenAnd, text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                }\n\n                port = 0;\n                return false;\n            }\n\n            if (port < 1 || port > 65535)\n            {\n                if (showDialog)\n                {\n                    MessageBox.Show(theServerPortNumberMustBeAPositiveIntegerBetweenAnd, text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);\n                }\n\n                return false;\n            }\n\n            return true;\n        }\n\n        internal enum SecureBindingDetectionResult\n        {\n            None = 0,\n            Duplicate = 1,\n            Conflicting = 2\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/BindingCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class BindingCollection : ConfigurationElementCollectionBase<Binding>\n    {\n        internal BindingCollection(Site parent)\n            : this(null, parent)\n        { }\n\n        internal BindingCollection(ConfigurationElement element, Site parent)\n            : base(element, \"bindings\", parent.Schema.ChildElementSchemas[\"bindings\"], parent, element?.InnerEntity, null)\n        {\n            Parent = parent;\n            if (element != null)\n            {\n                foreach (ConfigurationElement child in (ICollection)element)\n                {\n                    InternalAdd(new Binding(child, this));\n                }\n            }\n        }\n\n        public Binding Add(string bindingInformation, string bindingProtocol)\n        {\n            var item = new Binding(bindingProtocol, bindingInformation, null, null, SslFlags.None, this);\n            InternalAdd(item);\n            return item;\n        }\n\n        public Binding Add(string bindingInformation, byte[] certificateHash, string certificateStoreName)\n        {\n            return Add(bindingInformation, certificateHash, certificateStoreName, SslFlags.None);\n        }\n\n        public Binding Add(string bindingInformation, byte[] certificateHash, string certificateStoreName, SslFlags sslFlags)\n        {\n            var item = new Binding(\"https\", bindingInformation, certificateHash, certificateStoreName, sslFlags, this);\n            InternalAdd(item);\n            return item;\n        }\n\n        protected override Binding CreateNewElement(string elementTagName)\n        {\n            return new Binding(null, this);\n        }\n\n        public void Remove(Binding element, bool removeConfigOnly)\n        {\n            element.Delete();\n            if (!removeConfigOnly)\n            {\n                Remove(element);\n            }\n        }\n\n        internal Site Parent { get; set; }\n\n        internal bool ElevationRequired\n        {\n            get\n            {\n                foreach (Binding binding in this)\n                {\n                    if (binding.EndPoint?.Port <= 1024)\n                    {\n                        return true;\n                    }\n                }\n\n                return false;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/CertificateInstallerLocator.cs",
    "content": "﻿using System;\nusing System.IO;\n\nnamespace Microsoft.Web.Administration\n{\n    public static class CertificateInstallerLocator\n    {\n        public static string FileName\n        {\n            get { return FindMainHelper(\"certificateinstaller.exe\"); }\n        }\n\n        public static string AlternativeFileName\n        {\n            get { return FindMainHelper(\"certificateinstaller.x64.exe\"); }\n        }\n\n        private static string FindMainHelper(string executable)\n        {\n            var defaultPath = Path.Combine(Environment.CurrentDirectory, executable);\n            if (File.Exists(defaultPath))\n            {\n                return defaultPath;\n            }\n\n            var debugBuild = Path.Combine(Environment.CurrentDirectory, $@\"..\\..\\..\\..\\CertificateInstaller\\bin\\Debug\\net9.0-windows10.0.17763.0\\{executable}\");\n            if (File.Exists(debugBuild))\n            {\n                return debugBuild;\n            }\n\n            var releaseBuild = Path.Combine(Environment.CurrentDirectory, $@\"..\\..\\..\\..\\CertificateInstaller\\bin\\Release\\net9.0-windows10.0.17763.0\\{executable}\");\n            if (File.Exists(releaseBuild))\n            {\n                return releaseBuild;\n            }\n\n            var debugBuildFx = Path.Combine(Environment.CurrentDirectory, $@\"..\\..\\..\\CertificateInstaller\\bin\\Debug\\{executable}\");\n            if (File.Exists(debugBuildFx))\n            {\n                return debugBuildFx;\n            }\n\n            var releaseBuildFx = Path.Combine(Environment.CurrentDirectory, $@\"..\\..\\..\\CertificateInstaller\\bin\\Release\\{executable}\");\n            if (File.Exists(releaseBuildFx))\n            {\n                return releaseBuildFx;\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/CommonHelper.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Xml.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class CommonHelper\n    {\n        internal static List<string> Load(this SortedDictionary<string, List<string>> variables, List<string> defaultValue, params string[] names)\n        {\n            foreach (var name in names)\n            {\n                if (variables.ContainsKey(name))\n                {\n                    var result = variables[name];\n                    variables.Remove(name);\n                    return result;\n                }\n            }\n\n            return defaultValue;\n        }\n\n        internal static string ToPath(this string fileName, out string applicationName)\n        {\n            // TODO: merge the code\n            var appName = new StringBuilder();\n            var sections = fileName.Split('_');\n            for (int i = 1; i < sections.Length; i++)\n            {\n                appName.AppendFormat(\"/{0}\", sections[i]);\n            }\n\n            applicationName = sections.LastOrDefault();\n            return appName.ToString();\n        }\n\n        internal static string PathToName(this string path)\n        {\n            var last = path.LastIndexOf('/');\n            return path.Substring(last + 1);\n        }\n\n        internal static string ExtractName(this string hostname)\n        {\n            if (hostname == null)\n            {\n                // IMPORTANT: for IIS Express.\n                return \"localhost\";\n            }\n\n            var index = hostname.IndexOf(':');\n            return index >= 0 ? hostname.Substring(0, index) : hostname;\n        }\n\n        internal static string ExtractUser(this string credential)\n        {\n            var index = credential.IndexOf('|');\n            return index >= 0 ? credential.Substring(0, index) : credential;\n        }\n\n        internal static string GetPath(this XElement element)\n        {\n            var result = new StringBuilder(element.Name.LocalName);\n            var parent = element.Parent;\n            while (parent?.Name.LocalName != \"configuration\" && parent?.Name.LocalName != \"location\")\n            {\n                result.Insert(0, parent?.Name.LocalName + \"/\");\n                parent = parent?.Parent;\n            }\n\n            return result.ToString();\n        }\n\n        internal static bool LoadBoolean(this XAttribute attribute, bool defaultValue)\n        {\n            return attribute == null ? defaultValue : bool.Parse(attribute.Value);\n        }\n\n        internal static string LoadString(this XAttribute attribute, string defaultValue)\n        {\n            return attribute?.Value ?? defaultValue;\n        }\n\n        internal static string ObjectToString(this object setting)\n        {\n            return setting?.ToString() ?? string.Empty;\n        }\n\n        internal static string PathToSite(this VirtualDirectory virtualDirectory)\n        {\n            return virtualDirectory.Application.IsRoot()\n                ? virtualDirectory.Path\n                : virtualDirectory.Application.Path + virtualDirectory.Path;\n        }\n\n        internal static string LocationPath(this VirtualDirectory virtualDirectory)\n        {\n            return virtualDirectory.Application.Site.Name + virtualDirectory.PathToSite();\n        }\n\n        internal static string LocationPath(this Application application)\n        {\n            return application.IsRoot() ? application.Site.Name : application.Site.Name + application.Path;\n        }\n\n        internal static ApplicationPool GetPool(this Application application)\n        {\n            return application.Server.ApplicationPools.FirstOrDefault(item => item.Name == application.ApplicationPoolName);\n        }\n\n        internal static bool IsJexus(this ServerManager server, Application application)\n        {\n            if (server != null)\n            {\n                return server.Mode == WorkingMode.Jexus;\n            }\n\n            if (application == null)\n            {\n                throw new ArgumentException(\"both server and application null\");\n            }\n\n            return application.Server.Mode == WorkingMode.Jexus;\n        }\n\n        internal static string GetParentPath(this string rootPath)\n        {\n            if (rootPath == null)\n            {\n                throw new InvalidOperationException(\"invalid app\");\n            }\n\n            var parentEnd = rootPath.LastIndexOf('/');\n            if (parentEnd == -1)\n            {\n                return rootPath.Length == 0 ? null : string.Empty;\n            }\n\n            var parentPath = parentEnd == 0 ? Application.RootPath : rootPath.Substring(0, parentEnd);\n            return parentPath;\n        }\n\n        internal static string GetParentLocation(this string location)\n        {\n            if (location == null)\n            {\n                throw new InvalidOperationException(\"location\");\n            }\n\n            var parentEnd = location.LastIndexOf('/');\n            if (parentEnd == -1)\n            {\n                return location.Length == 0 ? null : string.Empty;\n            }\n\n            var parentPath = parentEnd == 0 ? Application.RootPath : location.Substring(0, parentEnd);\n            return parentPath;\n        }\n\n        internal static string ToString(ObjectState state)\n        {\n            switch (state)\n            {\n                case ObjectState.Starting:\n                    return \"Starting\";\n                case ObjectState.Started:\n                    return \"Started\";\n                case ObjectState.Stopping:\n                    return \"Stopping\";\n                case ObjectState.Stopped:\n                    return \"Stopped\";\n                case ObjectState.Unknown:\n                    return \"Unknown\";\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(state), state, null);\n            }\n        }\n\n        internal static string ToString(ManagedPipelineMode managedPipelineMode)\n        {\n            switch (managedPipelineMode)\n            {\n                case ManagedPipelineMode.Integrated:\n                    return \"Integrated\";\n                case ManagedPipelineMode.Classic:\n                    return \"Classic\";\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(managedPipelineMode), managedPipelineMode, null);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Configuration.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public class Configuration\n    {\n        internal Configuration(FileContext fileContext)\n        {\n            FileContext = fileContext;\n        }\n\n        internal FileContext FileContext { get; }\n\n        public SectionGroup GetEffectiveSectionGroup()\n        {\n            return FileContext.GetEffectiveSectionGroup();\n        }\n\n        public string[] GetLocationPaths()\n        {\n            return FileContext.GetLocationPaths();\n        }\n\n        public object GetMetadata(string metadataType)\n        {\n            return FileContext.GetMetadata(metadataType);\n        }\n\n        public ConfigurationSection GetSection(string sectionPath)\n        {\n            return FileContext.GetSection(sectionPath);\n        }\n\n        public ConfigurationSection GetSection(string sectionPath, string locationPath)\n        {\n            return FileContext.GetSection(sectionPath, locationPath);\n        }\n\n        public ConfigurationSection GetSection(string sectionPath, Type type)\n        {\n            return FileContext.GetSection(sectionPath, type);\n        }\n\n        public ConfigurationSection GetSection(string sectionPath, Type type, string locationPath)\n        {\n            return FileContext.GetSection(sectionPath, type, locationPath);\n        }\n\n        public void RemoveLocationPath(string locationPath)\n        {\n            FileContext.RemoveLocationPath(locationPath);\n        }\n\n        public void RenameLocationPath(string locationPath, string newLocationPath)\n        {\n            FileContext.RenameLocationPath(locationPath, newLocationPath);\n        }\n\n        public void SetMetadata(string metadataType, object value)\n        {\n            FileContext.SetMetadata(metadataType, value);\n        }\n\n        public SectionGroup RootSectionGroup\n        {\n            get { return FileContext.RootSectionGroup; }\n        }\n\n        public event EventHandler CacheInvalidated;\n\n        internal virtual void OnCacheInvalidated()\n        {\n            CacheInvalidated?.Invoke(this, EventArgs.Empty);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationAllowDefinition.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    internal enum ConfigurationAllowDefinition\n    {\n        MachineOnly = 0,\n        MachineToWebRoot = 100,\n        MachineToApplication = 200,\n        Everywhere = 300,\n        AppHostOnly = 400\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationAttribute.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing System.Security.Cryptography;\n\nnamespace Microsoft.Web.Administration\n{\n    [DebuggerDisplay(\"{Name}\")]\n    public sealed class ConfigurationAttribute\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"ConfigurationAttribute\");\n\n        private object _value;\n        private readonly ConfigurationElement _element;\n\n        /// <summary>\n        /// Constructs instances from config file.\n        /// </summary>\n        /// <param name=\"name\"></param>\n        /// <param name=\"schema\"></param>\n        /// <param name=\"value\"></param>\n        /// <param name=\"element\"></param>\n        internal ConfigurationAttribute(string name, ConfigurationAttributeSchema schema, string value, ConfigurationElement element)\n        {\n            _element = element;\n            Name = name;\n            Schema = schema;\n            IsProtected = schema?.IsEncrypted ?? false;\n            var clear = Decrypt(value).ToString();\n            var raw = Schema == null ? clear : Schema.Parse(clear);\n            var result = TypeMatch(raw);\n            IsInheritedFromDefaultValue = (Schema == null || !Schema.IsRequired)\n                                                    && result.Equals(ExtractDefaultValueFromSchema());\n            SetValue(raw);\n            _element.InnerEntity.SetAttributeValue(Name, value);\n        }\n\n        /// <summary>\n        /// Constructs instances when the external queries.\n        /// </summary>\n        /// <param name=\"name\"></param>\n        /// <param name=\"schema\"></param>\n        /// <param name=\"element\"></param>\n        internal ConfigurationAttribute(string name, ConfigurationAttributeSchema schema, ConfigurationElement element)\n        {\n            _element = element;\n            Name = name;\n            Schema = schema;\n            IsProtected = schema?.IsEncrypted ?? false;\n            ResetValue();\n        }\n\n        private void ResetValue()\n        {\n            if (_element.HasSiteDefaults)\n            {\n                SetValue(_element.GetSiteDefaults(Name));\n                return;\n            }\n\n            var clear = Decrypt(ExtractDefaultValueFromSchema());\n            IsInheritedFromDefaultValue = true;\n            SetValue(clear);\n        }\n\n        internal object ExtractDefaultValueFromSchema()\n        {\n            object defaultValue;\n            if (_element.FileContext.Parent != null)\n            {\n                // web.config\n                var parentElementInFile = _element.GetParentElement();\n                defaultValue = parentElementInFile == null \n                    ? Schema?.DefaultValue\n                    : parentElementInFile.ContainsAttribute(Name)\n                        ? parentElementInFile.Attributes[Name].Value\n                        : null;\n            }\n            else if (_element.Section?.Location == null)\n            {\n                // root config\n                defaultValue = Decrypt(Schema?.DefaultValue);\n            }\n            else\n            {\n                // location tags in applicationHost.config.\n                var parentElement = _element.GetElementAtParentLocationInFileContext(_element.FileContext);\n                defaultValue = parentElement == null ? Schema?.DefaultValue : parentElement.Attributes[Name].Value;\n            }\n\n            if (defaultValue == null)\n            {\n                // IMPORTANT: to set default values so that in configuration files they do not appear.\n                if (Schema != null)\n                {\n                    if (Schema.DefaultValue == null)\n                    {\n                        try\n                        {\n                            Schema.SetDefaultValue(Schema.DefaultValueByType);\n                        }\n                        catch (COMException)\n                        {\n                            // IMPORTANT: If validators do not like default value, simply ignore.\n                            return defaultValue = Schema.DefaultValueByType;\n                        }\n\n                        defaultValue = Schema.DefaultValue;\n                    }\n                }\n            }\n\n            return defaultValue;\n        }\n\n        public void Delete()\n        {\n            if (_element == null)\n            {\n                throw new InvalidOperationException(\"null element\");\n            }\n\n            var innerEntity = _element.InnerEntity;\n            if (innerEntity == null)\n            {\n                return;\n            }\n\n            innerEntity.SetAttributeValue(Name, null);\n            if (!innerEntity.HasAttributes && !innerEntity.HasElements)\n            {\n                innerEntity.Remove();\n            }\n\n            ResetValue();\n        }\n\n        public object GetMetadata(string metadataType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void SetMetadata(string metadataType, object value)\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool IsInheritedFromDefaultValue { get; internal set; }\n\n        public bool IsProtected { get; }\n        public string Name { get; internal set; }\n        public ConfigurationAttributeSchema Schema { get; internal set; }\n\n        public object Value\n        {\n            get\n            {\n                return _value;\n            }\n\n            set\n            {\n                SetValue(_element.SetAttributeValueInner(this.Name, value));\n            }\n        }\n\n        internal void SetValue(object value)\n        {\n            _value = value;\n        }\n\n        internal object TypeMatch(object value)\n        {\n            return Schema != null ? Schema.CheckType(value) : value;\n        }\n\n        internal string Format(object value)\n        {\n            return this.Encrypt(this.Schema == null ? value.ToString() : this.Schema.Format(value));\n        }\n\n        private string Encrypt(string value)\n        {\n            if (IsProtected)\n            {\n                var protectedInfo = _element.FileContext.ProtectedConfiguration;\n\n                // Get all available providers\n                var providers = protectedInfo.Providers.Items;\n\n                if (providers.Count > 0)\n                {\n                    string selectedProvider = null;\n\n                    // Determine which provider to use based on the element context\n                    bool isAppPoolPassword = _element.ParentElement != null &&\n                                            _element.ParentElement.ElementTagName == \"processModel\" &&\n                                            Name == \"password\";\n\n                    if (isAppPoolPassword)\n                    {\n                        // For application pool passwords, prefer IISWASOnlyCngProvider\n                        if (providers.ContainsKey(\"IISWASOnlyCngProvider\"))\n                        {\n                            selectedProvider = \"IISWASOnlyCngProvider\";\n                        }\n                        else if (providers.ContainsKey(\"IISCngProvider\"))\n                        {\n                            selectedProvider = \"IISCngProvider\";\n                        }\n                    }\n                    else\n                    {\n                        // For other passwords (virtual directories, etc.), prefer IISCngProvider\n                        if (providers.ContainsKey(\"IISCngProvider\"))\n                        {\n                            selectedProvider = \"IISCngProvider\";\n                        }\n                        else if (providers.ContainsKey(\"IISWASOnlyCngProvider\"))\n                        {\n                            selectedProvider = \"IISWASOnlyCngProvider\";\n                        }\n                    }\n\n                    // If no preferred provider is found, fall back to any available provider\n                    if (selectedProvider == null)\n                    {\n                        foreach (var key in providers.Keys)\n                        {\n                            selectedProvider = key;\n                            break;\n                        }\n                    }\n\n                    if (selectedProvider != null)\n                    {\n                        try\n                        {\n                            var provider = protectedInfo.GetProvider(selectedProvider, false);\n                            var secret = provider.Encrypt(value);\n                            return string.Format(\"[enc:{0}:{1}:enc]\", selectedProvider, secret);\n                        }\n                        catch (Exception ex)\n                        {\n                            _logger.LogError(ex, \"Error encrypting with provider {Provider}\", selectedProvider);\n\n                            // If all encryption attempts fail, return the original value\n                            return value;\n                        }\n                    }\n                }\n            }\n\n            return value;\n        }\n\n        private object Decrypt(object value)\n        {\n            if (value is string && IsProtected)\n            {\n                var full = value.ToString();\n                if (string.IsNullOrWhiteSpace(full))\n                {\n                    // IMPORTANT: workaround IIS 7 Express anonymous authentication default password is empty in schema issue.\n                    return value;\n                }\n\n                var length = full.Length - 10;\n                if (length < 0)\n                {\n                    return value;\n                }\n\n                var inner = full.Substring(5, length);\n                var point = inner.IndexOf(':');\n                if (point < 0)\n                {\n                    return value;\n                }\n\n                var name = inner.Substring(0, point);\n                var data = inner.Substring(point + 1);\n                var protectedInfo = _element.FileContext.ProtectedConfiguration;\n                var provider = protectedInfo.GetProvider(name, false);\n                try\n                {\n                    return data.Length == 0 ? data : provider.Decrypt(data);\n                }\n                catch (CryptographicException)\n                {\n                    return \"**********************\";\n                }\n                catch (DllNotFoundException)\n                {\n                    return \"\";\n                }\n            }\n\n            return value;\n        }\n    }\n}\n\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationAttributeCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationAttributeCollection : ICollection,\n    IEnumerable<ConfigurationAttribute>\n    {\n        private readonly List<ConfigurationAttribute> _list = new List<ConfigurationAttribute>();\n\n        internal ConfigurationAttributeCollection(ConfigurationElement parent)\n        {\n            Parent = parent;\n        }\n\n        public IEnumerator<ConfigurationAttribute> GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        public ConfigurationAttribute this[int index]\n        {\n            get { return _list[index]; }\n        }\n\n        public ConfigurationAttribute this[string name]\n        {\n            get\n            {\n                var existing = _list.FirstOrDefault(item => item.Name == name);\n                if (existing != null)\n                {\n                    return existing;\n                }\n\n                var schema = Parent.Schema.AttributeSchemas[name];\n                if (!Parent.Schema.AllowUnrecognizedAttributes && schema == null)\n                {\n                    return null;\n                }\n\n                existing = new ConfigurationAttribute(name, schema, Parent);\n                _list.Add(existing);\n                return existing;\n            }\n        }\n\n        public void CopyTo(Array array, int index)\n        {\n            _list.CopyTo((ConfigurationAttribute[])array, index);\n        }\n\n        public int Count\n        {\n            get { return _list.Count; }\n        }\n\n        public bool IsSynchronized\n        {\n            get { return false; }\n        }\n\n        public object SyncRoot { get; } = new object();\n\n        internal void Add(ConfigurationAttribute item)\n        {\n            _list.Add(item);\n        }\n\n        internal ConfigurationElement Parent { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationAttributeSchema.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Xml.Linq;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing System.Threading;\nusing System.Reflection;\nusing System.Globalization;\n\nnamespace Microsoft.Web.Administration\n{\n    [DebuggerDisplay(\"{Name}[{Type}]\")]\n    public sealed class ConfigurationAttributeSchema\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"ConfigurationAttributeSchema\");\n\n        private ConfigurationEnumValueCollection _collection;\n\n        private ConfigurationValidatorBase _validator;\n\n        internal ConfigurationAttributeSchema()\n        { }\n\n        public ConfigurationEnumValueCollection GetEnumValues()\n        {\n            return _collection ?? (_collection = new ConfigurationEnumValueCollection());\n        }\n\n        public object GetMetadata(string metadataType)\n        {\n            return null;\n        }\n\n        public bool AllowInfinite { get; internal set; }\n        public object DefaultValue { get; private set; }\n        public bool IsCaseSensitive { get; internal set; }\n        public bool IsCombinedKey { get; internal set; }\n        public bool IsEncrypted { get; internal set; }\n        public bool IsExpanded { get; internal set; }\n        public bool IsRequired { get; internal set; }\n        public bool IsUniqueKey { get; internal set; }\n        public string Name { get; internal set; }\n        public string TimeSpanFormat { get; internal set; }\n        public string Type { get; internal set; }\n\n        internal object Parse(string value)\n        {\n            if (value == null)\n            {\n                return null;\n            }\n\n            object result = null;\n\n            // bool|enum|flags|uint|int|int64|string|timeSpan\n            if (Type == \"bool\")\n            {\n                bool b;\n                bool.TryParse(value, out b);\n                result = b;\n            }\n            else if (Type == \"uint\")\n            {\n                uint u;\n                uint.TryParse(value, out u);\n                result = u;\n            }\n            else if (Type == \"int\")\n            {\n                int i;\n                int.TryParse(value, out i);\n                result = i;\n            }\n            else if (Type == \"int64\")\n            {\n                long l;\n                long.TryParse(value, out l);\n                result = l;\n            }\n            else if (Type == \"string\")\n            {\n                result = value;\n            }\n            else if (Type == \"enum\")\n            {\n                var enum1 = GetEnumValues()[value];\n                if (enum1 == null)\n                {\n                    throw new COMException(string.Format(\"Enum must be one of {0}\\r\\n\", GetEnumValues().FormattedString));\n                }\n\n                result = enum1.Value;\n            }\n            else if (Type == \"flags\")\n            {\n                if (value == \"None\" || value == string.Empty)\n                {\n                    // IMPORTANT: workaround for Ftp_Schema.xml bug on validationFlags defaultValue=string.Empty.\n                    result = 0L;\n                }\n                else\n                {\n                    var parts = value.Split(',');\n                    long flags = 0;\n                    foreach (var part in parts)\n                    {\n                        var values = GetEnumValues();\n                        var item = values[part.Trim()];\n                        if (item == null)\n                        {\n                            throw new COMException(string.Format(\"Flags must be some combination of {0}\\r\\n\", GetEnumValues().FormattedString));\n                        }\n\n                        flags |= item.Value;\n                    }\n\n                    result = flags;\n                }\n            }\n            else if (Type == \"timeSpan\")\n            {\n                if (AllowInfinite && value == \"Infinite\")\n                {\n                    result = Timeout.InfiniteTimeSpan;\n                }\n                else if (TimeSpanFormat == \"string\")\n                {\n                    TimeSpan t;\n                    TimeSpan.TryParse(value, out t);\n                    result = t;\n                }\n                else if (TimeSpanFormat == \"minutes\")\n                {\n                    result = new TimeSpan(0, int.Parse(value), 0);\n                }\n                else if (TimeSpanFormat == \"seconds\")\n                {\n                    result = new TimeSpan(0, 0, int.Parse(value));\n                }\n            }\n\n            Validate(result);\n\n            return result;\n        }\n\n        private void Validate(object result)\n        {\n            _validator.Validate(result);\n        }\n\n        public string ValidationParameter { get; internal set; }\n        public string ValidationType { get; internal set; }\n\n        public string DefaultValueByType\n        {\n            get\n            {\n                if (Type == \"string\")\n                {\n                    // IMPORTANT: httpErrors / path\n                    return string.Empty;\n                }\n\n                if (Type == \"uint\")\n                {\n                    // IMPORTANT: system.webServer/rewrite/rules action \"statusCode\"\n                    return \"0\";\n                }\n\n                return null;\n            }\n        }\n\n        internal void SetEnumValues(ConfigurationEnumValueCollection enums)\n        {\n            _collection = enums;\n        }\n\n        internal void LoadEnums(XElement item)\n        {\n            var enums = new ConfigurationEnumValueCollection();\n            foreach (var node in item.Nodes())\n            {\n                var element = node as XElement;\n                if (element == null)\n                {\n                    continue;\n                }\n\n                enums.Add(new ConfigurationEnumValue { Name = element.Attribute(\"name\").Value, Value = long.Parse(element.Attribute(\"value\").Value) });\n            }\n\n            SetEnumValues(enums);\n        }\n\n        internal void SetDefaultValue(string value)\n        {\n            DefaultValue = Parse(value);\n        }\n\n        public void CreateValidator()\n        {\n            if (ValidationType == null)\n            {\n                _validator = ValidatorRegistry.DefaultValidator;\n                return;\n            }\n\n            var type = ValidatorRegistry.GetValidator(ValidationType);\n            try\n            {\n                _validator = (ConfigurationValidatorBase)Activator.CreateInstance(\n                    type,\n                    BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,\n                    null,\n                    ValidationParameter == null ? null : new object[] { ValidationParameter },\n                    CultureInfo.InvariantCulture);\n            }\n            catch (MissingMethodException)\n            {\n                _logger.LogDebug($\"type: {ValidationType}; parameter: {ValidationParameter}; is null ? {ValidationParameter == null}\");\n                throw;\n            }\n        }\n\n        public object CheckType(object value)\n        {\n            var result = CheckRawType(value);\n            Validate(result);\n            return result;\n        }\n\n        private object CheckRawType(object value)\n        {\n            // bool|enum|flags|uint|int|int64|string|timeSpan\n            if (Type == \"bool\" && value is bool)\n            {\n                return value;\n            }\n\n            if (Type == \"enum\" && value is long)\n            {\n                return value;\n            }\n\n            if (Type == \"enum\" && value is int)\n            {\n                return Convert.ToInt64(value);\n            }\n\n            if (Type == \"enum\" && value is string)\n            {\n                return Parse((string)value);\n            }\n\n            // TODO: is this needed?\n            if (Type == \"flags\" && value is long)\n            {\n                return value;\n            }\n\n            if (Type == \"flags\" && value is string)\n            {\n                return Parse((string)value);\n            }\n\n            if (Type == \"uint\" && value is uint)\n            {\n                return value;\n            }\n\n            if (Type == \"uint\" && value is int)\n            {\n                return Convert.ToUInt32(value);\n            }\n\n            // IMPORTANT: site id\n            if (Type == \"uint\" && value is long)\n            {\n                return Convert.ToUInt32(value);\n            }\n\n            if (Type == \"int\" && value is int)\n            {\n                return value;\n            }\n\n            if (Type == \"int64\" && value is long)\n            {\n                return value;\n            }\n\n            if (Type == \"string\" && value is string)\n            {\n                return value;\n            }\n\n            if (Type == \"timeSpan\" && value is TimeSpan)\n            {\n                return value;\n            }\n\n            if (Type == \"string\" && value == null)\n            {\n                return value;\n            }\n\n            var valueType = value.GetType();\n            if (Type == \"enum\" && valueType.BaseType?.FullName == \"System.Enum\")\n            {\n                var enumType = Enum.GetUnderlyingType(valueType);\n                if (enumType == typeof(long))\n                {\n                    return (long)value;\n                }\n\n                if (enumType == typeof(int))\n                {\n                    return (long)(int)value;\n                }\n            }\n\n            throw new InvalidCastException($\"Cannot convert {value} of {value.GetType()} to {Type}.\");\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationAttributeSchemaCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationAttributeSchemaCollection : IEnumerable<ConfigurationAttributeSchema>,\n    ICollection, IEnumerable\n    {\n        private List<ConfigurationAttributeSchema> _list = new List<ConfigurationAttributeSchema>();\n\n        internal ConfigurationAttributeSchemaCollection()\n        { }\n\n        internal void Add(ConfigurationAttributeSchema item)\n        {\n            _list.Add(item);\n        }\n\n        public void CopyTo(Array array, int index)\n        {\n            throw new NotImplementedException();\n        }\n\n        public int Count\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public bool IsSynchronized\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public object SyncRoot { get; } = new object();\n\n        public IEnumerator GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        IEnumerator<ConfigurationAttributeSchema> IEnumerable<ConfigurationAttributeSchema>.GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        public ConfigurationAttributeSchema this[int index]\n        {\n            get { return _list[index]; }\n        }\n\n        public ConfigurationAttributeSchema this[string name]\n        {\n            get { return _list.FirstOrDefault(item => item.Name == name); }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationAttributeSchemaExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Text;\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class ConfigurationAttributeSchemaExtensions\n    {\n        public static string Format(this ConfigurationAttributeSchema schema, object value)\n        {\n            if (value == null)\n            {\n                return null;\n            }\n\n            if (schema.Type == \"enum\")\n            {\n                return schema.GetEnumValues().GetName((long)value);\n            }\n\n            if (schema.Type == \"flags\")\n            {\n                var longValue = (long)value;\n                var result = new StringBuilder();\n                foreach (ConfigurationEnumValue item in schema.GetEnumValues())\n                {\n                    if (item.Value == 0)\n                    {\n                        if (longValue == 0)\n                        {\n                            return item.Name;\n                        }\n\n                        continue;\n                    }\n\n                    if ((longValue & item.Value) == item.Value)\n                    {\n                        result.AppendFormat(\"{0},\", item.Name);\n                    }\n                }\n\n                if (result[result.Length - 1] == ',')\n                {\n                    result.Length--;\n                }\n\n                return result.ToString();\n            }\n\n            if (schema.Type == \"bool\")\n            {\n                return (bool)value ? \"true\" : \"false\";\n            }\n\n            return value.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationChildElementCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationChildElementCollection : ICollection, IEnumerable<ConfigurationElement>\n    {\n        private readonly List<ConfigurationElement> _list = new List<ConfigurationElement>();\n        private readonly object _root = new object();\n\n        internal ConfigurationChildElementCollection(ConfigurationElement parent)\n        {\n            Parent = parent;\n        }\n\n        public void CopyTo(Array array, int index)\n        {\n            _list.CopyTo((ConfigurationElement[])array, index);\n        }\n\n        public int Count\n        {\n            get { return _list.Count; }\n        }\n\n        internal void Remove(ConfigurationElement item)\n        {\n            _list.Remove(item);\n        }\n\n        public bool IsSynchronized\n        {\n            get { return false; }\n        }\n\n        public object SyncRoot\n        {\n            get { return _root; }\n        }\n\n        public IEnumerator GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        IEnumerator<ConfigurationElement> IEnumerable<ConfigurationElement>.GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        public ConfigurationElement this[int index]\n        {\n            get { return _list[index]; }\n        }\n\n        public ConfigurationElement this[string name]\n        {\n            get\n            {\n                var result = _list.FirstOrDefault(item => item.ElementTagName == name);\n                if (result != null)\n                {\n                    return result;\n                }\n\n                var schema = Parent.Schema.ChildElementSchemas[name];\n                result = schema.CollectionSchema == null\n                    ? new ConfigurationElement(null, name, schema, Parent, null, Parent.FileContext)\n                    : new ConfigurationElementCollection(name, schema, Parent, null, Parent.FileContext);\n                _list.Add(result);\n                return result;\n            }\n        }\n\n        internal void Add(ConfigurationElement element)\n        {\n            _list.Add(element);\n        }\n\n        internal ConfigurationElement Parent { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationCollectionSchema.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationCollectionSchema\n    {\n        internal ConfigurationCollectionSchema(string path, string addElementNames, string removeElementName, string clearElementName, bool isMergeAppend, bool allowDuplicates, bool allowUnrecognizedAttributes, string fileName)\n        {\n            IsMergeAppend = isMergeAppend;\n            AllowDuplicates = allowDuplicates;\n            AddElementNames = addElementNames;\n            AddSchemas = new List<ConfigurationElementSchema>(_addNames.Length);\n            foreach (var name in _addNames)\n            {\n                AddSchemas.Add(new ConfigurationElementSchema(fileName) { Path = path + '/' + name, AllowUnrecognizedAttributes = allowUnrecognizedAttributes, Name = name });\n            }\n\n            RemoveElementName = removeElementName;\n            RemoveSchema = RemoveElementName == null\n                               ? null\n                               : new ConfigurationElementSchema(fileName)\n                               {\n                                   Path = path + '/' + RemoveElementName,\n                                   AllowUnrecognizedAttributes =\n                                             allowUnrecognizedAttributes,\n                                   Name = RemoveElementName\n                               };\n            ClearElementName = clearElementName;\n            ClearSchema = ClearElementName == null\n                              ? null\n                              : new ConfigurationElementSchema(fileName)\n                              {\n                                  Path = path + '/' + ClearElementName,\n                                  AllowUnrecognizedAttributes =\n                                            allowUnrecognizedAttributes,\n                                  Name = ClearElementName\n                              };\n            Path = path;\n        }\n\n        public ConfigurationElementSchema GetAddElementSchema(string elementName)\n        {\n            return (from name in _addNames\n                    where elementName == name\n                    select AddSchemas.First(item => item.Path.EndsWith(name, System.StringComparison.Ordinal))).FirstOrDefault();\n        }\n\n        public ConfigurationElementSchema GetClearElementSchema()\n        {\n            return ClearSchema;\n        }\n\n        public object GetMetadata(string metadataType)\n        {\n            return null;\n        }\n\n        public ConfigurationElementSchema GetRemoveElementSchema()\n        {\n            return RemoveSchema;\n        }\n\n        public string AddElementNames\n        {\n            get\n            {\n                return _addElementNames;\n            }\n\n            internal set\n            {\n                if (string.IsNullOrWhiteSpace(value))\n                {\n                    _addElementNames = \"add\";\n                    _addNames = new[] { \"add\" };\n                    return;\n                }\n\n                _addElementNames = value;\n                _addNames = value.Split(',');\n            }\n        }\n\n        public bool AllowDuplicates { get; internal set; }\n\n        public string ClearElementName\n        {\n            get { return _clearElementName; }\n            internal set { _clearElementName = string.IsNullOrWhiteSpace(value) ? null : value; }\n        }\n\n        public bool IsMergeAppend { get; internal set; }\n\n        public string RemoveElementName\n        {\n            get { return _removeElementName; }\n            internal set { _removeElementName = string.IsNullOrWhiteSpace(value) ? null : value; }\n        }\n\n        internal ConfigurationElementSchema RemoveSchema;\n        internal ConfigurationElementSchema ClearSchema;\n        internal List<ConfigurationElementSchema> AddSchemas;\n        private string _addElementNames;\n        private string[] _addNames;\n        private string _clearElementName;\n        private string _removeElementName;\n\n        internal string Path { get; }\n\n        internal ConfigurationElementSchema FindSchema(string path)\n        {\n            var remove = string.Format(\"{0}/{1}\", Path, RemoveElementName);\n            var clear = string.Format(\"{0}/{1}\", Path, ClearElementName);\n            if (path == remove)\n            {\n                return RemoveSchema;\n            }\n\n            if (path == clear)\n            {\n                return ClearSchema;\n            }\n\n            foreach (string name in _addNames)\n            {\n                string add = string.Format(\"{0}/{1}\", Path, name);\n                if (path == add)\n                {\n                    return GetAddElementSchema(name);\n                }\n            }\n\n            foreach (var name in _addNames)\n            {\n                var addRoot = GetAddElementSchema(name);\n                var addSchema = addRoot.FindSchema(path);\n                if (addSchema != null)\n                {\n                    return addSchema;\n                }\n            }\n\n            // TODO: do we need clear and remove check?\n            if (ClearSchema != null)\n            {\n                var root = ClearSchema;\n                var result = root.FindSchema(path);\n                if (result != null)\n                {\n                    return result;\n                }\n            }\n\n            if (RemoveSchema != null)\n            {\n                var root = RemoveSchema;\n                var result = root.FindSchema(path);\n                return result;\n            }\n\n            return null;\n        }\n\n        internal void Merge(ConfigurationCollectionSchema child)\n        {\n            // TODO: validation\n            if (string.IsNullOrEmpty(AddElementNames))\n            {\n                AddElementNames = child.AddElementNames;\n            }\n\n            if (string.IsNullOrEmpty(ClearElementName))\n            {\n                ClearElementName = child.ClearElementName;\n            }\n\n            if (string.IsNullOrEmpty(RemoveElementName))\n            {\n                RemoveElementName = child.RemoveElementName;\n            }\n\n            // TODO: is it OK?\n            if (RemoveSchema != null && child.RemoveSchema != null)\n            {\n                RemoveSchema.AllowUnrecognizedAttributes = child.RemoveSchema.AllowUnrecognizedAttributes;\n            }\n\n            if (ClearSchema != null && child.ClearSchema != null)\n            {\n                ClearSchema.AllowUnrecognizedAttributes = child.ClearSchema.AllowUnrecognizedAttributes;\n            }\n        }\n\n        internal bool ContainsAddElement(string elementTagName)\n        {\n            return _addNames.Any(item => item == elementTagName);\n        }\n\n        internal ConfigurationElementSchema GetElementSchema(string name)\n        {\n            if (name == ClearElementName)\n            {\n                return GetClearElementSchema();\n            }\n\n            return name == RemoveElementName ? GetRemoveElementSchema() : GetAddElementSchema(name);\n        }\n\n        internal void ReplicateAddSchema()\n        {\n            for (int i = 1; i < AddSchemas.Count; i++)\n            {\n                AddSchemas[i].AttributeSchemas = AddSchemas[0].AttributeSchemas;\n                AddSchemas[i].ChildElementSchemas = AddSchemas[0].ChildElementSchemas;\n                AddSchemas[i].CollectionSchema = AddSchemas[0].CollectionSchema;\n            }\n\n            foreach (ConfigurationAttributeSchema schema in AddSchemas[0].AttributeSchemas)\n            {\n                if (!schema.IsUniqueKey && !schema.IsCombinedKey)\n                {\n                    continue;\n                }\n\n                this.RemoveSchema?.AttributeSchemas.Add(schema);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationElement.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Xml.Linq;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing System.Xml;\nusing System.Diagnostics;\n\nnamespace Microsoft.Web.Administration\n{\n    [DebuggerDisplay(\"{ElementTagName}\")]\n    public class ConfigurationElement\n    {\n        private string _overriddenFileName;\n\n        internal ConfigurationElement(ConfigurationElement element, string name, ConfigurationElementSchema schema, ConfigurationElement parent, XElement entity, FileContext core, string fileName = null, bool isSection = false, string location = null)\n        {\n            Methods = new ConfigurationMethodCollection();\n            FileContext = parent?.FileContext ?? element?.FileContext ?? core;\n            if (isSection)\n            {\n                Section = (ConfigurationSection)this;\n                Section.Location = location;\n            }\n            else\n            {\n                Section = parent?.Section;\n            }\n            InnerEntity = entity ?? element?.InnerEntity;\n            _overriddenFileName = fileName;\n            if (element == null)\n            {\n                ElementTagName = name ?? throw new ArgumentException(\"empty name\");\n                _attributes = new ConfigurationAttributeCollection(this);\n                ChildElements = new ConfigurationChildElementCollection(this);\n                Collections = new List<ConfigurationElementCollection>();\n                _rawAttributes = new Dictionary<string, string>();\n                ParentElement = parent;\n                if (parent == null)\n                {\n                    Schema = schema ?? throw new ArgumentException(\"empty schema\");\n                    IsLocallyStored = true;\n                }\n                else\n                {\n                    IsLocallyStored = !parent.Section.IsLocked;\n                    var collection = parent.Schema.CollectionSchema;\n                    if (collection == null)\n                    {\n                        Schema = parent.Schema.ChildElementSchemas[name];\n                    }\n                    else\n                    {\n                        Schema = parent.Schema.CollectionSchema.GetElementSchema(name) ?? parent.Schema.ChildElementSchemas[name];\n                    }\n\n                    if (Schema == null)\n                    {\n                        throw new ArgumentException(\"empty schema\");\n                    }\n                }\n\n                ParseAttributes(_overriddenFileName ?? FileContext.FileName);\n            }\n            else\n            {\n                IsLocallyStored = element.IsLocallyStored;\n                ElementTagName = element.ElementTagName;\n                _attributes = element.Attributes;\n                ChildElements = element.ChildElements;\n                Collections = element.Collections;\n                _rawAttributes = element.RawAttributes;\n                Schema = element.Schema;\n                ParentElement = parent ?? element.ParentElement;\n                if (schema != null)\n                {\n                    // TODO: here we ignore second schema\n                    //throw new ArgumentException();\n                }\n            }\n        }\n\n        internal bool HasSiteDefaults => _defaults != null;\n\n        private ConfigurationElement _defaults;\n\n        internal object GetSiteDefaults(string name)\n        {\n            return _defaults == null ? null : _defaults[name];\n        }\n\n        internal void SetSiteDefaults(ConfigurationElement defaults)\n        {\n            _defaults = defaults;\n        }\n\n        internal XElement Entity\n        {\n            get { return InnerEntity ?? (InnerEntity = CreateEntity()); }\n            set { InnerEntity = value; }\n        }\n\n        internal void ForceCreateEntity()\n        {\n            if (InnerEntity != null)\n            {\n                return;\n            }\n\n            InnerEntity = CreateEntity();\n        }\n\n        internal void Validate(bool loading)\n        {\n            List<string> missing = null;\n            foreach (ConfigurationAttributeSchema attribute in Schema.AttributeSchemas)\n            {\n                if (!attribute.IsRequired)\n                {\n                    continue;\n                }\n\n                if (!RawAttributes.ContainsKey(attribute.Name))\n                {\n                    if (missing == null)\n                    {\n                        missing = new List<string>();\n                    }\n\n                    missing.Add(attribute.Name);\n                }\n            }\n\n            if (missing != null)\n            {\n                string error;\n                if (!loading)\n                {\n                    error = $\"required attributes {StringExtensions.Combine(missing, \",\")}\";\n                }\n                else if (missing.Count == 1)\n                {\n                    error = $\"required attribute '{missing[0]}'\";\n                }\n                else\n                {\n                    error = $\"required attributes '{StringExtensions.Combine(missing, \",\")}'\";\n                }\n\n                if (loading)\n                {\n                    throw new COMException($\"Line number: {(Entity as IXmlLineInfo).LineNumber}\\r\\nError: Missing {error}\\r\\n\");\n                }\n\n                throw new FileNotFoundException($\"Filename: \\r\\nError: Element is missing {error}\\r\\n\\r\\n\");\n            }\n        }\n\n        internal virtual XElement CreateEntity()\n        {\n            if (ElementTagName.Contains('/'))\n            {\n                return FileContext.CreateElement(ElementTagName, Section.Location);\n            }\n\n            var result = new XElement(ElementTagName);\n            if (ParentElement is ConfigurationElementCollection\n                && ParentElement.Schema.CollectionSchema.GetElementSchema(ElementTagName) != null)\n            {\n                // IMPORTANT: avoid appending to parent element.\n                return result;\n            }\n\n            AppendToParentElement(result, false);\n            return result;\n        }\n\n        internal void AppendToParentElement(XElement entity, bool top)\n        {\n            if (entity.Parent != null)\n            {\n                return;\n            }\n\n            if (!IsLocallyStored)\n            {\n                return;\n            }\n\n            if (top && ParentElement?.Entity.FirstNode != null)\n            {\n                ParentElement.Entity.FirstNode.AddBeforeSelf(entity);\n            }\n            else\n            {\n                ParentElement?.Entity.Add(entity);\n            }\n        }\n\n        internal FileContext FileContext { get; set; }\n        internal ConfigurationSection Section { get; set; }\n\n        public void Delete()\n        {\n            FileContext.SetDirty();\n            ParentElement?.ChildElements?.Remove(this);\n            if (InnerEntity?.Parent != null) // for removing items in collection\n            {\n                InnerEntity?.Remove();\n            }\n        }\n\n        internal bool ContainsAttribute(string attributeName)\n        {\n            return Schema == null || Schema.AllowUnrecognizedAttributes\n                || Schema.AttributeSchemas.Any(schema => schema.Name == attributeName);\n        }\n\n        public ConfigurationAttribute GetAttribute(string attributeName)\n        {\n            if (!ContainsAttribute(attributeName) && attributeName != \"configBuilders\")\n            {\n                throw new COMException(\n                    $\"Filename: \\\\\\\\?\\\\{FileContext.FileName}\\r\\nLine number: {(Entity as IXmlLineInfo).LineNumber}\\r\\nError: Unrecognized attribute '{attributeName}'\\r\\n\\r\\n\");\n            }\n\n            return Attributes[attributeName];\n        }\n\n        public object GetAttributeValue(string attributeName)\n        {\n            return this[attributeName];\n        }\n\n        public ConfigurationElement GetChildElement(string elementName)\n        {\n            return ChildElements[elementName];\n        }\n\n        public ConfigurationElement GetChildElement(string elementName, Type elementType)\n        {\n            return GetChildElement(elementName);\n        }\n\n        public ConfigurationElementCollection GetCollection()\n        {\n            return this is ConfigurationSection section\n                ? section.Root.ForceLoad()\n                : (this as ConfigurationElementCollection)?.ForceLoad();\n        }\n\n        public ConfigurationElementCollection GetCollection(string collectionName)\n        {\n            var child = ChildElements[collectionName];\n            if (child != null)\n            {\n                return child.GetCollection();\n            }\n\n            var schema = Schema.ChildElementSchemas[collectionName];\n            if (schema == null)\n            {\n                return null;\n            }\n\n            var result = new ConfigurationElementCollection(collectionName, schema, this, InnerEntity, null);\n            ChildElements.Add(result);\n            return result.GetCollection();\n        }\n\n        public ConfigurationElement GetCollection(Type collectionType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public ConfigurationElement GetCollection(string collectionName, Type collectionType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public object GetMetadata(string metadataType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void SetAttributeValue(string attributeName, object value)\n        {\n            GetAttribute(attributeName).SetValue(SetAttributeValueInner(attributeName, value));\n        }\n\n        public void SetMetadata(string metadataType, object value)\n        {\n            throw new NotImplementedException();\n        }\n\n        public ConfigurationAttributeCollection Attributes => ConfigSource == null ? _attributes : ConfigSource.Attributes;\n        public ConfigurationChildElementCollection ChildElements\n        {\n            get => ConfigSource == null ? _childElements : ConfigSource.ChildElements;\n            protected set\n            {\n                if (ConfigSource == null)\n                {\n                    _childElements = value;\n                }\n                else\n                {\n                    ConfigSource.ChildElements = value;\n                }\n            }\n        }\n\n        public string ElementTagName { get; }\n        public bool IsLocallyStored { get; internal set; }\n        public object this[string attributeName]\n        {\n            get { return GetAttribute(attributeName).Value; }\n            set { SetAttributeValue(attributeName, value); }\n        }\n\n        public ConfigurationMethodCollection Methods { get; }\n        public IDictionary<string, string> RawAttributes\n            => ConfigSource == null ? _rawAttributes : ConfigSource.RawAttributes;\n        public ConfigurationElementSchema Schema { get; }\n\n        private List<ConfigurationElementCollection> Collections { get; }\n\n        internal ConfigurationElement ParentElement { get; }\n\n        private ConfigurationLockCollection _lockAllAttributesExcept;\n\n        public ConfigurationLockCollection LockAllAttributesExcept\n            => _lockAllAttributesExcept ??\n               (_lockAllAttributesExcept =\n                   new ConfigurationLockCollection(this,\n                       ConfigurationLockType.Attribute | ConfigurationLockType.Exclude));\n\n        private ConfigurationLockCollection _lockAllElementsExcept;\n\n        public ConfigurationLockCollection LockAllElementsExcept\n            => _lockAllElementsExcept ??\n               (_lockAllElementsExcept =\n                   new ConfigurationLockCollection(this,\n                       ConfigurationLockType.Element | ConfigurationLockType.Exclude));\n\n        private ConfigurationLockCollection _lockAttributes;\n\n        public ConfigurationLockCollection LockAttributes\n            => _lockAttributes ??\n               (_lockAttributes = new ConfigurationLockCollection(this, ConfigurationLockType.Attribute));\n\n        private ConfigurationLockCollection _lockElements;\n        protected internal XElement InnerEntity;\n\n        private string _isLocked;\n        private ConfigurationChildElementCollection _childElements;\n        private readonly ConfigurationAttributeCollection _attributes;\n        private readonly IDictionary<string, string> _rawAttributes;\n\n        public ConfigurationLockCollection LockElements\n            => _lockElements ??\n               (_lockElements = new ConfigurationLockCollection(this, ConfigurationLockType.Element));\n\n        internal string IsLocked\n        {\n            get => _isLocked;\n            set\n            {\n                _isLocked = value;\n                Entity.SetAttributeValue(\"lockItem\", _isLocked == \"true\" ? \"true\" : null);\n            }\n        }\n\n        internal ConfigurationElement CloneSource { get; set; }\n\n        internal bool SkipCheck { get; set; }\n        public ConfigurationElement ConfigSource { get; set; }\n\n        internal virtual void AddChild(ConfigurationElement child)\n        {\n            ChildElements.Add(child);\n        }\n\n        internal virtual ConfigurationElement GetElementByPath(string path)\n        {\n            var index = path.IndexOf(Schema.Path, StringComparison.Ordinal);\n            if (index != 0)\n            {\n                return null;\n            }\n\n            if (Schema.Path.Length != 0)\n            {\n                if (path.Length != Schema.Path.Length && path[Schema.Path.Length] != '/')\n                {\n                    return null;\n                }\n            }\n\n            if (Schema.Path == path)\n            {\n                return this;\n            }\n\n            foreach (ConfigurationElement child in ChildElements)\n            {\n                var result = child.GetElementByPath(path);\n                if (result != null)\n                {\n                    return result;\n                }\n            }\n\n            return null;\n        }\n\n        private void ParseAttributes(string fileName)\n        {\n            if (InnerEntity == null)\n            {\n                return;\n            }\n\n            ParseAttributes(InnerEntity, fileName);\n        }\n\n        private void ParseAttributes(XElement entity, string fileName)\n        {\n            foreach (var attribute in entity.Attributes())\n            {\n                try\n                {\n                    if (ParentLockAttribute(attribute.Name.LocalName))\n                    {\n                        throw new FileLoadException($\"Filename: \\\\\\\\?\\\\{FileContext.FileName}\\r\\nLine number: {(entity as IXmlLineInfo).LineNumber}\\r\\nError: Lock violation\\r\\n\\r\\n\");\n                    }\n\n                    ParseAttribute(attribute, fileName);\n                }\n                catch (COMException ex)\n                {\n                    throw new COMException(\n                        string.Format(\n                            \"Line number: {0}\\r\\nError: The '{1}' attribute is invalid.  {2}\\r\\n\",\n                            (InnerEntity as IXmlLineInfo).LineNumber,\n                            attribute.Name,\n                            ex.Message), ex);\n                }\n                catch (ArgumentException ex)\n                {\n                    throw new COMException(\n                        string.Format(\n                            \"Line number: {0}\\r\\nError: {1}\\r\\n\",\n                            (InnerEntity as IXmlLineInfo).LineNumber,\n                            ex.Message), ex);\n                }\n            }\n\n            Validate(true);\n        }\n\n        private bool ParentLockAttribute(string name)\n        {\n            var parent = GetParentElement();\n            if (parent == null)\n            {\n                return false;\n            }\n\n            if (parent.LockAttributes.Contains(name))\n            {\n                return true;\n            }\n\n            return parent.ParentLockAttribute(name);\n        }\n\n        private void ParseAttribute(XAttribute attribute, string fileName)\n        {\n            if (attribute.Name.NamespaceName == \"http://www.w3.org/2000/xmlns/\")\n            {\n                return;\n            }\n\n            var name = attribute.Name.LocalName;\n            switch (name)\n            {\n                case \"lockAllAttributesExcept\":\n                    LockAllAttributesExcept.SetFromList(attribute.Value);\n                    return;\n                case \"lockAllElementsExcept\":\n                    LockAllElementsExcept.SetFromList(attribute.Value);\n                    return;\n                case \"lockAttributes\":\n                    LockAttributes.SetFromList(attribute.Value);\n                    return;\n                case \"lockElements\":\n                    LockElements.SetFromList(attribute.Value);\n                    return;\n                case \"lockItem\":\n                    IsLocked = attribute.Value;\n                    return;\n                case \"configSource\":\n                    if (FileContext.AppHost)\n                    {\n                        throw new ArgumentException($\"Unrecognized attribute 'configSource'\");\n                    }\n\n                    var directory = Path.GetDirectoryName(fileName);\n                    var file = Path.Combine(directory, attribute.Value);\n                    if (File.Exists(file))\n                    {\n                        var configSource = XDocument.Load(file, LoadOptions.PreserveWhitespace | LoadOptions.SetLineInfo);\n                        var node = configSource.Root;\n                        ConfigSource = new ConfigurationElement(null, ElementTagName, Schema, ParentElement, node, FileContext, file);\n                        return;\n                    }\n\n                    throw new ArgumentException(\"Specified configSource cannot be parsed\");\n            }\n\n            RawAttributes.Add(name, attribute.Value);\n            var child = Schema.AttributeSchemas[name];\n            if (child == null && !Schema.AllowUnrecognizedAttributes && FileContext.Parent != null)\n            {\n                // IMPORTANT: ignore missing attributes in machine.config.\n                if (name != \"configBuilders\")\n                {\n                    // IMPORTANT: configBuilder is not in schema but is valid.\n                    throw new ArgumentException($\"Unrecognized attribute '{name}'\");\n                }\n            }\n\n            var item = new ConfigurationAttribute(name, child, attribute.Value, this);\n            Attributes.Add(item);\n        }\n\n        internal ConfigurationElement GetElementAtParentLocationInFileContext(FileContext core)\n        {\n            return GetElementAtParentLocationInFileContext(core, core);\n        }\n\n        internal ConfigurationElement GetElementAtParentLocationInFileContext(FileContext core, FileContext top)\n        {\n            if (Section == null)\n            {\n                return null;\n            }\n\n            if (Section.Location == null)\n            {\n                if (core != null && core.Parent == null && Schema.Path == \"configProtectedData/providers\")\n                {\n                    // IMPORTANT: to load providers from machine.config.\n                    return core.GetSection(Section.SectionPath).GetChildElement(\"providers\");\n                }\n\n                return null;\n            }\n\n            if (core == null)\n            {\n                return null;\n            }\n\n            if (core.Location != null && !Section.Location.StartsWith(core.Location + '/'))\n            {\n                // IMPORTANT: web.config should not check parent path.\n                return null;\n            }\n\n            if (core != top)\n            {\n                var exact = core.GetSection(Section.SectionPath, Section.Location);\n                var exactElement = exact?.GetElementByPath(Schema.Path);\n                if (exactElement != null)\n                {\n                    return exactElement;\n                }\n            }\n\n            string parentLocation = Section.Location.GetParentPath();\n            while (true)\n            {\n                var parentSection = core.GetSection(Section.SectionPath, parentLocation);\n                // IMPORTANT: allow null section as web.config does not have the sections.\n                var parentElement = parentSection?.GetElementByPath(Schema.Path);\n                if (parentElement != null)\n                {\n                    return parentElement;\n                }\n\n                if (parentLocation == null)\n                {\n                    return null;\n                }\n\n                parentLocation = parentLocation.GetParentPath();\n            }\n        }\n\n        internal ConfigurationElement GetParentElement()\n        {\n            var core = FileContext;\n            if (core == null)\n            {\n                return null;\n            }\n\n            while (true)\n            {\n                // first check same file.\n                var parentElement = GetElementAtParentLocationInFileContext(core, FileContext);\n                if (parentElement != null)\n                {\n                    return parentElement;\n                }\n\n                core = core.Parent;\n                if (core == null)\n                {\n                    return null;\n                }\n            }\n        }\n\n        protected internal void CleanEntity()\n        {\n            if (InnerEntity == null || InnerEntity.HasElements || InnerEntity.HasAttributes)\n            {\n                return;\n            }\n\n            var parent = InnerEntity?.Parent;\n            if (parent == null)\n            {\n                InnerEntity = null;\n                return;\n            }\n\n            InnerEntity?.Remove();\n            InnerEntity = null;\n            if (ParentElement == null)\n            {\n                Clean(parent);\n            }\n            else\n            {\n                ParentElement.CleanEntity();\n            }\n        }\n\n        private static void Clean(XElement entity)\n        {\n            if (entity.HasElements || entity.HasAttributes || entity.Name == \"configuration\")\n            {\n                return;\n            }\n\n            var parent = entity.Parent;\n            if (parent == null)\n            {\n                return;\n            }\n\n            entity.Remove();\n            Clean(parent);\n        }\n\n        internal object SetAttributeValueInner(string name, object value)\n        {\n            if (!SkipCheck)\n            {\n                if (Section.IsLocked)\n                {\n                    throw new FileLoadException(\"This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault=\\\"Deny\\\"), or set explicitly by a location tag with overrideMode=\\\"Deny\\\" or the legacy allowOverride=\\\"false\\\".\\r\\n\");\n                }\n\n                FileContext.SetDirty();\n            }\n\n            var attribute = GetAttribute(name);\n            var result = attribute.TypeMatch(value);\n            attribute.IsInheritedFromDefaultValue = (attribute.Schema == null || !attribute.Schema.IsRequired)\n                                                    && result.Equals(attribute.ExtractDefaultValueFromSchema());\n            var isInheritedFromSiteDefaults = _defaults == null || result == GetSiteDefaults(name);\n\n            // IMPORTANT: remove attribute if value is equal to default.\n            Entity.SetAttributeValue(\n                name, isInheritedFromSiteDefaults && attribute.IsInheritedFromDefaultValue\n                    ? null\n                    : attribute.Format(result));\n\n            // IMPORTANT: IIS seems to use the following\n            // this.Entity.SetAttributeValue(name, attribute.Format(_value));\n\n            CleanEntity();\n            if (attribute.IsInheritedFromDefaultValue)\n            {\n                RawAttributes.Remove(name);\n            }\n            else\n            {\n                if (RawAttributes.ContainsKey(name))\n                {\n                    RawAttributes[name] = value.ToString();\n                }\n                else\n                {\n                    RawAttributes.Add(name, value.ToString());\n                }\n            }\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationElementCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.IO;\nusing System.Linq;\nusing System.Xml;\nusing System.Xml.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public class ConfigurationElementCollection : ConfigurationElementCollectionBase<ConfigurationElement>\n    {\n        private bool _initialized;\n\n        public ConfigurationElementCollection()\n        { }\n\n        internal ConfigurationElementCollection(string name, ConfigurationElementSchema schema, ConfigurationElement parent, XElement entity, FileContext core)\n            : base(null, name, schema, parent, entity, core)\n        {\n        }\n\n        private static bool Match(ConfigurationElement existing, ConfigurationElement remove, ConfigurationElementSchema removeSchema)\n        {\n            foreach (ConfigurationAttributeSchema attribute in removeSchema.AttributeSchemas)\n            {\n                if (attribute.IsUniqueKey || attribute.IsCombinedKey)\n                {\n                    if (existing.Attributes[attribute.Name].Value.ToString() != remove.Attributes[attribute.Name].Value.ToString())\n                    {\n                        return false;\n                    }\n                }\n            }\n\n            return true;\n        }\n\n        protected override ConfigurationElement CreateNewElement(string elementTagName)\n        {\n            var schema = Schema.CollectionSchema.AddSchemas.FirstOrDefault(item => item.Name == elementTagName);\n            return schema?.CollectionSchema == null\n                ? new ConfigurationElement(null, elementTagName, schema, this, null, FileContext) /*{  IsLocallyStored = this.Schema.Path != \"system.webServer/defaultDocument/files\" }*/\n                : new ConfigurationElementCollection(elementTagName, schema, this, null, FileContext);\n        }\n\n        internal override void AddChild(ConfigurationElement child)\n        {\n            ForceLoad();\n            if (Schema.CollectionSchema.ContainsAddElement(child.ElementTagName))\n            {\n                child.AppendToParentElement(child.Entity, false);\n                Real.Add(child);\n                if (HasParent && Schema.Path == \"system.webServer/defaultDocument/files\")\n                {\n                    var index = Real.Count == 0 ? 0 : Exposed.IndexOf(Real[Real.Count - 1]) + 1;\n                    Exposed.Insert(index, child);\n                }\n                else\n                {\n                    Exposed.Add(child);\n                }\n            }\n            else if (child.ElementTagName == Schema.CollectionSchema.ClearElementName)\n            {\n                child.AppendToParentElement(child.Entity, false);\n                Real.Add(child);\n                Exposed.Clear();\n            }\n            else if (child.ElementTagName == Schema.CollectionSchema.RemoveElementName)\n            {\n                child.AppendToParentElement(child.Entity, false);\n                Real.Add(child);\n                foreach (var item in Exposed.ToList())\n                {\n                    if (Match(item, child, Schema.CollectionSchema.RemoveSchema))\n                    {\n                        // IMPORTANT: can remove from location tag in the same file, but not from child web.config.\n                        if (item.IsLocked == \"true\" && item.CloneSource?.FileContext != FileContext)\n                        {\n                            throw new FileLoadException($\"Filename: \\\\\\\\?\\\\{FileContext.FileName}\\r\\nLine number: {(child.Entity as IXmlLineInfo).LineNumber}\\r\\nError: Lock violation\\r\\n\\r\\n\");\n                        }\n\n                        Exposed.Remove(item);\n                    }\n                }\n            }\n            else\n            {\n                base.AddChild(child);\n            }\n        }\n\n        internal ConfigurationElementCollection ForceLoad()\n        {\n            if (_initialized)\n            {\n                return this;\n            }\n\n            _initialized = true;\n\n            var duplicateElement = GetParentElement();\n            var duplicateCollection = duplicateElement?.GetCollection();\n            if (duplicateCollection != null)\n            {\n                HasParent = true;\n\n                // IMPORTANT: load duplicate element.\n                foreach (ConfigurationElement element in duplicateCollection.Exposed)\n                {\n                    var newItem = CreateNewElement(element.ElementTagName);\n                    Clone(element, newItem);\n                    newItem.IsLocallyStored = false;\n                    newItem.CloneSource = element;\n                    Exposed.Add(newItem);\n                }\n\n                return this;\n            }\n\n            var parentElement = FileContext.AppHost ? GetParentElement() : GetElementAtParentLocationInFileContext(FileContext.Parent);\n            var parentCollection = parentElement?.GetCollection();\n            if (parentCollection == null)\n            {\n                return this;\n            }\n\n            HasParent = true;\n            foreach (ConfigurationElement element in parentCollection.Exposed)\n            {\n                var newItem = CreateNewElement(element.ElementTagName);\n                Clone(element, newItem);\n                newItem.IsLocallyStored = false;\n                newItem.CloneSource = element;\n                Exposed.Add(newItem);\n            }\n\n            return this;\n        }\n\n        internal void Revert()\n        {\n            FileContext.SetDirty();\n            _initialized = false;\n            HasParent = false;\n            Real.Clear();\n            Exposed.Clear();\n            InnerEntity?.Remove();\n            InnerEntity = null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationElementCollectionBase.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Threading;\nusing System.Xml.Linq;\nusing System.IO;\nusing System.Runtime.InteropServices;\nusing System.Xml;\n\nnamespace Microsoft.Web.Administration\n{\n    public class ConfigurationElementCollectionBase<T> : ConfigurationElement, ICollection, IEnumerable<T>\n        where T : ConfigurationElement\n    {\n        internal readonly Collection<T> Exposed = new Collection<T>();\n\n        internal readonly Collection<T> Real = new Collection<T>();\n\n        private object _syncRoot;\n\n        protected bool HasParent;\n\n        protected ConfigurationElementCollectionBase()\n            : this(null, null, null, null, null, null)\n        { }\n\n        internal ConfigurationElementCollectionBase(ConfigurationElement element, string name, ConfigurationElementSchema schema, ConfigurationElement parent, XElement entity, FileContext core)\n            : base(element, name, schema, parent, entity, core)\n        {\n            AllowsAdd = Schema.CollectionSchema.AddSchemas.Count > 0;\n            AllowsClear = Schema.CollectionSchema.ClearSchema != null;\n            AllowsRemove = Schema.CollectionSchema.RemoveSchema != null;\n        }\n\n        IEnumerator<T> IEnumerable<T>.GetEnumerator()\n        {\n            return Exposed.GetEnumerator();\n        }\n\n        public IEnumerator GetEnumerator()\n        {\n            return Exposed.GetEnumerator();\n        }\n\n        public void CopyTo(Array array, int index)\n        {\n            // TODO: how to fix real here.\n            Exposed.CopyTo(array.Cast<T>().ToArray(), index);\n        }\n\n        public int Count\n        {\n            get { return Exposed.Count; }\n        }\n\n        public bool IsSynchronized\n        {\n            get { return false; }\n        }\n\n        public object SyncRoot\n        {\n            get\n            {\n                if (_syncRoot == null)\n                {\n                    Interlocked.CompareExchange(ref _syncRoot, new object(), null);\n                }\n\n                return _syncRoot;\n            }\n        }\n\n        protected virtual T CreateNewElement(string elementTagName)\n        {\n            var schema = Schema.CollectionSchema.GetElementSchema(elementTagName);\n            if (schema == null)\n            {\n                return null;\n            }\n\n            return (T)Activator.CreateInstance(typeof(T), null, elementTagName, schema, this, null);\n        }\n\n        internal void InternalAdd(T element)\n        {\n            SkipCheck = true;\n            Add(element);\n            SkipCheck = false;\n        }\n\n        public T Add(T element)\n        {\n            return AddAt(Count, element);\n        }\n\n        public T AddAt(int index, T element)\n        {\n            if (!SkipCheck)\n            {\n                FileContext.SetDirty();\n            }\n\n            element.Validate(false);\n            element.ForceCreateEntity();\n            CheckMatched(element);\n\n            if (HasParent)\n            {\n                if (Count > 0)\n                {\n                    var left = index == 0 ? Exposed[0].IsLocallyStored : Exposed[index - 1].IsLocallyStored;\n                    var right = index == Count\n                                    ? Schema.Path != \"system.webServer/defaultDocument/files\"\n                                    : Exposed[index].IsLocallyStored;\n                    if (!left && !right)\n                    {\n                        foreach (var item in Real.ToList())\n                        {\n                            if (Schema.CollectionSchema.RemoveElementName == item.ElementTagName)\n                            {\n                                Real.Remove(item);\n                                item.Entity.Remove();\n                            }\n                        }\n\n                        var clear1 = CreateElement(Schema.CollectionSchema.ClearElementName);\n                        Real.Insert(0, clear1);\n                        clear1.ForceCreateEntity();\n                        clear1.AppendToParentElement(clear1.Entity, true);\n                        foreach (var item in Exposed)\n                        {\n                            if (item.IsLocallyStored)\n                            {\n                                continue;\n                            }\n\n                            item.IsLocallyStored = true;\n                            item.AppendToParentElement(item.Entity, false);\n                            Real.Add(item);\n                        }\n                    }\n                }\n\n                element.IsLocallyStored = true;\n            }\n\n            if (Count == index)\n            {\n                Real.Add(element);\n                Exposed.Add(element);\n                element.AppendToParentElement(element.Entity, false);\n                return element;\n            }\n\n            Real.Insert(index, element);\n            var previous = Exposed[index];\n            Exposed.Insert(index, element);\n\n            if (previous.IsLocallyStored)\n            {\n                previous.InnerEntity.AddBeforeSelf(element.InnerEntity);\n            }\n\n            element.AppendToParentElement(element.Entity, false);\n            return element;\n        }\n\n        private void CheckMatched(T element)\n        {\n            foreach (var item in Exposed)\n            {\n                CheckItem(element, item);\n            }\n        }\n\n        private void CheckItem(T element, T item)\n        {\n            List<Tuple<string, object>> keys = new List<Tuple<string, object>>();\n            foreach (ConfigurationAttributeSchema attribute in element.Schema.AttributeSchemas)\n            {\n                if (!attribute.IsCombinedKey && !attribute.IsUniqueKey)\n                {\n                    continue;\n                }\n\n                if (!item[attribute.Name].Equals(element[attribute.Name]))\n                {\n                    return;\n                }\n\n                keys.Add(new Tuple<string, object>(attribute.Name, item[attribute.Name]));\n            }\n\n            if (keys.Count == 0)\n            {\n                return;\n            }\n\n            var line = (element.Entity as IXmlLineInfo).LineNumber;\n            if (keys.Count == 1)\n            {\n                throw new COMException(\n                    $\"Filename: \\\\\\\\?\\\\{FileContext.FileName}\\r\\nLine number: {line}\\r\\nError: Cannot add duplicate collection entry of type '{element.ElementTagName}' with unique key attribute '{keys[0].Item1}' set to '{keys[0].Item2}'\\r\\n\\r\\n\");\n            }\n\n            var keyNames = new string[keys.Count];\n            var values = new object[keys.Count];\n            for (var index = 0; index < keys.Count; index++)\n            {\n                var key = keys[index];\n                keyNames[index] = key.Item1;\n                values[index] = key.Item2;\n            }\n\n            throw new COMException(\n                $\"Filename: \\\\\\\\?\\\\{FileContext.FileName}\\r\\nLine number: {line}\\r\\nError: Cannot add duplicate collection entry of type '{element.ElementTagName}' with combined key attributes '{StringExtensions.Combine(keyNames, \", \")}' respectively set to '{StringExtensions.Combine(values.Select(value => value.ToString()), \", \")}'\\r\\n\\r\\n\");\n        }\n\n        public void Clear()\n        {\n            FileContext.SetDirty();\n            foreach (T element in Exposed)\n            {\n                if (element.IsLocallyStored)\n                {\n                    element.Delete();\n                }\n            }\n\n            Exposed.Clear();\n            Real.Clear();\n            if (HasParent && AllowsClear)\n            {\n                var clear1 = CreateElement(Schema.CollectionSchema.ClearElementName);\n                Real.Add(clear1);\n                clear1.ForceCreateEntity();\n                clear1.AppendToParentElement(clear1.Entity, true);\n            }\n            else\n            {\n                CleanEntity();\n            }\n        }\n\n        public T CreateElement()\n        {\n            return CreateElement(Schema.CollectionSchema?.AddSchemas[0].Name);\n        }\n\n        public T CreateElement(string elementTagName)\n        {\n            return CreateNewElement(elementTagName);\n        }\n\n        public int IndexOf(T element)\n        {\n            return Exposed.IndexOf(element);\n        }\n\n        public void Remove(T element)\n        {\n            if (FileContext.ReadOnly)\n            {\n                throw new FileLoadException(\n                    $\"Filename: \\\\\\\\?\\\\{FileContext.FileName}\\r\\nError: This configuration section cannot be modified because it has been opened for read only access\\r\\n\\r\\n\");\n            }\n\n            var addSchema =\n                Schema.CollectionSchema.AddSchemas.FirstOrDefault(item => item.Name == element.ElementTagName);\n            if (addSchema == null)\n            {\n                throw new InvalidOperationException();\n            }\n\n            foreach (var item in Exposed.ToList())\n            {\n                var notMatched = false;\n                foreach (ConfigurationAttributeSchema child in addSchema.AttributeSchemas)\n                {\n                    if (item[child.Name] != element[child.Name])\n                    {\n                        notMatched = true;\n                        break;\n                    }\n                }\n\n                if (notMatched)\n                {\n                    continue;\n                }\n\n                if (item.IsLocked == \"true\")\n                {\n                    throw new FileLoadException(\"Filename: \\r\\nError: Lock violation\\r\\n\\r\\n\");\n                }\n\n                Exposed.Remove(item);\n            }\n\n            if (element.IsLocallyStored)\n            {\n                Real.Remove(element);\n                element.Delete();\n                if (Real.Count == 0)\n                {\n                    CleanEntity();\n                }\n            }\n            else\n            {\n                var removal = CreateElement(Schema.CollectionSchema.RemoveElementName);\n                Real.Insert(0, removal);\n                removal.ForceCreateEntity();\n                removal.AppendToParentElement(removal.Entity, true);\n\n                foreach (ConfigurationAttributeSchema child in addSchema.AttributeSchemas)\n                {\n                    if (child.IsUniqueKey || child.IsCombinedKey)\n                    {\n                        removal[child.Name] = element[child.Name];\n                    }\n                }\n            }\n        }\n\n        public void RemoveAt(int index)\n        {\n            if (index < 0 || index >= Exposed.Count)\n            {\n                throw new ArgumentOutOfRangeException(nameof(index));\n            }\n\n            var item = Exposed[index];\n            Remove(item);\n        }\n\n        public bool AllowsAdd { get; protected set; }\n\n        public bool AllowsClear { get; protected set; }\n\n        public bool AllowsRemove { get; protected set; }\n\n        public T this[int index]\n        {\n            get { return Exposed[index]; }\n        }\n\n        internal void Clone(ConfigurationElement item, ConfigurationElement newItem)\n        {\n            newItem.SkipCheck = true;\n            foreach (ConfigurationAttribute attribute in item.Attributes)\n            {\n                newItem[attribute.Name] = item[attribute.Name];\n            }\n\n            foreach (ConfigurationElement child in item.ChildElements)\n            {\n                var newChild = newItem.ChildElements[child.ElementTagName];\n                Clone(child, newChild);\n            }\n\n            if (item is ConfigurationElementCollection collection)\n            {\n                foreach (ConfigurationElement element in collection)\n                {\n                    var newElement = ((ConfigurationElementCollection)newItem).CreateNewElement(element.ElementTagName);\n                    Clone(element, newElement);\n                    newItem.AddChild(newElement);\n                }\n            }\n\n            newItem.IsLocked = item.IsLocked;\n            newItem.SkipCheck = false;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationElementSchema.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Diagnostics;\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    [DebuggerDisplay(\"{Name}[{Path}]\")]\n    public sealed class ConfigurationElementSchema\n    {\n        internal ConfigurationElementSchema(string fileName)\n        {\n            FileName = fileName;\n            AttributeSchemas = new ConfigurationAttributeSchemaCollection();\n            ChildElementSchemas = new ConfigurationElementSchemaCollection();\n        }\n\n        public object GetMetadata(string metadataType)\n        {\n            return null;\n        }\n\n        public bool AllowUnrecognizedAttributes { get; internal set; }\n        public ConfigurationAttributeSchemaCollection AttributeSchemas { get; internal set; }\n        public ConfigurationElementSchemaCollection ChildElementSchemas { get; internal set; }\n        public ConfigurationCollectionSchema CollectionSchema { get; internal set; }\n        public bool IsCollectionDefault { get; internal set; }\n        public string Name { get; internal set; }\n        internal string Path { get; set; }\n        internal string FileName { get; }\n\n        internal ConfigurationElementSchema FindSchema(string path)\n        {\n            var index = path.IndexOf(Path, StringComparison.Ordinal);\n            if (index != 0)\n            {\n                return null;\n            }\n\n            if (Path.Length != 0)\n            {\n                if (path.Length != Path.Length && path[Path.Length] != '/')\n                {\n                    return null;\n                }\n            }\n\n            if (path == Path)\n            {\n                return this;\n            }\n\n            foreach (ConfigurationElementSchema child in ChildElementSchemas)\n            {\n                var result = child.FindSchema(path);\n                if (result != null)\n                {\n                    return result;\n                }\n            }\n\n            return CollectionSchema?.FindSchema(path);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationElementSchemaCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationElementSchemaCollection : IEnumerable<ConfigurationElementSchema>,\n    ICollection, IEnumerable\n    {\n        private readonly List<ConfigurationElementSchema> _list = new List<ConfigurationElementSchema>();\n\n        internal ConfigurationElementSchemaCollection()\n        { }\n\n        public void Add(ConfigurationElementSchema item)\n        {\n            _list.Add(item);\n        }\n\n        public void CopyTo(Array array, int index)\n        {\n            _list.CopyTo((ConfigurationElementSchema[])array, index);\n        }\n\n        public int Count\n        {\n            get { return _list.Count; }\n        }\n\n        public bool IsSynchronized\n        {\n            get { return false; }\n        }\n\n        public object SyncRoot\n        {\n            get { return _list; }\n        }\n\n        public IEnumerator GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        IEnumerator<ConfigurationElementSchema> IEnumerable<ConfigurationElementSchema>.GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        public ConfigurationElementSchema this[int index]\n        {\n            get { return _list[index]; }\n        }\n\n        public ConfigurationElementSchema this[string name]\n        {\n            get { return _list.FirstOrDefault(item => item.Name == name); }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationEnumValue.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationEnumValue\n    {\n        internal ConfigurationEnumValue()\n        { }\n\n        public string Name { get; internal set; }\n        public long Value { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationEnumValueCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationEnumValueCollection : ICollection,\n        IEnumerable<ConfigurationEnumValue>\n    {\n        private readonly List<ConfigurationEnumValue> _list = new List<ConfigurationEnumValue>();\n\n        private string _result;\n\n        internal ConfigurationEnumValueCollection()\n        { }\n\n        internal void Add(ConfigurationEnumValue item)\n        {\n            _list.Add(item);\n        }\n\n        public void CopyTo(Array array, int index)\n        {\n            throw new NotImplementedException();\n        }\n\n        public int Count\n        {\n            get { return _list.Count; }\n        }\n\n        public bool IsSynchronized\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public object SyncRoot { get; } = new object();\n\n        public IEnumerator GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        IEnumerator<ConfigurationEnumValue> IEnumerable<ConfigurationEnumValue>.GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        public string GetName(long value)\n        {\n            return _list.FirstOrDefault(item => item.Value == value)?.Name;\n        }\n\n        public ConfigurationEnumValue this[int index]\n        {\n            get { return _list[index]; }\n        }\n\n        public ConfigurationEnumValue this[string name]\n        {\n            get { return _list.FirstOrDefault(item => item.Name == name); }\n        }\n\n        internal string FormattedString\n        {\n            get\n            {\n                if (_result != null)\n                {\n                    return _result;\n                }\n\n                return _result = StringExtensions.Combine(_list.Select(item => item.Name), \", \");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationLockCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n//\tChris Toshok (toshok@ximian.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n// Copyright (C) 2005 Novell, Inc (http://www.novell.com)\n//\n\n//#if NET_2_0\n\nusing System;\nusing System.Collections;\n\nnamespace Microsoft.Web.Administration\n{\n    [Flags]\n    internal enum ConfigurationLockType\n    {\n        Attribute = 0x01,\n        Element = 0x02,\n        Exclude = 0x10\n    }\n\n    public sealed class ConfigurationLockCollection : ICollection\n    {\n        private ArrayList _names;\n        private ConfigurationElement _element;\n        private ConfigurationLockType _lockType;\n        private bool _is_modified;\n        private Hashtable _valid_name_hash;\n        private string _valid_names;\n\n        internal ConfigurationLockCollection(ConfigurationElement element,\n                              ConfigurationLockType lockType)\n        {\n            _names = new ArrayList();\n            _element = element;\n            _lockType = lockType;\n        }\n\n        private void CheckName(string name)\n        {\n            bool isAttribute = (_lockType & ConfigurationLockType.Attribute) == ConfigurationLockType.Attribute;\n\n            if (_valid_name_hash == null)\n            {\n                _valid_name_hash = new Hashtable();\n                foreach (ConfigurationAttributeSchema prop in _element.Schema.AttributeSchemas)\n                {\n                    _valid_name_hash.Add(prop.Name, true);\n                }\n\n                /* add the add/remove/clear names of the\n                 * default collection if there is one */\n                if (!isAttribute)\n                {\n                    ConfigurationElementCollection c = _element.GetCollection();\n                    foreach (var addName in _element.Schema.CollectionSchema.AddElementNames.Split(','))\n                    {\n                        _valid_name_hash.Add(addName, true);\n                    }\n\n                    _valid_name_hash.Add(c.Schema.CollectionSchema.ClearElementName, true);\n                    _valid_name_hash.Add(c.Schema.CollectionSchema.RemoveElementName, true);\n                }\n\n                string[] valid_name_array = new string[_valid_name_hash.Keys.Count];\n                _valid_name_hash.Keys.CopyTo(valid_name_array, 0);\n\n                _valid_names = String.Join(\",\", valid_name_array);\n            }\n\n            if (_valid_name_hash[name] == null)\n                throw new ArgumentException($\"lockAttributes contains unknown attribute '{name}'\");\n        }\n\n        public void Add(string name)\n        {\n            CheckName(name);\n            if (!_names.Contains(name))\n            {\n                _names.Add(name);\n                _is_modified = true;\n            }\n        }\n\n        public void Clear()\n        {\n            _names.Clear();\n            _is_modified = true;\n        }\n\n        public bool Contains(string name)\n        {\n            return _names.Contains(name);\n        }\n\n        public void CopyTo(string[] array, int index)\n        {\n            _names.CopyTo(array, index);\n        }\n\n        public IEnumerator GetEnumerator()\n        {\n            return _names.GetEnumerator();\n        }\n\n        //[MonoInternalNote (\"we can't possibly *always* return false here...\")]\n        public bool IsReadOnly(string name)\n        {\n            for (int i = 0; i < _names.Count; i++)\n            {\n                if ((string)_names[i] == name)\n                {\n                    /* this test used to switch off whether the collection was 'Exclude' or not\n                     * (the LockAll*Except collections), but that doesn't seem to be the crux of\n                     * it.  maybe this returns true if the element/attribute is locked in a parent\n                     * element's lock collections? */\n                    return false;\n                }\n            }\n\n            throw new ServerManagerException(String.Format(\"The entry '{0}' is not in the collection.\", name));\n        }\n\n        public void Remove(string name)\n        {\n            _names.Remove(name);\n            _is_modified = true;\n        }\n\n        public void SetFromList(string attributeList)\n        {\n            Clear();\n\n            if (attributeList == \"*\")\n            {\n                foreach (ConfigurationAttributeSchema attribute in _element.Schema.AttributeSchemas)\n                {\n                    Add(attribute.Name);\n                }\n\n                return;\n            }\n\n            char[] split = { ',' };\n            string[] attrs = attributeList.Split(split, StringSplitOptions.RemoveEmptyEntries);\n            foreach (string a in attrs)\n            {\n                Add(a.Trim());\n            }\n        }\n\n        void ICollection.CopyTo(Array array, int index)\n        {\n            _names.CopyTo(array, index);\n        }\n\n        public string AttributeList\n        {\n            get\n            {\n                string[] name_arr = new string[_names.Count];\n                _names.CopyTo(name_arr, 0);\n                return string.Join(\",\", name_arr);\n            }\n        }\n\n        public int Count\n        {\n            get { return _names.Count; }\n        }\n\n        //[MonoTODO]\n        public bool HasParentElements\n        {\n            get { return false; /* XXX */ }\n        }\n\n        //[MonoTODO]\n        public bool IsModified\n        {\n            get { return _is_modified; }\n            internal set { _is_modified = value; }\n        }\n\n        //[MonoTODO]\n        public bool IsSynchronized\n        {\n            get { return false; /* XXX */ }\n        }\n\n        //[MonoTODO]\n        public object SyncRoot\n        {\n            get { return this; /* XXX */ }\n        }\n    }\n}\n\n//#endif\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationMethod.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationMethod\n    {\n        internal ConfigurationMethod()\n        { }\n\n        public ConfigurationMethodInstance CreateInstance()\n        {\n            return null;\n        }\n        public string Name { get; private set; }\n        public ConfigurationMethodSchema Schema { get; private set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationMethodCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationMethodCollection : ICollection,\n        IEnumerable<ConfigurationMethod>, IEnumerable\n    {\n        internal ConfigurationMethodCollection()\n        { }\n\n        public IEnumerator GetEnumerator()\n        {\n            throw new NotImplementedException();\n        }\n\n        IEnumerator<ConfigurationMethod> IEnumerable<ConfigurationMethod>.GetEnumerator()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void CopyTo(Array array, int index)\n        {\n            throw new NotImplementedException();\n        }\n\n        public int Count\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public bool IsSynchronized\n        {\n            get { throw new NotImplementedException(); }\n        }\n\n        public object SyncRoot { get; } = new object();\n\n        public ConfigurationMethod this[int index]\n        {\n            get { return null; }\n        }\n\n        public ConfigurationMethod this[string methodName]\n        {\n            get { return null; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationMethodInstance.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationMethodInstance\n    {\n        internal ConfigurationMethodInstance()\n        { }\n\n        public void Execute()\n        { }\n\n        public object GetMetadata(string metadataType)\n        {\n            return null;\n        }\n\n        public void SetMetadata(string metadataType, object value)\n        {\n        }\n\n        public ConfigurationElement Input { get; private set; }\n        public ConfigurationElement Output { get; private set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationMethodSchema.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ConfigurationMethodSchema\n    {\n        internal ConfigurationMethodSchema()\n        { }\n\n        public ConfigurationElementSchema InputSchema { get; private set; }\n        public string Name { get; private set; }\n        public ConfigurationElementSchema OutputSchema { get; private set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationSection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Diagnostics;\nusing System.Xml.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    [DebuggerDisplay(\"{ElementTagName}[{Location}]\")]\n    public class ConfigurationSection : ConfigurationElement\n    {\n        private ConfigurationElementCollection _root;\n\n        internal ConfigurationSection(string path, ConfigurationElementSchema schema, string location, FileContext core, XElement entity)\n            : base(null, path, schema, null, entity, core, null, true, location)\n        {\n        }\n\n        public void RevertToParent()\n        {\n            throw new NotImplementedException();\n        }\n\n        internal override XElement CreateEntity()\n        {\n            return this.FileContext.CreateElement(SectionPath, Location);\n        }\n\n        public new bool IsLocked { get; internal set; }\n\n        public OverrideMode OverrideMode { get; set; }\n\n        public OverrideMode OverrideModeEffective { get; internal set; }\n\n        public string SectionPath\n        {\n            get { return ElementTagName; }\n        }\n\n        internal ConfigurationElementCollection Root\n        {\n            get { return _root ?? (_root = new ConfigurationElementCollection(SectionPath, Schema, null, this.InnerEntity, this.FileContext) { Section = this }); }\n        }\n\n        internal string Location { get; set; }\n\n        internal override void AddChild(ConfigurationElement child)\n        {\n            if (Schema?.CollectionSchema == null)\n            {\n                base.AddChild(child);\n            }\n            else if (Schema.CollectionSchema.ContainsAddElement(child.ElementTagName))\n            {\n                Root.AddChild(child);\n            }\n            else if (child.ElementTagName == Schema.CollectionSchema.ClearElementName)\n            {\n                // TODO: test this\n                Root.AddChild(child);\n            }\n            else if (child.ElementTagName == Schema.CollectionSchema.RemoveElementName)\n            {\n                // TODO: test this\n                Root.AddChild(child);\n            }\n            else\n            {\n                base.AddChild(child);\n            }\n        }\n\n        internal override ConfigurationElement GetElementByPath(string path)\n        {\n            return Schema?.CollectionSchema == null ? base.GetElementByPath(path) : Root.GetElementByPath(path);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ConfigurationValidatorBase.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n//\tLluis Sanchez Gual (lluis@novell.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n// Copyright (C) 2005 Novell, Inc (http://www.novell.com)\n//\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public abstract class ConfigurationValidatorBase\n    {\n        protected ConfigurationValidatorBase()\n        {\n        }\n\n        public virtual bool CanValidate(Type type)\n        {\n            return false;\n        }\n\n        public abstract void Validate(object value);\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Constants.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class Constants\n    {\n        public const string DefaultDocumentList = \"index.aspx,Index.aspx,default.aspx,Default.aspx,index.htm,Index.htm,default.htm,Default.htm,index.html,Index.html,default.html,Default.html,index.php,Index.php,default.php,Default.php,index.cgi,Index.cgi,default.cgi,Default.cgi\";\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/CustomLogField.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class CustomLogField : ConfigurationElement\n    {\n        public CustomLogField()\n            : this(null, null)\n        { }\n\n        internal CustomLogField(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"add\", null, parent, null, null)\n        {\n        }\n\n        public string LogFieldName\n        {\n            get { return (string)this[\"logFieldName\"]; }\n            set { this[\"logFieldName\"] = value; }\n        }\n\n        public string SourceName\n        {\n            get { return (string)this[\"sourceName\"]; }\n            set { this[\"sourceName\"] = value; }\n        }\n\n        public CustomLogFieldSourceType SourceType\n        {\n            get { return (CustomLogFieldSourceType)Enum.ToObject(typeof(CustomLogFieldSourceType), this[\"sourceType\"]); }\n            set { this[\"sourceType\"] = (long)value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/CustomLogFieldCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class CustomLogFieldCollection : ConfigurationElementCollectionBase<CustomLogField>\n    {\n        public CustomLogFieldCollection(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, null, null, parent, null, null)\n        {\n            if (element != null)\n            {\n                foreach (ConfigurationElement node in (ConfigurationElementCollection)element)\n                {\n                    InternalAdd(new CustomLogField(node, this));\n                }\n            }\n        }\n\n        public CustomLogField Add(string logFieldName, string sourceName, CustomLogFieldSourceType sourceType)\n        {\n            var result = CreateNewElement(null);\n            result.LogFieldName = logFieldName;\n            result.SourceName = sourceName;\n            result.SourceType = sourceType;\n            Add(result);\n            return result;\n        }\n\n        protected override CustomLogField CreateNewElement(string elementTagName)\n        {\n            return new CustomLogField(null, this);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/CustomLogFieldSourceType.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public enum CustomLogFieldSourceType\n    {\n        RequestHeader = 0,\n        ResponseHeader = 1,\n        ServerVariable = 2\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/DefaultValidator.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n//\tChris Toshok (toshok@ximian.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n// Copyright (C) 2004 Novell, Inc (http://www.novell.com)\n//\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class DefaultValidator : ConfigurationValidatorBase\n    {\n        public DefaultValidator()\n        {\n        }\n\n        public override bool CanValidate(Type type)\n        {\n            return true;\n        }\n\n        public override void Validate(object value)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/FileContext.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.IO;\nusing System.Xml;\nusing System.Xml.Linq;\nusing Microsoft.Extensions.Logging;\nusing JexusManager;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing System.Linq;\nusing System.Xml.XPath;\nusing System.Diagnostics;\n\nnamespace Microsoft.Web.Administration\n{\n    internal sealed class FileContext : IEquatable<FileContext>\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"FileContext\");\n\n        private readonly ServerManager _server;\n        private readonly object _locker = new object();\n        private readonly bool _doNotThrow;\n        internal List<SectionDefinition> DefinitionCache = new List<SectionDefinition>();\n\n        internal bool AppHost { get; }\n        public bool ReadOnly { get; }\n        internal bool IgnoreSchemaCheck { get; set; }\n\n        private ProtectedConfiguration _protectedConfiguration;\n\n        internal FileContext(ServerManager server, string fileName, FileContext parent, string location, bool appHost, bool doNotThrow, bool readOnly, int lineNumber = 0)\n        {\n            _server = server;\n            _doNotThrow = doNotThrow;\n            AppHost = appHost;\n            ReadOnly = readOnly;\n            Locations = new List<Location>();\n            FileName = fileName;\n            Location = location;\n            Parent = parent;\n            _lineNumber = lineNumber;\n        }\n\n        private void Initialize()\n        {\n            Parent?.Initialize();\n            if (_initialized)\n            {\n                return;\n            }\n\n            _initialized = true;\n            if (Parent != null)\n            {\n                foreach (var item in Parent.DefinitionCache)\n                {\n                    DefinitionCache.Add(item);\n                }\n            }\n\n            LoadSchemas();\n            _rootSectionGroup = new SectionGroup(this);\n            if (FileName == null)\n            {\n                // TODO: merge with the other exception later.\n                throw new FileNotFoundException(\n                    $\"Filename: \\\\\\\\?\\\\{_server.FileName}\\r\\nLine number: {_lineNumber}\\r\\nError: Unrecognized configuration path 'MACHINE/WEBROOT/APPHOST/{Location}'\\r\\n\\r\\n\");\n            }\n\n            var file = FileName.ExpandIisExpressEnvironmentVariables(null);\n            if (!File.Exists(file))\n            {\n                if (AppHost)\n                {\n                    _initialized = false;\n                    throw new FileNotFoundException(\n                        $\"Filename: \\\\\\\\?\\\\{FileName}\\r\\nError: Cannot read configuration file\\r\\n\\r\\n\",\n                        FileName);\n                }\n\n                var folder = Path.GetDirectoryName(file);\n                if (!Directory.Exists(folder))\n                {\n                    throw new DirectoryNotFoundException($\"Filename: \\\\\\\\?\\\\{file}\\r\\nError: Cannot read configuration file\\r\\n\\r\\n\");\n                }\n\n                return;\n            }\n\n            try\n            {\n                LoadDocument(file, Location);\n            }\n            catch (XmlException ex)\n            {\n                _initialized = false;\n                throw new COMException(\n                    $\"Filename: \\\\\\\\?\\\\{file}\\r\\nLine number: {(ex.LineNumber == 0 ? 1 : ex.LineNumber)}\\r\\nError: Configuration file is not well-formed XML\\r\\n\\r\\n\", ex);\n            }\n            catch (COMException ex)\n            {\n                _initialized = false;\n                var exception = new COMException($\"Filename: \\\\\\\\?\\\\{file}\\r\\n{ex.Message}\\r\\n\", ex);\n                foreach (object key in ex.Data.Keys)\n                {\n                    exception.Data.Add(key, ex.Data[key]);\n                }\n\n                throw exception;\n            }\n        }\n\n        private void LoadSchemas()\n        {\n            _sectionSchemas.Clear();\n            if (Parent == null)\n            {\n                LoadSchemasFromMode();\n            }\n            else\n            {\n                foreach (var item in Parent._sectionSchemas)\n                {\n                    _sectionSchemas.Add(item.Key, item.Value);\n                }\n            }\n        }\n\n        public void Save()\n        {\n            if (!_initialized || !_dirty)\n            {\n                return;\n            }\n\n            lock (_locker)\n            {\n                try\n                {\n                    if (AppHost)\n                    {\n                        // TODO: load settings from applicationHost.config.\n                        var historyFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), \"Jexus Manager\",\n                            \"history\");\n                        int last = 0;\n                        if (!Directory.Exists(historyFolder))\n                        {\n                            Directory.CreateDirectory(historyFolder);\n                        }\n                        else\n                        {\n                            var existing = new DirectoryInfo(historyFolder).GetDirectories();\n                            last =\n                                existing.Select(found => found.Name.Substring(\"CFGHISTORY_\".Length))\n                                    .Select(int.Parse)\n                                    .Concat(new[] { last })\n                                    .Max();\n                        }\n\n                        last++;\n                        var revisionFolder = Path.Combine(historyFolder, \"CFGHISTORY_\" + last.ToString(\"D10\"));\n                        if (!Directory.Exists(revisionFolder))\n                        {\n                            Directory.CreateDirectory(revisionFolder);\n                        }\n\n                        var fileName = Path.GetFileName(FileName);\n                        if (fileName != null)\n                        {\n                            File.Copy(FileName, Path.Combine(revisionFolder, fileName));\n                        }\n                    }\n\n                    if (_document != null)\n                    {\n                        using var stream = File.Open(FileName, FileMode.Create, FileAccess.Write, FileShare.None);\n                        _document.Save(stream);\n                    }\n                }\n                catch (Exception ex)\n                {\n                    _logger.LogError(ex, \"Error saving file {FileName}\", FileName);\n                }\n            }\n        }\n\n        public string FileName { get; set; }\n\n        public FileContext Parent { get; }\n        public string Location { get; }\n\n        internal List<ConfigurationSection> ConfigurationSections { get; } = new List<ConfigurationSection>();\n\n        private SectionGroup _effective;\n\n        public SectionGroup GetEffectiveSectionGroup()\n        {\n            if (_effective != null)\n            {\n                return _effective;\n            }\n\n            _effective = new SectionGroup(this);\n            FileContext core = this;\n            while (core != null)\n            {\n                SectionGroup root = core.RootSectionGroup;\n                foreach (SectionGroup item in root.SectionGroups)\n                {\n                    _effective.SectionGroups.Add(item);\n                }\n\n                foreach (SectionDefinition item in root.Sections)\n                {\n                    _effective.Sections.Add(item);\n                }\n\n                core = core.Parent;\n            }\n\n            return _effective;\n        }\n\n        public string[] GetLocationPaths()\n        {\n            Initialize();\n            return Locations.Select(item => item.Path).ToArray();\n        }\n\n        public object GetMetadata(string metadataType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public ConfigurationSection GetSection(string sectionPath)\n        {\n            return GetSection(sectionPath, Location);\n        }\n\n        public ConfigurationSection GetSection(string sectionPath, string locationPath)\n        {\n            Initialize();\n            if (!_doNotThrow)\n            {\n                _server.VerifyLocation(locationPath);\n            }\n\n            return FindSection(sectionPath, locationPath, this);\n        }\n\n        public ConfigurationSection GetSection(string sectionPath, Type type)\n        {\n            throw new NotImplementedException();\n        }\n\n        public ConfigurationSection GetSection(string sectionPath, Type type, string locationPath)\n        {\n            throw new NotImplementedException();\n        }\n\n        public void RemoveLocationPath(string locationPath)\n        {\n            Initialize();\n            var location = Locations.FirstOrDefault(item => item.Path == locationPath);\n            if (location != null)\n            {\n                Locations.Remove(location);\n            }\n        }\n\n        public void RenameLocationPath(string locationPath, string newLocationPath)\n        {\n            Initialize();\n            var location = Locations.FirstOrDefault(item => item.Path == locationPath);\n            if (location != null)\n            {\n                location.Path = newLocationPath;\n            }\n        }\n\n        public void SetMetadata(string metadataType, object value)\n        {\n            throw new NotImplementedException();\n        }\n\n        public SectionGroup RootSectionGroup\n        {\n            get\n            {\n                Initialize();\n                return _rootSectionGroup;\n            }\n            set\n            {\n                _rootSectionGroup = value;\n            }\n        }\n\n        private List<Location> Locations { get; }\n\n        private readonly Dictionary<string, SectionSchema> _sectionSchemas = new Dictionary<string, SectionSchema>();\n        private XDocument _document;\n\n        private bool _initialized;\n\n        private SectionGroup _rootSectionGroup;\n\n        private bool _dirty;\n        private readonly int _lineNumber;\n\n        private XElement Root => _document?.Root;\n\n        public ProtectedConfiguration ProtectedConfiguration\n        {\n            get\n            {\n                Initialize();\n                return _protectedConfiguration\n                       ?? (_protectedConfiguration =\n                           new ProtectedConfiguration(GetSection(\"configProtectedData\")));\n            }\n        }\n\n        private ConfigurationElementSchema FindSchema(string path)\n        {\n            return _sectionSchemas.Values.Select(section => section.Root.FindSchema(path)).FirstOrDefault(result => result != null);\n        }\n\n        private SectionSchema FindSectionSchema(string path)\n        {\n            _sectionSchemas.TryGetValue(path, out SectionSchema result);\n            return result;\n        }\n\n        private void LoadSchemasFromMode()\n        {\n            foreach (var file in _server.GetSchemaFiles())\n            {\n                var schemaDoc = XDocument.Load(file);\n                LoadSchema(schemaDoc, file);\n            }\n\n            // IMPORTANT: insert schema for configBuilders.\n            var doc = XDocument.Parse(\"\"\"\n            <configSchema>\n              <sectionSchema name=\"configBuilders\">\n                <element name=\"builders\">\n                  <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                    <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                    <attribute name=\"type\" required=\"true\" type=\"string\" />\n                    <attribute name=\"prefix\" type=\"string\" />\n                    <attribute name=\"mode\" type=\"string\" defaultValue=\"Strict\" />\n                    <attribute name=\"stripPrefix\" type=\"bool\" />\n                    <attribute name=\"tokenPattern\" type=\"string\" />\n                  </collection>\n                </element>\n              </sectionSchema>\n            </configSchema>\n            \"\"\");\n            LoadSchema(doc, string.Empty);\n        }\n\n        private void LoadSchema(XDocument document, string fileName)\n        {\n            if (document.Root == null)\n            {\n                return;\n            }\n\n            var nodes = document.Root.Nodes();\n            foreach (var node in nodes)\n            {\n                if (node is XComment)\n                {\n                    continue;\n                }\n\n                if (!(node is XElement element))\n                {\n                    continue;\n                }\n\n                if (element.Name.LocalName != \"sectionSchema\")\n                {\n                    continue;\n                }\n\n                var name = element.Attribute(\"name\")?.Value;\n                var found = FindSectionSchema(name);\n                if (found == null)\n                {\n                    found = new SectionSchema(name, element, fileName);\n                    System.Diagnostics.Debug.Assert(name != null, nameof(name) + \" != null\");\n                    _sectionSchemas.Add(name, found);\n                }\n\n                found.ParseSectionSchema(element, null, fileName);\n            }\n        }\n\n        private bool ParseSections(XElement element, ConfigurationElement parent, Location location)\n        {\n            var result = false;\n            var path = element.GetPath();\n            ConfigurationElement node = null;\n            var schema = FindSchema(path);\n            var sec = FindSectionSchema(path);\n            var name = element.Name.LocalName;\n            if (schema != null)\n            {\n                if (sec != null)\n                {\n                    var section = new ConfigurationSection(path, sec.Root, location?.Path, this, element);\n                    Add(section, location, this);\n                    node = section;\n                }\n                else\n                {\n                    node = schema.CollectionSchema == null\n                               ? new ConfigurationElement(null, name, schema, parent, element, this)\n                               : new ConfigurationElementCollection(\n                                     name,\n                                     schema,\n                                     parent,\n                                     element,\n                                     this);\n                }\n\n                parent?.AddChild(node);\n                result = true;\n            }\n            else\n            {\n                var found = DefinitionCache.FirstOrDefault(item => item.Path == path);\n                if (found != null)\n                {\n                    if (found.Ignore)\n                    {\n                        if (path == \"runtime\")\n                        {\n                            // examples: <runtime> in machine.config.\n                            return true;\n                        }\n                        else\n                        {\n                            if (!element.HasElements)\n                            {\n                                // like empty tag in web.config.\n                                return true;\n                            }\n                        }\n                    }\n                    else\n                    {\n                        // log4net\n                        return true;\n                    }\n                }\n                else\n                {\n                    // TODO: improve performance.\n                    var foundChild = DefinitionCache.FirstOrDefault(item => item.Path.StartsWith(path + '/'));\n                    if (foundChild != null && !element.HasElements)\n                    {\n                        return true;\n                    }\n                }\n            }\n\n            foreach (var item in element.Nodes())\n            {\n                if (!(item is XElement child))\n                {\n                    continue;\n                }\n\n                var childAdded = ParseSections(child, node, location);\n                result = result || childAdded;\n            }\n\n            if (!result && !_doNotThrow && name != \"location\")\n            {\n                string link = null;\n                string oob = null;\n                if (path.StartsWith(\"system.webServer/aspNetCore/\"))\n                {\n                    oob = \"ASP.NET Core Module (system.webServer/aspNetCore/)\";\n                    link = \"https://docs.microsoft.com/aspnet/core/publishing/iis?tabs=aspnetcore2x#install-the-net-core-windows-server-hosting-bundle\";\n                }\n                else if (path.StartsWith(\"system.webServer/rewrite/\"))\n                {\n                    oob = \"URL Rewrite Module (system.webServer/rewrite/)\";\n                    link = \"https://docs.microsoft.com/iis/extensions/url-rewrite-module/using-the-url-rewrite-module#where-to-get-the-url-rewrite-module\";\n                }\n                else if (path.StartsWith(\"system.webServer/webFarms/\"))\n                {\n                    oob = \"Application Request Routing Module (system.webServer/webFarms/)\";\n                    link = \"https://docs.microsoft.com/iis/extensions/configuring-application-request-routing-arr/define-and-configure-an-application-request-routing-server-farm#prerequisites\";\n                }\n                else if (path.StartsWith(\"system.webServer/httpPlatform/\"))\n                {\n                    oob = \"HttpPlatformHandler Module (system.webServer/httpPlatform/)\";\n                    link = \"https://docs.microsoft.com/iis/extensions/httpplatformhandler/httpplatformhandler-configuration-reference\";\n                }\n\n                var exception = new COMException(\n                    $\"Line number: {(element as IXmlLineInfo).LineNumber}\\r\\nError: Unrecognized element '{name}'\\r\\n\");\n                if (oob != null)\n                {\n                    exception.Data.Add(\"oob\", oob);\n                    exception.Data.Add(\"link\", link);\n                }\n\n                throw exception;\n            }\n\n            return result;\n        }\n\n        private void LoadDocument(string file, string location)\n        {\n            using (var stream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))\n            {\n                _document = XDocument.Load(stream, LoadOptions.SetLineInfo);\n            }\n\n            if (Root == null)\n            {\n                return;\n            }\n\n            var nodes = Root.Nodes();\n            XElement first = null;\n            foreach (var node in nodes)\n            {\n                if (node is XComment)\n                {\n                    continue;\n                }\n\n                if (node is XElement element)\n                {\n                    first = first ?? element;\n                    var tag = element.Name.LocalName;\n                    if (tag == \"configSections\")\n                    {\n                        if (first != element)\n                        {\n                            // IMPORTANT: double spaces before It to match IIS.\n                            throw new COMException($\"Line number: {(element as IXmlLineInfo).LineNumber}\\r\\nError: Only one <configSections> element allowed.  It must be the first child element of the root <configuration> element   \\r\\n\");\n                        }\n\n                        RootSectionGroup.ParseSectionDefinitions(element, _sectionSchemas);\n                        if (Parent == null)\n                        {\n                            // machine.config\n                            RootSectionGroup.AddSpecial();\n                        }\n\n                        // TODO: can we use _sectionSchemas.\n                        RootSectionGroup.GetAllDefinitions(DefinitionCache);\n                        continue;\n                    }\n\n                    if (tag == \"location\")\n                    {\n                        // IMPORTANT: allow null path due to root web.config.\n                        var path = element.Attribute(\"path\")?.Value;\n                        if (path == \".\")\n                        {\n                            path = location;\n                        }\n\n                        var mode = element.Attribute(\"overrideMode\").LoadString(\"Inherit\");\n                        var found = Locations.FirstOrDefault(item => item.Path == path);\n                        if (found == null)\n                        {\n                            found = new Location(path, mode, element, true);\n                            Locations.Add(found);\n                        }\n\n                        ParseSections(element, null, found);\n                        continue;\n                    }\n\n                    if (location == null)\n                    {\n                        ParseSections(element, null, null);\n                    }\n                    else\n                    {\n                        var found = Locations.FirstOrDefault(item => item.Path == location);\n                        if (found == null)\n                        {\n                            found = new Location(location, \"Inherit\", element);\n                            Locations.Add(found);\n                        }\n\n                        ParseSections(element, null, found);\n                    }\n                }\n            }\n        }\n\n        internal XElement CreateElement(string sectionPath, string locationPath)\n        {\n            var parts = sectionPath.Split('/');\n            var top = EnsureDocumentExists();\n            if (locationPath != null && locationPath != Location)\n            {\n                var elements = Root.XPathSelectElements($\"//location[@path='{locationPath}']\").ToList();\n                if (!elements.Any())\n                {\n                    var location = new XElement(\"location\",\n                        new XAttribute(\"path\", locationPath));\n                    top.Add(location);\n                    top = location;\n                }\n                else\n                {\n                    top = elements.First();\n                }\n            }\n\n            foreach (var part in parts)\n            {\n                var current = top.Element(part);\n                if (current == null)\n                {\n                    current = new XElement(part);\n                    top.Add(current);\n                }\n\n                top = current;\n            }\n\n            return top;\n        }\n\n        private XElement EnsureDocumentExists()\n        {\n            if (Root != null)\n            {\n                return Root;\n            }\n\n            var file = FileName.ExpandIisExpressEnvironmentVariables(null);\n            var directory = Path.GetDirectoryName(file);\n            if (!Directory.Exists(directory))\n            {\n                Debug.Assert(directory != null, nameof(directory) + \" != null\");\n                Directory.CreateDirectory(directory);\n            }\n\n            File.WriteAllText(file, @\"<?xml version=\"\"1.0\"\" encoding=\"\"utf-8\"\"?><configuration></configuration>\");\n            using (var stream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))\n            {\n                _document = XDocument.Load(stream, LoadOptions.SetLineInfo);\n            }\n\n            return Root;\n        }\n\n        public bool Equals(FileContext other)\n        {\n            return other != null && other.FileName == FileName;\n        }\n\n        internal void SetDirty()\n        {\n            if (!_initialized)\n            {\n                return;\n            }\n\n            if (!_server.Initialized)\n            {\n                return;\n            }\n\n            if (ReadOnly)\n            {\n                throw new InvalidOperationException(\"The configuration object is read only, because it has been committed by a call to ServerManager.CommitChanges(). If write access is required, use ServerManager to get a new reference.\");\n            }\n\n            _dirty = true;\n        }\n\n        internal ConfigurationSection FindSection(string sectionPath, string locationPath, FileContext core)\n        {\n            var temp = DetectExistingSection(sectionPath, locationPath);\n            if (temp != null)\n            {\n                var duplicate = core.Parent?.DetectExistingSection(sectionPath, locationPath);\n                if (duplicate != null && !temp.IsLocallyStored)\n                {\n                    temp.IsLocallyStored = true;\n                }\n\n                return temp;\n            }\n\n            // IMPORTANT: force system.web to go to root web.config.\n            var top = locationPath == null && sectionPath.StartsWith(\"system.web/\") && core.AppHost ? core.Parent : core;\n            return CreateSection(sectionPath, locationPath, top);\n        }\n\n        private ConfigurationSection CreateSection(string sectionPath, string locationPath, FileContext core)\n        {\n            if (Location == null || Location == locationPath || locationPath.StartsWith(Location + '/'))\n            {\n                var definition = DefinitionCache.FirstOrDefault(item => item.Path == sectionPath);\n                //if (definition?.Name == \"configBuilders\" && definition.Type.StartsWith(\"System.Configuration.ConfigurationBuildersSection,\"))\n                //{\n                //    // IMPORTANT: insert schema for configBuilders.\n                //    var element = XDocument.Parse(\"<sectionSchema name=\\\"configBuilders\\\">\\r\\n        <element name=\\\"builders\\\">\\r\\n            <collection addElement=\\\"add\\\" removeElement=\\\"remove\\\" clearElement=\\\"clear\\\" allowUnrecognizedAttributes=\\\"true\\\">\\r\\n                <attribute name=\\\"name\\\" required=\\\"true\\\" isUniqueKey=\\\"true\\\" type=\\\"string\\\" />\\r\\n                <attribute name=\\\"type\\\" required=\\\"true\\\" type=\\\"string\\\" />\\r\\n            </collection>\\r\\n        </element>\\r\\n    </sectionSchema>\").Root;\n                //    definition.Schema = new SectionSchema(\"configBuilders\", element, \"\");\n                //    definition.Schema.ParseSectionSchema(element, null, \"\");\n                //}\n\n                if (definition == null)\n                {\n                }\n                else if (definition.Schema == null)\n                {\n                    if (!core.IgnoreSchemaCheck)\n                    {\n                        throw new FileNotFoundException($\"Filename: \\\\\\\\?\\\\{core.FileName}\\r\\nError: The configuration section '{sectionPath}' cannot be read because it is missing schema\\r\\n\\r\\n\");\n                    }\n                }\n                else\n                {\n                    var section = new ConfigurationSection(\n                            sectionPath,\n                            definition.Schema.Root,\n                            locationPath,\n                            core,\n                            null)\n                    { OverrideMode = OverrideMode.Inherit };\n                    if (locationPath == null)\n                    {\n                        section.OverrideModeEffective = (OverrideMode)Enum.Parse(typeof(OverrideMode), definition.OverrideModeDefault);\n                    }\n                    else\n                    {\n                        var parent = FindSection(sectionPath, locationPath.GetParentLocation(), core);\n                        // if (parent != null)\n                        {\n                            section.OverrideModeEffective = parent.OverrideModeEffective;\n                        }\n                    }\n\n                    section.IsLocked = section.FileContext.FileName != definition.FileContext.FileName && section.OverrideModeEffective != OverrideMode.Allow;\n                    section.IsLocallyStored = section.FileContext.FileName == definition.FileContext.FileName;\n                    ConfigurationSections.Add(section);\n                    return section;\n                }\n            }\n\n            var sectionBasedOnParent = core.Parent?.CreateSection(sectionPath, locationPath, core.Parent);\n            return sectionBasedOnParent;\n        }\n\n        private ConfigurationSection DetectExistingSection(string sectionPath, string locationPath)\n        {\n            foreach (ConfigurationSection section in ConfigurationSections)\n            {\n                if (section.ElementTagName == sectionPath && section.Location == locationPath && !section.IsLocked)\n                {\n                    return section;\n                }\n            }\n\n            return Parent?.DetectExistingSection(sectionPath, locationPath);\n        }\n\n        internal bool Add(ConfigurationSection section, Location location, FileContext top)\n        {\n            var definition = DefinitionCache.FirstOrDefault(item => item.Path == section.ElementTagName);\n            if (definition != null)\n            {\n                if (definition.AllowLocation == SectionGroup.KEYWORD_FALSE && location != null && location.FromTag)\n                {\n                    throw new ServerManagerException(\"Section is not allowed in location tag\");\n                }\n\n                section.OverrideMode = location?.OverrideMode == null\n                    ? OverrideMode.Inherit\n                    : (OverrideMode)Enum.Parse(typeof(OverrideMode), location.OverrideMode);\n\n                if (section.OverrideMode == OverrideMode.Inherit)\n                {\n                    var parent = location?.Path == null ? null : section.FileContext.FindSection(section.SectionPath, location.Path.GetParentLocation(), section.FileContext);\n                    if (parent == null)\n                    {\n                        section.OverrideModeEffective = (OverrideMode)Enum.Parse(typeof(OverrideMode), definition.OverrideModeDefault);\n                    }\n                    else\n                    {\n                        if (parent.OverrideModeEffective == OverrideMode.Deny && parent.FileContext != this)\n                        {\n                            throw new FileLoadException(\n                                $\"Filename: \\\\\\\\?\\\\{section.FileContext.FileName}\\r\\nLine number: {(section.Entity as IXmlLineInfo).LineNumber}\\r\\nError: This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault=\\\"Deny\\\"), or set explicitly by a location tag with overrideMode=\\\"Deny\\\" or the legacy allowOverride=\\\"false\\\".\\r\\n\\r\\n\");\n                        }\n\n                        section.OverrideModeEffective = parent.OverrideModeEffective;\n                    }\n                }\n                else\n                {\n                    section.OverrideModeEffective = section.OverrideMode;\n                }\n\n                section.IsLocked = section.FileContext.FileName != definition.FileContext.FileName\n                                   && section.OverrideModeEffective != OverrideMode.Allow;\n                section.IsLocallyStored = section.FileContext.FileName == definition.FileContext.FileName;\n                top.ConfigurationSections.Add(section);\n                return true;\n            }\n\n            if (Parent != null)\n            {\n                var parentContext = Parent.Add(section, location, top);\n                if (parentContext)\n                {\n                    return true;\n                }\n            }\n\n            if (definition == null)\n            {\n                throw new COMException(\n                    $\"Line number: {(section.Entity as IXmlLineInfo).LineNumber}\\r\\nError: The configuration section '{section.ElementTagName}' cannot be read because it is missing section definition\\r\\n\");\n            }\n            else\n            {\n                throw new FileLoadException(\n                    $\"Filename: \\\\\\\\?\\\\{section.FileContext.FileName}\\r\\nLine number: {(section.Entity as IXmlLineInfo).LineNumber}\\r\\nError: This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault=\\\"Deny\\\"), or set explicitly by a location tag with overrideMode=\\\"Deny\\\" or the legacy allowOverride=\\\"false\\\".\\r\\n\\r\\n\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Helper.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.IO;\nusing System.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class Helper\n    {\n        internal static readonly string RootPath = \"/\";\n        private static bool ProcessIs32Bit = IntPtr.Size == 4;\n\n        public static readonly string FileNameMachineConfig = IsRunningOnMono()\n            ? \"/Library/Frameworks/Mono.framework/Versions/Current/etc/mono/4.5/machine.config\"\n            : Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows),\n                \"Microsoft.NET\",\n                ProcessIs32Bit ? \"Framework\" : \"Framework64\",\n                \"v4.0.30319\",\n                \"CONFIG\",\n                \"machine.config\");\n\n        public static readonly string FileNameWebConfig = IsRunningOnMono()\n            ? \"/Library/Frameworks/Mono.framework/Versions/Current/etc/mono/4.5/web.config\"\n            : Path.Combine(\n                Environment.GetFolderPath(Environment.SpecialFolder.Windows),\n                \"Microsoft.NET\",\n                ProcessIs32Bit ? \"Framework\" : \"Framework64\",\n                \"v4.0.30319\",\n                \"CONFIG\",\n                \"web.config\");\n\n        public static string ExpandIisExpressEnvironmentVariables(this string path, string executable)\n        {\n            var binFolder = executable == null\n                ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), \"IIS Express\")\n                : Path.GetDirectoryName(executable);\n            return Environment.ExpandEnvironmentVariables(path.Replace(\"%IIS_SITES_HOME%\",\n                Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), \"My Web Sites\"))\n                .Replace(\"%IIS_USER_HOME%\",\n                    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), \"IISExpress\"))\n                .Replace(\"%IIS_BIN%\", binFolder));\n        }\n\n        public static string GetActualExecutable(this Application application)\n        {\n            if (application.Server.Mode != WorkingMode.IisExpress)\n            {\n                return null;\n            }\n\n            var pool = application.GetPool();\n            if (pool == null)\n            {\n                return null;\n            }\n\n            var result = Path.Combine(\n                Environment.GetFolderPath(\n                    pool != null && pool.Enable32BitAppOnWin64\n                        ? Environment.SpecialFolder.ProgramFilesX86\n                        : Environment.SpecialFolder.ProgramFiles),\n                \"IIS Express\",\n                \"iisexpress.exe\");\n            if (!File.Exists(result))\n            {\n                // fall back to 32 bit (IIS 7.5 Express)\n                result = Path.Combine(\n                    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),\n                    \"IIS Express\",\n                    \"iisexpress.exe\");\n            }\n\n            return result;\n        }\n\n        public static bool IsRoot(this Application application)\n        {\n            return application.Path == RootPath;\n        }\n\n        public static bool IsRunningOnMono()\n        {\n            return Type.GetType(\"Mono.Runtime\") != null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/IFeatureDetection.cs",
    "content": "﻿namespace Microsoft.Web.Administration\n{\n    internal interface IFeatureDetection\n    {\n        bool SupportsSni { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/IItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public interface IItem<T> : IEquatable<T>\n    {\n        string Flag { get; set; }\n\n        void Apply();\n\n        ConfigurationElement Element { get; set; }\n\n        bool Match(T other);\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/IdleTimeoutAction.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Administration\n{\n    public enum IdleTimeoutAction\n    {\n        [Description(\"Terminate\")]\n        Terminate = 0,\n\n        [Description(\"Suspend\")]\n        Suspend = 1\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/IisExpressServerManager.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved. \n//  \n// Licensed under the MIT license. See LICENSE file in the project root for full license information. \n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing JexusManager;\nusing Microsoft.Extensions.Logging;\nusing Exception = System.Exception;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class IisExpressServerManager : ServerManager\n    {\n        private static readonly ILogger _logger = LogHelper.GetLogger(\"IisExpressServerManager\");\n\n        public Version Version { get; }\n\n        public string PrimaryExecutable { get; }\n\n        public override bool SupportsSni => Version >= Version.Parse(\"8.0\") && Environment.OSVersion.Version >= Version.Parse(\"6.2\");\n\n        public override bool SupportsWildcard => Version >= Version.Parse(\"10.0\") && Environment.OSVersion.Version >= Version.Parse(\"10.0\");\n\n        public static bool ServerInstalled\n        {\n            get\n            {\n                return GetPrimaryExecutable() != null;\n            }\n        }\n\n        public IisExpressServerManager(string applicationHostConfigurationPath)\n            : this(false, applicationHostConfigurationPath)\n        {\n        }\n\n        public IisExpressServerManager(bool readOnly, string applicationHostConfigurationPath)\n            : base(readOnly, applicationHostConfigurationPath)\n        {\n            Mode = WorkingMode.IisExpress;\n            PrimaryExecutable = GetPrimaryExecutable();\n            Version = GetIisExpressVersion();\n        }\n\n        private static string GetPrimaryExecutable()\n        {\n            var directory = Path.Combine(\n                Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),\n                \"IIS Express\");\n            if (!Directory.Exists(directory))\n            {\n                // IMPORTANT: for x86 IIS 7 Express\n                directory = Path.Combine(\n                    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),\n                    \"IIS Express\");\n                if (!Directory.Exists(directory))\n                {\n                    return null;\n                }\n            }\n\n            var fileName = Path.Combine(directory, \"iisexpress.exe\");\n            return File.Exists(fileName) ? fileName : null;\n        }\n\n        private Version GetIisExpressVersion()\n        {\n            if (PrimaryExecutable != null && File.Exists(PrimaryExecutable))\n            {\n                if (Version.TryParse(FileVersionInfo.GetVersionInfo(PrimaryExecutable).ProductVersion, out Version result))\n                {\n                    return result;\n                }\n            }\n\n            return Version.Parse(\"0.0.0.0\");\n        }\n\n        internal override bool GetSiteState(Site site)\n        {\n            _logger.LogInformation(\"Getting state for site {SiteName} (ID: {SiteId})\", site.Name, site.Id);\n            \n            try\n            {\n                using var process = new Process\n                {\n                    StartInfo = new ProcessStartInfo\n                    {\n                        Verb = site.Bindings.ElevationRequired && !PublicNativeMethods.IsProcessElevated\n                            ? \"runas\"\n                            : null,\n                        UseShellExecute = true,\n                        FileName = \"cmd\",\n                        Arguments =\n                            $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /config:\\\"{site.FileContext.FileName}\\\" /siteId:{site.Id}\\\"\",\n                        CreateNoWindow = true,\n                        WindowStyle = ProcessWindowStyle.Hidden\n                    }\n                };\n                \n                _logger.LogInformation(\"Executing command to get site state: {Command} {Arguments}\", \n                    process.StartInfo.FileName, process.StartInfo.Arguments);\n                \n                process.Start();\n                _logger.LogInformation(\"State check process started with ID: {ProcessId}\", process.Id);\n                process.WaitForExit();\n                _logger.LogInformation(\"State check process exited with code: {ExitCode}\", process.ExitCode);\n\n                bool isRunning = process.ExitCode > 0;\n                _logger.LogInformation(\"Site {SiteName} state: {State}\", site.Name, isRunning ? \"Running\" : \"Stopped\");\n                return isRunning;\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                if (ex.NativeErrorCode != (int)Windows.Win32.Foundation.WIN32_ERROR.ERROR_CANCELLED)\n                {\n                    _logger.LogWarning(ex, \"Win32 error getting site state for {SiteName}. Native error code: {Code}\", \n                        site.Name, ex.NativeErrorCode);\n                }\n                else\n                {\n                    _logger.LogInformation(\"User cancelled elevation prompt while checking site state for {SiteName}\", site.Name);\n                }\n            }\n            catch (InvalidOperationException ex)\n            {\n                if (ex.HResult != NativeMethods.NoProcessAssociated)\n                {\n                    _logger.LogError(ex, \"Error getting site state for {SiteName}. HResult: {HResult}\", site.Name, ex.HResult);\n                }\n                else\n                {\n                    _logger.LogInformation(\"No process associated with site {SiteName} (expected for stopped sites)\", site.Name);\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Unexpected error getting site state for {SiteName}\", site.Name);\n            }\n\n            _logger.LogInformation(\"Site {SiteName} assumed to be stopped due to exception\", site.Name);\n            return false;\n        }\n\n        internal override bool GetPoolState(ApplicationPool pool)\n        {\n            return true;\n        }\n\n        internal override void Start(Site site)\n        {\n            _logger.LogInformation(\"Starting site {SiteName} (ID: {SiteId})\", site.Name, site.Id);\n            StartInner(site, false);\n        }\n\n        private void StartInner(Site site, bool restart)\n        {\n            _logger.LogInformation(\"{Action} site {SiteName} (ID: {SiteId})\", restart ? \"Restarting\" : \"Starting\", site.Name, site.Id);\n            \n            if (site.Bindings.ElevationRequired && !PublicNativeMethods.IsProcessElevated)\n            {\n                _logger.LogWarning(\"Site {SiteName} requires elevation but process is not elevated\", site.Name);\n                throw new InvalidOperationException(\"This site requires elevation. Please run Jexus Manager as administrator\");\n            }\n\n            Application application = site.Applications[0];\n            var actualExecutable = application.GetActualExecutable();\n            _logger.LogInformation(\"Using executable: {Executable}\", actualExecutable);\n            \n            var pool = application.GetPool();\n            if (pool == null)\n            {\n                _logger.LogError(\"Application pool {PoolName} not found for site {SiteName}\", application.ApplicationPoolName, site.Name);\n                throw new InvalidOperationException($\"The application pool {application.ApplicationPoolName} does not exist.\");\n            }\n            \n            var x64Tool = CertificateInstallerLocator.AlternativeFileName;\n            var tool = x64Tool != null && !pool.Enable32BitAppOnWin64 && pool.EnableEmulationOnWinArm64\n                ? x64Tool\n                : CertificateInstallerLocator.FileName;\n            _logger.LogInformation(\"Using tool: {Tool}\", tool);\n            \n            var temp = Path.GetTempFileName();\n            _logger.LogInformation(\"Using temp file for results: {TempFile}\", temp);\n            \n            using var process = new Process();\n            var start = process.StartInfo;\n            start.FileName = \"cmd\";\n            var extra = restart ? \"/r\" : string.Empty;\n            var arguments = $\"/c \\\"\\\"{tool}\\\" /launcher:\\\"{actualExecutable}\\\" /config:\\\"{site.FileContext.FileName}\\\" /siteId:{site.Id} /resultFile:\\\"{temp}\\\"\\\" {extra}\";\n            start.Arguments = arguments;\n            start.CreateNoWindow = true;\n            start.WindowStyle = ProcessWindowStyle.Hidden;\n            \n            _logger.LogInformation(\"Executing command: {FileName} {Arguments}\", start.FileName, arguments);\n            \n            AspNetCoreHelper.InjectEnvironmentVariables(site, start, actualExecutable);\n\n            try\n            {\n                process.Start();\n                _logger.LogInformation(\"Process started with ID: {ProcessId}\", process.Id);\n                process.WaitForExit();\n                _logger.LogInformation(\"Process exited with code: {ExitCode}\", process.ExitCode);\n                \n                if (process.ExitCode > 0)\n                {\n                    site.State = ObjectState.Started;\n                    _logger.LogInformation(\"Site {SiteName} started successfully (worker process ID: {ProcessId})\", site.Name, process.ExitCode);\n                }\n                else if (process.ExitCode == 0)\n                {\n                    _logger.LogError(\"Process terminated unexpectedly for site {SiteName}\", site.Name);\n                    if (File.Exists(temp))\n                    {\n                        _logger.LogError(\"Result file contents: {Contents}\", File.ReadAllText(temp));\n                    }\n                    throw new InvalidOperationException(\"The process has terminated\");\n                }\n\n                pool.WorkerProcesses.Clear();\n                var workerProcess = pool.WorkerProcesses.CreateElement();\n                workerProcess[\"processId\"] = process.ExitCode;\n                workerProcess[\"appPoolName\"] = pool.Name;\n                _logger.LogInformation(\"Created worker process entry with ID: {ProcessId} for pool: {PoolName}\", process.ExitCode, pool.Name);\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                if (ex.NativeErrorCode != (int)Windows.Win32.Foundation.WIN32_ERROR.ERROR_CANCELLED)\n                {\n                    string resultContent = File.Exists(temp) ? File.ReadAllText(temp) : \"no result file available\";\n                    _logger.LogError(ex, \"Win32 exception starting site {SiteName}: {Message}. Result file: {ResultContent}\", \n                        site.Name, ex.Message, resultContent);\n                    throw new COMException(\n                        $\"cannot start site: {ex.Message}, {resultContent}\");\n                }\n\n                string cancelContent = File.Exists(temp) ? File.ReadAllText(temp) : \"no result file available\";\n                _logger.LogWarning(ex, \"Site start cancelled by user for {SiteName}: {Message}. Result file: {CancelContent}\", \n                    site.Name, ex.Message, cancelContent);\n                throw new COMException(\n                    $\"site start cancelled: {ex.Message}, {cancelContent}\");\n            }\n            catch (Exception ex)\n            {\n                string exContent = File.Exists(temp) ? File.ReadAllText(temp) : \"no result file available\";\n                _logger.LogError(ex, \"Exception starting site {SiteName}: {Message}. Result file: {ExContent}\", \n                    site.Name, ex.Message, exContent);\n                throw new COMException(\n                    $\"cannot start site: {ex.Message}, {exContent}\");\n            }\n            finally\n            {\n                site.State = process.ExitCode > 0 ? ObjectState.Started : ObjectState.Stopped;\n                _logger.LogInformation(\"Set site {SiteName} state to {State}\", site.Name, site.State);\n                \n                if (File.Exists(temp))\n                {\n                    try\n                    {\n                        File.Delete(temp);\n                        _logger.LogInformation(\"Deleted temp file: {TempFile}\", temp);\n                    }\n                    catch (Exception ex)\n                    {\n                        _logger.LogWarning(ex, \"Failed to delete temp file: {TempFile}\", temp);\n                    }\n                }\n            }\n        }\n\n        internal override void Stop(Site site)\n        {\n            _logger.LogInformation(\"Stopping site {SiteName} (ID: {SiteId})\", site.Name, site.Id);\n            \n            try\n            {\n                using var process = new Process();\n                var start = process.StartInfo;\n                \n                bool needsElevation = site.Bindings.ElevationRequired && !PublicNativeMethods.IsProcessElevated;\n                start.Verb = needsElevation ? \"runas\" : null;\n                \n                if (needsElevation)\n                {\n                    _logger.LogInformation(\"Site {SiteName} requires elevation, launching with runas\", site.Name);\n                }\n                \n                start.UseShellExecute = true;\n                start.FileName = \"cmd\";\n                var arguments = $\"/c \\\"\\\"{CertificateInstallerLocator.FileName}\\\" /k /config:\\\"{site.FileContext.FileName}\\\" /siteId:{site.Id}\\\"\";\n                start.Arguments = arguments;\n                start.CreateNoWindow = true;\n                start.WindowStyle = ProcessWindowStyle.Hidden;\n                \n                _logger.LogInformation(\"Executing command to stop site: {FileName} {Arguments}\", start.FileName, arguments);\n                \n                process.Start();\n                _logger.LogInformation(\"Stop process started with ID: {ProcessId}\", process.Id);\n                process.WaitForExit();\n                _logger.LogInformation(\"Stop process exited with code: {ExitCode}\", process.ExitCode);\n\n                if (process.ExitCode == 0)\n                {\n                    site.State = ObjectState.Stopped;\n                    _logger.LogInformation(\"Site {SiteName} stopped successfully\", site.Name);\n                }\n                else\n                {\n                    _logger.LogWarning(\"Stop operation for site {SiteName} returned non-zero exit code: {ExitCode}\", \n                        site.Name, process.ExitCode);\n                }\n            }\n            catch (Win32Exception ex)\n            {\n                // elevation is cancelled.\n                if (ex.NativeErrorCode != (int)Windows.Win32.Foundation.WIN32_ERROR.ERROR_CANCELLED)\n                {\n                    _logger.LogError(ex, \"Win32 error stopping site {SiteName}. Native error code: {Code}\", site.Name, ex.NativeErrorCode);\n                }\n                else\n                {\n                    _logger.LogWarning(ex, \"Stop operation was cancelled by user for site {SiteName}\", site.Name);\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error stopping site {SiteName}\", site.Name);\n            }\n        }\n\n        internal override void Restart(Site site)\n        {\n            _logger.LogInformation(\"Restarting site {SiteName} (ID: {SiteId})\", site.Name, site.Id);\n            StartInner(site, true);\n        }\n\n        internal override IEnumerable<string> GetSchemaFiles()\n        {\n            var extra = Path.Combine(Environment.CurrentDirectory, \"schemas\");\n            var files = Directory.Exists(extra) ? Directory.GetFiles(extra) : Array.Empty<string>();\n\n            // IMPORTANT: for x64 IIS 7 Express\n            var directory = Path.Combine(\n                    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),\n                    \"IIS Express\",\n                    \"config\",\n                    \"schema\");\n            if (Directory.Exists(directory))\n            {\n                return Directory.GetFiles(directory).Concat(files);\n            }\n\n            // IMPORTANT: for x86 IIS 7 Express\n            var x86 = Path.Combine(\n                Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),\n                \"IIS Express\",\n                \"config\",\n                \"schema\");\n            return Directory.Exists(x86) ? Directory.GetFiles(x86) : base.GetSchemaFiles();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/IisServerManager.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    using System.Collections.Generic;\n    using System.ComponentModel;\n    using System.Diagnostics;\n    using System.IO;\n\n    /// <summary>\n    /// Server manager for IIS.\n    /// </summary>\n    public sealed class IisServerManager : ServerManager\n    {\n        public override bool SupportsSni => Environment.OSVersion.Version >= Version.Parse(\"6.2\");\n        public override bool SupportsWildcard => Environment.OSVersion.Version >= Version.Parse(\"10.0\");\n\n        public IisServerManager()\n            : this(null, true)\n        {\n        }\n\n        public IisServerManager(string hostName, bool local)\n            : this(hostName)\n        {\n        }\n\n        public IisServerManager(bool readOnly, string applicationHostConfigurationPath)\n            : this(\"localhost\", readOnly, applicationHostConfigurationPath)\n        {\n        }\n\n        public IisServerManager(string applicationHostConfigurationPath)\n            : this(false, applicationHostConfigurationPath)\n        {\n        }\n\n        internal IisServerManager(string hostName, bool readOnly, string fileName)\n            : base(hostName, readOnly, fileName)\n        {\n            Mode = WorkingMode.Iis;\n        }\n\n        internal override bool GetSiteState(Site site)\n        {\n            var appcmd = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), \"inetsrv\", \"appcmd.exe\");\n            if (!File.Exists(appcmd))\n            {\n                return false;\n            }\n\n            using var process = new Process\n            {\n                StartInfo = new ProcessStartInfo\n                {\n                    FileName = appcmd,\n                    Arguments = $\"list site /state:Started\",\n                    CreateNoWindow = true,\n                    WindowStyle = ProcessWindowStyle.Hidden,\n                    UseShellExecute = false,\n                    RedirectStandardOutput = true\n                }\n            };\n            process.Start();\n            var output = process.StandardOutput.ReadToEnd();\n            process.WaitForExit();\n            return output.Contains($\"SITE \\\"{site.Name}\\\"\");\n        }\n\n        internal override bool GetPoolState(ApplicationPool pool)\n        {\n            var appcmd = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), \"inetsrv\", \"appcmd.exe\");\n            if (!File.Exists(appcmd))\n            {\n                return false;\n            }\n\n            using var process = new Process\n            {\n                StartInfo = new ProcessStartInfo\n                {\n                    FileName = appcmd,\n                    Arguments = $\"list apppool /state:Started\",\n                    CreateNoWindow = true,\n                    WindowStyle = ProcessWindowStyle.Hidden,\n                    UseShellExecute = false,\n                    RedirectStandardOutput = true\n                }\n            };\n            process.Start();\n            var output = process.StandardOutput.ReadToEnd();\n            process.WaitForExit();\n            return output.Contains($\"APPPOOL \\\"{pool.Name}\\\"\");\n        }\n\n        internal override void Start(Site site)\n        {\n            var appcmd = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), \"inetsrv\", \"appcmd.exe\");\n            if (File.Exists(appcmd))\n            {\n                using var process = new Process\n                {\n                    StartInfo = new ProcessStartInfo\n                    {\n                        FileName = appcmd,\n                        Arguments = $\"start site \\\"{site.Name}\\\"\",\n                        CreateNoWindow = true,\n                        WindowStyle = ProcessWindowStyle.Hidden,\n                        Verb = \"runas\",\n                        UseShellExecute = true\n                    }\n                };\n                process.Start();\n                process.WaitForExit();\n            }\n        }\n\n        internal override void Stop(Site site)\n        {\n            var appcmd = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), \"inetsrv\", \"appcmd.exe\");\n            if (File.Exists(appcmd))\n            {\n                using var process = new Process\n                {\n                    StartInfo = new ProcessStartInfo\n                    {\n                        FileName = appcmd,\n                        Arguments = $\"stop site \\\"{site.Name}\\\"\",\n                        CreateNoWindow = true,\n                        WindowStyle = ProcessWindowStyle.Hidden,\n                        Verb = \"runas\",\n                        UseShellExecute = true\n                    }\n                };\n                process.Start();\n                process.WaitForExit();\n            }\n        }\n\n        internal override void Start(ApplicationPool pool)\n        {\n            var appcmd = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), \"inetsrv\", \"appcmd.exe\");\n            if (File.Exists(appcmd))\n            {\n                using var process = new Process\n                {\n                    StartInfo = new ProcessStartInfo\n                    {\n                        FileName = appcmd,\n                        Arguments = $\"start apppool \\\"{pool.Name}\\\"\",\n                        CreateNoWindow = true,\n                        WindowStyle = ProcessWindowStyle.Hidden,\n                        Verb = \"runas\",\n                        UseShellExecute = true\n                    }\n                };\n                process.Start();\n                process.WaitForExit();\n            }\n        }\n\n        internal override void Stop(ApplicationPool pool)\n        {\n            var appcmd = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), \"inetsrv\", \"appcmd.exe\");\n            if (File.Exists(appcmd))\n            {\n                using var process = new Process\n                {\n                    StartInfo = new ProcessStartInfo\n                    {\n                        FileName = appcmd,\n                        Arguments = $\"stop apppool \\\"{pool.Name}\\\"\",\n                        CreateNoWindow = true,\n                        WindowStyle = ProcessWindowStyle.Hidden,\n                        Verb = \"runas\",\n                        UseShellExecute = true\n                    }\n                };\n                process.Start();\n                process.WaitForExit();\n            }\n        }\n\n        internal override void Recycle(ApplicationPool pool)\n        {\n            var appcmd = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), \"inetsrv\", \"appcmd.exe\");\n            if (File.Exists(appcmd))\n            {\n                using var process = new Process\n                {\n                    StartInfo = new ProcessStartInfo\n                    {\n                        FileName = appcmd,\n                        Arguments = $\"recycle apppool \\\"{pool.Name}\\\"\",\n                        CreateNoWindow = true,\n                        WindowStyle = ProcessWindowStyle.Hidden,\n                        Verb = \"runas\",\n                        UseShellExecute = true\n                    }\n                };\n                process.Start();\n                process.WaitForExit();\n            }\n        }\n\n        internal override IEnumerable<string> GetSchemaFiles()\n        {\n            var directory = Path.Combine(\n                Environment.GetFolderPath(Environment.SpecialFolder.System),\n                \"inetsrv\",\n                \"config\",\n                \"schema\");\n            return Directory.Exists(directory) ? Directory.GetFiles(directory) : base.GetSchemaFiles();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/IntegerRangeValidator.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Web.Administration\n{\n    [Obfuscation(Exclude = true, ApplyToMembers = false)]\n    internal class IntegerRangeValidator : ConfigurationValidatorBase\n    {\n        private readonly string[] _items;\n\n        private bool _initialized;\n\n        private readonly bool _excluded;\n\n        private uint _minUint;\n\n        private uint _maxUint;\n\n        private int _minInt;\n\n        private int _maxInt;\n\n        public IntegerRangeValidator(string range)\n        {\n            _items = range.Split(',');\n            _excluded = _items.Length > 2 && _items[2] == \"exclude\";\n        }\n\n        public override void Validate(object value)\n        {\n            if (value is uint)\n            {\n                if (!_initialized)\n                {\n                    _minUint = uint.Parse(_items[0]);\n                    _maxUint = uint.Parse(_items[1]);\n                    _initialized = true;\n                }\n\n                var data = (uint)value;\n                if (_excluded)\n                {\n                    if (data > _minUint && data < _maxUint)\n                    {\n                        throw new COMException(string.Format(\"Integer value must not be between {0} and {1} inclusive\\r\\n\", _minUint, _maxUint));\n                    }\n                }\n                else\n                {\n                    if (data < _minUint || data > _maxUint)\n                    {\n                        throw new COMException(string.Format(\"Integer value must be between {0} and {1} inclusive\\r\\n\", _minUint, _maxUint));\n                    }\n                }\n            }\n            else if (value is int)\n            {\n                if (!_initialized)\n                {\n                    _minInt = int.Parse(_items[0]);\n                    _maxInt = int.Parse(_items[1]);\n                    _initialized = true;\n                }\n\n                var data = (int)value;\n                if (_excluded)\n                {\n                    if (data > _minInt && data < _maxInt)\n                    {\n                        throw new COMException(string.Format(\"Integer value must be between {0} and {1} exclusive\\r\\n\", _minInt, _maxInt));\n                    }\n                }\n                else\n                {\n                    if (data < _minInt || data > _maxInt)\n                    {\n                        throw new COMException(string.Format(\"Integer value must be between {0} and {1} inclusive\\r\\n\", _minInt, _maxInt));\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/JexusHelper.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Threading.Tasks;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Http;\nusing System.Net.Http.Headers;\nusing System.Security.Cryptography.X509Certificates;\nusing System.Net.Security;\n\nnamespace Microsoft.Web.Administration\n{\n    public partial class JexusServerManager\n    {\n        internal static readonly Version MinimumServerVersion = new Version(\"1.0.000530.00\");\n\n        private static string s_protocol = \"https\";\n        private string _keyCache;\n        private string _certificateCache;\n\n        internal string LogFolder { get; set; }\n\n        internal string Credentials { get; set; }\n\n        public override bool SupportsSni => false;\n        public override bool SupportsWildcard => false;\n\n        public Func<HttpRequestMessage, X509Certificate2, X509Chain, SslPolicyErrors, bool> ServerCertificateValidationCallback { get; set; }\n        public string AcceptedHash { get; internal set; }\n\n        public async Task<string> SaveKeyAsync(string key)\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.PostAsJsonAsync(\"api/server/key/save\", key);\n            if (response.IsSuccessStatusCode)\n            {\n                var result = (string)await response.Content.ReadAsAsync(typeof(string));\n                return result;\n            }\n\n            return string.Empty;\n        }\n\n        public async Task<string> SaveCertificateAsync(string text)\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.PostAsJsonAsync(\"api/server/cert/save\", text);\n            if (response.IsSuccessStatusCode)\n            {\n                var result = (string)await response.Content.ReadAsAsync(typeof(string));\n                return result;\n            }\n\n            return string.Empty;\n        }\n\n        public async Task<X509Certificate2> GetCertificateAsync()\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.PostAsJsonAsync(\"api/server/cert\", _certificateCache);\n            if (response.IsSuccessStatusCode)\n            {\n                var result = (X509Certificate2)await response.Content.ReadAsAsync(typeof(X509Certificate2));\n                return result;\n            }\n\n            return null;\n        }\n\n        public void SetCertificate(string certificate)\n        {\n            _certificateCache = certificate;\n        }\n\n        public void SetKeyFile(string key)\n        {\n            _keyCache = key;\n        }\n\n        internal HttpClient GetClient()\n        {\n            var requestHandler = new HttpClientHandler();\n            requestHandler.ServerCertificateCustomValidationCallback = ServerCertificateValidationCallback;\n            var client = new HttpClient(requestHandler) { BaseAddress = new Uri($\"{s_protocol}://{HostName}/\") };\n            client.DefaultRequestHeaders.Accept.Clear();\n            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(\"application/json\"));\n            client.DefaultRequestHeaders.Add(\"X-HTTP-Authorization\", Credentials);\n            client.DefaultRequestHeaders.Add(\"Time\", DateTime.UtcNow.ToString(CultureInfo.InvariantCulture));\n            return client;\n        }\n\n        public async Task<Version> GetVersionAsync()\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.GetAsync(\"api/server/version\");\n            if (response.IsSuccessStatusCode)\n            {\n                var succeeded = (string)await response.Content.ReadAsAsync(typeof(string));\n                return new Version(succeeded);\n            }\n\n            return null;\n        }\n\n        public async Task<string> HelloAsync()\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.PostAsJsonAsync(\"api/server/hello\", Environment.MachineName);\n            if (response.IsSuccessStatusCode)\n            {\n                var succeeded = (string)await response.Content.ReadAsAsync(typeof(string));\n                return succeeded;\n            }\n\n            return string.Empty;\n        }\n\n        public async Task<string> ByeAsync()\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.PostAsJsonAsync(\"api/server/bye\", Environment.MachineName);\n            if (response.IsSuccessStatusCode)\n            {\n                var succeeded = (string)await response.Content.ReadAsAsync(typeof(string));\n                return succeeded;\n            }\n\n            return string.Empty;\n        }\n\n        public async Task<bool> LocalhostTestAsync(string path, string random)\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.PostAsJsonAsync(\"api/server/test\", path);\n            if (response.IsSuccessStatusCode)\n            {\n                var value = (string)await response.Content.ReadAsAsync(typeof(string));\n                return value == random;\n            }\n\n            return false;\n        }\n\n        internal override bool Verify(string path, string executable)\n        {\n            return AsyncHelper.RunSync(() => VerifyAsync(path));\n        }\n\n        private async Task<bool> VerifyAsync(string path)\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.PostAsJsonAsync(\"api/site/verify\", path);\n            if (response.IsSuccessStatusCode)\n            {\n                var succeeded = (bool)await response.Content.ReadAsAsync(typeof(bool));\n                return succeeded;\n            }\n\n            return false;\n        }\n\n        public async Task LoadAsync()\n        {\n            SortedDictionary<string, List<string>> variables = null;\n            if (Credentials == null)\n            {\n                var lines = File.ReadAllLines(\"jws.conf\");\n                variables = new SortedDictionary<string, List<string>>();\n                foreach (var line in lines)\n                {\n                    var index = line.IndexOf('#');\n                    var content = index == -1 ? line : line.Substring(0, index);\n                    var parts = content.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);\n                    if (parts.Length != 2)\n                    {\n                        continue;\n                    }\n\n                    var key = parts[0].Trim().ToLowerInvariant();\n                    var value = parts[1].Trim();\n                    if (variables.ContainsKey(key))\n                    {\n                        variables[key].Add(value);\n                    }\n                    else\n                    {\n                        variables.Add(key, new List<string> { value });\n                    }\n                }\n            }\n            else\n            {\n                using var client = GetClient();\n                HttpResponseMessage response = await client.GetAsync(\"api/server/\");\n                if (response.IsSuccessStatusCode)\n                {\n                    variables = (SortedDictionary<string, List<string>>)await response.Content.ReadAsAsync(typeof(SortedDictionary<string, List<string>>));\n                }\n            }\n\n            var newPool = new ApplicationPool(null, ApplicationPools)\n            {\n                Name = \"DefaultAppPool\",\n                ManagedRuntimeVersion = variables.Load(new List<string> { ApplicationPool.ManagedRuntimeVersion20 }, \"runtime\")[0]\n            };\n            newPool.ProcessModel.MaxProcesses = long.Parse(variables.Load(new List<string> { \"1\" }, \"httpd.processes\")[0]);\n            newPool.ProcessModel.UserName = variables.Load(new List<string> { string.Empty }, \"httpd.user\")[0];\n            newPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;\n            ApplicationPools.Add(newPool);\n\n            SiteFolder = variables.Load(new List<string> { \"siteconf\" }, \"siteconfigdir\")[0];\n            LogFolder = variables.Load(new List<string> { \"log\" }, \"sitelogdir\")[0];\n            _certificateCache = variables.Load(new List<string> { string.Empty }, \"certificatefile\")[0];\n            _keyCache = variables.Load(new List<string> { string.Empty }, \"certificatekeyfile\")[0];\n\n            IEnumerable<string> sites = null;\n            if (Credentials == null)\n            {\n                sites = Directory.GetFiles(SiteFolder).Where(name => !name.Contains(\"_\"));\n            }\n            else\n            {\n                using var client = GetClient();\n                HttpResponseMessage response = await client.GetAsync(\"api/site/\");\n                if (response.IsSuccessStatusCode)\n                {\n                    sites = (List<string>)await response.Content.ReadAsAsync(typeof(List<string>));\n                }\n            }\n\n            long count = 0;\n            Debug.Assert(sites != null, \"sites != null\");\n            foreach (var file in sites)\n            {\n                var site = Credentials == null\n                               ? new Site(Sites) { Name = Path.GetFileName(file), Id = count }\n                               : new Site(Sites) { Name = file, Id = count };\n                Sites.Add(site);\n                count = await LoadAsync(site, count, file, SiteFolder);\n            }\n\n            Extra = variables;\n        }\n\n        public async Task SaveAsync()\n        {\n            var variables = new SortedDictionary<string, List<string>>();\n            foreach (var item in Extra)\n            {\n                variables.Add(item.Key, item.Value);\n            }\n\n            var pool = ApplicationPools[0];\n            variables.Add(\"runtime\", new List<string> { pool.ManagedRuntimeVersion });\n            variables.Add(\"httpd.processes\", new List<string> { pool.ProcessModel.MaxProcesses.ToString() });\n            variables.Add(\"httpd.user\", new List<string> { pool.ProcessModel.UserName });\n            variables.Add(\"siteconfigdir\", new List<string> { SiteFolder });\n            variables.Add(\"sitelogdir\", new List<string> { LogFolder });\n            variables.Add(\"certificatefile\", new List<string> { _certificateCache });\n            variables.Add(\"certificatekeyfile\", new List<string> { _keyCache });\n            if (string.IsNullOrEmpty(HostName))\n            {\n                var lines = new List<string>();\n                foreach (var item in variables)\n                {\n                    foreach (var line in item.Value)\n                    {\n                        lines.Add($\"{item.Key}={line}\");\n                    }\n                }\n\n                File.WriteAllLines(\"jws.conf\", lines);\n            }\n            else\n            {\n                using var client = GetClient();\n                HttpResponseMessage response = await client.PutAsJsonAsync(\"api/server/\", variables);\n                var content = await response.Content.ReadAsStringAsync();\n                if (response.IsSuccessStatusCode)\n                {\n                }\n            }\n        }\n\n        public async Task<bool> GetStatusAsync()\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.GetAsync(\"api/server/state\");\n            if (response.IsSuccessStatusCode)\n            {\n                var result = (bool)await response.Content.ReadAsAsync(typeof(bool));\n                return result;\n            }\n\n            return false;\n        }\n\n        public async Task<bool> StopAsync()\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.GetAsync(\"api/server/stop\");\n            if (response.IsSuccessStatusCode)\n            {\n                var succeeded = (bool)await response.Content.ReadAsAsync(typeof(bool));\n                return succeeded;\n            }\n\n            return false;\n        }\n\n        public async Task<bool> StartAsync()\n        {\n            using var client = GetClient();\n            HttpResponseMessage response = await client.GetAsync(\"api/server/start\");\n            if (response.IsSuccessStatusCode)\n            {\n                var succeeded = (bool)await response.Content.ReadAsAsync(typeof(bool));\n                return succeeded;\n            }\n\n            return false;\n        }\n\n        public async Task<long> LoadAsync(Site site, long count, string file, string siteFolder)\n        {\n            SortedDictionary<string, List<string>> siteVariables = null;\n            if (Credentials == null)\n            {\n                var rows = File.ReadAllLines(file);\n                siteVariables = new SortedDictionary<string, List<string>>();\n                foreach (var line in rows)\n                {\n                    var index = line.IndexOf('#');\n                    var content = index == -1 ? line : line.Substring(0, index);\n                    var parts = content.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);\n                    if (parts.Length != 2)\n                    {\n                        continue;\n                    }\n\n                    var key = parts[0].Trim().ToLowerInvariant();\n                    var value = parts[1].Trim();\n                    if (siteVariables.ContainsKey(key))\n                    {\n                        siteVariables[key].Add(value);\n                        continue;\n                    }\n\n                    siteVariables.Add(key, new List<string> { value });\n                }\n            }\n            else\n            {\n                using var client = GetClient();\n                HttpResponseMessage response = await client.GetAsync($\"api/site/{file}\");\n                if (response.IsSuccessStatusCode)\n                {\n                    siteVariables = (SortedDictionary<string, List<string>>)await response.Content.ReadAsAsync(typeof(SortedDictionary<string, List<string>>));\n                }\n            }\n\n            count++;\n            var useHttps = bool.Parse(siteVariables.Load(new List<string> { \"false\" }, \"usehttps\")[0]);\n            var host = siteVariables.Load(new List<string> { \"*\" }, \"hosts\", \"host\")[0];\n            var endPoint =\n                new IPEndPoint(\n                    IPAddress.Parse(\n                        siteVariables.Load(new List<string> { IPAddress.Any.ToString() }, \"addr\", \"address\")[0]),\n                    int.Parse(siteVariables.Load(new List<string> { \"80\" }, \"port\")[0]));\n            var binding = new Binding(useHttps ? \"https\" : \"http\", endPoint + \":\" + host, null, null, SslFlags.None, site.Bindings);\n\n            if (useHttps)\n            {\n                var cert = await GetCertificateAsync();\n                binding.CertificateHash = cert.GetCertHash();\n            }\n            else\n            {\n                binding.CertificateHash = new byte[0];\n            }\n\n            site.Bindings.Add(binding);\n            var app = new Application(site.Applications)\n            {\n                Path = Application.RootPath,\n                Name = string.Empty,\n                ApplicationPoolName = \"DefaultAppPool\"\n            };\n            site.Applications.Add(app);\n            await LoadAsync(app, null, null, siteVariables);\n\n            IEnumerable<string> appNames = null;\n            if (Credentials == null)\n            {\n                appNames = Directory.GetFiles(siteFolder);\n                appNames = appNames.Where(name => name.StartsWith(file + \"_\", StringComparison.Ordinal));\n            }\n            else\n            {\n                using var client = GetClient();\n                HttpResponseMessage response = await client.GetAsync($\"api/app/{site.Name}\");\n                if (response.IsSuccessStatusCode)\n                {\n                    appNames = (IEnumerable<string>)await response.Content.ReadAsAsync(typeof(IEnumerable<string>));\n                }\n            }\n\n            Debug.Assert(appNames != null, \"appNames != null\");\n\n            foreach (var appName in appNames)\n            {\n                var application = new Application(site.Applications)\n                {\n                    ApplicationPoolName = \"DefaultAppPool\",\n                    Path = appName.ToPath(out var applicationName),\n                    Name = applicationName\n                };\n                site.Applications.Add(application);\n                await LoadAsync(application, file, appName, null);\n            }\n\n            return count;\n        }\n\n        public async Task LoadAsync(Application application, string file, string appName, SortedDictionary<string, List<string>> variables)\n        {\n            if (variables == null)\n            {\n                if (Credentials == null)\n                {\n                    var rows = File.ReadAllLines(file);\n                    variables = new SortedDictionary<string, List<string>>();\n                    foreach (var line in rows)\n                    {\n                        var index = line.IndexOf('#');\n                        var content = index == -1 ? line : line.Substring(0, index);\n                        var parts = content.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries);\n                        if (parts.Length != 2)\n                        {\n                            continue;\n                        }\n\n                        var key = parts[0].Trim().ToLowerInvariant();\n                        var value = parts[1].Trim();\n                        if (variables.ContainsKey(key))\n                        {\n                            variables[key].Add(value);\n                            continue;\n                        }\n\n                        variables.Add(key, new List<string> { value });\n                    }\n                }\n                else\n                {\n                    using var client = GetClient();\n                    HttpResponseMessage response = await client.GetAsync($\"api/app/get/{appName}\");\n                    if (response.IsSuccessStatusCode)\n                    {\n                        variables = (SortedDictionary<string, List<string>>)await response.Content.ReadAsAsync(typeof(SortedDictionary<string, List<string>>));\n                    }\n                }\n            }\n\n            variables.Load(new List<string> { \"false\" }, \"usehttps\");\n            variables.Load(new List<string> { \"*\" }, \"hosts\", \"host\");\n            variables.Load(new List<string> { IPAddress.Any.ToString() }, \"addr\", \"address\");\n            variables.Load(new List<string> { \"80\" }, \"port\");\n            var root = variables.Load(new List<string> { \"/ /var/www/default\" }, \"root\")[0];\n            var split = root.IndexOf(' ');\n            if (split == -1 || split == 0)\n            {\n                throw new ServerManagerException(\"invalid root mapping\");\n            }\n\n            var virtualDirectory =\n                new VirtualDirectory(null, application.VirtualDirectories)\n                {\n                    Path = \"/\",\n                    PhysicalPath = root.Substring(split + 1)\n                };\n            application.VirtualDirectories.Add(virtualDirectory);\n            var configuration = application.GetWebConfiguration();\n            var defaultDocument = configuration.GetSection(\"system.webServer/defaultDocument\");\n            defaultDocument[\"enabled\"] = true;\n            var collection = defaultDocument.GetCollection(\"files\");\n            collection.Clear();\n            var names = variables.Load(new List<string> { Constants.DefaultDocumentList }, \"indexes\", \"indexs\")[0];\n            var pageNames = names.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n            foreach (var name in pageNames)\n            {\n                var file1 = collection.CreateElement();\n                file1.Attributes[\"value\"].Value = name;\n                collection.Add(file1);\n            }\n\n\n            ConfigurationSection httpLoggingSection = application.Server.GetApplicationHostConfiguration().GetSection(\"system.webServer/httpLogging\", application.Location);\n            var dontLog = Convert.ToBoolean(variables.Load(new List<string> { \"false\" }, \"nolog\")[0]);\n            httpLoggingSection[\"dontLog\"] = dontLog;\n\n            var ipSecuritySection = application.Server.GetApplicationHostConfiguration().GetSection(\"system.webServer/security/ipSecurity\", application.Location);\n            ipSecuritySection[\"enableReverseDns\"] = false;\n            ipSecuritySection[\"allowUnlisted\"] = true;\n\n            ConfigurationElementCollection ipSecurityCollection = ipSecuritySection.GetCollection();\n            ipSecurityCollection.Clear();\n            var deny = variables.Load(new List<string>(), \"denyfrom\", \"ip.deny\");\n            foreach (var denyEntry in deny)\n            {\n                var denyItems = denyEntry.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n                foreach (var item in denyItems)\n                {\n                    ConfigurationElement addElement = ipSecurityCollection.CreateElement(\"add\");\n                    if (item.Contains(\"/\"))\n                    {\n                        var parts = item.Split('/');\n                        addElement[\"ipAddress\"] = parts[0];\n                        addElement[\"subnetMask\"] = parts[1];\n                    }\n                    else\n                    {\n                        addElement[\"ipAddress\"] = item;\n                    }\n\n                    addElement[\"allowed\"] = false;\n                    ipSecurityCollection.Add(addElement);\n                }\n            }\n\n            var allow = variables.Load(new List<string>(), \"allowfrom\", \"ip.allow\");\n            foreach (var allowEntry in allow)\n            {\n                var allowItems = allowEntry.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n                foreach (var item in allowItems)\n                {\n                    ConfigurationElement addElement = ipSecurityCollection.CreateElement(\"add\");\n                    if (item.Contains(\"/\"))\n                    {\n                        var parts = item.Split('/');\n                        addElement[\"ipAddress\"] = parts[0];\n                        addElement[\"subnetMask\"] = parts[1];\n                    }\n                    else\n                    {\n                        addElement[\"ipAddress\"] = item;\n                    }\n\n                    addElement[\"allowed\"] = true;\n                    ipSecurityCollection.Add(addElement);\n                }\n            }\n\n            ConfigurationSection requestFilteringSection = configuration.GetSection(\"system.webServer/security/requestFiltering\");\n            ConfigurationElement hiddenSegmentsElement = requestFilteringSection.ChildElements[\"hiddenSegments\"];\n            ConfigurationElementCollection hiddenSegmentsCollection = hiddenSegmentsElement.GetCollection();\n            hiddenSegmentsCollection.Clear();\n            var hidden = variables.Load(new List<string> { string.Empty }, \"denydirs\")[0];\n            var hiddenItems = hidden.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);\n            foreach (var item in hiddenItems)\n            {\n                ConfigurationElement add = hiddenSegmentsCollection.CreateElement(\"add\");\n                add[\"segment\"] = item;\n                hiddenSegmentsCollection.Add(add);\n            }\n\n            ConfigurationSection httpErrorsSection = configuration.GetSection(\"system.webServer/httpErrors\");\n            ConfigurationElementCollection httpErrorsCollection = httpErrorsSection.GetCollection();\n            httpErrorsCollection.Clear();\n            Debug.Assert(variables != null, \"variables != null\");\n            if (variables.ContainsKey(\"nofile\"))\n            {\n                var error = variables[\"nofile\"][0];\n                ConfigurationElement errorElement = httpErrorsCollection.CreateElement(\"error\");\n                errorElement[\"statusCode\"] = 404;\n                errorElement[\"subStatusCode\"] = 0;\n                errorElement[\"prefixLanguageFilePath\"] = @\"%SystemDrive%\\inetpub\\custerr\";\n                errorElement[\"responseMode\"] = \"ExecuteURL\";\n                errorElement[\"path\"] = error;\n                httpErrorsCollection.Add(errorElement);\n                variables.Remove(\"nofile\");\n            }\n\n            var urlCompressionSection = configuration.GetSection(\"system.webServer/urlCompression\");\n            urlCompressionSection[\"doStaticCompression\"] = Convert.ToBoolean(variables.Load(new List<string> { \"true\" }, \"usegzip\")[0]);\n\n            ConfigurationSection httpProtocolSection = configuration.GetSection(\"system.webServer/httpProtocol\");\n            httpProtocolSection[\"allowKeepAlive\"] = Convert.ToBoolean(variables.Load(new List<string> { \"true\" }, \"keep_alive\")[0]);\n\n            ConfigurationSection rulesSection = configuration.GetSection(\"system.webServer/rewrite/rules\");\n            ConfigurationElementCollection rulesCollection = rulesSection.GetCollection();\n            rulesCollection.Clear();\n            if (variables.ContainsKey(\"rewrite\"))\n            {\n                var rules = variables[\"rewrite\"];\n                for (int i = 0; i < rules.Count; i++)\n                {\n                    var rule = rules[i];\n                    ConfigurationElement ruleElement = rulesCollection.CreateElement(\"rule\");\n                    ruleElement[\"name\"] = @\"rule\" + i;\n                    ruleElement[\"enabled\"] = true;\n                    ruleElement[\"patternSyntax\"] = 0;\n                    ruleElement[\"stopProcessing\"] = false;\n\n                    var parts = rule.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);\n                    ConfigurationElement matchElement = ruleElement.GetChildElement(\"match\");\n                    matchElement[\"ignoreCase\"] = parts[0].EndsWith(\"/i\", StringComparison.Ordinal);\n                    matchElement[\"url\"] = parts[0].EndsWith(\"/i\", StringComparison.Ordinal) ? parts[0].Substring(0, parts[0].Length - 2) : parts[0];\n\n                    ConfigurationElement actionElement = ruleElement.GetChildElement(\"action\");\n                    actionElement[\"type\"] = 2;\n                    actionElement[\"url\"] = parts[1];\n                    actionElement[\"appendQueryString\"] = true;\n                    rulesCollection.Add(ruleElement);\n                }\n\n                variables.Remove(\"rewrite\");\n            }\n\n            application.Extra.Clear();\n            foreach (var item in variables)\n            {\n                application.Extra.Add(item.Key, item.Value);\n            }\n        }\n\n        public async Task SaveAsync(Application application)\n        {\n            var variables = new SortedDictionary<string, List<string>>();\n            foreach (var item in application.Extra)\n            {\n                variables.Add(item.Key, item.Value);\n            }\n\n            var vDir = application.VirtualDirectories[0];\n\n            Configuration config = application.GetWebConfiguration();\n            ConfigurationSection defaultDocumentSection = config.GetSection(\"system.webServer/defaultDocument\");\n            ConfigurationElementCollection filesCollection = defaultDocumentSection.GetCollection(\"files\");\n            ConfigurationSection httpLoggingSection = application.Server.GetApplicationHostConfiguration().GetSection(\"system.webServer/httpLogging\", application.Location);\n            ConfigurationSection ipSecuritySection = application.Server.GetApplicationHostConfiguration().GetSection(\"system.webServer/security/ipSecurity\", application.Location);\n\n            ConfigurationSection requestFilteringSection = config.GetSection(\"system.webServer/security/requestFiltering\");\n            ConfigurationElement hiddenSegmentsElement = requestFilteringSection.GetChildElement(\"hiddenSegments\");\n            ConfigurationElementCollection hiddenSegmentsCollection = hiddenSegmentsElement.GetCollection();\n\n            ConfigurationSection httpErrorsSection = config.GetSection(\"system.webServer/httpErrors\");\n            ConfigurationElementCollection httpErrorsCollection = httpErrorsSection.GetCollection();\n\n            var urlCompressionSection = config.GetSection(\"system.webServer/urlCompression\");\n\n            ConfigurationSection httpProtocolSection = config.GetSection(\"system.webServer/httpProtocol\");\n\n            ConfigurationSection rewriteSection = config.GetSection(\"system.webServer/rewrite/rules\");\n            ConfigurationElementCollection rewriteCollection = rewriteSection.GetCollection();\n\n            variables.Add(\"usehttps\", new List<string> { (application.Site.Bindings[0].Protocol == \"https\").ToString() });\n            variables.Add(\"addr\", new List<string> { application.Site.Bindings[0].EndPoint.Address.ToString() });\n            variables.Add(\"port\", new List<string> { application.Site.Bindings[0].EndPoint.Port.ToString() });\n            variables.Add(\"hosts\", new List<string> { application.Site.Bindings[0].Host });\n            variables.Add(\"root\", new List<string> { $\"{vDir.Path} {vDir.PhysicalPath}\" });\n            variables.Add(\"nolog\", new List<string> { httpLoggingSection[\"dontLog\"].ToString() });\n            variables.Add(\"keep_alive\", new List<string> { httpProtocolSection[\"allowKeepAlive\"].ToString() });\n\n            var indexes = StringExtensions.Combine(filesCollection.Select(item => item.RawAttributes[\"value\"]), \",\");\n            variables.Add(\"indexes\", new List<string> { indexes });\n\n            var allows = new List<string>();\n            var denys = new List<string>();\n            foreach (ConfigurationElement item in ipSecuritySection.GetCollection())\n            {\n                string element = string.IsNullOrEmpty((string)item[\"subnetMask\"])\n                    ? (string)item[\"ipAddress\"]\n                    : $\"{item[\"ipAddress\"]}/{item[\"subnetMask\"]}\";\n                if ((bool)item[\"allowed\"])\n                {\n                    allows.Add(element);\n                }\n                else\n                {\n                    denys.Add(element);\n                }\n            }\n\n            variables.Add(\"allowfrom\", allows);\n            variables.Add(\"denyfrom\", denys);\n\n            var segments = StringExtensions.Combine(hiddenSegmentsCollection.Select(item => item[\"segment\"].ToString()), \",\");\n            variables.Add(\"denydirs\", new List<string> { segments });\n\n            foreach (ConfigurationElement item in httpErrorsCollection)\n            {\n                if ((uint)item[\"statusCode\"] == 404 && (int)item[\"subStatusCode\"] == 0\n                    && (string)item[\"prefixLanguageFilePath\"] == @\"%SystemDrive%\\inetpub\\custerr\"\n                    && (long)item[\"responseMode\"] == 1)\n                {\n                    variables.Add(\"nofile\", new List<string> { item[\"path\"].ToString() });\n                }\n            }\n\n            variables.Add(\"usegzip\", new List<string> { urlCompressionSection[\"doStaticCompression\"].ToString() });\n\n            var rules = new List<string>();\n            foreach (ConfigurationElement item in rewriteCollection)\n            {\n                var action = item.GetChildElement(\"action\");\n                var match = item.GetChildElement(\"match\");\n                if ((long)action[\"type\"] == 2)\n                {\n                    rules.Add(string.Format(\"{0}{2} {1}\", match[\"url\"], action[\"url\"], (bool)match[\"ignoreCase\"] ? \"/i\" : string.Empty));\n                }\n            }\n\n            variables.Add(\"rewrite\", rules);\n\n            if (string.IsNullOrEmpty(application.Server.HostName))\n            {\n                var rows = new List<string>();\n                foreach (var item in variables)\n                {\n                    foreach (var line in item.Value)\n                    {\n                        rows.Add($\"{item.Key}={line}\");\n                    }\n                }\n\n                var fileName = Path.Combine(\"siteconf\", application.ToFileName());\n                File.WriteAllLines(fileName, rows);\n            }\n            else\n            {\n                using var client = GetClient();\n                HttpResponseMessage response = await client.PutAsJsonAsync($\"api/site/{application.ToFileName()}\", variables);\n                if (response.IsSuccessStatusCode)\n                {\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/JexusManagerOptions.cs",
    "content": "namespace Microsoft.Web.Administration\n{\n    public static class JexusManagerOptions\n    {\n        public const string VariableNameBrowser = \"JEXUSMANAGER_BROWSER\";\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/JexusServerManager.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved. \n//  \n// Licensed under the MIT license. See LICENSE file in the project root for full license information. \n\nusing Microsoft.Web.Administration.Properties;\nusing System;\nusing System.IO;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed partial class JexusServerManager : ServerManager\n    {\n        internal static bool Enabled { get; set; }\n\n        public JexusServerManager(string hostName, string credentials)\n            : base(hostName, false)\n        {\n            Credentials = credentials;\n        }\n\n        protected override void PreInitialize()\n        {\n            base.PreInitialize();\n            CreateCache();\n        }\n\n        private void CreateCache()\n        {\n            var name = HostName.Replace(':', '_');\n            CacheFolder = Path.Combine(\n                Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),\n                \"Jexus Manager\",\n                \"cache\",\n                name);\n            FileName = Path.Combine(CacheFolder, \"applicationHost.config\");\n            if (!Directory.Exists(CacheFolder))\n            {\n                Directory.CreateDirectory(CacheFolder);\n            }\n\n            SchemaFolder = Path.Combine(CacheFolder, \"schema\");\n            if (!Directory.Exists(SchemaFolder))\n            {\n                Directory.CreateDirectory(SchemaFolder);\n            }\n\n            File.WriteAllText(FileName, Resources.original);\n            File.WriteAllText(Path.Combine(SchemaFolder, \"IIS_schema.xml\"), Resources.IIS_schema);\n            File.WriteAllText(Path.Combine(SchemaFolder, \"FX_schema.xml\"), Resources.FX_schema);\n            File.WriteAllText(Path.Combine(SchemaFolder, \"rewrite_schema.xml\"), Resources.rewrite_schema);\n        }\n\n        internal string CacheFolder { get; set; }\n        internal string SchemaFolder { get; set; }\n\n        protected override void PostInitialize()\n        {\n            base.PostInitialize();\n            AsyncHelper.RunSync(LoadAsync);\n        }\n\n        protected override void PostCommitChanges()\n        {\n            base.PostCommitChanges();\n            foreach (Site site in Sites)\n            {\n                foreach (Application application in site.Applications)\n                {\n                    AsyncHelper.RunSync(() => SaveAsync(application));\n                }\n            }\n\n            Save();\n        }\n\n        internal override bool GetSiteState(Site site)\n        {\n            return false;\n        }\n\n        internal override bool GetPoolState(ApplicationPool pool)\n        {\n            return true;\n        }\n\n        internal override void Start(Site site)\n        {\n        }\n\n        internal override void Stop(Site site)\n        {\n        }\n\n        internal override string GetPhysicalPath(string root)\n        {\n            return Path.Combine(CacheFolder, root.Replace('/', '_'));\n        }\n\n        internal override IEnumerable<string> GetSchemaFiles()\n        {\n            var environment = Path.Combine(\n                Environment.ExpandEnvironmentVariables(\"%JEXUS_CONFIG%\"),\n                \"schema\");\n            if (Directory.Exists(environment))\n            {\n                // IMPORTANT: allow overriding the folder via environment variable.\n                return Directory.GetFiles(environment);\n            }\n\n            if (Directory.Exists(SchemaFolder))\n            {\n                // IMPORANT: default folder for Jexus web server.\n                return Directory.GetFiles(SchemaFolder);\n            }\n\n            // IMPORTANT: default fallback.\n            return base.GetSchemaFiles();\n        }\n\n        internal override void CleanSiteFile(string file)\n        {\n            base.CleanSiteFile(file);\n            if (File.Exists(file))\n            {\n                File.Delete(file);\n            }\n\n            var directory = Path.GetDirectoryName(file);\n            if (!Directory.Exists(directory))\n            {\n                Directory.CreateDirectory(directory);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/LoadBalancerCapabilities.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public enum LoadBalancerCapabilities\n    {\n        TcpLevel = 1,\n        HttpLevel = 2\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Location.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    internal class Location\n    {\n        public string OverrideMode { get; }\n        public XElement Entity { get; set; }\n        public string Path { get; internal set; }\n        public bool FromTag { get; }\n\n        public Location(string path, string overrideMode, XElement entity, bool fromTag = false)\n        {\n            Path = path;\n            OverrideMode = overrideMode;\n            Entity = entity;\n            FromTag = fromTag;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/LogExtFileFlags.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Administration\n{\n    [Flags]\n    public enum LogExtFileFlags\n    {\n        [Description(\"Date ( date )\")]\n        Date = 1,\n\n        [Description(\"Time ( time )\")]\n        Time = 2,\n\n        [Description(\"Client IP Address ( c-ip )\")]\n        ClientIP = 4,\n\n        [Description(\"User Name ( cs-username )\")]\n        UserName = 8,\n\n        [Description(\"Service Name ( s-sitename )\")]\n        SiteName = 16,\n\n        [Description(\"Server Name ( s-computername )\")]\n        ComputerName = 32,\n\n        [Description(\"Server IP Address ( s-ip )\")]\n        ServerIP = 64,\n\n        [Description(\"Method ( cs-method )\")]\n        Method = 128,\n\n        [Description(\"URI Stem ( cs-uri-stem )\")]\n        UriStem = 256,\n\n        [Description(\"URI Query ( cs-uri-query )\")]\n        UriQuery = 512,\n\n        [Description(\"Protocol ( sc-status )\")]\n        HttpStatus = 1024,\n\n        [Description(\"Win32 Status ( sc-win32-status )\")]\n        Win32Status = 2048,\n\n        [Description(\"Bytes Sent ( sc-bytes )\")]\n        BytesSent = 4096,\n\n        [Description(\"Bytes Received ( cs-bytes )\")]\n        BytesRecv = 8192,\n\n        [Description(\"Time Taken ( time-taken )\")]\n        TimeTaken = 16384,\n\n        [Description(\"Server Port ( s-port )\")]\n        ServerPort = 32768,\n\n        [Description(\"User Agent ( cs(User-Agent) )\")]\n        UserAgent = 65536,\n\n        [Description(\"Cookie ( cs(Cookie) )\")]\n        Cookie = 131072,\n\n        [Description(\"Referer ( cs(Referer) )\")]\n        Referer = 262144,\n\n        [Description(\"Protocol Version ( cs-version )\")]\n        ProtocolVersion = 524288,\n\n        [Description(\"Host ( cs-host )\")]\n        Host = 1048576,\n\n        [Description(\"Protocol Substatus ( sc-substatus )\")]\n        HttpSubStatus = 2097152\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/LogFormat.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public enum LogFormat\n    {\n        Iis = 0,\n        Ncsa = 1,\n        W3c = 2,\n        Custom = 3\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/LogTargetW3C.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    [Flags]\n    public enum LogTargetW3C\n    {\n        File = 1,\n        ETW = 2\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/LoggingRolloverPeriod.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public enum LoggingRolloverPeriod\n    {\n        MaxSize = 0,\n        Daily = 1,\n        Weekly = 2,\n        Monthly = 3,\n        Hourly = 4\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ManagedPipelineMode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Administration\n{\n    public enum ManagedPipelineMode\n    {\n        [Description(\"Integrated\")]\n        Integrated = 0,\n\n        [Description(\"Classic\")]\n        Classic = 1\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Microsoft.Web.Administration.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>Jexus.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNet.WebApi.Client\" Version=\"6.0.0\" />\n    <PackageReference Include=\"Microsoft.Windows.CsWin32\" Version=\"0.3.183\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.Web.Configuration.AppHostFileProvider\\Microsoft.Web.Configuration.AppHostFileProvider.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"schemas\\rscaext.xml\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Microsoft.Web.Administration/NativeMethods.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Runtime.InteropServices;\nusing Windows.Win32;\nusing Windows.Win32.Foundation;\nusing Windows.Win32.Networking.WinSock;\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class NativeMethods\n    {\n        internal static string KnownCases(int nativeErrorCode)\n        {\n            if ((int)WIN32_ERROR.ERROR_CANCELLED == nativeErrorCode)\n            {\n                return \"This operation requires elevation but the prompt was cancelled. Please retry.\";\n            }\n\n            if ((int)WIN32_ERROR.ERROR_ACCESS_DISABLED_BY_POLICY == nativeErrorCode)\n            {\n                return \"This operation requires elevation but it is disabled by system administrators. Please contact them to remove this restriction.\";\n            }\n\n            return null;\n        }\n\n        #region HTTP API\n\n        private static readonly HTTPAPI_VERSION s_httpApiVersion = new HTTPAPI_VERSION(2, 0);\n\n        #region DllImport\n\n        [DllImport(\"httpapi.dll\", SetLastError = true)]\n        private static extern uint HttpInitialize(\n            HTTPAPI_VERSION version,\n            uint flags,\n            IntPtr pReserved);\n\n        [DllImport(\"httpapi.dll\", SetLastError = true)]\n        private static extern uint HttpSetServiceConfiguration(\n            IntPtr serviceIntPtr,\n            HTTP_SERVICE_CONFIG_ID configId,\n            IntPtr pConfigInformation,\n            int configInformationLength,\n            IntPtr pOverlapped);\n\n        [DllImport(\"httpapi.dll\", SetLastError = true)]\n        private static extern uint HttpDeleteServiceConfiguration(\n            IntPtr serviceIntPtr,\n            HTTP_SERVICE_CONFIG_ID configId,\n            IntPtr pConfigInformation,\n            int configInformationLength,\n            IntPtr pOverlapped);\n\n        [DllImport(\"httpapi.dll\", SetLastError = true)]\n        private static extern uint HttpTerminate(\n            uint Flags,\n            IntPtr pReserved);\n\n        [DllImport(\"httpapi.dll\", SetLastError = true)]\n        private static extern uint HttpQueryServiceConfiguration(\n            IntPtr serviceIntPtr,\n            HTTP_SERVICE_CONFIG_ID configId,\n            IntPtr pInputConfigInfo,\n            int inputConfigInfoLength,\n            IntPtr pOutputConfigInfo,\n            int outputConfigInfoLength,\n            [Optional] out int pReturnLength,\n            IntPtr pOverlapped);\n\n        private enum HTTP_SERVICE_CONFIG_ID\n        {\n            HttpServiceConfigIPListenList = 0,\n            HttpServiceConfigSSLCertInfo,\n            HttpServiceConfigUrlAclInfo,\n            HttpServiceConfigTimeout,\n            HttpServiceConfigCache,\n            HttpServiceConfigSslSniCertInfo,\n            HttpServiceConfigMax\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct HTTP_SERVICE_CONFIG_SSL_SET\n        {\n            public HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc;\n            public HTTP_SERVICE_CONFIG_SSL_PARAM ParamDesc;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct HTTP_SERVICE_CONFIG_SSL_SNI_SET\n        {\n            public HTTP_SERVICE_CONFIG_SSL_SNI_KEY KeyDesc;\n            public HTTP_SERVICE_CONFIG_SSL_PARAM ParamDesc;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct HTTP_SERVICE_CONFIG_SSL_SNI_KEY\n        {\n            public SOCKADDR_STORAGE IpPort;\n            [MarshalAs(UnmanagedType.LPWStr)] public string Host;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct HTTP_SERVICE_CONFIG_SSL_KEY\n        {\n            public IntPtr pIpPort;\n\n            public HTTP_SERVICE_CONFIG_SSL_KEY(IntPtr pIpPort)\n            {\n                this.pIpPort = pIpPort;\n            }\n        }\n\n        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]\n        private struct HTTP_SERVICE_CONFIG_SSL_PARAM\n        {\n            public int SslHashLength;\n            public IntPtr pSslHash;\n            public Guid AppId;\n            [MarshalAs(UnmanagedType.LPWStr)] public string pSslCertStoreName;\n            public uint DefaultCertCheckMode;\n            public int DefaultRevocationFreshnessTime;\n            public int DefaultRevocationUrlRetrievalTimeout;\n            [MarshalAs(UnmanagedType.LPWStr)] public string pDefaultSslCtlIdentifier;\n            [MarshalAs(UnmanagedType.LPWStr)] public string pDefaultSslCtlStoreName;\n            public uint DefaultFlags;\n        }\n\n        [StructLayout(LayoutKind.Sequential, Pack = 2)]\n        private struct HTTPAPI_VERSION\n        {\n            public ushort HttpApiMajorVersion;\n            public ushort HttpApiMinorVersion;\n\n            public HTTPAPI_VERSION(ushort majorVersion, ushort minorVersion)\n            {\n                HttpApiMajorVersion = majorVersion;\n                HttpApiMinorVersion = minorVersion;\n            }\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct HTTP_SERVICE_CONFIG_SSL_QUERY\n        {\n            public HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc;\n            public HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc;\n            public uint dwToken;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct HTTP_SERVICE_CONFIG_SSL_SNI_QUERY\n        {\n            public HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc;\n            public HTTP_SERVICE_CONFIG_SSL_SNI_KEY KeyDesc;\n            public uint dwToken;\n        }\n\n        private enum HTTP_SERVICE_CONFIG_QUERY_TYPE\n        {\n            HttpServiceConfigQueryExact = 0,\n            HttpServiceConfigQueryNext,\n            HttpServiceConfigQueryMax\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct HTTP_SERVICE_CONFIG_URLACL_QUERY\n        {\n            public HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc;\n            public HTTP_SERVICE_CONFIG_URLACL_KEY KeyDesc;\n            public uint dwToken;\n        }\n\n        private struct HTTP_SERVICE_CONFIG_URLACL_KEY\n        {\n            [MarshalAs(UnmanagedType.LPWStr)] public string pUrlPrefix;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        private struct HTTP_SERVICE_CONFIG_URLACL_SET\n        {\n            public HTTP_SERVICE_CONFIG_URLACL_KEY KeyDesc;\n            public HTTP_SERVICE_CONFIG_URLACL_PARAM ParamDesc;\n        }\n\n        private struct HTTP_SERVICE_CONFIG_URLACL_PARAM\n        {\n            [MarshalAs(UnmanagedType.LPWStr)] public string pStringSecurityDescriptor;\n        }\n\n        #endregion\n\n        #region Constants\n\n        internal const uint HTTP_INITIALIZE_CONFIG = 0x00000002;\n        internal const uint HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT = 0x00000002;\n        internal const uint HTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER = 0x00000004;\n\n        #endregion\n\n        #region Public methods\n\n        public static bool FoundReserved(ushort inPort)\n        {\n            ushort port = PInvoke.htons(inPort);\n            WIN32_ERROR result = (WIN32_ERROR)PInvoke.CreatePersistentTcpPortReservation(port, 1, out var token);\n            if (result == WIN32_ERROR.ERROR_SUCCESS)\n            {\n                PInvoke.DeletePersistentTcpPortReservation(port, 1);\n                return false;\n            }\n\n            return true;\n        }\n\n        public interface ISslCertificateInfo\n        {\n            byte[] Hash { get; set; }\n            string StoreName { get; set; }\n        }\n\n        public class SslCertificateInfo : ISslCertificateInfo\n        {\n            public byte[] Hash { get; set; }\n            public Guid AppId { get; set; }\n            public string StoreName { get; set; }\n            public IPEndPoint IpPort { get; set; }\n        }\n\n        public static SslCertificateInfo QuerySslCertificateInfo(IPEndPoint ipPort)\n        {\n            SslCertificateInfo result = null;\n\n            uint retVal;\n            CallHttpApi(delegate\n            {\n                GCHandle sockAddrHandle = CreateSockaddrStructure(ipPort);\n                IntPtr pIpPort = sockAddrHandle.AddrOfPinnedObject();\n                HTTP_SERVICE_CONFIG_SSL_KEY sslKey = new HTTP_SERVICE_CONFIG_SSL_KEY(pIpPort);\n\n                HTTP_SERVICE_CONFIG_SSL_QUERY inputConfigInfoQuery =\n                    new HTTP_SERVICE_CONFIG_SSL_QUERY\n                    {\n                        QueryDesc = HTTP_SERVICE_CONFIG_QUERY_TYPE.HttpServiceConfigQueryExact,\n                        KeyDesc = sslKey\n                    };\n\n                IntPtr pInputConfigInfo =\n                    Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_SSL_QUERY)));\n                Marshal.StructureToPtr(inputConfigInfoQuery, pInputConfigInfo, false);\n\n                IntPtr pOutputConfigInfo = IntPtr.Zero;\n                int returnLength = 0;\n\n                try\n                {\n                    HTTP_SERVICE_CONFIG_ID queryType = HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSSLCertInfo;\n                    int inputConfigInfoSize = Marshal.SizeOf(inputConfigInfoQuery);\n                    retVal = HttpQueryServiceConfiguration(IntPtr.Zero,\n                        queryType,\n                        pInputConfigInfo,\n                        inputConfigInfoSize,\n                        pOutputConfigInfo,\n                        returnLength,\n                        out returnLength,\n                        IntPtr.Zero);\n                    if (retVal == (uint)WIN32_ERROR.ERROR_FILE_NOT_FOUND)\n                        return;\n\n                    if ((uint)WIN32_ERROR.ERROR_INSUFFICIENT_BUFFER == retVal) // ERROR_INSUFFICIENT_BUFFER = 122\n                    {\n                        pOutputConfigInfo = Marshal.AllocCoTaskMem(returnLength);\n\n                        try\n                        {\n                            retVal = HttpQueryServiceConfiguration(IntPtr.Zero,\n                                queryType,\n                                pInputConfigInfo,\n                                inputConfigInfoSize,\n                                pOutputConfigInfo,\n                                returnLength,\n                                out returnLength,\n                                IntPtr.Zero);\n                            ThrowWin32ExceptionIfError(retVal);\n\n                            var outputConfigInfo =\n                                (HTTP_SERVICE_CONFIG_SSL_SET)\n                                Marshal.PtrToStructure(pOutputConfigInfo, typeof(HTTP_SERVICE_CONFIG_SSL_SET));\n\n                            byte[] hash = new byte[outputConfigInfo.ParamDesc.SslHashLength];\n                            Marshal.Copy(outputConfigInfo.ParamDesc.pSslHash, hash, 0, hash.Length);\n\n                            Guid appId = outputConfigInfo.ParamDesc.AppId;\n                            string storeName = outputConfigInfo.ParamDesc.pSslCertStoreName;\n\n                            result = new SslCertificateInfo\n                            {\n                                AppId = appId,\n                                Hash = hash,\n                                StoreName = storeName,\n                                IpPort = ipPort\n                            };\n                        }\n                        finally\n                        {\n                            Marshal.FreeCoTaskMem(pOutputConfigInfo);\n                        }\n                    }\n                    else\n                    {\n                        ThrowWin32ExceptionIfError(retVal);\n                    }\n                }\n                finally\n                {\n                    Marshal.FreeCoTaskMem(pInputConfigInfo);\n                    if (sockAddrHandle.IsAllocated)\n                        sockAddrHandle.Free();\n                }\n            });\n\n            return result;\n        }\n\n        public static void BindCertificate(IPEndPoint ipPort, byte[] hash, string storeName, Guid appId)\n        {\n            if (ipPort == null) throw new ArgumentNullException(nameof(ipPort));\n            if (hash == null) throw new ArgumentNullException(nameof(hash));\n\n            CallHttpApi(\n                delegate\n                {\n                    HTTP_SERVICE_CONFIG_SSL_SET configSslSet = new HTTP_SERVICE_CONFIG_SSL_SET();\n\n                    GCHandle sockAddrHandle = CreateSockaddrStructure(ipPort);\n                    IntPtr pIpPort = sockAddrHandle.AddrOfPinnedObject();\n                    HTTP_SERVICE_CONFIG_SSL_KEY httpServiceConfigSslKey =\n                        new HTTP_SERVICE_CONFIG_SSL_KEY(pIpPort);\n                    HTTP_SERVICE_CONFIG_SSL_PARAM configSslParam = new HTTP_SERVICE_CONFIG_SSL_PARAM();\n\n\n                    GCHandle handleHash = GCHandle.Alloc(hash, GCHandleType.Pinned);\n                    configSslParam.AppId = appId;\n                    configSslParam.DefaultCertCheckMode = 0;\n                    configSslParam.DefaultFlags = 0; //HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT;\n                    configSslParam.DefaultRevocationFreshnessTime = 0;\n                    configSslParam.DefaultRevocationUrlRetrievalTimeout = 0;\n                    configSslParam.pSslCertStoreName = storeName;\n                    configSslParam.pSslHash = handleHash.AddrOfPinnedObject();\n                    configSslParam.SslHashLength = hash.Length;\n                    configSslSet.ParamDesc = configSslParam;\n                    configSslSet.KeyDesc = httpServiceConfigSslKey;\n\n                    IntPtr pInputConfigInfo =\n                        Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_SSL_SET)));\n                    Marshal.StructureToPtr(configSslSet, pInputConfigInfo, false);\n\n                    try\n                    {\n                        uint retVal = HttpSetServiceConfiguration(IntPtr.Zero,\n                            HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSSLCertInfo,\n                            pInputConfigInfo,\n                            Marshal.SizeOf(configSslSet),\n                            IntPtr.Zero);\n\n                        if ((uint)WIN32_ERROR.ERROR_ALREADY_EXISTS != retVal)\n                        {\n                            ThrowWin32ExceptionIfError(retVal);\n                        }\n                        else\n                        {\n                            retVal = HttpDeleteServiceConfiguration(IntPtr.Zero,\n                                HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSSLCertInfo,\n                                pInputConfigInfo,\n                                Marshal.SizeOf(configSslSet),\n                                IntPtr.Zero);\n                            ThrowWin32ExceptionIfError(retVal);\n\n                            retVal = HttpSetServiceConfiguration(IntPtr.Zero,\n                                HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSSLCertInfo,\n                                pInputConfigInfo,\n                                Marshal.SizeOf(configSslSet),\n                                IntPtr.Zero);\n                            ThrowWin32ExceptionIfError(retVal);\n                        }\n                    }\n                    finally\n                    {\n                        Marshal.FreeCoTaskMem(pInputConfigInfo);\n                        if (handleHash.IsAllocated)\n                            handleHash.Free();\n                        if (sockAddrHandle.IsAllocated)\n                            sockAddrHandle.Free();\n                    }\n                });\n        }\n\n        public static void DeleteCertificateBinding(params IPEndPoint[] ipPorts)\n        {\n            if (ipPorts == null || ipPorts.Length == 0)\n                return;\n\n            CallHttpApi(\n                delegate\n                {\n                    foreach (var ipPort in ipPorts)\n                    {\n                        HTTP_SERVICE_CONFIG_SSL_SET configSslSet =\n                            new HTTP_SERVICE_CONFIG_SSL_SET();\n\n                        GCHandle sockAddrHandle = CreateSockaddrStructure(ipPort);\n                        IntPtr pIpPort = sockAddrHandle.AddrOfPinnedObject();\n                        HTTP_SERVICE_CONFIG_SSL_KEY httpServiceConfigSslKey =\n                            new HTTP_SERVICE_CONFIG_SSL_KEY(pIpPort);\n                        configSslSet.KeyDesc = httpServiceConfigSslKey;\n\n                        IntPtr pInputConfigInfo =\n                            Marshal.AllocCoTaskMem(\n                                Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_SSL_SET)));\n                        Marshal.StructureToPtr(configSslSet, pInputConfigInfo, false);\n\n                        try\n                        {\n                            uint retVal = HttpDeleteServiceConfiguration(IntPtr.Zero,\n                                HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSSLCertInfo,\n                                pInputConfigInfo,\n                                Marshal.SizeOf(configSslSet),\n                                IntPtr.Zero);\n                            ThrowWin32ExceptionIfError(retVal);\n                        }\n                        finally\n                        {\n                            Marshal.FreeCoTaskMem(pInputConfigInfo);\n                            if (sockAddrHandle.IsAllocated)\n                                sockAddrHandle.Free();\n                        }\n                    }\n                });\n        }\n\n        public static SslCertificateInfo[] QuerySslCertificateInfo()\n        {\n            var result = new List<SslCertificateInfo>();\n\n            CallHttpApi(\n                delegate\n                {\n                    uint token = 0;\n\n                    uint retVal;\n                    do\n                    {\n                        HTTP_SERVICE_CONFIG_SSL_QUERY inputConfigInfoQuery =\n                            new HTTP_SERVICE_CONFIG_SSL_QUERY\n                            {\n                                QueryDesc = HTTP_SERVICE_CONFIG_QUERY_TYPE.HttpServiceConfigQueryNext,\n                                dwToken = token\n                            };\n\n                        IntPtr pInputConfigInfo =\n                            Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_SSL_QUERY)));\n                        Marshal.StructureToPtr(inputConfigInfoQuery, pInputConfigInfo, false);\n\n                        IntPtr pOutputConfigInfo = IntPtr.Zero;\n                        int returnLength = 0;\n\n                        const HTTP_SERVICE_CONFIG_ID queryType = HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSSLCertInfo;\n\n                        try\n                        {\n                            int inputConfigInfoSize = Marshal.SizeOf(inputConfigInfoQuery);\n                            retVal = HttpQueryServiceConfiguration(IntPtr.Zero,\n                                queryType,\n                                pInputConfigInfo,\n                                inputConfigInfoSize,\n                                pOutputConfigInfo,\n                                returnLength,\n                                out returnLength,\n                                IntPtr.Zero);\n                            if ((uint)WIN32_ERROR.ERROR_NO_MORE_ITEMS == retVal)\n                                break;\n                            if ((uint)WIN32_ERROR.ERROR_INSUFFICIENT_BUFFER == retVal) // ERROR_INSUFFICIENT_BUFFER = 122\n                            {\n                                pOutputConfigInfo = Marshal.AllocCoTaskMem(returnLength);\n\n                                try\n                                {\n                                    retVal = HttpQueryServiceConfiguration(\n                                        IntPtr.Zero,\n                                        queryType,\n                                        pInputConfigInfo,\n                                        inputConfigInfoSize,\n                                        pOutputConfigInfo,\n                                        returnLength,\n                                        out returnLength,\n                                        IntPtr.Zero);\n                                    ThrowWin32ExceptionIfError(retVal);\n\n                                    var outputConfigInfo =\n                                        (HTTP_SERVICE_CONFIG_SSL_SET)\n                                        Marshal.PtrToStructure(pOutputConfigInfo, typeof(HTTP_SERVICE_CONFIG_SSL_SET));\n\n                                    byte[] hash = new byte[outputConfigInfo.ParamDesc.SslHashLength];\n                                    Marshal.Copy(outputConfigInfo.ParamDesc.pSslHash, hash, 0, hash.Length);\n\n                                    Guid appId = outputConfigInfo.ParamDesc.AppId;\n                                    string storeName = outputConfigInfo.ParamDesc.pSslCertStoreName;\n                                    IPEndPoint ipPort = ReadSockaddrStructure(outputConfigInfo.KeyDesc.pIpPort);\n\n                                    var resultItem = new SslCertificateInfo\n                                    {\n                                        AppId = appId,\n                                        Hash = hash,\n                                        StoreName = storeName,\n                                        IpPort = ipPort\n                                    };\n                                    result.Add(resultItem);\n                                    token++;\n                                }\n                                finally\n                                {\n                                    Marshal.FreeCoTaskMem(pOutputConfigInfo);\n                                }\n                            }\n                            else\n                            {\n                                ThrowWin32ExceptionIfError(retVal);\n                            }\n                        }\n                        finally\n                        {\n                            Marshal.FreeCoTaskMem(pInputConfigInfo);\n                        }\n                    } while ((uint)WIN32_ERROR.NO_ERROR == retVal);\n                });\n\n            return result.ToArray();\n        }\n\n        public class SslSniInfo : ISslCertificateInfo\n        {\n            public byte[] Hash { get; set; }\n            public Guid AppId { get; set; }\n            public string StoreName { get; set; }\n            public int Port { get; set; }\n\n            public string Host { get; set; }\n        }\n\n        public static SslSniInfo QuerySslSniInfo(Tuple<string, int> binding)\n        {\n            if (string.IsNullOrWhiteSpace(binding.Item1))\n            {\n                return null;\n            }\n\n            if (Environment.OSVersion.Version < Version.Parse(\"6.2\"))\n            {\n                return null;\n            }\n\n            SslSniInfo result = null;\n\n            uint retVal;\n            CallHttpApi(delegate\n            {\n                HTTP_SERVICE_CONFIG_SSL_SNI_KEY sslKey = new HTTP_SERVICE_CONFIG_SSL_SNI_KEY();\n                sslKey.Host = binding.Item1;\n                sslKey.IpPort = CreateSockAddrStorageStructure(binding.Item2);\n\n                HTTP_SERVICE_CONFIG_SSL_SNI_QUERY inputConfigInfoQuery =\n                    new HTTP_SERVICE_CONFIG_SSL_SNI_QUERY\n                    {\n                        QueryDesc = HTTP_SERVICE_CONFIG_QUERY_TYPE.HttpServiceConfigQueryExact,\n                        KeyDesc = sslKey\n                    };\n\n                IntPtr pInputConfigInfo =\n                    Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_SSL_SNI_QUERY)));\n                Marshal.StructureToPtr(inputConfigInfoQuery, pInputConfigInfo, false);\n\n                IntPtr pOutputConfigInfo = IntPtr.Zero;\n                int returnLength = 0;\n\n                try\n                {\n                    HTTP_SERVICE_CONFIG_ID queryType = HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSslSniCertInfo;\n                    int inputConfigInfoSize = Marshal.SizeOf(inputConfigInfoQuery);\n                    retVal = HttpQueryServiceConfiguration(IntPtr.Zero,\n                        queryType,\n                        pInputConfigInfo,\n                        inputConfigInfoSize,\n                        pOutputConfigInfo,\n                        returnLength,\n                        out returnLength,\n                        IntPtr.Zero);\n                    if (retVal == (uint)WIN32_ERROR.ERROR_FILE_NOT_FOUND)\n                        return;\n\n                    if ((uint)WIN32_ERROR.ERROR_INSUFFICIENT_BUFFER == retVal) // ERROR_INSUFFICIENT_BUFFER = 122\n                    {\n                        pOutputConfigInfo = Marshal.AllocCoTaskMem(returnLength);\n\n                        try\n                        {\n                            retVal = HttpQueryServiceConfiguration(IntPtr.Zero,\n                                queryType,\n                                pInputConfigInfo,\n                                inputConfigInfoSize,\n                                pOutputConfigInfo,\n                                returnLength,\n                                out returnLength,\n                                IntPtr.Zero);\n                            ThrowWin32ExceptionIfError(retVal);\n\n                            var outputConfigInfo =\n                                (HTTP_SERVICE_CONFIG_SSL_SNI_SET)\n                                Marshal.PtrToStructure(pOutputConfigInfo, typeof(HTTP_SERVICE_CONFIG_SSL_SNI_SET));\n\n                            byte[] hash = new byte[outputConfigInfo.ParamDesc.SslHashLength];\n                            Marshal.Copy(outputConfigInfo.ParamDesc.pSslHash, hash, 0, hash.Length);\n\n                            Guid appId = outputConfigInfo.ParamDesc.AppId;\n                            string storeName = outputConfigInfo.ParamDesc.pSslCertStoreName;\n\n                            var host = outputConfigInfo.KeyDesc.Host;\n                            var ipPort = ReadSockAddrStorageStructure(outputConfigInfo.KeyDesc.IpPort);\n\n                            result = new SslSniInfo\n                            {\n                                AppId = appId,\n                                Hash = hash,\n                                StoreName = storeName,\n                                Host = host,\n                                Port = ipPort.Port\n                            };\n                        }\n                        finally\n                        {\n                            Marshal.FreeCoTaskMem(pOutputConfigInfo);\n                        }\n                    }\n                    else\n                    {\n                        ThrowWin32ExceptionIfError(retVal);\n                    }\n                }\n                finally\n                {\n                    Marshal.FreeCoTaskMem(pInputConfigInfo);\n                }\n            });\n\n            return result;\n        }\n\n        public static void BindSni(Tuple<string, int> binding, byte[] hash, string storeName, Guid appId)\n        {\n            if (binding == null) throw new ArgumentNullException(nameof(binding));\n            if (hash == null) throw new ArgumentNullException(nameof(hash));\n\n            if (Environment.OSVersion.Version < Version.Parse(\"6.2\"))\n            {\n                return;\n            }\n\n            CallHttpApi(\n                delegate\n                {\n                    HTTP_SERVICE_CONFIG_SSL_SNI_SET configSslSet = new HTTP_SERVICE_CONFIG_SSL_SNI_SET();\n\n\n                    HTTP_SERVICE_CONFIG_SSL_SNI_KEY httpServiceConfigSslKey =\n                        new HTTP_SERVICE_CONFIG_SSL_SNI_KEY();\n                    httpServiceConfigSslKey.Host = binding.Item1;\n                    httpServiceConfigSslKey.IpPort = CreateSockAddrStorageStructure(binding.Item2);\n                    HTTP_SERVICE_CONFIG_SSL_PARAM configSslParam = new HTTP_SERVICE_CONFIG_SSL_PARAM();\n\n\n                    GCHandle handleHash = GCHandle.Alloc(hash, GCHandleType.Pinned);\n                    configSslParam.AppId = appId;\n                    configSslParam.DefaultCertCheckMode = 0;\n                    configSslParam.DefaultFlags = 0; //HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT;\n                    configSslParam.DefaultRevocationFreshnessTime = 0;\n                    configSslParam.DefaultRevocationUrlRetrievalTimeout = 0;\n                    configSslParam.pSslCertStoreName = storeName;\n                    configSslParam.pSslHash = handleHash.AddrOfPinnedObject();\n                    configSslParam.SslHashLength = hash.Length;\n                    configSslSet.ParamDesc = configSslParam;\n                    configSslSet.KeyDesc = httpServiceConfigSslKey;\n\n                    IntPtr pInputConfigInfo =\n                        Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_SSL_SNI_SET)));\n                    Marshal.StructureToPtr(configSslSet, pInputConfigInfo, false);\n\n                    try\n                    {\n                        uint retVal = HttpSetServiceConfiguration(IntPtr.Zero,\n                            HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSslSniCertInfo,\n                            pInputConfigInfo,\n                            Marshal.SizeOf(configSslSet),\n                            IntPtr.Zero);\n\n                        if ((uint)WIN32_ERROR.ERROR_ALREADY_EXISTS != retVal)\n                        {\n                            ThrowWin32ExceptionIfError(retVal);\n                        }\n                        else\n                        {\n                            retVal = HttpDeleteServiceConfiguration(IntPtr.Zero,\n                                HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSslSniCertInfo,\n                                pInputConfigInfo,\n                                Marshal.SizeOf(configSslSet),\n                                IntPtr.Zero);\n                            ThrowWin32ExceptionIfError(retVal);\n\n                            retVal = HttpSetServiceConfiguration(IntPtr.Zero,\n                                HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSslSniCertInfo,\n                                pInputConfigInfo,\n                                Marshal.SizeOf(configSslSet),\n                                IntPtr.Zero);\n                            ThrowWin32ExceptionIfError(retVal);\n                        }\n                    }\n                    finally\n                    {\n                        Marshal.FreeCoTaskMem(pInputConfigInfo);\n                        if (handleHash.IsAllocated)\n                            handleHash.Free();\n                    }\n                });\n        }\n\n        public static void DeleteSniBinding(params Tuple<string, int>[] bindings)\n        {\n            if (bindings == null || bindings.Length == 0)\n                return;\n\n            if (Environment.OSVersion.Version < Version.Parse(\"6.2\"))\n            {\n                return;\n            }\n\n            CallHttpApi(\n                delegate\n                {\n                    foreach (var binding in bindings)\n                    {\n                        HTTP_SERVICE_CONFIG_SSL_SNI_SET configSslSet =\n                            new HTTP_SERVICE_CONFIG_SSL_SNI_SET();\n\n                        HTTP_SERVICE_CONFIG_SSL_SNI_KEY httpServiceConfigSslKey =\n                            new HTTP_SERVICE_CONFIG_SSL_SNI_KEY();\n                        httpServiceConfigSslKey.Host = binding.Item1;\n                        httpServiceConfigSslKey.IpPort = CreateSockAddrStorageStructure(binding.Item2);\n                        configSslSet.KeyDesc = httpServiceConfigSslKey;\n\n                        IntPtr pInputConfigInfo =\n                            Marshal.AllocCoTaskMem(\n                                Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_SSL_SNI_SET)));\n                        Marshal.StructureToPtr(configSslSet, pInputConfigInfo, false);\n\n                        try\n                        {\n                            uint retVal = HttpDeleteServiceConfiguration(IntPtr.Zero,\n                                HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSslSniCertInfo,\n                                pInputConfigInfo,\n                                Marshal.SizeOf(configSslSet),\n                                IntPtr.Zero);\n                            ThrowWin32ExceptionIfError(retVal);\n                        }\n                        finally\n                        {\n                            Marshal.FreeCoTaskMem(pInputConfigInfo);\n                        }\n                    }\n                });\n        }\n\n        public static SslSniInfo[] QuerySslSniInfo()\n        {\n            var result = new List<SslSniInfo>();\n\n            if (Environment.OSVersion.Version < Version.Parse(\"6.2\"))\n            {\n                return result.ToArray();\n            }\n\n            CallHttpApi(\n                delegate\n                {\n                    uint token = 0;\n\n                    uint retVal;\n                    do\n                    {\n                        HTTP_SERVICE_CONFIG_SSL_SNI_QUERY inputConfigInfoQuery =\n                            new HTTP_SERVICE_CONFIG_SSL_SNI_QUERY\n                            {\n                                QueryDesc = HTTP_SERVICE_CONFIG_QUERY_TYPE.HttpServiceConfigQueryNext,\n                                dwToken = token\n                            };\n\n                        IntPtr pInputConfigInfo =\n                            Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_SSL_SNI_QUERY)));\n                        Marshal.StructureToPtr(inputConfigInfoQuery, pInputConfigInfo, false);\n\n                        IntPtr pOutputConfigInfo = IntPtr.Zero;\n                        int returnLength = 0;\n\n                        const HTTP_SERVICE_CONFIG_ID queryType = HTTP_SERVICE_CONFIG_ID.HttpServiceConfigSslSniCertInfo;\n\n                        try\n                        {\n                            int inputConfigInfoSize = Marshal.SizeOf(inputConfigInfoQuery);\n                            retVal = HttpQueryServiceConfiguration(IntPtr.Zero,\n                                queryType,\n                                pInputConfigInfo,\n                                inputConfigInfoSize,\n                                pOutputConfigInfo,\n                                returnLength,\n                                out returnLength,\n                                IntPtr.Zero);\n                            if ((uint)WIN32_ERROR.ERROR_NO_MORE_ITEMS == retVal)\n                                break;\n                            if ((uint)WIN32_ERROR.ERROR_INSUFFICIENT_BUFFER == retVal) // ERROR_INSUFFICIENT_BUFFER = 122\n                            {\n                                pOutputConfigInfo = Marshal.AllocCoTaskMem(returnLength);\n\n                                try\n                                {\n                                    retVal = HttpQueryServiceConfiguration(\n                                        IntPtr.Zero,\n                                        queryType,\n                                        pInputConfigInfo,\n                                        inputConfigInfoSize,\n                                        pOutputConfigInfo,\n                                        returnLength,\n                                        out returnLength,\n                                        IntPtr.Zero);\n                                    ThrowWin32ExceptionIfError(retVal);\n\n                                    var outputConfigInfo =\n                                        (HTTP_SERVICE_CONFIG_SSL_SNI_SET)\n                                        Marshal.PtrToStructure(pOutputConfigInfo,\n                                            typeof(HTTP_SERVICE_CONFIG_SSL_SNI_SET));\n\n                                    byte[] hash = new byte[outputConfigInfo.ParamDesc.SslHashLength];\n                                    Marshal.Copy(outputConfigInfo.ParamDesc.pSslHash, hash, 0, hash.Length);\n\n                                    Guid appId = outputConfigInfo.ParamDesc.AppId;\n                                    string storeName = outputConfigInfo.ParamDesc.pSslCertStoreName;\n                                    var ipPort = ReadSockAddrStorageStructure(outputConfigInfo.KeyDesc.IpPort);\n\n                                    var host = outputConfigInfo.KeyDesc.Host;\n                                    var resultItem = new SslSniInfo\n                                    {\n                                        AppId = appId,\n                                        Hash = hash,\n                                        StoreName = storeName,\n                                        Host = host,\n                                        Port = ipPort.Port\n                                    };\n                                    result.Add(resultItem);\n                                    token++;\n                                }\n                                finally\n                                {\n                                    Marshal.FreeCoTaskMem(pOutputConfigInfo);\n                                }\n                            }\n                            else\n                            {\n                                ThrowWin32ExceptionIfError(retVal);\n                            }\n                        }\n                        finally\n                        {\n                            Marshal.FreeCoTaskMem(pInputConfigInfo);\n                        }\n                    } while ((uint)WIN32_ERROR.NO_ERROR == retVal);\n                });\n\n            return result.ToArray();\n        }\n\n        public class HttpNamespaceAcl\n        {\n            public string UrlPrefix { get; set; }\n            public string SecurityDescriptor { get; set; }\n        }\n\n        public static HttpNamespaceAcl[] QueryHttpNamespaceAcls()\n        {\n            var result = new List<HttpNamespaceAcl>();\n\n            CallHttpApi(\n                delegate\n                {\n                    uint token = 0;\n\n                    uint retVal;\n                    do\n                    {\n                        HTTP_SERVICE_CONFIG_URLACL_QUERY inputConfigInfoQuery =\n                            new HTTP_SERVICE_CONFIG_URLACL_QUERY\n                            {\n                                QueryDesc = HTTP_SERVICE_CONFIG_QUERY_TYPE.HttpServiceConfigQueryNext,\n                                dwToken = token\n                            };\n\n                        IntPtr pInputConfigInfo =\n                            Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_URLACL_QUERY)));\n                        Marshal.StructureToPtr(inputConfigInfoQuery, pInputConfigInfo, false);\n\n                        IntPtr pOutputConfigInfo = IntPtr.Zero;\n                        int returnLength = 0;\n\n                        const HTTP_SERVICE_CONFIG_ID queryType = HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo;\n\n                        try\n                        {\n                            int inputConfigInfoSize = Marshal.SizeOf(inputConfigInfoQuery);\n                            retVal = HttpQueryServiceConfiguration(IntPtr.Zero,\n                                queryType,\n                                pInputConfigInfo,\n                                inputConfigInfoSize,\n                                pOutputConfigInfo,\n                                returnLength,\n                                out returnLength,\n                                IntPtr.Zero);\n                            if ((uint)WIN32_ERROR.ERROR_NO_MORE_ITEMS == retVal)\n                                break;\n                            if ((uint)WIN32_ERROR.ERROR_INSUFFICIENT_BUFFER == retVal) // ERROR_INSUFFICIENT_BUFFER = 122\n                            {\n                                pOutputConfigInfo = Marshal.AllocCoTaskMem(returnLength);\n\n                                try\n                                {\n                                    retVal = HttpQueryServiceConfiguration(\n                                        IntPtr.Zero,\n                                        queryType,\n                                        pInputConfigInfo,\n                                        inputConfigInfoSize,\n                                        pOutputConfigInfo,\n                                        returnLength,\n                                        out returnLength,\n                                        IntPtr.Zero);\n                                    ThrowWin32ExceptionIfError(retVal);\n\n                                    var outputConfigInfo =\n                                        (HTTP_SERVICE_CONFIG_URLACL_SET)\n                                        Marshal.PtrToStructure(pOutputConfigInfo,\n                                            typeof(HTTP_SERVICE_CONFIG_URLACL_SET));\n\n                                    var resultItem = new HttpNamespaceAcl\n                                    {\n                                        UrlPrefix = outputConfigInfo.KeyDesc.pUrlPrefix,\n                                        SecurityDescriptor = outputConfigInfo.ParamDesc.pStringSecurityDescriptor\n                                    };\n                                    result.Add(resultItem);\n                                    token++;\n                                }\n                                finally\n                                {\n                                    Marshal.FreeCoTaskMem(pOutputConfigInfo);\n                                }\n                            }\n                            else\n                            {\n                                ThrowWin32ExceptionIfError(retVal);\n                            }\n                        }\n                        finally\n                        {\n                            Marshal.FreeCoTaskMem(pInputConfigInfo);\n                        }\n                    } while ((uint)WIN32_ERROR.NO_ERROR == retVal);\n                });\n\n            return result.ToArray();\n        }\n\n        public static void BindHttpNamespaceAcl(string networkURL, string securityDescriptor)\n        {\n            var retVal = (uint)WIN32_ERROR.NO_ERROR; // NOERROR = 0\n\n            CallHttpApi(() =>\n            {\n                if ((uint)WIN32_ERROR.NO_ERROR == retVal)\n                {\n                    var keyDesc = new HTTP_SERVICE_CONFIG_URLACL_KEY { pUrlPrefix = networkURL };\n                    var paramDesc =\n                        new HTTP_SERVICE_CONFIG_URLACL_PARAM { pStringSecurityDescriptor = securityDescriptor };\n\n                    var inputConfigInfoSet = new HTTP_SERVICE_CONFIG_URLACL_SET();\n                    inputConfigInfoSet.KeyDesc = keyDesc;\n                    inputConfigInfoSet.ParamDesc = paramDesc;\n\n                    var pInputConfigInfo =\n                        Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_URLACL_SET)));\n                    Marshal.StructureToPtr(inputConfigInfoSet, pInputConfigInfo, false);\n\n                    retVal = HttpSetServiceConfiguration(\n                        IntPtr.Zero,\n                        HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo,\n                        pInputConfigInfo,\n                        Marshal.SizeOf(inputConfigInfoSet),\n                        IntPtr.Zero);\n\n                    if ((uint)WIN32_ERROR.ERROR_ALREADY_EXISTS == retVal) // ERROR_ALREADY_EXISTS = 183\n                    {\n                        retVal = HttpDeleteServiceConfiguration(\n                            IntPtr.Zero,\n                            HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo,\n                            pInputConfigInfo,\n                            Marshal.SizeOf(inputConfigInfoSet),\n                            IntPtr.Zero);\n\n                        if ((uint)WIN32_ERROR.NO_ERROR == retVal)\n                        {\n                            retVal = HttpSetServiceConfiguration(IntPtr.Zero,\n                                HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo,\n                                pInputConfigInfo,\n                                Marshal.SizeOf(inputConfigInfoSet),\n                                IntPtr.Zero);\n                        }\n                    }\n                    else if ((uint)WIN32_ERROR.ERROR_ACCESS_DENIED == retVal)\n                    {\n                        //Debug.WriteLine(\"ERROR_ACCESS_DENIED reserving a HTTP url\");\n                        retVal = (uint)WIN32_ERROR.NO_ERROR;\n                    }\n\n                    Marshal.FreeCoTaskMem(pInputConfigInfo);\n                }\n\n                if ((uint)WIN32_ERROR.NO_ERROR != retVal)\n                {\n                    throw new Win32Exception(Convert.ToInt32(retVal));\n                }\n            });\n        }\n\n        public static void DeleteHttpNamespaceAcl(string networkURL, string securityDescriptor)\n        {\n            var retVal = (uint)WIN32_ERROR.NO_ERROR; // NOERROR = 0\n\n            CallHttpApi(() =>\n            {\n                if ((uint)WIN32_ERROR.NO_ERROR == retVal)\n                {\n                    var keyDesc = new HTTP_SERVICE_CONFIG_URLACL_KEY { pUrlPrefix = networkURL };\n                    var paramDesc =\n                        new HTTP_SERVICE_CONFIG_URLACL_PARAM { pStringSecurityDescriptor = securityDescriptor };\n\n                    var inputConfigInfoSet = new HTTP_SERVICE_CONFIG_URLACL_SET();\n                    inputConfigInfoSet.KeyDesc = keyDesc;\n                    inputConfigInfoSet.ParamDesc = paramDesc;\n\n                    var pInputConfigInfo =\n                        Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(HTTP_SERVICE_CONFIG_URLACL_SET)));\n                    Marshal.StructureToPtr(inputConfigInfoSet, pInputConfigInfo, false);\n\n                    retVal = HttpDeleteServiceConfiguration(\n                        IntPtr.Zero,\n                        HTTP_SERVICE_CONFIG_ID.HttpServiceConfigUrlAclInfo,\n                        pInputConfigInfo,\n                        Marshal.SizeOf(inputConfigInfoSet),\n                        IntPtr.Zero);\n\n                    if ((uint)WIN32_ERROR.ERROR_ACCESS_DENIED == retVal)\n                    {\n                        //Debug.WriteLine(\"ERROR_ACCESS_DENIED reserving a HTTP url\");\n                        retVal = (uint)WIN32_ERROR.NO_ERROR;\n                    }\n\n                    Marshal.FreeCoTaskMem(pInputConfigInfo);\n                }\n\n                if ((uint)WIN32_ERROR.NO_ERROR != retVal)\n                {\n                    throw new Win32Exception(Convert.ToInt32(retVal));\n                }\n            });\n        }\n\n        #endregion\n\n        private static void ThrowWin32ExceptionIfError(uint retVal)\n        {\n            if ((uint)WIN32_ERROR.NO_ERROR != retVal)\n            {\n                throw new Win32Exception(Convert.ToInt32(retVal));\n            }\n        }\n\n        private static void CallHttpApi(Action body)\n        {\n            uint retVal = HttpInitialize(s_httpApiVersion, HTTP_INITIALIZE_CONFIG, IntPtr.Zero);\n            ThrowWin32ExceptionIfError(retVal);\n\n            try\n            {\n                body();\n            }\n            finally\n            {\n                HttpTerminate(HTTP_INITIALIZE_CONFIG, IntPtr.Zero);\n            }\n        }\n\n        /// <summary>\n        /// Creates an unmanaged sockaddr structure to pass to a WinAPI function.\n        /// </summary>\n        /// <param name=\"ipEndPoint\">IP address and port number</param>\n        /// <returns>a handle for the structure. Use the AddrOfPinnedObject Method to get a stable pointer to the object. </returns>\n        /// <remarks>When the handle goes out of scope you must explicitly release it by calling the Free method; otherwise, memory leaks may occur. </remarks>\n        private static GCHandle CreateSockaddrStructure(IPEndPoint ipEndPoint)\n        {\n            SocketAddress socketAddress = ipEndPoint.Serialize();\n\n            // use an array of bytes instead of the sockaddr structure \n            byte[] sockAddrStructureBytes = new byte[socketAddress.Size];\n            GCHandle sockAddrHandle = GCHandle.Alloc(sockAddrStructureBytes, GCHandleType.Pinned);\n            for (int i = 0; i < socketAddress.Size; ++i)\n            {\n                sockAddrStructureBytes[i] = socketAddress[i];\n            }\n\n            return sockAddrHandle;\n        }\n\n        private static SOCKADDR_STORAGE CreateSockAddrStorageStructure(int port)\n        {\n            var address = new SOCKADDR_IN\n            {\n                sin_family = ADDRESS_FAMILY.AF_INET,\n                sin_port = PInvoke.ntohs((ushort)port)\n            };\n            return (SOCKADDR_STORAGE)address;\n        }\n\n        /// <summary>\n        /// Reads the unmanaged sockaddr structure returned by a WinAPI function\n        /// </summary>\n        /// <param name=\"pSockaddrStructure\">pointer to the unmanaged sockaddr structure</param>\n        /// <returns>IP address and port number</returns>\n        private static IPEndPoint ReadSockaddrStructure(IntPtr pSockaddrStructure)\n        {\n            short sAddressFamily = Marshal.ReadInt16(pSockaddrStructure);\n            AddressFamily addressFamily = (AddressFamily)sAddressFamily;\n\n            int sockAddrSructureSize;\n            IPEndPoint ipEndPointAny;\n            switch (addressFamily)\n            {\n                case AddressFamily.InterNetwork:\n                    // IP v4 address\n                    sockAddrSructureSize = 16;\n                    ipEndPointAny = new IPEndPoint(IPAddress.Any, 0);\n                    break;\n                case AddressFamily.InterNetworkV6:\n                    // IP v6 address\n                    sockAddrSructureSize = 28;\n                    ipEndPointAny = new IPEndPoint(IPAddress.IPv6Any, 0);\n                    break;\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(pSockaddrStructure), \"Unknown address family\");\n            }\n\n            // get bytes of the sockadrr structure\n            byte[] sockAddrSructureBytes = new byte[sockAddrSructureSize];\n            Marshal.Copy(pSockaddrStructure, sockAddrSructureBytes, 0, sockAddrSructureSize);\n\n            // create SocketAddress from bytes\n            var socketAddress = new SocketAddress(AddressFamily.Unspecified, sockAddrSructureSize);\n            for (int i = 0; i < sockAddrSructureSize; i++)\n            {\n                socketAddress[i] = sockAddrSructureBytes[i];\n            }\n\n            // create IPEndPoint from SocketAddress\n            IPEndPoint result = (IPEndPoint)ipEndPointAny.Create(socketAddress);\n            return result;\n        }\n\n        /// <summary>\n        /// Reads the unmanaged sockaddr structure returned by a WinAPI function\n        /// </summary>\n        /// <param name=\"pSockaddrStructure\">pointer to the unmanaged sockaddr structure</param>\n        /// <returns>IP address and port number</returns>\n        private static IPEndPoint ReadSockAddrStorageStructure(SOCKADDR_STORAGE sockAddrStorageStructure)\n        {\n            var sAddressFamily = sockAddrStorageStructure.ss_family;\n            AddressFamily addressFamily = (AddressFamily)sAddressFamily;\n            switch (addressFamily)\n            {\n                case AddressFamily.InterNetwork:\n                    // IP v4 address\n                    var v4Address = (SOCKADDR_IN)sockAddrStorageStructure;\n                    return new IPEndPoint(IPAddress.Any, PInvoke.ntohs(v4Address.sin_port));\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(sockAddrStorageStructure), \"Unknown address family\");\n            }\n        }\n\n        #endregion\n\n        #region View Folder Information\n\n        internal static bool ShowFileProperties(string Filename)\n        {\n            return PInvoke.SHObjectProperties(new HWND(IntPtr.Zero), Windows.Win32.UI.Shell.SHOP_TYPE.SHOP_FILEPATH, Filename, \"Security\");\n        }\n\n        #endregion\n\n        #region Win32 error codes\n\n        public const int NonExistingStore = -2147024894; //0x80070002\n        public const int UserCancelled = -2147023673;\n        public const int BadKeySet = -2146893802;\n        public const int NoProcessAssociated = -2146233079;\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/NativeMethods.json",
    "content": "{\n    \"$schema\": \"https://aka.ms/CsWin32.schema.json\",\n    \"emitSingleFile\": true\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/NativeMethods.txt",
    "content": "SHObjectProperties\nSHOW_WINDOW_CMD\nntohs\nhtons\nSOCKADDR_IN\nSOCKADDR_STORAGE\nADDRESS_FAMILY\nCreatePersistentTcpPortReservation\nDeletePersistentTcpPortReservation\nWIN32_ERROR\nHttpInitialize\nHttpSetServiceConfiguration\nHttpDeleteServiceConfiguration\nHttpTerminate\nHttpQueryServiceConfiguration\nHTTP_SERVICE_CONFIG_ID\nHTTP_SERVICE_CONFIG_SSL_SET\nHTTP_SERVICE_CONFIG_SSL_KEY\nHTTP_SERVICE_CONFIG_SSL_SNI_SET\nHTTP_SERVICE_CONFIG_SSL_SNI_KEY\nHTTP_SERVICE_CONFIG_SSL_PARAM\nHTTPAPI_VERSION\nHTTP_SERVICE_CONFIG_SSL_QUERY\nHTTP_SERVICE_CONFIG_SSL_SNI_QUERY\nHTTP_SERVICE_CONFIG_QUERY_TYPE\nHTTP_SERVICE_CONFIG_URLACL_QUERY\nHTTP_SERVICE_CONFIG_URLACL_KEY\nHTTP_SERVICE_CONFIG_URLACL_SET\nHTTP_SERVICE_CONFIG_URLACL_PARAM\nHTTP_INITIALIZE\nHTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT\nHTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER\n"
  },
  {
    "path": "Microsoft.Web.Administration/NonEmptyStringValidator.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Web.Administration\n{\n    [Obfuscation(Exclude = true, ApplyToMembers = false)]\n    internal class NonEmptyStringValidator : ConfigurationValidatorBase\n    {\n        public NonEmptyStringValidator()\n        {\n\n        }\n\n        public NonEmptyStringValidator(string parameter)\n        {\n\n        }\n\n        public override void Validate(object value)\n        {\n            var data = (string)value;\n            if (string.IsNullOrEmpty(data))\n            {\n                throw new COMException(\"String must not be empty\\r\\n\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ObjectState.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public enum ObjectState\n    {\n        Starting = 0,\n        Started = 1,\n        Stopping = 2,\n        Stopped = 3,\n        Unknown = 4\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/OverrideMode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\n\nnamespace Microsoft.Web.Administration\n{\n    [Obfuscation(Exclude = true)]\n    public enum OverrideMode\n    {\n        Unknown = 0,\n        Inherit = 1,\n        Allow = 2,\n        Deny = 3\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/PipelineState.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public enum PipelineState\n    {\n        Unknown = 0,\n        BeginRequest = 1,\n        AuthenticateRequest = 2,\n        AuthorizeRequest = 4,\n        ResolveRequestCache = 8,\n        MapRequestHandler = 16,\n        AcquireRequestState = 32,\n        PreExecuteRequestHandler = 64,\n        ExecuteRequestHAndler = 128,\n        ReleaseRequestState = 256,\n        UpdateRequestCache = 512,\n        LogRequest = 1024,\n        EndRequest = 2048,\n        SendResponse = 536870912\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ProcessModelIdentityType.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public enum ProcessModelIdentityType\n    {\n        LocalSystem = 0,\n        LocalService = 1,\n        NetworkService = 2,\n        SpecificUser = 3,\n        ApplicationPoolIdentity = 4\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ProcessModelLogEventOnProcessModel.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    [Flags]\n    public enum ProcessModelLogEventOnProcessModel\n    {\n        None = 0,\n        IdleTimeout = 1\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ProcessorAction.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Administration\n{\n    public enum ProcessorAction : long\n    {\n        [Description(\"NoAction\")]\n        NoAction = 0,\n\n        [Description(\"KillW3wp\")]\n        KillW3wp = 1,\n\n        [Description(\"Throttle\")]\n        Throttle = 2,\n\n        [Description(\"ThrottleUnderload\")]\n        ThrottleUnderLoad = 3\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright(C) Lex Li 2014-2022. All rights reserved.\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"ea1e758e-6c2e-4ed2-96eb-4427af7a76e7\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"JexusManager.Shared, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"JexusManager.Features.Certificates, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"JexusManager.Features.HttpApi, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"JexusManager.Features.HttpErrors, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"JexusManager.Features.Logging, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"JexusManager.Features.TraceFailedRequests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"CertificateInstaller, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "Microsoft.Web.Administration/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Microsoft.Web.Administration.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"15.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Microsoft.Web.Administration.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to                      \n        ///&lt;!--\n        ///\n        ///    .NET Framework configuration schema (beyond ASP.NET).\n        ///    \n        ///    Please do not edit this file. To add configuration sections to the schema,\n        ///    put them in .xml files similar to this one, in this directory. They will\n        ///    be picked up automatically at application pool startup.\n        ///\n        ///--&gt;\n        ///&lt;configSchema&gt;\n        ///    &lt;sectionSchema name=&quot;appSettings&quot;&gt;\n        ///        &lt;attribute name=&quot;file&quot; type=&quot;string&quot; /&gt;\n        ///        &lt;collection addElement=&quot;add&quot; removeElement=&quot;remove&quot; clearElement=&quot;clear&quot;&gt;\n        ///   [rest of string was truncated]&quot;;.\n        /// </summary>\n        internal static string FX_schema {\n            get {\n                return ResourceManager.GetString(\"FX_schema\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &lt;!--\n        ///\n        ///    IIS configuration schema.\n        ///\n        ///    Please do not edit this file. To add configuration sections to the schema,\n        ///    put them in .xml files similar to this one, in this directory. They will\n        ///    be picked up automatically at application pool startup.\n        ///\n        ///--&gt;\n        ///\n        ///&lt;configSchema&gt;\n        ///\n        ///  &lt;!--\n        ///\n        ///    The schema for each configuration section is defined in a &lt;sectionSchema&gt;\n        ///    XML element. There is no schema definition for section groups.\n        ///\n        ///    The following format is used to document the schema:\n        ///    &lt;att [rest of string was truncated]&quot;;.\n        /// </summary>\n        internal static string IIS_schema {\n            get {\n                return ResourceManager.GetString(\"IIS_schema\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n        ///&lt;!--\n        ///\n        ///    IIS configuration sections.\n        ///\n        ///    For schema documentation, see\n        ///    %IIS_BIN%\\config\\schema\\IIS_schema.xml.\n        ///    \n        ///    Please make a backup of this file before making any changes to it.\n        ///\n        ///    NOTE: The following environment variables are available to be used\n        ///          within this file and are understood by the IIS Express.\n        ///\n        ///          %IIS_USER_HOME% - The IIS Express home directory for the user\n        ///          %IIS_SITES_HOME% - The default home directory [rest of string was truncated]&quot;;.\n        /// </summary>\n        internal static string original {\n            get {\n                return ResourceManager.GetString(\"original\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &lt;!--\n        ///    \n        ///    IIS URL Rewrite configuration schema.\n        ///    \n        ///    ** Please DO NOT edit this file yourself. **\n        ///    \n        ///    If you want to add configuration sections to the schema, you may place \n        ///    them in .xml files similar to this one, in this directory. They will be \n        ///    picked up automatically on startup.\n        ///\n        ///--&gt;\n        ///\n        ///&lt;configSchema&gt;\n        ///  &lt;sectionSchema name=&quot;system.webServer/rewrite/globalRules&quot;&gt;\n        ///    &lt;collection addElement=&quot;rule&quot; clearElement=&quot;clear&quot; removeElement=&quot;remove&quot;&gt;\n        ///      &lt;attribute name=&quot;name&quot; ty [rest of string was truncated]&quot;;.\n        /// </summary>\n        internal static string rewrite_schema {\n            get {\n                return ResourceManager.GetString(\"rewrite_schema\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"FX_schema\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\FX_schema.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"IIS_schema\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\IIS_schema.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n  <data name=\"original\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\original.config;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>\n  </data>\n  <data name=\"rewrite_schema\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\rewrite_schema.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>\n  </data>\n</root>"
  },
  {
    "path": "Microsoft.Web.Administration/ProtectedConfiguration.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n// \tChris Toshok (toshok@ximian.com)\n//\n// Copyright (C) 2005 Novell, Inc (http://www.novell.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n\nnamespace Microsoft.Web.Administration\n{\n    internal class ProtectedConfiguration\n    {\n        private readonly ConfigurationSection _section;\n\n        private ProtectedConfigurationSection _inner;\n\n        public const string DataProtectionProviderName = \"DataProtectionConfigurationProvider\";\n        public const string ProtectedDataSectionName = \"configProtectedData\";\n        public const string RsaProviderName = \"RsaProtectedConfigurationProvider\";\n\n        public ProtectedConfiguration(ConfigurationSection section)\n        {\n            _section = section;\n        }\n\n\n        public string DefaultProvider\n        {\n            get { return Section.DefaultProvider; }\n        }\n\n        public ProtectedConfigurationProviderCollection Providers\n        {\n            get { return Section.GetAllProviders(); }\n        }\n\n        internal ProtectedConfigurationSection Section\n        {\n            get\n            {\n                return _inner ?? (_inner = new ProtectedConfigurationSection(_section));\n            }\n        }\n\n        internal ProtectedConfigurationProvider GetProvider(string name, bool throwOnError)\n        {\n            ProtectedConfigurationProvider p = Providers[name];\n\n            if (p == null && throwOnError)\n                throw new ServerManagerException(string.Format(\"The protection provider '{0}' was not found.\", name));\n\n            return p;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ProtectedConfigurationProvider.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n//\tDuncan Mak (duncan@ximian.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n// Copyright (C) 2004 Novell, Inc (http://www.novell.com)\n//\n\nusing System;\nusing System.Collections.Generic;\nusing System.Reflection;\nusing Microsoft.ApplicationHost;\n\nnamespace Microsoft.Web.Administration\n{\n    internal class ProtectedConfigurationProvider //: ProviderBase\n    {\n        private readonly string _sessionKey;\n        private readonly bool _useOAEP;\n        private readonly string _keyContainerName;\n        private readonly bool _useMachineContainer;\n        private readonly string _cspProviderName;\n        private readonly string _providerType;\n        private readonly Type _providerClassType;\n\n        private IEncryptionProvider _nativeProvider;\n        private bool _providerInitialized = false;\n        private readonly object _lockObject = new object();\n\n        // Cache of loaded provider types to avoid repeated lookups\n        private static readonly Dictionary<string, Type> _loadedProviderTypes = new Dictionary<string, Type>(StringComparer.OrdinalIgnoreCase);\n\n        public ProtectedConfigurationProvider(ProviderSettings ps)\n        {\n            Name = (string)ps[\"name\"];\n            _sessionKey = (string)ps[\"sessionKey\"];\n            var value = ps[\"useOAEP\"];\n            _useOAEP = value != null && bool.Parse(value.ToString());\n            _keyContainerName = (string)ps[\"keyContainerName\"];\n            var value2 = ps[\"useMachineContainer\"];\n            _useMachineContainer = value2 != null && bool.Parse(value2.ToString());\n            _cspProviderName = (string)ps[\"cspProviderName\"];\n            _providerType = (string)ps[\"type\"];\n\n            try\n            {\n                // Determine which type to use - if providerType is empty, try to use cspProviderName\n                string typeToLoad = _providerType;\n                if (!string.IsNullOrEmpty(typeToLoad))\n                {\n                    // Check if we've already loaded this type before\n                    if (_loadedProviderTypes.TryGetValue(typeToLoad, out _providerClassType))\n                    {\n                        System.Diagnostics.Debug.WriteLine($\"Using cached provider type: {typeToLoad}\");\n                    }\n                }\n            }\n            catch (Exception ex)\n            {\n                System.Diagnostics.Debug.WriteLine($\"Error loading provider type: {ex.Message}\");\n                // Fall back to our default implementation if there's any error\n            }\n        }\n\n        private void InitializeProvider()\n        {\n            // Check if provider is already initialized\n            if (_providerInitialized)\n                return;\n\n            // Use a lock to prevent multiple threads from initializing the provider simultaneously\n            lock (_lockObject)\n            {\n                // Double-check in case another thread initialized it while we were waiting\n                if (_providerInitialized)\n                    return;\n\n                try\n                {\n                    if (_providerClassType != null)\n                    {\n                        try\n                        {\n                            // Find the constructors\n                            var constructors = _providerClassType.GetConstructors(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic);\n\n                            if (constructors.Length > 0)\n                            {\n                                // Try to find a constructor that takes parameters matching what we have\n                                foreach (var constructor in constructors)\n                                {\n                                    var parameters = constructor.GetParameters();\n\n                                    // Look for the constructor with 5 parameters (sessionKey, keyContainerName, cspProviderName, useOAEP, useMachineContainer)\n                                    // as seen in the CngEncryptionProvider class\n                                    if (parameters.Length == 5)\n                                    {\n                                        _nativeProvider = (IEncryptionProvider)constructor.Invoke(new object[] {\n                                            _sessionKey,\n                                            _keyContainerName,\n                                            _cspProviderName,\n                                            _useOAEP,\n                                            _useMachineContainer\n                                        });\n\n                                        System.Diagnostics.Debug.WriteLine($\"Successfully loaded native provider: {_providerType}\");\n                                        break;\n                                    }\n                                }\n                            }\n                        }\n                        catch (Exception ex)\n                        {\n                            System.Diagnostics.Debug.WriteLine($\"Error creating provider instance: {ex.Message}\");\n                        }\n                    }\n                }\n                catch (Exception ex)\n                {\n                    System.Diagnostics.Debug.WriteLine($\"Error initializing native provider: {ex.Message}\");\n                    // Fall back to our default implementation if there's any error\n                }\n                finally\n                {\n                    // Mark as initialized even if it failed, so we don't keep trying\n                    _providerInitialized = true;\n                }\n            }\n        }\n\n        public string Decrypt(string data)\n        {\n            InitializeProvider();\n            return _nativeProvider?.Decrypt(data) ?? data;\n        }\n\n        public string Encrypt(string data)\n        {\n            InitializeProvider();\n            return _nativeProvider?.Encrypt(data) ?? data;\n        }\n\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ProtectedConfigurationProviderCollection.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n// \tChris Toshok (toshok@ximian.com)\n//\n// Copyright (C) 2005 Novell, Inc (http://www.novell.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Administration\n{\n    internal class ProtectedConfigurationProviderCollection\n    {\n        internal readonly Dictionary<string, ProtectedConfigurationProvider> Items = new Dictionary<string, ProtectedConfigurationProvider>();\n\n        public ProtectedConfigurationProvider this[string name]\n        {\n            get\n            {\n                return Items.ContainsKey(name) ? Items[name] : null;\n            }\n        }\n\n        public void Add(ProtectedConfigurationProvider provider)\n        {\n            Items.Add(provider.Name, provider);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ProtectedConfigurationSection.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n// \tDuncan Mak (duncan@ximian.com)\n//\tChris Toshok (toshok@ximian.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)\n//\n\nnamespace Microsoft.Web.Administration\n{\n    internal sealed class ProtectedConfigurationSection\n    {\n        private ProtectedConfigurationProviderCollection _providers;\n\n        public ProtectedConfigurationSection(ConfigurationSection section)\n        {\n            DefaultProvider = (string)section[\"defaultProvider\"];\n            Providers = new ProviderSettingsCollection(section.GetCollection(\"providers\"));\n        }\n\n        public string DefaultProvider { get; set; }\n\n        public ProviderSettingsCollection Providers\n        {\n            get;\n        }\n\n        internal string EncryptSection(string clearXml, ProtectedConfigurationProvider protectionProvider)\n        {\n            var encryptedNode = protectionProvider.Encrypt(clearXml);\n            return encryptedNode;\n        }\n\n        internal string DecryptSection(string encryptedXml, ProtectedConfigurationProvider protectionProvider)\n        {\n            var decryptedNode = protectionProvider.Decrypt(encryptedXml);\n            return decryptedNode;\n        }\n\n        internal ProtectedConfigurationProviderCollection GetAllProviders()\n        {\n            if (_providers == null)\n            {\n                _providers = new ProtectedConfigurationProviderCollection();\n\n                foreach (ProviderSettings ps in Providers)\n                {\n                    var provider = InstantiateProvider(ps);\n                    if (provider != null)\n                    {\n                        _providers.Add(provider);\n                    }\n                }\n            }\n\n            return _providers;\n        }\n\n        private ProtectedConfigurationProvider InstantiateProvider(ProviderSettings ps)\n        {\n            // Here we create a new instance of our dynamic provider\n            return new ProtectedConfigurationProvider(ps);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ProtectedProviderSettings.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n// \tChris Toshok (toshok@ximian.com)\n//\n// Copyright (C) 2005 Novell, Inc (http://www.novell.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n\nusing System.Xml.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public class ProtectedProviderSettings : ConfigurationElement\n    {\n        //static ConfigurationProperty providersProp;\n        //static ConfigurationPropertyCollection properties;\n\n        //protected internal override ConfigurationPropertyCollection Properties {\n        //\tget { return properties; }\n        //}\n\n        //[ConfigurationProperty (\"\", Options = ConfigurationPropertyOptions.IsDefaultCollection)]\n        //public ProviderSettingsCollection Providers {\n        //\tget { return (ProviderSettingsCollection) base[providersProp]; }\n        //}\n        internal ProtectedProviderSettings(ConfigurationElement element, string name, ConfigurationElementSchema schema, ConfigurationElement parent, XElement entity)\n            : base(element, name, schema, parent, entity, null)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ProviderSettings.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n//\tDuncan Mak (duncan@ximian.com)\n//      Lluis Sanchez Gual (lluis@novell.com)\n//      Chris Toshok (toshok@ximian.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n// Copyright (C) 2004,2005 Novell, Inc (http://www.novell.com)\n//\n\nusing System.Xml.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ProviderSettings : ConfigurationElement\n    {\n        //ConfigNameValueCollection parameters;\n\n        //static ConfigurationProperty nameProp;\n        //static ConfigurationProperty typeProp;\n        //static ConfigurationPropertyCollection properties;\n\n        //public ProviderSettings ()\n        //{\n        //}\n\n        //public ProviderSettings (string name, string type)\n        //{\n        //\tName = name;\n        //\tType = type;\n        //}\n\n        internal ProviderSettings(ConfigurationElement element, string name, ConfigurationElementSchema schema, ConfigurationElement parent, XElement entity)\n    : base(element, name, schema, parent, entity, null)\n        {\n        }\n\n        //protected override bool OnDeserializeUnrecognizedAttribute (string name, string value)\n        //{\n        //\tif (parameters == null)\n        //\t\tparameters = new ConfigNameValueCollection ();\n        //\tparameters [name] = value;\n        //\tparameters.ResetModified ();\n        //\treturn true;\n        //}\n\n        //protected internal override bool IsModified ()\n        //{\n        //\treturn (parameters != null && parameters.IsModified) || base.IsModified ();\n        //}\n\n        //protected internal override void Reset (ConfigurationElement parentElement)\n        //{\n        //\tbase.Reset (parentElement);\n\n        //\tProviderSettings sec = parentElement as ProviderSettings;\n        //\tif (sec != null && sec.parameters != null)\n        //\t\tparameters = new ConfigNameValueCollection (sec.parameters);\n        //\telse\n        //\t\tparameters = null;\n        //}\n\n        //protected internal override void Unmerge (\n        //\t\tConfigurationElement source, ConfigurationElement parent,\n        //\t\tConfigurationSaveMode updateMode)\n        //{\n        //\tbase.Unmerge (source, parent, updateMode);\n        //}\n\n        //[ConfigurationProperty (\"name\", Options = ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsKey)]\n        //public string Name {\n        //\tget { return (string) this [nameProp]; }\n        //\tset { this [nameProp] = value; }\n        //}\n\n        //[ConfigurationProperty (\"type\", Options = ConfigurationPropertyOptions.IsRequired)]\n        //public string Type {\n        //\tget { return (string) this [typeProp]; }\n        //\tset { this [typeProp] = value; }\n        //}\n\n        //protected internal override ConfigurationPropertyCollection Properties {\n        //\tget { return properties; }\n        //}\n\n        //public NameValueCollection Parameters {\n        //\tget {\n        //\t\tif (parameters == null)\n        //\t\t\tparameters = new ConfigNameValueCollection ();\n        //\t\treturn parameters;\n        //\t}\n        //}\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ProviderSettingsCollection.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n//\n//\n// Authors:\n//\tLluis Sanchez Gual (lluis@novell.com)\n//\n// (C) 2004 Novell, Inc (http://www.novell.com)\n//\n\n//\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n// \n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n//\n\nnamespace Microsoft.Web.Administration\n{\n    //[ConfigurationCollection (typeof(ProviderSettings), CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap)]\n    public sealed class ProviderSettingsCollection : ConfigurationElementCollection\n    {\n        public ProviderSettingsCollection(ConfigurationElementCollection collection)\n            : base(collection.ElementTagName, collection.Schema, collection.ParentElement, collection.InnerEntity, null)\n        {\n            foreach (ConfigurationElement element in collection)\n            {\n                InternalAdd(new ProviderSettings(element, null, null, element.ParentElement, element.InnerEntity));\n            }\n        }\n\n        //static ConfigurationPropertyCollection props = new ConfigurationPropertyCollection ();\n\n        //public void Add (ProviderSettings provider)\n        //{\n        //\tBaseAdd (provider);\n        //}\n\n        //public void Clear ()\n        //{\n        //\tBaseClear ();\n        //}\n\n        //protected override ConfigurationElement CreateNewElement ()\n        //{\n        //\treturn new ProviderSettings ();\n        //}\n\n        //protected override object GetElementKey (ConfigurationElement element)\n        //{\n        //\treturn ((ProviderSettings)element).Name;\n        //}\n\n        //public void Remove (string key)\n        //{\n        //\tBaseRemove (key);\n        //}\n\n        //public ProviderSettings this [int n]\n        //{\n        //\tget { return (ProviderSettings) BaseGet (n); }\n        //\tset { BaseAdd (n, value); }\n        //}\n\n        //public new ProviderSettings this [string key]\n        //{\n        //\tget { return (ProviderSettings) BaseGet (key); }\n        //}\n\n        //protected internal override ConfigurationPropertyCollection Properties {\n        //\tget { return props; }\n        //}\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/PublicNativeMethods.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Runtime.InteropServices;\nusing System.Security.Principal;\nusing Microsoft.Win32;\n\nnamespace Microsoft.Web.Administration\n{\n    public class PublicNativeMethods\n    {\n        #region UAC\n        public const uint STANDARD_RIGHTS_REQUIRED = 0x000F0000;\n        public const uint TOKEN_ASSIGN_PRIMARY = 0x0001;\n        public const uint TOKEN_DUPLICATE = 0x0002;\n        public const uint TOKEN_IMPERSONATE = 0x0004;\n        public const uint TOKEN_QUERY = 0x0008;\n        public const uint TOKEN_QUERY_SOURCE = 0x0010;\n        public const uint TOKEN_ADJUST_PRIVILEGES = 0x0020;\n        public const uint TOKEN_ADJUST_GROUPS = 0x0040;\n        public const uint TOKEN_ADJUST_DEFAULT = 0x0080;\n        public const uint TOKEN_ADJUST_SESSIONID = 0x0100;\n\n        public const uint TOKEN_ALL_ACCESS_P = (STANDARD_RIGHTS_REQUIRED |\n                                  TOKEN_ASSIGN_PRIMARY |\n                                  TOKEN_DUPLICATE |\n                                  TOKEN_IMPERSONATE |\n                                  TOKEN_QUERY |\n                                  TOKEN_QUERY_SOURCE |\n                                  TOKEN_ADJUST_PRIVILEGES |\n                                  TOKEN_ADJUST_GROUPS |\n                                  TOKEN_ADJUST_DEFAULT);\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        static extern bool OpenProcessToken(IntPtr ProcessHandle,\n            UInt32 DesiredAccess, out IntPtr TokenHandle);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        static extern IntPtr GetCurrentProcess();\n\n        [DllImport(\"advapi32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        static extern bool GetTokenInformation(\n            IntPtr TokenHandle,\n            TOKEN_INFORMATION_CLASS TokenInformationClass,\n            IntPtr TokenInformation,\n            uint TokenInformationLength,\n            out uint ReturnLength);\n\n        [DllImport(\"kernel32.dll\", SetLastError = true)]\n        [return: MarshalAs(UnmanagedType.Bool)]\n        static extern bool CloseHandle(IntPtr hObject);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Ansi, ExactSpelling = false)]\n        public static extern IntPtr LoadLibrary(string lpFileName);\n\n        [DllImport(\"kernel32.dll\", CharSet = CharSet.Ansi, ExactSpelling = true)]\n        public static extern IntPtr GetProcAddress(IntPtr hmodule, string procName);\n\n        /// <summary>\n        ///\n        ///The possible values are:\n\n        ///TRUE - the current process is elevated.\n        ///\tThis value indicates that either UAC is enabled, and the process was elevated by \n        ///\tthe administrator, or that UAC is disabled and the process was started by a user \n        ///\twho is a member of the Administrators group.\n\n        ///FALSE - the current process is not elevated (limited).\n        ///\tThis value indicates that either UAC is enabled, and the process was started normally, \n        ///\twithout the elevation, or that UAC is disabled and the process was started by a standard user. \n\n        /// </summary>\n        /// <returns>Bool indicating whether the current process is elevated</returns>\n        public static bool IsProcessElevated //= NULL )\n        {\n            get\n            {\n                if (Helper.IsRunningOnMono())\n                {\n                    return false;\n                }\n\n                bool bRetVal = false;\n                IntPtr hToken = IntPtr.Zero;\n                IntPtr hProcess = GetCurrentProcess();\n\n                if (hProcess == IntPtr.Zero)\n                {\n                    throw new VistaToolsException(\"Error getting current process handle\");\n                }\n\n                bRetVal = OpenProcessToken(hProcess, TOKEN_QUERY, out hToken);\n\n\n                if (!bRetVal)\n                {\n                    throw new VistaToolsException(\"Error opening process token\");\n                }\n                try\n                {\n\n                    TOKEN_ELEVATION te;\n                    te.TokenIsElevated = 0;\n\n                    UInt32 dwReturnLength = 0;\n                    Int32 teSize = Marshal.SizeOf(te);\n                    IntPtr tePtr = Marshal.AllocHGlobal(teSize);\n                    try\n                    {\n                        Marshal.StructureToPtr(te, tePtr, true);\n\n                        bRetVal = GetTokenInformation(hToken, TOKEN_INFORMATION_CLASS.TokenElevation, tePtr, (UInt32)teSize, out dwReturnLength);\n\n                        if ((!bRetVal) | (teSize != dwReturnLength))\n                        {\n                            throw new VistaToolsException(\"Error getting token information\");\n                        }\n\n                        te = (TOKEN_ELEVATION)Marshal.PtrToStructure(tePtr, typeof(TOKEN_ELEVATION));\n\n                    }\n                    finally\n                    {\n                        Marshal.FreeHGlobal(tePtr);\n                    }\n\n                    return (te.TokenIsElevated != 0);\n\n                }\n                finally\n                {\n                    CloseHandle(hToken);\n                }\n\n            }\n        }\n\n\n        /// <summary>\n        /// TokenElevationTypeDefault - User is not using a \"split\" token. \n        ///This value indicates that either UAC is disabled, or the process is started\n        ///by a standard user (not a member of the Administrators group).\n\n        ///The following two values can be returned only if both the UAC is enabled and\n        ///the user is a member of the Administrator's group (that is, the user has a \"split\" token):\n\n        ///TokenElevationTypeFull - the process is running elevated. \n\n        ///TokenElevationTypeLimited - the process is not running elevated.\n        /// </summary>\n        /// <returns>TokenElevationType</returns>\n        public static TOKEN_ELEVATION_TYPE GetElevationType()\n        {\n            bool bRetVal = false;\n            IntPtr hToken = IntPtr.Zero;\n            IntPtr hProcess = GetCurrentProcess();\n\n            if (hProcess == IntPtr.Zero)\n            {\n                throw new VistaToolsException(\"Error getting current process handle\");\n            }\n\n            bRetVal = OpenProcessToken(hProcess, TOKEN_QUERY, out hToken);\n\n\n            if (!bRetVal)\n            {\n                throw new VistaToolsException(\"Error opening process token\");\n            }\n            try\n            {\n\n                TOKEN_ELEVATION_TYPE tet = TOKEN_ELEVATION_TYPE.TokenElevationTypeDefault;\n\n                UInt32 dwReturnLength = 0;\n                UInt32 tetSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf((int)tet);\n                IntPtr tetPtr = Marshal.AllocHGlobal((int)tetSize);\n                try\n                {\n\n                    bRetVal = GetTokenInformation(hToken, TOKEN_INFORMATION_CLASS.TokenElevationType, tetPtr, tetSize, out dwReturnLength);\n\n                    if ((!bRetVal) | (tetSize != dwReturnLength))\n                    {\n                        throw new VistaToolsException(\"Error getting token information\");\n                    }\n\n                    tet = (TOKEN_ELEVATION_TYPE)Marshal.ReadInt32(tetPtr);\n                }\n                finally\n                {\n                    Marshal.FreeHGlobal(tetPtr);\n                }\n\n                return tet;\n\n            }\n            finally\n            {\n                CloseHandle(hToken);\n            }\n\n        }\n\n        public struct TOKEN_ELEVATION\n        {\n            public UInt32 TokenIsElevated;\n        }\n\n        public enum TOKEN_ELEVATION_TYPE\n        {\n            TokenElevationTypeDefault = 1,\n            TokenElevationTypeFull = 2,\n            TokenElevationTypeLimited = 3\n        }\n\n        public enum TOKEN_INFORMATION_CLASS\n        {\n            TokenUser = 1,\n            TokenGroups = 2,\n            TokenPrivileges = 3,\n            TokenOwner = 4,\n            TokenPrimaryGroup = 5,\n            TokenDefaultDacl = 6,\n            TokenSource = 7,\n            TokenType = 8,\n            TokenImpersonationLevel = 9,\n            TokenStatistics = 10,\n            TokenRestrictedSids = 11,\n            TokenSessionId = 12,\n            TokenGroupsAndPrivileges = 13,\n            TokenSessionReference = 14,\n            TokenSandBoxInert = 15,\n            TokenAuditPolicy = 16,\n            TokenOrigin = 17,\n            TokenElevationType = 18,\n            TokenLinkedToken = 19,\n            TokenElevation = 20,\n            TokenHasRestrictions = 21,\n            TokenAccessInformation = 22,\n            TokenVirtualizationAllowed = 23,\n            TokenVirtualizationEnabled = 24,\n            TokenIntegrityLevel = 25,\n            TokenUIAccess = 26,\n            TokenMandatoryPolicy = 27,\n            TokenLogonSid = 28,\n            MaxTokenInfoClass = 29  // MaxTokenInfoClass should always be the last enum\n        }\n\n        //\n        // Token Specific Access Rights.\n        //\n\n\n\n        //Exception class for HtmlEditor\n        public class VistaToolsException : ApplicationException\n        {\n            // Default constructor\n            public VistaToolsException()\n            {\n            }\n\n            // Constructor accepting a single string message\n            public VistaToolsException(string message)\n                : base(message)\n            {\n            }\n\n            // Constructor accepting a string message and an \n            // inner exception which will be wrapped by this \n            // custom exception class\n            public VistaToolsException(string message,\n                Exception inner)\n                : base(message, inner)\n            {\n            }\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/RecyclingLogEventOnRecycle.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    [Flags]\n    public enum RecyclingLogEventOnRecycle\n    {\n        None = 0,\n        Time = 1,\n        Requests = 2,\n        Schedule = 4,\n        Memory = 8,\n        IsapiUnhealthy = 16,\n        OnDemand = 32,\n        ConfigChange = 64,\n        PrivateMemory = 128\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Request.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class Request : ConfigurationElement\n    {\n        internal Request()\n            : base(null, null, null, null, null, null)\n        { }\n\n        public string ClientIPAddr { get; private set; }\n        public string ConnectionId { get; private set; }\n        public string CurrentModule { get; private set; }\n        public string HostName { get; private set; }\n        public string LocalIPAddress { get; private set; }\n        public int LocalPort { get; private set; }\n        public PipelineState PipelineState { get; private set; }\n        public int ProcessId { get; private set; }\n        public string RequestId { get; private set; }\n        public int SiteId { get; private set; }\n        public int TimeElapsed { get; private set; }\n        public int TimeInModule { get; private set; }\n        public int TimeInState { get; private set; }\n        public string Url { get; private set; }\n        public string Verb { get; private set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/RequestCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class RequestCollection : ConfigurationElementCollectionBase<Request>\n    {\n        internal RequestCollection()\n        { }\n\n        protected override Request CreateNewElement(string elementTagName)\n        {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/RequireTrimmedStringValidator.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Web.Administration\n{\n    [Obfuscation(Exclude = true, ApplyToMembers = false)]\n    internal class RequireTrimmedStringValidator : ConfigurationValidatorBase\n    {\n        public override void Validate(object value)\n        {\n            var data = (string)value;\n            if (data.StartsWith(\" \", System.StringComparison.Ordinal) || data.EndsWith(\" \", System.StringComparison.Ordinal))\n            {\n                throw new COMException(\"TODO\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Resources/FX_schema.xml",
    "content": "                     \n<!--\n\n    .NET Framework configuration schema (beyond ASP.NET).\n    \n    Please do not edit this file. To add configuration sections to the schema,\n    put them in .xml files similar to this one, in this directory. They will\n    be picked up automatically at application pool startup.\n\n-->\n<configSchema>\n    <sectionSchema name=\"appSettings\">\n        <attribute name=\"file\" type=\"string\" />\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"key\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"value\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"configProtectedData\">\n        <attribute name=\"defaultProvider\" type=\"string\" defaultValue=\"RsaProtectedConfigurationProvider\" />\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"connectionStrings\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"connectionString\" required=\"true\" type=\"string\" />\n            <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"providerName\" type=\"string\" defaultValue=\"System.Data.SqlClient\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.codedom\">\n        <element name=\"compilers\">\n            <collection addElement=\"compiler\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"language\" type=\"string\" isCombinedKey=\"true\" />\n                <attribute name=\"extension\" type=\"string\" isCombinedKey=\"true\" />\n                <attribute name=\"type\" type=\"string\" />\n                <attribute name=\"warningLevel\" type=\"int\" />\n                <attribute name=\"compilerOptions\" type=\"string\" />\n                <collection addElement=\"providerOption\" >\n                    <attribute name=\"name\" type=\"string\"  isCombinedKey=\"true\" />\n                    <attribute name=\"value\" type=\"string\" isCombinedKey=\"true\" />\n                </collection>\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.data\">\n        <element name=\"DbProviderFactories\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"invariant\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n                <attribute name=\"name\" type=\"string\" />\n                <attribute name=\"description\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.diagnostics\">\n        <element name=\"assert\">\n            <attribute name=\"assertuienabled\" type=\"bool\" defaultValue=\"True\" />\n            <attribute name=\"logfilename\" type=\"string\" />\n        </element>\n        <element name=\"performanceCounters\">\n            <attribute name=\"filemappingsize\" type=\"int\" defaultValue=\"524288\" />\n        </element>\n        <element name=\"sharedListeners\">\n            <collection addElement=\"add\" allowDuplicates=\"true\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n                <attribute name=\"traceOutputOptions\" type=\"flags\" defaultValue=\"None\">\n                    <flag name=\"None\" value=\"0\" />\n                    <flag name=\"LogicalOperationStack\" value=\"1\" />\n                    <flag name=\"DateTime\" value=\"2\" />\n                    <flag name=\"Timestamp\" value=\"4\" />\n                    <flag name=\"ProcessId\" value=\"8\" />\n                    <flag name=\"ThreadId\" value=\"16\" />\n                    <flag name=\"Callstack\" value=\"32\" />\n                </attribute>\n                <attribute name=\"initializeData\" type=\"string\" defaultValue=\"\" />\n                <attribute name=\"type\" type=\"string\" required=\"true\" defaultValue=\"\" />\n                <element name=\"filter\">\n                    <attribute name=\"initializeData\" type=\"string\" />\n                    <attribute name=\"type\" type=\"string\" />\n                </element>\n            </collection>\n        </element>\n        <element name=\"sources\">\n            <collection addElement=\"source\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" type=\"string\" required=\"true\" defaultValue=\"\" />\n                <attribute name=\"switchName\" type=\"string\" />\n                <attribute name=\"switchValue\" type=\"string\" />\n                <attribute name=\"switchType\" type=\"string\" />\n                <element name=\"listeners\">\n                    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n                        <attribute name=\"traceOutputOptions\" type=\"flags\" defaultValue=\"None\">\n                            <flag name=\"None\" value=\"0\" />\n                            <flag name=\"LogicalOperationStack\" value=\"1\" />\n                            <flag name=\"DateTime\" value=\"2\" />\n                            <flag name=\"Timestamp\" value=\"4\" />\n                            <flag name=\"ProcessId\" value=\"8\" />\n                            <flag name=\"ThreadId\" value=\"16\" />\n                            <flag name=\"Callstack\" value=\"32\" />\n                        </attribute>\n                        <attribute name=\"initializeData\" type=\"string\" defaultValue=\"\" />\n                        <attribute name=\"type\" type=\"string\" required=\"true\" defaultValue=\"\" />\n                        <element name=\"filter\">\n                            <attribute name=\"initializeData\" type=\"string\" />\n                            <attribute name=\"type\" type=\"string\" />\n                        </element>\n                    </collection>\n                </element>\n            </collection>\n        </element>\n        <element name=\"switches\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" defaultValue=\"\" />\n                <attribute name=\"value\" type=\"string\" required=\"true\" />\n            </collection>\n        </element>\n        <element name=\"trace\">\n            <attribute name=\"autoflush\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"indentsize\" type=\"int\" defaultValue=\"4\" />\n            <element name=\"listeners\">\n                <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                    <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n                    <attribute name=\"traceOutputOptions\" type=\"flags\" defaultValue=\"None\">\n                        <flag name=\"None\" value=\"0\" />\n                        <flag name=\"LogicalOperationStack\" value=\"1\" />\n                        <flag name=\"DateTime\" value=\"2\" />\n                        <flag name=\"Timestamp\" value=\"4\" />\n                        <flag name=\"ProcessId\" value=\"8\" />\n                        <flag name=\"ThreadId\" value=\"16\" />\n                        <flag name=\"Callstack\" value=\"32\" />\n                    </attribute>\n                    <attribute name=\"initializeData\" type=\"string\" defaultValue=\"\" />\n                    <attribute name=\"type\" type=\"string\" required=\"true\" defaultValue=\"\" />\n                    <element name=\"filter\">\n                        <attribute name=\"initializeData\" type=\"string\" />\n                        <attribute name=\"type\" type=\"string\" />\n                    </element>\n                </collection>\n            </element>\n            <attribute name=\"useGlobalLock\" type=\"bool\" defaultValue=\"True\" />\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.windows.forms\">\n        <attribute name=\"jitDebugging\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.net/authenticationModules\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"type\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.net/connectionManagement\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"address\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"maxconnection\" required=\"true\" type=\"int\" defaultValue=\"1\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.net/defaultProxy\">\n        <element name=\"bypasslist\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowDuplicates=\"true\">\n                <attribute name=\"address\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"True\" />\n        <element name=\"module\">\n            <attribute name=\"type\" type=\"string\" />\n        </element>\n        <element name=\"proxy\">\n            <attribute name=\"autoDetect\" type=\"enum\" defaultValue=\"Unspecified\">\n                <enum name=\"false\" value=\"0\" />\n                <enum name=\"true\" value=\"1\" />\n                <enum name=\"Unspecified\" value=\"-1\" />\n            </attribute>\n            <attribute name=\"bypassonlocal\" type=\"enum\" defaultValue=\"Unspecified\">\n                <enum name=\"false\" value=\"0\" />\n                <enum name=\"true\" value=\"1\" />\n                <enum name=\"Unspecified\" value=\"-1\" />\n            </attribute>\n            <attribute name=\"proxyaddress\" type=\"string\" />\n            <attribute name=\"scriptLocation\" type=\"string\" />\n            <attribute name=\"usesystemdefault\" type=\"enum\" defaultValue=\"Unspecified\">\n                <enum name=\"false\" value=\"0\" />\n                <enum name=\"true\" value=\"1\" />\n                <enum name=\"Unspecified\" value=\"-1\" />\n            </attribute>\n        </element>\n        <attribute name=\"useDefaultCredentials\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.net/requestCaching\">\n        <element name=\"defaultFtpCachePolicy\">\n            <attribute name=\"policyLevel\" type=\"enum\" defaultValue=\"Default\">\n                <enum name=\"Default\" value=\"0\" />\n                <enum name=\"BypassCache\" value=\"1\" />\n                <enum name=\"CacheOnly\" value=\"2\" />\n                <enum name=\"CacheIfAvailable\" value=\"3\" />\n                <enum name=\"Revalidate\" value=\"4\" />\n                <enum name=\"Reload\" value=\"5\" />\n                <enum name=\"NoCacheNoStore\" value=\"6\" />\n            </attribute>\n        </element>\n        <element name=\"defaultHttpCachePolicy\">\n            <attribute name=\"maximumAge\" type=\"timeSpan\" defaultValue=\"10675199.02:48:05.4775807\" />\n            <attribute name=\"maximumStale\" type=\"timeSpan\" defaultValue=\"-10675199.02:48:05.4775808\" />\n            <attribute name=\"minimumFresh\" type=\"timeSpan\" defaultValue=\"-10675199.02:48:05.4775808\" />\n            <attribute name=\"policyLevel\" type=\"enum\" defaultValue=\"Default\">\n                <enum name=\"Default\" value=\"0\" />\n                <enum name=\"BypassCache\" value=\"1\" />\n                <enum name=\"CacheOnly\" value=\"2\" />\n                <enum name=\"CacheIfAvailable\" value=\"3\" />\n                <enum name=\"Revalidate\" value=\"4\" />\n                <enum name=\"Reload\" value=\"5\" />\n                <enum name=\"NoCacheNoStore\" value=\"6\" />\n                <enum name=\"CacheOrNextCacheOnly\" value=\"7\" />\n                <enum name=\"Refresh\" value=\"8\" />\n            </attribute>\n        </element>\n        <attribute name=\"defaultPolicyLevel\" type=\"enum\" defaultValue=\"BypassCache\">\n            <enum name=\"Default\" value=\"0\" />\n            <enum name=\"BypassCache\" value=\"1\" />\n            <enum name=\"CacheOnly\" value=\"2\" />\n            <enum name=\"CacheIfAvailable\" value=\"3\" />\n            <enum name=\"Revalidate\" value=\"4\" />\n            <enum name=\"Reload\" value=\"5\" />\n            <enum name=\"NoCacheNoStore\" value=\"6\" />\n        </attribute>\n        <attribute name=\"disableAllCaching\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"isPrivateCache\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"unspecifiedMaximumAge\" type=\"timeSpan\" defaultValue=\"1.00:00:00\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.net/settings\">\n        <element name=\"httpWebRequest\">\n            <attribute name=\"maximumErrorResponseLength\" type=\"int\" defaultValue=\"64\" />\n            <attribute name=\"maximumResponseHeadersLength\" type=\"int\" defaultValue=\"64\" />\n            <attribute name=\"maximumUnauthorizedUploadLength\" type=\"int\" defaultValue=\"-1\" />\n            <attribute name=\"useUnsafeHeaderParsing\" type=\"bool\" defaultValue=\"False\" />\n        </element>\n        <element name=\"ipv6\">\n            <attribute name=\"enabled\" type=\"bool\" defaultValue=\"False\" />\n        </element>\n        <element name=\"performanceCounters\">\n            <attribute name=\"enabled\" type=\"bool\" defaultValue=\"False\" />\n        </element>\n        <element name=\"servicePointManager\">\n            <attribute name=\"checkCertificateName\" type=\"bool\" defaultValue=\"True\" />\n            <attribute name=\"checkCertificateRevocationList\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"dnsRefreshTimeout\" type=\"int\" defaultValue=\"120000\" />\n            <attribute name=\"enableDnsRoundRobin\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"expect100Continue\" type=\"bool\" defaultValue=\"True\" />\n            <attribute name=\"useNagleAlgorithm\" type=\"bool\" defaultValue=\"True\" />\n        </element>\n        <element name=\"socket\">\n            <attribute name=\"alwaysUseCompletionPortsForAccept\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"alwaysUseCompletionPortsForConnect\" type=\"bool\" defaultValue=\"False\" />\n        </element>\n        <element name=\"webProxyScript\">\n            <attribute name=\"downloadTimeout\" type=\"timeSpan\" defaultValue=\"00:02:00\" />\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.net/webRequestModules\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"prefix\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"type\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.net/mailSettings/smtp\">\n        <attribute name=\"deliveryMethod\" type=\"enum\" defaultValue=\"Network\">\n            <enum name=\"Network\" value=\"0\" />\n            <enum name=\"SpecifiedPickupDirectory\" value=\"1\" />\n            <enum name=\"PickupDirectoryFromIis\" value=\"2\" />\n        </attribute>\n        <attribute name=\"from\" type=\"string\" />\n        <element name=\"network\">\n            <attribute name=\"defaultCredentials\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"host\" type=\"string\" />\n            <attribute name=\"password\" type=\"string\" />\n            <attribute name=\"port\" type=\"int\" defaultValue=\"25\" />\n            <attribute name=\"userName\" type=\"string\" />\n        </element>\n        <element name=\"specifiedPickupDirectory\">\n            <attribute name=\"pickupDirectoryLocation\" type=\"string\" />\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.transactions/defaultSettings\">\n        <attribute name=\"distributedTransactionManagerName\" type=\"string\" />\n        <attribute name=\"timeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" defaultValue=\"00:01:00\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.transactions/machineSettings\">\n        <attribute name=\"maxTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" defaultValue=\"00:10:00\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/deployment\">\n        <attribute name=\"retail\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/membership\">\n        <attribute name=\"defaultProvider\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"AspNetSqlMembershipProvider\" />\n        <attribute name=\"hashAlgorithmType\" type=\"string\" />\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <attribute name=\"userIsOnlineTimeWindow\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"1,2147483640,60\" timeSpanFormat=\"minutes\" defaultValue=\"15\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/processModel\">\n        <attribute name=\"autoConfig\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"clientConnectedCheck\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"00:00:05\" />\n        <attribute name=\"comAuthenticationLevel\" type=\"enum\" defaultValue=\"Connect\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"Call\" value=\"1\" />\n            <enum name=\"Connect\" value=\"2\" />\n            <enum name=\"Default\" value=\"3\" />\n            <enum name=\"Pkt\" value=\"4\" />\n            <enum name=\"PktIntegrity\" value=\"5\" />\n            <enum name=\"PktPrivacy\" value=\"6\" />\n        </attribute>\n        <attribute name=\"comImpersonationLevel\" type=\"enum\" defaultValue=\"Impersonate\">\n            <enum name=\"Default\" value=\"0\" />\n            <enum name=\"Anonymous\" value=\"1\" />\n            <enum name=\"Delegate\" value=\"2\" />\n            <enum name=\"Identify\" value=\"3\" />\n            <enum name=\"Impersonate\" value=\"4\" />\n        </attribute>\n        <attribute name=\"cpuMask\" type=\"int\" />\n        <attribute name=\"enable\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"idleTimeout\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"10675199.02:48:05.4775807\" />\n        <attribute name=\"logLevel\" type=\"enum\" defaultValue=\"Errors\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"All\" value=\"1\" />\n            <enum name=\"Errors\" value=\"2\" />\n        </attribute>\n        <attribute name=\"maxAppDomains\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"2000\" />\n        <attribute name=\"maxIoThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"20\" />\n        <attribute name=\"maxWorkerThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"20\" />\n        <attribute name=\"memoryLimit\" type=\"int\" defaultValue=\"60\" />\n        <attribute name=\"minIoThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"1\" />\n        <attribute name=\"minWorkerThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"1\" />\n        <attribute name=\"password\" type=\"string\" defaultValue=\"AutoGenerate\" />\n        <attribute name=\"pingFrequency\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"10675199.02:48:05.4775807\" />\n        <attribute name=\"pingTimeout\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"10675199.02:48:05.4775807\" />\n        <attribute name=\"requestLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" allowInfinite=\"true\" defaultValue=\"2147483647\" />\n        <attribute name=\"requestQueueLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" allowInfinite=\"true\" defaultValue=\"5000\" />\n        <attribute name=\"responseDeadlockInterval\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" allowInfinite=\"true\" defaultValue=\"00:03:00\" />\n        <attribute name=\"responseRestartDeadlockInterval\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"00:03:00\" />\n        <attribute name=\"restartQueueLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" allowInfinite=\"true\" defaultValue=\"10\" />\n        <attribute name=\"serverErrorMessageFile\" type=\"string\" />\n        <attribute name=\"shutdownTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" allowInfinite=\"true\" defaultValue=\"00:00:05\" />\n        <attribute name=\"timeout\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"10675199.02:48:05.4775807\" />\n        <attribute name=\"userName\" type=\"string\" defaultValue=\"machine\" />\n        <attribute name=\"webGarden\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/profile\">\n        <attribute name=\"automaticSaveEnabled\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"defaultProvider\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"AspNetSqlProfileProvider\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"inherits\" type=\"string\" />\n        <element name=\"properties\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"allowAnonymous\" type=\"bool\" defaultValue=\"False\" />\n                <attribute name=\"customProviderData\" type=\"string\" />\n                <attribute name=\"defaultValue\" type=\"string\" />\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"provider\" type=\"string\" />\n                <attribute name=\"readOnly\" type=\"bool\" defaultValue=\"False\" />\n                <attribute name=\"serializeAs\" type=\"enum\" defaultValue=\"ProviderSpecific\">\n                    <enum name=\"String\" value=\"0\" />\n                    <enum name=\"Xml\" value=\"1\" />\n                    <enum name=\"Binary\" value=\"2\" />\n                    <enum name=\"ProviderSpecific\" value=\"3\" />\n                </attribute>\n                <attribute name=\"type\" type=\"string\" defaultValue=\"string\" />\n            </collection>\n            <collection addElement=\"group\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                    <attribute name=\"allowAnonymous\" type=\"bool\" defaultValue=\"False\" />\n                    <attribute name=\"customProviderData\" type=\"string\" />\n                    <attribute name=\"defaultValue\" type=\"string\" />\n                    <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                    <attribute name=\"provider\" type=\"string\" />\n                    <attribute name=\"readOnly\" type=\"bool\" defaultValue=\"False\" />\n                    <attribute name=\"serializeAs\" type=\"enum\" defaultValue=\"ProviderSpecific\">\n                        <enum name=\"String\" value=\"0\" />\n                        <enum name=\"Xml\" value=\"1\" />\n                        <enum name=\"Binary\" value=\"2\" />\n                        <enum name=\"ProviderSpecific\" value=\"3\" />\n                    </attribute>\n                    <attribute name=\"type\" type=\"string\" defaultValue=\"string\" />\n                </collection>\n            </collection>\n        </element>\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/roleManager\">\n        <attribute name=\"cacheRolesInCookie\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"cookieName\" type=\"string\" validationType=\"requireTrimmedString\" defaultValue=\".ASPXROLES\" />\n        <attribute name=\"cookiePath\" type=\"string\" validationType=\"requireTrimmedString\" defaultValue=\"/\" />\n        <attribute name=\"cookieProtection\" type=\"enum\" defaultValue=\"All\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"Validation\" value=\"1\" />\n            <enum name=\"Encryption\" value=\"2\" />\n            <enum name=\"All\" value=\"3\" />\n        </attribute>\n        <attribute name=\"cookieRequireSSL\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"cookieSlidingExpiration\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"cookieTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483640,60\" allowInfinite=\"true\" timeSpanFormat=\"minutes\" defaultValue=\"30\" />\n        <attribute name=\"createPersistentCookie\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"defaultProvider\" type=\"string\" validationType=\"requireTrimmedString\" defaultValue=\"AspNetSqlRoleProvider\" />\n        <attribute name=\"domain\" type=\"string\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"maxCachedResults\" type=\"int\" defaultValue=\"25\" />\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.xml.serialization/dateTimeSerialization\">\n        <attribute name=\"mode\" type=\"enum\" defaultValue=\"Roundtrip\">\n            <enum name=\"Default\" value=\"0\" />\n            <enum name=\"Roundtrip\" value=\"1\" />\n            <enum name=\"Local\" value=\"2\" />\n        </attribute>\n    </sectionSchema>\n    <sectionSchema name=\"system.xml.serialization/schemaImporterExtensions\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"type\" required=\"true\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.xml.serialization/xmlSerializer\">\n        <attribute name=\"checkDeserializeAdvances\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n</configSchema>\n"
  },
  {
    "path": "Microsoft.Web.Administration/Resources/IIS_schema.xml",
    "content": "<!--\n\n    IIS configuration schema.\n\n    Please do not edit this file. To add configuration sections to the schema,\n    put them in .xml files similar to this one, in this directory. They will\n    be picked up automatically at application pool startup.\n\n-->\n\n<configSchema>\n\n  <!--\n\n    The schema for each configuration section is defined in a <sectionSchema>\n    XML element. There is no schema definition for section groups.\n\n    The following format is used to document the schema:\n    <attribute-name>=\"<default>\"  [<metadata>] [<description>]\n\n    <sectionSchema\n        name=\"\"  [String, Required] [XML full path of the section]\n    />\n\n    <attribute\n        name=\"\"  [String, Required] [XML name of the attribute]\n        type=\"\"  [bool|enum|flags|uint|int|int64|string|timeSpan, Required] [Runtime type]\n        required=\"false\"  [bool] [Indicates if it must be set]\n        isUniqueKey=\"false\"  [bool] [Serves as the collection key]\n        isCombinedKey=\"false\"  [bool] [Part of a multi-attribute key]\n        displayHex=\"false\" [bool] [Indicates if value should be written in hex format]\n        caseSensitive=\"false\" [bool] [Indicates if attribute value is case-sensitive]\n        defaultValue=\"\"  [String] [Default value or comma-delimited flags]\n        encrypted=\"false\"  [bool] [Indicates if the value persisted is encrypted]\n        allowInfinite=\"false\"  [bool] [Indicates if \"Infinite\" can be set]\n        timeSpanFormat=\"string\"  [string|seconds|minutes] [hh:mm:ss or number]\n        expanded=\"false\"  [bool] [Environment variables are expanded when read]\n        validationType=\"\"  [See validation below]\n        validationParameter=\"\"  [See validation below]\n    />\n\n    <element\n        name=\"\"  [String, Required] [XML name of the element]\n        isCollectionDefault=\"false\"  [bool] [Indicates if default values are held for other elements in this collection]\n    />\n\n    <collection\n        addElement=\"\"  [String] [Name of Add directive, if supported]\n        removeElement=\"\"  [String] [Name of Remove directive, if supported]\n        clearElement=\"\"  [String] [Name of Clear directive, if supported]\n        defaultElement=\"\"  [applicationDefaults|applicationPoolDefaults|siteDefaults|virtualDirectoryDefaults] [See isCollectionDefault]\n        mergeAppend=\"true\"  [bool] [Indicates whether or not deepest set values are appended]\n        allowDuplicates=\"false\"  [bool] [Indicates if multiple elements may have the same key]\n        allowUnrecognizedAttributes=\"false\"  [bool] [Indicates if non-schema attributes are ok]\n    />\n\n    <enum\n        name=\"\"  [String, Required] [Friendly name of the enumerator]\n        value=\"\"  [int, Required] [Numeric value]\n    />\n\n    <flags  [Can be used together to form combinations, unlike enums]\n        name=\"\"  [String, Required] [Friendly name of the flag]\n        value=\"\"  [int in powers of 2, Required] [Numeric value]\n    />\n\n    Attribute validation is done when parsing the XML and when calling the API\n    to set values:\n\n        The following validator fails on these characters: |<>&\\\"/[]+=;:,?*@\n        validationType=\"applicationPoolName\"\n        validationParameter=\"\"\n\n        The following validator fails on these characters: /?\n        validationType=\"siteName\"\n        validationParameter=\"\"\n\n        The following validator fails if value is not valid application path.\n        Valid applicationPath starts with \"/\" and doesn't end with \"/\" except\n        for path \"/\". Segment between two \"/\" cannot be \".\" or \"..\"\n            validationType=\"applicationPath\"\n        validationParameter=\"\"\n\n        The following validator fails if value is not valid virtual directory path.\n        Rules for virtualDirectoryPath are same as applicationPath\n            validationType=\"virtualDirectoryPath\"\n        validationParameter=\"\"\n\n        The following validator fails if value is outside [inside] range, in integers.\n        validationType=\"integerRange\"\n        validationParameter=\"<minimum>,<maximum>[,exclude]\"\n\n        The following validator fails if string value is not set.\n        validationType=\"nonEmptyString\"\n        validationParameter=\"\"\n\n        The following validator fails if value is outside [inside] range, in seconds.\n        validationType=\"timeSpanRange\"\n        validationParameter=\"<minimum>,<maximum>,<granularity>[,exclude]\"\n\n        The following validator fails if white space is set at start or end of value.\n        validationType=\"requireTrimmedString\"\n        validationParameter=\"\"\n\n  -->\n\n  <sectionSchema name=\"system.applicationHost/applicationPools\">\n    <collection addElement=\"add\" defaultElement=\"applicationPoolDefaults\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"applicationPoolName\" />\n      <attribute name=\"queueLength\" type=\"uint\" defaultValue=\"1000\" validationType=\"integerRange\" validationParameter=\"10,65535\"/>\n      <attribute name=\"autoStart\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"enable32BitAppOnWin64\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"managedRuntimeVersion\" type=\"string\" defaultValue=\"\" />\n      <attribute name=\"managedRuntimeLoader\" type=\"string\" defaultValue=\"webengine4.dll\" />\n      <attribute name=\"enableConfigurationOverride\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"managedPipelineMode\" type=\"enum\" defaultValue=\"Integrated\">\n        <enum name=\"Integrated\" value=\"0\" />\n        <enum name=\"Classic\" value=\"1\" />\n      </attribute>\n      <attribute name=\"CLRConfigFile\" type=\"string\" defaultValue=\"\" expanded=\"true\" />\n      <attribute name=\"passAnonymousToken\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"startMode\" type=\"enum\" defaultValue=\"OnDemand\">\n        <enum name=\"OnDemand\" value=\"0\" />\n        <enum name=\"AlwaysRunning\" value=\"1\" />\n      </attribute>\n      <element name=\"processModel\">\n        <attribute name=\"identityType\" type=\"enum\" defaultValue=\"ApplicationPoolIdentity\">\n          <enum name=\"LocalSystem\" value=\"0\"/>\n          <enum name=\"LocalService\" value=\"1\"/>\n          <enum name=\"NetworkService\" value=\"2\"/>\n          <enum name=\"SpecificUser\" value=\"3\"/>\n          <enum name=\"ApplicationPoolIdentity\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"userName\" type=\"string\"/>\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"loadUserProfile\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"setProfileEnvironment\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"logonType\" type=\"enum\" defaultValue=\"LogonBatch\">\n          <enum name=\"LogonBatch\" value=\"0\"/>\n          <enum name=\"LogonService\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"manualGroupMembership\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"idleTimeout\" type=\"timeSpan\" defaultValue=\"00:20:00\" validationType=\"timeSpanRange\" validationParameter=\"0,2592000,60\"/>\n        <attribute name=\"idleTimeoutAction\" type=\"enum\" defaultValue=\"Terminate\">\n          <enum name=\"Terminate\" value=\"0\"/>\n          <enum name=\"Suspend\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"maxProcesses\" type=\"uint\" defaultValue=\"1\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n        <attribute name=\"shutdownTimeLimit\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"startupTimeLimit\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"pingingEnabled\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"pingInterval\" type=\"timeSpan\" defaultValue=\"00:00:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"pingResponseTime\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"logEventOnProcessModel\" type=\"flags\" defaultValue=\"IdleTimeout\" >\n          <flag name=\"IdleTimeout\" value=\"1\"/>\n        </attribute>\n      </element>\n      <element name=\"recycling\">\n        <attribute name=\"disallowOverlappingRotation\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"disallowRotationOnConfigChange\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"logEventOnRecycle\" type=\"flags\" defaultValue=\"Time, Memory, PrivateMemory\" >\n          <flag name=\"Time\" value=\"1\"/>\n          <flag name=\"Requests\" value=\"2\"/>\n          <flag name=\"Schedule\" value=\"4\"/>\n          <flag name=\"Memory\" value=\"8\"/>\n          <flag name=\"IsapiUnhealthy\" value=\"16\"/>\n          <flag name=\"OnDemand\" value=\"32\"/>\n          <flag name=\"ConfigChange\" value=\"64\"/>\n          <flag name=\"PrivateMemory\" value=\"128\"/>\n        </attribute>\n        <element name=\"periodicRestart\">\n          <attribute name=\"memory\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"privateMemory\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"requests\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"time\" type=\"timeSpan\" defaultValue=\"29:00:00\" validationType=\"timeSpanRange\" validationParameter=\"0,25920000,60\"/>\n          <element name=\"schedule\">\n            <collection addElement=\"add\" clearElement=\"clear\">\n              <attribute name=\"value\" type=\"timeSpan\" required=\"true\" isUniqueKey=\"true\" validationType=\"timeSpanRange\" validationParameter=\"0,86399,60\" />\n            </collection>\n          </element>\n        </element>\n      </element>\n      <element name=\"failure\">\n        <attribute name=\"loadBalancerCapabilities\" type=\"enum\" defaultValue=\"HttpLevel\">\n          <enum name=\"TcpLevel\" value=\"1\"/>\n          <enum name=\"HttpLevel\" value=\"2\"/>\n        </attribute>\n        <attribute name=\"orphanWorkerProcess\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"orphanActionExe\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"orphanActionParams\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"rapidFailProtection\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"rapidFailProtectionInterval\" type=\"timeSpan\" defaultValue=\"00:05:00\" validationType=\"timeSpanRange\" validationParameter=\"60,8640000,60\"/>\n        <attribute name=\"rapidFailProtectionMaxCrashes\" type=\"uint\" defaultValue=\"5\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" />\n        <attribute name=\"autoShutdownExe\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"autoShutdownParams\" type=\"string\"  expanded=\"true\"/>\n      </element>\n      <element name=\"cpu\">\n        <attribute name=\"limit\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,100000\"/>\n        <attribute name=\"action\" type=\"enum\" defaultValue=\"NoAction\">\n          <enum name=\"NoAction\" value=\"0\"/>\n          <enum name=\"KillW3wp\" value=\"1\"/>\n          <enum name=\"Throttle\" value=\"2\"/>\n          <enum name=\"ThrottleUnderLoad\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"resetInterval\" type=\"timeSpan\" defaultValue=\"00:05:00\" validationType=\"timeSpanRange\" validationParameter=\"0,86400,60\"/>\n        <attribute name=\"smpAffinitized\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"smpProcessorAffinityMask\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"smpProcessorAffinityMask2\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"processorGroup\" type=\"int\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,2147483647\"/>\n        <attribute name=\"numaNodeAssignment\" type=\"enum\" defaultValue=\"MostAvailableMemory\">\n            <enum name=\"MostAvailableMemory\" value=\"0\"/>\n            <enum name=\"WindowsScheduling\" value=\"1\"/>\n        </attribute >\n        <attribute name=\"numaNodeAffinityMode\" type=\"enum\" defaultValue=\"Soft\">\n            <enum name=\"Soft\" value=\"0\" />\n            <enum name=\"Hard\" value=\"1\" />\n        </attribute>\n      </element>\n      <element name=\"environmentVariables\">\n        <collection addElement=\"add\" removeElement=\"remove\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" isUniqueKey=\"true\"/>\n          <attribute name=\"value\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n        </collection>\n      </element>\n    </collection>\n    <element name=\"applicationPoolDefaults\" isCollectionDefault=\"true\" >\n      <attribute name=\"name\" type=\"string\" validationType=\"applicationPoolName\" />\n      <attribute name=\"queueLength\" type=\"uint\" defaultValue=\"1000\" validationType=\"integerRange\" validationParameter=\"10,65535\"/>\n      <attribute name=\"autoStart\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"enable32BitAppOnWin64\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"managedRuntimeVersion\" type=\"string\" defaultValue=\"\" />\n      <attribute name=\"managedRuntimeLoader\" type=\"string\" defaultValue=\"webengine4.dll\" />\n      <attribute name=\"enableConfigurationOverride\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"managedPipelineMode\" type=\"enum\" defaultValue=\"Integrated\">\n        <enum name=\"Integrated\" value=\"0\" />\n        <enum name=\"Classic\" value=\"1\" />\n      </attribute>\n      <attribute name=\"CLRConfigFile\" type=\"string\" defaultValue=\"\" expanded=\"true\" />\n      <attribute name=\"passAnonymousToken\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"startMode\" type=\"enum\" defaultValue=\"OnDemand\">\n        <enum name=\"OnDemand\" value=\"0\" />\n        <enum name=\"AlwaysRunning\" value=\"1\" />\n      </attribute>\n      <element name=\"processModel\">\n        <attribute name=\"identityType\" type=\"enum\" defaultValue=\"ApplicationPoolIdentity\">\n          <enum name=\"LocalSystem\" value=\"0\"/>\n          <enum name=\"LocalService\" value=\"1\"/>\n          <enum name=\"NetworkService\" value=\"2\"/>\n          <enum name=\"SpecificUser\" value=\"3\"/>\n          <enum name=\"ApplicationPoolIdentity\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"userName\" type=\"string\"/>\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"loadUserProfile\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"setProfileEnvironment\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"logonType\" type=\"enum\" defaultValue=\"LogonBatch\">\n          <enum name=\"LogonBatch\" value=\"0\"/>\n          <enum name=\"LogonService\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"manualGroupMembership\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"idleTimeout\" type=\"timeSpan\" defaultValue=\"00:20:00\" validationType=\"timeSpanRange\" validationParameter=\"0,2592000,60\"/>\n        <attribute name=\"idleTimeoutAction\" type=\"enum\" defaultValue=\"Terminate\">\n          <enum name=\"Terminate\" value=\"0\"/>\n          <enum name=\"Suspend\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"maxProcesses\" type=\"uint\" defaultValue=\"1\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n        <attribute name=\"shutdownTimeLimit\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"startupTimeLimit\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"pingingEnabled\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"pingInterval\" type=\"timeSpan\" defaultValue=\"00:00:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"pingResponseTime\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"logEventOnProcessModel\" type=\"flags\" defaultValue=\"IdleTimeout\" >\n          <flag name=\"IdleTimeout\" value=\"1\"/>\n        </attribute>\n      </element>\n      <element name=\"recycling\">\n        <attribute name=\"disallowOverlappingRotation\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"disallowRotationOnConfigChange\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"logEventOnRecycle\" type=\"flags\" defaultValue=\"Time, Memory, PrivateMemory\" >\n          <flag name=\"Time\" value=\"1\"/>\n          <flag name=\"Requests\" value=\"2\"/>\n          <flag name=\"Schedule\" value=\"4\"/>\n          <flag name=\"Memory\" value=\"8\"/>\n          <flag name=\"IsapiUnhealthy\" value=\"16\"/>\n          <flag name=\"OnDemand\" value=\"32\"/>\n          <flag name=\"ConfigChange\" value=\"64\"/>\n          <flag name=\"PrivateMemory\" value=\"128\"/>\n        </attribute>\n        <element name=\"periodicRestart\">\n          <attribute name=\"memory\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"privateMemory\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"requests\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"time\" type=\"timeSpan\" defaultValue=\"29:00:00\" validationType=\"timeSpanRange\" validationParameter=\"0,25920000,60\"/>\n          <element name=\"schedule\">\n            <collection addElement=\"add\" clearElement=\"clear\">\n              <attribute name=\"value\" type=\"timeSpan\" required=\"true\" isUniqueKey=\"true\" validationType=\"timeSpanRange\" validationParameter=\"0,86399,60\" />\n            </collection>\n          </element>\n        </element>\n      </element>\n      <element name=\"failure\">\n        <attribute name=\"loadBalancerCapabilities\" type=\"enum\" defaultValue=\"HttpLevel\">\n          <enum name=\"TcpLevel\" value=\"1\"/>\n          <enum name=\"HttpLevel\" value=\"2\"/>\n        </attribute>\n        <attribute name=\"orphanWorkerProcess\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"orphanActionExe\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"orphanActionParams\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"rapidFailProtection\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"rapidFailProtectionInterval\" type=\"timeSpan\" defaultValue=\"00:05:00\" validationType=\"timeSpanRange\" validationParameter=\"60,8640000,60\"/>\n        <attribute name=\"rapidFailProtectionMaxCrashes\" type=\"uint\" defaultValue=\"5\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" />\n        <attribute name=\"autoShutdownExe\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"autoShutdownParams\" type=\"string\"  expanded=\"true\"/>\n      </element>\n      <element name=\"cpu\">\n        <attribute name=\"limit\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,100000\"/>\n        <attribute name=\"action\" type=\"enum\" defaultValue=\"NoAction\">\n          <enum name=\"NoAction\" value=\"0\"/>\n          <enum name=\"KillW3wp\" value=\"1\"/>\n          <enum name=\"Throttle\" value=\"2\"/>\n          <enum name=\"ThrottleUnderLoad\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"resetInterval\" type=\"timeSpan\" defaultValue=\"00:05:00\" validationType=\"timeSpanRange\" validationParameter=\"0,86400,60\"/>\n        <attribute name=\"smpAffinitized\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"smpProcessorAffinityMask\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"smpProcessorAffinityMask2\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"processorGroup\" type=\"int\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,2147483647\"/>\n        <attribute name=\"numaNodeAssignment\" type=\"enum\" defaultValue=\"MostAvailableMemory\">\n            <enum name=\"MostAvailableMemory\" value=\"0\"/>\n            <enum name=\"WindowsScheduling\" value=\"1\"/>\n        </attribute >\n        <attribute name=\"numaNodeAffinityMode\" type=\"enum\" defaultValue=\"Soft\">\n            <enum name=\"Soft\" value=\"0\" />\n            <enum name=\"Hard\" value=\"1\" />\n        </attribute>\n      </element>\n      <element name=\"environmentVariables\">\n        <collection addElement=\"add\" removeElement=\"remove\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" isUniqueKey=\"true\"/>\n          <attribute name=\"value\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n        </collection>\n      </element>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/configHistory\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"path\" type=\"string\" defaultValue=\"%SYSTEMDRIVE%\\inetpub\\history\" />\n    <attribute name=\"maxHistories\" type=\"uint\" defaultValue=\"10\" validationType=\"integerRange\" validationParameter=\"1,4294967295\"/>\n    <attribute name=\"period\" type=\"timeSpan\" defaultValue=\"00:02:00\" validationType=\"timeSpanRange\" validationParameter=\"10,2147483647,1\"/>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/customMetadata\">\n    <collection addElement=\"key\">\n      <attribute name=\"path\" type=\"string\" isUniqueKey=\"true\" />\n      <collection addElement=\"property\">\n        <attribute name=\"id\" type=\"uint\" isUniqueKey=\"true\" />\n        <attribute name=\"dataType\" type=\"enum\" required=\"true\">\n          <enum name=\"DWord\" value=\"1\" />\n          <enum name=\"String\" value=\"2\" />\n          <enum name=\"Binary\" value=\"3\" />\n          <enum name=\"ExpandSZ\" value=\"4\" />\n          <enum name=\"MultiSZ\" value=\"5\" />\n        </attribute>\n        <attribute name=\"userType\" type=\"uint\" defaultValue=\"1\" />\n        <attribute name=\"attributes\" type=\"flags\" defaultValue=\"Inherit\">\n          <flag name=\"None\" value=\"0\" />\n          <flag name=\"Inherit\" value=\"1\" />\n          <flag name=\"PartialPath\" value=\"2\" />\n          <flag name=\"Secure\" value=\"4\" />\n          <flag name=\"Reference\" value=\"8\" />\n          <flag name=\"Volatile\" value=\"16\" />\n          <flag name=\"IsInherited\" value=\"32\" />\n          <flag name=\"InsertPath\" value=\"64\" />\n          <flag name=\"LocalMachineOnly\" value=\"128\" />\n          <flag name=\"NonSecureOnly\" value=\"256\" />\n        </attribute>\n        <attribute name=\"value\" type=\"string\" caseSensitive=\"true\" />\n      </collection>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/listenerAdapters\">\n    <collection addElement=\"add\" >\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"identity\" type=\"string\" />\n      <attribute name=\"protocolManagerDll\" type=\"string\" />\n      <attribute name=\"protocolManagerDllInitFunction\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/log\">\n    <attribute name=\"logInUTF8\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"centralLogFileMode\" type=\"enum\" defaultValue=\"Site\" >\n      <enum name=\"Site\" value=\"0\"/>\n      <enum name=\"CentralBinary\" value=\"1\"/>\n      <enum name=\"CentralW3C\" value=\"2\"/>\n    </attribute>\n    <element name=\"centralBinaryLogFile\">\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\LogFiles\" />\n      <attribute name=\"period\" type=\"enum\" defaultValue=\"Daily\">\n        <enum name=\"Hourly\" value=\"4\"/>\n        <enum name=\"Daily\" value=\"1\"/>\n        <enum name=\"Weekly\" value=\"2\"/>\n        <enum name=\"Monthly\" value=\"3\"/>\n        <enum name=\"MaxSize\" value=\"0\"/>\n      </attribute>\n      <attribute name=\"truncateSize\" type=\"int64\" defaultValue=\"20971520\" validationType=\"integerRange\" validationParameter=\"1048576,4294967295\" />\n      <attribute name=\"localTimeRollover\" type=\"bool\" defaultValue=\"false\"/>\n    </element>\n    <element name=\"centralW3CLogFile\">\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\LogFiles\" validationType=\"nonEmptyString\" />\n      <attribute name=\"period\" type=\"enum\" defaultValue=\"Daily\">\n        <enum name=\"Hourly\" value=\"4\"/>\n        <enum name=\"Daily\" value=\"1\"/>\n        <enum name=\"Weekly\" value=\"2\"/>\n        <enum name=\"Monthly\" value=\"3\"/>\n        <enum name=\"MaxSize\" value=\"0\"/>\n      </attribute>\n      <attribute name=\"truncateSize\" type=\"int64\" defaultValue=\"20971520\" validationType=\"integerRange\" validationParameter=\"1048576,4294967295\" />\n      <attribute name=\"localTimeRollover\" type=\"bool\" defaultValue=\"false\"/>\n      <attribute name=\"logExtFileFlags\" type=\"flags\" defaultValue=\"Date, Time, ClientIP, UserName, SiteName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer\">\n        <flag name=\"Date\" value=\"1\"/>\n        <flag name=\"Time\" value=\"2\"/>\n        <flag name=\"ClientIP\" value=\"4\"/>\n        <flag name=\"UserName\" value=\"8\"/>\n        <flag name=\"SiteName\" value=\"16\"/>\n        <flag name=\"ComputerName\" value=\"32\"/>\n        <flag name=\"ServerIP\" value=\"64\"/>\n        <flag name=\"Method\" value=\"128\"/>\n        <flag name=\"UriStem\" value=\"256\"/>\n        <flag name=\"UriQuery\" value=\"512\"/>\n        <flag name=\"HttpStatus\" value=\"1024\"/>\n        <flag name=\"Win32Status\" value=\"2048\"/>\n        <flag name=\"BytesSent\" value=\"4096\"/>\n        <flag name=\"BytesRecv\" value=\"8192\"/>\n        <flag name=\"TimeTaken\" value=\"16384\"/>\n        <flag name=\"ServerPort\" value=\"32768\"/>\n        <flag name=\"UserAgent\" value=\"65536\"/>\n        <flag name=\"Cookie\" value=\"131072\"/>\n        <flag name=\"Referer\" value=\"262144\"/>\n        <flag name=\"ProtocolVersion\" value=\"524288\"/>\n        <flag name=\"Host\" value=\"1048576\"/>\n        <flag name=\"HttpSubStatus\" value=\"2097152\"/>\n      </attribute>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/serviceAutoStartProviders\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"type\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/sites\">\n    <collection addElement=\"site\" defaultElement=\"siteDefaults\" >\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"siteName\" />\n      <attribute name=\"id\" type=\"uint\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"serverAutoStart\" type=\"bool\" defaultValue=\"true\" />\n      <element name=\"bindings\">\n        <collection addElement=\"binding\" clearElement=\"clear\">\n          <attribute name=\"protocol\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"bindingInformation\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"sslFlags\" type=\"uint\" defaultValue=\"0\" />\n        </collection>\n      </element>\n      <element name=\"limits\">\n        <attribute name=\"maxBandwidth\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,1023,exclude\" defaultValue=\"4294967295\"/>\n        <attribute name=\"maxConnections\" type=\"uint\" defaultValue=\"4294967295\" />\n        <attribute name=\"connectionTimeout\" type=\"timeSpan\" defaultValue=\"00:02:00\" validationType=\"timeSpanRange\" validationParameter=\"0,65535,1\" />\n        <attribute name=\"maxUrlSegments\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,16383\" defaultValue=\"32\" />\n      </element>\n      <element name=\"logFile\">\n        <attribute name=\"logExtFileFlags\" type=\"flags\" defaultValue=\"Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer\">\n          <flag name=\"Date\" value=\"1\"/>\n          <flag name=\"Time\" value=\"2\"/>\n          <flag name=\"ClientIP\" value=\"4\"/>\n          <flag name=\"UserName\" value=\"8\"/>\n          <flag name=\"SiteName\" value=\"16\"/>\n          <flag name=\"ComputerName\" value=\"32\"/>\n          <flag name=\"ServerIP\" value=\"64\"/>\n          <flag name=\"Method\" value=\"128\"/>\n          <flag name=\"UriStem\" value=\"256\"/>\n          <flag name=\"UriQuery\" value=\"512\"/>\n          <flag name=\"HttpStatus\" value=\"1024\"/>\n          <flag name=\"Win32Status\" value=\"2048\"/>\n          <flag name=\"BytesSent\" value=\"4096\"/>\n          <flag name=\"BytesRecv\" value=\"8192\"/>\n          <flag name=\"TimeTaken\" value=\"16384\"/>\n          <flag name=\"ServerPort\" value=\"32768\"/>\n          <flag name=\"UserAgent\" value=\"65536\"/>\n          <flag name=\"Cookie\" value=\"131072\"/>\n          <flag name=\"Referer\" value=\"262144\"/>\n          <flag name=\"ProtocolVersion\" value=\"524288\"/>\n          <flag name=\"Host\" value=\"1048576\"/>\n          <flag name=\"HttpSubStatus\" value=\"2097152\"/>\n        </attribute>\n        <attribute name=\"customLogPluginClsid\" type=\"string\" defaultValue=\"\"/>\n        <attribute name=\"logFormat\" type=\"enum\" defaultValue=\"W3C\">\n          <enum name=\"IIS\" value=\"0\"/>\n          <enum name=\"NCSA\" value=\"1\"/>\n          <enum name=\"W3C\" value=\"2\"/>\n          <enum name=\"Custom\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"logTargetW3C\" type=\"flags\" defaultValue=\"File\">\n          <flag name=\"File\" value=\"1\"/>\n          <flag name=\"ETW\" value=\"2\"/>\n        </attribute>\n        <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\LogFiles\" validationType=\"nonEmptyString\" />\n        <attribute name=\"period\" type=\"enum\" defaultValue=\"Daily\">\n          <enum name=\"MaxSize\" value=\"0\"/>\n          <enum name=\"Daily\" value=\"1\"/>\n          <enum name=\"Weekly\" value=\"2\"/>\n          <enum name=\"Monthly\" value=\"3\"/>\n          <enum name=\"Hourly\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"truncateSize\" type=\"int64\" defaultValue=\"20971520\" validationType=\"integerRange\" validationParameter=\"1048576,4294967295\" />\n        <attribute name=\"localTimeRollover\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"logSiteId\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"flushByEntryCountW3CLog\" type=\"uint\" defaultValue=\"0\" />\n        <attribute name=\"maxLogLineLength\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"2,65536\" defaultValue=\"65536\" />\n        <element name=\"customFields\">\n          <attribute name=\"maxCustomFieldLength\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"2,65536\" defaultValue=\"4096\" />\n          <collection addElement=\"add\" clearElement=\"clear\">\n            <attribute name=\"logFieldName\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n            <attribute name=\"sourceName\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n            <attribute name=\"sourceType\" type=\"enum\" required=\"true\" >\n              <enum name=\"RequestHeader\" value=\"0\"/>\n              <enum name=\"ResponseHeader\" value=\"1\"/>\n              <enum name=\"ServerVariable\" value=\"2\"/>\n            </attribute>\n          </collection>\n        </element>\n      </element>\n      <element name=\"traceFailedRequestsLogging\">\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\FailedReqLogFiles\"/>\n        <attribute name=\"maxLogFiles\" type=\"uint\" defaultValue=\"50\" validationType=\"integerRange\" validationParameter=\"1,10000\"/>\n        <attribute name=\"maxLogFileSizeKB\" type=\"uint\" defaultValue=\"1024\" validationType=\"integerRange\" validationParameter=\"0,1048576\"/>\n        <attribute name=\"customActionsEnabled\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n      <collection addElement=\"application\" defaultElement=\"applicationDefaults\" >\n        <attribute name=\"path\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"applicationPath\" />\n        <attribute name=\"applicationPool\" type=\"string\" validationType=\"applicationPoolName\"/>\n        <attribute name=\"enabledProtocols\" type=\"string\" defaultValue=\"http\"/>\n        <attribute name=\"serviceAutoStartEnabled\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"serviceAutoStartProvider\" type=\"string\" />\n        <attribute name=\"preloadEnabled\" type=\"bool\" defaultValue=\"false\" />\n        <collection addElement=\"virtualDirectory\" defaultElement=\"virtualDirectoryDefaults\" >\n          <attribute name=\"path\" type=\"string\" isUniqueKey=\"true\" validationType=\"virtualDirectoryPath\" />\n          <attribute name=\"physicalPath\" type=\"string\" expanded=\"true\" />\n          <attribute name=\"userName\" type=\"string\" />\n          <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n          <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n            <enum name=\"Interactive\" value=\"0\"/>\n            <enum name=\"Batch\" value=\"1\"/>\n            <enum name=\"Network\" value=\"2\"/>\n            <enum name=\"ClearText\" value=\"3\"/>\n          </attribute>\n          <attribute name=\"allowSubDirConfig\" type=\"bool\" defaultValue=\"true\"/>\n        </collection>\n        <element name=\"virtualDirectoryDefaults\" isCollectionDefault=\"true\">\n          <attribute name=\"path\" type=\"string\" validationType=\"virtualDirectoryPath\"/>\n          <attribute name=\"physicalPath\" type=\"string\" expanded=\"true\" />\n          <attribute name=\"userName\" type=\"string\"/>\n          <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n          <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n            <enum name=\"Interactive\" value=\"0\"/>\n            <enum name=\"Batch\" value=\"1\"/>\n            <enum name=\"Network\" value=\"2\"/>\n            <enum name=\"ClearText\" value=\"3\"/>\n          </attribute>\n          <attribute name=\"allowSubDirConfig\" type=\"bool\" defaultValue=\"true\"/>\n        </element>\n      </collection>\n      <element name=\"applicationDefaults\" isCollectionDefault=\"true\">\n        <attribute name=\"path\" type=\"string\" validationType=\"applicationPath\"/>\n        <attribute name=\"applicationPool\" type=\"string\" validationType=\"applicationPoolName\"/>\n        <attribute name=\"enabledProtocols\" type=\"string\" defaultValue=\"http\"/>\n        <attribute name=\"serviceAutoStartEnabled\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"serviceAutoStartProvider\" type=\"string\" />\n        <attribute name=\"preloadEnabled\" type=\"bool\" defaultValue=\"false\" />\n      </element>\n      <element name=\"virtualDirectoryDefaults\" isCollectionDefault=\"true\">\n        <attribute name=\"path\" type=\"string\" validationType=\"virtualDirectoryPath\"/>\n        <attribute name=\"physicalPath\" type=\"string\" expanded=\"true\" />\n        <attribute name=\"userName\" type=\"string\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n          <enum name=\"Interactive\" value=\"0\"/>\n          <enum name=\"Batch\" value=\"1\"/>\n          <enum name=\"Network\" value=\"2\"/>\n          <enum name=\"ClearText\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"allowSubDirConfig\" type=\"bool\" defaultValue=\"true\"/>\n      </element>\n    </collection>\n    <element name=\"siteDefaults\" isCollectionDefault=\"true\">\n      <attribute name=\"name\" type=\"string\" validationType=\"siteName\" />\n      <attribute name=\"id\" type=\"uint\" />\n      <attribute name=\"serverAutoStart\" type=\"bool\" defaultValue=\"true\" />\n      <element name=\"bindings\">\n        <collection addElement=\"binding\" clearElement=\"clear\">\n          <attribute name=\"protocol\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"bindingInformation\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"sslFlags\" type=\"uint\" defaultValue=\"0\" />\n        </collection>\n      </element>\n      <element name=\"limits\">\n        <attribute name=\"maxBandwidth\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,1023,exclude\" defaultValue=\"4294967295\"/>\n        <attribute name=\"maxConnections\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"connectionTimeout\" type=\"timeSpan\" defaultValue=\"00:02:00\" validationType=\"timeSpanRange\" validationParameter=\"0,65535,1\"/>\n        <attribute name=\"maxUrlSegments\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,16383\" defaultValue=\"32\" />\n      </element>\n      <element name=\"logFile\">\n        <attribute name=\"logExtFileFlags\" type=\"flags\" defaultValue=\"Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer\">\n          <flag name=\"Date\" value=\"1\"/>\n          <flag name=\"Time\" value=\"2\"/>\n          <flag name=\"ClientIP\" value=\"4\"/>\n          <flag name=\"UserName\" value=\"8\"/>\n          <flag name=\"SiteName\" value=\"16\"/>\n          <flag name=\"ComputerName\" value=\"32\"/>\n          <flag name=\"ServerIP\" value=\"64\"/>\n          <flag name=\"Method\" value=\"128\"/>\n          <flag name=\"UriStem\" value=\"256\"/>\n          <flag name=\"UriQuery\" value=\"512\"/>\n          <flag name=\"HttpStatus\" value=\"1024\"/>\n          <flag name=\"Win32Status\" value=\"2048\"/>\n          <flag name=\"BytesSent\" value=\"4096\"/>\n          <flag name=\"BytesRecv\" value=\"8192\"/>\n          <flag name=\"TimeTaken\" value=\"16384\"/>\n          <flag name=\"ServerPort\" value=\"32768\"/>\n          <flag name=\"UserAgent\" value=\"65536\"/>\n          <flag name=\"Cookie\" value=\"131072\"/>\n          <flag name=\"Referer\" value=\"262144\"/>\n          <flag name=\"ProtocolVersion\" value=\"524288\"/>\n          <flag name=\"Host\" value=\"1048576\"/>\n          <flag name=\"HttpSubStatus\" value=\"2097152\"/>\n        </attribute>\n        <attribute name=\"customLogPluginClsid\" type=\"string\" defaultValue=\"\"/>\n        <attribute name=\"logFormat\" type=\"enum\" defaultValue=\"W3C\">\n          <enum name=\"IIS\" value=\"0\"/>\n          <enum name=\"NCSA\" value=\"1\"/>\n          <enum name=\"W3C\" value=\"2\"/>\n          <enum name=\"Custom\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"logTargetW3C\" type=\"flags\" defaultValue=\"File\">\n          <flag name=\"File\" value=\"1\"/>\n          <flag name=\"ETW\" value=\"2\"/>\n        </attribute>\n        <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\LogFiles\"/>\n        <attribute name=\"period\" type=\"enum\" defaultValue=\"Daily\">\n          <enum name=\"MaxSize\" value=\"0\"/>\n          <enum name=\"Daily\" value=\"1\"/>\n          <enum name=\"Weekly\" value=\"2\"/>\n          <enum name=\"Monthly\" value=\"3\"/>\n          <enum name=\"Hourly\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"truncateSize\" type=\"int64\" defaultValue=\"20971520\" validationType=\"integerRange\" validationParameter=\"1048576,4294967295\" />\n        <attribute name=\"localTimeRollover\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"logSiteId\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"flushByEntryCountW3CLog\" type=\"uint\" defaultValue=\"0\" />\n        <attribute name=\"maxLogLineLength\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"2,65536\" defaultValue=\"65536\" />\n        <element name=\"customFields\">\n          <attribute name=\"maxCustomFieldLength\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"2,65536\" defaultValue=\"4096\" />\n          <collection addElement=\"add\" clearElement=\"clear\">\n            <attribute name=\"logFieldName\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n            <attribute name=\"sourceName\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n            <attribute name=\"sourceType\" type=\"enum\" required=\"true\" >\n              <enum name=\"RequestHeader\" value=\"0\"/>\n              <enum name=\"ResponseHeader\" value=\"1\"/>\n              <enum name=\"ServerVariable\" value=\"2\"/>\n            </attribute>\n          </collection>\n        </element>\n      </element>\n      <element name=\"traceFailedRequestsLogging\">\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\FailedReqLogFiles\"/>\n        <attribute name=\"maxLogFiles\" type=\"uint\" defaultValue=\"50\" validationType=\"integerRange\" validationParameter=\"1,10000\"/>\n        <attribute name=\"maxLogFileSizeKB\" type=\"uint\" defaultValue=\"1024\" validationType=\"integerRange\" validationParameter=\"0,1048576\"/>\n        <attribute name=\"customActionsEnabled\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n    </element>\n    <element name=\"applicationDefaults\" isCollectionDefault=\"true\">\n      <attribute name=\"path\" type=\"string\" validationType=\"applicationPath\"/>\n      <attribute name=\"applicationPool\" type=\"string\" validationType=\"applicationPoolName\"/>\n      <attribute name=\"enabledProtocols\" type=\"string\" defaultValue=\"http\"/>\n    </element>\n    <element name=\"virtualDirectoryDefaults\" isCollectionDefault=\"true\">\n      <attribute name=\"path\" type=\"string\" validationType=\"virtualDirectoryPath\"/>\n      <attribute name=\"physicalPath\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"userName\" type=\"string\"/>\n      <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n      <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n        <enum name=\"Interactive\" value=\"0\"/>\n        <enum name=\"Batch\" value=\"1\"/>\n        <enum name=\"Network\" value=\"2\"/>\n        <enum name=\"ClearText\" value=\"3\"/>\n      </attribute>\n      <attribute name=\"allowSubDirConfig\" type=\"bool\" defaultValue=\"true\"/>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/webLimits\">\n    <attribute name=\"maxGlobalBandwidth\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,1023,exclude\" defaultValue=\"4294967295\"/>\n    <attribute name=\"connectionTimeout\" type=\"timeSpan\" defaultValue=\"00:02:00\" />\n    <attribute name=\"demandStartThreshold\" type=\"uint\" defaultValue=\"2147483647\" validationType=\"integerRange\" validationParameter=\"10,2147483647\" />\n    <attribute name=\"dynamicIdleThreshold\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,10000\" />\n    <attribute name=\"headerWaitTimeout\" type=\"timeSpan\" defaultValue=\"00:00:00\" validationType=\"timeSpanRange\" validationParameter=\"0,65535,1\"/>\n    <attribute name=\"minBytesPerSecond\" type=\"uint\" defaultValue=\"240\"/>\n    <attribute name=\"dynamicRegistrationThreshold\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,4294967295\" defaultValue=\"100\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/asp\">\n    <attribute name=\"appAllowClientDebug\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"appAllowDebugging\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"errorsToNTLog\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"logErrorRequests\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"calcLineNumber\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"codePage\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n    <attribute name=\"enableApplicationRestart\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableAspHtmlFallback\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableChunkedEncoding\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableParentPaths\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"exceptionCatchEnable\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"lcid\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n    <attribute name=\"runOnEndAnonymously\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"scriptErrorMessage\" type=\"string\" defaultValue=\"An error occurred on the server when processing the URL. Please contact the system administrator. &lt;p/> If you are the system administrator please click &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkID=82731&quot;>here&lt;/a> to find out more about this error.\" validationType=\"nonEmptyString\" />\n    <attribute name=\"scriptErrorSentToBrowser\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"scriptLanguage\" type=\"string\" defaultValue=\"VBScript\" validationType=\"nonEmptyString\" />\n    <attribute name=\"bufferingOn\" type=\"bool\" defaultValue=\"true\" />\n    <element name=\"session\">\n      <attribute name=\"allowSessionState\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"keepSessionIdSecure\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"max\" type=\"uint\" defaultValue=\"4294967295\" />\n      <attribute name=\"timeout\" type=\"timeSpan\" defaultValue=\"00:20:00\" validationType=\"timeSpanRange\" validationParameter=\"0,31536000,60\" />\n    </element>\n    <element name=\"comPlus\">\n      <attribute name=\"appServiceFlags\" type=\"flags\" defaultValue=\"None\">\n        <flag name=\"None\" value=\"0\" />\n        <flag name=\"EnableTracker\" value=\"1\" />\n        <flag name=\"EnableSxS\" value=\"2\" />\n        <flag name=\"UsePartition\" value=\"4\" />\n      </attribute>\n      <attribute name=\"sxsName\" type=\"string\" validationType=\"nonEmptyString\" />\n      <attribute name=\"partitionId\" type=\"string\" defaultValue=\"00000000-0000-0000-0000-000000000000\" />\n      <attribute name=\"trackThreadingModel\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"executeInMta\" type=\"bool\" defaultValue=\"false\" />\n    </element>\n    <element name=\"cache\">\n      <attribute name=\"diskTemplateCacheDirectory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\temp\\ASP Compiled Templates\" validationType=\"nonEmptyString\" />\n      <attribute name=\"maxDiskTemplateCacheFiles\" type=\"uint\" defaultValue=\"2000\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"scriptFileCacheSize\" type=\"uint\" defaultValue=\"500\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"scriptEngineCacheMax\" type=\"uint\" defaultValue=\"250\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"enableTypelibCache\" type=\"bool\" defaultValue=\"true\" />\n    </element>\n    <element name=\"limits\">\n      <attribute name=\"scriptTimeout\" type=\"timeSpan\" defaultValue=\"00:01:30\" />\n      <attribute name=\"bufferingLimit\" type=\"uint\" defaultValue=\"4194304\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"maxRequestEntityAllowed\" type=\"uint\" defaultValue=\"200000\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"processorThreadMax\" type=\"uint\" defaultValue=\"25\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"queueConnectionTestTime\" type=\"timeSpan\" defaultValue=\"00:00:03\" validationType=\"timeSpanRange\" validationParameter=\"1,2147483647,1\"/>\n      <attribute name=\"queueTimeout\" type=\"timeSpan\" defaultValue=\"00:00:00\" />\n      <attribute name=\"requestQueueMax\" type=\"uint\" defaultValue=\"3000\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/caching\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableKernelCache\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"maxCacheSize\" type=\"uint\" defaultValue=\"0\" />\n    <attribute name=\"maxResponseSize\" type=\"uint\" defaultValue=\"262144\" />\n    <element name=\"profiles\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" mergeAppend=\"false\">\n        <attribute name=\"extension\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"policy\" type=\"enum\" defaultValue=\"DontCache\">\n          <enum name=\"DontCache\" value=\"0\"/>\n          <enum name=\"CacheUntilChange\" value=\"1\"/>\n          <enum name=\"CacheForTimePeriod\" value=\"2\"/>\n          <enum name=\"DisableCache\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"kernelCachePolicy\" type=\"enum\" defaultValue=\"DontCache\">\n          <enum name=\"DontCache\" value=\"0\"/>\n          <enum name=\"CacheUntilChange\" value=\"1\"/>\n          <enum name=\"CacheForTimePeriod\" value=\"2\"/>\n          <enum name=\"DisableCache\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"duration\" type=\"timeSpan\" defaultValue=\"00:00:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\" />\n        <attribute name=\"location\" type=\"enum\" defaultValue=\"Server\">\n          <enum name=\"Any\" value=\"0\" />\n          <enum name=\"Client\" value=\"1\" />\n          <enum name=\"Downstream\" value=\"2\" />\n          <enum name=\"Server\" value=\"3\" />\n          <enum name=\"None\" value=\"4\" />\n          <enum name=\"ServerAndClient\" value=\"5\" />\n        </attribute>\n        <attribute name=\"varyByHeaders\" type=\"string\" />\n        <attribute name=\"varyByQueryString\" type=\"string\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/cgi\">\n    <attribute name=\"createCGIWithNewConsole\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"createProcessAsUser\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"timeout\" type=\"timeSpan\" defaultValue=\"00:15:00\" validationType=\"timeSpanRange\" validationParameter=\"1,2147483647,1\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/defaultDocument\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <element name=\"files\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" mergeAppend=\"false\">\n        <attribute name=\"value\" type=\"string\" isUniqueKey=\"true\"/>\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/directoryBrowse\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"showFlags\" type=\"flags\" defaultValue=\"Date, Time, Size, Extension\">\n      <flag name=\"None\" value=\"0\" />\n      <flag name=\"Date\" value=\"2\" />\n      <flag name=\"Time\" value=\"4\" />\n      <flag name=\"Size\" value=\"8\" />\n      <flag name=\"Extension\" value=\"16\" />\n      <flag name=\"LongDate\" value=\"32\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/fastCgi\">\n    <collection addElement=\"application\">\n      <attribute name=\"fullPath\" type=\"string\" expanded=\"true\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"arguments\" type=\"string\" expanded=\"true\" defaultValue=\"\" isCombinedKey=\"true\" />\n      <attribute name=\"monitorChangesTo\" type=\"string\" defaultValue=\"\" />\n      <attribute name=\"stderrMode\" type=\"enum\" defaultValue=\"ReturnStdErrIn500\">\n      <enum name=\"ReturnStdErrIn500\" value=\"0\" />\n      <enum name=\"ReturnGeneric500\" value=\"1\" />\n      <enum name=\"IgnoreAndReturn200\" value=\"2\" />\n      <enum name=\"TerminateProcess\" value=\"3\" />\n      </attribute>\n      <attribute name=\"maxInstances\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,10000\" />\n      <attribute name=\"idleTimeout\" type=\"uint\" defaultValue=\"300\" validationType=\"integerRange\" validationParameter=\"10,2592000\" />\n      <attribute name=\"activityTimeout\" type=\"uint\" defaultValue=\"70\" validationType=\"integerRange\" validationParameter=\"10,2592000\" />\n      <attribute name=\"requestTimeout\" type=\"uint\" defaultValue=\"90\" validationType=\"integerRange\" validationParameter=\"10,2592000\" />\n      <attribute name=\"instanceMaxRequests\" type=\"uint\" defaultValue=\"200\" validationType=\"integerRange\" validationParameter=\"1,10000000\" />\n      <attribute name=\"signalBeforeTerminateSeconds\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,60\" />\n      <attribute name=\"protocol\" type=\"enum\" defaultValue=\"NamedPipe\">\n        <enum name=\"NamedPipe\" value=\"0\" />\n        <enum name=\"Tcp\" value=\"1\" />\n      </attribute>\n      <attribute name=\"queueLength\" type=\"uint\" defaultValue=\"1000\" validationType=\"integerRange\" validationParameter=\"1,100000000\" />\n      <attribute name=\"flushNamedPipe\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"rapidFailsPerMinute\" type=\"uint\" defaultValue=\"10\" validationType=\"integerRange\" validationParameter=\"0,1000\" />\n      <element name=\"environmentVariables\">\n        <collection addElement=\"environmentVariable\">\n          <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" />\n          <attribute name=\"value\" type=\"string\" />\n        </collection>\n      </element>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/globalModules\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"image\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"preCondition\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/handlers\">\n    <attribute name=\"accessPolicy\" type=\"flags\" defaultValue=\"Read\">\n      <flag name=\"None\" value=\"0\" />\n      <flag name=\"Read\" value=\"1\" />\n      <flag name=\"Write\" value=\"2\" />\n      <flag name=\"Execute\" value=\"4\" />\n      <flag name=\"Source\" value=\"16\" />\n      <flag name=\"Script\" value=\"512\" />\n      <flag name=\"NoRemoteWrite\" value=\"1024\" />\n      <flag name=\"NoRemoteRead\" value=\"4096\" />\n      <flag name=\"NoRemoteExecute\" value=\"8192\" />\n      <flag name=\"NoRemoteScript\" value=\"16384\" />\n    </attribute>\n    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" mergeAppend=\"false\" >\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"path\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"verb\" type=\"string\" caseSensitive=\"true\" required=\"true\" />\n      <attribute name=\"type\" type=\"string\" caseSensitive=\"true\" />\n      <attribute name=\"modules\" type=\"string\" caseSensitive=\"true\" defaultValue=\"ManagedPipelineHandler\" />\n      <attribute name=\"scriptProcessor\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"resourceType\" type=\"enum\" defaultValue=\"Unspecified\">\n        <enum name=\"File\" value=\"0\" />\n        <enum name=\"Directory\" value=\"1\" />\n        <enum name=\"Either\" value=\"2\" />\n        <enum name=\"Unspecified\" value=\"3\" />\n      </attribute>\n      <attribute name=\"requireAccess\" type=\"enum\" defaultValue=\"Script\">\n        <enum name=\"None\" value=\"0\" />\n        <enum name=\"Read\" value=\"1\" />\n        <enum name=\"Write\" value=\"2\" />\n        <enum name=\"Script\" value=\"3\" />\n        <enum name=\"Execute\" value=\"4\" />\n      </attribute>\n      <attribute name=\"allowPathInfo\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"preCondition\" type=\"string\" caseSensitive=\"true\" />\n      <attribute name=\"responseBufferLimit\" type=\"uint\" defaultValue=\"4194304\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpCompression\">\n    <attribute name=\"sendCacheHeaders\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"expiresHeader\" type=\"string\" defaultValue=\"Wed, 01 Jan 1997 12:00:00 GMT\" />\n    <attribute name=\"cacheControlHeader\" type=\"string\" defaultValue=\"max-age=86400\" />\n    <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\temp\\IIS Temporary Compressed Files\" />\n    <attribute name=\"doDiskSpaceLimiting\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"maxDiskSpaceUsage\" type=\"uint\" defaultValue=\"100\" />\n    <attribute name=\"minFileSizeForComp\" type=\"uint\" defaultValue=\"2700\" />\n    <attribute name=\"noCompressionForHttp10\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"noCompressionForProxies\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"noCompressionForRange\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"staticCompressionIgnoreHitFrequency\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"staticCompressionDisableCpuUsage\" type=\"uint\" defaultValue=\"100\" validationType=\"integerRange\" validationParameter=\"0,100\" />\n    <attribute name=\"staticCompressionEnableCpuUsage\" type=\"uint\" defaultValue=\"50\" validationType=\"integerRange\" validationParameter=\"0,100\" />\n    <attribute name=\"dynamicCompressionDisableCpuUsage\" type=\"uint\" defaultValue=\"90\" validationType=\"integerRange\" validationParameter=\"0,100\" />\n    <attribute name=\"dynamicCompressionEnableCpuUsage\" type=\"uint\" defaultValue=\"50\" validationType=\"integerRange\" validationParameter=\"0,100\" />\n    <attribute name=\"dynamicCompressionBufferLimit\" type=\"uint\" defaultValue=\"65536\" />\n    <collection addElement=\"scheme\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"doStaticCompression\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"doDynamicCompression\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"dll\" type=\"string\" expanded=\"true\" required=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"staticCompressionLevel\" type=\"uint\" defaultValue=\"7\" />\n      <attribute name=\"dynamicCompressionLevel\" type=\"uint\" defaultValue=\"0\" />\n    </collection>\n    <element name=\"staticTypes\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"mimeType\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"enabled\" type=\"bool\" required=\"true\" />\n      </collection>\n    </element>\n    <element name=\"dynamicTypes\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"mimeType\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"enabled\" type=\"bool\" required=\"true\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpErrors\">\n    <attribute name=\"errorMode\" type=\"enum\" defaultValue=\"DetailedLocalOnly\">\n      <enum name=\"DetailedLocalOnly\" value=\"0\" />\n      <enum name=\"Custom\" value=\"1\" />\n      <enum name=\"Detailed\" value=\"2\" />\n    </attribute>\n    <attribute name=\"existingResponse\" type=\"enum\" defaultValue=\"Auto\">\n      <enum name=\"Auto\" value=\"0\" />\n      <enum name=\"Replace\" value=\"1\" />\n      <enum name=\"PassThrough\" value=\"2\" />\n    </attribute>\n    <attribute name=\"defaultPath\" type=\"string\" expanded=\"true\" />\n    <attribute name=\"defaultResponseMode\" type=\"enum\" defaultValue=\"File\">\n      <enum name=\"File\" value=\"0\" />\n      <enum name=\"ExecuteURL\" value=\"1\" />\n      <enum name=\"Redirect\" value=\"2\" />\n    </attribute>\n    <attribute name=\"detailedMoreInformationLink\" type=\"string\" defaultValue=\"http://go.microsoft.com/fwlink/?LinkID=62293\" required=\"false\" />\n    <attribute name=\"allowAbsolutePathsWhenDelegated\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"error\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"statusCode\" type=\"uint\" required=\"true\" isCombinedKey=\"true\" validationType=\"integerRange\" validationParameter=\"400,999\" />\n      <attribute name=\"subStatusCode\" type=\"int\" defaultValue=\"-1\" isCombinedKey=\"true\" validationType=\"integerRange\" validationParameter=\"-1,999\" />\n      <attribute name=\"prefixLanguageFilePath\" type=\"string\" expanded=\"true\" defaultValue=\"\" required=\"false\" />\n      <attribute name=\"path\" type=\"string\" expanded=\"true\" required=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"responseMode\" type=\"enum\" defaultValue=\"File\">\n        <enum name=\"File\" value=\"0\" />\n        <enum name=\"ExecuteURL\" value=\"1\" />\n        <enum name=\"Redirect\" value=\"2\" />\n      </attribute>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpLogging\">\n    <attribute name=\"selectiveLogging\" type=\"enum\" defaultValue=\"LogAll\">\n      <enum name=\"LogAll\" value=\"0\" />\n      <enum name=\"LogSuccessful\" value=\"1\" />\n      <enum name=\"LogError\" value=\"2\" />\n    </attribute>\n    <attribute name=\"dontLog\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpProtocol\">\n    <element name=\"customHeaders\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" />\n        <attribute name=\"value\" type=\"string\" caseSensitive=\"true\" />\n      </collection>\n    </element>\n    <element name=\"redirectHeaders\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" />\n        <attribute name=\"value\" type=\"string\" caseSensitive=\"true\" />\n      </collection>\n    </element>\n    <attribute name=\"allowKeepAlive\" type=\"bool\" defaultValue=\"true\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpRedirect\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"destination\" type=\"string\" />\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"wildcard\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"destination\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n    </collection>\n    <attribute name=\"exactDestination\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"childOnly\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"httpResponseStatus\" type=\"enum\" defaultValue=\"Found\">\n      <enum name=\"Permanent\" value=\"301\" />\n      <enum name=\"Found\" value=\"302\" />\n      <enum name=\"Temporary\" value=\"307\" />\n      <enum name=\"PermRedirect\" value=\"308\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpTracing\">\n    <element name=\"traceUrls\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"value\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/isapiFilters\">\n    <collection addElement=\"filter\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"path\" type=\"string\" expanded=\"true\" required=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"enableCache\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"preCondition\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/management/authentication\">\n    <attribute name=\"defaultProvider\" type=\"string\" />\n    <element name=\"providers\">\n      <collection addElement=\"add\" allowUnrecognizedAttributes=\"true\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <attribute name=\"type\" type=\"string\" required=\"true\" />\n      </collection>\n    </element>\n    <element name=\"credentials\">\n      <collection addElement=\"add\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey =\"true\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" required=\"true\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/management/authorization\">\n    <attribute name=\"defaultProvider\" type=\"string\" />\n    <element name=\"providers\">\n      <collection addElement=\"add\" allowUnrecognizedAttributes=\"true\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <attribute name=\"type\" type=\"string\" required=\"true\" />\n      </collection>\n    </element>\n    <element name=\"authorizationRules\">\n      <collection addElement=\"scope\">\n        <attribute name=\"path\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <collection addElement=\"add\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n          <attribute name=\"isRole\" type=\"bool\" defaultValue=\"false\" />\n        </collection>\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/management/trustedProviders\">\n    <attribute name=\"allowUntrustedProviders\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"add\">\n      <attribute name=\"type\" type=\"string\" required=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/modules\">\n    <attribute name=\"runAllManagedModulesForAllRequests\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"runManagedModulesForWebDavRequests\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"type\" type=\"string\" caseSensitive=\"true\" />\n      <attribute name=\"preCondition\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/applicationInitialization\">\n    <attribute name=\"remapManagedRequestsTo\" type=\"string\" defaultValue=\"\" />\n    <attribute name=\"skipManagedModules\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"doAppInitAfterRestart\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" mergeElement=\"false\">\n      <attribute name=\"initializationPage\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"hostName\" type=\"string\" defaultValue=\"\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/odbcLogging\">\n    <attribute name=\"dataSource\" type=\"string\" caseSensitive=\"true\" defaultValue=\"InternetDb\" />\n    <attribute name=\"tableName\" type=\"string\" caseSensitive=\"true\" defaultValue=\"InternetLog\" />\n    <attribute name=\"userName\" type=\"string\" defaultValue=\"InternetAdmin\" />\n    <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/access\">\n    <attribute name=\"sslFlags\" type=\"flags\" defaultValue=\"None\">\n      <flag name=\"None\" value=\"0\" />\n      <flag name=\"Ssl\" value=\"8\" />\n      <flag name=\"SslNegotiateCert\" value=\"32\" />\n      <flag name=\"SslRequireCert\" value=\"64\" />\n      <flag name=\"Ssl128\" value=\"256\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/applicationDependencies\">\n    <collection addElement=\"application\" clearElement=\"clear\" >\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"groupId\" type=\"string\" />\n      <collection addElement=\"add\" clearElement=\"clear\" >\n        <attribute name=\"groupId\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      </collection>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/anonymousAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"userName\" type=\"string\" defaultValue=\"IUSR\" />\n    <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n    <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n      <enum name=\"Interactive\" value=\"0\" />\n      <enum name=\"Batch\" value=\"1\" />\n      <enum name=\"Network\" value=\"2\" />\n      <enum name=\"ClearText\" value=\"3\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/basicAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"realm\" type=\"string\" />\n    <attribute name=\"defaultLogonDomain\" type=\"string\" />\n    <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n      <enum name=\"Interactive\" value=\"0\" />\n      <enum name=\"Batch\" value=\"1\" />\n      <enum name=\"Network\" value=\"2\" />\n      <enum name=\"ClearText\" value=\"3\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/clientCertificateMappingAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/digestAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"realm\" type=\"string\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/iisClientCertificateMappingAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"oneToOneCertificateMappingsEnabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"manyToOneCertificateMappingsEnabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"defaultLogonDomain\" type=\"string\" />\n    <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n      <enum name=\"Interactive\" value=\"0\" />\n      <enum name=\"Batch\" value=\"1\" />\n      <enum name=\"Network\" value=\"2\" />\n      <enum name=\"ClearText\" value=\"3\" />\n    </attribute>\n    <element name=\"manyToOneMappings\">\n      <collection addElement=\"add\" clearElement=\"clear\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"description\" type=\"string\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"permissionMode\" type=\"enum\" defaultValue=\"Allow\">\n          <enum name=\"Allow\" value=\"1\" />\n          <enum name=\"Deny\" value=\"2\" />\n        </attribute>\n        <element name=\"rules\">\n          <collection addElement=\"add\" clearElement=\"clear\">\n            <attribute name=\"certificateField\" type=\"enum\" required=\"true\" isCombinedKey=\"true\">\n              <enum name=\"Subject\" value=\"1\" />\n              <enum name=\"Issuer\" value=\"2\" />\n            </attribute>\n            <attribute name=\"certificateSubField\" type=\"string\" caseSensitive=\"true\" required=\"true\" isCombinedKey=\"true\" />\n            <attribute name=\"matchCriteria\" type=\"string\" caseSensitive=\"true\" required=\"true\" isCombinedKey=\"true\" />\n            <attribute name=\"compareCaseSensitive\" type=\"bool\" isCombinedKey=\"true\" defaultValue=\"true\" />\n          </collection>\n        </element>\n        <attribute name=\"userName\" type=\"string\" validationType=\"nonEmptyString\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n      </collection>\n    </element>\n    <element name=\"oneToOneMappings\">\n      <collection addElement=\"add\" clearElement=\"clear\">\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"userName\" type=\"string\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"certificate\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/windowsAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <element name=\"providers\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"value\" type=\"string\" isUniqueKey=\"true\" />\n      </collection>\n    </element>\n    <attribute name=\"authPersistSingleRequest\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"authPersistNonNTLM\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"useKernelMode\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"useAppPoolCredentials\" type=\"bool\" defaultValue=\"false\" />\n    <element name=\"extendedProtection\">\n        <attribute name=\"tokenChecking\" type=\"enum\" defaultValue=\"None\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"Allow\" value=\"1\" />\n            <enum name=\"Require\" value=\"2\" />\n        </attribute>\n        <attribute name=\"flags\" type=\"flags\" defaultValue=\"None\">\n            <flag name=\"None\" value=\"0\" />\n            <flag name=\"Proxy\" value=\"1\" />\n            <flag name=\"NoServiceNameCheck\" value=\"2\"/>\n            <flag name=\"AllowDotlessSpn\" value=\"4\" />\n            <flag name=\"ProxyCohosting\" value=\"32\" />\n        </attribute>\n        <collection addElement=\"spn\" clearElement=\"clearSpns\" removeElement=\"removeSpn\">\n            <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authorization\">\n    <attribute name=\"bypassLoginPages\" type=\"bool\" defaultValue=\"true\" />\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"accessType\" type=\"enum\" required=\"true\">\n        <enum name=\"Allow\" value=\"0\" />\n        <enum name=\"Deny\" value=\"1\" />\n      </attribute>\n      <attribute name=\"users\" type=\"string\" isCombinedKey=\"true\" />\n      <attribute name=\"roles\" type=\"string\" isCombinedKey=\"true\" />\n      <attribute name=\"verbs\" type=\"string\" caseSensitive=\"true\" isCombinedKey=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/ipSecurity\">\n    <attribute name=\"enableReverseDns\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"allowUnlisted\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableProxyMode\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"denyAction\" type=\"enum\" defaultValue=\"Forbidden\">\n      <enum name=\"AbortRequest\" value=\"0\" />\n      <enum name=\"Unauthorized\" value=\"401\" />\n      <enum name=\"Forbidden\" value=\"403\" />\n      <enum name=\"NotFound\" value=\"404\" />\n    </attribute>\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"ipAddress\" type=\"string\" isCombinedKey=\"true\" />\n      <attribute name=\"subnetMask\" type=\"string\" isCombinedKey=\"true\" defaultValue=\"255.255.255.255\" />\n      <attribute name=\"domainName\" type=\"string\" isCombinedKey=\"true\" />\n      <attribute name=\"allowed\" type=\"bool\" defaultValue=\"false\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/dynamicIpSecurity\">\n    <attribute name=\"denyAction\" type=\"enum\" defaultValue=\"Forbidden\">\n      <enum name=\"AbortRequest\" value=\"0\" />\n      <enum name=\"Unauthorized\" value=\"401\" />\n      <enum name=\"Forbidden\" value=\"403\" />\n      <enum name=\"NotFound\" value=\"404\" />\n    </attribute>\n    <attribute name=\"enableProxyMode\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"enableLoggingOnlyMode\" type=\"bool\" defaultValue=\"false\" />\n    <element name=\"denyByConcurrentRequests\">\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"maxConcurrentRequests\" type=\"uint\" defaultValue=\"5\" validationType=\"integerRange\" validationParameter=\"1,4294967295\"/>\n    </element>\n    <element name=\"denyByRequestRate\">\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"maxRequests\" type=\"uint\" defaultValue=\"20\" validationType=\"integerRange\" validationParameter=\"1,4294967295\" />\n      <attribute name=\"requestIntervalInMilliseconds\" type=\"uint\" defaultValue=\"200\" validationType=\"integerRange\" validationParameter=\"1,4294967295\" />\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/isapiCgiRestriction\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"path\" type=\"string\" expanded=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"allowed\" type=\"bool\" required=\"true\" defaultValue=\"false\" />\n      <attribute name=\"groupId\" type=\"string\" required=\"false\" />\n      <attribute name=\"description\" type=\"string\" />\n    </collection>\n    <attribute name=\"notListedIsapisAllowed\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"notListedCgisAllowed\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/requestFiltering\">\n    <attribute name=\"allowDoubleEscaping\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"allowHighBitCharacters\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"unescapeQueryString\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"removeServerHeader\" type=\"bool\" defaultvalue=\"false\" />\n    <element name=\"fileExtensions\">\n      <attribute name=\"allowUnlisted\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"applyToWebDAV\" type=\"bool\" defaultValue=\"true\" />\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"fileExtension\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"allowed\" type=\"bool\" required=\"true\" defaultValue=\"true\" />\n      </collection>\n    </element>\n    <element name=\"requestLimits\">\n      <attribute name=\"maxAllowedContentLength\" type=\"uint\" defaultValue=\"30000000\" />\n      <attribute name=\"maxUrl\" type=\"uint\" defaultValue=\"4096\" />\n      <attribute name=\"maxQueryString\" type=\"uint\" defaultValue=\"2048\" />\n      <element name=\"headerLimits\">\n        <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n          <attribute name=\"header\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"sizeLimit\" type=\"uint\" required=\"true\" />\n        </collection>\n      </element>\n    </element>\n    <element name=\"verbs\">\n      <attribute name=\"allowUnlisted\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"applyToWebDAV\" type=\"bool\" defaultValue=\"true\" />\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"verb\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"allowed\" type=\"bool\" required=\"true\" />\n      </collection>\n    </element>\n    <element name=\"hiddenSegments\">\n      <attribute name=\"applyToWebDAV\" type=\"bool\" defaultValue=\"true\" />\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"segment\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"alwaysAllowedUrls\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"url\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"alwaysAllowedQueryStrings\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"queryString\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"denyUrlSequences\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"sequence\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"denyQueryStringSequences\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"sequence\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"filteringRules\">\n      <collection addElement=\"filteringRule\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <attribute name=\"scanUrl\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"scanQueryString\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"scanAllRaw\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"denyUnescapedPercent\" type=\"bool\" defaultValue=\"true\" />\n        <element name=\"scanHeaders\">\n          <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n            <attribute name=\"requestHeader\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          </collection>\n        </element>\n        <element name=\"appliesTo\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n            <attribute name=\"fileExtension\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          </collection>\n        </element>\n        <element name=\"denyStrings\">\n          <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n            <attribute name=\"string\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          </collection>\n        </element>\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/serverRuntime\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"appConcurrentRequestLimit\" type=\"uint\" defaultValue=\"5000\" />\n    <attribute name=\"maxRequestEntityAllowed\" type=\"uint\" defaultValue=\"4294967295\" />\n    <attribute name=\"uploadReadAheadSize\" type=\"uint\" defaultValue=\"49152\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n    <attribute name=\"alternateHostName\" type=\"string\" />\n    <attribute name=\"enableNagling\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"frequentHitThreshold\" type=\"uint\" defaultValue=\"2\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" />\n    <attribute name=\"frequentHitTimePeriod\" type=\"timeSpan\" defaultValue=\"00:00:10\" />\n    <attribute name=\"authenticatedUserOverride\" type=\"enum\" defaultValue=\"UseAuthenticatedUser\">\n      <enum name=\"UseAuthenticatedUser\" value=\"1\" />\n      <enum name=\"UseWorkerProcessUser\" value=\"2\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/serverSideInclude\">\n    <attribute name=\"ssiExecDisable\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/staticContent\">\n    <element name=\"clientCache\">\n      <attribute name=\"cacheControlMode\" type=\"enum\" defaultValue=\"NoControl\">\n        <enum name=\"NoControl\" value=\"0\" />\n        <enum name=\"DisableCache\" value=\"1\" />\n        <enum name=\"UseMaxAge\" value=\"2\" />\n        <enum name=\"UseExpires\" value=\"3\" />\n      </attribute>\n      <attribute name=\"cacheControlMaxAge\" type=\"timeSpan\" defaultValue=\"1.00:00:00\" />\n      <attribute name=\"httpExpires\" type=\"string\" />\n      <attribute name=\"cacheControlCustom\" type=\"string\" />\n      <attribute name=\"setEtag\" type=\"bool\" defaultValue=\"true\" />\n    </element>\n    <attribute name=\"defaultDocFooter\" type=\"string\" caseSensitive=\"true\" />\n    <attribute name=\"isDocFooterFileName\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"enableDocFooter\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"mimeMap\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"fileExtension\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"mimeType\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/tracing/traceFailedRequests\">\n    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n      <attribute name=\"path\" type=\"string\" isUniqueKey =\"true\" />\n      <attribute name=\"customActionExe\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"customActionParams\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"customActionTriggerLimit\" type=\"uint\" defaultValue=\"1\" validationType=\"integerRange\" validationParameter=\"0,10000\" />\n      <element name=\"traceAreas\">\n        <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n          <attribute name=\"provider\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n          <attribute name=\"areas\" type=\"string\" />\n          <attribute name=\"verbosity\" type=\"enum\" defaultValue=\"Warning\">\n            <enum name=\"General\" value=\"0\" />\n            <enum name=\"CriticalError\" value=\"1\" />\n            <enum name=\"Error\" value=\"2\" />\n            <enum name=\"Warning\" value=\"3\" />\n            <enum name=\"Information\" value=\"4\" />\n            <enum name=\"Verbose\" value=\"5\" />\n          </attribute>\n        </collection>\n      </element>\n      <element name=\"failureDefinitions\">\n        <attribute name=\"timeTaken\" type=\"timeSpan\" defaultValue=\"00:00:00\"/>\n        <attribute name=\"traceAllAfterTimeout\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"statusCodes\" type=\"string\"/>\n        <attribute name=\"verbosity\" type=\"enum\" defaultValue=\"Ignore\">\n          <enum name=\"Ignore\" value=\"0\" />\n          <enum name=\"CriticalError\" value=\"1\" />\n          <enum name=\"Error\" value=\"2\" />\n          <enum name=\"Warning\" value=\"3\" />\n        </attribute>\n      </element>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/tracing/traceProviderDefinitions\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"guid\" type=\"string\" required=\"true\"/>\n      <element name=\"areas\">\n        <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n          <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n          <attribute name=\"value\" type=\"uint\" required=\"true\" />\n        </collection>\n      </element>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/urlCompression\">\n    <attribute name=\"doStaticCompression\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"doDynamicCompression\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"dynamicCompressionBeforeCache\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/validation\">\n    <attribute name=\"validateIntegratedModeConfiguration\" type=\"bool\" defaultValue=\"true\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/webSocket\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\"/>\n    <attribute name=\"receiveBufferLimit\" type=\"uint\" defaultValue=\"4194304\" validationType=\"integerRange\"  validationParameter=\"4096,2147483647\"/>\n    <attribute name=\"pingInterval\" type=\"timeSpan\" defaultValue=\"00:00:00\" validationType=\"timeSpanRange\" validationParameter=\"0,86400,1\"  />\n  </sectionSchema>\n\n  <sectionSchema name=\"configPaths\">\n    <collection addElement=\"searchResult\">\n      <attribute name=\"path\" type=\"string\" />\n      <attribute name=\"locationPath\" type=\"string\" />\n      <attribute name=\"status\" type=\"uint\" />\n      <collection addElement=\"section\">\n        <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" />\n      </collection>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"moduleProviders\">\n    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"type\" type=\"string\" required=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"modules\">\n    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"administratorsProviders\">\n    <attribute name=\"defaultProvider\" type=\"string\" defaultValue=\"ConfigurationAuthorizationProvider\" />\n    <collection addElement=\"add\" allowUnrecognizedAttributes=\"true\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"type\" type=\"string\" required=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"administrators\">\n    <collection addElement=\"managementScope\">\n      <attribute name=\"path\" type=\"string\" required=\"true\" isUniqueKey =\"true\" />\n      <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey =\"true\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"credentialType\" type=\"enum\" defaultValue=\"IISManager\">\n          <enum name=\"IISManager\" value=\"0\" />\n          <enum name=\"Windows\" value=\"1\" />\n          <enum name=\"WindowsGroup\" value=\"2\" />\n        </attribute>\n      </collection>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"configurationRedirection\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"path\" type=\"string\" expanded=\"true\" defaultValue=\"\" />\n    <attribute name=\"userName\" type=\"string\" defaultValue=\"\" />\n    <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n    <attribute name=\"enableUncPolling\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"pollingPeriod\" type=\"timeSpan\" defaultValue=\"00:03:00\" />\n  </sectionSchema>\n\n</configSchema>\n"
  },
  {
    "path": "Microsoft.Web.Administration/Resources/original.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    IIS configuration sections.\n\n    For schema documentation, see\n    %IIS_BIN%\\config\\schema\\IIS_schema.xml.\n    \n    Please make a backup of this file before making any changes to it.\n\n    NOTE: The following environment variables are available to be used\n          within this file and are understood by the IIS Express.\n\n          %IIS_USER_HOME% - The IIS Express home directory for the user\n          %IIS_SITES_HOME% - The default home directory for sites\n          %IIS_BIN% - The location of the IIS Express binaries\n          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%\n\n-->\n\n<configuration>\n\n    <!--\n\n        The <configSections> section controls the registration of sections.\n        Section is the basic unit of deployment, locking, searching and\n        containment for configuration settings.\n        \n        Every section belongs to one section group.\n        A section group is a container of logically-related sections.\n        \n        Sections cannot be nested.\n        Section groups may be nested.\n        \n        <section\n            name=\"\"  [Required, Collection Key] [XML name of the section]\n            allowDefinition=\"Everywhere\" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]\n            overrideModeDefault=\"Allow\"  [Allow|Deny] [Default delegation mode]\n            allowLocation=\"true\"  [true|false] [Allowed in location tags]\n        />\n        \n        The recommended way to unlock sections is by using a location tag:\n        <location path=\"Default Web Site\" overrideMode=\"Allow\">\n            <system.webServer>\n                <asp />\n            </system.webServer>\n        </location>\n\n    -->\n    <configSections>\n        <sectionGroup name=\"system.applicationHost\">\n            <section name=\"applicationPools\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"configHistory\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"customMetadata\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"listenerAdapters\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"log\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"preloadProviders\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"sites\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"webLimits\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n\n        <sectionGroup name=\"system.webServer\">\n            <section name=\"asp\" overrideModeDefault=\"Deny\" />\n            <section name=\"caching\" overrideModeDefault=\"Allow\" />\n            <section name=\"cgi\" overrideModeDefault=\"Deny\" />\n            <section name=\"defaultDocument\" overrideModeDefault=\"Allow\" />\n            <section name=\"directoryBrowse\" overrideModeDefault=\"Allow\" />\n            <section name=\"fastCgi\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"globalModules\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"handlers\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpCompression\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpErrors\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpLogging\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpProtocol\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpRedirect\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpTracing\" overrideModeDefault=\"Deny\" />\n            <section name=\"isapiFilters\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n            <section name=\"modules\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n            <section name=\"odbcLogging\" overrideModeDefault=\"Deny\" />\n            <sectionGroup name=\"security\">\n                <section name=\"access\" overrideModeDefault=\"Deny\" />\n                <section name=\"applicationDependencies\" overrideModeDefault=\"Deny\" />\n                <sectionGroup name=\"authentication\">\n                    <section name=\"anonymousAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"basicAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"clientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"digestAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"iisClientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"windowsAuthentication\" overrideModeDefault=\"Deny\" />\n                </sectionGroup>\n                <section name=\"authorization\" overrideModeDefault=\"Allow\" />\n                <section name=\"ipSecurity\" overrideModeDefault=\"Deny\" />\n                <section name=\"dynamicIpSecurity\" overrideModeDefault=\"Deny\" />\n                <section name=\"isapiCgiRestriction\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n                <section name=\"requestFiltering\" overrideModeDefault=\"Allow\" />\n            </sectionGroup>\n            <section name=\"serverRuntime\" overrideModeDefault=\"Deny\" />\n            <section name=\"serverSideInclude\" overrideModeDefault=\"Deny\" />\n            <section name=\"staticContent\" overrideModeDefault=\"Allow\" />\n            <sectionGroup name=\"tracing\">\n                <section name=\"traceFailedRequests\" overrideModeDefault=\"Allow\" />\n                <section name=\"traceProviderDefinitions\" overrideModeDefault=\"Deny\" />\n            </sectionGroup>\n            <section name=\"urlCompression\" overrideModeDefault=\"Allow\" />\n            <section name=\"validation\" overrideModeDefault=\"Allow\" />\n            <sectionGroup name=\"webdav\">\n                <section name=\"globalSettings\" overrideModeDefault=\"Deny\" />\n                <section name=\"authoring\" overrideModeDefault=\"Deny\" />\n                <section name=\"authoringRules\" overrideModeDefault=\"Deny\" />\n            </sectionGroup>\n            <sectionGroup name=\"rewrite\">\n                <section name=\"allowedServerVariables\" overrideModeDefault=\"Deny\" />\n                <section name=\"rules\" overrideModeDefault=\"Allow\" />\n                <section name=\"outboundRules\" overrideModeDefault=\"Allow\" />\n                <section name=\"globalRules\" overrideModeDefault=\"Deny\" allowDefinition=\"AppHostOnly\" />\n                <section name=\"providers\" overrideModeDefault=\"Allow\" />\n                <section name=\"rewriteMaps\" overrideModeDefault=\"Allow\" />\n            </sectionGroup>\n            <section name=\"applicationInitialization\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Allow\" />\n            <section name=\"webSocket\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n    </configSections>\n\n    <!--<configProtectedData>\n        <providers>\n            <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=\" />\n            <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=\" />\n        </providers>\n    </configProtectedData>-->\n  \n    <configProtectedData>\n        <providers>\n            <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4+jnvVwdmahiJvH8sOJxtDMnsR+0yNnzh79Dd3oZMnVmAqLQDUpUZEwMJSlfhnLl8q5CEHposKZ5p3zl2oOeow36FweUI6WTSWlc4jVQlnCcLpvR1+CVF7I2XS/TZKGkgFNapTAJUAAL4q5LjGIEGMNiSCgFHOvJDGVDq3UMtU+vR5P7ZdbJmxswBf53Ut4iMAXxOz7JTSzwtIUmqK5ML95cqFt3WSLmXHcgaBX37iwS9kpgj2Sq+by63NYAE2RBsUb6JfPrVDKReNWK6A2o1QJBXF7jrAEVwvdX6DSw0gulMypeJ2I1ltOCgr8CTi+CMxStRbdQE+OA+83g0dKvgw==\" />\n            <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAD11v8x8UPbc9pt2pFRvgGuAqWTMRh0jP+/pUcEDZN6oSYAIqVjp1EgbkrakdC+/TrMsPkccjudZ6OxlhW8fbVxA71WQdjFkjnObuXXj68ZTD01HF310/Gh56XIvALkBz2DFJ0spMrQ1rQoOllcaqAy/6aSsIaD16ApmrTcDECoJ7LP0eJYcbBD+cvITl5oHN4HDYhZYqVn4M1pkEcZZxFWh1rlqhlkb9NY5hF+rS3U32XqKAcz4lXQELQmXkPTWQ/DoKTreE0yKlPTLnz6WztWNtBIuVvfNMxSHj4WlN420iejpuk3LjYU5lvns5MJzs5L/7bBDdxPpIEpB1p645eQ==\" />\n        </providers>\n    </configProtectedData>\n  \n    <system.applicationHost>\n\n        <applicationPools>\n            <!--<add name=\"Clr4IntegratedAppPool\" managedRuntimeVersion=\"v4.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\">\n                <processModel loadUserProfile=\"true\" />\n            </add>\n            <add name=\"Clr4ClassicAppPool\" managedRuntimeVersion=\"v4.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"Clr2IntegratedAppPool\" managedRuntimeVersion=\"v2.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"Clr2ClassicAppPool\" managedRuntimeVersion=\"v2.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"UnmanagedClassicAppPool\" managedPipelineMode=\"Classic\" />-->\n            <applicationPoolDefaults managedRuntimeLoader=\"v4.0\" />\n        </applicationPools>\n\n        <!--\n\n          The <listenerAdapters> section defines the protocols with which the\n          Windows Process Activation Service (WAS) binds.\n\n        -->\n        <listenerAdapters>\n            <add name=\"http\" />\n        </listenerAdapters>\n\n        <sites>\n            <!--<site name=\"WebSite1\" id=\"1\">\n                <application path=\"/\">\n                    <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\WebSite1\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\":8080:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"GuessMeWeb\" id=\"2\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\GuessMeWeb\\GuessMeWeb\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:61902:localhost\" />\n                    <binding protocol=\"https\" bindingInformation=\"*:44300:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebSite2\" id=\"3\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\Website2\" />\n                              <virtualDirectory path=\"/help\" physicalPath=\"%JEXUS_TEST_HOME%\\help\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:55165:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication1\" id=\"4\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication1\\WebApplication1\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:10830:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"SampleWCFService\" id=\"5\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\codesamples\\SampleWCFService\\SampleWCFService\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:4605:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"RemoteServices\" id=\"6\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\JexusManager\\RemoteServices\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:14150:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication2\" id=\"7\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication2\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:9827:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication3\" id=\"8\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication3\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:14234:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Performance.ReferenceApp\" id=\"9\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Performance.ReferenceApp\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:17613:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Sandbox.WebServer-Site\" id=\"10\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebServer-Site\" />\n                </application>\n                <application path=\"/Katana.Sandbox.WebServer\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebServer\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:18001:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Sandbox.WebClient-Site\" id=\"11\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebClient-Site\" />\n                </application>\n                <application path=\"/Katana.Sandbox.WebClient\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebClient\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:18002:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Mono328\" id=\"12\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\Mono328\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:4330:localhost\" />\n                </bindings>\n            </site>-->\n            <siteDefaults>\n                <logFile directory=\"%IIS_USER_HOME%\\Logs\" />\n                <traceFailedRequestsLogging directory=\"%IIS_USER_HOME%\\TraceLogFiles\" enabled=\"true\" />\n            </siteDefaults>\n            <applicationDefaults applicationPool=\"Clr4IntegratedAppPool\" />\n        </sites>\n\n    </system.applicationHost>\n\n    <system.webServer>\n\n        <asp scriptErrorSentToBrowser=\"true\">\n            <cache diskTemplateCacheDirectory=\"%TEMP%\\iisexpress\\ASP Compiled Templates\" />\n        </asp>\n\n      <caching>\n        <profiles>\n          <add duration=\"00:00:00\" extension=\".cs\"/>\n        </profiles>\n      </caching>\n\n        <defaultDocument>\n            <files>\n                <!--<add value=\"Default.htm\" />\n                <add value=\"Default.asp\" />\n                <add value=\"index.htm\" />\n                <add value=\"index.html\" />\n                <add value=\"iisstart.htm\" />\n                <add value=\"default.aspx\" />-->\n            </files>\n        </defaultDocument>\n\n        <!--\n\n          The <globalModules> section defines all native-code modules.\n          To enable a module, specify it in the <modules> section.\n\n        -->\n        <globalModules>\n            <add name=\"UriCacheModule\" image=\"%IIS_BIN%\\cachuri.dll\" />\n<!--            <add name=\"FileCacheModule\" image=\"%IIS_BIN%\\cachfile.dll\" />  -->\n            <add name=\"TokenCacheModule\" image=\"%IIS_BIN%\\cachtokn.dll\" />\n<!--            <add name=\"HttpCacheModule\" image=\"%IIS_BIN%\\cachhttp.dll\" /> -->\n            <add name=\"DynamicCompressionModule\" image=\"%IIS_BIN%\\compdyn.dll\" />\n            <add name=\"StaticCompressionModule\" image=\"%IIS_BIN%\\compstat.dll\" />\n            <add name=\"DefaultDocumentModule\" image=\"%IIS_BIN%\\defdoc.dll\" />\n            <add name=\"DirectoryListingModule\" image=\"%IIS_BIN%\\dirlist.dll\" />\n            <add name=\"ProtocolSupportModule\" image=\"%IIS_BIN%\\protsup.dll\" />\n            <add name=\"HttpRedirectionModule\" image=\"%IIS_BIN%\\redirect.dll\" />\n            <add name=\"ServerSideIncludeModule\" image=\"%IIS_BIN%\\iis_ssi.dll\" />\n            <add name=\"StaticFileModule\" image=\"%IIS_BIN%\\static.dll\" />\n            <add name=\"AnonymousAuthenticationModule\" image=\"%IIS_BIN%\\authanon.dll\" />\n            <add name=\"CertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authcert.dll\" />\n            <add name=\"UrlAuthorizationModule\" image=\"%IIS_BIN%\\urlauthz.dll\" />\n            <add name=\"BasicAuthenticationModule\" image=\"%IIS_BIN%\\authbas.dll\" />\n            <add name=\"WindowsAuthenticationModule\" image=\"%IIS_BIN%\\authsspi.dll\" />\n<!--            <add name=\"DigestAuthenticationModule\" image=\"%IIS_BIN%\\authmd5.dll\" /> -->\n            <add name=\"IISCertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authmap.dll\" />\n            <add name=\"IpRestrictionModule\" image=\"%IIS_BIN%\\iprestr.dll\" />\n            <add name=\"DynamicIpRestrictionModule\" image=\"%IIS_BIN%\\diprestr.dll\" />\n            <add name=\"RequestFilteringModule\" image=\"%IIS_BIN%\\modrqflt.dll\" />\n            <add name=\"CustomLoggingModule\" image=\"%IIS_BIN%\\logcust.dll\" />\n            <add name=\"CustomErrorModule\" image=\"%IIS_BIN%\\custerr.dll\" />\n            <add name=\"HttpLoggingModule\" image=\"%IIS_BIN%\\loghttp.dll\" />\n<!--            <add name=\"TracingModule\" image=\"%IIS_BIN%\\iisetw.dll\" /> -->\n            <add name=\"FailedRequestsTracingModule\" image=\"%IIS_BIN%\\iisfreb.dll\" />\n            <add name=\"RequestMonitorModule\" image=\"%IIS_BIN%\\iisreqs.dll\" />\n            <add name=\"IsapiModule\" image=\"%IIS_BIN%\\isapi.dll\" />\n            <add name=\"IsapiFilterModule\" image=\"%IIS_BIN%\\filter.dll\" />\n            <add name=\"CgiModule\" image=\"%IIS_BIN%\\cgi.dll\" />\n            <add name=\"FastCgiModule\" image=\"%IIS_BIN%\\iisfcgi.dll\" />\n<!--            <add name=\"WebDAVModule\" image=\"%IIS_BIN%\\webdav.dll\" /> -->\n            <add name=\"RewriteModule\" image=\"%IIS_BIN%\\rewrite.dll\" />\n            <add name=\"ConfigurationValidationModule\" image=\"%IIS_BIN%\\validcfg.dll\" />\n            <add name=\"ApplicationInitializationModule\" image=\"%IIS_BIN%\\warmup.dll\" />\n            <add name=\"WebSocketModule\" image=\"%IIS_BIN%\\iiswsock.dll\" />\n            <add name=\"WebMatrixSupportModule\" image=\"%IIS_BIN%\\webmatrixsup.dll\" />\n            <add name=\"ManagedEngine\" image=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness32\" />\n            <add name=\"ManagedEngine64\" image=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness64\" />\n            <add name=\"ManagedEngineV4.0_32bit\" image=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness32\" />\n            <add name=\"ManagedEngineV4.0_64bit\" image=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness64\" />\n        </globalModules>\n\n        <httpCompression directory=\"%TEMP%\\iisexpress\\IIS Temporary Compressed Files\">\n            <scheme name=\"gzip\" dll=\"%IIS_BIN%\\gzip.dll\" />\n            <dynamicTypes>\n                <add mimeType=\"text/*\" enabled=\"true\" />\n                <add mimeType=\"message/*\" enabled=\"true\" />\n                <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n                <add mimeType=\"*/*\" enabled=\"false\" />\n            </dynamicTypes>\n            <staticTypes>\n                <add mimeType=\"text/*\" enabled=\"true\" />\n                <add mimeType=\"message/*\" enabled=\"true\" />\n                <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n                <add mimeType=\"application/atom+xml\" enabled=\"true\" />\n                <add mimeType=\"application/xaml+xml\" enabled=\"true\" />\n                <add mimeType=\"*/*\" enabled=\"false\" />\n            </staticTypes>\n        </httpCompression>\n\n        <httpErrors lockAttributes=\"allowAbsolutePathsWhenDelegated,defaultPath\">\n            <!--<error statusCode=\"401\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"401.htm\" />\n            <error statusCode=\"403\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"403.htm\" />\n            <error statusCode=\"404\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"404.htm\" />\n            <error statusCode=\"405\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"405.htm\" />\n            <error statusCode=\"406\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"406.htm\" />\n            <error statusCode=\"412\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"412.htm\" />\n            <error statusCode=\"500\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"500.htm\" />\n            <error statusCode=\"501\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"501.htm\" />\n            <error statusCode=\"502\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"502.htm\" />-->\n        </httpErrors>\n\n        <httpProtocol>\n            <customHeaders>\n                <clear />\n                <add name=\"X-Powered-By\" value=\"ASP.NET\" />\n            </customHeaders>\n            <redirectHeaders>\n                <clear />\n            </redirectHeaders>\n        </httpProtocol>\n\n        <isapiFilters>\n            <filter name=\"ASP.Net_2.0.50727-64\" path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv2.0\" />\n            <filter name=\"ASP.Net_2.0.50727.0\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv2.0\" />\n            <filter name=\"ASP.Net_2.0_for_v1.1\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"runtimeVersionv1.1\" />\n            <filter name=\"ASP.Net_4.0_32bit\" path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv4.0\" />\n            <filter name=\"ASP.Net_4.0_64bit\" path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv4.0\" />\n        </isapiFilters>\n\n        <security>\n\n            <applicationDependencies>\n                <application name=\"Active Server Pages\" groupId=\"ASP\" />\n            </applicationDependencies>\n\n            <authentication>\n\n                <anonymousAuthentication userName=\"\" />\n\n                <windowsAuthentication>\n                    <providers>\n                        <add value=\"Negotiate\" />\n                        <add value=\"NTLM\" />\n                    </providers>\n                </windowsAuthentication>\n\n            </authentication>\n\n            <authorization>\n                <add accessType=\"Allow\" users=\"*\" />\n            </authorization>\n\n            <isapiCgiRestriction notListedIsapisAllowed=\"true\" notListedCgisAllowed=\"true\">\n                <add path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n            </isapiCgiRestriction>\n\n          <ipSecurity>\n            <add allowed=\"true\" ipAddress=\"10.0.0.0\" />\n          </ipSecurity>\n            <requestFiltering>\n              <requestLimits>\n                <headerLimits>\n                  <add header=\"test\" sizeLimit=\"500\"/>\n                </headerLimits>\n              </requestLimits>\n              <alwaysAllowedUrls>\n                <add url=\"test\"/>\n              </alwaysAllowedUrls>\n              <denyUrlSequences>\n                <add sequence=\"test\"/>\n              </denyUrlSequences>\n              <alwaysAllowedQueryStrings>\n                <add queryString=\"test\" />\n              </alwaysAllowedQueryStrings>\n              <denyQueryStringSequences>\n                <add sequence=\"test\" />\n              </denyQueryStringSequences>\n              <filteringRules>\n                <filteringRule name=\"test\">\n                </filteringRule>\n              </filteringRules>\n              <verbs>\n                <add verb=\"PUT\" allowed=\"false\"/>\n              </verbs>\n                <fileExtensions>\n                    <add fileExtension=\".asa\" allowed=\"false\" />\n                    <add fileExtension=\".asax\" allowed=\"false\" />\n                    <add fileExtension=\".ascx\" allowed=\"false\" />\n                    <add fileExtension=\".master\" allowed=\"false\" />\n                    <add fileExtension=\".skin\" allowed=\"false\" />\n                    <add fileExtension=\".browser\" allowed=\"false\" />\n                    <add fileExtension=\".sitemap\" allowed=\"false\" />\n                    <add fileExtension=\".config\" allowed=\"false\" />\n                    <add fileExtension=\".cs\" allowed=\"false\" />\n                    <add fileExtension=\".csproj\" allowed=\"false\" />\n                    <add fileExtension=\".vb\" allowed=\"false\" />\n                    <add fileExtension=\".vbproj\" allowed=\"false\" />\n                    <add fileExtension=\".webinfo\" allowed=\"false\" />\n                    <add fileExtension=\".licx\" allowed=\"false\" />\n                    <add fileExtension=\".resx\" allowed=\"false\" />\n                    <add fileExtension=\".resources\" allowed=\"false\" />\n                    <add fileExtension=\".mdb\" allowed=\"false\" />\n                    <add fileExtension=\".vjsproj\" allowed=\"false\" />\n                    <add fileExtension=\".java\" allowed=\"false\" />\n                    <add fileExtension=\".jsl\" allowed=\"false\" />\n                    <add fileExtension=\".ldb\" allowed=\"false\" />\n                    <add fileExtension=\".dsdgm\" allowed=\"false\" />\n                    <add fileExtension=\".ssdgm\" allowed=\"false\" />\n                    <add fileExtension=\".lsad\" allowed=\"false\" />\n                    <add fileExtension=\".ssmap\" allowed=\"false\" />\n                    <add fileExtension=\".cd\" allowed=\"false\" />\n                    <add fileExtension=\".dsprototype\" allowed=\"false\" />\n                    <add fileExtension=\".lsaprototype\" allowed=\"false\" />\n                    <add fileExtension=\".sdm\" allowed=\"false\" />\n                    <add fileExtension=\".sdmDocument\" allowed=\"false\" />\n                    <add fileExtension=\".mdf\" allowed=\"false\" />\n                    <add fileExtension=\".ldf\" allowed=\"false\" />\n                    <add fileExtension=\".ad\" allowed=\"false\" />\n                    <add fileExtension=\".dd\" allowed=\"false\" />\n                    <add fileExtension=\".ldd\" allowed=\"false\" />\n                    <add fileExtension=\".sd\" allowed=\"false\" />\n                    <add fileExtension=\".adprototype\" allowed=\"false\" />\n                    <add fileExtension=\".lddprototype\" allowed=\"false\" />\n                    <add fileExtension=\".exclude\" allowed=\"false\" />\n                    <add fileExtension=\".refresh\" allowed=\"false\" />\n                    <add fileExtension=\".compiled\" allowed=\"false\" />\n                    <add fileExtension=\".msgx\" allowed=\"false\" />\n                    <add fileExtension=\".vsdisco\" allowed=\"false\" />\n                    <add fileExtension=\".rules\" allowed=\"false\" />\n                </fileExtensions>\n\n                <hiddenSegments>\n                    <!--<add segment=\"web.config\" />\n                    <add segment=\"bin\" />\n                    <add segment=\"App_code\" />\n                    <add segment=\"App_GlobalResources\" />\n                    <add segment=\"App_LocalResources\" />\n                    <add segment=\"App_WebReferences\" />\n                    <add segment=\"App_Data\" />\n                    <add segment=\"App_Browsers\" />-->\n                </hiddenSegments>\n            </requestFiltering>\n\n        </security>\n\n        <staticContent lockAttributes=\"isDocFooterFileName\">\n            <mimeMap fileExtension=\".323\" mimeType=\"text/h323\" />\n            <mimeMap fileExtension=\".3g2\" mimeType=\"video/3gpp2\" />\n            <mimeMap fileExtension=\".3gp2\" mimeType=\"video/3gpp2\" />\n            <mimeMap fileExtension=\".3gp\" mimeType=\"video/3gpp\" />\n            <mimeMap fileExtension=\".3gpp\" mimeType=\"video/3gpp\" />\n            <mimeMap fileExtension=\".aac\" mimeType=\"audio/aac\" />\n            <mimeMap fileExtension=\".aaf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".aca\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".accdb\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".accde\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".accdt\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".acx\" mimeType=\"application/internet-property-stream\" />\n            <mimeMap fileExtension=\".adt\" mimeType=\"audio/vnd.dlna.adts\" />\n            <mimeMap fileExtension=\".adts\" mimeType=\"audio/vnd.dlna.adts\" />\n            <mimeMap fileExtension=\".afm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ai\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".aif\" mimeType=\"audio/x-aiff\" />\n            <mimeMap fileExtension=\".aifc\" mimeType=\"audio/aiff\" />\n            <mimeMap fileExtension=\".aiff\" mimeType=\"audio/aiff\" />\n            <mimeMap fileExtension=\".application\" mimeType=\"application/x-ms-application\" />\n            <mimeMap fileExtension=\".art\" mimeType=\"image/x-jg\" />\n            <mimeMap fileExtension=\".asd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".asf\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".asi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".asm\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".asr\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".asx\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".atom\" mimeType=\"application/atom+xml\" />\n            <mimeMap fileExtension=\".au\" mimeType=\"audio/basic\" />\n            <mimeMap fileExtension=\".avi\" mimeType=\"video/x-msvideo\" />\n            <mimeMap fileExtension=\".axs\" mimeType=\"application/olescript\" />\n            <mimeMap fileExtension=\".bas\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".bcpio\" mimeType=\"application/x-bcpio\" />\n            <mimeMap fileExtension=\".bin\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".bmp\" mimeType=\"image/bmp\" />\n            <mimeMap fileExtension=\".c\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".cab\" mimeType=\"application/vnd.ms-cab-compressed\" />\n            <mimeMap fileExtension=\".calx\" mimeType=\"application/vnd.ms-office.calx\" />\n            <mimeMap fileExtension=\".cat\" mimeType=\"application/vnd.ms-pki.seccat\" />\n            <mimeMap fileExtension=\".cdf\" mimeType=\"application/x-cdf\" />\n            <mimeMap fileExtension=\".chm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".class\" mimeType=\"application/x-java-applet\" />\n            <mimeMap fileExtension=\".clp\" mimeType=\"application/x-msclip\" />\n            <mimeMap fileExtension=\".cmx\" mimeType=\"image/x-cmx\" />\n            <mimeMap fileExtension=\".cnf\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".cod\" mimeType=\"image/cis-cod\" />\n            <mimeMap fileExtension=\".cpio\" mimeType=\"application/x-cpio\" />\n            <mimeMap fileExtension=\".cpp\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".crd\" mimeType=\"application/x-mscardfile\" />\n            <mimeMap fileExtension=\".crl\" mimeType=\"application/pkix-crl\" />\n            <mimeMap fileExtension=\".crt\" mimeType=\"application/x-x509-ca-cert\" />\n            <mimeMap fileExtension=\".csh\" mimeType=\"application/x-csh\" />\n            <mimeMap fileExtension=\".css\" mimeType=\"text/css\" />\n            <mimeMap fileExtension=\".csv\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".cur\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dcr\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".deploy\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".der\" mimeType=\"application/x-x509-ca-cert\" />\n            <mimeMap fileExtension=\".dib\" mimeType=\"image/bmp\" />\n            <mimeMap fileExtension=\".dir\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".disco\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dll\" mimeType=\"application/x-msdownload\" />\n            <mimeMap fileExtension=\".dll.config\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dlm\" mimeType=\"text/dlm\" />\n            <mimeMap fileExtension=\".doc\" mimeType=\"application/msword\" />\n            <mimeMap fileExtension=\".docm\" mimeType=\"application/vnd.ms-word.document.macroEnabled.12\" />\n            <mimeMap fileExtension=\".docx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" />\n            <mimeMap fileExtension=\".dot\" mimeType=\"application/msword\" />\n            <mimeMap fileExtension=\".dotm\" mimeType=\"application/vnd.ms-word.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".dotx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\" />\n            <mimeMap fileExtension=\".dsp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dtd\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dvi\" mimeType=\"application/x-dvi\" />\n            <mimeMap fileExtension=\".dvr-ms\" mimeType=\"video/x-ms-dvr\" />\n            <mimeMap fileExtension=\".dwf\" mimeType=\"drawing/x-dwf\" />\n            <mimeMap fileExtension=\".dwp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dxr\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".eml\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".emz\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".eot\" mimeType=\"application/vnd.ms-fontobject\" />\n            <mimeMap fileExtension=\".eps\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".etx\" mimeType=\"text/x-setext\" />\n            <mimeMap fileExtension=\".evy\" mimeType=\"application/envoy\" />\n            <mimeMap fileExtension=\".exe\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".exe.config\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".fdf\" mimeType=\"application/vnd.fdf\" />\n            <mimeMap fileExtension=\".fif\" mimeType=\"application/fractals\" />\n            <mimeMap fileExtension=\".fla\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".flr\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".flv\" mimeType=\"video/x-flv\" />\n            <mimeMap fileExtension=\".gif\" mimeType=\"image/gif\" />\n            <mimeMap fileExtension=\".gtar\" mimeType=\"application/x-gtar\" />\n            <mimeMap fileExtension=\".gz\" mimeType=\"application/x-gzip\" />\n            <mimeMap fileExtension=\".h\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".hdf\" mimeType=\"application/x-hdf\" />\n            <mimeMap fileExtension=\".hdml\" mimeType=\"text/x-hdml\" />\n            <mimeMap fileExtension=\".hhc\" mimeType=\"application/x-oleobject\" />\n            <mimeMap fileExtension=\".hhk\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".hhp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".hlp\" mimeType=\"application/winhlp\" />\n            <mimeMap fileExtension=\".hqx\" mimeType=\"application/mac-binhex40\" />\n            <mimeMap fileExtension=\".hta\" mimeType=\"application/hta\" />\n            <mimeMap fileExtension=\".htc\" mimeType=\"text/x-component\" />\n            <mimeMap fileExtension=\".htm\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".html\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".htt\" mimeType=\"text/webviewhtml\" />\n            <mimeMap fileExtension=\".hxt\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".ical\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".icalendar\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".ico\" mimeType=\"image/x-icon\" />\n            <mimeMap fileExtension=\".ics\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".ief\" mimeType=\"image/ief\" />\n            <mimeMap fileExtension=\".ifb\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".iii\" mimeType=\"application/x-iphone\" />\n            <mimeMap fileExtension=\".inf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ins\" mimeType=\"application/x-internet-signup\" />\n            <mimeMap fileExtension=\".isp\" mimeType=\"application/x-internet-signup\" />\n            <mimeMap fileExtension=\".IVF\" mimeType=\"video/x-ivf\" />\n            <mimeMap fileExtension=\".jar\" mimeType=\"application/java-archive\" />\n            <mimeMap fileExtension=\".java\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".jck\" mimeType=\"application/liquidmotion\" />\n            <mimeMap fileExtension=\".jcz\" mimeType=\"application/liquidmotion\" />\n            <mimeMap fileExtension=\".jfif\" mimeType=\"image/pjpeg\" />\n            <mimeMap fileExtension=\".jpb\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".jpe\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".jpeg\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".jpg\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".js\" mimeType=\"application/javascript\" />\n            <mimeMap fileExtension=\".jsx\" mimeType=\"text/jscript\" />\n            <mimeMap fileExtension=\".latex\" mimeType=\"application/x-latex\" />\n            <mimeMap fileExtension=\".lit\" mimeType=\"application/x-ms-reader\" />\n            <mimeMap fileExtension=\".lpk\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".lsf\" mimeType=\"video/x-la-asf\" />\n            <mimeMap fileExtension=\".lsx\" mimeType=\"video/x-la-asf\" />\n            <mimeMap fileExtension=\".lzh\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".m13\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".m14\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".m1v\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".m2ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".m3u\" mimeType=\"audio/x-mpegurl\" />\n            <mimeMap fileExtension=\".m4a\" mimeType=\"audio/mp4\" />\n            <mimeMap fileExtension=\".m4v\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".man\" mimeType=\"application/x-troff-man\" />\n            <mimeMap fileExtension=\".manifest\" mimeType=\"application/x-ms-manifest\" />\n            <mimeMap fileExtension=\".map\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".mdb\" mimeType=\"application/x-msaccess\" />\n            <mimeMap fileExtension=\".mdp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".me\" mimeType=\"application/x-troff-me\" />\n            <mimeMap fileExtension=\".mht\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".mhtml\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".mid\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".midi\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".mix\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mmf\" mimeType=\"application/x-smaf\" />\n            <mimeMap fileExtension=\".mno\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".mny\" mimeType=\"application/x-msmoney\" />\n            <mimeMap fileExtension=\".mov\" mimeType=\"video/quicktime\" />\n            <mimeMap fileExtension=\".movie\" mimeType=\"video/x-sgi-movie\" />\n            <mimeMap fileExtension=\".mp2\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mp3\" mimeType=\"audio/mpeg\" />\n            <mimeMap fileExtension=\".mp4\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".mp4v\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".mpa\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpe\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpeg\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpg\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpp\" mimeType=\"application/vnd.ms-project\" />\n            <mimeMap fileExtension=\".mpv2\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".ms\" mimeType=\"application/x-troff-ms\" />\n            <mimeMap fileExtension=\".msi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mso\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mvb\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".mvc\" mimeType=\"application/x-miva-compiled\" />\n            <mimeMap fileExtension=\".nc\" mimeType=\"application/x-netcdf\" />\n            <mimeMap fileExtension=\".nsc\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".nws\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".ocx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".oda\" mimeType=\"application/oda\" />\n            <mimeMap fileExtension=\".odc\" mimeType=\"text/x-ms-odc\" />\n            <mimeMap fileExtension=\".ods\" mimeType=\"application/oleobject\" />\n            <mimeMap fileExtension=\".oga\" mimeType=\"audio/ogg\" />\n            <mimeMap fileExtension=\".ogg\" mimeType=\"video/ogg\" />\n            <mimeMap fileExtension=\".ogv\" mimeType=\"video/ogg\" />\n            <mimeMap fileExtension=\".ogx\" mimeType=\"application/ogg\" />\n            <mimeMap fileExtension=\".one\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onea\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetoc\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetoc2\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetmp\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onepkg\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".osdx\" mimeType=\"application/opensearchdescription+xml\" />\n            <mimeMap fileExtension=\".otf\" mimeType=\"font/otf\" />\n            <mimeMap fileExtension=\".p10\" mimeType=\"application/pkcs10\" />\n            <mimeMap fileExtension=\".p12\" mimeType=\"application/x-pkcs12\" />\n            <mimeMap fileExtension=\".p7b\" mimeType=\"application/x-pkcs7-certificates\" />\n            <mimeMap fileExtension=\".p7c\" mimeType=\"application/pkcs7-mime\" />\n            <mimeMap fileExtension=\".p7m\" mimeType=\"application/pkcs7-mime\" />\n            <mimeMap fileExtension=\".p7r\" mimeType=\"application/x-pkcs7-certreqresp\" />\n            <mimeMap fileExtension=\".p7s\" mimeType=\"application/pkcs7-signature\" />\n            <mimeMap fileExtension=\".pbm\" mimeType=\"image/x-portable-bitmap\" />\n            <mimeMap fileExtension=\".pcx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pcz\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pdf\" mimeType=\"application/pdf\" />\n            <mimeMap fileExtension=\".pfb\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pfm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pfx\" mimeType=\"application/x-pkcs12\" />\n            <mimeMap fileExtension=\".pgm\" mimeType=\"image/x-portable-graymap\" />\n            <mimeMap fileExtension=\".pko\" mimeType=\"application/vnd.ms-pki.pko\" />\n            <mimeMap fileExtension=\".pma\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmc\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pml\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmr\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmw\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".png\" mimeType=\"image/png\" />\n            <mimeMap fileExtension=\".pnm\" mimeType=\"image/x-portable-anymap\" />\n            <mimeMap fileExtension=\".pnz\" mimeType=\"image/png\" />\n            <mimeMap fileExtension=\".pot\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".potm\" mimeType=\"application/vnd.ms-powerpoint.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".potx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.template\" />\n            <mimeMap fileExtension=\".ppam\" mimeType=\"application/vnd.ms-powerpoint.addin.macroEnabled.12\" />\n            <mimeMap fileExtension=\".ppm\" mimeType=\"image/x-portable-pixmap\" />\n            <mimeMap fileExtension=\".pps\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".ppsm\" mimeType=\"application/vnd.ms-powerpoint.slideshow.macroEnabled.12\" />\n            <mimeMap fileExtension=\".ppsx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\" />\n            <mimeMap fileExtension=\".ppt\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".pptm\" mimeType=\"application/vnd.ms-powerpoint.presentation.macroEnabled.12\" />\n            <mimeMap fileExtension=\".pptx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation\" />\n            <mimeMap fileExtension=\".prf\" mimeType=\"application/pics-rules\" />\n            <mimeMap fileExtension=\".prm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".prx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ps\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".psd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".psm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".psp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pub\" mimeType=\"application/x-mspublisher\" />\n            <mimeMap fileExtension=\".qt\" mimeType=\"video/quicktime\" />\n            <mimeMap fileExtension=\".qtl\" mimeType=\"application/x-quicktimeplayer\" />\n            <mimeMap fileExtension=\".qxd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ra\" mimeType=\"audio/x-pn-realaudio\" />\n            <mimeMap fileExtension=\".ram\" mimeType=\"audio/x-pn-realaudio\" />\n            <mimeMap fileExtension=\".rar\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ras\" mimeType=\"image/x-cmu-raster\" />\n            <mimeMap fileExtension=\".rf\" mimeType=\"image/vnd.rn-realflash\" />\n            <mimeMap fileExtension=\".rgb\" mimeType=\"image/x-rgb\" />\n            <mimeMap fileExtension=\".rm\" mimeType=\"application/vnd.rn-realmedia\" />\n            <mimeMap fileExtension=\".rmi\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".roff\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".rpm\" mimeType=\"audio/x-pn-realaudio-plugin\" />\n            <mimeMap fileExtension=\".rtf\" mimeType=\"application/rtf\" />\n            <mimeMap fileExtension=\".rtx\" mimeType=\"text/richtext\" />\n            <mimeMap fileExtension=\".scd\" mimeType=\"application/x-msschedule\" />\n            <mimeMap fileExtension=\".sct\" mimeType=\"text/scriptlet\" />\n            <mimeMap fileExtension=\".sea\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".setpay\" mimeType=\"application/set-payment-initiation\" />\n            <mimeMap fileExtension=\".setreg\" mimeType=\"application/set-registration-initiation\" />\n            <mimeMap fileExtension=\".sgml\" mimeType=\"text/sgml\" />\n            <mimeMap fileExtension=\".sh\" mimeType=\"application/x-sh\" />\n            <mimeMap fileExtension=\".shar\" mimeType=\"application/x-shar\" />\n            <mimeMap fileExtension=\".sit\" mimeType=\"application/x-stuffit\" />\n            <mimeMap fileExtension=\".sldm\" mimeType=\"application/vnd.ms-powerpoint.slide.macroEnabled.12\" />\n            <mimeMap fileExtension=\".sldx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slide\" />\n            <mimeMap fileExtension=\".smd\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".smi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".smx\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".smz\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".snd\" mimeType=\"audio/basic\" />\n            <mimeMap fileExtension=\".snp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".spc\" mimeType=\"application/x-pkcs7-certificates\" />\n            <mimeMap fileExtension=\".spl\" mimeType=\"application/futuresplash\" />\n            <mimeMap fileExtension=\".spx\" mimeType=\"audio/ogg\" />\n            <mimeMap fileExtension=\".src\" mimeType=\"application/x-wais-source\" />\n            <mimeMap fileExtension=\".ssm\" mimeType=\"application/streamingmedia\" />\n            <mimeMap fileExtension=\".sst\" mimeType=\"application/vnd.ms-pki.certstore\" />\n            <mimeMap fileExtension=\".stl\" mimeType=\"application/vnd.ms-pki.stl\" />\n            <mimeMap fileExtension=\".sv4cpio\" mimeType=\"application/x-sv4cpio\" />\n            <mimeMap fileExtension=\".sv4crc\" mimeType=\"application/x-sv4crc\" />\n            <mimeMap fileExtension=\".svg\" mimeType=\"image/svg+xml\" />\n            <mimeMap fileExtension=\".svgz\" mimeType=\"image/svg+xml\" />\n            <mimeMap fileExtension=\".swf\" mimeType=\"application/x-shockwave-flash\" />\n            <mimeMap fileExtension=\".t\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".tar\" mimeType=\"application/x-tar\" />\n            <mimeMap fileExtension=\".tcl\" mimeType=\"application/x-tcl\" />\n            <mimeMap fileExtension=\".tex\" mimeType=\"application/x-tex\" />\n            <mimeMap fileExtension=\".texi\" mimeType=\"application/x-texinfo\" />\n            <mimeMap fileExtension=\".texinfo\" mimeType=\"application/x-texinfo\" />\n            <mimeMap fileExtension=\".tgz\" mimeType=\"application/x-compressed\" />\n            <mimeMap fileExtension=\".thmx\" mimeType=\"application/vnd.ms-officetheme\" />\n            <mimeMap fileExtension=\".thn\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tif\" mimeType=\"image/tiff\" />\n            <mimeMap fileExtension=\".tiff\" mimeType=\"image/tiff\" />\n            <mimeMap fileExtension=\".toc\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tr\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".trm\" mimeType=\"application/x-msterminal\" />\n            <mimeMap fileExtension=\".ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".tsv\" mimeType=\"text/tab-separated-values\" />\n            <mimeMap fileExtension=\".ttf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".txt\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".u32\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".uls\" mimeType=\"text/iuls\" />\n            <mimeMap fileExtension=\".ustar\" mimeType=\"application/x-ustar\" />\n            <mimeMap fileExtension=\".vbs\" mimeType=\"text/vbscript\" />\n            <mimeMap fileExtension=\".vcf\" mimeType=\"text/x-vcard\" />\n            <mimeMap fileExtension=\".vcs\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".vdx\" mimeType=\"application/vnd.ms-visio.viewer\" />\n            <mimeMap fileExtension=\".vml\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".vsd\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vss\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vst\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vsto\" mimeType=\"application/x-ms-vsto\" />\n            <mimeMap fileExtension=\".vsw\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vsx\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vtx\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".wav\" mimeType=\"audio/wav\" />\n            <mimeMap fileExtension=\".wax\" mimeType=\"audio/x-ms-wax\" />\n            <mimeMap fileExtension=\".wbmp\" mimeType=\"image/vnd.wap.wbmp\" />\n            <mimeMap fileExtension=\".wcm\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wdb\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".webm\" mimeType=\"video/webm\" />\n            <mimeMap fileExtension=\".wks\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wm\" mimeType=\"video/x-ms-wm\" />\n            <mimeMap fileExtension=\".wma\" mimeType=\"audio/x-ms-wma\" />\n            <mimeMap fileExtension=\".wmd\" mimeType=\"application/x-ms-wmd\" />\n            <mimeMap fileExtension=\".wmf\" mimeType=\"application/x-msmetafile\" />\n            <mimeMap fileExtension=\".wml\" mimeType=\"text/vnd.wap.wml\" />\n            <mimeMap fileExtension=\".wmlc\" mimeType=\"application/vnd.wap.wmlc\" />\n            <mimeMap fileExtension=\".wmls\" mimeType=\"text/vnd.wap.wmlscript\" />\n            <mimeMap fileExtension=\".wmlsc\" mimeType=\"application/vnd.wap.wmlscriptc\" />\n            <mimeMap fileExtension=\".wmp\" mimeType=\"video/x-ms-wmp\" />\n            <mimeMap fileExtension=\".wmv\" mimeType=\"video/x-ms-wmv\" />\n            <mimeMap fileExtension=\".wmx\" mimeType=\"video/x-ms-wmx\" />\n            <mimeMap fileExtension=\".wmz\" mimeType=\"application/x-ms-wmz\" />\n            <mimeMap fileExtension=\".woff\" mimeType=\"font/x-woff\" />\n            <mimeMap fileExtension=\".wps\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wri\" mimeType=\"application/x-mswrite\" />\n            <mimeMap fileExtension=\".wrl\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".wrz\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".wsdl\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".wtv\" mimeType=\"video/x-ms-wtv\" />\n            <mimeMap fileExtension=\".wvx\" mimeType=\"video/x-ms-wvx\" />\n            <mimeMap fileExtension=\".x\" mimeType=\"application/directx\" />\n            <mimeMap fileExtension=\".xaf\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".xaml\" mimeType=\"application/xaml+xml\" />\n            <mimeMap fileExtension=\".xap\" mimeType=\"application/x-silverlight-app\" />\n            <mimeMap fileExtension=\".xbap\" mimeType=\"application/x-ms-xbap\" />\n            <mimeMap fileExtension=\".xbm\" mimeType=\"image/x-xbitmap\" />\n            <mimeMap fileExtension=\".xdr\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".xht\" mimeType=\"application/xhtml+xml\" />\n            <mimeMap fileExtension=\".xhtml\" mimeType=\"application/xhtml+xml\" />\n            <mimeMap fileExtension=\".xla\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlam\" mimeType=\"application/vnd.ms-excel.addin.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlc\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlm\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xls\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlsb\" mimeType=\"application/vnd.ms-excel.sheet.binary.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlsm\" mimeType=\"application/vnd.ms-excel.sheet.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlsx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" />\n            <mimeMap fileExtension=\".xlt\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xltm\" mimeType=\"application/vnd.ms-excel.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xltx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\" />\n            <mimeMap fileExtension=\".xlw\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xml\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xof\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".xpm\" mimeType=\"image/x-xpixmap\" />\n            <mimeMap fileExtension=\".xps\" mimeType=\"application/vnd.ms-xpsdocument\" />\n            <mimeMap fileExtension=\".xsd\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsf\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsl\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xslt\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsn\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".xtp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".xwd\" mimeType=\"image/x-xwindowdump\" />\n            <mimeMap fileExtension=\".z\" mimeType=\"application/x-compress\" />\n            <mimeMap fileExtension=\".zip\" mimeType=\"application/x-zip-compressed\" />\n        </staticContent>\n\n        <tracing>\n\n             <traceProviderDefinitions>\n                <add name=\"WWW Server\" guid=\"{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}\">\n                    <areas>\n                        <clear />\n                        <add name=\"Authentication\" value=\"2\" />\n                        <add name=\"Security\" value=\"4\" />\n                        <add name=\"Filter\" value=\"8\" />\n                        <add name=\"StaticFile\" value=\"16\" />\n                        <add name=\"CGI\" value=\"32\" />\n                        <add name=\"Compression\" value=\"64\" />\n                        <add name=\"Cache\" value=\"128\" />\n                        <add name=\"RequestNotifications\" value=\"256\" />\n                        <add name=\"Module\" value=\"512\" />\n                        <add name=\"Rewrite\" value=\"1024\" />\n                        <add name=\"FastCGI\" value=\"4096\" />\n                        <add name=\"WebSocket\" value=\"16384\" />\n                    </areas>\n                </add>\n                <add name=\"ASP\" guid=\"{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}\">\n                    <areas>\n                        <clear />\n                    </areas>\n                </add>\n                <add name=\"ISAPI Extension\" guid=\"{a1c2040e-8840-4c31-ba11-9871031a19ea}\">\n                    <areas>\n                        <clear />\n                    </areas>\n                </add>\n                <add name=\"ASPNET\" guid=\"{AFF081FE-0247-4275-9C4E-021F3DC1DA35}\">\n                    <areas>\n                        <add name=\"Infrastructure\" value=\"1\" />\n                        <add name=\"Module\" value=\"2\" />\n                        <add name=\"Page\" value=\"4\" />\n                        <add name=\"AppServices\" value=\"8\" />\n                    </areas>\n                </add>\n            </traceProviderDefinitions>\n\n            <traceFailedRequests>\n                <add path=\"*\">\n                    <traceAreas>\n                        <add provider=\"ASP\" verbosity=\"Verbose\" />\n                        <add provider=\"ASPNET\" areas=\"Infrastructure,Module,Page,AppServices\" verbosity=\"Verbose\" />\n                        <add provider=\"ISAPI Extension\" verbosity=\"Verbose\" />\n                        <add provider=\"WWW Server\" areas=\"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\" verbosity=\"Verbose\" />\n                    </traceAreas>\n                    <failureDefinitions statusCodes=\"200-999\" />\n                </add>\n            </traceFailedRequests>\n\n        </tracing>\n\n        <webdav>\n            <globalSettings>\n                <propertyStores>\n                    <add name=\"webdav_simple_prop\" image=\"%IIS_BIN%\\webdav_simple_prop.dll\" image32=\"%IIS_BIN%\\webdav_simple_prop.dll\" />\n                </propertyStores>\n                <lockStores>\n                    <add name=\"webdav_simple_lock\" image=\"%IIS_BIN%\\webdav_simple_lock.dll\" image32=\"%IIS_BIN%\\webdav_simple_lock.dll\" />\n                </lockStores>\n\n            </globalSettings>\n            <authoring>\n                <locks enabled=\"true\" lockStore=\"webdav_simple_lock\" />\n            </authoring>\n\n        </webdav>\n\n    </system.webServer>\n    <location path=\"\" overrideMode=\"Allow\">\n        <system.webServer>\n            <modules>\n<!--\n                <add name=\"HttpCacheModule\" lockItem=\"true\" />\n-->\n                <add name=\"DynamicCompressionModule\" lockItem=\"true\" />\n                <add name=\"StaticCompressionModule\" lockItem=\"true\" />\n                <add name=\"DefaultDocumentModule\" lockItem=\"true\" />\n                <add name=\"DirectoryListingModule\" lockItem=\"true\" />\n                <add name=\"IsapiFilterModule\" lockItem=\"true\" />\n                <add name=\"ProtocolSupportModule\" lockItem=\"true\" />\n                <add name=\"HttpRedirectionModule\" lockItem=\"true\" />\n                <add name=\"ServerSideIncludeModule\" lockItem=\"true\" />\n                <add name=\"StaticFileModule\" lockItem=\"true\" />\n                <add name=\"AnonymousAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"CertificateMappingAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"UrlAuthorizationModule\" lockItem=\"true\" />\n                <add name=\"BasicAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"WindowsAuthenticationModule\" lockItem=\"true\" />\n<!--\n                <add name=\"DigestAuthenticationModule\" lockItem=\"true\" />\n-->\n                <add name=\"IISCertificateMappingAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"WebMatrixSupportModule\" lockItem=\"true\" />\n                <add name=\"IpRestrictionModule\" lockItem=\"true\" />\n                <add name=\"DynamicIpRestrictionModule\" lockItem=\"true\" />\n                <add name=\"RequestFilteringModule\" lockItem=\"true\" />\n                <add name=\"CustomLoggingModule\" lockItem=\"true\" />\n                <add name=\"CustomErrorModule\" lockItem=\"true\" />\n                <add name=\"IsapiModule\" lockItem=\"true\" />\n                <add name=\"HttpLoggingModule\" lockItem=\"true\" />\n                <add name=\"FailedRequestsTracingModule\" lockItem=\"true\" />\n                <add name=\"CgiModule\" lockItem=\"true\" />\n                <add name=\"FastCgiModule\" lockItem=\"true\" />\n<!--                <add name=\"WebDAVModule\" /> -->\n                <add name=\"RewriteModule\" /> \n                <add name=\"OutputCache\" type=\"System.Web.Caching.OutputCacheModule\" preCondition=\"managedHandler\" />\n                <add name=\"Session\" type=\"System.Web.SessionState.SessionStateModule\" preCondition=\"managedHandler\" />\n                <add name=\"WindowsAuthentication\" type=\"System.Web.Security.WindowsAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"FormsAuthentication\" type=\"System.Web.Security.FormsAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"DefaultAuthentication\" type=\"System.Web.Security.DefaultAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"RoleManager\" type=\"System.Web.Security.RoleManagerModule\" preCondition=\"managedHandler\" />\n                <add name=\"UrlAuthorization\" type=\"System.Web.Security.UrlAuthorizationModule\" preCondition=\"managedHandler\" />\n                <add name=\"FileAuthorization\" type=\"System.Web.Security.FileAuthorizationModule\" preCondition=\"managedHandler\" />\n                <add name=\"AnonymousIdentification\" type=\"System.Web.Security.AnonymousIdentificationModule\" preCondition=\"managedHandler\" />\n                <add name=\"Profile\" type=\"System.Web.Profile.ProfileModule\" preCondition=\"managedHandler\" />\n                <add name=\"UrlMappingsModule\" type=\"System.Web.UrlMappingsModule\" preCondition=\"managedHandler\" />\n                <add name=\"ApplicationInitializationModule\" lockItem=\"true\" />\n                <add name=\"WebSocketModule\" lockItem=\"true\" />\n                <add name=\"ServiceModel-4.0\" type=\"System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n                <add name=\"ConfigurationValidationModule\" lockItem=\"true\" />\n                <add name=\"UrlRoutingModule-4.0\" type=\"System.Web.Routing.UrlRoutingModule\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n                <add name=\"ScriptModule-4.0\" type=\"System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n            </modules>\n            <handlers accessPolicy=\"Read, Script\">\n<!--                <add name=\"WebDAV\" path=\"*\" verb=\"PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK\" modules=\"WebDAVModule\" resourceType=\"Unspecified\" requireAccess=\"None\" /> -->\n                <add name=\"AXD-ISAPI-4.0_64bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-4.0_64bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-4.0_64bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-4.0_64bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"svc-ISAPI-4.0_64bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"rules-ISAPI-4.0_64bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"xoml-ISAPI-4.0_64bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"xamlx-ISAPI-4.0_64bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"aspq-ISAPI-4.0_64bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"cshtm-ISAPI-4.0_64bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"cshtml-ISAPI-4.0_64bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtm-ISAPI-4.0_64bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtml-ISAPI-4.0_64bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"AXD-ISAPI-4.0_32bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-4.0_32bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-4.0_32bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-4.0_32bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"svc-ISAPI-4.0_32bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"rules-ISAPI-4.0_32bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"xoml-ISAPI-4.0_32bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"xamlx-ISAPI-4.0_32bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"aspq-ISAPI-4.0_32bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"cshtm-ISAPI-4.0_32bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"cshtml-ISAPI-4.0_32bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtm-ISAPI-4.0_32bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtml-ISAPI-4.0_32bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"TraceHandler-Integrated-4.0\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"WebAdminHandler-Integrated-4.0\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"AssemblyResourceLoader-Integrated-4.0\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"PageHandlerFactory-Integrated-4.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"SimpleHandlerFactory-Integrated-4.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"WebServiceHandlerFactory-Integrated-4.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-Integrated-4.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-Integrated-4.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"svc-Integrated-4.0\" path=\"*.svc\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"rules-Integrated-4.0\" path=\"*.rules\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"xoml-Integrated-4.0\" path=\"*.xoml\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"xamlx-Integrated-4.0\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"aspq-Integrated-4.0\" path=\"*.aspq\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"cshtm-Integrated-4.0\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"cshtml-Integrated-4.0\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"vbhtm-Integrated-4.0\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"vbhtml-Integrated-4.0\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ScriptHandlerFactoryAppServices-Integrated-4.0\" path=\"*_AppService.axd\" verb=\"*\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ScriptResourceIntegrated-4.0\" path=\"*ScriptResource.axd\" verb=\"GET,HEAD\" type=\"System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ASPClassic\" path=\"*.asp\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n                <add name=\"SecurityCertificate\" path=\"*.cer\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n                <add name=\"ISAPI-dll\" path=\"*.dll\" verb=\"*\" modules=\"IsapiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n                <add name=\"TraceHandler-Integrated\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"WebAdminHandler-Integrated\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"AssemblyResourceLoader-Integrated\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"PageHandlerFactory-Integrated\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"SimpleHandlerFactory-Integrated\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"WebServiceHandlerFactory-Integrated\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-Integrated\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-Integrated\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"AXD-ISAPI-2.0\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-2.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-2.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-2.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"AXD-ISAPI-2.0-64\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-2.0-64\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-2.0-64\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-2.0-64\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0-64\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0-64\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"CGI-exe\" path=\"*.exe\" verb=\"*\" modules=\"CgiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n                <add name=\"SSINC-stm\" path=\"*.stm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"SSINC-shtm\" path=\"*.shtm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"SSINC-shtml\" path=\"*.shtml\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"TRACEVerbHandler\" path=\"*\" verb=\"TRACE\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n                <add name=\"OPTIONSVerbHandler\" path=\"*\" verb=\"OPTIONS\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n                <add name=\"ExtensionlessUrl-ISAPI-4.0_32bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"ExtensionlessUrlHandler-ISAPI-4.0_64bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"ExtensionlessUrl-Integrated-4.0\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" responseBufferLimit=\"0\" />\n                <add name=\"StaticFile\" path=\"*\" verb=\"*\" modules=\"StaticFileModule,DefaultDocumentModule,DirectoryListingModule\" resourceType=\"Either\" requireAccess=\"Read\" />\n            </handlers>\n        </system.webServer>\n    </location>\n    <location path=\"Default Web Site\">\n        <system.webServer>\n            <security>\n                <ipSecurity>\n                    <add ipAddress=\"1.1.1.1\" allowed=\"true\" />\n                </ipSecurity>\n                <authentication>\n                  <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\" userName=\"test\"/>\n                </authentication>\n            </security>\n            <httpLogging dontLog=\"true\" />\n        </system.webServer>\n    </location>\n</configuration>\n"
  },
  {
    "path": "Microsoft.Web.Administration/Resources/rewrite_schema.xml",
    "content": "<!--\n    \n    IIS URL Rewrite configuration schema.\n    \n    ** Please DO NOT edit this file yourself. **\n    \n    If you want to add configuration sections to the schema, you may place \n    them in .xml files similar to this one, in this directory. They will be \n    picked up automatically on startup.\n\n-->\n\n<configSchema>\n  <sectionSchema name=\"system.webServer/rewrite/globalRules\">\n    <collection addElement=\"rule\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\"/>\n      <attribute name=\"patternSyntax\" type=\"enum\" defaultValue=\"ECMAScript\">\n        <enum name=\"ECMAScript\" value=\"0\"/>\n        <enum name=\"Wildcard\" value=\"1\"/>\n        <enum name=\"ExactMatch\" value=\"2\"/>\n      </attribute>\n      <attribute name=\"stopProcessing\" type=\"bool\" defaultValue=\"false\"/>\n      <element name=\"match\">\n        <attribute name=\"url\" type=\"string\" validationType=\"nonEmptyString\"/>\n        <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n      <element name=\"conditions\">\n        <attribute name=\"logicalGrouping\" type=\"enum\" defaultValue=\"MatchAll\">\n          <enum name=\"MatchAll\" value=\"0\"/>\n          <enum name=\"MatchAny\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"trackAllCaptures\" type=\"bool\" defaultValue=\"false\" />\n        <collection addElement=\"add\">\n          <attribute name=\"input\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"matchType\" type=\"enum\" defaultValue=\"Pattern\" isCombinedKey=\"true\">\n            <enum name=\"Pattern\" value=\"0\"/>\n          </attribute>\n          <attribute name=\"pattern\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\" isCombinedKey=\"true\"/>\n          <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\" isCombinedKey=\"true\"/>\n        </collection>\n      </element>\n      <element name=\"serverVariables\">\n        <collection addElement=\"set\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"requireTrimmedString\"/>\n          <attribute name=\"value\" type=\"string\" />\n          <attribute name=\"replace\" type=\"bool\" defaultValue=\"true\" />\n        </collection>\n      </element>\n      <element name=\"action\">\n        <attribute name=\"type\" type=\"enum\" defaultValue=\"None\">\n          <enum name=\"None\" value=\"0\"/>\n          <enum name=\"Rewrite\" value=\"1\"/>\n          <enum name=\"Redirect\" value=\"2\"/>\n          <enum name=\"CustomResponse\" value=\"3\"/>\n          <enum name=\"AbortRequest\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"url\" type=\"string\" validationType=\"requireTrimmedString\"/>\n        <attribute name=\"appendQueryString\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"redirectType\" type=\"enum\" defaultValue=\"Permanent\">\n          <enum name=\"Permanent\" value=\"301\"/>\n          <enum name=\"Found\" value=\"302\"/>\n          <enum name=\"SeeOther\" value=\"303\"/>\n          <enum name=\"Temporary\" value=\"307\"/>\n        </attribute>\n        <attribute name=\"statusCode\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"300,307,exclude\" defaultValue=\"0\"/>\n        <attribute name=\"subStatusCode\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,999\" defaultValue=\"0\"/>\n        <attribute name=\"statusReason\" type=\"string\"/>\n        <attribute name=\"statusDescription\" type=\"string\"/>\n      </element>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/allowedServerVariables\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/rules\">\n    <collection addElement=\"rule\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\"/>\n      <attribute name=\"patternSyntax\" type=\"enum\" defaultValue=\"ECMAScript\">\n        <enum name=\"ECMAScript\" value=\"0\"/>\n        <enum name=\"Wildcard\" value=\"1\"/>\n        <enum name=\"ExactMatch\" value=\"2\"/>\n      </attribute>\n      <attribute name=\"stopProcessing\" type=\"bool\" defaultValue=\"false\"/>\n      <element name=\"match\">\n        <attribute name=\"url\" type=\"string\" validationType=\"nonEmptyString\"/>\n        <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n      <element name=\"conditions\">\n        <attribute name=\"logicalGrouping\" type=\"enum\" defaultValue=\"MatchAll\">\n          <enum name=\"MatchAll\" value=\"0\"/>\n          <enum name=\"MatchAny\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"trackAllCaptures\" type=\"bool\" defaultValue=\"false\" />\n        <collection addElement=\"add\">\n          <attribute name=\"input\" type=\"string\"/>\n          <attribute name=\"matchType\" type=\"enum\" defaultValue=\"Pattern\">\n            <enum name=\"Pattern\" value=\"0\"/>\n            <enum name=\"IsFile\" value=\"1\"/>\n            <enum name=\"IsDirectory\" value=\"2\"/>\n          </attribute>\n          <attribute name=\"pattern\" type=\"string\"/>\n          <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n          <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\"/>\n        </collection>\n      </element>\n      <element name=\"serverVariables\">\n        <collection addElement=\"set\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"requireTrimmedString\"/>\n          <attribute name=\"value\" type=\"string\" />\n          <attribute name=\"replace\" type=\"bool\" defaultValue=\"true\" />\n        </collection>\n      </element>\n      <element name=\"action\">\n        <attribute name=\"type\" type=\"enum\" defaultValue=\"None\">\n          <enum name=\"None\" value=\"0\"/>\n          <enum name=\"Rewrite\" value=\"1\"/>\n          <enum name=\"Redirect\" value=\"2\"/>\n          <enum name=\"CustomResponse\" value=\"3\"/>\n          <enum name=\"AbortRequest\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"url\" type=\"string\" validationType=\"requireTrimmedString\"/>\n        <attribute name=\"appendQueryString\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"logRewrittenUrl\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"redirectType\" type=\"enum\" defaultValue=\"Permanent\">\n          <enum name=\"Permanent\" value=\"301\"/>\n          <enum name=\"Found\" value=\"302\"/>\n          <enum name=\"SeeOther\" value=\"303\"/>\n          <enum name=\"Temporary\" value=\"307\"/>\n        </attribute>\n        <attribute name=\"statusCode\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"300,307,exclude\"/>\n        <attribute name=\"subStatusCode\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,999\" defaultValue=\"0\"/>\n        <attribute name=\"statusReason\" type=\"string\"/>\n        <attribute name=\"statusDescription\" type=\"string\"/>\n      </element>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/outboundRules\">\n    <attribute name=\"rewriteBeforeCache\" type=\"bool\" defaultValue=\"false\" />\n\n    <element name=\"customTags\">\n      <collection addElement=\"tags\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n        <collection addElement=\"tag\" clearElement=\"clear\" removeElement=\"remove\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"attribute\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\"/>\n        </collection>\n      </collection>\n    </element>\n\n    <element name=\"preConditions\">\n      <collection addElement=\"preCondition\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n        <attribute name=\"logicalGrouping\" type=\"enum\" defaultValue=\"MatchAll\">\n          <enum name=\"MatchAll\" value=\"0\"/>\n          <enum name=\"MatchAny\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"patternSyntax\" type=\"enum\" defaultValue=\"ECMAScript\">\n          <enum name=\"ECMAScript\" value=\"0\"/>\n          <enum name=\"Wildcard\" value=\"1\"/>\n          <enum name=\"ExactMatch\" value=\"2\"/>\n        </attribute>\n        <collection addElement=\"add\">\n          <attribute name=\"input\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"matchType\" type=\"enum\" defaultValue=\"Pattern\" isCombinedKey=\"true\">\n            <enum name=\"Pattern\" value=\"0\" isCombinedKey=\"true\"/>\n          </attribute>\n          <attribute name=\"pattern\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\" isCombinedKey=\"true\"/>\n          <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\" isCombinedKey=\"true\"/>\n        </collection>\n      </collection>\n    </element>\n\n    <collection addElement=\"rule\" clearElement=\"clear\" removeElement=\"remove\">              \n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n      <attribute name=\"preCondition\" type=\"string\"/>\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\"/>\n      <attribute name=\"patternSyntax\" type=\"enum\" defaultValue=\"ECMAScript\">\n        <enum name=\"ECMAScript\" value=\"0\"/>\n        <enum name=\"Wildcard\" value=\"1\"/>\n        <enum name=\"ExactMatch\" value=\"2\"/>\n      </attribute>\n      <attribute name=\"stopProcessing\" type=\"bool\" defaultValue=\"false\"/>\n      <element name=\"match\">\n        <attribute name=\"filterByTags\" type=\"flags\" default=\"None\">\n          <flag name=\"None\" value=\"0\"/>\n          <flag name=\"A\" value=\"1\"/>          <!--href-->\n          <flag name=\"Area\" value=\"2\"/>       <!--href-->\n          <flag name=\"Base\" value=\"4\"/>       <!--href-->\n          <flag name=\"Form\" value=\"8\"/>       <!--action-->\n          <flag name=\"Frame\" value=\"16\"/>     <!--src,longdesc-->\n          <flag name=\"Head\" value=\"32\"/>      <!--profile-->\n          <flag name=\"IFrame\" value=\"64\"/>    <!--src,longdesc-->\n          <flag name=\"Img\" value=\"128\"/>      <!--src,longdesc,usemap-->\n          <flag name=\"Input\" value=\"256\"/>    <!--src,usemap-->\n          <flag name=\"Link\" value=\"512\"/>     <!--href-->\n          <flag name=\"Script\" value=\"1024\"/>  <!--src-->\n          <flag name=\"CustomTags\" value=\"32768\"/> <!--Use filter attribute-->\n        </attribute>\n        <attribute name=\"customTags\" type=\"string\"/>\n        <attribute name=\"serverVariable\" type=\"string\" />\n        <attribute name=\"pattern\" type=\"string\"/>\n        <attribute name=\"occurrences\" type=\"int64\" defaultValue=\"0\"/>\n        <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n      <element name=\"conditions\">\n        <attribute name=\"logicalGrouping\" type=\"enum\" defaultValue=\"MatchAll\">\n          <enum name=\"MatchAll\" value=\"0\"/>\n          <enum name=\"MatchAny\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"trackAllCaptures\" type=\"bool\" defaultValue=\"true\" />\n        <collection addElement=\"add\">\n          <attribute name=\"input\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"matchType\" type=\"enum\" defaultValue=\"Pattern\" isCombinedKey=\"true\">\n            <enum name=\"Pattern\" value=\"0\"/>\n          </attribute>\n          <attribute name=\"pattern\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\" isCombinedKey=\"true\"/>\n          <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\" isCombinedKey=\"true\"/>\n        </collection>\n      </element>\n      <element name=\"action\">\n        <attribute name=\"type\" type=\"enum\" defaultValue=\"None\">\n          <enum name=\"None\" value=\"0\"/>\n          <enum name=\"Rewrite\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"value\" type=\"string\" />\n        <attribute name=\"replace\" type=\"bool\" defaultValue=\"true\"/>\n      </element>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/providers\">\n    <collection addElement=\"provider\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"requireTrimmedString\"/>\n      <attribute name=\"type\" type=\"string\" required=\"true\" validationType=\"requireTrimmedString\" />\n      <element name=\"settings\">\n        <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n          <attribute name=\"key\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"value\" type=\"string\" />\n          <attribute name=\"encryptedValue\" type=\"string\" encrypted=\"true\" defaultValue=\"[enc:AesProvider::enc]\" />\n        </collection>\n      </element>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/rewriteMaps\">\n    <collection addElement=\"rewriteMap\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"requireTrimmedString\"/>\n      <attribute name=\"defaultValue\" type=\"string\"/>\n      <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"key\" type=\"string\" required=\"true\" caseSensitive=\"true\" isUniqueKey=\"true\"/>\n        <attribute name=\"value\" type=\"string\"/>\n      </collection>\n    </collection>\n  </sectionSchema>\n</configSchema>"
  },
  {
    "path": "Microsoft.Web.Administration/SOCKADDR_IN.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Windows.Win32.Networking.WinSock;\n\npartial struct SOCKADDR_IN\n{\n    public static explicit operator SOCKADDR_IN(SOCKADDR_STORAGE storage)\n    {\n        var pointer = Marshal.AllocCoTaskMem(Marshal.SizeOf<SOCKADDR_STORAGE>());\n        Marshal.StructureToPtr(storage, pointer, false);\n        var result = Marshal.PtrToStructure<SOCKADDR_IN>(pointer);\n        Marshal.FreeCoTaskMem(pointer);\n        return result;\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SOCKADDR_STORAGE.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\nnamespace Windows.Win32.Networking.WinSock;\n\npartial struct SOCKADDR_STORAGE\n{\n    public static explicit operator SOCKADDR_STORAGE(SOCKADDR_IN address)\n    {\n        var length = Marshal.SizeOf<SOCKADDR_STORAGE>();\n        var pointer = Marshal.AllocCoTaskMem(length);\n        unsafe\n        {\n            Unsafe.InitBlockUnaligned((void*)pointer, 0, (uint)length);\n        }\n        Marshal.StructureToPtr(address, pointer, false);\n        var result = Marshal.PtrToStructure<SOCKADDR_STORAGE>(pointer);\n        Marshal.FreeCoTaskMem(pointer);\n        return result;\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Schedule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class Schedule : ConfigurationElement\n    {\n        internal Schedule(ConfigurationElement parent)\n            : this(null, parent)\n        {\n        }\n\n        internal Schedule(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"add\", null, parent, null, null)\n        {\n        }\n\n        public TimeSpan Time\n        {\n            get { return (TimeSpan)this[\"time\"]; }\n            set { this[\"time\"] = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ScheduleCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class ScheduleCollection : ConfigurationElementCollectionBase<Schedule>\n    {\n        internal ScheduleCollection(ConfigurationElement parent)\n            : this(null, parent)\n        {\n        }\n\n        internal ScheduleCollection(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"schedule\", null, parent, null, null)\n        {\n            if (element != null)\n            {\n                foreach (ConfigurationElement node in (ConfigurationElementCollection)element)\n                {\n                    InternalAdd(new Schedule(node));\n                }\n            }\n        }\n\n        public Schedule Add(TimeSpan scheduleTime)\n        {\n            var result = new Schedule(this) { Time = scheduleTime };\n            Add(result);\n            return result;\n        }\n\n        protected override Schedule CreateNewElement(string elementTagName)\n        {\n            var result = new Schedule(this);\n            Add(result);\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SectionDefinition.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Diagnostics;\nusing System.Xml.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    [DebuggerDisplay(\"{Path}\")]\n    public sealed class SectionDefinition\n    {\n        internal SectionDefinition()\n        { }\n\n        internal SectionSchema Schema { get; set; }\n\n        internal XElement Entity { get; set; }\n\n        public string AllowDefinition { get; set; }\n        public string AllowLocation { get; set; }\n        public string Name { get; internal set; }\n        public string OverrideModeDefault { get; set; }\n        public bool RequirePermission { get; set; }\n        public string Type { get; set; }\n        internal string Path { get; set; }\n        internal FileContext FileContext { get; set; }\n        internal bool Ignore\n        {\n            get\n            {\n                return Type.StartsWith(\"System.Configuration.IgnoreSection, System.Configuration, Version=\");\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SectionDefinitionCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class SectionDefinitionCollection : ICollection, IEnumerable<SectionDefinition>\n    {\n        private readonly FileContext _core;\n\n        private readonly List<SectionDefinition> _list = new List<SectionDefinition>();\n\n        internal SectionDefinitionCollection(FileContext core)\n        {\n            _core = core;\n        }\n\n        public SectionDefinition Add(string sectionName)\n        {\n            var result = new SectionDefinition { Name = sectionName, FileContext = _core };\n            _list.Add(result);\n            return result;\n        }\n\n        internal void Add(SectionDefinition definition)\n        {\n            _list.Add(definition);\n        }\n\n        public IEnumerator<SectionDefinition> GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        public void Remove(string sectionName)\n        {\n            var item = this[sectionName];\n            if (item != null)\n            {\n                _list.Remove(item);\n            }\n        }\n\n        public int Count\n        {\n            get { return _list.Count; }\n        }\n\n        public SectionDefinition this[int index]\n        {\n            get { return _list[index]; }\n        }\n\n        public SectionDefinition this[string sectionName]\n        {\n            get { return _list.FirstOrDefault(item => item.Name == sectionName); }\n        }\n\n        public void CopyTo(Array array, int index)\n        {\n            _list.CopyTo((SectionDefinition[])array, index);\n        }\n\n        public bool IsSynchronized\n        {\n            get { return false; }\n        }\n\n        public object SyncRoot { get; } = new object();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SectionGroup.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Xml;\nusing System.Xml.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    [DebuggerDisplay(\"{Name} [{_core.FileName}]\")]\n    public sealed class SectionGroup\n    {\n        internal const string KEYWORD_TRUE = \"true\";\n        internal const string KEYWORD_FALSE = \"false\";\n        internal const string KEYWORD_SECTION = \"section\";\n        internal const string KEYWORD_SECTION_NAME = \"name\";\n        internal const string KEYWORD_SECTION_ALLOWLOCATION = \"allowLocation\";\n        internal const string KEYWORD_SECTION_ALLOWDEFINITION = \"allowDefinition\";\n        internal const string KEYWORD_SECTION_ALLOWDEFINITION_APPHOSTONLY = \"AppHostOnly\";\n        internal const string KEYWORD_SECTION_ALLOWDEFINITION_EVERYWHERE = \"Everywhere\";\n        internal const string KEYWORD_SECTION_ALLOWDEFINITION_MACHINEONLY = \"MachineOnly\";\n        internal const string KEYWORD_SECTION_ALLOWDEFINITION_MACHINETOAPPLICATION = \"MachineToApplication\";\n        internal const string KEYWORD_SECTION_ALLOWDEFINITION_MACHINETOWEBROOT = \"MachineToWebRoot\";\n        internal const string KEYWORD_SECTION_TYPE = \"type\";\n        internal const string KEYWORD_SECTIONGROUP = \"sectionGroup\";\n        internal const string KEYWORD_SECTIONGROUP_NAME = \"name\";\n        internal const string KEYWORD_SECTION_OVERRIDEMODEDEFAULT = \"overrideModeDefault\";\n        internal const string KEYWORD_LOCATION_OVERRIDEMODE = \"overrideMode\";\n        internal const string KEYWORD_OVERRIDEMODE_INHERIT = \"Inherit\";\n        internal const string KEYWORD_OVERRIDEMODE_ALLOW = \"Allow\";\n        internal const string KEYWORD_OVERRIDEMODE_DENY = \"Deny\";\n\n        private readonly FileContext _core;\n\n        internal SectionGroup(FileContext core)\n        {\n            _core = core;\n            SectionGroups = new SectionGroupCollection(core, this);\n            Sections = new SectionDefinitionCollection(core);\n            Name = string.Empty;\n            Type = string.Empty;\n            Path = string.Empty;\n        }\n\n        public string Name { get; internal set; }\n\n        public SectionGroupCollection SectionGroups { get; }\n        public SectionDefinitionCollection Sections { get; }\n        public string Type { get; set; }\n\n        internal void ParseSectionDefinitions(XElement root, Dictionary<string, SectionSchema> sectionSchemas)\n        {\n            foreach (var node in root.Nodes())\n            {\n                if (!(node is XElement element))\n                {\n                    continue;\n                }\n\n                if (element.Name.LocalName == KEYWORD_SECTIONGROUP)\n                {\n                    XAttribute groupName = element.Attribute(KEYWORD_SECTIONGROUP_NAME);\n                    Debug.Assert(groupName != null, nameof(groupName) + \" != null\");\n                    var group = SectionGroups.Add(groupName.Value);\n                    group.Path = Name == string.Empty ? group.Name : $\"{Path}/{@group.Name}\";\n                    group.ParseSectionDefinitions(element, sectionSchemas);\n                    continue;\n                }\n\n                if (element.Name.LocalName == KEYWORD_SECTION)\n                {\n                    XAttribute sectionName = element.Attribute(KEYWORD_SECTION_NAME);\n                    Debug.Assert(sectionName != null, nameof(sectionName) + \" != null\");\n                    var sectionDefinition = Sections.Add(sectionName.Value);\n                    sectionDefinition.OverrideModeDefault = element.Attribute(KEYWORD_SECTION_OVERRIDEMODEDEFAULT).LoadString(KEYWORD_OVERRIDEMODE_ALLOW);\n                    sectionDefinition.AllowLocation = element.Attribute(KEYWORD_SECTION_ALLOWLOCATION).LoadString(KEYWORD_TRUE);\n                    sectionDefinition.AllowDefinition = element.Attribute(KEYWORD_SECTION_ALLOWDEFINITION).LoadString(KEYWORD_SECTION_ALLOWDEFINITION_EVERYWHERE);\n                    sectionDefinition.Path = Name == string.Empty ? sectionDefinition.Name : $\"{Path}/{sectionDefinition.Name}\";\n                    sectionDefinition.Type = element.Attribute(KEYWORD_SECTION_TYPE).LoadString(string.Empty);\n\n                    sectionSchemas.TryGetValue(sectionDefinition.Path, out SectionSchema schema);\n                    sectionDefinition.Schema = schema;\n                    sectionDefinition.Entity = element;\n                }\n            }\n        }\n\n        internal string Path { get; set; }\n\n        internal static ConfigurationAllowDefinition AllowDefinitionToEnum(string allowDefinition)\n        {\n            switch (allowDefinition)\n            {\n                case KEYWORD_SECTION_ALLOWDEFINITION_EVERYWHERE:\n                    return ConfigurationAllowDefinition.Everywhere;\n\n                case KEYWORD_SECTION_ALLOWDEFINITION_MACHINEONLY:\n                    return ConfigurationAllowDefinition.MachineOnly;\n\n                case KEYWORD_SECTION_ALLOWDEFINITION_MACHINETOAPPLICATION:\n                    return ConfigurationAllowDefinition.MachineToApplication;\n\n                case KEYWORD_SECTION_ALLOWDEFINITION_MACHINETOWEBROOT:\n                    return ConfigurationAllowDefinition.MachineToWebRoot;\n\n                case KEYWORD_SECTION_ALLOWDEFINITION_APPHOSTONLY:\n                    return ConfigurationAllowDefinition.AppHostOnly;\n\n                default:\n                    throw new ServerManagerException(\"Invalid allow definition string\");\n            }\n        }\n\n        internal void GetAllDefinitions(IList<SectionDefinition> result)\n        {\n            foreach (SectionDefinition item in Sections)\n            {\n                if (result.Any(_ => _.Path == item.Path))\n                {\n                    throw new COMException($\"Line number: {(item.Entity as IXmlLineInfo).LineNumber}\\r\\nError: There is a duplicate '{item.Path}' section defined\\r\\n\");\n                }\n\n                result.Add(item);\n            }\n\n            foreach (SectionGroup child in SectionGroups)\n            {\n                child.GetAllDefinitions(result);\n            }\n        }\n\n        internal void AddSpecial()\n        {\n            Sections.Add(new SectionDefinition()\n            {\n                AllowDefinition = KEYWORD_SECTION_ALLOWDEFINITION_EVERYWHERE,\n                AllowLocation = KEYWORD_FALSE,\n                Name = \"configProtectedData\",\n                OverrideModeDefault = KEYWORD_OVERRIDEMODE_ALLOW,\n                RequirePermission = true,\n                Type = string.Empty,\n                Path = \"configProtectedData\",\n                FileContext = _core\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SectionGroupCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class SectionGroupCollection : ICollection, IEnumerable<SectionGroup>\n    {\n        private SectionGroup Parent { get; }\n        private readonly FileContext _core;\n        private readonly List<SectionGroup> _list = new List<SectionGroup>();\n\n        internal SectionGroupCollection(FileContext core, SectionGroup parent)\n        {\n            Parent = parent;\n            _core = core;\n        }\n\n        public SectionGroup Add(string sectionGroupName)\n        {\n            var found = this[sectionGroupName];\n            if (found == null)\n            {\n                found = new SectionGroup(_core)\n                {\n                    Name = sectionGroupName,\n                    Path = Parent.Path == string.Empty ? sectionGroupName : $\"{Parent.Path}/{sectionGroupName}\"\n                };\n                _list.Add(found);\n            }\n\n            return found;\n        }\n\n        internal void Add(SectionGroup item)\n        {\n            _list.Add(item);\n        }\n\n        public IEnumerator<SectionGroup> GetEnumerator()\n        {\n            return _list.GetEnumerator();\n        }\n\n        public void Remove(string sectionGroupName)\n        {\n            var item = this[sectionGroupName];\n            if (item != null)\n            {\n                _list.Remove(item);\n            }\n        }\n\n        public int Count\n        {\n            get { return _list.Count; }\n        }\n\n        public SectionGroup this[int index]\n        {\n            get { return _list[index]; }\n        }\n\n        public SectionGroup this[string sectionGroupName]\n        {\n            get { return _list.FirstOrDefault(item => item.Name == sectionGroupName); }\n        }\n\n\n        public void CopyTo(Array array, int index)\n        {\n            _list.CopyTo((SectionGroup[])array, index);\n        }\n\n        public bool IsSynchronized\n        {\n            get { return false; }\n        }\n\n        public object SyncRoot { get; } = new object();\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SectionSchema.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Diagnostics;\nusing System.Xml.Linq;\n\nnamespace Microsoft.Web.Administration\n{\n    [DebuggerDisplay(\"{Name}\")]\n    internal class SectionSchema\n    {\n        public string Name { get; }\n        internal ConfigurationElementSchema Root;\n\n        public SectionSchema(string name, XElement element, string fileName)\n        {\n            Name = name;\n            Root = new ConfigurationElementSchema(fileName)\n            {\n                Path = name,\n                AllowUnrecognizedAttributes =\n                               element.Attribute(\"allowUnrecognizedAttributes\")\n                               .LoadBoolean(false)\n            };\n        }\n\n        internal void ParseSectionSchema(XElement element, ConfigurationElementSchema schema, string fileName)\n        {\n            foreach (var node in element.Nodes())\n            {\n                var item = node as XElement;\n                if (item == null)\n                {\n                    continue;\n                }\n\n                if (item.Name.LocalName == \"attribute\")\n                {\n                    var attribute = new ConfigurationAttributeSchema\n                    {\n                        Name = item.Attribute(\"name\").Value,\n                        Type = item.Attribute(\"type\").Value,\n                        IsRequired = item.Attribute(\"required\").LoadBoolean(false),\n                        IsUniqueKey = item.Attribute(\"isUniqueKey\").LoadBoolean(false),\n                        IsCombinedKey = item.Attribute(\"isCombinedKey\").LoadBoolean(false),\n                        IsCaseSensitive = item.Attribute(\"caseSensitive\").LoadBoolean(false),\n                        IsEncrypted = item.Attribute(\"encrypted\").LoadBoolean(false),\n                        AllowInfinite = item.Attribute(\"allowInfinite\").LoadBoolean(false),\n                        TimeSpanFormat = item.Attribute(\"timeSpanFormat\").LoadString(\"string\"),\n                        IsExpanded = item.Attribute(\"expanded\").LoadBoolean(false),\n                        ValidationType = item.Attribute(\"validationType\").LoadString(null),\n                        ValidationParameter = item.Attribute(\"validationParameter\").LoadString(null)\n                    };\n\n                    if (attribute.Type == \"enum\" || attribute.Type == \"flags\")\n                    {\n                        attribute.LoadEnums(item);\n                    }\n\n                    attribute.CreateValidator();\n\n                    var defaultValue = item.Attribute(\"defaultValue\");\n                    if (defaultValue != null)\n                    {\n                        attribute.SetDefaultValue(defaultValue.Value);\n                    }\n\n                    if (schema == null)\n                    {\n                        Root.AttributeSchemas.Add(attribute);\n                    }\n                    else\n                    {\n                        schema.AttributeSchemas.Add(attribute);\n                    }\n\n                    continue;\n                }\n\n                if (item.Name.LocalName == \"element\")\n                {\n                    var name = item.Attribute(\"name\").Value;\n                    var top = schema ?? Root;\n                    ConfigurationElementSchema child = top.ChildElementSchemas[name];\n                    if (child == null)\n                    {\n                        child = new ConfigurationElementSchema(fileName)\n                        {\n                            Name = name,\n                            IsCollectionDefault = item.Attribute(\"isCollectionDefault\").LoadBoolean(false),\n                            AllowUnrecognizedAttributes = top.AllowUnrecognizedAttributes\n                        };\n                        top.ChildElementSchemas.Add(child);\n                        child.Path = string.Format(\"{0}/{1}\", schema == null ? Name : schema.Path, child.Name);\n                    }\n                    else\n                    {\n                        // TODO: validation (example isCollectionDefault not equals: item C:\\Windows\\system32\\inetsrv\\config\\schema\\IISAdvancedLogging_schema.xml child True C:\\Windows\\system32\\inetsrv\\config\\schema\\Ftp_schema.xml)\n                        if (item.Attribute(\"isCollectionDefault\").LoadBoolean(false) != child.IsCollectionDefault)\n                        {\n                            Debug.WriteLine($\"isCollectionDefault not equals: item {fileName} child {child.IsCollectionDefault} {child.FileName}\");\n                        }\n\n                        if (top.AllowUnrecognizedAttributes != child.AllowUnrecognizedAttributes)\n                        {\n                            Debug.WriteLine($\"allowUnrecognizedAttributes not equals: {fileName} child {child.AllowUnrecognizedAttributes} {child.FileName}\");\n                        }\n                    }\n\n                    ParseSectionSchema(item, child, fileName);\n                }\n                else if (item.Name.LocalName == \"collection\")\n                {\n                    var path = (schema == null) ? Name : schema.Path;\n                    var addElementNames = item.Attribute(\"addElement\").LoadString(string.Empty);\n                    var removeElementName = item.Attribute(\"removeElement\").LoadString(string.Empty);\n                    var clearElementName = item.Attribute(\"clearElement\").LoadString(string.Empty);\n                    var isMergeAppend = item.Attribute(\"mergeAppend\").LoadBoolean(true);\n                    var allowDuplicates = item.Attribute(\"allowDuplicates\").LoadBoolean(false);\n                    var allowUnrecognizedAttributes = item.Attribute(\"allowUnrecognizedAttributes\").LoadBoolean(false);\n                    var child = new ConfigurationCollectionSchema(path, addElementNames, removeElementName,\n                        clearElementName, isMergeAppend, allowDuplicates, allowUnrecognizedAttributes, fileName);\n\n                    var top = schema ?? Root;\n                    if (top.CollectionSchema == null)\n                    {\n                        top.CollectionSchema = child;\n                    }\n                    else\n                    {\n                        top.CollectionSchema.Merge(child);\n                    }\n\n                    ParseSectionSchema(item, top.CollectionSchema.AddSchemas[0], fileName);\n                    top.CollectionSchema.ReplicateAddSchema();\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ServerManager.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved. \n//  \n// Licensed under the MIT license. See LICENSE file in the project root for full license information. \n\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Web.Administration\n{\n    public abstract class ServerManager : IFeatureDetection\n    {\n        private Configuration _applicationHost;\n\n        private Configuration _web;\n\n        private Configuration _cleanHost;\n\n        internal bool Initialized;\n\n        private SiteDefaults _siteDefaults;\n\n        internal SiteCollection SiteCollection;\n\n        private VirtualDirectoryDefaults _virtualDirectoryDefaults;\n\n        private WorkerProcessCollection _workerProcessCollection;\n\n        private ApplicationDefaults _applicationDefaults;\n\n        private ApplicationPoolDefaults _applicationPoolDefaults;\n\n        internal ApplicationPoolCollection ApplicationPoolCollection;\n\n        internal string HostName { get; set; }\n\n        internal string Name { get; set; }\n\n        internal string Title => string.IsNullOrEmpty(HostName)\n            ? (string.IsNullOrEmpty(Name) ? \"UNKNOWN\" : Name)\n            : HostName.ExtractName();\n\n        public abstract bool SupportsSni { get; }\n\n        public abstract bool SupportsWildcard { get; }\n\n        public WorkingMode Mode { get; protected set; }\n\n        private readonly object _locker = new object();\n\n        protected ServerManager()\n            : this(null, true)\n        {\n        }\n\n        protected ServerManager(string hostName, bool local)\n            : this(hostName, false, null)\n        {\n        }\n\n        protected ServerManager(bool readOnly, string applicationHostConfigurationPath)\n            : this(\"localhost\", readOnly, applicationHostConfigurationPath)\n        {\n        }\n\n        protected ServerManager(string applicationHostConfigurationPath)\n            : this(false, applicationHostConfigurationPath)\n        {\n        }\n\n        internal ServerManager(string hostName, bool readOnly, string fileName)\n        {\n            HostName = hostName;\n            ReadOnly = readOnly;\n            FileName = fileName;\n        }\n\n        internal virtual bool Verify(string path, string executable)\n        {\n            return Directory.Exists(path.ExpandIisExpressEnvironmentVariables(executable));\n        }\n\n        private void Initialize()\n        {\n            lock (_locker)\n            {\n                if (Initialized)\n                {\n                    return;\n                }\n\n                Initialized = true;\n                PreInitialize();\n\n                var machine =\n                    new Configuration(\n                        new FileContext(\n                            this,\n                            Helper.FileNameMachineConfig,\n                            null,\n                            null,\n                            false,\n                            true,\n                            true)\n                        { IgnoreSchemaCheck = true });\n\n                _web =\n                    new Configuration(\n                        new FileContext(\n                            this,\n                            Helper.FileNameWebConfig,\n                            machine.FileContext,\n                            null,\n                            false,\n                            true,\n                            false));\n\n                _applicationHost =\n                    new Configuration(\n                    new FileContext(this, FileName, _web.FileContext, null, true, false, ReadOnly));\n\n                LoadCache();\n\n                var poolSectionName = \"system.applicationHost/applicationPools\";\n                var poolSection = _applicationHost.GetSection(poolSectionName);\n                if (poolSection == null)\n                {\n                    throw new COMException($\"Filename: \\\\\\\\?\\\\{FileName}\\r\\nError: The configuration section '{poolSectionName}' cannot be read because it is missing a section declaration\\r\\n\\r\\n\");\n                }\n\n                _applicationPoolDefaults =\n                    new ApplicationPoolDefaults(poolSection?.GetChildElement(\"applicationPoolDefaults\"), poolSection);\n                ApplicationPoolCollection = new ApplicationPoolCollection(poolSection, this);\n\n                var siteSectionName = \"system.applicationHost/sites\";\n                var siteSection = _applicationHost.GetSection(siteSectionName);\n                if (siteSection == null)\n                {\n                    throw new COMException($\"Filename: \\\\\\\\?\\\\{FileName}\\r\\nError: The configuration section '{siteSectionName}' cannot be read because it is missing a section declaration\\r\\n\\r\\n\");\n                }\n\n                _siteDefaults = new SiteDefaults(siteSection?.GetChildElement(\"siteDefaults\"), siteSection);\n                _applicationDefaults = new ApplicationDefaults(\n                    siteSection?.GetChildElement(\"applicationDefaults\"),\n                    siteSection);\n                _virtualDirectoryDefaults =\n                    new VirtualDirectoryDefaults(siteSection?.GetChildElement(\"virtualDirectoryDefaults\"), siteSection);\n                //_workerProcessCollection = new WorkerProcessCollection(poolSection);\n                SiteCollection = new SiteCollection(siteSection, this);\n            }\n\n            // IMPORTANT: out of locking for Jexus web server.\n            PostInitialize();\n        }\n\n        internal virtual void CleanSiteFile(string file)\n        {\n        }\n\n        internal virtual string GetPhysicalPath(string root)\n        {\n            return root;\n        }\n\n        internal abstract void Stop(Site site);\n        internal abstract void Start(Site site);\n\n        internal virtual void Restart(Site site)\n        {\n            Stop(site);\n            Start(site);\n        }\n\n        internal virtual void Recycle(ApplicationPool applicationPool)\n        { }\n\n        internal virtual void Start(ApplicationPool applicationPool)\n        { }\n\n        internal virtual void Stop(ApplicationPool applicationPool)\n        { }\n\n        protected virtual void PreInitialize()\n        {\n        }\n\n        internal abstract bool GetPoolState(ApplicationPool pool);\n\n        protected virtual void PostInitialize()\n        {\n        }\n\n        private void LoadCache()\n        {\n            // IMPORTANT: force to reload clean elements from file.\n            _cleanHost = null;\n            _cleanHost =\n                new Configuration(\n                new FileContext(this, FileName, _applicationHost.FileContext.Parent, null, true, false, false));\n        }\n\n        public void Dispose()\n        {\n        }\n\n        public void CommitChanges()\n        {\n            foreach (Site site in Sites)\n            {\n                foreach (Application application in site.Applications)\n                {\n                    application.Save();\n                }\n            }\n\n            Save();\n\n            PostCommitChanges();\n        }\n\n        protected virtual void PostCommitChanges()\n        {\n        }\n\n        public void Save()\n        {\n            _web.FileContext.Save();\n            _applicationHost.FileContext.Save();\n            _applicationHost.OnCacheInvalidated();\n\n            LoadCache();\n        }\n\n        public ApplicationDefaults ApplicationDefaults\n        {\n            get\n            {\n                if (_applicationDefaults != null)\n                {\n                    return _applicationDefaults;\n                }\n\n                Initialize();\n                return _applicationDefaults;\n            }\n        }\n\n        public ApplicationPoolDefaults ApplicationPoolDefaults\n        {\n            get\n            {\n                if (_applicationPoolDefaults != null)\n                {\n                    return _applicationPoolDefaults;\n                }\n\n                Initialize();\n                return _applicationPoolDefaults;\n            }\n        }\n\n        public ApplicationPoolCollection ApplicationPools\n        {\n            get\n            {\n                if (ApplicationPoolCollection != null)\n                {\n                    return ApplicationPoolCollection;\n                }\n\n                Initialize();\n                return ApplicationPoolCollection;\n            }\n        }\n\n        public SiteDefaults SiteDefaults\n        {\n            get\n            {\n                if (_siteDefaults != null)\n                {\n                    return _siteDefaults;\n                }\n\n                Initialize();\n                return _siteDefaults;\n            }\n        }\n\n        public SiteCollection Sites\n        {\n            get\n            {\n                if (SiteCollection != null)\n                {\n                    return SiteCollection;\n                }\n\n                Initialize();\n                return SiteCollection;\n            }\n        }\n\n        public VirtualDirectoryDefaults VirtualDirectoryDefaults\n        {\n            get\n            {\n                if (_virtualDirectoryDefaults != null)\n                {\n                    return _virtualDirectoryDefaults;\n                }\n\n                Initialize();\n                return _virtualDirectoryDefaults;\n            }\n        }\n\n        public WorkerProcessCollection WorkerProcesses\n        {\n            get\n            {\n                Initialize();\n                return _workerProcessCollection;\n            }\n        }\n\n        public object Status { get; internal set; }\n\n        internal bool IsLocalhost { get; set; }\n\n        internal bool ReadOnly { get; set; }\n\n        internal string FileName { get; set; }\n\n        internal SortedDictionary<string, List<string>> Extra { get; set; }\n\n        internal string SiteFolder { get; set; }\n\n        public Configuration GetAdministrationConfiguration()\n        {\n            return null;\n        }\n\n        internal abstract bool GetSiteState(Site site);\n\n        public Configuration GetAdministrationConfiguration(WebConfigurationMap configMap, string configurationPath)\n        {\n            return null;\n        }\n\n        internal virtual IEnumerable<string> GetSchemaFiles()\n        {\n            // IMPORTANT: use local schema folder as fallback.\n            var directoryName = Path.GetDirectoryName(typeof(FileContext).Assembly.Location);\n            Debug.Assert(directoryName != null, nameof(directoryName) + \" != null\");\n            var local = Path.Combine(\n                directoryName,\n                \"schema\");\n            return Directory.Exists(local) ? Directory.GetFiles(local) : Enumerable.Empty<string>();\n        }\n\n        public Configuration GetApplicationHostConfiguration()\n        {\n            Initialize();\n            lock (_locker)\n            {\n                return _applicationHost;\n            }\n        }\n\n        internal Configuration GetConfigurationCache()\n        {\n            Initialize();\n            lock (_locker)\n            {\n                return _cleanHost;\n            }\n        }\n\n        public object GetMetadata(string metadataType)\n        {\n            return null;\n        }\n\n        public Configuration GetRedirectionConfiguration()\n        {\n            return null;\n        }\n\n        public Configuration GetWebConfiguration(string siteName)\n        {\n            return null;\n        }\n\n        public Configuration GetWebConfiguration(string siteName, string virtualPath)\n        {\n            return null;\n        }\n\n        public Configuration GetWebConfiguration(WebConfigurationMap configMap, string configurationPath)\n        {\n            return null;\n        }\n\n        public static IisServerManager OpenRemote(string serverName)\n        {\n            return new IisServerManager(serverName, false);\n        }\n\n        public void SetMetadata(string metadataType, object value)\n        {\n        }\n\n        internal void VerifyLocation(string locationPath)\n        {\n            if (locationPath == null)\n            {\n                return;\n            }\n\n            // TODO: add deeper level check\n            var parts = locationPath.Split('/');\n            if (parts[0] != string.Empty && Sites != null && Sites.All(site => site.Name != parts[0]))\n            {\n                throw new FileNotFoundException(\n                    $\"Filename: \\\\\\\\?\\\\{FileName}\\r\\nError: Unrecognized configuration path 'MACHINE/WEBROOT/APPHOST/{parts[0]}'\\r\\n\\r\\n\", FileName);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ServerManagerException.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Runtime.Serialization;\n\nnamespace Microsoft.Web.Administration\n{\n    [Serializable]\n    public sealed class ServerManagerException : Exception,\n        ISerializable\n    {\n        public ServerManagerException()\n        {\n        }\n\n        public ServerManagerException(\n            string errorMessage\n        ) : base(errorMessage)\n        {\n        }\n\n        public ServerManagerException(\n            string errorMessage,\n            Exception exception\n        ) : base(errorMessage, exception)\n        {\n        }\n\n        public ServerManagerException(\n            string errorMessage,\n            int errorCode\n        ) : base(errorMessage)\n        {\n            ErrorCode = errorCode;\n        }\n\n        public ServerManagerException(\n            string errorMessage,\n            Exception exception,\n            int errorCode\n        ) : base(errorMessage, exception)\n        {\n            ErrorCode = errorCode;\n        }\n\n        public override string ToString()\n        {\n            return Message;\n        }\n\n        public int ErrorCode { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/Site.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    using System.Collections.Generic;\n    using System.Drawing.Design;\n    using System.IO;\n    using System.Threading.Tasks;\n    using System.Xml;\n\n    public sealed class Site : ConfigurationElement, IItem<Site>\n    {\n        private const string Command = \"/config:\\\"{0}\\\" /siteid:{1} /systray:false /trace:error\";\n        private ApplicationCollection _collection;\n        private SiteLogFile _logFile;\n        private SiteLimits _limits;\n        private SiteTraceFailedRequestsLogging _trace;\n        private VirtualDirectoryDefaults _virtualDefaults;\n        private ObjectState? _state;\n\n        internal Site(SiteCollection parent)\n            : this(null, parent)\n        { }\n\n        internal Site(ConfigurationElement element, SiteCollection parent)\n            : base(element, \"site\", null, parent, null, null)\n        {\n            ApplicationDefaults = ChildElements[\"applicationDefaults\"] == null\n                ? new ApplicationDefaults(parent.ChildElements[\"applicationDefaults\"], this)\n                : new ApplicationDefaults(ChildElements[\"applicationDefaults\"], this);\n            Parent = parent;\n            Bindings = new BindingCollection(ChildElements[\"bindings\"], this);\n            if (element == null)\n            {\n                return;\n            }\n\n            foreach (ConfigurationElement node in (ConfigurationElementCollection)element)\n            {\n                var app = new Application(node, Applications);\n                Applications.InternalAdd(app);\n            }\n        }\n\n        public ApplicationDefaults ApplicationDefaults { get; }\n\n        public ApplicationCollection Applications\n        {\n            get => _collection ?? (_collection = new ApplicationCollection(this));\n            internal set => _collection = value;\n        }\n\n        public BindingCollection Bindings { get; internal set; }\n\n        public long Id\n        {\n            get => (uint)this[\"id\"];\n            set => this[\"id\"] = value;\n        }\n\n        public SiteLimits Limits => _limits ?? (_limits = new SiteLimits(ChildElements[\"limits\"], this));\n\n        public SiteLogFile LogFile => _logFile ?? (_logFile = new SiteLogFile(ChildElements[\"logFile\"], this));\n\n        public string Name\n        {\n            get => (string)this[\"name\"];\n            set => this[\"name\"] = value;\n        }\n\n        public bool ServerAutoStart\n        {\n            get => (bool)this[\"serverAutoStart\"];\n            set => this[\"serverAutoStart\"] = value;\n        }\n\n        public ObjectState State\n        {\n            get\n            {\n                if (_state == null || _state == ObjectState.Starting || _state == ObjectState.Stopping)\n                {\n                    var result = GetState();\n                    _state = result ? ObjectState.Started : ObjectState.Stopped;\n                }\n\n                return _state.Value;\n            }\n\n            internal set => _state = value;\n        }\n\n        internal string CommandLine => string.Format(Command, FileContext.FileName, Id);\n\n        public SiteTraceFailedRequestsLogging TraceFailedRequestsLogging => _trace ?? (_trace = new SiteTraceFailedRequestsLogging(ChildElements[\"traceFailedRequestsLogging\"], this));\n\n        public VirtualDirectoryDefaults VirtualDirectoryDefaults => _virtualDefaults ?? (_virtualDefaults = new VirtualDirectoryDefaults(ChildElements[\"virtualDirectoryDefaults\"], this));\n\n        internal SiteCollection Parent { get; }\n\n        public Configuration GetWebConfiguration()\n        {\n            foreach (Application app in Applications)\n            {\n                if (app.Path == Application.RootPath)\n                {\n                    return app.GetWebConfiguration();\n                }\n            }\n\n            return new Configuration(new FileContext(Server, null, null, Name, true, true, true, (Entity as IXmlLineInfo).LineNumber));\n        }\n\n        public ObjectState Start()\n        {\n            // TODO: add timeout.\n            State = ObjectState.Starting;\n            Server.Start(this);\n            return State;\n        }\n\n        public ObjectState Stop()\n        {\n            // TODO: add timeout.\n            State = ObjectState.Stopping;\n            Server.Stop(this);\n            return State;\n        }\n\n        public override string ToString()\n        {\n            return Name;\n        }\n\n        internal void RemoveApplications()\n        {\n            foreach (Application application in Applications)\n            {\n                application.Remove();\n            }\n\n            Applications = new ApplicationCollection(this);\n        }\n\n        internal ServerManager Server => Parent.Parent;\n\n        internal IEnumerable<DirectoryInfo> GetPhysicalDirectories()\n        {\n            if (Server.Mode != WorkingMode.Jexus)\n            {\n                var root = PhysicalPath.ExpandIisExpressEnvironmentVariables(this.Applications[0].GetActualExecutable());\n                if (Directory.Exists(root))\n                {\n                    var result = new DirectoryInfo(root).GetDirectories();\n                    return result;\n                }\n\n                return [];\n            }\n\n            return null;\n        }\n\n        internal void Restart()\n        {\n            Server.Restart(this);\n        }\n\n        internal bool GetState()\n        {\n            return Server.GetSiteState(this);\n        }\n\n        internal void RemoveApplication(Application application)\n        {\n            Applications = application.Remove();\n        }\n\n        internal void Save()\n        {\n            foreach (Application application in Applications)\n            {\n                application.Save();\n            }\n        }\n\n        public void Apply()\n        {\n        }\n\n        public bool Match(Site other)\n        {\n            return Equals(other);\n        }\n\n        public bool Equals(Site other)\n        {\n            return other != null && Id == other.Id;\n        }\n\n        internal string PhysicalPath\n        {\n            get\n            {\n                if (Applications.Count == 0)\n                {\n                    return string.Empty;\n                }\n\n                var path = Applications[0].PhysicalPath;\n                return path;\n            }\n        }\n\n        public string Flag { get; set; } = \"Local\";\n\n        public ConfigurationElement Element\n        {\n            get { return this; }\n            set { }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SiteCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class SiteCollection : ConfigurationElementCollectionBase<Site>\n    {\n        internal SiteCollection(ServerManager parent)\n            : this(null, parent)\n        {\n        }\n\n        internal SiteCollection(ConfigurationElement element, ServerManager parent)\n            : base(element, \"sites\", parent.SiteCollection?.Schema, null, parent.SiteCollection?.InnerEntity, null)\n        {\n            Parent = parent;\n            Section = element?.Section;\n            if (element == null)\n            {\n                return;\n            }\n\n            foreach (ConfigurationElement node in element.GetCollection())\n            {\n                if (Schema.CollectionSchema.ContainsAddElement(node.ElementTagName))\n                {\n                    InternalAdd(new Site(node, this));\n                }\n            }\n        }\n\n        public Site Add(string name, string physicalPath, int port)\n        {\n            var site = new Site(this);\n            site.Name = name;\n            site.Bindings.Add($\"*:{port}:\", \"http\");\n            site.Applications.Add(Application.RootPath, physicalPath);\n            return Add(site);\n        }\n\n        public Site Add(string name, string bindingInformation, string physicalPath, byte[] certificateHash)\n        {\n            return Add(name, bindingInformation, physicalPath, certificateHash, \"MY\");\n        }\n\n        public Site Add(string name, string bindingProtocol, string bindingInformation, string physicalPath)\n        {\n            var site = new Site(this);\n            site.Name = name;\n            site.Bindings.Add(bindingInformation, bindingProtocol);\n            site.Applications.Add(Application.RootPath, physicalPath);\n            return Add(site);\n        }\n\n        public Site Add(string name, string bindingInformation, string physicalPath, byte[] certificateHash, string certificateStore)\n        {\n            return Add(name, bindingInformation, physicalPath, certificateHash, certificateStore, SslFlags.None);\n        }\n\n        public Site Add(string name, string bindingInformation, string physicalPath, byte[] certificateHash, string certificateStore, SslFlags sslFlags)\n        {\n            var site = new Site(this);\n            site.Name = name;\n            site.Bindings.Add(bindingInformation, certificateHash, certificateStore, sslFlags);\n            site.Applications.Add(Application.RootPath, physicalPath);\n            return Add(site);\n        }\n\n        protected override Site CreateNewElement(string elementTagName)\n        {\n            throw new NotImplementedException();\n        }\n\n        private static readonly char[] s_chars = { '\\\\', '/', '?', ';', ':', '@', '&', '=', '+', '$', ',', '|', '\"', '<', '>' };\n\n        internal ServerManager Parent { get; private set; }\n\n        public static char[] InvalidSiteNameCharacters()\n        {\n            return s_chars;\n        }\n\n        internal static char[] InvalidSiteNameCharactersJexus()\n        {\n            return new[] { ' ' };\n        }\n\n        internal bool? FindDuplicate(Binding binding, Site host, Binding existing)\n        {\n            foreach (Site site in this)\n            {\n                foreach (Binding item in site.Bindings)\n                {\n                    if (item.Protocol == binding.Protocol && item.ToString() == binding.ToString() && item != existing)\n                    {\n                        return site == host ? (bool?)null : true;\n                    }\n                }\n            }\n\n            return false;\n        }\n\n        /// <summary>\n        /// Gets a site that has the specified name in the collection.\n        /// </summary>\n        /// <param name=\"name\">The name of the site to retrieve from the site collection.</param>\n        /// <returns>The <see cref=\"Site\"/> object with the specified name in the <see cref=\"SiteCollection\"/> object.</returns>\n        /// <remarks>The <see cref=\"Site.Name\"/> property of a <see cref=\"Site\"/> object corresponds to the name parameter that is used to find a site in the <see cref=\"SiteCollection\"/> object.</remarks>\n        public new Site this[string name]\n        {\n            get\n            {\n                foreach (Site site in this)\n                {\n                    if (site.Name == name)\n                    {\n                        return site;\n                    }\n                }\n\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SiteDefaultProcessor.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    internal class SiteDefaultProcessor<V>\n        where V : ConfigurationElement\n    {\n        public SiteDefaultProcessor(V siteDefault)\n        {\n            SiteDefault = siteDefault;\n        }\n\n        public V SiteDefault { get; }\n\n        public T Get<T>(string name, Func<T> defaultGetter, Func<ConfigurationAttribute, T> mainGetter, V instance)\n        {\n            var attribute = instance.GetAttribute(name);\n            if (attribute.IsInheritedFromDefaultValue && SiteDefault != null)\n            {\n                return defaultGetter();\n            }\n\n            return mainGetter(attribute);\n        }\n\n        public void Set<T>(string name, T value, Func<T> defaultGetter, Action<ConfigurationAttribute> mainSetter, V instance)\n        {\n            var attribute = instance.GetAttribute(name);\n            if (SiteDefault != null && value.Equals(defaultGetter()))\n            {\n                attribute.Delete();\n                return;\n            }\n\n            mainSetter(attribute);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SiteDefaults.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class SiteDefaults : ConfigurationElement\n    {\n        private SiteLimits _limits;\n        private SiteLogFile _logFile;\n        private SiteTraceFailedRequestsLogging _trace;\n\n        internal SiteDefaults(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"siteDefaults\", null, parent, null, null)\n        {\n        }\n\n        public SiteLimits Limits\n        {\n            get { return _limits ?? (_limits = new SiteLimits(ChildElements[\"limits\"], this)); }\n        }\n\n        public SiteLogFile LogFile\n        {\n            get { return _logFile ?? (_logFile = new SiteLogFile(ChildElements[\"logFile\"], this)); }\n        }\n\n        public bool ServerAutoStart\n        {\n            get { return (bool)this[\"serverAutoStart\"]; }\n            set { this[\"serverAutoStart\"] = value; }\n        }\n\n        public SiteTraceFailedRequestsLogging TraceFailedRequestsLogging\n        {\n            get { return _trace ?? (_trace = new SiteTraceFailedRequestsLogging(ChildElements[\"traceFailedRequestsLogging\"], this)); }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SiteLimits.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class SiteLimits : ConfigurationElement\n    {\n        internal SiteLimits(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"limits\", null, parent, null, null)\n        {\n        }\n\n        public TimeSpan ConnectionTimeout\n        {\n            get { return (TimeSpan)this[\"connectionTimeout\"]; }\n            set { this[\"connectionTimeout\"] = value; }\n        }\n\n        public long MaxBandwidth\n        {\n            get { return Convert.ToInt64(this[\"maxBandwidth\"]); }\n            set { this[\"maxBandwidth\"] = Convert.ToUInt32(value); }\n        }\n\n        public long MaxConnections\n        {\n            get { return Convert.ToInt64(this[\"maxConnections\"]); }\n            set { this[\"maxConnections\"] = Convert.ToUInt32(value); }\n        }\n\n        public long MaxUrlSegments\n        {\n            get { return Convert.ToInt64(this[\"maxUrlSegments\"]); }\n            set { this[\"maxUrlSegments\"] = Convert.ToUInt32(value); }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SiteLogFile.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n\n    public sealed class SiteLogFile : ConfigurationElement\n    {\n        private CustomLogFieldCollection _collection;\n        private readonly SiteDefaultProcessor<SiteLogFile> _processor;\n\n        internal SiteLogFile(ConfigurationElement parent)\n            : this(null, parent)\n        { }\n\n        internal SiteLogFile(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"logFile\", null, parent, null, null)\n        {\n            var server = (parent as Site)?.Server;\n            var defaults = server?.SiteDefaults.LogFile;\n            _processor = new SiteDefaultProcessor<SiteLogFile>(defaults);\n            SetSiteDefaults(defaults);\n            element.SetSiteDefaults(defaults);\n        }\n\n        // TODO: how to read default custom fields?\n        public CustomLogFieldCollection CustomLogFields => _collection ?? (_collection = Schema.ChildElementSchemas[\"customFields\"] == null ? null : new CustomLogFieldCollection(ChildElements[\"customFields\"], this));\n\n        public Guid CustomLogPluginClsid\n        {\n            get\n            {\n                return _processor.Get(\"customLogPluginClsid\",\n                    () => _processor.SiteDefault.CustomLogPluginClsid,\n                    attribute =>\n                    {\n                        Guid guid;\n                        Guid.TryParse(attribute.Value.ToString(), out guid);\n                        return guid;\n                    },\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"customLogPluginClsid\",\n                    value,\n                    () => _processor.SiteDefault.CustomLogPluginClsid,\n                    attribute => attribute.Value = value.ToString(),\n                    this);\n            }\n        }\n\n        public string Directory\n        {\n            get\n            {\n                return _processor.Get(\"directory\",\n                    () => _processor.SiteDefault.Directory,\n                    attribute => (string)attribute.Value,\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"directory\",\n                    value,\n                    () => _processor.SiteDefault.Directory,\n                    attribute => attribute.Value = value,\n                    this);\n            }\n        }\n\n        public bool Enabled\n        {\n            get\n            {\n                return _processor.Get(\"enabled\",\n                    () => _processor.SiteDefault.Enabled,\n                    attribute => (bool)attribute.Value,\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"enabled\",\n                    value,\n                    () => _processor.SiteDefault.Enabled,\n                    attribute => attribute.Value = value,\n                    this);\n            }\n        }\n\n        public bool LocalTimeRollover\n        {\n            get\n            {\n                return _processor.Get(\"localTimeRollover\",\n                    () => _processor.SiteDefault.LocalTimeRollover,\n                    attribute => (bool)attribute.Value,\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"localTimeRollover\",\n                    value,\n                    () => _processor.SiteDefault.LocalTimeRollover,\n                    attribute => attribute.Value = value,\n                    this);\n            }\n        }\n\n        public LogExtFileFlags LogExtFileFlags\n        {\n            get\n            {\n                return _processor.Get(\"logExtFileFlags\",\n                    () => _processor.SiteDefault.LogExtFileFlags,\n                    attribute => (LogExtFileFlags)Enum.ToObject(typeof(LogExtFileFlags), attribute.Value),\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"logExtFileFlags\",\n                    value,\n                    () => _processor.SiteDefault.LogExtFileFlags,\n                    attribute => attribute.Value = (long)value,\n                    this);\n            }\n        }\n\n        public LogFormat LogFormat\n        {\n            get\n            {\n                return _processor.Get(\"logFormat\",\n                    () => _processor.SiteDefault.LogFormat,\n                    attribute => (LogFormat)Enum.ToObject(typeof(LogFormat), attribute.Value),\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"logFormat\",\n                    value,\n                    () => _processor.SiteDefault.LogFormat,\n                    attribute => attribute.Value = (long)value,\n                    this);\n            }\n        }\n\n        public LogTargetW3C LogTargetW3C\n        {\n            get\n            {\n                return _processor.Get(\"logTargetW3C\",\n                    () => _processor.SiteDefault.LogTargetW3C,\n                    attribute => (LogTargetW3C)Enum.ToObject(typeof(LogTargetW3C), attribute.Value),\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"logTargetW3C\",\n                    value,\n                    () => _processor.SiteDefault.LogTargetW3C,\n                    attribute => attribute.Value = (long)value,\n                    this);\n            }\n        }\n\n        public LoggingRolloverPeriod Period\n        {\n            get\n            {\n                return _processor.Get(\"period\",\n                    () => _processor.SiteDefault.Period,\n                    attribute => (LoggingRolloverPeriod)Enum.ToObject(typeof(LoggingRolloverPeriod), attribute.Value),\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"period\",\n                    value,\n                    () => _processor.SiteDefault.Period,\n                    attribute => attribute.Value = (long)value,\n                    this);\n            }\n        }\n\n        public long TruncateSize\n        {\n            get\n            {\n                return _processor.Get(\"truncateSize\",\n                    () => _processor.SiteDefault.TruncateSize,\n                    attribute => (long)attribute.Value,\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"truncateSize\",\n                    value,\n                    () => _processor.SiteDefault.TruncateSize,\n                    attribute => attribute.Value = value,\n                    this);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SiteNameValidator.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Linq;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Web.Administration\n{\n    [Obfuscation(Exclude = true, ApplyToMembers = false)]\n    internal class SiteNameValidator : ConfigurationValidatorBase\n    {\n        public override void Validate(object value)\n        {\n            var data = (string)value;\n            if (string.IsNullOrWhiteSpace(data))\n            {\n                throw new COMException(\"Invalid site name\\r\\n\");\n            }\n\n            foreach (var ch in SiteCollection.InvalidSiteNameCharacters())\n            {\n                if (data.Contains(ch))\n                {\n                    throw new COMException(\"Invalid site name\\r\\n\");\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SiteTraceFailedRequestsLogging.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class SiteTraceFailedRequestsLogging : ConfigurationElement\n    {\n        private readonly SiteDefaultProcessor<SiteTraceFailedRequestsLogging> _processor;\n\n        internal SiteTraceFailedRequestsLogging(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, \"traceFailedRequestsLogging\", null, parent, null, null)\n        {\n            var server = (parent as Site)?.Server;\n            var defaults = server?.SiteDefaults.TraceFailedRequestsLogging;\n            _processor = new SiteDefaultProcessor<SiteTraceFailedRequestsLogging>(defaults);\n            SetSiteDefaults(defaults);\n            element.SetSiteDefaults(defaults);\n        }\n\n        public string Directory\n        {\n            get\n            {\n                return _processor.Get(\"directory\",\n                    () => _processor.SiteDefault.Directory,\n                    attribute => (string)attribute.Value,\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"directory\",\n                    value,\n                    () => _processor.SiteDefault.Directory,\n                    attribute => attribute.Value = value,\n                    this);\n            }\n        }\n\n        public bool Enabled\n        {\n            get\n            {\n                return _processor.Get(\"enabled\",\n                    () => _processor.SiteDefault.Enabled,\n                    attribute => (bool)attribute.Value,\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"enabled\",\n                    value,\n                    () => _processor.SiteDefault.Enabled,\n                    attribute => attribute.Value = value,\n                    this);\n            }\n        }\n\n        public long MaxLogFiles\n        {\n            get\n            {\n                return _processor.Get(\"maxLogFiles\",\n                    () => _processor.SiteDefault.MaxLogFiles,\n                    attribute => Convert.ToInt64(attribute.Value),\n                    this);\n            }\n\n            set\n            {\n                _processor.Set(\"maxLogFiles\",\n                    value,\n                    () => _processor.SiteDefault.MaxLogFiles,\n                    attribute => attribute.Value = Convert.ToUInt32(value),\n                    this);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/SslFlags.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    [Flags]\n    public enum SslFlags\n    {\n        None = 0,\n        Sni = 1,\n        CentralCertStore = 2\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/StartMode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Administration\n{\n    public enum StartMode\n    {\n        [Description(\"OnDemand\")]\n        OnDemand = 0,\n\n        [Description(\"AlwaysRunning\")]\n        AlwaysRunning = 1\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/StringExtensions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Text;\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class StringExtensions\n    {\n        public const string AnyHostName = \"*\";\n\n        public const string AllUnassigned = \"All Unassigned\";\n\n        public static string HostToDisplay(this string text)\n        {\n            return text == AnyHostName ? string.Empty : text;\n        }\n\n        public static string DisplayToHost(this string text)\n        {\n            return string.IsNullOrWhiteSpace(text) ? AnyHostName : text;\n        }\n\n        public static string AddressToDisplay(this IPAddress address)\n        {\n            return address.Equals(IPAddress.Any)\n                ? AnyHostName\n                : address.AddressFamily == AddressFamily.InterNetwork\n                    ? address.ToString()\n                    : $\"[{address}]\";\n        }\n\n        public static IPAddress DisplayToAddress(this string text)\n        {\n            return text == AnyHostName || text == string.Empty ? IPAddress.Any : IPAddress.Parse(text);\n        }\n\n        public static string AddressToCombo(this IPAddress address)\n        {\n            return address.Equals(IPAddress.Any) ? AllUnassigned : address.ToString();\n        }\n\n        public static IPAddress ComboToAddress(this string text)\n        {\n            return text == AllUnassigned ? IPAddress.Any : IPAddress.Parse(text);\n        }\n\n        public static string ElementTagNameToName(this string tag)\n        {\n            return tag.Contains(\"/\") ? tag.Substring(tag.LastIndexOf('/') + 1) : tag;\n        }\n\n        public static string Combine(IEnumerable<string> items, string connector)\n        {\n            var preConditions = items.ToList();\n            if (preConditions.Count == 0)\n            {\n                return string.Empty;\n            }\n\n            var result = new StringBuilder(preConditions[0]);\n            for (int index = 1; index < preConditions.Count; index++)\n            {\n                result.Append(connector).Append(preConditions[index]);\n            }\n\n            return result.ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/TimeSpanRangeValidator.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Reflection;\nusing System.Runtime.InteropServices;\nusing System.Threading;\n\nnamespace Microsoft.Web.Administration\n{\n    [Obfuscation(Exclude = true, ApplyToMembers = false)]\n    internal class TimeSpanRangeValidator : ConfigurationValidatorBase\n    {\n        private readonly bool _exclude;\n\n        private readonly long _minimum;\n\n        private readonly long _maximum;\n\n        private readonly long _granularity;\n\n        public TimeSpanRangeValidator(string range)\n        {\n            var items = range.Split(',');\n            _minimum = long.Parse(items[0]);\n            _maximum = long.Parse(items[1]);\n            _granularity = long.Parse(items[2]);\n            _exclude = items.Length > 3 && items[3] == \"exclude\";\n        }\n\n        public override void Validate(object value)\n        {\n            var data = (TimeSpan)value;\n            if (data == Timeout.InfiniteTimeSpan)\n            {\n                return;\n            }\n\n            var seconds = data.Ticks / 10000000L;\n            if (_exclude)\n            {\n                if (seconds > _minimum && seconds < _maximum && (seconds - _minimum) % _granularity != 0)\n                {\n                    throw new COMException(\n                        string.Format(\n                            \"Timespan value must not be between {0} and {1} seconds inclusive, with a granularity of {2} seconds\\r\\n\",\n                            TimeSpan.FromSeconds(_minimum),\n                            TimeSpan.FromSeconds(_maximum),\n                            _granularity));\n                }\n            }\n            else\n            {\n                if (seconds < _minimum || seconds > _maximum || (seconds - _minimum) % _granularity != 0)\n                {\n                    if (_minimum != 1L || (seconds % _granularity != 0))\n                    {\n                        // IMPORTANT: workaround sessionState / timeout's definition using 1 issue.\n                        throw new COMException(\n                            string.Format(\n                                \"Timespan value must be between {0} and {1} seconds inclusive, with a granularity of {2} seconds\\r\\n\",\n                                TimeSpan.FromSeconds(_minimum),\n                                TimeSpan.FromSeconds(_maximum),\n                                _granularity));\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/ValidatorRegistry.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Reflection;\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class ValidatorRegistry\n    {\n        private static readonly IDictionary<string, Type> s_validators;\n        public static readonly ConfigurationValidatorBase DefaultValidator = new DefaultValidator();\n\n        static ValidatorRegistry()\n        {\n            s_validators = new Dictionary<string, Type>();\n            foreach (var type in Assembly.GetExecutingAssembly().GetTypes())\n            {\n                var found = type.IsSubclassOf(typeof(ConfigurationValidatorBase));\n                if (!found)\n                {\n                    continue;\n                }\n\n                s_validators.Add(type.Name, type);\n            }\n        }\n\n        public static Type GetValidator(string name)\n        {\n            var key = PascalCase(name) + \"Validator\";\n            return s_validators.ContainsKey(key) ? s_validators[key] : null;\n        }\n\n        // convert name to PascalCase\n        internal static string PascalCase(string name)\n        {\n            if (string.IsNullOrEmpty(name))\n            {\n                return string.Empty;\n            }\n\n            if (name.Length == 1)\n            {\n                return name.ToUpperInvariant();\n            }\n\n            int index = IndexOfFirstCorrectChar(name);\n            return char.ToUpperInvariant(name[index]).ToString(CultureInfo.InvariantCulture) + name.Substring(index + 1);\n        }\n\n        private static int IndexOfFirstCorrectChar(string s)\n        {\n            int index = 0;\n            while ((index < s.Length) && (s[index] == '_'))\n            {\n                index++;\n            }\n\n            // it's possible that we won't find one, e.g. something called \"_\"\n            return (index == s.Length) ? 0 : index;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/VirtualDirectory.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class VirtualDirectory : ConfigurationElement, IItem<VirtualDirectory>\n    {\n        public override string ToString()\n        {\n            return Path;\n        }\n\n        public void Apply()\n        {\n        }\n\n        public bool Match(VirtualDirectory other)\n        {\n            return Equals(other);\n        }\n\n        public bool Equals(VirtualDirectory other)\n        {\n            return other != null && string.Equals(Path, other.Path, StringComparison.OrdinalIgnoreCase);\n        }\n\n        public AuthenticationLogonMethod LogonMethod\n        {\n            get\n            {\n                return (AuthenticationLogonMethod)Enum.ToObject(typeof(AuthenticationLogonMethod), this[\"logonMethod\"]);\n            }\n\n            set { this[\"logpnMethod\"] = (long)value; }\n        }\n\n        public string Password\n        {\n            get { return this[\"password\"].ObjectToString(); }\n            set { this[\"password\"] = value; }\n        }\n\n        public string Path\n        {\n            get { return this[\"path\"].ToString(); }\n            set { this[\"path\"] = value; }\n        }\n\n        public string PhysicalPath\n        {\n            get { return this[\"physicalPath\"].ToString(); }\n            set { this[\"physicalPath\"] = value; }\n        }\n\n        public string UserName\n        {\n            get { return this[\"userName\"].ObjectToString(); }\n            set { this[\"userName\"] = value; }\n        }\n\n        internal static readonly string RootPath = \"/\";\n\n        internal VirtualDirectory(ConfigurationElement element, VirtualDirectoryCollection parent)\n            : base(element, \"virtualDirectory\", null, parent, null, null)\n        {\n            Parent = parent;\n        }\n\n        internal VirtualDirectoryCollection Parent { get; private set; }\n\n        internal Application Application\n        {\n            get { return Parent.Parent; }\n        }\n\n        public string Flag { get; set; } = \"Local\";\n        public ConfigurationElement Element\n        {\n            get { return this; }\n            set { }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/VirtualDirectoryCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class VirtualDirectoryCollection : ConfigurationElementCollectionBase<VirtualDirectory>\n    {\n        internal VirtualDirectoryCollection(Application application)\n            : base(null, \"application\", null, application.ParentElement, application.InnerEntity, null)\n        {\n            Parent = application;\n        }\n\n        public VirtualDirectory Add(string path, string physicalPath)\n        {\n            var result = new VirtualDirectory(null, this) { Path = path, PhysicalPath = physicalPath };\n            Add(result);\n            return result;\n        }\n\n        protected override VirtualDirectory CreateNewElement(string elementTagName)\n        {\n            throw new NotImplementedException();\n        }\n\n        private static readonly char[] s_chars = { '\\\\', '?', ';', ':', '@', '&', '=', '+', '$', ',', '|', '\"', '<', '>', '*' };\n\n        public Application Parent { get; private set; }\n\n        public static char[] InvalidVirtualDirectoryPathCharacters()\n        {\n            return s_chars;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/VirtualDirectoryDefaults.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Administration\n{\n    public class VirtualDirectoryDefaults : ConfigurationElement\n    {\n        internal VirtualDirectoryDefaults(ConfigurationElement element, ConfigurationElement parent)\n            : base(element, null, null, parent, null, null)\n        {\n        }\n\n        public AuthenticationLogonMethod LogonMethod\n        {\n            get { return (AuthenticationLogonMethod)Enum.ToObject(typeof(AuthenticationLogonMethod), this[\"logonMethod\"]); }\n            set { this[\"logonMethod\"] = (long)value; }\n        }\n\n        public string Password\n        {\n            get { return (string)this[\"password\"]; }\n            set { this[\"password\"] = value; }\n        }\n\n        public string UserName\n        {\n            get { return (string)this[\"userName\"]; }\n            set { this[\"userName\"] = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/VirtualDirectoryPathValidator.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.Web.Administration\n{\n    [Obfuscation(Exclude = true, ApplyToMembers = false)]\n    internal class VirtualDirectoryPathValidator : ConfigurationValidatorBase\n    {\n        public override void Validate(object value)\n        {\n            var data = (string)value;\n            if (string.IsNullOrWhiteSpace(data))\n            {\n                throw new COMException(\"Invalid virtual directory path\\r\\n\");\n            }\n\n            if (data[0] != '/')\n            {\n                throw new COMException(\"Invalid virtual directory path\\r\\n\");\n            }\n\n            if (data.Length > 1 && data[data.Length - 1] == '/')\n            {\n                throw new COMException(\"Invalid virtual directory path\\r\\n\");\n            }\n\n            var items = data.Split('/');\n            foreach (var item in items)\n            {\n                if (item == \".\" || item == \"..\")\n                {\n                    throw new COMException(\"Invalid virtual directory path\\r\\n\");\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/WebConfigurationManager.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Web;\n\nnamespace Microsoft.Web.Administration\n{\n    public static class WebConfigurationManager\n    {\n        public static ConfigurationSection GetSection(string sectionPath)\n        {\n            return null;\n        }\n\n#if !NET8_0_OR_GREATER\n        public static ConfigurationSection GetSection(HttpContext context, string sectionPath)\n        {\n            return null;\n        }\n#endif\n        public static ConfigurationSection GetSection(string siteName, string virtualPath, string sectionPath)\n        {\n            return null;\n        }\n#if !NET8_0_OR_GREATER\n        public static ConfigurationSection GetSection(HttpContext context, string sectionPath, Type sectionType)\n        {\n            return null;\n        }\n#endif\n        public static ConfigurationSection GetSection(string siteName, string virtualPath, string sectionPath, Type sectionType)\n        {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/WebConfigurationMap.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public class WebConfigurationMap\n    {\n        public WebConfigurationMap()\n        {\n        }\n\n        public WebConfigurationMap(string machineConfigurationPath, string rootWebConfigurationPath)\n        {\n            MachineConfigurationPath = machineConfigurationPath;\n            RootWebConfigurationPath = rootWebConfigurationPath;\n        }\n\n        public string MachineConfigurationPath { get; private set; }\n\n        public string RootWebConfigurationPath { get; private set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/WorkerProcess.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class WorkerProcess : ConfigurationElement\n    {\n        internal WorkerProcess(ConfigurationElement parent)\n            : base(null, \"workerProcess\", null, parent, null, null)\n        { }\n\n        public RequestCollection GetRequests(int timeElapsedFilter)\n        {\n            return null;\n        }\n\n        public ApplicationDomainCollection ApplicationDomains { get; private set; }\n\n        public string AppPoolName\n        {\n            get { return (string)this[\"appPoolName\"]; }\n            set { this[\"appPoolName\"] = value; }\n        }\n\n        public string ProcessGuid\n        {\n            get { return (string)this[\"guid\"]; }\n            set { this[\"guid\"] = value; }\n        }\n\n        public int ProcessId\n        {\n            get { return Convert.ToInt32(this[\"processId\"]); }\n            set { this[\"processId\"] = Convert.ToUInt32(value); }\n        }\n\n        public WorkerProcessState State\n        {\n            get\n            {\n                var found = Process.GetProcessById(ProcessId);\n                if (found == null)\n                {\n                    ParentElement.GetCollection().Remove(this);\n                    return WorkerProcessState.Stopping;\n                }\n\n                return WorkerProcessState.Running;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/WorkerProcessCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public sealed class WorkerProcessCollection : ConfigurationElementCollectionBase<WorkerProcess>\n    {\n        internal WorkerProcessCollection(ConfigurationElement collection)\n            : base(null, \"workProcesses\", collection.Schema, null, null, null)\n        { }\n\n        internal WorkerProcessCollection(ConfigurationElement collection, ServerManager server)\n            : base(collection, \"workProcesses\", collection?.Schema, null, collection?.InnerEntity, null)\n        {\n            Section = collection?.Section;\n            if (collection == null)\n            {\n                return;\n            }\n        }\n\n        protected override WorkerProcess CreateNewElement(string elementTagName)\n        {\n            var result = new WorkerProcess(this);\n            Add(result);\n            return result;\n        }\n\n        public WorkerProcess GetWorkerProcess(int processId)\n        {\n            foreach (WorkerProcess item in ChildElements)\n            {\n                if (item.ProcessId == processId)\n                {\n                    return item;\n                }\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/WorkerProcessState.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Administration\n{\n    public enum WorkerProcessState\n    {\n        Starting = 0,\n        Running = 1,\n        Stopping = 2,\n        Unknown = 3\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/WorkingMode.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Administration\n{\n    public enum WorkingMode\n    {\n        [Description(\"Not supported\")]\n        NotSupported = 0,\n\n        [Description(\"IIS\")]\n        Iis = 1,\n\n        [Description(\"IIS Express\")]\n        IisExpress = 2,\n\n        [Description(\"Jexus\")]\n        Jexus = 3\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Administration/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>\n"
  },
  {
    "path": "Microsoft.Web.Administration/schemas/rscaext.xml",
    "content": "<configSchema>\n\n  <sectionSchema name=\"system.applicationHost/sites\">\n    <collection addElement=\"site\">\n      <attribute name=\"state\" type=\"enum\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n        <enum name=\"Starting\" value=\"0\" />\n        <enum name=\"Started\" value=\"1\" />\n        <enum name=\"Stopping\" value=\"2\" />\n        <enum name=\"Stopped\" value=\"3\" />\n        <enum name=\"Unknown\" value=\"4\" />\n      </attribute>\n      <method name=\"Start\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <method name=\"Stop\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <element name=\"bindings\">\n        <collection addElement=\"binding\" clearElement=\"clear\">\n          <attribute name=\"isDsMapperEnabled\" type=\"bool\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <attribute name=\"certificateHash\" type=\"string\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <attribute name=\"certificateStoreName\" type=\"string\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <method name=\"EnableDsMapper\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <method name=\"DisableDsMapper\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <method name=\"AddSslCertificate\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n            <inputElement>\n              <attribute name=\"certificateHash\" type=\"string\" />\n              <attribute name=\"certificateStoreName\" type=\"string\" defaultValue=\"MY\" />\n            </inputElement>\n          </method>\n          <method name=\"RemoveSslCertificate\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <method name=\"RebindSslCertificate\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n            <inputElement>\n              <attribute name=\"certificateHash\" type=\"string\" />\n              <attribute name=\"certificateStoreName\" type=\"string\" defaultValue=\"MY\" />\n            </inputElement>\n          </method>\n        </collection>\n      </element>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/applicationPools\">\n    <collection addElement=\"add\">\n      <attribute name=\"state\" type=\"enum\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n        <enum name=\"Starting\" value=\"0\" />\n        <enum name=\"Started\" value=\"1\" />\n        <enum name=\"Stopping\" value=\"2\" />\n        <enum name=\"Stopped\" value=\"3\" />\n        <enum name=\"Unknown\" value=\"4\" />\n      </attribute>\n      <attribute name=\"applicationPoolSid\" type=\"string\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <method name=\"Start\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <method name=\"Stop\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <method name=\"Recycle\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <element name=\"workerProcesses\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n        <collection addElement=\"workerProcess\">\n          <attribute name=\"processId\" type=\"uint\" isUniqueKey=\"true\" />\n          <attribute name=\"guid\" type=\"string\" />\n          <attribute name=\"state\" type=\"enum\">\n            <enum name=\"Starting\" value=\"0\" />\n            <enum name=\"Running\" value=\"1\" />\n            <enum name=\"Stopping\" value=\"2\" />\n            <enum name=\"Unknown\" value=\"3\" />\n          </attribute>\n          <attribute name=\"appPoolName\" type=\"string\" />\n          <method name=\"GetRequests\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n            <inputElement>\n              <attribute name=\"timeElapsedFilter\" type=\"uint\" defaultValue=\"0\" />\n            </inputElement>\n            <outputElement>\n              <collection addElement=\"request\">\n                <attribute name=\"requestId\" type=\"string\" />\n                <attribute name=\"connectionId\" type=\"string\" />\n                <attribute name=\"verb\" type=\"string\" />\n                <attribute name=\"url\" type=\"string\" />\n                <attribute name=\"siteId\" type=\"uint\" />\n                <attribute name=\"localPort\" type=\"uint\" />\n                <attribute name=\"hostName\" type=\"string\" />\n                <attribute name=\"clientIpAddress\" type=\"string\" />\n                <attribute name=\"timeElapsed\" type=\"uint\" />\n                <attribute name=\"pipeLineState\" type=\"uint\" />\n                <attribute name=\"timeInState\" type=\"uint\" />\n                <attribute name=\"currentModule\" type=\"string\" />\n                <attribute name=\"timeInModule\" type=\"uint\" />\n                <attribute name=\"localIpAddress\" type=\"string\" />\n              </collection>\n            </outputElement>\n          </method>\n          <element name=\"appDomains\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n            <collection addElement=\"appDomain\">\n              <attribute name=\"id\" type=\"string\" />\n              <attribute name=\"virtualPath\" type=\"string\" />\n              <attribute name=\"physicalPath\" type=\"string\" />\n              <attribute name=\"siteId\" type=\"uint\" />\n              <attribute name=\"idle\" type=\"uint\" />\n              <method name=\"Unload\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n            </collection>\n          </element>\n          <method name=\"GetCustomData\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n            <inputElement>\n              <attribute name=\"guidIdOfFunctionCall\" type=\"string\" />\n              <attribute name=\"parametersOfFunctionCall\" type=\"string\" />\n            </inputElement>\n            <outputElement>\n              <attribute name=\"data\" type=\"string\" />\n            </outputElement>\n          </method>\n        </collection>\n      </element>\n    </collection>\n    <element name=\"workerProcesses\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n      <collection addElement=\"workerProcess\">\n        <attribute name=\"processId\" type=\"uint\" isUniqueKey=\"true\" />\n        <attribute name=\"guid\" type=\"string\" />\n        <attribute name=\"state\" type=\"enum\">\n          <enum name=\"Starting\" value=\"0\" />\n          <enum name=\"Running\" value=\"1\" />\n          <enum name=\"Stopping\" value=\"2\" />\n          <enum name=\"Unknown\" value=\"3\" />\n        </attribute>\n        <attribute name=\"appPoolName\" type=\"string\" />\n        <method name=\"GetRequests\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n          <inputElement>\n            <attribute name=\"timeElapsedFilter\" type=\"uint\" defaultValue=\"0\" />\n          </inputElement>\n          <outputElement>\n            <collection addElement=\"request\">\n              <attribute name=\"requestId\" type=\"string\" />\n              <attribute name=\"connectionId\" type=\"string\" />\n              <attribute name=\"verb\" type=\"string\" />\n              <attribute name=\"url\" type=\"string\" />\n              <attribute name=\"siteId\" type=\"uint\" />\n              <attribute name=\"localPort\" type=\"uint\" />\n              <attribute name=\"hostName\" type=\"string\" />\n              <attribute name=\"clientIpAddress\" type=\"string\" />\n              <attribute name=\"timeElapsed\" type=\"uint\" />\n              <attribute name=\"pipeLineState\" type=\"uint\" />\n              <attribute name=\"timeInState\" type=\"uint\" />\n              <attribute name=\"currentModule\" type=\"string\" />\n              <attribute name=\"timeInModule\" type=\"uint\" />\n              <attribute name=\"localIpAddress\" type=\"string\" />\n            </collection>\n          </outputElement>\n        </method>\n        <element name=\"appDomains\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n          <collection addElement=\"appDomain\">\n            <attribute name=\"id\" type=\"string\" />\n            <attribute name=\"virtualPath\" type=\"string\" />\n            <attribute name=\"physicalPath\" type=\"string\" />\n            <attribute name=\"siteId\" type=\"uint\" />\n            <attribute name=\"idle\" type=\"uint\" />\n            <method name=\"Unload\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          </collection>\n        </element>\n        <method name=\"GetCustomData\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n          <inputElement>\n            <attribute name=\"guidIdOfFunctionCall\" type=\"string\" />\n            <attribute name=\"parametersOfFunctionCall\" type=\"string\" />\n          </inputElement>\n          <outputElement>\n            <attribute name=\"data\" type=\"string\" />\n          </outputElement>\n        </method>\n      </collection>\n    </element>\n    <element name=\"applicationPoolsControl\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n      <method name=\"FlushTokenCache\"  extension=\"Microsoft.ApplicationHost.RscaExtension\"/>\n    </element>\n  </sectionSchema>\n\n</configSchema>\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/AesEncryptionProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.ComponentModel;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System;\nusing Windows.Win32.Security.Cryptography;\nusing System.Runtime.CompilerServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    internal class AesEncryptionProvider : IEncryptionProvider\n    {\n        private string _sessionKey;\n\n        private bool _useOAEP;\n\n        private string _keyContainerName;\n\n        private bool _userMachineContainer;\n\n        private string _cspProviderName;\n\n        public AesEncryptionProvider(string sessionKey, string keyContainerName, string cspProviderName, bool useOAEP, bool userMachineContainer)\n        {\n            _sessionKey = sessionKey;\n            _keyContainerName = keyContainerName;\n            _cspProviderName = cspProviderName;\n            _useOAEP = useOAEP;\n            _userMachineContainer = userMachineContainer;\n        }\n\n        public string Decrypt(string data)\n        {\n            return AesDecrypt(EncodingHelper.Decode(data), _keyContainerName, _cspProviderName, EncodingHelper.Decode(_sessionKey), _useOAEP, _userMachineContainer);\n        }\n\n        public string Encrypt(string data)\n        {\n            return EncodingHelper.Encode(AesEncrypt(data, _keyContainerName, _cspProviderName, EncodingHelper.Decode(_sessionKey), _useOAEP, _userMachineContainer));\n        }\n\n        public unsafe static string AesDecrypt(byte[] encrypted, string keyContainer, string cspProvider, byte[] sessionKey, bool useOAEP, bool useMachineContainer)\n        {\n            using NativeMethods.SafeCryptProvHandle safeCryptProvHandle = NativeMethods.SafeCryptProvHandle.AcquireMachineContext(keyContainer, cspProvider, 24u, useMachineContainer);\n            nuint hKey = 0;\n            nuint hEncryptKey = 0;\n            try\n            {\n                var handle = NativeMethods.IntPtrToNUint(safeCryptProvHandle.DangerousGetHandle());\n                if (!Windows.Win32.PInvoke.CryptGetUserKey(handle, 1u, out hKey))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error());\n                }\n                CRYPT_KEY_FLAGS dwFlags = 0u;\n                if (useOAEP)\n                {\n                    dwFlags = CRYPT_KEY_FLAGS.CRYPT_OAEP;\n                }\n\n                ReadOnlySpan<byte> sessionPtr = sessionKey;\n                if (!Windows.Win32.PInvoke.CryptImportKey(handle, sessionPtr, hKey, dwFlags, out hEncryptKey))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error());\n                }\n\n                byte[] array = new byte[encrypted.Length];\n                encrypted.CopyTo(array, 0);\n                uint pdwDataLen = (uint)array.Length;\n                fixed (byte* arrayPtr = array)\n                {\n                    if (!Windows.Win32.PInvoke.CryptDecrypt(hEncryptKey, 0, Final: false, 0u, arrayPtr, ref pdwDataLen))\n                    {\n                        throw new Win32Exception(Marshal.GetLastWin32Error());\n                    }\n                }\n\n                int num = 0;\n                for (int i = 0; i < array.Length; i += 2)\n                {\n                    if (array[i] == 0 && array[i + 1] == 0)\n                    {\n                        num = i;\n                        break;\n                    }\n                }\n                return Encoding.Unicode.GetString(array, 4, num - 4);\n            }\n            finally\n            {\n                if (hKey != 0)\n                {\n                    Windows.Win32.PInvoke.CryptDestroyKey(hKey);\n                }\n                if (hEncryptKey != 0)\n                {\n                    Windows.Win32.PInvoke.CryptDestroyKey(hEncryptKey);\n                }\n            }\n        }\n\n        public unsafe static byte[] AesEncrypt(string data, string keyContainer, string cspProvider, byte[] sessionKey, bool useOAEP, bool useMachineContainer)\n        {\n            using NativeMethods.SafeCryptProvHandle safeCryptProvHandle = NativeMethods.SafeCryptProvHandle.AcquireMachineContext(keyContainer, cspProvider, 24u, useMachineContainer);\n            nuint hKey = 0;\n            nuint hEncryptKey = 0;\n            try\n            {\n                byte[] array = PrepareInputData(data, safeCryptProvHandle);\n                nuint handle = NativeMethods.IntPtrToNUint(safeCryptProvHandle.DangerousGetHandle());\n                if (!Windows.Win32.PInvoke.CryptGetUserKey(handle, 1u, out hKey))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error());\n                }\n                CRYPT_KEY_FLAGS dwFlags = 0u;\n                if (useOAEP)\n                {\n                    dwFlags = CRYPT_KEY_FLAGS.CRYPT_OAEP;\n                }\n\n                ReadOnlySpan<byte> sessionPtr = sessionKey;\n                if (!Windows.Win32.PInvoke.CryptImportKey(handle, sessionPtr, hKey, dwFlags, out hEncryptKey))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error());\n                }\n\n                uint pdwDataLen = (uint)array.Length;\n                ReadOnlySpan<byte> arrayPtr = array;\n                if (!Windows.Win32.PInvoke.CryptEncrypt(hEncryptKey, 0, Final: true, 0u, arrayPtr, ref pdwDataLen))\n                {\n                    int lastWin32Error = Marshal.GetLastWin32Error();\n                    if (lastWin32Error != 234)\n                    {\n                        throw new Win32Exception(lastWin32Error);\n                    }\n                }\n\n                byte[] array2 = new byte[pdwDataLen];\n                array.CopyTo(array2, 0);\n                pdwDataLen = (uint)array.Length;\n                ReadOnlySpan<byte> array2Ptr = array2;\n                if (!Windows.Win32.PInvoke.CryptEncrypt(hEncryptKey, 0, Final: true, 0u, array2Ptr, ref pdwDataLen))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error());\n                }\n\n                return array2;\n            }\n            finally\n            {\n                if (hKey != 0)\n                {\n                    Windows.Win32.PInvoke.CryptDestroyKey(hKey);\n                }\n                if (hEncryptKey != 0)\n                {\n                    Windows.Win32.PInvoke.CryptDestroyKey(hEncryptKey);\n                }\n            }\n        }\n\n        private unsafe static byte[] PrepareInputData(string data, NativeMethods.SafeCryptProvHandle hProvider)\n        {\n            byte[] array = new byte[1];\n            byte[] bytes = Encoding.Unicode.GetBytes(data);\n            nuint handle = NativeMethods.IntPtrToNUint(hProvider.DangerousGetHandle());\n            fixed (byte* arrayPtr = array)\n            {\n                if (!Windows.Win32.PInvoke.CryptGenRandom(handle, 1u, arrayPtr))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error());\n                }\n            }\n            uint num = (uint)array[0] % 16u;\n            byte[] array2 = new byte[4 + bytes.Length + num + 2];\n            byte[] array3 = new byte[4];\n            fixed (byte* array3Ptr = array3)\n            {\n                if (!Windows.Win32.PInvoke.CryptGenRandom(handle, 4u, array3Ptr))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error());\n                }\n            }\n            byte[] array4 = new byte[num + 2];\n            fixed (byte* array4Ptr = array4)\n            {\n                if (!Windows.Win32.PInvoke.CryptGenRandom(handle, num + 2, array4Ptr))\n                {\n                    throw new Win32Exception(Marshal.GetLastWin32Error());\n                }\n            }\n            array4[0] = 0;\n            array4[1] = 0;\n            array3.CopyTo(array2, 0);\n            bytes.CopyTo(array2, 4);\n            array4.CopyTo(array2, 4 + bytes.Length);\n            return array2;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/AppHostFileProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ClassInterface(ClassInterfaceType.None), ComVisible(true), Guid(\"0019ca4f-5c41-4fe4-bda7-8adfe5115e11\"), ProgId(\"Microsoft.ApplicationHost.AppHostFileProvider\")]\n    public sealed class AppHostFileProvider : IAppHostProvider,\n        IDisposable\n    {\n        public void AddChangeHandler(\n            IAppHostProviderChangeHandler changeHandler\n            )\n        { }\n\n        public void CommitChanges(\n            string fileName,\n            string sectionName,\n            string configPath\n            )\n        { }\n\n        public void Dispose()\n        { }\n\n        public IApplicationPool GetApplicationPool(\n            string appPoolName\n            )\n        { throw new NotImplementedException(); }\n\n        public IEnumApplicationPool GetApplicationPoolEnumerator()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string GetConfigFile(\n            string sectionName,\n            string configPath\n            )\n        { throw new NotImplementedException(); }\n\n        public IEnumListenerAdapter GetListenerAdapterEnumerator()\n        {\n            return null;\n        }\n\n        public IEnumLocation GetLocationEnumerator()\n        {\n            return null;\n        }\n\n        public IAppHostSite GetSite(\n            string siteName\n            )\n        {\n            return null;\n        }\n\n        public IAppHostSite GetSiteById(\n            uint id\n            )\n        {\n            return null;\n        }\n\n        public IEnumSite GetSiteEnumerator()\n        {\n            return null;\n        }\n\n        public void Initialize()\n        { }\n\n        public bool IsDynamicRegistrationEnabled()\n        {\n            return false;\n        }\n\n        public void Terminate()\n        { }\n\n        public string ConfigPath { get; set; }\n        public bool ExpandEnvironmentVariables { get; set; }\n        public LoadOptions FileLoadOptions { get; set; }\n        public ILogSettings LogSettings { get; }\n        public bool ServiceModel { get; set; }\n        public string TempFilePath { get; set; }\n        public IWebLimits WebLimits { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/CngEncryptionProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.ApplicationHost\n{\n    internal class CngEncryptionProvider : IEncryptionProvider\n    {\n        private string _keyContainerName;\n\n        public CngEncryptionProvider(string sessionKey, string keyContainerName, string cspProviderName, bool useOAEP, bool userMachineContainer)\n        {\n            _keyContainerName = keyContainerName;\n        }\n\n        public string Decrypt(string data)\n        {\n            return NativeMethods.CngDecrypt(EncodingHelper.Decode(data), _keyContainerName);\n        }\n\n        public string Encrypt(string data)\n        {\n            return EncodingHelper.Encode(NativeMethods.CngEncrypt(data, _keyContainerName));\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/EncodingHelper.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Text;\n\nnamespace Microsoft.ApplicationHost\n{\n    internal class EncodingHelper\n    {\n        private static int[] DecodeArray = new int[256]\n        {\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 62, 64, 64, 64, 63, 52, 53,\n        54, 55, 56, 57, 58, 59, 60, 61, 64, 64,\n        64, 64, 64, 64, 64, 0, 1, 2, 3, 4,\n        5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n        15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n        25, 64, 64, 64, 64, 64, 64, 26, 27, 28,\n        29, 30, 31, 32, 33, 34, 35, 36, 37, 38,\n        39, 40, 41, 42, 43, 44, 45, 46, 47, 48,\n        49, 50, 51, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64, 64, 64, 64, 64,\n        64, 64, 64, 64, 64, 64\n        };\n\n        private static char[] EncodeArray = new char[64]\n        {\n        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',\n        'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',\n        'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',\n        'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',\n        'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',\n        'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',\n        '8', '9', '+', '/'\n        };\n\n        private static int EncodeMask_Octal_60 = 48;\n\n        private static int EncodeMask_Octal_17 = 15;\n\n        private static int EncodeMask_Octal_74 = 60;\n\n        private static int EncodeMask_Octal_77 = 63;\n\n        public static string Encode(byte[] data)\n        {\n            int num = data.Length;\n            int num2 = num / 3 * 4;\n            if (num % 3 > 0)\n            {\n                num2 += 4;\n            }\n            char[] array = new char[num2];\n            int num3 = 0;\n            int num4 = 0;\n            while (num >= 3)\n            {\n                array[num4++] = EncodeFirstChar(data[num3]);\n                array[num4++] = EncodeSecondChar(data[num3], data[num3 + 1]);\n                array[num4++] = EncodeThirdChar(data[num3 + 1], data[num3 + 2]);\n                array[num4++] = EncodeFourthChar(data[num3 + 2]);\n                num3 += 3;\n                num -= 3;\n            }\n            switch (num)\n            {\n                case 2:\n                    array[num4++] = EncodeFirstChar(data[num3]);\n                    array[num4++] = EncodeSecondChar(data[num3], data[num3 + 1]);\n                    array[num4++] = EncodeThirdChar(data[num3 + 1], 0);\n                    array[num4++] = '=';\n                    break;\n                case 1:\n                    array[num4++] = EncodeFirstChar(data[num3]);\n                    array[num4++] = EncodeSecondChar(data[num3], 0);\n                    array[num4++] = '=';\n                    array[num4++] = '=';\n                    break;\n            }\n            return new string(array);\n        }\n\n        private static char EncodeFirstChar(byte value)\n        {\n            return EncodeArray[value >> 2];\n        }\n\n        private static char EncodeSecondChar(byte byte1, byte byte2)\n        {\n            return EncodeArray[((byte1 << 4) & EncodeMask_Octal_60) | ((byte2 >> 4) & EncodeMask_Octal_17)];\n        }\n\n        private static char EncodeThirdChar(byte byte2, byte byte3)\n        {\n            return EncodeArray[((byte2 << 2) & EncodeMask_Octal_74) | ((byte3 >> 6) & 3)];\n        }\n\n        private static char EncodeFourthChar(byte byte3)\n        {\n            return EncodeArray[byte3 & EncodeMask_Octal_77];\n        }\n\n        public static byte[] Decode(string data)\n        {\n            data = data.TrimEnd('=');\n            byte[] bytes = Encoding.ASCII.GetBytes(data);\n            int num = bytes.Length / 4 * 3;\n            if (bytes.Length % 4 > 0)\n            {\n                num += bytes.Length % 4 - 1;\n            }\n            if (num == 0)\n            {\n                return null;\n            }\n            byte[] array = new byte[num];\n            int num2 = bytes.Length;\n            int num3 = 0;\n            int num4 = 0;\n            while (num2 >= 4)\n            {\n                array[num3++] = DecodeFirstByte(bytes[num4], bytes[num4 + 1]);\n                array[num3++] = DecodeSecondByte(bytes[num4 + 1], bytes[num4 + 2]);\n                array[num3++] = DecodeThirdByte(bytes[num4 + 2], bytes[num4 + 3]);\n                num4 += 4;\n                num2 -= 4;\n            }\n            switch (num2)\n            {\n                case 3:\n                    array[num3++] = DecodeFirstByte(bytes[num4], bytes[num4 + 1]);\n                    array[num3++] = DecodeSecondByte(bytes[num4 + 1], bytes[num4 + 2]);\n                    break;\n                case 2:\n                    array[num3++] = DecodeFirstByte(bytes[num4], bytes[num4 + 1]);\n                    break;\n                default:\n                    _ = 1;\n                    break;\n            }\n            return array;\n        }\n\n        private static byte DecodeFirstByte(byte byte1, byte byte2)\n        {\n            return (byte)((DecodeArray[byte1] << 2) | (DecodeArray[byte2] >> 4));\n        }\n\n        private static byte DecodeSecondByte(byte byte2, byte byte3)\n        {\n            return (byte)((DecodeArray[byte2] << 4) | (DecodeArray[byte3] >> 2));\n        }\n\n        private static byte DecodeThirdByte(byte byte3, byte byte4)\n        {\n            return (byte)((DecodeArray[byte3] << 6) | DecodeArray[byte4]);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IAppHostProvider.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"81d9b25e-5ba5-4166-a69f-3f09a0fc3c65\")]\n    public interface IAppHostProvider\n    {\n        [DispId(11)]\n        ILogSettings LogSettings\n        {\n            get;\n        }\n        [DispId(12)]\n        IWebLimits WebLimits\n        {\n            get;\n        }\n        [DispId(13)]\n        string ConfigPath\n        {\n            get;\n            set;\n        }\n        [DispId(16)]\n        bool ExpandEnvironmentVariables\n        {\n            get;\n            set;\n        }\n        [DispId(17)]\n        LoadOptions FileLoadOptions\n        {\n            get;\n            set;\n        }\n        [DispId(18)]\n        string TempFilePath\n        {\n            get;\n            set;\n        }\n        [DispId(1)]\n        void Initialize();\n        [DispId(2)]\n        IEnumSite GetSiteEnumerator();\n        [DispId(3)]\n        IEnumApplicationPool GetApplicationPoolEnumerator();\n        [DispId(4)]\n        IAppHostSite GetSite(string siteName);\n        [DispId(5)]\n        IAppHostSite GetSiteById(uint id);\n        [DispId(6)]\n        IApplicationPool GetApplicationPool(string appPoolName);\n        [DispId(7)]\n        void AddChangeHandler(IAppHostProviderChangeHandler changeHandler);\n        [DispId(8)]\n        string GetConfigFile(string sectionName, string configPath);\n        [DispId(9)]\n        void CommitChanges(string fileName, string sectionName, string configPath);\n        [DispId(10)]\n        IEnumListenerAdapter GetListenerAdapterEnumerator();\n        [DispId(14)]\n        IEnumLocation GetLocationEnumerator();\n        [DispId(15)]\n        bool IsDynamicRegistrationEnabled();\n        [DispId(19)]\n        void Terminate();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IAppHostProviderChangeHandler.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"d1696cca-ad31-4e3d-a033-f6aadfef9b93\")]\n    public interface IAppHostProviderChangeHandler\n    {\n        void OnSectionChanges(string sectionName, string configPath);\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IAppHostSite.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"db759e1a-256b-4fc5-b240-8268ad2eddee\")]\n    public interface IAppHostSite\n    {\n        [DispId(1)]\n        string Name\n        {\n            get;\n        }\n        [DispId(2)]\n        uint Id\n        {\n            get;\n        }\n        [DispId(3)]\n        bool ServerAutoStart\n        {\n            get;\n        }\n        [DispId(5)]\n        ISiteLimits Limits\n        {\n            get;\n        }\n        [DispId(6)]\n        ISiteLogFile LogFile\n        {\n            get;\n        }\n        [DispId(7)]\n        ISiteTraceRequestsLogging TraceRequestsLogging\n        {\n            get;\n        }\n        [DispId(9)]\n        IApplication ApplicationDefaults\n        {\n            get;\n        }\n        [DispId(10)]\n        IVirtualDirectory VirtualDirectoryDefaults\n        {\n            get;\n        }\n        [DispId(11)]\n        uint State\n        {\n            get;\n        }\n        [DispId(4)]\n        IEnumBindings GetBindingsEnumerator();\n        [DispId(8)]\n        IEnumApplications GetApplicationsEnumerator();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IApplication.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"40f6b041-8070-490e-bf92-f001ff7bb843\")]\n    public interface IApplication\n    {\n        [DispId(1)]\n        string Path\n        {\n            get;\n        }\n        [DispId(2)]\n        string ApplicationPool\n        {\n            get;\n        }\n        [DispId(3)]\n        string EnabledProtocols\n        {\n            get;\n        }\n        [DispId(4)]\n        bool ServiceAutoStartEnabled\n        {\n            get;\n        }\n        [DispId(5)]\n        string ServiceAutoStartProvider\n        {\n            get;\n        }\n        [DispId(6)]\n        bool PreloadEnabled\n        {\n            get;\n        }\n        [DispId(7)]\n        IVirtualDirectory VirtualDirectoryDefaults\n        {\n            get;\n        }\n        [DispId(8)]\n        IEnumVirtualDirectory GetVirtualDirectoryEnumerator();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IApplicationPool.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"304ee60a-c7d1-4f0d-baae-9a658593504f\")]\n    public interface IApplicationPool\n    {\n        [DispId(1)]\n        string Name\n        {\n            get;\n        }\n        [DispId(2)]\n        uint QueueLength\n        {\n            get;\n        }\n        [DispId(3)]\n        bool AutoStart\n        {\n            get;\n        }\n        [DispId(4)]\n        bool Enable32BitAppOnWin64\n        {\n            get;\n        }\n        [DispId(5)]\n        string ManagedRuntimeVersion\n        {\n            get;\n        }\n        [DispId(6)]\n        string ManagedRuntimeLoader\n        {\n            get;\n        }\n        [DispId(7)]\n        bool EnableConfigurationOverride\n        {\n            get;\n        }\n        [DispId(8)]\n        uint ManagedPipelineMode\n        {\n            get;\n        }\n        [DispId(9)]\n        string ClrConfigFile\n        {\n            get;\n        }\n        [DispId(10)]\n        bool PassAnonymousToken\n        {\n            get;\n        }\n        [DispId(11)]\n        uint StartMode\n        {\n            get;\n        }\n        [DispId(12)]\n        IProcessModel ProcessModel\n        {\n            get;\n        }\n        [DispId(13)]\n        IRecycling Recycling\n        {\n            get;\n        }\n        [DispId(14)]\n        IFailure Failure\n        {\n            get;\n        }\n        [DispId(15)]\n        ICpu Cpu\n        {\n            get;\n        }\n        [DispId(16)]\n        uint State\n        {\n            get;\n        }\n        [DispId(17)]\n        IEnumEnvironmentVariables GetEnvironmentVariablesEnumerator();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ICpu.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"22dcee33-3344-43e4-a89d-c14544700448\")]\n    public interface ICpu\n    {\n        [DispId(1)]\n        uint Limit\n        {\n            get;\n        }\n        [DispId(2)]\n        uint Action\n        {\n            get;\n        }\n        [DispId(3)]\n        long ResetInterval\n        {\n            get;\n        }\n        [DispId(4)]\n        bool SmpAffinitized\n        {\n            get;\n        }\n        [DispId(5)]\n        uint SmpProcessorAffinityMask\n        {\n            get;\n        }\n        [DispId(6)]\n        uint SmpProcessorAffinityMask2\n        {\n            get;\n        }\n        [DispId(7)]\n        int ProcessorGroup\n        {\n            get;\n        }\n        [DispId(8)]\n        uint NumaNodeAssignment\n        {\n            get;\n        }\n        [DispId(9)]\n        uint NumaNodeAffinityMode\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ICustomField.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"66f6c229-8435-4bda-bec7-7562d11c4e33\")]\n    public interface ICustomField\n    {\n        [DispId(1)]\n        string LogFieldName\n        {\n            get;\n        }\n        [DispId(2)]\n        string SourceName\n        {\n            get;\n        }\n        [DispId(3)]\n        uint SourceType\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ICustomFields.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"142e5e0e-33d0-4902-934c-6a4d49a84506\")]\n    public interface ICustomFields\n    {\n        [DispId(1)]\n        uint MaxCustomFieldLength\n        {\n            get;\n        }\n        [DispId(2)]\n        IEnumCustomFields GetCustomFieldsEnumerator();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEncryptionProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.ApplicationHost;\n\npublic interface IEncryptionProvider\n{\n    string Decrypt(string data);\n    string Encrypt(string data);\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumApplicationPool.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"73c48d5c-de6b-4f16-8b9c-609af2586b8f\")]\n    public interface IEnumApplicationPool\n    {\n        [DispId(1)]\n        IApplicationPool GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumApplications.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"a4091b10-ad03-46a3-b6aa-bd6d8b312490\")]\n    public interface IEnumApplications\n    {\n        [DispId(1)]\n        IApplication GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumBindings.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"18d870b9-f8fc-494b-a762-3a30456911a5\")]\n    public interface IEnumBindings\n    {\n        [DispId(1)]\n        ISiteBinding GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumCustomFields.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"a27239f9-e13b-4fff-ae21-2804b6ef6352\")]\n    public interface IEnumCustomFields\n    {\n        [DispId(1)]\n        ICustomField GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumEnvironmentVariables.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"4a6df970-adc2-42af-bf9b-ddb791088c65\")]\n    public interface IEnumEnvironmentVariables\n    {\n        [DispId(1)]\n        IEnvironmentVariable GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumListenerAdapter.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"d6091346-8f36-4005-ae05-1be8d0c6e91d\")]\n    public interface IEnumListenerAdapter\n    {\n        [DispId(1)]\n        IListenerAdapter GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumLocation.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"f8bfb408-2172-46b6-ba25-10504f83d4e0\")]\n    public interface IEnumLocation\n    {\n        [DispId(1)]\n        ILocation GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumSchedule.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"35cb91fa-9e14-4a54-af4a-dfd871f7cb95\")]\n    public interface IEnumSchedule\n    {\n        [DispId(1)]\n        ISchedule GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumSite.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"639fda3a-132d-46ce-9737-982bc1ebf7af\")]\n    public interface IEnumSite\n    {\n        [DispId(1)]\n        IAppHostSite GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnumVirtualDirectory.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"9a99d63e-b1be-457a-aad3-19e65259cf46\")]\n    public interface IEnumVirtualDirectory\n    {\n        [DispId(1)]\n        IVirtualDirectory GetNext();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IEnvironmentVariable.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"f1cf4779-1bf8-41f5-89ef-0de04dd641c2\")]\n    public interface IEnvironmentVariable\n    {\n        [DispId(1)]\n        string Name\n        {\n            get;\n        }\n        [DispId(2)]\n        string Value\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IFailure.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"aaeb5bd0-d96f-4c1a-9737-25f404b2716e\")]\n    public interface IFailure\n    {\n        [DispId(1)]\n        uint LoadBalancerCapabilities\n        {\n            get;\n        }\n        [DispId(2)]\n        bool OrphanWorkerProcess\n        {\n            get;\n        }\n        [DispId(3)]\n        string OrphanActionExe\n        {\n            get;\n        }\n        [DispId(4)]\n        string OrphanActionParameters\n        {\n            get;\n        }\n        [DispId(5)]\n        bool RapidFailProtection\n        {\n            get;\n        }\n        [DispId(6)]\n        long RapidFailProtectionInterval\n        {\n            get;\n        }\n        [DispId(7)]\n        uint RapidFailProtectionMaxCrashes\n        {\n            get;\n        }\n        [DispId(8)]\n        string AutoShutdownExe\n        {\n            get;\n        }\n        [DispId(9)]\n        string AutoShutdownParameters\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IListenerAdapter.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"0c86c5ea-5976-46f7-af2d-e2101f4ab029\")]\n    public interface IListenerAdapter\n    {\n        [DispId(1)]\n        string Name\n        {\n            get;\n        }\n        [DispId(2)]\n        string Identity\n        {\n            get;\n        }\n        [DispId(3)]\n        string ProtocolManagerDll\n        {\n            get;\n        }\n        [DispId(4)]\n        string ProtocolManagerDllInitFunction\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ILocation.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"ec2f2398-ce56-4e01-bc86-8aed057013a5\")]\n    public interface ILocation\n    {\n        [DispId(1)]\n        string Path\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ILogSettings.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"b88f4753-99ce-40e9-bf83-fcb4c29efa2f\")]\n    public interface ILogSettings\n    {\n        [DispId(1)]\n        bool LogInUtf8\n        {\n            get;\n        }\n        [DispId(2)]\n        uint LogFileMode\n        {\n            get;\n        }\n        [DispId(3)]\n        bool BinaryLogFileEnabled\n        {\n            get;\n        }\n        [DispId(4)]\n        string BinaryLogFileDirectory\n        {\n            get;\n        }\n        [DispId(5)]\n        uint BinaryLogFilePeriod\n        {\n            get;\n        }\n        [DispId(6)]\n        long BinaryLogFileTruncateSize\n        {\n            get;\n        }\n        [DispId(7)]\n        bool BinaryLogFileLocalTimeRollover\n        {\n            get;\n        }\n        [DispId(8)]\n        bool W3CLogFileEnabled\n        {\n            get;\n        }\n        [DispId(9)]\n        string W3CLogFileDirectory\n        {\n            get;\n        }\n        [DispId(10)]\n        uint W3CLogFilePeriod\n        {\n            get;\n        }\n        [DispId(11)]\n        long W3CLogFileTruncateSize\n        {\n            get;\n        }\n        [DispId(12)]\n        bool W3CLogFileLocalTimeRollover\n        {\n            get;\n        }\n        [DispId(13)]\n        uint W3CLogExtFileFlags\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IPeriodicRestart.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"a3b9e5cd-a910-4409-9727-86564954d39d\")]\n    public interface IPeriodicRestart\n    {\n        [DispId(1)]\n        uint Memory\n        {\n            get;\n        }\n        [DispId(2)]\n        uint PrivateMemory\n        {\n            get;\n        }\n        [DispId(3)]\n        uint Requests\n        {\n            get;\n        }\n        [DispId(4)]\n        long Time\n        {\n            get;\n        }\n        [DispId(5)]\n        IEnumSchedule GetScheduleEnumerator();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IProcessModel.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"18a51bad-f295-4689-8823-4752abbc76b2\")]\n    public interface IProcessModel\n    {\n        [DispId(1)]\n        uint IdentityType\n        {\n            get;\n        }\n        [DispId(2)]\n        string UserName\n        {\n            get;\n        }\n        [DispId(3)]\n        string Password\n        {\n            get;\n        }\n        [DispId(4)]\n        bool LoadUserProfile\n        {\n            get;\n        }\n        [DispId(5)]\n        bool SetProfileEnvironment\n        {\n            get;\n        }\n        [DispId(6)]\n        uint LogOnType\n        {\n            get;\n        }\n        [DispId(7)]\n        bool ManualGroupMembership\n        {\n            get;\n        }\n        [DispId(8)]\n        long IdleTimeout\n        {\n            get;\n        }\n        [DispId(9)]\n        uint MaxProcesses\n        {\n            get;\n        }\n        [DispId(10)]\n        long ShutdownTimeLimit\n        {\n            get;\n        }\n        [DispId(11)]\n        long StartupTimeLimit\n        {\n            get;\n        }\n        [DispId(12)]\n        bool PingingEnabled\n        {\n            get;\n        }\n        [DispId(13)]\n        long PingInterval\n        {\n            get;\n        }\n        [DispId(14)]\n        long PingResponseTime\n        {\n            get;\n        }\n        [DispId(15)]\n        uint LogEventOnProcessModel\n        {\n            get;\n        }\n        [DispId(16)]\n        uint IdleTimeoutAction\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IRecycling.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"a8ce5f8b-5e34-4992-9738-b7958097be48\")]\n    public interface IRecycling\n    {\n        [DispId(1)]\n        bool DisallowOverlappingRotation\n        {\n            get;\n        }\n        [DispId(2)]\n        bool DisallowRotationOnConfigChange\n        {\n            get;\n        }\n        [DispId(3)]\n        uint LogEventOnRecycle\n        {\n            get;\n        }\n        [DispId(4)]\n        IPeriodicRestart PeriodicRestart\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ISchedule.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"56e54678-6e8f-4354-9a35-0f36266b89d3\")]\n    public interface ISchedule\n    {\n        [DispId(1)]\n        long Item\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ISiteBinding.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"82ab8971-405a-4e82-9bb8-cc48394e000e\")]\n    public interface ISiteBinding\n    {\n        [DispId(1)]\n        string Protocol\n        {\n            get;\n        }\n        [DispId(2)]\n        string BindingInformation\n        {\n            get;\n        }\n        [DispId(3)]\n        uint SslFlags\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ISiteLimits.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"69c3d64b-feba-4e44-b235-df5de5f593bd\")]\n    public interface ISiteLimits\n    {\n        [DispId(1)]\n        uint MaxBandwidth\n        {\n            get;\n        }\n        [DispId(2)]\n        uint MaxConnections\n        {\n            get;\n        }\n        [DispId(3)]\n        long ConnectionTimeout\n        {\n            get;\n        }\n        [DispId(4)]\n        uint MaxUrlSegments\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ISiteLogFile.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"3c686440-aad6-4624-815b-85ab57e02d92\")]\n    public interface ISiteLogFile\n    {\n        [DispId(1)]\n        uint LogExtFileFlags\n        {\n            get;\n        }\n        [DispId(2)]\n        string CustomLogPluginClsid\n        {\n            get;\n        }\n        [DispId(3)]\n        uint LogFormat\n        {\n            get;\n        }\n        [DispId(4)]\n        string Directory\n        {\n            get;\n        }\n        [DispId(5)]\n        uint Period\n        {\n            get;\n        }\n        [DispId(6)]\n        long TruncateSize\n        {\n            get;\n        }\n        [DispId(7)]\n        bool LocalTimeRollover\n        {\n            get;\n        }\n        [DispId(8)]\n        bool Enabled\n        {\n            get;\n        }\n        [DispId(9)]\n        bool LogSiteID\n        {\n            get;\n        }\n        [DispId(10)]\n        uint LogTargetW3C\n        {\n            get;\n        }\n        [DispId(11)]\n        uint FlushByEntryCountW3CLog\n        {\n            get;\n        }\n        [DispId(12)]\n        uint MaxLogLineLength\n        {\n            get;\n        }\n        [DispId(13)]\n        ICustomFields CustomFields\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/ISiteTraceRequestsLogging.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"d861da67-f550-4208-8c54-99d0f06597fe\")]\n    public interface ISiteTraceRequestsLogging\n    {\n        [DispId(1)]\n        bool Enabled\n        {\n            get;\n        }\n        [DispId(2)]\n        string Directory\n        {\n            get;\n        }\n        [DispId(3)]\n        uint MaxLogFiles\n        {\n            get;\n        }\n        [DispId(4)]\n        uint MaxLogFileSizeKB\n        {\n            get;\n        }\n        [DispId(5)]\n        bool CustomActionsEnabled\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IVirtualDirectory.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"e2c36157-96fe-46ef-9066-3b02cd29fe3c\")]\n    public interface IVirtualDirectory\n    {\n        [DispId(1)]\n        string Path\n        {\n            get;\n        }\n        [DispId(2)]\n        string PhysicalPath\n        {\n            get;\n        }\n        [DispId(3)]\n        string UserName\n        {\n            get;\n        }\n        [DispId(4)]\n        string Password\n        {\n            get;\n        }\n        [DispId(5)]\n        uint LogonMethod\n        {\n            get;\n        }\n        [DispId(6)]\n        bool AllowSubdirectoryConfig\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/IWebLimits.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"34d720e5-bdf2-4e54-81aa-29356a579eea\")]\n    public interface IWebLimits\n    {\n        [DispId(1)]\n        uint MaxGlobalBandwidth\n        {\n            get;\n        }\n        [DispId(2)]\n        long ConnectionTimeout\n        {\n            get;\n        }\n        [DispId(3)]\n        uint DemandStartThreshold\n        {\n            get;\n        }\n        [DispId(4)]\n        uint DynamicIdleThreshold\n        {\n            get;\n        }\n        [DispId(5)]\n        long HeaderWaitTimeout\n        {\n            get;\n        }\n        [DispId(6)]\n        uint MinBytesPerSec\n        {\n            get;\n        }\n        [DispId(7)]\n        uint DynamicRegistrationThreshold\n        {\n            get;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/LoadOptions.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\n\nnamespace Microsoft.ApplicationHost\n{\n    [ComVisible(true), Guid(\"0ef8b038-9cf8-4f38-89a9-025da1247816\")]\n    public enum LoadOptions\n    {\n        None,\n        MemoryBuffer,\n        TempFile\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/LoggingService.cs",
    "content": "using System;\nusing Microsoft.Extensions.Logging;\n\nnamespace JexusManager\n{\n    public static class LogHelper\n    {\n        private static ILoggerFactory _loggerFactory;\n\n        public static void Initialize(ILoggerFactory loggerFactory)\n        {\n            _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));\n        }\n\n        public static ILogger<T> GetLogger<T>()\n        {\n            if (_loggerFactory == null)\n            {\n                throw new InvalidOperationException(\"LoggerFactory has not been initialized.\");\n            }\n\n            return _loggerFactory.CreateLogger<T>();\n        }\n\n        public static ILogger GetLogger(string categoryName)\n        {\n            if (_loggerFactory == null)\n            {\n                throw new InvalidOperationException(\"LoggerFactory has not been initialized.\");\n            }\n\n            return _loggerFactory.CreateLogger(categoryName);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/Microsoft.Web.Configuration.AppHostFileProvider.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <ProjectGuid>{E4DAB2F5-AF63-413C-886A-09BC4353ADB6}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.ApplicationHost</RootNamespace>\n    <AssemblyName>Microsoft.Web.Configuration.AppHostFileProvider</AssemblyName>\n    <TargetFramework>netstandard2.0</TargetFramework>\n    <LangVersion>latest</LangVersion>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Abstractions\" Version=\"9.0.5\" />\n    <PackageReference Include=\"Microsoft.Windows.CsWin32\" Version=\"0.3.183\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/NativeMethods.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\nusing System.Runtime.InteropServices;\nusing System.Security.Cryptography;\nusing System.Text;\nusing Microsoft.Win32.SafeHandles;\nusing Windows.Win32;\nusing Windows.Win32.Foundation;\nusing Windows.Win32.Security.Cryptography;\n\nnamespace Microsoft.ApplicationHost\n{\n    internal static class NativeMethods\n    {\n        internal sealed class SafeCryptProvHandle : SafeHandleZeroOrMinusOneIsInvalid\n        {\n            private SafeCryptProvHandle() : base(ownsHandle: true)\n            {\n            }\n\n            public SafeCryptProvHandle(nuint handle) : base(ownsHandle: true)\n            {\n                SetHandle(NUintToIntPtr(handle));\n            }\n\n            internal unsafe static SafeCryptProvHandle AcquireMachineContext(string keyContainerName, string providerName, uint providerType, bool useMachineContainer)\n            {\n                uint dwFlags = useMachineContainer ? (uint)CRYPT_KEY_FLAGS.CRYPT_MACHINE_KEYSET : 0u;\n                SafeCryptProvHandle hCryptProv;\n\n                unsafe\n                {\n                    nuint phProv;\n                    bool success = PInvoke.CryptAcquireContext(\n                        out phProv,\n                        keyContainerName,\n                        providerName,\n                        providerType,\n                        dwFlags);\n\n                    hCryptProv = new SafeCryptProvHandle(phProv);\n\n                    if (!success)\n                    {\n                        int lastWin32Error = Marshal.GetLastWin32Error();\n                        if (lastWin32Error != HRESULT.NTE_EXISTS)\n                        {\n                            throw new CryptographicException(lastWin32Error);\n                        }\n                    }\n                }\n\n                return hCryptProv;\n            }\n\n            protected override bool ReleaseHandle()\n            {\n                unsafe\n                {\n                    return PInvoke.CryptReleaseContext(IntPtrToNUint(handle), 0);\n                }\n            }\n        }\n\n        internal static nuint IntPtrToNUint(IntPtr ptr)\n        {\n            return unchecked((nuint)(ulong)ptr);\n        }\n\n        internal static IntPtr NUintToIntPtr(nuint ptr)\n        {\n            return unchecked((IntPtr)(ulong)ptr);\n        }\n\n        #region CNG Support\n        [DllImport(\"cngkeyhelper.dll\", CharSet = CharSet.Unicode, SetLastError = true)]\n        internal static extern uint IisCngDecrypt(string pszKeyName, [In][Out][MarshalAs(UnmanagedType.LPArray)] byte[] pbData, [In][Out] ref uint pcbData);\n\n        [DllImport(\"cngkeyhelper.dll\", CharSet = CharSet.Unicode, SetLastError = true)]\n        internal static extern uint IisCngEncrypt(string pszKeyName, string pszClearText, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pbOutput, out uint pcbResult);\n\n        public static string CngDecrypt(byte[] encrypted, string keyContainer)\n        {\n            uint pcbData = (uint)encrypted.Length;\n            byte[] array = new byte[pcbData];\n            encrypted.CopyTo(array, 0);\n            if (IisCngDecrypt(keyContainer, array, ref pcbData) != 0L)\n            {\n                throw new Win32Exception(Marshal.GetLastWin32Error());\n            }\n            return new UnicodeEncoding(bigEndian: false, byteOrderMark: true, throwOnInvalidBytes: true).GetString(array, 0, (int)(pcbData - 2));\n        }\n\n        public static byte[] CngEncrypt(string data, string keyContainer)\n        {\n            uint pcbResult = 0u;\n            byte[] pbOutput = null;\n            if (IisCngEncrypt(keyContainer, data, pbOutput, out pcbResult) != 0L)\n            {\n                throw new Win32Exception(Marshal.GetLastWin32Error());\n            }\n            pbOutput = new byte[pcbResult];\n            if (IisCngEncrypt(keyContainer, data, pbOutput, out pcbResult) != 0L)\n            {\n                throw new Win32Exception(Marshal.GetLastWin32Error());\n            }\n            return pbOutput;\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/NativeMethods.json",
    "content": "{\n    \"$schema\": \"https://aka.ms/CsWin32.schema.json\",\n    \"public\": false,\n    \"emitSingleFile\": true,\n    \"useSafeHandles\": true,\n    \"allowMarshaling\": true,\n    \"multiTargetingFriendlyAPIs\": true\n}\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/NativeMethods.txt",
    "content": "CryptAcquireContextW\nCryptReleaseContext\nCryptDecrypt\nCryptDestroyKey\nCryptEncrypt\nCryptImportKey\nCryptGetUserKey\nCryptGenRandom\nPROV_RSA_AES\nCERT_KEY_SPEC\nWIN32_ERROR\nCRYPT_KEY_FLAGS\nCRYPT_NEWKEYSET\nNTE_EXISTS\n"
  },
  {
    "path": "Microsoft.Web.Configuration.AppHostFileProvider/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2014-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"e4dab2f5-af63-413c-886a-09bc4353adb6\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/AssemblyDownloadInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Globalization;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class AssemblyDownloadInfo\n    {\n        public AssemblyDownloadInfo(\n    string name,\n    string displayName,\n    string filePath,\n    bool canIgnore,\n    CultureInfo culture\n)\n        {\n            Name = name;\n            DisplayName = displayName;\n            FilePath = filePath;\n            CanIgnore = canIgnore;\n            Culture = culture;\n        }\n\n        public bool CanIgnore { get; }\n        public CultureInfo Culture { get; }\n        public string DisplayName { get; }\n        public string FilePath { get; }\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Connection.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel.Design;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class Connection : IServiceContainer, IDisposable\n    {\n        public ModuleServiceProxy CreateProxy(Module module, Type proxyType)\n        {\n            return null;\n        }\n\n        public bool EndConfigurationManagement()\n        {\n            return false;\n        }\n\n        public bool EndConfigurationManagement(Type pageType)\n        {\n            return false;\n        }\n\n        public bool Refresh()\n        {\n            return false;\n        }\n\n        public void SetConfigurationPath(ManagementConfigurationPath configurationPath)\n        {\n            ConfigurationPath = configurationPath;\n        }\n\n        public bool StartConfigurationManagement(ManagementConfigurationPath configurationPath)\n        {\n            return false;\n        }\n\n        public bool StartConfigurationManagement(ManagementConfigurationPath configurationPath, Type pageType)\n        {\n            return false;\n        }\n\n        void IServiceContainer.AddService(Type serviceType, object serviceInstance)\n        {\n            throw new NotImplementedException();\n        }\n\n        void IServiceContainer.AddService(Type serviceType, object serviceInstance, bool promote)\n        {\n            throw new NotImplementedException();\n        }\n\n        void IServiceContainer.AddService(Type serviceType, ServiceCreatorCallback callback)\n        {\n            throw new NotImplementedException();\n        }\n\n        void IServiceContainer.AddService(Type serviceType, ServiceCreatorCallback callback, bool promote)\n        {\n            throw new NotImplementedException();\n        }\n\n        void IServiceContainer.RemoveService(Type serviceType)\n        {\n            throw new NotImplementedException();\n        }\n\n        void IServiceContainer.RemoveService(Type serviceType, bool promote)\n        {\n            throw new NotImplementedException();\n        }\n\n        object IServiceProvider.GetService(Type serviceType)\n        {\n            throw new NotImplementedException();\n        }\n\n        void IDisposable.Dispose()\n        {\n        }\n\n        public ManagementConfigurationPath ConfigurationPath { get; set; }\n        public ManagementFrameworkVersion CurrentFrameworkVersion { get; }\n        public bool Deactivated { get; }\n        public ReadOnlyCollection<ManagementFrameworkVersion> FrameworkVersions { get; }\n        public bool IsLocalConnection { get; }\n        public bool IsUserServerAdministrator { get; }\n        public IDictionary Modules { get; }\n        public string Name { get; }\n        public ManagementScope Scope { get; }\n        public ManagementScopePath ScopePath { get; }\n        public Uri Url { get; }\n        public string UserName { get; }\n\n        public event EventHandler Initialized;\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ConnectionActiveState.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ConnectionActiveState\n    {\n        public bool Active { get; }\n        public bool DifferentCredentials { get; }\n        public ConnectionInfo SimilarConnection { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ConnectionCredential.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ConnectionCredential\n    {\n        public ConnectionCredential(string userName, string password)\n            : this(userName, password, false)\n        {\n        }\n\n        public ConnectionCredential(string userName, string password, bool useBasicAuthentication)\n        {\n            UserName = userName;\n            Password = password;\n            UseBasicAuthentication = useBasicAuthentication;\n        }\n\n        public static readonly ConnectionCredential CurrentUserAccount;\n\n        public override bool Equals(object obj)\n        {\n            var connection = obj as ConnectionCredential;\n            return connection != null && connection.UserName == UserName;\n        }\n\n        public override int GetHashCode()\n        {\n            return 0;\n        }\n\n        public string Domain { get; }\n        public string Password { get; }\n        public bool UseBasicAuthentication { get; }\n        public string UserName { get; }\n        public bool UseSystemAccount { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ConnectionEventArgs.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ConnectionEventArgs : EventArgs\n    {\n        public Connection Connection { get; }\n        public bool IsNewConnection { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ConnectionEventHandler.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public delegate void ConnectionEventHandler(\n        Object sender,\n        ConnectionEventArgs e\n        );\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ConnectionInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ConnectionInfo\n    {\n        public ConnectionInfo(string name, Uri url, bool isLocal, ManagementScope scope, ManagementScopePath scopePath, ConnectionCredential credentials, IConnectionManager connectionManager)\n        { }\n\n        public override bool Equals(object obj)\n        {\n            return false;\n        }\n\n        public override int GetHashCode()\n        {\n            return 0;\n        }\n\n        public ConnectionCredential Credentials { get; }\n        public bool IsLocal { get; }\n        public string Name { get; set; }\n        public ManagementScope Scope { get; }\n        public ManagementScopePath ScopePath { get; }\n        public Uri Url { get; }\n\n        public event EventHandler RenamedEventHandler;\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ConnectionInfoCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ConnectionInfoCollection : ReadOnlyCollection<ConnectionInfo>\n    {\n        public ConnectionInfoCollection(\n            IConnectionManager owner\n            ) : base(owner.RegisteredConnections)\n        { }\n\n        public ConnectionInfo this[\n            string name\n            ]\n        { get { throw new NotImplementedException(); } }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ControlPanelCategorization.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ControlPanelCategorization\n    {\n        public ControlPanelCategorization(\n            string key,\n            string displayName\n            )\n        {\n            Key = key;\n            DisplayName = displayName;\n        }\n\n        public static readonly string AreaCategorization;\n        public static readonly string CategoryCategorization;\n\n        public override bool Equals(\n            Object obj\n            )\n        {\n            return false;\n        }\n\n        public override int GetHashCode()\n        {\n            return 0;\n        }\n\n        public string DisplayName { get; }\n        public string Key { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ControlPanelCategoryInfo.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ControlPanelCategoryInfo\n    {\n        public ControlPanelCategoryInfo(\n            string name,\n            string text,\n            string description,\n            ControlPanelCategorization categorization\n            )\n        {\n            Name = name;\n            Text = text;\n            Description = description;\n            Categorization = categorization;\n        }\n\n        public static readonly string ApplicationDevelopment;\n        public static readonly string AspNet;\n        public static readonly string CommonHttp;\n        public static readonly string HealthAndDiagnostics;\n        public static readonly string Iis;\n        public static readonly string Management;\n        public static readonly string Performance;\n        public static readonly string Security;\n        public static readonly string Server;\n\n        public override string ToString()\n        {\n            return null;\n        }\n\n        public ControlPanelCategorization Categorization { get; }\n        public string Description { get; }\n        public string Name { get; }\n        public string Text { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/CredentialInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class CredentialInfo\n    {\n        public override string ToString()\n        {\n            return null;\n        }\n\n        public string Password { get; set; }\n        public string UserName { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/CredentialInfoEventArgs.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class CredentialInfoEventArgs : CancelEventArgs\n    {\n        public CredentialInfoEventArgs(\n            CredentialInfo credentials\n            )\n        {\n            Credentials = credentials;\n        }\n\n        public CredentialInfo Credentials { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Extensions/AuthenticationFeature.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Resources;\nusing Microsoft.Web.Management.Client.Win32;\n\nnamespace Microsoft.Web.Management.Client.Extensions\n{\n    public abstract class AuthenticationFeature\n    {\n        protected AuthenticationFeature(Module module)\n        {\n            Module = module;\n        }\n\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)GetService(typeof(IManagementUIService));\n            service.ShowError(ex, resourceManager.GetString(\"General\"), \"\", false);\n        }\n\n        protected object GetService(Type type)\n        {\n            return (Module as IServiceProvider).GetService(type);\n        }\n\n        public abstract TaskList GetTaskList();\n\n        public abstract void Load();\n\n        protected void OnAuthenticationSettingsSaved()\n        {\n            AuthenticationSettingsUpdated?.Invoke();\n        }\n\n        public void SetEnabled(bool enabled)\n        {\n            IsEnabled = enabled;\n            OnAuthenticationSettingsSaved();\n        }\n\n        public virtual bool ShowHelp()\n        {\n            return false;\n        }\n\n        public AuthenticationSettingsSavedEventHandler AuthenticationSettingsUpdated { get; set; }\n        public abstract AuthenticationType AuthenticationType { get; }\n        public virtual string Description { get; }\n        public bool IsEnabled { get; private set; }\n\n        public virtual bool IsFeatureEnabled\n        {\n            get { return true; }\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public Module Module { get; }\n        public abstract string Name { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Extensions/AuthenticationSettingsSavedEventHandler.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client.Extensions\n{\n    public delegate void AuthenticationSettingsSavedEventHandler();\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Extensions/AuthenticationType.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client.Extensions\n{\n    public enum AuthenticationType\n    {\n        ChallengeBase = 0,\n        LoginRedirectBased = 1,\n        ClientCertificateBased = 2,\n        Other = 3\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Extensions/HomepageExtension.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client.Extensions\n{\n    public abstract class HomepageExtension : IHomepageTaskListProvider\n    {\n        protected virtual TaskList GetTaskList(IServiceProvider serviceProvider, ModulePageInfo selectedModulePage)\n        {\n            return null;\n        }\n\n        protected virtual void OnRefresh() { }\n\n        TaskList IHomepageTaskListProvider.GetTaskList(IServiceProvider serviceProvider, ModulePageInfo selectedModulePage)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Extensions/IHomepageTaskListProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client.Extensions\n{\n    public interface IHomepageTaskListProvider\n    {\n        TaskList GetTaskList(\n            IServiceProvider serviceProvider,\n            ModulePageInfo selectedModulePage\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Extensions/ProtocolProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Management.Client.Extensions\n{\n    public abstract class ProtocolProvider : IServiceProvider\n    {\n        protected ProtocolProvider(\n            IServiceProvider serviceProvider\n            )\n        { }\n\n        public abstract TaskList GetSitesTaskList();\n\n        public abstract TaskList GetSiteTaskList(\n            string siteName,\n            ICollection<string> bindingProtocols\n            );\n\n        public void UpdateSite(\n            string siteName,\n            SiteAction action\n            )\n        { }\n\n        object IServiceProvider.GetService(Type serviceType)\n        {\n            throw new NotImplementedException();\n        }\n\n        public virtual bool IsIPPortProtocol { get; }\n        public SiteUpdatedEventHandler SiteUpdated { get; set; }\n        public virtual string SupportedProtocol { get; }\n\n        public delegate void SiteUpdatedEventHandler(\n            Object sender,\n            SiteUpdatedEventArgs e\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Extensions/ProviderFeature.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client.Extensions\n{\n    public abstract class ProviderFeature\n    {\n        public virtual string ConnectionStringAttributeName { get; }\n        public virtual bool ConnectionStringRequired { get; }\n        public abstract string FeatureName { get; }\n        public abstract string ProviderBaseType { get; }\n        public abstract string ProviderCollectionPropertyName { get; }\n        public abstract string[] ProviderConfigurationSettingNames { get; }\n        public abstract string SectionName { get; }\n        public abstract string SelectedProvider { get; }\n        public abstract string SelectedProviderPropertyName { get; }\n        public abstract ProviderConfigurationSettings Settings { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Extensions/SiteAction.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client.Extensions\n{\n    public enum SiteAction\n    {\n        Create = 0,\n        Edit = 1\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Extensions/SiteUpdatedEventArgs.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client.Extensions\n{\n    public sealed class SiteUpdatedEventArgs : EventArgs\n    {\n        public SiteAction Action { get; }\n        public string SiteName { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/GroupTaskItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class GroupTaskItem : TaskItem\n    {\n        public GroupTaskItem(string memberName, string text, string category)\n            : this(memberName, text, category, false)\n        { }\n\n        public GroupTaskItem(string memberName, string text, string category, bool isHeading)\n            : base(text, category)\n        {\n            MemberName = memberName;\n            IsHeading = isHeading;\n            Items = new ArrayList();\n        }\n\n        public bool IsHeading { get; }\n        public IList Items { get; }\n        public string MemberName { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyCollectionEventArgs.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public class HierarchyCollectionEventArgs : EventArgs\n    {\n        public HierarchyCollectionEventArgs(\n            HierarchyInfo hierarchyInfo,\n            IEnumerable<HierarchyInfo> childrenAdded\n            )\n        {\n            HierarchyInfo = hierarchyInfo;\n            ChildrenAdded = childrenAdded;\n        }\n\n        public IEnumerable<HierarchyInfo> ChildrenAdded { get; }\n        public HierarchyInfo HierarchyInfo { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyCollectionEventHandler.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public delegate void HierarchyCollectionEventHandler(\n        Object sender,\n        HierarchyCollectionEventArgs e\n        );\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyInfo.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class HierarchyInfo : IServiceProvider, IDisposable\n    {\n        private IServiceProvider _serviceProvider;\n\n        protected HierarchyInfo(IServiceProvider serviceProvider)\n        {\n            _serviceProvider = serviceProvider;\n        }\n\n        public static readonly string Application;\n        public static readonly string ApplicationConnection;\n        public static readonly string ApplicationPools;\n        public static readonly string File;\n        public static readonly string Folder;\n        public static readonly string FtpSites;\n        public static readonly string ServerConnection;\n        public static readonly string Site;\n        public static readonly string SiteConnection;\n        public static readonly string Sites;\n        public static readonly string Start;\n        public static readonly string VirtualDirectory;\n\n        public void Collapse()\n        {\n        }\n\n        public bool Delete()\n        {\n            return false;\n        }\n\n        protected virtual void Dispose()\n        {\n            _serviceProvider = null;\n        }\n\n        public void Expand() { }\n\n        protected virtual HierarchyInfo[] GetChildren()\n        {\n            return null;\n        }\n\n        protected object GetService(Type type)\n        {\n            return _serviceProvider.GetService(type);\n        }\n\n        void IDisposable.Dispose()\n        {\n            Dispose();\n        }\n\n        protected bool Navigate(Type pageType)\n        {\n            return Navigate(pageType, null);\n        }\n\n        protected bool Navigate(Type pageType, object navigationData)\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            return service.Navigate(Connection, null, pageType, navigationData);\n        }\n\n        protected virtual void OnDeleting(CancelEventArgs e)\n        {\n        }\n\n        protected virtual void OnRenamed(HierarchyRenameEventArgs e)\n        { }\n\n        protected virtual void OnRenaming(HierarchyRenameEventArgs e)\n        { }\n\n        protected virtual bool OnSelected()\n        {\n            return false;\n        }\n\n        public virtual void Refresh() { }\n\n\n        public bool Select()\n        {\n            return false;\n        }\n\n        public void Update() { }\n\n        object IServiceProvider.GetService(Type serviceType)\n        {\n            return GetService(serviceType);\n        }\n\n        protected virtual Connection Connection { get; }\n        public virtual object Image { get; }\n        public virtual bool IsExtendable { get; }\n        public bool IsLoaded { get; }\n        public abstract string NodeType { get; }\n        public virtual string NodeTypeName { get; }\n        public HierarchyInfo Parent { get; }\n        public virtual HierarchyPriority Priority { get; }\n        public virtual IDictionary Properties { get; }\n        public virtual bool SupportsChildren { get; }\n        protected virtual bool SupportsDelete { get; }\n        protected virtual bool SupportsRename { get; }\n        public virtual TaskListCollection Tasks { get; }\n        public abstract string Text { get; }\n        public virtual string ToolTip { get; }\n        public virtual HierarchyVisibility Visibility { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyInfoEventArgs.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public class HierarchyInfoEventArgs : EventArgs\n    {\n        public HierarchyInfoEventArgs(HierarchyInfo hierarchyInfo)\n        {\n            HierarchyInfo = hierarchyInfo;\n        }\n\n        public HierarchyInfo HierarchyInfo { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyInfoEventHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public delegate void HierarchyInfoEventHandler(object sender, HierarchyInfoEventArgs e);\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyInfoSyncSelectionEventArgs.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public class HierarchyInfoSyncSelectionEventArgs : EventArgs\n    {\n        public HierarchyInfoSyncSelectionEventArgs(Connection connection, HierarchyInfo hierarchyInfo, Type pageType)\n        {\n            Connection = connection;\n            HierarchyInfo = hierarchyInfo;\n            PageType = pageType;\n        }\n\n        public Connection Connection { get; }\n\n        public HierarchyInfo HierarchyInfo { get; set; }\n\n        public Type PageType { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyPriority.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public enum HierarchyPriority\n    {\n        Lowest = 0,\n        Lower = 1,\n        Normal = 2,\n        Higher = 3,\n        Higest = 4\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class HierarchyProvider : IServiceProvider\n    {\n        private readonly IServiceProvider _serviceProvider;\n\n        protected HierarchyProvider(IServiceProvider serviceProvider)\n        {\n            _serviceProvider = serviceProvider;\n        }\n\n        public abstract HierarchyInfo[] GetChildren(HierarchyInfo item);\n\n        protected object GetService(Type serviceType)\n        {\n            return _serviceProvider.GetService(serviceType);\n        }\n\n        public virtual TaskList GetTasks(HierarchyInfo item)\n        {\n            return item.Tasks[0];\n        }\n\n        public virtual void SyncSelection(HierarchyInfoSyncSelectionEventArgs item)\n        { }\n\n        object IServiceProvider.GetService(Type serviceType)\n        {\n            return GetService(serviceType);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyRenameEventArgs.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class HierarchyRenameEventArgs : EventArgs\n    {\n        public HierarchyRenameEventArgs(string label)\n        {\n            Label = label;\n        }\n\n        public bool Cancel { get; set; }\n        public string Label { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyService.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class HierarchyService\n    {\n        public abstract void AddChildren(HierarchyInfo hierarchyInfo, IEnumerable<HierarchyInfo> childrenInfo);\n\n        public abstract void Collapse(HierarchyInfo hierarchyInfo);\n\n        public abstract void Expand(HierarchyInfo hierarchyInfo);\n\n        public abstract IEnumerable<HierarchyInfo> GetChildren(HierarchyInfo hierarchyInfo);\n\n        public abstract TaskListCollection GetTasks(HierarchyInfo hierarchyInfo);\n\n        public abstract void Refresh(HierarchyInfo hierarchyInfo);\n\n        public abstract void Remove(HierarchyInfo hierarchyInfo);\n\n        public abstract bool Select(HierarchyInfo hierarchyInfo);\n\n        public abstract void SyncSelection(HierarchyInfoSyncSelectionEventArgs item);\n\n        public abstract void Update(HierarchyInfo hierarchyInfo);\n\n        public abstract HierarchyInfo SelectedInfo { get; }\n\n        public abstract event HierarchyCollectionEventHandler ChildrenAdded;\n        public abstract event HierarchyInfoEventHandler InfoCollapsed;\n        public abstract event HierarchyInfoEventHandler InfoExpanded;\n        public abstract event HierarchyInfoEventHandler InfoRefreshed;\n        public abstract event HierarchyInfoEventHandler InfoRemoved;\n        public abstract event HierarchyInfoEventHandler InfoUpdated;\n        public abstract event EventHandler SelectedInfoChanged;\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/HierarchyVisibility.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public enum HierarchyVisibility\n    {\n        All = 0,\n        Hierarchy = 1,\n        List = 2\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ICertificateVerificationBuilder.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Net.Security;\nusing System.Security.Cryptography.X509Certificates;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface ICertificateVerificationBuilder\n    {\n        bool VerifyCertificate(\n            IServiceProvider serviceProvider,\n            X509Certificate2 certificate,\n            X509Chain chain,\n            SslPolicyErrors sslPolicyErrors\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IConnectionBuilder.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IConnectionBuilder\n    {\n        ConnectionInfo BuildConnection(\n            IServiceProvider serviceProvider,\n            ManagementScope scope\n            );\n\n        ConnectionInfo BuildConnection(\n            IServiceProvider serviceProvider,\n            ConnectionInfo existingConnectionInfo,\n            Exception connectionException\n            );\n\n        ConnectionInfo BuildFavorite(\n            IServiceProvider serviceProvider,\n            ManagementScope scope\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IConnectionManager.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IConnectionManager\n    {\n        Connection ActivateConnection(\n            ConnectionInfo connection\n            );\n\n        void DeactivateConnection(\n            Connection connection\n            );\n\n        ConnectionActiveState GetConnectionActiveState(\n            ConnectionInfo connection\n            );\n\n        bool PerformLogin(\n            ConnectionInfo connection\n            );\n\n        bool RefreshConnection(\n            Connection connection\n            );\n\n        void Save();\n\n        ReadOnlyCollection<Connection> Connections { get; }\n\n        bool IsDirty { get; }\n        ConnectionInfoCollection RegisteredConnections { get; }\n        bool SupportsMultipleConnections { get; }\n\n        event ConnectionEventHandler ConnectionActivated;\n        event ConnectionEventHandler ConnectionDeactivated;\n        event EventHandler ConnectionRefreshed;\n        event ConnectionEventHandler ConnectionRefreshing;\n        event EventHandler IsDirtyChanged;\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IControlPanel.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IControlPanel\n    {\n        ReadOnlyCollection<ControlPanelCategoryInfo> GetCategories(string categorization);\n\n        ControlPanelCategoryInfo GetCategory(string categorization, ModulePageInfo pageInfo);\n\n        ModulePageInfo GetPage(Type pageType);\n\n        ReadOnlyCollection<ModulePageInfo> GetPages(Module module);\n\n        ReadOnlyCollection<ModulePageInfo> GetPages(string categorization, string categoryName);\n\n        void RegisterCategory(ControlPanelCategoryInfo categoryInfo);\n\n        void RegisterHomepage(ModulePageInfo homepageInfo);\n\n        void RegisterPage(ModulePageInfo itemPageInfo);\n\n        void RegisterPage(string categoryName, ModulePageInfo itemPageInfo);\n\n        ReadOnlyCollection<ControlPanelCategorization> Categorizations { get; }\n        ModulePageInfo ControlPanelPage { get; }\n        ReadOnlyCollection<ModulePageInfo> Pages { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ICredentialBuilder.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface ICredentialBuilder\n    {\n        CredentialInfo SetCredentials(\n            IServiceProvider serviceProvider,\n            bool verifyValidWindowsUserPassword\n            );\n\n        CredentialInfo SetCredentials(\n            IServiceProvider serviceProvider,\n            bool verifyValidWindowsUserPassword,\n            EventHandler showHelp\n            );\n\n        CredentialInfo SpecifyCredentials(\n            IServiceProvider serviceProvider,\n            string dialogTitleText,\n            string userName,\n            string password,\n            bool isModify,\n            bool verifyValidWindowsUserPassword,\n            string description,\n            string setSpecificCredentialsText,\n            string otherOptionText\n            );\n\n        CredentialInfo SpecifyCredentials(\n            IServiceProvider serviceProvider,\n            string dialogTitleText,\n            string userName,\n            string password,\n            bool isModify,\n            bool verifyValidWindowsUserPassword,\n            string description,\n            string setSpecificCredentialsText,\n            string otherOptionText,\n            EventHandler<CredentialInfoEventArgs> commitHandler\n            );\n\n        CredentialInfo SpecifyCredentials(\n            IServiceProvider serviceProvider,\n            string dialogTitleText,\n            string userName,\n            string password,\n            bool isModify,\n            bool verifyValidWindowsUserPassword,\n            string description,\n            string setSpecificCredentialsText,\n            string otherOptionText,\n            EventHandler<CredentialInfoEventArgs> commitHandler,\n            EventHandler showHelp\n            );\n\n        CredentialInfo SpecifyCredentials(\n            IServiceProvider serviceProvider,\n            string dialogTitleText,\n            string userName,\n            string password,\n            bool isModify,\n            bool verifyValidWindowsUserPassword,\n            string description,\n            string setSpecificCredentialsText,\n            string otherOptionText,\n            EventHandler<CredentialInfoEventArgs> commitHandler,\n            EventHandler showHelp,\n            bool readOnly\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IExtensibilityManager.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IExtensibilityManager\n    {\n        ICollection GetExtensions(\n            Type extensionType\n            );\n\n        void RegisterExtension(\n            Type extensionType,\n            Object extension\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IModuleChildPage.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IModuleChildPage\n    {\n        IModulePage ParentPage { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IModulePage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IModulePage : IDisposable\n    {\n        void Initialize(Module module, ModulePageInfo pageInfo, Object navigationData);\n\n        void OnActivated(bool initialActivation);\n\n        void OnDeactivating(CancelEventArgs e);\n\n        void Refresh();\n\n        bool ShowHelp();\n\n        bool CanRefresh { get; }\n        bool HasChanges { get; }\n        ModulePageInfo PageInfo { get; }\n        TaskListCollection Tasks { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/INavigationService.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.ObjectModel;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface INavigationService\n    {\n        bool Navigate(Connection connection, ManagementConfigurationPath configurationPath, Type pageType, object navigationData);\n\n        bool NavigateBack(int steps);\n\n        bool NavigateForward();\n\n        bool CanNavigateBack { get; }\n\n        bool CanNavigateForward { get; }\n\n        NavigationItem CurrentItem { get; }\n\n        ReadOnlyCollection<NavigationItem> History { get; }\n\n\n        event NavigationEventHandler NavigationPerformed;\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IPreferencesService.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IPreferencesService\n    {\n        PreferencesStore GetPreferencesStore(\n            Guid storeIdentifier\n            );\n\n        bool GetPreferencesStore(\n            Guid storeIdentifier,\n            out PreferencesStore store\n            );\n\n        void ResetPreferencesStore(\n            Guid storeIdentifier\n            );\n\n        void Save();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IPropertyEditingService.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IPropertyEditingService\n    {\n        bool EditProperties(\n            IServiceProvider serviceProvider,\n            IPropertyEditingUser user,\n            Object targetObject,\n            string titleText,\n            string helpText\n            );\n\n        bool EditProperties(\n            IServiceProvider serviceProvider,\n            IPropertyEditingUser user,\n            Object targetObject,\n            string titleText,\n            string helpText,\n            EventHandler showHelp\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IPropertyEditingUser.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IPropertyEditingUser\n    {\n        bool UpdateObjects(\n            Object targetObject\n            );\n\n        void ValidateObjects(\n            Object targetObject\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/IProviderConfigurationService.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Management.Client.Extensions;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public interface IProviderConfigurationService\n    {\n        bool ConfigureProvider(\n            ProviderFeature feature\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ManagementChannel.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class ManagementChannel\n    {\n        protected ManagementChannel(\n            Connection connection,\n            ConnectionInfo connectionInfo\n            )\n        {\n            Connection = connection;\n            ConnectionInfo = connectionInfo;\n        }\n\n        protected abstract void DownloadAssembly(\n            AssemblyDownloadInfo info,\n            string fileName\n            );\n\n        protected abstract Object Invoke(\n            string serviceName,\n            string methodName,\n            params Object[] parameters\n            );\n        protected void SetLastRequestConfigurationInfo(\n            bool configurationUsed,\n            string configurationPath,\n            string locationSubPath\n            )\n        { }\n\n        protected Connection Connection { get; }\n        protected ConnectionInfo ConnectionInfo { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ManagementScopePath.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ManagementScopePath\n    {\n        private ManagementScopePath(string serverName, int port, string siteName, string applicationPath)\n        {\n            ServerName = serverName;\n            Port = port;\n            SiteName = siteName;\n            ApplicationPath = applicationPath;\n        }\n\n        public static ManagementScopePath CreateApplicationPath(string managementServerName, int port, string siteName, string applicationPath)\n        {\n            return new ManagementScopePath(managementServerName, port, siteName, applicationPath);\n        }\n\n        public static ManagementScopePath CreateServerPath(string managementServerName, int port)\n        {\n            return new ManagementScopePath(managementServerName, port, null, null);\n        }\n\n        public static ManagementScopePath CreateServerPath(string managementServerName, int port, ManagementFrameworkVersion frameworkVersion)\n        {\n            var result = new ManagementScopePath(managementServerName, port, null, null);\n            result.SetFrameworkVersion(frameworkVersion);\n            return result;\n        }\n\n        public static ManagementScopePath CreateSitePath(string managementServerName, int port, string siteName)\n        {\n            return new ManagementScopePath(managementServerName, port, siteName, null);\n        }\n\n        public override bool Equals(object obj)\n        {\n            var path = obj as ManagementScopePath;\n            return path != null && ServerName == path.ServerName && Port == path.Port && SiteName == path.SiteName &&\n                   ApplicationPath == path.ApplicationPath;\n        }\n\n        public override int GetHashCode()\n        {\n            return ServerName.GetHashCode() + Port + SiteName.GetHashCode() + ApplicationPath.GetHashCode();\n        }\n\n        public void SetFrameworkVersion(ManagementFrameworkVersion frameworkVersion)\n        {\n            FrameworkVersion = frameworkVersion;\n        }\n\n        public string ApplicationPath { get; }\n        public ManagementFrameworkVersion FrameworkVersion { get; set; }\n        public int Port { get; }\n        public string ServerName { get; }\n        public string ServerReference { get; }\n        public string SiteName { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/MessageTaskItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class MessageTaskItem : TaskItem\n    {\n        public MessageTaskItem(\n            MessageTaskItemType messageType,\n            string text,\n            string category\n            ) : this(messageType, text, category, string.Empty)\n        { }\n\n        public MessageTaskItem(\n            MessageTaskItemType messageType,\n            string text,\n            string category,\n            string description\n            ) : this(messageType, text, category, description, string.Empty, null)\n        { }\n\n        public MessageTaskItem(\n            MessageTaskItemType messageType,\n            string text,\n            string category,\n            string description,\n            string methodName,\n            Object userData\n            ) : base(text, category, description)\n        {\n            MessageType = messageType;\n            MethodName = methodName;\n            UserData = userData;\n        }\n\n        public MessageTaskItemType MessageType { get; }\n        public string MethodName { get; }\n        public Object UserData { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/MessageTaskItemType.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public enum MessageTaskItemType\n    {\n        Information = 0,\n        Warning = 1,\n        Error = 2\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/MethodTaskItemUsages.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    [Flags]\n    public enum MethodTaskItemUsages\n    {\n        TaskList = 1,\n        ContextMenu = 2\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Module.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class Module : IServiceProvider, IDisposable\n    {\n        protected static readonly Version FxVersion10 = new Version(\"1.0\");\n        protected static readonly Version FxVersion11 = new Version(\"1.1\");\n        protected static readonly Version FxVersion20 = new Version(\"2.0\");\n        protected static readonly Version FxVersionNotRequired = new Version();\n        private IServiceProvider _serviceProvider;\n\n        protected virtual void Dispose()\n        {\n            _serviceProvider = null;\n            ModuleInfo = null;\n        }\n\n        protected virtual object GetService(Type serviceType)\n        {\n            return _serviceProvider.GetService(serviceType);\n        }\n\n        internal protected virtual void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            _serviceProvider = serviceProvider;\n            ModuleInfo = moduleInfo;\n        }\n\n        internal void TestInitialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo)\n        {\n            Initialize(serviceProvider, moduleInfo);\n        }\n\n        protected virtual bool IsPageEnabled(ModulePageInfo pageInfo)\n        {\n            return pageInfo.IsEnabled;\n        }\n\n        void IDisposable.Dispose()\n        {\n            Dispose();\n        }\n\n        object IServiceProvider.GetService(Type serviceType)\n        {\n            return GetService(serviceType);\n        }\n\n        public virtual Version MinimumFrameworkVersion\n        {\n            get { return FxVersionNotRequired; }\n        }\n\n        public ModuleInfo ModuleInfo { get; private set; }\n\n        public virtual TaskListCollection Tasks\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ModuleHomepageAttribute.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ModuleHomepageAttribute : Attribute\n    {\n        public static bool IsHomepage(\n            IModulePage modulePage\n            )\n        {\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ModuleListPageFilter.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ModuleListPageFilter\n    {\n        public ModuleListPageFilter(string description)\n            : this(description, false)\n        { }\n\n        public ModuleListPageFilter(string description, bool canRemove)\n        {\n            Description = description;\n            CanRemove = canRemove;\n        }\n\n        public bool CanRemove { get; }\n        public string Description { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ModuleListPageGrouping.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    [Serializable]\n    public sealed class ModuleListPageGrouping\n    {\n        public ModuleListPageGrouping(string name, string text)\n        {\n            if (name == null)\n            {\n                throw new ArgumentNullException(\"name\");\n            }\n\n            if (text == null)\n            {\n                throw new ArgumentNullException(\"text\");\n            }\n\n            Name = name;\n            Text = text;\n        }\n\n        public override bool Equals(Object obj)\n        {\n            var second = obj as ModuleListPageGrouping;\n            return second != null && (string.Equals(Name, second.Name) && string.Equals(Text, second.Text));\n        }\n\n        public override int GetHashCode()\n        {\n            return Name.GetHashCode() + Text.GetHashCode();\n        }\n\n        public override string ToString()\n        {\n            return Text;\n        }\n\n        public string Name { get; }\n        public string Text { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ModuleListPageSearchField.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ModuleListPageSearchField\n    {\n        public ModuleListPageSearchField(\n            string name,\n            string text\n            )\n        {\n            Name = name;\n            Text = text;\n        }\n\n        public override string ToString()\n        {\n            return null;\n        }\n\n        public string Name { get; }\n        public string Text { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ModuleListPageSearchOptions.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ModuleListPageSearchOptions\n    {\n        public ModuleListPageSearchOptions()\n            : this(string.Empty)\n        { }\n\n        public ModuleListPageSearchOptions(\n            string text\n            ) : this(text, null)\n        { }\n\n        public ModuleListPageSearchOptions(\n            string text,\n            ModuleListPageSearchField field\n            )\n        {\n            Text = text;\n            Field = field;\n        }\n\n        public ModuleListPageSearchField Field { get; }\n        public bool ShowAll { get; }\n        public string Text { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ModuleListPageViewModes.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    [Flags]\n    public enum ModuleListPageViewModes\n    {\n        Details = 1,\n        Icons = 2,\n        Tiles = 4,\n        List = 8\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ModulePageIdentifierAttribute.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ModulePageIdentifierAttribute : Attribute\n    {\n        public ModulePageIdentifierAttribute(\n            string guid\n            )\n        {\n            Guid = new Guid(guid);\n        }\n\n        public Guid Guid { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ModulePageInfo.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class ModulePageInfo\n    {\n        public ModulePageInfo(Module associatedModule, Type pageType, string title)\n            : this(associatedModule, pageType, title, string.Empty)\n        {\n        }\n\n        public ModulePageInfo(Module associatedModule, Type pageType, string title, string description)\n            : this(associatedModule, pageType, title, description, null, null)\n        {\n        }\n\n        public ModulePageInfo(Module associatedModule, Type pageType, string title, string description, object smallImage, object largeImage)\n            : this(associatedModule, pageType, title, description, smallImage, largeImage, string.Empty)\n        {\n        }\n\n        public ModulePageInfo(Module associatedModule, Type pageType, string title, string description, object smallImage, object largeImage, string longDescription)\n        {\n            AssociatedModule = associatedModule;\n            PageType = pageType;\n            Title = title;\n            Description = description;\n            SmallImage = smallImage;\n            LargeImage = largeImage;\n            LongDescription = longDescription;\n        }\n\n        public override bool Equals(object obj)\n        {\n            var second = obj as ModulePageInfo;\n            return second != null && (PageType == second.PageType && AssociatedModule == second.AssociatedModule);\n        }\n\n        public override int GetHashCode()\n        {\n            return PageType.GetHashCode();\n        }\n\n        public Module AssociatedModule { get; }\n        public string Description { get; }\n\n        public bool IsEnabled\n        {\n            get { return true; }\n        }\n\n        public object LargeImage { get; }\n        public string LongDescription { get; }\n        public Type PageType { get; }\n        public object SmallImage { get; }\n        public string Title { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ModuleServiceProxy.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Resources;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class ModuleServiceProxy\n    {\n        public static string GetErrorInformation(\n            Exception ex,\n            ResourceManager resourceManager,\n            out string errorText,\n            out string errorMessage\n            )\n        {\n            errorText = string.Empty;\n            errorMessage = string.Empty;\n            return null;\n        }\n\n        protected Object Invoke(\n            string methodName,\n            params Object[] parameters\n            )\n        {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/NavigationEventArgs.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class NavigationEventArgs : EventArgs\n    {\n        public NavigationEventArgs(\n            NavigationItem newItem,\n            NavigationItem oldItem,\n            bool isNew\n            )\n        {\n            NewItem = newItem;\n            OldItem = oldItem;\n            IsNew = isNew;\n        }\n\n        public bool IsNew { get; }\n        public NavigationItem NewItem { get; }\n        public NavigationItem OldItem { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/NavigationEventHandler.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public delegate void NavigationEventHandler(\n        Object sender,\n        NavigationEventArgs e\n        );\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/NavigationItem.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class NavigationItem : IDisposable\n    {\n        private IModulePage _page;\n\n        public NavigationItem(Connection connection, ManagementConfigurationPath configurationPath, Type pageType, object navigationData)\n        {\n            Connection = connection;\n            ConfigurationPath = configurationPath;\n            PageType = pageType;\n            NavigationData = navigationData;\n        }\n\n        public ManagementConfigurationPath ConfigurationPath { get; }\n        public Connection Connection { get; private set; }\n\n        public bool IsPageCreated\n        {\n            get { return _page != null; }\n        }\n\n        public object NavigationData { get; }\n\n        public IModulePage Page\n        {\n            get { return _page ?? (_page = (IModulePage)Activator.CreateInstance(PageType)); }\n            internal set { _page = value; }\n        }\n\n        public Type PageType { get; }\n        public IDictionary UserData { get; }\n\n        void IDisposable.Dispose()\n        {\n            Connection = null;\n            Page = null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/PreferencesStore.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class PreferencesStore\n    {\n        public bool ContainsValue(\n            string name\n            )\n        {\n            return false;\n        }\n\n        public bool GetValue(\n            string name,\n            bool defaultValue\n            )\n        {\n            return false;\n        }\n\n        public int GetValue(\n            string name,\n            int defaultValue\n            )\n        {\n            return 0;\n        }\n\n        public string GetValue(\n            string name,\n            string defaultValue\n            )\n        {\n            return null;\n        }\n\n        public void Reset() { }\n        public void ResetValue(\n            string name\n            )\n        { }\n\n        public void SetValue(\n            string name,\n            bool value,\n            bool defaultValue\n            )\n        { }\n\n        public void SetValue(\n            string name,\n            int value,\n            int defaultValue\n            )\n        { }\n\n        public void SetValue(\n            string name,\n            string value,\n            string defaultValue\n            )\n        { }\n\n        public bool IsEmpty { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/PropertyGridObject.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\nusing Microsoft.Web.Management.Client.Win32;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class PropertyGridObject : ICustomTypeDescriptor\n    {\n        protected PropertyGridObject(\n            ModulePropertiesPage page\n            ) : this(page, false)\n        { }\n\n        protected PropertyGridObject(\n            ModulePropertiesPage page,\n            bool readOnly\n            )\n        {\n            Page = page;\n            ReadOnly = readOnly;\n        }\n\n        protected DisplayNameAttribute GetDisplayNameAttribute(\n            string friendlyName,\n            string configPropertyName\n            )\n        {\n            return null;\n        }\n\n        protected virtual PropertyDescriptorCollection GetProperties(\n            Attribute[] attributes\n            )\n        {\n            return null;\n        }\n\n        AttributeCollection ICustomTypeDescriptor.GetAttributes()\n        {\n            throw new NotImplementedException();\n        }\n\n        string ICustomTypeDescriptor.GetClassName()\n        {\n            throw new NotImplementedException();\n        }\n\n        string ICustomTypeDescriptor.GetComponentName()\n        {\n            throw new NotImplementedException();\n        }\n\n        TypeConverter ICustomTypeDescriptor.GetConverter()\n        {\n            throw new NotImplementedException();\n        }\n\n        EventDescriptor ICustomTypeDescriptor.GetDefaultEvent()\n        {\n            throw new NotImplementedException();\n        }\n\n        PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty()\n        {\n            throw new NotImplementedException();\n        }\n\n        object ICustomTypeDescriptor.GetEditor(Type editorBaseType)\n        {\n            throw new NotImplementedException();\n        }\n\n        EventDescriptorCollection ICustomTypeDescriptor.GetEvents()\n        {\n            throw new NotImplementedException();\n        }\n\n        EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes)\n        {\n            throw new NotImplementedException();\n        }\n\n        PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties()\n        {\n            throw new NotImplementedException();\n        }\n\n        PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes)\n        {\n            throw new NotImplementedException();\n        }\n\n        object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected ModulePropertiesPage Page { get; }\n\n        protected bool ReadOnly { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/ProviderConfigurationSettings.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class ProviderConfigurationSettings\n    {\n        public IDictionary GetSettings()\n        {\n            return Settings;\n        }\n\n        public void LoadSettings(\n            string[] parameters\n            )\n        { }\n\n        public abstract bool Validate(\n            out string message\n            );\n\n        public IList ProviderSpecificSettings { get; }\n\n        protected abstract IDictionary Settings { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/TaskItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class TaskItem\n    {\n        protected TaskItem(string text, string category)\n            : this(text, category, string.Empty)\n        { }\n\n        protected TaskItem(string text, string category, string description)\n        {\n            Text = text;\n            Category = category;\n            Description = description;\n        }\n\n        public string Category { get; }\n        public string Description { get; }\n        public bool Enabled { get; set; }\n        public IDictionary Properties { get; }\n        public string Text { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/TaskList.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public abstract class TaskList\n    {\n        public virtual object GetPropertyValue(string propertyName)\n        {\n            return null;\n        }\n\n        public abstract ICollection GetTaskItems();\n\n        public virtual object InvokeMethod(string methodName, object userData)\n        {\n            var type = GetType();\n            dynamic method = type.GetMethod(methodName);\n            return method == null ? null : method.Invoke(this, userData == null ? null : new[] { userData });\n        }\n\n        public virtual void SetPropertyValue(string propertyName, object value)\n        { }\n\n        [Obsolete]\n        public virtual bool IsDirty { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/TaskListCollection.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Microsoft.Web.Management.Client\n{\n    public sealed class TaskListCollection : CollectionBase\n    {\n        private readonly List<TaskList> _inner;\n\n        public TaskListCollection()\n        {\n            _inner = new List<TaskList>();\n        }\n\n        public TaskListCollection(ICollection taskLists)\n            : this()\n        {\n            foreach (TaskList item in taskLists)\n            {\n                Add(item);\n            }\n        }\n\n        public int Add(TaskList taskList)\n        {\n            if (_inner.Contains(taskList))\n            {\n                return -1;\n            }\n\n            _inner.Add(taskList);\n            return _inner.Count - 1;\n        }\n\n        public bool Contains(TaskList taskList)\n        {\n            return _inner.Contains(taskList);\n        }\n\n        public void CopyTo(TaskList[] taskLists, int index)\n        {\n            _inner.CopyTo(taskLists, index);\n        }\n\n        public int IndexOf(TaskList taskList)\n        {\n            return _inner.IndexOf(taskList);\n        }\n\n        public void Insert(int index, TaskList taskList)\n        {\n            _inner.Insert(0, taskList);\n        }\n\n        public void Remove(TaskList taskList)\n        {\n            _inner.Remove(taskList);\n        }\n\n        internal IEnumerable<KeyValuePair<TaskList, ICollection>> GetTaskListItems(IServiceProvider serviceProvider)\n        {\n            return _inner.Select(item => new KeyValuePair<TaskList, ICollection>(item, item.GetTaskItems()));\n        }\n\n        public TaskList this[int index]\n        {\n            get { return _inner[index]; }\n            set { _inner[index] = value; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/BaseForm.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Resources;\nusing System.Windows.Forms;\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n#if DESIGN\n    public class BaseForm : Form\n#else\n    public abstract class BaseForm : Form\n#endif\n    {\n#if DESIGN\n        public BaseForm() { }\n#endif\n        protected BaseForm(IServiceProvider serviceProvider)\n        {\n            ServiceProvider = serviceProvider;\n        }\n\n        protected virtual void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n            var service = (IManagementUIService)ServiceProvider.GetService(typeof(IManagementUIService));\n            service.ShowError(ex, string.Empty, Text, false);\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            ServiceProvider = null;\n        }\n\n        protected internal new object GetService(Type serviceType)\n        {\n            return ServiceProvider.GetService(serviceType);\n        }\n\n        protected override void OnActivated(EventArgs e)\n        {\n            base.OnActivated(e);\n        }\n\n        protected override void OnHelpRequested(HelpEventArgs hevent)\n        {\n            base.OnHelpRequested(hevent);\n        }\n\n        protected virtual void OnInitialActivated(EventArgs e)\n        {\n        }\n\n        protected void ShowError(Exception exception, string message, bool isWarning)\n        {\n            var service = (IManagementUIService)ServiceProvider.GetService(typeof(IManagementUIService));\n            service.ShowError(exception, message, Text, isWarning);\n        }\n\n        protected virtual void ShowHelp()\n        {\n        }\n\n        protected void ShowMessage(string message)\n        {\n            var service = (IManagementUIService)ServiceProvider.GetService(typeof(IManagementUIService));\n            service.ShowMessage(message, Text);\n        }\n\n        protected DialogResult ShowMessage(string message, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)\n        {\n            var service = (IManagementUIService)ServiceProvider.GetService(typeof(IManagementUIService));\n            return service.ShowMessage(message, Text, buttons, icon, defaultButton);\n        }\n\n        protected new virtual void Update()\n        {\n            base.Update();\n        }\n\n        protected override void WndProc(ref Message m)\n        {\n            base.WndProc(ref m);\n        }\n\n        protected virtual bool CanShowHelp { get; } = true;\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        protected internal IServiceProvider ServiceProvider { get; private set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/BaseTaskForm.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\nusing System.Resources;\nusing System.Windows.Forms;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n#if DESIGN\n    public class BaseTaskForm : DialogForm\n#else\n    public abstract class BaseTaskForm : DialogForm\n#endif\n    {\n#if DESIGN\n        public BaseTaskForm() { }\n#endif\n        protected BaseTaskForm(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        {\n        }\n\n        protected void CancelAsyncTask()\n        {\n        }\n\n        protected override void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n        }\n\n        protected void InvalidateTask(bool progressGradientOnly)\n        {\n        }\n\n        protected override void OnClosing(CancelEventArgs e)\n        {\n        }\n\n        protected void SetButtonsPanel(Control buttons)\n        {\n        }\n\n        protected void SetContent(Control content)\n        {\n        }\n\n        protected void StartAsyncTask(DoWorkEventHandler doWorkHandler,\n            RunWorkerCompletedEventHandler workCompletedHandler)\n        {\n        }\n\n        protected void StartAsyncTask(\n            DoWorkEventHandler doWorkHandler,\n            RunWorkerCompletedEventHandler workCompletedHandler,\n            MethodInvoker cancelTaskHandler)\n        {\n        }\n\n        protected void StartAsyncTask(\n            DoWorkEventHandler doWorkHandler,\n            RunWorkerCompletedEventHandler workCompletedHandler,\n            MethodInvoker cancelTaskHandler,\n            Object argument)\n        {\n        }\n\n        protected virtual void StartTaskProgress()\n        {\n        }\n\n        protected virtual void StopTaskProgress()\n        {\n        }\n\n        protected bool BackgroundJobRunning\n        {\n            get { return false; }\n        }\n\n        protected virtual int BorderMargin\n        {\n            get { return 0; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/DialogForm.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Windows.Forms;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n#if DESIGN\n    public class DialogForm : BaseForm\n#else\n    public abstract class DialogForm : BaseForm\n#endif\n    {\n#if DESIGN\n        public DialogForm()\n        {\n            StartPosition = FormStartPosition.CenterParent;\n            FormBorderStyle = FormBorderStyle.FixedDialog;\n            ShowInTaskbar = false;\n            ShowIcon = false;\n            HelpButton = true;\n            MaximizeBox = false;\n            MinimizeBox = false;\n        }\n#endif\n\n        protected DialogForm(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        {\n            StartPosition = FormStartPosition.CenterParent;\n            FormBorderStyle = FormBorderStyle.FixedDialog;\n            ShowInTaskbar = false;\n            ShowIcon = false;\n            HelpButton = true;\n            MaximizeBox = false;\n            MinimizeBox = false;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/IManagementUIService.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Drawing;\nusing System.Windows.Forms;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public interface IManagementUIService\n    {\n        void ShowContextMenu(Point location);\n\n        DialogResult ShowDialog(DialogForm form);\n\n        void ShowError(Exception exception, string message, string caption, bool isWarning);\n\n        void ShowMessage(string text, string caption);\n\n        DialogResult ShowMessage(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon);\n\n        DialogResult ShowMessage(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton);\n\n        Object StartProgress(string text, MethodInvoker cancelMethod);\n\n        void StopProgress(Object token);\n\n        void Update();\n\n        ManagementUIColorTable Colors { get; }\n        IWin32Window DialogOwner { get; }\n        bool RightToLeftLayout { get; }\n        IDictionary Styles { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ListPageListView.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Windows.Forms;\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public class ListPageListView : ListView\n    {\n        protected override void OnCreateControl()\n        {\n            base.OnCreateControl();\n        }\n\n        public void ShowSortColumn(ColumnHeader column, SortOrder sortOrder)\n        {\n        }\n\n        protected override void WndProc(ref Message m)\n        { }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public override ContextMenuStrip ContextMenuStrip { get; set; }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public new View View\n        {\n            get\n            {\n                return base.View;\n            }\n            set\n            {\n                base.View = value;\n                // TODO:\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ManagementGroupBox.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Windows.Forms;\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public class ManagementGroupBox : GroupBox\n    {\n        protected override void OnRightToLeftChanged(\n            EventArgs e\n            )\n        { }\n\n        protected override CreateParams CreateParams { get; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool RightToLeftLayout { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ManagementPanel.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Windows.Forms;\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public class ManagementPanel : Panel\n    {\n        protected override void OnRightToLeftChanged(\n            EventArgs e\n            )\n        { }\n\n        protected override CreateParams CreateParams { get; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool RightToLeftLayout { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ManagementTabPage.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Windows.Forms;\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public class ManagementTabPage : TabPage\n    {\n        protected override void OnRightToLeftChanged(\n            EventArgs e\n            )\n        { }\n\n        protected override CreateParams CreateParams { get; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool RightToLeftLayout { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ManagementUIColorTable.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Drawing;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public abstract class ManagementUIColorTable\n\n    {\n        public abstract Color CommandBarBorder { get; }\n        public abstract Color CommandBarButtonPressed { get; }\n        public abstract Color CommandBarButtonSelected { get; }\n        public abstract Color CommandBarDragHandle { get; }\n        public abstract Color CommandBarDragHandleShadow { get; }\n        public abstract Color CommandBarGradientBegin { get; }\n        public abstract Color CommandBarGradientEnd { get; }\n        public abstract Color CommandBarGradientMiddle { get; }\n        public abstract Color CommandBarSeparatorDark { get; }\n        public abstract Color CommandBarSeparatorLight { get; }\n        public abstract Color ContentBackgroundGradientBegin { get; }\n        public abstract Color ContentBackgroundGradientEnd { get; }\n        public abstract Color ContentBorder { get; }\n        public abstract Color Hyperlink { get; }\n        public abstract Color HyperlinkPressed { get; }\n        public abstract Color ImageMarginGradientBegin { get; }\n        public abstract Color ImageMarginGradientEnd { get; }\n        public abstract Color ImageMarginGradientMiddle { get; }\n        public abstract Color MenuBarGradientBegin { get; }\n        public abstract Color MenuBarGradientEnd { get; }\n        public abstract Color MenuBorder { get; }\n        public abstract Color OverflowButtonGradientBegin { get; }\n        public abstract Color OverflowButtonGradientEnd { get; }\n        public abstract Color PaddingBackColor { get; }\n        public abstract Color TaskFormProgressDark { get; }\n        public abstract Color TaskFormProgressLight { get; }\n        public abstract Color TaskPanelDisabled { get; }\n        public abstract Color TaskSectionHeader { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/MethodTaskItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Drawing;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public sealed class MethodTaskItem : TaskItem\n    {\n        public MethodTaskItem(string methodName, string text, string category)\n            : this(methodName, text, category, string.Empty)\n        { }\n\n        public MethodTaskItem(string methodName, string text, string category, string description)\n            : this(methodName, text, category, description, null)\n        { }\n\n        public MethodTaskItem(string methodName, string text, string category, string description, Image image)\n            : this(methodName, text, category, description, image, null)\n        { }\n\n        public MethodTaskItem(string methodName, string text, string category, string description, Image image, object userData)\n            : base(text, category, description)\n        {\n            MethodName = methodName;\n            Image = image;\n            UserData = userData;\n            Usage = MethodTaskItemUsages.TaskList;\n        }\n\n        public bool CausesNavigation { get; set; }\n        public Image Image { get; }\n        public string MethodName { get; }\n        public MethodTaskItemUsages Usage { get; set; }\n        public object UserData { get; }\n\n        public static MethodTaskItem CreateSeparator()\n        {\n            return new MethodTaskItem(string.Empty, \"-\", string.Empty);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ModuleDialogPage.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Reflection;\nusing System.Windows.Forms;\nusing Microsoft.Web.Management.Properties;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n#if DESIGN\n    public class ModuleDialogPage : ModulePage\n#else\n    public abstract class ModuleDialogPage : ModulePage\n#endif\n    {\n        private sealed class DialogTaskList : TaskList\n        {\n            private readonly ModuleDialogPage _owner;\n\n            public DialogTaskList(ModuleDialogPage owner)\n            {\n                _owner = owner;\n            }\n\n            public bool AppliedChanges { get; set; }\n\n            public override ICollection GetTaskItems()\n            {\n                const MethodTaskItemUsages usage = MethodTaskItemUsages.ContextMenu | MethodTaskItemUsages.TaskList;\n                var result = new ArrayList\n                {\n                    new MethodTaskItem(\"ApplyChanges\", \"Apply\", string.Empty, string.Empty, Resources.apply_16)\n                    {\n                        Usage = usage,\n                        Enabled = _owner.HasChanges && _owner.CanApplyChanges\n                    },\n                    new MethodTaskItem(\"CancelChanges\", \"Cancel\", string.Empty, string.Empty, Resources.cancel_16)\n                    {\n                        Usage = usage,\n                        Enabled = _owner.HasChanges\n                    }\n                };\n\n                return result.ToArray(typeof(TaskItem)) as TaskItem[];\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void ApplyChanges()\n            {\n                _owner.ApplyChanges();\n            }\n\n            [Obfuscation(Exclude = true)]\n            public void CancelChanges()\n            {\n                _owner.CancelChanges();\n            }\n        }\n\n        private bool _showDirtyPageAlert;\n        private TaskList _dialogTaskList;\n        private DialogTaskList _taskList;\n\n        protected ModuleDialogPage()\n        {\n        }\n\n#if DESIGN\n        protected internal virtual bool ApplyChanges()\n        {\n            throw new NotImplementedException();\n        }\n\n        protected internal virtual void CancelChanges()\n        {\n            throw new NotImplementedException();\n        }\n\n#else\n        internal protected abstract bool ApplyChanges();\n        internal protected abstract void CancelChanges();\n#endif\n        protected override void OnDeactivating(CancelEventArgs e)\n        {\n        }\n\n        protected virtual void OnRefresh()\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override sealed void Refresh()\n        {\n            if (_dialogTaskList != null)\n            {\n                ((DialogTaskList)_dialogTaskList).AppliedChanges = false;\n            }\n\n            _showDirtyPageAlert = false;\n            OnRefresh();\n        }\n\n#if DESIGN\n        internal protected virtual bool CanApplyChanges { get; }\n#else\n        internal protected abstract bool CanApplyChanges { get; }\n#endif\n        protected virtual string ChangesSavedMessage { get; }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                if (_taskList == null)\n                {\n                    _taskList = new DialogTaskList(this);\n                }\n\n                base.Tasks.Add(_taskList);\n                return base.Tasks;\n            }\n        }\n\n        private void InitializeComponent()\n        {\n            this.SuspendLayout();\n            // \n            // ModuleDialogPage\n            // \n            this.Name = \"ModuleDialogPage\";\n            this.Size = new System.Drawing.Size(648, 516);\n            this.ResumeLayout(false);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ModuleDialogPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ModuleListPage.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Windows.Forms;\nusing System.ComponentModel;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n#if DESIGN\n    public class ModuleListPage : ModulePage\n#else\n    public abstract class ModuleListPage : ModulePage\n#endif\n    {\n        protected ModuleListPage()\n        { }\n\n        protected ModuleListPage(ListPageListView listView)\n        {\n            ListView = listView;\n        }\n\n        protected static readonly ModuleListPageGrouping EmptyGrouping;\n        private object _pageHeader;\n\n        protected void ClearFilter()\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n            ListView = null;\n            ListViewContainer = null;\n        }\n\n        protected virtual ListViewGroup[] GetGroups(ModuleListPageGrouping grouping)\n        {\n            return null;\n        }\n\n        protected virtual IComparer GetItemComparer(ColumnHeader sortColumn, SortOrder sortOrder)\n        {\n            return null;\n        }\n\n        protected void Group(ModuleListPageGrouping grouping)\n        {\n            ListViewGroup[] groups = null;\n            if (grouping != null)\n            {\n                groups = GetGroups(grouping);\n            }\n\n            ListView.BeginUpdate();\n            if ((grouping == null || grouping.Equals(EmptyGrouping))\n                || (groups == null || groups.Length == 0))\n            {\n                ListView.ShowGroups = false;\n            }\n            else\n            {\n                ListView.ShowGroups = true;\n                for (int i = ListView.Groups.Count - 1; i >= 0; i--)\n                {\n                    ListView.Groups.RemoveAt(i);\n                }\n\n                ListView.Groups.AddRange(groups);\n                OnGroup(grouping);\n            }\n\n            ListView.EndUpdate();\n            SelectedGrouping = grouping;\n            //_pageHeader.UpdateGroupingCommands();\n        }\n#if DESIGN\n        protected virtual void InitializeListPage()\n        {\n            throw new NotImplementedException();\n        }\n#else\n        protected abstract void InitializeListPage();\n#endif\n        protected override void LoadPreferences(PreferencesStore store)\n        { }\n\n        protected override void OnActivated(bool initialActivation)\n        { }\n\n        protected virtual void OnClearFilter()\n        { }\n\n        protected virtual void OnGroup(ModuleListPageGrouping grouping)\n        {\n            throw new InvalidOperationException();\n        }\n\n        protected virtual void OnSearch(ModuleListPageSearchOptions options)\n        { }\n\n        protected virtual void OnSetView() { }\n\n        protected void RefreshFilter() { }\n\n        protected void RefreshSearchPanel() { }\n\n        protected override void SavePreferences(PreferencesStore store)\n        { }\n\n        protected void SetView(ModuleListPageViewModes mode)\n        {\n            switch (mode)\n            {\n                case ModuleListPageViewModes.Details:\n                    this.ListView.View = View.Details;\n                    break;\n                case ModuleListPageViewModes.Icons:\n                    this.ListView.View = View.LargeIcon;\n                    break;\n                case ModuleListPageViewModes.Tiles:\n                    this.ListView.View = View.Tile;\n                    break;\n                case ModuleListPageViewModes.List:\n                    this.ListView.View = View.List;\n                    break;\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(mode), mode, null);\n            }\n\n            this.OnSetView();\n        }\n\n        protected void Sort()\n        {\n            this.ListView.Sort();\n        }\n\n        public void Sort(ColumnHeader column, SortOrder sortOrder)\n        {\n            var comparer = GetItemComparer(column, sortOrder);\n            this.ListView.ListViewItemSorter = comparer;\n            this.ListView.Sort();\n        }\n\n        protected virtual bool CanInstantSearch { get; }\n        protected virtual bool CanSearch { get; }\n        protected virtual ModuleListPageGrouping DefaultGrouping { get; }\n        protected virtual ModuleListPageViewModes DefaultViewMode { get; }\n        protected virtual ModuleListPageFilter Filter { get; }\n\n        public virtual ModuleListPageGrouping[] Groupings\n        {\n            get\n            {\n                return null;\n            }\n        }\n\n        protected ImageList LargeImageList\n        {\n            get\n            {\n                return this.ListView.LargeImageList;\n            }\n        }\n\n        protected ListView ListView { get; private set; }\n        protected Control ListViewContainer { get; private set; }\n        protected virtual ModuleListPageSearchField[] SearchFields { get; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public ModuleListPageGrouping SelectedGrouping { get; set; }\n\n        protected ImageList SmallImageList\n        {\n            get\n            {\n                return this.ListView.SmallImageList;\n            }\n        }\n\n        public ColumnHeader SortColumn\n        {\n            get\n            {\n                // TODO:\n                return this.ListView.Columns[0];\n            }\n        }\n\n        public SortOrder SortOrder\n        {\n            get\n            {\n                return this.ListView.Sorting;\n            }\n        }\n\n        public virtual ModuleListPageViewModes ViewModes { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ModulePage.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ComponentModel;\nusing System.Resources;\nusing System.Windows.Forms;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    using System.Text;\n\n#if DESIGN\n    public class ModulePage : UserControl, IModulePage\n#else\n    public abstract class ModulePage : ContainerControl,\n        IModulePage\n#endif\n    {\n        private TaskListCollection _tasks;\n\n        protected ModulePage()\n        {\n            SetScrollState(1, false);\n            SetStyle(ControlStyles.SupportsTransparentBackColor, true);\n        }\n\n        protected ModuleServiceProxy CreateProxy(Type proxyType)\n        {\n            return null;\n        }\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager)\n        {\n        }\n\n        protected void DisplayErrorMessage(string errorText, string errorMessage)\n        {\n        }\n\n        protected void DisplayErrorMessage(Exception ex, ResourceManager resourceManager, string caption)\n        {\n        }\n\n        protected void DisplayErrorMessage(string errorText, string errorMessage, string caption)\n        {\n        }\n\n        protected override void Dispose(bool disposing)\n        {\n        }\n\n        protected bool EditProperties(\n            IPropertyEditingUser user,\n            Object targetObject,\n            string titleText,\n            string helpText)\n        {\n            return false;\n        }\n\n        protected bool EditProperties(\n            IPropertyEditingUser user,\n            Object targetObject,\n            string titleText,\n            string helpText,\n            EventHandler showHelp)\n        {\n            return false;\n        }\n\n        protected Type GetPageType(string moduleName)\n        {\n            return null;\n        }\n\n        protected static string GetScopeStatusSummary(Connection connection, string configurationPath, string locationSubPath)\n        {\n            return null;\n        }\n\n        protected new Object GetService(Type serviceType)\n        {\n            return ServiceProvider.GetService(serviceType);\n        }\n\n        protected virtual void Initialize(Object navigationData)\n        {\n        }\n\n        protected virtual void LoadPreferences(PreferencesStore store)\n        {\n        }\n\n        protected bool Navigate(Type pageType)\n        {\n            return Navigate(pageType, null);\n        }\n\n        protected bool Navigate(Type pageType, object navigationData)\n        {\n            var service = (INavigationService)GetService(typeof(INavigationService));\n            service.Navigate(null, null, pageType, navigationData);\n            return false;\n        }\n\n        protected virtual void OnActivated(bool initialActivation)\n        {\n        }\n\n        protected virtual void OnDeactivating(CancelEventArgs e)\n        {\n        }\n\n        protected new virtual void Refresh()\n        {\n            base.Refresh();\n        }\n\n        protected virtual void SavePreferences(PreferencesStore store)\n        {\n        }\n\n        protected DialogResult ShowDialog(DialogForm form)\n        {\n            return form.ShowDialog();\n        }\n\n        protected void ShowError(Exception exception, bool isWarning)\n        {\n            ShowError(exception, null, isWarning);\n        }\n\n        protected void ShowError(string message, bool isWarning)\n        {\n            ShowError(null, message, isWarning);\n        }\n\n        protected void ShowError(Exception exception, string message, bool isWarning)\n        {\n            ShowError(exception, message, isWarning, Text);\n        }\n\n        protected void ShowError(Exception exception, string message, bool isWarning, string caption)\n        {\n            var display = new StringBuilder(message ?? \"There was an error while performing this operation.\");\n            if (exception != null)\n            {\n                display\n                    .AppendLine()\n                    .AppendLine()\n                    .AppendLine(\"Details:\")\n                    .AppendLine()\n                    .Append(exception.Message);\n                if (exception.Data.Contains(\"oob\"))\n                {\n                    display\n                        .AppendLine()\n                        .AppendLine(\"More Information:\")\n                        .AppendLine()\n                        .Append($\"{exception.Data[\"oob\"]} might be missing. Download and install it from {exception.Data[\"link\"]}.\");\n                }\n            }\n\n            ShowMessage(\n                display.ToString(),\n                MessageBoxButtons.OK,\n                isWarning ? MessageBoxIcon.Warning : MessageBoxIcon.Error,\n                caption);\n        }\n\n        protected virtual bool ShowHelp()\n        {\n            return false;\n        }\n\n        protected void ShowMessage(string text)\n        {\n            ShowMessage(text, Text);\n        }\n\n        protected void ShowMessage(string text, string caption)\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            dialog.ShowMessage(text, caption);\n        }\n\n        protected DialogResult ShowMessage(string text, MessageBoxButtons buttons, MessageBoxIcon icon)\n        {\n            return ShowMessage(text, buttons, icon, Text);\n        }\n\n        protected DialogResult ShowMessage(string text, MessageBoxButtons buttons, MessageBoxIcon icon, string caption)\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            return dialog.ShowMessage(text, caption, buttons, icon);\n        }\n\n        protected DialogResult ShowMessage(string text, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)\n        {\n            return ShowMessage(text, buttons, icon, defaultButton, Text);\n        }\n\n        protected DialogResult ShowMessage(\n            string text,\n            MessageBoxButtons buttons,\n            MessageBoxIcon icon,\n            MessageBoxDefaultButton defaultButton,\n            string caption)\n        {\n            var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));\n            return dialog.ShowMessage(text, caption, buttons, icon, defaultButton);\n        }\n\n        protected virtual bool ShowOnlineHelp()\n        {\n            return false;\n        }\n\n        protected void StartAsyncTask(\n            string progressText,\n            DoWorkEventHandler doWorkHandler,\n            RunWorkerCompletedEventHandler workCompletedHandler)\n        {\n        }\n\n        protected void StartAsyncTask(\n            string progressText,\n            DoWorkEventHandler doWorkHandler,\n            RunWorkerCompletedEventHandler workCompletedHandler,\n            MethodInvoker cancelTaskHandler)\n        {\n        }\n\n        protected void StartAsyncTask(string progressText,\n            DoWorkEventHandler doWorkHandler,\n            RunWorkerCompletedEventHandler workCompletedHandler,\n            MethodInvoker cancelTaskHandler,\n            Object argument)\n        {\n        }\n\n        protected void StartProgress(string text, MethodInvoker cancelMethod)\n        {\n        }\n\n        protected void StopProgress()\n        {\n        }\n\n        protected new void Update()\n        {\n        }\n\n        void IModulePage.Initialize(Module module, ModulePageInfo pageInfo, object navigationData)\n        {\n            Module = module;\n            PageInfo = pageInfo;\n            Text = this.PageInfo?.Title;\n            try\n            {\n                Initialize(navigationData);\n            }\n            catch (Exception ex)\n            {\n                ShowError(ex, false);\n            }\n        }\n\n        void IModulePage.OnActivated(bool initialActivation)\n        {\n            OnActivated(initialActivation);\n        }\n\n        void IModulePage.OnDeactivating(CancelEventArgs e)\n        {\n            OnDeactivating(e);\n        }\n\n        void IModulePage.Refresh()\n        {\n            Refresh();\n        }\n\n        bool IModulePage.ShowHelp()\n        {\n            return ShowHelp();\n        }\n\n        protected virtual bool CanRefresh\n        {\n            get { return false; }\n        }\n\n        protected Connection Connection { get; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public override ContextMenuStrip ContextMenuStrip { get; set; }\n        protected override CreateParams CreateParams\n        {\n            get\n            {\n                CreateParams createParams = base.CreateParams;\n                createParams.ExStyle |= 65536;\n                createParams.ExStyle &= -513;\n                createParams.Style &= -8388609;\n                createParams.Style |= 8388608;\n                return createParams;\n            }\n        }\n\n        protected virtual bool HasChanges { get; }\n        public bool InProgress { get; }\n        public virtual new Padding Margin { get; }\n        protected Module Module { get; private set; }\n        protected ModulePageInfo PageInfo { get; private set; }\n        protected virtual Guid PreferenceKey { get; }\n        protected virtual bool ReadOnly { get; }\n        protected virtual string ReadOnlyDescription { get; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool RightToLeftLayout { get; set; }\n        public virtual string ScopeStatusSummary { get; }\n\n        protected IServiceProvider ServiceProvider\n        {\n            get { return Module; }\n        }\n\n        protected virtual bool ShowTaskList\n        {\n            get { return true; }\n        }\n\n        protected virtual TaskListCollection Tasks\n        {\n            get { return _tasks ?? (_tasks = new TaskListCollection()); }\n        }\n\n        bool IModulePage.CanRefresh\n        {\n            get { return CanRefresh; }\n        }\n\n        bool IModulePage.HasChanges\n        {\n            get { return HasChanges; }\n        }\n\n        ModulePageInfo IModulePage.PageInfo\n        {\n            get { return PageInfo; }\n        }\n\n        TaskListCollection IModulePage.Tasks\n        {\n            get { return Tasks; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ModulePropertiesPage.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n#if DESIGN\n    public class ModulePropertiesPage : ModuleDialogPage\n#else\n    public abstract class ModulePropertiesPage : ModuleDialogPage\n#endif\n    {\n        protected internal override bool ApplyChanges()\n        {\n            return false;\n        }\n\n        protected internal override void CancelChanges() { }\n\n        protected void ClearDirty() { }\n#if DESIGN\n        protected virtual PropertyBag GetProperties()\n        {\n            throw new NotImplementedException();\n        }\n#else\n        protected abstract PropertyBag GetProperties();\n#endif\n        protected void GetSettings() { }\n\n        protected override void LoadPreferences(PreferencesStore store)\n        { }\n\n        protected override void OnActivated(bool initialActivation)\n        { }\n\n        protected virtual void OnException(Exception ex)\n        { }\n\n        protected override void OnRefresh() { }\n#if DESIGN\n        protected virtual void ProcessProperties(PropertyBag properties)\n        {\n            throw new NotImplementedException();\n        }\n#else\n        protected abstract void ProcessProperties(PropertyBag properties);\n#endif\n\n        protected override void SavePreferences(PreferencesStore store)\n        { }\n\n#if DESIGN\n        protected virtual PropertyBag UpdateProperties(out bool updateSuccessful)\n        {\n            throw new NotImplementedException();\n        }\n#else\n        protected abstract PropertyBag UpdateProperties(out bool updateSuccessful);\n#endif\n        protected virtual bool ConfigNamesPresent { get; }\n        protected override bool HasChanges { get; }\n        protected object TargetObject { get; set; }\n\n        protected override TaskListCollection Tasks\n        {\n            get\n            {\n                return base.Tasks;\n            }\n        }\n\n        private void InitializeComponent()\n        {\n            this.SuspendLayout();\n            // \n            // ModulePropertiesPage\n            // \n            this.Name = \"ModulePropertiesPage\";\n            this.Size = new System.Drawing.Size(570, 527);\n            this.ResumeLayout(false);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/ModulePropertiesPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/SortableListView.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Windows.Forms;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public class SortableListView : UserControl\n    {\n        public SortableListView(\n            List<ColumnHeader> columnHeaders\n            )\n        { }\n\n        public void AddItems(\n            List<ListViewItem> itemsList\n            )\n        { }\n\n        protected override void Dispose(\n            bool disposing\n            )\n        {\n        }\n\n        protected virtual IComparer GetItemComparer(\n            ColumnHeader sortColumn,\n            SortOrder sortOrder\n            )\n        {\n            return null;\n        }\n\n        public void SetItems(\n            List<ListViewItem> itemsList\n            )\n        { }\n\n        public void ShowSortColumn(\n            ColumnHeader column,\n            SortOrder sortOrder\n            )\n        { }\n\n        protected void Sort() { }\n\n        public void Sort(\n            ColumnHeader column,\n            SortOrder sortOrder\n            )\n        { }\n\n        public ListView ListView { get; }\n        public ColumnHeader SortColumn { get; }\n        public SortOrder SortOrder { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/TaskForm.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n#if DESIGN\n    public class TaskForm : BaseTaskForm\n#else\n    public abstract class TaskForm : BaseTaskForm\n#endif\n    {\n#if DESIGN\n        public TaskForm() { }\n#endif\n        protected TaskForm(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        {\n        }\n#if DESIGN\n        protected virtual void OnAccept()\n        {\n            throw new NotImplementedException();\n        }\n#else\n        protected abstract void OnAccept();\n#endif\n        protected virtual void OnCancel()\n        {\n            Close();\n        }\n\n        protected override void StartTaskProgress()\n        {\n        }\n\n        protected override void StopTaskProgress()\n        {\n        }\n\n        protected override sealed void Update()\n        {\n        }\n\n        protected void UpdateTaskForm()\n        {\n        }\n\n        protected virtual bool CanAccept\n        {\n            get { return true; }\n        }\n\n        protected virtual bool CanCancel\n        {\n            get { return true; }\n        }\n\n        protected virtual bool IsCancellable\n        {\n            get { return false; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/TextTaskItem.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Drawing;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public sealed class TextTaskItem : TaskItem\n    {\n        public TextTaskItem(string text, string category)\n            : this(text, category, false)\n        { }\n\n        public TextTaskItem(string text, string category, bool isHeading)\n            : this(text, category, isHeading, null)\n        { }\n\n        public TextTaskItem(string text, string category, bool isHeading, Image image)\n            : base(text, category)\n        {\n            IsHeading = isHeading;\n            Image = image;\n        }\n\n        public Image Image { get; }\n        public bool IsHeading { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/WaitCursor.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n    public sealed class WaitCursor : IDisposable\n    {\n        public void Dispose()\n        { }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/WizardForm.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Windows.Forms;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n#if DESIGN\n    public class WizardForm : BaseTaskForm\n#else\n    public abstract class WizardForm : BaseTaskForm\n#endif\n    {\n        private WizardPage[] _pages;\n        private Panel _panel1;\n        private Label _txtTitle;\n        private Panel _pnlContainer;\n        private Button _btnCancel;\n        private Button _btnFinish;\n        private Button _btnNext;\n        private Button _btnPrevious;\n        private ProgressBar _pbMain;\n        private int _index;\n        private PictureBox _pictureBox1;\n        private Image _taskGlyph;\n\n#if DESIGN\n        public WizardForm()\n        {\n            InitializeComponent();\n        }\n#endif\n\n        protected WizardForm(IServiceProvider serviceProvider)\n            : base(serviceProvider)\n        {\n            InitializeComponent();\n        }\n\n        protected virtual void CancelWizard()\n        {\n            Close();\n        }\n\n        private void btnPrevious_Click(object sender, EventArgs e)\n        {\n            NavigateToPreviousPage();\n            Update();\n        }\n\n        private void btnNext_Click(object sender, EventArgs e)\n        {\n            StartTaskProgress();\n            _btnPrevious.Enabled = false;\n            _btnNext.Enabled = false;\n            _btnFinish.Enabled = false;\n            _btnCancel.Focus();\n            NavigateToNextPage();\n            StopTaskProgress();\n            Update();\n        }\n\n#if DESIGN\n        protected virtual void CompleteWizard() { }\n        protected virtual WizardPage[] GetWizardPages()\n        {\n            return new WizardPage[0];\n        }\n#else\n        protected abstract void CompleteWizard();\n        protected abstract WizardPage[] GetWizardPages();\n#endif\n\n        protected void NavigateToNextPage()\n        {\n            if (!CurrentPage.OnNext())\n            {\n                return;\n            }\n\n            OnPageChanging(EventArgs.Empty);\n            var next = CurrentPage.NextPage;\n            next.SetPreviousPage(CurrentPage);\n            _index = this.Pages.IndexOf(next);\n            OnPageChanged(EventArgs.Empty);\n        }\n\n        protected void NavigateToPreviousPage()\n        {\n            if (!CurrentPage.OnPrevious())\n            {\n                return;\n            }\n\n            OnPageChanging(EventArgs.Empty);\n            var previous = this.CurrentPage.PreviousPage;\n            _index = this.Pages.IndexOf(previous);\n            OnPageChanged(EventArgs.Empty);\n        }\n\n        protected override void OnClosing(CancelEventArgs e)\n        {\n            base.OnClosing(e);\n        }\n\n        protected override void OnInitialActivated(EventArgs e)\n        {\n            base.OnInitialActivated(e);\n        }\n\n        protected override void OnLoad(EventArgs e)\n        {\n            base.OnLoad(e);\n            _index = StartPageIndex;\n            OnPageChanged(e);\n            Update();\n        }\n\n        protected virtual void OnPageChanged(EventArgs e)\n        {\n            if (CurrentPage == null)\n            {\n                return;\n            }\n\n            _pnlContainer.Controls.Clear();\n            _pnlContainer.Controls.Add(CurrentPage);\n            CurrentPage.Activate();\n            _txtTitle.Text = CurrentPage.Caption;\n        }\n\n        protected virtual void OnPageChanging(EventArgs e)\n        { }\n\n        protected override void OnPaint(PaintEventArgs e)\n        { }\n\n        protected virtual bool ShouldShowPage(WizardPage page)\n        {\n            return false;\n        }\n\n        protected override void ShowHelp()\n        {\n            throw new NotImplementedException();\n        }\n\n        protected override void StartTaskProgress()\n        {\n            _pbMain.Visible = true;\n        }\n\n        protected override void StopTaskProgress()\n        {\n            _pbMain.Visible = false;\n        }\n\n        protected override sealed void Update()\n        {\n            if (CurrentPage == null)\n            {\n                return;\n            }\n\n            _btnNext.Enabled = CurrentPage.CanNavigateNext && _index + 1 != _pages.Length;\n            _btnPrevious.Enabled = CurrentPage.CanNavigatePrevious;\n            _btnFinish.Enabled = CanComplete;\n            if (_btnFinish.Enabled)\n            {\n                AcceptButton = _btnFinish;\n            }\n            else if (_btnNext.Enabled)\n            {\n                AcceptButton = _btnNext;\n            }\n            else\n            {\n                AcceptButton = null;\n            }\n        }\n\n        protected internal void UpdateWizard()\n        {\n            Update();\n        }\n\n        protected override int BorderMargin { get { return 0; } }\n        protected virtual bool CanCancel { get { return true; } }\n\n        protected virtual bool CanComplete\n        {\n            get { return _pages.Length == _index + 1 && CurrentPage.CanNavigateNext; }\n        }\n\n        protected override bool CanShowHelp\n        {\n            get { return CurrentPage.CanShowHelp; }\n        }\n\n        protected WizardPage CurrentPage\n        {\n            get\n            {\n                return Pages.Count == 0 ? null : (WizardPage)Pages[_index];\n            }\n        }\n\n        protected virtual bool IsCancellable { get { return false; } }\n\n        protected internal IList Pages\n        {\n            get { return _pages ?? (_pages = GetWizardPages()); }\n        }\n\n        protected virtual int StartPageIndex { get { return 0; } }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string TaskCaption { get; set; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public BorderStyle TaskCaptionBorderStyle { get; set; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public string TaskDescription { get; set; }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Image TaskGlyph\n        {\n            get\n            {\n                return _taskGlyph;\n            }\n\n            set\n            {\n                _taskGlyph = value;\n                _pictureBox1.Image = value;\n            }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Color TaskProgressEndColor { get; set; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public int TaskProgressGradientSpeed { get; set; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public int TaskProgressScrollSpeed { get; set; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public Color TaskProgressStartColor { get; set; }\n        protected internal virtual object WizardData { get; }\n\n        private void InitializeComponent()\n        {\n            _panel1 = new Panel();\n            _pictureBox1 = new PictureBox();\n            _txtTitle = new Label();\n            _pnlContainer = new Panel();\n            _btnCancel = new Button();\n            _btnFinish = new Button();\n            _btnNext = new Button();\n            _btnPrevious = new Button();\n            _pbMain = new ProgressBar();\n            _panel1.SuspendLayout();\n            ((ISupportInitialize)(_pictureBox1)).BeginInit();\n            SuspendLayout();\n            // \n            // panel1\n            // \n            _panel1.Anchor = (AnchorStyles.Top | AnchorStyles.Left)\n                            | AnchorStyles.Right;\n            _panel1.BackColor = Color.White;\n            _panel1.Controls.Add(_pictureBox1);\n            _panel1.Controls.Add(_txtTitle);\n            _panel1.Location = new Point(-1, 6);\n            _panel1.Name = \"panel1\";\n            _panel1.Size = new Size(670, 65);\n            _panel1.TabIndex = 10;\n            // \n            // pictureBox1\n            // \n            _pictureBox1.Location = new Point(10, 10);\n            _pictureBox1.Name = \"pictureBox1\";\n            _pictureBox1.Size = new Size(48, 48);\n            _pictureBox1.TabIndex = 1;\n            _pictureBox1.TabStop = false;\n            // \n            // txtTitle\n            // \n            _txtTitle.AutoSize = true;\n            _txtTitle.Font = new Font(\"Microsoft Sans Serif\", 14.25F, FontStyle.Regular, GraphicsUnit.Point, 0);\n            _txtTitle.Location = new Point(87, 22);\n            _txtTitle.Name = \"txtTitle\";\n            _txtTitle.Size = new Size(0, 24);\n            _txtTitle.TabIndex = 2;\n            // \n            // pnlContainer\n            // \n            _pnlContainer.Location = new Point(-1, 66);\n            _pnlContainer.Name = \"pnlContainer\";\n            _pnlContainer.Size = new Size(670, 380);\n            _pnlContainer.TabIndex = 15;\n            // \n            // btnCancel\n            // \n            _btnCancel.DialogResult = DialogResult.Cancel;\n            _btnCancel.Location = new Point(571, 452);\n            _btnCancel.Name = \"btnCancel\";\n            _btnCancel.Size = new Size(85, 23);\n            _btnCancel.TabIndex = 14;\n            _btnCancel.Text = \"Cancel\";\n            _btnCancel.UseVisualStyleBackColor = true;\n            // \n            // btnFinish\n            // \n            _btnFinish.DialogResult = DialogResult.OK;\n            _btnFinish.Enabled = false;\n            _btnFinish.Location = new Point(480, 452);\n            _btnFinish.Name = \"btnFinish\";\n            _btnFinish.Size = new Size(85, 23);\n            _btnFinish.TabIndex = 13;\n            _btnFinish.Text = \"Finish\";\n            _btnFinish.UseVisualStyleBackColor = true;\n            _btnFinish.Click += btnFinish_Click;\n            // \n            // btnNext\n            // \n            _btnNext.Enabled = false;\n            _btnNext.Location = new Point(389, 452);\n            _btnNext.Name = \"btnNext\";\n            _btnNext.Size = new Size(85, 23);\n            _btnNext.TabIndex = 12;\n            _btnNext.Text = \"Next\";\n            _btnNext.UseVisualStyleBackColor = true;\n            _btnNext.Click += btnNext_Click;\n            // \n            // btnPrevious\n            // \n            _btnPrevious.Enabled = false;\n            _btnPrevious.Location = new Point(298, 452);\n            _btnPrevious.Name = \"btnPrevious\";\n            _btnPrevious.Size = new Size(85, 23);\n            _btnPrevious.TabIndex = 11;\n            _btnPrevious.Text = \"Previous\";\n            _btnPrevious.UseVisualStyleBackColor = true;\n            _btnPrevious.Click += btnPrevious_Click;\n            // \n            // pbMain\n            // \n            _pbMain.Location = new Point(-1, 72);\n            _pbMain.Name = \"pbMain\";\n            _pbMain.Size = new Size(670, 4);\n            _pbMain.Style = ProgressBarStyle.Marquee;\n            _pbMain.TabIndex = 16;\n            _pbMain.Visible = false;\n            // \n            // WizardForm\n            // \n            ClientSize = new Size(669, 481);\n            Controls.Add(_pbMain);\n            Controls.Add(_panel1);\n            Controls.Add(_pnlContainer);\n            Controls.Add(_btnCancel);\n            Controls.Add(_btnFinish);\n            Controls.Add(_btnNext);\n            Controls.Add(_btnPrevious);\n            HelpButton = true;\n            MaximizeBox = false;\n            MinimizeBox = false;\n            Name = \"WizardForm\";\n            ShowIcon = false;\n            ShowInTaskbar = false;\n            HelpRequested += WizardForm_HelpRequested;\n            _panel1.ResumeLayout(false);\n            _panel1.PerformLayout();\n            ((ISupportInitialize)(_pictureBox1)).EndInit();\n            ResumeLayout(false);\n        }\n\n        private void btnFinish_Click(object sender, EventArgs e)\n        {\n            CompleteWizard();\n        }\n\n        private void WizardForm_HelpRequested(object sender, HelpEventArgs hlpevent)\n        {\n            ShowHelp();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/WizardForm.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/WizardPage.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Windows.Forms;\n\nnamespace Microsoft.Web.Management.Client.Win32\n{\n#if DESIGN\n    public class WizardPage : UserControl\n#else\n    public abstract class WizardPage : UserControl\n#endif\n    {\n        protected internal virtual void Activate()\n        {\n        }\n\n        protected override object GetService(Type serviceType)\n        {\n            return Wizard?.GetService(serviceType) ?? base.GetService(serviceType);\n        }\n\n        public virtual bool OnNext()\n        {\n            return NextPage != null;\n        }\n\n        public virtual bool OnPrevious()\n        {\n            return PreviousPage != null;\n        }\n\n        protected override void OnRightToLeftChanged(EventArgs e)\n        {\n            base.OnRightToLeftChanged(e);\n        }\n\n        internal void SetNextPage(WizardPage page)\n        {\n            NextPage = page;\n        }\n\n        internal void SetPreviousPage(WizardPage page)\n        {\n            PreviousPage = page;\n        }\n\n        internal void SetWizard(WizardForm wizard)\n        {\n            Wizard = wizard;\n        }\n\n        protected void ShowError(Exception exception, string message, bool isWarning)\n        {\n            var service = (IManagementUIService)Wizard.GetService(typeof(IManagementUIService));\n            service.ShowError(exception, message, Caption, isWarning);\n        }\n\n        protected internal virtual void ShowHelp()\n        {\n        }\n\n        protected void ShowMessage(string text)\n        {\n            var service = (IManagementUIService)Wizard.GetService(typeof(IManagementUIService));\n            service.ShowMessage(text, Caption);\n        }\n\n        protected DialogResult ShowMessage(string text, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)\n        {\n            var service = (IManagementUIService)Wizard.GetService(typeof(IManagementUIService));\n            return service.ShowMessage(text, Caption, buttons, icon, defaultButton);\n        }\n\n        protected void UpdateWizard()\n        {\n            Wizard.UpdateWizard();\n        }\n\n        protected internal virtual bool CanNavigateNext\n        {\n            get { return NextPage != null; }\n        }\n\n        protected internal virtual bool CanNavigatePrevious\n        {\n            get { return PreviousPage != null; }\n        }\n        protected internal virtual bool CanShowHelp { get; }\n\n        [Category(\"Appearance\"), DefaultValue(\"\")]\n        public string Caption { get; set; }\n\n        protected override CreateParams CreateParams\n        {\n            get { return base.CreateParams; }\n        }\n\n        [Category(\"Appearance\"), DefaultValue(\"\")]\n        public string Description { get; set; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        protected internal virtual WizardPage NextPage { get; private set; }\n\n        protected IList Pages\n        {\n            get { return Wizard.Pages; }\n        }\n\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        protected internal virtual WizardPage PreviousPage { get; private set; }\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]\n        public bool RightToLeftLayout { get; set; }\n\n        protected IServiceProvider ServiceProvider\n        {\n            get { return Wizard.ServiceProvider; }\n        }\n\n        protected WizardForm Wizard { get; private set; }\n\n        protected object WizardData\n        {\n            get { return Wizard.WizardData; }\n        }\n\n        private void InitializeComponent()\n        {\n            SuspendLayout();\n            // \n            // WizardPage\n            // \n            Name = \"WizardPage\";\n            Size = new Size(593, 452);\n            ResumeLayout(false);\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Client/Win32/WizardPage.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Microsoft.Web.Management/Features/Administrators/AdministratorsModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Features.Administrators\n{\n    public sealed class AdministratorsModuleProvider : ModuleProvider\n    {\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return null;\n        }\n\n        public override bool SupportsScope(ManagementScope scope)\n        {\n            return false;\n        }\n\n        public override string FriendlyName { get; }\n        public override Type ServiceType { get; }\n        public override bool SupportsDelegation { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Features/Delegation/DelegationModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Features.Delegation\n{\n    public sealed class DelegationModuleProvider : SimpleDelegatedModuleProvider\n    {\n        public override ModuleDefinition GetModuleDefinition(IManagementContext context)\n        {\n            return null;\n        }\n\n        public override bool SupportsScope(\n            ManagementScope scope\n            )\n        {\n            return scope == ManagementScope.Server;\n        }\n\n        public override string FriendlyName { get; }\n        public override Type ServiceType { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Features/Services/ServiceModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Features.Services\n{\n    public sealed class ServiceModuleProvider : ModuleProvider\n\n    {\n        public override ModuleDefinition GetModuleDefinition(\n    IManagementContext context\n)\n        { throw new NotImplementedException(); }\n\n        public override bool SupportsScope(\n    ManagementScope scope\n)\n        { return scope == ManagementScope.Server; }\n\n        public override Type ServiceType { get { throw new NotImplementedException(); } }\n        public override bool SupportsDelegation { get { throw new NotImplementedException(); } }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Host/ConnectionManager.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.ObjectModel;\nusing Microsoft.Web.Management.Client;\n\nnamespace Microsoft.Web.Management.Host\n{\n    public sealed class ConnectionManager : IConnectionManager,\n        IDisposable\n    {\n        public ConnectionManager(\n    IServiceProvider serviceProvider,\n    bool supportsMultipleConnections\n)\n        { }\n\n        ReadOnlyCollection<Connection> IConnectionManager.Connections\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        bool IConnectionManager.IsDirty\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        ConnectionInfoCollection IConnectionManager.RegisteredConnections\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        bool IConnectionManager.SupportsMultipleConnections\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        event ConnectionEventHandler IConnectionManager.ConnectionActivated\n        {\n            add\n            {\n                throw new NotImplementedException();\n            }\n\n            remove\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        event ConnectionEventHandler IConnectionManager.ConnectionDeactivated\n        {\n            add\n            {\n                throw new NotImplementedException();\n            }\n\n            remove\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        event EventHandler IConnectionManager.ConnectionRefreshed\n        {\n            add\n            {\n                throw new NotImplementedException();\n            }\n\n            remove\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        event ConnectionEventHandler IConnectionManager.ConnectionRefreshing\n        {\n            add\n            {\n                throw new NotImplementedException();\n            }\n\n            remove\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        event EventHandler IConnectionManager.IsDirtyChanged\n        {\n            add\n            {\n                throw new NotImplementedException();\n            }\n\n            remove\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        Connection IConnectionManager.ActivateConnection(ConnectionInfo connection)\n        {\n            throw new NotImplementedException();\n        }\n\n        void IConnectionManager.DeactivateConnection(Connection connection)\n        {\n            throw new NotImplementedException();\n        }\n\n        void IDisposable.Dispose()\n        {\n            throw new NotImplementedException();\n        }\n\n        ConnectionActiveState IConnectionManager.GetConnectionActiveState(ConnectionInfo connection)\n        {\n            throw new NotImplementedException();\n        }\n\n        bool IConnectionManager.PerformLogin(ConnectionInfo connection)\n        {\n            throw new NotImplementedException();\n        }\n\n        bool IConnectionManager.RefreshConnection(Connection connection)\n        {\n            throw new NotImplementedException();\n        }\n\n        void IConnectionManager.Save()\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Host/IManagementHost.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing Microsoft.Web.Management.Client;\nusing Microsoft.Web.Management.Server;\n\nnamespace Microsoft.Web.Management.Host\n{\n    public interface IManagementHost\n    {\n        Object CreateBuilder(\n            Type builderType\n            );\n\n        Module CreateHostModule();\n\n        IManagementContext CreateManagementContext();\n\n        string ApplicationName { get; }\n        string Name { get; }\n        string Title { get; }\n        IDictionary UserData { get; }\n        Type UserInterfaceTechnologyType { get; }\n        Version Version { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Host/Shell/ShellApplication.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Host.Shell\n{\n    public abstract class ShellApplication : IServiceProvider\n    {\n        public abstract ShellComponents CreateComponents();\n\n        public void Execute(\n            bool localDevelopmentMode,\n            bool resetPreferences,\n            bool resetPreferencesNoLaunch\n            )\n        { }\n\n        protected virtual Object GetService(\n    Type serviceType\n)\n        {\n            return null;\n        }\n\n        object IServiceProvider.GetService(Type serviceType)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Host/Shell/ShellComponents.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Management.Client;\n\nnamespace Microsoft.Web.Management.Host.Shell\n{\n    public sealed class ShellComponents\n    {\n        public TaskList HelpMenu { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Microsoft.Web.Management.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <ProjectGuid>{17E994B0-5A31-4F79-9796-83A45E87853D}</ProjectGuid>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Microsoft.Web.Management</RootNamespace>\n    <AssemblyName>Microsoft.Web.Management</AssemblyName>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n  </PropertyGroup>\n\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'\">\n    <DefineConstants>$(DefineConstants)TRACE;DESIGN</DefineConstants>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"System.ServiceProcess.ServiceController\" Version=\"9.0.5\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.Web.Administration\\Microsoft.Web.Administration.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Configuration.AppHostFileProvider\\Microsoft.Web.Configuration.AppHostFileProvider.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Microsoft.Web.Management/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2014-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"17e994b0-5a31-4f79-9796-83a45e87853d\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n\n[assembly: InternalsVisibleTo(\"JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"JexusManager.Shared, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n[assembly: InternalsVisibleTo(\"Tests.JexusManager, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f7030532c52524\"\n+ \"993841a0d09420340f3814e1b65473851bdcd18815510b035a2ae9ecee69c4cd2d9e4d6e6d5fbf\"\n+ \"a564e86c4a4cddc9597619a31c060846ebb2e99511a0323ff82b1ebd95d6a4912502945f0e769f\"\n+ \"190a69a439dbfb969ebad72a6f7e2e047907da4a7b9c08c6e98d5f1be8b8cafaf3eb978914059a\"\n+ \"245d4bc1\")]\n"
  },
  {
    "path": "Microsoft.Web.Management/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.0\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nusing System.CodeDom.Compiler;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Diagnostics.CodeAnalysis;\nusing System.Drawing;\nusing System.Globalization;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\n\nnamespace Microsoft.Web.Management.Properties {\n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [GeneratedCode(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [DebuggerNonUserCode()]\n    [CompilerGenerated()]\n    internal class Resources {\n        \n        private static ResourceManager resourceMan;\n        \n        private static CultureInfo resourceCulture;\n        \n        [SuppressMessage(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [EditorBrowsable(EditorBrowsableState.Advanced)]\n        internal static ResourceManager ResourceManager {\n            get {\n                if (ReferenceEquals(resourceMan, null)) {\n                    ResourceManager temp = new ResourceManager(\"Microsoft.Web.Management.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [EditorBrowsable(EditorBrowsableState.Advanced)]\n        internal static CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static Bitmap apply_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"apply_16\", resourceCulture);\n                return ((Bitmap)(obj));\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\n        /// </summary>\n        internal static Bitmap cancel_16 {\n            get {\n                object obj = ResourceManager.GetObject(\"cancel_16\", resourceCulture);\n                return ((Bitmap)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"apply_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\apply_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"cancel_16\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\cancel_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "Microsoft.Web.Management/Server/AdministrationModule.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class AdministrationModule\n    {\n        public AdministrationModule(string name)\n        {\n            Name = name;\n        }\n\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/AdministrationModuleCollection.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class AdministrationModuleCollection : IEnumerable<AdministrationModule>\n    {\n        public void Add(string moduleName)\n        { }\n\n        public void Clear()\n        { }\n\n        public IEnumerator<AdministrationModule> GetEnumerator()\n        {\n            throw new NotImplementedException();\n        }\n\n        public bool Remove(string moduleName)\n        { throw new NotImplementedException(); }\n\n        public int Count { get; }\n\n        public AdministrationModule this[int index]\n        { get { throw new NotImplementedException(); } }\n\n        public AdministrationModule this[string name]\n        { get { throw new NotImplementedException(); } }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/AdministrationModuleProvider.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class AdministrationModuleProvider\n    {\n        public string Name { get; }\n        public string Type { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ApplicationManagementUnit.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public class ApplicationManagementUnit : ManagementUnit\n    {\n        protected override ManagementFrameworkVersion GetAssociatedFrameworkVersion()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Object[] GetTypeInformation(\n            string baseTypeName,\n            bool includeNonpublicTypes,\n            Type generatorType\n            )\n        { throw new NotImplementedException(); }\n\n        public string ApplicationPath { get; }\n        public override ManagementScope Scope { get; }\n        public string SiteName { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/BindingInfo.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.ApplicationHost;\nusing Microsoft.Web.Administration;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public class BindingInfo\n    {\n        public BindingInfo(\n            ISiteBinding binding\n            )\n        { }\n\n        public override string ToString()\n        {\n            throw new NotImplementedException();\n        }\n\n        public string BindingInformation { get; }\n        public string HostName { get; }\n        public string IPAddress { get; }\n        public string Port { get; }\n        public string Protocol { get; }\n        public SslFlags SslFlags { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ConfigurationAuthenticationModuleService.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Administration;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public abstract class ConfigurationAuthenticationModuleService : ModuleService,\n        IAuthenticationModuleService\n    {\n        protected ConfigurationAttribute GetEnabledProperty(\n            ConfigurationElement element\n            )\n        {\n            return null;\n        }\n\n        protected ConfigurationSection GetSection(\n            Type type\n            )\n        {\n            return null;\n        }\n\n        protected abstract string EnabledPropertyName { get; }\n        protected abstract string SectionName { get; }\n\n        bool IAuthenticationModuleService.IsEnabled()\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ConfigurationModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public abstract class ConfigurationModuleProvider : SimpleDelegatedModuleProvider\n    {\n        public override DelegationState GetChildDelegationState(string path)\n        {\n            return null;\n        }\n\n        public override DelegationState[] GetSupportedChildDelegationStates(string path)\n        {\n            return null;\n        }\n\n        public override void SetChildDelegationState(string path, DelegationState state)\n        { }\n\n        protected abstract string ConfigurationSectionName { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ConfigurationPathType.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public enum ConfigurationPathType\n    {\n        Server = 0,\n        Site = 1,\n        Application = 2,\n        Folder = 3,\n        File = 4\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/DelegationState.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public class DelegationState\n    {\n        public DelegationState(\n            string mode,\n            string text,\n            string description\n            )\n        { }\n\n        public string Description { get; }\n        public string Mode { get; }\n        public string Text { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/IAuthenticationModuleService.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public interface IAuthenticationModuleService\n    {\n        bool IsEnabled();\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/IGlobalConfigurationProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public interface IGlobalConfigurationProvider\n    {\n        string GetFrameworkConfigurationPath(\n            ManagementFrameworkVersion version\n            );\n\n        ReadOnlyCollection<ManagementFrameworkVersion> FrameworkVersions { get; }\n        string ServerConfigurationPath { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/IManagementContext.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Security.Principal;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public interface IManagementContext\n    {\n        Version ClientClrVersion { get; }\n        string ClientName { get; }\n        string ClientUserInterfaceTechnology { get; }\n        Version ClientVersion { get; }\n        bool IsLocalConnection { get; }\n        IPrincipal User { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ISiteStatusProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\nusing Microsoft.Web.Administration;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public interface ISiteStatusProvider\n    {\n        ObjectState GetSiteStatus(\n            Site site,\n            out string errorMessage\n            );\n\n        IEnumerable<string> SupportedProtocols { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/InvalidPasswordReason.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public enum InvalidPasswordReason\n    {\n        NoError = 0,\n        PasswordTooShort = 1,\n        PasswordTooLong = 2,\n        PasswordNotComplexEnough = 3,\n        PasswordFilterError = 4,\n        UnknownError = 5\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementAdministrationConfiguration.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ManagementAdministrationConfiguration\n    {\n        public ManagementAdministrationConfiguration GetDelegatedScope(\n            string path\n            )\n        { throw new NotImplementedException(); }\n\n        public bool AllowUntrustedProviders { get; }\n        public IDictionary<string, AdministrationModuleProvider> ModuleProviders { get; }\n        public AdministrationModuleCollection Modules { get; }\n        public string Path { get; }\n        public ICollection TrustedProviders { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementAuthentication.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public static class ManagementAuthentication\n    {\n        public static bool AuthenticateUser(\n            string userName,\n            string password\n            )\n        {\n            return Provider.AuthenticateUser(userName, password);\n        }\n\n        public static ManagementUserInfo CreateUser(\n            string userName,\n            string password\n            )\n        {\n            return Provider.CreateUser(userName, password);\n        }\n\n        public static void DeleteUser(\n            string userName\n            )\n        {\n            Provider.DeleteUser(userName);\n        }\n\n        public static void DisableUser(\n            string userName\n            )\n        { Provider.DisableUser(userName); }\n\n        public static void EnableUser(\n            string userName\n            )\n        {\n            Provider.EnableUser(userName);\n        }\n\n        public static ManagementUserInfo GetUser(\n            string userName\n            )\n        {\n            return Provider.GetUser(userName);\n        }\n\n        public static ManagementUserInfoCollection GetUsers(\n            int itemIndex,\n            int itemsPerPage\n            )\n        {\n            return Provider.GetUsers(itemIndex, itemsPerPage);\n        }\n\n        public static InvalidPasswordReason IsPasswordStrongEnough(\n            string password\n            )\n        {\n            return Provider.IsPasswordStrongEnough(password);\n        }\n\n        public static void SetPassword(\n            string userName,\n            string password\n            )\n        { Provider.SetPassword(userName, password); }\n\n        public static ManagementAuthenticationProvider Provider { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementAuthenticationProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\nusing System.Security.Principal;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public abstract class ManagementAuthenticationProvider\n    {\n        public abstract bool AuthenticateUser(\n            string userName,\n            string password\n            );\n\n        protected virtual IPrincipal CreatePrincipal(\n            string userName\n            )\n        {\n            return null;\n        }\n\n        public abstract ManagementUserInfo CreateUser(\n            string userName,\n            string password\n            );\n\n        public abstract void DeleteUser(\n            string userName\n            );\n\n        public abstract void DisableUser(\n            string userName\n            );\n\n        public abstract void EnableUser(\n            string userName\n            );\n\n        public abstract ManagementUserInfo GetUser(\n            string userName\n            );\n\n        public abstract ManagementUserInfoCollection GetUsers(\n            int itemIndex,\n            int itemsPerPage\n            );\n\n        public virtual void Initialize(\n            IDictionary<string, string> args\n            )\n        { }\n\n        public abstract InvalidPasswordReason IsPasswordStrongEnough(\n            string password\n            );\n\n        public abstract void SetPassword(\n            string userName,\n            string newPassword\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementAuthorization.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Security.Principal;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public static class ManagementAuthorization\n    {\n        public static ManagementAuthorizationInfoCollection GetAuthorizedUsers(\n            string configurationPath,\n            bool includeChildren,\n            int itemIndex,\n            int itemsPerPage\n            )\n        {\n            return Provider.GetAuthorizedUsers(configurationPath, includeChildren, itemIndex, itemsPerPage);\n        }\n\n        public static string[] GetConfigurationPaths(\n            IPrincipal principal,\n            string baseConfigurationPath\n            )\n        {\n            return Provider.GetConfigurationPaths(principal, baseConfigurationPath);\n        }\n\n        public static ManagementAuthorizationInfo Grant(\n            string name,\n            string configurationPath,\n            bool isRole\n            )\n        {\n            return Provider.Grant(name, configurationPath, isRole);\n        }\n\n        public static bool IsAuthorized(\n            IPrincipal principal,\n            string configurationPath\n            )\n        {\n            return Provider.IsAuthorized(principal, configurationPath);\n        }\n\n        public static void RenameConfigurationPath(\n            string configurationPath,\n            string newConfigurationPath\n            )\n        {\n            Provider.RenameConfigurationPath(configurationPath, newConfigurationPath);\n        }\n\n        public static void Revoke(\n            string name\n            )\n        {\n            Provider.Revoke(name);\n        }\n\n        public static void Revoke(\n            string name,\n            string configurationPath\n            )\n        { Provider.Revoke(name, configurationPath); }\n\n        public static void RevokeConfigurationPath(\n            string configurationPath\n            )\n        { Provider.RevokeConfigurationPath(configurationPath); }\n\n        public static ManagementAuthorizationProvider Provider { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementAuthorizationInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public class ManagementAuthorizationInfo\n    {\n        public ManagementAuthorizationInfo(\n            string name,\n            string configurationPath,\n            bool isRole\n            )\n        {\n            Name = name;\n            ConfigurationPath = configurationPath;\n            IsRole = isRole;\n        }\n\n        public string ConfigurationPath { get; }\n        public bool IsRole { get; }\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementAuthorizationInfoCollection.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ManagementAuthorizationInfoCollection : Collection<ManagementAuthorizationInfo>\n    {\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementAuthorizationProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\nusing System.Security.Principal;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public abstract class ManagementAuthorizationProvider\n    {\n        public abstract ManagementAuthorizationInfoCollection GetAuthorizedUsers(\n            string configurationPath,\n            bool includeChildren,\n            int itemIndex,\n            int itemsPerPage\n            );\n\n        public abstract string[] GetConfigurationPaths(\n            IPrincipal principal,\n            string baseConfigurationPath\n            );\n\n        public abstract ManagementAuthorizationInfo Grant(\n            string name,\n            string configurationPath,\n            bool isRole\n            );\n\n        public virtual void Initialize(\n            IDictionary<string, string> args\n            )\n        { }\n\n        public abstract bool IsAuthorized(\n            IPrincipal principal,\n            string configurationPath\n            );\n\n        public abstract void RenameConfigurationPath(\n            string configurationPath,\n            string newConfigurationPath\n            );\n\n        public abstract void Revoke(\n            string name\n            );\n\n        public abstract void Revoke(\n            string name,\n            string configurationPath\n            );\n\n        public abstract void RevokeConfigurationPath(\n            string configurationPath\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementConfiguration.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing Microsoft.Web.Administration;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ManagementConfiguration\n    {\n        public ConfigurationSection GetSection(\n            string sectionPath\n            )\n        {\n            return null;\n        }\n\n        public ConfigurationSection GetSection(\n            string sectionPath,\n            Type sectionType\n            )\n        {\n            return null;\n        }\n\n        public ConfigurationSection GetSection(\n            string sectionPath,\n            ManagementConfigurationPath path,\n            bool respectDelegation\n            )\n        {\n            return null;\n        }\n\n        public ConfigurationSection GetSection(\n            string sectionPath,\n            Type sectionType,\n            ManagementConfigurationPath path,\n            bool respectDelegation\n            )\n        {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementConfigurationPath.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ManagementConfigurationPath\n    {\n        public static ManagementConfigurationPath CreateApplicationConfigurationPath(string applicationPath)\n        {\n            return null;\n        }\n\n        public static ManagementConfigurationPath CreateApplicationConfigurationPath(string siteName, string applicationPath)\n        {\n            return null;\n        }\n\n        public static ManagementConfigurationPath CreateFileConfigurationPath(string applicationPath, string filePath)\n        {\n            return null;\n        }\n\n        public static ManagementConfigurationPath CreateFileConfigurationPath(string siteName, string applicationPath, string filePath)\n        {\n            return null;\n        }\n\n        public static ManagementConfigurationPath CreateFolderConfigurationPath(string applicationPath, string folderPath)\n        {\n            return null;\n        }\n\n        public static ManagementConfigurationPath CreateFolderConfigurationPath(string siteName, string applicationPath, string folderPath)\n        {\n            return null;\n        }\n\n        public static ManagementConfigurationPath CreateServerConfigurationPath()\n        {\n            return null;\n        }\n\n        public static ManagementConfigurationPath CreateSiteConfigurationPath(string siteName)\n        {\n            return null;\n        }\n\n        public ICollection<string> GetBindingProtocols(IServiceProvider serviceProvider)\n        {\n            return null;\n        }\n\n        public string GetEffectiveConfigurationPath(ManagementScope scope)\n        {\n            return null;\n        }\n\n        public ManagementFrameworkVersion GetFrameworkVersion(IServiceProvider serviceProvider)\n        {\n            return null;\n        }\n\n        public string GetState()\n        {\n            return null;\n        }\n\n        public bool IsEquivalentScope(ManagementScope scope)\n        {\n            return false;\n        }\n\n        public string ApplicationPath { get; }\n        public string FolderPath { get; }\n        public ConfigurationPathType PathType { get; }\n        public string SiteName { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementContentNavigator.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ManagementContentNavigator : ICloneable\n    {\n        public ManagementContentNavigator Clone()\n        {\n            return null;\n        }\n\n        public static ManagementContentNavigator Create(\n            ManagementUnit managementUnit\n            )\n        {\n            return null;\n        }\n\n        public ManagementContentNavigator[] GetChildren()\n        {\n            return null;\n        }\n\n        public int GetChildrenContainerCount()\n        {\n            return 0;\n        }\n\n        public bool MoveToChild(\n            string name\n            )\n        {\n            return false;\n        }\n\n        public bool MoveToParent()\n        {\n            return false;\n        }\n\n        public bool MoveToPath(\n            string configurationPath\n            )\n        {\n            return false;\n        }\n\n        public bool MoveToRoot()\n        {\n            return false;\n        }\n\n        object ICloneable.Clone()\n        {\n            return Clone();\n        }\n\n        public bool IsApplication { get; }\n        public bool IsFile { get; }\n        public bool IsFolder { get; }\n        public bool IsServer { get; }\n        public bool IsSite { get; }\n        public bool IsValid { get; }\n        public bool IsVirtualDirectory { get; }\n        public DateTime LastModified { get; }\n        public string Name { get; }\n        public string NavigatorPath { get; }\n        public string PhysicalPath { get; }\n        public IDictionary<string, Object> Properties { get; }\n        public long Size { get; }\n        public int State { get; }\n        public string VirtualPath { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementFrameworkVersion.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ManagementFrameworkVersion\n    {\n        public bool IsEqual(string versionIdentifier)\n        {\n            return false;\n        }\n\n        public bool CanManageFrameworkConfiguration { get; }\n        public string FrameworkConfigurationPath { get; }\n        public string Name { get; }\n        public string Text { get; }\n        public Version Version { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementScope.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public enum ManagementScope\n    {\n        Server = 0,\n        Site = 1,\n        Application = 2\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementUnit.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Microsoft.ApplicationHost;\nusing Microsoft.Web.Administration;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public abstract class ManagementUnit\n    {\n        protected virtual WebConfigurationMap CreateConfigurationMap(\n            bool addFrameworkConfiguration\n            )\n        { throw new NotImplementedException(); }\n\n        protected abstract ManagementFrameworkVersion GetAssociatedFrameworkVersion();\n        protected static ReadOnlyCollection<ManagementFrameworkVersion> GetFrameworkVersions(\n            IManagementContext context\n            )\n        { throw new NotImplementedException(); }\n\n        public ICollection<ModuleProvider> GetModuleProviders(\n            Type moduleProviderType\n            )\n        { throw new NotImplementedException(); }\n\n        public ModuleService GetModuleService(\n            string moduleName\n            )\n        { throw new NotImplementedException(); }\n\n        public Object[] GetTypeInformation(\n            string baseTypeName\n            )\n        { throw new NotImplementedException(); }\n        public Object[] GetTypeInformation(\n            string baseTypeName,\n            bool includeNonpublicTypes\n            )\n        { throw new NotImplementedException(); }\n\n        public abstract Object[] GetTypeInformation(\n            string baseTypeName,\n            bool includeNonpublicTypes,\n            Type generatorType\n            );\n\n        public void Update()\n        { throw new NotImplementedException(); }\n\n        public ManagementAdministrationConfiguration Administration { get; }\n        public static AppHostFileProvider AppHostProvider { get; }\n        public ManagementConfiguration Configuration { get; }\n        public WebConfigurationMap ConfigurationMap { get; }\n        public ManagementConfigurationPath ConfigurationPath { get; }\n        public IManagementContext Context { get; }\n        public static string CustomAppHostConfigPath { get; set; }\n        public static bool DynamicRegistrationEnabled { get; }\n        public ManagementFrameworkVersion FrameworkVersion { get; }\n        public bool IsUserServerAdministrator { get; }\n        public static List<IApplicationPool> ReadOnlyAppPools { get; }\n        public static ServerManager ReadOnlyServerManager { get; }\n        public static List<SiteInfo> ReadOnlySites { get; }\n        public abstract ManagementScope Scope { get; }\n        public ServerManager ServerManager { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementUserInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public class ManagementUserInfo\n    {\n        public ManagementUserInfo(\n            string name,\n            bool enabled\n            )\n        {\n            Name = name;\n            Enabled = enabled;\n        }\n\n        public override string ToString()\n        {\n            return null;\n        }\n\n        public bool Enabled { get; }\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ManagementUserInfoCollection.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.ObjectModel;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ManagementUserInfoCollection : Collection<ManagementUserInfo>\n    {\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ModuleDefinition.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ModuleDefinition\n    {\n        public ModuleDefinition(string name, string clientModuleTypeName)\n        {\n            Name = name;\n            ClientModuleTypeName = clientModuleTypeName;\n        }\n\n        public IDictionary Arguments { get; }\n        public string ClientModuleTypeName { get; }\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ModuleInfo.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ModuleInfo\n    {\n        public IDictionary Arguments { get; }\n        public string ClientModuleTypeName { get; }\n        public string Name { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public abstract class ModuleProvider\n    {\n        public virtual DelegationState GetChildDelegationState(string path)\n        {\n            throw new NotImplementedException();\n        }\n\n        public abstract ModuleDefinition GetModuleDefinition(IManagementContext context);\n\n        public virtual DelegationState[] GetSupportedChildDelegationStates(string path)\n        { throw new NotImplementedException(); }\n\n        public virtual void Initialize(string name)\n        {\n            Name = name;\n        }\n\n        public virtual void SetChildDelegationState(string path, DelegationState delegationState)\n        {\n        }\n\n        public abstract bool SupportsScope(ManagementScope scope);\n\n        public virtual string FriendlyName { get; }\n        protected ManagementUnit ManagementUnit { get; }\n        public string Name { get; set; }\n        public abstract Type ServiceType { get; }\n        public virtual bool SupportsDelegation { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ModuleService.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public abstract class ModuleService\n    {\n        protected ModuleService CreateChildService(\n            Type serviceType\n            )\n        { throw new NotImplementedException(); }\n\n        protected void RaiseException(\n            Exception ex\n            )\n        { }\n\n        protected void RaiseException(\n            string resourceName\n            )\n        { }\n\n        protected void RaiseException(\n            string resourceName,\n            string errorMessage\n            )\n        { }\n\n        public IManagementContext Context { get; }\n        protected ManagementUnit ManagementUnit { get; }\n        protected string ModuleName { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ModuleServiceMethodAttribute.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ModuleServiceMethodAttribute : Attribute\n    {\n        public bool PassThrough { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/PropertyBag.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\nusing System.Collections.Specialized;\n#if !NET8_0_OR_GREATER\nusing System.Web.UI;\n#endif\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class PropertyBag : IDictionary\n    {\n        private readonly HybridDictionary _bag;\n        private bool _isReadOnly;\n        private readonly HybridDictionary _modifiedKeys;\n\n        public PropertyBag()\n            : this(false)\n        {\n        }\n\n        public PropertyBag(bool trackState)\n        {\n            _bag = new HybridDictionary();\n            if (trackState)\n            {\n                _modifiedKeys = new HybridDictionary();\n            }\n\n            IsTrackingState = trackState;\n            _isReadOnly = false;\n        }\n\n        public void Add(int key, Object value)\n        {\n            if (key < 0)\n            {\n                throw new ArgumentOutOfRangeException(\"key\");\n            }\n\n            if (_isReadOnly)\n            {\n                throw new InvalidOperationException(\"Cannot modify readonly collection\");\n            }\n\n            _bag.Add(key, value);\n        }\n\n        public PropertyBag Clone()\n        {\n            return null;\n        }\n\n        public PropertyBag Clone(bool readOnly)\n        {\n            return null;\n        }\n\n        public bool Contains(int key)\n        {\n            return _bag.Contains(key);\n        }\n\n        public static PropertyBag CreatePropertyBagFromState(string state)\n        {\n            return CreatePropertyBagFromState(state, false);\n        }\n\n        public static PropertyBag CreatePropertyBagFromState(string state, bool readOnly)\n        {\n#if !NET8_0_OR_GREATER\n            var formatter = new ObjectStateFormatter();\n            var bag = (PropertyBag)formatter.Deserialize(state);\n            if (readOnly)\n            {\n                bag._isReadOnly = true;\n            }\n\n            return bag;\n#endif\n            return null;\n        }\n\n        public string GetState()\n        {\n#if !NET8_0_OR_GREATER\n            var formatter = new ObjectStateFormatter();\n            return formatter.Serialize(this);\n#endif\n            return null;\n        }\n\n        public T GetValue<T>(int index)\n        {\n            return (T)this[index];\n        }\n\n        public T GetValue<T>(int index, T defaultValue)\n        {\n            return Contains(index) ? (T)this[index] : defaultValue;\n        }\n\n        public bool IsModified()\n        {\n            return false;\n        }\n\n        public bool IsModified(int key)\n        {\n            return false;\n        }\n\n        public void Remove(Object key)\n        {\n            if (_isReadOnly)\n            {\n                throw new InvalidOperationException(\"Cannot modify readonly collection\");\n            }\n\n            _bag.Remove(key);\n        }\n\n        object IDictionary.this[object key]\n        {\n            get { return _bag[key]; }\n            set { _bag[key] = value; }\n        }\n\n        bool IDictionary.Contains(object key)\n        {\n            return _bag.Contains(key);\n        }\n\n        void IDictionary.Add(object key, object value)\n        {\n            if (_isReadOnly)\n            {\n                throw new InvalidOperationException(\"Cannot modify readonly collection\");\n            }\n\n            _bag.Add(key, value);\n        }\n\n        void IDictionary.Clear()\n        {\n            if (_isReadOnly)\n            {\n                throw new InvalidOperationException(\"Cannot modify readonly collection\");\n            }\n\n            _bag.Clear();\n        }\n\n        IDictionaryEnumerator IDictionary.GetEnumerator()\n        {\n            return _bag.GetEnumerator();\n        }\n\n        void IDictionary.Remove(object key)\n        {\n            if (_isReadOnly)\n            {\n                throw new InvalidOperationException(\"Cannot modify readonly collection\");\n            }\n\n            _bag.Remove(key);\n        }\n\n        void ICollection.CopyTo(Array array, int index)\n        {\n            _bag.CopyTo(array, index);\n        }\n\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return _bag.GetEnumerator();\n        }\n\n        public int Count\n        {\n            get { return _bag.Count; }\n        }\n\n        public bool IsTrackingState { get; }\n\n        public Object this[int index]\n        {\n            get\n            {\n                if (index < 0)\n                {\n                    throw new ArgumentOutOfRangeException(\"index\");\n                }\n\n                return _bag[index];\n            }\n\n            set\n            {\n                if (index < 0)\n                {\n                    throw new ArgumentOutOfRangeException(\"index\");\n                }\n\n                if (_isReadOnly)\n                {\n                    throw new InvalidOperationException(\"Cannot modify readonly collection\");\n                }\n\n                var oldItem = _bag[index];\n                _bag[index] = value;\n                if (_modifiedKeys != null && !Equals(oldItem, value))\n                {\n                    _modifiedKeys[index] = string.Empty;\n                }\n            }\n        }\n\n        public ICollection Keys\n        {\n            get { return _bag.Keys; }\n        }\n\n        public ICollection ModifiedKeys\n        {\n            get\n            {\n                if (!IsTrackingState)\n                {\n                    throw new InvalidOperationException(\"The state changes are not being tracked\");\n                }\n                return _modifiedKeys.Keys;\n            }\n        }\n\n        public ICollection Values\n        {\n            get { return _bag.Values; }\n        }\n\n        bool IDictionary.IsReadOnly\n        {\n            get { return _isReadOnly; }\n        }\n\n        bool IDictionary.IsFixedSize\n        {\n            get { return _bag.IsFixedSize; }\n        }\n\n        object ICollection.SyncRoot\n        {\n            get { return _bag.SyncRoot; }\n        }\n\n        bool ICollection.IsSynchronized\n        {\n            get { return _bag.IsSynchronized; }\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/ServerManagementUnit.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Collections;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class ServerManagementUnit : ManagementUnit\n    {\n        public ApplicationManagementUnit GetApplication(\n            string siteName,\n            string applicationPath\n            )\n        {\n            return null;\n        }\n\n        public SiteManagementUnit GetSite(\n            string siteName\n            )\n        {\n            return null;\n        }\n\n        protected override ManagementFrameworkVersion GetAssociatedFrameworkVersion()\n        {\n            throw new NotImplementedException();\n        }\n\n        public override Object[] GetTypeInformation(\n            string baseTypeName,\n            bool includeNonpublicTypes,\n            Type generatorType\n            )\n        {\n            return null;\n        }\n\n        public ICollection FrameworkVersions { get; }\n        public string MachineName { get; }\n        public override ManagementScope Scope { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/SimpleDelegatedModuleProvider.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public abstract class SimpleDelegatedModuleProvider : ModuleProvider\n    {\n        public static readonly DelegationState NoneDelegationState;\n        public static readonly DelegationState ParentDelegationState;\n        public static readonly DelegationState ReadOnlyDelegationState;\n        public static readonly DelegationState ReadWriteDelegationState;\n\n        public override DelegationState GetChildDelegationState(\n            string path\n            )\n        {\n            return null;\n        }\n\n        public override DelegationState[] GetSupportedChildDelegationStates(\n            string path\n            )\n        {\n            return null;\n        }\n\n        public override void SetChildDelegationState(\n            string path,\n            DelegationState state\n            )\n        {\n        }\n\n        public override bool SupportsDelegation { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/SiteInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Collections.Generic;\nusing Microsoft.ApplicationHost;\nusing Microsoft.Web.Administration;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public class SiteInfo\n    {\n        public SiteInfo(\n            IAppHostSite site\n            )\n        { }\n        public string ApplicationPool { get; }\n        public string BindingInformation { get; }\n        public List<BindingInfo> Bindings { get; }\n        public uint Id { get; }\n        public string Name { get; }\n        public string PhysicalPath { get; }\n\n        public ObjectState RuntimeState { get; }\n        public bool ServerAutoStart { get; }\n        public ObjectState State { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/SiteManagementUnit.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Microsoft.Web.Management.Server\n{\n    public sealed class SiteManagementUnit : ApplicationManagementUnit\n    {\n        public ApplicationManagementUnit GetApplication(\n            string applicationPath\n            )\n        {\n            return null;\n        }\n\n        public override ManagementScope Scope { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/TypeInformationGenerator.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public abstract class TypeInformationGenerator : MarshalByRefObject\n    {\n        public abstract Object GetTypeInformation(\n            Type type\n            );\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/WebManagementEventLog.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Diagnostics;\n\nnamespace Microsoft.Web.Management.Server\n{\n    public static class WebManagementEventLog\n    {\n        public static void Write(\n            int eventId,\n            string message\n            )\n        { }\n\n        public static void Write(\n            string message,\n            EventLogEntryType entryType,\n            int eventId\n            )\n        { }\n\n        public static void Write(\n            int eventId,\n            string message,\n            string connectionName,\n            string connectionUser,\n            Exception exception\n            )\n        { }\n\n        public static void Write(\n            int eventId,\n            string message,\n            string connectionName,\n            string connectionUser,\n            Exception exception,\n            EventLogEntryType entryType\n            )\n        { }\n\n        public static bool TraceOnly { get; set; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/WebManagementServiceException.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Microsoft.Web.Management.Server\n{\n    [Serializable]\n    public sealed class WebManagementServiceException : Exception\n    {\n        public WebManagementServiceException() { }\n\n        public WebManagementServiceException(\n            string errorMessage\n            )\n        { }\n\n        public WebManagementServiceException(\n            string errorMessage,\n            Exception exception\n            )\n        {\n        }\n\n        public WebManagementServiceException(\n            string resourceName,\n            string errorMessage\n            )\n        {\n        }\n\n        public WebManagementServiceException(\n            string resourceName,\n            string errorMessage,\n            Exception innerException\n            )\n        { }\n\n        public override string ToString()\n        {\n            return null;\n        }\n\n        public string ResourceName { get; }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Server/WebManagementServiceHandler.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Web;\n\nnamespace Microsoft.Web.Management.Server\n{\n#if !NET8_0_OR_GREATER\n    public sealed class WebManagementServiceHandler : IHttpHandler\n    {\n        bool IHttpHandler.IsReusable\n        {\n            get\n            {\n                throw new NotImplementedException();\n            }\n        }\n\n        void IHttpHandler.ProcessRequest(HttpContext context)\n        {\n            throw new NotImplementedException();\n        }\n    }\n#endif\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/Utility/ServiceUtility.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.ServiceProcess;\n\nnamespace Microsoft.Web.Management.Utility\n{\n    public class ServiceUtility\n    {\n        public static ServiceControllerStatus GetServiceStatus(string serviceName)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Microsoft.Web.Management/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Readme.md",
    "content": "Jexus Manager from LeXtudio\n===========================\n\n[![Github All Releases](https://img.shields.io/github/downloads/jexuswebserver/JexusManager/total.svg)](https://github.com/jexuswebserver/JexusManager/releases)\n[![Build status](https://img.shields.io/github/actions/workflow/status/jexuswebserver/JexusManager/dotnetcore.yml?style=flat-square)](https://github.com/jexuswebserver/JexusManager/actions/workflows/dotnetcore.yml)\n\nJexus Manager was designed to be the cross platform manager for Jexus web server, which can also work with IIS and IIS Express.\n\n![Jexus Manager](https://github.com/jexuswebserver/vscode-iis/raw/HEAD/images/vscode-iis.gif)\n\nDocumentation is at https://docs.jexusmanager.com\n\nInstallation/Installers\n=======================\n\nInstallation steps and link to installers are offered at https://docs.jexusmanager.com/getting-started/install.html\n\nBuild from Source\n=================\nMake sure all Git submodules are initialized, and then run dist.deploy.bat to compile the source. It restores NuGet packages and kicks off MSBuild.\n\nAbout The Icons\n===============\n\nSource 1: http://8666.deviantart.com/art/Tango-MIME-Icons-114829865\n> Use Bbook.ico and book-catelog-security.ico\n> Creative Commons Attribution-Share Alike 3.0 License.\n\nSource 2: http://commons.wikimedia.org/wiki/Tango_icons\n> Tango Icons\n> Public Domain\n\nSponsor\n=======\n<a href=\"https://www.cloudflare.com\">\n  <img src=\"https://cf-assets.www.cloudflare.com/slt3lc6tev37/7bIgGp4hk4SFO0o3SBbOKJ/b48185dcf20c579960afad879b25ea11/CF_logo_stacked_blktype.jpg\" alt=\"Cloudflare\" width=\"200\"/>\n</a>\n"
  },
  {
    "path": "Setup/CloseApplication.wxi",
    "content": "<?xml version=\"1.0\"?>\n<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\"\n         xmlns:util=\"http://schemas.microsoft.com/wix/UtilExtension\">\n\n    <util:CloseApplication Id=\"CloseIisManager\"\n                        CloseMessage=\"yes\"\n                        Description=\"!(loc.CloseApplication)\"\n                        ElevatedCloseMessage=\"yes\"\n                        RebootPrompt=\"no\"\n                        PromptToContinue=\"yes\"\n                        Target=\"$(var.MainExecutable)\" />\n\n</Include>\n"
  },
  {
    "path": "Setup/Components64.wxi",
    "content": "<?xml version=\"1.0\"?>\n<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n    <ComponentGroupRef  Id=\"Files64\" />\n</Include>\n"
  },
  {
    "path": "Setup/Components86.wxi",
    "content": "<?xml version=\"1.0\"?>\n<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n    <ComponentGroupRef  Id=\"Files86\" />\n</Include>\n"
  },
  {
    "path": "Setup/ComponentsARM64.wxi",
    "content": "<?xml version=\"1.0\"?>\n<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n    <ComponentGroupRef  Id=\"FilesARM64\" />\n</Include>\n"
  },
  {
    "path": "Setup/ConfigFile.xml",
    "content": "﻿<?xml version=\"1.0\"?>\n<configuration>\n  <startup>\n    <supportedRuntime version=\"v4.0.30319\" />\n    <supportedRuntime version=\"v2.0.50727\" />\n  </startup>\n</configuration>\n"
  },
  {
    "path": "Setup/JexusManager.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\n# SharpDevelop 5.1\nProject(\"{CFEE4113-1246-4D54-95CB-156813CB8593}\") = \"JexusManager\", \"JexusManager.wixproj\", \"{7F2FD5EF-4973-4288-95DD-10A175D691BF}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{7F2FD5EF-4973-4288-95DD-10A175D691BF}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{7F2FD5EF-4973-4288-95DD-10A175D691BF}.Debug|Any CPU.Build.0 = Debug|x86\n\t\t{7F2FD5EF-4973-4288-95DD-10A175D691BF}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7F2FD5EF-4973-4288-95DD-10A175D691BF}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Setup/JexusManager.wixproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>3.8</ProductVersion>\n    <ProjectGuid>7f2fd5ef-4973-4288-95dd-10a175d691bf</ProjectGuid>\n    <SchemaVersion>2.0</SchemaVersion>\n    <OutputName>JexusManager</OutputName>\n    <OutputType>Package</OutputType>\n    <WixTargetsPath Condition=\" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' \">$(MSBuildExtensionsPath32)\\Microsoft\\WiX\\v3.x\\Wix.targets</WixTargetsPath>\n    <WixTargetsPath Condition=\" '$(WixTargetsPath)' == '' \">$(MSBuildExtensionsPath)\\Microsoft\\WiX\\v3.x\\Wix.targets</WixTargetsPath>\n    <Name>JexusManager</Name>\n    <WixVariables>WixUILicenseRtf=License.rtf</WixVariables>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <OutputPath>..\\bin\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>Debug</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <OutputPath>..\\bin\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x64' \">\n    <OutputPath>..\\bin\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>Debug</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x64' \">\n    <OutputPath>..\\bin\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|ARM64' \">\n    <OutputPath>..\\bin\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\n    <DefineConstants>Debug</DefineConstants>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|ARM64' \">\n    <OutputPath>..\\bin\\$(Configuration)\\</OutputPath>\n    <IntermediateOutputPath>obj\\$(Configuration)\\</IntermediateOutputPath>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"Product.wxs\" />\n    <Compile Condition=\" '$(Platform)' == 'x86' \" Include=\"Files86.wxs\" />\n    <Compile Condition=\" '$(Platform)' == 'x64' \" Include=\"Files64.wxs\" />\n    <Compile Condition=\" '$(Platform)' == 'ARM64' \" Include=\"FilesARM64.wxs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <WixExtension Include=\"WixUIExtension\">\n      <HintPath>$(WixExtDir)\\WixUIExtension.dll</HintPath>\n      <Name>WixUIExtension</Name>\n    </WixExtension>\n    <WixExtension Include=\"WixNetFxExtension\">\n      <HintPath>$(WixExtDir)\\WixNetFxExtension.dll</HintPath>\n      <Name>WixNetFxExtension</Name>\n    </WixExtension>\n    <WixExtension Include=\"WixUtilExtension\">\n      <HintPath>$(WixExtDir)\\WixUtilExtension.dll</HintPath>\n      <Name>WixUtilExtension</Name>\n    </WixExtension>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"ConfigFile.xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"Product_en-us.wxl\" />\n  </ItemGroup>\n  <Import Project=\"$(WixTargetsPath)\" />\n  <Target Name=\"EnsureWixToolsetInstalled\" Condition=\" '$(WixTargetsImported)' != 'true' \">\n    <Error Text=\"The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/\" />\n  </Target>\n  <Target Name=\"BeforeBuild\">\n    <Exec Command=\"copy /Y Components86.wxi Components.wxi\" Condition=\" '$(Platform)' == 'x86' \" />\n    <Exec Command=\"copy /Y Paths86.wxi Paths.wxi\" Condition=\" '$(Platform)' == 'x86' \" />\n    <Exec Command=\"copy /Y Components64.wxi Components.wxi\" Condition=\" '$(Platform)' == 'x64' \" />\n    <Exec Command=\"copy /Y Paths64.wxi Paths.wxi\" Condition=\" '$(Platform)' == 'x64' \" />\n    <Exec Command=\"copy /Y ComponentsARM64.wxi Components.wxi\" Condition=\" '$(Platform)' == 'ARM64' \" />\n    <Exec Command=\"copy /Y PathsARM64.wxi Paths.wxi\" Condition=\" '$(Platform)' == 'ARM64' \" />\n  </Target>\n  <!--\n\tTo modify your build process, add your task inside one of the targets below and uncomment it.\n\tOther similar extension points exist, see Wix.targets.\n\t<Target Name=\"BeforeBuild\">\n\t</Target>\n\t<Target Name=\"AfterBuild\">\n\t</Target>\n\t-->\n</Project>\n"
  },
  {
    "path": "Setup/OS.wxi",
    "content": "<?xml version=\"1.0\"?>\n<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n\n    <!-- Installer bitness matches OS bitness. -->\n    <?if $(var.Platform) = x64 ?>\n    <Condition Message=\"!(loc.Windows64Required)\">\n        <![CDATA[Installed OR VersionNT64]]>\n    </Condition>\n    <?endif ?>\n\n    <?if $(var.Platform) = arm64 ?>\n    <Condition Message=\"!(loc.Windows64Required)\">\n        <![CDATA[Installed OR VersionNT64]]>\n    </Condition>\n    <?endif ?>\n\n    <?if $(var.Platform) = x86 ?>\n    <Condition Message=\"!(loc.Windows32Required)\">\n        <![CDATA[Installed OR not VersionNT64]]>\n    </Condition>\n    <?endif ?>\n\n</Include>\n"
  },
  {
    "path": "Setup/Paths64.wxi",
    "content": "<?xml version=\"1.0\"?>\n<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n    <?define PlatformProgramFilesFolder=\"ProgramFiles64Folder\" ?>\n    <?define SourceDir=..\\bin\\x64?>\n</Include>\n"
  },
  {
    "path": "Setup/Paths86.wxi",
    "content": "<?xml version=\"1.0\"?>\n<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n    <?define PlatformProgramFilesFolder=\"ProgramFilesFolder\" ?>\n    <?define SourceDir=..\\bin\\x86?>\n</Include>\n"
  },
  {
    "path": "Setup/PathsARM64.wxi",
    "content": "<?xml version=\"1.0\"?>\n<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n    <?define PlatformProgramFilesFolder=\"ProgramFiles64Folder\" ?>\n    <?define SourceDir=..\\bin\\arm64?>\n</Include>\n"
  },
  {
    "path": "Setup/Product.wxs",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<Wix xmlns=\"http://schemas.microsoft.com/wix/2006/wi\"\n     xmlns:netfx=\"http://schemas.microsoft.com/wix/NetFxExtension\"\n     xmlns:util=\"http://schemas.microsoft.com/wix/UtilExtension\">\n\n    <?include \"Variables.wxi\" ?>\n    <?include \"Paths.wxi\" ?>\n\n    <Product Id=\"*\"\n             Name=\"$(var.ProductName) $(var.ProductVersion)\"\n             Language=\"1033\"\n             Version=\"$(var.ProductVersion)\"\n             Manufacturer=\"$(var.Manufacturer)\"\n             UpgradeCode=\"$(var.UpgradeCode)\">\n\n        <Package Comments=\"$(var.ProductDescription)\"\n                 InstallerVersion=\"500\"\n                 Compressed=\"yes\"\n                 Description=\"$(var.ProductName) $(var.ProductVersion)\" />\n\n        <Icon Id=\"icon.ico\" SourceFile=\"$(var.Icon)\" />\n        <Property Id=\"ARPPRODUCTICON\" Value=\"icon.ico\" />\n        <Property Id=\"ARPINSTALLLOCATION\" Secure=\"yes\" />\n\n        <!-- Upgrade information -->\n\t\t<Upgrade Id=\"$(var.UpgradeCode)\">\n\t\t\t<!-- The UpgradeCode must be changed to allow two versions of SharpDevelop to be installed side-by-side -->\n\t\t\t\n\t\t\t<!-- Checks for older versions -->\n\t\t\t<UpgradeVersion Minimum=\"$(var.MinimalVersion)\"\n\t\t\t\tIncludeMinimum=\"yes\"\n\t\t\t\tMaximum=\"$(var.ProductVersion)\"\n\t\t\t\tIncludeMaximum=\"no\" \n\t\t\t\tProperty=\"PREVIOUSVERSIONFOUND\"/>\n\t\t\t<!-- Checks for newer versions -->\n\t\t\t<UpgradeVersion OnlyDetect=\"yes\"\n\t\t\t\tProperty=\"NEWERVERSIONFOUND\"\n\t\t\t\tMinimum=\"$(var.ProductVersion)\"\n\t\t\t\tIncludeMinimum=\"no\"/>\n\t\t</Upgrade>\n\n        <!-- Embed the cab -->\n        <Media Id=\"1\" Cabinet=\"cab1.cab\" EmbedCab=\"yes\" />\n\n        <!-- MainFeature -->\n        <Feature Id=\"ProductFeature\"\n                 Title=\"$(var.ProductName)\"\n                 Level=\"1\"\n                 ConfigurableDirectory=\"INSTALLDIR\">\n\n            <!-- Files installed -->\n            <?include \"Components.wxi\" ?>\n            <ComponentRef Id=\"ProgramMenuItems\" />\n            <ComponentRef Id=\"MainExecutable\" />\n        </Feature>\n\n        <!-- Directories and files -->\n        <Directory Id=\"TARGETDIR\" Name=\"SourceDir\">\n            <Directory Id=\"$(var.PlatformProgramFilesFolder)\">\n                <Directory Id=\"INSTALLDIR\" Name=\"$(var.ProductName)\">\n                    <Directory Id=\"CONTAINER\" Name=\"$(var.ProductVersion)\">\n                        <Component Id=\"MainExecutable\" Guid=\"{7D7AF5BF-E0D6-4997-9E98-C8BBBFD7A29D}\">\n                            <File Id=\"$(var.MainExecutable)\" Name=\"$(var.MainExecutable)\" Vital=\"no\" DiskId=\"1\" Source=\"$(var.SourceDir)\\$(var.MainExecutable)\" />\n                        </Component>\n                    </Directory>\n                </Directory>\n            </Directory>\n            <Directory Id=\"ProgramMenuFolder\" Name=\"Programs\">\n\t\t\t\t<Component Id=\"ProgramMenuItems\" Guid=\"BBB6934E-57F3-4E39-A2C8-C6C26A9FE0C6\">\n\t\t\t\t\t<!--\n\t\t\t\t\t\t\t\tFix ICE 38 by adding a dummy registry key that is the key for this shortcut.\n\t\t\t\t\t\t\t\thttp://msdn.microsoft.com/library/msi/setup/ice38.asp\n\t\t\t\t\t\t\t-->\n\t\t\t\t\t<RegistryValue Id=\"JexusManagerExeStartMenuShortcutRegistryKey\" Root=\"HKCU\" Type=\"string\" KeyPath=\"yes\" Key=\"Software\\$(var.ManufacturerShort)\\$(var.ProductNameShort)\" Name=\"ProgramFilesShortcut\" Value=\"1\" />\n\t\t\t\t\t<Shortcut Name=\"$(var.ProductName)\" Target=\"[!$(var.MainExecutable)]\" Id=\"MainExeStartMenuShortcut\" WorkingDirectory=\"CONTAINER\" Directory=\"ProgramMenuFolder\" />\n                    <RemoveFolder Id=\"CleanUpShortCut\" Directory=\"ProgramMenuFolder\" On=\"uninstall\"/>\n\t\t\t\t</Component>\n\t\t\t</Directory>\n        </Directory>\n\n        <?include \"OS.wxi\" ?>\n\n        <!--\n\t\t\tIf a newer version of SharpDevelop is installed, show an error message.\n\t\n\t\t\tThis message is not displayed immediately, the FindRelatedProducts \n\t\t\taction occurs well into the installation after the user has\n\t\t\tconfigured everything.\n\t\t-->\n\t\t<CustomAction Id=\"NoDowngrade\" Error=\"A later version of [ProductName] is already installed.\" />\n        <CustomAction Id=\"SetARPINSTALLLOCATION\" Property=\"ARPINSTALLLOCATION\" Value=\"[INSTALLDIR]\" />\n\n        <?include \"CloseApplication.wxi\" ?>\n\n        <!-- Custom Actions using Install Util -->\n        <InstallExecuteSequence>\n\t\t\t<!--\n\t\t\t\tDisplay an error message if a newer version found.\n\t\t\t\t\n\t\t\t\tSince the installer completely removes the existing SharpDevelop installation,\n\t\t\t\tdowngrades would work without any problems, but for now we \n\t\t\t\tinform the user that a newer version already exists.\n\t\t\t\t-> Actually, there's trouble with downgrades because Windows Installer first determines\n\t\t\t\t\tthe existing components before removing the old installation; so all versioned\n\t\t\t\t\tlibraries will get removed instead of downgraded.\n \t\t\t-->\n\t\t\t<Custom Action=\"NoDowngrade\" After=\"FindRelatedProducts\">NEWERVERSIONFOUND</Custom>\n\t\t\t<!--\n\t\t\t\tRemoves the older version of SharpDevelop, if we are upgrading,\n\t\t\t\tbefore installing the new version.\n\t\t\t\tUnfortunately the user is not informed of this upgrade. I think\n\t\t\t\twe need a custom dialog showing the old installation located and\n\t\t\t\tthe fact that it is going to be upgraded.\n\t\t\t\tThe best place to do this is after InstallFinalize however if we\n\t\t\t\tdo it then after we have removed a file from an addin, and changed\n\t\t\t\tthe Component Guid, the modified component is not installed. So\n\t\t\t\twe make sure SharpDevelop is completely removed before installing\n\t\t\t\tthe newer version. This also covers us if we accidentally\n\t\t\t\tmodify a component but do not change its Guid.\n\t\t\t\thttp://msdn.microsoft.com/library/msi/setup/removeexistingproducts_action.asp\n\t\t\t-->\n\t\t\t<RemoveExistingProducts Before=\"InstallInitialize\"/>\n            <Custom Action=\"WixCloseApplications\" After=\"InstallInitialize\" />\n            <Custom Action=\"SetARPINSTALLLOCATION\" After=\"InstallFiles\">NOT Installed</Custom>\n        </InstallExecuteSequence>\n\n        <!-- Using WixUI -->\n        <Property Id=\"WIXUI_INSTALLDIR\">INSTALLDIR</Property>\n        <UI>\n            <UIRef Id=\"WixUI_FeatureTree\" />\n            <Error Id='1001'>Error [1]. [2]</Error>\n        </UI>\n\n    </Product>\n</Wix>\n"
  },
  {
    "path": "Setup/Product_en-us.wxl",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<WixLocalization Culture=\"en-us\" Codepage=\"1252\" xmlns=\"http://schemas.microsoft.com/wix/2006/localization\">\n  <String Id=\"Language\">1033</String>\n  <!-- Supported language and codepage codes can be found here: http://www.tramontana.co.hu/wix/lesson2.php#2.4 -->\n\n  <String Id=\"ProductName\">Jexus Manager</String>\n  <String Id=\"Manufacturer\">LeXtudio Inc.</String>\n  <String Id=\"ProductDescription\">Jexus Manager is the management console for IIS/IIS Express and Jexus.</String>\n  <String Id=\"CloseApplication\">Please close Jexus Manager before continuing.</String>\n  <String Id=\"Windows64Required\">The 64-bit version of Jexus Manager cannot be installed on a 32-bit edition of Microsoft Windows.</String>\n  <String Id=\"Windows32Required\">The 32-bit version of Jexus Manager cannot be installed on a 64-bit edition of Microsoft Windows.</String>\n</WixLocalization>\n"
  },
  {
    "path": "Setup/Variables.wxi",
    "content": "<?xml version=\"1.0\"?>\n<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n    <?define UpgradeCode=\"F07B4406-6CA1-4BFB-BAF0-3A2675DA5728\"?>\n    <?define ProductCode=\"629958AA-14AA-4F7A-8706-F3511D99EA38\"?>\n    <?define PackageCode=\"89E25BEF-C13F-4FAF-BD71-6FD060C0BB24\"?>\n    <?define ProductName=\"!(loc.ProductName)\"?>\n    <?define Manufacturer=\"!(loc.Manufacturer)\"?>\n    <?define ProductDescription=\"!(loc.ProductDescription)\"?>\n\n    <?define Icon=\"iis.ico\" ?>\n    <?define MinimalVersion=\"12.0.0\" ?>\n\n    <!-- For registry keys -->\n    <?define ManufacturerShort=\"LeXtudio\" ?>\n    <?define ProductNameShort=\"JexusManager\" ?>\n\n    <?define MainExecutable=\"JexusManager.exe\"?>\n    <!-- MSI engine only uses first three fields https://docs.microsoft.com/windows/win32/msi/upgrade-table?redirectedfrom=MSDN#columns -->\n    <?define ProductVersion=\"!(bind.FileVersion.$(var.MainExecutable))\"?>\n\n</Include>\n"
  },
  {
    "path": "Tests/Exceptions/ServerTestCases.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\n\nnamespace Tests.Exceptions\n{\n    using System.IO;\n    using System.Reflection;\n    using System.Runtime.InteropServices;\n\n    using Microsoft.Web.Administration;\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using System.Net;\n    using System.Security.AccessControl;\n    using System.Security.Principal;\n\n    public class ServerTestCases\n    {\n        [Fact]\n        public void Providers()\n        {\n            const string current = @\"applicationHost.config\";\n            const string original = @\"original2.config\";\n            const string originalMono = @\"original.mono.config\";\n            File.Copy(Helper.IsRunningOnMono() ? originalMono : original, current, true);\n\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n#if IIS\n            var server = new ServerManager(Path.Combine(directoryName, current));\n#else\n            var server = new IisExpressServerManager(Path.Combine(directoryName, current));\n#endif\n            var config = server.GetApplicationHostConfiguration();\n            var section = config.GetSection(\"configProtectedData\");\n            Assert.Equal(\"RsaProtectedConfigurationProvider\", section[\"defaultProvider\"]);\n            var collection = section.GetCollection(\"providers\");\n            Assert.Equal(5, collection.Count);\n        }\n\n        [Fact]\n        public void MissingFile()\n        {\n            const string original = @\"applicationHost.config\";\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            var file = Path.Combine(directoryName, original);\n            File.Delete(file);\n\n#if IIS\n            var server = new ServerManager(file);\n#else\n            var server = new IisExpressServerManager(file);\n#endif\n            var exception = Assert.Throws<FileNotFoundException>(\n                () =>\n                    {\n                        TestCases.IisExpress(server, file);\n                    });\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{file}\\r\\nError: Cannot read configuration file\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void MissingClosingTag()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(@\"original2_missing_closing.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var exception = Assert.Throws<COMException>(\n                () =>\n                    {\n                        TestCases.IisExpress(server, current);\n                    });\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 1134\\r\\nError: Configuration file is not well-formed XML\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void MissingRequiredAttribute()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Remove the attribute.\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var pool = root.XPathSelectElement(\"/configuration/system.applicationHost/applicationPools/add[@name='UnmanagedClassicAppPool']\");\n                pool?.SetAttributeValue(\"name\", null);\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var exception = Assert.Throws<COMException>(\n                () =>\n                    {\n                        TestCases.IisExpress(server, current);\n                    });\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 141\\r\\nError: Missing required attribute 'name'\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void ValidatorFails()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Remove the attribute.\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var pool = root.XPathSelectElement(\"/configuration/system.applicationHost/applicationPools/add[@name='UnmanagedClassicAppPool']\");\n                pool?.SetAttributeValue(\"name\", string.Empty);\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var exception = Assert.Throws<COMException>(\n                () =>\n                    {\n                        TestCases.IisExpress(server, current);\n                    });\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 141\\r\\nError: The 'name' attribute is invalid.  Invalid application pool name\\r\\n\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void InvalidAttribute()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Remove the attribute.\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var pool = root.XPathSelectElement(\"/configuration/system.applicationHost/applicationPools/add[@name='UnmanagedClassicAppPool']\");\n                pool?.SetAttributeValue(\"testAuto\", true);\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var exception = Assert.Throws<COMException>(\n                () =>\n                    {\n                        TestCases.IisExpress(server, current);\n                    });\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 141\\r\\nError: Unrecognized attribute 'testAuto'\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void ReadOnly()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            string siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            var message =\n                \"The configuration object is read only, because it has been committed by a call to ServerManager.CommitChanges(). If write access is required, use ServerManager to get a new reference.\";\n#if IIS\n            var server = new ServerManager(true, current);\n#else\n            var server = new IisExpressServerManager(true, current);\n#endif\n            var exception1 = Assert.Throws<InvalidOperationException>(\n                () =>\n                    {\n                        TestCases.IisExpress(server, current);\n                    });\n            Assert.Equal(message, exception1.Message);\n\n            // site config \"Website1\"\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n            // enable Windows authentication\n            var windowsSection = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n            Assert.Equal(OverrideMode.Inherit, windowsSection.OverrideMode);\n            Assert.Equal(OverrideMode.Deny, windowsSection.OverrideModeEffective);\n            Assert.True(windowsSection.IsLocked);\n            Assert.False(windowsSection.IsLocallyStored);\n\n            var windowsEnabled = (bool)windowsSection[\"enabled\"];\n            Assert.False(windowsEnabled);\n\n            var compression = config.GetSection(\"system.webServer/urlCompression\");\n            Assert.Equal(OverrideMode.Inherit, compression.OverrideMode);\n            Assert.Equal(OverrideMode.Allow, compression.OverrideModeEffective);\n            Assert.False(compression.IsLocked);\n            Assert.False(compression.IsLocallyStored);\n\n            Assert.Equal(true, compression[\"doDynamicCompression\"]);\n\n            var compress = Assert.Throws<InvalidOperationException>(() => compression[\"doDynamicCompression\"] = false);\n            Assert.Equal(message, compress.Message);\n\n            {\n                // disable default document. Saved to web.config as this section can be overridden anywhere.\n                ConfigurationSection defaultDocumentSection = config.GetSection(\"system.webServer/defaultDocument\");\n                Assert.Equal(true, defaultDocumentSection[\"enabled\"]);\n\n                ConfigurationElementCollection filesCollection = defaultDocumentSection.GetCollection(\"files\");\n                Assert.Equal(7, filesCollection.Count);\n\n                {\n                    var first = filesCollection[0];\n                    Assert.Equal(\"home1.html\", first[\"value\"]);\n                    Assert.True(first.IsLocallyStored);\n                }\n\n                var second = filesCollection[1];\n                Assert.Equal(\"Default.htm\", second[\"value\"]);\n                Assert.False(second.IsLocallyStored);\n\n                var third = filesCollection[2];\n                Assert.Equal(\"Default.asp\", third[\"value\"]);\n                Assert.False(third.IsLocallyStored);\n\n                var remove = Assert.Throws<FileLoadException>(() => filesCollection.RemoveAt(4));\n#if IIS\n                Assert.Equal(\n                    \"Filename: \\r\\nError: This configuration section cannot be modified because it has been opened for read only access\\r\\n\\r\\n\",\n                    remove.Message);\n#else\n                Assert.Equal(\n                    $\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nError: This configuration section cannot be modified because it has been opened for read only access\\r\\n\\r\\n\",\n                    remove.Message);\n#endif\n                ConfigurationElement addElement = filesCollection.CreateElement();\n                var add = Assert.Throws<InvalidOperationException>(() => filesCollection.AddAt(0, addElement));\n                Assert.Equal(message, add.Message);\n\n                Assert.Equal(7, filesCollection.Count);\n\n                {\n                    var first = filesCollection[0];\n                    Assert.Equal(\"home1.html\", first[\"value\"]);\n                    // TODO: why?\n                    // Assert.IsFalse(first.IsLocallyStored);\n                }\n\n                Assert.Equal(7, filesCollection.Count);\n\n                var clear = Assert.Throws<InvalidOperationException>(() => filesCollection.Clear());\n                Assert.Equal(message, clear.Message);\n\n                var delete = Assert.Throws<InvalidOperationException>(() => filesCollection.Delete());\n                Assert.Equal(message, delete.Message);\n            }\n        }\n\n        [Fact]\n        public void NoBinding()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // change the path.\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var app = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='1']/bindings\");\n                app.Remove();\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var site = server.Sites[0];\n            var exception = Assert.Throws<ArgumentOutOfRangeException>(\n                () =>\n                {\n                    var binding = site.Bindings[0];\n                });\n        }\n\n\n        [Fact]\n        public void NoRootApplication()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // change the path.\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var app = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='1']/application\");\n                app?.SetAttributeValue(\"path\", \"/xxx\");\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var site = server.Sites[0];\n            var config = site.GetWebConfiguration();\n            var exception = Assert.Throws<FileNotFoundException>(\n                () =>\n                {\n                    var root = config.RootSectionGroup;\n                });\n#if IIS\n            Assert.Equal(string.Format(\"Filename: \\\\\\\\?\\\\{0}\\r\\nError: Unrecognized configuration path 'MACHINE/WEBROOT/APPHOST/WebSite1'\\r\\n\\r\\n\", current), exception.Message);\n#else\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 154\\r\\nError: Unrecognized configuration path 'MACHINE/WEBROOT/APPHOST/WebSite1'\\r\\n\\r\\n\", exception.Message);\n#endif\n        }\n\n        [Fact]\n        public void RootApplicationOutOfOrder()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var app = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='1']/application\");\n                app.AddBeforeSelf(\n                    new XElement(\"application\",\n                        new XAttribute(\"path\", \"/xxx\"),\n                        new XElement(\"virtualDirectory\",\n                            new XAttribute(\"path\", \"/\"),\n                            new XAttribute(\"physicalPath\", @\"%JEXUS_TEST_HOME%\\WebSite1\"))));\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var site = server.Sites[0];\n            var config = site.GetWebConfiguration();\n            {\n                var root = config.RootSectionGroup;\n                Assert.NotNull(root);\n            }\n\n            // enable Windows authentication\n            var windowsSection = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n            Assert.Equal(OverrideMode.Inherit, windowsSection.OverrideMode);\n            Assert.Equal(OverrideMode.Deny, windowsSection.OverrideModeEffective);\n            Assert.True(windowsSection.IsLocked);\n            Assert.False(windowsSection.IsLocallyStored);\n        }\n\n        [Fact]\n        public void NoRootVirtualDirectory()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var vDir = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='1']/application/virtualDirectory\");\n                vDir?.SetAttributeValue(\"path\", \"/xxx\");\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var site = server.Sites[0];\n            var config = site.GetWebConfiguration();\n#if IIS\n            var exception = Assert.Throws<NullReferenceException>(\n                () =>\n                {\n                    var root = config.RootSectionGroup;\n                });\n#else\n            var exception = Assert.Throws<FileNotFoundException>(\n                () =>\n                {\n                    var root = config.RootSectionGroup;\n                });\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 155\\r\\nError: Unrecognized configuration path 'MACHINE/WEBROOT/APPHOST/WebSite1'\\r\\n\\r\\n\", exception.Message);\n#endif\n        }\n\n        [Fact]\n        public void RootVirtualDirectoryOutOfOrder()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var vDir = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='1']/application/virtualDirectory\");\n                var newDir = new XElement(\"virtualDirectory\",\n                    new XAttribute(\"path\", \"/xxx\"),\n                    new XAttribute(\"physicalPath\", @\"%JEXUS_TEST_HOME%\\WebSite1\"));\n                vDir.AddBeforeSelf(newDir);\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var site = server.Sites[0];\n            var config = site.GetWebConfiguration();\n            {\n                var root = config.RootSectionGroup;\n                Assert.NotNull(root);\n            }\n\n            // enable Windows authentication\n            var windowsSection = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n            Assert.Equal(OverrideMode.Inherit, windowsSection.OverrideMode);\n            Assert.Equal(OverrideMode.Deny, windowsSection.OverrideModeEffective);\n            Assert.True(windowsSection.IsLocked);\n            Assert.False(windowsSection.IsLocallyStored);\n        }\n\n        [Fact]\n        public void VirtualDirectoryDoesNotExist()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            var folder = @\"X:\\doesnotexist\";\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var vDir = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='1']/application/virtualDirectory\");\n                vDir.SetAttributeValue(\"physicalPath\", folder);\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var site = server.Sites[0];\n            var config = site.GetWebConfiguration();\n            var fileName = Path.Combine(folder, \"web.config\");\n            var exception = Assert.Throws<DirectoryNotFoundException>(() => config.RootSectionGroup);\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{fileName}\\r\\nError: Cannot read configuration file\\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void VirtualDirectoryInvalidPath()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            var folder = @\"C:\\Windows\\*\";\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var vDir = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='1']/application/virtualDirectory\");\n                vDir.SetAttributeValue(\"physicalPath\", folder);\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var site = server.Sites[0];\n            var config = site.GetWebConfiguration();\n            var fileName = Path.Combine(folder, \"web.config\");\n#if IIS\n            var exception = Assert.Throws<FileNotFoundException>(() => config.RootSectionGroup);\n#else\n            var exception = Assert.Throws<DirectoryNotFoundException>(() => config.RootSectionGroup);\n#endif\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{fileName}\\r\\nError: Cannot read configuration file\\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void VirtualDirectoryInvalidPath2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            var folder = @\"C:\\Windows\\*t\";\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var vDir = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='1']/application/virtualDirectory\");\n                vDir.SetAttributeValue(\"physicalPath\", folder);\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var site = server.Sites[0];\n            var config = site.GetWebConfiguration();\n            var fileName = Path.Combine(folder, \"web.config\");\n#if IIS\n            var exception = Assert.Throws<FileNotFoundException>(() => config.RootSectionGroup);\n#else\n            var exception = Assert.Throws<DirectoryNotFoundException>(() => config.RootSectionGroup);\n#endif\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{fileName}\\r\\nError: Cannot read configuration file\\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void LogFileInheritance()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site1 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='2']\");\n                var log = new XElement(\"logFile\",\n                    new XAttribute(\"logFormat\", \"IIS\"));\n                site1?.Add(log);\n\n                var site2 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='3']\");\n                var log2 = new XElement(\"logFile\",\n                    new XAttribute(\"directory\", @\"%IIS_USER_HOME%\\Logs\\1\"));\n                site2?.Add(log2);\n\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                var site = server.Sites[0];\n                Assert.Equal(@\"%IIS_USER_HOME%\\Logs\", site.LogFile.Directory);\n                Assert.Equal(LogFormat.W3c, site.LogFile.LogFormat);\n            }\n\n            {\n                var site = server.Sites[1];\n                Assert.Equal(@\"%IIS_USER_HOME%\\Logs\", site.LogFile.Directory);\n                Assert.Equal(LogFormat.Iis, site.LogFile.LogFormat);\n            }\n\n            {\n                var site = server.Sites[2];\n                Assert.Equal(@\"%IIS_USER_HOME%\\Logs\\1\", site.LogFile.Directory);\n                Assert.Equal(LogFormat.W3c, site.LogFile.LogFormat);\n            }\n        }\n\n        [Fact]\n        public void DuplicateBindings()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site1 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='2']/bindings\");\n                site1?.Add(\n                    new XElement(\"binding\",\n                        new XAttribute(\"protocol\", \"http\"),\n                        new XAttribute(\"bindingInformation\", \"*:61902:localhost\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                var exception = Assert.Throws<COMException>(() => server.Sites[1]);\n                Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 182\\r\\nError: Cannot add duplicate collection entry of type 'binding' with combined key attributes 'protocol, bindingInformation' respectively set to 'http, *:61902:localhost'\\r\\n\\r\\n\", exception.Message);\n            }\n        }\n\n        [Fact]\n        public void BindingInvalidPort()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site1 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='2']/bindings\");\n                site1?.Add(\n                    new XElement(\"binding\",\n                        new XAttribute(\"protocol\", \"http\"),\n                        new XAttribute(\"bindingInformation\", \"*:161902:localhost\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                Assert.Null(server.Sites[1].Bindings[2].EndPoint);\n                Assert.Equal(\"*:161902:localhost\", server.Sites[1].Bindings[2].BindingInformation);\n            }\n        }\n\n        [Fact]\n        public void BindingInvalidPort2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site1 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='2']/bindings\");\n                site1?.Add(\n                    new XElement(\"binding\",\n                        new XAttribute(\"protocol\", \"http\"),\n                        new XAttribute(\"bindingInformation\", \"*:localhost:localhost\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                Binding binding = server.Sites[1].Bindings[2];\n                Assert.Null(binding.EndPoint);\n                Assert.Equal(\"*:localhost:localhost\", binding.BindingInformation);\n#if !IIS\n                var exception = Assert.Throws<ArgumentException>(() => binding.ToUri());\n                Assert.Equal(\"Value does not fall within the expected range.\", exception.Message);\n#endif\n            }\n        }\n\n        [Fact]\n        public void BindingInvalidAddress()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site1 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='2']/bindings\");\n                site1?.Add(\n                    new XElement(\"binding\",\n                        new XAttribute(\"protocol\", \"http\"),\n                        new XAttribute(\"bindingInformation\", \"1.1.1.1.1:61902:localhost\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                Binding binding = server.Sites[1].Bindings[2];\n                Assert.Null(binding.EndPoint);\n                Assert.Equal(\"1.1.1.1.1:61902:localhost\", binding.BindingInformation);\n#if !IIS\n                Assert.Equal(\"http://localhost:61902\", binding.ToUri());\n                Assert.Equal(\"localhost on 1.1.1.1.1:61902 (http)\", binding.ToShortString());\n#endif\n            }\n        }\n\n        [Fact]\n        public void BindingInvalidAddress2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site1 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='2']/bindings\");\n                site1?.Add(\n                    new XElement(\"binding\",\n                        new XAttribute(\"protocol\", \"http\"),\n                        new XAttribute(\"bindingInformation\", \"1.1.1:61902:localhost\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                Binding binding = server.Sites[1].Bindings[2];\n                Assert.Equal(IPAddress.Parse(\"1.1.0.1\"), binding.EndPoint.Address);\n                Assert.Equal(\"1.1.1:61902:localhost\", binding.BindingInformation);\n#if !IIS\n                Assert.Equal(\"http://localhost:61902\", binding.ToUri());\n                Assert.Equal(\"localhost on 1.1.1:61902 (http)\", binding.ToShortString());\n#endif\n            }\n        }\n\n        [Fact]\n        public void BindingInvalidAddress3()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site1 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='2']/bindings\");\n                site1?.Add(\n                    new XElement(\"binding\",\n                        new XAttribute(\"protocol\", \"http\"),\n                        new XAttribute(\"bindingInformation\", \":\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                Binding binding = server.Sites[1].Bindings[2];\n                Assert.Null(binding.EndPoint);\n                Assert.Equal(\":\", binding.BindingInformation);\n#if !IIS\n                Assert.Equal(\"http://localhost\", binding.ToUri());\n                Assert.Equal(\": (http)\", binding.ToShortString());\n#endif\n            }\n        }\n\n        [Fact]\n        public void BindingInvalidAddress4()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site1 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='2']/bindings\");\n                site1?.Add(\n                    new XElement(\"binding\",\n                        new XAttribute(\"protocol\", \"http\"),\n                        new XAttribute(\"bindingInformation\", \"::\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                Binding binding = server.Sites[1].Bindings[2];\n                Assert.Null(binding.EndPoint);\n                Assert.Equal(\"::\", binding.BindingInformation);\n#if !IIS\n                Assert.Equal(\"http://localhost\", binding.ToUri());\n                Assert.Equal(\": (http)\", binding.ToShortString());\n#endif\n            }\n        }\n\n        [Fact]\n        public void BindingInvalidAddress5()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site1 = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@id='2']/bindings\");\n                site1?.Add(\n                    new XElement(\"binding\",\n                        new XAttribute(\"protocol\", \"http\"),\n                        new XAttribute(\"bindingInformation\", \"*:80:\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                Binding binding = server.Sites[1].Bindings[2];\n                Assert.Equal(new IPEndPoint(IPAddress.Any, 80), binding.EndPoint);\n                Assert.Equal(\"*:80:\", binding.BindingInformation);\n#if !IIS\n                Assert.Equal(\"http://localhost\", binding.ToUri());\n                Assert.Equal(\"*:80 (http)\", binding.ToShortString());\n#endif\n            }\n        }\n\n        [Fact]\n        public void DuplicateApplicationPools()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var pools = root.XPathSelectElement(\"/configuration/system.applicationHost/applicationPools\");\n                pools?.Add(\n                    new XElement(\"add\",\n                        new XAttribute(\"name\", \"Clr4IntegratedAppPool\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                var exception = Assert.Throws<COMException>(() => server.ApplicationPools);\n                Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 143\\r\\nError: Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'Clr4IntegratedAppPool'\\r\\n\\r\\n\", exception.Message);\n            }\n        }\n\n        [Fact]\n        public void NoApplicationPools()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var pools = root.XPathSelectElement(\"/configuration/system.applicationHost/applicationPools\");\n                pools?.Remove();\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            {\n                var pools = server.ApplicationPools;\n                Assert.Empty(pools);\n            }\n        }\n\n        [Fact]\n        public void ConfigSource()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                root.Add(\n                    new XElement(\"location\",\n                        new XAttribute(\"path\", \"WebSite1\"),\n                        new XElement(\"system.web\",\n                            new XElement(\"authorization\",\n                                new XAttribute(\"configSource\", Path.Combine(Path.GetDirectoryName(siteConfig), \"authorization.config\"))))));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n\n#if IIS\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<COMException>(() => config.GetSection(\"system.web/authorization\"));\n#else\n            // TODO: fix where the exception is thrown.\n            var exception = Assert.Throws<COMException>(() => server.Sites[0].Applications[0].GetWebConfiguration());\n#endif\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 1120\\r\\nError: Unrecognized attribute 'configSource'\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void InvalidLocation()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                root.Add(\n                    new XElement(\"location\",\n                        new XAttribute(\"path\", \"NotExist\"),\n                        new XElement(\"system.webServer\",\n                            new XElement(\"security\",\n                                new XElement(\"authentication\",\n                                    new XElement(\"windowsAuthentication\",\n                                        new XAttribute(\"enabled\", true)))))));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n\n#if IIS\n            var config = server.GetApplicationHostConfiguration();\n            var exception = Assert.Throws<FileNotFoundException>(() => config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", \"NotExist\"));\n#else\n            var config = server.GetApplicationHostConfiguration();\n            var exception = Assert.Throws<FileNotFoundException>(() => config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", \"NotExist\"));\n            // TODO: fix where the exception is throwed.\n            //var exception = Assert.Throws<COMException>(() => server.Sites[0].Applications[0].GetWebConfiguration());\n#endif\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nError: Unrecognized configuration path 'MACHINE/WEBROOT/APPHOST/NotExist'\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void InvalidFileLocation()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                root.Add(\n                    new XElement(\"location\",\n                        new XAttribute(\"path\", \"WebSite1/index2.html\"),\n                        new XElement(\"system.webServer\",\n                            new XElement(\"security\",\n                                new XElement(\"authentication\",\n                                    new XElement(\"windowsAuthentication\",\n                                        new XAttribute(\"enabled\", true)))))));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n\n            var config = server.GetApplicationHostConfiguration();\n            var section = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", \"WebSite1/index2.html\");\n            Assert.Equal(true, section[\"enabled\"]);\n        }\n\n        [Fact]\n        public void FileLocation()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                root.Add(\n                    new XElement(\"location\",\n                        new XAttribute(\"path\", \"WebSite1/index.html\"),\n                        new XElement(\"system.webServer\",\n                            new XElement(\"security\",\n                                new XElement(\"authentication\",\n                                    new XElement(\"windowsAuthentication\",\n                                        new XAttribute(\"enabled\", true)))))));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n\n            var config = server.GetApplicationHostConfiguration();\n            var section = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", \"WebSite1/index.html\");\n            Assert.Equal(true, section[\"enabled\"]);\n        }\n\n        [Fact]\n        public void Machine()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            string machine = Helper.FileNameMachineConfig;\n            string backup = Path.GetTempFileName();\n            File.Copy(machine, backup, true);\n            try\n            {\n\n                {\n                    // add the tags\n                    var file = XDocument.Load(machine);\n                    var root = file.Root;\n\n                    var network = root?.XPathSelectElement(\"/configuration/system.net/mailSettings/smtp/network\");\n                    if (network == null)\n                    {\n                        var smtp = root?.XPathSelectElement(\"/configuration/system.net/mailSettings/smtp\");\n                        if (smtp == null)\n                        {\n                            var mailSettings = root?.XPathSelectElement(\"/configuration/system.net/mailSettings\");\n                            if (mailSettings == null)\n                            {\n                                var systemNet = root?.XPathSelectElement(\"/configuration/system.net\");\n                                if (systemNet == null)\n                                {\n                                    systemNet = new XElement(\"system.net\");\n                                    root?.Add(systemNet);\n                                }\n\n                                mailSettings = new XElement(\"mailSettings\");\n                                systemNet.Add(mailSettings);\n                            }\n\n                            smtp = new XElement(\"smtp\",\n                                new XAttribute(\"deliveryMethod\", \"Network\"),\n                                new XAttribute(\"from\", \"test@test.com\"));\n                            mailSettings.Add(smtp);\n                        }\n\n                        network = new XElement(\"network\",\n                            new XAttribute(\"defaultCredentials\", true),\n                            new XAttribute(\"host\", \"127.0.0.1\"),\n                            new XAttribute(\"port\", 25),\n                            new XAttribute(\"userName\", \"test\"),\n                            new XAttribute(\"password\", \"test\"));\n                        smtp.Add(network);\n                    }\n\n                    network.SetAttributeValue(\"enableSsl\", false);\n                    network.SetAttributeValue(\"something\", \"else\");\n                    file.Save(machine);\n                }\n#if IIS\n                var server = new ServerManager(current);\n#else\n                var server = new IisExpressServerManager(current);\n#endif\n                var pools = server.ApplicationPools;\n\n                var configuration = server.GetApplicationHostConfiguration();\n                var section = configuration.GetSection(\"system.net/mailSettings/smtp\");\n                var element = section.GetChildElement(\"network\");\n                var exception = Assert.Throws<COMException>(() => element[\"enableSsl\"]);\n\n#if IIS\n                Assert.Equal(\n                    $\"Invalid index. (Exception from HRESULT: 0x80070585)\",\n                    exception.Message);\n#else\n                Assert.Contains(\n                    $\"Filename: \\\\\\\\?\\\\{machine}\\r\\nLine number: \",\n                    exception.Message);\n                Assert.Contains(\"\\r\\nError: Unrecognized attribute 'enableSsl'\\r\\n\\r\\n\", exception.Message);\n#endif\n            }\n            finally\n            {\n                File.Copy(backup, machine, true);\n            }\n        }\n\n        [Fact]\n        public void Administration()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"administration.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var exception = Assert.Throws<COMException>(() => server.ApplicationPools);\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{current}\\r\\nError: The configuration section 'system.applicationHost/applicationPools' cannot be read because it is missing a section declaration\\r\\n\\r\\n\",\n                exception.Message);\n        }\n#if !IIS\n        [Fact]\n        public void SchemaNonEmpty()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            string schemaIis = Environment.ExpandEnvironmentVariables(@\"%ProgramFiles%\\IIS Express\\config\\schema\\IIS_schema.xml\");\n\n            string backup = Path.GetTempFileName();\n            File.Copy(schemaIis, backup, true);\n            bool replaced = false;\n            try\n            {\n                {\n                    // add the tags\n                    var file = XDocument.Load(schemaIis);\n                    var root = file.Root;\n\n                    var directory = root?.XPathSelectElement(\"/configSchema/sectionSchema[@name='system.applicationHost/log']/element[@name='centralW3CLogFile']/attribute[@name='directory']\");\n                    directory.SetAttributeValue(\"validationParameter\", \"\");\n                    file.Save(schemaIis);\n                    replaced = true;\n                }\n\n                var server = new IisExpressServerManager(current);\n                var pools = server.ApplicationPools;\n\n                var configuration = server.GetApplicationHostConfiguration();\n                var section = configuration.GetSection(\"system.applicationHost/log\");\n                var element = section.GetChildElement(\"centralW3CLogFile\");\n                var exception = Assert.Throws<COMException>(() => element[\"directory\"] = \"\");\n\n                Assert.Equal(\n                    $\"String must not be empty\\r\\n\",\n                    exception.Message);\n            }\n            finally\n            {\n                if (replaced)\n                {\n                    File.Copy(backup, schemaIis, true);\n                }\n            }\n        }\n#endif\n\n        [Fact]\n        public void WrongLockAttributes()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var httpErrors = root.XPathSelectElement(\"/configuration/system.webServer/httpErrors\");\n                httpErrors?.SetAttributeValue(\"lockAttributes\", \"notExisted\");\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n\n#if IIS\n            var config = server.GetApplicationHostConfiguration();\n            var exception = Assert.Throws<COMException>(() => config.GetSection(\"system.webServer/httpErrors\"));\n#else\n            var exception = Assert.Throws<COMException>(() => server.GetApplicationHostConfiguration());\n            // TODO: fix where the exception is throwed.\n#endif\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 364\\r\\nError: lockAttributes contains unknown attribute 'notExisted'\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void WildcardLockAttributes()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var httpErrors = root.XPathSelectElement(\"/configuration/system.webServer/httpErrors\");\n                httpErrors?.SetAttributeValue(\"lockAttributes\", \"*\");\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n\n            var config = server.GetApplicationHostConfiguration();\n            var section = config.GetSection(\"system.webServer/httpErrors\");\n        }\n\n        [Fact]\n        public void DecryptPasswordEmpty()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var anonymous = root.XPathSelectElement(\"/configuration/location[@path='WebSite2']/system.webServer/security/authentication/anonymousAuthentication\");\n                anonymous?.SetAttributeValue(\"password\", \"[enc:AesProvider::enc]\");\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.GetApplicationHostConfiguration();\n\n            {\n                var section = config.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", \"WebSite2\");\n                var attribute = section[\"password\"];\n                Assert.Equal(string.Empty, attribute.ToString());\n            }\n\n            //var server = new IisExpressServerManager(current);\n            //var exception = Assert.Throws<COMException>(() => server.GetApplicationHostConfiguration());\n            //// TODO: fix where the exception is throwed.\n            //Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 364\\r\\nError: lockAttributes contains unknown attribute 'notExisted'\\r\\n\\r\\n\",\n            //    exception.Message);\n        }\n\n        [Fact]\n        public void DecryptPasswordBroken()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var anonymous = root.XPathSelectElement(\"/configuration/location[@path='WebSite2']/system.webServer/security/authentication/anonymousAuthentication\");\n                anonymous?.SetAttributeValue(\"password\", \"[enc:AesProvider:enc]\");\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.GetApplicationHostConfiguration();\n\n            {\n                var section = config.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", \"WebSite2\");\n                var attribute = section[\"password\"];\n                Assert.Equal(\"[enc:AesProvider:enc]\", attribute.ToString());\n            }\n\n            //var server = new IisExpressServerManager(current);\n            //var exception = Assert.Throws<COMException>(() => server.GetApplicationHostConfiguration());\n            //// TODO: fix where the exception is throwed.\n            //Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 364\\r\\nError: lockAttributes contains unknown attribute 'notExisted'\\r\\n\\r\\n\",\n            //    exception.Message);\n        }\n\n        [Fact]\n        public void DecryptPasswordBroken2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var anonymous = root.XPathSelectElement(\"/configuration/location[@path='WebSite2']/system.webServer/security/authentication/anonymousAuthentication\");\n                anonymous?.SetAttributeValue(\"password\", \"[enc::enc]\");\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.GetApplicationHostConfiguration();\n\n            {\n                var section = config.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", \"WebSite2\");\n                var attribute = section[\"password\"];\n                Assert.Equal(\"[enc::enc]\", attribute.ToString());\n            }\n\n            //var server = new IisExpressServerManager(current);\n            //var exception = Assert.Throws<COMException>(() => server.GetApplicationHostConfiguration());\n            //// TODO: fix where the exception is throwed.\n            //Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 364\\r\\nError: lockAttributes contains unknown attribute 'notExisted'\\r\\n\\r\\n\",\n            //    exception.Message);\n        }\n\n        [Fact]\n        public void DecryptPasswordBroken3()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var anonymous = root.XPathSelectElement(\"/configuration/location[@path='WebSite2']/system.webServer/security/authentication/anonymousAuthentication\");\n                anonymous?.SetAttributeValue(\"password\", \"[enc:enc]\");\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.GetApplicationHostConfiguration();\n\n            {\n                var section = config.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", \"WebSite2\");\n                var attribute = section[\"password\"];\n                Assert.Equal(\"[enc:enc]\", attribute.ToString());\n            }\n\n            //var server = new IisExpressServerManager(current);\n            //var exception = Assert.Throws<COMException>(() => server.GetApplicationHostConfiguration());\n            //// TODO: fix where the exception is throwed.\n            //Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 364\\r\\nError: lockAttributes contains unknown attribute 'notExisted'\\r\\n\\r\\n\",\n            //    exception.Message);\n        }\n\n        [Fact]\n        public void DecryptPasswordBroken4()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var anonymous = root.XPathSelectElement(\"/configuration/location[@path='WebSite2']/system.webServer/security/authentication/anonymousAuthentication\");\n                anonymous?.SetAttributeValue(\"password\", \"[encenc]\");\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.GetApplicationHostConfiguration();\n\n            {\n                var section = config.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", \"WebSite2\");\n                var attribute = section[\"password\"];\n                Assert.Equal(\"[encenc]\", attribute.ToString());\n            }\n\n            //var server = new IisExpressServerManager(current);\n            //var exception = Assert.Throws<COMException>(() => server.GetApplicationHostConfiguration());\n            //// TODO: fix where the exception is throwed.\n            //Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 364\\r\\nError: lockAttributes contains unknown attribute 'notExisted'\\r\\n\\r\\n\",\n            //    exception.Message);\n        }\n\n        [Fact]\n        public void DecryptPasswordBroken5()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var anonymous = root.XPathSelectElement(\"/configuration/location[@path='WebSite2']/system.webServer/security/authentication/anonymousAuthentication\");\n                anonymous?.SetAttributeValue(\"password\", \"[]\");\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.GetApplicationHostConfiguration();\n\n            {\n                var section = config.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", \"WebSite2\");\n                var attribute = section[\"password\"];\n                Assert.Equal(\"[]\", attribute.ToString());\n            }\n\n            //var server = new IisExpressServerManager(current);\n            //var exception = Assert.Throws<COMException>(() => server.GetApplicationHostConfiguration());\n            //// TODO: fix where the exception is throwed.\n            //Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 364\\r\\nError: lockAttributes contains unknown attribute 'notExisted'\\r\\n\\r\\n\",\n            //    exception.Message);\n        }\n\n        [Fact]\n        public void DecryptPassword()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.GetApplicationHostConfiguration();\n            {\n                var section = config.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\");\n                var attribute = section[\"password\"];\n                Assert.Equal(\"\", attribute.ToString());\n            }\n\n            {\n                var section = config.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\", \"WebSite2\");\n                var attribute = section[\"password\"];\n                Assert.Equal(string.Empty, attribute.ToString());\n            }\n        }\n\n        [Fact]\n        public void InvalidSslFlags()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var binding = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@name='GuessMeWeb']/bindings/binding[@protocol='https']\");\n                binding?.SetAttributeValue(\"sslFlags\", \"NotExist\");\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.GetApplicationHostConfiguration();\n            var exception = Assert.Throws<COMException>(() => server.Sites[\"GuessMeWeb\"].Bindings[1].SslFlags);\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 181\\r\\nError: The 'sslFlags' attribute is invalid.  Not a valid unsigned integer\\r\\n\\r\\n\\r\\n\",\n                exception.Message);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Exceptions/SiteTestCases.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.Diagnostics;\nusing System.Text;\n\nnamespace Tests.Exceptions\n{\n    using System.IO;\n    using System.Reflection;\n    using System.Runtime.InteropServices;\n\n    using Microsoft.Web.Administration;\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using System.Collections.Generic;\n\n    public class SiteTestCases\n    {\n        [Fact]\n        public void InvalidSection()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var pool = root?.XPathSelectElement(\"/configuration/system.webServer\");\n                pool?.Add(\n                    new XElement(\"security\",\n                        new XElement(\"authentication\",\n                            new XElement(\"windowsAuthentication\",\n                                new XAttribute(\"enabled\", true)))));\n\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<FileLoadException>(\n                () =>\n                    {\n                        // enable Windows authentication\n                        var unused =\n                                config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n                    });\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 11\\r\\nError: This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault=\\\"Deny\\\"), or set explicitly by a location tag with overrideMode=\\\"Deny\\\" or the legacy allowOverride=\\\"false\\\".\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void EmptyFile()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                File.WriteAllText(siteConfig, string.Empty);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            // enable Windows authentication\n            var exception = Assert.Throws<COMException>(() => config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\"));\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 1\\r\\nError: Configuration file is not well-formed XML\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void EmptyTag()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var pool = root?.XPathSelectElement(\"/configuration/system.webServer\");\n                pool?.RemoveAll();\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            // enable Windows authentication\n            var unused =\n                config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n        }\n\n        [Fact]\n        public void EmptyTag2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var pool = root?.XPathSelectElement(\"/configuration/system.webServer\");\n                pool?.RemoveAll();\n                pool?.Add(new XElement(\"security\"));\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            // enable Windows authentication\n            var unused =\n                config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n        }\n\n        [Fact]\n        public void UnlockSection()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the section.\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var windows = root.XPathSelectElement(\"/configuration/configSections/sectionGroup[@name='system.webServer']/sectionGroup[@name='security']/sectionGroup[@name='authentication']/section[@name='windowsAuthentication']\");\n                windows?.SetAttributeValue(\"overrideModeDefault\", \"Allow\");\n                file.Save(current);\n            }\n\n            {\n                // add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var pool = root?.XPathSelectElement(\"/configuration/system.webServer\");\n                pool?.Add(\n                    new XElement(\"security\",\n                        new XElement(\"authentication\",\n                            new XElement(\"windowsAuthentication\",\n                                new XAttribute(\"enabled\", true)))));\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n            // enable Windows authentication\n            var windowsSection =\n                config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n            Assert.True((bool)windowsSection[\"enabled\"]);\n        }\n\n        [Fact]\n        public void UnlockSectionWithRuntimeTag()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the section.\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var windows = root.XPathSelectElement(\n                    \"/configuration/configSections/sectionGroup[@name='system.webServer']/sectionGroup[@name='security']/sectionGroup[@name='authentication']/section[@name='windowsAuthentication']\");\n                windows?.SetAttributeValue(\"overrideModeDefault\", \"Allow\");\n                file.Save(current);\n            }\n\n            {\n                // add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var pool = root?.XPathSelectElement(\"/configuration/system.webServer\");\n                pool?.Add(\n                    new XElement(\"security\",\n                        new XElement(\"authentication\",\n                            new XElement(\"windowsAuthentication\",\n                                new XAttribute(\"enabled\", true)))));\n\n                var tag = \"<runtime>\" +\n                          \"<asm:assemblyBinding xmlns:asm=\\\"urn:schemas-microsoft-com:asm.v1\\\">\" +\n                          \"<asm:dependentAssembly>\" +\n                          \"<asm:assemblyIdentity name=\\\"Newtonsoft.Json\\\" publicKeyToken=\\\"30ad4fe6b2a6aeed\\\" culture=\\\"neutral\\\" />\" +\n                          \"<asm:bindingRedirect oldVersion=\\\"4.5.0.0-9.0.0.0\\\" newVersion=\\\"9.0.0.0\\\" />\" +\n                          \"</asm:dependentAssembly>\" +\n                          \"</asm:assemblyBinding>\" +\n                          \"</runtime>\";\n                var runtime = XElement.Parse(tag);\n                file.Root?.Add(runtime);\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n            // enable Windows authentication\n            var windowsSection =\n                config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n            Assert.True((bool)windowsSection[\"enabled\"]);\n#if IIS\n            windowsSection.SetAttributeValue(\"enabled\", false);\n            var exception = Assert.Throws<COMException>(() => server.CommitChanges());\n            Assert.Equal(0xc00cef03, (uint)exception.HResult);\n            Assert.Equal(\"Exception from HRESULT: 0xC00CEF03\", exception.Message);\n#else\n            server.CommitChanges();\n#endif\n        }\n\n\n        [Fact]\n        public void UnknownSection()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var pool = root?.XPathSelectElement(\"/configuration/system.webServer\");\n                var unknown = new XElement(\"unknown\",\n                    new XElement(\"test\",\n                        new XAttribute(\"test\", \"test\")));\n                pool?.Add(unknown);\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<COMException>(\n                () =>\n                    {\n                        // enable Windows authentication\n                        var unused =\n                            config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n                    });\n#if IIS\n            Assert.Equal(string.Format(\"Filename: \\\\\\\\?\\\\{0}\\r\\nError: \\r\\n\", siteConfig), exception.Message);\n#else\n            Assert.Null(exception.Data[\"oob\"]);\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 10\\r\\nError: Unrecognized element 'test'\\r\\n\\r\\n\", exception.Message);\n#endif\n        }\n\n        [Fact]\n        public void ArrSection()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var pool = root?.XPathSelectElement(\"/configuration/system.webServer\");\n                var unknown = new XElement(\"webFarms\",\n                    new XElement(\"test\",\n                        new XAttribute(\"test\", \"test\")));\n                pool?.Add(unknown);\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<COMException>(\n                () =>\n                {\n                    // enable Windows authentication\n                    var unused =\n                        config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n                });\n#if IIS\n            Assert.Equal(string.Format(\"Filename: \\\\\\\\?\\\\{0}\\r\\nError: \\r\\n\", siteConfig), exception.Message);\n#else\n            Assert.Equal(\"Application Request Routing Module (system.webServer/webFarms/)\", exception.Data[\"oob\"]);\n            Assert.Equal(\"https://docs.microsoft.com/iis/extensions/configuring-application-request-routing-arr/define-and-configure-an-application-request-routing-server-farm#prerequisites\", exception.Data[\"link\"]);\n            Assert.Equal(\n                $\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 10\\r\\nError: Unrecognized element 'test'\\r\\n\\r\\n\", exception.Message);\n#endif\n        }\n\n        [Fact]\n        public void DuplicateSection()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                var location = root?.XPathSelectElement(\"/configuration/location[@path='WebSite2']\");\n                var newLocation = new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"defaultDocument\",\n                            new XAttribute(\"enabled\", false),\n                            new XElement(\"files\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"value\", \"home1.html\"))))));\n                location?.AddAfterSelf(newLocation);\n                file.Save(current);\n            }\n\n            {\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var doc = root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument\");\n                doc?.SetAttributeValue(\"enabled\", true);\n                var add = root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/add\");\n                add?.SetAttributeValue(\"value\", \"home2.html\");\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section =\n                config.GetSection(\"system.webServer/defaultDocument\");\n            Assert.Equal(true, section[\"enabled\"]);\n            {\n                var files = section.GetCollection(\"files\");\n                Assert.Equal(8, files.Count);\n                Assert.Equal(\"home2.html\", files[0][\"value\"]);\n                Assert.True(files[0].IsLocallyStored);\n                Assert.Equal(\"home1.html\", files[1][\"value\"]);\n                Assert.False(files[1].IsLocallyStored);\n\n                files.RemoveAt(1);\n            }\n\n            server.CommitChanges();\n\n            const string expected = @\"expected3.config\";\n            TestHelper.FixPhysicalPathMono(expected);\n            XmlAssert.Equal(expected, current);\n            TestHelper.AssertSiteConfig(directoryName, expected);\n        }\n\n        [Fact]\n        public void DuplicateSectionDefinition()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                var webSocket = root?.XPathSelectElement(\"/configuration/configSections/sectionGroup[@name='system.webServer']/section[@name='webSocket']\");\n                webSocket?.AddAfterSelf(\n                    new XElement(\"section\",\n                        new XAttribute(\"name\", \"webSocket\"),\n                        new XAttribute(\"overrideModeDefault\", \"Allow\")));\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var exception = Assert.Throws<COMException>(() =>\n            {\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            });\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 117\\r\\nError: There is a duplicate 'system.webServer/webSocket' section defined\\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void DuplicateSectionDefinition2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                root?.Add(\n                    new XElement(\"configSections\",\n                        new XElement(\"sectionGroup\",\n                            new XAttribute(\"name\", \"system.webServer\"),\n                            new XElement(\"section\",\n                                new XAttribute(\"name\", \"webSocket\"),\n                                new XAttribute(\"overrideModeDefault\", \"Allow\")))));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<COMException>(() =>\n            {\n                var section = config.GetSection(\"system.webServer/defaultDocument\");\n            });\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 10\\r\\nError: Only one <configSections> element allowed.  It must be the first child element of the root <configuration> element   \\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void DuplicateSectionDefinition3()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                root?.AddFirst(\n                    new XElement(\"configSections\",\n                        new XElement(\"sectionGroup\",\n                            new XAttribute(\"name\", \"system.webServer\"),\n                            new XElement(\"section\",\n                                new XAttribute(\"name\", \"test\"),\n                                new XAttribute(\"overrideModeDefault\", \"Allow\")))));\n                root?.AddFirst(\n                    new XElement(\"configSections\",\n                        new XElement(\"sectionGroup\",\n                            new XAttribute(\"name\", \"system.webServer\"),\n                            new XElement(\"section\",\n                                new XAttribute(\"name\", \"test2\"),\n                                new XAttribute(\"overrideModeDefault\", \"Allow\")))));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<COMException>(() =>\n            {\n                var section = config.GetSection(\"system.webServer/defaultDocument\");\n            });\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 8\\r\\nError: Only one <configSections> element allowed.  It must be the first child element of the root <configuration> element   \\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void DuplicateSectionDefinition4()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                root?.AddFirst(\n                    new XElement(\"configSections\",\n                        new XElement(\"sectionGroup\",\n                            new XAttribute(\"name\", \"system.webServer\"),\n                            new XElement(\"section\",\n                                new XAttribute(\"name\", \"webSocket\"),\n                                new XAttribute(\"overrideModeDefault\", \"Allow\")))));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<COMException>(() =>\n            {\n                var section = config.GetSection(\"system.webServer/defaultDocument\");\n            });\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 5\\r\\nError: There is a duplicate 'system.webServer/webSocket' section defined\\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void Inheritance()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                var location = root?.XPathSelectElement(\"/configuration/location[@path='WebSite2']\");\n                var newLocation = new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"defaultDocument\",\n                            new XAttribute(\"enabled\", false),\n                            new XElement(\"files\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"value\", \"home1.html\"))))));\n                location?.AddAfterSelf(newLocation);\n                file.Save(current);\n            }\n\n            {\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                Debug.Assert(root != null, nameof(root) + \" != null\");\n                var doc = root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument\");\n                doc?.SetAttributeValue(\"enabled\", true);\n                var add = root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/add\");\n                add?.SetAttributeValue(\"value\", \"home2.html\");\n\n                root?.Add(\n                    new XElement(\"location\",\n                        new XAttribute(\"path\", \"WebSite1/test\"),\n                        new XElement(\"system.webServer\",\n                            new XElement(\"defaultDocument\",\n                                new XElement(\"files\",\n                                    new XElement(\"add\",\n                                        new XAttribute(\"value\", \"home3.html\")))))));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n            {\n                var rootGroup = config.RootSectionGroup;\n                Assert.Empty(rootGroup.Sections);\n                Assert.Empty(rootGroup.SectionGroups);\n\n                var effective = config.GetEffectiveSectionGroup();\n                var buffer = new StringBuilder();\n                foreach (var item in effective.Sections)\n                {\n                    buffer.AppendLine(item.Name);\n                }\n\n                Assert.True(21 <= effective.Sections.Count);\n                Assert.Equal(12, effective.SectionGroups.Count);\n\n                var list = new List<SectionDefinition>();\n                effective.GetAllDefinitions(list);\n                Assert.True(155 <= list.Count);\n            }\n\n            var serverConfig = server.GetApplicationHostConfiguration();\n            {\n                var rootGroup = serverConfig.RootSectionGroup;\n                Assert.Empty(rootGroup.Sections);\n                Assert.Equal(2, rootGroup.SectionGroups.Count);\n\n                var list = new List<SectionDefinition>();\n                rootGroup.GetAllDefinitions(list);\n                Assert.Equal(55, list.Count);\n\n                var effective = serverConfig.GetEffectiveSectionGroup();\n                Assert.True(21 <= effective.Sections.Count);\n                Assert.Equal(12, effective.SectionGroups.Count);\n            }\n\n            var section =\n                config.GetSection(\"system.webServer/defaultDocument\");\n            Assert.Equal(\"system.webServer/defaultDocument\", section.SectionPath);\n\n            var childSection = config.GetSection(\"system.webServer/defaultDocument\", \"WebSite1/test\");\n            Assert.Equal(\"system.webServer/defaultDocument\", childSection.SectionPath);\n#if !IIS\n            Assert.Equal(\"WebSite1\", section.Location);\n            Assert.EndsWith(\"web.config\", section.FileContext.FileName);\n\n            Assert.Equal(\"WebSite1/test\", childSection.Location);\n            Assert.EndsWith(\"web.config\", childSection.FileContext.FileName);\n\n            var handlersInWebConfig = childSection.GetParentElement().Section;\n            Assert.Equal(\"system.webServer/defaultDocument\", handlersInWebConfig.SectionPath);\n            Assert.Equal(\"WebSite1\", handlersInWebConfig.Location);\n            Assert.EndsWith(\"web.config\", handlersInWebConfig.FileContext.FileName);\n\n            var handlersInWebSite = section.GetParentElement().Section;\n            Assert.Equal(\"system.webServer/defaultDocument\", handlersInWebSite.SectionPath);\n            Assert.Equal(\"WebSite1\", handlersInWebSite.Location);\n            Assert.EndsWith(\"applicationHost.config\", handlersInWebSite.FileContext.FileName);\n\n            var handlersInEmpty = handlersInWebSite.GetParentElement().Section;\n            Assert.Equal(\"system.webServer/defaultDocument\", handlersInEmpty.SectionPath);\n            Assert.Equal(\"\", handlersInEmpty.Location);\n            Assert.EndsWith(\"applicationHost.config\", handlersInEmpty.FileContext.FileName);\n\n            var handlersInNull = handlersInEmpty.GetParentElement().Section;\n            Assert.Equal(\"system.webServer/defaultDocument\", handlersInNull.SectionPath);\n            Assert.Null(handlersInNull.Location);\n            Assert.EndsWith(\"applicationHost.config\", handlersInNull.FileContext.FileName);\n\n            Assert.Null(handlersInNull.GetParentElement());\n\n            var handlers2 = handlersInNull.GetCollection(\"files\");\n            Assert.Equal(6, handlers2.Count);\n            var handlers1 = handlersInEmpty.GetCollection(\"files\");\n            Assert.Equal(6, handlers1.Count);\n            var handlers3 = handlersInWebSite.GetCollection(\"files\");\n            Assert.Equal(7, handlers3.Count);\n\n            var appHost = section.FileContext.Parent;\n            Assert.EndsWith(\"applicationHost.config\", appHost.FileName);\n\n            var webRoot = appHost.Parent;\n            Assert.EndsWith(\"web.config\", webRoot.FileName);\n            {\n                var rootGroup = webRoot.RootSectionGroup;\n                Assert.Empty(rootGroup.Sections);\n                Assert.Empty(rootGroup.SectionGroups);\n            }\n\n            var machine = webRoot.Parent;\n            Assert.EndsWith(\"machine.config\", machine.FileName);\n            {\n                var rootGroup = machine.RootSectionGroup;\n                Assert.True(21 <= rootGroup.Sections.Count);\n                Assert.Equal(10, rootGroup.SectionGroups.Count);\n\n                var list = new List<SectionDefinition>();\n                rootGroup.GetAllDefinitions(list);\n                Assert.True(100 <= list.Count);\n            }\n#endif\n            {\n                var handlers = section.GetCollection(\"files\");\n                Assert.Equal(8, handlers.Count);\n\n                var childHandlers = childSection.GetCollection(\"files\");\n                Assert.Equal(9, childHandlers.Count);\n            }\n\n            var serverSection = serverConfig.GetSection(\"system.webServer/defaultDocument\", \"WebSite1\");\n            var serverChildSection = serverConfig.GetSection(\"system.webServer/defaultDocument\", \"WebSite1/test\");\n\n            {\n                var handlers = serverSection.GetCollection(\"files\");\n                Assert.Equal(7, handlers.Count);\n\n                var childHandlers = serverChildSection.GetCollection(\"files\");\n                Assert.Equal(7, childHandlers.Count);\n            }\n        }\n\n        [Fact]\n        public void UnlockedSection()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var webServer = root?.XPathSelectElement(\"/configuration/system.webServer\");\n                webServer?.Add(\n                    new XElement(\"handlers\",\n                        new XElement(\"add\",\n                            new XAttribute(\"name\", \"Python FastCGI\"),\n                            new XAttribute(\"path\", \"*\"),\n                            new XAttribute(\"verb\", \"*\"),\n                            new XAttribute(\"modules\", \"FastCgiModule\"),\n                            new XAttribute(\"scriptProcessor\",\n                                @\"C:\\Python36\\python.exe|C:\\Python36\\Lib\\site-packages\\wfastcgi.py\"),\n                            new XAttribute(\"resourceType\", \"Unspecified\"),\n                            new XAttribute(\"requireAccess\", \"Script\"))));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section =\n                config.GetSection(\"system.webServer/defaultDocument\");\n            Assert.Equal(true, section[\"enabled\"]);\n            {\n                var files = section.GetCollection(\"files\");\n                Assert.Equal(7, files.Count);\n            }\n        }\n\n        [Fact]\n        public void ConfigSource()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // <directoryBrowse configSource=\"directorybrowse.config\" />\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var webServer = root?.XPathSelectElement(\"/configuration/system.webServer\");\n                webServer?.Add(\n                    new XElement(\"directoryBrowse\",\n                        new XAttribute(\"configSource\", \"directorybrowse.config\")));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section = config.GetSection(\"system.webServer/directoryBrowse\");\n            Assert.Equal(true, section[\"enabled\"]);\n        }\n\n        [Fact]\n        public void ConfigSource2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // <authorization configSource=\"authorization.config\" />\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var webServer = root?.XPathSelectElement(\"/configuration/system.web\");\n                webServer?.Add(\n                    new XElement(\"authorization\",\n                        new XAttribute(\"configSource\", \"authorization.config\")));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section = config.GetSection(\"system.web/authorization\");\n            var collection = section.GetCollection();\n            Assert.Single(collection);\n\n            var newItem = collection.CreateElement();\n            Assert.Equal(\"allow\", newItem.ElementTagName);\n            newItem[\"users\"] = \"test\";\n            collection.Add(newItem);\n            server.CommitChanges();\n            /*\n             *     <system.web>\n        <authorization>\n            <allow users=\"test\" />\n        </authorization>\n    </system.web>\n             */\n            var content = File.ReadAllText(Path.Combine(Path.GetDirectoryName(siteConfig), \"authorization.config\"));\n            {\n                // <authorization configSource=\"authorization.config\" />\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var webServer = root?.XPathSelectElement(\"/configuration/system.web\");\n                Assert.NotNull(webServer);\n                var authorization = webServer.Element(\"authorization\");\n                Assert.NotNull(authorization);\n                Assert.Single(authorization.Elements());\n                var allow = authorization.Element(\"allow\");\n                Assert.NotNull(allow);\n                Assert.Equal(\"test\", allow.Attribute(\"users\").Value);\n            }\n\n            Assert.Equal(\"<authorization>\\r\\n  <allow users=\\\"*\\\" />\\r\\n  <deny users=\\\"?\\\" />\\r\\n</authorization>\\r\\n\", content);\n        }\n\n        [Fact]\n        public void ConfigSource3()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // <directoryBrowse configSource=\"directorybrowse.config\" />\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                root.Add(\n                    new XElement(\"system.web\",\n                        new XElement(\"authentication\",\n                            new XAttribute(\"configSource\", \"authentication.config\"))));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<COMException>(() => config.GetSection(\"system.web/authentication\"));\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 11\\r\\nError: Specified configSource cannot be parsed\\r\\n\\r\\n\",\n                exception.Message);\n        }\n\n        [Fact]\n        public void Log4Net()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // <directoryBrowse configSource=\"directorybrowse.config\" />\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                root.AddFirst(\n                    new XElement(\"configSections\",\n                        new XElement(\"section\",\n                            new XAttribute(\"name\", \"log4net\"),\n                            new XAttribute(\"type\", \"log4net.Config.Log4NetConfigurationSectionHandler, log4net\"))));\n                root.Add(\n                    new XElement(\"log4net\",\n                        new XElement(\"root\",\n                            new XElement(\"level\",\n                                new XAttribute(\"value\", \"INFO\")))));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<FileNotFoundException>(() => config.GetSection(\"log4net\"));\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nError: The configuration section 'log4net' cannot be read because it is missing schema\\r\\n\\r\\n\",\n                exception.Message);\n            {\n                var section = config.GetSection(\"system.webServer/defaultDocument\");\n                var files = section.GetCollection(\"files\");\n                Assert.Equal(7, files.Count);\n            }\n        }\n\n        [Fact]\n        public void Log4Net2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // <directoryBrowse configSource=\"directorybrowse.config\" />\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                root.AddFirst(\n                    new XElement(\"configSections\",\n                        new XElement(\"section\",\n                            new XAttribute(\"name\", \"log4net\"),\n                            new XAttribute(\"type\", \"log4net.Config.Log4NetConfigurationSectionHandler, log4net\"))));\n                root.Add(\n                    new XElement(\"log4net\",\n                        new XElement(\"root\",\n                            new XElement(\"level\",\n                                new XAttribute(\"value\", \"INFO\")))));\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            {\n                var section = config.GetSection(\"system.webServer/defaultDocument\");\n                var files = section.GetCollection(\"files\");\n                Assert.Equal(7, files.Count);\n            }\n\n            var exception = Assert.Throws<FileNotFoundException>(() => config.GetSection(\"log4net\"));\n#if IIS\n            Assert.Equal($\"Filename: \\r\\nError: The configuration section 'log4net' cannot be read because it is missing schema\\r\\n\\r\\n\",\n                exception.Message);\n#else\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nError: The configuration section 'log4net' cannot be read because it is missing schema\\r\\n\\r\\n\",\n                exception.Message);\n#endif\n            {\n                var section = config.GetSection(\"system.webServer/defaultDocument\");\n                var files = section.GetCollection(\"files\");\n                Assert.Equal(7, files.Count);\n            }\n        }\n\n        [Fact]\n        public void MissingSectionDefinition()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                var defaultDocument = root?.XPathSelectElement(\"/configuration/configSections/sectionGroup[@name='system.webServer']/section[@name='defaultDocument']\");\n                defaultDocument?.Remove();\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var exception = Assert.Throws<COMException>(() =>\n            {\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            });\n#if IIS\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nError: \\r\\n\", exception.Message);\n#else\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{current}\\r\\nLine number: 286\\r\\nError: The configuration section 'system.webServer/defaultDocument' cannot be read because it is missing section definition\\r\\n\\r\\n\", exception.Message);\n#endif\n        }\n\n        [Fact]\n        public void AspNetCore()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // <directoryBrowse configSource=\"directorybrowse.config\" />\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                root.Add(\n                    new XElement(\"location\",\n                        new XAttribute(\"path\", \".\"),\n                        new XAttribute(\"inheritInChildApplications\", \"false\"),\n                        new XElement(\"system.webServer\",\n                            new XElement(\"handlers\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"name\", \"aspNetCore\"),\n                                    new XAttribute(\"path\", \"*\"),\n                                    new XAttribute(\"verb\", \"*\"),\n                                    new XAttribute(\"modules\", \"AspNetCoreModule\"),\n                                    new XAttribute(\"resourceType\", \"Unspecified\"))),\n                            new XElement(\"aspNetCore\",\n                                new XAttribute(\"processPath\", \"dotnet\"),\n                                new XAttribute(\"arguments\", \".\\\\testmvccore.dll\"),\n                                new XAttribute(\"stdoutLogEnabled\", \"false\"),\n                                new XAttribute(\"stdoutLogFile\", \".\\\\logs\\\\stdout\")))));\n                file.Save(siteConfig);\n            }\n\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                var webServer = root?.XPathSelectElement(\"/configuration/configSections/sectionGroup[@name='system.webServer']\");\n                webServer?.Add(\n                    new XElement(\"section\",\n                        new XAttribute(\"name\", \"aspNetCore\"),\n                        new XAttribute(\"overrideModeDefault\", \"Allow\")));\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            {\n                var section = config.GetSection(\"system.webServer/defaultDocument\");\n                var files = section.GetCollection(\"files\");\n                Assert.Equal(7, files.Count);\n            }\n        }\n\n        [Fact]\n        public void LockAttributeModified()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // <directoryBrowse configSource=\"directorybrowse.config\" />\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                root.Add(\n                    new XElement(\"location\",\n                        new XAttribute(\"path\", \".\"),\n                        new XAttribute(\"inheritInChildApplications\", \"false\"),\n                        new XElement(\"system.webServer\",\n                            new XElement(\"httpErrors\",\n                                new XAttribute(\"defaultPath\", \"unknown\")\n                                ))));\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<FileLoadException>(() => config.GetSection(\"system.webServer/httpErrors\"));\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 12\\r\\nError: Lock violation\\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void LockAttributeModifiedWildcard()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // add the tags\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var httpErrors = root.XPathSelectElement(\"/configuration/system.webServer/httpErrors\");\n                httpErrors?.SetAttributeValue(\"lockAttributes\", \"*\");\n                file.Save(current);\n            }\n\n            {\n                // <directoryBrowse configSource=\"directorybrowse.config\" />\n                // Add the section.\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                root.Add(\n                    new XElement(\"location\",\n                        new XAttribute(\"path\", \".\"),\n                        new XAttribute(\"inheritInChildApplications\", \"false\"),\n                        new XElement(\"system.webServer\",\n                            new XElement(\"httpErrors\",\n                                new XAttribute(\"defaultPath\", \"unknown\")\n                                ))));\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<FileLoadException>(() => config.GetSection(\"system.webServer/httpErrors\"));\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 12\\r\\nError: Lock violation\\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void LockItemRemovedFromCollection()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section = config.GetSection(\"system.webServer/modules\");\n            var collection = section.GetCollection();\n            {\n                Assert.Equal(\"DynamicCompressionModule\", collection[0][\"name\"]);\n                var exception = Assert.Throws<FileLoadException>(() => collection.RemoveAt(0)); // lockItem=true\n                Assert.Equal($\"Filename: \\r\\nError: Lock violation\\r\\n\\r\\n\", exception.Message);\n            }\n        }\n\n        [Fact]\n        public void LockItemRemovedFromCollection2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section = config.GetSection(\"system.webServer/modules\");\n            var collection = section.GetCollection();\n            var item = collection[collection.Count - 1];\n            {\n                Assert.Equal(\"ScriptModule-4.0\", item[\"name\"]);\n                Assert.Equal(44, collection.Count);\n                collection.Remove(item);\n                Assert.Equal(43, collection.Count);\n            }\n        }\n\n        [Fact]\n        public void LockItemAddToCollection()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section = config.GetSection(\"system.webServer/modules\");\n            var collection = section.GetCollection();\n            var newModule = collection.CreateElement();\n            newModule[\"name\"] = \"RequestMonitorModule\";\n            collection.Add(newModule);\n            collection.Remove(newModule);\n        }\n\n        [Fact]\n        public void LockItemAddToCollection2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section = config.GetSection(\"system.webServer/modules\");\n            var collection = section.GetCollection();\n            var newModule = collection.CreateElement();\n            newModule[\"name\"] = \"RequestMonitorModule\";\n            // TODO: investigate how to behave the same.\n#if IIS\n            var exception = Assert.Throws<FileLoadException>(() => collection.AddAt(0, newModule));\n            Assert.Equal(\"Filename: \\r\\nError: This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault=\\\"Deny\\\"), or set explicitly by a location tag with overrideMode=\\\"Deny\\\" or the legacy allowOverride=\\\"false\\\".\\r\\n\\r\\n\", exception.Message);\n#else            \n            collection.AddAt(0, newModule);\n            collection.Remove(newModule);\n#endif\n        }\n\n        [Fact]\n        public void LockItemRemovedInLocationTag()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // modify the path\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                root.Add(\n                    new XElement(\"location\",\n                        new XAttribute(\"path\", \"WebSite1\"),\n                        new XElement(\"system.webServer\",\n                            new XElement(\"modules\",\n                                new XElement(\"remove\",\n                                    new XAttribute(\"name\", \"DynamicCompressionModule\")))))\n                    );\n                file.Save(current);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section = config.GetSection(\"system.webServer/modules\");\n            var collection = section.GetCollection();\n            var item = collection[0];\n            Assert.Equal(\"StaticCompressionModule\", item[\"name\"]);\n        }\n\n        [Fact]\n        public void LockItemRemovedInWebConfig()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // modify the path\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var webServer = root.Element(\"system.webServer\");\n                webServer.Add(\n                    new XElement(\"modules\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"name\", \"DynamicCompressionModule\")))\n                    );\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var exception = Assert.Throws<FileLoadException>(() => config.GetSection(\"system.webServer/modules\"));\n            Assert.Equal($\"Filename: \\\\\\\\?\\\\{siteConfig}\\r\\nLine number: 10\\r\\nError: Lock violation\\r\\n\\r\\n\", exception.Message);\n        }\n\n        [Fact]\n        public void LockItemRemovedInWebConfig2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // modify the path\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                var webServer = root.Element(\"system.webServer\");\n                webServer.Add(\n                    new XElement(\"modules\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"name\", \"ScriptModule-4.0\")))\n                    );\n                file.Save(siteConfig);\n            }\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n            var section = config.GetSection(\"system.webServer/modules\");\n            Assert.Equal(43, section.GetCollection().Count);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/GlobalSuppressions.cs",
    "content": "﻿\n// This file is used by Code Analysis to maintain SuppressMessage \n// attributes that are applied to this project.\n// Project-level suppressions either have no target or are given \n// a specific target and scoped to a namespace, type, member, etc.\n\n[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(\"Assertions\", \"xUnit2004:Do not use equality check to test for boolean conditions\", Justification = \"<Pending>\", Scope = \"member\", Target = \"~M:Tests.Exceptions.ServerTestCases.TestIisExpressReadOnly\")]\n[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(\"Assertions\", \"xUnit2004:Do not use equality check to test for boolean conditions\", Justification = \"<Pending>\", Scope = \"member\", Target = \"~M:Tests.TestCases.TestIisExpress(Microsoft.Web.Administration.ServerManager)\")]\n[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(\"Assertions\", \"xUnit2004:Do not use equality check to test for boolean conditions\", Justification = \"<Pending>\", Scope = \"member\", Target = \"~M:Tests.Exceptions.SiteTestCases.TestIisExpressDuplicateSection\")]\n[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(\"Assertions\", \"xUnit2004:Do not use equality check to test for boolean conditions\", Justification = \"<Pending>\", Scope = \"member\", Target = \"~M:Tests.TestCases.TestIisExpressMissingWebsiteConfig(Microsoft.Web.Administration.ServerManager)\")]\n\n"
  },
  {
    "path": "Tests/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2014-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"6a204177-089a-433c-b799-329f998b104e\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "Tests/ServerManagerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing Microsoft.Web.Administration;\nusing Xunit;\n\nnamespace Tests\n{\n    using System;\n    using System.IO;\n    using System.Linq;\n    using System.Reflection;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n\n    /// <summary>\n    /// IIS version.\n    /// </summary>\n    public class ServerManagerTestFixture\n    {\n        [Fact]\n        public void ConfigBuilders()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            var siteConfig = TestHelper.CopySiteConfig(directoryName, \"original.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // Add the configBuilders section to web.config\n                var file = XDocument.Load(siteConfig);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                // Add configSections element if not already present\n                var configSections = root.Element(\"configSections\");\n                if (configSections == null)\n                {\n                    configSections = new XElement(\"configSections\");\n                    root.AddFirst(configSections);\n                }\n\n                // Add the configBuilders section\n                configSections.Add(\n                    new XElement(\"section\",\n                        new XAttribute(\"name\", \"configBuilders\"),\n                        new XAttribute(\"type\", \"System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\"),\n                        new XAttribute(\"restartOnExternalChanges\", \"false\"),\n                        new XAttribute(\"requirePermission\", \"false\")));\n\n                // Add the configBuilders element with an environment builder\n                root.Add(\n                    new XElement(\"configBuilders\",\n                        new XElement(\"builders\",\n                            new XElement(\"add\",\n                                new XAttribute(\"name\", \"Environment\"),\n                                new XAttribute(\"type\", \"Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment, Version=1.0.0.0, Culture=neutral\"),\n                                new XAttribute(\"mode\", \"Greedy\"),\n                                new XAttribute(\"prefix\", \"AppSetting_\"),\n                                new XAttribute(\"stripPrefix\", \"true\")))));\n\n                // Add test settings with configBuilder attribute\n                var appSettings = root.Element(\"appSettings\");\n                if (appSettings == null)\n                {\n                    appSettings = new XElement(\"appSettings\", \n                        new XAttribute(\"configBuilders\", \"Environment\"));\n                    root.Add(appSettings);\n                }\n                else\n                {\n                    appSettings.SetAttributeValue(\"configBuilders\", \"Environment\");\n                }\n\n                appSettings.Add(\n                    new XElement(\"add\",\n                        new XAttribute(\"key\", \"ServiceID\"),\n                        new XAttribute(\"value\", \"ServiceID value from web.config\")));\n\n                // Add a connection string section with configBuilder attribute\n                var connectionStrings = root.Element(\"connectionStrings\");\n                if (connectionStrings == null)\n                {\n                    connectionStrings = new XElement(\"connectionStrings\", \n                        new XAttribute(\"configBuilders\", \"Environment\"));\n                    root.Add(connectionStrings);\n                }\n                else\n                {\n                    connectionStrings.SetAttributeValue(\"configBuilders\", \"Environment\");\n                }\n\n                connectionStrings.Add(\n                    new XElement(\"add\",\n                        new XAttribute(\"name\", \"default\"),\n                        new XAttribute(\"connectionString\", \"Data Source=web.config/mydb.db\")));\n\n                file.Save(siteConfig);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n\n            var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n            // Verify the config sections were added correctly\n            var configBuildersSection = config.GetSection(\"configBuilders\");\n            Assert.NotNull(configBuildersSection);\n\n            // Verify the builders collection\n            var builders = configBuildersSection.GetCollection(\"builders\");\n            Assert.Single(builders);\n            Assert.Equal(\"Environment\", builders[0][\"name\"]);\n            Assert.Equal(\"Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment, Version=1.0.0.0, Culture=neutral\", builders[0][\"type\"]);\n            Assert.Equal(\"Greedy\", builders[0][\"mode\"]);\n            Assert.Equal(\"AppSetting_\", builders[0][\"prefix\"]);\n            Assert.Equal(true, builders[0][\"stripPrefix\"]);\n\n            // Verify appSettings with configBuilders attribute\n            var appSettingsSection = config.GetSection(\"appSettings\");\n            Assert.Equal(\"Environment\", appSettingsSection.GetAttributeValue(\"configBuilders\"));\n            \n            // Verify the appSettings values\n            var appSettingsCollection = appSettingsSection.GetCollection();\n            Assert.Single(appSettingsCollection);\n            Assert.Equal(\"ServiceID\", appSettingsCollection[0][\"key\"]);\n            Assert.Equal(\"ServiceID value from web.config\", appSettingsCollection[0][\"value\"]);\n\n            // Verify connectionStrings with configBuilders attribute\n            var connectionStringsSection = config.GetSection(\"connectionStrings\");\n            Assert.Equal(\"Environment\", connectionStringsSection.GetAttributeValue(\"configBuilders\"));\n\n            // Verify the connectionStrings values\n            var connectionStringsCollection = connectionStringsSection.GetCollection();\n            Assert.True(connectionStringsCollection.Count > 0);\n            var last = connectionStringsCollection.Last();\n            Assert.Equal(\"default\", last[\"name\"]);\n            Assert.Equal(\"Data Source=web.config/mydb.db\", last[\"connectionString\"]);\n        }\n\n        [Fact]\n        public void MissingWebsiteConfig()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string Current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string Original = Path.Combine(directoryName, @\"original2.config\");\n            string Expected = Path.Combine(directoryName, @\"expected.config\");\n            File.Copy(Original, Current, true);\n            TestHelper.FixPhysicalPathMono(Current);\n            File.Delete(TestHelper.GetSiteConfig(directoryName));\n\n#if IIS\n            var server = new ServerManager(Current);\n#else\n            var server = new IisExpressServerManager(Current);\n#endif\n            TestCases.IisExpressMissingWebsiteConfig(server);\n\n            {\n                // reorder entities to match IIS result.\n                var file = XDocument.Load(Current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var pool = root.XPathSelectElement(\"/configuration/system.applicationHost/applicationPools/add[@name='Clr4IntegratedAppPool']\");\n                pool.SetAttributeValue(\"managedPipelineMode\", \"Integrated\");\n#if !IIS\n                var windows = root.XPathSelectElement(\"/configuration/location[@path='WebSite2']/system.webServer/security/authentication/windowsAuthentication\");\n                windows?.SetAttributeValue(\"enabled\", true);\n\n                var security = root.XPathSelectElement(\"/configuration/location[@path='WebSite1']/system.webServer/security\");\n                security.Remove();\n                var httpLogging = root.XPathSelectElement(\"/configuration/location[@path='WebSite1']/system.webServer/httpLogging\");\n                httpLogging.AddAfterSelf(security);\n\n                var extended = windows.Element(\"extendedProtection\");\n                extended?.SetAttributeValue(\"flags\", \"None\");\n#endif\n                file.Save(Current);\n            }\n\n            {\n                // reorder entities to match IIS result.\n                var file = XDocument.Load(TestHelper.GetSiteConfig(directoryName));\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var top = root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument\");\n                var staticContent = root.XPathSelectElement(\"/configuration/system.webServer/staticContent\");\n                staticContent?.Remove();\n                top.AddBeforeSelf(staticContent);\n#if !IIS\n                var rewrite = root.XPathSelectElement(\"/configuration/system.webServer/rewrite\");\n                var urlCompression = root.XPathSelectElement(\"/configuration/system.webServer/urlCompression\");\n                urlCompression.Remove();\n                var httpErrors = root.XPathSelectElement(\"/configuration/system.webServer/httpErrors\");\n                httpErrors?.Remove();\n                var security = root.XPathSelectElement(\"/configuration/system.webServer/security\");\n                security.Remove();\n                rewrite.AddAfterSelf(httpErrors, urlCompression, security);\n                httpErrors?.Element(\"error\")?.SetAttributeValue(\"prefixLanguageFilePath\", string.Empty);\n                httpErrors?.Element(\"error\")?.SetAttributeValue(\"responseMode\", \"File\");\n\n                // IMPORTANT: workaround an IIS issue.\n                var document = root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/add[@value='index.htm']\");\n                var item = new XElement(\"add\",\n                    new XAttribute(\"value\", \"index.html\"));\n                document?.AddAfterSelf(item);\n\n                var clear = root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/clear\");\n                var remove = new XElement(\"remove\",\n                    new XAttribute(\"value\", \"index.html\"));\n                clear?.AddAfterSelf(remove);\n#endif\n                file.Save(TestHelper.GetSiteConfig(directoryName));\n            }\n\n            TestHelper.FixPhysicalPathMono(Expected);\n            XmlAssert.Equal(Expected, Current);\n            TestHelper.AssertSiteConfig(directoryName, \"expected1.config\");\n        }\n\n        [Fact]\n        public void Load()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string Current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string Original = Path.Combine(directoryName, @\"original2.config\");\n            string Expected = Path.Combine(directoryName, @\"expected.config\");\n            File.Copy(Original, Current, true);\n            TestHelper.FixPhysicalPathMono(Current);\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n\n#if IIS\n            var server = new ServerManager(Current);\n#else\n            var server = new IisExpressServerManager(Current);\n#endif\n            TestCases.IisExpress(server, Current);\n\n            {\n                // reorder entities to match IIS result.\n                var file = XDocument.Load(Current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var pool = root.XPathSelectElement(\"/configuration/system.applicationHost/applicationPools/add[@name='Clr4IntegratedAppPool']\");\n                pool.SetAttributeValue(\"managedPipelineMode\", \"Integrated\");\n\n                var windows = root.XPathSelectElement(\"/configuration/location[@path='WebSite2']/system.webServer/security/authentication/windowsAuthentication\");\n                windows.SetAttributeValue(\"enabled\", true);\n\n                var security = root.XPathSelectElement(\"/configuration/location[@path='WebSite1']/system.webServer/security\");\n                security.Remove();\n                var httpLogging = root.XPathSelectElement(\"/configuration/location[@path='WebSite1']/system.webServer/httpLogging\");\n                httpLogging.AddAfterSelf(security);\n\n                var extended = windows.Element(\"extendedProtection\");\n                extended?.SetAttributeValue(\"flags\", \"None\");\n#if IIS\n                var asp = root.XPathSelectElement(\"/configuration/system.webServer/asp/comPlus\");\n                asp.Remove();\n#endif\n                file.Save(Current);\n            }\n\n            {\n                // reorder entities to match IIS result.\n                var file = XDocument.Load(TestHelper.GetSiteConfig(directoryName));\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var rewrite = root.XPathSelectElement(\"/configuration/system.webServer/rewrite\");\n                var urlCompression = root.XPathSelectElement(\"/configuration/system.webServer/urlCompression\");\n                urlCompression.Remove();\n                var httpErrors = root.XPathSelectElement(\"/configuration/system.webServer/httpErrors\");\n                httpErrors?.Remove();\n                var security = root.XPathSelectElement(\"/configuration/system.webServer/security\");\n                security.Remove();\n                rewrite.AddAfterSelf(httpErrors, urlCompression, security);\n                httpErrors?.Element(\"error\")?.SetAttributeValue(\"prefixLanguageFilePath\", string.Empty);\n                httpErrors?.Element(\"error\")?.SetAttributeValue(\"responseMode\", \"File\");\n#if !IIS\n                // IMPORTANT: workaround an IIS issue.\n                var document = root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/add[@value='Default.asp']\");\n                var item = new XElement(\"add\",\n                    new XAttribute(\"value\", \"index.htm\"));\n                document?.AddAfterSelf(item);\n\n                var clear = root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/clear\");\n                var remove = new XElement(\"remove\",\n                    new XAttribute(\"value\", \"index.htm\"));\n                clear?.AddAfterSelf(remove);\n#endif\n                file.Save(TestHelper.GetSiteConfig(directoryName));\n            }\n\n            TestHelper.FixPhysicalPathMono(Expected);\n            XmlAssert.Equal(Expected, Current);\n            TestHelper.AssertSiteConfig(directoryName, \"expected.config\");\n        }\n\n        [Fact]\n        public void Locking()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string Current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string Original = Path.Combine(directoryName, @\"original2.config\");\n            string Expected = Path.Combine(directoryName, @\"expected.config\");\n            File.Copy(Original, Current, true);\n            TestHelper.FixPhysicalPathMono(Current);\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n\n#if IIS\n            var server = new ServerManager(Current);\n#else\n            var server = new IisExpressServerManager(Current);\n#endif\n            TestCases.IisExpressHandlers(server);\n        }\n\n        [Fact]\n        public void Location()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string Current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string Original = Path.Combine(directoryName, @\"original2.config\");\n            string Expected = Path.Combine(directoryName, @\"expected.config\");\n            File.Copy(Original, Current, true);\n            TestHelper.FixPhysicalPathMono(Current);\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n\n#if IIS\n            var server = new ServerManager(Current);\n#else\n            var server = new IisExpressServerManager(Current);\n#endif\n            TestCases.IisExpressLocation(server);\n        }\n\n        [Fact]\n        public void Location2()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string Current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string Original = Path.Combine(directoryName, @\"original2.config\");\n            string Expected = Path.Combine(directoryName, @\"expected.config\");\n            File.Copy(Original, Current, true);\n            TestHelper.FixPhysicalPathMono(Current);\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n\n#if IIS\n            var server = new ServerManager(Current);\n#else\n            var server = new IisExpressServerManager(Current);\n#endif\n            TestCases.IisExpressLocation2(server);\n        }\n\n        [Fact]\n        public void Inheritance()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string Current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string Original = Path.Combine(directoryName, @\"original2.config\");\n            string Expected = Path.Combine(directoryName, @\"expected.config\");\n            File.Copy(Original, Current, true);\n            TestHelper.FixPhysicalPathMono(Current);\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n\n#if IIS\n            var server = new ServerManager(Current);\n#else\n            var server = new IisExpressServerManager(Current);\n#endif\n            TestCases.IisExpressInheritance(server);\n        }\n\n        [Fact]\n        public void SiteDefaults()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string Current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string Original = Path.Combine(directoryName, @\"original2.config\");\n            string Expected = Path.Combine(directoryName, @\"expected.config\");\n            File.Copy(Original, Current, true);\n            TestHelper.FixPhysicalPathMono(Current);\n            TestHelper.CopySiteConfig(directoryName, \"original.config\");\n\n#if IIS\n            var server = new ServerManager(Current);\n#else\n            var server = new IisExpressServerManager(Current);\n#endif\n            TestCases.IisSiteDefaults(server);\n\n            // TODO: assert generated XML.\n        }\n\n        [Fact]\n        public void PreloadEnabledInApplicationDefaults()\n        {\n            var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);\n            Environment.SetEnvironmentVariable(\"JEXUS_TEST_HOME\", directoryName);\n\n            if (directoryName == null)\n            {\n                return;\n            }\n\n            string current = Path.Combine(directoryName, @\"applicationHost.config\");\n            string original = Path.Combine(directoryName, @\"original2.config\");\n            File.Copy(original, current, true);\n            TestHelper.FixPhysicalPathMono(current);\n\n            {\n                // set the flag to true\n                var file = XDocument.Load(current);\n                var root = file.Root;\n                if (root == null)\n                {\n                    return;\n                }\n\n                var site = root.XPathSelectElement(\"/configuration/system.applicationHost/sites/site[@name='GuessMeWeb']\");\n                site.Add(new XElement(\"applicationDefaults\",\n                                       new XAttribute(\"preloadEnabled\", \"true\")));\n                file.Save(current);\n            }\n\n#if IIS\n            var server = new ServerManager(current);\n#else\n            var server = new IisExpressServerManager(current);\n#endif\n            var config = server.GetApplicationHostConfiguration();\n            Assert.Equal(true, server.Sites[\"GuessMeWeb\"].ApplicationDefaults.GetAttributeValue(\"preloadEnabled\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/TestCases.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Runtime.InteropServices;\n\nusing Microsoft.Web.Administration;\nusing Xunit;\n\nnamespace Tests\n{\n    public static class TestCases\n    {\n        public static void IisExpress(ServerManager server, string fileName)\n        {\n            Assert.Equal(5, server.ApplicationPools.Count);\n            Assert.True(server.ApplicationPools.AllowsAdd);\n            Assert.False(server.ApplicationPools.AllowsClear);\n            Assert.False(server.ApplicationPools.AllowsRemove);\n            Assert.Equal(\n                new[] { '\\\\', '/', '\"', '|', '<', '>', ':', '*', '?', ']', '[', '+', '=', ';', ',', '@', '&' },\n                ApplicationPoolCollection.InvalidApplicationPoolNameCharacters());\n\n            Assert.Equal(12, server.Sites.Count);\n            Assert.True(server.Sites.AllowsAdd);\n            Assert.False(server.Sites.AllowsClear);\n            Assert.False(server.Sites.AllowsRemove);\n            Assert.Equal(\n                new[] { '\\\\', '/', '?', ';', ':', '@', '&', '=', '+', '$', ',', '|', '\"', '<', '>' },\n                SiteCollection.InvalidSiteNameCharacters());\n\n            var siteDefaults = server.SiteDefaults;\n            //Assert.Equal(\"[http] :8080:localhost\", server.Sites[0].Bindings[0].ToString());\n            Assert.Equal(\"localhost on *:8080 (http)\", server.Sites[0].Bindings[0].ToShortString());\n            Assert.Equal(\"%IIS_USER_HOME%\\\\Logs\", siteDefaults.LogFile.Directory);\n            Assert.Equal(LogFormat.W3c, siteDefaults.LogFile.LogFormat);\n            Assert.Equal(\"%IIS_USER_HOME%\\\\TraceLogFiles\", siteDefaults.TraceFailedRequestsLogging.Directory);\n            Assert.True(siteDefaults.TraceFailedRequestsLogging.Enabled);\n            Assert.True(siteDefaults.LogFile.Enabled);\n            Assert.Equal(\"Clr4IntegratedAppPool\", server.ApplicationDefaults.ApplicationPoolName);\n\n            var pool = server.ApplicationPools[0];\n\n            var model = pool.GetChildElement(\"processModel\");\n            var item = model[\"maxProcesses\"];\n            Assert.Equal(\"Clr4IntegratedAppPool\", pool.Name);\n            Assert.Equal(\"v4.0\", pool.ManagedRuntimeVersion);\n            Assert.Equal(1, pool.ProcessModel.MaxProcesses);\n            Assert.Equal(string.Empty, pool.ProcessModel.UserName);\n#if IIS\n            Assert.Equal(1L, item);\n#else\n            Assert.Equal(1U, item);\n#endif\n\n            // TODO: why it should be int.\n#if IIS\n            Assert.Equal(0, pool.GetAttributeValue(\"managedPipelineMode\"));\n            pool.SetAttributeValue(\"managedPipelineMode\", 1);\n            Assert.Equal(1, pool.GetAttributeValue(\"managedPipelineMode\"));\n            pool.SetAttributeValue(\"managedPipelineMode\", \"Integrated\");\n            Assert.Equal(0, pool.GetAttributeValue(\"managedPipelineMode\"));\n#else\n            Assert.Equal(0L, pool.GetAttributeValue(\"managedPipelineMode\"));\n            pool.SetAttributeValue(\"managedPipelineMode\", 1);\n            Assert.Equal(1L, pool.GetAttributeValue(\"managedPipelineMode\"));\n            pool.SetAttributeValue(\"managedPipelineMode\", \"Integrated\");\n            Assert.Equal(0L, pool.GetAttributeValue(\"managedPipelineMode\"));\n\n            Assert.Equal(14, pool.ApplicationCount);\n#endif\n            var name = Assert.Throws<COMException>(() => pool.SetAttributeValue(\"name\", \"\"));\n            Assert.Equal(\"Invalid application pool name\\r\\n\", name.Message);\n\n            var time = Assert.Throws<COMException>(() => pool.ProcessModel.IdleTimeout = TimeSpan.MaxValue);\n            Assert.Equal(\"Timespan value must be between 00:00:00 and 30.00:00:00 seconds inclusive, with a granularity of 60 seconds\\r\\n\", time.Message);\n\n            var site = server.Sites[0];\n            Assert.Equal(\"WebSite1\", site.Name);\n            Assert.Equal(14, site.Bindings.Count);\n            {\n                var binding = site.Bindings[0];\n                Assert.Equal(IPAddress.Any, binding.EndPoint.Address);\n                Assert.Equal(8080, binding.EndPoint.Port);\n                Assert.Equal(\"localhost\", binding.Host);\n                Assert.Equal(\"*:8080:localhost\", binding.ToString());\n                Assert.Equal(\":8080:localhost\", binding.BindingInformation);\n            }\n            {\n                var siteBinding = site.Bindings[1];\n                Assert.Null(siteBinding.EndPoint);\n                Assert.Equal(string.Empty, siteBinding.Host);\n                Assert.False(siteBinding.IsIPPortHostBinding);\n                Assert.False(siteBinding.UseDsMapper);\n                Assert.Null(siteBinding.CertificateHash);\n                Assert.Null(siteBinding.CertificateStoreName);\n                Assert.Equal(\"808:* (net.tcp)\", siteBinding.ToShortString());\n            }\n            {\n                var siteBinding = site.Bindings[2];\n                Assert.Null(siteBinding.EndPoint);\n                Assert.Equal(string.Empty, siteBinding.Host);\n                Assert.False(siteBinding.IsIPPortHostBinding);\n                Assert.False(siteBinding.UseDsMapper);\n                Assert.Null(siteBinding.CertificateHash);\n                Assert.Null(siteBinding.CertificateStoreName);\n                Assert.Equal(\"localhost (net.msmq)\", siteBinding.ToShortString());\n            }\n            {\n                var siteBinding = site.Bindings[3];\n                Assert.Null(siteBinding.EndPoint);\n                Assert.Equal(string.Empty, siteBinding.Host);\n                Assert.False(siteBinding.IsIPPortHostBinding);\n                Assert.False(siteBinding.UseDsMapper);\n                Assert.Null(siteBinding.CertificateHash);\n                Assert.Null(siteBinding.CertificateStoreName);\n                Assert.Equal(\"localhost (msmq.formatname)\", siteBinding.ToShortString());\n            }\n            {\n                var siteBinding = site.Bindings[4];\n                Assert.Null(siteBinding.EndPoint);\n                Assert.Equal(string.Empty, siteBinding.Host);\n                Assert.False(siteBinding.IsIPPortHostBinding);\n                Assert.False(siteBinding.UseDsMapper);\n                Assert.Null(siteBinding.CertificateHash);\n                Assert.Null(siteBinding.CertificateStoreName);\n                Assert.Equal(\"* (net.pipe)\", siteBinding.ToShortString());\n            }\n            {\n                var siteBinding = site.Bindings[5];\n                Assert.Null(siteBinding.EndPoint);\n                Assert.Equal(string.Empty, siteBinding.Host);\n                Assert.False(siteBinding.IsIPPortHostBinding);\n                Assert.False(siteBinding.UseDsMapper);\n                Assert.Null(siteBinding.CertificateHash);\n                Assert.Null(siteBinding.CertificateStoreName);\n                Assert.Equal(\"*:21: (ftp)\", siteBinding.ToShortString());\n            }\n            {\n                var siteBinding = site.Bindings[6];\n                Assert.Equal(\"* on *:8080 (http)\", siteBinding.ToShortString());\n                Assert.Equal(\"0.0.0.0:8080\", siteBinding.EndPoint.ToString());\n                Assert.Equal(\"*\", siteBinding.Host);\n            }\n            {\n                var siteBinding = site.Bindings[7];\n                Assert.Equal(\"localhost on *:443 (https)\", siteBinding.ToShortString());\n                Assert.Equal(\"0.0.0.0:443\", siteBinding.EndPoint.ToString());\n                Assert.Equal(\"localhost\", siteBinding.Host);\n            }\n            {\n                var siteBinding = site.Bindings[8];\n                Assert.Equal(\"* on *:44300 (https)\", siteBinding.ToShortString());\n                Assert.Equal(\"0.0.0.0:44300\", siteBinding.EndPoint.ToString());\n                Assert.Equal(\"*\", siteBinding.Host);\n            }\n            {\n                var siteBinding = site.Bindings[9];\n                Assert.Null(siteBinding.EndPoint);\n                Assert.Equal(string.Empty, siteBinding.Host);\n                Assert.False(siteBinding.IsIPPortHostBinding);\n                Assert.False(siteBinding.UseDsMapper);\n                Assert.Null(siteBinding.CertificateHash);\n                Assert.Null(siteBinding.CertificateStoreName);\n                Assert.Equal(\"*:210:localhost (ftp)\", siteBinding.ToShortString());\n            }\n            {\n                var binding = site.Bindings[10];\n                Assert.Null(binding.EndPoint);\n                Assert.Equal(string.Empty, binding.Host);\n                Assert.False(binding.IsIPPortHostBinding);\n                Assert.False(binding.UseDsMapper);\n                Assert.Null(binding.CertificateHash);\n                Assert.Null(binding.CertificateStoreName);\n                Assert.Equal(\"* (net.tcp)\", binding.ToShortString());\n            }\n            {\n                var binding = site.Bindings[11];\n                Assert.Null(binding.EndPoint);\n                Assert.Equal(string.Empty, binding.Host);\n                Assert.False(binding.IsIPPortHostBinding);\n                Assert.False(binding.UseDsMapper);\n                Assert.Null(binding.CertificateHash);\n                Assert.Null(binding.CertificateStoreName);\n                Assert.Equal(\"* (net.msmq)\", binding.ToShortString());\n            }\n            {\n                var siteBinding = site.Bindings[12];\n                Assert.Null(siteBinding.EndPoint);\n                Assert.Equal(string.Empty, siteBinding.Host);\n                Assert.False(siteBinding.IsIPPortHostBinding);\n                Assert.False(siteBinding.UseDsMapper);\n                Assert.Null(siteBinding.CertificateHash);\n                Assert.Null(siteBinding.CertificateStoreName);\n                Assert.Equal(\"* (msmq.formatname)\", siteBinding.ToShortString());\n            }\n            {\n                var binding = site.Bindings[13];\n                Assert.Null(binding.EndPoint);\n                Assert.Equal(string.Empty, binding.Host);\n                Assert.False(binding.IsIPPortHostBinding);\n                Assert.False(binding.UseDsMapper);\n                Assert.Null(binding.CertificateHash);\n                Assert.Null(binding.CertificateStoreName);\n                Assert.Equal(\"localhost (net.pipe)\", binding.ToShortString());\n            }\n\n            Assert.True(site.Bindings.AllowsAdd);\n            Assert.True(site.Bindings.AllowsClear);\n            Assert.False(site.Bindings.AllowsRemove);\n            Assert.Equal(\"%IIS_USER_HOME%\\\\Logs\", site.LogFile.Directory);\n\n            var sslSite = server.Sites[1];\n            var sslBinding = sslSite.Bindings[1];\n            var certificateHash = sslBinding.CertificateHash;\n            var certificateStoreName = sslBinding.CertificateStoreName;\n            Assert.Equal(SslFlags.Sni, sslBinding.SslFlags);\n\n            sslSite.Bindings.RemoveAt(1);\n            sslSite.Bindings.Add(\":443:localhost\", \"https\");\n            sslBinding = sslSite.Bindings[1];\n            Assert.Equal(SslFlags.None, sslBinding.SslFlags);\n\n            sslSite.Bindings.RemoveAt(1);\n            sslSite.Bindings.Add(\":443:localhost\", certificateHash, certificateStoreName, SslFlags.Sni);\n            sslBinding = sslSite.Bindings[1];\n            Assert.Equal(SslFlags.Sni, sslBinding.SslFlags);\n\n            sslSite.Bindings.RemoveAt(1);\n            sslSite.Bindings.Add(\":443:localhost\", certificateHash, certificateStoreName);\n            sslBinding = sslSite.Bindings[1];\n            Assert.Equal(SslFlags.None, sslBinding.SslFlags);\n\n            {\n                sslBinding = sslSite.Bindings.CreateElement();\n                var exception = Assert.Throws<FileNotFoundException>(() => sslSite.Bindings.Add(sslBinding));\n                Assert.Equal(\"Filename: \\r\\nError: Element is missing required attributes protocol,bindingInformation\\r\\n\\r\\n\", exception.Message);\n            }\n\n            var app = site.Applications[0];\n            Assert.True(site.Applications.AllowsAdd);\n            Assert.False(site.Applications.AllowsClear);\n            Assert.False(site.Applications.AllowsRemove);\n            Assert.Equal(\n                new[] { '\\\\', '?', ';', ':', '@', '&', '=', '+', '$', ',', '|', '\"', '<', '>', '*' },\n                ApplicationCollection.InvalidApplicationPathCharacters());\n            Assert.Equal(\"Clr4IntegratedAppPool\", app.ApplicationPoolName);\n\n            Assert.Equal(\"/\", app.Path);\n            var vDir = app.VirtualDirectories[0];\n            Assert.True(app.VirtualDirectories.AllowsAdd);\n            Assert.False(app.VirtualDirectories.AllowsClear);\n            Assert.False(app.VirtualDirectories.AllowsRemove);\n            Assert.Equal(\n                new[] { '\\\\', '?', ';', ':', '@', '&', '=', '+', '$', ',', '|', '\"', '<', '>', '*' },\n                VirtualDirectoryCollection.InvalidVirtualDirectoryPathCharacters());\n\n            Assert.Equal(Helper.IsRunningOnMono() ? \"%JEXUS_TEST_HOME%/WebSite1\" : \"%JEXUS_TEST_HOME%\\\\WebSite1\", vDir.PhysicalPath);\n\n            {\n                var config = server.GetApplicationHostConfiguration();\n                var section = config.GetSection(\"system.applicationHost/log\");\n                var mode = section.Attributes[\"centralLogFileMode\"];\n#if IIS\n                Assert.Equal(0, mode.Value);\n#else\n                Assert.Equal(0L, mode.Value);\n#endif\n                var encoding = section.Attributes[\"logInUTF8\"];\n                Assert.Equal(true, encoding.Value);\n                ConfigurationSection httpLoggingSection = config.GetSection(\"system.webServer/httpLogging\");\n                Assert.Equal(false, httpLoggingSection[\"dontLog\"]);\n\n                ConfigurationSection defaultDocumentSection = config.GetSection(\"system.webServer/defaultDocument\");\n                Assert.Equal(true, defaultDocumentSection[\"enabled\"]);\n                ConfigurationElementCollection filesCollection = defaultDocumentSection.GetCollection(\"files\");\n                Assert.Equal(6, filesCollection.Count);\n\n                var errorsSection = config.GetSection(\"system.webServer/httpErrors\");\n                var errorsCollection = errorsSection.GetCollection();\n                Assert.Equal(9, errorsCollection.Count);\n\n                var anonymousSection = config.GetSection(\"system.webServer/security/authentication/anonymousAuthentication\");\n                var anonymousEnabled = (bool)anonymousSection[\"enabled\"];\n                Assert.True(anonymousEnabled);\n                var value = anonymousSection[\"password\"];\n                Assert.Equal(string.Empty, value);\n\n                var windowsSection = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n                var windowsEnabled = (bool)windowsSection[\"enabled\"];\n                Assert.False(windowsEnabled);\n\n                windowsSection[\"enabled\"] = true;\n                server.CommitChanges();\n            }\n\n            {\n                var config = server.GetApplicationHostConfiguration();\n                var asp = config.GetSection(\"system.webServer/asp\");\n                var comPlus = asp.ChildElements[\"comPlus\"];\n                var sxsName = comPlus.GetAttribute(\"sxsName\");\n                sxsName.Delete();\n                Assert.Equal(\"\", (string)sxsName.Value);\n\n                comPlus[\"sxsName\"] = \"test\";\n                server.CommitChanges();\n            }\n\n            {\n                var config = server.GetApplicationHostConfiguration();\n                var asp = config.GetSection(\"system.webServer/asp\");\n                var comPlus = asp.ChildElements[\"comPlus\"];\n                var sxsName = (string)comPlus[\"sxsName\"];\n                Assert.Equal(\"test\", sxsName);\n\n                var exception = Assert.Throws<COMException>(() => comPlus[\"sxsName\"] = string.Empty);\n                Assert.Equal(\"String must not be empty\\r\\n\", exception.Message);\n                server.CommitChanges();\n            }\n\n            {\n                var config = server.GetApplicationHostConfiguration();\n                var asp = config.GetSection(\"system.webServer/asp\");\n                var comPlus = asp.ChildElements[\"comPlus\"];\n                var sxsName = (string)comPlus[\"sxsName\"];\n                Assert.Equal(\"test\", sxsName);\n\n                comPlus.GetAttribute(\"sxsName\").Delete();\n                server.CommitChanges();\n\n                sxsName = (string)comPlus.GetAttribute(\"sxsName\").Value;\n                Assert.Equal(\"\", sxsName);\n            }\n\n            {\n                var config = server.GetApplicationHostConfiguration();\n                var locations = config.GetLocationPaths();\n                Assert.Equal(3, locations.Length);\n\n                var exception =\n                    Assert.Throws<FileNotFoundException>(\n                        () =>\n                        config.GetSection(\n                            \"system.webServer/security/authentication/anonymousAuthentication\",\n                            \"Default Web Site\"));\n#if IIS\n                Assert.Equal(\n                    \"Filename: \\r\\nError: Unrecognized configuration path 'MACHINE/WEBROOT/APPHOST/Default Web Site'\\r\\n\\r\\n\",\n                    exception.Message);\n                Assert.Null(exception.FileName);\n#else\n                Assert.Equal(\n                    $\"Filename: \\\\\\\\?\\\\{fileName}\\r\\nError: Unrecognized configuration path 'MACHINE/WEBROOT/APPHOST/Default Web Site'\\r\\n\\r\\n\",\n                    exception.Message);\n                Assert.Equal(fileName, exception.FileName);\n#endif\n                var anonymousSection = config.GetSection(\n                    \"system.webServer/security/authentication/anonymousAuthentication\",\n                    \"WebSite2\");\n                var anonymousEnabled = (bool)anonymousSection[\"enabled\"];\n                Assert.True(anonymousEnabled);\n                Assert.Equal(\"test\", anonymousSection[\"userName\"]);\n\n                // Assert.Equal(\"123456\", anonymousSection[\"password\"]);\n            }\n\n            {\n                // server config \"Website1\"\n                var config = server.GetApplicationHostConfiguration();\n\n                // enable Windows authentication\n                var windowsSection = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", \"WebSite1\");\n                Assert.Equal(OverrideMode.Inherit, windowsSection.OverrideMode);\n                Assert.Equal(OverrideMode.Deny, windowsSection.OverrideModeEffective);\n                Assert.False(windowsSection.IsLocked);\n                Assert.True(windowsSection.IsLocallyStored);\n\n                var windowsEnabled = (bool)windowsSection[\"enabled\"];\n                Assert.True(windowsEnabled);\n                windowsSection[\"enabled\"] = false;\n                Assert.Equal(false, windowsSection[\"enabled\"]);\n\n                {\n                    // disable logging. Saved in applicationHost.config, as it cannot be overridden in web.config.\n                    ConfigurationSection httpLoggingSection = config.GetSection(\"system.webServer/httpLogging\", \"WebSite1\");\n                    Assert.Equal(false, httpLoggingSection[\"dontLog\"]);\n                    httpLoggingSection[\"dontLog\"] = true;\n                }\n\n                {\n                    ConfigurationSection httpLoggingSection = config.GetSection(\"system.webServer/httpLogging\", \"WebSite1/test\");\n                    // TODO:\n                    // Assert.Equal(true, httpLoggingSection[\"dontLog\"]);\n                    httpLoggingSection[\"dontLog\"] = false;\n                }\n            }\n\n            var siteName = Assert.Throws<COMException>(() => server.Sites[0].Name = \"\");\n            Assert.Equal(\"Invalid site name\\r\\n\", siteName.Message);\n\n            var limit = Assert.Throws<COMException>(() => server.Sites[0].Limits.MaxBandwidth = 12);\n            Assert.Equal(\"Integer value must not be between 0 and 1023 inclusive\\r\\n\", limit.Message);\n\n            var appPath = Assert.Throws<COMException>(() => server.Sites[0].Applications[0].Path = \"\");\n#if IIS\n            Assert.Equal(\"Invalid application path\\r\\n\", appPath.Message);\n#else\n            Assert.Equal(\"Invalid application path \\r\\n\", appPath.Message);\n#endif\n            var vDirPath =\n                Assert.Throws<COMException>(() => server.Sites[0].Applications[0].VirtualDirectories[0].Path = \"\");\n            Assert.Equal(\"Invalid virtual directory path\\r\\n\", vDirPath.Message);\n\n            {\n                // site config \"Website1\"\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n                // enable Windows authentication\n                var windowsSection = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n                Assert.Equal(OverrideMode.Inherit, windowsSection.OverrideMode);\n                Assert.Equal(OverrideMode.Deny, windowsSection.OverrideModeEffective);\n                Assert.True(windowsSection.IsLocked);\n                Assert.False(windowsSection.IsLocallyStored);\n\n                var windowsEnabled = (bool)windowsSection[\"enabled\"];\n                Assert.True(windowsEnabled);\n                var exception = Assert.Throws<FileLoadException>(() => windowsSection[\"enabled\"] = false);\n                Assert.Equal(\n                    \"This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault=\\\"Deny\\\"), or set explicitly by a location tag with overrideMode=\\\"Deny\\\" or the legacy allowOverride=\\\"false\\\".\\r\\n\",\n                    exception.Message);\n                Assert.Null(exception.FileName);\n\n                var compression = config.GetSection(\"system.webServer/urlCompression\");\n                Assert.Equal(OverrideMode.Inherit, compression.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, compression.OverrideModeEffective);\n                Assert.False(compression.IsLocked);\n                Assert.False(compression.IsLocallyStored);\n\n                Assert.Equal(true, compression[\"doDynamicCompression\"]);\n\n                compression[\"doDynamicCompression\"] = false;\n\n                {\n                    // disable default document. Saved to web.config as this section can be overridden anywhere.\n                    ConfigurationSection defaultDocumentSection = config.GetSection(\"system.webServer/defaultDocument\");\n                    Assert.Equal(true, defaultDocumentSection[\"enabled\"]);\n                    defaultDocumentSection[\"enabled\"] = false;\n\n                    ConfigurationElementCollection filesCollection = defaultDocumentSection.GetCollection(\"files\");\n                    Assert.Equal(7, filesCollection.Count);\n\n                    {\n                        var first = filesCollection[0];\n                        Assert.Equal(\"home1.html\", first[\"value\"]);\n                        Assert.True(first.IsLocallyStored);\n                    }\n\n                    var second = filesCollection[1];\n                    Assert.Equal(\"Default.htm\", second[\"value\"]);\n                    Assert.False(second.IsLocallyStored);\n\n                    var third = filesCollection[2];\n                    Assert.Equal(\"Default.asp\", third[\"value\"]);\n                    Assert.False(third.IsLocallyStored);\n\n                    ConfigurationElement addElement = filesCollection.CreateElement();\n                    addElement[\"value\"] = @\"home.html\";\n                    filesCollection.AddAt(0, addElement);\n\n                    Assert.Equal(8, filesCollection.Count);\n\n                    {\n                        var first = filesCollection[0];\n                        Assert.Equal(\"home.html\", first[\"value\"]);\n                        // TODO: why?\n                        // Assert.False(first.IsLocallyStored);\n                    }\n\n                    filesCollection.RemoveAt(4);\n                    Assert.Equal(7, filesCollection.Count);\n\n                    ConfigurationElement lastElement = filesCollection.CreateElement();\n                    lastElement[\"value\"] = @\"home1.html\";\n                    lastElement[\"value\"] = @\"home2.html\";\n                    filesCollection.Add(lastElement);\n                    Assert.Equal(8, filesCollection.Count);\n                }\n\n                //{\n                //    var last = filesCollection[8];\n                //    Assert.Equal(\"home2.html\", last[\"value\"]);\n                //    // TODO: why?\n                //    Assert.False(last.IsLocallyStored);\n                //}\n\n                {\n                    // disable logging. Saved in applicationHost.config, as it cannot be overridden in web.config.\n                    ConfigurationSection httpLoggingSection = config.GetSection(\"system.webServer/httpLogging\");\n                    Assert.Equal(false, httpLoggingSection[\"dontLog\"]);\n                    Assert.Throws<FileLoadException>(() => httpLoggingSection[\"dontLog\"] = true);\n                }\n                {\n                    ConfigurationSection httpLoggingSection = config.GetSection(\n                        \"system.webServer/httpLogging\",\n                        \"WebSite1/test\");\n                    // TODO:\n                    //Assert.Equal(true, httpLoggingSection[\"dontLog\"]);\n                    Assert.Throws<FileLoadException>(() => httpLoggingSection[\"dontLog\"] = false);\n                }\n\n                var errorsSection = config.GetSection(\"system.webServer/httpErrors\");\n                Assert.Equal(OverrideMode.Inherit, errorsSection.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, errorsSection.OverrideModeEffective);\n                Assert.False(errorsSection.IsLocked);\n                Assert.False(errorsSection.IsLocallyStored);\n\n                var errorsCollection = errorsSection.GetCollection();\n                Assert.Equal(9, errorsCollection.Count);\n\n                var error = errorsCollection.CreateElement();\n                var cast = Assert.Throws<InvalidCastException>(() => error.SetAttributeValue(\"statusCode\", \"500\"));\n#if IIS\n                Assert.Equal(Helper.IsRunningOnMono() ? \"Cannot cast from source type to destination type.\" : \"Specified cast is not valid.\", cast.Message);\n#else\n                Assert.Equal(Helper.IsRunningOnMono() ? \"Cannot cast from source type to destination type.\" : \"Cannot convert 500 of System.String to uint.\", cast.Message);\n#endif\n\n                var ex2 = Assert.Throws<COMException>(() => error[\"statusCode\"] = 90000);\n                Assert.Equal(\"Integer value must be between 400 and 999 inclusive\\r\\n\", ex2.Message);\n\n                error[\"statusCode\"] = 500;\n                error[\"subStatusCode\"] = 55;\n                error[\"prefixLanguageFilePath\"] = string.Empty;\n\n                error[\"responseMode\"] = 0;\n                error[\"responseMode\"] = ResponseMode.Test;\n#if IIS\n                Assert.Equal(1, error[\"responseMode\"]);\n#else\n                Assert.Equal(1L, error[\"responseMode\"]);\n#endif\n\n                error[\"responseMode\"] = \"File\";\n                var ex1 = Assert.Throws<FileNotFoundException>(() => errorsCollection.Add(error));\n                Assert.Equal(\"Filename: \\r\\nError: Element is missing required attributes path\\r\\n\\r\\n\", ex1.Message);\n                Assert.Null(ex1.FileName);\n\n                var ex = Assert.Throws<COMException>(() => error[\"path\"] = \"\");\n                Assert.Equal(\"String must not be empty\\r\\n\", ex.Message);\n\n                error[\"path\"] = \"test.htm\";\n                errorsCollection.Add(error);\n\n                var staticContent = config.GetSection(\"system.webServer/staticContent\").GetChildElement(\"clientCache\");\n                staticContent[\"cacheControlMode\"] = \"DisableCache\";\n\n                ConfigurationSection requestFilteringSection =\n                    config.GetSection(\"system.webServer/security/requestFiltering\");\n                ConfigurationElement hiddenSegmentsElement = requestFilteringSection.GetChildElement(\"hiddenSegments\");\n                ConfigurationElementCollection hiddenSegmentsCollection = hiddenSegmentsElement.GetCollection();\n                Assert.Equal(8, hiddenSegmentsCollection.Count);\n\n                var test = hiddenSegmentsCollection.CreateElement();\n                test[\"segment\"] = \"test\";\n                hiddenSegmentsCollection.Add(test);\n\n                var old = hiddenSegmentsCollection[0];\n                hiddenSegmentsCollection.Remove(old);\n\n                var section = config.GetSection(\"system.webServer/rewrite/rules\");\n                ConfigurationElementCollection collection = section.GetCollection();\n                //collection.Clear();\n                ////collection.Delete();\n\n                //collection = section.GetCollection();\n                //Assert.Equal(0, collection.Count);\n\n                var newElement = collection.CreateElement();\n                newElement[\"name\"] = \"test\";\n                collection.Add(newElement);\n                Assert.Equal(2, collection.Count);\n\n                collection.Clear();\n                Assert.Empty(collection);\n\n                newElement = collection.CreateElement();\n                newElement[\"name\"] = \"test\";\n                collection.Add(newElement);\n                Assert.Single(collection);\n            }\n\n            {\n                // server config \"Website1\"\n                var config = server.GetApplicationHostConfiguration();\n\n                // enable Windows authentication\n                var windowsSection = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", \"WebSite1\");\n                Assert.Equal(OverrideMode.Inherit, windowsSection.OverrideMode);\n                Assert.Equal(OverrideMode.Deny, windowsSection.OverrideModeEffective);\n                Assert.False(windowsSection.IsLocked);\n                Assert.True(windowsSection.IsLocallyStored);\n\n                var windowsEnabled = (bool)windowsSection[\"enabled\"];\n                Assert.False(windowsEnabled);\n            }\n\n            {\n                Configuration config = server.GetApplicationHostConfiguration();\n\n                var anonymousSection = config.GetSection(\n                    \"system.webServer/security/authentication/anonymousAuthentication\",\n                    \"WebSite2\");\n\n                // anonymousSection[\"userName\"] = \"test1\";\n                // anonymousSection[\"password\"] = \"654321\";\n                ConfigurationSection windowsAuthenticationSection =\n                    config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", \"WebSite2\");\n                windowsAuthenticationSection[\"enabled\"] = true;\n\n                ConfigurationElement extendedProtectionElement =\n                    windowsAuthenticationSection.GetChildElement(\"extendedProtection\");\n                extendedProtectionElement[\"tokenChecking\"] = @\"Allow\";\n                extendedProtectionElement[\"flags\"] = @\"None\";\n\n                var exception = Assert.Throws<COMException>(() => extendedProtectionElement[\"tokenChecking\"] = @\"NotExist\");\n                Assert.Equal(\"Enum must be one of None, Allow, Require\\r\\n\", exception.Message);\n\n                exception = Assert.Throws<COMException>(() => extendedProtectionElement[\"flags\"] = @\"NotExist\");\n                Assert.Equal(\"Flags must be some combination of None, Proxy, NoServiceNameCheck, AllowDotlessSpn, ProxyCohosting\\r\\n\", exception.Message);\n\n                ConfigurationElementCollection extendedProtectionCollection = extendedProtectionElement.GetCollection();\n\n                ConfigurationElement spnElement = extendedProtectionCollection.CreateElement(\"spn\");\n                spnElement[\"name\"] = @\"HTTP/www.contoso.com\";\n                extendedProtectionCollection.Add(spnElement);\n\n                ConfigurationElement spnElement1 = extendedProtectionCollection.CreateElement(\"spn\");\n                spnElement1[\"name\"] = @\"HTTP/contoso.com\";\n                extendedProtectionCollection.Add(spnElement1);\n\n                server.CommitChanges();\n\n                ConfigurationSection rulesSection = config.GetSection(\"system.webServer/rewrite/rules\");\n                ConfigurationElementCollection rulesCollection = rulesSection.GetCollection();\n                Assert.Single(rulesCollection);\n\n                ConfigurationElement ruleElement = rulesCollection[0];\n                Assert.Equal(\"lextudio2\", ruleElement[\"name\"]);\n#if IIS\n                Assert.Equal(0, ruleElement[\"patternSyntax\"]);\n#else\n                Assert.Equal(0L, ruleElement[\"patternSyntax\"]);\n#endif\n                Assert.Equal(true, ruleElement[\"stopProcessing\"]);\n\n                ConfigurationElement matchElement = ruleElement.GetChildElement(\"match\");\n                Assert.Equal(@\"(.*)\", matchElement[\"url\"]);\n\n                ConfigurationElement actionElement = ruleElement.GetChildElement(\"action\");\n#if IIS\n                Assert.Equal(1, actionElement[\"type\"]);\n#else\n                Assert.Equal(1L, actionElement[\"type\"]);\n#endif\n                Assert.Equal(\"/www/{R:0}\", actionElement[\"url\"]);\n            }\n\n            // remove application pool\n            Assert.False(server.ApplicationPools.AllowsRemove);\n            Assert.Equal(5, server.ApplicationPools.Count);\n            server.ApplicationPools.RemoveAt(4);\n            Assert.Equal(4, server.ApplicationPools.Count);\n\n            // remove binding\n            server.Sites[1].Bindings.RemoveAt(1);\n\n            // remove site\n            server.Sites.RemoveAt(4);\n\n            // remove application\n            var site1 = server.Sites[9];\n            site1.Applications.RemoveAt(1);\n\n            // remove virtual directory\n            var application = server.Sites[2].Applications[0];\n            application.VirtualDirectories.RemoveAt(1);\n\n            server.CommitChanges();\n        }\n\n        public static void IisExpressMissingWebsiteConfig(ServerManager server)\n        {\n            {\n                var config = server.GetApplicationHostConfiguration();\n\n                var windowsSection =\n                    config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\");\n                windowsSection[\"enabled\"] = true;\n                server.CommitChanges();\n            }\n            {\n                // server config \"Website1\"\n                var config = server.GetApplicationHostConfiguration();\n                var windowsSection = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\",\n                    \"WebSite1\");\n                windowsSection[\"enabled\"] = false;\n                {\n                    // disable logging. Saved in applicationHost.config, as it cannot be overridden in web.config.\n                    ConfigurationSection httpLoggingSection =\n                        config.GetSection(\"system.webServer/httpLogging\", \"WebSite1\");\n                    httpLoggingSection[\"dontLog\"] = true;\n                }\n\n                {\n                    ConfigurationSection httpLoggingSection =\n                        config.GetSection(\"system.webServer/httpLogging\", \"WebSite1/test\");\n                    httpLoggingSection[\"dontLog\"] = false;\n                }\n            }\n            {\n                // site config \"Website1\"\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n                var compression = config.GetSection(\"system.webServer/urlCompression\");\n                compression[\"doDynamicCompression\"] = false;\n                {\n                    // disable default document. Saved to web.config as this section can be overridden anywhere.\n                    ConfigurationSection defaultDocumentSection = config.GetSection(\"system.webServer/defaultDocument\");\n                    Assert.Equal(true, defaultDocumentSection[\"enabled\"]);\n                    defaultDocumentSection[\"enabled\"] = false;\n\n                    ConfigurationElementCollection filesCollection = defaultDocumentSection.GetCollection(\"files\");\n                    Assert.Equal(6, filesCollection.Count);\n\n                    {\n                        var first = filesCollection[0];\n                        Assert.Equal(\"Default.htm\", first[\"value\"]);\n                        Assert.False(first.IsLocallyStored);\n                    }\n\n                    var second = filesCollection[1];\n                    Assert.Equal(\"Default.asp\", second[\"value\"]);\n                    Assert.False(second.IsLocallyStored);\n\n                    var third = filesCollection[2];\n                    Assert.Equal(\"index.htm\", third[\"value\"]);\n                    Assert.False(third.IsLocallyStored);\n\n                    ConfigurationElement addElement = filesCollection.CreateElement();\n                    addElement[\"value\"] = @\"home.html\";\n                    filesCollection.AddAt(0, addElement);\n\n                    Assert.Equal(7, filesCollection.Count);\n\n                    {\n                        var first = filesCollection[0];\n                        Assert.Equal(\"home.html\", first[\"value\"]);\n                        // TODO: why?\n                        // Assert.False(first.IsLocallyStored);\n                    }\n\n                    filesCollection.RemoveAt(4);\n                    Assert.Equal(6, filesCollection.Count);\n\n                    ConfigurationElement lastElement = filesCollection.CreateElement();\n                    lastElement[\"value\"] = @\"home.html\";\n                    var dup = Assert.Throws<COMException>(() => filesCollection.Add(lastElement));\n#if IIS\n                    Assert.Equal(\n                        \"Filename: \\r\\nError: Cannot add duplicate collection entry of type 'add' with unique key attribute 'value' set to 'home.html'\\r\\n\\r\\n\",\n                        dup.Message);\n#else\n                    Assert.Equal(\n$\"Filename: \\\\\\\\?\\\\{config.FileContext.FileName}\\r\\nLine number: 0\\r\\nError: Cannot add duplicate collection entry of type 'add' with unique key attribute 'value' set to 'home.html'\\r\\n\\r\\n\",\n                        dup.Message);\n#endif\n                    lastElement[\"value\"] = @\"home2.html\";\n                    filesCollection.Add(lastElement);\n                    Assert.Equal(7, filesCollection.Count);\n                }\n\n                var errorsSection = config.GetSection(\"system.webServer/httpErrors\");\n                var errorsCollection = errorsSection.GetCollection();\n                var error = errorsCollection.CreateElement();\n                error[\"statusCode\"] = 500;\n                error[\"subStatusCode\"] = 55;\n                error[\"prefixLanguageFilePath\"] = string.Empty;\n                error[\"responseMode\"] = \"File\";\n                error[\"path\"] = \"test.htm\";\n                errorsCollection.Add(error);\n\n                var staticContent = config.GetSection(\"system.webServer/staticContent\").GetChildElement(\"clientCache\");\n                staticContent[\"cacheControlMode\"] = \"DisableCache\";\n\n                ConfigurationSection requestFilteringSection =\n                    config.GetSection(\"system.webServer/security/requestFiltering\");\n                ConfigurationElement hiddenSegmentsElement = requestFilteringSection.GetChildElement(\"hiddenSegments\");\n                ConfigurationElementCollection hiddenSegmentsCollection = hiddenSegmentsElement.GetCollection();\n                var test = hiddenSegmentsCollection.CreateElement();\n                test[\"segment\"] = \"test\";\n                hiddenSegmentsCollection.Add(test);\n                var old = hiddenSegmentsCollection[0];\n                hiddenSegmentsCollection.Remove(old);\n\n                var section = config.GetSection(\"system.webServer/rewrite/rules\");\n                ConfigurationElementCollection collection = section.GetCollection();\n                collection.Clear();\n                var newElement = collection.CreateElement();\n                newElement[\"name\"] = \"test\";\n                collection.Add(newElement);\n            }\n\n            {\n                // server config \"Website1\"\n                var config = server.GetApplicationHostConfiguration();\n                // enable Windows authentication\n                var windowsSection = config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\",\n                    \"WebSite1\");\n                var windowsEnabled = (bool)windowsSection[\"enabled\"];\n            }\n            {\n                Configuration config = server.GetApplicationHostConfiguration();\n\n                var anonymousSection = config.GetSection(\n                    \"system.webServer/security/authentication/anonymousAuthentication\",\n                    \"WebSite2\");\n                ConfigurationSection windowsAuthenticationSection =\n                    config.GetSection(\"system.webServer/security/authentication/windowsAuthentication\", \"WebSite2\");\n                windowsAuthenticationSection[\"enabled\"] = true;\n\n                ConfigurationElement extendedProtectionElement =\n                    windowsAuthenticationSection.GetChildElement(\"extendedProtection\");\n                extendedProtectionElement[\"tokenChecking\"] = @\"Allow\";\n                extendedProtectionElement[\"flags\"] = @\"None\";\n                ConfigurationElementCollection extendedProtectionCollection =\n                    extendedProtectionElement.GetCollection();\n\n                ConfigurationElement spnElement = extendedProtectionCollection.CreateElement(\"spn\");\n                spnElement[\"name\"] = @\"HTTP/www.contoso.com\";\n                extendedProtectionCollection.Add(spnElement);\n\n                ConfigurationElement spnElement1 = extendedProtectionCollection.CreateElement(\"spn\");\n                spnElement1[\"name\"] = @\"HTTP/contoso.com\";\n                extendedProtectionCollection.Add(spnElement1);\n\n                server.CommitChanges();\n            }\n            // remove application pool\n            Assert.False(server.ApplicationPools.AllowsRemove);\n            Assert.Equal(5, server.ApplicationPools.Count);\n            server.ApplicationPools.RemoveAt(4);\n            Assert.Equal(4, server.ApplicationPools.Count);\n\n            // remove binding\n            server.Sites[1].Bindings.RemoveAt(1);\n\n            // remove site\n            server.Sites.RemoveAt(4);\n\n            // remove application\n            var site1 = server.Sites[9];\n            site1.Applications.RemoveAt(1);\n\n            // remove virtual directory\n            var application = server.Sites[2].Applications[0];\n            application.VirtualDirectories.RemoveAt(1);\n\n            server.CommitChanges();\n        }\n\n        public static void IisExpressHandlers(ServerManager server)\n        {\n            {\n                // server config \"Website1\"\n                var config = server.GetApplicationHostConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\", \"WebSite1\");\n                Assert.Equal(OverrideMode.Inherit, handlersSection.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, handlersSection.OverrideModeEffective);\n                Assert.False(handlersSection.IsLocked);\n                Assert.True(handlersSection.IsLocallyStored);\n            }\n\n            {\n                // site config \"Website1\"\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\");\n                Assert.Equal(OverrideMode.Inherit, handlersSection.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, handlersSection.OverrideModeEffective);\n                Assert.False(handlersSection.IsLocked);\n                Assert.False(handlersSection.IsLocallyStored);\n            }\n        }\n\n        public static void IisExpressLocation(ServerManager server)\n        {\n            {\n                // server config \"Website1\"\n                var config = server.GetApplicationHostConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\", \"WebSite1\");\n\n                Assert.Equal(OverrideMode.Inherit, handlersSection.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, handlersSection.OverrideModeEffective);\n                Assert.False(handlersSection.IsLocked);\n                Assert.True(handlersSection.IsLocallyStored);\n\n                var handlers = handlersSection.GetCollection();\n                Assert.Equal(82, handlers.Count);\n                var newHandler = handlers.CreateElement();\n                newHandler[\"name\"] = \"WebDAV\";\n                newHandler[\"path\"] = \"*\";\n                newHandler[\"verb\"] = \"PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK\";\n                newHandler[\"modules\"] = \"WedDAVModule\";\n                newHandler[\"resourceType\"] = \"Unspecified\";\n                handlers.Add(newHandler);\n\n                Assert.Equal(83, handlers.Count);\n            }\n\n            {\n                // site config \"Website1\"\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\");\n                Assert.Equal(OverrideMode.Inherit, handlersSection.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, handlersSection.OverrideModeEffective);\n                Assert.False(handlersSection.IsLocked);\n                Assert.False(handlersSection.IsLocallyStored);\n\n                var handlers = handlersSection.GetCollection();\n                Assert.Equal(82, handlers.Count);\n            }\n\n            // IMPORTANT: changes go to <location path=\"WebSites1\"> in applicationHost.config.\n            server.CommitChanges();\n\n            {\n                // site config \"Website1\"\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\");\n                Assert.Equal(OverrideMode.Inherit, handlersSection.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, handlersSection.OverrideModeEffective);\n                Assert.False(handlersSection.IsLocked);\n                Assert.True(handlersSection.IsLocallyStored);\n\n                var handlers = handlersSection.GetCollection();\n                Assert.Equal(83, handlers.Count);\n            }\n        }\n\n        public static void IisExpressInheritance(ServerManager server)\n        {\n            {\n                // server config \"Website1\"\n                var config = server.GetApplicationHostConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\", \"WebSite1\");\n                Assert.Equal(\"system.webServer/handlers\", handlersSection.SectionPath);\n#if !IIS\n                Assert.Equal(\"WebSite1\", handlersSection.Location);\n                Assert.EndsWith(\"applicationHost.config\", handlersSection.FileContext.FileName);\n\n                var handlersInEmpty = handlersSection.GetParentElement().Section;\n                Assert.Equal(\"system.webServer/handlers\", handlersInEmpty.SectionPath);\n                Assert.Equal(\"\", handlersInEmpty.Location);\n                Assert.EndsWith(\"applicationHost.config\", handlersInEmpty.FileContext.FileName);\n\n                var handlersInNull = handlersInEmpty.GetParentElement().Section;\n                Assert.Equal(\"system.webServer/handlers\", handlersInNull.SectionPath);\n                Assert.Null(handlersInNull.Location);\n                Assert.EndsWith(\"applicationHost.config\", handlersInNull.FileContext.FileName);\n\n                Assert.Null(handlersInNull.GetParentElement());\n\n                var handlers2 = handlersInNull.GetCollection();\n                Assert.Empty(handlers2);\n                var handlers1 = handlersInEmpty.GetCollection();\n                Assert.Equal(82, handlers1.Count);\n#endif\n                var handlers = handlersSection.GetCollection();\n                Assert.Equal(82, handlers.Count);\n\n                var newHandler = handlers.CreateElement();\n                newHandler[\"name\"] = \"WebDAV\";\n                newHandler[\"path\"] = \"*\";\n                newHandler[\"verb\"] = \"PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK\";\n                newHandler[\"modules\"] = \"WedDAVModule\";\n                newHandler[\"resourceType\"] = \"Unspecified\";\n                handlers.Add(newHandler);\n\n                Assert.Equal(83, handlers.Count);\n            }\n\n            {\n                // site config \"Website1\"\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\");\n                Assert.Equal(\"system.webServer/handlers\", handlersSection.SectionPath);\n#if !IIS\n                Assert.Equal(\"WebSite1\", handlersSection.Location);\n                Assert.EndsWith(\"web.config\", handlersSection.FileContext.FileName);\n\n                var handlersInWebSite = handlersSection.GetParentElement().Section;\n                Assert.Equal(\"system.webServer/handlers\", handlersInWebSite.SectionPath);\n                Assert.Equal(\"WebSite1\", handlersInWebSite.Location);\n                Assert.EndsWith(\"applicationHost.config\", handlersInWebSite.FileContext.FileName);\n\n                var handlersInEmpty = handlersInWebSite.GetParentElement().Section;\n                Assert.Equal(\"system.webServer/handlers\", handlersInEmpty.SectionPath);\n                Assert.Equal(\"\", handlersInEmpty.Location);\n                Assert.EndsWith(\"applicationHost.config\", handlersInEmpty.FileContext.FileName);\n\n                var handlersInNull = handlersInEmpty.GetParentElement().Section;\n                Assert.Equal(\"system.webServer/handlers\", handlersInNull.SectionPath);\n                Assert.Null(handlersInNull.Location);\n                Assert.EndsWith(\"applicationHost.config\", handlersInNull.FileContext.FileName);\n\n                Assert.Null(handlersInNull.GetParentElement());\n\n                var handlers2 = handlersInNull.GetCollection();\n                Assert.Empty(handlers2);\n                var handlers1 = handlersInEmpty.GetCollection();\n                Assert.Equal(82, handlers1.Count);\n                var handlers3 = handlersInWebSite.GetCollection();\n                Assert.Equal(82, handlers3.Count);\n#endif\n                var handlers = handlersSection.GetCollection();\n                Assert.Equal(82, handlers.Count);\n            }\n\n            // IMPORTANT: changes go to <location path=\"WebSites1\"> in applicationHost.config.\n            server.CommitChanges();\n\n            {\n                // site config \"Website1\"\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\");\n                Assert.Equal(\"system.webServer/handlers\", handlersSection.SectionPath);\n#if !IIS\n                Assert.Equal(\"WebSite1\", handlersSection.Location);\n                Assert.EndsWith(\"applicationHost.config\", handlersSection.FileContext.FileName);\n\n                var handlersInEmpty = handlersSection.GetParentElement().Section;\n                Assert.Equal(\"system.webServer/handlers\", handlersInEmpty.SectionPath);\n                Assert.Equal(\"\", handlersInEmpty.Location);\n                Assert.EndsWith(\"applicationHost.config\", handlersInEmpty.FileContext.FileName);\n\n                var handlersInNull = handlersInEmpty.GetParentElement().Section;\n                Assert.Equal(\"system.webServer/handlers\", handlersInNull.SectionPath);\n                Assert.Null(handlersInNull.Location);\n                Assert.EndsWith(\"applicationHost.config\", handlersInNull.FileContext.FileName);\n\n                Assert.Null(handlersInNull.GetParentElement());\n\n                var handlers2 = handlersInNull.GetCollection();\n                Assert.Empty(handlers2);\n                var handlers1 = handlersInEmpty.GetCollection();\n                Assert.Equal(82, handlers1.Count);\n#endif\n                var handlers = handlersSection.GetCollection();\n                Assert.Equal(83, handlers.Count);\n            }\n        }\n\n        public static void IisExpressLocation2(ServerManager server)\n        {\n            {\n                // site config \"Website1\"\n                var config = server.Sites[0].Applications[0].GetWebConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\");\n                Assert.Equal(OverrideMode.Inherit, handlersSection.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, handlersSection.OverrideModeEffective);\n                Assert.False(handlersSection.IsLocked);\n                Assert.False(handlersSection.IsLocallyStored);\n\n                var handlers = handlersSection.GetCollection();\n                Assert.Equal(82, handlers.Count);\n                var newHandler = handlers.CreateElement();\n                newHandler[\"name\"] = \"WebDAV\";\n                newHandler[\"path\"] = \"*\";\n                newHandler[\"verb\"] = \"PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK\";\n                newHandler[\"modules\"] = \"WedDAVModule\";\n                newHandler[\"resourceType\"] = \"Unspecified\";\n                handlers.Add(newHandler);\n\n                Assert.Equal(83, handlers.Count);\n            }\n\n            {\n                // server config \"Website1\"\n                var config = server.GetApplicationHostConfiguration();\n\n                // enable Windows authentication\n                var handlersSection = config.GetSection(\"system.webServer/handlers\", \"WebSite1\");\n                Assert.Equal(OverrideMode.Inherit, handlersSection.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, handlersSection.OverrideModeEffective);\n                Assert.False(handlersSection.IsLocked);\n                Assert.True(handlersSection.IsLocallyStored);\n\n                var handlers = handlersSection.GetCollection();\n                Assert.Equal(82, handlers.Count);\n            }\n\n            // IMPORTANT: changes go to web.config.\n            server.CommitChanges();\n\n            {\n                // server config \"Website1\"\n                var config = server.GetApplicationHostConfiguration();\n\n                var handlersSection = config.GetSection(\"system.webServer/handlers\", \"WebSite1\");\n                Assert.Equal(OverrideMode.Inherit, handlersSection.OverrideMode);\n                Assert.Equal(OverrideMode.Allow, handlersSection.OverrideModeEffective);\n                Assert.False(handlersSection.IsLocked);\n                Assert.True(handlersSection.IsLocallyStored);\n\n                var handlers = handlersSection.GetCollection();\n                Assert.Equal(82, handlers.Count);\n            }\n        }\n\n        public static void IisSiteDefaults(ServerManager server)\n        {\n            var siteDefaults = server.SiteDefaults.TraceFailedRequestsLogging;\n            Assert.True(siteDefaults.Enabled);\n\n            var site = server.Sites[0].TraceFailedRequestsLogging;\n            Assert.True(site.Enabled);\n            var attribute = site.GetAttribute(\"enabled\");\n            Assert.Equal(false, attribute.Schema.DefaultValue);\n            Assert.False(attribute.IsInheritedFromDefaultValue);\n\n            attribute.Value = false;\n            Assert.Equal(false, attribute.Value);\n        }\n\n        private enum ResponseMode\n        {\n            Test = 1\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/TestHelper.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.IO;\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nusing Microsoft.Web.Administration;\n\nnamespace Tests\n{\n    public static class TestHelper\n    {\n        internal static void FixPhysicalPathMono(string fileName)\n        {\n            if (!Helper.IsRunningOnMono())\n            {\n                return;\n            }\n\n            var file = XDocument.Load(fileName, LoadOptions.PreserveWhitespace);\n            var root = file.Root;\n            if (root == null)\n            {\n                return;\n            }\n\n            var pool =\n                root.XPathSelectElement(\n                    \"/configuration/system.applicationHost/sites/site[@id='1']/application/virtualDirectory\");\n            pool?.SetAttributeValue(\"physicalPath\", \"%JEXUS_TEST_HOME%/WebSite1\");\n            file.Save(fileName, SaveOptions.DisableFormatting);\n        }\n\n        public static string CopySiteConfig(string folder, string originalConfig)\n        {\n            var filePath = Path.Combine(folder, \"WebSite1\", \"web.config\");\n            File.Copy(Path.Combine(folder, \"WebSite1\", originalConfig), filePath, true);\n            return filePath;\n        }\n\n        public static void AssertSiteConfig(string folder, string expectedConfig)\n        {\n            XmlAssert.Equal(Path.Combine(folder, \"WebSite1\", expectedConfig), Path.Combine(folder, \"WebSite1\", \"web.config\"));\n        }\n\n        public static string GetSiteConfig(string folder)\n        {\n            return Path.Combine(folder, \"WebSite1\", \"web.config\");\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>\n    <GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Include=\"..\\JexusManager\\BindingExtensions.cs\" Link=\"BindingExtensions.cs\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.TestPlatform.TestHost\" Version=\"17.13.0\" />\n    <PackageReference Include=\"XMLDiffPatch\" Version=\"1.0.8.28\" />\n    <PackageReference Include=\"xunit\" Version=\"2.9.3\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"3.1.0\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Microsoft.Web.Administration\\Microsoft.Web.Administration.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"administration.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"expected.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"expected3.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"original2.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"original2_missing_closing.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"Website1\\authorization.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"Website1\\directorybrowse.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"Website1\\expected.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"Website1\\expected1.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"Website1\\expected3.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"Website1\\original.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"xunit.runner.json\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"Website1\\index.html\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Tests/Website1/authorization.config",
    "content": "<authorization>\n  <allow users=\"*\" />\n  <deny users=\"?\" />\n</authorization>\n"
  },
  {
    "path": "Tests/Website1/directorybrowse.config",
    "content": "<directoryBrowse enabled=\"true\">\n</directoryBrowse>\n"
  },
  {
    "path": "Tests/Website1/expected.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n  <system.webServer>\n    <defaultDocument enabled=\"false\">\n      <files>\n        <clear/>\n        <remove value=\"index.htm\" />\n        <add value=\"home.html\"/>\n        <add value=\"home1.html\" />\n        <add value=\"Default.htm\"/>\n        <add value=\"Default.asp\"/>\n        <add value=\"index.htm\"/>\n        <add value=\"index.html\"/>\n        <add value=\"iisstart.htm\"/>\n        <add value=\"default.aspx\"/>\n        <add value=\"home2.html\"/>\n      </files>\n    </defaultDocument>\n        <staticContent>\n            <clientCache cacheControlMode=\"DisableCache\" />\n        </staticContent>\n        <rewrite>\n            <rules>\n                <clear />\n                <rule name=\"test\" />\n            </rules>\n        </rewrite>\n        <httpErrors>\n            <error statusCode=\"500\" subStatusCode=\"55\" prefixLanguageFilePath=\"\" path=\"test.htm\" responseMode=\"File\" />\n        </httpErrors>\n        <urlCompression doDynamicCompression=\"false\" />\n        <security>\n            <requestFiltering>\n                <hiddenSegments>\n                    <remove segment=\"web.config\" />\n                    <add segment=\"test\" />\n                </hiddenSegments>\n            </requestFiltering>\n        </security>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Tests/Website1/expected1.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n  <system.webServer>\n    <staticContent>\n      <clientCache cacheControlMode=\"DisableCache\"/>\n    </staticContent>\n    <defaultDocument enabled=\"false\">\n      <files>\n        <clear/>\n        <remove value=\"index.html\"/>\n        <add value=\"home.html\"/>\n        <add value=\"Default.htm\"/>\n        <add value=\"Default.asp\"/>\n        <add value=\"index.htm\"/>\n        <add value=\"index.html\"/>\n        <add value=\"iisstart.htm\"/>\n        <add value=\"default.aspx\"/>\n        <add value=\"home2.html\"/>\n      </files>\n    </defaultDocument>\n    <rewrite>\n      <rules>\n        <clear/>\n        <rule name=\"test\"/>\n      </rules>\n    </rewrite>\n    <httpErrors>\n      <error path=\"test.htm\"\n           prefixLanguageFilePath=\"\"\n           responseMode=\"File\"\n           statusCode=\"500\"\n           subStatusCode=\"55\"/>\n    </httpErrors>\n    <urlCompression doDynamicCompression=\"false\"/>\n    <security>\n      <requestFiltering>\n        <hiddenSegments>\n          <remove segment=\"web.config\"/>\n          <add segment=\"test\"/>\n        </hiddenSegments>\n      </requestFiltering>\n    </security>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Tests/Website1/expected3.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n  <system.webServer>\n    <defaultDocument enabled=\"true\">\n      <files>\n        <remove value=\"home1.html\"/>\n        <add value=\"home2.html\" />\n      </files>\n    </defaultDocument>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Tests/Website1/index.html",
    "content": "﻿<!DOCTYPE html>\n\n<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title></title>\n</head>\n<body>\n\n</body>\n</html>"
  },
  {
    "path": "Tests/Website1/original.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n  <system.webServer>\n    <defaultDocument>\n      <files>\n        <add value=\"home1.html\" />\n      </files>\n    </defaultDocument>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Tests/XmlAssert.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Diagnostics;\nusing System.IO;\nusing System.Xml;\nusing Microsoft.XmlDiffPatch;\nusing Xunit;\n\nnamespace Tests\n{\n    internal static class XmlAssert\n    {\n        internal static void Equal(string file1, string file2)\n        {\n            var diffFile = @\"diff.xml\";\n            XmlTextWriter tw = new XmlTextWriter(new StreamWriter(diffFile));\n            tw.Formatting = Formatting.Indented;\n            var diff = new XmlDiff();\n            diff.Options = XmlDiffOptions.IgnoreWhitespace | XmlDiffOptions.IgnoreComments | XmlDiffOptions.IgnoreXmlDecl;\n            var result = diff.Compare(file1, file2, false, tw);\n            tw.Close();\n            if (!result)\n            {\n                //Files were not equal, so construct XmlDiffView.\n                XmlDiffView dv = new XmlDiffView();\n\n                //Load the original file again and the diff file.\n                XmlTextReader orig = new XmlTextReader(file1);\n                XmlTextReader diffGram = new XmlTextReader(diffFile);\n                dv.Load(orig, diffGram);\n                string tempFile = \"test.htm\";\n\n                StreamWriter sw1 = new StreamWriter(tempFile);\n                //Wrapping\n                sw1.Write(\"<html><body><table>\");\n                sw1.Write(\"<tr><td><b>\");\n                sw1.Write(file1);\n                sw1.Write(\"</b></td><td><b>\");\n                sw1.Write(file2);\n                sw1.Write(\"</b></td></tr>\");\n\n                //This gets the differences but just has the \n                //rows and columns of an HTML table\n                dv.GetHtml(sw1);\n\n                //Finish wrapping up the generated HTML and \n                //complete the file by putting legend in the end just like the \n                //online tool.\n\n                sw1.Write(\"<tr><td><b>Legend:</b> <font style='background-color: yellow'\" +\n                \" color='black'>added</font>&nbsp;&nbsp;<font style='background-color: red'\" +\n                \"color='black'>removed</font>&nbsp;&nbsp;<font style='background-color: \" +\n                \"lightgreen' color='black'>changed</font>&nbsp;&nbsp;\" +\n                \"<font style='background-color: red' color='blue'>moved from</font>\" +\n                \"&nbsp;&nbsp;<font style='background-color: yellow' color='blue'>moved to\" +\n                \"</font>&nbsp;&nbsp;<font style='background-color: white' color='#AAAAAA'>\" + \"ignored</font></td></tr>\");\n\n                sw1.Write(\"</table></body></html>\");\n\n                //HouseKeeping...close everything we dont want to lock.\n                sw1.Close();\n                orig.Close();\n                diffGram.Close();\n                Process.Start(\"explorer.exe\", \"test.htm\");\n            }\n\n            Assert.True(result);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests/administration.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n    <configSections>\n        <section name=\"moduleProviders\" allowLocation=\"false\" allowDefinition=\"MachineToWebRoot\" />\n        <section name=\"modules\" allowDefinition=\"MachineToApplication\" />\n\n        <sectionGroup name=\"system.webServer\">\n            <sectionGroup name=\"management\">\n                <section name=\"authorization\" allowDefinition=\"MachineToWebRoot\" />\n                <section name=\"dbManager\" allowDefinition=\"MachineToWebRoot\" />\n            </sectionGroup>\n        </sectionGroup>\n    </configSections>\n\n    <system.webServer>\n        <management>\n\n            <authorization defaultProvider=\"ConfigurationAuthorizationProvider\">\n                <providers>\n                    <add name=\"ConfigurationAuthorizationProvider\" type=\"Microsoft.WebMatrix.Server.ConfigurationAuthorizationProvider, Microsoft.WebMatrix, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n                </providers>\n            </authorization>\n\n        </management>\n    </system.webServer>\n\n    <system.webServer>\n        <management>\n            <dbManager allowClientConnectionStrings=\"true\">\n                <DBProviders>\n                    <provider name=\"SQL Server 2005/2008\" providerName=\"System.Data.SqlClient\" type=\"Microsoft.WebMatrix.DatabaseManager.SqlDatabase.SqlDatabaseProvider, Microsoft.WebMatrix.DatabaseManager.SqlDatabase, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n                    <provider name=\"MySql 5.x, 6.x\" providerName=\"MySql.Data.MySqlClient\" type=\"Microsoft.WebMatrix.DatabaseManager.MySqlDatabase.MySqlDatabaseProvider, Microsoft.WebMatrix.DatabaseManager.MySqlDatabase, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n                    <provider name=\"SQL Server Compact 4.0\" providerName=\"System.Data.SqlServerCe.4.0\" type=\"Microsoft.WebMatrix.DatabaseManager.SqlCeDatabase.SqlCeDatabaseProvider, Microsoft.WebMatrix.DatabaseManager.SqlCeDatabase, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n                </DBProviders>\n            </dbManager>\n        </management>\n    </system.webServer>\n\n    <moduleProviders>\n\n        <!-- IIS Modules -->\n        <add name=\"WebObjects\" type=\"Microsoft.WebMatrix.Iis.WebObjects.WebObjectsModuleProvider, Microsoft.WebMatrix.Iis, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n\n        <!-- WebMatrix Modules -->\n        <add name=\"WebMatrixServerManagement\" type=\"Microsoft.WebMatrix.ServerManagement.ServerManagementModuleProvider, Microsoft.WebMatrix.ServerManagement, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n        <add name=\"SEO\" type=\"Microsoft.WebMatrix.SEO.SEOModuleProvider, Microsoft.WebMatrix.SEO, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n        <add name=\"Gallery\" type=\"Microsoft.WebMatrix.Gallery.GalleryModuleProvider, Microsoft.WebMatrix.Gallery, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n        <add name=\"Database\" type=\"Microsoft.WebMatrix.DatabaseManager.DBManagerModuleProvider, Microsoft.WebMatrix.DatabaseManager, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"Deployment\" type=\"Microsoft.WebMatrix.Deployment.WebMatrixDeployModuleProvider, Microsoft.WebMatrix.Deployment, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"EditorCore\" type=\"Microsoft.WebMatrix.Editor.EditorModuleProvider, Microsoft.WebMatrix.Editor, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n        <add name=\"FileEditor\" type=\"Microsoft.WebMatrix.FileEditor.FileEditorModuleProvider, Microsoft.WebMatrix.FileEditorServer, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" />\n        <add name=\"IISExpress\" type=\"Microsoft.WebMatrix.IisExpressModule.IisExpressModuleProvider, Microsoft.WebMatrix.IisExpressModule, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n        <add name=\"CSSParser\" type=\"Microsoft.CSS.Editor.CssIntellisenseModuleProvider, Microsoft.WebMatrix.Css.SchemaParser, Version=7.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" />\n    </moduleProviders>\n\n</configuration>\n"
  },
  {
    "path": "Tests/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5.2\" /></startup></configuration>\n"
  },
  {
    "path": "Tests/default.runsettings",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RunSettings>\n  <!-- Configurations that affect the Test Framework -->\n  <RunConfiguration>\n    <!-- Path relative to solution directory -->\n    <!--<ResultsDirectory>.\\TestResults</ResultsDirectory>-->\n\n    <!-- [x86] | x64  \n      - You can also change it from menu Test, Test Settings, Default Processor Architecture -->\n    <TargetPlatform>x64</TargetPlatform>\n\n    <!-- Framework35 | [Framework40] | Framework45 -->\n    <TargetFrameworkVersion>Framework45</TargetFrameworkVersion>\n\n    <!-- Path to Test Adapters -->\n    <!--<TestAdaptersPaths>%SystemDrive%\\Temp\\foo;%SystemDrive%\\Temp\\bar</TestAdaptersPaths>-->\n  </RunConfiguration>\n\n</RunSettings>"
  },
  {
    "path": "Tests/expected.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    IIS configuration sections.\n\n    For schema documentation, see\n    %IIS_BIN%\\config\\schema\\IIS_schema.xml.\n    \n    Please make a backup of this file before making any changes to it.\n\n    NOTE: The following environment variables are available to be used\n          within this file and are understood by the IIS Express.\n\n          %IIS_USER_HOME% - The IIS Express home directory for the user\n          %IIS_SITES_HOME% - The default home directory for sites\n          %IIS_BIN% - The location of the IIS Express binaries\n          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%\n\n-->\n\n<configuration>\n\n  <!--\n\n        The <configSections> section controls the registration of sections.\n        Section is the basic unit of deployment, locking, searching and\n        containment for configuration settings.\n        \n        Every section belongs to one section group.\n        A section group is a container of logically-related sections.\n        \n        Sections cannot be nested.\n        Section groups may be nested.\n        \n        <section\n            name=\"\"  [Required, Collection Key] [XML name of the section]\n            allowDefinition=\"Everywhere\" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]\n            overrideModeDefault=\"Allow\"  [Allow|Deny] [Default delegation mode]\n            allowLocation=\"true\"  [true|false] [Allowed in location tags]\n        />\n        \n        The recommended way to unlock sections is by using a location tag:\n        <location path=\"Default Web Site\" overrideMode=\"Allow\">\n            <system.webServer>\n                <asp />\n            </system.webServer>\n        </location>\n\n    -->\n  <configSections>\n    <sectionGroup name=\"system.applicationHost\">\n      <section name=\"applicationPools\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"configHistory\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"customMetadata\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"listenerAdapters\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"log\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"sites\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"webLimits\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n    </sectionGroup>\n\n    <sectionGroup name=\"system.webServer\">\n      <section name=\"asp\" overrideModeDefault=\"Deny\" />\n      <section name=\"caching\" overrideModeDefault=\"Allow\" />\n      <section name=\"cgi\" overrideModeDefault=\"Deny\" />\n      <section name=\"defaultDocument\" overrideModeDefault=\"Allow\" />\n      <section name=\"directoryBrowse\" overrideModeDefault=\"Allow\" />\n      <section name=\"fastCgi\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"globalModules\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"handlers\" overrideModeDefault=\"Deny\" />\n      <section name=\"httpCompression\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"httpErrors\" overrideModeDefault=\"Allow\" />\n      <section name=\"httpLogging\" overrideModeDefault=\"Deny\" />\n      <section name=\"httpProtocol\" overrideModeDefault=\"Allow\" />\n      <section name=\"httpRedirect\" overrideModeDefault=\"Allow\" />\n      <section name=\"httpTracing\" overrideModeDefault=\"Deny\" />\n      <section name=\"isapiFilters\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n      <section name=\"modules\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n      <section name=\"odbcLogging\" overrideModeDefault=\"Deny\" />\n      <sectionGroup name=\"security\">\n        <section name=\"access\" overrideModeDefault=\"Deny\" />\n        <section name=\"applicationDependencies\" overrideModeDefault=\"Deny\" />\n        <sectionGroup name=\"authentication\">\n          <section name=\"anonymousAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"basicAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"clientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"digestAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"iisClientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"windowsAuthentication\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n        <section name=\"authorization\" overrideModeDefault=\"Allow\" />\n        <section name=\"ipSecurity\" overrideModeDefault=\"Deny\" />\n        <section name=\"dynamicIpSecurity\" overrideModeDefault=\"Deny\" />\n        <section name=\"isapiCgiRestriction\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n        <section name=\"requestFiltering\" overrideModeDefault=\"Allow\" />\n      </sectionGroup>\n      <section name=\"serverRuntime\" overrideModeDefault=\"Deny\" />\n      <section name=\"serverSideInclude\" overrideModeDefault=\"Deny\" />\n      <section name=\"staticContent\" overrideModeDefault=\"Allow\" />\n      <sectionGroup name=\"tracing\">\n        <section name=\"traceFailedRequests\" overrideModeDefault=\"Allow\" />\n        <section name=\"traceProviderDefinitions\" overrideModeDefault=\"Deny\" />\n      </sectionGroup>\n      <section name=\"urlCompression\" overrideModeDefault=\"Allow\" />\n      <section name=\"validation\" overrideModeDefault=\"Allow\" />\n      <sectionGroup name=\"webdav\">\n        <section name=\"globalSettings\" overrideModeDefault=\"Deny\" />\n        <section name=\"authoring\" overrideModeDefault=\"Deny\" />\n        <section name=\"authoringRules\" overrideModeDefault=\"Deny\" />\n      </sectionGroup>\n      <sectionGroup name=\"rewrite\">\n        <section name=\"allowedServerVariables\" overrideModeDefault=\"Deny\" />\n        <section name=\"rules\" overrideModeDefault=\"Allow\" />\n        <section name=\"outboundRules\" overrideModeDefault=\"Allow\" />\n        <section name=\"globalRules\" overrideModeDefault=\"Deny\" allowDefinition=\"AppHostOnly\" />\n        <section name=\"providers\" overrideModeDefault=\"Allow\" />\n        <section name=\"rewriteMaps\" overrideModeDefault=\"Allow\" />\n      </sectionGroup>\n      <section name=\"applicationInitialization\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Allow\" />\n      <section name=\"webSocket\" overrideModeDefault=\"Deny\" />\n    </sectionGroup>\n  </configSections>\n\n  <!--<configProtectedData>\n    <providers>\n      <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n      <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=\" />\n      <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=\" />\n    </providers>\n  </configProtectedData>-->\n\n  <configProtectedData>\n    <providers>\n      <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n      <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4+jnvVwdmahiJvH8sOJxtDMnsR+0yNnzh79Dd3oZMnVmAqLQDUpUZEwMJSlfhnLl8q5CEHposKZ5p3zl2oOeow36FweUI6WTSWlc4jVQlnCcLpvR1+CVF7I2XS/TZKGkgFNapTAJUAAL4q5LjGIEGMNiSCgFHOvJDGVDq3UMtU+vR5P7ZdbJmxswBf53Ut4iMAXxOz7JTSzwtIUmqK5ML95cqFt3WSLmXHcgaBX37iwS9kpgj2Sq+by63NYAE2RBsUb6JfPrVDKReNWK6A2o1QJBXF7jrAEVwvdX6DSw0gulMypeJ2I1ltOCgr8CTi+CMxStRbdQE+OA+83g0dKvgw==\" />\n      <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAD11v8x8UPbc9pt2pFRvgGuAqWTMRh0jP+/pUcEDZN6oSYAIqVjp1EgbkrakdC+/TrMsPkccjudZ6OxlhW8fbVxA71WQdjFkjnObuXXj68ZTD01HF310/Gh56XIvALkBz2DFJ0spMrQ1rQoOllcaqAy/6aSsIaD16ApmrTcDECoJ7LP0eJYcbBD+cvITl5oHN4HDYhZYqVn4M1pkEcZZxFWh1rlqhlkb9NY5hF+rS3U32XqKAcz4lXQELQmXkPTWQ/DoKTreE0yKlPTLnz6WztWNtBIuVvfNMxSHj4WlN420iejpuk3LjYU5lvns5MJzs5L/7bBDdxPpIEpB1p645eQ==\" />\n    </providers>\n  </configProtectedData>\n\n  <system.applicationHost>\n\n    <applicationPools>\n      <add name=\"Clr4IntegratedAppPool\" managedPipelineMode=\"Integrated\" managedRuntimeVersion=\"v4.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\">\n        <processModel loadUserProfile=\"true\" />\n      </add>\n      <add name=\"Clr4ClassicAppPool\" managedRuntimeVersion=\"v4.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n      <add name=\"Clr2IntegratedAppPool\" managedRuntimeVersion=\"v2.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n      <add name=\"Clr2ClassicAppPool\" managedRuntimeVersion=\"v2.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n      <applicationPoolDefaults managedRuntimeLoader=\"v4.0\" />\n    </applicationPools>\n\n    <!--\n\n          The <listenerAdapters> section defines the protocols with which the\n          Windows Process Activation Service (WAS) binds.\n\n        -->\n    <listenerAdapters>\n      <add name=\"http\" />\n    </listenerAdapters>\n\n    <sites>\n      <site name=\"WebSite1\" id=\"1\">\n        <application path=\"/\">\n          <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\WebSite1\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\":8080:localhost\" />\n          <binding protocol=\"net.tcp\" bindingInformation=\"808:*\" />\n          <binding protocol=\"net.msmq\" bindingInformation=\"localhost\" />\n          <binding protocol=\"msmq.formatname\" bindingInformation=\"localhost\" />\n          <binding protocol=\"net.pipe\" bindingInformation=\"*\" />\n          <binding protocol=\"ftp\" bindingInformation=\"*:21:\" />\n          <binding protocol=\"http\" bindingInformation=\":8080:*\" />\n          <binding protocol=\"https\" bindingInformation=\":443:localhost\" />\n          <binding protocol=\"https\" bindingInformation=\":44300:*\" />\n          <binding protocol=\"ftp\" bindingInformation=\"*:210:localhost\" />\n          <binding protocol=\"net.tcp\" bindingInformation=\"*\" />\n          <binding protocol=\"net.msmq\" bindingInformation=\"*\" />\n          <binding protocol=\"msmq.formatname\" bindingInformation=\"*\" />\n          <binding protocol=\"net.pipe\" bindingInformation=\"localhost\" />\n        </bindings>\n      </site>\n      <site name=\"GuessMeWeb\" id=\"2\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\GuessMeWeb\\GuessMeWeb\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:61902:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"WebSite2\" id=\"3\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\Website2\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:55165:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"WebApplication1\" id=\"4\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication1\\WebApplication1\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:10830:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"RemoteServices\" id=\"6\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\JexusManager\\RemoteServices\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:14150:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"WebApplication2\" id=\"7\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication2\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:9827:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"WebApplication3\" id=\"8\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication3\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:14234:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"Katana.Performance.ReferenceApp\" id=\"9\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Performance.ReferenceApp\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:17613:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"Katana.Sandbox.WebServer-Site\" id=\"10\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebServer-Site\" />\n        </application>\n        <application path=\"/Katana.Sandbox.WebServer\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebServer\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:18001:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"Katana.Sandbox.WebClient-Site\" id=\"11\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebClient-Site\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:18002:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"Mono328\" id=\"12\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\Mono328\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:4330:localhost\" />\n        </bindings>\n      </site>\n      <siteDefaults>\n        <logFile directory=\"%IIS_USER_HOME%\\Logs\" />\n        <traceFailedRequestsLogging directory=\"%IIS_USER_HOME%\\TraceLogFiles\" enabled=\"true\" />\n      </siteDefaults>\n      <applicationDefaults applicationPool=\"Clr4IntegratedAppPool\" />\n    </sites>\n\n  </system.applicationHost>\n\n  <system.webServer>\n\n    <asp scriptErrorSentToBrowser=\"true\">\n      <cache diskTemplateCacheDirectory=\"%TEMP%\\iisexpress\\ASP Compiled Templates\" />\n    </asp>\n    <caching>\n      <profiles>\n        <add duration=\"00:00:00\"\n           extension=\".cs\"/>\n      </profiles>\n    </caching>\n    <defaultDocument>\n      <files>\n        <add value=\"Default.htm\" />\n        <add value=\"Default.asp\" />\n        <add value=\"index.htm\" />\n        <add value=\"index.html\" />\n        <add value=\"iisstart.htm\" />\n        <add value=\"default.aspx\" />\n      </files>\n    </defaultDocument>\n\n    <!--\n\n          The <globalModules> section defines all native-code modules.\n          To enable a module, specify it in the <modules> section.\n\n        -->\n    <globalModules>\n      <add name=\"UriCacheModule\" image=\"%IIS_BIN%\\cachuri.dll\" />\n      <!--            <add name=\"FileCacheModule\" image=\"%IIS_BIN%\\cachfile.dll\" />  -->\n      <add name=\"TokenCacheModule\" image=\"%IIS_BIN%\\cachtokn.dll\" />\n      <!--            <add name=\"HttpCacheModule\" image=\"%IIS_BIN%\\cachhttp.dll\" /> -->\n      <add name=\"DynamicCompressionModule\" image=\"%IIS_BIN%\\compdyn.dll\" />\n      <add name=\"StaticCompressionModule\" image=\"%IIS_BIN%\\compstat.dll\" />\n      <add name=\"DefaultDocumentModule\" image=\"%IIS_BIN%\\defdoc.dll\" />\n      <add name=\"DirectoryListingModule\" image=\"%IIS_BIN%\\dirlist.dll\" />\n      <add name=\"ProtocolSupportModule\" image=\"%IIS_BIN%\\protsup.dll\" />\n      <add name=\"HttpRedirectionModule\" image=\"%IIS_BIN%\\redirect.dll\" />\n      <add name=\"ServerSideIncludeModule\" image=\"%IIS_BIN%\\iis_ssi.dll\" />\n      <add name=\"StaticFileModule\" image=\"%IIS_BIN%\\static.dll\" />\n      <add name=\"AnonymousAuthenticationModule\" image=\"%IIS_BIN%\\authanon.dll\" />\n      <add name=\"CertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authcert.dll\" />\n      <add name=\"UrlAuthorizationModule\" image=\"%IIS_BIN%\\urlauthz.dll\" />\n      <add name=\"BasicAuthenticationModule\" image=\"%IIS_BIN%\\authbas.dll\" />\n      <add name=\"WindowsAuthenticationModule\" image=\"%IIS_BIN%\\authsspi.dll\" />\n      <!--            <add name=\"DigestAuthenticationModule\" image=\"%IIS_BIN%\\authmd5.dll\" /> -->\n      <add name=\"IISCertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authmap.dll\" />\n      <add name=\"IpRestrictionModule\" image=\"%IIS_BIN%\\iprestr.dll\" />\n      <add name=\"DynamicIpRestrictionModule\" image=\"%IIS_BIN%\\diprestr.dll\" />\n      <add name=\"RequestFilteringModule\" image=\"%IIS_BIN%\\modrqflt.dll\" />\n      <add name=\"CustomLoggingModule\" image=\"%IIS_BIN%\\logcust.dll\" />\n      <add name=\"CustomErrorModule\" image=\"%IIS_BIN%\\custerr.dll\" />\n      <add name=\"HttpLoggingModule\" image=\"%IIS_BIN%\\loghttp.dll\" />\n      <!--            <add name=\"TracingModule\" image=\"%IIS_BIN%\\iisetw.dll\" /> -->\n      <add name=\"FailedRequestsTracingModule\" image=\"%IIS_BIN%\\iisfreb.dll\" />\n      <add name=\"RequestMonitorModule\" image=\"%IIS_BIN%\\iisreqs.dll\" />\n      <add name=\"IsapiModule\" image=\"%IIS_BIN%\\isapi.dll\" />\n      <add name=\"IsapiFilterModule\" image=\"%IIS_BIN%\\filter.dll\" />\n      <add name=\"CgiModule\" image=\"%IIS_BIN%\\cgi.dll\" />\n      <add name=\"FastCgiModule\" image=\"%IIS_BIN%\\iisfcgi.dll\" />\n      <!--            <add name=\"WebDAVModule\" image=\"%IIS_BIN%\\webdav.dll\" /> -->\n      <add name=\"RewriteModule\" image=\"%IIS_BIN%\\rewrite.dll\" />\n      <add name=\"ConfigurationValidationModule\" image=\"%IIS_BIN%\\validcfg.dll\" />\n      <add name=\"ApplicationInitializationModule\" image=\"%IIS_BIN%\\warmup.dll\" />\n      <add name=\"WebSocketModule\" image=\"%IIS_BIN%\\iiswsock.dll\" />\n      <add name=\"WebMatrixSupportModule\" image=\"%IIS_BIN%\\webmatrixsup.dll\" />\n      <add name=\"ManagedEngine\" image=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness32\" />\n      <add name=\"ManagedEngine64\" image=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness64\" />\n      <add name=\"ManagedEngineV4.0_32bit\" image=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness32\" />\n      <add name=\"ManagedEngineV4.0_64bit\" image=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness64\" />\n    </globalModules>\n\n    <httpCompression directory=\"%TEMP%\\iisexpress\\IIS Temporary Compressed Files\">\n      <scheme name=\"gzip\" dll=\"%IIS_BIN%\\gzip.dll\" />\n      <dynamicTypes>\n        <add mimeType=\"text/*\" enabled=\"true\" />\n        <add mimeType=\"message/*\" enabled=\"true\" />\n        <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n        <add mimeType=\"*/*\" enabled=\"false\" />\n      </dynamicTypes>\n      <staticTypes>\n        <add mimeType=\"text/*\" enabled=\"true\" />\n        <add mimeType=\"message/*\" enabled=\"true\" />\n        <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n        <add mimeType=\"application/atom+xml\" enabled=\"true\" />\n        <add mimeType=\"application/xaml+xml\" enabled=\"true\" />\n        <add mimeType=\"*/*\" enabled=\"false\" />\n      </staticTypes>\n    </httpCompression>\n\n    <httpErrors lockAttributes=\"allowAbsolutePathsWhenDelegated,defaultPath\">\n      <error statusCode=\"401\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"401.htm\" />\n      <error statusCode=\"403\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"403.htm\" />\n      <error statusCode=\"404\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"404.htm\" />\n      <error statusCode=\"405\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"405.htm\" />\n      <error statusCode=\"406\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"406.htm\" />\n      <error statusCode=\"412\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"412.htm\" />\n      <error statusCode=\"500\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"500.htm\" />\n      <error statusCode=\"501\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"501.htm\" />\n      <error statusCode=\"502\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"502.htm\" />\n    </httpErrors>\n\n    <httpProtocol>\n      <customHeaders>\n        <clear />\n        <add name=\"X-Powered-By\" value=\"ASP.NET\" />\n      </customHeaders>\n      <redirectHeaders>\n        <clear />\n      </redirectHeaders>\n    </httpProtocol>\n\n    <isapiFilters>\n      <filter name=\"ASP.Net_2.0.50727-64\" path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv2.0\" />\n      <filter name=\"ASP.Net_2.0.50727.0\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv2.0\" />\n      <filter name=\"ASP.Net_2.0_for_v1.1\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"runtimeVersionv1.1\" />\n      <filter name=\"ASP.Net_4.0_32bit\" path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv4.0\" />\n      <filter name=\"ASP.Net_4.0_64bit\" path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv4.0\" />\n    </isapiFilters>\n\n    <security>\n\n      <applicationDependencies>\n        <application name=\"Active Server Pages\" groupId=\"ASP\" />\n      </applicationDependencies>\n\n      <authentication>\n\n        <anonymousAuthentication userName=\"\" />\n\n        <windowsAuthentication enabled=\"true\">\n          <providers>\n            <add value=\"Negotiate\" />\n            <add value=\"NTLM\" />\n          </providers>\n        </windowsAuthentication>\n\n      </authentication>\n\n      <authorization>\n        <add accessType=\"Allow\" users=\"*\" />\n      </authorization>\n\n      <isapiCgiRestriction notListedIsapisAllowed=\"true\" notListedCgisAllowed=\"true\">\n        <add path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n        <add path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n        <add path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n        <add path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n      </isapiCgiRestriction>\n      <ipSecurity>\n        <add allowed=\"true\"\n           ipAddress=\"10.0.0.0\"/>\n      </ipSecurity>\n      <requestFiltering>\n\n        <requestLimits>\n          <headerLimits>\n            <add header=\"test\" sizeLimit=\"500\"/>\n          </headerLimits>\n        </requestLimits>\n        <alwaysAllowedUrls>\n          <add url=\"test\"/>\n        </alwaysAllowedUrls>\n        <denyUrlSequences>\n          <add sequence=\"test\"/>\n        </denyUrlSequences>\n        <alwaysAllowedQueryStrings>\n          <add queryString=\"test\" />\n        </alwaysAllowedQueryStrings>\n        <denyQueryStringSequences>\n          <add sequence=\"test\" />\n        </denyQueryStringSequences>\n        <filteringRules>\n          <filteringRule name=\"test\">\n          </filteringRule>\n        </filteringRules>\n        <verbs>\n          <add verb=\"PUT\" allowed=\"false\"/>\n        </verbs>\n\n        <fileExtensions>\n          <add fileExtension=\".asa\" allowed=\"false\" />\n          <add fileExtension=\".asax\" allowed=\"false\" />\n          <add fileExtension=\".ascx\" allowed=\"false\" />\n          <add fileExtension=\".master\" allowed=\"false\" />\n          <add fileExtension=\".skin\" allowed=\"false\" />\n          <add fileExtension=\".browser\" allowed=\"false\" />\n          <add fileExtension=\".sitemap\" allowed=\"false\" />\n          <add fileExtension=\".config\" allowed=\"false\" />\n          <add fileExtension=\".cs\" allowed=\"false\" />\n          <add fileExtension=\".csproj\" allowed=\"false\" />\n          <add fileExtension=\".vb\" allowed=\"false\" />\n          <add fileExtension=\".vbproj\" allowed=\"false\" />\n          <add fileExtension=\".webinfo\" allowed=\"false\" />\n          <add fileExtension=\".licx\" allowed=\"false\" />\n          <add fileExtension=\".resx\" allowed=\"false\" />\n          <add fileExtension=\".resources\" allowed=\"false\" />\n          <add fileExtension=\".mdb\" allowed=\"false\" />\n          <add fileExtension=\".vjsproj\" allowed=\"false\" />\n          <add fileExtension=\".java\" allowed=\"false\" />\n          <add fileExtension=\".jsl\" allowed=\"false\" />\n          <add fileExtension=\".ldb\" allowed=\"false\" />\n          <add fileExtension=\".dsdgm\" allowed=\"false\" />\n          <add fileExtension=\".ssdgm\" allowed=\"false\" />\n          <add fileExtension=\".lsad\" allowed=\"false\" />\n          <add fileExtension=\".ssmap\" allowed=\"false\" />\n          <add fileExtension=\".cd\" allowed=\"false\" />\n          <add fileExtension=\".dsprototype\" allowed=\"false\" />\n          <add fileExtension=\".lsaprototype\" allowed=\"false\" />\n          <add fileExtension=\".sdm\" allowed=\"false\" />\n          <add fileExtension=\".sdmDocument\" allowed=\"false\" />\n          <add fileExtension=\".mdf\" allowed=\"false\" />\n          <add fileExtension=\".ldf\" allowed=\"false\" />\n          <add fileExtension=\".ad\" allowed=\"false\" />\n          <add fileExtension=\".dd\" allowed=\"false\" />\n          <add fileExtension=\".ldd\" allowed=\"false\" />\n          <add fileExtension=\".sd\" allowed=\"false\" />\n          <add fileExtension=\".adprototype\" allowed=\"false\" />\n          <add fileExtension=\".lddprototype\" allowed=\"false\" />\n          <add fileExtension=\".exclude\" allowed=\"false\" />\n          <add fileExtension=\".refresh\" allowed=\"false\" />\n          <add fileExtension=\".compiled\" allowed=\"false\" />\n          <add fileExtension=\".msgx\" allowed=\"false\" />\n          <add fileExtension=\".vsdisco\" allowed=\"false\" />\n          <add fileExtension=\".rules\" allowed=\"false\" />\n        </fileExtensions>\n\n        <hiddenSegments>\n          <add segment=\"web.config\" />\n          <add segment=\"bin\" />\n          <add segment=\"App_code\" />\n          <add segment=\"App_GlobalResources\" />\n          <add segment=\"App_LocalResources\" />\n          <add segment=\"App_WebReferences\" />\n          <add segment=\"App_Data\" />\n          <add segment=\"App_Browsers\" />\n        </hiddenSegments>\n      </requestFiltering>\n\n    </security>\n\n    <staticContent lockAttributes=\"isDocFooterFileName\">\n      <mimeMap fileExtension=\".323\" mimeType=\"text/h323\" />\n      <mimeMap fileExtension=\".3g2\" mimeType=\"video/3gpp2\" />\n      <mimeMap fileExtension=\".3gp2\" mimeType=\"video/3gpp2\" />\n      <mimeMap fileExtension=\".3gp\" mimeType=\"video/3gpp\" />\n      <mimeMap fileExtension=\".3gpp\" mimeType=\"video/3gpp\" />\n      <mimeMap fileExtension=\".aac\" mimeType=\"audio/aac\" />\n      <mimeMap fileExtension=\".aaf\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".aca\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".accdb\" mimeType=\"application/msaccess\" />\n      <mimeMap fileExtension=\".accde\" mimeType=\"application/msaccess\" />\n      <mimeMap fileExtension=\".accdt\" mimeType=\"application/msaccess\" />\n      <mimeMap fileExtension=\".acx\" mimeType=\"application/internet-property-stream\" />\n      <mimeMap fileExtension=\".adt\" mimeType=\"audio/vnd.dlna.adts\" />\n      <mimeMap fileExtension=\".adts\" mimeType=\"audio/vnd.dlna.adts\" />\n      <mimeMap fileExtension=\".afm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ai\" mimeType=\"application/postscript\" />\n      <mimeMap fileExtension=\".aif\" mimeType=\"audio/x-aiff\" />\n      <mimeMap fileExtension=\".aifc\" mimeType=\"audio/aiff\" />\n      <mimeMap fileExtension=\".aiff\" mimeType=\"audio/aiff\" />\n      <mimeMap fileExtension=\".application\" mimeType=\"application/x-ms-application\" />\n      <mimeMap fileExtension=\".art\" mimeType=\"image/x-jg\" />\n      <mimeMap fileExtension=\".asd\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".asf\" mimeType=\"video/x-ms-asf\" />\n      <mimeMap fileExtension=\".asi\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".asm\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".asr\" mimeType=\"video/x-ms-asf\" />\n      <mimeMap fileExtension=\".asx\" mimeType=\"video/x-ms-asf\" />\n      <mimeMap fileExtension=\".atom\" mimeType=\"application/atom+xml\" />\n      <mimeMap fileExtension=\".au\" mimeType=\"audio/basic\" />\n      <mimeMap fileExtension=\".avi\" mimeType=\"video/x-msvideo\" />\n      <mimeMap fileExtension=\".axs\" mimeType=\"application/olescript\" />\n      <mimeMap fileExtension=\".bas\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".bcpio\" mimeType=\"application/x-bcpio\" />\n      <mimeMap fileExtension=\".bin\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".bmp\" mimeType=\"image/bmp\" />\n      <mimeMap fileExtension=\".c\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".cab\" mimeType=\"application/vnd.ms-cab-compressed\" />\n      <mimeMap fileExtension=\".calx\" mimeType=\"application/vnd.ms-office.calx\" />\n      <mimeMap fileExtension=\".cat\" mimeType=\"application/vnd.ms-pki.seccat\" />\n      <mimeMap fileExtension=\".cdf\" mimeType=\"application/x-cdf\" />\n      <mimeMap fileExtension=\".chm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".class\" mimeType=\"application/x-java-applet\" />\n      <mimeMap fileExtension=\".clp\" mimeType=\"application/x-msclip\" />\n      <mimeMap fileExtension=\".cmx\" mimeType=\"image/x-cmx\" />\n      <mimeMap fileExtension=\".cnf\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".cod\" mimeType=\"image/cis-cod\" />\n      <mimeMap fileExtension=\".cpio\" mimeType=\"application/x-cpio\" />\n      <mimeMap fileExtension=\".cpp\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".crd\" mimeType=\"application/x-mscardfile\" />\n      <mimeMap fileExtension=\".crl\" mimeType=\"application/pkix-crl\" />\n      <mimeMap fileExtension=\".crt\" mimeType=\"application/x-x509-ca-cert\" />\n      <mimeMap fileExtension=\".csh\" mimeType=\"application/x-csh\" />\n      <mimeMap fileExtension=\".css\" mimeType=\"text/css\" />\n      <mimeMap fileExtension=\".csv\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".cur\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".dcr\" mimeType=\"application/x-director\" />\n      <mimeMap fileExtension=\".deploy\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".der\" mimeType=\"application/x-x509-ca-cert\" />\n      <mimeMap fileExtension=\".dib\" mimeType=\"image/bmp\" />\n      <mimeMap fileExtension=\".dir\" mimeType=\"application/x-director\" />\n      <mimeMap fileExtension=\".disco\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".dll\" mimeType=\"application/x-msdownload\" />\n      <mimeMap fileExtension=\".dll.config\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".dlm\" mimeType=\"text/dlm\" />\n      <mimeMap fileExtension=\".doc\" mimeType=\"application/msword\" />\n      <mimeMap fileExtension=\".docm\" mimeType=\"application/vnd.ms-word.document.macroEnabled.12\" />\n      <mimeMap fileExtension=\".docx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" />\n      <mimeMap fileExtension=\".dot\" mimeType=\"application/msword\" />\n      <mimeMap fileExtension=\".dotm\" mimeType=\"application/vnd.ms-word.template.macroEnabled.12\" />\n      <mimeMap fileExtension=\".dotx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\" />\n      <mimeMap fileExtension=\".dsp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".dtd\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".dvi\" mimeType=\"application/x-dvi\" />\n      <mimeMap fileExtension=\".dvr-ms\" mimeType=\"video/x-ms-dvr\" />\n      <mimeMap fileExtension=\".dwf\" mimeType=\"drawing/x-dwf\" />\n      <mimeMap fileExtension=\".dwp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".dxr\" mimeType=\"application/x-director\" />\n      <mimeMap fileExtension=\".eml\" mimeType=\"message/rfc822\" />\n      <mimeMap fileExtension=\".emz\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".eot\" mimeType=\"application/vnd.ms-fontobject\" />\n      <mimeMap fileExtension=\".eps\" mimeType=\"application/postscript\" />\n      <mimeMap fileExtension=\".etx\" mimeType=\"text/x-setext\" />\n      <mimeMap fileExtension=\".evy\" mimeType=\"application/envoy\" />\n      <mimeMap fileExtension=\".exe\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".exe.config\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".fdf\" mimeType=\"application/vnd.fdf\" />\n      <mimeMap fileExtension=\".fif\" mimeType=\"application/fractals\" />\n      <mimeMap fileExtension=\".fla\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".flr\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".flv\" mimeType=\"video/x-flv\" />\n      <mimeMap fileExtension=\".gif\" mimeType=\"image/gif\" />\n      <mimeMap fileExtension=\".gtar\" mimeType=\"application/x-gtar\" />\n      <mimeMap fileExtension=\".gz\" mimeType=\"application/x-gzip\" />\n      <mimeMap fileExtension=\".h\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".hdf\" mimeType=\"application/x-hdf\" />\n      <mimeMap fileExtension=\".hdml\" mimeType=\"text/x-hdml\" />\n      <mimeMap fileExtension=\".hhc\" mimeType=\"application/x-oleobject\" />\n      <mimeMap fileExtension=\".hhk\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".hhp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".hlp\" mimeType=\"application/winhlp\" />\n      <mimeMap fileExtension=\".hqx\" mimeType=\"application/mac-binhex40\" />\n      <mimeMap fileExtension=\".hta\" mimeType=\"application/hta\" />\n      <mimeMap fileExtension=\".htc\" mimeType=\"text/x-component\" />\n      <mimeMap fileExtension=\".htm\" mimeType=\"text/html\" />\n      <mimeMap fileExtension=\".html\" mimeType=\"text/html\" />\n      <mimeMap fileExtension=\".htt\" mimeType=\"text/webviewhtml\" />\n      <mimeMap fileExtension=\".hxt\" mimeType=\"text/html\" />\n      <mimeMap fileExtension=\".ical\" mimeType=\"text/calendar\" />\n      <mimeMap fileExtension=\".icalendar\" mimeType=\"text/calendar\" />\n      <mimeMap fileExtension=\".ico\" mimeType=\"image/x-icon\" />\n      <mimeMap fileExtension=\".ics\" mimeType=\"text/calendar\" />\n      <mimeMap fileExtension=\".ief\" mimeType=\"image/ief\" />\n      <mimeMap fileExtension=\".ifb\" mimeType=\"text/calendar\" />\n      <mimeMap fileExtension=\".iii\" mimeType=\"application/x-iphone\" />\n      <mimeMap fileExtension=\".inf\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ins\" mimeType=\"application/x-internet-signup\" />\n      <mimeMap fileExtension=\".isp\" mimeType=\"application/x-internet-signup\" />\n      <mimeMap fileExtension=\".IVF\" mimeType=\"video/x-ivf\" />\n      <mimeMap fileExtension=\".jar\" mimeType=\"application/java-archive\" />\n      <mimeMap fileExtension=\".java\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".jck\" mimeType=\"application/liquidmotion\" />\n      <mimeMap fileExtension=\".jcz\" mimeType=\"application/liquidmotion\" />\n      <mimeMap fileExtension=\".jfif\" mimeType=\"image/pjpeg\" />\n      <mimeMap fileExtension=\".jpb\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".jpe\" mimeType=\"image/jpeg\" />\n      <mimeMap fileExtension=\".jpeg\" mimeType=\"image/jpeg\" />\n      <mimeMap fileExtension=\".jpg\" mimeType=\"image/jpeg\" />\n      <mimeMap fileExtension=\".js\" mimeType=\"application/javascript\" />\n      <mimeMap fileExtension=\".jsx\" mimeType=\"text/jscript\" />\n      <mimeMap fileExtension=\".latex\" mimeType=\"application/x-latex\" />\n      <mimeMap fileExtension=\".lit\" mimeType=\"application/x-ms-reader\" />\n      <mimeMap fileExtension=\".lpk\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".lsf\" mimeType=\"video/x-la-asf\" />\n      <mimeMap fileExtension=\".lsx\" mimeType=\"video/x-la-asf\" />\n      <mimeMap fileExtension=\".lzh\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".m13\" mimeType=\"application/x-msmediaview\" />\n      <mimeMap fileExtension=\".m14\" mimeType=\"application/x-msmediaview\" />\n      <mimeMap fileExtension=\".m1v\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".m2ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n      <mimeMap fileExtension=\".m3u\" mimeType=\"audio/x-mpegurl\" />\n      <mimeMap fileExtension=\".m4a\" mimeType=\"audio/mp4\" />\n      <mimeMap fileExtension=\".m4v\" mimeType=\"video/mp4\" />\n      <mimeMap fileExtension=\".man\" mimeType=\"application/x-troff-man\" />\n      <mimeMap fileExtension=\".manifest\" mimeType=\"application/x-ms-manifest\" />\n      <mimeMap fileExtension=\".map\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".mdb\" mimeType=\"application/x-msaccess\" />\n      <mimeMap fileExtension=\".mdp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".me\" mimeType=\"application/x-troff-me\" />\n      <mimeMap fileExtension=\".mht\" mimeType=\"message/rfc822\" />\n      <mimeMap fileExtension=\".mhtml\" mimeType=\"message/rfc822\" />\n      <mimeMap fileExtension=\".mid\" mimeType=\"audio/mid\" />\n      <mimeMap fileExtension=\".midi\" mimeType=\"audio/mid\" />\n      <mimeMap fileExtension=\".mix\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".mmf\" mimeType=\"application/x-smaf\" />\n      <mimeMap fileExtension=\".mno\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".mny\" mimeType=\"application/x-msmoney\" />\n      <mimeMap fileExtension=\".mov\" mimeType=\"video/quicktime\" />\n      <mimeMap fileExtension=\".movie\" mimeType=\"video/x-sgi-movie\" />\n      <mimeMap fileExtension=\".mp2\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mp3\" mimeType=\"audio/mpeg\" />\n      <mimeMap fileExtension=\".mp4\" mimeType=\"video/mp4\" />\n      <mimeMap fileExtension=\".mp4v\" mimeType=\"video/mp4\" />\n      <mimeMap fileExtension=\".mpa\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mpe\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mpeg\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mpg\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mpp\" mimeType=\"application/vnd.ms-project\" />\n      <mimeMap fileExtension=\".mpv2\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".ms\" mimeType=\"application/x-troff-ms\" />\n      <mimeMap fileExtension=\".msi\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".mso\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".mvb\" mimeType=\"application/x-msmediaview\" />\n      <mimeMap fileExtension=\".mvc\" mimeType=\"application/x-miva-compiled\" />\n      <mimeMap fileExtension=\".nc\" mimeType=\"application/x-netcdf\" />\n      <mimeMap fileExtension=\".nsc\" mimeType=\"video/x-ms-asf\" />\n      <mimeMap fileExtension=\".nws\" mimeType=\"message/rfc822\" />\n      <mimeMap fileExtension=\".ocx\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".oda\" mimeType=\"application/oda\" />\n      <mimeMap fileExtension=\".odc\" mimeType=\"text/x-ms-odc\" />\n      <mimeMap fileExtension=\".ods\" mimeType=\"application/oleobject\" />\n      <mimeMap fileExtension=\".oga\" mimeType=\"audio/ogg\" />\n      <mimeMap fileExtension=\".ogg\" mimeType=\"video/ogg\" />\n      <mimeMap fileExtension=\".ogv\" mimeType=\"video/ogg\" />\n      <mimeMap fileExtension=\".ogx\" mimeType=\"application/ogg\" />\n      <mimeMap fileExtension=\".one\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onea\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onetoc\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onetoc2\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onetmp\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onepkg\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".osdx\" mimeType=\"application/opensearchdescription+xml\" />\n      <mimeMap fileExtension=\".otf\" mimeType=\"font/otf\" />\n      <mimeMap fileExtension=\".p10\" mimeType=\"application/pkcs10\" />\n      <mimeMap fileExtension=\".p12\" mimeType=\"application/x-pkcs12\" />\n      <mimeMap fileExtension=\".p7b\" mimeType=\"application/x-pkcs7-certificates\" />\n      <mimeMap fileExtension=\".p7c\" mimeType=\"application/pkcs7-mime\" />\n      <mimeMap fileExtension=\".p7m\" mimeType=\"application/pkcs7-mime\" />\n      <mimeMap fileExtension=\".p7r\" mimeType=\"application/x-pkcs7-certreqresp\" />\n      <mimeMap fileExtension=\".p7s\" mimeType=\"application/pkcs7-signature\" />\n      <mimeMap fileExtension=\".pbm\" mimeType=\"image/x-portable-bitmap\" />\n      <mimeMap fileExtension=\".pcx\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pcz\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pdf\" mimeType=\"application/pdf\" />\n      <mimeMap fileExtension=\".pfb\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pfm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pfx\" mimeType=\"application/x-pkcs12\" />\n      <mimeMap fileExtension=\".pgm\" mimeType=\"image/x-portable-graymap\" />\n      <mimeMap fileExtension=\".pko\" mimeType=\"application/vnd.ms-pki.pko\" />\n      <mimeMap fileExtension=\".pma\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".pmc\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".pml\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".pmr\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".pmw\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".png\" mimeType=\"image/png\" />\n      <mimeMap fileExtension=\".pnm\" mimeType=\"image/x-portable-anymap\" />\n      <mimeMap fileExtension=\".pnz\" mimeType=\"image/png\" />\n      <mimeMap fileExtension=\".pot\" mimeType=\"application/vnd.ms-powerpoint\" />\n      <mimeMap fileExtension=\".potm\" mimeType=\"application/vnd.ms-powerpoint.template.macroEnabled.12\" />\n      <mimeMap fileExtension=\".potx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.template\" />\n      <mimeMap fileExtension=\".ppam\" mimeType=\"application/vnd.ms-powerpoint.addin.macroEnabled.12\" />\n      <mimeMap fileExtension=\".ppm\" mimeType=\"image/x-portable-pixmap\" />\n      <mimeMap fileExtension=\".pps\" mimeType=\"application/vnd.ms-powerpoint\" />\n      <mimeMap fileExtension=\".ppsm\" mimeType=\"application/vnd.ms-powerpoint.slideshow.macroEnabled.12\" />\n      <mimeMap fileExtension=\".ppsx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\" />\n      <mimeMap fileExtension=\".ppt\" mimeType=\"application/vnd.ms-powerpoint\" />\n      <mimeMap fileExtension=\".pptm\" mimeType=\"application/vnd.ms-powerpoint.presentation.macroEnabled.12\" />\n      <mimeMap fileExtension=\".pptx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation\" />\n      <mimeMap fileExtension=\".prf\" mimeType=\"application/pics-rules\" />\n      <mimeMap fileExtension=\".prm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".prx\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ps\" mimeType=\"application/postscript\" />\n      <mimeMap fileExtension=\".psd\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".psm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".psp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pub\" mimeType=\"application/x-mspublisher\" />\n      <mimeMap fileExtension=\".qt\" mimeType=\"video/quicktime\" />\n      <mimeMap fileExtension=\".qtl\" mimeType=\"application/x-quicktimeplayer\" />\n      <mimeMap fileExtension=\".qxd\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ra\" mimeType=\"audio/x-pn-realaudio\" />\n      <mimeMap fileExtension=\".ram\" mimeType=\"audio/x-pn-realaudio\" />\n      <mimeMap fileExtension=\".rar\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ras\" mimeType=\"image/x-cmu-raster\" />\n      <mimeMap fileExtension=\".rf\" mimeType=\"image/vnd.rn-realflash\" />\n      <mimeMap fileExtension=\".rgb\" mimeType=\"image/x-rgb\" />\n      <mimeMap fileExtension=\".rm\" mimeType=\"application/vnd.rn-realmedia\" />\n      <mimeMap fileExtension=\".rmi\" mimeType=\"audio/mid\" />\n      <mimeMap fileExtension=\".roff\" mimeType=\"application/x-troff\" />\n      <mimeMap fileExtension=\".rpm\" mimeType=\"audio/x-pn-realaudio-plugin\" />\n      <mimeMap fileExtension=\".rtf\" mimeType=\"application/rtf\" />\n      <mimeMap fileExtension=\".rtx\" mimeType=\"text/richtext\" />\n      <mimeMap fileExtension=\".scd\" mimeType=\"application/x-msschedule\" />\n      <mimeMap fileExtension=\".sct\" mimeType=\"text/scriptlet\" />\n      <mimeMap fileExtension=\".sea\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".setpay\" mimeType=\"application/set-payment-initiation\" />\n      <mimeMap fileExtension=\".setreg\" mimeType=\"application/set-registration-initiation\" />\n      <mimeMap fileExtension=\".sgml\" mimeType=\"text/sgml\" />\n      <mimeMap fileExtension=\".sh\" mimeType=\"application/x-sh\" />\n      <mimeMap fileExtension=\".shar\" mimeType=\"application/x-shar\" />\n      <mimeMap fileExtension=\".sit\" mimeType=\"application/x-stuffit\" />\n      <mimeMap fileExtension=\".sldm\" mimeType=\"application/vnd.ms-powerpoint.slide.macroEnabled.12\" />\n      <mimeMap fileExtension=\".sldx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slide\" />\n      <mimeMap fileExtension=\".smd\" mimeType=\"audio/x-smd\" />\n      <mimeMap fileExtension=\".smi\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".smx\" mimeType=\"audio/x-smd\" />\n      <mimeMap fileExtension=\".smz\" mimeType=\"audio/x-smd\" />\n      <mimeMap fileExtension=\".snd\" mimeType=\"audio/basic\" />\n      <mimeMap fileExtension=\".snp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".spc\" mimeType=\"application/x-pkcs7-certificates\" />\n      <mimeMap fileExtension=\".spl\" mimeType=\"application/futuresplash\" />\n      <mimeMap fileExtension=\".spx\" mimeType=\"audio/ogg\" />\n      <mimeMap fileExtension=\".src\" mimeType=\"application/x-wais-source\" />\n      <mimeMap fileExtension=\".ssm\" mimeType=\"application/streamingmedia\" />\n      <mimeMap fileExtension=\".sst\" mimeType=\"application/vnd.ms-pki.certstore\" />\n      <mimeMap fileExtension=\".stl\" mimeType=\"application/vnd.ms-pki.stl\" />\n      <mimeMap fileExtension=\".sv4cpio\" mimeType=\"application/x-sv4cpio\" />\n      <mimeMap fileExtension=\".sv4crc\" mimeType=\"application/x-sv4crc\" />\n      <mimeMap fileExtension=\".svg\" mimeType=\"image/svg+xml\" />\n      <mimeMap fileExtension=\".svgz\" mimeType=\"image/svg+xml\" />\n      <mimeMap fileExtension=\".swf\" mimeType=\"application/x-shockwave-flash\" />\n      <mimeMap fileExtension=\".t\" mimeType=\"application/x-troff\" />\n      <mimeMap fileExtension=\".tar\" mimeType=\"application/x-tar\" />\n      <mimeMap fileExtension=\".tcl\" mimeType=\"application/x-tcl\" />\n      <mimeMap fileExtension=\".tex\" mimeType=\"application/x-tex\" />\n      <mimeMap fileExtension=\".texi\" mimeType=\"application/x-texinfo\" />\n      <mimeMap fileExtension=\".texinfo\" mimeType=\"application/x-texinfo\" />\n      <mimeMap fileExtension=\".tgz\" mimeType=\"application/x-compressed\" />\n      <mimeMap fileExtension=\".thmx\" mimeType=\"application/vnd.ms-officetheme\" />\n      <mimeMap fileExtension=\".thn\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".tif\" mimeType=\"image/tiff\" />\n      <mimeMap fileExtension=\".tiff\" mimeType=\"image/tiff\" />\n      <mimeMap fileExtension=\".toc\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".tr\" mimeType=\"application/x-troff\" />\n      <mimeMap fileExtension=\".trm\" mimeType=\"application/x-msterminal\" />\n      <mimeMap fileExtension=\".ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n      <mimeMap fileExtension=\".tsv\" mimeType=\"text/tab-separated-values\" />\n      <mimeMap fileExtension=\".ttf\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".tts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n      <mimeMap fileExtension=\".txt\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".u32\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".uls\" mimeType=\"text/iuls\" />\n      <mimeMap fileExtension=\".ustar\" mimeType=\"application/x-ustar\" />\n      <mimeMap fileExtension=\".vbs\" mimeType=\"text/vbscript\" />\n      <mimeMap fileExtension=\".vcf\" mimeType=\"text/x-vcard\" />\n      <mimeMap fileExtension=\".vcs\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".vdx\" mimeType=\"application/vnd.ms-visio.viewer\" />\n      <mimeMap fileExtension=\".vml\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".vsd\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vss\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vst\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vsto\" mimeType=\"application/x-ms-vsto\" />\n      <mimeMap fileExtension=\".vsw\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vsx\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vtx\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".wav\" mimeType=\"audio/wav\" />\n      <mimeMap fileExtension=\".wax\" mimeType=\"audio/x-ms-wax\" />\n      <mimeMap fileExtension=\".wbmp\" mimeType=\"image/vnd.wap.wbmp\" />\n      <mimeMap fileExtension=\".wcm\" mimeType=\"application/vnd.ms-works\" />\n      <mimeMap fileExtension=\".wdb\" mimeType=\"application/vnd.ms-works\" />\n      <mimeMap fileExtension=\".webm\" mimeType=\"video/webm\" />\n      <mimeMap fileExtension=\".wks\" mimeType=\"application/vnd.ms-works\" />\n      <mimeMap fileExtension=\".wm\" mimeType=\"video/x-ms-wm\" />\n      <mimeMap fileExtension=\".wma\" mimeType=\"audio/x-ms-wma\" />\n      <mimeMap fileExtension=\".wmd\" mimeType=\"application/x-ms-wmd\" />\n      <mimeMap fileExtension=\".wmf\" mimeType=\"application/x-msmetafile\" />\n      <mimeMap fileExtension=\".wml\" mimeType=\"text/vnd.wap.wml\" />\n      <mimeMap fileExtension=\".wmlc\" mimeType=\"application/vnd.wap.wmlc\" />\n      <mimeMap fileExtension=\".wmls\" mimeType=\"text/vnd.wap.wmlscript\" />\n      <mimeMap fileExtension=\".wmlsc\" mimeType=\"application/vnd.wap.wmlscriptc\" />\n      <mimeMap fileExtension=\".wmp\" mimeType=\"video/x-ms-wmp\" />\n      <mimeMap fileExtension=\".wmv\" mimeType=\"video/x-ms-wmv\" />\n      <mimeMap fileExtension=\".wmx\" mimeType=\"video/x-ms-wmx\" />\n      <mimeMap fileExtension=\".wmz\" mimeType=\"application/x-ms-wmz\" />\n      <mimeMap fileExtension=\".woff\" mimeType=\"font/x-woff\" />\n      <mimeMap fileExtension=\".wps\" mimeType=\"application/vnd.ms-works\" />\n      <mimeMap fileExtension=\".wri\" mimeType=\"application/x-mswrite\" />\n      <mimeMap fileExtension=\".wrl\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".wrz\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".wsdl\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".wtv\" mimeType=\"video/x-ms-wtv\" />\n      <mimeMap fileExtension=\".wvx\" mimeType=\"video/x-ms-wvx\" />\n      <mimeMap fileExtension=\".x\" mimeType=\"application/directx\" />\n      <mimeMap fileExtension=\".xaf\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".xaml\" mimeType=\"application/xaml+xml\" />\n      <mimeMap fileExtension=\".xap\" mimeType=\"application/x-silverlight-app\" />\n      <mimeMap fileExtension=\".xbap\" mimeType=\"application/x-ms-xbap\" />\n      <mimeMap fileExtension=\".xbm\" mimeType=\"image/x-xbitmap\" />\n      <mimeMap fileExtension=\".xdr\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".xht\" mimeType=\"application/xhtml+xml\" />\n      <mimeMap fileExtension=\".xhtml\" mimeType=\"application/xhtml+xml\" />\n      <mimeMap fileExtension=\".xla\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xlam\" mimeType=\"application/vnd.ms-excel.addin.macroEnabled.12\" />\n      <mimeMap fileExtension=\".xlc\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xlm\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xls\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xlsb\" mimeType=\"application/vnd.ms-excel.sheet.binary.macroEnabled.12\" />\n      <mimeMap fileExtension=\".xlsm\" mimeType=\"application/vnd.ms-excel.sheet.macroEnabled.12\" />\n      <mimeMap fileExtension=\".xlsx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" />\n      <mimeMap fileExtension=\".xlt\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xltm\" mimeType=\"application/vnd.ms-excel.template.macroEnabled.12\" />\n      <mimeMap fileExtension=\".xltx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\" />\n      <mimeMap fileExtension=\".xlw\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xml\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xof\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".xpm\" mimeType=\"image/x-xpixmap\" />\n      <mimeMap fileExtension=\".xps\" mimeType=\"application/vnd.ms-xpsdocument\" />\n      <mimeMap fileExtension=\".xsd\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xsf\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xsl\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xslt\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xsn\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".xtp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".xwd\" mimeType=\"image/x-xwindowdump\" />\n      <mimeMap fileExtension=\".z\" mimeType=\"application/x-compress\" />\n      <mimeMap fileExtension=\".zip\" mimeType=\"application/x-zip-compressed\" />\n    </staticContent>\n\n    <tracing>\n\n      <traceProviderDefinitions>\n        <add name=\"WWW Server\" guid=\"{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}\">\n          <areas>\n            <clear />\n            <add name=\"Authentication\" value=\"2\" />\n            <add name=\"Security\" value=\"4\" />\n            <add name=\"Filter\" value=\"8\" />\n            <add name=\"StaticFile\" value=\"16\" />\n            <add name=\"CGI\" value=\"32\" />\n            <add name=\"Compression\" value=\"64\" />\n            <add name=\"Cache\" value=\"128\" />\n            <add name=\"RequestNotifications\" value=\"256\" />\n            <add name=\"Module\" value=\"512\" />\n            <add name=\"Rewrite\" value=\"1024\" />\n            <add name=\"FastCGI\" value=\"4096\" />\n            <add name=\"WebSocket\" value=\"16384\" />\n          </areas>\n        </add>\n        <add name=\"ASP\" guid=\"{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}\">\n          <areas>\n            <clear />\n          </areas>\n        </add>\n        <add name=\"ISAPI Extension\" guid=\"{a1c2040e-8840-4c31-ba11-9871031a19ea}\">\n          <areas>\n            <clear />\n          </areas>\n        </add>\n        <add name=\"ASPNET\" guid=\"{AFF081FE-0247-4275-9C4E-021F3DC1DA35}\">\n          <areas>\n            <add name=\"Infrastructure\" value=\"1\" />\n            <add name=\"Module\" value=\"2\" />\n            <add name=\"Page\" value=\"4\" />\n            <add name=\"AppServices\" value=\"8\" />\n          </areas>\n        </add>\n      </traceProviderDefinitions>\n\n      <traceFailedRequests>\n        <add path=\"*\">\n          <traceAreas>\n            <add provider=\"ASP\" verbosity=\"Verbose\" />\n            <add provider=\"ASPNET\" areas=\"Infrastructure,Module,Page,AppServices\" verbosity=\"Verbose\" />\n            <add provider=\"ISAPI Extension\" verbosity=\"Verbose\" />\n            <add provider=\"WWW Server\" areas=\"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\" verbosity=\"Verbose\" />\n          </traceAreas>\n          <failureDefinitions statusCodes=\"200-999\" />\n        </add>\n      </traceFailedRequests>\n\n    </tracing>\n\n    <webdav>\n      <globalSettings>\n        <propertyStores>\n          <add name=\"webdav_simple_prop\" image=\"%IIS_BIN%\\webdav_simple_prop.dll\" image32=\"%IIS_BIN%\\webdav_simple_prop.dll\" />\n        </propertyStores>\n        <lockStores>\n          <add name=\"webdav_simple_lock\" image=\"%IIS_BIN%\\webdav_simple_lock.dll\" image32=\"%IIS_BIN%\\webdav_simple_lock.dll\" />\n        </lockStores>\n\n      </globalSettings>\n      <authoring>\n        <locks enabled=\"true\" lockStore=\"webdav_simple_lock\" />\n      </authoring>\n\n    </webdav>\n\n    <rewrite>\n      <rules>\n        <rule name=\"lextudio2\" stopProcessing=\"true\">\n          <match url=\"(.*)\"/>\n          <conditions logicalGrouping=\"MatchAny\">\n            <add input=\"{HTTP_HOST}\" pattern=\"^lextudio.com$\"/>\n            <add input=\"{HTTP_HOST}\" pattern=\"^www.lextudio.com$\"/>\n          </conditions>\n          <action type=\"Rewrite\" url=\"/www/{R:0}\"/>\n        </rule>\n      </rules>\n    </rewrite>\n\n  </system.webServer>\n  <location path=\"\" overrideMode=\"Allow\">\n    <system.webServer>\n      <modules>\n        <!--\n                <add name=\"HttpCacheModule\" lockItem=\"true\" />\n-->\n        <add name=\"DynamicCompressionModule\" lockItem=\"true\" />\n        <add name=\"StaticCompressionModule\" lockItem=\"true\" />\n        <add name=\"DefaultDocumentModule\" lockItem=\"true\" />\n        <add name=\"DirectoryListingModule\" lockItem=\"true\" />\n        <add name=\"IsapiFilterModule\" lockItem=\"true\" />\n        <add name=\"ProtocolSupportModule\" lockItem=\"true\" />\n        <add name=\"HttpRedirectionModule\" lockItem=\"true\" />\n        <add name=\"ServerSideIncludeModule\" lockItem=\"true\" />\n        <add name=\"StaticFileModule\" lockItem=\"true\" />\n        <add name=\"AnonymousAuthenticationModule\" lockItem=\"true\" />\n        <add name=\"CertificateMappingAuthenticationModule\" lockItem=\"true\" />\n        <add name=\"UrlAuthorizationModule\" lockItem=\"true\" />\n        <add name=\"BasicAuthenticationModule\" lockItem=\"true\" />\n        <add name=\"WindowsAuthenticationModule\" lockItem=\"true\" />\n        <!--\n                <add name=\"DigestAuthenticationModule\" lockItem=\"true\" />\n-->\n        <add name=\"IISCertificateMappingAuthenticationModule\" lockItem=\"true\" />\n        <add name=\"WebMatrixSupportModule\" lockItem=\"true\" />\n        <add name=\"IpRestrictionModule\" lockItem=\"true\" />\n        <add name=\"DynamicIpRestrictionModule\" lockItem=\"true\" />\n        <add name=\"RequestFilteringModule\" lockItem=\"true\" />\n        <add name=\"CustomLoggingModule\" lockItem=\"true\" />\n        <add name=\"CustomErrorModule\" lockItem=\"true\" />\n        <add name=\"IsapiModule\" lockItem=\"true\" />\n        <add name=\"HttpLoggingModule\" lockItem=\"true\" />\n        <add name=\"FailedRequestsTracingModule\" lockItem=\"true\" />\n        <add name=\"CgiModule\" lockItem=\"true\" />\n        <add name=\"FastCgiModule\" lockItem=\"true\" />\n        <!--                <add name=\"WebDAVModule\" /> -->\n        <add name=\"RewriteModule\" />\n        <add name=\"OutputCache\" type=\"System.Web.Caching.OutputCacheModule\" preCondition=\"managedHandler\" />\n        <add name=\"Session\" type=\"System.Web.SessionState.SessionStateModule\" preCondition=\"managedHandler\" />\n        <add name=\"WindowsAuthentication\" type=\"System.Web.Security.WindowsAuthenticationModule\" preCondition=\"managedHandler\" />\n        <add name=\"FormsAuthentication\" type=\"System.Web.Security.FormsAuthenticationModule\" preCondition=\"managedHandler\" />\n        <add name=\"DefaultAuthentication\" type=\"System.Web.Security.DefaultAuthenticationModule\" preCondition=\"managedHandler\" />\n        <add name=\"RoleManager\" type=\"System.Web.Security.RoleManagerModule\" preCondition=\"managedHandler\" />\n        <add name=\"UrlAuthorization\" type=\"System.Web.Security.UrlAuthorizationModule\" preCondition=\"managedHandler\" />\n        <add name=\"FileAuthorization\" type=\"System.Web.Security.FileAuthorizationModule\" preCondition=\"managedHandler\" />\n        <add name=\"AnonymousIdentification\" type=\"System.Web.Security.AnonymousIdentificationModule\" preCondition=\"managedHandler\" />\n        <add name=\"Profile\" type=\"System.Web.Profile.ProfileModule\" preCondition=\"managedHandler\" />\n        <add name=\"UrlMappingsModule\" type=\"System.Web.UrlMappingsModule\" preCondition=\"managedHandler\" />\n        <add name=\"ApplicationInitializationModule\" lockItem=\"true\" />\n        <add name=\"WebSocketModule\" lockItem=\"true\" />\n        <add name=\"ServiceModel-4.0\" type=\"System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n        <add name=\"ConfigurationValidationModule\" lockItem=\"true\" />\n        <add name=\"UrlRoutingModule-4.0\" type=\"System.Web.Routing.UrlRoutingModule\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n        <add name=\"ScriptModule-4.0\" type=\"System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n      </modules>\n      <handlers accessPolicy=\"Read, Script\">\n        <!--                <add name=\"WebDAV\" path=\"*\" verb=\"PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK\" modules=\"WebDAVModule\" resourceType=\"Unspecified\" requireAccess=\"None\" /> -->\n        <add name=\"AXD-ISAPI-4.0_64bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"PageHandlerFactory-ISAPI-4.0_64bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"SimpleHandlerFactory-ISAPI-4.0_64bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"WebServiceHandlerFactory-ISAPI-4.0_64bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"svc-ISAPI-4.0_64bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n        <add name=\"rules-ISAPI-4.0_64bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n        <add name=\"xoml-ISAPI-4.0_64bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n        <add name=\"xamlx-ISAPI-4.0_64bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n        <add name=\"aspq-ISAPI-4.0_64bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"cshtm-ISAPI-4.0_64bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"cshtml-ISAPI-4.0_64bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"vbhtm-ISAPI-4.0_64bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"vbhtml-ISAPI-4.0_64bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"AXD-ISAPI-4.0_32bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"PageHandlerFactory-ISAPI-4.0_32bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"SimpleHandlerFactory-ISAPI-4.0_32bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"WebServiceHandlerFactory-ISAPI-4.0_32bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"svc-ISAPI-4.0_32bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n        <add name=\"rules-ISAPI-4.0_32bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n        <add name=\"xoml-ISAPI-4.0_32bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n        <add name=\"xamlx-ISAPI-4.0_32bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n        <add name=\"aspq-ISAPI-4.0_32bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"cshtm-ISAPI-4.0_32bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"cshtml-ISAPI-4.0_32bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"vbhtm-ISAPI-4.0_32bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"vbhtml-ISAPI-4.0_32bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"TraceHandler-Integrated-4.0\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"WebAdminHandler-Integrated-4.0\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"AssemblyResourceLoader-Integrated-4.0\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"PageHandlerFactory-Integrated-4.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"SimpleHandlerFactory-Integrated-4.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"WebServiceHandlerFactory-Integrated-4.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-Integrated-4.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-Integrated-4.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"svc-Integrated-4.0\" path=\"*.svc\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"rules-Integrated-4.0\" path=\"*.rules\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"xoml-Integrated-4.0\" path=\"*.xoml\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"xamlx-Integrated-4.0\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"aspq-Integrated-4.0\" path=\"*.aspq\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"cshtm-Integrated-4.0\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"cshtml-Integrated-4.0\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"vbhtm-Integrated-4.0\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"vbhtml-Integrated-4.0\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"ScriptHandlerFactoryAppServices-Integrated-4.0\" path=\"*_AppService.axd\" verb=\"*\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"ScriptResourceIntegrated-4.0\" path=\"*ScriptResource.axd\" verb=\"GET,HEAD\" type=\"System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"ASPClassic\" path=\"*.asp\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n        <add name=\"SecurityCertificate\" path=\"*.cer\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n        <add name=\"ISAPI-dll\" path=\"*.dll\" verb=\"*\" modules=\"IsapiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n        <add name=\"TraceHandler-Integrated\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"WebAdminHandler-Integrated\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"AssemblyResourceLoader-Integrated\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"PageHandlerFactory-Integrated\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"SimpleHandlerFactory-Integrated\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"WebServiceHandlerFactory-Integrated\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-Integrated\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-Integrated\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"AXD-ISAPI-2.0\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"PageHandlerFactory-ISAPI-2.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"SimpleHandlerFactory-ISAPI-2.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"WebServiceHandlerFactory-ISAPI-2.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"AXD-ISAPI-2.0-64\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"PageHandlerFactory-ISAPI-2.0-64\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"SimpleHandlerFactory-ISAPI-2.0-64\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"WebServiceHandlerFactory-ISAPI-2.0-64\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0-64\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0-64\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"CGI-exe\" path=\"*.exe\" verb=\"*\" modules=\"CgiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n        <add name=\"SSINC-stm\" path=\"*.stm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n        <add name=\"SSINC-shtm\" path=\"*.shtm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n        <add name=\"SSINC-shtml\" path=\"*.shtml\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n        <add name=\"TRACEVerbHandler\" path=\"*\" verb=\"TRACE\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n        <add name=\"OPTIONSVerbHandler\" path=\"*\" verb=\"OPTIONS\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n        <add name=\"ExtensionlessUrl-ISAPI-4.0_32bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"ExtensionlessUrlHandler-ISAPI-4.0_64bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"ExtensionlessUrl-Integrated-4.0\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" responseBufferLimit=\"0\" />\n        <add name=\"StaticFile\" path=\"*\" verb=\"*\" modules=\"StaticFileModule,DefaultDocumentModule,DirectoryListingModule\" resourceType=\"Either\" requireAccess=\"Read\" />\n      </handlers>\n    </system.webServer>\n  </location>\n  <location path=\"Default Web Site\">\n    <system.webServer>\n      <security>\n        <ipSecurity>\n          <add allowed=\"true\"\n             ipAddress=\"1.1.1.1\"/>\n        </ipSecurity>\n        <authentication>\n          <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\"\n                                 userName=\"test\"/>\n        </authentication>\n      </security>\n      <httpLogging dontLog=\"true\"/>\n    </system.webServer>\n  </location>\n  <location path=\"WebSite2\">\n    <system.webServer>\n      <security>\n        <ipSecurity>\n          <add ipAddress=\"1.1.1.1\" allowed=\"true\" />\n        </ipSecurity>\n        <authentication>\n          <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\" userName=\"test\"/>\n          <windowsAuthentication enabled=\"true\">\n            <extendedProtection flags=\"None\" tokenChecking=\"Allow\">\n              <spn name=\"HTTP/www.contoso.com\"/>\n              <spn name=\"HTTP/contoso.com\"/>\n            </extendedProtection>\n          </windowsAuthentication>\n        </authentication>\n      </security>\n      <httpLogging dontLog=\"true\" />\n    </system.webServer>\n  </location>\n  <location path=\"WebSite1\">\n    <system.webServer>\n      <httpLogging dontLog=\"true\"/>\n      <security>\n        <authentication>\n          <windowsAuthentication enabled=\"false\"/>\n        </authentication>\n      </security>\n    </system.webServer>\n  </location>\n  <location path=\"WebSite1/test\">\n    <system.webServer>\n      <httpLogging dontLog=\"false\"/>\n    </system.webServer>\n  </location>\n</configuration>\n"
  },
  {
    "path": "Tests/expected3.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    IIS configuration sections.\n\n    For schema documentation, see\n    %IIS_BIN%\\config\\schema\\IIS_schema.xml.\n    \n    Please make a backup of this file before making any changes to it.\n\n    NOTE: The following environment variables are available to be used\n          within this file and are understood by the IIS Express.\n\n          %IIS_USER_HOME% - The IIS Express home directory for the user\n          %IIS_SITES_HOME% - The default home directory for sites\n          %IIS_BIN% - The location of the IIS Express binaries\n          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%\n\n-->\n\n<configuration>\n\n    <!--\n\n        The <configSections> section controls the registration of sections.\n        Section is the basic unit of deployment, locking, searching and\n        containment for configuration settings.\n        \n        Every section belongs to one section group.\n        A section group is a container of logically-related sections.\n        \n        Sections cannot be nested.\n        Section groups may be nested.\n        \n        <section\n            name=\"\"  [Required, Collection Key] [XML name of the section]\n            allowDefinition=\"Everywhere\" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]\n            overrideModeDefault=\"Allow\"  [Allow|Deny] [Default delegation mode]\n            allowLocation=\"true\"  [true|false] [Allowed in location tags]\n        />\n        \n        The recommended way to unlock sections is by using a location tag:\n        <location path=\"Default Web Site\" overrideMode=\"Allow\">\n            <system.webServer>\n                <asp />\n            </system.webServer>\n        </location>\n\n    -->\n    <configSections>\n        <sectionGroup name=\"system.applicationHost\">\n            <section name=\"applicationPools\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"configHistory\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"customMetadata\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"listenerAdapters\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"log\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"sites\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"webLimits\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n\n        <sectionGroup name=\"system.webServer\">\n            <section name=\"asp\" overrideModeDefault=\"Deny\" />\n            <section name=\"caching\" overrideModeDefault=\"Allow\" />\n            <section name=\"cgi\" overrideModeDefault=\"Deny\" />\n            <section name=\"defaultDocument\" overrideModeDefault=\"Allow\" />\n            <section name=\"directoryBrowse\" overrideModeDefault=\"Allow\" />\n            <section name=\"fastCgi\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"globalModules\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"handlers\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpCompression\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpErrors\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpLogging\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpProtocol\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpRedirect\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpTracing\" overrideModeDefault=\"Deny\" />\n            <section name=\"isapiFilters\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n            <section name=\"modules\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n            <section name=\"odbcLogging\" overrideModeDefault=\"Deny\" />\n            <sectionGroup name=\"security\">\n                <section name=\"access\" overrideModeDefault=\"Deny\" />\n                <section name=\"applicationDependencies\" overrideModeDefault=\"Deny\" />\n                <sectionGroup name=\"authentication\">\n                    <section name=\"anonymousAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"basicAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"clientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"digestAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"iisClientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"windowsAuthentication\" overrideModeDefault=\"Deny\" />\n                </sectionGroup>\n                <section name=\"authorization\" overrideModeDefault=\"Allow\" />\n                <section name=\"ipSecurity\" overrideModeDefault=\"Deny\" />\n                <section name=\"dynamicIpSecurity\" overrideModeDefault=\"Deny\" />\n                <section name=\"isapiCgiRestriction\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n                <section name=\"requestFiltering\" overrideModeDefault=\"Allow\" />\n            </sectionGroup>\n            <section name=\"serverRuntime\" overrideModeDefault=\"Deny\" />\n            <section name=\"serverSideInclude\" overrideModeDefault=\"Deny\" />\n            <section name=\"staticContent\" overrideModeDefault=\"Allow\" />\n            <sectionGroup name=\"tracing\">\n                <section name=\"traceFailedRequests\" overrideModeDefault=\"Allow\" />\n                <section name=\"traceProviderDefinitions\" overrideModeDefault=\"Deny\" />\n            </sectionGroup>\n            <section name=\"urlCompression\" overrideModeDefault=\"Allow\" />\n            <section name=\"validation\" overrideModeDefault=\"Allow\" />\n            <sectionGroup name=\"webdav\">\n                <section name=\"globalSettings\" overrideModeDefault=\"Deny\" />\n                <section name=\"authoring\" overrideModeDefault=\"Deny\" />\n                <section name=\"authoringRules\" overrideModeDefault=\"Deny\" />\n            </sectionGroup>\n            <sectionGroup name=\"rewrite\">\n                <section name=\"allowedServerVariables\" overrideModeDefault=\"Deny\" />\n                <section name=\"rules\" overrideModeDefault=\"Allow\" />\n                <section name=\"outboundRules\" overrideModeDefault=\"Allow\" />\n                <section name=\"globalRules\" overrideModeDefault=\"Deny\" allowDefinition=\"AppHostOnly\" />\n                <section name=\"providers\" overrideModeDefault=\"Allow\" />\n                <section name=\"rewriteMaps\" overrideModeDefault=\"Allow\" />\n            </sectionGroup>\n            <section name=\"applicationInitialization\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Allow\" />\n            <section name=\"webSocket\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n    </configSections>\n\n    <!--<configProtectedData>\n        <providers>\n            <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=\" />\n            <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=\" />\n        </providers>\n    </configProtectedData>-->\n  \n    <configProtectedData>\n        <providers>\n            <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4+jnvVwdmahiJvH8sOJxtDMnsR+0yNnzh79Dd3oZMnVmAqLQDUpUZEwMJSlfhnLl8q5CEHposKZ5p3zl2oOeow36FweUI6WTSWlc4jVQlnCcLpvR1+CVF7I2XS/TZKGkgFNapTAJUAAL4q5LjGIEGMNiSCgFHOvJDGVDq3UMtU+vR5P7ZdbJmxswBf53Ut4iMAXxOz7JTSzwtIUmqK5ML95cqFt3WSLmXHcgaBX37iwS9kpgj2Sq+by63NYAE2RBsUb6JfPrVDKReNWK6A2o1QJBXF7jrAEVwvdX6DSw0gulMypeJ2I1ltOCgr8CTi+CMxStRbdQE+OA+83g0dKvgw==\" />\n            <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAD11v8x8UPbc9pt2pFRvgGuAqWTMRh0jP+/pUcEDZN6oSYAIqVjp1EgbkrakdC+/TrMsPkccjudZ6OxlhW8fbVxA71WQdjFkjnObuXXj68ZTD01HF310/Gh56XIvALkBz2DFJ0spMrQ1rQoOllcaqAy/6aSsIaD16ApmrTcDECoJ7LP0eJYcbBD+cvITl5oHN4HDYhZYqVn4M1pkEcZZxFWh1rlqhlkb9NY5hF+rS3U32XqKAcz4lXQELQmXkPTWQ/DoKTreE0yKlPTLnz6WztWNtBIuVvfNMxSHj4WlN420iejpuk3LjYU5lvns5MJzs5L/7bBDdxPpIEpB1p645eQ==\" />\n        </providers>\n    </configProtectedData>\n  \n    <system.applicationHost>\n\n        <applicationPools>\n            <add name=\"Clr4IntegratedAppPool\" managedRuntimeVersion=\"v4.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\">\n                <processModel loadUserProfile=\"true\" />\n            </add>\n            <add name=\"Clr4ClassicAppPool\" managedRuntimeVersion=\"v4.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"Clr2IntegratedAppPool\" managedRuntimeVersion=\"v2.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"Clr2ClassicAppPool\" managedRuntimeVersion=\"v2.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"UnmanagedClassicAppPool\" managedPipelineMode=\"Classic\" />\n            <applicationPoolDefaults managedRuntimeLoader=\"v4.0\" />\n        </applicationPools>\n\n        <!--\n\n          The <listenerAdapters> section defines the protocols with which the\n          Windows Process Activation Service (WAS) binds.\n\n        -->\n        <listenerAdapters>\n            <add name=\"http\" />\n        </listenerAdapters>\n\n        <sites>\n            <site name=\"WebSite1\" id=\"1\">\n                <application path=\"/\">\n                    <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\WebSite1\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\":8080:localhost\" />\n                  <binding bindingInformation=\"808:*\"\n                           protocol=\"net.tcp\"/>\n                  <binding bindingInformation=\"localhost\"\n                           protocol=\"net.msmq\"/>\n                  <binding bindingInformation=\"localhost\"\n                           protocol=\"msmq.formatname\"/>\n                  <binding bindingInformation=\"*\"\n                           protocol=\"net.pipe\"/>\n                  <binding bindingInformation=\"*:21:\"\n                           protocol=\"ftp\"/>\n                  <binding bindingInformation=\":8080:*\"\n                           protocol=\"http\"/>\n                  <binding bindingInformation=\":443:localhost\"\n                           protocol=\"https\"/>\n                  <binding bindingInformation=\":44300:*\"\n                           protocol=\"https\"/>\n                  <binding bindingInformation=\"*:210:localhost\"\n                           protocol=\"ftp\"/>\n                  <binding bindingInformation=\"*\"\n                           protocol=\"net.tcp\"/>\n                  <binding bindingInformation=\"*\"\n                           protocol=\"net.msmq\"/>\n                  <binding bindingInformation=\"*\"\n                           protocol=\"msmq.formatname\"/>\n                  <binding bindingInformation=\"localhost\"\n                           protocol=\"net.pipe\"/>\n                </bindings>\n            </site>\n            <site name=\"GuessMeWeb\" id=\"2\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\GuessMeWeb\\GuessMeWeb\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:61902:localhost\" />\n                    <binding protocol=\"https\" bindingInformation=\"*:44300:localhost\" sslFlags=\"1\" />\n                </bindings>\n            </site>\n            <site name=\"WebSite2\" id=\"3\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\Website2\" />\n                              <virtualDirectory path=\"/help\" physicalPath=\"%JEXUS_TEST_HOME%\\help\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:55165:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication1\" id=\"4\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication1\\WebApplication1\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:10830:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"SampleWCFService\" id=\"5\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\codesamples\\SampleWCFService\\SampleWCFService\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:4605:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"RemoteServices\" id=\"6\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\JexusManager\\RemoteServices\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:14150:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication2\" id=\"7\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication2\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:9827:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication3\" id=\"8\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication3\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:14234:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Performance.ReferenceApp\" id=\"9\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Performance.ReferenceApp\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:17613:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Sandbox.WebServer-Site\" id=\"10\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebServer-Site\" />\n                </application>\n                <application path=\"/Katana.Sandbox.WebServer\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebServer\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:18001:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Sandbox.WebClient-Site\" id=\"11\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebClient-Site\" />\n                </application>\n                <application path=\"/Katana.Sandbox.WebClient\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebClient\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:18002:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Mono328\" id=\"12\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\Mono328\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:4330:localhost\" />\n                </bindings>\n            </site>\n            <siteDefaults>\n                <logFile directory=\"%IIS_USER_HOME%\\Logs\" />\n                <traceFailedRequestsLogging directory=\"%IIS_USER_HOME%\\TraceLogFiles\" enabled=\"true\" />\n            </siteDefaults>\n            <applicationDefaults applicationPool=\"Clr4IntegratedAppPool\" />\n        </sites>\n\n    </system.applicationHost>\n\n    <system.webServer>\n\n        <asp scriptErrorSentToBrowser=\"true\">\n            <cache diskTemplateCacheDirectory=\"%TEMP%\\iisexpress\\ASP Compiled Templates\" />\n        </asp>\n\n      <caching>\n        <profiles>\n          <add duration=\"00:00:00\" extension=\".cs\"/>\n        </profiles>\n      </caching>\n\n        <defaultDocument>\n            <files>\n                <add value=\"Default.htm\" />\n                <add value=\"Default.asp\" />\n                <add value=\"index.htm\" />\n                <add value=\"index.html\" />\n                <add value=\"iisstart.htm\" />\n                <add value=\"default.aspx\" />\n            </files>\n        </defaultDocument>\n\n        <!--\n\n          The <globalModules> section defines all native-code modules.\n          To enable a module, specify it in the <modules> section.\n\n        -->\n        <globalModules>\n            <add name=\"UriCacheModule\" image=\"%IIS_BIN%\\cachuri.dll\" />\n<!--            <add name=\"FileCacheModule\" image=\"%IIS_BIN%\\cachfile.dll\" />  -->\n            <add name=\"TokenCacheModule\" image=\"%IIS_BIN%\\cachtokn.dll\" />\n<!--            <add name=\"HttpCacheModule\" image=\"%IIS_BIN%\\cachhttp.dll\" /> -->\n            <add name=\"DynamicCompressionModule\" image=\"%IIS_BIN%\\compdyn.dll\" />\n            <add name=\"StaticCompressionModule\" image=\"%IIS_BIN%\\compstat.dll\" />\n            <add name=\"DefaultDocumentModule\" image=\"%IIS_BIN%\\defdoc.dll\" />\n            <add name=\"DirectoryListingModule\" image=\"%IIS_BIN%\\dirlist.dll\" />\n            <add name=\"ProtocolSupportModule\" image=\"%IIS_BIN%\\protsup.dll\" />\n            <add name=\"HttpRedirectionModule\" image=\"%IIS_BIN%\\redirect.dll\" />\n            <add name=\"ServerSideIncludeModule\" image=\"%IIS_BIN%\\iis_ssi.dll\" />\n            <add name=\"StaticFileModule\" image=\"%IIS_BIN%\\static.dll\" />\n            <add name=\"AnonymousAuthenticationModule\" image=\"%IIS_BIN%\\authanon.dll\" />\n            <add name=\"CertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authcert.dll\" />\n            <add name=\"UrlAuthorizationModule\" image=\"%IIS_BIN%\\urlauthz.dll\" />\n            <add name=\"BasicAuthenticationModule\" image=\"%IIS_BIN%\\authbas.dll\" />\n            <add name=\"WindowsAuthenticationModule\" image=\"%IIS_BIN%\\authsspi.dll\" />\n<!--            <add name=\"DigestAuthenticationModule\" image=\"%IIS_BIN%\\authmd5.dll\" /> -->\n            <add name=\"IISCertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authmap.dll\" />\n            <add name=\"IpRestrictionModule\" image=\"%IIS_BIN%\\iprestr.dll\" />\n            <add name=\"DynamicIpRestrictionModule\" image=\"%IIS_BIN%\\diprestr.dll\" />\n            <add name=\"RequestFilteringModule\" image=\"%IIS_BIN%\\modrqflt.dll\" />\n            <add name=\"CustomLoggingModule\" image=\"%IIS_BIN%\\logcust.dll\" />\n            <add name=\"CustomErrorModule\" image=\"%IIS_BIN%\\custerr.dll\" />\n            <add name=\"HttpLoggingModule\" image=\"%IIS_BIN%\\loghttp.dll\" />\n<!--            <add name=\"TracingModule\" image=\"%IIS_BIN%\\iisetw.dll\" /> -->\n            <add name=\"FailedRequestsTracingModule\" image=\"%IIS_BIN%\\iisfreb.dll\" />\n            <add name=\"RequestMonitorModule\" image=\"%IIS_BIN%\\iisreqs.dll\" />\n            <add name=\"IsapiModule\" image=\"%IIS_BIN%\\isapi.dll\" />\n            <add name=\"IsapiFilterModule\" image=\"%IIS_BIN%\\filter.dll\" />\n            <add name=\"CgiModule\" image=\"%IIS_BIN%\\cgi.dll\" />\n            <add name=\"FastCgiModule\" image=\"%IIS_BIN%\\iisfcgi.dll\" />\n<!--            <add name=\"WebDAVModule\" image=\"%IIS_BIN%\\webdav.dll\" /> -->\n            <add name=\"RewriteModule\" image=\"%IIS_BIN%\\rewrite.dll\" />\n            <add name=\"ConfigurationValidationModule\" image=\"%IIS_BIN%\\validcfg.dll\" />\n            <add name=\"ApplicationInitializationModule\" image=\"%IIS_BIN%\\warmup.dll\" />\n            <add name=\"WebSocketModule\" image=\"%IIS_BIN%\\iiswsock.dll\" />\n            <add name=\"WebMatrixSupportModule\" image=\"%IIS_BIN%\\webmatrixsup.dll\" />\n            <add name=\"ManagedEngine\" image=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness32\" />\n            <add name=\"ManagedEngine64\" image=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness64\" />\n            <add name=\"ManagedEngineV4.0_32bit\" image=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness32\" />\n            <add name=\"ManagedEngineV4.0_64bit\" image=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness64\" />\n        </globalModules>\n\n        <httpCompression directory=\"%TEMP%\\iisexpress\\IIS Temporary Compressed Files\">\n            <scheme name=\"gzip\" dll=\"%IIS_BIN%\\gzip.dll\" />\n            <dynamicTypes>\n                <add mimeType=\"text/*\" enabled=\"true\" />\n                <add mimeType=\"message/*\" enabled=\"true\" />\n                <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n                <add mimeType=\"*/*\" enabled=\"false\" />\n            </dynamicTypes>\n            <staticTypes>\n                <add mimeType=\"text/*\" enabled=\"true\" />\n                <add mimeType=\"message/*\" enabled=\"true\" />\n                <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n                <add mimeType=\"application/atom+xml\" enabled=\"true\" />\n                <add mimeType=\"application/xaml+xml\" enabled=\"true\" />\n                <add mimeType=\"*/*\" enabled=\"false\" />\n            </staticTypes>\n        </httpCompression>\n\n        <httpErrors lockAttributes=\"allowAbsolutePathsWhenDelegated,defaultPath\">\n            <error statusCode=\"401\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"401.htm\" />\n            <error statusCode=\"403\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"403.htm\" />\n            <error statusCode=\"404\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"404.htm\" />\n            <error statusCode=\"405\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"405.htm\" />\n            <error statusCode=\"406\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"406.htm\" />\n            <error statusCode=\"412\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"412.htm\" />\n            <error statusCode=\"500\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"500.htm\" />\n            <error statusCode=\"501\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"501.htm\" />\n            <error statusCode=\"502\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"502.htm\" />\n        </httpErrors>\n\n        <httpProtocol>\n            <customHeaders>\n                <clear />\n                <add name=\"X-Powered-By\" value=\"ASP.NET\" />\n            </customHeaders>\n            <redirectHeaders>\n                <clear />\n            </redirectHeaders>\n        </httpProtocol>\n\n        <isapiFilters>\n            <filter name=\"ASP.Net_2.0.50727-64\" path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv2.0\" />\n            <filter name=\"ASP.Net_2.0.50727.0\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv2.0\" />\n            <filter name=\"ASP.Net_2.0_for_v1.1\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"runtimeVersionv1.1\" />\n            <filter name=\"ASP.Net_4.0_32bit\" path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv4.0\" />\n            <filter name=\"ASP.Net_4.0_64bit\" path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv4.0\" />\n        </isapiFilters>\n\n        <security>\n\n            <applicationDependencies>\n                <application name=\"Active Server Pages\" groupId=\"ASP\" />\n            </applicationDependencies>\n\n            <authentication>\n\n                <anonymousAuthentication userName=\"\" />\n\n                <windowsAuthentication>\n                    <providers>\n                        <add value=\"Negotiate\" />\n                        <add value=\"NTLM\" />\n                    </providers>\n                </windowsAuthentication>\n\n            </authentication>\n\n            <authorization>\n                <add accessType=\"Allow\" users=\"*\" />\n            </authorization>\n\n            <isapiCgiRestriction notListedIsapisAllowed=\"true\" notListedCgisAllowed=\"true\">\n                <add path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n            </isapiCgiRestriction>\n\n          <ipSecurity>\n            <add allowed=\"true\" ipAddress=\"10.0.0.0\" />\n          </ipSecurity>\n            <requestFiltering>\n              <requestLimits>\n                <headerLimits>\n                  <add header=\"test\" sizeLimit=\"500\"/>\n                </headerLimits>\n              </requestLimits>\n              <alwaysAllowedUrls>\n                <add url=\"test\"/>\n              </alwaysAllowedUrls>\n              <denyUrlSequences>\n                <add sequence=\"test\"/>\n              </denyUrlSequences>\n              <alwaysAllowedQueryStrings>\n                <add queryString=\"test\" />\n              </alwaysAllowedQueryStrings>\n              <denyQueryStringSequences>\n                <add sequence=\"test\" />\n              </denyQueryStringSequences>\n              <filteringRules>\n                <filteringRule name=\"test\">\n                </filteringRule>\n              </filteringRules>\n              <verbs>\n                <add verb=\"PUT\" allowed=\"false\"/>\n              </verbs>\n                <fileExtensions>\n                    <add fileExtension=\".asa\" allowed=\"false\" />\n                    <add fileExtension=\".asax\" allowed=\"false\" />\n                    <add fileExtension=\".ascx\" allowed=\"false\" />\n                    <add fileExtension=\".master\" allowed=\"false\" />\n                    <add fileExtension=\".skin\" allowed=\"false\" />\n                    <add fileExtension=\".browser\" allowed=\"false\" />\n                    <add fileExtension=\".sitemap\" allowed=\"false\" />\n                    <add fileExtension=\".config\" allowed=\"false\" />\n                    <add fileExtension=\".cs\" allowed=\"false\" />\n                    <add fileExtension=\".csproj\" allowed=\"false\" />\n                    <add fileExtension=\".vb\" allowed=\"false\" />\n                    <add fileExtension=\".vbproj\" allowed=\"false\" />\n                    <add fileExtension=\".webinfo\" allowed=\"false\" />\n                    <add fileExtension=\".licx\" allowed=\"false\" />\n                    <add fileExtension=\".resx\" allowed=\"false\" />\n                    <add fileExtension=\".resources\" allowed=\"false\" />\n                    <add fileExtension=\".mdb\" allowed=\"false\" />\n                    <add fileExtension=\".vjsproj\" allowed=\"false\" />\n                    <add fileExtension=\".java\" allowed=\"false\" />\n                    <add fileExtension=\".jsl\" allowed=\"false\" />\n                    <add fileExtension=\".ldb\" allowed=\"false\" />\n                    <add fileExtension=\".dsdgm\" allowed=\"false\" />\n                    <add fileExtension=\".ssdgm\" allowed=\"false\" />\n                    <add fileExtension=\".lsad\" allowed=\"false\" />\n                    <add fileExtension=\".ssmap\" allowed=\"false\" />\n                    <add fileExtension=\".cd\" allowed=\"false\" />\n                    <add fileExtension=\".dsprototype\" allowed=\"false\" />\n                    <add fileExtension=\".lsaprototype\" allowed=\"false\" />\n                    <add fileExtension=\".sdm\" allowed=\"false\" />\n                    <add fileExtension=\".sdmDocument\" allowed=\"false\" />\n                    <add fileExtension=\".mdf\" allowed=\"false\" />\n                    <add fileExtension=\".ldf\" allowed=\"false\" />\n                    <add fileExtension=\".ad\" allowed=\"false\" />\n                    <add fileExtension=\".dd\" allowed=\"false\" />\n                    <add fileExtension=\".ldd\" allowed=\"false\" />\n                    <add fileExtension=\".sd\" allowed=\"false\" />\n                    <add fileExtension=\".adprototype\" allowed=\"false\" />\n                    <add fileExtension=\".lddprototype\" allowed=\"false\" />\n                    <add fileExtension=\".exclude\" allowed=\"false\" />\n                    <add fileExtension=\".refresh\" allowed=\"false\" />\n                    <add fileExtension=\".compiled\" allowed=\"false\" />\n                    <add fileExtension=\".msgx\" allowed=\"false\" />\n                    <add fileExtension=\".vsdisco\" allowed=\"false\" />\n                    <add fileExtension=\".rules\" allowed=\"false\" />\n                </fileExtensions>\n\n                <hiddenSegments>\n                    <add segment=\"web.config\" />\n                    <add segment=\"bin\" />\n                    <add segment=\"App_code\" />\n                    <add segment=\"App_GlobalResources\" />\n                    <add segment=\"App_LocalResources\" />\n                    <add segment=\"App_WebReferences\" />\n                    <add segment=\"App_Data\" />\n                    <add segment=\"App_Browsers\" />\n                </hiddenSegments>\n            </requestFiltering>\n\n        </security>\n\n        <staticContent lockAttributes=\"isDocFooterFileName\">\n            <mimeMap fileExtension=\".323\" mimeType=\"text/h323\" />\n            <mimeMap fileExtension=\".3g2\" mimeType=\"video/3gpp2\" />\n            <mimeMap fileExtension=\".3gp2\" mimeType=\"video/3gpp2\" />\n            <mimeMap fileExtension=\".3gp\" mimeType=\"video/3gpp\" />\n            <mimeMap fileExtension=\".3gpp\" mimeType=\"video/3gpp\" />\n            <mimeMap fileExtension=\".aac\" mimeType=\"audio/aac\" />\n            <mimeMap fileExtension=\".aaf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".aca\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".accdb\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".accde\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".accdt\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".acx\" mimeType=\"application/internet-property-stream\" />\n            <mimeMap fileExtension=\".adt\" mimeType=\"audio/vnd.dlna.adts\" />\n            <mimeMap fileExtension=\".adts\" mimeType=\"audio/vnd.dlna.adts\" />\n            <mimeMap fileExtension=\".afm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ai\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".aif\" mimeType=\"audio/x-aiff\" />\n            <mimeMap fileExtension=\".aifc\" mimeType=\"audio/aiff\" />\n            <mimeMap fileExtension=\".aiff\" mimeType=\"audio/aiff\" />\n            <mimeMap fileExtension=\".application\" mimeType=\"application/x-ms-application\" />\n            <mimeMap fileExtension=\".art\" mimeType=\"image/x-jg\" />\n            <mimeMap fileExtension=\".asd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".asf\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".asi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".asm\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".asr\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".asx\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".atom\" mimeType=\"application/atom+xml\" />\n            <mimeMap fileExtension=\".au\" mimeType=\"audio/basic\" />\n            <mimeMap fileExtension=\".avi\" mimeType=\"video/x-msvideo\" />\n            <mimeMap fileExtension=\".axs\" mimeType=\"application/olescript\" />\n            <mimeMap fileExtension=\".bas\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".bcpio\" mimeType=\"application/x-bcpio\" />\n            <mimeMap fileExtension=\".bin\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".bmp\" mimeType=\"image/bmp\" />\n            <mimeMap fileExtension=\".c\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".cab\" mimeType=\"application/vnd.ms-cab-compressed\" />\n            <mimeMap fileExtension=\".calx\" mimeType=\"application/vnd.ms-office.calx\" />\n            <mimeMap fileExtension=\".cat\" mimeType=\"application/vnd.ms-pki.seccat\" />\n            <mimeMap fileExtension=\".cdf\" mimeType=\"application/x-cdf\" />\n            <mimeMap fileExtension=\".chm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".class\" mimeType=\"application/x-java-applet\" />\n            <mimeMap fileExtension=\".clp\" mimeType=\"application/x-msclip\" />\n            <mimeMap fileExtension=\".cmx\" mimeType=\"image/x-cmx\" />\n            <mimeMap fileExtension=\".cnf\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".cod\" mimeType=\"image/cis-cod\" />\n            <mimeMap fileExtension=\".cpio\" mimeType=\"application/x-cpio\" />\n            <mimeMap fileExtension=\".cpp\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".crd\" mimeType=\"application/x-mscardfile\" />\n            <mimeMap fileExtension=\".crl\" mimeType=\"application/pkix-crl\" />\n            <mimeMap fileExtension=\".crt\" mimeType=\"application/x-x509-ca-cert\" />\n            <mimeMap fileExtension=\".csh\" mimeType=\"application/x-csh\" />\n            <mimeMap fileExtension=\".css\" mimeType=\"text/css\" />\n            <mimeMap fileExtension=\".csv\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".cur\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dcr\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".deploy\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".der\" mimeType=\"application/x-x509-ca-cert\" />\n            <mimeMap fileExtension=\".dib\" mimeType=\"image/bmp\" />\n            <mimeMap fileExtension=\".dir\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".disco\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dll\" mimeType=\"application/x-msdownload\" />\n            <mimeMap fileExtension=\".dll.config\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dlm\" mimeType=\"text/dlm\" />\n            <mimeMap fileExtension=\".doc\" mimeType=\"application/msword\" />\n            <mimeMap fileExtension=\".docm\" mimeType=\"application/vnd.ms-word.document.macroEnabled.12\" />\n            <mimeMap fileExtension=\".docx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" />\n            <mimeMap fileExtension=\".dot\" mimeType=\"application/msword\" />\n            <mimeMap fileExtension=\".dotm\" mimeType=\"application/vnd.ms-word.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".dotx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\" />\n            <mimeMap fileExtension=\".dsp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dtd\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dvi\" mimeType=\"application/x-dvi\" />\n            <mimeMap fileExtension=\".dvr-ms\" mimeType=\"video/x-ms-dvr\" />\n            <mimeMap fileExtension=\".dwf\" mimeType=\"drawing/x-dwf\" />\n            <mimeMap fileExtension=\".dwp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dxr\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".eml\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".emz\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".eot\" mimeType=\"application/vnd.ms-fontobject\" />\n            <mimeMap fileExtension=\".eps\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".etx\" mimeType=\"text/x-setext\" />\n            <mimeMap fileExtension=\".evy\" mimeType=\"application/envoy\" />\n            <mimeMap fileExtension=\".exe\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".exe.config\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".fdf\" mimeType=\"application/vnd.fdf\" />\n            <mimeMap fileExtension=\".fif\" mimeType=\"application/fractals\" />\n            <mimeMap fileExtension=\".fla\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".flr\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".flv\" mimeType=\"video/x-flv\" />\n            <mimeMap fileExtension=\".gif\" mimeType=\"image/gif\" />\n            <mimeMap fileExtension=\".gtar\" mimeType=\"application/x-gtar\" />\n            <mimeMap fileExtension=\".gz\" mimeType=\"application/x-gzip\" />\n            <mimeMap fileExtension=\".h\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".hdf\" mimeType=\"application/x-hdf\" />\n            <mimeMap fileExtension=\".hdml\" mimeType=\"text/x-hdml\" />\n            <mimeMap fileExtension=\".hhc\" mimeType=\"application/x-oleobject\" />\n            <mimeMap fileExtension=\".hhk\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".hhp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".hlp\" mimeType=\"application/winhlp\" />\n            <mimeMap fileExtension=\".hqx\" mimeType=\"application/mac-binhex40\" />\n            <mimeMap fileExtension=\".hta\" mimeType=\"application/hta\" />\n            <mimeMap fileExtension=\".htc\" mimeType=\"text/x-component\" />\n            <mimeMap fileExtension=\".htm\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".html\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".htt\" mimeType=\"text/webviewhtml\" />\n            <mimeMap fileExtension=\".hxt\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".ical\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".icalendar\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".ico\" mimeType=\"image/x-icon\" />\n            <mimeMap fileExtension=\".ics\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".ief\" mimeType=\"image/ief\" />\n            <mimeMap fileExtension=\".ifb\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".iii\" mimeType=\"application/x-iphone\" />\n            <mimeMap fileExtension=\".inf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ins\" mimeType=\"application/x-internet-signup\" />\n            <mimeMap fileExtension=\".isp\" mimeType=\"application/x-internet-signup\" />\n            <mimeMap fileExtension=\".IVF\" mimeType=\"video/x-ivf\" />\n            <mimeMap fileExtension=\".jar\" mimeType=\"application/java-archive\" />\n            <mimeMap fileExtension=\".java\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".jck\" mimeType=\"application/liquidmotion\" />\n            <mimeMap fileExtension=\".jcz\" mimeType=\"application/liquidmotion\" />\n            <mimeMap fileExtension=\".jfif\" mimeType=\"image/pjpeg\" />\n            <mimeMap fileExtension=\".jpb\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".jpe\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".jpeg\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".jpg\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".js\" mimeType=\"application/javascript\" />\n            <mimeMap fileExtension=\".jsx\" mimeType=\"text/jscript\" />\n            <mimeMap fileExtension=\".latex\" mimeType=\"application/x-latex\" />\n            <mimeMap fileExtension=\".lit\" mimeType=\"application/x-ms-reader\" />\n            <mimeMap fileExtension=\".lpk\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".lsf\" mimeType=\"video/x-la-asf\" />\n            <mimeMap fileExtension=\".lsx\" mimeType=\"video/x-la-asf\" />\n            <mimeMap fileExtension=\".lzh\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".m13\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".m14\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".m1v\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".m2ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".m3u\" mimeType=\"audio/x-mpegurl\" />\n            <mimeMap fileExtension=\".m4a\" mimeType=\"audio/mp4\" />\n            <mimeMap fileExtension=\".m4v\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".man\" mimeType=\"application/x-troff-man\" />\n            <mimeMap fileExtension=\".manifest\" mimeType=\"application/x-ms-manifest\" />\n            <mimeMap fileExtension=\".map\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".mdb\" mimeType=\"application/x-msaccess\" />\n            <mimeMap fileExtension=\".mdp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".me\" mimeType=\"application/x-troff-me\" />\n            <mimeMap fileExtension=\".mht\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".mhtml\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".mid\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".midi\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".mix\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mmf\" mimeType=\"application/x-smaf\" />\n            <mimeMap fileExtension=\".mno\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".mny\" mimeType=\"application/x-msmoney\" />\n            <mimeMap fileExtension=\".mov\" mimeType=\"video/quicktime\" />\n            <mimeMap fileExtension=\".movie\" mimeType=\"video/x-sgi-movie\" />\n            <mimeMap fileExtension=\".mp2\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mp3\" mimeType=\"audio/mpeg\" />\n            <mimeMap fileExtension=\".mp4\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".mp4v\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".mpa\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpe\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpeg\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpg\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpp\" mimeType=\"application/vnd.ms-project\" />\n            <mimeMap fileExtension=\".mpv2\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".ms\" mimeType=\"application/x-troff-ms\" />\n            <mimeMap fileExtension=\".msi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mso\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mvb\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".mvc\" mimeType=\"application/x-miva-compiled\" />\n            <mimeMap fileExtension=\".nc\" mimeType=\"application/x-netcdf\" />\n            <mimeMap fileExtension=\".nsc\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".nws\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".ocx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".oda\" mimeType=\"application/oda\" />\n            <mimeMap fileExtension=\".odc\" mimeType=\"text/x-ms-odc\" />\n            <mimeMap fileExtension=\".ods\" mimeType=\"application/oleobject\" />\n            <mimeMap fileExtension=\".oga\" mimeType=\"audio/ogg\" />\n            <mimeMap fileExtension=\".ogg\" mimeType=\"video/ogg\" />\n            <mimeMap fileExtension=\".ogv\" mimeType=\"video/ogg\" />\n            <mimeMap fileExtension=\".ogx\" mimeType=\"application/ogg\" />\n            <mimeMap fileExtension=\".one\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onea\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetoc\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetoc2\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetmp\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onepkg\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".osdx\" mimeType=\"application/opensearchdescription+xml\" />\n            <mimeMap fileExtension=\".otf\" mimeType=\"font/otf\" />\n            <mimeMap fileExtension=\".p10\" mimeType=\"application/pkcs10\" />\n            <mimeMap fileExtension=\".p12\" mimeType=\"application/x-pkcs12\" />\n            <mimeMap fileExtension=\".p7b\" mimeType=\"application/x-pkcs7-certificates\" />\n            <mimeMap fileExtension=\".p7c\" mimeType=\"application/pkcs7-mime\" />\n            <mimeMap fileExtension=\".p7m\" mimeType=\"application/pkcs7-mime\" />\n            <mimeMap fileExtension=\".p7r\" mimeType=\"application/x-pkcs7-certreqresp\" />\n            <mimeMap fileExtension=\".p7s\" mimeType=\"application/pkcs7-signature\" />\n            <mimeMap fileExtension=\".pbm\" mimeType=\"image/x-portable-bitmap\" />\n            <mimeMap fileExtension=\".pcx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pcz\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pdf\" mimeType=\"application/pdf\" />\n            <mimeMap fileExtension=\".pfb\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pfm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pfx\" mimeType=\"application/x-pkcs12\" />\n            <mimeMap fileExtension=\".pgm\" mimeType=\"image/x-portable-graymap\" />\n            <mimeMap fileExtension=\".pko\" mimeType=\"application/vnd.ms-pki.pko\" />\n            <mimeMap fileExtension=\".pma\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmc\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pml\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmr\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmw\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".png\" mimeType=\"image/png\" />\n            <mimeMap fileExtension=\".pnm\" mimeType=\"image/x-portable-anymap\" />\n            <mimeMap fileExtension=\".pnz\" mimeType=\"image/png\" />\n            <mimeMap fileExtension=\".pot\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".potm\" mimeType=\"application/vnd.ms-powerpoint.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".potx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.template\" />\n            <mimeMap fileExtension=\".ppam\" mimeType=\"application/vnd.ms-powerpoint.addin.macroEnabled.12\" />\n            <mimeMap fileExtension=\".ppm\" mimeType=\"image/x-portable-pixmap\" />\n            <mimeMap fileExtension=\".pps\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".ppsm\" mimeType=\"application/vnd.ms-powerpoint.slideshow.macroEnabled.12\" />\n            <mimeMap fileExtension=\".ppsx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\" />\n            <mimeMap fileExtension=\".ppt\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".pptm\" mimeType=\"application/vnd.ms-powerpoint.presentation.macroEnabled.12\" />\n            <mimeMap fileExtension=\".pptx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation\" />\n            <mimeMap fileExtension=\".prf\" mimeType=\"application/pics-rules\" />\n            <mimeMap fileExtension=\".prm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".prx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ps\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".psd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".psm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".psp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pub\" mimeType=\"application/x-mspublisher\" />\n            <mimeMap fileExtension=\".qt\" mimeType=\"video/quicktime\" />\n            <mimeMap fileExtension=\".qtl\" mimeType=\"application/x-quicktimeplayer\" />\n            <mimeMap fileExtension=\".qxd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ra\" mimeType=\"audio/x-pn-realaudio\" />\n            <mimeMap fileExtension=\".ram\" mimeType=\"audio/x-pn-realaudio\" />\n            <mimeMap fileExtension=\".rar\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ras\" mimeType=\"image/x-cmu-raster\" />\n            <mimeMap fileExtension=\".rf\" mimeType=\"image/vnd.rn-realflash\" />\n            <mimeMap fileExtension=\".rgb\" mimeType=\"image/x-rgb\" />\n            <mimeMap fileExtension=\".rm\" mimeType=\"application/vnd.rn-realmedia\" />\n            <mimeMap fileExtension=\".rmi\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".roff\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".rpm\" mimeType=\"audio/x-pn-realaudio-plugin\" />\n            <mimeMap fileExtension=\".rtf\" mimeType=\"application/rtf\" />\n            <mimeMap fileExtension=\".rtx\" mimeType=\"text/richtext\" />\n            <mimeMap fileExtension=\".scd\" mimeType=\"application/x-msschedule\" />\n            <mimeMap fileExtension=\".sct\" mimeType=\"text/scriptlet\" />\n            <mimeMap fileExtension=\".sea\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".setpay\" mimeType=\"application/set-payment-initiation\" />\n            <mimeMap fileExtension=\".setreg\" mimeType=\"application/set-registration-initiation\" />\n            <mimeMap fileExtension=\".sgml\" mimeType=\"text/sgml\" />\n            <mimeMap fileExtension=\".sh\" mimeType=\"application/x-sh\" />\n            <mimeMap fileExtension=\".shar\" mimeType=\"application/x-shar\" />\n            <mimeMap fileExtension=\".sit\" mimeType=\"application/x-stuffit\" />\n            <mimeMap fileExtension=\".sldm\" mimeType=\"application/vnd.ms-powerpoint.slide.macroEnabled.12\" />\n            <mimeMap fileExtension=\".sldx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slide\" />\n            <mimeMap fileExtension=\".smd\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".smi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".smx\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".smz\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".snd\" mimeType=\"audio/basic\" />\n            <mimeMap fileExtension=\".snp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".spc\" mimeType=\"application/x-pkcs7-certificates\" />\n            <mimeMap fileExtension=\".spl\" mimeType=\"application/futuresplash\" />\n            <mimeMap fileExtension=\".spx\" mimeType=\"audio/ogg\" />\n            <mimeMap fileExtension=\".src\" mimeType=\"application/x-wais-source\" />\n            <mimeMap fileExtension=\".ssm\" mimeType=\"application/streamingmedia\" />\n            <mimeMap fileExtension=\".sst\" mimeType=\"application/vnd.ms-pki.certstore\" />\n            <mimeMap fileExtension=\".stl\" mimeType=\"application/vnd.ms-pki.stl\" />\n            <mimeMap fileExtension=\".sv4cpio\" mimeType=\"application/x-sv4cpio\" />\n            <mimeMap fileExtension=\".sv4crc\" mimeType=\"application/x-sv4crc\" />\n            <mimeMap fileExtension=\".svg\" mimeType=\"image/svg+xml\" />\n            <mimeMap fileExtension=\".svgz\" mimeType=\"image/svg+xml\" />\n            <mimeMap fileExtension=\".swf\" mimeType=\"application/x-shockwave-flash\" />\n            <mimeMap fileExtension=\".t\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".tar\" mimeType=\"application/x-tar\" />\n            <mimeMap fileExtension=\".tcl\" mimeType=\"application/x-tcl\" />\n            <mimeMap fileExtension=\".tex\" mimeType=\"application/x-tex\" />\n            <mimeMap fileExtension=\".texi\" mimeType=\"application/x-texinfo\" />\n            <mimeMap fileExtension=\".texinfo\" mimeType=\"application/x-texinfo\" />\n            <mimeMap fileExtension=\".tgz\" mimeType=\"application/x-compressed\" />\n            <mimeMap fileExtension=\".thmx\" mimeType=\"application/vnd.ms-officetheme\" />\n            <mimeMap fileExtension=\".thn\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tif\" mimeType=\"image/tiff\" />\n            <mimeMap fileExtension=\".tiff\" mimeType=\"image/tiff\" />\n            <mimeMap fileExtension=\".toc\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tr\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".trm\" mimeType=\"application/x-msterminal\" />\n            <mimeMap fileExtension=\".ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".tsv\" mimeType=\"text/tab-separated-values\" />\n            <mimeMap fileExtension=\".ttf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".txt\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".u32\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".uls\" mimeType=\"text/iuls\" />\n            <mimeMap fileExtension=\".ustar\" mimeType=\"application/x-ustar\" />\n            <mimeMap fileExtension=\".vbs\" mimeType=\"text/vbscript\" />\n            <mimeMap fileExtension=\".vcf\" mimeType=\"text/x-vcard\" />\n            <mimeMap fileExtension=\".vcs\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".vdx\" mimeType=\"application/vnd.ms-visio.viewer\" />\n            <mimeMap fileExtension=\".vml\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".vsd\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vss\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vst\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vsto\" mimeType=\"application/x-ms-vsto\" />\n            <mimeMap fileExtension=\".vsw\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vsx\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vtx\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".wav\" mimeType=\"audio/wav\" />\n            <mimeMap fileExtension=\".wax\" mimeType=\"audio/x-ms-wax\" />\n            <mimeMap fileExtension=\".wbmp\" mimeType=\"image/vnd.wap.wbmp\" />\n            <mimeMap fileExtension=\".wcm\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wdb\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".webm\" mimeType=\"video/webm\" />\n            <mimeMap fileExtension=\".wks\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wm\" mimeType=\"video/x-ms-wm\" />\n            <mimeMap fileExtension=\".wma\" mimeType=\"audio/x-ms-wma\" />\n            <mimeMap fileExtension=\".wmd\" mimeType=\"application/x-ms-wmd\" />\n            <mimeMap fileExtension=\".wmf\" mimeType=\"application/x-msmetafile\" />\n            <mimeMap fileExtension=\".wml\" mimeType=\"text/vnd.wap.wml\" />\n            <mimeMap fileExtension=\".wmlc\" mimeType=\"application/vnd.wap.wmlc\" />\n            <mimeMap fileExtension=\".wmls\" mimeType=\"text/vnd.wap.wmlscript\" />\n            <mimeMap fileExtension=\".wmlsc\" mimeType=\"application/vnd.wap.wmlscriptc\" />\n            <mimeMap fileExtension=\".wmp\" mimeType=\"video/x-ms-wmp\" />\n            <mimeMap fileExtension=\".wmv\" mimeType=\"video/x-ms-wmv\" />\n            <mimeMap fileExtension=\".wmx\" mimeType=\"video/x-ms-wmx\" />\n            <mimeMap fileExtension=\".wmz\" mimeType=\"application/x-ms-wmz\" />\n            <mimeMap fileExtension=\".woff\" mimeType=\"font/x-woff\" />\n            <mimeMap fileExtension=\".wps\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wri\" mimeType=\"application/x-mswrite\" />\n            <mimeMap fileExtension=\".wrl\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".wrz\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".wsdl\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".wtv\" mimeType=\"video/x-ms-wtv\" />\n            <mimeMap fileExtension=\".wvx\" mimeType=\"video/x-ms-wvx\" />\n            <mimeMap fileExtension=\".x\" mimeType=\"application/directx\" />\n            <mimeMap fileExtension=\".xaf\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".xaml\" mimeType=\"application/xaml+xml\" />\n            <mimeMap fileExtension=\".xap\" mimeType=\"application/x-silverlight-app\" />\n            <mimeMap fileExtension=\".xbap\" mimeType=\"application/x-ms-xbap\" />\n            <mimeMap fileExtension=\".xbm\" mimeType=\"image/x-xbitmap\" />\n            <mimeMap fileExtension=\".xdr\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".xht\" mimeType=\"application/xhtml+xml\" />\n            <mimeMap fileExtension=\".xhtml\" mimeType=\"application/xhtml+xml\" />\n            <mimeMap fileExtension=\".xla\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlam\" mimeType=\"application/vnd.ms-excel.addin.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlc\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlm\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xls\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlsb\" mimeType=\"application/vnd.ms-excel.sheet.binary.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlsm\" mimeType=\"application/vnd.ms-excel.sheet.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlsx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" />\n            <mimeMap fileExtension=\".xlt\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xltm\" mimeType=\"application/vnd.ms-excel.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xltx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\" />\n            <mimeMap fileExtension=\".xlw\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xml\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xof\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".xpm\" mimeType=\"image/x-xpixmap\" />\n            <mimeMap fileExtension=\".xps\" mimeType=\"application/vnd.ms-xpsdocument\" />\n            <mimeMap fileExtension=\".xsd\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsf\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsl\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xslt\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsn\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".xtp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".xwd\" mimeType=\"image/x-xwindowdump\" />\n            <mimeMap fileExtension=\".z\" mimeType=\"application/x-compress\" />\n            <mimeMap fileExtension=\".zip\" mimeType=\"application/x-zip-compressed\" />\n        </staticContent>\n\n        <tracing>\n\n             <traceProviderDefinitions>\n                <add name=\"WWW Server\" guid=\"{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}\">\n                    <areas>\n                        <clear />\n                        <add name=\"Authentication\" value=\"2\" />\n                        <add name=\"Security\" value=\"4\" />\n                        <add name=\"Filter\" value=\"8\" />\n                        <add name=\"StaticFile\" value=\"16\" />\n                        <add name=\"CGI\" value=\"32\" />\n                        <add name=\"Compression\" value=\"64\" />\n                        <add name=\"Cache\" value=\"128\" />\n                        <add name=\"RequestNotifications\" value=\"256\" />\n                        <add name=\"Module\" value=\"512\" />\n                        <add name=\"Rewrite\" value=\"1024\" />\n                        <add name=\"FastCGI\" value=\"4096\" />\n                        <add name=\"WebSocket\" value=\"16384\" />\n                    </areas>\n                </add>\n                <add name=\"ASP\" guid=\"{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}\">\n                    <areas>\n                        <clear />\n                    </areas>\n                </add>\n                <add name=\"ISAPI Extension\" guid=\"{a1c2040e-8840-4c31-ba11-9871031a19ea}\">\n                    <areas>\n                        <clear />\n                    </areas>\n                </add>\n                <add name=\"ASPNET\" guid=\"{AFF081FE-0247-4275-9C4E-021F3DC1DA35}\">\n                    <areas>\n                        <add name=\"Infrastructure\" value=\"1\" />\n                        <add name=\"Module\" value=\"2\" />\n                        <add name=\"Page\" value=\"4\" />\n                        <add name=\"AppServices\" value=\"8\" />\n                    </areas>\n                </add>\n            </traceProviderDefinitions>\n\n            <traceFailedRequests>\n                <add path=\"*\">\n                    <traceAreas>\n                        <add provider=\"ASP\" verbosity=\"Verbose\" />\n                        <add provider=\"ASPNET\" areas=\"Infrastructure,Module,Page,AppServices\" verbosity=\"Verbose\" />\n                        <add provider=\"ISAPI Extension\" verbosity=\"Verbose\" />\n                        <add provider=\"WWW Server\" areas=\"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\" verbosity=\"Verbose\" />\n                    </traceAreas>\n                    <failureDefinitions statusCodes=\"200-999\" />\n                </add>\n            </traceFailedRequests>\n\n        </tracing>\n\n        <webdav>\n            <globalSettings>\n                <propertyStores>\n                    <add name=\"webdav_simple_prop\" image=\"%IIS_BIN%\\webdav_simple_prop.dll\" image32=\"%IIS_BIN%\\webdav_simple_prop.dll\" />\n                </propertyStores>\n                <lockStores>\n                    <add name=\"webdav_simple_lock\" image=\"%IIS_BIN%\\webdav_simple_lock.dll\" image32=\"%IIS_BIN%\\webdav_simple_lock.dll\" />\n                </lockStores>\n\n            </globalSettings>\n            <authoring>\n                <locks enabled=\"true\" lockStore=\"webdav_simple_lock\" />\n            </authoring>\n\n        </webdav>\n      \n    <rewrite>\n      <rules>\n        <rule name=\"lextudio2\" stopProcessing=\"true\">\n          <match url=\"(.*)\" />\n          <conditions logicalGrouping=\"MatchAny\">\n            <add input=\"{HTTP_HOST}\" pattern=\"^lextudio.com$\" />\n            <add input=\"{HTTP_HOST}\" pattern=\"^www.lextudio.com$\" />\n          </conditions>\n          <action type=\"Rewrite\" url=\"/www/{R:0}\" />\n        </rule>\n      </rules>\n    </rewrite>\n\n    </system.webServer>\n    <location path=\"\" overrideMode=\"Allow\">\n        <system.webServer>\n            <modules>\n<!--\n                <add name=\"HttpCacheModule\" lockItem=\"true\" />\n-->\n                <add name=\"DynamicCompressionModule\" lockItem=\"true\" />\n                <add name=\"StaticCompressionModule\" lockItem=\"true\" />\n                <add name=\"DefaultDocumentModule\" lockItem=\"true\" />\n                <add name=\"DirectoryListingModule\" lockItem=\"true\" />\n                <add name=\"IsapiFilterModule\" lockItem=\"true\" />\n                <add name=\"ProtocolSupportModule\" lockItem=\"true\" />\n                <add name=\"HttpRedirectionModule\" lockItem=\"true\" />\n                <add name=\"ServerSideIncludeModule\" lockItem=\"true\" />\n                <add name=\"StaticFileModule\" lockItem=\"true\" />\n                <add name=\"AnonymousAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"CertificateMappingAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"UrlAuthorizationModule\" lockItem=\"true\" />\n                <add name=\"BasicAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"WindowsAuthenticationModule\" lockItem=\"true\" />\n<!--\n                <add name=\"DigestAuthenticationModule\" lockItem=\"true\" />\n-->\n                <add name=\"IISCertificateMappingAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"WebMatrixSupportModule\" lockItem=\"true\" />\n                <add name=\"IpRestrictionModule\" lockItem=\"true\" />\n                <add name=\"DynamicIpRestrictionModule\" lockItem=\"true\" />\n                <add name=\"RequestFilteringModule\" lockItem=\"true\" />\n                <add name=\"CustomLoggingModule\" lockItem=\"true\" />\n                <add name=\"CustomErrorModule\" lockItem=\"true\" />\n                <add name=\"IsapiModule\" lockItem=\"true\" />\n                <add name=\"HttpLoggingModule\" lockItem=\"true\" />\n                <add name=\"FailedRequestsTracingModule\" lockItem=\"true\" />\n                <add name=\"CgiModule\" lockItem=\"true\" />\n                <add name=\"FastCgiModule\" lockItem=\"true\" />\n<!--                <add name=\"WebDAVModule\" /> -->\n                <add name=\"RewriteModule\" /> \n                <add name=\"OutputCache\" type=\"System.Web.Caching.OutputCacheModule\" preCondition=\"managedHandler\" />\n                <add name=\"Session\" type=\"System.Web.SessionState.SessionStateModule\" preCondition=\"managedHandler\" />\n                <add name=\"WindowsAuthentication\" type=\"System.Web.Security.WindowsAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"FormsAuthentication\" type=\"System.Web.Security.FormsAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"DefaultAuthentication\" type=\"System.Web.Security.DefaultAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"RoleManager\" type=\"System.Web.Security.RoleManagerModule\" preCondition=\"managedHandler\" />\n                <add name=\"UrlAuthorization\" type=\"System.Web.Security.UrlAuthorizationModule\" preCondition=\"managedHandler\" />\n                <add name=\"FileAuthorization\" type=\"System.Web.Security.FileAuthorizationModule\" preCondition=\"managedHandler\" />\n                <add name=\"AnonymousIdentification\" type=\"System.Web.Security.AnonymousIdentificationModule\" preCondition=\"managedHandler\" />\n                <add name=\"Profile\" type=\"System.Web.Profile.ProfileModule\" preCondition=\"managedHandler\" />\n                <add name=\"UrlMappingsModule\" type=\"System.Web.UrlMappingsModule\" preCondition=\"managedHandler\" />\n                <add name=\"ApplicationInitializationModule\" lockItem=\"true\" />\n                <add name=\"WebSocketModule\" lockItem=\"true\" />\n                <add name=\"ServiceModel-4.0\" type=\"System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n                <add name=\"ConfigurationValidationModule\" lockItem=\"true\" />\n                <add name=\"UrlRoutingModule-4.0\" type=\"System.Web.Routing.UrlRoutingModule\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n                <add name=\"ScriptModule-4.0\" type=\"System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n            </modules>\n            <handlers accessPolicy=\"Read, Script\">\n<!--                <add name=\"WebDAV\" path=\"*\" verb=\"PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK\" modules=\"WebDAVModule\" resourceType=\"Unspecified\" requireAccess=\"None\" /> -->\n                <add name=\"AXD-ISAPI-4.0_64bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-4.0_64bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-4.0_64bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-4.0_64bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"svc-ISAPI-4.0_64bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"rules-ISAPI-4.0_64bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"xoml-ISAPI-4.0_64bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"xamlx-ISAPI-4.0_64bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"aspq-ISAPI-4.0_64bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"cshtm-ISAPI-4.0_64bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"cshtml-ISAPI-4.0_64bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtm-ISAPI-4.0_64bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtml-ISAPI-4.0_64bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"AXD-ISAPI-4.0_32bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-4.0_32bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-4.0_32bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-4.0_32bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"svc-ISAPI-4.0_32bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"rules-ISAPI-4.0_32bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"xoml-ISAPI-4.0_32bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"xamlx-ISAPI-4.0_32bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"aspq-ISAPI-4.0_32bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"cshtm-ISAPI-4.0_32bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"cshtml-ISAPI-4.0_32bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtm-ISAPI-4.0_32bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtml-ISAPI-4.0_32bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"TraceHandler-Integrated-4.0\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"WebAdminHandler-Integrated-4.0\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"AssemblyResourceLoader-Integrated-4.0\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"PageHandlerFactory-Integrated-4.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"SimpleHandlerFactory-Integrated-4.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"WebServiceHandlerFactory-Integrated-4.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-Integrated-4.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-Integrated-4.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"svc-Integrated-4.0\" path=\"*.svc\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"rules-Integrated-4.0\" path=\"*.rules\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"xoml-Integrated-4.0\" path=\"*.xoml\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"xamlx-Integrated-4.0\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"aspq-Integrated-4.0\" path=\"*.aspq\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"cshtm-Integrated-4.0\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"cshtml-Integrated-4.0\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"vbhtm-Integrated-4.0\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"vbhtml-Integrated-4.0\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ScriptHandlerFactoryAppServices-Integrated-4.0\" path=\"*_AppService.axd\" verb=\"*\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ScriptResourceIntegrated-4.0\" path=\"*ScriptResource.axd\" verb=\"GET,HEAD\" type=\"System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ASPClassic\" path=\"*.asp\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n                <add name=\"SecurityCertificate\" path=\"*.cer\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n                <add name=\"ISAPI-dll\" path=\"*.dll\" verb=\"*\" modules=\"IsapiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n                <add name=\"TraceHandler-Integrated\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"WebAdminHandler-Integrated\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"AssemblyResourceLoader-Integrated\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"PageHandlerFactory-Integrated\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"SimpleHandlerFactory-Integrated\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"WebServiceHandlerFactory-Integrated\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-Integrated\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-Integrated\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"AXD-ISAPI-2.0\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-2.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-2.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-2.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"AXD-ISAPI-2.0-64\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-2.0-64\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-2.0-64\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-2.0-64\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0-64\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0-64\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"CGI-exe\" path=\"*.exe\" verb=\"*\" modules=\"CgiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n                <add name=\"SSINC-stm\" path=\"*.stm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"SSINC-shtm\" path=\"*.shtm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"SSINC-shtml\" path=\"*.shtml\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"TRACEVerbHandler\" path=\"*\" verb=\"TRACE\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n                <add name=\"OPTIONSVerbHandler\" path=\"*\" verb=\"OPTIONS\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n                <add name=\"ExtensionlessUrl-ISAPI-4.0_32bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"ExtensionlessUrlHandler-ISAPI-4.0_64bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"ExtensionlessUrl-Integrated-4.0\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" responseBufferLimit=\"0\" />\n                <add name=\"StaticFile\" path=\"*\" verb=\"*\" modules=\"StaticFileModule,DefaultDocumentModule,DirectoryListingModule\" resourceType=\"Either\" requireAccess=\"Read\" />\n            </handlers>\n        </system.webServer>\n    </location>\n    <location path=\"Default Web Site\">\n        <system.webServer>\n            <security>\n                <ipSecurity>\n                    <add ipAddress=\"1.1.1.1\" allowed=\"true\" />\n                </ipSecurity>\n                <authentication>\n                  <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\" userName=\"test\"/>\n                </authentication>\n            </security>\n            <httpLogging dontLog=\"true\" />\n        </system.webServer>\n    </location>\n  <location path=\"WebSite2\">\n    <system.webServer>\n      <security>\n        <ipSecurity>\n          <add ipAddress=\"1.1.1.1\" allowed=\"true\" />\n        </ipSecurity>\n        <authentication>\n          <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\" userName=\"test\"/>\n        </authentication>\n      </security>\n      <httpLogging dontLog=\"true\" />\n    </system.webServer>\n  </location>\n  <location path=\"WebSite1\">\n    <system.webServer>\n      <defaultDocument enabled=\"false\">\n        <files>\n          <add value=\"home1.html\" />\n        </files>\n      </defaultDocument>\n    </system.webServer>\n  </location>\n</configuration>\n"
  },
  {
    "path": "Tests/original2.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    IIS configuration sections.\n\n    For schema documentation, see\n    %IIS_BIN%\\config\\schema\\IIS_schema.xml.\n    \n    Please make a backup of this file before making any changes to it.\n\n    NOTE: The following environment variables are available to be used\n          within this file and are understood by the IIS Express.\n\n          %IIS_USER_HOME% - The IIS Express home directory for the user\n          %IIS_SITES_HOME% - The default home directory for sites\n          %IIS_BIN% - The location of the IIS Express binaries\n          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%\n\n-->\n\n<configuration>\n\n  <!--\n\n        The <configSections> section controls the registration of sections.\n        Section is the basic unit of deployment, locking, searching and\n        containment for configuration settings.\n        \n        Every section belongs to one section group.\n        A section group is a container of logically-related sections.\n        \n        Sections cannot be nested.\n        Section groups may be nested.\n        \n        <section\n            name=\"\"  [Required, Collection Key] [XML name of the section]\n            allowDefinition=\"Everywhere\" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]\n            overrideModeDefault=\"Allow\"  [Allow|Deny] [Default delegation mode]\n            allowLocation=\"true\"  [true|false] [Allowed in location tags]\n        />\n        \n        The recommended way to unlock sections is by using a location tag:\n        <location path=\"Default Web Site\" overrideMode=\"Allow\">\n            <system.webServer>\n                <asp />\n            </system.webServer>\n        </location>\n\n    -->\n  <configSections>\n    <sectionGroup name=\"system.applicationHost\">\n      <section name=\"applicationPools\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"configHistory\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"customMetadata\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"listenerAdapters\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"log\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"sites\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"webLimits\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n    </sectionGroup>\n\n    <sectionGroup name=\"system.webServer\">\n      <section name=\"asp\" overrideModeDefault=\"Deny\" />\n      <section name=\"caching\" overrideModeDefault=\"Allow\" />\n      <section name=\"cgi\" overrideModeDefault=\"Deny\" />\n      <section name=\"defaultDocument\" overrideModeDefault=\"Allow\" />\n      <section name=\"directoryBrowse\" overrideModeDefault=\"Allow\" />\n      <section name=\"fastCgi\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"globalModules\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"handlers\" overrideModeDefault=\"Deny\" />\n      <section name=\"httpCompression\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n      <section name=\"httpErrors\" overrideModeDefault=\"Allow\" />\n      <section name=\"httpLogging\" overrideModeDefault=\"Deny\" />\n      <section name=\"httpProtocol\" overrideModeDefault=\"Allow\" />\n      <section name=\"httpRedirect\" overrideModeDefault=\"Allow\" />\n      <section name=\"httpTracing\" overrideModeDefault=\"Deny\" />\n      <section name=\"isapiFilters\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n      <section name=\"modules\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n      <section name=\"odbcLogging\" overrideModeDefault=\"Deny\" />\n      <sectionGroup name=\"security\">\n        <section name=\"access\" overrideModeDefault=\"Deny\" />\n        <section name=\"applicationDependencies\" overrideModeDefault=\"Deny\" />\n        <sectionGroup name=\"authentication\">\n          <section name=\"anonymousAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"basicAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"clientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"digestAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"iisClientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n          <section name=\"windowsAuthentication\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n        <section name=\"authorization\" overrideModeDefault=\"Allow\" />\n        <section name=\"ipSecurity\" overrideModeDefault=\"Deny\" />\n        <section name=\"dynamicIpSecurity\" overrideModeDefault=\"Deny\" />\n        <section name=\"isapiCgiRestriction\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n        <section name=\"requestFiltering\" overrideModeDefault=\"Allow\" />\n      </sectionGroup>\n      <section name=\"serverRuntime\" overrideModeDefault=\"Deny\" />\n      <section name=\"serverSideInclude\" overrideModeDefault=\"Deny\" />\n      <section name=\"staticContent\" overrideModeDefault=\"Allow\" />\n      <sectionGroup name=\"tracing\">\n        <section name=\"traceFailedRequests\" overrideModeDefault=\"Allow\" />\n        <section name=\"traceProviderDefinitions\" overrideModeDefault=\"Deny\" />\n      </sectionGroup>\n      <section name=\"urlCompression\" overrideModeDefault=\"Allow\" />\n      <section name=\"validation\" overrideModeDefault=\"Allow\" />\n      <sectionGroup name=\"webdav\">\n        <section name=\"globalSettings\" overrideModeDefault=\"Deny\" />\n        <section name=\"authoring\" overrideModeDefault=\"Deny\" />\n        <section name=\"authoringRules\" overrideModeDefault=\"Deny\" />\n      </sectionGroup>\n      <sectionGroup name=\"rewrite\">\n        <section name=\"allowedServerVariables\" overrideModeDefault=\"Deny\" />\n        <section name=\"rules\" overrideModeDefault=\"Allow\" />\n        <section name=\"outboundRules\" overrideModeDefault=\"Allow\" />\n        <section name=\"globalRules\" overrideModeDefault=\"Deny\" allowDefinition=\"AppHostOnly\" />\n        <section name=\"providers\" overrideModeDefault=\"Allow\" />\n        <section name=\"rewriteMaps\" overrideModeDefault=\"Allow\" />\n      </sectionGroup>\n      <section name=\"applicationInitialization\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Allow\" />\n      <section name=\"webSocket\" overrideModeDefault=\"Deny\" />\n    </sectionGroup>\n  </configSections>\n\n  <!--<configProtectedData>\n        <providers>\n            <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=\" />\n            <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=\" />\n        </providers>\n    </configProtectedData>-->\n\n  <configProtectedData>\n    <providers>\n      <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n      <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4+jnvVwdmahiJvH8sOJxtDMnsR+0yNnzh79Dd3oZMnVmAqLQDUpUZEwMJSlfhnLl8q5CEHposKZ5p3zl2oOeow36FweUI6WTSWlc4jVQlnCcLpvR1+CVF7I2XS/TZKGkgFNapTAJUAAL4q5LjGIEGMNiSCgFHOvJDGVDq3UMtU+vR5P7ZdbJmxswBf53Ut4iMAXxOz7JTSzwtIUmqK5ML95cqFt3WSLmXHcgaBX37iwS9kpgj2Sq+by63NYAE2RBsUb6JfPrVDKReNWK6A2o1QJBXF7jrAEVwvdX6DSw0gulMypeJ2I1ltOCgr8CTi+CMxStRbdQE+OA+83g0dKvgw==\" />\n      <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAD11v8x8UPbc9pt2pFRvgGuAqWTMRh0jP+/pUcEDZN6oSYAIqVjp1EgbkrakdC+/TrMsPkccjudZ6OxlhW8fbVxA71WQdjFkjnObuXXj68ZTD01HF310/Gh56XIvALkBz2DFJ0spMrQ1rQoOllcaqAy/6aSsIaD16ApmrTcDECoJ7LP0eJYcbBD+cvITl5oHN4HDYhZYqVn4M1pkEcZZxFWh1rlqhlkb9NY5hF+rS3U32XqKAcz4lXQELQmXkPTWQ/DoKTreE0yKlPTLnz6WztWNtBIuVvfNMxSHj4WlN420iejpuk3LjYU5lvns5MJzs5L/7bBDdxPpIEpB1p645eQ==\" />\n    </providers>\n  </configProtectedData>\n\n  <system.applicationHost>\n\n    <applicationPools>\n      <add name=\"Clr4IntegratedAppPool\" managedRuntimeVersion=\"v4.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\">\n        <processModel loadUserProfile=\"true\" />\n      </add>\n      <add name=\"Clr4ClassicAppPool\" managedRuntimeVersion=\"v4.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n      <add name=\"Clr2IntegratedAppPool\" managedRuntimeVersion=\"v2.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n      <add name=\"Clr2ClassicAppPool\" managedRuntimeVersion=\"v2.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n      <add name=\"UnmanagedClassicAppPool\" managedPipelineMode=\"Classic\" />\n      <applicationPoolDefaults managedRuntimeLoader=\"v4.0\" />\n    </applicationPools>\n\n    <!--\n\n          The <listenerAdapters> section defines the protocols with which the\n          Windows Process Activation Service (WAS) binds.\n\n        -->\n    <listenerAdapters>\n      <add name=\"http\" />\n    </listenerAdapters>\n\n    <sites>\n      <site name=\"WebSite1\" id=\"1\">\n        <application path=\"/\">\n          <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\WebSite1\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\":8080:localhost\" />\n          <binding protocol=\"net.tcp\" bindingInformation=\"808:*\" />\n          <binding protocol=\"net.msmq\" bindingInformation=\"localhost\" />\n          <binding protocol=\"msmq.formatname\" bindingInformation=\"localhost\" />\n          <binding protocol=\"net.pipe\" bindingInformation=\"*\" />\n          <binding protocol=\"ftp\" bindingInformation=\"*:21:\" />\n          <binding protocol=\"http\" bindingInformation=\":8080:*\" />\n          <binding protocol=\"https\" bindingInformation=\":443:localhost\" />\n          <binding protocol=\"https\" bindingInformation=\":44300:*\" />\n          <binding protocol=\"ftp\" bindingInformation=\"*:210:localhost\" />\n          <binding protocol=\"net.tcp\" bindingInformation=\"*\" />\n          <binding protocol=\"net.msmq\" bindingInformation=\"*\" />\n          <binding protocol=\"msmq.formatname\" bindingInformation=\"*\" />\n          <binding protocol=\"net.pipe\" bindingInformation=\"localhost\" />\n        </bindings>\n      </site>\n      <site name=\"GuessMeWeb\" id=\"2\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\GuessMeWeb\\GuessMeWeb\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:61902:localhost\" />\n          <binding protocol=\"https\" bindingInformation=\"*:44300:localhost\" sslFlags=\"1\" />\n        </bindings>\n      </site>\n      <site name=\"WebSite2\" id=\"3\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\Website2\" />\n          <virtualDirectory path=\"/help\" physicalPath=\"%JEXUS_TEST_HOME%\\help\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:55165:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"WebApplication1\" id=\"4\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication1\\WebApplication1\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:10830:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"SampleWCFService\" id=\"5\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\codesamples\\SampleWCFService\\SampleWCFService\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:4605:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"RemoteServices\" id=\"6\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\JexusManager\\RemoteServices\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:14150:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"WebApplication2\" id=\"7\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication2\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:9827:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"WebApplication3\" id=\"8\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication3\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:14234:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"Katana.Performance.ReferenceApp\" id=\"9\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Performance.ReferenceApp\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:17613:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"Katana.Sandbox.WebServer-Site\" id=\"10\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebServer-Site\" />\n        </application>\n        <application path=\"/Katana.Sandbox.WebServer\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebServer\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:18001:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"Katana.Sandbox.WebClient-Site\" id=\"11\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebClient-Site\" />\n        </application>\n        <application path=\"/Katana.Sandbox.WebClient\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebClient\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:18002:localhost\" />\n        </bindings>\n      </site>\n      <site name=\"Mono328\" id=\"12\">\n        <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n          <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\Mono328\" />\n        </application>\n        <bindings>\n          <binding protocol=\"http\" bindingInformation=\"*:4330:localhost\" />\n        </bindings>\n      </site>\n      <siteDefaults>\n        <logFile directory=\"%IIS_USER_HOME%\\Logs\" />\n        <traceFailedRequestsLogging directory=\"%IIS_USER_HOME%\\TraceLogFiles\" enabled=\"true\" />\n      </siteDefaults>\n      <applicationDefaults applicationPool=\"Clr4IntegratedAppPool\" />\n    </sites>\n\n  </system.applicationHost>\n\n  <system.webServer>\n\n    <asp scriptErrorSentToBrowser=\"true\">\n      <cache diskTemplateCacheDirectory=\"%TEMP%\\iisexpress\\ASP Compiled Templates\" />\n    </asp>\n\n    <caching>\n      <profiles>\n        <add duration=\"00:00:00\" extension=\".cs\"/>\n      </profiles>\n    </caching>\n\n    <defaultDocument>\n      <files>\n        <add value=\"Default.htm\" />\n        <add value=\"Default.asp\" />\n        <add value=\"index.htm\" />\n        <add value=\"index.html\" />\n        <add value=\"iisstart.htm\" />\n        <add value=\"default.aspx\" />\n      </files>\n    </defaultDocument>\n\n    <!--\n\n          The <globalModules> section defines all native-code modules.\n          To enable a module, specify it in the <modules> section.\n\n        -->\n    <globalModules>\n      <add name=\"UriCacheModule\" image=\"%IIS_BIN%\\cachuri.dll\" />\n      <!--            <add name=\"FileCacheModule\" image=\"%IIS_BIN%\\cachfile.dll\" />  -->\n      <add name=\"TokenCacheModule\" image=\"%IIS_BIN%\\cachtokn.dll\" />\n      <!--            <add name=\"HttpCacheModule\" image=\"%IIS_BIN%\\cachhttp.dll\" /> -->\n      <add name=\"DynamicCompressionModule\" image=\"%IIS_BIN%\\compdyn.dll\" />\n      <add name=\"StaticCompressionModule\" image=\"%IIS_BIN%\\compstat.dll\" />\n      <add name=\"DefaultDocumentModule\" image=\"%IIS_BIN%\\defdoc.dll\" />\n      <add name=\"DirectoryListingModule\" image=\"%IIS_BIN%\\dirlist.dll\" />\n      <add name=\"ProtocolSupportModule\" image=\"%IIS_BIN%\\protsup.dll\" />\n      <add name=\"HttpRedirectionModule\" image=\"%IIS_BIN%\\redirect.dll\" />\n      <add name=\"ServerSideIncludeModule\" image=\"%IIS_BIN%\\iis_ssi.dll\" />\n      <add name=\"StaticFileModule\" image=\"%IIS_BIN%\\static.dll\" />\n      <add name=\"AnonymousAuthenticationModule\" image=\"%IIS_BIN%\\authanon.dll\" />\n      <add name=\"CertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authcert.dll\" />\n      <add name=\"UrlAuthorizationModule\" image=\"%IIS_BIN%\\urlauthz.dll\" />\n      <add name=\"BasicAuthenticationModule\" image=\"%IIS_BIN%\\authbas.dll\" />\n      <add name=\"WindowsAuthenticationModule\" image=\"%IIS_BIN%\\authsspi.dll\" />\n      <!--            <add name=\"DigestAuthenticationModule\" image=\"%IIS_BIN%\\authmd5.dll\" /> -->\n      <add name=\"IISCertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authmap.dll\" />\n      <add name=\"IpRestrictionModule\" image=\"%IIS_BIN%\\iprestr.dll\" />\n      <add name=\"DynamicIpRestrictionModule\" image=\"%IIS_BIN%\\diprestr.dll\" />\n      <add name=\"RequestFilteringModule\" image=\"%IIS_BIN%\\modrqflt.dll\" />\n      <add name=\"CustomLoggingModule\" image=\"%IIS_BIN%\\logcust.dll\" />\n      <add name=\"CustomErrorModule\" image=\"%IIS_BIN%\\custerr.dll\" />\n      <add name=\"HttpLoggingModule\" image=\"%IIS_BIN%\\loghttp.dll\" />\n      <!--            <add name=\"TracingModule\" image=\"%IIS_BIN%\\iisetw.dll\" /> -->\n      <add name=\"FailedRequestsTracingModule\" image=\"%IIS_BIN%\\iisfreb.dll\" />\n      <add name=\"RequestMonitorModule\" image=\"%IIS_BIN%\\iisreqs.dll\" />\n      <add name=\"IsapiModule\" image=\"%IIS_BIN%\\isapi.dll\" />\n      <add name=\"IsapiFilterModule\" image=\"%IIS_BIN%\\filter.dll\" />\n      <add name=\"CgiModule\" image=\"%IIS_BIN%\\cgi.dll\" />\n      <add name=\"FastCgiModule\" image=\"%IIS_BIN%\\iisfcgi.dll\" />\n      <!--            <add name=\"WebDAVModule\" image=\"%IIS_BIN%\\webdav.dll\" /> -->\n      <add name=\"RewriteModule\" image=\"%IIS_BIN%\\rewrite.dll\" />\n      <add name=\"ConfigurationValidationModule\" image=\"%IIS_BIN%\\validcfg.dll\" />\n      <add name=\"ApplicationInitializationModule\" image=\"%IIS_BIN%\\warmup.dll\" />\n      <add name=\"WebSocketModule\" image=\"%IIS_BIN%\\iiswsock.dll\" />\n      <add name=\"WebMatrixSupportModule\" image=\"%IIS_BIN%\\webmatrixsup.dll\" />\n      <add name=\"ManagedEngine\" image=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness32\" />\n      <add name=\"ManagedEngine64\" image=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness64\" />\n      <add name=\"ManagedEngineV4.0_32bit\" image=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness32\" />\n      <add name=\"ManagedEngineV4.0_64bit\" image=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness64\" />\n    </globalModules>\n\n    <httpCompression directory=\"%TEMP%\\iisexpress\\IIS Temporary Compressed Files\">\n      <scheme name=\"gzip\" dll=\"%IIS_BIN%\\gzip.dll\" />\n      <dynamicTypes>\n        <add mimeType=\"text/*\" enabled=\"true\" />\n        <add mimeType=\"message/*\" enabled=\"true\" />\n        <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n        <add mimeType=\"*/*\" enabled=\"false\" />\n      </dynamicTypes>\n      <staticTypes>\n        <add mimeType=\"text/*\" enabled=\"true\" />\n        <add mimeType=\"message/*\" enabled=\"true\" />\n        <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n        <add mimeType=\"application/atom+xml\" enabled=\"true\" />\n        <add mimeType=\"application/xaml+xml\" enabled=\"true\" />\n        <add mimeType=\"*/*\" enabled=\"false\" />\n      </staticTypes>\n    </httpCompression>\n\n    <httpErrors lockAttributes=\"allowAbsolutePathsWhenDelegated,defaultPath\">\n      <error statusCode=\"401\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"401.htm\" />\n      <error statusCode=\"403\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"403.htm\" />\n      <error statusCode=\"404\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"404.htm\" />\n      <error statusCode=\"405\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"405.htm\" />\n      <error statusCode=\"406\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"406.htm\" />\n      <error statusCode=\"412\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"412.htm\" />\n      <error statusCode=\"500\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"500.htm\" />\n      <error statusCode=\"501\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"501.htm\" />\n      <error statusCode=\"502\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"502.htm\" />\n    </httpErrors>\n\n    <httpProtocol>\n      <customHeaders>\n        <clear />\n        <add name=\"X-Powered-By\" value=\"ASP.NET\" />\n      </customHeaders>\n      <redirectHeaders>\n        <clear />\n      </redirectHeaders>\n    </httpProtocol>\n\n    <isapiFilters>\n      <filter name=\"ASP.Net_2.0.50727-64\" path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv2.0\" />\n      <filter name=\"ASP.Net_2.0.50727.0\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv2.0\" />\n      <filter name=\"ASP.Net_2.0_for_v1.1\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"runtimeVersionv1.1\" />\n      <filter name=\"ASP.Net_4.0_32bit\" path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv4.0\" />\n      <filter name=\"ASP.Net_4.0_64bit\" path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv4.0\" />\n    </isapiFilters>\n\n    <security>\n\n      <applicationDependencies>\n        <application name=\"Active Server Pages\" groupId=\"ASP\" />\n      </applicationDependencies>\n\n      <authentication>\n\n        <anonymousAuthentication userName=\"\" />\n\n        <windowsAuthentication>\n          <providers>\n            <add value=\"Negotiate\" />\n            <add value=\"NTLM\" />\n          </providers>\n        </windowsAuthentication>\n\n      </authentication>\n\n      <authorization>\n        <add accessType=\"Allow\" users=\"*\" />\n      </authorization>\n\n      <isapiCgiRestriction notListedIsapisAllowed=\"true\" notListedCgisAllowed=\"true\">\n        <add path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n        <add path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n        <add path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n        <add path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n      </isapiCgiRestriction>\n\n      <ipSecurity>\n        <add allowed=\"true\" ipAddress=\"10.0.0.0\" />\n      </ipSecurity>\n      <requestFiltering>\n        <requestLimits>\n          <headerLimits>\n            <add header=\"test\" sizeLimit=\"500\"/>\n          </headerLimits>\n        </requestLimits>\n        <alwaysAllowedUrls>\n          <add url=\"test\"/>\n        </alwaysAllowedUrls>\n        <denyUrlSequences>\n          <add sequence=\"test\"/>\n        </denyUrlSequences>\n        <alwaysAllowedQueryStrings>\n          <add queryString=\"test\" />\n        </alwaysAllowedQueryStrings>\n        <denyQueryStringSequences>\n          <add sequence=\"test\" />\n        </denyQueryStringSequences>\n        <filteringRules>\n          <filteringRule name=\"test\">\n          </filteringRule>\n        </filteringRules>\n        <verbs>\n          <add verb=\"PUT\" allowed=\"false\"/>\n        </verbs>\n        <fileExtensions>\n          <add fileExtension=\".asa\" allowed=\"false\" />\n          <add fileExtension=\".asax\" allowed=\"false\" />\n          <add fileExtension=\".ascx\" allowed=\"false\" />\n          <add fileExtension=\".master\" allowed=\"false\" />\n          <add fileExtension=\".skin\" allowed=\"false\" />\n          <add fileExtension=\".browser\" allowed=\"false\" />\n          <add fileExtension=\".sitemap\" allowed=\"false\" />\n          <add fileExtension=\".config\" allowed=\"false\" />\n          <add fileExtension=\".cs\" allowed=\"false\" />\n          <add fileExtension=\".csproj\" allowed=\"false\" />\n          <add fileExtension=\".vb\" allowed=\"false\" />\n          <add fileExtension=\".vbproj\" allowed=\"false\" />\n          <add fileExtension=\".webinfo\" allowed=\"false\" />\n          <add fileExtension=\".licx\" allowed=\"false\" />\n          <add fileExtension=\".resx\" allowed=\"false\" />\n          <add fileExtension=\".resources\" allowed=\"false\" />\n          <add fileExtension=\".mdb\" allowed=\"false\" />\n          <add fileExtension=\".vjsproj\" allowed=\"false\" />\n          <add fileExtension=\".java\" allowed=\"false\" />\n          <add fileExtension=\".jsl\" allowed=\"false\" />\n          <add fileExtension=\".ldb\" allowed=\"false\" />\n          <add fileExtension=\".dsdgm\" allowed=\"false\" />\n          <add fileExtension=\".ssdgm\" allowed=\"false\" />\n          <add fileExtension=\".lsad\" allowed=\"false\" />\n          <add fileExtension=\".ssmap\" allowed=\"false\" />\n          <add fileExtension=\".cd\" allowed=\"false\" />\n          <add fileExtension=\".dsprototype\" allowed=\"false\" />\n          <add fileExtension=\".lsaprototype\" allowed=\"false\" />\n          <add fileExtension=\".sdm\" allowed=\"false\" />\n          <add fileExtension=\".sdmDocument\" allowed=\"false\" />\n          <add fileExtension=\".mdf\" allowed=\"false\" />\n          <add fileExtension=\".ldf\" allowed=\"false\" />\n          <add fileExtension=\".ad\" allowed=\"false\" />\n          <add fileExtension=\".dd\" allowed=\"false\" />\n          <add fileExtension=\".ldd\" allowed=\"false\" />\n          <add fileExtension=\".sd\" allowed=\"false\" />\n          <add fileExtension=\".adprototype\" allowed=\"false\" />\n          <add fileExtension=\".lddprototype\" allowed=\"false\" />\n          <add fileExtension=\".exclude\" allowed=\"false\" />\n          <add fileExtension=\".refresh\" allowed=\"false\" />\n          <add fileExtension=\".compiled\" allowed=\"false\" />\n          <add fileExtension=\".msgx\" allowed=\"false\" />\n          <add fileExtension=\".vsdisco\" allowed=\"false\" />\n          <add fileExtension=\".rules\" allowed=\"false\" />\n        </fileExtensions>\n\n        <hiddenSegments>\n          <add segment=\"web.config\" />\n          <add segment=\"bin\" />\n          <add segment=\"App_code\" />\n          <add segment=\"App_GlobalResources\" />\n          <add segment=\"App_LocalResources\" />\n          <add segment=\"App_WebReferences\" />\n          <add segment=\"App_Data\" />\n          <add segment=\"App_Browsers\" />\n        </hiddenSegments>\n      </requestFiltering>\n\n    </security>\n\n    <staticContent lockAttributes=\"isDocFooterFileName\">\n      <mimeMap fileExtension=\".323\" mimeType=\"text/h323\" />\n      <mimeMap fileExtension=\".3g2\" mimeType=\"video/3gpp2\" />\n      <mimeMap fileExtension=\".3gp2\" mimeType=\"video/3gpp2\" />\n      <mimeMap fileExtension=\".3gp\" mimeType=\"video/3gpp\" />\n      <mimeMap fileExtension=\".3gpp\" mimeType=\"video/3gpp\" />\n      <mimeMap fileExtension=\".aac\" mimeType=\"audio/aac\" />\n      <mimeMap fileExtension=\".aaf\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".aca\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".accdb\" mimeType=\"application/msaccess\" />\n      <mimeMap fileExtension=\".accde\" mimeType=\"application/msaccess\" />\n      <mimeMap fileExtension=\".accdt\" mimeType=\"application/msaccess\" />\n      <mimeMap fileExtension=\".acx\" mimeType=\"application/internet-property-stream\" />\n      <mimeMap fileExtension=\".adt\" mimeType=\"audio/vnd.dlna.adts\" />\n      <mimeMap fileExtension=\".adts\" mimeType=\"audio/vnd.dlna.adts\" />\n      <mimeMap fileExtension=\".afm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ai\" mimeType=\"application/postscript\" />\n      <mimeMap fileExtension=\".aif\" mimeType=\"audio/x-aiff\" />\n      <mimeMap fileExtension=\".aifc\" mimeType=\"audio/aiff\" />\n      <mimeMap fileExtension=\".aiff\" mimeType=\"audio/aiff\" />\n      <mimeMap fileExtension=\".application\" mimeType=\"application/x-ms-application\" />\n      <mimeMap fileExtension=\".art\" mimeType=\"image/x-jg\" />\n      <mimeMap fileExtension=\".asd\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".asf\" mimeType=\"video/x-ms-asf\" />\n      <mimeMap fileExtension=\".asi\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".asm\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".asr\" mimeType=\"video/x-ms-asf\" />\n      <mimeMap fileExtension=\".asx\" mimeType=\"video/x-ms-asf\" />\n      <mimeMap fileExtension=\".atom\" mimeType=\"application/atom+xml\" />\n      <mimeMap fileExtension=\".au\" mimeType=\"audio/basic\" />\n      <mimeMap fileExtension=\".avi\" mimeType=\"video/x-msvideo\" />\n      <mimeMap fileExtension=\".axs\" mimeType=\"application/olescript\" />\n      <mimeMap fileExtension=\".bas\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".bcpio\" mimeType=\"application/x-bcpio\" />\n      <mimeMap fileExtension=\".bin\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".bmp\" mimeType=\"image/bmp\" />\n      <mimeMap fileExtension=\".c\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".cab\" mimeType=\"application/vnd.ms-cab-compressed\" />\n      <mimeMap fileExtension=\".calx\" mimeType=\"application/vnd.ms-office.calx\" />\n      <mimeMap fileExtension=\".cat\" mimeType=\"application/vnd.ms-pki.seccat\" />\n      <mimeMap fileExtension=\".cdf\" mimeType=\"application/x-cdf\" />\n      <mimeMap fileExtension=\".chm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".class\" mimeType=\"application/x-java-applet\" />\n      <mimeMap fileExtension=\".clp\" mimeType=\"application/x-msclip\" />\n      <mimeMap fileExtension=\".cmx\" mimeType=\"image/x-cmx\" />\n      <mimeMap fileExtension=\".cnf\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".cod\" mimeType=\"image/cis-cod\" />\n      <mimeMap fileExtension=\".cpio\" mimeType=\"application/x-cpio\" />\n      <mimeMap fileExtension=\".cpp\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".crd\" mimeType=\"application/x-mscardfile\" />\n      <mimeMap fileExtension=\".crl\" mimeType=\"application/pkix-crl\" />\n      <mimeMap fileExtension=\".crt\" mimeType=\"application/x-x509-ca-cert\" />\n      <mimeMap fileExtension=\".csh\" mimeType=\"application/x-csh\" />\n      <mimeMap fileExtension=\".css\" mimeType=\"text/css\" />\n      <mimeMap fileExtension=\".csv\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".cur\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".dcr\" mimeType=\"application/x-director\" />\n      <mimeMap fileExtension=\".deploy\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".der\" mimeType=\"application/x-x509-ca-cert\" />\n      <mimeMap fileExtension=\".dib\" mimeType=\"image/bmp\" />\n      <mimeMap fileExtension=\".dir\" mimeType=\"application/x-director\" />\n      <mimeMap fileExtension=\".disco\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".dll\" mimeType=\"application/x-msdownload\" />\n      <mimeMap fileExtension=\".dll.config\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".dlm\" mimeType=\"text/dlm\" />\n      <mimeMap fileExtension=\".doc\" mimeType=\"application/msword\" />\n      <mimeMap fileExtension=\".docm\" mimeType=\"application/vnd.ms-word.document.macroEnabled.12\" />\n      <mimeMap fileExtension=\".docx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" />\n      <mimeMap fileExtension=\".dot\" mimeType=\"application/msword\" />\n      <mimeMap fileExtension=\".dotm\" mimeType=\"application/vnd.ms-word.template.macroEnabled.12\" />\n      <mimeMap fileExtension=\".dotx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\" />\n      <mimeMap fileExtension=\".dsp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".dtd\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".dvi\" mimeType=\"application/x-dvi\" />\n      <mimeMap fileExtension=\".dvr-ms\" mimeType=\"video/x-ms-dvr\" />\n      <mimeMap fileExtension=\".dwf\" mimeType=\"drawing/x-dwf\" />\n      <mimeMap fileExtension=\".dwp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".dxr\" mimeType=\"application/x-director\" />\n      <mimeMap fileExtension=\".eml\" mimeType=\"message/rfc822\" />\n      <mimeMap fileExtension=\".emz\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".eot\" mimeType=\"application/vnd.ms-fontobject\" />\n      <mimeMap fileExtension=\".eps\" mimeType=\"application/postscript\" />\n      <mimeMap fileExtension=\".etx\" mimeType=\"text/x-setext\" />\n      <mimeMap fileExtension=\".evy\" mimeType=\"application/envoy\" />\n      <mimeMap fileExtension=\".exe\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".exe.config\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".fdf\" mimeType=\"application/vnd.fdf\" />\n      <mimeMap fileExtension=\".fif\" mimeType=\"application/fractals\" />\n      <mimeMap fileExtension=\".fla\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".flr\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".flv\" mimeType=\"video/x-flv\" />\n      <mimeMap fileExtension=\".gif\" mimeType=\"image/gif\" />\n      <mimeMap fileExtension=\".gtar\" mimeType=\"application/x-gtar\" />\n      <mimeMap fileExtension=\".gz\" mimeType=\"application/x-gzip\" />\n      <mimeMap fileExtension=\".h\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".hdf\" mimeType=\"application/x-hdf\" />\n      <mimeMap fileExtension=\".hdml\" mimeType=\"text/x-hdml\" />\n      <mimeMap fileExtension=\".hhc\" mimeType=\"application/x-oleobject\" />\n      <mimeMap fileExtension=\".hhk\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".hhp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".hlp\" mimeType=\"application/winhlp\" />\n      <mimeMap fileExtension=\".hqx\" mimeType=\"application/mac-binhex40\" />\n      <mimeMap fileExtension=\".hta\" mimeType=\"application/hta\" />\n      <mimeMap fileExtension=\".htc\" mimeType=\"text/x-component\" />\n      <mimeMap fileExtension=\".htm\" mimeType=\"text/html\" />\n      <mimeMap fileExtension=\".html\" mimeType=\"text/html\" />\n      <mimeMap fileExtension=\".htt\" mimeType=\"text/webviewhtml\" />\n      <mimeMap fileExtension=\".hxt\" mimeType=\"text/html\" />\n      <mimeMap fileExtension=\".ical\" mimeType=\"text/calendar\" />\n      <mimeMap fileExtension=\".icalendar\" mimeType=\"text/calendar\" />\n      <mimeMap fileExtension=\".ico\" mimeType=\"image/x-icon\" />\n      <mimeMap fileExtension=\".ics\" mimeType=\"text/calendar\" />\n      <mimeMap fileExtension=\".ief\" mimeType=\"image/ief\" />\n      <mimeMap fileExtension=\".ifb\" mimeType=\"text/calendar\" />\n      <mimeMap fileExtension=\".iii\" mimeType=\"application/x-iphone\" />\n      <mimeMap fileExtension=\".inf\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ins\" mimeType=\"application/x-internet-signup\" />\n      <mimeMap fileExtension=\".isp\" mimeType=\"application/x-internet-signup\" />\n      <mimeMap fileExtension=\".IVF\" mimeType=\"video/x-ivf\" />\n      <mimeMap fileExtension=\".jar\" mimeType=\"application/java-archive\" />\n      <mimeMap fileExtension=\".java\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".jck\" mimeType=\"application/liquidmotion\" />\n      <mimeMap fileExtension=\".jcz\" mimeType=\"application/liquidmotion\" />\n      <mimeMap fileExtension=\".jfif\" mimeType=\"image/pjpeg\" />\n      <mimeMap fileExtension=\".jpb\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".jpe\" mimeType=\"image/jpeg\" />\n      <mimeMap fileExtension=\".jpeg\" mimeType=\"image/jpeg\" />\n      <mimeMap fileExtension=\".jpg\" mimeType=\"image/jpeg\" />\n      <mimeMap fileExtension=\".js\" mimeType=\"application/javascript\" />\n      <mimeMap fileExtension=\".jsx\" mimeType=\"text/jscript\" />\n      <mimeMap fileExtension=\".latex\" mimeType=\"application/x-latex\" />\n      <mimeMap fileExtension=\".lit\" mimeType=\"application/x-ms-reader\" />\n      <mimeMap fileExtension=\".lpk\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".lsf\" mimeType=\"video/x-la-asf\" />\n      <mimeMap fileExtension=\".lsx\" mimeType=\"video/x-la-asf\" />\n      <mimeMap fileExtension=\".lzh\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".m13\" mimeType=\"application/x-msmediaview\" />\n      <mimeMap fileExtension=\".m14\" mimeType=\"application/x-msmediaview\" />\n      <mimeMap fileExtension=\".m1v\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".m2ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n      <mimeMap fileExtension=\".m3u\" mimeType=\"audio/x-mpegurl\" />\n      <mimeMap fileExtension=\".m4a\" mimeType=\"audio/mp4\" />\n      <mimeMap fileExtension=\".m4v\" mimeType=\"video/mp4\" />\n      <mimeMap fileExtension=\".man\" mimeType=\"application/x-troff-man\" />\n      <mimeMap fileExtension=\".manifest\" mimeType=\"application/x-ms-manifest\" />\n      <mimeMap fileExtension=\".map\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".mdb\" mimeType=\"application/x-msaccess\" />\n      <mimeMap fileExtension=\".mdp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".me\" mimeType=\"application/x-troff-me\" />\n      <mimeMap fileExtension=\".mht\" mimeType=\"message/rfc822\" />\n      <mimeMap fileExtension=\".mhtml\" mimeType=\"message/rfc822\" />\n      <mimeMap fileExtension=\".mid\" mimeType=\"audio/mid\" />\n      <mimeMap fileExtension=\".midi\" mimeType=\"audio/mid\" />\n      <mimeMap fileExtension=\".mix\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".mmf\" mimeType=\"application/x-smaf\" />\n      <mimeMap fileExtension=\".mno\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".mny\" mimeType=\"application/x-msmoney\" />\n      <mimeMap fileExtension=\".mov\" mimeType=\"video/quicktime\" />\n      <mimeMap fileExtension=\".movie\" mimeType=\"video/x-sgi-movie\" />\n      <mimeMap fileExtension=\".mp2\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mp3\" mimeType=\"audio/mpeg\" />\n      <mimeMap fileExtension=\".mp4\" mimeType=\"video/mp4\" />\n      <mimeMap fileExtension=\".mp4v\" mimeType=\"video/mp4\" />\n      <mimeMap fileExtension=\".mpa\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mpe\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mpeg\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mpg\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".mpp\" mimeType=\"application/vnd.ms-project\" />\n      <mimeMap fileExtension=\".mpv2\" mimeType=\"video/mpeg\" />\n      <mimeMap fileExtension=\".ms\" mimeType=\"application/x-troff-ms\" />\n      <mimeMap fileExtension=\".msi\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".mso\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".mvb\" mimeType=\"application/x-msmediaview\" />\n      <mimeMap fileExtension=\".mvc\" mimeType=\"application/x-miva-compiled\" />\n      <mimeMap fileExtension=\".nc\" mimeType=\"application/x-netcdf\" />\n      <mimeMap fileExtension=\".nsc\" mimeType=\"video/x-ms-asf\" />\n      <mimeMap fileExtension=\".nws\" mimeType=\"message/rfc822\" />\n      <mimeMap fileExtension=\".ocx\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".oda\" mimeType=\"application/oda\" />\n      <mimeMap fileExtension=\".odc\" mimeType=\"text/x-ms-odc\" />\n      <mimeMap fileExtension=\".ods\" mimeType=\"application/oleobject\" />\n      <mimeMap fileExtension=\".oga\" mimeType=\"audio/ogg\" />\n      <mimeMap fileExtension=\".ogg\" mimeType=\"video/ogg\" />\n      <mimeMap fileExtension=\".ogv\" mimeType=\"video/ogg\" />\n      <mimeMap fileExtension=\".ogx\" mimeType=\"application/ogg\" />\n      <mimeMap fileExtension=\".one\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onea\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onetoc\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onetoc2\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onetmp\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".onepkg\" mimeType=\"application/onenote\" />\n      <mimeMap fileExtension=\".osdx\" mimeType=\"application/opensearchdescription+xml\" />\n      <mimeMap fileExtension=\".otf\" mimeType=\"font/otf\" />\n      <mimeMap fileExtension=\".p10\" mimeType=\"application/pkcs10\" />\n      <mimeMap fileExtension=\".p12\" mimeType=\"application/x-pkcs12\" />\n      <mimeMap fileExtension=\".p7b\" mimeType=\"application/x-pkcs7-certificates\" />\n      <mimeMap fileExtension=\".p7c\" mimeType=\"application/pkcs7-mime\" />\n      <mimeMap fileExtension=\".p7m\" mimeType=\"application/pkcs7-mime\" />\n      <mimeMap fileExtension=\".p7r\" mimeType=\"application/x-pkcs7-certreqresp\" />\n      <mimeMap fileExtension=\".p7s\" mimeType=\"application/pkcs7-signature\" />\n      <mimeMap fileExtension=\".pbm\" mimeType=\"image/x-portable-bitmap\" />\n      <mimeMap fileExtension=\".pcx\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pcz\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pdf\" mimeType=\"application/pdf\" />\n      <mimeMap fileExtension=\".pfb\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pfm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pfx\" mimeType=\"application/x-pkcs12\" />\n      <mimeMap fileExtension=\".pgm\" mimeType=\"image/x-portable-graymap\" />\n      <mimeMap fileExtension=\".pko\" mimeType=\"application/vnd.ms-pki.pko\" />\n      <mimeMap fileExtension=\".pma\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".pmc\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".pml\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".pmr\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".pmw\" mimeType=\"application/x-perfmon\" />\n      <mimeMap fileExtension=\".png\" mimeType=\"image/png\" />\n      <mimeMap fileExtension=\".pnm\" mimeType=\"image/x-portable-anymap\" />\n      <mimeMap fileExtension=\".pnz\" mimeType=\"image/png\" />\n      <mimeMap fileExtension=\".pot\" mimeType=\"application/vnd.ms-powerpoint\" />\n      <mimeMap fileExtension=\".potm\" mimeType=\"application/vnd.ms-powerpoint.template.macroEnabled.12\" />\n      <mimeMap fileExtension=\".potx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.template\" />\n      <mimeMap fileExtension=\".ppam\" mimeType=\"application/vnd.ms-powerpoint.addin.macroEnabled.12\" />\n      <mimeMap fileExtension=\".ppm\" mimeType=\"image/x-portable-pixmap\" />\n      <mimeMap fileExtension=\".pps\" mimeType=\"application/vnd.ms-powerpoint\" />\n      <mimeMap fileExtension=\".ppsm\" mimeType=\"application/vnd.ms-powerpoint.slideshow.macroEnabled.12\" />\n      <mimeMap fileExtension=\".ppsx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\" />\n      <mimeMap fileExtension=\".ppt\" mimeType=\"application/vnd.ms-powerpoint\" />\n      <mimeMap fileExtension=\".pptm\" mimeType=\"application/vnd.ms-powerpoint.presentation.macroEnabled.12\" />\n      <mimeMap fileExtension=\".pptx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation\" />\n      <mimeMap fileExtension=\".prf\" mimeType=\"application/pics-rules\" />\n      <mimeMap fileExtension=\".prm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".prx\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ps\" mimeType=\"application/postscript\" />\n      <mimeMap fileExtension=\".psd\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".psm\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".psp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".pub\" mimeType=\"application/x-mspublisher\" />\n      <mimeMap fileExtension=\".qt\" mimeType=\"video/quicktime\" />\n      <mimeMap fileExtension=\".qtl\" mimeType=\"application/x-quicktimeplayer\" />\n      <mimeMap fileExtension=\".qxd\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ra\" mimeType=\"audio/x-pn-realaudio\" />\n      <mimeMap fileExtension=\".ram\" mimeType=\"audio/x-pn-realaudio\" />\n      <mimeMap fileExtension=\".rar\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".ras\" mimeType=\"image/x-cmu-raster\" />\n      <mimeMap fileExtension=\".rf\" mimeType=\"image/vnd.rn-realflash\" />\n      <mimeMap fileExtension=\".rgb\" mimeType=\"image/x-rgb\" />\n      <mimeMap fileExtension=\".rm\" mimeType=\"application/vnd.rn-realmedia\" />\n      <mimeMap fileExtension=\".rmi\" mimeType=\"audio/mid\" />\n      <mimeMap fileExtension=\".roff\" mimeType=\"application/x-troff\" />\n      <mimeMap fileExtension=\".rpm\" mimeType=\"audio/x-pn-realaudio-plugin\" />\n      <mimeMap fileExtension=\".rtf\" mimeType=\"application/rtf\" />\n      <mimeMap fileExtension=\".rtx\" mimeType=\"text/richtext\" />\n      <mimeMap fileExtension=\".scd\" mimeType=\"application/x-msschedule\" />\n      <mimeMap fileExtension=\".sct\" mimeType=\"text/scriptlet\" />\n      <mimeMap fileExtension=\".sea\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".setpay\" mimeType=\"application/set-payment-initiation\" />\n      <mimeMap fileExtension=\".setreg\" mimeType=\"application/set-registration-initiation\" />\n      <mimeMap fileExtension=\".sgml\" mimeType=\"text/sgml\" />\n      <mimeMap fileExtension=\".sh\" mimeType=\"application/x-sh\" />\n      <mimeMap fileExtension=\".shar\" mimeType=\"application/x-shar\" />\n      <mimeMap fileExtension=\".sit\" mimeType=\"application/x-stuffit\" />\n      <mimeMap fileExtension=\".sldm\" mimeType=\"application/vnd.ms-powerpoint.slide.macroEnabled.12\" />\n      <mimeMap fileExtension=\".sldx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slide\" />\n      <mimeMap fileExtension=\".smd\" mimeType=\"audio/x-smd\" />\n      <mimeMap fileExtension=\".smi\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".smx\" mimeType=\"audio/x-smd\" />\n      <mimeMap fileExtension=\".smz\" mimeType=\"audio/x-smd\" />\n      <mimeMap fileExtension=\".snd\" mimeType=\"audio/basic\" />\n      <mimeMap fileExtension=\".snp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".spc\" mimeType=\"application/x-pkcs7-certificates\" />\n      <mimeMap fileExtension=\".spl\" mimeType=\"application/futuresplash\" />\n      <mimeMap fileExtension=\".spx\" mimeType=\"audio/ogg\" />\n      <mimeMap fileExtension=\".src\" mimeType=\"application/x-wais-source\" />\n      <mimeMap fileExtension=\".ssm\" mimeType=\"application/streamingmedia\" />\n      <mimeMap fileExtension=\".sst\" mimeType=\"application/vnd.ms-pki.certstore\" />\n      <mimeMap fileExtension=\".stl\" mimeType=\"application/vnd.ms-pki.stl\" />\n      <mimeMap fileExtension=\".sv4cpio\" mimeType=\"application/x-sv4cpio\" />\n      <mimeMap fileExtension=\".sv4crc\" mimeType=\"application/x-sv4crc\" />\n      <mimeMap fileExtension=\".svg\" mimeType=\"image/svg+xml\" />\n      <mimeMap fileExtension=\".svgz\" mimeType=\"image/svg+xml\" />\n      <mimeMap fileExtension=\".swf\" mimeType=\"application/x-shockwave-flash\" />\n      <mimeMap fileExtension=\".t\" mimeType=\"application/x-troff\" />\n      <mimeMap fileExtension=\".tar\" mimeType=\"application/x-tar\" />\n      <mimeMap fileExtension=\".tcl\" mimeType=\"application/x-tcl\" />\n      <mimeMap fileExtension=\".tex\" mimeType=\"application/x-tex\" />\n      <mimeMap fileExtension=\".texi\" mimeType=\"application/x-texinfo\" />\n      <mimeMap fileExtension=\".texinfo\" mimeType=\"application/x-texinfo\" />\n      <mimeMap fileExtension=\".tgz\" mimeType=\"application/x-compressed\" />\n      <mimeMap fileExtension=\".thmx\" mimeType=\"application/vnd.ms-officetheme\" />\n      <mimeMap fileExtension=\".thn\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".tif\" mimeType=\"image/tiff\" />\n      <mimeMap fileExtension=\".tiff\" mimeType=\"image/tiff\" />\n      <mimeMap fileExtension=\".toc\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".tr\" mimeType=\"application/x-troff\" />\n      <mimeMap fileExtension=\".trm\" mimeType=\"application/x-msterminal\" />\n      <mimeMap fileExtension=\".ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n      <mimeMap fileExtension=\".tsv\" mimeType=\"text/tab-separated-values\" />\n      <mimeMap fileExtension=\".ttf\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".tts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n      <mimeMap fileExtension=\".txt\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".u32\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".uls\" mimeType=\"text/iuls\" />\n      <mimeMap fileExtension=\".ustar\" mimeType=\"application/x-ustar\" />\n      <mimeMap fileExtension=\".vbs\" mimeType=\"text/vbscript\" />\n      <mimeMap fileExtension=\".vcf\" mimeType=\"text/x-vcard\" />\n      <mimeMap fileExtension=\".vcs\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".vdx\" mimeType=\"application/vnd.ms-visio.viewer\" />\n      <mimeMap fileExtension=\".vml\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".vsd\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vss\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vst\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vsto\" mimeType=\"application/x-ms-vsto\" />\n      <mimeMap fileExtension=\".vsw\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vsx\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".vtx\" mimeType=\"application/vnd.visio\" />\n      <mimeMap fileExtension=\".wav\" mimeType=\"audio/wav\" />\n      <mimeMap fileExtension=\".wax\" mimeType=\"audio/x-ms-wax\" />\n      <mimeMap fileExtension=\".wbmp\" mimeType=\"image/vnd.wap.wbmp\" />\n      <mimeMap fileExtension=\".wcm\" mimeType=\"application/vnd.ms-works\" />\n      <mimeMap fileExtension=\".wdb\" mimeType=\"application/vnd.ms-works\" />\n      <mimeMap fileExtension=\".webm\" mimeType=\"video/webm\" />\n      <mimeMap fileExtension=\".wks\" mimeType=\"application/vnd.ms-works\" />\n      <mimeMap fileExtension=\".wm\" mimeType=\"video/x-ms-wm\" />\n      <mimeMap fileExtension=\".wma\" mimeType=\"audio/x-ms-wma\" />\n      <mimeMap fileExtension=\".wmd\" mimeType=\"application/x-ms-wmd\" />\n      <mimeMap fileExtension=\".wmf\" mimeType=\"application/x-msmetafile\" />\n      <mimeMap fileExtension=\".wml\" mimeType=\"text/vnd.wap.wml\" />\n      <mimeMap fileExtension=\".wmlc\" mimeType=\"application/vnd.wap.wmlc\" />\n      <mimeMap fileExtension=\".wmls\" mimeType=\"text/vnd.wap.wmlscript\" />\n      <mimeMap fileExtension=\".wmlsc\" mimeType=\"application/vnd.wap.wmlscriptc\" />\n      <mimeMap fileExtension=\".wmp\" mimeType=\"video/x-ms-wmp\" />\n      <mimeMap fileExtension=\".wmv\" mimeType=\"video/x-ms-wmv\" />\n      <mimeMap fileExtension=\".wmx\" mimeType=\"video/x-ms-wmx\" />\n      <mimeMap fileExtension=\".wmz\" mimeType=\"application/x-ms-wmz\" />\n      <mimeMap fileExtension=\".woff\" mimeType=\"font/x-woff\" />\n      <mimeMap fileExtension=\".wps\" mimeType=\"application/vnd.ms-works\" />\n      <mimeMap fileExtension=\".wri\" mimeType=\"application/x-mswrite\" />\n      <mimeMap fileExtension=\".wrl\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".wrz\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".wsdl\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".wtv\" mimeType=\"video/x-ms-wtv\" />\n      <mimeMap fileExtension=\".wvx\" mimeType=\"video/x-ms-wvx\" />\n      <mimeMap fileExtension=\".x\" mimeType=\"application/directx\" />\n      <mimeMap fileExtension=\".xaf\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".xaml\" mimeType=\"application/xaml+xml\" />\n      <mimeMap fileExtension=\".xap\" mimeType=\"application/x-silverlight-app\" />\n      <mimeMap fileExtension=\".xbap\" mimeType=\"application/x-ms-xbap\" />\n      <mimeMap fileExtension=\".xbm\" mimeType=\"image/x-xbitmap\" />\n      <mimeMap fileExtension=\".xdr\" mimeType=\"text/plain\" />\n      <mimeMap fileExtension=\".xht\" mimeType=\"application/xhtml+xml\" />\n      <mimeMap fileExtension=\".xhtml\" mimeType=\"application/xhtml+xml\" />\n      <mimeMap fileExtension=\".xla\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xlam\" mimeType=\"application/vnd.ms-excel.addin.macroEnabled.12\" />\n      <mimeMap fileExtension=\".xlc\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xlm\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xls\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xlsb\" mimeType=\"application/vnd.ms-excel.sheet.binary.macroEnabled.12\" />\n      <mimeMap fileExtension=\".xlsm\" mimeType=\"application/vnd.ms-excel.sheet.macroEnabled.12\" />\n      <mimeMap fileExtension=\".xlsx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" />\n      <mimeMap fileExtension=\".xlt\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xltm\" mimeType=\"application/vnd.ms-excel.template.macroEnabled.12\" />\n      <mimeMap fileExtension=\".xltx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\" />\n      <mimeMap fileExtension=\".xlw\" mimeType=\"application/vnd.ms-excel\" />\n      <mimeMap fileExtension=\".xml\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xof\" mimeType=\"x-world/x-vrml\" />\n      <mimeMap fileExtension=\".xpm\" mimeType=\"image/x-xpixmap\" />\n      <mimeMap fileExtension=\".xps\" mimeType=\"application/vnd.ms-xpsdocument\" />\n      <mimeMap fileExtension=\".xsd\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xsf\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xsl\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xslt\" mimeType=\"text/xml\" />\n      <mimeMap fileExtension=\".xsn\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".xtp\" mimeType=\"application/octet-stream\" />\n      <mimeMap fileExtension=\".xwd\" mimeType=\"image/x-xwindowdump\" />\n      <mimeMap fileExtension=\".z\" mimeType=\"application/x-compress\" />\n      <mimeMap fileExtension=\".zip\" mimeType=\"application/x-zip-compressed\" />\n    </staticContent>\n\n    <tracing>\n\n      <traceProviderDefinitions>\n        <add name=\"WWW Server\" guid=\"{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}\">\n          <areas>\n            <clear />\n            <add name=\"Authentication\" value=\"2\" />\n            <add name=\"Security\" value=\"4\" />\n            <add name=\"Filter\" value=\"8\" />\n            <add name=\"StaticFile\" value=\"16\" />\n            <add name=\"CGI\" value=\"32\" />\n            <add name=\"Compression\" value=\"64\" />\n            <add name=\"Cache\" value=\"128\" />\n            <add name=\"RequestNotifications\" value=\"256\" />\n            <add name=\"Module\" value=\"512\" />\n            <add name=\"Rewrite\" value=\"1024\" />\n            <add name=\"FastCGI\" value=\"4096\" />\n            <add name=\"WebSocket\" value=\"16384\" />\n          </areas>\n        </add>\n        <add name=\"ASP\" guid=\"{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}\">\n          <areas>\n            <clear />\n          </areas>\n        </add>\n        <add name=\"ISAPI Extension\" guid=\"{a1c2040e-8840-4c31-ba11-9871031a19ea}\">\n          <areas>\n            <clear />\n          </areas>\n        </add>\n        <add name=\"ASPNET\" guid=\"{AFF081FE-0247-4275-9C4E-021F3DC1DA35}\">\n          <areas>\n            <add name=\"Infrastructure\" value=\"1\" />\n            <add name=\"Module\" value=\"2\" />\n            <add name=\"Page\" value=\"4\" />\n            <add name=\"AppServices\" value=\"8\" />\n          </areas>\n        </add>\n      </traceProviderDefinitions>\n\n      <traceFailedRequests>\n        <add path=\"*\">\n          <traceAreas>\n            <add provider=\"ASP\" verbosity=\"Verbose\" />\n            <add provider=\"ASPNET\" areas=\"Infrastructure,Module,Page,AppServices\" verbosity=\"Verbose\" />\n            <add provider=\"ISAPI Extension\" verbosity=\"Verbose\" />\n            <add provider=\"WWW Server\" areas=\"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\" verbosity=\"Verbose\" />\n          </traceAreas>\n          <failureDefinitions statusCodes=\"200-999\" />\n        </add>\n      </traceFailedRequests>\n\n    </tracing>\n\n    <webdav>\n      <globalSettings>\n        <propertyStores>\n          <add name=\"webdav_simple_prop\" image=\"%IIS_BIN%\\webdav_simple_prop.dll\" image32=\"%IIS_BIN%\\webdav_simple_prop.dll\" />\n        </propertyStores>\n        <lockStores>\n          <add name=\"webdav_simple_lock\" image=\"%IIS_BIN%\\webdav_simple_lock.dll\" image32=\"%IIS_BIN%\\webdav_simple_lock.dll\" />\n        </lockStores>\n\n      </globalSettings>\n      <authoring>\n        <locks enabled=\"true\" lockStore=\"webdav_simple_lock\" />\n      </authoring>\n\n    </webdav>\n\n    <rewrite>\n      <rules>\n        <rule name=\"lextudio2\" stopProcessing=\"true\">\n          <match url=\"(.*)\" />\n          <conditions logicalGrouping=\"MatchAny\">\n            <add input=\"{HTTP_HOST}\" pattern=\"^lextudio.com$\" />\n            <add input=\"{HTTP_HOST}\" pattern=\"^www.lextudio.com$\" />\n          </conditions>\n          <action type=\"Rewrite\" url=\"/www/{R:0}\" />\n        </rule>\n      </rules>\n    </rewrite>\n\n  </system.webServer>\n  <location path=\"\" overrideMode=\"Allow\">\n    <system.webServer>\n      <modules>\n        <!--\n                <add name=\"HttpCacheModule\" lockItem=\"true\" />\n-->\n        <add name=\"DynamicCompressionModule\" lockItem=\"true\" />\n        <add name=\"StaticCompressionModule\" lockItem=\"true\" />\n        <add name=\"DefaultDocumentModule\" lockItem=\"true\" />\n        <add name=\"DirectoryListingModule\" lockItem=\"true\" />\n        <add name=\"IsapiFilterModule\" lockItem=\"true\" />\n        <add name=\"ProtocolSupportModule\" lockItem=\"true\" />\n        <add name=\"HttpRedirectionModule\" lockItem=\"true\" />\n        <add name=\"ServerSideIncludeModule\" lockItem=\"true\" />\n        <add name=\"StaticFileModule\" lockItem=\"true\" />\n        <add name=\"AnonymousAuthenticationModule\" lockItem=\"true\" />\n        <add name=\"CertificateMappingAuthenticationModule\" lockItem=\"true\" />\n        <add name=\"UrlAuthorizationModule\" lockItem=\"true\" />\n        <add name=\"BasicAuthenticationModule\" lockItem=\"true\" />\n        <add name=\"WindowsAuthenticationModule\" lockItem=\"true\" />\n        <!--\n                <add name=\"DigestAuthenticationModule\" lockItem=\"true\" />\n-->\n        <add name=\"IISCertificateMappingAuthenticationModule\" lockItem=\"true\" />\n        <add name=\"WebMatrixSupportModule\" lockItem=\"true\" />\n        <add name=\"IpRestrictionModule\" lockItem=\"true\" />\n        <add name=\"DynamicIpRestrictionModule\" lockItem=\"true\" />\n        <add name=\"RequestFilteringModule\" lockItem=\"true\" />\n        <add name=\"CustomLoggingModule\" lockItem=\"true\" />\n        <add name=\"CustomErrorModule\" lockItem=\"true\" />\n        <add name=\"IsapiModule\" lockItem=\"true\" />\n        <add name=\"HttpLoggingModule\" lockItem=\"true\" />\n        <add name=\"FailedRequestsTracingModule\" lockItem=\"true\" />\n        <add name=\"CgiModule\" lockItem=\"true\" />\n        <add name=\"FastCgiModule\" lockItem=\"true\" />\n        <!--                <add name=\"WebDAVModule\" /> -->\n        <add name=\"RewriteModule\" />\n        <add name=\"OutputCache\" type=\"System.Web.Caching.OutputCacheModule\" preCondition=\"managedHandler\" />\n        <add name=\"Session\" type=\"System.Web.SessionState.SessionStateModule\" preCondition=\"managedHandler\" />\n        <add name=\"WindowsAuthentication\" type=\"System.Web.Security.WindowsAuthenticationModule\" preCondition=\"managedHandler\" />\n        <add name=\"FormsAuthentication\" type=\"System.Web.Security.FormsAuthenticationModule\" preCondition=\"managedHandler\" />\n        <add name=\"DefaultAuthentication\" type=\"System.Web.Security.DefaultAuthenticationModule\" preCondition=\"managedHandler\" />\n        <add name=\"RoleManager\" type=\"System.Web.Security.RoleManagerModule\" preCondition=\"managedHandler\" />\n        <add name=\"UrlAuthorization\" type=\"System.Web.Security.UrlAuthorizationModule\" preCondition=\"managedHandler\" />\n        <add name=\"FileAuthorization\" type=\"System.Web.Security.FileAuthorizationModule\" preCondition=\"managedHandler\" />\n        <add name=\"AnonymousIdentification\" type=\"System.Web.Security.AnonymousIdentificationModule\" preCondition=\"managedHandler\" />\n        <add name=\"Profile\" type=\"System.Web.Profile.ProfileModule\" preCondition=\"managedHandler\" />\n        <add name=\"UrlMappingsModule\" type=\"System.Web.UrlMappingsModule\" preCondition=\"managedHandler\" />\n        <add name=\"ApplicationInitializationModule\" lockItem=\"true\" />\n        <add name=\"WebSocketModule\" lockItem=\"true\" />\n        <add name=\"ServiceModel-4.0\" type=\"System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n        <add name=\"ConfigurationValidationModule\" lockItem=\"true\" />\n        <add name=\"UrlRoutingModule-4.0\" type=\"System.Web.Routing.UrlRoutingModule\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n        <add name=\"ScriptModule-4.0\" type=\"System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n      </modules>\n      <handlers accessPolicy=\"Read, Script\">\n        <!--                <add name=\"WebDAV\" path=\"*\" verb=\"PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK\" modules=\"WebDAVModule\" resourceType=\"Unspecified\" requireAccess=\"None\" /> -->\n        <add name=\"AXD-ISAPI-4.0_64bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"PageHandlerFactory-ISAPI-4.0_64bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"SimpleHandlerFactory-ISAPI-4.0_64bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"WebServiceHandlerFactory-ISAPI-4.0_64bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"svc-ISAPI-4.0_64bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n        <add name=\"rules-ISAPI-4.0_64bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n        <add name=\"xoml-ISAPI-4.0_64bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n        <add name=\"xamlx-ISAPI-4.0_64bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n        <add name=\"aspq-ISAPI-4.0_64bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"cshtm-ISAPI-4.0_64bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"cshtml-ISAPI-4.0_64bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"vbhtm-ISAPI-4.0_64bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"vbhtml-ISAPI-4.0_64bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"AXD-ISAPI-4.0_32bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"PageHandlerFactory-ISAPI-4.0_32bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"SimpleHandlerFactory-ISAPI-4.0_32bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"WebServiceHandlerFactory-ISAPI-4.0_32bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"svc-ISAPI-4.0_32bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n        <add name=\"rules-ISAPI-4.0_32bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n        <add name=\"xoml-ISAPI-4.0_32bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n        <add name=\"xamlx-ISAPI-4.0_32bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n        <add name=\"aspq-ISAPI-4.0_32bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"cshtm-ISAPI-4.0_32bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"cshtml-ISAPI-4.0_32bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"vbhtm-ISAPI-4.0_32bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"vbhtml-ISAPI-4.0_32bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"TraceHandler-Integrated-4.0\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"WebAdminHandler-Integrated-4.0\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"AssemblyResourceLoader-Integrated-4.0\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"PageHandlerFactory-Integrated-4.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"SimpleHandlerFactory-Integrated-4.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"WebServiceHandlerFactory-Integrated-4.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-Integrated-4.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-Integrated-4.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"svc-Integrated-4.0\" path=\"*.svc\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"rules-Integrated-4.0\" path=\"*.rules\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"xoml-Integrated-4.0\" path=\"*.xoml\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"xamlx-Integrated-4.0\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"aspq-Integrated-4.0\" path=\"*.aspq\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"cshtm-Integrated-4.0\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"cshtml-Integrated-4.0\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"vbhtm-Integrated-4.0\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"vbhtml-Integrated-4.0\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"ScriptHandlerFactoryAppServices-Integrated-4.0\" path=\"*_AppService.axd\" verb=\"*\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"ScriptResourceIntegrated-4.0\" path=\"*ScriptResource.axd\" verb=\"GET,HEAD\" type=\"System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n        <add name=\"ASPClassic\" path=\"*.asp\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n        <add name=\"SecurityCertificate\" path=\"*.cer\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n        <add name=\"ISAPI-dll\" path=\"*.dll\" verb=\"*\" modules=\"IsapiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n        <add name=\"TraceHandler-Integrated\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"WebAdminHandler-Integrated\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"AssemblyResourceLoader-Integrated\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"PageHandlerFactory-Integrated\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"SimpleHandlerFactory-Integrated\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"WebServiceHandlerFactory-Integrated\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-Integrated\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-Integrated\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n        <add name=\"AXD-ISAPI-2.0\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"PageHandlerFactory-ISAPI-2.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"SimpleHandlerFactory-ISAPI-2.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"WebServiceHandlerFactory-ISAPI-2.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"AXD-ISAPI-2.0-64\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"PageHandlerFactory-ISAPI-2.0-64\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"SimpleHandlerFactory-ISAPI-2.0-64\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"WebServiceHandlerFactory-ISAPI-2.0-64\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0-64\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0-64\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"CGI-exe\" path=\"*.exe\" verb=\"*\" modules=\"CgiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n        <add name=\"SSINC-stm\" path=\"*.stm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n        <add name=\"SSINC-shtm\" path=\"*.shtm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n        <add name=\"SSINC-shtml\" path=\"*.shtml\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n        <add name=\"TRACEVerbHandler\" path=\"*\" verb=\"TRACE\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n        <add name=\"OPTIONSVerbHandler\" path=\"*\" verb=\"OPTIONS\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n        <add name=\"ExtensionlessUrl-ISAPI-4.0_32bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n        <add name=\"ExtensionlessUrlHandler-ISAPI-4.0_64bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n        <add name=\"ExtensionlessUrl-Integrated-4.0\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" responseBufferLimit=\"0\" />\n        <add name=\"StaticFile\" path=\"*\" verb=\"*\" modules=\"StaticFileModule,DefaultDocumentModule,DirectoryListingModule\" resourceType=\"Either\" requireAccess=\"Read\" />\n      </handlers>\n    </system.webServer>\n  </location>\n  <location path=\"Default Web Site\">\n    <system.webServer>\n      <security>\n        <ipSecurity>\n          <add ipAddress=\"1.1.1.1\" allowed=\"true\" />\n        </ipSecurity>\n        <authentication>\n          <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\" userName=\"test\"/>\n        </authentication>\n      </security>\n      <httpLogging dontLog=\"true\" />\n    </system.webServer>\n  </location>\n  <location path=\"WebSite2\">\n    <system.webServer>\n      <security>\n        <ipSecurity>\n          <add ipAddress=\"1.1.1.1\" allowed=\"true\" />\n        </ipSecurity>\n        <authentication>\n          <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\" userName=\"test\"/>\n        </authentication>\n      </security>\n      <httpLogging dontLog=\"true\" />\n    </system.webServer>\n  </location>\n</configuration>\n"
  },
  {
    "path": "Tests/original2_missing_closing.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    IIS configuration sections.\n\n    For schema documentation, see\n    %IIS_BIN%\\config\\schema\\IIS_schema.xml.\n    \n    Please make a backup of this file before making any changes to it.\n\n    NOTE: The following environment variables are available to be used\n          within this file and are understood by the IIS Express.\n\n          %IIS_USER_HOME% - The IIS Express home directory for the user\n          %IIS_SITES_HOME% - The default home directory for sites\n          %IIS_BIN% - The location of the IIS Express binaries\n          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%\n\n-->\n\n<configuration>\n\n    <!--\n\n        The <configSections> section controls the registration of sections.\n        Section is the basic unit of deployment, locking, searching and\n        containment for configuration settings.\n        \n        Every section belongs to one section group.\n        A section group is a container of logically-related sections.\n        \n        Sections cannot be nested.\n        Section groups may be nested.\n        \n        <section\n            name=\"\"  [Required, Collection Key] [XML name of the section]\n            allowDefinition=\"Everywhere\" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]\n            overrideModeDefault=\"Allow\"  [Allow|Deny] [Default delegation mode]\n            allowLocation=\"true\"  [true|false] [Allowed in location tags]\n        />\n        \n        The recommended way to unlock sections is by using a location tag:\n        <location path=\"Default Web Site\" overrideMode=\"Allow\">\n            <system.webServer>\n                <asp />\n            </system.webServer>\n        </location>\n\n    -->\n    <configSections>\n        <sectionGroup name=\"system.applicationHost\">\n            <section name=\"applicationPools\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"configHistory\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"customMetadata\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"listenerAdapters\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"log\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"sites\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"webLimits\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n\n        <sectionGroup name=\"system.webServer\">\n            <section name=\"asp\" overrideModeDefault=\"Deny\" />\n            <section name=\"caching\" overrideModeDefault=\"Allow\" />\n            <section name=\"cgi\" overrideModeDefault=\"Deny\" />\n            <section name=\"defaultDocument\" overrideModeDefault=\"Allow\" />\n            <section name=\"directoryBrowse\" overrideModeDefault=\"Allow\" />\n            <section name=\"fastCgi\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"globalModules\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"handlers\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpCompression\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpErrors\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpLogging\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpProtocol\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpRedirect\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpTracing\" overrideModeDefault=\"Deny\" />\n            <section name=\"isapiFilters\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n            <section name=\"modules\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n            <section name=\"odbcLogging\" overrideModeDefault=\"Deny\" />\n            <sectionGroup name=\"security\">\n                <section name=\"access\" overrideModeDefault=\"Deny\" />\n                <section name=\"applicationDependencies\" overrideModeDefault=\"Deny\" />\n                <sectionGroup name=\"authentication\">\n                    <section name=\"anonymousAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"basicAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"clientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"digestAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"iisClientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"windowsAuthentication\" overrideModeDefault=\"Deny\" />\n                </sectionGroup>\n                <section name=\"authorization\" overrideModeDefault=\"Allow\" />\n                <section name=\"ipSecurity\" overrideModeDefault=\"Deny\" />\n                <section name=\"dynamicIpSecurity\" overrideModeDefault=\"Deny\" />\n                <section name=\"isapiCgiRestriction\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n                <section name=\"requestFiltering\" overrideModeDefault=\"Allow\" />\n            </sectionGroup>\n            <section name=\"serverRuntime\" overrideModeDefault=\"Deny\" />\n            <section name=\"serverSideInclude\" overrideModeDefault=\"Deny\" />\n            <section name=\"staticContent\" overrideModeDefault=\"Allow\" />\n            <sectionGroup name=\"tracing\">\n                <section name=\"traceFailedRequests\" overrideModeDefault=\"Allow\" />\n                <section name=\"traceProviderDefinitions\" overrideModeDefault=\"Deny\" />\n            </sectionGroup>\n            <section name=\"urlCompression\" overrideModeDefault=\"Allow\" />\n            <section name=\"validation\" overrideModeDefault=\"Allow\" />\n            <sectionGroup name=\"webdav\">\n                <section name=\"globalSettings\" overrideModeDefault=\"Deny\" />\n                <section name=\"authoring\" overrideModeDefault=\"Deny\" />\n                <section name=\"authoringRules\" overrideModeDefault=\"Deny\" />\n            </sectionGroup>\n            <sectionGroup name=\"rewrite\">\n                <section name=\"allowedServerVariables\" overrideModeDefault=\"Deny\" />\n                <section name=\"rules\" overrideModeDefault=\"Allow\" />\n                <section name=\"outboundRules\" overrideModeDefault=\"Allow\" />\n                <section name=\"globalRules\" overrideModeDefault=\"Deny\" allowDefinition=\"AppHostOnly\" />\n                <section name=\"providers\" overrideModeDefault=\"Allow\" />\n                <section name=\"rewriteMaps\" overrideModeDefault=\"Allow\" />\n            </sectionGroup>\n            <section name=\"applicationInitialization\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Allow\" />\n            <section name=\"webSocket\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n    </configSections>\n\n    <!--<configProtectedData>\n        <providers>\n            <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=\" />\n            <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=\" />\n        </providers>\n    </configProtectedData>-->\n  \n    <configProtectedData>\n        <providers>\n            <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4+jnvVwdmahiJvH8sOJxtDMnsR+0yNnzh79Dd3oZMnVmAqLQDUpUZEwMJSlfhnLl8q5CEHposKZ5p3zl2oOeow36FweUI6WTSWlc4jVQlnCcLpvR1+CVF7I2XS/TZKGkgFNapTAJUAAL4q5LjGIEGMNiSCgFHOvJDGVDq3UMtU+vR5P7ZdbJmxswBf53Ut4iMAXxOz7JTSzwtIUmqK5ML95cqFt3WSLmXHcgaBX37iwS9kpgj2Sq+by63NYAE2RBsUb6JfPrVDKReNWK6A2o1QJBXF7jrAEVwvdX6DSw0gulMypeJ2I1ltOCgr8CTi+CMxStRbdQE+OA+83g0dKvgw==\" />\n            <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAD11v8x8UPbc9pt2pFRvgGuAqWTMRh0jP+/pUcEDZN6oSYAIqVjp1EgbkrakdC+/TrMsPkccjudZ6OxlhW8fbVxA71WQdjFkjnObuXXj68ZTD01HF310/Gh56XIvALkBz2DFJ0spMrQ1rQoOllcaqAy/6aSsIaD16ApmrTcDECoJ7LP0eJYcbBD+cvITl5oHN4HDYhZYqVn4M1pkEcZZxFWh1rlqhlkb9NY5hF+rS3U32XqKAcz4lXQELQmXkPTWQ/DoKTreE0yKlPTLnz6WztWNtBIuVvfNMxSHj4WlN420iejpuk3LjYU5lvns5MJzs5L/7bBDdxPpIEpB1p645eQ==\" />\n        </providers>\n    </configProtectedData>\n  \n    <system.applicationHost>\n\n        <applicationPools>\n            <add name=\"Clr4IntegratedAppPool\" managedRuntimeVersion=\"v4.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\">\n                <processModel loadUserProfile=\"true\" />\n            </add>\n            <add name=\"Clr4ClassicAppPool\" managedRuntimeVersion=\"v4.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"Clr2IntegratedAppPool\" managedRuntimeVersion=\"v2.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"Clr2ClassicAppPool\" managedRuntimeVersion=\"v2.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"UnmanagedClassicAppPool\" managedPipelineMode=\"Classic\" />\n            <applicationPoolDefaults managedRuntimeLoader=\"v4.0\" />\n        </applicationPools>\n\n        <!--\n\n          The <listenerAdapters> section defines the protocols with which the\n          Windows Process Activation Service (WAS) binds.\n\n        -->\n        <listenerAdapters>\n            <add name=\"http\" />\n        </listenerAdapters>\n\n        <sites>\n            <site name=\"WebSite1\" id=\"1\">\n                <application path=\"/\">\n                    <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\WebSite1\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\":8080:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"GuessMeWeb\" id=\"2\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\GuessMeWeb\\GuessMeWeb\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:61902:localhost\" />\n                    <binding protocol=\"https\" bindingInformation=\"*:44300:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebSite2\" id=\"3\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\Website2\" />\n                              <virtualDirectory path=\"/help\" physicalPath=\"%JEXUS_TEST_HOME%\\help\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:55165:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication1\" id=\"4\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication1\\WebApplication1\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:10830:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"SampleWCFService\" id=\"5\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\codesamples\\SampleWCFService\\SampleWCFService\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:4605:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"RemoteServices\" id=\"6\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\JexusManager\\RemoteServices\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:14150:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication2\" id=\"7\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication2\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:9827:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication3\" id=\"8\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication3\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:14234:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Performance.ReferenceApp\" id=\"9\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Performance.ReferenceApp\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:17613:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Sandbox.WebServer-Site\" id=\"10\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebServer-Site\" />\n                </application>\n                <application path=\"/Katana.Sandbox.WebServer\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebServer\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:18001:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Sandbox.WebClient-Site\" id=\"11\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebClient-Site\" />\n                </application>\n                <application path=\"/Katana.Sandbox.WebClient\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebClient\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:18002:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Mono328\" id=\"12\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\Mono328\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:4330:localhost\" />\n                </bindings>\n            </site>\n            <siteDefaults>\n                <logFile directory=\"%IIS_USER_HOME%\\Logs\" />\n                <traceFailedRequestsLogging directory=\"%IIS_USER_HOME%\\TraceLogFiles\" enabled=\"true\" />\n            </siteDefaults>\n            <applicationDefaults applicationPool=\"Clr4IntegratedAppPool\" />\n        </sites>\n\n    </system.applicationHost>\n\n    <system.webServer>\n\n        <asp scriptErrorSentToBrowser=\"true\">\n            <cache diskTemplateCacheDirectory=\"%TEMP%\\iisexpress\\ASP Compiled Templates\" />\n        </asp>\n\n      <caching>\n        <profiles>\n          <add duration=\"00:00:00\" extension=\".cs\"/>\n        </profiles>\n      </caching>\n\n        <defaultDocument>\n            <files>\n                <add value=\"Default.htm\" />\n                <add value=\"Default.asp\" />\n                <add value=\"index.htm\" />\n                <add value=\"index.html\" />\n                <add value=\"iisstart.htm\" />\n                <add value=\"default.aspx\" />\n            </files>\n        </defaultDocument>\n\n        <!--\n\n          The <globalModules> section defines all native-code modules.\n          To enable a module, specify it in the <modules> section.\n\n        -->\n        <globalModules>\n            <add name=\"UriCacheModule\" image=\"%IIS_BIN%\\cachuri.dll\" />\n<!--            <add name=\"FileCacheModule\" image=\"%IIS_BIN%\\cachfile.dll\" />  -->\n            <add name=\"TokenCacheModule\" image=\"%IIS_BIN%\\cachtokn.dll\" />\n<!--            <add name=\"HttpCacheModule\" image=\"%IIS_BIN%\\cachhttp.dll\" /> -->\n            <add name=\"DynamicCompressionModule\" image=\"%IIS_BIN%\\compdyn.dll\" />\n            <add name=\"StaticCompressionModule\" image=\"%IIS_BIN%\\compstat.dll\" />\n            <add name=\"DefaultDocumentModule\" image=\"%IIS_BIN%\\defdoc.dll\" />\n            <add name=\"DirectoryListingModule\" image=\"%IIS_BIN%\\dirlist.dll\" />\n            <add name=\"ProtocolSupportModule\" image=\"%IIS_BIN%\\protsup.dll\" />\n            <add name=\"HttpRedirectionModule\" image=\"%IIS_BIN%\\redirect.dll\" />\n            <add name=\"ServerSideIncludeModule\" image=\"%IIS_BIN%\\iis_ssi.dll\" />\n            <add name=\"StaticFileModule\" image=\"%IIS_BIN%\\static.dll\" />\n            <add name=\"AnonymousAuthenticationModule\" image=\"%IIS_BIN%\\authanon.dll\" />\n            <add name=\"CertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authcert.dll\" />\n            <add name=\"UrlAuthorizationModule\" image=\"%IIS_BIN%\\urlauthz.dll\" />\n            <add name=\"BasicAuthenticationModule\" image=\"%IIS_BIN%\\authbas.dll\" />\n            <add name=\"WindowsAuthenticationModule\" image=\"%IIS_BIN%\\authsspi.dll\" />\n<!--            <add name=\"DigestAuthenticationModule\" image=\"%IIS_BIN%\\authmd5.dll\" /> -->\n            <add name=\"IISCertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authmap.dll\" />\n            <add name=\"IpRestrictionModule\" image=\"%IIS_BIN%\\iprestr.dll\" />\n            <add name=\"DynamicIpRestrictionModule\" image=\"%IIS_BIN%\\diprestr.dll\" />\n            <add name=\"RequestFilteringModule\" image=\"%IIS_BIN%\\modrqflt.dll\" />\n            <add name=\"CustomLoggingModule\" image=\"%IIS_BIN%\\logcust.dll\" />\n            <add name=\"CustomErrorModule\" image=\"%IIS_BIN%\\custerr.dll\" />\n            <add name=\"HttpLoggingModule\" image=\"%IIS_BIN%\\loghttp.dll\" />\n<!--            <add name=\"TracingModule\" image=\"%IIS_BIN%\\iisetw.dll\" /> -->\n            <add name=\"FailedRequestsTracingModule\" image=\"%IIS_BIN%\\iisfreb.dll\" />\n            <add name=\"RequestMonitorModule\" image=\"%IIS_BIN%\\iisreqs.dll\" />\n            <add name=\"IsapiModule\" image=\"%IIS_BIN%\\isapi.dll\" />\n            <add name=\"IsapiFilterModule\" image=\"%IIS_BIN%\\filter.dll\" />\n            <add name=\"CgiModule\" image=\"%IIS_BIN%\\cgi.dll\" />\n            <add name=\"FastCgiModule\" image=\"%IIS_BIN%\\iisfcgi.dll\" />\n<!--            <add name=\"WebDAVModule\" image=\"%IIS_BIN%\\webdav.dll\" /> -->\n            <add name=\"RewriteModule\" image=\"%IIS_BIN%\\rewrite.dll\" />\n            <add name=\"ConfigurationValidationModule\" image=\"%IIS_BIN%\\validcfg.dll\" />\n            <add name=\"ApplicationInitializationModule\" image=\"%IIS_BIN%\\warmup.dll\" />\n            <add name=\"WebSocketModule\" image=\"%IIS_BIN%\\iiswsock.dll\" />\n            <add name=\"WebMatrixSupportModule\" image=\"%IIS_BIN%\\webmatrixsup.dll\" />\n            <add name=\"ManagedEngine\" image=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness32\" />\n            <add name=\"ManagedEngine64\" image=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness64\" />\n            <add name=\"ManagedEngineV4.0_32bit\" image=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness32\" />\n            <add name=\"ManagedEngineV4.0_64bit\" image=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness64\" />\n        </globalModules>\n\n        <httpCompression directory=\"%TEMP%\\iisexpress\\IIS Temporary Compressed Files\">\n            <scheme name=\"gzip\" dll=\"%IIS_BIN%\\gzip.dll\" />\n            <dynamicTypes>\n                <add mimeType=\"text/*\" enabled=\"true\" />\n                <add mimeType=\"message/*\" enabled=\"true\" />\n                <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n                <add mimeType=\"*/*\" enabled=\"false\" />\n            </dynamicTypes>\n            <staticTypes>\n                <add mimeType=\"text/*\" enabled=\"true\" />\n                <add mimeType=\"message/*\" enabled=\"true\" />\n                <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n                <add mimeType=\"application/atom+xml\" enabled=\"true\" />\n                <add mimeType=\"application/xaml+xml\" enabled=\"true\" />\n                <add mimeType=\"*/*\" enabled=\"false\" />\n            </staticTypes>\n        </httpCompression>\n\n        <httpErrors lockAttributes=\"allowAbsolutePathsWhenDelegated,defaultPath\">\n            <error statusCode=\"401\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"401.htm\" />\n            <error statusCode=\"403\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"403.htm\" />\n            <error statusCode=\"404\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"404.htm\" />\n            <error statusCode=\"405\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"405.htm\" />\n            <error statusCode=\"406\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"406.htm\" />\n            <error statusCode=\"412\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"412.htm\" />\n            <error statusCode=\"500\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"500.htm\" />\n            <error statusCode=\"501\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"501.htm\" />\n            <error statusCode=\"502\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"502.htm\" />\n        </httpErrors>\n\n        <httpProtocol>\n            <customHeaders>\n                <clear />\n                <add name=\"X-Powered-By\" value=\"ASP.NET\" />\n            </customHeaders>\n            <redirectHeaders>\n                <clear />\n            </redirectHeaders>\n        </httpProtocol>\n\n        <isapiFilters>\n            <filter name=\"ASP.Net_2.0.50727-64\" path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv2.0\" />\n            <filter name=\"ASP.Net_2.0.50727.0\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv2.0\" />\n            <filter name=\"ASP.Net_2.0_for_v1.1\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"runtimeVersionv1.1\" />\n            <filter name=\"ASP.Net_4.0_32bit\" path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv4.0\" />\n            <filter name=\"ASP.Net_4.0_64bit\" path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv4.0\" />\n        </isapiFilters>\n\n        <security>\n\n            <applicationDependencies>\n                <application name=\"Active Server Pages\" groupId=\"ASP\" />\n            </applicationDependencies>\n\n            <authentication>\n\n                <anonymousAuthentication userName=\"\" />\n\n                <windowsAuthentication>\n                    <providers>\n                        <add value=\"Negotiate\" />\n                        <add value=\"NTLM\" />\n                    </providers>\n                </windowsAuthentication>\n\n            </authentication>\n\n            <authorization>\n                <add accessType=\"Allow\" users=\"*\" />\n            </authorization>\n\n            <isapiCgiRestriction notListedIsapisAllowed=\"true\" notListedCgisAllowed=\"true\">\n                <add path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n            </isapiCgiRestriction>\n\n          <ipSecurity>\n            <add allowed=\"true\" ipAddress=\"10.0.0.0\" />\n          </ipSecurity>\n            <requestFiltering>\n              <requestLimits>\n                <headerLimits>\n                  <add header=\"test\" sizeLimit=\"500\"/>\n                </headerLimits>\n              </requestLimits>\n              <alwaysAllowedUrls>\n                <add url=\"test\"/>\n              </alwaysAllowedUrls>\n              <denyUrlSequences>\n                <add sequence=\"test\"/>\n              </denyUrlSequences>\n              <alwaysAllowedQueryStrings>\n                <add queryString=\"test\" />\n              </alwaysAllowedQueryStrings>\n              <denyQueryStringSequences>\n                <add sequence=\"test\" />\n              </denyQueryStringSequences>\n              <filteringRules>\n                <filteringRule name=\"test\">\n                </filteringRule>\n              </filteringRules>\n              <verbs>\n                <add verb=\"PUT\" allowed=\"false\"/>\n              </verbs>\n                <fileExtensions>\n                    <add fileExtension=\".asa\" allowed=\"false\" />\n                    <add fileExtension=\".asax\" allowed=\"false\" />\n                    <add fileExtension=\".ascx\" allowed=\"false\" />\n                    <add fileExtension=\".master\" allowed=\"false\" />\n                    <add fileExtension=\".skin\" allowed=\"false\" />\n                    <add fileExtension=\".browser\" allowed=\"false\" />\n                    <add fileExtension=\".sitemap\" allowed=\"false\" />\n                    <add fileExtension=\".config\" allowed=\"false\" />\n                    <add fileExtension=\".cs\" allowed=\"false\" />\n                    <add fileExtension=\".csproj\" allowed=\"false\" />\n                    <add fileExtension=\".vb\" allowed=\"false\" />\n                    <add fileExtension=\".vbproj\" allowed=\"false\" />\n                    <add fileExtension=\".webinfo\" allowed=\"false\" />\n                    <add fileExtension=\".licx\" allowed=\"false\" />\n                    <add fileExtension=\".resx\" allowed=\"false\" />\n                    <add fileExtension=\".resources\" allowed=\"false\" />\n                    <add fileExtension=\".mdb\" allowed=\"false\" />\n                    <add fileExtension=\".vjsproj\" allowed=\"false\" />\n                    <add fileExtension=\".java\" allowed=\"false\" />\n                    <add fileExtension=\".jsl\" allowed=\"false\" />\n                    <add fileExtension=\".ldb\" allowed=\"false\" />\n                    <add fileExtension=\".dsdgm\" allowed=\"false\" />\n                    <add fileExtension=\".ssdgm\" allowed=\"false\" />\n                    <add fileExtension=\".lsad\" allowed=\"false\" />\n                    <add fileExtension=\".ssmap\" allowed=\"false\" />\n                    <add fileExtension=\".cd\" allowed=\"false\" />\n                    <add fileExtension=\".dsprototype\" allowed=\"false\" />\n                    <add fileExtension=\".lsaprototype\" allowed=\"false\" />\n                    <add fileExtension=\".sdm\" allowed=\"false\" />\n                    <add fileExtension=\".sdmDocument\" allowed=\"false\" />\n                    <add fileExtension=\".mdf\" allowed=\"false\" />\n                    <add fileExtension=\".ldf\" allowed=\"false\" />\n                    <add fileExtension=\".ad\" allowed=\"false\" />\n                    <add fileExtension=\".dd\" allowed=\"false\" />\n                    <add fileExtension=\".ldd\" allowed=\"false\" />\n                    <add fileExtension=\".sd\" allowed=\"false\" />\n                    <add fileExtension=\".adprototype\" allowed=\"false\" />\n                    <add fileExtension=\".lddprototype\" allowed=\"false\" />\n                    <add fileExtension=\".exclude\" allowed=\"false\" />\n                    <add fileExtension=\".refresh\" allowed=\"false\" />\n                    <add fileExtension=\".compiled\" allowed=\"false\" />\n                    <add fileExtension=\".msgx\" allowed=\"false\" />\n                    <add fileExtension=\".vsdisco\" allowed=\"false\" />\n                    <add fileExtension=\".rules\" allowed=\"false\" />\n                </fileExtensions>\n\n                <hiddenSegments>\n                    <add segment=\"web.config\" />\n                    <add segment=\"bin\" />\n                    <add segment=\"App_code\" />\n                    <add segment=\"App_GlobalResources\" />\n                    <add segment=\"App_LocalResources\" />\n                    <add segment=\"App_WebReferences\" />\n                    <add segment=\"App_Data\" />\n                    <add segment=\"App_Browsers\" />\n                </hiddenSegments>\n            </requestFiltering>\n\n        </security>\n\n        <staticContent lockAttributes=\"isDocFooterFileName\">\n            <mimeMap fileExtension=\".323\" mimeType=\"text/h323\" />\n            <mimeMap fileExtension=\".3g2\" mimeType=\"video/3gpp2\" />\n            <mimeMap fileExtension=\".3gp2\" mimeType=\"video/3gpp2\" />\n            <mimeMap fileExtension=\".3gp\" mimeType=\"video/3gpp\" />\n            <mimeMap fileExtension=\".3gpp\" mimeType=\"video/3gpp\" />\n            <mimeMap fileExtension=\".aac\" mimeType=\"audio/aac\" />\n            <mimeMap fileExtension=\".aaf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".aca\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".accdb\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".accde\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".accdt\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".acx\" mimeType=\"application/internet-property-stream\" />\n            <mimeMap fileExtension=\".adt\" mimeType=\"audio/vnd.dlna.adts\" />\n            <mimeMap fileExtension=\".adts\" mimeType=\"audio/vnd.dlna.adts\" />\n            <mimeMap fileExtension=\".afm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ai\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".aif\" mimeType=\"audio/x-aiff\" />\n            <mimeMap fileExtension=\".aifc\" mimeType=\"audio/aiff\" />\n            <mimeMap fileExtension=\".aiff\" mimeType=\"audio/aiff\" />\n            <mimeMap fileExtension=\".application\" mimeType=\"application/x-ms-application\" />\n            <mimeMap fileExtension=\".art\" mimeType=\"image/x-jg\" />\n            <mimeMap fileExtension=\".asd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".asf\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".asi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".asm\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".asr\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".asx\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".atom\" mimeType=\"application/atom+xml\" />\n            <mimeMap fileExtension=\".au\" mimeType=\"audio/basic\" />\n            <mimeMap fileExtension=\".avi\" mimeType=\"video/x-msvideo\" />\n            <mimeMap fileExtension=\".axs\" mimeType=\"application/olescript\" />\n            <mimeMap fileExtension=\".bas\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".bcpio\" mimeType=\"application/x-bcpio\" />\n            <mimeMap fileExtension=\".bin\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".bmp\" mimeType=\"image/bmp\" />\n            <mimeMap fileExtension=\".c\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".cab\" mimeType=\"application/vnd.ms-cab-compressed\" />\n            <mimeMap fileExtension=\".calx\" mimeType=\"application/vnd.ms-office.calx\" />\n            <mimeMap fileExtension=\".cat\" mimeType=\"application/vnd.ms-pki.seccat\" />\n            <mimeMap fileExtension=\".cdf\" mimeType=\"application/x-cdf\" />\n            <mimeMap fileExtension=\".chm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".class\" mimeType=\"application/x-java-applet\" />\n            <mimeMap fileExtension=\".clp\" mimeType=\"application/x-msclip\" />\n            <mimeMap fileExtension=\".cmx\" mimeType=\"image/x-cmx\" />\n            <mimeMap fileExtension=\".cnf\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".cod\" mimeType=\"image/cis-cod\" />\n            <mimeMap fileExtension=\".cpio\" mimeType=\"application/x-cpio\" />\n            <mimeMap fileExtension=\".cpp\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".crd\" mimeType=\"application/x-mscardfile\" />\n            <mimeMap fileExtension=\".crl\" mimeType=\"application/pkix-crl\" />\n            <mimeMap fileExtension=\".crt\" mimeType=\"application/x-x509-ca-cert\" />\n            <mimeMap fileExtension=\".csh\" mimeType=\"application/x-csh\" />\n            <mimeMap fileExtension=\".css\" mimeType=\"text/css\" />\n            <mimeMap fileExtension=\".csv\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".cur\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dcr\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".deploy\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".der\" mimeType=\"application/x-x509-ca-cert\" />\n            <mimeMap fileExtension=\".dib\" mimeType=\"image/bmp\" />\n            <mimeMap fileExtension=\".dir\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".disco\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dll\" mimeType=\"application/x-msdownload\" />\n            <mimeMap fileExtension=\".dll.config\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dlm\" mimeType=\"text/dlm\" />\n            <mimeMap fileExtension=\".doc\" mimeType=\"application/msword\" />\n            <mimeMap fileExtension=\".docm\" mimeType=\"application/vnd.ms-word.document.macroEnabled.12\" />\n            <mimeMap fileExtension=\".docx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" />\n            <mimeMap fileExtension=\".dot\" mimeType=\"application/msword\" />\n            <mimeMap fileExtension=\".dotm\" mimeType=\"application/vnd.ms-word.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".dotx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\" />\n            <mimeMap fileExtension=\".dsp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dtd\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dvi\" mimeType=\"application/x-dvi\" />\n            <mimeMap fileExtension=\".dvr-ms\" mimeType=\"video/x-ms-dvr\" />\n            <mimeMap fileExtension=\".dwf\" mimeType=\"drawing/x-dwf\" />\n            <mimeMap fileExtension=\".dwp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dxr\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".eml\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".emz\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".eot\" mimeType=\"application/vnd.ms-fontobject\" />\n            <mimeMap fileExtension=\".eps\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".etx\" mimeType=\"text/x-setext\" />\n            <mimeMap fileExtension=\".evy\" mimeType=\"application/envoy\" />\n            <mimeMap fileExtension=\".exe\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".exe.config\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".fdf\" mimeType=\"application/vnd.fdf\" />\n            <mimeMap fileExtension=\".fif\" mimeType=\"application/fractals\" />\n            <mimeMap fileExtension=\".fla\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".flr\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".flv\" mimeType=\"video/x-flv\" />\n            <mimeMap fileExtension=\".gif\" mimeType=\"image/gif\" />\n            <mimeMap fileExtension=\".gtar\" mimeType=\"application/x-gtar\" />\n            <mimeMap fileExtension=\".gz\" mimeType=\"application/x-gzip\" />\n            <mimeMap fileExtension=\".h\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".hdf\" mimeType=\"application/x-hdf\" />\n            <mimeMap fileExtension=\".hdml\" mimeType=\"text/x-hdml\" />\n            <mimeMap fileExtension=\".hhc\" mimeType=\"application/x-oleobject\" />\n            <mimeMap fileExtension=\".hhk\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".hhp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".hlp\" mimeType=\"application/winhlp\" />\n            <mimeMap fileExtension=\".hqx\" mimeType=\"application/mac-binhex40\" />\n            <mimeMap fileExtension=\".hta\" mimeType=\"application/hta\" />\n            <mimeMap fileExtension=\".htc\" mimeType=\"text/x-component\" />\n            <mimeMap fileExtension=\".htm\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".html\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".htt\" mimeType=\"text/webviewhtml\" />\n            <mimeMap fileExtension=\".hxt\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".ical\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".icalendar\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".ico\" mimeType=\"image/x-icon\" />\n            <mimeMap fileExtension=\".ics\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".ief\" mimeType=\"image/ief\" />\n            <mimeMap fileExtension=\".ifb\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".iii\" mimeType=\"application/x-iphone\" />\n            <mimeMap fileExtension=\".inf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ins\" mimeType=\"application/x-internet-signup\" />\n            <mimeMap fileExtension=\".isp\" mimeType=\"application/x-internet-signup\" />\n            <mimeMap fileExtension=\".IVF\" mimeType=\"video/x-ivf\" />\n            <mimeMap fileExtension=\".jar\" mimeType=\"application/java-archive\" />\n            <mimeMap fileExtension=\".java\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".jck\" mimeType=\"application/liquidmotion\" />\n            <mimeMap fileExtension=\".jcz\" mimeType=\"application/liquidmotion\" />\n            <mimeMap fileExtension=\".jfif\" mimeType=\"image/pjpeg\" />\n            <mimeMap fileExtension=\".jpb\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".jpe\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".jpeg\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".jpg\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".js\" mimeType=\"application/javascript\" />\n            <mimeMap fileExtension=\".jsx\" mimeType=\"text/jscript\" />\n            <mimeMap fileExtension=\".latex\" mimeType=\"application/x-latex\" />\n            <mimeMap fileExtension=\".lit\" mimeType=\"application/x-ms-reader\" />\n            <mimeMap fileExtension=\".lpk\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".lsf\" mimeType=\"video/x-la-asf\" />\n            <mimeMap fileExtension=\".lsx\" mimeType=\"video/x-la-asf\" />\n            <mimeMap fileExtension=\".lzh\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".m13\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".m14\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".m1v\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".m2ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".m3u\" mimeType=\"audio/x-mpegurl\" />\n            <mimeMap fileExtension=\".m4a\" mimeType=\"audio/mp4\" />\n            <mimeMap fileExtension=\".m4v\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".man\" mimeType=\"application/x-troff-man\" />\n            <mimeMap fileExtension=\".manifest\" mimeType=\"application/x-ms-manifest\" />\n            <mimeMap fileExtension=\".map\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".mdb\" mimeType=\"application/x-msaccess\" />\n            <mimeMap fileExtension=\".mdp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".me\" mimeType=\"application/x-troff-me\" />\n            <mimeMap fileExtension=\".mht\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".mhtml\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".mid\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".midi\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".mix\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mmf\" mimeType=\"application/x-smaf\" />\n            <mimeMap fileExtension=\".mno\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".mny\" mimeType=\"application/x-msmoney\" />\n            <mimeMap fileExtension=\".mov\" mimeType=\"video/quicktime\" />\n            <mimeMap fileExtension=\".movie\" mimeType=\"video/x-sgi-movie\" />\n            <mimeMap fileExtension=\".mp2\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mp3\" mimeType=\"audio/mpeg\" />\n            <mimeMap fileExtension=\".mp4\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".mp4v\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".mpa\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpe\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpeg\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpg\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpp\" mimeType=\"application/vnd.ms-project\" />\n            <mimeMap fileExtension=\".mpv2\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".ms\" mimeType=\"application/x-troff-ms\" />\n            <mimeMap fileExtension=\".msi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mso\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mvb\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".mvc\" mimeType=\"application/x-miva-compiled\" />\n            <mimeMap fileExtension=\".nc\" mimeType=\"application/x-netcdf\" />\n            <mimeMap fileExtension=\".nsc\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".nws\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".ocx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".oda\" mimeType=\"application/oda\" />\n            <mimeMap fileExtension=\".odc\" mimeType=\"text/x-ms-odc\" />\n            <mimeMap fileExtension=\".ods\" mimeType=\"application/oleobject\" />\n            <mimeMap fileExtension=\".oga\" mimeType=\"audio/ogg\" />\n            <mimeMap fileExtension=\".ogg\" mimeType=\"video/ogg\" />\n            <mimeMap fileExtension=\".ogv\" mimeType=\"video/ogg\" />\n            <mimeMap fileExtension=\".ogx\" mimeType=\"application/ogg\" />\n            <mimeMap fileExtension=\".one\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onea\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetoc\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetoc2\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetmp\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onepkg\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".osdx\" mimeType=\"application/opensearchdescription+xml\" />\n            <mimeMap fileExtension=\".otf\" mimeType=\"font/otf\" />\n            <mimeMap fileExtension=\".p10\" mimeType=\"application/pkcs10\" />\n            <mimeMap fileExtension=\".p12\" mimeType=\"application/x-pkcs12\" />\n            <mimeMap fileExtension=\".p7b\" mimeType=\"application/x-pkcs7-certificates\" />\n            <mimeMap fileExtension=\".p7c\" mimeType=\"application/pkcs7-mime\" />\n            <mimeMap fileExtension=\".p7m\" mimeType=\"application/pkcs7-mime\" />\n            <mimeMap fileExtension=\".p7r\" mimeType=\"application/x-pkcs7-certreqresp\" />\n            <mimeMap fileExtension=\".p7s\" mimeType=\"application/pkcs7-signature\" />\n            <mimeMap fileExtension=\".pbm\" mimeType=\"image/x-portable-bitmap\" />\n            <mimeMap fileExtension=\".pcx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pcz\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pdf\" mimeType=\"application/pdf\" />\n            <mimeMap fileExtension=\".pfb\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pfm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pfx\" mimeType=\"application/x-pkcs12\" />\n            <mimeMap fileExtension=\".pgm\" mimeType=\"image/x-portable-graymap\" />\n            <mimeMap fileExtension=\".pko\" mimeType=\"application/vnd.ms-pki.pko\" />\n            <mimeMap fileExtension=\".pma\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmc\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pml\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmr\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmw\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".png\" mimeType=\"image/png\" />\n            <mimeMap fileExtension=\".pnm\" mimeType=\"image/x-portable-anymap\" />\n            <mimeMap fileExtension=\".pnz\" mimeType=\"image/png\" />\n            <mimeMap fileExtension=\".pot\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".potm\" mimeType=\"application/vnd.ms-powerpoint.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".potx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.template\" />\n            <mimeMap fileExtension=\".ppam\" mimeType=\"application/vnd.ms-powerpoint.addin.macroEnabled.12\" />\n            <mimeMap fileExtension=\".ppm\" mimeType=\"image/x-portable-pixmap\" />\n            <mimeMap fileExtension=\".pps\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".ppsm\" mimeType=\"application/vnd.ms-powerpoint.slideshow.macroEnabled.12\" />\n            <mimeMap fileExtension=\".ppsx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\" />\n            <mimeMap fileExtension=\".ppt\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".pptm\" mimeType=\"application/vnd.ms-powerpoint.presentation.macroEnabled.12\" />\n            <mimeMap fileExtension=\".pptx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation\" />\n            <mimeMap fileExtension=\".prf\" mimeType=\"application/pics-rules\" />\n            <mimeMap fileExtension=\".prm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".prx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ps\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".psd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".psm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".psp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pub\" mimeType=\"application/x-mspublisher\" />\n            <mimeMap fileExtension=\".qt\" mimeType=\"video/quicktime\" />\n            <mimeMap fileExtension=\".qtl\" mimeType=\"application/x-quicktimeplayer\" />\n            <mimeMap fileExtension=\".qxd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ra\" mimeType=\"audio/x-pn-realaudio\" />\n            <mimeMap fileExtension=\".ram\" mimeType=\"audio/x-pn-realaudio\" />\n            <mimeMap fileExtension=\".rar\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ras\" mimeType=\"image/x-cmu-raster\" />\n            <mimeMap fileExtension=\".rf\" mimeType=\"image/vnd.rn-realflash\" />\n            <mimeMap fileExtension=\".rgb\" mimeType=\"image/x-rgb\" />\n            <mimeMap fileExtension=\".rm\" mimeType=\"application/vnd.rn-realmedia\" />\n            <mimeMap fileExtension=\".rmi\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".roff\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".rpm\" mimeType=\"audio/x-pn-realaudio-plugin\" />\n            <mimeMap fileExtension=\".rtf\" mimeType=\"application/rtf\" />\n            <mimeMap fileExtension=\".rtx\" mimeType=\"text/richtext\" />\n            <mimeMap fileExtension=\".scd\" mimeType=\"application/x-msschedule\" />\n            <mimeMap fileExtension=\".sct\" mimeType=\"text/scriptlet\" />\n            <mimeMap fileExtension=\".sea\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".setpay\" mimeType=\"application/set-payment-initiation\" />\n            <mimeMap fileExtension=\".setreg\" mimeType=\"application/set-registration-initiation\" />\n            <mimeMap fileExtension=\".sgml\" mimeType=\"text/sgml\" />\n            <mimeMap fileExtension=\".sh\" mimeType=\"application/x-sh\" />\n            <mimeMap fileExtension=\".shar\" mimeType=\"application/x-shar\" />\n            <mimeMap fileExtension=\".sit\" mimeType=\"application/x-stuffit\" />\n            <mimeMap fileExtension=\".sldm\" mimeType=\"application/vnd.ms-powerpoint.slide.macroEnabled.12\" />\n            <mimeMap fileExtension=\".sldx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slide\" />\n            <mimeMap fileExtension=\".smd\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".smi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".smx\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".smz\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".snd\" mimeType=\"audio/basic\" />\n            <mimeMap fileExtension=\".snp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".spc\" mimeType=\"application/x-pkcs7-certificates\" />\n            <mimeMap fileExtension=\".spl\" mimeType=\"application/futuresplash\" />\n            <mimeMap fileExtension=\".spx\" mimeType=\"audio/ogg\" />\n            <mimeMap fileExtension=\".src\" mimeType=\"application/x-wais-source\" />\n            <mimeMap fileExtension=\".ssm\" mimeType=\"application/streamingmedia\" />\n            <mimeMap fileExtension=\".sst\" mimeType=\"application/vnd.ms-pki.certstore\" />\n            <mimeMap fileExtension=\".stl\" mimeType=\"application/vnd.ms-pki.stl\" />\n            <mimeMap fileExtension=\".sv4cpio\" mimeType=\"application/x-sv4cpio\" />\n            <mimeMap fileExtension=\".sv4crc\" mimeType=\"application/x-sv4crc\" />\n            <mimeMap fileExtension=\".svg\" mimeType=\"image/svg+xml\" />\n            <mimeMap fileExtension=\".svgz\" mimeType=\"image/svg+xml\" />\n            <mimeMap fileExtension=\".swf\" mimeType=\"application/x-shockwave-flash\" />\n            <mimeMap fileExtension=\".t\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".tar\" mimeType=\"application/x-tar\" />\n            <mimeMap fileExtension=\".tcl\" mimeType=\"application/x-tcl\" />\n            <mimeMap fileExtension=\".tex\" mimeType=\"application/x-tex\" />\n            <mimeMap fileExtension=\".texi\" mimeType=\"application/x-texinfo\" />\n            <mimeMap fileExtension=\".texinfo\" mimeType=\"application/x-texinfo\" />\n            <mimeMap fileExtension=\".tgz\" mimeType=\"application/x-compressed\" />\n            <mimeMap fileExtension=\".thmx\" mimeType=\"application/vnd.ms-officetheme\" />\n            <mimeMap fileExtension=\".thn\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tif\" mimeType=\"image/tiff\" />\n            <mimeMap fileExtension=\".tiff\" mimeType=\"image/tiff\" />\n            <mimeMap fileExtension=\".toc\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tr\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".trm\" mimeType=\"application/x-msterminal\" />\n            <mimeMap fileExtension=\".ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".tsv\" mimeType=\"text/tab-separated-values\" />\n            <mimeMap fileExtension=\".ttf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".txt\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".u32\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".uls\" mimeType=\"text/iuls\" />\n            <mimeMap fileExtension=\".ustar\" mimeType=\"application/x-ustar\" />\n            <mimeMap fileExtension=\".vbs\" mimeType=\"text/vbscript\" />\n            <mimeMap fileExtension=\".vcf\" mimeType=\"text/x-vcard\" />\n            <mimeMap fileExtension=\".vcs\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".vdx\" mimeType=\"application/vnd.ms-visio.viewer\" />\n            <mimeMap fileExtension=\".vml\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".vsd\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vss\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vst\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vsto\" mimeType=\"application/x-ms-vsto\" />\n            <mimeMap fileExtension=\".vsw\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vsx\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vtx\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".wav\" mimeType=\"audio/wav\" />\n            <mimeMap fileExtension=\".wax\" mimeType=\"audio/x-ms-wax\" />\n            <mimeMap fileExtension=\".wbmp\" mimeType=\"image/vnd.wap.wbmp\" />\n            <mimeMap fileExtension=\".wcm\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wdb\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".webm\" mimeType=\"video/webm\" />\n            <mimeMap fileExtension=\".wks\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wm\" mimeType=\"video/x-ms-wm\" />\n            <mimeMap fileExtension=\".wma\" mimeType=\"audio/x-ms-wma\" />\n            <mimeMap fileExtension=\".wmd\" mimeType=\"application/x-ms-wmd\" />\n            <mimeMap fileExtension=\".wmf\" mimeType=\"application/x-msmetafile\" />\n            <mimeMap fileExtension=\".wml\" mimeType=\"text/vnd.wap.wml\" />\n            <mimeMap fileExtension=\".wmlc\" mimeType=\"application/vnd.wap.wmlc\" />\n            <mimeMap fileExtension=\".wmls\" mimeType=\"text/vnd.wap.wmlscript\" />\n            <mimeMap fileExtension=\".wmlsc\" mimeType=\"application/vnd.wap.wmlscriptc\" />\n            <mimeMap fileExtension=\".wmp\" mimeType=\"video/x-ms-wmp\" />\n            <mimeMap fileExtension=\".wmv\" mimeType=\"video/x-ms-wmv\" />\n            <mimeMap fileExtension=\".wmx\" mimeType=\"video/x-ms-wmx\" />\n            <mimeMap fileExtension=\".wmz\" mimeType=\"application/x-ms-wmz\" />\n            <mimeMap fileExtension=\".woff\" mimeType=\"font/x-woff\" />\n            <mimeMap fileExtension=\".wps\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wri\" mimeType=\"application/x-mswrite\" />\n            <mimeMap fileExtension=\".wrl\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".wrz\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".wsdl\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".wtv\" mimeType=\"video/x-ms-wtv\" />\n            <mimeMap fileExtension=\".wvx\" mimeType=\"video/x-ms-wvx\" />\n            <mimeMap fileExtension=\".x\" mimeType=\"application/directx\" />\n            <mimeMap fileExtension=\".xaf\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".xaml\" mimeType=\"application/xaml+xml\" />\n            <mimeMap fileExtension=\".xap\" mimeType=\"application/x-silverlight-app\" />\n            <mimeMap fileExtension=\".xbap\" mimeType=\"application/x-ms-xbap\" />\n            <mimeMap fileExtension=\".xbm\" mimeType=\"image/x-xbitmap\" />\n            <mimeMap fileExtension=\".xdr\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".xht\" mimeType=\"application/xhtml+xml\" />\n            <mimeMap fileExtension=\".xhtml\" mimeType=\"application/xhtml+xml\" />\n            <mimeMap fileExtension=\".xla\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlam\" mimeType=\"application/vnd.ms-excel.addin.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlc\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlm\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xls\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlsb\" mimeType=\"application/vnd.ms-excel.sheet.binary.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlsm\" mimeType=\"application/vnd.ms-excel.sheet.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlsx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" />\n            <mimeMap fileExtension=\".xlt\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xltm\" mimeType=\"application/vnd.ms-excel.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xltx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\" />\n            <mimeMap fileExtension=\".xlw\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xml\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xof\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".xpm\" mimeType=\"image/x-xpixmap\" />\n            <mimeMap fileExtension=\".xps\" mimeType=\"application/vnd.ms-xpsdocument\" />\n            <mimeMap fileExtension=\".xsd\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsf\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsl\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xslt\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsn\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".xtp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".xwd\" mimeType=\"image/x-xwindowdump\" />\n            <mimeMap fileExtension=\".z\" mimeType=\"application/x-compress\" />\n            <mimeMap fileExtension=\".zip\" mimeType=\"application/x-zip-compressed\" />\n        </staticContent>\n\n        <tracing>\n\n             <traceProviderDefinitions>\n                <add name=\"WWW Server\" guid=\"{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}\">\n                    <areas>\n                        <clear />\n                        <add name=\"Authentication\" value=\"2\" />\n                        <add name=\"Security\" value=\"4\" />\n                        <add name=\"Filter\" value=\"8\" />\n                        <add name=\"StaticFile\" value=\"16\" />\n                        <add name=\"CGI\" value=\"32\" />\n                        <add name=\"Compression\" value=\"64\" />\n                        <add name=\"Cache\" value=\"128\" />\n                        <add name=\"RequestNotifications\" value=\"256\" />\n                        <add name=\"Module\" value=\"512\" />\n                        <add name=\"Rewrite\" value=\"1024\" />\n                        <add name=\"FastCGI\" value=\"4096\" />\n                        <add name=\"WebSocket\" value=\"16384\" />\n                    </areas>\n                </add>\n                <add name=\"ASP\" guid=\"{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}\">\n                    <areas>\n                        <clear />\n                    </areas>\n                </add>\n                <add name=\"ISAPI Extension\" guid=\"{a1c2040e-8840-4c31-ba11-9871031a19ea}\">\n                    <areas>\n                        <clear />\n                    </areas>\n                </add>\n                <add name=\"ASPNET\" guid=\"{AFF081FE-0247-4275-9C4E-021F3DC1DA35}\">\n                    <areas>\n                        <add name=\"Infrastructure\" value=\"1\" />\n                        <add name=\"Module\" value=\"2\" />\n                        <add name=\"Page\" value=\"4\" />\n                        <add name=\"AppServices\" value=\"8\" />\n                    </areas>\n                </add>\n            </traceProviderDefinitions>\n\n            <traceFailedRequests>\n                <add path=\"*\">\n                    <traceAreas>\n                        <add provider=\"ASP\" verbosity=\"Verbose\" />\n                        <add provider=\"ASPNET\" areas=\"Infrastructure,Module,Page,AppServices\" verbosity=\"Verbose\" />\n                        <add provider=\"ISAPI Extension\" verbosity=\"Verbose\" />\n                        <add provider=\"WWW Server\" areas=\"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\" verbosity=\"Verbose\" />\n                    </traceAreas>\n                    <failureDefinitions statusCodes=\"200-999\" />\n                </add>\n            </traceFailedRequests>\n\n        </tracing>\n\n        <webdav>\n            <globalSettings>\n                <propertyStores>\n                    <add name=\"webdav_simple_prop\" image=\"%IIS_BIN%\\webdav_simple_prop.dll\" image32=\"%IIS_BIN%\\webdav_simple_prop.dll\" />\n                </propertyStores>\n                <lockStores>\n                    <add name=\"webdav_simple_lock\" image=\"%IIS_BIN%\\webdav_simple_lock.dll\" image32=\"%IIS_BIN%\\webdav_simple_lock.dll\" />\n                </lockStores>\n\n            </globalSettings>\n            <authoring>\n                <locks enabled=\"true\" lockStore=\"webdav_simple_lock\" />\n            </authoring>\n\n        </webdav>\n\n    </system.webServer>\n    <location path=\"\" overrideMode=\"Allow\">\n        <system.webServer>\n            <modules>\n<!--\n                <add name=\"HttpCacheModule\" lockItem=\"true\" />\n-->\n                <add name=\"DynamicCompressionModule\" lockItem=\"true\" />\n                <add name=\"StaticCompressionModule\" lockItem=\"true\" />\n                <add name=\"DefaultDocumentModule\" lockItem=\"true\" />\n                <add name=\"DirectoryListingModule\" lockItem=\"true\" />\n                <add name=\"IsapiFilterModule\" lockItem=\"true\" />\n                <add name=\"ProtocolSupportModule\" lockItem=\"true\" />\n                <add name=\"HttpRedirectionModule\" lockItem=\"true\" />\n                <add name=\"ServerSideIncludeModule\" lockItem=\"true\" />\n                <add name=\"StaticFileModule\" lockItem=\"true\" />\n                <add name=\"AnonymousAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"CertificateMappingAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"UrlAuthorizationModule\" lockItem=\"true\" />\n                <add name=\"BasicAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"WindowsAuthenticationModule\" lockItem=\"true\" />\n<!--\n                <add name=\"DigestAuthenticationModule\" lockItem=\"true\" />\n-->\n                <add name=\"IISCertificateMappingAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"WebMatrixSupportModule\" lockItem=\"true\" />\n                <add name=\"IpRestrictionModule\" lockItem=\"true\" />\n                <add name=\"DynamicIpRestrictionModule\" lockItem=\"true\" />\n                <add name=\"RequestFilteringModule\" lockItem=\"true\" />\n                <add name=\"CustomLoggingModule\" lockItem=\"true\" />\n                <add name=\"CustomErrorModule\" lockItem=\"true\" />\n                <add name=\"IsapiModule\" lockItem=\"true\" />\n                <add name=\"HttpLoggingModule\" lockItem=\"true\" />\n                <add name=\"FailedRequestsTracingModule\" lockItem=\"true\" />\n                <add name=\"CgiModule\" lockItem=\"true\" />\n                <add name=\"FastCgiModule\" lockItem=\"true\" />\n<!--                <add name=\"WebDAVModule\" /> -->\n                <add name=\"RewriteModule\" /> \n                <add name=\"OutputCache\" type=\"System.Web.Caching.OutputCacheModule\" preCondition=\"managedHandler\" />\n                <add name=\"Session\" type=\"System.Web.SessionState.SessionStateModule\" preCondition=\"managedHandler\" />\n                <add name=\"WindowsAuthentication\" type=\"System.Web.Security.WindowsAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"FormsAuthentication\" type=\"System.Web.Security.FormsAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"DefaultAuthentication\" type=\"System.Web.Security.DefaultAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"RoleManager\" type=\"System.Web.Security.RoleManagerModule\" preCondition=\"managedHandler\" />\n                <add name=\"UrlAuthorization\" type=\"System.Web.Security.UrlAuthorizationModule\" preCondition=\"managedHandler\" />\n                <add name=\"FileAuthorization\" type=\"System.Web.Security.FileAuthorizationModule\" preCondition=\"managedHandler\" />\n                <add name=\"AnonymousIdentification\" type=\"System.Web.Security.AnonymousIdentificationModule\" preCondition=\"managedHandler\" />\n                <add name=\"Profile\" type=\"System.Web.Profile.ProfileModule\" preCondition=\"managedHandler\" />\n                <add name=\"UrlMappingsModule\" type=\"System.Web.UrlMappingsModule\" preCondition=\"managedHandler\" />\n                <add name=\"ApplicationInitializationModule\" lockItem=\"true\" />\n                <add name=\"WebSocketModule\" lockItem=\"true\" />\n                <add name=\"ServiceModel-4.0\" type=\"System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n                <add name=\"ConfigurationValidationModule\" lockItem=\"true\" />\n                <add name=\"UrlRoutingModule-4.0\" type=\"System.Web.Routing.UrlRoutingModule\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n                <add name=\"ScriptModule-4.0\" type=\"System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n            </modules>\n            <handlers accessPolicy=\"Read, Script\">\n<!--                <add name=\"WebDAV\" path=\"*\" verb=\"PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK\" modules=\"WebDAVModule\" resourceType=\"Unspecified\" requireAccess=\"None\" /> -->\n                <add name=\"AXD-ISAPI-4.0_64bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-4.0_64bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-4.0_64bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-4.0_64bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"svc-ISAPI-4.0_64bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"rules-ISAPI-4.0_64bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"xoml-ISAPI-4.0_64bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"xamlx-ISAPI-4.0_64bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"aspq-ISAPI-4.0_64bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"cshtm-ISAPI-4.0_64bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"cshtml-ISAPI-4.0_64bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtm-ISAPI-4.0_64bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtml-ISAPI-4.0_64bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"AXD-ISAPI-4.0_32bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-4.0_32bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-4.0_32bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-4.0_32bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"svc-ISAPI-4.0_32bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"rules-ISAPI-4.0_32bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"xoml-ISAPI-4.0_32bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"xamlx-ISAPI-4.0_32bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"aspq-ISAPI-4.0_32bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"cshtm-ISAPI-4.0_32bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"cshtml-ISAPI-4.0_32bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtm-ISAPI-4.0_32bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtml-ISAPI-4.0_32bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"TraceHandler-Integrated-4.0\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"WebAdminHandler-Integrated-4.0\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"AssemblyResourceLoader-Integrated-4.0\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"PageHandlerFactory-Integrated-4.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"SimpleHandlerFactory-Integrated-4.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"WebServiceHandlerFactory-Integrated-4.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-Integrated-4.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-Integrated-4.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"svc-Integrated-4.0\" path=\"*.svc\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"rules-Integrated-4.0\" path=\"*.rules\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"xoml-Integrated-4.0\" path=\"*.xoml\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"xamlx-Integrated-4.0\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"aspq-Integrated-4.0\" path=\"*.aspq\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"cshtm-Integrated-4.0\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"cshtml-Integrated-4.0\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"vbhtm-Integrated-4.0\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"vbhtml-Integrated-4.0\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ScriptHandlerFactoryAppServices-Integrated-4.0\" path=\"*_AppService.axd\" verb=\"*\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ScriptResourceIntegrated-4.0\" path=\"*ScriptResource.axd\" verb=\"GET,HEAD\" type=\"System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ASPClassic\" path=\"*.asp\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n                <add name=\"SecurityCertificate\" path=\"*.cer\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n                <add name=\"ISAPI-dll\" path=\"*.dll\" verb=\"*\" modules=\"IsapiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n                <add name=\"TraceHandler-Integrated\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"WebAdminHandler-Integrated\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"AssemblyResourceLoader-Integrated\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"PageHandlerFactory-Integrated\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"SimpleHandlerFactory-Integrated\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"WebServiceHandlerFactory-Integrated\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-Integrated\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-Integrated\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"AXD-ISAPI-2.0\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-2.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-2.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-2.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"AXD-ISAPI-2.0-64\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-2.0-64\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-2.0-64\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-2.0-64\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0-64\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0-64\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"CGI-exe\" path=\"*.exe\" verb=\"*\" modules=\"CgiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n                <add name=\"SSINC-stm\" path=\"*.stm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"SSINC-shtm\" path=\"*.shtm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"SSINC-shtml\" path=\"*.shtml\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"TRACEVerbHandler\" path=\"*\" verb=\"TRACE\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n                <add name=\"OPTIONSVerbHandler\" path=\"*\" verb=\"OPTIONS\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n                <add name=\"ExtensionlessUrl-ISAPI-4.0_32bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"ExtensionlessUrlHandler-ISAPI-4.0_64bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"ExtensionlessUrl-Integrated-4.0\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" responseBufferLimit=\"0\" />\n                <add name=\"StaticFile\" path=\"*\" verb=\"*\" modules=\"StaticFileModule,DefaultDocumentModule,DirectoryListingModule\" resourceType=\"Either\" requireAccess=\"Read\" />\n            </handlers>\n        </system.webServer>\n    </location>\n    <location path=\"Default Web Site\">\n        <system.webServer>\n            <security>\n                <ipSecurity>\n                    <add ipAddress=\"1.1.1.1\" allowed=\"true\" />\n                </ipSecurity>\n                <authentication>\n                  <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\" userName=\"test\"/>\n                </authentication>\n            </security>\n            <httpLogging dontLog=\"true\" />\n        </system.webServer>\n    </location>\n  <location path=\"WebSite2\">\n    <system.webServer>\n      <security>\n        <ipSecurity>\n          <add ipAddress=\"1.1.1.1\" allowed=\"true\" />\n        </ipSecurity>\n        <authentication>\n          <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\" userName=\"test\"/>\n        </authentication>\n      </security>\n      <httpLogging dontLog=\"true\" />\n    </system.webServer>\n  </location>\n<configuration>\n"
  },
  {
    "path": "Tests/schema/ASPNET_schema.xml",
    "content": "                     \n<!--\n\n    ASP.NET configuration schema.\n    \n    Please do not edit this file. To add configuration sections to the schema,\n    put them in .xml files similar to this one, in this directory. They will\n    be picked up automatically at application pool startup.\n\n-->\n<configSchema>\n    <sectionSchema name=\"system.web/anonymousIdentification\">\n        <attribute name=\"cookieless\" type=\"enum\" defaultValue=\"UseCookies\">\n            <enum name=\"UseUri\" value=\"0\" />\n            <enum name=\"UseCookies\" value=\"1\" />\n            <enum name=\"AutoDetect\" value=\"2\" />\n            <enum name=\"UseDeviceProfile\" value=\"3\" />\n        </attribute>\n        <attribute name=\"cookieName\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\".ASPXANONYMOUS\" />\n        <attribute name=\"cookiePath\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"/\" />\n        <attribute name=\"cookieProtection\" type=\"enum\" defaultValue=\"Validation\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"Validation\" value=\"1\" />\n            <enum name=\"Encryption\" value=\"2\" />\n            <enum name=\"All\" value=\"3\" />\n        </attribute>\n        <attribute name=\"cookieRequireSSL\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"cookieSlidingExpiration\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"cookieTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483640,60\" allowInfinite=\"true\" timeSpanFormat=\"minutes\" defaultValue=\"100000\" />\n        <attribute name=\"domain\" type=\"string\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/authentication\">\n        <element name=\"forms\">\n            <attribute name=\"cookieless\" type=\"enum\" defaultValue=\"UseDeviceProfile\">\n                <enum name=\"UseUri\" value=\"0\" />\n                <enum name=\"UseCookies\" value=\"1\" />\n                <enum name=\"AutoDetect\" value=\"2\" />\n                <enum name=\"UseDeviceProfile\" value=\"3\" />\n            </attribute>\n            <element name=\"credentials\">\n                <attribute name=\"passwordFormat\" type=\"enum\" defaultValue=\"SHA1\">\n                    <enum name=\"Clear\" value=\"0\" />\n                    <enum name=\"SHA1\" value=\"1\" />\n                    <enum name=\"MD5\" value=\"2\" />\n                </attribute>\n                <collection addElement=\"user\">\n                    <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                    <attribute name=\"password\" required=\"true\" type=\"string\" />\n                </collection>\n            </element>\n            <attribute name=\"defaultUrl\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"default.aspx\" />\n            <attribute name=\"domain\" type=\"string\" />\n            <attribute name=\"enableCrossAppRedirects\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"loginUrl\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"login.aspx\" />\n            <attribute name=\"name\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\".ASPXAUTH\" />\n            <attribute name=\"path\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"/\" />\n            <attribute name=\"protection\" type=\"enum\" defaultValue=\"All\">\n                <enum name=\"All\" value=\"0\" />\n                <enum name=\"None\" value=\"1\" />\n                <enum name=\"Encryption\" value=\"2\" />\n                <enum name=\"Validation\" value=\"3\" />\n            </attribute>\n            <attribute name=\"requireSSL\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"slidingExpiration\" type=\"bool\" defaultValue=\"True\" />\n            <attribute name=\"timeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" timeSpanFormat=\"minutes\" defaultValue=\"30\" validationParameter=\"60,2147483640,60\" />\n            <attribute name=\"ticketCompatibilityMode\" type=\"string\" validationType=\"nonEmptyString\" />\n        </element>\n        <attribute name=\"mode\" type=\"enum\" defaultValue=\"Windows\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"Windows\" value=\"1\" />\n            <enum name=\"Passport\" value=\"2\" />\n            <enum name=\"Forms\" value=\"3\" />\n            <enum name=\"Federated\" value=\"4\"/>\n        </attribute>\n        <element name=\"passport\">\n            <attribute name=\"redirectUrl\" type=\"string\" defaultValue=\"internal\" />\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/authorization\">\n        <collection addElement=\"allow,deny\" mergeAppend=\"false\" allowDuplicates=\"true\">\n            <attribute name=\"roles\" type=\"string\" />\n            <attribute name=\"users\" type=\"string\" />\n            <attribute name=\"verbs\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/browserCaps\">\n        <attribute name=\"userAgentCacheKeyLength\" type=\"int\" defaultValue=\"64\" />\n        <collection addElement=\"result\">\n            <attribute name=\"type\" type=\"string\" defaultValue=\"System.Web.Mobile.MobileCapabilities, System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/clientTarget\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"alias\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"userAgent\" required=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/compilation\">\n        <element name=\"assemblies\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowDuplicates=\"true\">\n                <attribute name=\"assembly\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            </collection>\n        </element>\n        <attribute name=\"assemblyPostProcessorType\" type=\"string\" />\n        <attribute name=\"batch\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"batchTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" allowInfinite=\"true\" timeSpanFormat=\"seconds\" defaultValue=\"900\" />\n        <element name=\"buildProviders\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"extension\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            </collection>\n        </element>\n        <element name=\"codeSubDirectories\">\n            <collection addElement=\"add\">\n                <attribute name=\"directoryName\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"requireTrimmedString\" />\n            </collection>\n        </element>\n        <attribute name=\"debug\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"defaultLanguage\" type=\"string\" defaultValue=\"vb\" />\n        <attribute name=\"enablePrefetchOptimization\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"explicit\" type=\"bool\" defaultValue=\"True\" />\n        <element name=\"expressionBuilders\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"expressionPrefix\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            </collection>\n        </element>\n        <attribute name=\"maxBatchGeneratedFileSize\" type=\"int\" defaultValue=\"1000\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n        <attribute name=\"maxBatchSize\" type=\"int\" defaultValue=\"1000\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n        <attribute name=\"numRecompilesBeforeAppRestart\" type=\"int\" defaultValue=\"15\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n        <attribute name=\"strict\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"tempDirectory\" type=\"string\" />\n        <attribute name=\"urlLinePragmas\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"profileGuidedOptimizations\" type=\"string\" defaultValue=\"All\" />\n        <attribute name=\"optimizeCompilations\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"targetFramework\" type=\"string\" />\n        <element name=\"folderLevelBuildProviders\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"type\" required=\"true\" isUniqueKey=\"false\" type=\"string\" validationType=\"nonEmptyString\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/customErrors\">\n        <attribute name=\"allowNestedErrors\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"defaultRedirect\" type=\"string\" />\n        <collection addElement=\"error\">\n            <attribute name=\"redirect\" required=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"statusCode\" required=\"true\" isUniqueKey=\"true\" type=\"int\" validationType=\"integerRange\" validationParameter=\"100,999\" />\n        </collection>\n        <attribute name=\"mode\" type=\"enum\" defaultValue=\"RemoteOnly\">\n            <enum name=\"RemoteOnly\" value=\"0\" />\n            <enum name=\"On\" value=\"1\" />\n            <enum name=\"Off\" value=\"2\" />\n        </attribute>\n        <attribute name=\"redirectMode\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"ResponseRedirect\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/deviceFilters\">\n        <collection addElement=\"filter\">\n            <attribute name=\"argument\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"compare\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"type\" type=\"string\" />\n            <attribute name=\"method\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/globalization\">\n        <attribute name=\"culture\" type=\"string\" />\n        <attribute name=\"enableBestFitResponseEncoding\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"enableClientBasedCulture\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"fileEncoding\" type=\"string\" />\n        <attribute name=\"requestEncoding\" type=\"string\" defaultValue=\"utf-8\" />\n        <attribute name=\"resourceProviderFactoryType\" type=\"string\" />\n        <attribute name=\"responseEncoding\" type=\"string\" defaultValue=\"utf-8\" />\n        <attribute name=\"responseHeaderEncoding\" type=\"string\" defaultValue=\"utf-8\" />\n        <attribute name=\"uiCulture\" type=\"string\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/healthMonitoring\">\n        <element name=\"bufferModes\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"maxBufferSize\" required=\"true\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" allowInfinite=\"true\" defaultValue=\"2147483647\" />\n                <attribute name=\"maxBufferThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" allowInfinite=\"true\" defaultValue=\"1\" />\n                <attribute name=\"maxFlushSize\" required=\"true\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" allowInfinite=\"true\" defaultValue=\"2147483647\" />\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"regularFlushInterval\" required=\"true\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" allowInfinite=\"true\" defaultValue=\"00:00:01\" />\n                <attribute name=\"urgentFlushInterval\" required=\"true\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"00:00:00\" />\n                <attribute name=\"urgentFlushThreshold\" required=\"true\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" allowInfinite=\"true\" defaultValue=\"2147483647\" />\n            </collection>\n        </element>\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"True\" />\n        <element name=\"eventMappings\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"endEventCode\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"2147483647\" />\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"startEventCode\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"0\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <attribute name=\"heartbeatInterval\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483,1\" timeSpanFormat=\"seconds\" defaultValue=\"0\" />\n        <element name=\"profiles\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"custom\" type=\"string\" />\n                <attribute name=\"maxLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" allowInfinite=\"true\" defaultValue=\"2147483647\" />\n                <attribute name=\"minInstances\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" defaultValue=\"1\" />\n                <attribute name=\"minInterval\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"00:00:00\" />\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            </collection>\n        </element>\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <element name=\"rules\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"custom\" type=\"string\" />\n                <attribute name=\"eventName\" required=\"true\" type=\"string\" />\n                <attribute name=\"maxLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" allowInfinite=\"true\" defaultValue=\"2147483647\" />\n                <attribute name=\"minInstances\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" defaultValue=\"1\" />\n                <attribute name=\"minInterval\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"00:00:00\" />\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"profile\" type=\"string\" />\n                <attribute name=\"provider\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/hostingEnvironment\">\n        <attribute name=\"idleTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483640,60\" allowInfinite=\"true\" timeSpanFormat=\"minutes\" defaultValue=\"Infinite\" />\n        <attribute name=\"shadowCopyBinAssemblies\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"shutdownTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" timeSpanFormat=\"seconds\" defaultValue=\"30\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/httpCookies\">\n        <attribute name=\"domain\" type=\"string\" />\n        <attribute name=\"httpOnlyCookies\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"requireSSL\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/httpHandlers\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" mergeAppend=\"false\" allowDuplicates=\"true\">\n            <attribute name=\"path\" required=\"true\" isCombinedKey=\"true\" type=\"string\" />\n            <attribute name=\"type\" required=\"true\" type=\"string\" />\n            <attribute name=\"validate\" type=\"bool\" defaultValue=\"True\" />\n            <attribute name=\"verb\" required=\"true\" isCombinedKey=\"true\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/httpModules\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"type\" required=\"true\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/httpRuntime\" allowUnrecognizedAttributes=\"true\">\n        <attribute name=\"apartmentThreading\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"appRequestQueueLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" defaultValue=\"5000\" />\n        <attribute name=\"delayNotificationTimeout\" type=\"timeSpan\" timeSpanFormat=\"seconds\" defaultValue=\"5\" />\n        <attribute name=\"enable\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"enableHeaderChecking\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"enableKernelOutputCache\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"enableVersionHeader\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"executionTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" timeSpanFormat=\"seconds\" defaultValue=\"110\" />\n        <attribute name=\"maxRequestLength\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"4096\" />\n        <attribute name=\"maxWaitChangeNotification\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"0\" />\n        <attribute name=\"minFreeThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"8\" />\n        <attribute name=\"minLocalRequestFreeThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"4\" />\n        <attribute name=\"requestLengthDiskThreshold\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" defaultValue=\"80\" />\n        <attribute name=\"requireRootedSaveAsPath\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"sendCacheControlHeader\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"shutdownTimeout\" type=\"timeSpan\" timeSpanFormat=\"seconds\" defaultValue=\"90\" />\n        <attribute name=\"useFullyQualifiedRedirectUrl\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"waitChangeNotification\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"0\" />\n        <attribute name=\"maxUrlLength\" type=\"int\" defaultValue=\"260\" />\n        <attribute name=\"maxQueryStringLength\" type=\"int\" defaultValue=\"2048\" />\n        <attribute name=\"relaxedUrlToFileSystemMapping\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"requestPathInvalidCharacters\" type=\"string\" />\n        <attribute name=\"requestValidationMode\" type=\"string\" />\n        <attribute name=\"requestValidationType\" type=\"string\" />\n        <attribute name=\"encoderType\" type=\"string\" />\n        <attribute name=\"asyncPreloadMode\" type=\"enum\" defaultValue=\"None\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"Form\" value=\"1\" />\n            <enum name=\"FormMultiPart\" value=\"2\" />\n            <enum name=\"NonForm\" value=\"4\" />\n            <enum name=\"AllFormTypes\" value=\"3\" />\n            <enum name=\"All\" value=\"7\" />\n        </attribute>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/identity\" allowUnrecognizedAttributes=\"true\">\n        <attribute name=\"impersonate\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"password\" type=\"string\" />\n        <attribute name=\"userName\" type=\"string\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/machineKey\">\n        <attribute name=\"decryption\" type=\"string\" validationType=\"requireTrimmedString\" defaultValue=\"Auto\" />\n        <attribute name=\"decryptionKey\" type=\"string\" validationType=\"requireTrimmedString\" defaultValue=\"AutoGenerate,IsolateApps\" />\n        <attribute name=\"validation\" type=\"enum\" defaultValue=\"SHA1\">\n            <enum name=\"MD5\" value=\"0\" />\n            <enum name=\"SHA1\" value=\"1\" />\n            <enum name=\"3DES\" value=\"2\" />\n            <enum name=\"AES\" value=\"3\" />\n            <enum name=\"HMACSHA256\" value=\"4\" />\n            <enum name=\"HMACSHA384\" value=\"5\" />\n            <enum name=\"HMACSHA512\" value=\"6\" />\n        </attribute>\n        <attribute name=\"validationKey\" type=\"string\" validationType=\"requireTrimmedString\" defaultValue=\"AutoGenerate,IsolateApps\" />\n        <attribute name=\"applicationName\" type=\"string\" defaultValue=\"\" />\n        <attribute name=\"dataProtectorType\" type=\"string\" defaultValue=\"\" />\n        <attribute name=\"compatibilityMode\" type=\"enum\" defaultValue=\"Framework20SP1\">\n            <enum name=\"Framework20SP1\" value=\"0\" />\n            <enum name=\"Framework20SP2\" value=\"1\" />\n            <enum name=\"Framework45\" value=\"2\" />\n        </attribute>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/mobileControls\">\n        <attribute name=\"allowCustomAttributes\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"cookielessDataDictionaryType\" type=\"string\" defaultValue=\"System.Web.Mobile.CookielessData\" />\n        <collection addElement=\"device\" removeElement=\"remove\" clearElement=\"clear\">\n            <collection addElement=\"control\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"adapter\" required=\"true\" type=\"string\" />\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            </collection>\n            <attribute name=\"inheritsFrom\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"pageAdapter\" type=\"string\" />\n            <attribute name=\"predicateClass\" type=\"string\" />\n            <attribute name=\"predicateMethod\" type=\"string\" validationType=\"nonEmptyString\" />\n        </collection>\n        <attribute name=\"sessionStateHistorySize\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"6\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/pages\">\n        <attribute name=\"asyncTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" timeSpanFormat=\"seconds\" defaultValue=\"45\" />\n        <attribute name=\"autoEventWireup\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"buffer\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"compilationMode\" type=\"enum\" defaultValue=\"Always\">\n            <enum name=\"Auto\" value=\"0\" />\n            <enum name=\"Never\" value=\"1\" />\n            <enum name=\"Always\" value=\"2\" />\n        </attribute>\n        <element name=\"controls\">\n            <collection addElement=\"add\" removeElement=\"remove\">\n                <attribute name=\"assembly\" type=\"string\" />\n                <attribute name=\"namespace\" type=\"string\" />\n                <attribute name=\"src\" type=\"string\" />\n                <attribute name=\"tagName\" type=\"string\" />\n                <attribute name=\"tagPrefix\" required=\"true\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"/\" />\n            </collection>\n        </element>\n        <attribute name=\"enableEventValidation\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"enableSessionState\" type=\"enum\" defaultValue=\"true\">\n            <enum name=\"false\" value=\"0\" />\n            <enum name=\"ReadOnly\" value=\"1\" />\n            <enum name=\"true\" value=\"2\" />\n        </attribute>\n        <attribute name=\"enableViewState\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"enableViewStateMac\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"maintainScrollPositionOnPostBack\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"masterPageFile\" type=\"string\" />\n        <attribute name=\"maxPageStateFieldLength\" type=\"int\" defaultValue=\"-1\" />\n        <element name=\"namespaces\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"namespace\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            </collection>\n            <attribute name=\"autoImportVBNamespace\" type=\"bool\" defaultValue=\"True\" />\n        </element>\n        <attribute name=\"pageBaseType\" type=\"string\" defaultValue=\"System.Web.UI.Page\" />\n        <attribute name=\"pageParserFilterType\" type=\"string\" />\n        <attribute name=\"smartNavigation\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"styleSheetTheme\" type=\"string\" />\n        <element name=\"tagMapping\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"mappedTagType\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"tagType\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            </collection>\n        </element>\n        <attribute name=\"theme\" type=\"string\" />\n        <attribute name=\"userControlBaseType\" type=\"string\" defaultValue=\"System.Web.UI.UserControl\" />\n        <attribute name=\"validateRequest\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"viewStateEncryptionMode\" type=\"enum\" defaultValue=\"Auto\">\n            <enum name=\"Auto\" value=\"0\" />\n            <enum name=\"Always\" value=\"1\" />\n            <enum name=\"Never\" value=\"2\" />\n        </attribute>\n        <attribute name=\"renderAllHiddenFieldsAtTopOfForm\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"controlRenderingCompatibilityVersion\" type=\"string\" defaultValue=\"4.5\" />\n        <attribute name=\"clientIDMode\" type=\"string\" defaultValue=\"Predictable\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/protocols\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"appDomainHandlerType\" type=\"string\" />\n            <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"processHandlerType\" type=\"string\" />\n            <attribute name=\"validate\" type=\"bool\" defaultValue=\"False\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/securityPolicy\">\n        <collection addElement=\"trustLevel\">\n            <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"policyFile\" required=\"true\" type=\"string\" defaultValue=\"internal\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/sessionPageState\">\n        <attribute name=\"historySize\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" defaultValue=\"9\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/sessionState\">\n        <attribute name=\"allowCustomSqlDatabase\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"cookieless\" type=\"enum\" defaultValue=\"UseCookies\">\n            <enum name=\"UseUri\" value=\"0\" />\n            <enum name=\"UseCookies\" value=\"1\" />\n            <enum name=\"AutoDetect\" value=\"2\" />\n            <enum name=\"UseDeviceProfile\" value=\"3\" />\n            <enum name=\"true\" value=\"0\" />\n            <enum name=\"false\" value=\"1\" />\n        </attribute>\n        <attribute name=\"cookieName\" type=\"string\" defaultValue=\"ASP.NET_SessionId\" />\n        <attribute name=\"customProvider\" type=\"string\" />\n        <attribute name=\"mode\" type=\"enum\" defaultValue=\"InProc\">\n            <enum name=\"Off\" value=\"0\" />\n            <enum name=\"InProc\" value=\"1\" />\n            <enum name=\"StateServer\" value=\"2\" />\n            <enum name=\"SQLServer\" value=\"3\" />\n            <enum name=\"Custom\" value=\"4\" />\n        </attribute>\n        <attribute name=\"partitionResolverType\" type=\"string\" />\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <attribute name=\"regenerateExpiredSessionId\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"sessionIDManagerType\" type=\"string\" />\n        <attribute name=\"sqlCommandTimeout\" type=\"timeSpan\" allowInfinite=\"true\" timeSpanFormat=\"seconds\" defaultValue=\"30\" />\n        <attribute name=\"sqlConnectionString\" type=\"string\" defaultValue=\"data source=localhost;Integrated Security=SSPI\" />\n        <attribute name=\"stateConnectionString\" type=\"string\" defaultValue=\"tcpip=loopback:42424\" />\n        <attribute name=\"stateNetworkTimeout\" type=\"timeSpan\" allowInfinite=\"true\" timeSpanFormat=\"seconds\" defaultValue=\"10\" />\n        <attribute name=\"timeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"1,2147483640,60\" allowInfinite=\"true\" timeSpanFormat=\"minutes\" defaultValue=\"20\" />\n        <attribute name=\"useHostingIdentity\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"sqlConnectionRetryInterval\" type=\"timeSpan\" allowInfinite=\"true\" timeSpanFormat=\"seconds\" defaultValue=\"0\" />\n        <attribute name=\"compressionEnabled\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/siteMap\">\n        <attribute name=\"defaultProvider\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"AspNetXmlSiteMapProvider\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"True\" />\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/trace\">\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"localOnly\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"mostRecent\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"pageOutput\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"requestLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"10\" />\n        <attribute name=\"traceMode\" type=\"enum\" defaultValue=\"SortByTime\">\n            <enum name=\"SortByTime\" value=\"1\" />\n            <enum name=\"SortByCategory\" value=\"2\" />\n        </attribute>\n        <attribute name=\"writeToDiagnosticsTrace\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/trust\">\n        <attribute name=\"level\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"Full\" />\n        <attribute name=\"originUrl\" type=\"string\" />\n        <attribute name=\"processRequestInApplicationTrust\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"legacyCasModel\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/urlMappings\">\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"True\" />\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"mappedUrl\" required=\"true\" type=\"string\" />\n            <attribute name=\"url\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/webControls\">\n        <attribute name=\"clientScriptsLocation\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"/aspnet_client/{0}/{1}/\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/webParts\">\n        <attribute name=\"enableExport\" type=\"bool\" defaultValue=\"False\" />\n        <element name=\"personalization\">\n            <element name=\"authorization\">\n                <collection addElement=\"allow,deny\" mergeAppend=\"false\" allowDuplicates=\"true\">\n                    <attribute name=\"roles\" type=\"string\" />\n                    <attribute name=\"users\" type=\"string\" />\n                    <attribute name=\"verbs\" type=\"string\" />\n                </collection>\n            </element>\n            <attribute name=\"defaultProvider\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"AspNetSqlPersonalizationProvider\" />\n            <element name=\"providers\">\n                <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                    <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                    <attribute name=\"type\" required=\"true\" type=\"string\" />\n                </collection>\n            </element>\n        </element>\n        <element name=\"transformers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/webServices\">\n        <element name=\"conformanceWarnings\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"name\" isUniqueKey=\"true\" type=\"flags\">\n                    <flag name=\"None\" value=\"0\" />\n                    <flag name=\"BasicProfile1_1\" value=\"1\" />\n                </attribute>\n            </collection>\n        </element>\n        <element name=\"diagnostics\">\n            <attribute name=\"suppressReturningExceptions\" type=\"bool\" defaultValue=\"False\" />\n        </element>\n        <element name=\"protocols\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"name\" isUniqueKey=\"true\" type=\"flags\">\n                    <flag name=\"Unknown\" value=\"0\" />\n                    <flag name=\"HttpSoap\" value=\"1\" />\n                    <flag name=\"HttpGet\" value=\"2\" />\n                    <flag name=\"HttpPost\" value=\"4\" />\n                    <flag name=\"Documentation\" value=\"8\" />\n                    <flag name=\"HttpPostLocalhost\" value=\"16\" />\n                    <flag name=\"HttpSoap12\" value=\"32\" />\n                    <flag name=\"AnyHttpSoap\" value=\"33\" />\n                </attribute>\n            </collection>\n        </element>\n        <element name=\"serviceDescriptionFormatExtensionTypes\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"type\" isUniqueKey=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <element name=\"soapEnvelopeProcessing\">\n            <attribute name=\"strict\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"readTimeout\" type=\"int\" defaultValue=\"2147483647\" />\n        </element>\n        <element name=\"soapExtensionImporterTypes\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"type\" isUniqueKey=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <element name=\"soapExtensionReflectorTypes\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"type\" isUniqueKey=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <element name=\"soapExtensionTypes\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"group\" isCombinedKey=\"true\" type=\"enum\" defaultValue=\"Low\">\n                    <enum name=\"High\" value=\"0\" />\n                    <enum name=\"Low\" value=\"1\" />\n                </attribute>\n                <attribute name=\"priority\" isCombinedKey=\"true\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" defaultValue=\"0\" />\n                <attribute name=\"type\" isCombinedKey=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <element name=\"soapServerProtocolFactory\">\n            <attribute name=\"type\" type=\"string\" />\n        </element>\n        <element name=\"soapTransportImporterTypes\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"type\" isUniqueKey=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <element name=\"wsdlHelpGenerator\">\n            <attribute name=\"href\" type=\"string\" />\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/xhtmlConformance\">\n        <attribute name=\"mode\" type=\"enum\" defaultValue=\"Transitional\">\n            <enum name=\"Transitional\" value=\"0\" />\n            <enum name=\"Legacy\" value=\"1\" />\n            <enum name=\"Strict\" value=\"2\" />\n        </attribute>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/caching/cache\">\n        <attribute name=\"disableExpiration\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"disableMemoryCollection\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"percentagePhysicalMemoryUsedLimit\" type=\"int\" validationType=\"integerRange\" defaultValue=\"0\" validationParameter=\"0,100\" />\n        <attribute name=\"privateBytesLimit\" type=\"int64\" defaultValue=\"0\" />\n        <attribute name=\"privateBytesPollTime\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"00:02:00\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/caching/outputCache\">\n        <attribute name=\"enableFragmentCache\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"enableKernelCacheForVaryByStar\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"enableOutputCache\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"omitVaryStar\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"sendCacheControlHeader\" type=\"bool\" defaultValue=\"True\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/caching/outputCacheSettings\">\n        <element name=\"outputCacheProfiles\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"duration\" type=\"int\" defaultValue=\"-1\" />\n                <attribute name=\"enabled\" type=\"bool\" defaultValue=\"True\" />\n                <attribute name=\"location\" type=\"enum\">\n                    <enum name=\"Any\" value=\"0\" />\n                    <enum name=\"Client\" value=\"1\" />\n                    <enum name=\"Downstream\" value=\"2\" />\n                    <enum name=\"Server\" value=\"3\" />\n                    <enum name=\"None\" value=\"4\" />\n                    <enum name=\"ServerAndClient\" value=\"5\" />\n                </attribute>\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"requireTrimmedString\" />\n                <attribute name=\"noStore\" type=\"bool\" defaultValue=\"False\" />\n                <attribute name=\"sqlDependency\" type=\"string\" />\n                <attribute name=\"varyByContentEncoding\" type=\"string\" />\n                <attribute name=\"varyByControl\" type=\"string\" />\n                <attribute name=\"varyByCustom\" type=\"string\" />\n                <attribute name=\"varyByHeader\" type=\"string\" />\n                <attribute name=\"varyByParam\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/caching/sqlCacheDependency\">\n        <element name=\"databases\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"connectionStringName\" required=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"pollTime\" type=\"int\" defaultValue=\"60000\" />\n            </collection>\n        </element>\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"pollTime\" type=\"int\" defaultValue=\"60000\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/fullTrustAssemblies\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"assemblyName\" required=\"true\" isUniqueKey=\"false\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"version\" required=\"true\" isUniqueKey=\"false\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"publicKey\" required=\"true\" isUniqueKey=\"false\" type=\"string\" validationType=\"nonEmptyString\" />\n        </collection>\n     </sectionSchema>\n    <sectionSchema name=\"system.web/partialTrustVisibleAssemblies\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"assemblyName\" required=\"true\" isUniqueKey=\"false\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"version\" required=\"true\" isUniqueKey=\"false\" type=\"string\" validationType=\"nonEmptyString\" />\n            <attribute name=\"publicKey\" required=\"true\" isUniqueKey=\"false\" type=\"string\" validationType=\"nonEmptyString\" />\n        </collection>\n     </sectionSchema>\n</configSchema>"
  },
  {
    "path": "Tests/schema/FX_schema.xml",
    "content": "                     \n<!--\n\n    .NET Framework configuration schema (beyond ASP.NET).\n    \n    Please do not edit this file. To add configuration sections to the schema,\n    put them in .xml files similar to this one, in this directory. They will\n    be picked up automatically at application pool startup.\n\n-->\n<configSchema>\n    <sectionSchema name=\"appSettings\">\n        <attribute name=\"file\" type=\"string\" />\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"key\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"value\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"configProtectedData\">\n        <attribute name=\"defaultProvider\" type=\"string\" defaultValue=\"RsaProtectedConfigurationProvider\" />\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"connectionStrings\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"connectionString\" required=\"true\" type=\"string\" />\n            <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"providerName\" type=\"string\" defaultValue=\"System.Data.SqlClient\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.codedom\">\n        <element name=\"compilers\">\n            <collection addElement=\"compiler\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"language\" type=\"string\" isCombinedKey=\"true\" />\n                <attribute name=\"extension\" type=\"string\" isCombinedKey=\"true\" />\n                <attribute name=\"type\" type=\"string\" />\n                <attribute name=\"warningLevel\" type=\"int\" />\n                <attribute name=\"compilerOptions\" type=\"string\" />\n                <collection addElement=\"providerOption\" >\n                    <attribute name=\"name\" type=\"string\"  isCombinedKey=\"true\" />\n                    <attribute name=\"value\" type=\"string\" isCombinedKey=\"true\" />\n                </collection>\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.data\">\n        <element name=\"DbProviderFactories\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"invariant\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n                <attribute name=\"name\" type=\"string\" />\n                <attribute name=\"description\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.diagnostics\">\n        <element name=\"assert\">\n            <attribute name=\"assertuienabled\" type=\"bool\" defaultValue=\"True\" />\n            <attribute name=\"logfilename\" type=\"string\" />\n        </element>\n        <element name=\"performanceCounters\">\n            <attribute name=\"filemappingsize\" type=\"int\" defaultValue=\"524288\" />\n        </element>\n        <element name=\"sharedListeners\">\n            <collection addElement=\"add\" allowDuplicates=\"true\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n                <attribute name=\"traceOutputOptions\" type=\"flags\" defaultValue=\"None\">\n                    <flag name=\"None\" value=\"0\" />\n                    <flag name=\"LogicalOperationStack\" value=\"1\" />\n                    <flag name=\"DateTime\" value=\"2\" />\n                    <flag name=\"Timestamp\" value=\"4\" />\n                    <flag name=\"ProcessId\" value=\"8\" />\n                    <flag name=\"ThreadId\" value=\"16\" />\n                    <flag name=\"Callstack\" value=\"32\" />\n                </attribute>\n                <attribute name=\"initializeData\" type=\"string\" defaultValue=\"\" />\n                <attribute name=\"type\" type=\"string\" required=\"true\" defaultValue=\"\" />\n                <element name=\"filter\">\n                    <attribute name=\"initializeData\" type=\"string\" />\n                    <attribute name=\"type\" type=\"string\" />\n                </element>\n            </collection>\n        </element>\n        <element name=\"sources\">\n            <collection addElement=\"source\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" type=\"string\" required=\"true\" defaultValue=\"\" />\n                <attribute name=\"switchName\" type=\"string\" />\n                <attribute name=\"switchValue\" type=\"string\" />\n                <attribute name=\"switchType\" type=\"string\" />\n                <element name=\"listeners\">\n                    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n                        <attribute name=\"traceOutputOptions\" type=\"flags\" defaultValue=\"None\">\n                            <flag name=\"None\" value=\"0\" />\n                            <flag name=\"LogicalOperationStack\" value=\"1\" />\n                            <flag name=\"DateTime\" value=\"2\" />\n                            <flag name=\"Timestamp\" value=\"4\" />\n                            <flag name=\"ProcessId\" value=\"8\" />\n                            <flag name=\"ThreadId\" value=\"16\" />\n                            <flag name=\"Callstack\" value=\"32\" />\n                        </attribute>\n                        <attribute name=\"initializeData\" type=\"string\" defaultValue=\"\" />\n                        <attribute name=\"type\" type=\"string\" required=\"true\" defaultValue=\"\" />\n                        <element name=\"filter\">\n                            <attribute name=\"initializeData\" type=\"string\" />\n                            <attribute name=\"type\" type=\"string\" />\n                        </element>\n                    </collection>\n                </element>\n            </collection>\n        </element>\n        <element name=\"switches\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" defaultValue=\"\" />\n                <attribute name=\"value\" type=\"string\" required=\"true\" />\n            </collection>\n        </element>\n        <element name=\"trace\">\n            <attribute name=\"autoflush\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"indentsize\" type=\"int\" defaultValue=\"4\" />\n            <element name=\"listeners\">\n                <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                    <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n                    <attribute name=\"traceOutputOptions\" type=\"flags\" defaultValue=\"None\">\n                        <flag name=\"None\" value=\"0\" />\n                        <flag name=\"LogicalOperationStack\" value=\"1\" />\n                        <flag name=\"DateTime\" value=\"2\" />\n                        <flag name=\"Timestamp\" value=\"4\" />\n                        <flag name=\"ProcessId\" value=\"8\" />\n                        <flag name=\"ThreadId\" value=\"16\" />\n                        <flag name=\"Callstack\" value=\"32\" />\n                    </attribute>\n                    <attribute name=\"initializeData\" type=\"string\" defaultValue=\"\" />\n                    <attribute name=\"type\" type=\"string\" required=\"true\" defaultValue=\"\" />\n                    <element name=\"filter\">\n                        <attribute name=\"initializeData\" type=\"string\" />\n                        <attribute name=\"type\" type=\"string\" />\n                    </element>\n                </collection>\n            </element>\n            <attribute name=\"useGlobalLock\" type=\"bool\" defaultValue=\"True\" />\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.windows.forms\">\n        <attribute name=\"jitDebugging\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.net/authenticationModules\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"type\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.net/connectionManagement\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"address\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"maxconnection\" required=\"true\" type=\"int\" defaultValue=\"1\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.net/defaultProxy\">\n        <element name=\"bypasslist\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowDuplicates=\"true\">\n                <attribute name=\"address\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"True\" />\n        <element name=\"module\">\n            <attribute name=\"type\" type=\"string\" />\n        </element>\n        <element name=\"proxy\">\n            <attribute name=\"autoDetect\" type=\"enum\" defaultValue=\"Unspecified\">\n                <enum name=\"false\" value=\"0\" />\n                <enum name=\"true\" value=\"1\" />\n                <enum name=\"Unspecified\" value=\"-1\" />\n            </attribute>\n            <attribute name=\"bypassonlocal\" type=\"enum\" defaultValue=\"Unspecified\">\n                <enum name=\"false\" value=\"0\" />\n                <enum name=\"true\" value=\"1\" />\n                <enum name=\"Unspecified\" value=\"-1\" />\n            </attribute>\n            <attribute name=\"proxyaddress\" type=\"string\" />\n            <attribute name=\"scriptLocation\" type=\"string\" />\n            <attribute name=\"usesystemdefault\" type=\"enum\" defaultValue=\"Unspecified\">\n                <enum name=\"false\" value=\"0\" />\n                <enum name=\"true\" value=\"1\" />\n                <enum name=\"Unspecified\" value=\"-1\" />\n            </attribute>\n        </element>\n        <attribute name=\"useDefaultCredentials\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.net/requestCaching\">\n        <element name=\"defaultFtpCachePolicy\">\n            <attribute name=\"policyLevel\" type=\"enum\" defaultValue=\"Default\">\n                <enum name=\"Default\" value=\"0\" />\n                <enum name=\"BypassCache\" value=\"1\" />\n                <enum name=\"CacheOnly\" value=\"2\" />\n                <enum name=\"CacheIfAvailable\" value=\"3\" />\n                <enum name=\"Revalidate\" value=\"4\" />\n                <enum name=\"Reload\" value=\"5\" />\n                <enum name=\"NoCacheNoStore\" value=\"6\" />\n            </attribute>\n        </element>\n        <element name=\"defaultHttpCachePolicy\">\n            <attribute name=\"maximumAge\" type=\"timeSpan\" defaultValue=\"10675199.02:48:05.4775807\" />\n            <attribute name=\"maximumStale\" type=\"timeSpan\" defaultValue=\"-10675199.02:48:05.4775808\" />\n            <attribute name=\"minimumFresh\" type=\"timeSpan\" defaultValue=\"-10675199.02:48:05.4775808\" />\n            <attribute name=\"policyLevel\" type=\"enum\" defaultValue=\"Default\">\n                <enum name=\"Default\" value=\"0\" />\n                <enum name=\"BypassCache\" value=\"1\" />\n                <enum name=\"CacheOnly\" value=\"2\" />\n                <enum name=\"CacheIfAvailable\" value=\"3\" />\n                <enum name=\"Revalidate\" value=\"4\" />\n                <enum name=\"Reload\" value=\"5\" />\n                <enum name=\"NoCacheNoStore\" value=\"6\" />\n                <enum name=\"CacheOrNextCacheOnly\" value=\"7\" />\n                <enum name=\"Refresh\" value=\"8\" />\n            </attribute>\n        </element>\n        <attribute name=\"defaultPolicyLevel\" type=\"enum\" defaultValue=\"BypassCache\">\n            <enum name=\"Default\" value=\"0\" />\n            <enum name=\"BypassCache\" value=\"1\" />\n            <enum name=\"CacheOnly\" value=\"2\" />\n            <enum name=\"CacheIfAvailable\" value=\"3\" />\n            <enum name=\"Revalidate\" value=\"4\" />\n            <enum name=\"Reload\" value=\"5\" />\n            <enum name=\"NoCacheNoStore\" value=\"6\" />\n        </attribute>\n        <attribute name=\"disableAllCaching\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"isPrivateCache\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"unspecifiedMaximumAge\" type=\"timeSpan\" defaultValue=\"1.00:00:00\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.net/settings\">\n        <element name=\"httpWebRequest\">\n            <attribute name=\"maximumErrorResponseLength\" type=\"int\" defaultValue=\"64\" />\n            <attribute name=\"maximumResponseHeadersLength\" type=\"int\" defaultValue=\"64\" />\n            <attribute name=\"maximumUnauthorizedUploadLength\" type=\"int\" defaultValue=\"-1\" />\n            <attribute name=\"useUnsafeHeaderParsing\" type=\"bool\" defaultValue=\"False\" />\n        </element>\n        <element name=\"ipv6\">\n            <attribute name=\"enabled\" type=\"bool\" defaultValue=\"False\" />\n        </element>\n        <element name=\"performanceCounters\">\n            <attribute name=\"enabled\" type=\"bool\" defaultValue=\"False\" />\n        </element>\n        <element name=\"servicePointManager\">\n            <attribute name=\"checkCertificateName\" type=\"bool\" defaultValue=\"True\" />\n            <attribute name=\"checkCertificateRevocationList\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"dnsRefreshTimeout\" type=\"int\" defaultValue=\"120000\" />\n            <attribute name=\"enableDnsRoundRobin\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"expect100Continue\" type=\"bool\" defaultValue=\"True\" />\n            <attribute name=\"useNagleAlgorithm\" type=\"bool\" defaultValue=\"True\" />\n        </element>\n        <element name=\"socket\">\n            <attribute name=\"alwaysUseCompletionPortsForAccept\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"alwaysUseCompletionPortsForConnect\" type=\"bool\" defaultValue=\"False\" />\n        </element>\n        <element name=\"webProxyScript\">\n            <attribute name=\"downloadTimeout\" type=\"timeSpan\" defaultValue=\"00:02:00\" />\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.net/webRequestModules\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"prefix\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"type\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.net/mailSettings/smtp\">\n        <attribute name=\"deliveryMethod\" type=\"enum\" defaultValue=\"Network\">\n            <enum name=\"Network\" value=\"0\" />\n            <enum name=\"SpecifiedPickupDirectory\" value=\"1\" />\n            <enum name=\"PickupDirectoryFromIis\" value=\"2\" />\n        </attribute>\n        <attribute name=\"from\" type=\"string\" />\n        <element name=\"network\">\n            <attribute name=\"defaultCredentials\" type=\"bool\" defaultValue=\"False\" />\n            <attribute name=\"host\" type=\"string\" />\n            <attribute name=\"password\" type=\"string\" />\n            <attribute name=\"port\" type=\"int\" defaultValue=\"25\" />\n            <attribute name=\"userName\" type=\"string\" />\n        </element>\n        <element name=\"specifiedPickupDirectory\">\n            <attribute name=\"pickupDirectoryLocation\" type=\"string\" />\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.transactions/defaultSettings\">\n        <attribute name=\"distributedTransactionManagerName\" type=\"string\" />\n        <attribute name=\"timeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" defaultValue=\"00:01:00\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.transactions/machineSettings\">\n        <attribute name=\"maxTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" defaultValue=\"00:10:00\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/deployment\">\n        <attribute name=\"retail\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/membership\">\n        <attribute name=\"defaultProvider\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"AspNetSqlMembershipProvider\" />\n        <attribute name=\"hashAlgorithmType\" type=\"string\" />\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n        <attribute name=\"userIsOnlineTimeWindow\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"1,2147483640,60\" timeSpanFormat=\"minutes\" defaultValue=\"15\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/processModel\">\n        <attribute name=\"autoConfig\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"clientConnectedCheck\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"00:00:05\" />\n        <attribute name=\"comAuthenticationLevel\" type=\"enum\" defaultValue=\"Connect\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"Call\" value=\"1\" />\n            <enum name=\"Connect\" value=\"2\" />\n            <enum name=\"Default\" value=\"3\" />\n            <enum name=\"Pkt\" value=\"4\" />\n            <enum name=\"PktIntegrity\" value=\"5\" />\n            <enum name=\"PktPrivacy\" value=\"6\" />\n        </attribute>\n        <attribute name=\"comImpersonationLevel\" type=\"enum\" defaultValue=\"Impersonate\">\n            <enum name=\"Default\" value=\"0\" />\n            <enum name=\"Anonymous\" value=\"1\" />\n            <enum name=\"Delegate\" value=\"2\" />\n            <enum name=\"Identify\" value=\"3\" />\n            <enum name=\"Impersonate\" value=\"4\" />\n        </attribute>\n        <attribute name=\"cpuMask\" type=\"int\" />\n        <attribute name=\"enable\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"idleTimeout\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"10675199.02:48:05.4775807\" />\n        <attribute name=\"logLevel\" type=\"enum\" defaultValue=\"Errors\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"All\" value=\"1\" />\n            <enum name=\"Errors\" value=\"2\" />\n        </attribute>\n        <attribute name=\"maxAppDomains\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"2000\" />\n        <attribute name=\"maxIoThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"20\" />\n        <attribute name=\"maxWorkerThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"20\" />\n        <attribute name=\"memoryLimit\" type=\"int\" defaultValue=\"60\" />\n        <attribute name=\"minIoThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"1\" />\n        <attribute name=\"minWorkerThreads\" type=\"int\" validationType=\"integerRange\" validationParameter=\"1,2147483646\" defaultValue=\"1\" />\n        <attribute name=\"password\" type=\"string\" defaultValue=\"AutoGenerate\" />\n        <attribute name=\"pingFrequency\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"10675199.02:48:05.4775807\" />\n        <attribute name=\"pingTimeout\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"10675199.02:48:05.4775807\" />\n        <attribute name=\"requestLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" allowInfinite=\"true\" defaultValue=\"2147483647\" />\n        <attribute name=\"requestQueueLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" allowInfinite=\"true\" defaultValue=\"5000\" />\n        <attribute name=\"responseDeadlockInterval\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" allowInfinite=\"true\" defaultValue=\"00:03:00\" />\n        <attribute name=\"responseRestartDeadlockInterval\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"00:03:00\" />\n        <attribute name=\"restartQueueLimit\" type=\"int\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" allowInfinite=\"true\" defaultValue=\"10\" />\n        <attribute name=\"serverErrorMessageFile\" type=\"string\" />\n        <attribute name=\"shutdownTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483647,1\" allowInfinite=\"true\" defaultValue=\"00:00:05\" />\n        <attribute name=\"timeout\" type=\"timeSpan\" allowInfinite=\"true\" defaultValue=\"10675199.02:48:05.4775807\" />\n        <attribute name=\"userName\" type=\"string\" defaultValue=\"machine\" />\n        <attribute name=\"webGarden\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n    <sectionSchema name=\"system.web/profile\">\n        <attribute name=\"automaticSaveEnabled\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"defaultProvider\" type=\"string\" validationType=\"nonEmptyString\" defaultValue=\"AspNetSqlProfileProvider\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"inherits\" type=\"string\" />\n        <element name=\"properties\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                <attribute name=\"allowAnonymous\" type=\"bool\" defaultValue=\"False\" />\n                <attribute name=\"customProviderData\" type=\"string\" />\n                <attribute name=\"defaultValue\" type=\"string\" />\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <attribute name=\"provider\" type=\"string\" />\n                <attribute name=\"readOnly\" type=\"bool\" defaultValue=\"False\" />\n                <attribute name=\"serializeAs\" type=\"enum\" defaultValue=\"ProviderSpecific\">\n                    <enum name=\"String\" value=\"0\" />\n                    <enum name=\"Xml\" value=\"1\" />\n                    <enum name=\"Binary\" value=\"2\" />\n                    <enum name=\"ProviderSpecific\" value=\"3\" />\n                </attribute>\n                <attribute name=\"type\" type=\"string\" defaultValue=\"string\" />\n            </collection>\n            <collection addElement=\"group\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n                    <attribute name=\"allowAnonymous\" type=\"bool\" defaultValue=\"False\" />\n                    <attribute name=\"customProviderData\" type=\"string\" />\n                    <attribute name=\"defaultValue\" type=\"string\" />\n                    <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" validationType=\"nonEmptyString\" />\n                    <attribute name=\"provider\" type=\"string\" />\n                    <attribute name=\"readOnly\" type=\"bool\" defaultValue=\"False\" />\n                    <attribute name=\"serializeAs\" type=\"enum\" defaultValue=\"ProviderSpecific\">\n                        <enum name=\"String\" value=\"0\" />\n                        <enum name=\"Xml\" value=\"1\" />\n                        <enum name=\"Binary\" value=\"2\" />\n                        <enum name=\"ProviderSpecific\" value=\"3\" />\n                    </attribute>\n                    <attribute name=\"type\" type=\"string\" defaultValue=\"string\" />\n                </collection>\n            </collection>\n        </element>\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.web/roleManager\">\n        <attribute name=\"cacheRolesInCookie\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"cookieName\" type=\"string\" validationType=\"requireTrimmedString\" defaultValue=\".ASPXROLES\" />\n        <attribute name=\"cookiePath\" type=\"string\" validationType=\"requireTrimmedString\" defaultValue=\"/\" />\n        <attribute name=\"cookieProtection\" type=\"enum\" defaultValue=\"All\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"Validation\" value=\"1\" />\n            <enum name=\"Encryption\" value=\"2\" />\n            <enum name=\"All\" value=\"3\" />\n        </attribute>\n        <attribute name=\"cookieRequireSSL\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"cookieSlidingExpiration\" type=\"bool\" defaultValue=\"True\" />\n        <attribute name=\"cookieTimeout\" type=\"timeSpan\" validationType=\"timeSpanRange\" validationParameter=\"0,2147483640,60\" allowInfinite=\"true\" timeSpanFormat=\"minutes\" defaultValue=\"30\" />\n        <attribute name=\"createPersistentCookie\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"defaultProvider\" type=\"string\" validationType=\"requireTrimmedString\" defaultValue=\"AspNetSqlRoleProvider\" />\n        <attribute name=\"domain\" type=\"string\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"False\" />\n        <attribute name=\"maxCachedResults\" type=\"int\" defaultValue=\"25\" />\n        <element name=\"providers\">\n            <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n                <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n                <attribute name=\"type\" required=\"true\" type=\"string\" />\n            </collection>\n        </element>\n    </sectionSchema>\n    <sectionSchema name=\"system.xml.serialization/dateTimeSerialization\">\n        <attribute name=\"mode\" type=\"enum\" defaultValue=\"Roundtrip\">\n            <enum name=\"Default\" value=\"0\" />\n            <enum name=\"Roundtrip\" value=\"1\" />\n            <enum name=\"Local\" value=\"2\" />\n        </attribute>\n    </sectionSchema>\n    <sectionSchema name=\"system.xml.serialization/schemaImporterExtensions\">\n        <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n            <attribute name=\"name\" required=\"true\" isUniqueKey=\"true\" type=\"string\" />\n            <attribute name=\"type\" required=\"true\" type=\"string\" />\n        </collection>\n    </sectionSchema>\n    <sectionSchema name=\"system.xml.serialization/xmlSerializer\">\n        <attribute name=\"checkDeserializeAdvances\" type=\"bool\" defaultValue=\"False\" />\n    </sectionSchema>\n</configSchema>\n"
  },
  {
    "path": "Tests/schema/IIS_schema.xml",
    "content": "<!--\n\n    IIS configuration schema.\n\n    Please do not edit this file. To add configuration sections to the schema,\n    put them in .xml files similar to this one, in this directory. They will\n    be picked up automatically at application pool startup.\n\n-->\n\n<configSchema>\n\n  <!--\n\n    The schema for each configuration section is defined in a <sectionSchema>\n    XML element. There is no schema definition for section groups.\n\n    The following format is used to document the schema:\n    <attribute-name>=\"<default>\"  [<metadata>] [<description>]\n\n    <sectionSchema\n        name=\"\"  [String, Required] [XML full path of the section]\n    />\n\n    <attribute\n        name=\"\"  [String, Required] [XML name of the attribute]\n        type=\"\"  [bool|enum|flags|uint|int|int64|string|timeSpan, Required] [Runtime type]\n        required=\"false\"  [bool] [Indicates if it must be set]\n        isUniqueKey=\"false\"  [bool] [Serves as the collection key]\n        isCombinedKey=\"false\"  [bool] [Part of a multi-attribute key]\n        displayHex=\"false\" [bool] [Indicates if value should be written in hex format]\n        caseSensitive=\"false\" [bool] [Indicates if attribute value is case-sensitive]\n        defaultValue=\"\"  [String] [Default value or comma-delimited flags]\n        encrypted=\"false\"  [bool] [Indicates if the value persisted is encrypted]\n        allowInfinite=\"false\"  [bool] [Indicates if \"Infinite\" can be set]\n        timeSpanFormat=\"string\"  [string|seconds|minutes] [hh:mm:ss or number]\n        expanded=\"false\"  [bool] [Environment variables are expanded when read]\n        validationType=\"\"  [See validation below]\n        validationParameter=\"\"  [See validation below]\n    />\n\n    <element\n        name=\"\"  [String, Required] [XML name of the element]\n        isCollectionDefault=\"false\"  [bool] [Indicates if default values are held for other elements in this collection]\n    />\n\n    <collection\n        addElement=\"\"  [String] [Name of Add directive, if supported]\n        removeElement=\"\"  [String] [Name of Remove directive, if supported]\n        clearElement=\"\"  [String] [Name of Clear directive, if supported]\n        defaultElement=\"\"  [applicationDefaults|applicationPoolDefaults|siteDefaults|virtualDirectoryDefaults] [See isCollectionDefault]\n        mergeAppend=\"true\"  [bool] [Indicates whether or not deepest set values are appended]\n        allowDuplicates=\"false\"  [bool] [Indicates if multiple elements may have the same key]\n        allowUnrecognizedAttributes=\"false\"  [bool] [Indicates if non-schema attributes are ok]\n    />\n\n    <enum\n        name=\"\"  [String, Required] [Friendly name of the enumerator]\n        value=\"\"  [int, Required] [Numeric value]\n    />\n\n    <flags  [Can be used together to form combinations, unlike enums]\n        name=\"\"  [String, Required] [Friendly name of the flag]\n        value=\"\"  [int in powers of 2, Required] [Numeric value]\n    />\n\n    Attribute validation is done when parsing the XML and when calling the API\n    to set values:\n\n        The following validator fails on these characters: |<>&\\\"/[]+=;:,?*@\n        validationType=\"applicationPoolName\"\n        validationParameter=\"\"\n\n        The following validator fails on these characters: /?\n        validationType=\"siteName\"\n        validationParameter=\"\"\n\n        The following validator fails if value is not valid application path.\n        Valid applicationPath starts with \"/\" and doesn't end with \"/\" except\n        for path \"/\". Segment between two \"/\" cannot be \".\" or \"..\"\n            validationType=\"applicationPath\"\n        validationParameter=\"\"\n\n        The following validator fails if value is not valid virtual directory path.\n        Rules for virtualDirectoryPath are same as applicationPath\n            validationType=\"virtualDirectoryPath\"\n        validationParameter=\"\"\n\n        The following validator fails if value is outside [inside] range, in integers.\n        validationType=\"integerRange\"\n        validationParameter=\"<minimum>,<maximum>[,exclude]\"\n\n        The following validator fails if string value is not set.\n        validationType=\"nonEmptyString\"\n        validationParameter=\"\"\n\n        The following validator fails if value is outside [inside] range, in seconds.\n        validationType=\"timeSpanRange\"\n        validationParameter=\"<minimum>,<maximum>,<granularity>[,exclude]\"\n\n        The following validator fails if white space is set at start or end of value.\n        validationType=\"requireTrimmedString\"\n        validationParameter=\"\"\n\n  -->\n\n  <sectionSchema name=\"system.applicationHost/applicationPools\">\n    <collection addElement=\"add\" defaultElement=\"applicationPoolDefaults\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"applicationPoolName\" />\n      <attribute name=\"queueLength\" type=\"uint\" defaultValue=\"1000\" validationType=\"integerRange\" validationParameter=\"10,65535\"/>\n      <attribute name=\"autoStart\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"enable32BitAppOnWin64\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"managedRuntimeVersion\" type=\"string\" defaultValue=\"\" />\n      <attribute name=\"managedRuntimeLoader\" type=\"string\" defaultValue=\"webengine4.dll\" />\n      <attribute name=\"enableConfigurationOverride\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"managedPipelineMode\" type=\"enum\" defaultValue=\"Integrated\">\n        <enum name=\"Integrated\" value=\"0\" />\n        <enum name=\"Classic\" value=\"1\" />\n      </attribute>\n      <attribute name=\"CLRConfigFile\" type=\"string\" defaultValue=\"\" expanded=\"true\" />\n      <attribute name=\"passAnonymousToken\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"startMode\" type=\"enum\" defaultValue=\"OnDemand\">\n        <enum name=\"OnDemand\" value=\"0\" />\n        <enum name=\"AlwaysRunning\" value=\"1\" />\n      </attribute>\n      <element name=\"processModel\">\n        <attribute name=\"identityType\" type=\"enum\" defaultValue=\"ApplicationPoolIdentity\">\n          <enum name=\"LocalSystem\" value=\"0\"/>\n          <enum name=\"LocalService\" value=\"1\"/>\n          <enum name=\"NetworkService\" value=\"2\"/>\n          <enum name=\"SpecificUser\" value=\"3\"/>\n          <enum name=\"ApplicationPoolIdentity\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"userName\" type=\"string\"/>\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"loadUserProfile\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"setProfileEnvironment\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"logonType\" type=\"enum\" defaultValue=\"LogonBatch\">\n          <enum name=\"LogonBatch\" value=\"0\"/>\n          <enum name=\"LogonService\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"manualGroupMembership\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"idleTimeout\" type=\"timeSpan\" defaultValue=\"00:20:00\" validationType=\"timeSpanRange\" validationParameter=\"0,2592000,60\"/>\n        <attribute name=\"idleTimeoutAction\" type=\"enum\" defaultValue=\"Terminate\">\n          <enum name=\"Terminate\" value=\"0\"/>\n          <enum name=\"Suspend\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"maxProcesses\" type=\"uint\" defaultValue=\"1\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n        <attribute name=\"shutdownTimeLimit\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"startupTimeLimit\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"pingingEnabled\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"pingInterval\" type=\"timeSpan\" defaultValue=\"00:00:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"pingResponseTime\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"logEventOnProcessModel\" type=\"flags\" defaultValue=\"IdleTimeout\" >\n          <flag name=\"IdleTimeout\" value=\"1\"/>\n        </attribute>\n      </element>\n      <element name=\"recycling\">\n        <attribute name=\"disallowOverlappingRotation\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"disallowRotationOnConfigChange\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"logEventOnRecycle\" type=\"flags\" defaultValue=\"Time, Memory, PrivateMemory\" >\n          <flag name=\"Time\" value=\"1\"/>\n          <flag name=\"Requests\" value=\"2\"/>\n          <flag name=\"Schedule\" value=\"4\"/>\n          <flag name=\"Memory\" value=\"8\"/>\n          <flag name=\"IsapiUnhealthy\" value=\"16\"/>\n          <flag name=\"OnDemand\" value=\"32\"/>\n          <flag name=\"ConfigChange\" value=\"64\"/>\n          <flag name=\"PrivateMemory\" value=\"128\"/>\n        </attribute>\n        <element name=\"periodicRestart\">\n          <attribute name=\"memory\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"privateMemory\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"requests\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"time\" type=\"timeSpan\" defaultValue=\"29:00:00\" validationType=\"timeSpanRange\" validationParameter=\"0,25920000,60\"/>\n          <element name=\"schedule\">\n            <collection addElement=\"add\" clearElement=\"clear\">\n              <attribute name=\"value\" type=\"timeSpan\" required=\"true\" isUniqueKey=\"true\" validationType=\"timeSpanRange\" validationParameter=\"0,86399,60\" />\n            </collection>\n          </element>\n        </element>\n      </element>\n      <element name=\"failure\">\n        <attribute name=\"loadBalancerCapabilities\" type=\"enum\" defaultValue=\"HttpLevel\">\n          <enum name=\"TcpLevel\" value=\"1\"/>\n          <enum name=\"HttpLevel\" value=\"2\"/>\n        </attribute>\n        <attribute name=\"orphanWorkerProcess\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"orphanActionExe\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"orphanActionParams\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"rapidFailProtection\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"rapidFailProtectionInterval\" type=\"timeSpan\" defaultValue=\"00:05:00\" validationType=\"timeSpanRange\" validationParameter=\"60,8640000,60\"/>\n        <attribute name=\"rapidFailProtectionMaxCrashes\" type=\"uint\" defaultValue=\"5\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" />\n        <attribute name=\"autoShutdownExe\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"autoShutdownParams\" type=\"string\"  expanded=\"true\"/>\n      </element>\n      <element name=\"cpu\">\n        <attribute name=\"limit\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,100000\"/>\n        <attribute name=\"action\" type=\"enum\" defaultValue=\"NoAction\">\n          <enum name=\"NoAction\" value=\"0\"/>\n          <enum name=\"KillW3wp\" value=\"1\"/>\n          <enum name=\"Throttle\" value=\"2\"/>\n          <enum name=\"ThrottleUnderLoad\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"resetInterval\" type=\"timeSpan\" defaultValue=\"00:05:00\" validationType=\"timeSpanRange\" validationParameter=\"0,86400,60\"/>\n        <attribute name=\"smpAffinitized\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"smpProcessorAffinityMask\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"smpProcessorAffinityMask2\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"processorGroup\" type=\"int\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,2147483647\"/>\n        <attribute name=\"numaNodeAssignment\" type=\"enum\" defaultValue=\"MostAvailableMemory\">\n            <enum name=\"MostAvailableMemory\" value=\"0\"/>\n            <enum name=\"WindowsScheduling\" value=\"1\"/>\n        </attribute >\n        <attribute name=\"numaNodeAffinityMode\" type=\"enum\" defaultValue=\"Soft\">\n            <enum name=\"Soft\" value=\"0\" />\n            <enum name=\"Hard\" value=\"1\" />\n        </attribute>\n      </element>\n      <element name=\"environmentVariables\">\n        <collection addElement=\"add\" removeElement=\"remove\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" isUniqueKey=\"true\"/>\n          <attribute name=\"value\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n        </collection>\n      </element>\n    </collection>\n    <element name=\"applicationPoolDefaults\" isCollectionDefault=\"true\" >\n      <attribute name=\"name\" type=\"string\" validationType=\"applicationPoolName\" />\n      <attribute name=\"queueLength\" type=\"uint\" defaultValue=\"1000\" validationType=\"integerRange\" validationParameter=\"10,65535\"/>\n      <attribute name=\"autoStart\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"enable32BitAppOnWin64\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"managedRuntimeVersion\" type=\"string\" defaultValue=\"\" />\n      <attribute name=\"managedRuntimeLoader\" type=\"string\" defaultValue=\"webengine4.dll\" />\n      <attribute name=\"enableConfigurationOverride\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"managedPipelineMode\" type=\"enum\" defaultValue=\"Integrated\">\n        <enum name=\"Integrated\" value=\"0\" />\n        <enum name=\"Classic\" value=\"1\" />\n      </attribute>\n      <attribute name=\"CLRConfigFile\" type=\"string\" defaultValue=\"\" expanded=\"true\" />\n      <attribute name=\"passAnonymousToken\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"startMode\" type=\"enum\" defaultValue=\"OnDemand\">\n        <enum name=\"OnDemand\" value=\"0\" />\n        <enum name=\"AlwaysRunning\" value=\"1\" />\n      </attribute>\n      <element name=\"processModel\">\n        <attribute name=\"identityType\" type=\"enum\" defaultValue=\"ApplicationPoolIdentity\">\n          <enum name=\"LocalSystem\" value=\"0\"/>\n          <enum name=\"LocalService\" value=\"1\"/>\n          <enum name=\"NetworkService\" value=\"2\"/>\n          <enum name=\"SpecificUser\" value=\"3\"/>\n          <enum name=\"ApplicationPoolIdentity\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"userName\" type=\"string\"/>\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"loadUserProfile\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"setProfileEnvironment\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"logonType\" type=\"enum\" defaultValue=\"LogonBatch\">\n          <enum name=\"LogonBatch\" value=\"0\"/>\n          <enum name=\"LogonService\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"manualGroupMembership\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"idleTimeout\" type=\"timeSpan\" defaultValue=\"00:20:00\" validationType=\"timeSpanRange\" validationParameter=\"0,2592000,60\"/>\n        <attribute name=\"idleTimeoutAction\" type=\"enum\" defaultValue=\"Terminate\">\n          <enum name=\"Terminate\" value=\"0\"/>\n          <enum name=\"Suspend\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"maxProcesses\" type=\"uint\" defaultValue=\"1\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n        <attribute name=\"shutdownTimeLimit\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"startupTimeLimit\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"pingingEnabled\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"pingInterval\" type=\"timeSpan\" defaultValue=\"00:00:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"pingResponseTime\" type=\"timeSpan\" defaultValue=\"00:01:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\"/>\n        <attribute name=\"logEventOnProcessModel\" type=\"flags\" defaultValue=\"IdleTimeout\" >\n          <flag name=\"IdleTimeout\" value=\"1\"/>\n        </attribute>\n      </element>\n      <element name=\"recycling\">\n        <attribute name=\"disallowOverlappingRotation\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"disallowRotationOnConfigChange\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"logEventOnRecycle\" type=\"flags\" defaultValue=\"Time, Memory, PrivateMemory\" >\n          <flag name=\"Time\" value=\"1\"/>\n          <flag name=\"Requests\" value=\"2\"/>\n          <flag name=\"Schedule\" value=\"4\"/>\n          <flag name=\"Memory\" value=\"8\"/>\n          <flag name=\"IsapiUnhealthy\" value=\"16\"/>\n          <flag name=\"OnDemand\" value=\"32\"/>\n          <flag name=\"ConfigChange\" value=\"64\"/>\n          <flag name=\"PrivateMemory\" value=\"128\"/>\n        </attribute>\n        <element name=\"periodicRestart\">\n          <attribute name=\"memory\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"privateMemory\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"requests\" type=\"uint\" defaultValue=\"0\" />\n          <attribute name=\"time\" type=\"timeSpan\" defaultValue=\"29:00:00\" validationType=\"timeSpanRange\" validationParameter=\"0,25920000,60\"/>\n          <element name=\"schedule\">\n            <collection addElement=\"add\" clearElement=\"clear\">\n              <attribute name=\"value\" type=\"timeSpan\" required=\"true\" isUniqueKey=\"true\" validationType=\"timeSpanRange\" validationParameter=\"0,86399,60\" />\n            </collection>\n          </element>\n        </element>\n      </element>\n      <element name=\"failure\">\n        <attribute name=\"loadBalancerCapabilities\" type=\"enum\" defaultValue=\"HttpLevel\">\n          <enum name=\"TcpLevel\" value=\"1\"/>\n          <enum name=\"HttpLevel\" value=\"2\"/>\n        </attribute>\n        <attribute name=\"orphanWorkerProcess\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"orphanActionExe\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"orphanActionParams\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"rapidFailProtection\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"rapidFailProtectionInterval\" type=\"timeSpan\" defaultValue=\"00:05:00\" validationType=\"timeSpanRange\" validationParameter=\"60,8640000,60\"/>\n        <attribute name=\"rapidFailProtectionMaxCrashes\" type=\"uint\" defaultValue=\"5\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" />\n        <attribute name=\"autoShutdownExe\" type=\"string\" expanded=\"true\"/>\n        <attribute name=\"autoShutdownParams\" type=\"string\"  expanded=\"true\"/>\n      </element>\n      <element name=\"cpu\">\n        <attribute name=\"limit\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,100000\"/>\n        <attribute name=\"action\" type=\"enum\" defaultValue=\"NoAction\">\n          <enum name=\"NoAction\" value=\"0\"/>\n          <enum name=\"KillW3wp\" value=\"1\"/>\n          <enum name=\"Throttle\" value=\"2\"/>\n          <enum name=\"ThrottleUnderLoad\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"resetInterval\" type=\"timeSpan\" defaultValue=\"00:05:00\" validationType=\"timeSpanRange\" validationParameter=\"0,86400,60\"/>\n        <attribute name=\"smpAffinitized\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"smpProcessorAffinityMask\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"smpProcessorAffinityMask2\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"processorGroup\" type=\"int\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,2147483647\"/>\n        <attribute name=\"numaNodeAssignment\" type=\"enum\" defaultValue=\"MostAvailableMemory\">\n            <enum name=\"MostAvailableMemory\" value=\"0\"/>\n            <enum name=\"WindowsScheduling\" value=\"1\"/>\n        </attribute >\n        <attribute name=\"numaNodeAffinityMode\" type=\"enum\" defaultValue=\"Soft\">\n            <enum name=\"Soft\" value=\"0\" />\n            <enum name=\"Hard\" value=\"1\" />\n        </attribute>\n      </element>\n      <element name=\"environmentVariables\">\n        <collection addElement=\"add\" removeElement=\"remove\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" isUniqueKey=\"true\"/>\n          <attribute name=\"value\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n        </collection>\n      </element>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/configHistory\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"path\" type=\"string\" defaultValue=\"%SYSTEMDRIVE%\\inetpub\\history\" />\n    <attribute name=\"maxHistories\" type=\"uint\" defaultValue=\"10\" validationType=\"integerRange\" validationParameter=\"1,4294967295\"/>\n    <attribute name=\"period\" type=\"timeSpan\" defaultValue=\"00:02:00\" validationType=\"timeSpanRange\" validationParameter=\"10,2147483647,1\"/>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/customMetadata\">\n    <collection addElement=\"key\">\n      <attribute name=\"path\" type=\"string\" isUniqueKey=\"true\" />\n      <collection addElement=\"property\">\n        <attribute name=\"id\" type=\"uint\" isUniqueKey=\"true\" />\n        <attribute name=\"dataType\" type=\"enum\" required=\"true\">\n          <enum name=\"DWord\" value=\"1\" />\n          <enum name=\"String\" value=\"2\" />\n          <enum name=\"Binary\" value=\"3\" />\n          <enum name=\"ExpandSZ\" value=\"4\" />\n          <enum name=\"MultiSZ\" value=\"5\" />\n        </attribute>\n        <attribute name=\"userType\" type=\"uint\" defaultValue=\"1\" />\n        <attribute name=\"attributes\" type=\"flags\" defaultValue=\"Inherit\">\n          <flag name=\"None\" value=\"0\" />\n          <flag name=\"Inherit\" value=\"1\" />\n          <flag name=\"PartialPath\" value=\"2\" />\n          <flag name=\"Secure\" value=\"4\" />\n          <flag name=\"Reference\" value=\"8\" />\n          <flag name=\"Volatile\" value=\"16\" />\n          <flag name=\"IsInherited\" value=\"32\" />\n          <flag name=\"InsertPath\" value=\"64\" />\n          <flag name=\"LocalMachineOnly\" value=\"128\" />\n          <flag name=\"NonSecureOnly\" value=\"256\" />\n        </attribute>\n        <attribute name=\"value\" type=\"string\" caseSensitive=\"true\" />\n      </collection>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/listenerAdapters\">\n    <collection addElement=\"add\" >\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"identity\" type=\"string\" />\n      <attribute name=\"protocolManagerDll\" type=\"string\" />\n      <attribute name=\"protocolManagerDllInitFunction\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/log\">\n    <attribute name=\"logInUTF8\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"centralLogFileMode\" type=\"enum\" defaultValue=\"Site\" >\n      <enum name=\"Site\" value=\"0\"/>\n      <enum name=\"CentralBinary\" value=\"1\"/>\n      <enum name=\"CentralW3C\" value=\"2\"/>\n    </attribute>\n    <element name=\"centralBinaryLogFile\">\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\LogFiles\" />\n      <attribute name=\"period\" type=\"enum\" defaultValue=\"Daily\">\n        <enum name=\"Hourly\" value=\"4\"/>\n        <enum name=\"Daily\" value=\"1\"/>\n        <enum name=\"Weekly\" value=\"2\"/>\n        <enum name=\"Monthly\" value=\"3\"/>\n        <enum name=\"MaxSize\" value=\"0\"/>\n      </attribute>\n      <attribute name=\"truncateSize\" type=\"int64\" defaultValue=\"20971520\" validationType=\"integerRange\" validationParameter=\"1048576,4294967295\" />\n      <attribute name=\"localTimeRollover\" type=\"bool\" defaultValue=\"false\"/>\n    </element>\n    <element name=\"centralW3CLogFile\">\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\LogFiles\" validationType=\"nonEmptyString\" />\n      <attribute name=\"period\" type=\"enum\" defaultValue=\"Daily\">\n        <enum name=\"Hourly\" value=\"4\"/>\n        <enum name=\"Daily\" value=\"1\"/>\n        <enum name=\"Weekly\" value=\"2\"/>\n        <enum name=\"Monthly\" value=\"3\"/>\n        <enum name=\"MaxSize\" value=\"0\"/>\n      </attribute>\n      <attribute name=\"truncateSize\" type=\"int64\" defaultValue=\"20971520\" validationType=\"integerRange\" validationParameter=\"1048576,4294967295\" />\n      <attribute name=\"localTimeRollover\" type=\"bool\" defaultValue=\"false\"/>\n      <attribute name=\"logExtFileFlags\" type=\"flags\" defaultValue=\"Date, Time, ClientIP, UserName, SiteName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer\">\n        <flag name=\"Date\" value=\"1\"/>\n        <flag name=\"Time\" value=\"2\"/>\n        <flag name=\"ClientIP\" value=\"4\"/>\n        <flag name=\"UserName\" value=\"8\"/>\n        <flag name=\"SiteName\" value=\"16\"/>\n        <flag name=\"ComputerName\" value=\"32\"/>\n        <flag name=\"ServerIP\" value=\"64\"/>\n        <flag name=\"Method\" value=\"128\"/>\n        <flag name=\"UriStem\" value=\"256\"/>\n        <flag name=\"UriQuery\" value=\"512\"/>\n        <flag name=\"HttpStatus\" value=\"1024\"/>\n        <flag name=\"Win32Status\" value=\"2048\"/>\n        <flag name=\"BytesSent\" value=\"4096\"/>\n        <flag name=\"BytesRecv\" value=\"8192\"/>\n        <flag name=\"TimeTaken\" value=\"16384\"/>\n        <flag name=\"ServerPort\" value=\"32768\"/>\n        <flag name=\"UserAgent\" value=\"65536\"/>\n        <flag name=\"Cookie\" value=\"131072\"/>\n        <flag name=\"Referer\" value=\"262144\"/>\n        <flag name=\"ProtocolVersion\" value=\"524288\"/>\n        <flag name=\"Host\" value=\"1048576\"/>\n        <flag name=\"HttpSubStatus\" value=\"2097152\"/>\n      </attribute>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/serviceAutoStartProviders\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"type\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/sites\">\n    <collection addElement=\"site\" defaultElement=\"siteDefaults\" >\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"siteName\" />\n      <attribute name=\"id\" type=\"uint\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"serverAutoStart\" type=\"bool\" defaultValue=\"true\" />\n      <element name=\"bindings\">\n        <collection addElement=\"binding\" clearElement=\"clear\">\n          <attribute name=\"protocol\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"bindingInformation\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"sslFlags\" type=\"uint\" defaultValue=\"0\" />\n        </collection>\n      </element>\n      <element name=\"limits\">\n        <attribute name=\"maxBandwidth\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,1023,exclude\" defaultValue=\"4294967295\"/>\n        <attribute name=\"maxConnections\" type=\"uint\" defaultValue=\"4294967295\" />\n        <attribute name=\"connectionTimeout\" type=\"timeSpan\" defaultValue=\"00:02:00\" validationType=\"timeSpanRange\" validationParameter=\"0,65535,1\" />\n        <attribute name=\"maxUrlSegments\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,16383\" defaultValue=\"32\" />\n      </element>\n      <element name=\"logFile\">\n        <attribute name=\"logExtFileFlags\" type=\"flags\" defaultValue=\"Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer\">\n          <flag name=\"Date\" value=\"1\"/>\n          <flag name=\"Time\" value=\"2\"/>\n          <flag name=\"ClientIP\" value=\"4\"/>\n          <flag name=\"UserName\" value=\"8\"/>\n          <flag name=\"SiteName\" value=\"16\"/>\n          <flag name=\"ComputerName\" value=\"32\"/>\n          <flag name=\"ServerIP\" value=\"64\"/>\n          <flag name=\"Method\" value=\"128\"/>\n          <flag name=\"UriStem\" value=\"256\"/>\n          <flag name=\"UriQuery\" value=\"512\"/>\n          <flag name=\"HttpStatus\" value=\"1024\"/>\n          <flag name=\"Win32Status\" value=\"2048\"/>\n          <flag name=\"BytesSent\" value=\"4096\"/>\n          <flag name=\"BytesRecv\" value=\"8192\"/>\n          <flag name=\"TimeTaken\" value=\"16384\"/>\n          <flag name=\"ServerPort\" value=\"32768\"/>\n          <flag name=\"UserAgent\" value=\"65536\"/>\n          <flag name=\"Cookie\" value=\"131072\"/>\n          <flag name=\"Referer\" value=\"262144\"/>\n          <flag name=\"ProtocolVersion\" value=\"524288\"/>\n          <flag name=\"Host\" value=\"1048576\"/>\n          <flag name=\"HttpSubStatus\" value=\"2097152\"/>\n        </attribute>\n        <attribute name=\"customLogPluginClsid\" type=\"string\" defaultValue=\"\"/>\n        <attribute name=\"logFormat\" type=\"enum\" defaultValue=\"W3C\">\n          <enum name=\"IIS\" value=\"0\"/>\n          <enum name=\"NCSA\" value=\"1\"/>\n          <enum name=\"W3C\" value=\"2\"/>\n          <enum name=\"Custom\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"logTargetW3C\" type=\"flags\" defaultValue=\"File\">\n          <flag name=\"File\" value=\"1\"/>\n          <flag name=\"ETW\" value=\"2\"/>\n        </attribute>\n        <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\LogFiles\" validationType=\"nonEmptyString\" />\n        <attribute name=\"period\" type=\"enum\" defaultValue=\"Daily\">\n          <enum name=\"MaxSize\" value=\"0\"/>\n          <enum name=\"Daily\" value=\"1\"/>\n          <enum name=\"Weekly\" value=\"2\"/>\n          <enum name=\"Monthly\" value=\"3\"/>\n          <enum name=\"Hourly\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"truncateSize\" type=\"int64\" defaultValue=\"20971520\" validationType=\"integerRange\" validationParameter=\"1048576,4294967295\" />\n        <attribute name=\"localTimeRollover\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"logSiteId\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"flushByEntryCountW3CLog\" type=\"uint\" defaultValue=\"0\" />\n        <attribute name=\"maxLogLineLength\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"2,65536\" defaultValue=\"65536\" />\n        <element name=\"customFields\">\n          <attribute name=\"maxCustomFieldLength\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"2,65536\" defaultValue=\"4096\" />\n          <collection addElement=\"add\" clearElement=\"clear\">\n            <attribute name=\"logFieldName\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n            <attribute name=\"sourceName\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n            <attribute name=\"sourceType\" type=\"enum\" required=\"true\" >\n              <enum name=\"RequestHeader\" value=\"0\"/>\n              <enum name=\"ResponseHeader\" value=\"1\"/>\n              <enum name=\"ServerVariable\" value=\"2\"/>\n            </attribute>\n          </collection>\n        </element>\n      </element>\n      <element name=\"traceFailedRequestsLogging\">\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\FailedReqLogFiles\"/>\n        <attribute name=\"maxLogFiles\" type=\"uint\" defaultValue=\"50\" validationType=\"integerRange\" validationParameter=\"1,10000\"/>\n        <attribute name=\"maxLogFileSizeKB\" type=\"uint\" defaultValue=\"1024\" validationType=\"integerRange\" validationParameter=\"0,1048576\"/>\n        <attribute name=\"customActionsEnabled\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n      <collection addElement=\"application\" defaultElement=\"applicationDefaults\" >\n        <attribute name=\"path\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"applicationPath\" />\n        <attribute name=\"applicationPool\" type=\"string\" validationType=\"applicationPoolName\"/>\n        <attribute name=\"enabledProtocols\" type=\"string\" defaultValue=\"http\"/>\n        <attribute name=\"serviceAutoStartEnabled\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"serviceAutoStartProvider\" type=\"string\" />\n        <attribute name=\"preloadEnabled\" type=\"bool\" defaultValue=\"false\" />\n        <collection addElement=\"virtualDirectory\" defaultElement=\"virtualDirectoryDefaults\" >\n          <attribute name=\"path\" type=\"string\" isUniqueKey=\"true\" validationType=\"virtualDirectoryPath\" />\n          <attribute name=\"physicalPath\" type=\"string\" expanded=\"true\" />\n          <attribute name=\"userName\" type=\"string\" />\n          <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n          <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n            <enum name=\"Interactive\" value=\"0\"/>\n            <enum name=\"Batch\" value=\"1\"/>\n            <enum name=\"Network\" value=\"2\"/>\n            <enum name=\"ClearText\" value=\"3\"/>\n          </attribute>\n          <attribute name=\"allowSubDirConfig\" type=\"bool\" defaultValue=\"true\"/>\n        </collection>\n        <element name=\"virtualDirectoryDefaults\" isCollectionDefault=\"true\">\n          <attribute name=\"path\" type=\"string\" validationType=\"virtualDirectoryPath\"/>\n          <attribute name=\"physicalPath\" type=\"string\" expanded=\"true\" />\n          <attribute name=\"userName\" type=\"string\"/>\n          <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n          <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n            <enum name=\"Interactive\" value=\"0\"/>\n            <enum name=\"Batch\" value=\"1\"/>\n            <enum name=\"Network\" value=\"2\"/>\n            <enum name=\"ClearText\" value=\"3\"/>\n          </attribute>\n          <attribute name=\"allowSubDirConfig\" type=\"bool\" defaultValue=\"true\"/>\n        </element>\n      </collection>\n      <element name=\"applicationDefaults\" isCollectionDefault=\"true\">\n        <attribute name=\"path\" type=\"string\" validationType=\"applicationPath\"/>\n        <attribute name=\"applicationPool\" type=\"string\" validationType=\"applicationPoolName\"/>\n        <attribute name=\"enabledProtocols\" type=\"string\" defaultValue=\"http\"/>\n        <attribute name=\"serviceAutoStartEnabled\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"serviceAutoStartProvider\" type=\"string\" />\n        <attribute name=\"preloadEnabled\" type=\"bool\" defaultValue=\"false\" />\n      </element>\n      <element name=\"virtualDirectoryDefaults\" isCollectionDefault=\"true\">\n        <attribute name=\"path\" type=\"string\" validationType=\"virtualDirectoryPath\"/>\n        <attribute name=\"physicalPath\" type=\"string\" expanded=\"true\" />\n        <attribute name=\"userName\" type=\"string\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n          <enum name=\"Interactive\" value=\"0\"/>\n          <enum name=\"Batch\" value=\"1\"/>\n          <enum name=\"Network\" value=\"2\"/>\n          <enum name=\"ClearText\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"allowSubDirConfig\" type=\"bool\" defaultValue=\"true\"/>\n      </element>\n    </collection>\n    <element name=\"siteDefaults\" isCollectionDefault=\"true\">\n      <attribute name=\"name\" type=\"string\" validationType=\"siteName\" />\n      <attribute name=\"id\" type=\"uint\" />\n      <attribute name=\"serverAutoStart\" type=\"bool\" defaultValue=\"true\" />\n      <element name=\"bindings\">\n        <collection addElement=\"binding\" clearElement=\"clear\">\n          <attribute name=\"protocol\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"bindingInformation\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"sslFlags\" type=\"uint\" defaultValue=\"0\" />\n        </collection>\n      </element>\n      <element name=\"limits\">\n        <attribute name=\"maxBandwidth\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,1023,exclude\" defaultValue=\"4294967295\"/>\n        <attribute name=\"maxConnections\" type=\"uint\" defaultValue=\"4294967295\"/>\n        <attribute name=\"connectionTimeout\" type=\"timeSpan\" defaultValue=\"00:02:00\" validationType=\"timeSpanRange\" validationParameter=\"0,65535,1\"/>\n        <attribute name=\"maxUrlSegments\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,16383\" defaultValue=\"32\" />\n      </element>\n      <element name=\"logFile\">\n        <attribute name=\"logExtFileFlags\" type=\"flags\" defaultValue=\"Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, UriQuery, TimeTaken, HttpStatus, Win32Status, ServerPort, UserAgent, HttpSubStatus, Referer\">\n          <flag name=\"Date\" value=\"1\"/>\n          <flag name=\"Time\" value=\"2\"/>\n          <flag name=\"ClientIP\" value=\"4\"/>\n          <flag name=\"UserName\" value=\"8\"/>\n          <flag name=\"SiteName\" value=\"16\"/>\n          <flag name=\"ComputerName\" value=\"32\"/>\n          <flag name=\"ServerIP\" value=\"64\"/>\n          <flag name=\"Method\" value=\"128\"/>\n          <flag name=\"UriStem\" value=\"256\"/>\n          <flag name=\"UriQuery\" value=\"512\"/>\n          <flag name=\"HttpStatus\" value=\"1024\"/>\n          <flag name=\"Win32Status\" value=\"2048\"/>\n          <flag name=\"BytesSent\" value=\"4096\"/>\n          <flag name=\"BytesRecv\" value=\"8192\"/>\n          <flag name=\"TimeTaken\" value=\"16384\"/>\n          <flag name=\"ServerPort\" value=\"32768\"/>\n          <flag name=\"UserAgent\" value=\"65536\"/>\n          <flag name=\"Cookie\" value=\"131072\"/>\n          <flag name=\"Referer\" value=\"262144\"/>\n          <flag name=\"ProtocolVersion\" value=\"524288\"/>\n          <flag name=\"Host\" value=\"1048576\"/>\n          <flag name=\"HttpSubStatus\" value=\"2097152\"/>\n        </attribute>\n        <attribute name=\"customLogPluginClsid\" type=\"string\" defaultValue=\"\"/>\n        <attribute name=\"logFormat\" type=\"enum\" defaultValue=\"W3C\">\n          <enum name=\"IIS\" value=\"0\"/>\n          <enum name=\"NCSA\" value=\"1\"/>\n          <enum name=\"W3C\" value=\"2\"/>\n          <enum name=\"Custom\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"logTargetW3C\" type=\"flags\" defaultValue=\"File\">\n          <flag name=\"File\" value=\"1\"/>\n          <flag name=\"ETW\" value=\"2\"/>\n        </attribute>\n        <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\logs\\LogFiles\"/>\n        <attribute name=\"period\" type=\"enum\" defaultValue=\"Daily\">\n          <enum name=\"MaxSize\" value=\"0\"/>\n          <enum name=\"Daily\" value=\"1\"/>\n          <enum name=\"Weekly\" value=\"2\"/>\n          <enum name=\"Monthly\" value=\"3\"/>\n          <enum name=\"Hourly\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"truncateSize\" type=\"int64\" defaultValue=\"20971520\" validationType=\"integerRange\" validationParameter=\"1048576,4294967295\" />\n        <attribute name=\"localTimeRollover\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"logSiteId\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"flushByEntryCountW3CLog\" type=\"uint\" defaultValue=\"0\" />\n        <attribute name=\"maxLogLineLength\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"2,65536\" defaultValue=\"65536\" />\n        <element name=\"customFields\">\n          <attribute name=\"maxCustomFieldLength\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"2,65536\" defaultValue=\"4096\" />\n          <collection addElement=\"add\" clearElement=\"clear\">\n            <attribute name=\"logFieldName\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n            <attribute name=\"sourceName\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n            <attribute name=\"sourceType\" type=\"enum\" required=\"true\" >\n              <enum name=\"RequestHeader\" value=\"0\"/>\n              <enum name=\"ResponseHeader\" value=\"1\"/>\n              <enum name=\"ServerVariable\" value=\"2\"/>\n            </attribute>\n          </collection>\n        </element>\n      </element>\n      <element name=\"traceFailedRequestsLogging\">\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\FailedReqLogFiles\"/>\n        <attribute name=\"maxLogFiles\" type=\"uint\" defaultValue=\"50\" validationType=\"integerRange\" validationParameter=\"1,10000\"/>\n        <attribute name=\"maxLogFileSizeKB\" type=\"uint\" defaultValue=\"1024\" validationType=\"integerRange\" validationParameter=\"0,1048576\"/>\n        <attribute name=\"customActionsEnabled\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n    </element>\n    <element name=\"applicationDefaults\" isCollectionDefault=\"true\">\n      <attribute name=\"path\" type=\"string\" validationType=\"applicationPath\"/>\n      <attribute name=\"applicationPool\" type=\"string\" validationType=\"applicationPoolName\"/>\n      <attribute name=\"enabledProtocols\" type=\"string\" defaultValue=\"http\"/>\n    </element>\n    <element name=\"virtualDirectoryDefaults\" isCollectionDefault=\"true\">\n      <attribute name=\"path\" type=\"string\" validationType=\"virtualDirectoryPath\"/>\n      <attribute name=\"physicalPath\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"userName\" type=\"string\"/>\n      <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n      <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n        <enum name=\"Interactive\" value=\"0\"/>\n        <enum name=\"Batch\" value=\"1\"/>\n        <enum name=\"Network\" value=\"2\"/>\n        <enum name=\"ClearText\" value=\"3\"/>\n      </attribute>\n      <attribute name=\"allowSubDirConfig\" type=\"bool\" defaultValue=\"true\"/>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/webLimits\">\n    <attribute name=\"maxGlobalBandwidth\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,1023,exclude\" defaultValue=\"4294967295\"/>\n    <attribute name=\"connectionTimeout\" type=\"timeSpan\" defaultValue=\"00:02:00\" />\n    <attribute name=\"demandStartThreshold\" type=\"uint\" defaultValue=\"2147483647\" validationType=\"integerRange\" validationParameter=\"10,2147483647\" />\n    <attribute name=\"dynamicIdleThreshold\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,10000\" />\n    <attribute name=\"headerWaitTimeout\" type=\"timeSpan\" defaultValue=\"00:00:00\" validationType=\"timeSpanRange\" validationParameter=\"0,65535,1\"/>\n    <attribute name=\"minBytesPerSecond\" type=\"uint\" defaultValue=\"240\"/>\n    <attribute name=\"dynamicRegistrationThreshold\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,4294967295\" defaultValue=\"100\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/asp\">\n    <attribute name=\"appAllowClientDebug\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"appAllowDebugging\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"errorsToNTLog\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"logErrorRequests\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"calcLineNumber\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"codePage\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n    <attribute name=\"enableApplicationRestart\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableAspHtmlFallback\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableChunkedEncoding\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableParentPaths\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"exceptionCatchEnable\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"lcid\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n    <attribute name=\"runOnEndAnonymously\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"scriptErrorMessage\" type=\"string\" defaultValue=\"An error occurred on the server when processing the URL. Please contact the system administrator. &lt;p/> If you are the system administrator please click &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkID=82731&quot;>here&lt;/a> to find out more about this error.\" validationType=\"nonEmptyString\" />\n    <attribute name=\"scriptErrorSentToBrowser\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"scriptLanguage\" type=\"string\" defaultValue=\"VBScript\" validationType=\"nonEmptyString\" />\n    <attribute name=\"bufferingOn\" type=\"bool\" defaultValue=\"true\" />\n    <element name=\"session\">\n      <attribute name=\"allowSessionState\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"keepSessionIdSecure\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"max\" type=\"uint\" defaultValue=\"4294967295\" />\n      <attribute name=\"timeout\" type=\"timeSpan\" defaultValue=\"00:20:00\" validationType=\"timeSpanRange\" validationParameter=\"0,31536000,60\" />\n    </element>\n    <element name=\"comPlus\">\n      <attribute name=\"appServiceFlags\" type=\"flags\" defaultValue=\"None\">\n        <flag name=\"None\" value=\"0\" />\n        <flag name=\"EnableTracker\" value=\"1\" />\n        <flag name=\"EnableSxS\" value=\"2\" />\n        <flag name=\"UsePartition\" value=\"4\" />\n      </attribute>\n      <attribute name=\"sxsName\" type=\"string\" validationType=\"nonEmptyString\" />\n      <attribute name=\"partitionId\" type=\"string\" defaultValue=\"00000000-0000-0000-0000-000000000000\" />\n      <attribute name=\"trackThreadingModel\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"executeInMta\" type=\"bool\" defaultValue=\"false\" />\n    </element>\n    <element name=\"cache\">\n      <attribute name=\"diskTemplateCacheDirectory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\temp\\ASP Compiled Templates\" validationType=\"nonEmptyString\" />\n      <attribute name=\"maxDiskTemplateCacheFiles\" type=\"uint\" defaultValue=\"2000\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"scriptFileCacheSize\" type=\"uint\" defaultValue=\"500\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"scriptEngineCacheMax\" type=\"uint\" defaultValue=\"250\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"enableTypelibCache\" type=\"bool\" defaultValue=\"true\" />\n    </element>\n    <element name=\"limits\">\n      <attribute name=\"scriptTimeout\" type=\"timeSpan\" defaultValue=\"00:01:30\" />\n      <attribute name=\"bufferingLimit\" type=\"uint\" defaultValue=\"4194304\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"maxRequestEntityAllowed\" type=\"uint\" defaultValue=\"200000\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"processorThreadMax\" type=\"uint\" defaultValue=\"25\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n      <attribute name=\"queueConnectionTestTime\" type=\"timeSpan\" defaultValue=\"00:00:03\" validationType=\"timeSpanRange\" validationParameter=\"1,2147483647,1\"/>\n      <attribute name=\"queueTimeout\" type=\"timeSpan\" defaultValue=\"00:00:00\" />\n      <attribute name=\"requestQueueMax\" type=\"uint\" defaultValue=\"3000\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/caching\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableKernelCache\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"maxCacheSize\" type=\"uint\" defaultValue=\"0\" />\n    <attribute name=\"maxResponseSize\" type=\"uint\" defaultValue=\"262144\" />\n    <element name=\"profiles\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" mergeAppend=\"false\">\n        <attribute name=\"extension\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"policy\" type=\"enum\" defaultValue=\"DontCache\">\n          <enum name=\"DontCache\" value=\"0\"/>\n          <enum name=\"CacheUntilChange\" value=\"1\"/>\n          <enum name=\"CacheForTimePeriod\" value=\"2\"/>\n          <enum name=\"DisableCache\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"kernelCachePolicy\" type=\"enum\" defaultValue=\"DontCache\">\n          <enum name=\"DontCache\" value=\"0\"/>\n          <enum name=\"CacheUntilChange\" value=\"1\"/>\n          <enum name=\"CacheForTimePeriod\" value=\"2\"/>\n          <enum name=\"DisableCache\" value=\"3\"/>\n        </attribute>\n        <attribute name=\"duration\" type=\"timeSpan\" defaultValue=\"00:00:30\" validationType=\"timeSpanRange\" validationParameter=\"1,4294967,1\" />\n        <attribute name=\"location\" type=\"enum\" defaultValue=\"Server\">\n          <enum name=\"Any\" value=\"0\" />\n          <enum name=\"Client\" value=\"1\" />\n          <enum name=\"Downstream\" value=\"2\" />\n          <enum name=\"Server\" value=\"3\" />\n          <enum name=\"None\" value=\"4\" />\n          <enum name=\"ServerAndClient\" value=\"5\" />\n        </attribute>\n        <attribute name=\"varyByHeaders\" type=\"string\" />\n        <attribute name=\"varyByQueryString\" type=\"string\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/cgi\">\n    <attribute name=\"createCGIWithNewConsole\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"createProcessAsUser\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"timeout\" type=\"timeSpan\" defaultValue=\"00:15:00\" validationType=\"timeSpanRange\" validationParameter=\"1,2147483647,1\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/defaultDocument\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <element name=\"files\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" mergeAppend=\"false\">\n        <attribute name=\"value\" type=\"string\" isUniqueKey=\"true\"/>\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/directoryBrowse\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"showFlags\" type=\"flags\" defaultValue=\"Date, Time, Size, Extension\">\n      <flag name=\"None\" value=\"0\" />\n      <flag name=\"Date\" value=\"2\" />\n      <flag name=\"Time\" value=\"4\" />\n      <flag name=\"Size\" value=\"8\" />\n      <flag name=\"Extension\" value=\"16\" />\n      <flag name=\"LongDate\" value=\"32\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/fastCgi\">\n    <collection addElement=\"application\">\n      <attribute name=\"fullPath\" type=\"string\" expanded=\"true\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"arguments\" type=\"string\" expanded=\"true\" defaultValue=\"\" isCombinedKey=\"true\" />\n      <attribute name=\"monitorChangesTo\" type=\"string\" defaultValue=\"\" />\n      <attribute name=\"stderrMode\" type=\"enum\" defaultValue=\"ReturnStdErrIn500\">\n      <enum name=\"ReturnStdErrIn500\" value=\"0\" />\n      <enum name=\"ReturnGeneric500\" value=\"1\" />\n      <enum name=\"IgnoreAndReturn200\" value=\"2\" />\n      <enum name=\"TerminateProcess\" value=\"3\" />\n      </attribute>\n      <attribute name=\"maxInstances\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,10000\" />\n      <attribute name=\"idleTimeout\" type=\"uint\" defaultValue=\"300\" validationType=\"integerRange\" validationParameter=\"10,2592000\" />\n      <attribute name=\"activityTimeout\" type=\"uint\" defaultValue=\"70\" validationType=\"integerRange\" validationParameter=\"10,2592000\" />\n      <attribute name=\"requestTimeout\" type=\"uint\" defaultValue=\"90\" validationType=\"integerRange\" validationParameter=\"10,2592000\" />\n      <attribute name=\"instanceMaxRequests\" type=\"uint\" defaultValue=\"200\" validationType=\"integerRange\" validationParameter=\"1,10000000\" />\n      <attribute name=\"signalBeforeTerminateSeconds\" type=\"uint\" defaultValue=\"0\" validationType=\"integerRange\" validationParameter=\"0,60\" />\n      <attribute name=\"protocol\" type=\"enum\" defaultValue=\"NamedPipe\">\n        <enum name=\"NamedPipe\" value=\"0\" />\n        <enum name=\"Tcp\" value=\"1\" />\n      </attribute>\n      <attribute name=\"queueLength\" type=\"uint\" defaultValue=\"1000\" validationType=\"integerRange\" validationParameter=\"1,100000000\" />\n      <attribute name=\"flushNamedPipe\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"rapidFailsPerMinute\" type=\"uint\" defaultValue=\"10\" validationType=\"integerRange\" validationParameter=\"0,1000\" />\n      <element name=\"environmentVariables\">\n        <collection addElement=\"environmentVariable\">\n          <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" />\n          <attribute name=\"value\" type=\"string\" />\n        </collection>\n      </element>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/globalModules\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"image\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"preCondition\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/handlers\">\n    <attribute name=\"accessPolicy\" type=\"flags\" defaultValue=\"Read\">\n      <flag name=\"None\" value=\"0\" />\n      <flag name=\"Read\" value=\"1\" />\n      <flag name=\"Write\" value=\"2\" />\n      <flag name=\"Execute\" value=\"4\" />\n      <flag name=\"Source\" value=\"16\" />\n      <flag name=\"Script\" value=\"512\" />\n      <flag name=\"NoRemoteWrite\" value=\"1024\" />\n      <flag name=\"NoRemoteRead\" value=\"4096\" />\n      <flag name=\"NoRemoteExecute\" value=\"8192\" />\n      <flag name=\"NoRemoteScript\" value=\"16384\" />\n    </attribute>\n    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" mergeAppend=\"false\" >\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"path\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"verb\" type=\"string\" caseSensitive=\"true\" required=\"true\" />\n      <attribute name=\"type\" type=\"string\" caseSensitive=\"true\" />\n      <attribute name=\"modules\" type=\"string\" caseSensitive=\"true\" defaultValue=\"ManagedPipelineHandler\" />\n      <attribute name=\"scriptProcessor\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"resourceType\" type=\"enum\" defaultValue=\"Unspecified\">\n        <enum name=\"File\" value=\"0\" />\n        <enum name=\"Directory\" value=\"1\" />\n        <enum name=\"Either\" value=\"2\" />\n        <enum name=\"Unspecified\" value=\"3\" />\n      </attribute>\n      <attribute name=\"requireAccess\" type=\"enum\" defaultValue=\"Script\">\n        <enum name=\"None\" value=\"0\" />\n        <enum name=\"Read\" value=\"1\" />\n        <enum name=\"Write\" value=\"2\" />\n        <enum name=\"Script\" value=\"3\" />\n        <enum name=\"Execute\" value=\"4\" />\n      </attribute>\n      <attribute name=\"allowPathInfo\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"preCondition\" type=\"string\" caseSensitive=\"true\" />\n      <attribute name=\"responseBufferLimit\" type=\"uint\" defaultValue=\"4194304\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpCompression\">\n    <attribute name=\"sendCacheHeaders\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"expiresHeader\" type=\"string\" defaultValue=\"Wed, 01 Jan 1997 12:00:00 GMT\" />\n    <attribute name=\"cacheControlHeader\" type=\"string\" defaultValue=\"max-age=86400\" />\n    <attribute name=\"directory\" type=\"string\" expanded=\"true\" defaultValue=\"%SystemDrive%\\inetpub\\temp\\IIS Temporary Compressed Files\" />\n    <attribute name=\"doDiskSpaceLimiting\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"maxDiskSpaceUsage\" type=\"uint\" defaultValue=\"100\" />\n    <attribute name=\"minFileSizeForComp\" type=\"uint\" defaultValue=\"2700\" />\n    <attribute name=\"noCompressionForHttp10\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"noCompressionForProxies\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"noCompressionForRange\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"staticCompressionIgnoreHitFrequency\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"staticCompressionDisableCpuUsage\" type=\"uint\" defaultValue=\"100\" validationType=\"integerRange\" validationParameter=\"0,100\" />\n    <attribute name=\"staticCompressionEnableCpuUsage\" type=\"uint\" defaultValue=\"50\" validationType=\"integerRange\" validationParameter=\"0,100\" />\n    <attribute name=\"dynamicCompressionDisableCpuUsage\" type=\"uint\" defaultValue=\"90\" validationType=\"integerRange\" validationParameter=\"0,100\" />\n    <attribute name=\"dynamicCompressionEnableCpuUsage\" type=\"uint\" defaultValue=\"50\" validationType=\"integerRange\" validationParameter=\"0,100\" />\n    <attribute name=\"dynamicCompressionBufferLimit\" type=\"uint\" defaultValue=\"65536\" />\n    <collection addElement=\"scheme\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"doStaticCompression\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"doDynamicCompression\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"dll\" type=\"string\" expanded=\"true\" required=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"staticCompressionLevel\" type=\"uint\" defaultValue=\"7\" />\n      <attribute name=\"dynamicCompressionLevel\" type=\"uint\" defaultValue=\"0\" />\n    </collection>\n    <element name=\"staticTypes\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"mimeType\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"enabled\" type=\"bool\" required=\"true\" />\n      </collection>\n    </element>\n    <element name=\"dynamicTypes\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"mimeType\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"enabled\" type=\"bool\" required=\"true\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpErrors\">\n    <attribute name=\"errorMode\" type=\"enum\" defaultValue=\"DetailedLocalOnly\">\n      <enum name=\"DetailedLocalOnly\" value=\"0\" />\n      <enum name=\"Custom\" value=\"1\" />\n      <enum name=\"Detailed\" value=\"2\" />\n    </attribute>\n    <attribute name=\"existingResponse\" type=\"enum\" defaultValue=\"Auto\">\n      <enum name=\"Auto\" value=\"0\" />\n      <enum name=\"Replace\" value=\"1\" />\n      <enum name=\"PassThrough\" value=\"2\" />\n    </attribute>\n    <attribute name=\"defaultPath\" type=\"string\" expanded=\"true\" />\n    <attribute name=\"defaultResponseMode\" type=\"enum\" defaultValue=\"File\">\n      <enum name=\"File\" value=\"0\" />\n      <enum name=\"ExecuteURL\" value=\"1\" />\n      <enum name=\"Redirect\" value=\"2\" />\n    </attribute>\n    <attribute name=\"detailedMoreInformationLink\" type=\"string\" defaultValue=\"http://go.microsoft.com/fwlink/?LinkID=62293\" required=\"false\" />\n    <attribute name=\"allowAbsolutePathsWhenDelegated\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"error\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"statusCode\" type=\"uint\" required=\"true\" isCombinedKey=\"true\" validationType=\"integerRange\" validationParameter=\"400,999\" />\n      <attribute name=\"subStatusCode\" type=\"int\" defaultValue=\"-1\" isCombinedKey=\"true\" validationType=\"integerRange\" validationParameter=\"-1,999\" />\n      <attribute name=\"prefixLanguageFilePath\" type=\"string\" expanded=\"true\" defaultValue=\"\" required=\"false\" />\n      <attribute name=\"path\" type=\"string\" expanded=\"true\" required=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"responseMode\" type=\"enum\" defaultValue=\"File\">\n        <enum name=\"File\" value=\"0\" />\n        <enum name=\"ExecuteURL\" value=\"1\" />\n        <enum name=\"Redirect\" value=\"2\" />\n      </attribute>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpLogging\">\n    <attribute name=\"selectiveLogging\" type=\"enum\" defaultValue=\"LogAll\">\n      <enum name=\"LogAll\" value=\"0\" />\n      <enum name=\"LogSuccessful\" value=\"1\" />\n      <enum name=\"LogError\" value=\"2\" />\n    </attribute>\n    <attribute name=\"dontLog\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpProtocol\">\n    <element name=\"customHeaders\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" />\n        <attribute name=\"value\" type=\"string\" caseSensitive=\"true\" />\n      </collection>\n    </element>\n    <element name=\"redirectHeaders\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" />\n        <attribute name=\"value\" type=\"string\" caseSensitive=\"true\" />\n      </collection>\n    </element>\n    <attribute name=\"allowKeepAlive\" type=\"bool\" defaultValue=\"true\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpRedirect\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"destination\" type=\"string\" />\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"wildcard\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"destination\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n    </collection>\n    <attribute name=\"exactDestination\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"childOnly\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"httpResponseStatus\" type=\"enum\" defaultValue=\"Found\">\n      <enum name=\"Permanent\" value=\"301\" />\n      <enum name=\"Found\" value=\"302\" />\n      <enum name=\"Temporary\" value=\"307\" />\n      <enum name=\"PermRedirect\" value=\"308\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/httpTracing\">\n    <element name=\"traceUrls\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"value\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/isapiFilters\">\n    <collection addElement=\"filter\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"path\" type=\"string\" expanded=\"true\" required=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"enableCache\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"preCondition\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/management/authentication\">\n    <attribute name=\"defaultProvider\" type=\"string\" />\n    <element name=\"providers\">\n      <collection addElement=\"add\" allowUnrecognizedAttributes=\"true\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <attribute name=\"type\" type=\"string\" required=\"true\" />\n      </collection>\n    </element>\n    <element name=\"credentials\">\n      <collection addElement=\"add\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey =\"true\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" required=\"true\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/management/authorization\">\n    <attribute name=\"defaultProvider\" type=\"string\" />\n    <element name=\"providers\">\n      <collection addElement=\"add\" allowUnrecognizedAttributes=\"true\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <attribute name=\"type\" type=\"string\" required=\"true\" />\n      </collection>\n    </element>\n    <element name=\"authorizationRules\">\n      <collection addElement=\"scope\">\n        <attribute name=\"path\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <collection addElement=\"add\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n          <attribute name=\"isRole\" type=\"bool\" defaultValue=\"false\" />\n        </collection>\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/management/trustedProviders\">\n    <attribute name=\"allowUntrustedProviders\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"add\">\n      <attribute name=\"type\" type=\"string\" required=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/modules\">\n    <attribute name=\"runAllManagedModulesForAllRequests\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"runManagedModulesForWebDavRequests\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"type\" type=\"string\" caseSensitive=\"true\" />\n      <attribute name=\"preCondition\" type=\"string\" caseSensitive=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/applicationInitialization\">\n    <attribute name=\"remapManagedRequestsTo\" type=\"string\" defaultValue=\"\" />\n    <attribute name=\"skipManagedModules\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"doAppInitAfterRestart\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" mergeElement=\"false\">\n      <attribute name=\"initializationPage\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"hostName\" type=\"string\" defaultValue=\"\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/odbcLogging\">\n    <attribute name=\"dataSource\" type=\"string\" caseSensitive=\"true\" defaultValue=\"InternetDb\" />\n    <attribute name=\"tableName\" type=\"string\" caseSensitive=\"true\" defaultValue=\"InternetLog\" />\n    <attribute name=\"userName\" type=\"string\" defaultValue=\"InternetAdmin\" />\n    <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/access\">\n    <attribute name=\"sslFlags\" type=\"flags\" defaultValue=\"None\">\n      <flag name=\"None\" value=\"0\" />\n      <flag name=\"Ssl\" value=\"8\" />\n      <flag name=\"SslNegotiateCert\" value=\"32\" />\n      <flag name=\"SslRequireCert\" value=\"64\" />\n      <flag name=\"Ssl128\" value=\"256\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/applicationDependencies\">\n    <collection addElement=\"application\" clearElement=\"clear\" >\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"groupId\" type=\"string\" />\n      <collection addElement=\"add\" clearElement=\"clear\" >\n        <attribute name=\"groupId\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      </collection>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/anonymousAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"userName\" type=\"string\" defaultValue=\"IUSR\" />\n    <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n    <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n      <enum name=\"Interactive\" value=\"0\" />\n      <enum name=\"Batch\" value=\"1\" />\n      <enum name=\"Network\" value=\"2\" />\n      <enum name=\"ClearText\" value=\"3\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/basicAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"realm\" type=\"string\" />\n    <attribute name=\"defaultLogonDomain\" type=\"string\" />\n    <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n      <enum name=\"Interactive\" value=\"0\" />\n      <enum name=\"Batch\" value=\"1\" />\n      <enum name=\"Network\" value=\"2\" />\n      <enum name=\"ClearText\" value=\"3\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/clientCertificateMappingAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/digestAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"realm\" type=\"string\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/iisClientCertificateMappingAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"oneToOneCertificateMappingsEnabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"manyToOneCertificateMappingsEnabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"defaultLogonDomain\" type=\"string\" />\n    <attribute name=\"logonMethod\" type=\"enum\" defaultValue=\"ClearText\">\n      <enum name=\"Interactive\" value=\"0\" />\n      <enum name=\"Batch\" value=\"1\" />\n      <enum name=\"Network\" value=\"2\" />\n      <enum name=\"ClearText\" value=\"3\" />\n    </attribute>\n    <element name=\"manyToOneMappings\">\n      <collection addElement=\"add\" clearElement=\"clear\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"description\" type=\"string\" />\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"permissionMode\" type=\"enum\" defaultValue=\"Allow\">\n          <enum name=\"Allow\" value=\"1\" />\n          <enum name=\"Deny\" value=\"2\" />\n        </attribute>\n        <element name=\"rules\">\n          <collection addElement=\"add\" clearElement=\"clear\">\n            <attribute name=\"certificateField\" type=\"enum\" required=\"true\" isCombinedKey=\"true\">\n              <enum name=\"Subject\" value=\"1\" />\n              <enum name=\"Issuer\" value=\"2\" />\n            </attribute>\n            <attribute name=\"certificateSubField\" type=\"string\" caseSensitive=\"true\" required=\"true\" isCombinedKey=\"true\" />\n            <attribute name=\"matchCriteria\" type=\"string\" caseSensitive=\"true\" required=\"true\" isCombinedKey=\"true\" />\n            <attribute name=\"compareCaseSensitive\" type=\"bool\" isCombinedKey=\"true\" defaultValue=\"true\" />\n          </collection>\n        </element>\n        <attribute name=\"userName\" type=\"string\" validationType=\"nonEmptyString\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n      </collection>\n    </element>\n    <element name=\"oneToOneMappings\">\n      <collection addElement=\"add\" clearElement=\"clear\">\n        <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n        <attribute name=\"userName\" type=\"string\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"certificate\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" />\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authentication/windowsAuthentication\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <element name=\"providers\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"value\" type=\"string\" isUniqueKey=\"true\" />\n      </collection>\n    </element>\n    <attribute name=\"authPersistSingleRequest\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"authPersistNonNTLM\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"useKernelMode\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"useAppPoolCredentials\" type=\"bool\" defaultValue=\"false\" />\n    <element name=\"extendedProtection\">\n        <attribute name=\"tokenChecking\" type=\"enum\" defaultValue=\"None\">\n            <enum name=\"None\" value=\"0\" />\n            <enum name=\"Allow\" value=\"1\" />\n            <enum name=\"Require\" value=\"2\" />\n        </attribute>\n        <attribute name=\"flags\" type=\"flags\" defaultValue=\"None\">\n            <flag name=\"None\" value=\"0\" />\n            <flag name=\"Proxy\" value=\"1\" />\n            <flag name=\"NoServiceNameCheck\" value=\"2\"/>\n            <flag name=\"AllowDotlessSpn\" value=\"4\" />\n            <flag name=\"ProxyCohosting\" value=\"32\" />\n        </attribute>\n        <collection addElement=\"spn\" clearElement=\"clearSpns\" removeElement=\"removeSpn\">\n            <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/authorization\">\n    <attribute name=\"bypassLoginPages\" type=\"bool\" defaultValue=\"true\" />\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"accessType\" type=\"enum\" required=\"true\">\n        <enum name=\"Allow\" value=\"0\" />\n        <enum name=\"Deny\" value=\"1\" />\n      </attribute>\n      <attribute name=\"users\" type=\"string\" isCombinedKey=\"true\" />\n      <attribute name=\"roles\" type=\"string\" isCombinedKey=\"true\" />\n      <attribute name=\"verbs\" type=\"string\" caseSensitive=\"true\" isCombinedKey=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/ipSecurity\">\n    <attribute name=\"enableReverseDns\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"allowUnlisted\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"enableProxyMode\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"denyAction\" type=\"enum\" defaultValue=\"Forbidden\">\n      <enum name=\"AbortRequest\" value=\"0\" />\n      <enum name=\"Unauthorized\" value=\"401\" />\n      <enum name=\"Forbidden\" value=\"403\" />\n      <enum name=\"NotFound\" value=\"404\" />\n    </attribute>\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"ipAddress\" type=\"string\" isCombinedKey=\"true\" />\n      <attribute name=\"subnetMask\" type=\"string\" isCombinedKey=\"true\" defaultValue=\"255.255.255.255\" />\n      <attribute name=\"domainName\" type=\"string\" isCombinedKey=\"true\" />\n      <attribute name=\"allowed\" type=\"bool\" defaultValue=\"false\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/dynamicIpSecurity\">\n    <attribute name=\"denyAction\" type=\"enum\" defaultValue=\"Forbidden\">\n      <enum name=\"AbortRequest\" value=\"0\" />\n      <enum name=\"Unauthorized\" value=\"401\" />\n      <enum name=\"Forbidden\" value=\"403\" />\n      <enum name=\"NotFound\" value=\"404\" />\n    </attribute>\n    <attribute name=\"enableProxyMode\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"enableLoggingOnlyMode\" type=\"bool\" defaultValue=\"false\" />\n    <element name=\"denyByConcurrentRequests\">\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"maxConcurrentRequests\" type=\"uint\" defaultValue=\"5\" validationType=\"integerRange\" validationParameter=\"1,4294967295\"/>\n    </element>\n    <element name=\"denyByRequestRate\">\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"maxRequests\" type=\"uint\" defaultValue=\"20\" validationType=\"integerRange\" validationParameter=\"1,4294967295\" />\n      <attribute name=\"requestIntervalInMilliseconds\" type=\"uint\" defaultValue=\"200\" validationType=\"integerRange\" validationParameter=\"1,4294967295\" />\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/isapiCgiRestriction\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"path\" type=\"string\" expanded=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      <attribute name=\"allowed\" type=\"bool\" required=\"true\" defaultValue=\"false\" />\n      <attribute name=\"groupId\" type=\"string\" required=\"false\" />\n      <attribute name=\"description\" type=\"string\" />\n    </collection>\n    <attribute name=\"notListedIsapisAllowed\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"notListedCgisAllowed\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/security/requestFiltering\">\n    <attribute name=\"allowDoubleEscaping\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"allowHighBitCharacters\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"unescapeQueryString\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"removeServerHeader\" type=\"bool\" defaultvalue=\"false\" />\n    <element name=\"fileExtensions\">\n      <attribute name=\"allowUnlisted\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"applyToWebDAV\" type=\"bool\" defaultValue=\"true\" />\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"fileExtension\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"allowed\" type=\"bool\" required=\"true\" defaultValue=\"true\" />\n      </collection>\n    </element>\n    <element name=\"requestLimits\">\n      <attribute name=\"maxAllowedContentLength\" type=\"uint\" defaultValue=\"30000000\" />\n      <attribute name=\"maxUrl\" type=\"uint\" defaultValue=\"4096\" />\n      <attribute name=\"maxQueryString\" type=\"uint\" defaultValue=\"2048\" />\n      <element name=\"headerLimits\">\n        <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n          <attribute name=\"header\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"sizeLimit\" type=\"uint\" required=\"true\" />\n        </collection>\n      </element>\n    </element>\n    <element name=\"verbs\">\n      <attribute name=\"allowUnlisted\" type=\"bool\" defaultValue=\"true\" />\n      <attribute name=\"applyToWebDAV\" type=\"bool\" defaultValue=\"true\" />\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"verb\" type=\"string\" caseSensitive=\"true\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"allowed\" type=\"bool\" required=\"true\" />\n      </collection>\n    </element>\n    <element name=\"hiddenSegments\">\n      <attribute name=\"applyToWebDAV\" type=\"bool\" defaultValue=\"true\" />\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"segment\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"alwaysAllowedUrls\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"url\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"alwaysAllowedQueryStrings\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"queryString\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"denyUrlSequences\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"sequence\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"denyQueryStringSequences\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"sequence\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n    <element name=\"filteringRules\">\n      <collection addElement=\"filteringRule\" clearElement=\"clear\" removeElement=\"remove\" >\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <attribute name=\"scanUrl\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"scanQueryString\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"scanAllRaw\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"denyUnescapedPercent\" type=\"bool\" defaultValue=\"true\" />\n        <element name=\"scanHeaders\">\n          <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n            <attribute name=\"requestHeader\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          </collection>\n        </element>\n        <element name=\"appliesTo\">\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n            <attribute name=\"fileExtension\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          </collection>\n        </element>\n        <element name=\"denyStrings\">\n          <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n            <attribute name=\"string\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          </collection>\n        </element>\n      </collection>\n    </element>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/serverRuntime\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"appConcurrentRequestLimit\" type=\"uint\" defaultValue=\"5000\" />\n    <attribute name=\"maxRequestEntityAllowed\" type=\"uint\" defaultValue=\"4294967295\" />\n    <attribute name=\"uploadReadAheadSize\" type=\"uint\" defaultValue=\"49152\" validationType=\"integerRange\" validationParameter=\"0,2147483647\" />\n    <attribute name=\"alternateHostName\" type=\"string\" />\n    <attribute name=\"enableNagling\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"frequentHitThreshold\" type=\"uint\" defaultValue=\"2\" validationType=\"integerRange\" validationParameter=\"1,2147483647\" />\n    <attribute name=\"frequentHitTimePeriod\" type=\"timeSpan\" defaultValue=\"00:00:10\" />\n    <attribute name=\"authenticatedUserOverride\" type=\"enum\" defaultValue=\"UseAuthenticatedUser\">\n      <enum name=\"UseAuthenticatedUser\" value=\"1\" />\n      <enum name=\"UseWorkerProcessUser\" value=\"2\" />\n    </attribute>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/serverSideInclude\">\n    <attribute name=\"ssiExecDisable\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/staticContent\">\n    <element name=\"clientCache\">\n      <attribute name=\"cacheControlMode\" type=\"enum\" defaultValue=\"NoControl\">\n        <enum name=\"NoControl\" value=\"0\" />\n        <enum name=\"DisableCache\" value=\"1\" />\n        <enum name=\"UseMaxAge\" value=\"2\" />\n        <enum name=\"UseExpires\" value=\"3\" />\n      </attribute>\n      <attribute name=\"cacheControlMaxAge\" type=\"timeSpan\" defaultValue=\"1.00:00:00\" />\n      <attribute name=\"httpExpires\" type=\"string\" />\n      <attribute name=\"cacheControlCustom\" type=\"string\" />\n      <attribute name=\"setEtag\" type=\"bool\" defaultValue=\"true\" />\n    </element>\n    <attribute name=\"defaultDocFooter\" type=\"string\" caseSensitive=\"true\" />\n    <attribute name=\"isDocFooterFileName\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"enableDocFooter\" type=\"bool\" defaultValue=\"false\" />\n    <collection addElement=\"mimeMap\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"fileExtension\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"mimeType\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/tracing/traceFailedRequests\">\n    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n      <attribute name=\"path\" type=\"string\" isUniqueKey =\"true\" />\n      <attribute name=\"customActionExe\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"customActionParams\" type=\"string\" expanded=\"true\" />\n      <attribute name=\"customActionTriggerLimit\" type=\"uint\" defaultValue=\"1\" validationType=\"integerRange\" validationParameter=\"0,10000\" />\n      <element name=\"traceAreas\">\n        <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n          <attribute name=\"provider\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n          <attribute name=\"areas\" type=\"string\" />\n          <attribute name=\"verbosity\" type=\"enum\" defaultValue=\"Warning\">\n            <enum name=\"General\" value=\"0\" />\n            <enum name=\"CriticalError\" value=\"1\" />\n            <enum name=\"Error\" value=\"2\" />\n            <enum name=\"Warning\" value=\"3\" />\n            <enum name=\"Information\" value=\"4\" />\n            <enum name=\"Verbose\" value=\"5\" />\n          </attribute>\n        </collection>\n      </element>\n      <element name=\"failureDefinitions\">\n        <attribute name=\"timeTaken\" type=\"timeSpan\" defaultValue=\"00:00:00\"/>\n        <attribute name=\"traceAllAfterTimeout\" type=\"bool\" defaultValue=\"false\" />\n        <attribute name=\"statusCodes\" type=\"string\"/>\n        <attribute name=\"verbosity\" type=\"enum\" defaultValue=\"Ignore\">\n          <enum name=\"Ignore\" value=\"0\" />\n          <enum name=\"CriticalError\" value=\"1\" />\n          <enum name=\"Error\" value=\"2\" />\n          <enum name=\"Warning\" value=\"3\" />\n        </attribute>\n      </element>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/tracing/traceProviderDefinitions\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"guid\" type=\"string\" required=\"true\"/>\n      <element name=\"areas\">\n        <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\" >\n          <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n          <attribute name=\"value\" type=\"uint\" required=\"true\" />\n        </collection>\n      </element>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/urlCompression\">\n    <attribute name=\"doStaticCompression\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"doDynamicCompression\" type=\"bool\" defaultValue=\"true\" />\n    <attribute name=\"dynamicCompressionBeforeCache\" type=\"bool\" defaultValue=\"false\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/validation\">\n    <attribute name=\"validateIntegratedModeConfiguration\" type=\"bool\" defaultValue=\"true\" />\n  </sectionSchema>\n\n  <sectionSchema name=\"system.webServer/webSocket\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\"/>\n    <attribute name=\"receiveBufferLimit\" type=\"uint\" defaultValue=\"4194304\" validationType=\"integerRange\"  validationParameter=\"4096,2147483647\"/>\n    <attribute name=\"pingInterval\" type=\"timeSpan\" defaultValue=\"00:00:00\" validationType=\"timeSpanRange\" validationParameter=\"0,86400,1\"  />\n  </sectionSchema>\n\n  <sectionSchema name=\"configPaths\">\n    <collection addElement=\"searchResult\">\n      <attribute name=\"path\" type=\"string\" />\n      <attribute name=\"locationPath\" type=\"string\" />\n      <attribute name=\"status\" type=\"uint\" />\n      <collection addElement=\"section\">\n        <attribute name=\"name\" type=\"string\" isUniqueKey=\"true\" />\n      </collection>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"moduleProviders\">\n    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"type\" type=\"string\" required=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"modules\">\n    <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"administratorsProviders\">\n    <attribute name=\"defaultProvider\" type=\"string\" defaultValue=\"ConfigurationAuthorizationProvider\" />\n    <collection addElement=\"add\" allowUnrecognizedAttributes=\"true\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n      <attribute name=\"type\" type=\"string\" required=\"true\" />\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"administrators\">\n    <collection addElement=\"managementScope\">\n      <attribute name=\"path\" type=\"string\" required=\"true\" isUniqueKey =\"true\" />\n      <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey =\"true\" />\n        <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n        <attribute name=\"credentialType\" type=\"enum\" defaultValue=\"IISManager\">\n          <enum name=\"IISManager\" value=\"0\" />\n          <enum name=\"Windows\" value=\"1\" />\n          <enum name=\"WindowsGroup\" value=\"2\" />\n        </attribute>\n      </collection>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"configurationRedirection\">\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"path\" type=\"string\" expanded=\"true\" defaultValue=\"\" />\n    <attribute name=\"userName\" type=\"string\" defaultValue=\"\" />\n    <attribute name=\"password\" type=\"string\" caseSensitive=\"true\" encrypted=\"true\" />\n    <attribute name=\"enableUncPolling\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"pollingPeriod\" type=\"timeSpan\" defaultValue=\"00:03:00\" />\n  </sectionSchema>\n\n</configSchema>\n"
  },
  {
    "path": "Tests/schema/WebDAV_schema.xml",
    "content": "<!--\n\n    WebDAV configuration schema.\n\n    Please do not edit this file. To add configuration sections to the schema,\n    put them in .xml files similar to this one, in this directory. They will\n    be picked up automatically at application pool startup.\n\n-->\n\n<configSchema>\n\n  <!--\n\n    These settings are always access from the top-level\n    <system.webServer/webdav> section.\n\n  -->\n\n  <sectionSchema name=\"system.webServer/webdav/globalSettings\">\n\n    <element name=\"propertyStores\">\n      <collection addElement=\"add\" allowUnrecognizedAttributes=\"true\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <attribute name=\"image\" type=\"string\" required=\"true\" expanded=\"true\" />\n        <attribute name=\"image32\" type=\"string\" expanded=\"true\" />\n      </collection>\n    </element>\n\n    <element name=\"lockStores\">\n      <collection addElement=\"add\" allowUnrecognizedAttributes=\"true\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <attribute name=\"image\" type=\"string\" required=\"true\" expanded=\"true\" />\n        <attribute name=\"image32\" type=\"string\" expanded=\"true\" />\n      </collection>\n    </element>\n\n  </sectionSchema>\n\n\n  <!--\n\n    These settings are always accessed using a query path similar\n    to \"MACHINE/WEBROOT/APPHOST/{sitename}\". Thus, there is no\n    inheritance from lower levels in the URI hierarchy.\n\n  -->\n\n  <sectionSchema name=\"system.webServer/webdav/authoring\">\n\n    <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n\n    <attribute name=\"requireSsl\" type=\"bool\" defaultValue=\"false\" />\n\n    <attribute name=\"compatFlags\" type=\"flags\" defaultValue=\"MsAuthorVia, MultiProp, CompactXml, IsHidden, IsCollection\">\n      <flag name=\"None\" value=\"0\" />\n      <flag name=\"MsAuthorVia\" value=\"1\" />\n      <flag name=\"MultiProp\" value=\"2\" />\n      <flag name=\"CompactXml\" value=\"4\" />\n      <flag name=\"IsHidden\" value=\"8\" />\n      <flag name=\"IsCollection\" value=\"16\" />\n    </attribute>\n\n    <attribute name=\"maxAllowedXmlRequestLength\" type=\"uint\" defaultValue=\"1000000\" />\n\n    <element name=\"fileSystem\">\n      <attribute name=\"allowHiddenFiles\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"useTransactionalIo\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"hideChildVirtualDirectories\" type=\"bool\" defaultValue=\"false\" />\n    </element>\n\n    <element name=\"properties\">\n      <attribute name=\"allowAnonymousPropfind\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"allowInfinitePropfindDepth\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"allowCustomProperties\" type=\"bool\" defaultValue=\"true\" />\n      <collection addElement=\"add\" removeElement=\"remove\" clearElement=\"clear\" allowUnrecognizedAttributes=\"true\">\n        <attribute name=\"xmlNamespace\" type=\"string\" isUniqueKey=\"true\" required=\"true\" validationType=\"nonEmptyString\" />\n        <attribute name=\"propertyStore\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" />\n      </collection>\n    </element>\n\n    <element name=\"locks\" allowUnrecognizedAttributes=\"true\">\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"false\" />\n      <attribute name=\"lockStore\" type=\"string\" />\n      <attribute name=\"requireLockForWriting\" type=\"bool\" defaultValue=\"false\" />\n    </element>\n\n  </sectionSchema>\n\n\n  <!--\n\n    These settings are always accessed using a URI-based query\n    path similar to \"MACHINE/WEBROOT/APPHOST/{sitename}/{uri}\".\n    Settings are inherited from lower levels in the URI hierarchy.\n\n  -->\n\n  <sectionSchema name=\"system.webServer/webdav/authoringRules\">\n\n   <attribute name=\"defaultAccess\" type=\"flags\" defaultValue=\"None\">\n     <flag name=\"None\" value=\"0\" />\n     <flag name=\"Read\" value=\"1\" />\n     <flag name=\"Write\" value=\"2\" />\n     <flag name=\"Source\" value=\"16\" />\n   </attribute>\n   <attribute name=\"allowNonMimeMapFiles\" type=\"bool\" defaultValue=\"true\" />\n   <attribute name=\"defaultMimeType\" type=\"string\" defaultValue=\"application/octet-stream\" />\n   <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n     <attribute name=\"users\" type=\"string\" isCombinedKey=\"true\" />\n     <attribute name=\"roles\" type=\"string\" isCombinedKey=\"true\" />\n     <attribute name=\"path\" type=\"string\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n     <attribute name=\"access\" type=\"flags\" defaultValue=\"Read\">\n       <flag name=\"None\" value=\"0\" />\n       <flag name=\"Read\" value=\"1\" />\n       <flag name=\"Write\" value=\"2\" />\n       <flag name=\"Source\" value=\"16\" />\n     </attribute>\n   </collection>\n\n  </sectionSchema>\n\n</configSchema>\n\n"
  },
  {
    "path": "Tests/schema/dbmanager_schema.xml",
    "content": "<configSchema>\n  <sectionSchema name=\"system.webServer/management/dbManager\">\n    <attribute name=\"allowClientConnectionStrings\" type=\"bool\" defaultValue=\"true\"/>\n    <element name=\"DBProviders\">\n      <collection addElement=\"provider\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" />\n        <attribute name=\"providerName\" type=\"string\" required=\"true\"/>\n        <attribute name=\"type\" type=\"string\" required=\"true\"/>\n        <element name=\"databaseBackup\">\n          <attribute name=\"backupEnabled\" type=\"bool\" defaultValue=\"false\"/>\n          <attribute name=\"restoreEnabled\" type=\"bool\" defaultValue=\"false\"/>\n          <attribute name=\"customBackupType\" type=\"string\" />\n          <attribute name=\"backupPath\" type=\"string\" />\n        </element>\n      </collection>\n    </element>\n  </sectionSchema>\n</configSchema>\n"
  },
  {
    "path": "Tests/schema/httpplatform_schema.xml",
    "content": "<!--\n    \n    IIS Http Platform Handler Schema\n    \n    ** Please DO NOT edit this file yourself. **\n    \n    If you want to add configuration sections to the schema, you may place \n    them in .xml files similar to this one, in this directory. They will be \n    picked up automatically on startup.\n\n-->\n\n<configSchema>\n  <sectionSchema name=\"system.webServer/httpPlatform\">\n    <attribute name=\"processPath\" type=\"string\" expanded=\"true\"/>\n    <attribute name=\"arguments\" type=\"string\" expanded=\"true\" defaultValue=\"\"/>\n    <attribute name=\"startupTimeLimit\" type=\"uint\" defaultValue=\"120\" validationType=\"integerRange\" validationParameter=\"0,3600\"/> <!-- in seconds -->\n    <attribute name=\"startupRetryCount\" type=\"uint\" defaultValue=\"10\" validationType=\"integerRange\" validationParameter=\"0,100\"/>\n    <attribute name=\"rapidFailsPerMinute\" type=\"uint\" defaultValue=\"10\" validationType=\"integerRange\" validationParameter=\"0,100\"/>\n    <attribute name=\"requestTimeout\" type=\"timeSpan\" defaultValue=\"00:02:00\" validationType=\"timeSpanRange\" validationParameter=\"0,2592000,60\"/>\n    <attribute name=\"stdoutLogEnabled\" type=\"bool\" defaultValue=\"false\" />\n    <attribute name=\"stdoutLogFile\" type=\"string\" defaultValue=\".\\httpplatform-stdout\" expanded=\"true\"/>\n    <attribute name=\"processesPerApplication\" type=\"uint\" defaultValue=\"1\" validationType=\"integerRange\" validationParameter=\"1,100\"/>\n    <attribute name=\"forwardWindowsAuthToken\" type=\"bool\" defaultValue=\"false\" />\n    <element name=\"recycleOnFileChange\">\n      <collection addElement=\"file\" clearElement=\"clear\">\n        <attribute name=\"path\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\" expanded=\"true\"/>\n      </collection>\n    </element>\n    <element name=\"environmentVariables\">\n      <collection addElement=\"environmentVariable\" clearElement=\"clear\" >\n        <attribute name=\"name\" type=\"string\" required=\"true\" validationType=\"nonEmptyString\"/>\n        <attribute name=\"value\" type=\"string\" required=\"true\"/>\n      </collection>\n    </element>\n  </sectionSchema>\n</configSchema>"
  },
  {
    "path": "Tests/schema/rewrite_schema.xml",
    "content": "<!--\n    \n    IIS URL Rewrite configuration schema.\n    \n    ** Please DO NOT edit this file yourself. **\n    \n    If you want to add configuration sections to the schema, you may place \n    them in .xml files similar to this one, in this directory. They will be \n    picked up automatically on startup.\n\n-->\n\n<configSchema>\n  <sectionSchema name=\"system.webServer/rewrite/globalRules\">\n    <collection addElement=\"rule\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\"/>\n      <attribute name=\"patternSyntax\" type=\"enum\" defaultValue=\"ECMAScript\">\n        <enum name=\"ECMAScript\" value=\"0\"/>\n        <enum name=\"Wildcard\" value=\"1\"/>\n        <enum name=\"ExactMatch\" value=\"2\"/>\n      </attribute>\n      <attribute name=\"stopProcessing\" type=\"bool\" defaultValue=\"false\"/>\n      <element name=\"match\">\n        <attribute name=\"url\" type=\"string\" validationType=\"nonEmptyString\"/>\n        <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n      <element name=\"conditions\">\n        <attribute name=\"logicalGrouping\" type=\"enum\" defaultValue=\"MatchAll\">\n          <enum name=\"MatchAll\" value=\"0\"/>\n          <enum name=\"MatchAny\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"trackAllCaptures\" type=\"bool\" defaultValue=\"false\" />\n        <collection addElement=\"add\">\n          <attribute name=\"input\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"matchType\" type=\"enum\" defaultValue=\"Pattern\" isCombinedKey=\"true\">\n            <enum name=\"Pattern\" value=\"0\"/>\n          </attribute>\n          <attribute name=\"pattern\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\" isCombinedKey=\"true\"/>\n          <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\" isCombinedKey=\"true\"/>\n        </collection>\n      </element>\n      <element name=\"serverVariables\">\n        <collection addElement=\"set\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"requireTrimmedString\"/>\n          <attribute name=\"value\" type=\"string\" />\n          <attribute name=\"replace\" type=\"bool\" defaultValue=\"true\" />\n        </collection>\n      </element>\n      <element name=\"action\">\n        <attribute name=\"type\" type=\"enum\" defaultValue=\"None\">\n          <enum name=\"None\" value=\"0\"/>\n          <enum name=\"Rewrite\" value=\"1\"/>\n          <enum name=\"Redirect\" value=\"2\"/>\n          <enum name=\"CustomResponse\" value=\"3\"/>\n          <enum name=\"AbortRequest\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"url\" type=\"string\" validationType=\"requireTrimmedString\"/>\n        <attribute name=\"appendQueryString\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"redirectType\" type=\"enum\" defaultValue=\"Permanent\">\n          <enum name=\"Permanent\" value=\"301\"/>\n          <enum name=\"Found\" value=\"302\"/>\n          <enum name=\"SeeOther\" value=\"303\"/>\n          <enum name=\"Temporary\" value=\"307\"/>\n        </attribute>\n        <attribute name=\"statusCode\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"300,307,exclude\" defaultValue=\"0\"/>\n        <attribute name=\"subStatusCode\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,999\" defaultValue=\"0\"/>\n        <attribute name=\"statusReason\" type=\"string\"/>\n        <attribute name=\"statusDescription\" type=\"string\"/>\n      </element>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/allowedServerVariables\">\n    <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/rules\">\n    <collection addElement=\"rule\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\"/>\n      <attribute name=\"patternSyntax\" type=\"enum\" defaultValue=\"ECMAScript\">\n        <enum name=\"ECMAScript\" value=\"0\"/>\n        <enum name=\"Wildcard\" value=\"1\"/>\n        <enum name=\"ExactMatch\" value=\"2\"/>\n      </attribute>\n      <attribute name=\"stopProcessing\" type=\"bool\" defaultValue=\"false\"/>\n      <element name=\"match\">\n        <attribute name=\"url\" type=\"string\" validationType=\"nonEmptyString\"/>\n        <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n      <element name=\"conditions\">\n        <attribute name=\"logicalGrouping\" type=\"enum\" defaultValue=\"MatchAll\">\n          <enum name=\"MatchAll\" value=\"0\"/>\n          <enum name=\"MatchAny\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"trackAllCaptures\" type=\"bool\" defaultValue=\"false\" />\n        <collection addElement=\"add\">\n          <attribute name=\"input\" type=\"string\"/>\n          <attribute name=\"matchType\" type=\"enum\" defaultValue=\"Pattern\">\n            <enum name=\"Pattern\" value=\"0\"/>\n            <enum name=\"IsFile\" value=\"1\"/>\n            <enum name=\"IsDirectory\" value=\"2\"/>\n          </attribute>\n          <attribute name=\"pattern\" type=\"string\"/>\n          <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n          <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\"/>\n        </collection>\n      </element>\n      <element name=\"serverVariables\">\n        <collection addElement=\"set\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"requireTrimmedString\"/>\n          <attribute name=\"value\" type=\"string\" />\n          <attribute name=\"replace\" type=\"bool\" defaultValue=\"true\" />\n        </collection>\n      </element>\n      <element name=\"action\">\n        <attribute name=\"type\" type=\"enum\" defaultValue=\"None\">\n          <enum name=\"None\" value=\"0\"/>\n          <enum name=\"Rewrite\" value=\"1\"/>\n          <enum name=\"Redirect\" value=\"2\"/>\n          <enum name=\"CustomResponse\" value=\"3\"/>\n          <enum name=\"AbortRequest\" value=\"4\"/>\n        </attribute>\n        <attribute name=\"url\" type=\"string\" validationType=\"requireTrimmedString\"/>\n        <attribute name=\"appendQueryString\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"logRewrittenUrl\" type=\"bool\" defaultValue=\"false\"/>\n        <attribute name=\"redirectType\" type=\"enum\" defaultValue=\"Permanent\">\n          <enum name=\"Permanent\" value=\"301\"/>\n          <enum name=\"Found\" value=\"302\"/>\n          <enum name=\"SeeOther\" value=\"303\"/>\n          <enum name=\"Temporary\" value=\"307\"/>\n        </attribute>\n        <attribute name=\"statusCode\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"300,307,exclude\"/>\n        <attribute name=\"subStatusCode\" type=\"uint\" validationType=\"integerRange\" validationParameter=\"0,999\" defaultValue=\"0\"/>\n        <attribute name=\"statusReason\" type=\"string\"/>\n        <attribute name=\"statusDescription\" type=\"string\"/>\n      </element>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/outboundRules\">\n    <attribute name=\"rewriteBeforeCache\" type=\"bool\" defaultValue=\"false\" />\n\n    <element name=\"customTags\">\n      <collection addElement=\"tags\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n        <collection addElement=\"tag\" clearElement=\"clear\" removeElement=\"remove\">\n          <attribute name=\"name\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"attribute\" type=\"string\" required=\"true\" isCombinedKey=\"true\" validationType=\"nonEmptyString\"/>\n        </collection>\n      </collection>\n    </element>\n\n    <element name=\"preConditions\">\n      <collection addElement=\"preCondition\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n        <attribute name=\"logicalGrouping\" type=\"enum\" defaultValue=\"MatchAll\">\n          <enum name=\"MatchAll\" value=\"0\"/>\n          <enum name=\"MatchAny\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"patternSyntax\" type=\"enum\" defaultValue=\"ECMAScript\">\n          <enum name=\"ECMAScript\" value=\"0\"/>\n          <enum name=\"Wildcard\" value=\"1\"/>\n          <enum name=\"ExactMatch\" value=\"2\"/>\n        </attribute>\n        <collection addElement=\"add\">\n          <attribute name=\"input\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"matchType\" type=\"enum\" defaultValue=\"Pattern\" isCombinedKey=\"true\">\n            <enum name=\"Pattern\" value=\"0\" isCombinedKey=\"true\"/>\n          </attribute>\n          <attribute name=\"pattern\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\" isCombinedKey=\"true\"/>\n          <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\" isCombinedKey=\"true\"/>\n        </collection>\n      </collection>\n    </element>\n\n    <collection addElement=\"rule\" clearElement=\"clear\" removeElement=\"remove\">              \n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\"/>\n      <attribute name=\"preCondition\" type=\"string\"/>\n      <attribute name=\"enabled\" type=\"bool\" defaultValue=\"true\"/>\n      <attribute name=\"patternSyntax\" type=\"enum\" defaultValue=\"ECMAScript\">\n        <enum name=\"ECMAScript\" value=\"0\"/>\n        <enum name=\"Wildcard\" value=\"1\"/>\n        <enum name=\"ExactMatch\" value=\"2\"/>\n      </attribute>\n      <attribute name=\"stopProcessing\" type=\"bool\" defaultValue=\"false\"/>\n      <element name=\"match\">\n        <attribute name=\"filterByTags\" type=\"flags\" default=\"None\">\n          <flag name=\"None\" value=\"0\"/>\n          <flag name=\"A\" value=\"1\"/>          <!--href-->\n          <flag name=\"Area\" value=\"2\"/>       <!--href-->\n          <flag name=\"Base\" value=\"4\"/>       <!--href-->\n          <flag name=\"Form\" value=\"8\"/>       <!--action-->\n          <flag name=\"Frame\" value=\"16\"/>     <!--src,longdesc-->\n          <flag name=\"Head\" value=\"32\"/>      <!--profile-->\n          <flag name=\"IFrame\" value=\"64\"/>    <!--src,longdesc-->\n          <flag name=\"Img\" value=\"128\"/>      <!--src,longdesc,usemap-->\n          <flag name=\"Input\" value=\"256\"/>    <!--src,usemap-->\n          <flag name=\"Link\" value=\"512\"/>     <!--href-->\n          <flag name=\"Script\" value=\"1024\"/>  <!--src-->\n          <flag name=\"CustomTags\" value=\"32768\"/> <!--Use filter attribute-->\n        </attribute>\n        <attribute name=\"customTags\" type=\"string\"/>\n        <attribute name=\"serverVariable\" type=\"string\" />\n        <attribute name=\"pattern\" type=\"string\"/>\n        <attribute name=\"occurrences\" type=\"int64\" defaultValue=\"0\"/>\n        <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n        <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\"/>\n      </element>\n      <element name=\"conditions\">\n        <attribute name=\"logicalGrouping\" type=\"enum\" defaultValue=\"MatchAll\">\n          <enum name=\"MatchAll\" value=\"0\"/>\n          <enum name=\"MatchAny\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"trackAllCaptures\" type=\"bool\" defaultValue=\"true\" />\n        <collection addElement=\"add\">\n          <attribute name=\"input\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"matchType\" type=\"enum\" defaultValue=\"Pattern\" isCombinedKey=\"true\">\n            <enum name=\"Pattern\" value=\"0\"/>\n          </attribute>\n          <attribute name=\"pattern\" type=\"string\" isCombinedKey=\"true\"/>\n          <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\" isCombinedKey=\"true\"/>\n          <attribute name=\"negate\" type=\"bool\" defaultValue=\"false\" isCombinedKey=\"true\"/>\n        </collection>\n      </element>\n      <element name=\"action\">\n        <attribute name=\"type\" type=\"enum\" defaultValue=\"None\">\n          <enum name=\"None\" value=\"0\"/>\n          <enum name=\"Rewrite\" value=\"1\"/>\n        </attribute>\n        <attribute name=\"value\" type=\"string\" />\n        <attribute name=\"replace\" type=\"bool\" defaultValue=\"true\"/>\n      </element>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/providers\">\n    <collection addElement=\"provider\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"requireTrimmedString\"/>\n      <attribute name=\"type\" type=\"string\" required=\"true\" validationType=\"requireTrimmedString\" />\n      <element name=\"settings\">\n        <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n          <attribute name=\"key\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"nonEmptyString\" />\n          <attribute name=\"value\" type=\"string\" />\n          <attribute name=\"encryptedValue\" type=\"string\" encrypted=\"true\" defaultValue=\"[enc:AesProvider::enc]\" />\n        </collection>\n      </element>\n    </collection>\n  </sectionSchema>\n  <sectionSchema name=\"system.webServer/rewrite/rewriteMaps\">\n    <collection addElement=\"rewriteMap\" clearElement=\"clear\" removeElement=\"remove\">\n      <attribute name=\"name\" type=\"string\" required=\"true\" isUniqueKey=\"true\" validationType=\"requireTrimmedString\"/>\n      <attribute name=\"defaultValue\" type=\"string\"/>\n      <attribute name=\"ignoreCase\" type=\"bool\" defaultValue=\"true\"/>\n      <collection addElement=\"add\" clearElement=\"clear\" removeElement=\"remove\">\n        <attribute name=\"key\" type=\"string\" required=\"true\" caseSensitive=\"true\" isUniqueKey=\"true\"/>\n        <attribute name=\"value\" type=\"string\"/>\n      </collection>\n    </collection>\n  </sectionSchema>\n</configSchema>"
  },
  {
    "path": "Tests/schema/rscaext.xml",
    "content": "<configSchema>\n\n  <sectionSchema name=\"system.applicationHost/sites\">\n    <collection addElement=\"site\">\n      <attribute name=\"state\" type=\"enum\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n        <enum name=\"Starting\" value=\"0\" />\n        <enum name=\"Started\" value=\"1\" />\n        <enum name=\"Stopping\" value=\"2\" />\n        <enum name=\"Stopped\" value=\"3\" />\n        <enum name=\"Unknown\" value=\"4\" />\n      </attribute>\n      <method name=\"Start\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <method name=\"Stop\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <element name=\"bindings\">\n        <collection addElement=\"binding\" clearElement=\"clear\">\n          <attribute name=\"isDsMapperEnabled\" type=\"bool\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <attribute name=\"certificateHash\" type=\"string\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <attribute name=\"certificateStoreName\" type=\"string\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <method name=\"EnableDsMapper\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <method name=\"DisableDsMapper\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          <method name=\"AddSslCertificate\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n            <inputElement>\n              <attribute name=\"certificateHash\" type=\"string\" />\n              <attribute name=\"certificateStoreName\" type=\"string\" defaultValue=\"MY\" />\n            </inputElement>\n          </method>\n          <method name=\"RemoveSslCertificate\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n        </collection>\n      </element>\n    </collection>\n  </sectionSchema>\n\n  <sectionSchema name=\"system.applicationHost/applicationPools\">\n    <collection addElement=\"add\">\n      <attribute name=\"state\" type=\"enum\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n        <enum name=\"Starting\" value=\"0\" />\n        <enum name=\"Started\" value=\"1\" />\n        <enum name=\"Stopping\" value=\"2\" />\n        <enum name=\"Stopped\" value=\"3\" />\n        <enum name=\"Unknown\" value=\"4\" />\n      </attribute>\n      <attribute name=\"applicationPoolSid\" type=\"string\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <method name=\"Start\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <method name=\"Stop\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <method name=\"Recycle\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n      <element name=\"workerProcesses\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n        <collection addElement=\"workerProcess\">\n          <attribute name=\"processId\" type=\"uint\" isUniqueKey=\"true\" />\n          <attribute name=\"guid\" type=\"string\" />\n          <attribute name=\"state\" type=\"enum\">\n            <enum name=\"Starting\" value=\"0\" />\n            <enum name=\"Running\" value=\"1\" />\n            <enum name=\"Stopping\" value=\"2\" />\n            <enum name=\"Unknown\" value=\"3\" />\n          </attribute>\n          <attribute name=\"appPoolName\" type=\"string\" />\n          <method name=\"GetRequests\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n            <inputElement>\n              <attribute name=\"timeElapsedFilter\" type=\"uint\" defaultValue=\"0\" />\n            </inputElement>\n            <outputElement>\n              <collection addElement=\"request\">\n                <attribute name=\"requestId\" type=\"string\" />\n                <attribute name=\"connectionId\" type=\"string\" />\n                <attribute name=\"verb\" type=\"string\" />\n                <attribute name=\"url\" type=\"string\" />\n                <attribute name=\"siteId\" type=\"uint\" />\n                <attribute name=\"localPort\" type=\"uint\" />\n                <attribute name=\"hostName\" type=\"string\" />\n                <attribute name=\"clientIpAddress\" type=\"string\" />\n                <attribute name=\"timeElapsed\" type=\"uint\" />\n                <attribute name=\"pipeLineState\" type=\"uint\" />\n                <attribute name=\"timeInState\" type=\"uint\" />\n                <attribute name=\"currentModule\" type=\"string\" />\n                <attribute name=\"timeInModule\" type=\"uint\" />\n                <attribute name=\"localIpAddress\" type=\"string\" />\n              </collection>\n            </outputElement>\n          </method>\n          <element name=\"appDomains\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n            <collection addElement=\"appDomain\">\n              <attribute name=\"id\" type=\"string\" />\n              <attribute name=\"virtualPath\" type=\"string\" />\n              <attribute name=\"physicalPath\" type=\"string\" />\n              <attribute name=\"siteId\" type=\"uint\" />\n              <attribute name=\"idle\" type=\"uint\" />\n              <method name=\"Unload\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n            </collection>\n          </element>\n          <method name=\"GetCustomData\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n            <inputElement>\n              <attribute name=\"guidIdOfFunctionCall\" type=\"string\" />\n              <attribute name=\"parametersOfFunctionCall\" type=\"string\" />\n            </inputElement>\n            <outputElement>\n              <attribute name=\"data\" type=\"string\" />\n            </outputElement>\n          </method>\n        </collection>\n      </element>\n    </collection>\n    <element name=\"workerProcesses\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n      <collection addElement=\"workerProcess\">\n        <attribute name=\"processId\" type=\"uint\" isUniqueKey=\"true\" />\n        <attribute name=\"guid\" type=\"string\" />\n        <attribute name=\"state\" type=\"enum\">\n          <enum name=\"Starting\" value=\"0\" />\n          <enum name=\"Running\" value=\"1\" />\n          <enum name=\"Stopping\" value=\"2\" />\n          <enum name=\"Unknown\" value=\"3\" />\n        </attribute>\n        <attribute name=\"appPoolName\" type=\"string\" />\n        <method name=\"GetRequests\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n          <inputElement>\n            <attribute name=\"timeElapsedFilter\" type=\"uint\" defaultValue=\"0\" />\n          </inputElement>\n          <outputElement>\n            <collection addElement=\"request\">\n              <attribute name=\"requestId\" type=\"string\" />\n              <attribute name=\"connectionId\" type=\"string\" />\n              <attribute name=\"verb\" type=\"string\" />\n              <attribute name=\"url\" type=\"string\" />\n              <attribute name=\"siteId\" type=\"uint\" />\n              <attribute name=\"localPort\" type=\"uint\" />\n              <attribute name=\"hostName\" type=\"string\" />\n              <attribute name=\"clientIpAddress\" type=\"string\" />\n              <attribute name=\"timeElapsed\" type=\"uint\" />\n              <attribute name=\"pipeLineState\" type=\"uint\" />\n              <attribute name=\"timeInState\" type=\"uint\" />\n              <attribute name=\"currentModule\" type=\"string\" />\n              <attribute name=\"timeInModule\" type=\"uint\" />\n              <attribute name=\"localIpAddress\" type=\"string\" />\n            </collection>\n          </outputElement>\n        </method>\n        <element name=\"appDomains\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n          <collection addElement=\"appDomain\">\n            <attribute name=\"id\" type=\"string\" />\n            <attribute name=\"virtualPath\" type=\"string\" />\n            <attribute name=\"physicalPath\" type=\"string\" />\n            <attribute name=\"siteId\" type=\"uint\" />\n            <attribute name=\"idle\" type=\"uint\" />\n            <method name=\"Unload\" extension=\"Microsoft.ApplicationHost.RscaExtension\" />\n          </collection>\n        </element>\n        <method name=\"GetCustomData\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n          <inputElement>\n            <attribute name=\"guidIdOfFunctionCall\" type=\"string\" />\n            <attribute name=\"parametersOfFunctionCall\" type=\"string\" />\n          </inputElement>\n          <outputElement>\n            <attribute name=\"data\" type=\"string\" />\n          </outputElement>\n        </method>\n      </collection>\n    </element>\n    <element name=\"applicationPoolsControl\" extension=\"Microsoft.ApplicationHost.RscaExtension\">\n      <method name=\"FlushTokenCache\"  extension=\"Microsoft.ApplicationHost.RscaExtension\"/>\n    </element>\n  </sectionSchema>\n\n</configSchema>\n"
  },
  {
    "path": "Tests/siteconf/default",
    "content": "﻿addr=127.0.0.1\nport=8080\nhosts=*.mysite.com\nindexes=index.aspx,index.htm\nnolog=true\ndenyfrom=111.222.111.*,1.1.1.1\ndenyfrom=192.168.1.0/255.255.255.0\nallowfrom=111.222.111.*,1.1.1.1\ndenydirs=bin,App_code\nnofile=/mvc/controller.aspx\nusegzip=true\nkeep_alive=true\nrewrite=^/.+?\\.(asp|php|cgi)$ /404.html\nextra=test"
  },
  {
    "path": "Tests/siteconf/default_app",
    "content": "denydirs=bin,App_code\nallowfrom=111.222.111.*\nallowfrom=1.1.1.1\nrewrite=^/.+?\\.(asp|php|cgi)$ /404.html\ndenyfrom=111.222.111.*\ndenyfrom=1.1.1.1\ndenyfrom=192.168.1.0/255.255.255.0\nport=8080\nindexes=index.aspx,index.htm\nnofile=/mvc/controller.aspx\nkeep_alive=True\nnolog=True\naddr=127.0.0.1\nroot=/app/ /var/www/default\nhosts=*.mysite.com\nextra=test\nusegzip=True\n"
  },
  {
    "path": "Tests/siteconf/default_app_app",
    "content": "denydirs=bin,App_code\nallowfrom=111.222.111.*\nallowfrom=1.1.1.1\nrewrite=^/.+?\\.(asp|php|cgi)$ /404.html\ndenyfrom=111.222.111.*\ndenyfrom=1.1.1.1\ndenyfrom=192.168.1.0/255.255.255.0\nport=8080\nindexes=index.aspx,index.htm\nnofile=/mvc/controller.aspx\nkeep_alive=True\nnolog=True\naddr=127.0.0.1\nroot=/app/app/ /var/www/default\nhosts=*.mysite.com\nextra=test\nusegzip=True\n"
  },
  {
    "path": "Tests/xunit.runner.json",
    "content": "﻿{\n    \"shadowCopy\": false,\n    \"diagnosticMessages\": true,\n    \"maxParallelThreads\": 1\n}\n"
  },
  {
    "path": "Tests.IIS/Helper.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System;\nusing System.IO;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Web.Administration\n{\n    internal static class Helper\n    {\n        internal static bool IsRunningOnMono()\n        {\n            return Type.GetType(\"Mono.Runtime\") != null;\n        }\n\n        internal static bool GetIsSni(this Binding binding)\n        {\n            var value = binding[\"sslFlags\"];\n            return ((uint)value & 1U) == 1U;\n        }\n\n        internal static void GetAllDefinitions(this SectionGroup group, IList<SectionDefinition> result)\n        {\n            foreach (SectionDefinition item in group.Sections)\n            {\n                result.Add(item);\n            }\n\n            foreach (SectionGroup child in group.SectionGroups)\n            {\n                child.GetAllDefinitions(result);\n            }\n        }\n        \n        public static readonly string FileNameMachineConfig = IsRunningOnMono()\n            ? \"/Library/Frameworks/Mono.framework/Versions/Current/etc/mono/4.5/machine.config\"\n            : Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows),\n                \"Microsoft.NET\",\n                IntPtr.Size == 2 ? \"Framework\" : \"Framework64\",\n                \"v4.0.30319\",\n                \"CONFIG\",\n                \"machine.config\");\n\n        public static readonly string FileNameWebConfig = IsRunningOnMono()\n            ? \"/Library/Frameworks/Mono.framework/Versions/Current/etc/mono/4.5/web.config\"\n            : Path.Combine(\n                Environment.GetFolderPath(Environment.SpecialFolder.Windows),\n                \"Microsoft.NET\",\n                IntPtr.Size == 2 ? \"Framework\" : \"Framework64\",\n                \"v4.0.30319\",\n                \"CONFIG\",\n                \"web.config\");\n    }\n}\n"
  },
  {
    "path": "Tests.IIS/NativeMethods.json",
    "content": "{\n    \"$schema\": \"https://aka.ms/CsWin32.schema.json\",\n    \"emitSingleFile\": false\n}\n"
  },
  {
    "path": "Tests.IIS/NativeMethods.txt",
    "content": "SHObjectProperties\nSHOW_WINDOW_CMD\nntohs\nhtons\nSOCKADDR_IN\nSOCKADDR_STORAGE\nADDRESS_FAMILY\nCreatePersistentTcpPortReservation\nDeletePersistentTcpPortReservation\nWIN32_ERROR\n"
  },
  {
    "path": "Tests.IIS/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Tests.IIS\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Tests.IIS\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2014-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"bc2106cc-7e64-4ccb-abb5-b026e456f5fd\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Tests.IIS/Tests.IIS.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{4BB387EE-FE05-4215-AEA4-F7BECABBB9A9}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Tests.IIS</RootNamespace>\n    <AssemblyName>Tests.IIS</AssemblyName>\n    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <LangVersion>latest</LangVersion>\n    <NuGetPackageImportStamp>\n    </NuGetPackageImportStamp>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>TRACE;DEBUG;IIS</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;IIS</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>false</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Microsoft.Web.Administration\">\n      <HintPath>$(windir)\\system32\\inetsrv\\Microsoft.Web.Administration.dll</HintPath>\n      <CopyLocal>true</CopyLocal>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.ComponentModel.Composition\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.IO.Compression\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"xmldiffpatch\">\n      <HintPath>..\\lib\\xmldiffpatch.dll</HintPath>\n    </Reference>\n    <Reference Include=\"XmlDiffPatch.View\">\n      <HintPath>..\\lib\\XmlDiffPatch.View.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"..\\JexusManager\\BindingExtensions.cs\">\n      <Link>BindingExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.Web.Administration\\NativeMethods.cs\">\n      <Link>NativeMethods.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.Web.Administration\\SOCKADDR_IN.cs\">\n      <Link>SOCKADDR_IN.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.Web.Administration\\SOCKADDR_STORAGE.cs\">\n      <Link>SOCKADDR_STORAGE.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Microsoft.Web.Administration\\StringExtensions.cs\">\n      <Link>StringExtensions.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Tests\\Exceptions\\ServerTestCases.cs\">\n      <Link>Exceptions\\ServerTestCases.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Tests\\Exceptions\\SiteTestCases.cs\">\n      <Link>Exceptions\\SiteTestCases.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Tests\\ServerManagerTestFixture.cs\">\n      <Link>ServerManagerTestFixture.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Tests\\TestCases.cs\">\n      <Link>TestCases.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Tests\\TestHelper.cs\">\n      <Link>TestHelper.cs</Link>\n    </Compile>\n    <Compile Include=\"..\\Tests\\XmlAssert.cs\">\n      <Link>XmlAssert.cs</Link>\n    </Compile>\n    <Compile Include=\"Helper.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"..\\Tests\\administration.config\">\n      <Link>administration.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\expected.config\">\n      <Link>expected.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\expected3.config\">\n      <Link>expected3.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\original2.config\">\n      <Link>original2.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\original2_missing_closing.config\">\n      <Link>original2_missing_closing.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\Website1\\authorization.config\">\n      <Link>Website1\\authorization.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\Website1\\directorybrowse.config\">\n      <Link>Website1\\directorybrowse.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\Website1\\expected.config\">\n      <Link>Website1\\expected.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\Website1\\expected1.config\">\n      <Link>Website1\\expected1.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\Website1\\expected3.config\">\n      <Link>Website1\\expected3.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\Website1\\original.config\">\n      <Link>Website1\\original.config</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"..\\Tests\\xunit.runner.json\">\n      <Link>xunit.runner.json</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Include=\"default.runsettings\" />\n    <None Include=\"JexusManager.snk\" />\n    <None Include=\"NativeMethods.json\" />\n    <None Include=\"redirection.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Service Include=\"{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.TestPlatform.TestHost\">\n      <Version>17.13.0</Version>\n    </PackageReference>\n    <PackageReference Include=\"Microsoft.Windows.CsWin32\">\n      <Version>0.3.183</Version>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"System.Runtime.CompilerServices.Unsafe\">\n      <Version>6.1.1</Version>\n    </PackageReference>\n    <PackageReference Include=\"xunit\">\n      <Version>2.9.3</Version>\n    </PackageReference>\n    <PackageReference Include=\"xunit.runner.visualstudio\">\n      <Version>3.0.2</Version>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\n      <PrivateAssets>all</PrivateAssets>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"..\\Tests\\Website1\\index.html\">\n      <Link>Website1\\index.html</Link>\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </Content>\n    <Content Include=\"NativeMethods.txt\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Tests.IIS/default.runsettings",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RunSettings>\n  <!-- Configurations that affect the Test Framework -->\n  <RunConfiguration>\n    <!-- Path relative to solution directory -->\n    <!--<ResultsDirectory>.\\TestResults</ResultsDirectory>-->\n\n    <!-- [x86] | x64  \n      - You can also change it from menu Test, Test Settings, Default Processor Architecture -->\n    <TargetPlatform>x64</TargetPlatform>\n\n    <!-- Framework35 | [Framework40] | Framework45 -->\n    <TargetFrameworkVersion>Framework45</TargetFrameworkVersion>\n\n    <!-- Path to Test Adapters -->\n    <!--<TestAdaptersPaths>%SystemDrive%\\Temp\\foo;%SystemDrive%\\Temp\\bar</TestAdaptersPaths>-->\n  </RunConfiguration>\n\n</RunSettings>"
  },
  {
    "path": "Tests.IIS/redirection.config",
    "content": "<configuration>\n\n    <configSections>\n        <section name=\"configurationRedirection\" />\n    </configSections>\n\n    <configProtectedData>\n        <providers>\n            <add name=\"IISRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"IISCngProvider\" type=\"Microsoft.ApplicationHost.CngProtectedConfigurationProvider\" description=\"Uses Win32 Crypto CNG to encrypt and decrypt\" keyContainerName=\"iisCngConfigurationKey\" useMachineContainer=\"true\" />\n        </providers>\n    </configProtectedData>\n\n    <configurationRedirection />\n\n</configuration>"
  },
  {
    "path": "Tests.JexusManager/Authentication/AnonymousAuthenticationFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing JexusManager.Features.Authorization;\nusing Microsoft.Web.Management.Client.Extensions;\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class AnonymousAuthenticationFeatureServerTestFixture\n    {\n        private AnonymousAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new AnonymousAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.True(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/authentication/anonymousAuthentication\");\n            node?.SetAttributeValue(\"enabled\", false);\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/AnonymousAuthenticationFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using NSubstitute;\n\n    public class AnonymousAuthenticationFeatureSiteTestFixture\n    {\n        private AnonymousAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.Sites[0].GetWebConfiguration(), scope, null, _server.Sites[0], null, null, null, _server.Sites[0].Name));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new AnonymousAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.True(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"authentication\",\n                                new XElement(\"anonymousAuthentication\",\n                                    new XAttribute(\"enabled\", false)))))));\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/BasicAuthenticationFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing JexusManager.Features.Authorization;\nusing Microsoft.Web.Management.Client.Extensions;\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class BasicAuthenticationFeatureServerTestFixture\n    {\n        private BasicAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new BasicAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/authentication\");\n            node?.Add(\n                new XElement(\"basicAuthentication\",\n                    new XAttribute(\"enabled\", true)));\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/BasicAuthenticationFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using NSubstitute;\n\n    public class BasicAuthenticationFeatureSiteTestFixture\n    {\n        private BasicAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.Sites[0].GetWebConfiguration(), scope, null, _server.Sites[0], null, null, null, _server.Sites[0].Name));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new BasicAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"authentication\",\n                                new XElement(\"basicAuthentication\",\n                                    new XAttribute(\"enabled\", true)))))));\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/ClientCertificateAuthenticationFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing JexusManager.Features.Authorization;\nusing Microsoft.Web.Management.Client.Extensions;\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class ClientCertificateAuthenticationFeatureServerTestFixture\n    {\n        private ClientCertificateAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new ClientCertificateAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/authentication\");\n            node?.Add(\n                new XElement(\"clientCertificateMappingAuthentication\",\n                    new XAttribute(\"enabled\", true)));\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/ClientCertificateAuthenticationFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using NSubstitute;\n\n    public class ClientCertificateAuthenticationFeatureSiteTestFixture\n    {\n        private ClientCertificateAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.Sites[0].GetWebConfiguration(), scope, null, _server.Sites[0], null, null, null, _server.Sites[0].Name));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new ClientCertificateAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"authentication\",\n                                new XElement(\"clientCertificateMappingAuthentication\",\n                                    new XAttribute(\"enabled\", true)))))));\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/DigestAuthenticationFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing JexusManager.Features.Authorization;\nusing Microsoft.Web.Management.Client.Extensions;\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class DigestAuthenticationFeatureServerTestFixture\n    {\n        private DigestAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new DigestAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/authentication\");\n            var basic = new XElement(\"digestAuthentication\",\n                    new XAttribute(\"enabled\", true));\n            node?.Add(basic);\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/DigestAuthenticationFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using NSubstitute;\n\n    public class DigestAuthenticationFeatureSiteTestFixture\n    {\n        private DigestAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.Sites[0].GetWebConfiguration(), scope, null, _server.Sites[0], null, null, null, _server.Sites[0].Name));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new DigestAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"authentication\",\n                                new XElement(\"digestAuthentication\",\n                                    new XAttribute(\"enabled\", true)))))));\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/FormsAuthenticationFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing JexusManager.Features.Authorization;\nusing Microsoft.Web.Management.Client.Extensions;\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class FormsAuthenticationFeatureServerTestFixture\n    {\n        private FormsAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new FormsAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            document.Save(Expected);\n\n            try\n            {\n                _feature.Enable();\n                Assert.True(_feature.IsEnabled);\n                XmlAssert.Equal(Expected, Current);\n\n                _feature.Disable();\n                Assert.False(_feature.IsEnabled);\n                XmlAssert.Equal(Expected, Current);\n            }\n            catch (Exception ex)\n            {\n                // If not admin, this exception is expected.\n                Assert.IsType<UnauthorizedAccessException>(ex);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/FormsAuthenticationFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using NSubstitute;\n\n    public class FormsAuthenticationFeatureSiteTestFixture\n    {\n        private FormsAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.Sites[0].GetWebConfiguration(), scope, null, _server.Sites[0], null, null, null, _server.Sites[0].Name));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new FormsAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            document.Root?.Add(\n                new XElement(\"system.web\",\n                    new XElement(\"authentication\",\n                        new XAttribute(\"mode\", \"Forms\"))));\n            document.Save(expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/WindowsAuthenticationFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing JexusManager.Features.Authorization;\nusing Microsoft.Web.Management.Client.Extensions;\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class WindowsAuthenticationFeatureServerTestFixture\n    {\n        private WindowsAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new WindowsAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/authentication/windowsAuthentication\");\n            node?.SetAttributeValue(\"enabled\", true);\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authentication/WindowsAuthenticationFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Authentication\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authentication;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using NSubstitute;\n\n    public class WindowsAuthenticationFeatureSiteTestFixture\n    {\n        private WindowsAuthenticationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.Sites[0].GetWebConfiguration(), scope, null, _server.Sites[0], null, null, null, _server.Sites[0].Name));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthenticationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new WindowsAuthenticationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestDisable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"authentication\",\n                                new XElement(\"windowsAuthentication\",\n                                    new XAttribute(\"enabled\", true)))))));\n            document.Save(Expected);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authorization/AuthorizationFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Authorization\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authorization;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class AuthorizationFeatureServerTestFixture\n    {\n        private AuthorizationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthorizationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new AuthorizationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/security/authorization\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/security/authorization/add\");\n            node?.SetAttributeValue(\"roles\", \"test1\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            item.Roles = \"test1\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.Roles);\n            Assert.Single(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/security/authorization/add\");\n            var newNode = new XElement(\"add\",\n                    new XAttribute(\"accessType\", \"Allow\"),\n                    new XAttribute(\"roles\", \"Administration\"));\n            node?.AddAfterSelf(newNode);\n            document.Save(Expected);\n\n            var item = new AuthorizationRule(null);\n            item.Roles = \"Administration\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"Administration\", _feature.SelectedItem.Roles);\n            Assert.Equal(2, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Authorization/AuthorizationFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Authorization\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Authorization;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class AuthorizationFeatureSiteTestFixture\n    {\n        private AuthorizationFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.Sites[0].GetWebConfiguration(), scope, null, _server.Sites[0], null, null, null, _server.Sites[0].Name));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new AuthorizationModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new AuthorizationFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"authorization\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"users\", \"*\")))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"*\", _feature.SelectedItem.Users);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove1.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new AuthorizationRule(null);\n            item.Roles = \"test\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Roles);\n            Assert.Equal(2, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"authorization\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"users\", \"*\")),\n                        new XElement(\"add\",\n                            new XAttribute(\"accessType\", \"Allow\"),\n                            new XAttribute(\"roles\", \"testers\"),\n                            new XAttribute(\"users\", \"*\")))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"\", _feature.SelectedItem.Roles);\n            var item = _feature.SelectedItem;\n            var expectedValue = \"testers\";\n            item.Roles = expectedValue;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(expectedValue, _feature.SelectedItem.Roles);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit1.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"authorization\",\n                        new XElement(\"add\",\n                            new XAttribute(\"accessType\", \"Allow\"),\n                            new XAttribute(\"roles\", \"defenders\")))));\n            document.Save(expected);\n\n            var item = new AuthorizationRule(null);\n            var original = \"testers\";\n            item.Roles = original;\n            _feature.AddItem(item);\n\n            Assert.Equal(original, _feature.SelectedItem.Roles);\n            Assert.Equal(2, _feature.Items.Count);\n            var expectedValue = \"defenders\";\n            item.Roles = expectedValue;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(expectedValue, _feature.SelectedItem.Roles);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_add.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"authorization\",\n                        new XElement(\"add\",\n                            new XAttribute(\"roles\", \"test\"),\n                            new XAttribute(\"accessType\", \"Allow\")))));\n            document.Save(expected);\n\n            var item = new AuthorizationRule(null);\n            item.Roles = \"test\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Roles);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Caching/CachingFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Caching\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Caching;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class CachingFeatureServerTestFixture\n    {\n        private CachingFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new CachingModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new CachingFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n            Assert.Equal(\".cs\", _feature.Items[0].Extension);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/caching\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/caching/profiles/add\");\n            node?.SetAttributeValue(\"extension\", \".doc\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            item.Extension = \".doc\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\".doc\", _feature.SelectedItem.Extension);\n            Assert.Single(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/caching/profiles/add\");\n            var newNode = new XElement(\"add\",\n                new XAttribute(\"duration\", \"00:00:00\"),\n                new XAttribute(\"extension\", \".txt\"));\n            node?.AddAfterSelf(newNode);\n            document.Save(Expected);\n\n            var item = new CachingItem(null);\n            item.Extension = \".txt\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\".txt\", _feature.SelectedItem.Extension);\n            Assert.Equal(2, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Caching/CachingFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Caching\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Caching;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class CachingFeatureSiteTestFixture\n    {\n        private CachingFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null,\n                    _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new CachingModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new CachingFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"caching\",\n                    new XElement(\"profiles\",\n                    new XElement(\"remove\",\n                        new XAttribute(\"extension\", \".cs\")))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\".cs\", _feature.SelectedItem.Extension);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove1.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new CachingItem(null);\n            item.Extension = \".xls\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\".xls\", _feature.SelectedItem.Extension);\n            Assert.Equal(2, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"caching\",\n                    new XElement(\"profiles\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"extension\", \".cs\")),\n                        new XElement(\"add\",\n                            new XAttribute(\"duration\", \"00:00:00\"),\n                            new XAttribute(\"extension\", \".vb\")))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\".cs\", _feature.SelectedItem.Extension);\n            var item = _feature.SelectedItem;\n            item.Extension = \".vb\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\".vb\", _feature.SelectedItem.Extension);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit1.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"caching\",\n                    new XElement(\"profiles\",\n                        new XElement(\"add\",\n                            new XAttribute(\"duration\", \"00:00:00\"),\n                            new XAttribute(\"extension\", \".xslt\")))));\n            document.Save(expected);\n\n            var item = new CachingItem(null);\n            item.Extension = \".xls\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\".xls\", _feature.SelectedItem.Extension);\n            Assert.Equal(2, _feature.Items.Count);\n            item.Extension = \".xslt\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\".xslt\", _feature.SelectedItem.Extension);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_add.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"caching\",\n                    new XElement(\"profiles\",\n                        new XElement(\"add\",\n                            new XAttribute(\"extension\", \".ppt\"),\n                            new XAttribute(\"duration\", \"00:00:00\")))));\n            document.Save(expected);\n\n            var item = new CachingItem(null);\n            item.Extension = \".ppt\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\".ppt\", _feature.SelectedItem.Extension);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/DefaultDocument/DefaultDocumentFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.DefaultDocument\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.DefaultDocument;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class DefaultDocumentFeatureServerTestFixture\n    {\n        private DefaultDocumentFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new DefaultDocumentModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new DefaultDocumentFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(6, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n            const string Expected = @\"expected_disabled.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument\");\n            node?.SetAttributeValue(\"enabled\", \"false\");\n            document.Save(Expected);\n\n            Assert.True(_feature.IsEnabled);\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n            XmlAssert.Equal(Expected, Current);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(\n                Helper.IsRunningOnMono()\n                    ? OriginalMono\n                    : Original,\n                Current);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/add[@value='Default.asp']\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            Assert.Equal(\"Default.asp\", _feature.Items[1].Name);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(\"index.htm\", _feature.Items[1].Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files\");\n            var add = new XElement(\"add\",\n                    new XAttribute(\"value\", \"default.my\"));\n            node?.AddFirst(add);\n            document.Save(Expected);\n\n            var item = new DocumentItem(null);\n            item.Name = \"default.my\";\n            _feature.InsertItem(_feature.Items.FindIndex(i => i.Flag == \"Local\"), item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"default.my\", _feature.SelectedItem.Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n            var exception = Assert.Throws<InvalidOperationException>(() => _feature.Revert());\n            Assert.Equal(\"Revert operation cannot be done at server level\", exception.Message);\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files\");\n            var asp = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/add[@value='Default.asp']\");\n            asp?.Remove();\n            var htm = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/add[@value='Default.htm']\");\n            htm?.Remove();\n            node?.AddFirst(htm);\n            node?.AddFirst(asp);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            Assert.Equal(\"Default.asp\", _feature.Items[1].Name);\n            Assert.Equal(\"Default.htm\", _feature.Items[0].Name);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"Default.asp\", _feature.SelectedItem.Name);\n            Assert.Equal(\"Default.asp\", _feature.Items[0].Name);\n            Assert.Equal(\"Default.htm\", _feature.Items[1].Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files\");\n            var asp = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/add[@value='Default.asp']\");\n            asp?.Remove();\n            var htm = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files/add[@value='Default.htm']\");\n            htm?.Remove();\n            node?.AddFirst(htm);\n            node?.AddFirst(asp);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"Default.asp\", _feature.Items[1].Name);\n            Assert.Equal(\"Default.htm\", _feature.Items[0].Name);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"Default.htm\", _feature.SelectedItem.Name);\n            Assert.Equal(\"Default.asp\", _feature.Items[0].Name);\n            Assert.Equal(\"Default.htm\", _feature.Items[1].Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/DefaultDocument/DefaultDocumentFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.DefaultDocument\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.DefaultDocument;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class DefaultDocumentFeatureSiteTestFixture\n    {\n        private DefaultDocumentFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.Sites[0].GetWebConfiguration(), scope, null, _server.Sites[0], null, null, null, _server.Sites[0].Name));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new DefaultDocumentModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new DefaultDocumentFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(7, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestEnable()\n        {\n            SetUp();\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_disabled.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/defaultDocument\");\n            node?.SetAttributeValue(\"enabled\", \"false\");\n            document.Save(expected);\n\n            Assert.True(_feature.IsEnabled);\n            _feature.Disable();\n            Assert.False(_feature.IsEnabled);\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n\n            _feature.Enable();\n            Assert.True(_feature.IsEnabled);\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files\");\n            var remove = new XElement(\"remove\",\n                new XAttribute(\"value\", \"Default.asp\"));\n            node?.AddFirst(remove);\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[2];\n            Assert.Equal(\"Default.asp\", _feature.Items[2].Name);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(\"index.htm\", _feature.Items[2].Name);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove1.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Remove();\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"home1.html\", _feature.Items[0].Name);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(\"Default.htm\", _feature.Items[0].Name);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_add.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files\");\n            var add = new XElement(\"add\",\n                    new XAttribute(\"value\", \"default.my\"));\n            node?.AddFirst(add);\n            document.Save(expected);\n\n            var item = new DocumentItem(null);\n            item.Name = \"default.my\";\n            _feature.InsertItem(_feature.Items.FindIndex(i => i.Flag == \"Local\"), item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"default.my\", _feature.SelectedItem.Name);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_revert.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files\");\n            node?.Remove();\n            document.Save(expected);\n\n            _feature.Revert();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(6, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_up.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files\");\n            var add = new XElement(\"add\",\n                new XAttribute(\"value\", \"Default.htm\"));\n            node?.AddFirst(add);\n            var remove = new XElement(\"remove\",\n                new XAttribute(\"value\", \"Default.htm\"));\n            node?.AddFirst(remove);\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            Assert.Equal(\"Default.htm\", _feature.Items[1].Name);\n            Assert.Equal(\"home1.html\", _feature.Items[0].Name);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"Default.htm\", _feature.SelectedItem.Name);\n            Assert.Equal(\"Default.htm\", _feature.Items[0].Name);\n            Assert.Equal(\"home1.html\", _feature.Items[1].Name);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_up.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/defaultDocument/files\");\n            var htm = new XElement(\"add\",\n                new XAttribute(\"value\", \"Default.htm\"));\n            node?.AddFirst(htm);\n            node?.AddFirst(new XElement(\"clear\"));\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"value\", \"Default.asp\")));\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"value\", \"index.htm\")));\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"value\", \"index.html\")));\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"value\", \"iisstart.htm\")));\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"value\", \"default.aspx\")));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"Default.htm\", _feature.Items[1].Name);\n            Assert.Equal(\"home1.html\", _feature.Items[0].Name);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"home1.html\", _feature.SelectedItem.Name);\n            Assert.Equal(\"Default.htm\", _feature.Items[0].Name);\n            Assert.Equal(\"home1.html\", _feature.Items[1].Name);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/DirectoryBrowse/DirectoryBrowseFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.DirectoryBrowse\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.DirectoryBrowse;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class DirectoryBrowseFeatureServerTestFixture\n    {\n        private DirectoryBrowseFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new DirectoryBrowseModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new DirectoryBrowseFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n            Assert.True(_feature.DateEnabled);\n            Assert.True(_feature.ExtensionEnabled);\n            Assert.False(_feature.LongDateEnabled);\n            Assert.True(_feature.SizeEnabled);\n            Assert.True(_feature.TimeEnabled);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"directoryBrowse\",\n                    new XAttribute(\"enabled\", \"true\"),\n                    new XAttribute(\"showFlags\", \"None\")));\n            document.Save(Expected);\n\n            _feature.IsEnabled = true;\n            _feature.DateEnabled = _feature.ExtensionEnabled = _feature.SizeEnabled = _feature.TimeEnabled = false;\n            _feature.ApplyChanges();\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/DirectoryBrowse/DirectoryBrowseFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.DirectoryBrowse\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.DirectoryBrowse;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class DirectoryBrowseFeatureSiteTestFixture\n    {\n        private DirectoryBrowseFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null,\n                    _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new DirectoryBrowseModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new DirectoryBrowseFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.False(_feature.IsEnabled);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit1.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"directoryBrowse\",\n                    new XAttribute(\"enabled\", \"true\"),\n                    new XAttribute(\"showFlags\", \"LongDate\")));\n            document.Save(expected);\n\n            _feature.IsEnabled = true;\n            _feature.DateEnabled = _feature.ExtensionEnabled = _feature.SizeEnabled = _feature.TimeEnabled = false;\n            _feature.LongDateEnabled = true;\n            _feature.ApplyChanges();\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Handlers/HandlersFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Handlers\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Handlers;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class HandlersFeatureServerTestFixture\n    {\n        private HandlersFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new HandlersModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new HandlersFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(82, _feature.Items.Count);\n            Assert.Equal(\"AXD-ISAPI-4.0_64bit\", _feature.Items[0].Name);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers\");\n            node?.FirstNode?.Remove(); // remove comment\n            node?.FirstNode?.Remove();\n            document.Save(Expected);\n\n            Assert.Equal(\"AXD-ISAPI-4.0_64bit\", _feature.Items[0].Name);\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(81, _feature.Items.Count);\n            Assert.Equal(\"PageHandlerFactory-ISAPI-4.0_64bit\", _feature.Items[0].Name);\n\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers\");\n            node?.FirstNode?.Remove();\n            var element = node?.FirstNode as XElement;\n            element?.SetAttributeValue(\"name\", \"test edit\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            item.Name = \"test edit\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test edit\", _feature.SelectedItem.Name);\n            Assert.Equal(82, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"modules\", \"\"),\n                    new XAttribute(\"resourceType\", \"File\"),\n                    new XAttribute(\"verb\", \"*\"),\n                    new XAttribute(\"name\", \"test\"),\n                    new XAttribute(\"path\", \"*\")));\n            document.Save(Expected);\n\n            var item = new HandlersItem(null);\n            item.Name = \"test\";\n            item.Path = \"*\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n            Assert.Equal(83, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n            var exception = Assert.Throws<InvalidOperationException>(() => _feature.Revert());\n            Assert.Equal(\"Revert operation cannot be done at server level\", exception.Message);\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers\");\n            var node1 = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers/add[@name='PageHandlerFactory-ISAPI-4.0_64bit']\");\n            var node2 = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers/add[@name='AXD-ISAPI-4.0_64bit']\");\n            node1?.Remove();\n            node2?.Remove();\n            node?.AddFirst(node2);\n            node?.AddFirst(node1);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            var selected = \"PageHandlerFactory-ISAPI-4.0_64bit\";\n            var other = \"AXD-ISAPI-4.0_64bit\";\n            Assert.Equal(selected, _feature.Items[1].Name);\n            Assert.Equal(other, _feature.Items[0].Name);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(selected, _feature.SelectedItem.Name);\n            Assert.Equal(selected, _feature.Items[0].Name);\n            Assert.Equal(other, _feature.Items[1].Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers\");\n            var node1 = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers/add[@name='PageHandlerFactory-ISAPI-4.0_64bit']\");\n            var node2 = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers/add[@name='AXD-ISAPI-4.0_64bit']\");\n            node1?.Remove();\n            node2?.Remove();\n            node?.AddFirst(node2);\n            node?.AddFirst(node1);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var other = \"PageHandlerFactory-ISAPI-4.0_64bit\";\n            Assert.Equal(other, _feature.Items[1].Name);\n            var selected = \"AXD-ISAPI-4.0_64bit\";\n            Assert.Equal(selected, _feature.Items[0].Name);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(selected, _feature.SelectedItem.Name);\n            Assert.Equal(other, _feature.Items[0].Name);\n            Assert.Equal(selected, _feature.Items[1].Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Handlers/HandlersFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Handlers\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Handlers;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class HandlersFeatureSiteTestFixture\n    {\n        private HandlersFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new HandlersModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new HandlersFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(82, _feature.Items.Count);\n            Assert.Equal(\"AXD-ISAPI-4.0_64bit\", _feature.Items[0].Name);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"handlers\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"name\", \"AXD-ISAPI-4.0_64bit\"))))));\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"AXD-ISAPI-4.0_64bit\", _feature.SelectedItem.Name);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(81, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            var item = new HandlersItem(null);\n            item.Name = \"test\";\n            item.Path = \"*\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n            Assert.Equal(83, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(82, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"handlers\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"name\", \"AXD-ISAPI-4.0_64bit\")),\n                            new XElement(\"add\",\n                                new XAttribute(\"allowPathInfo\", \"true\"),\n                                new XAttribute(\"modules\", \"IsapiModule\"),\n                                new XAttribute(\"name\", \"AXD-ISAPI-4.0_64bit\"),\n                                new XAttribute(\"path\", \"*.axd\"),\n                                new XAttribute(\"preCondition\", \"classicMode,runtimeVersionv4.0,bitness64\"),\n                                new XAttribute(\"responseBufferLimit\", \"0\"),\n                                new XAttribute(\"scriptProcessor\", @\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\"),\n                                new XAttribute(\"verb\", \"GET,HEAD,POST,DEBUG\"))))));\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"AXD-ISAPI-4.0_64bit\", _feature.SelectedItem.Name);\n            var item = _feature.SelectedItem;\n            item.AllowPathInfo = true;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.True(_feature.SelectedItem.AllowPathInfo);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"handlers\",\n                            new XElement(\"add\",\n                                new XAttribute(\"resourceType\", \"File\"),\n                                new XAttribute(\"allowPathInfo\", \"true\"),\n                                new XAttribute(\"modules\", \"\"),\n                                new XAttribute(\"name\", \"test\"),\n                                new XAttribute(\"path\", \"*\"),\n                                new XAttribute(\"verb\", \"*\"))))));\n            document.Save(Expected);\n\n            var item = new HandlersItem(null);\n            item.Name = \"test\";\n            item.Path = \"*\";\n\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n            Assert.Equal(83, _feature.Items.Count);\n            item.AllowPathInfo = true;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.True(_feature.SelectedItem.AllowPathInfo);\n            Assert.Equal(83, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"handlers\",\n                            new XElement(\"add\",\n                                new XAttribute(\"resourceType\", \"File\"),\n                                new XAttribute(\"modules\", \"\"),\n                                new XAttribute(\"name\", \"test\"),\n                                new XAttribute(\"path\", \"*\"),\n                                new XAttribute(\"verb\", \"*\"))))));\n            document.Save(Expected);\n\n            var item = new HandlersItem(null);\n            item.Name = \"test\";\n            item.Path = \"*\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\")));\n            document.Save(Expected);\n\n            var item = new HandlersItem(null);\n            item.Name = \"test\";\n            item.Path = \"*\";\n            _feature.AddItem(item);\n\n            _feature.Revert();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(82, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            var node = new XElement(\"location\",\n                new XAttribute(\"path\", \"WebSite1\"));\n            document.Root?.Add(node);\n            var web = new XElement(\"system.webServer\");\n            node.Add(web);\n            var content = new XElement(\"handlers\",\n                new XElement(\"clear\"));\n            web.Add(content);\n            var all = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/handlers\");\n            if (all != null)\n            {\n                foreach (var element in all.Elements())\n                {\n                    content.Add(element);\n                }\n            }\n\n            content.LastNode.Remove();\n\n            var add = new XElement(\"add\",\n                new XAttribute(\"resourceType\", \"File\"),\n                new XAttribute(\"modules\", \"\"),\n                new XAttribute(\"name\", \"test\"),\n                new XAttribute(\"path\", \"*\"),\n                new XAttribute(\"verb\", \"*\"));\n            content.Add(add);\n            var one = new XElement(\"add\",\n                new XAttribute(\"modules\", \"StaticFileModule,DefaultDocumentModule,DirectoryListingModule\"),\n                new XAttribute(\"name\", \"StaticFile\"),\n                new XAttribute(\"path\", \"*\"),\n                new XAttribute(\"requireAccess\", \"Read\"),\n                new XAttribute(\"resourceType\", \"Either\"),\n                new XAttribute(\"verb\", \"*\"));\n            content.Add(one);\n            document.Save(Expected);\n\n            var item = new HandlersItem(null);\n            item.Name = \"test\";\n            item.Path = \"*\";\n            _feature.AddItem(item);\n\n            var last = 82;\n            var previous = last - 1;\n            _feature.SelectedItem = _feature.Items[last];\n            var expected = \"test\";\n            Assert.Equal(expected, _feature.Items[last].Name);\n            var original = \"StaticFile\";\n            Assert.Equal(original, _feature.Items[previous].Name);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(expected, _feature.SelectedItem.Name);\n            Assert.Equal(expected, _feature.Items[previous].Name);\n            Assert.Equal(original, _feature.Items[last].Name);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"handlers\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"name\", \"StaticFile\")),\n                            new XElement(\"add\",\n                                new XAttribute(\"resourceType\", \"File\"),\n                                new XAttribute(\"modules\", \"\"),\n                                new XAttribute(\"name\", \"test\"),\n                                new XAttribute(\"path\", \"*\"),\n                                new XAttribute(\"verb\", \"*\")),\n                            new XElement(\"add\",\n                                new XAttribute(\"modules\", \"StaticFileModule,DefaultDocumentModule,DirectoryListingModule\"),\n                                new XAttribute(\"name\", \"StaticFile\"),\n                                new XAttribute(\"path\", \"*\"),\n                                new XAttribute(\"requireAccess\", \"Read\"),\n                                new XAttribute(\"resourceType\", \"Either\"),\n                                new XAttribute(\"verb\", \"*\"))))));\n            document.Save(Expected);\n\n            var item = new HandlersItem(null);\n            item.Name = \"test\";\n            item.Path = \"*\";\n            _feature.AddItem(item);\n\n            var last = 82;\n            var previous = last - 1;\n            _feature.SelectedItem = _feature.Items[previous];\n            var expected = \"test\";\n            Assert.Equal(expected, _feature.Items[last].Name);\n            var original = \"StaticFile\";\n            Assert.Equal(original, _feature.Items[previous].Name);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(original, _feature.SelectedItem.Name);\n            Assert.Equal(expected, _feature.Items[previous].Name);\n            Assert.Equal(original, _feature.Items[last].Name);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/HttpErrors/HttpErrorsFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.HttpErrors\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.HttpErrors;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class HttpErrorsFeatureServerTestFixture\n    {\n        private HttpErrorsFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new HttpErrorsModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new HttpErrorsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(9, _feature.Items.Count);\n            Assert.Equal(401U, _feature.Items[0].Status);\n            Assert.Equal(-1, _feature.Items[0].Substatus);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/httpErrors\");\n            node?.FirstNode.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(8, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/httpErrors\");\n            var element = node?.FirstNode as XElement;\n            element?.SetAttributeValue(\"path\", \"c:\\\\test.htm\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            item.Path = \"c:\\\\test.htm\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"c:\\\\test.htm\", _feature.SelectedItem.Path);\n            Assert.Equal(9, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/httpErrors\");\n            node?.Add(\n                new XElement(\"error\",\n                    new XAttribute(\"statusCode\", \"455\"),\n                    new XAttribute(\"subStatusCode\", \"1\"),\n                    new XAttribute(\"path\", \"c:\\\\test.htm\")));\n            document.Save(Expected);\n\n            var item = new HttpErrorsItem(null);\n            item.Status = 455;\n            item.Substatus = 1;\n            item.Path = \"c:\\\\test.htm\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(455U, _feature.SelectedItem.Status);\n            Assert.Equal(1, _feature.SelectedItem.Substatus);\n            Assert.Equal(10, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/HttpErrors/HttpErrorsFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.HttpErrors\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.HttpErrors;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class HttpErrorsFeatureSiteTestFixture\n    {\n        private HttpErrorsFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new HttpErrorsModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new HttpErrorsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(9, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var expected = \"expected_remove.site.config\";\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"httpErrors\",\n                    new XElement(\"remove\",\n                        new XAttribute(\"statusCode\", \"401\"))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(401U, _feature.SelectedItem.Status);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(8, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove1.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new HttpErrorsItem(null);\n            item.Status = 455;\n            item.Path = \"c:\\\\test.htm\";\n            _feature.AddItem(item);\n\n            Assert.Equal(455U, _feature.SelectedItem.Status);\n            Assert.Equal(10, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(9, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"httpErrors\",\n                    new XElement(\"remove\",\n                        new XAttribute(\"statusCode\", \"401\")),\n                    new XElement(\"error\",\n                        new XAttribute(\"prefixLanguageFilePath\", \"%IIS_BIN%\\\\custerr\"),\n                        new XAttribute(\"statusCode\", \"401\"),\n                        new XAttribute(\"path\", \"c:\\\\test.htm\"))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"401.htm\", _feature.SelectedItem.Path);\n            var item = _feature.SelectedItem;\n            var expectedValue = \"c:\\\\test.htm\";\n            item.Path = expectedValue;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(expectedValue, _feature.SelectedItem.Path);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"httpErrors\",\n                    new XElement(\"error\",\n                        new XAttribute(\"statusCode\", \"455\"),\n                        new XAttribute(\"path\", \"c:\\\\test1.htm\"))));\n            document.Save(expected);\n\n            var item = new HttpErrorsItem(null);\n            item.Status = 455;\n            var original = \"c:\\\\test.htm\";\n            item.Path = original;\n            _feature.AddItem(item);\n\n            Assert.Equal(original, _feature.SelectedItem.Path);\n            Assert.Equal(10, _feature.Items.Count);\n            var expectedValue = \"c:\\\\test1.htm\";\n            item.Path = expectedValue;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(expectedValue, _feature.SelectedItem.Path);\n            Assert.Equal(10, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"httpErrors\",\n                    new XElement(\"error\",\n                        new XAttribute(\"statusCode\", \"455\"),\n                        new XAttribute(\"path\", \"c:\\\\test.htm\"))));\n            document.Save(expected);\n\n            var item = new HttpErrorsItem(null);\n            item.Status = 455;\n            item.Path = \"c:\\\\test.htm\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(455U, _feature.SelectedItem.Status);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/IpSecurity/IpSecurityFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.IpSecurity\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.IpSecurity;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class IpSecurityFeatureServerTestFixture\n    {\n        private IpSecurityFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new IpSecurityModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new IpSecurityFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n            Assert.True(_feature.Items[0].Allowed);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/ipSecurity\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/ipSecurity\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"ipAddress\", \"12.0.0.0\"),\n                    new XAttribute(\"allowed\", \"true\")));\n            document.Save(Expected);\n\n            var item = new IpSecurityItem(null);\n            item.Address = \"12.0.0.0\";\n            item.Allowed = true;\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"12.0.0.0\", _feature.SelectedItem.Address);\n            Assert.True(_feature.SelectedItem.Allowed);\n            Assert.Equal(2, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n            var exception = Assert.Throws<InvalidOperationException>(() => _feature.Revert());\n            Assert.Equal(\"Revert operation cannot be done at server level\", exception.Message);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/IpSecurity/IpSecurityFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\n\nnamespace Tests.IpSecurity\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.IpSecurity;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class IpSecurityFeatureSiteTestFixture\n    {\n        private IpSecurityFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new IpSecurityModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new IpSecurityFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"ipSecurity\",\n                                new XElement(\"remove\",\n                                    new XAttribute(\"ipAddress\", \"10.0.0.0\")))))));\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"10.0.0.0\", _feature.SelectedItem.Address);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            var item = new IpSecurityItem(null);\n            item.Address = \"12.0.0.0\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"12.0.0.0\", _feature.SelectedItem.Address);\n            Assert.Equal(2, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"ipSecurity\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"ipAddress\", \"12.0.0.0\")))))));\n            document.Save(Expected);\n\n            var item = new IpSecurityItem(null);\n            item.Address = \"12.0.0.0\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"12.0.0.0\", _feature.SelectedItem.Address);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\"))));\n            document.Save(Expected);\n\n            var item = new IpSecurityItem(null);\n            item.Address = \"12.0.0.0\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"12.0.0.0\", _feature.SelectedItem.Address);\n\n            _feature.Revert();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/IsapiCgiRestriction/IsapiCgiRestrictionFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.IsapiCgiRestriction\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.IsapiCgiRestriction;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class IsapiCgiRestrictionFeatureServerTestFixture\n    {\n        private IsapiCgiRestrictionFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new IsapiCgiRestrictionModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new IsapiCgiRestrictionFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(4, _feature.Items.Count);\n            Assert.True(_feature.Items[0].Allowed);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/isapiCgiRestriction\");\n            node?.FirstNode.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(3, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/isapiCgiRestriction\");\n            var element = node?.FirstNode as XElement;\n            element?.SetAttributeValue(\"description\", \"test edit\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            item.Description = \"test edit\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test edit\", _feature.SelectedItem.Description);\n            Assert.Equal(4, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/isapiCgiRestriction\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"description\", \"my cgi\"),\n                    new XAttribute(\"path\", \"c:\\\\test.dll\"),\n                    new XAttribute(\"allowed\", \"true\")));\n            document.Save(Expected);\n\n            var item = new IsapiCgiRestrictionItem(null);\n            item.Description = \"my cgi\";\n            item.Path = \"c:\\\\test.dll\";\n            item.Allowed = true;\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"my cgi\", _feature.SelectedItem.Description);\n            Assert.True(_feature.SelectedItem.Allowed);\n            Assert.Equal(5, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/IsapiCgiRestriction/IsapiCgiRestrictionFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\n\nnamespace Tests.IsapiCgiRestriction\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.IsapiCgiRestriction;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class IsapiCgiRestrictionFeatureSiteTestFixture\n    {\n        private IsapiCgiRestrictionFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new IsapiCgiRestrictionModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new IsapiCgiRestrictionFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(4, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"isapiCgiRestriction\",\n                                new XElement(\"remove\",\n                                    new XAttribute(\"path\", @\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\")))))));\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"ASP.NET_v4.0\", _feature.SelectedItem.Description);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(3, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            var item = new IsapiCgiRestrictionItem(null);\n            item.Description = \"test\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Description);\n            Assert.Equal(5, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(4, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"isapiCgiRestriction\",\n                                new XElement(\"remove\",\n                                    new XAttribute(\"path\", @\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"allowed\", \"true\"),\n                                    new XAttribute(\"path\", \"c:\\\\test.dll\"),\n                                    new XAttribute(\"description\", \"ASP.NET_v4.0\")))))));\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"ASP.NET_v4.0\", _feature.SelectedItem.Description);\n            var item = _feature.SelectedItem;\n            item.Path = \"c:\\\\test.dll\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"c:\\\\test.dll\", _feature.SelectedItem.Path);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"isapiCgiRestriction\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"allowed\", \"false\"),\n                                    new XAttribute(\"path\", \"c:\\\\test.exe\"),\n                                    new XAttribute(\"description\", \"test\")))))));\n            document.Save(Expected);\n\n            var item = new IsapiCgiRestrictionItem(null);\n            item.Description = \"test\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Description);\n            Assert.Equal(5, _feature.Items.Count);\n            item.Path = \"c:\\\\test.exe\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"c:\\\\test.exe\", _feature.SelectedItem.Path);\n            Assert.Equal(5, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"security\",\n                            new XElement(\"isapiCgiRestriction\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"allowed\", \"false\"),\n                                    new XAttribute(\"path\", \"c:\\\\test.dll\"),\n                                    new XAttribute(\"description\", \"test\")))))));\n            document.Save(Expected);\n\n            var item = new IsapiCgiRestrictionItem(null);\n            item.Description = \"test\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Description);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/IsapiFilters/IsapiFiltersFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.IsapiFilters\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.IsapiFilters;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class IsapiFiltersFeatureServerTestFixture\n    {\n        private IsapiFiltersFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new IsapiFiltersModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new IsapiFiltersFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(5, _feature.Items.Count);\n            Assert.Equal(\"ASP.Net_2.0.50727-64\", _feature.Items[0].Name);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/isapiFilters\");\n            node?.FirstNode?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(4, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/isapiFilters\");\n            var element = node?.FirstNode as XElement;\n            element?.SetAttributeValue(\"path\", \"c:\\\\test.dll\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            var expected = \"c:\\\\test.dll\";\n            item.Path = expected;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(expected, _feature.SelectedItem.Path);\n            Assert.Equal(5, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/isapiFilters\");\n            node?.Add(\n                new XElement(\"filter\",\n                    new XAttribute(\"name\", \"my cgi\"),\n                    new XAttribute(\"path\", \"c:\\\\test.dll\")));\n            document.Save(Expected);\n\n            var item = new IsapiFiltersItem(null);\n            item.Name = \"my cgi\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"my cgi\", _feature.SelectedItem.Name);\n            Assert.Equal(\"c:\\\\test.dll\", _feature.SelectedItem.Path);\n            Assert.Equal(6, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n            var exception = Assert.Throws<InvalidOperationException>(() => _feature.Revert());\n            Assert.Equal(\"Revert operation cannot be done at server level\", exception.Message);\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/isapiFilters\");\n            var node1 = document.Root.XPathSelectElement(\"/configuration/system.webServer/isapiFilters/filter[@name='ASP.Net_2.0.50727.0']\");\n            var node2 = document.Root.XPathSelectElement(\"/configuration/system.webServer/isapiFilters/filter[@name='ASP.Net_2.0.50727.0-64']\");\n            node1?.Remove();\n            node2?.Remove();\n            node?.AddFirst(node1);\n            node?.AddFirst(node2);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            var selected = \"ASP.Net_2.0.50727.0\";\n            var other = \"ASP.Net_2.0.50727-64\";\n            Assert.Equal(selected, _feature.Items[1].Name);\n            Assert.Equal(other, _feature.Items[0].Name);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(selected, _feature.SelectedItem.Name);\n            Assert.Equal(selected, _feature.Items[0].Name);\n            Assert.Equal(other, _feature.Items[1].Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/isapiFilters\");\n            var node1 = document.Root.XPathSelectElement(\"/configuration/system.webServer/isapiFilters/filter[@name='ASP.Net_2.0.50727.0']\");\n            var node2 = document.Root.XPathSelectElement(\"/configuration/system.webServer/isapiFilters/filter[@name='ASP.Net_2.0.50727.0-64']\");\n            node1?.Remove();\n            node2?.Remove();\n            node?.AddFirst(node1);\n            node?.AddFirst(node2);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var other = \"ASP.Net_2.0.50727.0\";\n            Assert.Equal(other, _feature.Items[1].Name);\n            var selected = \"ASP.Net_2.0.50727-64\";\n            Assert.Equal(selected, _feature.Items[0].Name);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(selected, _feature.SelectedItem.Name);\n            Assert.Equal(other, _feature.Items[0].Name);\n            Assert.Equal(selected, _feature.Items[1].Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/IsapiFilters/IsapiFiltersFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.IsapiFilters\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.IsapiFilters;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class IsapiFiltersFeatureSiteTestFixture\n    {\n        private IsapiFiltersFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new IsapiFiltersModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new IsapiFiltersFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(5, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"isapiFilters\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"name\", \"ASP.Net_2.0.50727-64\"))))));\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"ASP.Net_2.0.50727-64\", _feature.SelectedItem.Name);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(4, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            var item = new IsapiFiltersItem(null);\n            item.Name = \"test\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n            Assert.Equal(6, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(5, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"isapiFilters\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"name\", \"ASP.Net_2.0.50727-64\")),\n                            new XElement(\"filter\",\n                                new XAttribute(\"enableCache\", \"true\"),\n                                new XAttribute(\"preCondition\", \"bitness64,runtimeVersionv2.0\"),\n                                new XAttribute(\"name\", \"ASP.Net_2.0.50727-64\"),\n                                new XAttribute(\"path\", \"c:\\\\test.dll\"))))));\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"ASP.Net_2.0.50727-64\", _feature.SelectedItem.Name);\n            var item = _feature.SelectedItem;\n            item.Path = \"c:\\\\test.dll\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"c:\\\\test.dll\", _feature.SelectedItem.Path);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"isapiFilters\",\n                            new XElement(\"filter\",\n                                new XAttribute(\"name\", \"test\"),\n                                new XAttribute(\"path\", \"c:\\\\test.exe\"))))));\n            document.Save(Expected);\n\n            var item = new IsapiFiltersItem(null);\n            item.Name = \"test\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n            Assert.Equal(6, _feature.Items.Count);\n            item.Path = \"c:\\\\test.exe\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"c:\\\\test.exe\", _feature.SelectedItem.Path);\n            Assert.Equal(6, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"isapiFilters\",\n                            new XElement(\"filter\",\n                                new XAttribute(\"name\", \"test\"),\n                                new XAttribute(\"path\", \"c:\\\\test.dll\"))))));\n            document.Save(Expected);\n\n            var item = new IsapiFiltersItem(null);\n            item.Name = \"test\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_revert.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\")));\n            document.Save(Expected);\n\n            var item = new IsapiFiltersItem(null);\n            item.Name = \"test\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n\n            _feature.Revert();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(5, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"isapiFilters\",\n                            new XElement(\"clear\"),\n                            new XElement(\"filter\",\n                                new XAttribute(\"enableCache\", \"true\"),\n                                new XAttribute(\"name\", \"ASP.Net_2.0.50727-64\"),\n                                new XAttribute(\"path\", @\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_filter.dll\"),\n                                new XAttribute(\"preCondition\", \"bitness64,runtimeVersionv2.0\")),\n                            new XElement(\"filter\",\n                                new XAttribute(\"enableCache\", \"true\"),\n                                new XAttribute(\"name\", \"ASP.Net_2.0.50727.0\"),\n                                new XAttribute(\"path\", @\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\"),\n                                new XAttribute(\"preCondition\", \"bitness32,runtimeVersionv2.0\")),\n                            new XElement(\"filter\",\n                                new XAttribute(\"enableCache\", \"true\"),\n                                new XAttribute(\"name\", \"ASP.Net_2.0_for_v1.1\"),\n                                new XAttribute(\"path\", @\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\"),\n                                new XAttribute(\"preCondition\", \"runtimeVersionv1.1\")),\n                            new XElement(\"filter\",\n                                new XAttribute(\"enableCache\", \"true\"),\n                                new XAttribute(\"name\", \"ASP.Net_4.0_32bit\"),\n                                new XAttribute(\"path\", @\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_filter.dll\"),\n                                new XAttribute(\"preCondition\", \"bitness32,runtimeVersionv4.0\")),\n                            new XElement(\"filter\",\n                                new XAttribute(\"name\", \"test\"),\n                                new XAttribute(\"path\", \"c:\\\\test.dll\")),\n                            new XElement(\"filter\",\n                                new XAttribute(\"enableCache\", \"true\"),\n                                new XAttribute(\"name\", \"ASP.Net_4.0_64bit\"),\n                                new XAttribute(\"path\", @\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_filter.dll\"),\n                                new XAttribute(\"preCondition\", \"bitness64,runtimeVersionv4.0\"))))));\n            document.Save(Expected);\n\n            var item = new IsapiFiltersItem(null);\n            item.Name = \"test\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n\n            var last = 5;\n            var previous = last - 1;\n            _feature.SelectedItem = _feature.Items[last];\n            var expected = \"test\";\n            Assert.Equal(expected, _feature.Items[last].Name);\n            var original = \"ASP.Net_4.0_64bit\";\n            Assert.Equal(original, _feature.Items[previous].Name);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(expected, _feature.SelectedItem.Name);\n            Assert.Equal(expected, _feature.Items[previous].Name);\n            Assert.Equal(original, _feature.Items[last].Name);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                 new XAttribute(\"path\", \"WebSite1\"),\n                 new XElement(\"system.webServer\",\n                    new XElement(\"isapiFilters\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"name\", \"ASP.Net_4.0_64bit\")),\n                        new XElement(\"filter\",\n                            new XAttribute(\"name\", \"test\"),\n                            new XAttribute(\"path\", \"c:\\\\test.dll\")),\n                        new XElement(\"filter\",\n                            new XAttribute(\"enableCache\", \"true\"),\n                            new XAttribute(\"name\", \"ASP.Net_4.0_64bit\"),\n                            new XAttribute(\"path\", @\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_filter.dll\"),\n                            new XAttribute(\"preCondition\", \"bitness64,runtimeVersionv4.0\"))))));\n            document.Save(Expected);\n\n            var item = new IsapiFiltersItem(null);\n            item.Name = \"test\";\n            item.Path = \"c:\\\\test.dll\";\n            _feature.AddItem(item);\n\n            var last = 5;\n            var previous = last - 1;\n            _feature.SelectedItem = _feature.Items[previous];\n            var expected = \"test\";\n            Assert.Equal(expected, _feature.Items[last].Name);\n            var original = \"ASP.Net_4.0_64bit\";\n            Assert.Equal(original, _feature.Items[previous].Name);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(original, _feature.SelectedItem.Name);\n            Assert.Equal(expected, _feature.Items[previous].Name);\n            Assert.Equal(original, _feature.Items[last].Name);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Main/SiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Main\n{\n    using System;\n    using System.IO;\n    using System.Reflection;\n\n    using Microsoft.Web.Administration;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n\n    public class SiteTestFixture\n    {\n        [Fact]\n        public void AddSite()\n        {\n            const string Current = @\"applicationHost.config\";\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            var serverManager = new IisExpressServerManager(Current);\n\n            const string Expected = @\"expected_site_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.applicationHost/sites\");\n            node?.Add(\n                new XElement(\"site\",\n                    new XAttribute(\"name\", \"Contoso\"),\n                    new XAttribute(\"id\", \"2\"),\n                        new XElement(\"bindings\",\n                            new XElement(\"binding\",\n                                new XAttribute(\"protocol\", \"http\"),\n                                new XAttribute(\"bindingInformation\", @\"*:80:www.contoso.com\"))),\n                        new XElement(\"application\",\n                            new XAttribute(\"path\", \"/\"),\n                            new XElement(\"virtualDirectory\",\n                                new XAttribute(\"path\", \"/\"),\n                                new XAttribute(\"physicalPath\", @\"C:\\Inetpub\\www.contoso.com\\wwwroot\")))));\n            document.Save(Expected);\n\n            Configuration config = serverManager.GetApplicationHostConfiguration();\n            ConfigurationSection sitesSection = config.GetSection(\"system.applicationHost/sites\");\n            ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();\n\n            ConfigurationElement siteElement = sitesCollection.CreateElement(\"site\");\n            siteElement[\"name\"] = @\"Contoso\";\n            siteElement[\"id\"] = 2;\n            siteElement[\"serverAutoStart\"] = true;\n\n            ConfigurationElementCollection bindingsCollection = siteElement.GetCollection(\"bindings\");\n            ConfigurationElement bindingElement = bindingsCollection.CreateElement(\"binding\");\n            bindingElement[\"protocol\"] = @\"http\";\n            bindingElement[\"bindingInformation\"] = @\"*:80:www.contoso.com\";\n            bindingsCollection.Add(bindingElement);\n\n            ConfigurationElementCollection siteCollection = siteElement.GetCollection();\n            ConfigurationElement applicationElement = siteCollection.CreateElement(\"application\");\n            applicationElement[\"path\"] = @\"/\";\n            ConfigurationElementCollection applicationCollection = applicationElement.GetCollection();\n            ConfigurationElement virtualDirectoryElement = applicationCollection.CreateElement(\"virtualDirectory\");\n            virtualDirectoryElement[\"path\"] = @\"/\";\n            virtualDirectoryElement[\"physicalPath\"] = @\"C:\\Inetpub\\www.contoso.com\\wwwroot\";\n            applicationCollection.Add(virtualDirectoryElement);\n            siteCollection.Add(applicationElement);\n            sitesCollection.Add(siteElement);\n\n            serverManager.CommitChanges();\n\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void AddSiteManaged()\n        {\n            const string Current = @\"applicationHost.config\";\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            var serverManager = new IisExpressServerManager(Current);\n\n            const string Expected = @\"expected_site_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.applicationHost/sites\");\n            node?.Add(\n                new XElement(\"site\",\n                    new XAttribute(\"name\", \"Contoso\"),\n                    new XAttribute(\"id\", \"2\"),\n                        new XElement(\"bindings\",\n                            new XElement(\"binding\",\n                                new XAttribute(\"protocol\", \"http\"),\n                                new XAttribute(\"bindingInformation\", @\"*:80:www.contoso.com\"))),\n                        new XElement(\"application\",\n                new XAttribute(\"path\", \"/\"),\n                    new XElement(\"virtualDirectory\",\n                        new XAttribute(\"path\", \"/\"),\n                        new XAttribute(\"physicalPath\", @\"C:\\Inetpub\\www.contoso.com\\wwwroot\")))));\n            document.Save(Expected);\n\n            var sites = serverManager.Sites;\n            var site = new Site(sites);\n            site.Name = @\"Contoso\";\n            site.Id = 2L;\n            site.ServerAutoStart = true;\n\n            var binding = new Binding(@\"http\", @\"*:80:www.contoso.com\", null, null, SslFlags.None, site.Bindings);\n            site.Bindings.Add(binding);\n\n            var application = new Application(site.Applications);\n            application.Path = @\"/\";\n\n            site.Applications.Add(application);\n\n            var directory = new VirtualDirectory(null, application.VirtualDirectories);\n            directory.Path = @\"/\";\n            directory.PhysicalPath = @\"C:\\Inetpub\\www.contoso.com\\wwwroot\";\n\n            application.VirtualDirectories.Add(directory);\n\n            sites.Add(site);\n\n            serverManager.CommitChanges();\n\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/MimeMap/MimeMapFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.MimeMap\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Linq;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.MimeMap;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class MimeMapFeatureServerTestFixture\n    {\n        private MimeMapFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new MimeMapModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new MimeMapFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(374, _feature.Items.Count);\n            Assert.Equal(\".323\", _feature.Items[0].FileExtension);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/staticContent\");\n            node?.FirstNode?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(373, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/staticContent\");\n            var element = node?.FirstNode as XElement;\n            element?.SetAttributeValue(\"mimeType\", \"text/test\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            item.MimeType = \"text/test\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"text/test\", _feature.SelectedItem.MimeType);\n            Assert.Equal(374, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/staticContent\");\n            node?.Add(\n                new XElement(\"mimeMap\",\n                    new XAttribute(\"fileExtension\", \".tx1\"),\n                    new XAttribute(\"mimeType\", \"text/test\")));\n            document.Save(Expected);\n\n            var item = new MimeMapItem(null);\n            item.FileExtension = \".tx1\";\n            item.MimeType = \"text/test\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\".tx1\", _feature.SelectedItem.FileExtension);\n            Assert.Equal(375, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/MimeMap/MimeMapFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.MimeMap\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.MimeMap;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class MimeMapFeatureSiteTestFixture\n    {\n        private MimeMapFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new MimeMapModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new MimeMapFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(374, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"staticContent\",\n                    new XElement(\"remove\",\n                        new XAttribute(\"fileExtension\", \".323\"))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\".323\", _feature.SelectedItem.FileExtension);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(373, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove1.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new MimeMapItem(null);\n            item.FileExtension = \".xl1\";\n            item.MimeType = \"text/test\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\".xl1\", _feature.SelectedItem.FileExtension);\n            Assert.Equal(375, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(374, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"staticContent\",\n                    new XElement(\"remove\",\n                        new XAttribute(\"fileExtension\", \".323\")),\n                    new XElement(\"mimeMap\",\n                        new XAttribute(\"fileExtension\", \".323\"),\n                        new XAttribute(\"mimeType\", \"text/test\"))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\".323\", _feature.SelectedItem.FileExtension);\n            var item = _feature.SelectedItem;\n            item.MimeType = \"text/test\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"text/test\", _feature.SelectedItem.MimeType);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"staticContent\",\n                    new XElement(\"mimeMap\",\n                        new XAttribute(\"fileExtension\", \".xl1\"),\n                        new XAttribute(\"mimeType\", \"text/test2\"))));\n            document.Save(expected);\n\n            var item = new MimeMapItem(null);\n            item.FileExtension = \".xl1\";\n            item.MimeType = \"text/test\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"text/test\", _feature.SelectedItem.MimeType);\n            Assert.Equal(375, _feature.Items.Count);\n            item.MimeType = \"text/test2\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"text/test2\", _feature.SelectedItem.MimeType);\n            Assert.Equal(375, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"staticContent\",\n                    new XElement(\"mimeMap\",\n                        new XAttribute(\"fileExtension\", \".pp1\"),\n                        new XAttribute(\"mimeType\", \"text/test\"))));\n            document.Save(expected);\n\n            var item = new MimeMapItem(null);\n            item.FileExtension = \".pp1\";\n            item.MimeType = \"text/test\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\".pp1\", _feature.SelectedItem.FileExtension);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Modules/ModulesFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.Modules\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Modules;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class ModulesFeatureServerTestFixture\n    {\n        private ModulesFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new ModulesModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new ModulesFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(44, _feature.Items.Count);\n            Assert.Equal(\"DynamicCompressionModule\", _feature.Items[0].Name);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node1 = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules/add[@name='RewriteModule']\");\n            node1?.Remove();\n            document.Save(Expected);\n\n            Assert.Equal(\"RewriteModule\", _feature.Items[26].Name);\n            _feature.SelectedItem = _feature.Items[26];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(43, _feature.Items.Count);\n            Assert.Equal(\"OutputCache\", _feature.Items[26].Name);\n\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules\");\n            node?.FirstNode?.Remove(); // remove comment\n            var element = node?.LastNode as XElement;\n            element?.SetAttributeValue(\"type\", \"test\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[43];\n            var item = _feature.SelectedItem;\n            item.Type = \"test\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Type);\n            Assert.Equal(44, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules\");\n            node?.FirstNode?.Remove(); // remove comment\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"name\", \"test\"),\n                    new XAttribute(\"type\", \"test\")));\n            document.Save(Expected);\n\n            var item = new ModulesItem(null);\n            item.Name = \"test\";\n            item.Type = \"test\";\n            item.IsManaged = true;\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n            Assert.Equal(45, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAddGlobal()\n        {\n            SetUp();\n            const string Expected = @\"expected_addglobal.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/globalModules\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"name\", \"test\"),\n                    new XAttribute(\"image\", \"test\")));\n            document.Save(Expected);\n\n            Assert.Equal(37, _feature.GlobalModules.Count);\n\n            var item = new GlobalModule(null);\n            item.Name = \"test\";\n            item.Image = \"test\";\n            _feature.AddGlobal(item);\n            Assert.Equal(38, _feature.GlobalModules.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestRemoveGlobal()\n        {\n            SetUp();\n            const string Expected = @\"expected_removeglobal.config\";\n\n            var document = XDocument.Load(Current);\n            document.Save(Expected);\n\n            Assert.Equal(37, _feature.GlobalModules.Count);\n\n            var item = new GlobalModule(null);\n            item.Name = \"test\";\n            item.Image = \"test\";\n            _feature.AddGlobal(item);\n            Assert.Equal(38, _feature.GlobalModules.Count);\n\n            _feature.RemoveGlobal(item);\n            Assert.Equal(37, _feature.GlobalModules.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n            var exception = Assert.Throws<InvalidOperationException>(() => _feature.Revert());\n            Assert.Equal(\"Revert operation cannot be done at server level\", exception.Message);\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var last = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules/add[@name='FastCgiModule']\");\n            var node1 = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules/add[@name='RewriteModule']\");\n            var node2 = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules/add[@name='OutputCache']\");\n            node1?.Remove();\n            node2?.Remove();\n            last?.AddAfterSelf(node1);\n            last?.AddAfterSelf(node2);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[27];\n            var selected = \"OutputCache\";\n            var other = \"RewriteModule\";\n            Assert.Equal(selected, _feature.Items[27].Name);\n            Assert.Equal(other, _feature.Items[26].Name);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(selected, _feature.SelectedItem.Name);\n            Assert.Equal(selected, _feature.Items[26].Name);\n            Assert.Equal(other, _feature.Items[27].Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var last = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules/add[@name='FastCgiModule']\");\n            var node1 = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules/add[@name='RewriteModule']\");\n            var node2 = document.Root?.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules/add[@name='OutputCache']\");\n            node1?.Remove();\n            node2?.Remove();\n            last?.AddAfterSelf(node1);\n            last?.AddAfterSelf(node2);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[26];\n            var other = \"OutputCache\";\n            Assert.Equal(other, _feature.Items[27].Name);\n            var selected = \"RewriteModule\";\n            Assert.Equal(selected, _feature.Items[26].Name);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(selected, _feature.SelectedItem.Name);\n            Assert.Equal(other, _feature.Items[26].Name);\n            Assert.Equal(selected, _feature.Items[27].Name);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Modules/ModulesFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Modules\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.Modules;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class ModulesFeatureSiteTestFixture\n    {\n        private ModulesFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new ModulesModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new ModulesFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(44, _feature.Items.Count);\n            Assert.Equal(\"DynamicCompressionModule\", _feature.Items[0].Name);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                 new XAttribute(\"path\", \"WebSite1\"),\n                 new XElement(\"system.webServer\",\n                    new XElement(\"modules\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"name\", \"RewriteModule\"))))));\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[26];\n            Assert.Equal(\"RewriteModule\", _feature.SelectedItem.Name);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(43, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\")));\n            document.Save(Expected);\n\n            var item = new ModulesItem(null);\n            item.Name = \"test\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n            Assert.Equal(45, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(44, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"modules\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"name\", \"ScriptModule-4.0\")),\n                            new XElement(\"add\",\n                                new XAttribute(\"preCondition\", \"managedHandler,runtimeVersionv4.0\"),\n                                new XAttribute(\"name\", \"ScriptModule-4.0\"),\n                                new XAttribute(\"type\", \"test\"))))));\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[43];\n            Assert.Equal(\"System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\", _feature.SelectedItem.Type);\n            var item = _feature.SelectedItem;\n            item.Type = \"test\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Type);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                 new XAttribute(\"path\", \"WebSite1\"),\n                 new XElement(\"system.webServer\",\n                    new XElement(\"modules\",\n                        new XElement(\"add\",\n                            new XAttribute(\"name\", \"test\"),\n                            new XAttribute(\"type\", \"test\"))))));\n            document.Save(Expected);\n\n            var item = new ModulesItem(null);\n            item.Name = \"test\";\n            item.Type = \"test2\";\n            item.IsManaged = true;\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n            Assert.Equal(45, _feature.Items.Count);\n            item.Type = \"test\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Type);\n            Assert.Equal(45, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                  new XAttribute(\"path\", \"WebSite1\"),\n                  new XElement(\"system.webServer\",\n                    new XElement(\"modules\",\n                        new XElement(\"add\",\n                            new XAttribute(\"name\", \"test\"),\n                            new XAttribute(\"type\", \"test1\"))))));\n            document.Save(Expected);\n\n            var item = new ModulesItem(null);\n            item.Name = \"test\";\n            item.Type = \"test1\";\n            item.IsManaged = true;\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root?.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\")));\n            document.Save(Expected);\n\n            var item = new ModulesItem(null);\n            item.Name = \"test\";\n            item.Type = \"test1\";\n            item.IsManaged = true;\n            _feature.AddItem(item);\n\n            _feature.Revert();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(44, _feature.Items.Count);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            var node = new XElement(\"location\",\n                new XAttribute(\"path\", \"WebSite1\"));\n            document.Root.Add(node);\n            var web = new XElement(\"system.webServer\");\n            node.Add(web);\n            var content = new XElement(\"modules\",\n                new XElement(\"clear\"));\n            web.Add(content);\n\n            var all = document.Root.XPathSelectElement(\"/configuration/location[@path='']/system.webServer/modules\");\n            foreach (var element in all.Elements())\n            {\n                content.Add(element);\n            }\n\n            content.LastNode.Remove();\n\n            var add = new XElement(\"add\",\n                new XAttribute(\"name\", \"test\"),\n                new XAttribute(\"type\", \"test1\"));\n            content.Add(add);\n            var one = new XElement(\"add\",\n                new XAttribute(\"preCondition\", \"managedHandler,runtimeVersionv4.0\"),\n                new XAttribute(\"name\", \"ScriptModule-4.0\"),\n                new XAttribute(\"type\", \"System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\"));\n            content.Add(one);\n            document.Save(Expected);\n\n            var item = new ModulesItem(null);\n            item.Name = \"test\";\n            item.Type = \"test1\";\n            item.IsManaged = true;\n            _feature.AddItem(item);\n\n            var last = 44;\n            var previous = last - 1;\n            _feature.SelectedItem = _feature.Items[last];\n            var expected = \"test\";\n            Assert.Equal(expected, _feature.Items[last].Name);\n            var original = \"ScriptModule-4.0\";\n            Assert.Equal(original, _feature.Items[previous].Name);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(expected, _feature.SelectedItem.Name);\n            Assert.Equal(expected, _feature.Items[previous].Name);\n            Assert.Equal(original, _feature.Items[last].Name);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n\n            const string Expected = @\"expected_add.site.config\";\n            var document = XDocument.Load(Current);\n            document.Root.Add(\n                new XElement(\"location\",\n                    new XAttribute(\"path\", \"WebSite1\"),\n                    new XElement(\"system.webServer\",\n                        new XElement(\"modules\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"name\", \"ScriptModule-4.0\")),\n                            new XElement(\"add\",\n                                new XAttribute(\"name\", \"test\"),\n                                new XAttribute(\"type\", \"test1\")),\n                            new XElement(\"add\",\n                                new XAttribute(\"preCondition\", \"managedHandler,runtimeVersionv4.0\"),\n                                new XAttribute(\"name\", \"ScriptModule-4.0\"),\n                                new XAttribute(\"type\", \"System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\"))))));\n            document.Save(Expected);\n\n            var item = new ModulesItem(null);\n            item.Name = \"test\";\n            item.Type = \"test1\";\n            item.IsManaged = true;\n            _feature.AddItem(item);\n\n            var last = 44;\n            var previous = last - 1;\n            _feature.SelectedItem = _feature.Items[previous];\n            var expected = \"test\";\n            Assert.Equal(expected, _feature.Items[last].Name);\n            var original = \"ScriptModule-4.0\";\n            Assert.Equal(original, _feature.Items[previous].Name);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(original, _feature.SelectedItem.Name);\n            Assert.Equal(expected, _feature.Items[previous].Name);\n            Assert.Equal(original, _feature.Items[last].Name);\n\n            XmlAssert.Equal(Expected, Current);\n            XmlAssert.Equal(Path.Combine(\"Website1\", \"original.config\"), Path.Combine(\"Website1\", \"web.config\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Properties/AssemblyInfo.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyCopyright(\"Copyright \\u00A9  2015-2022\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"aef03715-1847-4ba7-bfdc-7d3e738e552c\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/FileExtensions/FileExtensionsFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.FileExtensions\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class FileExtensionsFeatureServerTestFixture\n    {\n        private FileExtensionsFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new FileExtensionsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(44, _feature.Items.Count);\n            Assert.Equal(\".asa\", _feature.Items[0].Extension);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/fileExtensions\");\n            node?.FirstNode.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(43, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/fileExtensions\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"fileExtension\", \".csv\"),\n                    new XAttribute(\"allowed\", \"false\")));\n            document.Save(Expected);\n\n            var item = new FileExtensionsItem(null);\n            item.Extension = \".csv\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\".csv\", _feature.SelectedItem.Extension);\n            Assert.Equal(45, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/FileExtensions/FileExtensionsFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.FileExtensions\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class FileExtensionsFeatureSiteTestFixture\n    {\n        private FileExtensionsFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new FileExtensionsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(44, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"fileExtensions\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"fileExtension\", \".asa\"))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\".asa\", _feature.SelectedItem.Extension);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(43, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new FileExtensionsItem(null);\n            item.Extension = \".csv\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\".csv\", _feature.SelectedItem.Extension);\n            Assert.Equal(45, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(44, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"fileExtensions\",\n                            new XElement(\"add\",\n                                new XAttribute(\"allowed\", \"false\"),\n                                new XAttribute(\"fileExtension\", \".csv\"))))));\n            document.Save(expected);\n\n            var item = new FileExtensionsItem(null);\n            item.Extension = \".csv\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\".csv\", _feature.SelectedItem.Extension);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/FilteringRules/FilteringRulesFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.RequestFiltering.FilteringRules\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class FilteringRulesFeatureServerTestFixture\n    {\n        private FilteringRulesFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new FilteringRulesFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n            Assert.Equal(\"test\", _feature.Items[0].Name);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/filteringRules\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/filteringRules/filteringRule\");\n            node?.SetAttributeValue(\"scanQueryString\", \"true\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            item.ScanQueryString = true;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.True(_feature.SelectedItem.ScanQueryString);\n            Assert.Single(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/filteringRules\");\n            node?.Add(\n                new XElement(\"filteringRule\",\n                    new XAttribute(\"name\", \"test1\")));\n            document.Save(Expected);\n\n            var item = new FilteringRulesItem(null);\n            item.Name = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.Name);\n            Assert.Equal(2, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/FilteringRules/FilteringRulesFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.RequestFiltering.FilteringRules\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class FilteringRulesFeatureSiteTestFixture\n    {\n        private FilteringRulesFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.Initialize(serviceContainer, null);\n\n            _feature = new FilteringRulesFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"filteringRules\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"name\", \"test\"))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"test\", _feature.SelectedItem.Name);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new FilteringRulesItem(null);\n            item.Name = \"test1\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test1\", _feature.SelectedItem.Name);\n            Assert.Equal(2, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"filteringRules\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"name\", \"test\")),\n                            new XElement(\"filteringRule\",\n                                new XAttribute(\"name\", \"test\"),\n                                new XAttribute(\"scanQueryString\", \"true\"))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.False(_feature.SelectedItem.ScanQueryString);\n            var item = _feature.SelectedItem;\n            item.ScanQueryString = true;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.True(_feature.SelectedItem.ScanQueryString);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"filteringRules\",\n                            new XElement(\"filteringRule\",\n                                new XAttribute(\"name\", \"test1\"),\n                                new XAttribute(\"scanQueryString\", \"true\"))))));\n            document.Save(expected);\n\n            var item = new FilteringRulesItem(null);\n            item.Name = \"test1\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test1\", _feature.SelectedItem.Name);\n            Assert.Equal(2, _feature.Items.Count);\n            item.ScanQueryString = true;\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.True(_feature.SelectedItem.ScanQueryString);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"filteringRules\",\n                            new XElement(\"filteringRule\",\n                                new XAttribute(\"name\", \"test1\"))))));\n            document.Save(expected);\n\n            var item = new FilteringRulesItem(null);\n            item.Name = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.Name);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/Headers/HeadersFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.Headers\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class HeadersFeatureServerTestFixture\n    {\n        private HeadersFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new HeadersFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n            Assert.Equal(\"test\", _feature.Items[0].Header);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/requestLimits\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/requestLimits/headerLimits\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"header\", \"test1\"),\n                    new XAttribute(\"sizeLimit\", \"200\")));\n            document.Save(Expected);\n\n            var item = new HeadersItem(null);\n            item.Header = \"test1\";\n            item.SizeLimit = 200;\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.Header);\n            Assert.Equal(2, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/Headers/HeadersFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.Headers\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class HeadersFeatureSiteTestFixture\n    {\n        private HeadersFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new HeadersFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"requestLimits\",\n                            new XElement(\"headerLimits\",\n                                new XElement(\"remove\",\n                                    new XAttribute(\"header\", \"test\")))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"test\", _feature.SelectedItem.Header);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new HeadersItem(null);\n            item.Header = \"test1\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test1\", _feature.SelectedItem.Header);\n            Assert.Equal(2, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"requestLimits\",\n                            new XElement(\"headerLimits\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"header\", \"test1\"),\n                                    new XAttribute(\"sizeLimit\", \"200\")))))));\n            document.Save(expected);\n\n            var item = new HeadersItem(null);\n            item.Header = \"test1\";\n            item.SizeLimit = 200;\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.Header);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/HiddenSegments/HiddenSegmentsFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Runtime.InteropServices;\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.HiddenSegments\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class HiddenSegmentsFeatureServerTestFixture\n    {\n        private HiddenSegmentsFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new HiddenSegmentsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(8, _feature.Items.Count);\n            Assert.Equal(\"web.config\", _feature.Items[0].Segment);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/hiddenSegments\");\n            node?.FirstNode.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(7, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/hiddenSegments\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"segment\", \"test\")));\n            document.Save(Expected);\n\n            var item = new HiddenSegmentsItem(null);\n            item.Segment = \"test\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Segment);\n            Assert.Equal(9, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/HiddenSegments/HiddenSegmentsFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.HiddenSegments\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class HiddenSegmentsFeatureSiteTestFixture\n    {\n        private HiddenSegmentsFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new HiddenSegmentsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(8, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"hiddenSegments\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"segment\", \"web.config\"))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"web.config\", _feature.SelectedItem.Segment);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(7, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new HiddenSegmentsItem(null);\n            item.Segment = \"test\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test\", _feature.SelectedItem.Segment);\n            Assert.Equal(9, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(8, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"hiddenSegments\",\n                            new XElement(\"add\",\n                                new XAttribute(\"segment\", \"test\"))))));\n            document.Save(expected);\n\n            var item = new HiddenSegmentsItem(null);\n            item.Segment = \"test\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test\", _feature.SelectedItem.Segment);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/QueryStrings/QueryStringsFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.QueryStrings\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class QueryStringsFeatureServerTestFixture\n    {\n        private QueryStringsFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new QueryStringsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(2, _feature.Items.Count);\n            Assert.Equal(\"test\", _feature.Items[0].QueryString);\n            Assert.True(_feature.Items[0].Allowed);\n            Assert.Equal(\"test\", _feature.Items[1].QueryString);\n            Assert.False(_feature.Items[1].Allowed);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/alwaysAllowedQueryStrings\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestRemoveDeny()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove_deny.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/denyQueryStringSequences\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/alwaysAllowedQueryStrings\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"queryString\", \"test1\")));\n            document.Save(Expected);\n\n            var item = new QueryStringsItem(null, true);\n            item.QueryString = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.QueryString);\n            Assert.Equal(3, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAddDeny()\n        {\n            SetUp();\n            const string Expected = @\"expected_add_deny.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/denyQueryStringSequences\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"sequence\", \"test1\")));\n            document.Save(Expected);\n\n            var item = new QueryStringsItem(null, false);\n            item.QueryString = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.QueryString);\n            Assert.Equal(3, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/QueryStrings/QueryStringsFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.QueryStrings\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class QueryStringsFeatureSiteTestFixture\n    {\n        private QueryStringsFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new QueryStringsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(2, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"alwaysAllowedQueryStrings\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"queryString\", \"test\"))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"test\", _feature.SelectedItem.QueryString);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemoveDenyInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"denyQueryStringSequences\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"sequence\", \"test\"))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            Assert.Equal(\"test\", _feature.SelectedItem.QueryString);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new QueryStringsItem(null, true);\n            item.QueryString = \"test1\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test1\", _feature.SelectedItem.QueryString);\n            Assert.Equal(3, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemoveDeny()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new QueryStringsItem(null, false);\n            item.QueryString = \"test1\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test1\", _feature.SelectedItem.QueryString);\n            Assert.Equal(3, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"alwaysAllowedQueryStrings\",\n                            new XElement(\"add\",\n                                new XAttribute(\"queryString\", \"test1\"))))));\n            document.Save(expected);\n\n            var item = new QueryStringsItem(null, true);\n            item.QueryString = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.QueryString);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAddDeny()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"denyQueryStringSequences\",\n                            new XElement(\"add\",\n                                new XAttribute(\"sequence\", \"test1\"))))));\n            document.Save(expected);\n\n            var item = new QueryStringsItem(null, false);\n            item.QueryString = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.QueryString);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/Urls/UrlsFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.Urls\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class UrlsFeatureServerTestFixture\n    {\n        private UrlsFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new UrlsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(2, _feature.Items.Count);\n            Assert.Equal(\"test\", _feature.Items[0].Url);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/alwaysAllowedUrls\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestRemoveDeny()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/denyUrlSequences\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/alwaysAllowedUrls\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"url\", \"test1\")));\n            document.Save(Expected);\n\n            var item = new UrlsItem(null, true);\n            item.Url = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.Url);\n            Assert.Equal(3, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAddDeny()\n        {\n            SetUp();\n            const string Expected = @\"expected_add_deny.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/denyUrlSequences\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"sequence\", \"test1\")));\n            document.Save(Expected);\n\n            var item = new UrlsItem(null, false);\n            item.Url = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.Url);\n            Assert.Equal(3, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/Urls/UrlsFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.Urls\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class UrlsFeatureSiteTestFixture\n    {\n        private UrlsFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new UrlsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(2, _feature.Items.Count);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"alwaysAllowedUrls\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"url\", \"test\"))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"test\", _feature.SelectedItem.Url);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemoveDenyInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"denyUrlSequences\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"sequence\", \"test\"))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            Assert.Equal(\"test\", _feature.SelectedItem.Url);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new UrlsItem(null, true);\n            item.Url = \"test1\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test1\", _feature.SelectedItem.Url);\n            Assert.Equal(3, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemoveDeny()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new UrlsItem(null, false);\n            item.Url = \"test1\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"test1\", _feature.SelectedItem.Url);\n            Assert.Equal(3, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"alwaysAllowedUrls\",\n                            new XElement(\"add\",\n                                new XAttribute(\"url\", \"test1\"))))));\n            document.Save(expected);\n\n            var item = new UrlsItem(null, true);\n            item.Url = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.Url);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAddDeny()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"denyUrlSequences\",\n                            new XElement(\"add\",\n                                new XAttribute(\"sequence\", \"test1\"))))));\n            document.Save(expected);\n\n            var item = new UrlsItem(null, false);\n            item.Url = \"test1\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"test1\", _feature.SelectedItem.Url);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/Verbs/VerbsFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.Verbs\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class VerbsFeatureServerTestFixture\n    {\n        private VerbsFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new VerbsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n            Assert.Equal(\"PUT\", _feature.Items[0].Verb);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/verbs\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/security/requestFiltering/verbs\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"verb\", \"GET\"),\n                    new XAttribute(\"allowed\", \"false\")));\n            document.Save(Expected);\n\n            var item = new VerbsItem(null);\n            item.Verb = \"GET\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"GET\", _feature.SelectedItem.Verb);\n            Assert.Equal(2, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/RequestFiltering/Verbs/VerbsFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Xml.Linq;\nusing System.Xml.XPath;\n\nnamespace Tests.RequestFiltering.Verbs\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.RequestFiltering;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n    using NSubstitute;\n    using Xunit;\n\n    public class VerbsFeatureSiteTestFixture\n    {\n        private VerbsFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new RequestFilteringModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new VerbsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"verbs\",\n                            new XElement(\"remove\",\n                                new XAttribute(\"verb\", \"PUT\"))))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"PUT\", _feature.SelectedItem.Verb);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new VerbsItem(null);\n            item.Verb = \"GET\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"GET\", _feature.SelectedItem.Verb);\n            Assert.Equal(2, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"security\",\n                    new XElement(\"requestFiltering\",\n                        new XElement(\"verbs\",\n                            new XElement(\"add\",\n                                new XAttribute(\"allowed\", \"false\"),\n                                new XAttribute(\"verb\", \"GET\"))))));\n            document.Save(expected);\n\n            var item = new VerbsItem(null);\n            item.Verb = \"GET\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"GET\", _feature.SelectedItem.Verb);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/ResponseHeaders/ResponseHeadersFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.ResponseHeaders\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.ResponseHeaders;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class ResponseHeadersFeatureServerTestFixture\n    {\n        private ResponseHeadersFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new ResponseHeadersModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new ResponseHeadersFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n            Assert.Equal(\"X-Powered-By\", _feature.Items[0].Name);\n            Assert.Equal(\"ASP.NET\", _feature.Items[0].Value);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/httpProtocol/customHeaders/add\");\n            node?.Remove();\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/httpProtocol/customHeaders/add\");\n            node?.SetAttributeValue(\"value\", \"XSP\");\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            item.Value = \"XSP\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"XSP\", _feature.SelectedItem.Value);\n            Assert.Single(_feature.Items);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer/httpProtocol/customHeaders/add\");\n            var add = new XElement(\"add\",\n                new XAttribute(\"name\", \"Server\"),\n                new XAttribute(\"value\", \"Jexus\"));\n            node?.AddAfterSelf(add);\n            document.Save(Expected);\n\n            var item = new ResponseHeadersItem(null);\n            item.Name = \"Server\";\n            item.Value = \"Jexus\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"Server\", _feature.SelectedItem.Name);\n            Assert.Equal(2, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/ResponseHeaders/ResponseHeadersFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.ResponseHeaders\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.ResponseHeaders;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class ResponseHeadersFeatureSiteTestFixture\n    {\n        private ResponseHeadersFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new ResponseHeadersModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new ResponseHeadersFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Single(_feature.Items);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"httpProtocol\",\n                    new XElement(\"customHeaders\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"name\", \"X-Powered-By\")))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"X-Powered-By\", _feature.SelectedItem.Name);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Empty(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_remove1.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            document.Save(expected);\n\n            var item = new ResponseHeadersItem(null);\n            item.Name = \"Server\";\n            item.Value = \"Jexus\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"Server\", _feature.SelectedItem.Name);\n            Assert.Equal(2, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"httpProtocol\",\n                    new XElement(\"customHeaders\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"name\", \"X-Powered-By\")),\n                        new XElement(\"add\",\n                            new XAttribute(\"name\", \"X-Powered-By\"),\n                            new XAttribute(\"value\", \"XSP\")))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"X-Powered-By\", _feature.SelectedItem.Name);\n            var item = _feature.SelectedItem;\n            item.Value = \"XSP\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"XSP\", _feature.SelectedItem.Value);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit1.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"httpProtocol\",\n                    new XElement(\"customHeaders\",\n                        new XElement(\"add\",\n                            new XAttribute(\"name\", \"Server\"),\n                            new XAttribute(\"value\", \"Jexus2\")))));\n            document.Save(expected);\n\n            var item = new ResponseHeadersItem(null);\n            item.Name = \"Server\";\n            item.Value = \"Jexus\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"Jexus\", _feature.SelectedItem.Value);\n            Assert.Equal(2, _feature.Items.Count);\n            item.Value = \"Jexus2\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"Jexus2\", _feature.SelectedItem.Value);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var expected = \"expected_edit.site.config\";\n            var document = XDocument.Load(site);\n            var node = document.Root.XPathSelectElement(\"/configuration/system.webServer\");\n            node?.Add(\n                new XElement(\"httpProtocol\",\n                    new XElement(\"customHeaders\",\n                        new XElement(\"add\",\n                            new XAttribute(\"name\", \"Server\"),\n                            new XAttribute(\"value\", \"Jexus\")))));\n            document.Save(expected);\n\n            var item = new ResponseHeadersItem(null);\n            item.Name = \"Server\";\n            item.Value = \"Jexus\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"Server\", _feature.SelectedItem.Name);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Rewrite/TestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.Rewrite\n{\n    using global::JexusManager.Features.Rewrite.Outbound;\n\n    using Xunit;\n\n    using PresentationControls;\n\n    public class TestFixture\n    {\n        [Fact]\n        public void TestFlags()\n        {\n            var box = new CheckBoxComboBox();\n            box.Items.Add(\"A\");\n            box.Items.Add(\"Area\");\n            box.Items.Add(\"Use Custom Tags\");\n            Assert.Equal(0, OutboundRulePage.GetFilter(box));\n            box.CheckBoxItems[0].Checked = true;\n            Assert.Equal(1, OutboundRulePage.GetFilter(box));\n            box.CheckBoxItems[1].Checked = true;\n            Assert.Equal(3, OutboundRulePage.GetFilter(box));\n            box.CheckBoxItems[2].Checked = true;\n            Assert.Equal(32771, OutboundRulePage.GetFilter(box));\n\n            OutboundRulePage.SetFilter(32771, box);\n            Assert.True(box.CheckBoxItems[2].Checked);\n            Assert.True(box.CheckBoxItems[1].Checked);\n            Assert.True(box.CheckBoxItems[0].Checked);\n            OutboundRulePage.SetFilter(3, box);\n            Assert.False(box.CheckBoxItems[2].Checked);\n            Assert.True(box.CheckBoxItems[1].Checked);\n            Assert.True(box.CheckBoxItems[0].Checked);\n            OutboundRulePage.SetFilter(1, box);\n            Assert.False(box.CheckBoxItems[2].Checked);\n            Assert.False(box.CheckBoxItems[1].Checked);\n            Assert.True(box.CheckBoxItems[0].Checked);\n            OutboundRulePage.SetFilter(0, box);\n            Assert.False(box.CheckBoxItems[2].Checked);\n            Assert.False(box.CheckBoxItems[1].Checked);\n            Assert.False(box.CheckBoxItems[0].Checked);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/StringUtilityTestFixture.cs",
    "content": "using JexusManager;\nusing Xunit;\n\nnamespace Tests\n{\n    public class StringUtilityTestFixture\n    {\n        [Fact]\n        public void TestIsWildcard()\n        {\n            Assert.True(\"*.test.com\".IsWildcard());\n            Assert.True(\"*\".IsWildcard());\n\n            Assert.False(\"test.*.com\".IsWildcard());\n            Assert.False(\"*.*.com\".IsWildcard());\n        }\n\n        [Fact]\n        public void TestIsValidHost()\n        {\n            Assert.True(\"*.test.com\".IsValidHost(true));\n            Assert.True(\"*\".IsValidHost(true));\n\n            Assert.False(\"*.test.com\".IsValidHost());\n            Assert.False(\"*\".IsValidHost());\n\n            Assert.False(\"test.*.com\".IsValidHost());\n            Assert.False(\"*.*.com\".IsValidHost());\n        }\n\n        [Fact]\n        public void TestMatchHostName()\n        {\n            Assert.True(\"*.test.com\".MatchHostName(\"www.test.com\"));\n            Assert.True(\"*.test.com\".MatchHostName(\"*.test.com\"));\n            Assert.True(\"localhost\".MatchHostName(\"localhost\"));\n\n            Assert.False(\"*.test.com\".MatchHostName(\"test.com\"));\n            Assert.False(\"www.test.com\".MatchHostName(\"*.test.com\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Tests.JexusManager.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net9.0-windows10.0.17763.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <UseWPF>false</UseWPF>\n    <SignAssembly>true</SignAssembly>\n    <AssemblyOriginatorKeyFile>JexusManager.snk</AssemblyOriginatorKeyFile>\n    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>\n    <GenerateRuntimeConfigDevFile>true</GenerateRuntimeConfigDevFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.TestPlatform.TestHost\" Version=\"17.13.0\" />\n    <PackageReference Include=\"NSubstitute\" Version=\"5.3.0\" />\n    <PackageReference Include=\"XMLDiffPatch\" Version=\"1.0.8.28\" />\n    <PackageReference Include=\"xunit\" Version=\"2.9.3\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"3.1.0\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\n    </PackageReference>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\JexusManager.Features.Access\\JexusManager.Features.Access.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Asp\\JexusManager.Features.Asp.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Authentication\\JexusManager.Features.Authentication.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Authorization\\JexusManager.Features.Authorization.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Caching\\JexusManager.Features.Caching.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Certificates\\JexusManager.Features.Certificates.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Cgi\\JexusManager.Features.Cgi.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Compression\\JexusManager.Features.Compression.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.DefaultDocument\\JexusManager.Features.DefaultDocument.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.DirectoryBrowse\\JexusManager.Features.DirectoryBrowse.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.FastCgi\\JexusManager.Features.FastCgi.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Handlers\\JexusManager.Features.Handlers.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.HttpApi\\JexusManager.Features.HttpApi.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.HttpErrors\\JexusManager.Features.HttpErrors.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.HttpRedirect\\JexusManager.Features.HttpRedirect.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.IpSecurity\\JexusManager.Features.IpSecurity.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.IsapiCgiRestriction\\JexusManager.Features.IsapiCgiRestriction.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.IsapiFilters\\JexusManager.Features.IsapiFilters.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Jexus\\JexusManager.Features.Jexus.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Logging\\JexusManager.Features.Logging.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.MimeMap\\JexusManager.Features.MimeMap.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Modules\\JexusManager.Features.Modules.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.RequestFiltering\\JexusManager.Features.RequestFiltering.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.ResponseHeaders\\JexusManager.Features.ResponseHeaders.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.Rewrite\\JexusManager.Features.Rewrite.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager.Features.TraceFailedRequests\\JexusManager.Features.TraceFailedRequests.csproj\" />\n    <ProjectReference Include=\"..\\JexusManager\\JexusManager.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Administration\\Microsoft.Web.Administration.csproj\" />\n    <ProjectReference Include=\"..\\Microsoft.Web.Configuration.AppHostFileProvider\\Microsoft.Web.Configuration.AppHostFileProvider.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Update=\"original.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"Website1\\original.config\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n    <None Update=\"xunit.runner.json\">\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\n    </None>\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Tests.JexusManager/TraceFailedRequests/TraceFailedRequestsFeatureServerTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.TraceFailedRequests\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.TraceFailedRequests;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class TraceFailedRequestsFeatureServerTestFixture\n    {\n        private TraceFailedRequestsFeature _feature;\n\n        private ServerManager _server;\n\n        private ServiceContainer _serviceContainer;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            _serviceContainer = new ServiceContainer();\n            _serviceContainer.RemoveService(typeof(IConfigurationService));\n            _serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Server;\n            _serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            _serviceContainer.AddService(typeof(IConfigurationService),\n                new ConfigurationService(null, _server.GetApplicationHostConfiguration(), scope, _server, null, null, null, null, null));\n\n            _serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            _serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new TraceFailedRequestsModule();\n            module.TestInitialize(_serviceContainer, null);\n\n            _feature = new TraceFailedRequestsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(2, _feature.Items.Count);\n            Assert.Equal(\"*.asp\", _feature.Items[0].Path);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n            const string Expected = @\"expected_remove.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/tracing/traceFailedRequests\");\n            node?.FirstNode?.Remove();\n            document.Save(Expected);\n\n            Assert.Equal(\"*.asp\", _feature.Items[0].Path);\n            _feature.SelectedItem = _feature.Items[0];\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n            const string Expected = @\"expected_edit.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/tracing/traceFailedRequests\");\n            var element = node?.FirstNode as XElement;\n            XElement definition = element?.FirstNode?.NextNode as XElement;\n            definition?.SetAttributeValue(\"statusCodes\", \"100-999\");\n            definition.Remove();\n            element.AddFirst(definition);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var item = _feature.SelectedItem;\n            item.Codes = \"100-999\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"100-999\", _feature.SelectedItem.Codes);\n            Assert.Equal(2, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n            const string Expected = @\"expected_add.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/tracing/traceFailedRequests\");\n            node?.Add(\n                new XElement(\"add\",\n                    new XAttribute(\"path\", \"*.php\"),\n                    new XElement(\"traceAreas\",\n                        new XElement(\"add\",\n                            new XAttribute(\"provider\", \"ASP\"),\n                            new XAttribute(\"verbosity\", \"Verbose\")),\n                        new XElement(\"add\",\n                            new XAttribute(\"provider\", \"ASPNET\"),\n                            new XAttribute(\"areas\", \"Infrastructure,Module,Page,AppServices\"),\n                            new XAttribute(\"verbosity\", \"Verbose\")),\n                        new XElement(\"add\",\n                            new XAttribute(\"provider\", \"ISAPI Extension\"),\n                            new XAttribute(\"verbosity\", \"Verbose\")),\n                        new XElement(\"add\",\n                            new XAttribute(\"provider\", \"WWW Server\"),\n                            new XAttribute(\"areas\", \"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\"),\n                            new XAttribute(\"verbosity\", \"Verbose\"))),\n                    new XElement(\"failureDefinitions\",\n                        new XAttribute(\"statusCodes\", \"200-999\"))\n                               ));\n            document.Save(Expected);\n\n            var item = new TraceFailedRequestsItem(null);\n            item.Path = \"*.php\";\n            item.Codes = \"200-999\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"*.php\", _feature.SelectedItem.Path);\n            Assert.Equal(3, _feature.Items.Count);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n            var exception = Assert.Throws<InvalidOperationException>(() => _feature.Revert());\n            Assert.Equal(\"Revert operation cannot be done at server level\", exception.Message);\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/tracing/traceFailedRequests\");\n            var node1 = document.Root?.XPathSelectElement(\"/configuration/system.webServer/tracing/traceFailedRequests/add[@path='*.aspx']\");\n            var node2 = document.Root?.XPathSelectElement(\"/configuration/system.webServer/tracing/traceFailedRequests/add[@path='*.asp']\");\n            node1?.Remove();\n            node2?.Remove();\n            node?.AddFirst(node2);\n            node?.AddFirst(node1);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[1];\n            var selected = \"*.aspx\";\n            var other = \"*.asp\";\n            Assert.Equal(selected, _feature.Items[1].Path);\n            Assert.Equal(other, _feature.Items[0].Path);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(selected, _feature.SelectedItem.Path);\n            Assert.Equal(selected, _feature.Items[0].Path);\n            Assert.Equal(other, _feature.Items[1].Path);\n            XmlAssert.Equal(Expected, Current);\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n            const string Expected = @\"expected_up.config\";\n            var document = XDocument.Load(Current);\n            var node = document.Root?.XPathSelectElement(\"/configuration/system.webServer/tracing/traceFailedRequests\");\n            var node1 = document.Root?.XPathSelectElement(\"/configuration/system.webServer/tracing/traceFailedRequests/add[@path='*.aspx']\");\n            var node2 = document.Root?.XPathSelectElement(\"/configuration/system.webServer/tracing/traceFailedRequests/add[@path='*.asp']\");\n            node1?.Remove();\n            node2?.Remove();\n            node?.AddFirst(node2);\n            node?.AddFirst(node1);\n            document.Save(Expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            var other = \"*.aspx\";\n            Assert.Equal(other, _feature.Items[1].Path);\n            var selected = \"*.asp\";\n            Assert.Equal(selected, _feature.Items[0].Path);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(selected, _feature.SelectedItem.Path);\n            Assert.Equal(other, _feature.Items[0].Path);\n            Assert.Equal(selected, _feature.Items[1].Path);\n            XmlAssert.Equal(Expected, Current);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/TraceFailedRequests/TraceFailedRequestsFeatureSiteTestFixture.cs",
    "content": "﻿// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nnamespace Tests.TraceFailedRequests\n{\n    using System;\n    using System.ComponentModel.Design;\n    using System.IO;\n    using System.Reflection;\n    using System.Threading.Tasks;\n    using System.Windows.Forms;\n\n    using global::JexusManager.Features.TraceFailedRequests;\n    using global::JexusManager.Services;\n\n    using Microsoft.Web.Administration;\n    using Microsoft.Web.Management.Client;\n    using Microsoft.Web.Management.Client.Win32;\n    using Microsoft.Web.Management.Server;\n\n    using Xunit;\n    using System.Xml.Linq;\n    using System.Xml.XPath;\n    using NSubstitute;\n\n    public class TraceFailedRequestssFeatureSiteTestFixture\n    {\n        private TraceFailedRequestsFeature _feature;\n\n        private ServerManager _server;\n\n        private const string Current = @\"applicationHost.config\";\n\n        private void SetUp()\n        {\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n            if (Helper.IsRunningOnMono())\n            {\n                File.Copy(\"Website1/original.config\", \"Website1/web.config\", true);\n                File.Copy(OriginalMono, Current, true);\n            }\n            else\n            {\n                File.Copy(\"Website1\\\\original.config\", \"Website1\\\\web.config\", true);\n                File.Copy(Original, Current, true);\n            }\n\n            Environment.SetEnvironmentVariable(\n                \"JEXUS_TEST_HOME\",\n                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));\n\n            _server = new IisExpressServerManager(Current);\n\n            var serviceContainer = new ServiceContainer();\n            serviceContainer.RemoveService(typeof(IConfigurationService));\n            serviceContainer.RemoveService(typeof(IControlPanel));\n            var scope = ManagementScope.Site;\n            serviceContainer.AddService(typeof(IControlPanel), new ControlPanel());\n            serviceContainer.AddService(\n                typeof(IConfigurationService),\n                new ConfigurationService(\n                    null,\n                    _server.Sites[0].GetWebConfiguration(),\n                    scope,\n                    null,\n                    _server.Sites[0],\n                    null,\n                    null,\n                    null, _server.Sites[0].Name));\n\n            serviceContainer.RemoveService(typeof(IManagementUIService));\n            var substitute = Substitute.For<IManagementUIService>();\n            substitute.ShowMessage(\n                Arg.Any<string>(),\n                Arg.Any<string>(),\n                Arg.Any<MessageBoxButtons>(),\n                Arg.Any<MessageBoxIcon>(),\n                Arg.Any<MessageBoxDefaultButton>()).Returns(DialogResult.Yes);\n\n            serviceContainer.AddService(typeof(IManagementUIService), substitute);\n\n            var module = new TraceFailedRequestsModule();\n            module.TestInitialize(serviceContainer, null);\n\n            _feature = new TraceFailedRequestsFeature(module);\n            _feature.Load();\n        }\n\n        [Fact]\n        public void TestBasic()\n        {\n            SetUp();\n            Assert.Equal(2, _feature.Items.Count);\n            Assert.Equal(\"*.asp\", _feature.Items[0].Path);\n        }\n\n        [Fact]\n        public void TestRemoveInherited()\n        {\n            SetUp();\n\n            const string expected = @\"expected_add.site.config\";\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var document = XDocument.Load(site);\n            var server = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            server?.Add(\n                new XElement(\"tracing\",\n                    new XElement(\"traceFailedRequests\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"path\", \"*.asp\")))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"*.asp\", _feature.SelectedItem.Path);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Single(_feature.Items);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRemove()\n        {\n            SetUp();\n\n            const string expected = @\"expected_add.site.config\";\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var document = XDocument.Load(site);\n            document.Save(expected);\n\n            var item = new TraceFailedRequestsItem(null);\n            item.Path = \"*.php\";\n            item.Codes = \"200-999\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"*.php\", _feature.SelectedItem.Path);\n            Assert.Equal(3, _feature.Items.Count);\n            _feature.Remove();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEditInherited()\n        {\n            SetUp();\n\n            const string expected = @\"expected_add.site.config\";\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var document = XDocument.Load(site);\n            var server = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            server?.Add(\n                new XElement(\"tracing\",\n                    new XElement(\"traceFailedRequests\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"path\", \"*.asp\")),\n                        new XElement(\"add\",\n                            new XAttribute(\"path\", \"*.asp\"),\n                            new XElement(\"traceAreas\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASP\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASPNET\"),\n                                    new XAttribute(\"areas\", \"Infrastructure,Module,Page,AppServices\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ISAPI Extension\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"WWW Server\"),\n                                    new XAttribute(\"areas\", \"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\"))),\n                            new XElement(\"failureDefinitions\",\n                                new XAttribute(\"statusCodes\", \"100-999\"))\n                            ))));\n            document.Save(expected);\n\n            _feature.SelectedItem = _feature.Items[0];\n            Assert.Equal(\"*.asp\", _feature.SelectedItem.Path);\n            var item = _feature.SelectedItem;\n            item.Codes = \"100-999\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"100-999\", _feature.SelectedItem.Codes);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestEdit()\n        {\n            SetUp();\n\n            const string expected = @\"expected_add.site.config\";\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var document = XDocument.Load(site);\n            var server = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            server?.Add(\n                new XElement(\"tracing\",\n                    new XElement(\"traceFailedRequests\",\n                        new XElement(\"add\",\n                            new XAttribute(\"path\", \"*.php\"),\n                            new XElement(\"failureDefinitions\",\n                                new XAttribute(\"statusCodes\", \"100-999\")),\n                            new XElement(\"traceAreas\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASP\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASPNET\"),\n                                    new XAttribute(\"areas\", \"Infrastructure,Module,Page,AppServices\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ISAPI Extension\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"WWW Server\"),\n                                    new XAttribute(\"areas\", \"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")))\n                            ))));\n            document.Save(expected);\n\n            var item = new TraceFailedRequestsItem(null);\n            item.Path = \"*.php\";\n            item.Codes = \"200-999\";\n            _feature.AddItem(item);\n\n            Assert.Equal(\"*.php\", _feature.SelectedItem.Path);\n            Assert.Equal(3, _feature.Items.Count);\n            item.Codes = \"100-999\";\n            _feature.EditItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"100-999\", _feature.SelectedItem.Codes);\n            Assert.Equal(3, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestAdd()\n        {\n            SetUp();\n\n            const string expected = @\"expected_add.site.config\";\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var document = XDocument.Load(site);\n            var server = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            server?.Add(\n                new XElement(\"tracing\",\n                    new XElement(\"traceFailedRequests\",\n                        new XElement(\"add\",\n                            new XAttribute(\"path\", \"*.php\"),\n                            new XElement(\"traceAreas\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASP\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASPNET\"),\n                                    new XAttribute(\"areas\", \"Infrastructure,Module,Page,AppServices\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ISAPI Extension\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"WWW Server\"),\n                                    new XAttribute(\"areas\", \"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\"))),\n                            new XElement(\"failureDefinitions\",\n                                new XAttribute(\"statusCodes\", \"200-999\"))\n                            ))));\n            document.Save(expected);\n\n            var item = new TraceFailedRequestsItem(null);\n            item.Path = \"*.php\";\n            item.Codes = \"200-999\";\n            _feature.AddItem(item);\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(\"200-999\", _feature.SelectedItem.Codes);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestRevert()\n        {\n            SetUp();\n\n            const string expected = @\"expected_add.site.config\";\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var document = XDocument.Load(site);\n            var server = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            server?.Add(new XElement(\"tracing\"));\n            document.Save(expected);\n\n            var item = new TraceFailedRequestsItem(null);\n            item.Path = \"*.php\";\n            item.Codes = \"200-999\";\n            _feature.AddItem(item);\n            Assert.Equal(3, _feature.Items.Count);\n\n            _feature.Revert();\n            Assert.Null(_feature.SelectedItem);\n            Assert.Equal(2, _feature.Items.Count);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestMoveUp()\n        {\n            SetUp();\n\n            const string expected = @\"expected_add.site.config\";\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var document = XDocument.Load(site);\n            var server = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            server?.Add(\n                new XElement(\"tracing\",\n                    new XElement(\"traceFailedRequests\",\n                        new XElement(\"clear\"),\n                        new XElement(\"add\",\n                            new XAttribute(\"path\", \"*.aspx\"),\n                            new XElement(\"traceAreas\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASP\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASPNET\"),\n                                    new XAttribute(\"areas\", \"Infrastructure,Module,Page,AppServices\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ISAPI Extension\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"WWW Server\"),\n                                    new XAttribute(\"areas\", \"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\"))),\n                            new XElement(\"failureDefinitions\",\n                                new XAttribute(\"statusCodes\", \"200-999\"))),\n                        new XElement(\"add\",\n                            new XAttribute(\"path\", \"*.asp\"),\n                            new XElement(\"traceAreas\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASP\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASPNET\"),\n                                    new XAttribute(\"areas\", \"Infrastructure,Module,Page,AppServices\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ISAPI Extension\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"WWW Server\"),\n                                    new XAttribute(\"areas\", \"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\"))),\n                            new XElement(\"failureDefinitions\",\n                                new XAttribute(\"statusCodes\", \"200-999\")))\n                    )));\n            document.Save(expected);\n\n            var last = 1;\n            var previous = last - 1;\n            _feature.SelectedItem = _feature.Items[last];\n            var expectedValue = \"*.aspx\";\n            Assert.Equal(expectedValue, _feature.Items[last].Path);\n            var original = \"*.asp\";\n            Assert.Equal(original, _feature.Items[previous].Path);\n            _feature.MoveUp();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(expectedValue, _feature.SelectedItem.Path);\n            Assert.Equal(expectedValue, _feature.Items[previous].Path);\n            Assert.Equal(original, _feature.Items[last].Path);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n\n        [Fact]\n        public void TestMoveDown()\n        {\n            SetUp();\n\n            const string expected = @\"expected_add.site.config\";\n            var site = Path.Combine(\"Website1\", \"web.config\");\n            var document = XDocument.Load(site);\n            var server = document.Root?.XPathSelectElement(\"/configuration/system.webServer\");\n            server?.Add(\n                new XElement(\"tracing\",\n                    new XElement(\"traceFailedRequests\",\n                        new XElement(\"remove\",\n                            new XAttribute(\"path\", \"*.asp\")),\n                        new XElement(\"add\",\n                            new XAttribute(\"path\", \"*.asp\"),\n                            new XElement(\"traceAreas\",\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASP\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ASPNET\"),\n                                    new XAttribute(\"areas\", \"Infrastructure,Module,Page,AppServices\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"ISAPI Extension\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\")),\n                                new XElement(\"add\",\n                                    new XAttribute(\"provider\", \"WWW Server\"),\n                                    new XAttribute(\"areas\", \"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\"),\n                                    new XAttribute(\"verbosity\", \"Verbose\"))),\n                            new XElement(\"failureDefinitions\",\n                                new XAttribute(\"statusCodes\", \"200-999\"))\n                    ))));\n            document.Save(expected);\n\n            var last = 1;\n            var previous = last - 1;\n            _feature.SelectedItem = _feature.Items[previous];\n            var expectedValue = \"*.aspx\";\n            Assert.Equal(expectedValue, _feature.Items[last].Path);\n            var original = \"*.asp\";\n            Assert.Equal(original, _feature.Items[previous].Path);\n            _feature.MoveDown();\n            Assert.NotNull(_feature.SelectedItem);\n            Assert.Equal(original, _feature.SelectedItem.Path);\n            Assert.Equal(expectedValue, _feature.Items[previous].Path);\n            Assert.Equal(original, _feature.Items[last].Path);\n\n            const string Original = @\"original.config\";\n            const string OriginalMono = @\"original.mono.config\";\n\n            XmlAssert.Equal(Helper.IsRunningOnMono() ? OriginalMono : Original, Current);\n            XmlAssert.Equal(expected, site);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/Website1/original.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n  <system.webServer>\n    <defaultDocument>\n      <files>\n        <add value=\"home1.html\" />\n      </files>\n    </defaultDocument>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "Tests.JexusManager/XmlAssert.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Diagnostics;\nusing System.IO;\nusing System.Xml;\nusing Microsoft.XmlDiffPatch;\nusing Xunit;\n\nnamespace Tests\n{\n    internal static class XmlAssert\n    {\n        internal static void Equal(string file1, string file2)\n        {\n            var diffFile = @\"diff.xml\";\n            XmlTextWriter tw = new XmlTextWriter(new StreamWriter(diffFile));\n            tw.Formatting = Formatting.Indented;\n            var diff = new XmlDiff();\n            diff.Options = XmlDiffOptions.IgnoreWhitespace | XmlDiffOptions.IgnoreComments | XmlDiffOptions.IgnoreXmlDecl;\n            var result = diff.Compare(file1, file2, false, tw);\n            tw.Close();\n            if (!result)\n            {\n                //Files were not equal, so construct XmlDiffView.\n                XmlDiffView dv = new XmlDiffView();\n\n                //Load the original file again and the diff file.\n                XmlTextReader orig = new XmlTextReader(file1);\n                XmlTextReader diffGram = new XmlTextReader(diffFile);\n                dv.Load(orig, diffGram);\n                string tempFile = \"test.htm\";\n\n                StreamWriter sw1 = new StreamWriter(tempFile);\n                //Wrapping\n                sw1.Write(\"<html><body><table>\");\n                sw1.Write(\"<tr><td><b>\");\n                sw1.Write(file1);\n                sw1.Write(\"</b></td><td><b>\");\n                sw1.Write(file2);\n                sw1.Write(\"</b></td></tr>\");\n\n                //This gets the differences but just has the \n                //rows and columns of an HTML table\n                dv.GetHtml(sw1);\n\n                //Finish wrapping up the generated HTML and \n                //complete the file by putting legend in the end just like the \n                //online tool.\n\n                sw1.Write(\"<tr><td><b>Legend:</b> <font style='background-color: yellow'\" +\n                \" color='black'>added</font>&nbsp;&nbsp;<font style='background-color: red'\" +\n                \"color='black'>removed</font>&nbsp;&nbsp;<font style='background-color: \" +\n                \"lightgreen' color='black'>changed</font>&nbsp;&nbsp;\" +\n                \"<font style='background-color: red' color='blue'>moved from</font>\" +\n                \"&nbsp;&nbsp;<font style='background-color: yellow' color='blue'>moved to\" +\n                \"</font>&nbsp;&nbsp;<font style='background-color: white' color='#AAAAAA'>\" + \"ignored</font></td></tr>\");\n\n                sw1.Write(\"</table></body></html>\");\n\n                //HouseKeeping...close everything we dont want to lock.\n                sw1.Close();\n                orig.Close();\n                diffGram.Close();\n                Process.Start(\"explorer.exe\", \"test.htm\");\n            }\n\n            Assert.True(result);\n        }\n    }\n}\n"
  },
  {
    "path": "Tests.JexusManager/app.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"Newtonsoft.Json\" publicKeyToken=\"30ad4fe6b2a6aeed\" culture=\"neutral\"/>\n        <bindingRedirect oldVersion=\"0.0.0.0-8.0.0.0\" newVersion=\"8.0.0.0\"/>\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.6.1\"/></startup></configuration>\n"
  },
  {
    "path": "Tests.JexusManager/original.config",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    IIS configuration sections.\n\n    For schema documentation, see\n    %IIS_BIN%\\config\\schema\\IIS_schema.xml.\n    \n    Please make a backup of this file before making any changes to it.\n\n    NOTE: The following environment variables are available to be used\n          within this file and are understood by the IIS Express.\n\n          %IIS_USER_HOME% - The IIS Express home directory for the user\n          %IIS_SITES_HOME% - The default home directory for sites\n          %IIS_BIN% - The location of the IIS Express binaries\n          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%\n\n-->\n\n<configuration>\n\n    <!--\n\n        The <configSections> section controls the registration of sections.\n        Section is the basic unit of deployment, locking, searching and\n        containment for configuration settings.\n        \n        Every section belongs to one section group.\n        A section group is a container of logically-related sections.\n        \n        Sections cannot be nested.\n        Section groups may be nested.\n        \n        <section\n            name=\"\"  [Required, Collection Key] [XML name of the section]\n            allowDefinition=\"Everywhere\" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]\n            overrideModeDefault=\"Allow\"  [Allow|Deny] [Default delegation mode]\n            allowLocation=\"true\"  [true|false] [Allowed in location tags]\n        />\n        \n        The recommended way to unlock sections is by using a location tag:\n        <location path=\"Default Web Site\" overrideMode=\"Allow\">\n            <system.webServer>\n                <asp />\n            </system.webServer>\n        </location>\n\n    -->\n    <configSections>\n        <sectionGroup name=\"system.applicationHost\">\n            <section name=\"applicationPools\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"configHistory\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"customMetadata\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"listenerAdapters\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"log\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"preloadProviders\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"sites\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"webLimits\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n\n        <sectionGroup name=\"system.webServer\">\n            <section name=\"asp\" overrideModeDefault=\"Deny\" />\n            <section name=\"caching\" overrideModeDefault=\"Allow\" />\n            <section name=\"cgi\" overrideModeDefault=\"Deny\" />\n            <section name=\"defaultDocument\" overrideModeDefault=\"Allow\" />\n            <section name=\"directoryBrowse\" overrideModeDefault=\"Allow\" />\n            <section name=\"fastCgi\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"globalModules\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"handlers\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpCompression\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpErrors\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpLogging\" overrideModeDefault=\"Deny\" />\n            <section name=\"httpProtocol\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpRedirect\" overrideModeDefault=\"Allow\" />\n            <section name=\"httpTracing\" overrideModeDefault=\"Deny\" />\n            <section name=\"isapiFilters\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n            <section name=\"modules\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Deny\" />\n            <section name=\"odbcLogging\" overrideModeDefault=\"Deny\" />\n            <sectionGroup name=\"security\">\n                <section name=\"access\" overrideModeDefault=\"Deny\" />\n                <section name=\"applicationDependencies\" overrideModeDefault=\"Deny\" />\n                <sectionGroup name=\"authentication\">\n                    <section name=\"anonymousAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"basicAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"clientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"digestAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"iisClientCertificateMappingAuthentication\" overrideModeDefault=\"Deny\" />\n                    <section name=\"windowsAuthentication\" overrideModeDefault=\"Deny\" />\n                </sectionGroup>\n                <section name=\"authorization\" overrideModeDefault=\"Allow\" />\n                <section name=\"ipSecurity\" overrideModeDefault=\"Deny\" />\n                <section name=\"dynamicIpSecurity\" overrideModeDefault=\"Deny\" />\n                <section name=\"isapiCgiRestriction\" allowDefinition=\"AppHostOnly\" overrideModeDefault=\"Deny\" />\n                <section name=\"requestFiltering\" overrideModeDefault=\"Allow\" />\n            </sectionGroup>\n            <section name=\"serverRuntime\" overrideModeDefault=\"Deny\" />\n            <section name=\"serverSideInclude\" overrideModeDefault=\"Deny\" />\n            <section name=\"staticContent\" overrideModeDefault=\"Allow\" />\n            <sectionGroup name=\"tracing\">\n                <section name=\"traceFailedRequests\" overrideModeDefault=\"Allow\" />\n                <section name=\"traceProviderDefinitions\" overrideModeDefault=\"Deny\" />\n            </sectionGroup>\n            <section name=\"urlCompression\" overrideModeDefault=\"Allow\" />\n            <section name=\"validation\" overrideModeDefault=\"Allow\" />\n            <sectionGroup name=\"webdav\">\n                <section name=\"globalSettings\" overrideModeDefault=\"Deny\" />\n                <section name=\"authoring\" overrideModeDefault=\"Deny\" />\n                <section name=\"authoringRules\" overrideModeDefault=\"Deny\" />\n            </sectionGroup>\n            <sectionGroup name=\"rewrite\">\n                <section name=\"allowedServerVariables\" overrideModeDefault=\"Deny\" />\n                <section name=\"rules\" overrideModeDefault=\"Allow\" />\n                <section name=\"outboundRules\" overrideModeDefault=\"Allow\" />\n                <section name=\"globalRules\" overrideModeDefault=\"Deny\" allowDefinition=\"AppHostOnly\" />\n                <section name=\"providers\" overrideModeDefault=\"Allow\" />\n                <section name=\"rewriteMaps\" overrideModeDefault=\"Allow\" />\n            </sectionGroup>\n            <section name=\"applicationInitialization\" allowDefinition=\"MachineToApplication\" overrideModeDefault=\"Allow\" />\n            <section name=\"webSocket\" overrideModeDefault=\"Deny\" />\n        </sectionGroup>\n    </configSections>\n\n    <!--<configProtectedData>\n        <providers>\n            <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=\" />\n            <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=\" />\n        </providers>\n    </configProtectedData>-->\n  \n    <configProtectedData>\n        <providers>\n            <add name=\"IISWASOnlyRsaProvider\" type=\"\" description=\"Uses RsaCryptoServiceProvider to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useMachineContainer=\"true\" useOAEP=\"false\" />\n            <add name=\"AesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisConfigurationKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAA4+jnvVwdmahiJvH8sOJxtDMnsR+0yNnzh79Dd3oZMnVmAqLQDUpUZEwMJSlfhnLl8q5CEHposKZ5p3zl2oOeow36FweUI6WTSWlc4jVQlnCcLpvR1+CVF7I2XS/TZKGkgFNapTAJUAAL4q5LjGIEGMNiSCgFHOvJDGVDq3UMtU+vR5P7ZdbJmxswBf53Ut4iMAXxOz7JTSzwtIUmqK5ML95cqFt3WSLmXHcgaBX37iwS9kpgj2Sq+by63NYAE2RBsUb6JfPrVDKReNWK6A2o1QJBXF7jrAEVwvdX6DSw0gulMypeJ2I1ltOCgr8CTi+CMxStRbdQE+OA+83g0dKvgw==\" />\n            <add name=\"IISWASOnlyAesProvider\" type=\"Microsoft.ApplicationHost.AesProtectedConfigurationProvider\" description=\"Uses an AES session key to encrypt and decrypt\" keyContainerName=\"iisWasKey\" cspProviderName=\"\" useOAEP=\"false\" useMachineContainer=\"true\" sessionKey=\"AQIAAA5mAAAApAAAD11v8x8UPbc9pt2pFRvgGuAqWTMRh0jP+/pUcEDZN6oSYAIqVjp1EgbkrakdC+/TrMsPkccjudZ6OxlhW8fbVxA71WQdjFkjnObuXXj68ZTD01HF310/Gh56XIvALkBz2DFJ0spMrQ1rQoOllcaqAy/6aSsIaD16ApmrTcDECoJ7LP0eJYcbBD+cvITl5oHN4HDYhZYqVn4M1pkEcZZxFWh1rlqhlkb9NY5hF+rS3U32XqKAcz4lXQELQmXkPTWQ/DoKTreE0yKlPTLnz6WztWNtBIuVvfNMxSHj4WlN420iejpuk3LjYU5lvns5MJzs5L/7bBDdxPpIEpB1p645eQ==\" />\n        </providers>\n    </configProtectedData>\n  \n    <system.applicationHost>\n\n        <applicationPools>\n            <add name=\"Clr4IntegratedAppPool\" managedRuntimeVersion=\"v4.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\">\n                <processModel loadUserProfile=\"true\" />\n            </add>\n            <add name=\"Clr4ClassicAppPool\" managedRuntimeVersion=\"v4.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"Clr2IntegratedAppPool\" managedRuntimeVersion=\"v2.0\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"Clr2ClassicAppPool\" managedRuntimeVersion=\"v2.0\" managedPipelineMode=\"Classic\" CLRConfigFile=\"%IIS_USER_HOME%\\config\\aspnet.config\" />\n            <add name=\"UnmanagedClassicAppPool\" managedPipelineMode=\"Classic\" />\n            <applicationPoolDefaults managedRuntimeLoader=\"v4.0\" />\n        </applicationPools>\n\n        <!--\n\n          The <listenerAdapters> section defines the protocols with which the\n          Windows Process Activation Service (WAS) binds.\n\n        -->\n        <listenerAdapters>\n            <add name=\"http\" />\n        </listenerAdapters>\n\n        <sites>\n            <site name=\"WebSite1\" id=\"1\">\n                <application path=\"/\">\n                    <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\WebSite1\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\":8080:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"GuessMeWeb\" id=\"2\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\GuessMeWeb\\GuessMeWeb\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:61902:localhost\" />\n                    <binding protocol=\"https\" bindingInformation=\"*:44300:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebSite2\" id=\"3\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"%JEXUS_TEST_HOME%\\Website2\" />\n                              <virtualDirectory path=\"/help\" physicalPath=\"%JEXUS_TEST_HOME%\\help\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:55165:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication1\" id=\"4\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication1\\WebApplication1\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:10830:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"SampleWCFService\" id=\"5\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\codesamples\\SampleWCFService\\SampleWCFService\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:4605:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"RemoteServices\" id=\"6\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\JexusManager\\RemoteServices\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:14150:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication2\" id=\"7\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication2\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:9827:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"WebApplication3\" id=\"8\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\WebApplication3\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:14234:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Performance.ReferenceApp\" id=\"9\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Performance.ReferenceApp\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:17613:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Sandbox.WebServer-Site\" id=\"10\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebServer-Site\" />\n                </application>\n                <application path=\"/Katana.Sandbox.WebServer\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebServer\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:18001:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Katana.Sandbox.WebClient-Site\" id=\"11\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"C:\\Users\\Lex\\Documents\\My Web Sites\\Katana.Sandbox.WebClient-Site\" />\n                </application>\n                <application path=\"/Katana.Sandbox.WebClient\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"E:\\Projects\\katanaproject\\tests\\Katana.Sandbox.WebClient\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:18002:localhost\" />\n                </bindings>\n            </site>\n            <site name=\"Mono328\" id=\"12\">\n                <application path=\"/\" applicationPool=\"Clr4IntegratedAppPool\">\n                    <virtualDirectory path=\"/\" physicalPath=\"c:\\users\\lex\\documents\\visual studio 2013\\Projects\\Mono328\" />\n                </application>\n                <bindings>\n                    <binding protocol=\"http\" bindingInformation=\"*:4330:localhost\" />\n                </bindings>\n            </site>\n            <siteDefaults>\n                <logFile directory=\"%IIS_USER_HOME%\\Logs\" />\n                <traceFailedRequestsLogging directory=\"%IIS_USER_HOME%\\TraceLogFiles\" enabled=\"true\" />\n            </siteDefaults>\n            <applicationDefaults applicationPool=\"Clr4IntegratedAppPool\" />\n        </sites>\n\n    </system.applicationHost>\n\n    <system.webServer>\n\n        <asp scriptErrorSentToBrowser=\"true\">\n            <cache diskTemplateCacheDirectory=\"%TEMP%\\iisexpress\\ASP Compiled Templates\" />\n        </asp>\n\n      <caching>\n        <profiles>\n          <add duration=\"00:00:00\" extension=\".cs\"/>\n        </profiles>\n      </caching>\n\n        <defaultDocument>\n            <files>\n                <add value=\"Default.htm\" />\n                <add value=\"Default.asp\" />\n                <add value=\"index.htm\" />\n                <add value=\"index.html\" />\n                <add value=\"iisstart.htm\" />\n                <add value=\"default.aspx\" />\n            </files>\n        </defaultDocument>\n\n        <!--\n\n          The <globalModules> section defines all native-code modules.\n          To enable a module, specify it in the <modules> section.\n\n        -->\n        <globalModules>\n            <add name=\"UriCacheModule\" image=\"%IIS_BIN%\\cachuri.dll\" />\n<!--            <add name=\"FileCacheModule\" image=\"%IIS_BIN%\\cachfile.dll\" />  -->\n            <add name=\"TokenCacheModule\" image=\"%IIS_BIN%\\cachtokn.dll\" />\n<!--            <add name=\"HttpCacheModule\" image=\"%IIS_BIN%\\cachhttp.dll\" /> -->\n            <add name=\"DynamicCompressionModule\" image=\"%IIS_BIN%\\compdyn.dll\" />\n            <add name=\"StaticCompressionModule\" image=\"%IIS_BIN%\\compstat.dll\" />\n            <add name=\"DefaultDocumentModule\" image=\"%IIS_BIN%\\defdoc.dll\" />\n            <add name=\"DirectoryListingModule\" image=\"%IIS_BIN%\\dirlist.dll\" />\n            <add name=\"ProtocolSupportModule\" image=\"%IIS_BIN%\\protsup.dll\" />\n            <add name=\"HttpRedirectionModule\" image=\"%IIS_BIN%\\redirect.dll\" />\n            <add name=\"ServerSideIncludeModule\" image=\"%IIS_BIN%\\iis_ssi.dll\" />\n            <add name=\"StaticFileModule\" image=\"%IIS_BIN%\\static.dll\" />\n            <add name=\"AnonymousAuthenticationModule\" image=\"%IIS_BIN%\\authanon.dll\" />\n            <add name=\"CertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authcert.dll\" />\n            <add name=\"UrlAuthorizationModule\" image=\"%IIS_BIN%\\urlauthz.dll\" />\n            <add name=\"BasicAuthenticationModule\" image=\"%IIS_BIN%\\authbas.dll\" />\n            <add name=\"WindowsAuthenticationModule\" image=\"%IIS_BIN%\\authsspi.dll\" />\n<!--            <add name=\"DigestAuthenticationModule\" image=\"%IIS_BIN%\\authmd5.dll\" /> -->\n            <add name=\"IISCertificateMappingAuthenticationModule\" image=\"%IIS_BIN%\\authmap.dll\" />\n            <add name=\"IpRestrictionModule\" image=\"%IIS_BIN%\\iprestr.dll\" />\n            <add name=\"DynamicIpRestrictionModule\" image=\"%IIS_BIN%\\diprestr.dll\" />\n            <add name=\"RequestFilteringModule\" image=\"%IIS_BIN%\\modrqflt.dll\" />\n            <add name=\"CustomLoggingModule\" image=\"%IIS_BIN%\\logcust.dll\" />\n            <add name=\"CustomErrorModule\" image=\"%IIS_BIN%\\custerr.dll\" />\n            <add name=\"HttpLoggingModule\" image=\"%IIS_BIN%\\loghttp.dll\" />\n<!--            <add name=\"TracingModule\" image=\"%IIS_BIN%\\iisetw.dll\" /> -->\n            <add name=\"FailedRequestsTracingModule\" image=\"%IIS_BIN%\\iisfreb.dll\" />\n            <add name=\"RequestMonitorModule\" image=\"%IIS_BIN%\\iisreqs.dll\" />\n            <add name=\"IsapiModule\" image=\"%IIS_BIN%\\isapi.dll\" />\n            <add name=\"IsapiFilterModule\" image=\"%IIS_BIN%\\filter.dll\" />\n            <add name=\"CgiModule\" image=\"%IIS_BIN%\\cgi.dll\" />\n            <add name=\"FastCgiModule\" image=\"%IIS_BIN%\\iisfcgi.dll\" />\n<!--            <add name=\"WebDAVModule\" image=\"%IIS_BIN%\\webdav.dll\" /> -->\n            <add name=\"RewriteModule\" image=\"%IIS_BIN%\\rewrite.dll\" />\n            <add name=\"ConfigurationValidationModule\" image=\"%IIS_BIN%\\validcfg.dll\" />\n            <add name=\"ApplicationInitializationModule\" image=\"%IIS_BIN%\\warmup.dll\" />\n            <add name=\"WebSocketModule\" image=\"%IIS_BIN%\\iiswsock.dll\" />\n            <add name=\"WebMatrixSupportModule\" image=\"%IIS_BIN%\\webmatrixsup.dll\" />\n            <add name=\"ManagedEngine\" image=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness32\" />\n            <add name=\"ManagedEngine64\" image=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\webengine.dll\" preCondition=\"integratedMode,runtimeVersionv2.0,bitness64\" />\n            <add name=\"ManagedEngineV4.0_32bit\" image=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness32\" />\n            <add name=\"ManagedEngineV4.0_64bit\" image=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" preCondition=\"integratedMode,runtimeVersionv4.0,bitness64\" />\n        </globalModules>\n\n        <httpCompression directory=\"%TEMP%\\iisexpress\\IIS Temporary Compressed Files\">\n            <scheme name=\"gzip\" dll=\"%IIS_BIN%\\gzip.dll\" />\n            <dynamicTypes>\n                <add mimeType=\"text/*\" enabled=\"true\" />\n                <add mimeType=\"message/*\" enabled=\"true\" />\n                <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n                <add mimeType=\"*/*\" enabled=\"false\" />\n            </dynamicTypes>\n            <staticTypes>\n                <add mimeType=\"text/*\" enabled=\"true\" />\n                <add mimeType=\"message/*\" enabled=\"true\" />\n                <add mimeType=\"application/x-javascript\" enabled=\"true\" />\n                <add mimeType=\"application/atom+xml\" enabled=\"true\" />\n                <add mimeType=\"application/xaml+xml\" enabled=\"true\" />\n                <add mimeType=\"*/*\" enabled=\"false\" />\n            </staticTypes>\n        </httpCompression>\n\n        <httpErrors lockAttributes=\"allowAbsolutePathsWhenDelegated,defaultPath\">\n            <error statusCode=\"401\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"401.htm\" />\n            <error statusCode=\"403\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"403.htm\" />\n            <error statusCode=\"404\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"404.htm\" />\n            <error statusCode=\"405\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"405.htm\" />\n            <error statusCode=\"406\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"406.htm\" />\n            <error statusCode=\"412\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"412.htm\" />\n            <error statusCode=\"500\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"500.htm\" />\n            <error statusCode=\"501\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"501.htm\" />\n            <error statusCode=\"502\" prefixLanguageFilePath=\"%IIS_BIN%\\custerr\" path=\"502.htm\" />\n        </httpErrors>\n\n        <httpProtocol>\n            <customHeaders>\n                <clear />\n                <add name=\"X-Powered-By\" value=\"ASP.NET\" />\n            </customHeaders>\n            <redirectHeaders>\n                <clear />\n            </redirectHeaders>\n        </httpProtocol>\n\n        <isapiFilters>\n            <filter name=\"ASP.Net_2.0.50727-64\" path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv2.0\" />\n            <filter name=\"ASP.Net_2.0.50727.0\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv2.0\" />\n            <filter name=\"ASP.Net_2.0_for_v1.1\" path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"runtimeVersionv1.1\" />\n            <filter name=\"ASP.Net_4.0_32bit\" path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness32,runtimeVersionv4.0\" />\n            <filter name=\"ASP.Net_4.0_64bit\" path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_filter.dll\" enableCache=\"true\" preCondition=\"bitness64,runtimeVersionv4.0\" />\n        </isapiFilters>\n\n        <security>\n\n            <applicationDependencies>\n                <application name=\"Active Server Pages\" groupId=\"ASP\" />\n            </applicationDependencies>\n\n            <authentication>\n\n                <anonymousAuthentication userName=\"\" />\n\n                <windowsAuthentication>\n                    <providers>\n                        <add value=\"Negotiate\" />\n                        <add value=\"NTLM\" />\n                    </providers>\n                </windowsAuthentication>\n\n            </authentication>\n\n            <authorization>\n                <add accessType=\"Allow\" users=\"*\" />\n            </authorization>\n\n            <isapiCgiRestriction notListedIsapisAllowed=\"true\" notListedCgisAllowed=\"true\">\n                <add path=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\webengine4.dll\" allowed=\"true\" groupId=\"ASP.NET_v4.0\" description=\"ASP.NET_v4.0\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n                <add path=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" allowed=\"true\" groupId=\"ASP.NET v2.0.50727\" description=\"ASP.NET v2.0.50727\" />\n            </isapiCgiRestriction>\n\n          <ipSecurity>\n            <add allowed=\"true\" ipAddress=\"10.0.0.0\" />\n          </ipSecurity>\n            <requestFiltering>\n              <requestLimits>\n                <headerLimits>\n                  <add header=\"test\" sizeLimit=\"500\"/>\n                </headerLimits>\n              </requestLimits>\n              <alwaysAllowedUrls>\n                <add url=\"test\"/>\n              </alwaysAllowedUrls>\n              <denyUrlSequences>\n                <add sequence=\"test\"/>\n              </denyUrlSequences>\n              <alwaysAllowedQueryStrings>\n                <add queryString=\"test\" />\n              </alwaysAllowedQueryStrings>\n              <denyQueryStringSequences>\n                <add sequence=\"test\" />\n              </denyQueryStringSequences>\n              <filteringRules>\n                <filteringRule name=\"test\">\n                </filteringRule>\n              </filteringRules>\n              <verbs>\n                <add verb=\"PUT\" allowed=\"false\"/>\n              </verbs>\n                <fileExtensions>\n                    <add fileExtension=\".asa\" allowed=\"false\" />\n                    <add fileExtension=\".asax\" allowed=\"false\" />\n                    <add fileExtension=\".ascx\" allowed=\"false\" />\n                    <add fileExtension=\".master\" allowed=\"false\" />\n                    <add fileExtension=\".skin\" allowed=\"false\" />\n                    <add fileExtension=\".browser\" allowed=\"false\" />\n                    <add fileExtension=\".sitemap\" allowed=\"false\" />\n                    <add fileExtension=\".config\" allowed=\"false\" />\n                    <add fileExtension=\".cs\" allowed=\"false\" />\n                    <add fileExtension=\".csproj\" allowed=\"false\" />\n                    <add fileExtension=\".vb\" allowed=\"false\" />\n                    <add fileExtension=\".vbproj\" allowed=\"false\" />\n                    <add fileExtension=\".webinfo\" allowed=\"false\" />\n                    <add fileExtension=\".licx\" allowed=\"false\" />\n                    <add fileExtension=\".resx\" allowed=\"false\" />\n                    <add fileExtension=\".resources\" allowed=\"false\" />\n                    <add fileExtension=\".mdb\" allowed=\"false\" />\n                    <add fileExtension=\".vjsproj\" allowed=\"false\" />\n                    <add fileExtension=\".java\" allowed=\"false\" />\n                    <add fileExtension=\".jsl\" allowed=\"false\" />\n                    <add fileExtension=\".ldb\" allowed=\"false\" />\n                    <add fileExtension=\".dsdgm\" allowed=\"false\" />\n                    <add fileExtension=\".ssdgm\" allowed=\"false\" />\n                    <add fileExtension=\".lsad\" allowed=\"false\" />\n                    <add fileExtension=\".ssmap\" allowed=\"false\" />\n                    <add fileExtension=\".cd\" allowed=\"false\" />\n                    <add fileExtension=\".dsprototype\" allowed=\"false\" />\n                    <add fileExtension=\".lsaprototype\" allowed=\"false\" />\n                    <add fileExtension=\".sdm\" allowed=\"false\" />\n                    <add fileExtension=\".sdmDocument\" allowed=\"false\" />\n                    <add fileExtension=\".mdf\" allowed=\"false\" />\n                    <add fileExtension=\".ldf\" allowed=\"false\" />\n                    <add fileExtension=\".ad\" allowed=\"false\" />\n                    <add fileExtension=\".dd\" allowed=\"false\" />\n                    <add fileExtension=\".ldd\" allowed=\"false\" />\n                    <add fileExtension=\".sd\" allowed=\"false\" />\n                    <add fileExtension=\".adprototype\" allowed=\"false\" />\n                    <add fileExtension=\".lddprototype\" allowed=\"false\" />\n                    <add fileExtension=\".exclude\" allowed=\"false\" />\n                    <add fileExtension=\".refresh\" allowed=\"false\" />\n                    <add fileExtension=\".compiled\" allowed=\"false\" />\n                    <add fileExtension=\".msgx\" allowed=\"false\" />\n                    <add fileExtension=\".vsdisco\" allowed=\"false\" />\n                    <add fileExtension=\".rules\" allowed=\"false\" />\n                </fileExtensions>\n\n                <hiddenSegments>\n                    <add segment=\"web.config\" />\n                    <add segment=\"bin\" />\n                    <add segment=\"App_code\" />\n                    <add segment=\"App_GlobalResources\" />\n                    <add segment=\"App_LocalResources\" />\n                    <add segment=\"App_WebReferences\" />\n                    <add segment=\"App_Data\" />\n                    <add segment=\"App_Browsers\" />\n                </hiddenSegments>\n            </requestFiltering>\n\n        </security>\n\n        <staticContent lockAttributes=\"isDocFooterFileName\">\n            <mimeMap fileExtension=\".323\" mimeType=\"text/h323\" />\n            <mimeMap fileExtension=\".3g2\" mimeType=\"video/3gpp2\" />\n            <mimeMap fileExtension=\".3gp2\" mimeType=\"video/3gpp2\" />\n            <mimeMap fileExtension=\".3gp\" mimeType=\"video/3gpp\" />\n            <mimeMap fileExtension=\".3gpp\" mimeType=\"video/3gpp\" />\n            <mimeMap fileExtension=\".aac\" mimeType=\"audio/aac\" />\n            <mimeMap fileExtension=\".aaf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".aca\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".accdb\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".accde\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".accdt\" mimeType=\"application/msaccess\" />\n            <mimeMap fileExtension=\".acx\" mimeType=\"application/internet-property-stream\" />\n            <mimeMap fileExtension=\".adt\" mimeType=\"audio/vnd.dlna.adts\" />\n            <mimeMap fileExtension=\".adts\" mimeType=\"audio/vnd.dlna.adts\" />\n            <mimeMap fileExtension=\".afm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ai\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".aif\" mimeType=\"audio/x-aiff\" />\n            <mimeMap fileExtension=\".aifc\" mimeType=\"audio/aiff\" />\n            <mimeMap fileExtension=\".aiff\" mimeType=\"audio/aiff\" />\n            <mimeMap fileExtension=\".application\" mimeType=\"application/x-ms-application\" />\n            <mimeMap fileExtension=\".art\" mimeType=\"image/x-jg\" />\n            <mimeMap fileExtension=\".asd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".asf\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".asi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".asm\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".asr\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".asx\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".atom\" mimeType=\"application/atom+xml\" />\n            <mimeMap fileExtension=\".au\" mimeType=\"audio/basic\" />\n            <mimeMap fileExtension=\".avi\" mimeType=\"video/x-msvideo\" />\n            <mimeMap fileExtension=\".axs\" mimeType=\"application/olescript\" />\n            <mimeMap fileExtension=\".bas\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".bcpio\" mimeType=\"application/x-bcpio\" />\n            <mimeMap fileExtension=\".bin\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".bmp\" mimeType=\"image/bmp\" />\n            <mimeMap fileExtension=\".c\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".cab\" mimeType=\"application/vnd.ms-cab-compressed\" />\n            <mimeMap fileExtension=\".calx\" mimeType=\"application/vnd.ms-office.calx\" />\n            <mimeMap fileExtension=\".cat\" mimeType=\"application/vnd.ms-pki.seccat\" />\n            <mimeMap fileExtension=\".cdf\" mimeType=\"application/x-cdf\" />\n            <mimeMap fileExtension=\".chm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".class\" mimeType=\"application/x-java-applet\" />\n            <mimeMap fileExtension=\".clp\" mimeType=\"application/x-msclip\" />\n            <mimeMap fileExtension=\".cmx\" mimeType=\"image/x-cmx\" />\n            <mimeMap fileExtension=\".cnf\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".cod\" mimeType=\"image/cis-cod\" />\n            <mimeMap fileExtension=\".cpio\" mimeType=\"application/x-cpio\" />\n            <mimeMap fileExtension=\".cpp\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".crd\" mimeType=\"application/x-mscardfile\" />\n            <mimeMap fileExtension=\".crl\" mimeType=\"application/pkix-crl\" />\n            <mimeMap fileExtension=\".crt\" mimeType=\"application/x-x509-ca-cert\" />\n            <mimeMap fileExtension=\".csh\" mimeType=\"application/x-csh\" />\n            <mimeMap fileExtension=\".css\" mimeType=\"text/css\" />\n            <mimeMap fileExtension=\".csv\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".cur\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dcr\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".deploy\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".der\" mimeType=\"application/x-x509-ca-cert\" />\n            <mimeMap fileExtension=\".dib\" mimeType=\"image/bmp\" />\n            <mimeMap fileExtension=\".dir\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".disco\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dll\" mimeType=\"application/x-msdownload\" />\n            <mimeMap fileExtension=\".dll.config\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dlm\" mimeType=\"text/dlm\" />\n            <mimeMap fileExtension=\".doc\" mimeType=\"application/msword\" />\n            <mimeMap fileExtension=\".docm\" mimeType=\"application/vnd.ms-word.document.macroEnabled.12\" />\n            <mimeMap fileExtension=\".docx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" />\n            <mimeMap fileExtension=\".dot\" mimeType=\"application/msword\" />\n            <mimeMap fileExtension=\".dotm\" mimeType=\"application/vnd.ms-word.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".dotx\" mimeType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\" />\n            <mimeMap fileExtension=\".dsp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dtd\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".dvi\" mimeType=\"application/x-dvi\" />\n            <mimeMap fileExtension=\".dvr-ms\" mimeType=\"video/x-ms-dvr\" />\n            <mimeMap fileExtension=\".dwf\" mimeType=\"drawing/x-dwf\" />\n            <mimeMap fileExtension=\".dwp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".dxr\" mimeType=\"application/x-director\" />\n            <mimeMap fileExtension=\".eml\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".emz\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".eot\" mimeType=\"application/vnd.ms-fontobject\" />\n            <mimeMap fileExtension=\".eps\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".etx\" mimeType=\"text/x-setext\" />\n            <mimeMap fileExtension=\".evy\" mimeType=\"application/envoy\" />\n            <mimeMap fileExtension=\".exe\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".exe.config\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".fdf\" mimeType=\"application/vnd.fdf\" />\n            <mimeMap fileExtension=\".fif\" mimeType=\"application/fractals\" />\n            <mimeMap fileExtension=\".fla\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".flr\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".flv\" mimeType=\"video/x-flv\" />\n            <mimeMap fileExtension=\".gif\" mimeType=\"image/gif\" />\n            <mimeMap fileExtension=\".gtar\" mimeType=\"application/x-gtar\" />\n            <mimeMap fileExtension=\".gz\" mimeType=\"application/x-gzip\" />\n            <mimeMap fileExtension=\".h\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".hdf\" mimeType=\"application/x-hdf\" />\n            <mimeMap fileExtension=\".hdml\" mimeType=\"text/x-hdml\" />\n            <mimeMap fileExtension=\".hhc\" mimeType=\"application/x-oleobject\" />\n            <mimeMap fileExtension=\".hhk\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".hhp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".hlp\" mimeType=\"application/winhlp\" />\n            <mimeMap fileExtension=\".hqx\" mimeType=\"application/mac-binhex40\" />\n            <mimeMap fileExtension=\".hta\" mimeType=\"application/hta\" />\n            <mimeMap fileExtension=\".htc\" mimeType=\"text/x-component\" />\n            <mimeMap fileExtension=\".htm\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".html\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".htt\" mimeType=\"text/webviewhtml\" />\n            <mimeMap fileExtension=\".hxt\" mimeType=\"text/html\" />\n            <mimeMap fileExtension=\".ical\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".icalendar\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".ico\" mimeType=\"image/x-icon\" />\n            <mimeMap fileExtension=\".ics\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".ief\" mimeType=\"image/ief\" />\n            <mimeMap fileExtension=\".ifb\" mimeType=\"text/calendar\" />\n            <mimeMap fileExtension=\".iii\" mimeType=\"application/x-iphone\" />\n            <mimeMap fileExtension=\".inf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ins\" mimeType=\"application/x-internet-signup\" />\n            <mimeMap fileExtension=\".isp\" mimeType=\"application/x-internet-signup\" />\n            <mimeMap fileExtension=\".IVF\" mimeType=\"video/x-ivf\" />\n            <mimeMap fileExtension=\".jar\" mimeType=\"application/java-archive\" />\n            <mimeMap fileExtension=\".java\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".jck\" mimeType=\"application/liquidmotion\" />\n            <mimeMap fileExtension=\".jcz\" mimeType=\"application/liquidmotion\" />\n            <mimeMap fileExtension=\".jfif\" mimeType=\"image/pjpeg\" />\n            <mimeMap fileExtension=\".jpb\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".jpe\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".jpeg\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".jpg\" mimeType=\"image/jpeg\" />\n            <mimeMap fileExtension=\".js\" mimeType=\"application/javascript\" />\n            <mimeMap fileExtension=\".jsx\" mimeType=\"text/jscript\" />\n            <mimeMap fileExtension=\".latex\" mimeType=\"application/x-latex\" />\n            <mimeMap fileExtension=\".lit\" mimeType=\"application/x-ms-reader\" />\n            <mimeMap fileExtension=\".lpk\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".lsf\" mimeType=\"video/x-la-asf\" />\n            <mimeMap fileExtension=\".lsx\" mimeType=\"video/x-la-asf\" />\n            <mimeMap fileExtension=\".lzh\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".m13\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".m14\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".m1v\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".m2ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".m3u\" mimeType=\"audio/x-mpegurl\" />\n            <mimeMap fileExtension=\".m4a\" mimeType=\"audio/mp4\" />\n            <mimeMap fileExtension=\".m4v\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".man\" mimeType=\"application/x-troff-man\" />\n            <mimeMap fileExtension=\".manifest\" mimeType=\"application/x-ms-manifest\" />\n            <mimeMap fileExtension=\".map\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".mdb\" mimeType=\"application/x-msaccess\" />\n            <mimeMap fileExtension=\".mdp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".me\" mimeType=\"application/x-troff-me\" />\n            <mimeMap fileExtension=\".mht\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".mhtml\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".mid\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".midi\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".mix\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mmf\" mimeType=\"application/x-smaf\" />\n            <mimeMap fileExtension=\".mno\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".mny\" mimeType=\"application/x-msmoney\" />\n            <mimeMap fileExtension=\".mov\" mimeType=\"video/quicktime\" />\n            <mimeMap fileExtension=\".movie\" mimeType=\"video/x-sgi-movie\" />\n            <mimeMap fileExtension=\".mp2\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mp3\" mimeType=\"audio/mpeg\" />\n            <mimeMap fileExtension=\".mp4\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".mp4v\" mimeType=\"video/mp4\" />\n            <mimeMap fileExtension=\".mpa\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpe\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpeg\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpg\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".mpp\" mimeType=\"application/vnd.ms-project\" />\n            <mimeMap fileExtension=\".mpv2\" mimeType=\"video/mpeg\" />\n            <mimeMap fileExtension=\".ms\" mimeType=\"application/x-troff-ms\" />\n            <mimeMap fileExtension=\".msi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mso\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".mvb\" mimeType=\"application/x-msmediaview\" />\n            <mimeMap fileExtension=\".mvc\" mimeType=\"application/x-miva-compiled\" />\n            <mimeMap fileExtension=\".nc\" mimeType=\"application/x-netcdf\" />\n            <mimeMap fileExtension=\".nsc\" mimeType=\"video/x-ms-asf\" />\n            <mimeMap fileExtension=\".nws\" mimeType=\"message/rfc822\" />\n            <mimeMap fileExtension=\".ocx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".oda\" mimeType=\"application/oda\" />\n            <mimeMap fileExtension=\".odc\" mimeType=\"text/x-ms-odc\" />\n            <mimeMap fileExtension=\".ods\" mimeType=\"application/oleobject\" />\n            <mimeMap fileExtension=\".oga\" mimeType=\"audio/ogg\" />\n            <mimeMap fileExtension=\".ogg\" mimeType=\"video/ogg\" />\n            <mimeMap fileExtension=\".ogv\" mimeType=\"video/ogg\" />\n            <mimeMap fileExtension=\".ogx\" mimeType=\"application/ogg\" />\n            <mimeMap fileExtension=\".one\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onea\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetoc\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetoc2\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onetmp\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".onepkg\" mimeType=\"application/onenote\" />\n            <mimeMap fileExtension=\".osdx\" mimeType=\"application/opensearchdescription+xml\" />\n            <mimeMap fileExtension=\".otf\" mimeType=\"font/otf\" />\n            <mimeMap fileExtension=\".p10\" mimeType=\"application/pkcs10\" />\n            <mimeMap fileExtension=\".p12\" mimeType=\"application/x-pkcs12\" />\n            <mimeMap fileExtension=\".p7b\" mimeType=\"application/x-pkcs7-certificates\" />\n            <mimeMap fileExtension=\".p7c\" mimeType=\"application/pkcs7-mime\" />\n            <mimeMap fileExtension=\".p7m\" mimeType=\"application/pkcs7-mime\" />\n            <mimeMap fileExtension=\".p7r\" mimeType=\"application/x-pkcs7-certreqresp\" />\n            <mimeMap fileExtension=\".p7s\" mimeType=\"application/pkcs7-signature\" />\n            <mimeMap fileExtension=\".pbm\" mimeType=\"image/x-portable-bitmap\" />\n            <mimeMap fileExtension=\".pcx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pcz\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pdf\" mimeType=\"application/pdf\" />\n            <mimeMap fileExtension=\".pfb\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pfm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pfx\" mimeType=\"application/x-pkcs12\" />\n            <mimeMap fileExtension=\".pgm\" mimeType=\"image/x-portable-graymap\" />\n            <mimeMap fileExtension=\".pko\" mimeType=\"application/vnd.ms-pki.pko\" />\n            <mimeMap fileExtension=\".pma\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmc\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pml\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmr\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".pmw\" mimeType=\"application/x-perfmon\" />\n            <mimeMap fileExtension=\".png\" mimeType=\"image/png\" />\n            <mimeMap fileExtension=\".pnm\" mimeType=\"image/x-portable-anymap\" />\n            <mimeMap fileExtension=\".pnz\" mimeType=\"image/png\" />\n            <mimeMap fileExtension=\".pot\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".potm\" mimeType=\"application/vnd.ms-powerpoint.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".potx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.template\" />\n            <mimeMap fileExtension=\".ppam\" mimeType=\"application/vnd.ms-powerpoint.addin.macroEnabled.12\" />\n            <mimeMap fileExtension=\".ppm\" mimeType=\"image/x-portable-pixmap\" />\n            <mimeMap fileExtension=\".pps\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".ppsm\" mimeType=\"application/vnd.ms-powerpoint.slideshow.macroEnabled.12\" />\n            <mimeMap fileExtension=\".ppsx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\" />\n            <mimeMap fileExtension=\".ppt\" mimeType=\"application/vnd.ms-powerpoint\" />\n            <mimeMap fileExtension=\".pptm\" mimeType=\"application/vnd.ms-powerpoint.presentation.macroEnabled.12\" />\n            <mimeMap fileExtension=\".pptx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.presentation\" />\n            <mimeMap fileExtension=\".prf\" mimeType=\"application/pics-rules\" />\n            <mimeMap fileExtension=\".prm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".prx\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ps\" mimeType=\"application/postscript\" />\n            <mimeMap fileExtension=\".psd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".psm\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".psp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".pub\" mimeType=\"application/x-mspublisher\" />\n            <mimeMap fileExtension=\".qt\" mimeType=\"video/quicktime\" />\n            <mimeMap fileExtension=\".qtl\" mimeType=\"application/x-quicktimeplayer\" />\n            <mimeMap fileExtension=\".qxd\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ra\" mimeType=\"audio/x-pn-realaudio\" />\n            <mimeMap fileExtension=\".ram\" mimeType=\"audio/x-pn-realaudio\" />\n            <mimeMap fileExtension=\".rar\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".ras\" mimeType=\"image/x-cmu-raster\" />\n            <mimeMap fileExtension=\".rf\" mimeType=\"image/vnd.rn-realflash\" />\n            <mimeMap fileExtension=\".rgb\" mimeType=\"image/x-rgb\" />\n            <mimeMap fileExtension=\".rm\" mimeType=\"application/vnd.rn-realmedia\" />\n            <mimeMap fileExtension=\".rmi\" mimeType=\"audio/mid\" />\n            <mimeMap fileExtension=\".roff\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".rpm\" mimeType=\"audio/x-pn-realaudio-plugin\" />\n            <mimeMap fileExtension=\".rtf\" mimeType=\"application/rtf\" />\n            <mimeMap fileExtension=\".rtx\" mimeType=\"text/richtext\" />\n            <mimeMap fileExtension=\".scd\" mimeType=\"application/x-msschedule\" />\n            <mimeMap fileExtension=\".sct\" mimeType=\"text/scriptlet\" />\n            <mimeMap fileExtension=\".sea\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".setpay\" mimeType=\"application/set-payment-initiation\" />\n            <mimeMap fileExtension=\".setreg\" mimeType=\"application/set-registration-initiation\" />\n            <mimeMap fileExtension=\".sgml\" mimeType=\"text/sgml\" />\n            <mimeMap fileExtension=\".sh\" mimeType=\"application/x-sh\" />\n            <mimeMap fileExtension=\".shar\" mimeType=\"application/x-shar\" />\n            <mimeMap fileExtension=\".sit\" mimeType=\"application/x-stuffit\" />\n            <mimeMap fileExtension=\".sldm\" mimeType=\"application/vnd.ms-powerpoint.slide.macroEnabled.12\" />\n            <mimeMap fileExtension=\".sldx\" mimeType=\"application/vnd.openxmlformats-officedocument.presentationml.slide\" />\n            <mimeMap fileExtension=\".smd\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".smi\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".smx\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".smz\" mimeType=\"audio/x-smd\" />\n            <mimeMap fileExtension=\".snd\" mimeType=\"audio/basic\" />\n            <mimeMap fileExtension=\".snp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".spc\" mimeType=\"application/x-pkcs7-certificates\" />\n            <mimeMap fileExtension=\".spl\" mimeType=\"application/futuresplash\" />\n            <mimeMap fileExtension=\".spx\" mimeType=\"audio/ogg\" />\n            <mimeMap fileExtension=\".src\" mimeType=\"application/x-wais-source\" />\n            <mimeMap fileExtension=\".ssm\" mimeType=\"application/streamingmedia\" />\n            <mimeMap fileExtension=\".sst\" mimeType=\"application/vnd.ms-pki.certstore\" />\n            <mimeMap fileExtension=\".stl\" mimeType=\"application/vnd.ms-pki.stl\" />\n            <mimeMap fileExtension=\".sv4cpio\" mimeType=\"application/x-sv4cpio\" />\n            <mimeMap fileExtension=\".sv4crc\" mimeType=\"application/x-sv4crc\" />\n            <mimeMap fileExtension=\".svg\" mimeType=\"image/svg+xml\" />\n            <mimeMap fileExtension=\".svgz\" mimeType=\"image/svg+xml\" />\n            <mimeMap fileExtension=\".swf\" mimeType=\"application/x-shockwave-flash\" />\n            <mimeMap fileExtension=\".t\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".tar\" mimeType=\"application/x-tar\" />\n            <mimeMap fileExtension=\".tcl\" mimeType=\"application/x-tcl\" />\n            <mimeMap fileExtension=\".tex\" mimeType=\"application/x-tex\" />\n            <mimeMap fileExtension=\".texi\" mimeType=\"application/x-texinfo\" />\n            <mimeMap fileExtension=\".texinfo\" mimeType=\"application/x-texinfo\" />\n            <mimeMap fileExtension=\".tgz\" mimeType=\"application/x-compressed\" />\n            <mimeMap fileExtension=\".thmx\" mimeType=\"application/vnd.ms-officetheme\" />\n            <mimeMap fileExtension=\".thn\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tif\" mimeType=\"image/tiff\" />\n            <mimeMap fileExtension=\".tiff\" mimeType=\"image/tiff\" />\n            <mimeMap fileExtension=\".toc\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tr\" mimeType=\"application/x-troff\" />\n            <mimeMap fileExtension=\".trm\" mimeType=\"application/x-msterminal\" />\n            <mimeMap fileExtension=\".ts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".tsv\" mimeType=\"text/tab-separated-values\" />\n            <mimeMap fileExtension=\".ttf\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".tts\" mimeType=\"video/vnd.dlna.mpeg-tts\" />\n            <mimeMap fileExtension=\".txt\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".u32\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".uls\" mimeType=\"text/iuls\" />\n            <mimeMap fileExtension=\".ustar\" mimeType=\"application/x-ustar\" />\n            <mimeMap fileExtension=\".vbs\" mimeType=\"text/vbscript\" />\n            <mimeMap fileExtension=\".vcf\" mimeType=\"text/x-vcard\" />\n            <mimeMap fileExtension=\".vcs\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".vdx\" mimeType=\"application/vnd.ms-visio.viewer\" />\n            <mimeMap fileExtension=\".vml\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".vsd\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vss\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vst\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vsto\" mimeType=\"application/x-ms-vsto\" />\n            <mimeMap fileExtension=\".vsw\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vsx\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".vtx\" mimeType=\"application/vnd.visio\" />\n            <mimeMap fileExtension=\".wav\" mimeType=\"audio/wav\" />\n            <mimeMap fileExtension=\".wax\" mimeType=\"audio/x-ms-wax\" />\n            <mimeMap fileExtension=\".wbmp\" mimeType=\"image/vnd.wap.wbmp\" />\n            <mimeMap fileExtension=\".wcm\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wdb\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".webm\" mimeType=\"video/webm\" />\n            <mimeMap fileExtension=\".wks\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wm\" mimeType=\"video/x-ms-wm\" />\n            <mimeMap fileExtension=\".wma\" mimeType=\"audio/x-ms-wma\" />\n            <mimeMap fileExtension=\".wmd\" mimeType=\"application/x-ms-wmd\" />\n            <mimeMap fileExtension=\".wmf\" mimeType=\"application/x-msmetafile\" />\n            <mimeMap fileExtension=\".wml\" mimeType=\"text/vnd.wap.wml\" />\n            <mimeMap fileExtension=\".wmlc\" mimeType=\"application/vnd.wap.wmlc\" />\n            <mimeMap fileExtension=\".wmls\" mimeType=\"text/vnd.wap.wmlscript\" />\n            <mimeMap fileExtension=\".wmlsc\" mimeType=\"application/vnd.wap.wmlscriptc\" />\n            <mimeMap fileExtension=\".wmp\" mimeType=\"video/x-ms-wmp\" />\n            <mimeMap fileExtension=\".wmv\" mimeType=\"video/x-ms-wmv\" />\n            <mimeMap fileExtension=\".wmx\" mimeType=\"video/x-ms-wmx\" />\n            <mimeMap fileExtension=\".wmz\" mimeType=\"application/x-ms-wmz\" />\n            <mimeMap fileExtension=\".woff\" mimeType=\"font/x-woff\" />\n            <mimeMap fileExtension=\".wps\" mimeType=\"application/vnd.ms-works\" />\n            <mimeMap fileExtension=\".wri\" mimeType=\"application/x-mswrite\" />\n            <mimeMap fileExtension=\".wrl\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".wrz\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".wsdl\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".wtv\" mimeType=\"video/x-ms-wtv\" />\n            <mimeMap fileExtension=\".wvx\" mimeType=\"video/x-ms-wvx\" />\n            <mimeMap fileExtension=\".x\" mimeType=\"application/directx\" />\n            <mimeMap fileExtension=\".xaf\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".xaml\" mimeType=\"application/xaml+xml\" />\n            <mimeMap fileExtension=\".xap\" mimeType=\"application/x-silverlight-app\" />\n            <mimeMap fileExtension=\".xbap\" mimeType=\"application/x-ms-xbap\" />\n            <mimeMap fileExtension=\".xbm\" mimeType=\"image/x-xbitmap\" />\n            <mimeMap fileExtension=\".xdr\" mimeType=\"text/plain\" />\n            <mimeMap fileExtension=\".xht\" mimeType=\"application/xhtml+xml\" />\n            <mimeMap fileExtension=\".xhtml\" mimeType=\"application/xhtml+xml\" />\n            <mimeMap fileExtension=\".xla\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlam\" mimeType=\"application/vnd.ms-excel.addin.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlc\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlm\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xls\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xlsb\" mimeType=\"application/vnd.ms-excel.sheet.binary.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlsm\" mimeType=\"application/vnd.ms-excel.sheet.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xlsx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" />\n            <mimeMap fileExtension=\".xlt\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xltm\" mimeType=\"application/vnd.ms-excel.template.macroEnabled.12\" />\n            <mimeMap fileExtension=\".xltx\" mimeType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\" />\n            <mimeMap fileExtension=\".xlw\" mimeType=\"application/vnd.ms-excel\" />\n            <mimeMap fileExtension=\".xml\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xof\" mimeType=\"x-world/x-vrml\" />\n            <mimeMap fileExtension=\".xpm\" mimeType=\"image/x-xpixmap\" />\n            <mimeMap fileExtension=\".xps\" mimeType=\"application/vnd.ms-xpsdocument\" />\n            <mimeMap fileExtension=\".xsd\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsf\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsl\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xslt\" mimeType=\"text/xml\" />\n            <mimeMap fileExtension=\".xsn\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".xtp\" mimeType=\"application/octet-stream\" />\n            <mimeMap fileExtension=\".xwd\" mimeType=\"image/x-xwindowdump\" />\n            <mimeMap fileExtension=\".z\" mimeType=\"application/x-compress\" />\n            <mimeMap fileExtension=\".zip\" mimeType=\"application/x-zip-compressed\" />\n        </staticContent>\n\n        <tracing>\n\n             <traceProviderDefinitions>\n                <add name=\"WWW Server\" guid=\"{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}\">\n                    <areas>\n                        <clear />\n                        <add name=\"Authentication\" value=\"2\" />\n                        <add name=\"Security\" value=\"4\" />\n                        <add name=\"Filter\" value=\"8\" />\n                        <add name=\"StaticFile\" value=\"16\" />\n                        <add name=\"CGI\" value=\"32\" />\n                        <add name=\"Compression\" value=\"64\" />\n                        <add name=\"Cache\" value=\"128\" />\n                        <add name=\"RequestNotifications\" value=\"256\" />\n                        <add name=\"Module\" value=\"512\" />\n                        <add name=\"Rewrite\" value=\"1024\" />\n                        <add name=\"FastCGI\" value=\"4096\" />\n                        <add name=\"WebSocket\" value=\"16384\" />\n                    </areas>\n                </add>\n                <add name=\"ASP\" guid=\"{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}\">\n                    <areas>\n                        <clear />\n                    </areas>\n                </add>\n                <add name=\"ISAPI Extension\" guid=\"{a1c2040e-8840-4c31-ba11-9871031a19ea}\">\n                    <areas>\n                        <clear />\n                    </areas>\n                </add>\n                <add name=\"ASPNET\" guid=\"{AFF081FE-0247-4275-9C4E-021F3DC1DA35}\">\n                    <areas>\n                        <add name=\"Infrastructure\" value=\"1\" />\n                        <add name=\"Module\" value=\"2\" />\n                        <add name=\"Page\" value=\"4\" />\n                        <add name=\"AppServices\" value=\"8\" />\n                    </areas>\n                </add>\n            </traceProviderDefinitions>\n\n            <traceFailedRequests>\n                <add path=\"*.asp\">\n                    <traceAreas>\n                        <add provider=\"ASP\" verbosity=\"Verbose\" />\n                        <add provider=\"ASPNET\" areas=\"Infrastructure,Module,Page,AppServices\" verbosity=\"Verbose\" />\n                        <add provider=\"ISAPI Extension\" verbosity=\"Verbose\" />\n                        <add provider=\"WWW Server\" areas=\"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\" verbosity=\"Verbose\" />\n                    </traceAreas>\n                    <failureDefinitions statusCodes=\"200-999\" />\n                </add>\n                <add path=\"*.aspx\">\n                    <traceAreas>\n                        <add provider=\"ASP\" verbosity=\"Verbose\" />\n                        <add provider=\"ASPNET\" areas=\"Infrastructure,Module,Page,AppServices\" verbosity=\"Verbose\" />\n                        <add provider=\"ISAPI Extension\" verbosity=\"Verbose\" />\n                        <add provider=\"WWW Server\" areas=\"Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket\" verbosity=\"Verbose\" />\n                    </traceAreas>\n                    <failureDefinitions statusCodes=\"200-999\" />\n                </add>\n            </traceFailedRequests>\n\n        </tracing>\n\n        <webdav>\n            <globalSettings>\n                <propertyStores>\n                    <add name=\"webdav_simple_prop\" image=\"%IIS_BIN%\\webdav_simple_prop.dll\" image32=\"%IIS_BIN%\\webdav_simple_prop.dll\" />\n                </propertyStores>\n                <lockStores>\n                    <add name=\"webdav_simple_lock\" image=\"%IIS_BIN%\\webdav_simple_lock.dll\" image32=\"%IIS_BIN%\\webdav_simple_lock.dll\" />\n                </lockStores>\n\n            </globalSettings>\n            <authoring>\n                <locks enabled=\"true\" lockStore=\"webdav_simple_lock\" />\n            </authoring>\n\n        </webdav>\n\n    </system.webServer>\n    <location path=\"\" overrideMode=\"Allow\">\n        <system.webServer>\n            <modules>\n<!--\n                <add name=\"HttpCacheModule\" lockItem=\"true\" />\n-->\n                <add name=\"DynamicCompressionModule\" lockItem=\"true\" />\n                <add name=\"StaticCompressionModule\" lockItem=\"true\" />\n                <add name=\"DefaultDocumentModule\" lockItem=\"true\" />\n                <add name=\"DirectoryListingModule\" lockItem=\"true\" />\n                <add name=\"IsapiFilterModule\" lockItem=\"true\" />\n                <add name=\"ProtocolSupportModule\" lockItem=\"true\" />\n                <add name=\"HttpRedirectionModule\" lockItem=\"true\" />\n                <add name=\"ServerSideIncludeModule\" lockItem=\"true\" />\n                <add name=\"StaticFileModule\" lockItem=\"true\" />\n                <add name=\"AnonymousAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"CertificateMappingAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"UrlAuthorizationModule\" lockItem=\"true\" />\n                <add name=\"BasicAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"WindowsAuthenticationModule\" lockItem=\"true\" />\n<!--\n                <add name=\"DigestAuthenticationModule\" lockItem=\"true\" />\n-->\n                <add name=\"IISCertificateMappingAuthenticationModule\" lockItem=\"true\" />\n                <add name=\"WebMatrixSupportModule\" lockItem=\"true\" />\n                <add name=\"IpRestrictionModule\" lockItem=\"true\" />\n                <add name=\"DynamicIpRestrictionModule\" lockItem=\"true\" />\n                <add name=\"RequestFilteringModule\" lockItem=\"true\" />\n                <add name=\"CustomLoggingModule\" lockItem=\"true\" />\n                <add name=\"CustomErrorModule\" lockItem=\"true\" />\n                <add name=\"IsapiModule\" lockItem=\"true\" />\n                <add name=\"HttpLoggingModule\" lockItem=\"true\" />\n                <add name=\"FailedRequestsTracingModule\" lockItem=\"true\" />\n                <add name=\"CgiModule\" lockItem=\"true\" />\n                <add name=\"FastCgiModule\" lockItem=\"true\" />\n<!--                <add name=\"WebDAVModule\" /> -->\n                <add name=\"RewriteModule\" /> \n                <add name=\"OutputCache\" type=\"System.Web.Caching.OutputCacheModule\" preCondition=\"managedHandler\" />\n                <add name=\"Session\" type=\"System.Web.SessionState.SessionStateModule\" preCondition=\"managedHandler\" />\n                <add name=\"WindowsAuthentication\" type=\"System.Web.Security.WindowsAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"FormsAuthentication\" type=\"System.Web.Security.FormsAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"DefaultAuthentication\" type=\"System.Web.Security.DefaultAuthenticationModule\" preCondition=\"managedHandler\" />\n                <add name=\"RoleManager\" type=\"System.Web.Security.RoleManagerModule\" preCondition=\"managedHandler\" />\n                <add name=\"UrlAuthorization\" type=\"System.Web.Security.UrlAuthorizationModule\" preCondition=\"managedHandler\" />\n                <add name=\"FileAuthorization\" type=\"System.Web.Security.FileAuthorizationModule\" preCondition=\"managedHandler\" />\n                <add name=\"AnonymousIdentification\" type=\"System.Web.Security.AnonymousIdentificationModule\" preCondition=\"managedHandler\" />\n                <add name=\"Profile\" type=\"System.Web.Profile.ProfileModule\" preCondition=\"managedHandler\" />\n                <add name=\"UrlMappingsModule\" type=\"System.Web.UrlMappingsModule\" preCondition=\"managedHandler\" />\n                <add name=\"ApplicationInitializationModule\" lockItem=\"true\" />\n                <add name=\"WebSocketModule\" lockItem=\"true\" />\n                <add name=\"ServiceModel-4.0\" type=\"System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n                <add name=\"ConfigurationValidationModule\" lockItem=\"true\" />\n                <add name=\"UrlRoutingModule-4.0\" type=\"System.Web.Routing.UrlRoutingModule\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n                <add name=\"ScriptModule-4.0\" type=\"System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"managedHandler,runtimeVersionv4.0\" />\n            </modules>\n            <handlers accessPolicy=\"Read, Script\">\n<!--                <add name=\"WebDAV\" path=\"*\" verb=\"PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK\" modules=\"WebDAVModule\" resourceType=\"Unspecified\" requireAccess=\"None\" /> -->\n                <add name=\"AXD-ISAPI-4.0_64bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-4.0_64bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-4.0_64bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-4.0_64bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"svc-ISAPI-4.0_64bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"rules-ISAPI-4.0_64bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"xoml-ISAPI-4.0_64bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"xamlx-ISAPI-4.0_64bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" />\n                <add name=\"aspq-ISAPI-4.0_64bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"cshtm-ISAPI-4.0_64bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"cshtml-ISAPI-4.0_64bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtm-ISAPI-4.0_64bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtml-ISAPI-4.0_64bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"AXD-ISAPI-4.0_32bit\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-4.0_32bit\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-4.0_32bit\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-4.0_32bit\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"svc-ISAPI-4.0_32bit\" path=\"*.svc\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"rules-ISAPI-4.0_32bit\" path=\"*.rules\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"xoml-ISAPI-4.0_32bit\" path=\"*.xoml\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"xamlx-ISAPI-4.0_32bit\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" />\n                <add name=\"aspq-ISAPI-4.0_32bit\" path=\"*.aspq\" verb=\"*\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"cshtm-ISAPI-4.0_32bit\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"cshtml-ISAPI-4.0_32bit\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtm-ISAPI-4.0_32bit\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"vbhtml-ISAPI-4.0_32bit\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"TraceHandler-Integrated-4.0\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"WebAdminHandler-Integrated-4.0\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"AssemblyResourceLoader-Integrated-4.0\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"PageHandlerFactory-Integrated-4.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"SimpleHandlerFactory-Integrated-4.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"WebServiceHandlerFactory-Integrated-4.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-Integrated-4.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-Integrated-4.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"svc-Integrated-4.0\" path=\"*.svc\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"rules-Integrated-4.0\" path=\"*.rules\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"xoml-Integrated-4.0\" path=\"*.xoml\" verb=\"*\" type=\"System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"xamlx-Integrated-4.0\" path=\"*.xamlx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"aspq-Integrated-4.0\" path=\"*.aspq\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"cshtm-Integrated-4.0\" path=\"*.cshtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"cshtml-Integrated-4.0\" path=\"*.cshtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"vbhtm-Integrated-4.0\" path=\"*.vbhtm\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"vbhtml-Integrated-4.0\" path=\"*.vbhtml\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.HttpForbiddenHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ScriptHandlerFactoryAppServices-Integrated-4.0\" path=\"*_AppService.axd\" verb=\"*\" type=\"System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ScriptResourceIntegrated-4.0\" path=\"*ScriptResource.axd\" verb=\"GET,HEAD\" type=\"System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35\" preCondition=\"integratedMode,runtimeVersionv4.0\" />\n                <add name=\"ASPClassic\" path=\"*.asp\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n                <add name=\"SecurityCertificate\" path=\"*.cer\" verb=\"GET,HEAD,POST\" modules=\"IsapiModule\" scriptProcessor=\"%IIS_BIN%\\asp.dll\" resourceType=\"File\" />\n                <add name=\"ISAPI-dll\" path=\"*.dll\" verb=\"*\" modules=\"IsapiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n                <add name=\"TraceHandler-Integrated\" path=\"trace.axd\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TraceHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"WebAdminHandler-Integrated\" path=\"WebAdmin.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.WebAdminHandler\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"AssemblyResourceLoader-Integrated\" path=\"WebResource.axd\" verb=\"GET,DEBUG\" type=\"System.Web.Handlers.AssemblyResourceLoader\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"PageHandlerFactory-Integrated\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.PageHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"SimpleHandlerFactory-Integrated\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.UI.SimpleHandlerFactory\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"WebServiceHandlerFactory-Integrated\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-Integrated\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-Integrated\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089\" preCondition=\"integratedMode,runtimeVersionv2.0\" />\n                <add name=\"AXD-ISAPI-2.0\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-2.0\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-2.0\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-2.0\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"AXD-ISAPI-2.0-64\" path=\"*.axd\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"PageHandlerFactory-ISAPI-2.0-64\" path=\"*.aspx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"SimpleHandlerFactory-ISAPI-2.0-64\" path=\"*.ashx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"WebServiceHandlerFactory-ISAPI-2.0-64\" path=\"*.asmx\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-rem-ISAPI-2.0-64\" path=\"*.rem\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"HttpRemotingHandlerFactory-soap-ISAPI-2.0-64\" path=\"*.soap\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v2.0.50727\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv2.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"CGI-exe\" path=\"*.exe\" verb=\"*\" modules=\"CgiModule\" resourceType=\"File\" requireAccess=\"Execute\" allowPathInfo=\"true\" />\n                <add name=\"SSINC-stm\" path=\"*.stm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"SSINC-shtm\" path=\"*.shtm\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"SSINC-shtml\" path=\"*.shtml\" verb=\"GET,HEAD,POST\" modules=\"ServerSideIncludeModule\" resourceType=\"File\" />\n                <add name=\"TRACEVerbHandler\" path=\"*\" verb=\"TRACE\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n                <add name=\"OPTIONSVerbHandler\" path=\"*\" verb=\"OPTIONS\" modules=\"ProtocolSupportModule\" requireAccess=\"None\" />\n                <add name=\"ExtensionlessUrl-ISAPI-4.0_32bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness32\" responseBufferLimit=\"0\" />\n                <add name=\"ExtensionlessUrlHandler-ISAPI-4.0_64bit\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" modules=\"IsapiModule\" scriptProcessor=\"%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll\" preCondition=\"classicMode,runtimeVersionv4.0,bitness64\" responseBufferLimit=\"0\" />\n                <add name=\"ExtensionlessUrl-Integrated-4.0\" path=\"*.\" verb=\"GET,HEAD,POST,DEBUG\" type=\"System.Web.Handlers.TransferRequestHandler\" preCondition=\"integratedMode,runtimeVersionv4.0\" responseBufferLimit=\"0\" />\n                <add name=\"StaticFile\" path=\"*\" verb=\"*\" modules=\"StaticFileModule,DefaultDocumentModule,DirectoryListingModule\" resourceType=\"Either\" requireAccess=\"Read\" />\n            </handlers>\n        </system.webServer>\n    </location>\n    <location path=\"Default Web Site\">\n        <system.webServer>\n            <security>\n                <ipSecurity>\n                    <add ipAddress=\"1.1.1.1\" allowed=\"true\" />\n                </ipSecurity>\n                <authentication>\n                  <anonymousAuthentication password=\"[enc:AesProvider:9mM2ovvK6I1KeNdmNtr4fftObncukaJ9aSnxtLV4ZJs=:enc]\" userName=\"test\"/>\n                </authentication>\n            </security>\n            <httpLogging dontLog=\"true\" />\n        </system.webServer>\n    </location>\n</configuration>\n"
  },
  {
    "path": "Tests.JexusManager/xunit.runner.json",
    "content": "﻿{\n    \"shadowCopy\": false,\n    \"diagnosticMessages\": true,\n    \"maxParallelThreads\": 1\n}\n"
  },
  {
    "path": "build.installer.bat",
    "content": "del bin\\Release\\en-us\\JexusManager.msi\n%WINDIR%\\Microsoft.NET\\Framework\\v4.0.30319\\msbuild .\\Setup\\JexusManager.wixproj /t:Rebuild /property:Configuration=Release /property:Platform=arm64\ncopy bin\\Release\\en-us\\JexusManager.msi .\\JexusManager_arm64.msi\ndel bin\\Release\\en-us\\JexusManager.msi\n%WINDIR%\\Microsoft.NET\\Framework\\v4.0.30319\\msbuild .\\Setup\\JexusManager.wixproj /t:Rebuild /property:Configuration=Release /property:Platform=x64\ncopy bin\\Release\\en-us\\JexusManager.msi .\\JexusManager_x64.msi\n"
  },
  {
    "path": "dist.all.bat",
    "content": "call dist.deploy.bat\npause\n"
  },
  {
    "path": "dist.ci.bat",
    "content": "pwsh -ExecutionPolicy Bypass -file download.dotnet.releases.ps1\nIF %ERRORLEVEL% NEQ 0 goto failed\n\npwsh -ExecutionPolicy Bypass -file release.ps1\nIF %ERRORLEVEL% NEQ 0 goto failed\n\necho succeeded.\nexit /b 0\n\n:failed\necho failed.\nexit /b 1\n"
  },
  {
    "path": "dist.deploy.bat",
    "content": "CALL dist.ci.bat\nIF %ERRORLEVEL% NEQ 0 goto failed\n\npwsh -ExecutionPolicy Bypass -file sign.ps1\nIF %ERRORLEVEL% NEQ 0 goto failed\n\nCALL build.installer.bat\nIF %ERRORLEVEL% NEQ 0 goto failed\n\npwsh -ExecutionPolicy Bypass -file sign.installers.ps1\nIF %ERRORLEVEL% NEQ 0 goto failed\n\npwsh -ExecutionPolicy Bypass -file sha1.ps1\n\necho succeeded.\nexit /b 0\n\n:failed\necho failed.\nexit /b 1\n"
  },
  {
    "path": "download.dotnet.releases.ps1",
    "content": "$file = \"./JexusManager/Resources/releases-index.json\"\nInvoke-WebRequest https://builds.dotnet.microsoft.com/dotnet/release-metadata/releases-index.json -OutFile $file\n\nif (-not (Test-Path $file)) {\n    Write-Error \"Couldn't find releases-index.json. Exit.\"\n    exit 1\n}\n\n$content = Get-Content $file | Out-String | ConvertFrom-Json\n$releases = $content.'releases-index'\nforeach ($release in $releases) {\n    $version = $release.'channel-version'\n    $link = $release.'releases.json'\n    $releaseFile = \"./JexusManager/Resources/$version-release.json\"\n    Write-Host \"Download\" $version\n    Invoke-WebRequest $link -OutFile $releaseFile\n}\n\nWrite-Host \"Finished.\"\n"
  },
  {
    "path": "lib/CheckBoxComboBox/CheckBoxComboBox.Designer.cs",
    "content": "﻿namespace PresentationControls\n{\n    partial class CheckBoxComboBox\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            components = new System.ComponentModel.Container();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "lib/CheckBoxComboBox/CheckBoxComboBox.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Reflection;\nusing System.Collections.ObjectModel;\nusing System.Collections.Specialized;\n\nnamespace PresentationControls\n{\n    /// <summary>\n    /// Martin Lottering : 2007-10-27\n    /// --------------------------------\n    /// This is a usefull control in Filters. Allows you to save space and can replace a Grouped Box of CheckBoxes.\n    /// Currently used on the TasksFilter for TaskStatusses, which means the user can select which Statusses to include\n    /// in the \"Search\".\n    /// This control does not implement a CheckBoxListBox, instead it adds a wrapper for the normal ComboBox and Items. \n    /// See the CheckBoxItems property.\n    /// ----------------\n    /// ALSO IMPORTANT: In Data Binding when setting the DataSource. The ValueMember must be a bool type property, because it will \n    /// be binded to the Checked property of the displayed CheckBox. Also see the DisplayMemberSingleItem for more information.\n    /// ----------------\n    /// Extends the CodeProject PopupComboBox \"Simple pop-up control\" \"http://www.codeproject.com/cs/miscctrl/simplepopup.asp\"\n    /// by Lukasz Swiatkowski.\n    /// </summary>\n    public partial class CheckBoxComboBox : PopupComboBox\n    {\n        #region CONSTRUCTOR\n\n        public CheckBoxComboBox()\n            : base()\n        {\n            InitializeComponent();\n            _CheckBoxProperties = new CheckBoxProperties();\n            _CheckBoxProperties.PropertyChanged += new EventHandler(_CheckBoxProperties_PropertyChanged);\n            // Dumps the ListControl in a(nother) Container to ensure the ScrollBar on the ListControl does not\n            // Paint over the Size grip. Setting the Padding or Margin on the Popup or host control does\n            // not work as I expected. I don't think it can work that way.\n            CheckBoxComboBoxListControlContainer ContainerControl = new CheckBoxComboBoxListControlContainer();\n            _CheckBoxComboBoxListControl = new CheckBoxComboBoxListControl(this);\n            _CheckBoxComboBoxListControl.Items.CheckBoxCheckedChanged += new EventHandler(Items_CheckBoxCheckedChanged);\n            ContainerControl.Controls.Add(_CheckBoxComboBoxListControl);\n            // This padding spaces neatly on the left-hand side and allows space for the size grip at the bottom.\n            ContainerControl.Padding = new Padding(4, 0, 0, 14);\n            // The ListControl FILLS the ListContainer.\n            _CheckBoxComboBoxListControl.Dock = DockStyle.Fill;\n            // The DropDownControl used by the base class. Will be wrapped in a popup by the base class.\n            DropDownControl = ContainerControl;\n            // Must be set after the DropDownControl is set, since the popup is recreated.\n            // NOTE: I made the dropDown protected so that it can be accessible here. It was private.\n            dropDown.Resizable = true;\n        }\n\n        #endregion\n\n        #region PRIVATE FIELDS\n\n        /// <summary>\n        /// The checkbox list control. The public CheckBoxItems property provides a direct reference to its Items.\n        /// </summary>\n        internal CheckBoxComboBoxListControl _CheckBoxComboBoxListControl;\n        /// <summary>\n        /// In DataBinding operations, this property will be used as the DisplayMember in the CheckBoxComboBoxListBox.\n        /// The normal/existing \"DisplayMember\" property is used by the TextBox of the ComboBox to display \n        /// a concatenated Text of the items selected. This concatenation and its formatting however is controlled \n        /// by the Binded object, since it owns that property.\n        /// </summary>\n        private string _DisplayMemberSingleItem = null;\n        internal bool _MustAddHiddenItem = false;\n\n        #endregion\n\n        #region PRIVATE OPERATIONS\n\n        /// <summary>\n        /// Builds a CSV string of the items selected.\n        /// </summary>\n        internal string GetCSVText(bool skipFirstItem)\n        {\n            string ListText = String.Empty;\n            int StartIndex =\n                DropDownStyle == ComboBoxStyle.DropDownList\n                && DataSource == null\n                && skipFirstItem\n                    ? 1\n                    : 0;\n            for (int Index = StartIndex; Index <= _CheckBoxComboBoxListControl.Items.Count - 1; Index++)\n            {\n                CheckBoxComboBoxItem Item = _CheckBoxComboBoxListControl.Items[Index];\n                if (Item.Checked)\n                    ListText += string.IsNullOrEmpty(ListText) ? Item.Text : String.Format(\", {0}\", Item.Text);\n            }\n            return ListText;\n        }\n\n        #endregion\n\n        #region PUBLIC PROPERTIES\n\n        /// <summary>\n        /// A direct reference to the Items of CheckBoxComboBoxListControl.\n        /// You can use it to Get or Set the Checked status of items manually if you want.\n        /// But do not manipulate the List itself directly, e.g. Adding and Removing, \n        /// since the list is synchronised when shown with the ComboBox.Items. So for changing \n        /// the list contents, use Items instead.\n        /// </summary>\n        [Browsable(false)]\n        public CheckBoxComboBoxItemList CheckBoxItems\n        {\n            get\n            {\n                // Added to ensure the CheckBoxItems are ALWAYS\n                // available for modification via code.\n                if (_CheckBoxComboBoxListControl.Items.Count != Items.Count)\n                    _CheckBoxComboBoxListControl.SynchroniseControlsWithComboBoxItems();\n                return _CheckBoxComboBoxListControl.Items;\n            }\n        }\n        /// <summary>\n        /// The DataSource of the combobox. Refreshes the CheckBox wrappers when this is set.\n        /// </summary>\n        public new object DataSource\n        {\n            get { return base.DataSource; }\n            set\n            {\n                base.DataSource = value;\n                if (!string.IsNullOrEmpty(ValueMember))\n                    // This ensures that at least the checkboxitems are available to be initialised.\n                    _CheckBoxComboBoxListControl.SynchroniseControlsWithComboBoxItems();\n            }\n        }\n        /// <summary>\n        /// The ValueMember of the combobox. Refreshes the CheckBox wrappers when this is set.\n        /// </summary>\n        public new string ValueMember\n        {\n            get { return base.ValueMember; }\n            set\n            {\n                base.ValueMember = value;\n                if (!string.IsNullOrEmpty(ValueMember))\n                    // This ensures that at least the checkboxitems are available to be initialised.\n                    _CheckBoxComboBoxListControl.SynchroniseControlsWithComboBoxItems();\n            }\n        }\n        /// <summary>\n        /// In DataBinding operations, this property will be used as the DisplayMember in the CheckBoxComboBoxListBox.\n        /// The normal/existing \"DisplayMember\" property is used by the TextBox of the ComboBox to display \n        /// a concatenated Text of the items selected. This concatenation however is controlled by the Binded \n        /// object, since it owns that property.\n        /// </summary>\n        public string DisplayMemberSingleItem\n        {\n            get { if (string.IsNullOrEmpty(_DisplayMemberSingleItem)) return DisplayMember; else return _DisplayMemberSingleItem; }\n            set { _DisplayMemberSingleItem = value; }\n        }\n        /// <summary>\n        /// Made this property Browsable again, since the Base Popup hides it. This class uses it again.\n        /// Gets an object representing the collection of the items contained in this \n        /// System.Windows.Forms.ComboBox.\n        /// </summary>\n        /// <returns>A System.Windows.Forms.ComboBox.ObjectCollection representing the items in \n        /// the System.Windows.Forms.ComboBox.\n        /// </returns>\n        [Browsable(true)]\n        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]\n        public new ObjectCollection Items\n        {\n            get { return base.Items; }\n        }\n\n        #endregion\n\n        #region EVENTS & EVENT HANDLERS\n\n        public event EventHandler CheckBoxCheckedChanged;\n\n        private void Items_CheckBoxCheckedChanged(object sender, EventArgs e)\n        {\n            OnCheckBoxCheckedChanged(sender, e);\n        }\n\n        #endregion\n\n        #region EVENT CALLERS and OVERRIDES e.g. OnResize()\n\n        protected void OnCheckBoxCheckedChanged(object sender, EventArgs e)\n        {\n            string ListText = GetCSVText(true);\n            // The DropDownList style seems to require that the text\n            // part of the \"textbox\" should match a single item.\n            if (DropDownStyle != ComboBoxStyle.DropDownList)\n                Text = ListText;\n            // This refreshes the Text of the first item (which is not visible)\n            else if (DataSource == null)\n            {\n                Items[0] = ListText;\n                // Keep the hidden item and first checkbox item in \n                // sync in order to ensure the Synchronise process\n                // can match the items.\n                CheckBoxItems[0].ComboBoxItem = ListText;\n            }\n\n            EventHandler handler = CheckBoxCheckedChanged;\n            if (handler != null)\n                handler(sender, e);\n        }\n\n        /// <summary>\n        /// Will add an invisible item when the style is DropDownList,\n        /// to help maintain the correct text in main TextBox.\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnDropDownStyleChanged(EventArgs e)\n        {\n            base.OnDropDownStyleChanged(e);\n\n            if (DropDownStyle == ComboBoxStyle.DropDownList\n                && DataSource == null\n                && !DesignMode)\n                _MustAddHiddenItem = true;\n        }\n\n        protected override void OnResize(EventArgs e)\n        {\n            // When the ComboBox is resized, the width of the dropdown \n            // is also resized to match the width of the ComboBox. I think it looks better.\n            Size Size = new Size(Width, DropDownControl.Height);\n            dropDown.Size = Size;\n            base.OnResize(e);\n        }\n\n        #endregion\n\n        #region PUBLIC OPERATIONS\n\n        /// <summary>\n        /// A function to clear/reset the list.\n        /// (Ubiklou : http://www.codeproject.com/KB/combobox/extending_combobox.aspx?msg=2526813#xx2526813xx)\n        /// </summary>\n        public void Clear()\n        {\n            this.Items.Clear();\n            if (DropDownStyle == ComboBoxStyle.DropDownList && DataSource == null)\n                _MustAddHiddenItem = true;\n        }        /// <summary>\n                 /// Uncheck all items.\n                 /// </summary>\n        public void ClearSelection()\n        {\n            foreach (CheckBoxComboBoxItem Item in CheckBoxItems)\n                if (Item.Checked)\n                    Item.Checked = false;\n        }\n\n        #endregion\n\n        #region CHECKBOX PROPERTIES (DEFAULTS)\n\n        private CheckBoxProperties _CheckBoxProperties;\n\n        /// <summary>\n        /// The properties that will be assigned to the checkboxes as default values.\n        /// </summary>\n        [Description(\"The properties that will be assigned to the checkboxes as default values.\")]\n        [Browsable(true)]\n        public CheckBoxProperties CheckBoxProperties\n        {\n            get { return _CheckBoxProperties; }\n            set { _CheckBoxProperties = value; _CheckBoxProperties_PropertyChanged(this, EventArgs.Empty); }\n        }\n\n        private void _CheckBoxProperties_PropertyChanged(object sender, EventArgs e)\n        {\n            foreach (CheckBoxComboBoxItem Item in CheckBoxItems)\n                Item.ApplyProperties(CheckBoxProperties);\n        }\n\n        #endregion\n\n        protected override void WndProc(ref Message m)\n        {\n            // 323 : Item Added\n            // 331 : Clearing\n            if (m.Msg == 331\n                && DropDownStyle == ComboBoxStyle.DropDownList\n                && DataSource == null)\n            {\n                _MustAddHiddenItem = true;\n            }\n\n            base.WndProc(ref m);\n        }\n    }\n\n    /// <summary>\n    /// A container control for the ListControl to ensure the ScrollBar on the ListControl does not\n    /// Paint over the Size grip. Setting the Padding or Margin on the Popup or host control does\n    /// not work as I expected.\n    /// </summary>\n    [ToolboxItem(false)]\n    public class CheckBoxComboBoxListControlContainer : UserControl\n    {\n        #region CONSTRUCTOR\n\n        public CheckBoxComboBoxListControlContainer()\n            : base()\n        {\n            BackColor = SystemColors.Window;\n            BorderStyle = BorderStyle.FixedSingle;\n            AutoScaleMode = AutoScaleMode.Inherit;\n            ResizeRedraw = true;\n            // If you don't set this, then resize operations cause an error in the base class.\n            MinimumSize = new Size(1, 1);\n            MaximumSize = new Size(500, 500);\n        }\n        #endregion\n\n        #region RESIZE OVERRIDE REQUIRED BY THE POPUP CONTROL\n\n        /// <summary>\n        /// Prescribed by the Popup class to ensure Resize operations work correctly.\n        /// </summary>\n        /// <param name=\"m\"></param>\n        protected override void WndProc(ref Message m)\n        {\n            if ((Parent as Popup).ProcessResizing(ref m))\n            {\n                return;\n            }\n            base.WndProc(ref m);\n        }\n        #endregion\n    }\n\n    /// <summary>\n    /// This ListControl that pops up to the User. It contains the CheckBoxComboBoxItems. \n    /// The items are docked DockStyle.Top in this control.\n    /// </summary>\n    [ToolboxItem(false)]\n    public class CheckBoxComboBoxListControl : ScrollableControl\n    {\n        #region CONSTRUCTOR\n\n        public CheckBoxComboBoxListControl(CheckBoxComboBox owner)\n            : base()\n        {\n            DoubleBuffered = true;\n            _CheckBoxComboBox = owner;\n            _Items = new CheckBoxComboBoxItemList(_CheckBoxComboBox);\n            BackColor = SystemColors.Window;\n            // AutoScaleMode = AutoScaleMode.Inherit;\n            AutoScroll = true;\n            ResizeRedraw = true;\n            // if you don't set this, a Resize operation causes an error in the base class.\n            MinimumSize = new Size(1, 1);\n            MaximumSize = new Size(500, 500);\n        }\n\n        #endregion\n\n        #region PRIVATE PROPERTIES\n\n        /// <summary>\n        /// Simply a reference to the CheckBoxComboBox.\n        /// </summary>\n        private CheckBoxComboBox _CheckBoxComboBox;\n        /// <summary>\n        /// A Typed list of ComboBoxCheckBoxItems.\n        /// </summary>\n        private CheckBoxComboBoxItemList _Items;\n\n        #endregion\n\n        public CheckBoxComboBoxItemList Items { get { return _Items; } }\n\n        #region RESIZE OVERRIDE REQUIRED BY THE POPUP CONTROL\n\n        /// <summary>\n        /// Prescribed by the Popup control to enable Resize operations.\n        /// </summary>\n        /// <param name=\"m\"></param>\n        protected override void WndProc(ref Message m)\n        {\n            if ((Parent.Parent as Popup).ProcessResizing(ref m))\n            {\n                return;\n            }\n            base.WndProc(ref m);\n        }\n\n        #endregion\n\n        #region PROTECTED MEMBERS\n\n        protected override void OnVisibleChanged(EventArgs e)\n        {\n            // Synchronises the CheckBox list with the items in the ComboBox.\n            SynchroniseControlsWithComboBoxItems();\n            base.OnVisibleChanged(e);\n        }\n        /// <summary>\n        /// Maintains the controls displayed in the list by keeping them in sync with the actual \n        /// items in the combobox. (e.g. removing and adding as well as ordering)\n        /// </summary>\n        public void SynchroniseControlsWithComboBoxItems()\n        {\n            SuspendLayout();\n            if (_CheckBoxComboBox._MustAddHiddenItem)\n            {\n                _CheckBoxComboBox.Items.Insert(\n                    0, _CheckBoxComboBox.GetCSVText(false)); // INVISIBLE ITEM\n                _CheckBoxComboBox.SelectedIndex = 0;\n                _CheckBoxComboBox._MustAddHiddenItem = false;\n            }\n            Controls.Clear();\n            #region Disposes all items that are no longer in the combo box list\n\n            for (int Index = _Items.Count - 1; Index >= 0; Index--)\n            {\n                CheckBoxComboBoxItem Item = _Items[Index];\n                if (!_CheckBoxComboBox.Items.Contains(Item.ComboBoxItem))\n                {\n                    _Items.Remove(Item);\n                    Item.Dispose();\n                }\n            }\n\n            #endregion\n            #region Recreate the list in the same order of the combo box items\n\n            bool HasHiddenItem =\n                _CheckBoxComboBox.DropDownStyle == ComboBoxStyle.DropDownList\n                && _CheckBoxComboBox.DataSource == null\n                && !DesignMode;\n\n            CheckBoxComboBoxItemList NewList = new CheckBoxComboBoxItemList(_CheckBoxComboBox);\n            for (int Index0 = 0; Index0 <= _CheckBoxComboBox.Items.Count - 1; Index0++)\n            {\n                object Object = _CheckBoxComboBox.Items[Index0];\n                CheckBoxComboBoxItem Item = null;\n                // The hidden item could match any other item when only\n                // one other item was selected.\n                if (Index0 == 0 && HasHiddenItem && _Items.Count > 0)\n                    Item = _Items[0];\n                else\n                {\n                    int StartIndex = HasHiddenItem\n                        ? 1 // Skip the hidden item, it could match \n                        : 0;\n                    for (int Index1 = StartIndex; Index1 <= _Items.Count - 1; Index1++)\n                    {\n                        if (_Items[Index1].ComboBoxItem == Object)\n                        {\n                            Item = _Items[Index1];\n                            break;\n                        }\n                    }\n                }\n                if (Item == null)\n                {\n                    Item = new CheckBoxComboBoxItem(_CheckBoxComboBox, Object);\n                    Item.ApplyProperties(_CheckBoxComboBox.CheckBoxProperties);\n                }\n                NewList.Add(Item);\n                Item.Dock = DockStyle.Top;\n            }\n            _Items.Clear();\n            _Items.AddRange(NewList);\n\n            #endregion\n            #region Add the items to the controls in reversed order to maintain correct docking order\n\n            if (NewList.Count > 0)\n            {\n                // This reverse helps to maintain correct docking order.\n                NewList.Reverse();\n                // If you get an error here that \"Cannot convert to the desired \n                // type, it probably means the controls are not binding correctly.\n                // The Checked property is binded to the ValueMember property. \n                // It must be a bool for example.\n                Controls.AddRange(NewList.ToArray());\n            }\n\n            #endregion\n\n            // Keep the first item invisible\n            if (_CheckBoxComboBox.DropDownStyle == ComboBoxStyle.DropDownList\n                && _CheckBoxComboBox.DataSource == null\n                && !DesignMode)\n                _CheckBoxComboBox.CheckBoxItems[0].Visible = false;\n\n            ResumeLayout();\n        }\n\n        #endregion\n    }\n\n    /// <summary>\n    /// The CheckBox items displayed in the Popup of the ComboBox.\n    /// </summary>\n    [ToolboxItem(false)]\n    public class CheckBoxComboBoxItem : CheckBox\n    {\n        #region CONSTRUCTOR\n\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"owner\">A reference to the CheckBoxComboBox.</param>\n        /// <param name=\"comboBoxItem\">A reference to the item in the ComboBox.Items that this object is extending.</param>\n        public CheckBoxComboBoxItem(CheckBoxComboBox owner, object comboBoxItem)\n            : base()\n        {\n            DoubleBuffered = true;\n            _CheckBoxComboBox = owner;\n            _ComboBoxItem = comboBoxItem;\n            if (_CheckBoxComboBox.DataSource != null)\n                AddBindings();\n            else\n                Text = comboBoxItem.ToString();\n        }\n        #endregion\n\n        #region PRIVATE PROPERTIES\n\n        /// <summary>\n        /// A reference to the CheckBoxComboBox.\n        /// </summary>\n        private CheckBoxComboBox _CheckBoxComboBox;\n        /// <summary>\n        /// A reference to the Item in ComboBox.Items that this object is extending.\n        /// </summary>\n        private object _ComboBoxItem;\n\n        #endregion\n\n        #region PUBLIC PROPERTIES\n\n        /// <summary>\n        /// A reference to the Item in ComboBox.Items that this object is extending.\n        /// </summary>\n        public object ComboBoxItem\n        {\n            get { return _ComboBoxItem; }\n            internal set { _ComboBoxItem = value; }\n        }\n\n        #endregion\n\n        #region BINDING HELPER\n\n        /// <summary>\n        /// When using Data Binding operations via the DataSource property of the ComboBox. This\n        /// adds the required Bindings for the CheckBoxes.\n        /// </summary>\n        public void AddBindings()\n        {\n            // Note, the text uses \"DisplayMemberSingleItem\", not \"DisplayMember\" (unless its not assigned)\n            DataBindings.Add(\n                \"Text\",\n                _ComboBoxItem,\n                _CheckBoxComboBox.DisplayMemberSingleItem\n                );\n            // The ValueMember must be a bool type property usable by the CheckBox.Checked.\n            DataBindings.Add(\n                \"Checked\",\n                _ComboBoxItem,\n                _CheckBoxComboBox.ValueMember,\n                false,\n                // This helps to maintain proper selection state in the Binded object,\n                // even when the controls are added and removed.\n                DataSourceUpdateMode.OnPropertyChanged,\n                false, null, null);\n            // Helps to maintain the Checked status of this\n            // checkbox before the control is visible\n            if (_ComboBoxItem is INotifyPropertyChanged)\n                ((INotifyPropertyChanged)_ComboBoxItem).PropertyChanged +=\n                    new PropertyChangedEventHandler(\n                        CheckBoxComboBoxItem_PropertyChanged);\n        }\n\n        #endregion\n\n        #region PROTECTED MEMBERS\n\n        protected override void OnCheckedChanged(EventArgs e)\n        {\n            // Found that when this event is raised, the bool value of the binded item is not yet updated.\n            if (_CheckBoxComboBox.DataSource != null)\n            {\n                PropertyInfo PI = ComboBoxItem.GetType().GetProperty(_CheckBoxComboBox.ValueMember);\n                PI.SetValue(ComboBoxItem, Checked, null);\n            }\n            base.OnCheckedChanged(e);\n            // Forces a refresh of the Text displayed in the main TextBox of the ComboBox,\n            // since that Text will most probably represent a concatenation of selected values.\n            // Also see DisplayMemberSingleItem on the CheckBoxComboBox for more information.\n            if (_CheckBoxComboBox.DataSource != null)\n            {\n                string OldDisplayMember = _CheckBoxComboBox.DisplayMember;\n                _CheckBoxComboBox.DisplayMember = null;\n                _CheckBoxComboBox.DisplayMember = OldDisplayMember;\n            }\n        }\n\n        #endregion\n\n        #region HELPER MEMBERS\n\n        internal void ApplyProperties(CheckBoxProperties properties)\n        {\n            this.Appearance = properties.Appearance;\n            this.AutoCheck = properties.AutoCheck;\n            this.AutoEllipsis = properties.AutoEllipsis;\n            this.AutoSize = properties.AutoSize;\n            this.CheckAlign = properties.CheckAlign;\n            this.FlatAppearance.BorderColor = properties.FlatAppearanceBorderColor;\n            this.FlatAppearance.BorderSize = properties.FlatAppearanceBorderSize;\n            this.FlatAppearance.CheckedBackColor = properties.FlatAppearanceCheckedBackColor;\n            this.FlatAppearance.MouseDownBackColor = properties.FlatAppearanceMouseDownBackColor;\n            this.FlatAppearance.MouseOverBackColor = properties.FlatAppearanceMouseOverBackColor;\n            this.FlatStyle = properties.FlatStyle;\n            this.ForeColor = properties.ForeColor;\n            this.RightToLeft = properties.RightToLeft;\n            this.TextAlign = properties.TextAlign;\n            this.ThreeState = properties.ThreeState;\n        }\n\n        #endregion\n\n        #region EVENT HANDLERS - ComboBoxItem (DataSource)\n\n        /// <summary>\n        /// Added this handler because the control doesn't seem \n        /// to initialize correctly until shown for the first\n        /// time, which also means the summary text value\n        /// of the combo is out of sync initially.\n        /// </summary>\n        private void CheckBoxComboBoxItem_PropertyChanged(object sender, PropertyChangedEventArgs e)\n        {\n            if (e.PropertyName == _CheckBoxComboBox.ValueMember)\n                Checked =\n                    (bool)_ComboBoxItem\n                        .GetType()\n                        .GetProperty(_CheckBoxComboBox.ValueMember)\n                        .GetValue(_ComboBoxItem, null);\n        }\n\n        #endregion\n    }\n\n    /// <summary>\n    /// A Typed List of the CheckBox items.\n    /// Simply a wrapper for the CheckBoxComboBox.Items. A list of CheckBoxComboBoxItem objects.\n    /// This List is automatically synchronised with the Items of the ComboBox and extended to\n    /// handle the additional boolean value. That said, do not Add or Remove using this List, \n    /// it will be lost or regenerated from the ComboBox.Items.\n    /// </summary>\n    [ToolboxItem(false)]\n    public class CheckBoxComboBoxItemList : List<CheckBoxComboBoxItem>\n    {\n        #region CONSTRUCTORS\n\n        public CheckBoxComboBoxItemList(CheckBoxComboBox checkBoxComboBox)\n        {\n            _CheckBoxComboBox = checkBoxComboBox;\n        }\n\n        #endregion\n\n        #region PRIVATE FIELDS\n\n        private CheckBoxComboBox _CheckBoxComboBox;\n\n        #endregion\n\n        #region EVENTS, This could be moved to the list control if needed\n\n        public event EventHandler CheckBoxCheckedChanged;\n\n        protected void OnCheckBoxCheckedChanged(object sender, EventArgs e)\n        {\n            EventHandler handler = CheckBoxCheckedChanged;\n            if (handler != null)\n                handler(sender, e);\n        }\n        private void item_CheckedChanged(object sender, EventArgs e)\n        {\n            OnCheckBoxCheckedChanged(sender, e);\n        }\n\n        #endregion\n\n        #region LIST MEMBERS & OBSOLETE INDICATORS\n\n        [Obsolete(\"Do not add items to this list directly. Use the ComboBox items instead.\", false)]\n        public new void Add(CheckBoxComboBoxItem item)\n        {\n            item.CheckedChanged += new EventHandler(item_CheckedChanged);\n            base.Add(item);\n        }\n\n        public new void AddRange(IEnumerable<CheckBoxComboBoxItem> collection)\n        {\n            foreach (CheckBoxComboBoxItem Item in collection)\n                Item.CheckedChanged += new EventHandler(item_CheckedChanged);\n            base.AddRange(collection);\n        }\n\n        public new void Clear()\n        {\n            foreach (CheckBoxComboBoxItem Item in this)\n                Item.CheckedChanged -= item_CheckedChanged;\n            base.Clear();\n        }\n\n        [Obsolete(\"Do not remove items from this list directly. Use the ComboBox items instead.\", false)]\n        public new bool Remove(CheckBoxComboBoxItem item)\n        {\n            item.CheckedChanged -= item_CheckedChanged;\n            return base.Remove(item);\n        }\n\n        #endregion\n\n        #region DEFAULT PROPERTIES\n\n        /// <summary>\n        /// Returns the item with the specified displayName or Text.\n        /// </summary>\n        public CheckBoxComboBoxItem this[string displayName]\n        {\n            get\n            {\n                int StartIndex =\n                    // An invisible item exists in this scenario to help \n                    // with the Text displayed in the TextBox of the Combo\n                    _CheckBoxComboBox.DropDownStyle == ComboBoxStyle.DropDownList\n                    && _CheckBoxComboBox.DataSource == null\n                        ? 1 // Ubiklou : 2008-04-28 : Ignore first item. (http://www.codeproject.com/KB/combobox/extending_combobox.aspx?fid=476622&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2526813&fr=1#xx2526813xx)\n                        : 0;\n                for (int Index = StartIndex; Index <= Count - 1; Index++)\n                {\n                    CheckBoxComboBoxItem Item = this[Index];\n\n                    string Text;\n                    // The binding might not be active yet\n                    if (string.IsNullOrEmpty(Item.Text)\n                        // Ubiklou : 2008-04-28 : No databinding\n                        && Item.DataBindings != null\n                        && Item.DataBindings[\"Text\"] != null\n                        )\n                    {\n                        PropertyInfo PropertyInfo\n                            = Item.ComboBoxItem.GetType().GetProperty(\n                                Item.DataBindings[\"Text\"].BindingMemberInfo.BindingMember);\n                        Text = (string)PropertyInfo.GetValue(Item.ComboBoxItem, null);\n                    }\n                    else\n                        Text = Item.Text;\n                    if (Text.CompareTo(displayName) == 0)\n                        return Item;\n                }\n                throw new ArgumentOutOfRangeException(String.Format(\"\\\"{0}\\\" does not exist in this combo box.\", displayName));\n            }\n        }\n\n        #endregion\n    }\n\n    [TypeConverter(typeof(ExpandableObjectConverter))]\n    public class CheckBoxProperties\n    {\n        public CheckBoxProperties() { }\n\n        #region PRIVATE PROPERTIES\n\n        private Appearance _Appearance = Appearance.Normal;\n        private bool _AutoSize = false;\n        private bool _AutoCheck = true;\n        private bool _AutoEllipsis = false;\n        private ContentAlignment _CheckAlign = ContentAlignment.MiddleLeft;\n        private Color _FlatAppearanceBorderColor = Color.Empty;\n        private int _FlatAppearanceBorderSize = 1;\n        private Color _FlatAppearanceCheckedBackColor = Color.Empty;\n        private Color _FlatAppearanceMouseDownBackColor = Color.Empty;\n        private Color _FlatAppearanceMouseOverBackColor = Color.Empty;\n        private FlatStyle _FlatStyle = FlatStyle.Standard;\n        private Color _ForeColor = SystemColors.ControlText;\n        private RightToLeft _RightToLeft = RightToLeft.No;\n        private ContentAlignment _TextAlign = ContentAlignment.MiddleLeft;\n        private bool _ThreeState = false;\n\n        #endregion\n\n        #region PUBLIC PROPERTIES\n\n        [DefaultValue(Appearance.Normal)]\n        public Appearance Appearance\n        {\n            get { return _Appearance; }\n            set { _Appearance = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(true)]\n        public bool AutoCheck\n        {\n            get { return _AutoCheck; }\n            set { _AutoCheck = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(false)]\n        public bool AutoEllipsis\n        {\n            get { return _AutoEllipsis; }\n            set { _AutoEllipsis = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(false)]\n        public bool AutoSize\n        {\n            get { return _AutoSize; }\n            set { _AutoSize = true; OnPropertyChanged(); }\n        }\n        [DefaultValue(ContentAlignment.MiddleLeft)]\n        public ContentAlignment CheckAlign\n        {\n            get { return _CheckAlign; }\n            set { _CheckAlign = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(typeof(Color), \"\")]\n        public Color FlatAppearanceBorderColor\n        {\n            get { return _FlatAppearanceBorderColor; }\n            set { _FlatAppearanceBorderColor = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(1)]\n        public int FlatAppearanceBorderSize\n        {\n            get { return _FlatAppearanceBorderSize; }\n            set { _FlatAppearanceBorderSize = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(typeof(Color), \"\")]\n        public Color FlatAppearanceCheckedBackColor\n        {\n            get { return _FlatAppearanceCheckedBackColor; }\n            set { _FlatAppearanceCheckedBackColor = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(typeof(Color), \"\")]\n        public Color FlatAppearanceMouseDownBackColor\n        {\n            get { return _FlatAppearanceMouseDownBackColor; }\n            set { _FlatAppearanceMouseDownBackColor = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(typeof(Color), \"\")]\n        public Color FlatAppearanceMouseOverBackColor\n        {\n            get { return _FlatAppearanceMouseOverBackColor; }\n            set { _FlatAppearanceMouseOverBackColor = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(FlatStyle.Standard)]\n        public FlatStyle FlatStyle\n        {\n            get { return _FlatStyle; }\n            set { _FlatStyle = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(typeof(SystemColors), \"ControlText\")]\n        public Color ForeColor\n        {\n            get { return _ForeColor; }\n            set { _ForeColor = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(RightToLeft.No)]\n        public RightToLeft RightToLeft\n        {\n            get { return _RightToLeft; }\n            set { _RightToLeft = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(ContentAlignment.MiddleLeft)]\n        public ContentAlignment TextAlign\n        {\n            get { return _TextAlign; }\n            set { _TextAlign = value; OnPropertyChanged(); }\n        }\n        [DefaultValue(false)]\n        public bool ThreeState\n        {\n            get { return _ThreeState; }\n            set { _ThreeState = value; OnPropertyChanged(); }\n        }\n\n        #endregion\n\n        #region EVENTS AND EVENT CALLERS\n\n        /// <summary>\n        /// Called when any property changes.\n        /// </summary>\n        public event EventHandler PropertyChanged;\n\n        protected void OnPropertyChanged()\n        {\n            EventHandler handler = PropertyChanged;\n            if (handler != null)\n                handler(this, EventArgs.Empty);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "lib/CheckBoxComboBox/CheckBoxComboBox.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>9.0.20404</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{70A25201-8EA4-48F8-A4A6-ED13ADF8823C}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>CheckBoxComboBox</RootNamespace>\n    <AssemblyName>CheckBoxComboBox</AssemblyName>\n    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <FileUpgradeFlags>\n    </FileUpgradeFlags>\n    <UpgradeBackupLocation>\n    </UpgradeBackupLocation>\n    <OldToolsVersion>3.5</OldToolsVersion>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <Prefer32Bit>false</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup>\n    <SignAssembly>true</SignAssembly>\n  </PropertyGroup>\n  <PropertyGroup>\n    <AssemblyOriginatorKeyFile>test.snk</AssemblyOriginatorKeyFile>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml.Linq\">\n      <RequiredTargetFramework>3.5</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"CheckBoxComboBox.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"CheckBoxComboBox.Designer.cs\">\n      <DependentUpon>CheckBoxComboBox.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"GripBounds.cs\" />\n    <Compile Include=\"NativeMethods.cs\" />\n    <Compile Include=\"Selection Wrappers\\ListSelectionWrapper.cs\" />\n    <Compile Include=\"Selection Wrappers\\ObjectSelectionWrapper.cs\" />\n    <Compile Include=\"Popup.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"Popup.Designer.cs\">\n      <DependentUpon>Popup.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"PopupComboBox.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"PopupComboBox.Designer.cs\">\n      <DependentUpon>PopupComboBox.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"PopupComboBox.resx\">\n      <DependentUpon>PopupComboBox.cs</DependentUpon>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"test.snk\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildBinPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "lib/CheckBoxComboBox/GripBounds.cs",
    "content": "﻿using System;\nusing System.Drawing;\n\nnamespace PresentationControls\n{\n    /// <summary>\n    /// CodeProject.com \"Simple pop-up control\" \"http://www.codeproject.com/cs/miscctrl/simplepopup.asp\".\n    /// </summary>\n    internal struct GripBounds\n    {\n        private const int GripSize = 6;\n        private const int CornerGripSize = GripSize << 1;\n\n        public GripBounds(Rectangle clientRectangle)\n        {\n            this.clientRectangle = clientRectangle;\n        }\n\n        private Rectangle clientRectangle;\n        public Rectangle ClientRectangle\n        {\n            get { return clientRectangle; }\n            //set { clientRectangle = value; }\n        }\n\n        public Rectangle Bottom\n        {\n            get\n            {\n                Rectangle rect = ClientRectangle;\n                rect.Y = rect.Bottom - GripSize + 1;\n                rect.Height = GripSize;\n                return rect;\n            }\n        }\n\n        public Rectangle BottomRight\n        {\n            get\n            {\n                Rectangle rect = ClientRectangle;\n                rect.Y = rect.Bottom - CornerGripSize + 1;\n                rect.Height = CornerGripSize;\n                rect.X = rect.Width - CornerGripSize + 1;\n                rect.Width = CornerGripSize;\n                return rect;\n            }\n        }\n\n        public Rectangle Top\n        {\n            get\n            {\n                Rectangle rect = ClientRectangle;\n                rect.Height = GripSize;\n                return rect;\n            }\n        }\n\n        public Rectangle TopRight\n        {\n            get\n            {\n                Rectangle rect = ClientRectangle;\n                rect.Height = CornerGripSize;\n                rect.X = rect.Width - CornerGripSize + 1;\n                rect.Width = CornerGripSize;\n                return rect;\n            }\n        }\n\n        public Rectangle Left\n        {\n            get\n            {\n                Rectangle rect = ClientRectangle;\n                rect.Width = GripSize;\n                return rect;\n            }\n        }\n\n        public Rectangle BottomLeft\n        {\n            get\n            {\n                Rectangle rect = ClientRectangle;\n                rect.Width = CornerGripSize;\n                rect.Y = rect.Height - CornerGripSize + 1;\n                rect.Height = CornerGripSize;\n                return rect;\n            }\n        }\n\n        public Rectangle Right\n        {\n            get\n            {\n                Rectangle rect = ClientRectangle;\n                rect.X = rect.Right - GripSize + 1;\n                rect.Width = GripSize;\n                return rect;\n            }\n        }\n\n        public Rectangle TopLeft\n        {\n            get\n            {\n                Rectangle rect = ClientRectangle;\n                rect.Width = CornerGripSize;\n                rect.Height = CornerGripSize;\n                return rect;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "lib/CheckBoxComboBox/NativeMethods.cs",
    "content": "using System;\nusing System.Drawing;\nusing System.Runtime.InteropServices;\n\nnamespace PresentationControls\n{\n    /// <summary>\n    /// CodeProject.com \"Simple pop-up control\" \"http://www.codeproject.com/cs/miscctrl/simplepopup.asp\".\n    /// </summary>\n    internal static class NativeMethods\n    {\n        internal const int WM_NCHITTEST = 0x0084,\n                           WM_NCACTIVATE = 0x0086,\n                           WS_EX_NOACTIVATE = 0x08000000,\n                           HTTRANSPARENT = -1,\n                           HTLEFT = 10,\n                           HTRIGHT = 11,\n                           HTTOP = 12,\n                           HTTOPLEFT = 13,\n                           HTTOPRIGHT = 14,\n                           HTBOTTOM = 15,\n                           HTBOTTOMLEFT = 16,\n                           HTBOTTOMRIGHT = 17,\n                           WM_USER = 0x0400,\n                           WM_REFLECT = WM_USER + 0x1C00,\n                           WM_COMMAND = 0x0111,\n                           CBN_DROPDOWN = 7,\n                           WM_GETMINMAXINFO = 0x0024;\n\n        internal static int HIWORD(int n)\n        {\n            return (n >> 16) & 0xffff;\n        }\n\n        internal static int HIWORD(IntPtr n)\n        {\n            return HIWORD(unchecked((int)(long)n));\n        }\n\n        internal static int LOWORD(int n)\n        {\n            return n & 0xffff;\n        }\n\n        internal static int LOWORD(IntPtr n)\n        {\n            return LOWORD(unchecked((int)(long)n));\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        internal struct MINMAXINFO\n        {\n            public Point reserved;\n            public Size maxSize;\n            public Point maxPosition;\n            public Size minTrackSize;\n            public Size maxTrackSize;\n        }\n    }\n}\n"
  },
  {
    "path": "lib/CheckBoxComboBox/Popup.Designer.cs",
    "content": "﻿namespace PresentationControls\n{\n    partial class Popup\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (components != null)\n                {\n                    components.Dispose();\n                }\n                if (content != null)\n                {\n                    System.Windows.Forms.Control _content = content;\n                    content = null;\n                    _content.Dispose();\n                }\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            components = new System.ComponentModel.Container();\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "lib/CheckBoxComboBox/Popup.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Security.Permissions;\nusing System.Runtime.InteropServices;\nusing VS = System.Windows.Forms.VisualStyles;\n\n/*\n<li>Base class for custom tooltips.</li>\n<li>Office-2007-like tooltip class.</li>\n*/\nnamespace PresentationControls\n{\n    /// <summary>\n    /// CodeProject.com \"Simple pop-up control\" \"http://www.codeproject.com/cs/miscctrl/simplepopup.asp\".\n    /// Represents a pop-up window.\n    /// </summary>\n    [CLSCompliant(true), ToolboxItem(false)]\n    public partial class Popup : ToolStripDropDown\n    {\n        #region \" Fields & Properties \"\n\n        private Control content;\n        /// <summary>\n        /// Gets the content of the pop-up.\n        /// </summary>\n        public Control Content\n        {\n            get { return content; }\n        }\n\n        private bool fade;\n        /// <summary>\n        /// Gets a value indicating whether the <see cref=\"PopupControl.Popup\"/> uses the fade effect.\n        /// </summary>\n        /// <value><c>true</c> if pop-up uses the fade effect; otherwise, <c>false</c>.</value>\n        /// <remarks>To use the fade effect, the FocusOnOpen property also has to be set to <c>true</c>.</remarks>\n        public bool UseFadeEffect\n        {\n            get { return fade; }\n            set\n            {\n                if (fade == value) return;\n                fade = value;\n            }\n        }\n\n        private bool focusOnOpen = true;\n        /// <summary>\n        /// Gets or sets a value indicating whether to focus the content after the pop-up has been opened.\n        /// </summary>\n        /// <value><c>true</c> if the content should be focused after the pop-up has been opened; otherwise, <c>false</c>.</value>\n        /// <remarks>If the FocusOnOpen property is set to <c>false</c>, then pop-up cannot use the fade effect.</remarks>\n        public bool FocusOnOpen\n        {\n            get { return focusOnOpen; }\n            set { focusOnOpen = value; }\n        }\n\n        private bool acceptAlt = true;\n        /// <summary>\n        /// Gets or sets a value indicating whether presing the alt key should close the pop-up.\n        /// </summary>\n        /// <value><c>true</c> if presing the alt key does not close the pop-up; otherwise, <c>false</c>.</value>\n        public bool AcceptAlt\n        {\n            get { return acceptAlt; }\n            set { acceptAlt = value; }\n        }\n\n        private Popup ownerPopup;\n        private Popup childPopup;\n\n        private bool _resizable;\n        private bool resizable;\n        /// <summary>\n        /// Gets or sets a value indicating whether this <see cref=\"PopupControl.Popup\" /> is resizable.\n        /// </summary>\n        /// <value><c>true</c> if resizable; otherwise, <c>false</c>.</value>\n        public bool Resizable\n        {\n            get { return resizable && _resizable; }\n            set { resizable = value; }\n        }\n\n        private ToolStripControlHost host;\n\n        private Size minSize;\n        /// <summary>\n        /// Gets or sets the size that is the lower limit that <see cref=\"M:System.Windows.Forms.Control.GetPreferredSize(System.Drawing.Size)\" /> can specify.\n        /// </summary>\n        /// <returns>An ordered pair of type <see cref=\"T:System.Drawing.Size\" /> representing the width and height of a rectangle.</returns>\n        public new Size MinimumSize\n        {\n            get { return minSize; }\n            set { minSize = value; }\n        }\n\n        private Size maxSize;\n        /// <summary>\n        /// Gets or sets the size that is the upper limit that <see cref=\"M:System.Windows.Forms.Control.GetPreferredSize(System.Drawing.Size)\" /> can specify.\n        /// </summary>\n        /// <returns>An ordered pair of type <see cref=\"T:System.Drawing.Size\" /> representing the width and height of a rectangle.</returns>\n        public new Size MaximumSize\n        {\n            get { return maxSize; }\n            set { maxSize = value; }\n        }\n\n        /// <summary>\n        /// Gets parameters of a new window.\n        /// </summary>\n        /// <returns>An object of type <see cref=\"T:System.Windows.Forms.CreateParams\" /> used when creating a new window.</returns>\n        protected override CreateParams CreateParams\n        {\n            [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]\n            get\n            {\n                CreateParams cp = base.CreateParams;\n                cp.ExStyle |= NativeMethods.WS_EX_NOACTIVATE;\n                return cp;\n            }\n        }\n\n        #endregion\n\n        #region \" Constructors \"\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"PopupControl.Popup\"/> class.\n        /// </summary>\n        /// <param name=\"content\">The content of the pop-up.</param>\n        /// <remarks>\n        /// Pop-up will be disposed immediately after disposion of the content control.\n        /// </remarks>\n        /// <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"content\" /> is <code>null</code>.</exception>\n        public Popup(Control content)\n        {\n            if (content == null)\n            {\n                throw new ArgumentNullException(\"content\");\n            }\n            this.content = content;\n            this.fade = SystemInformation.IsMenuAnimationEnabled && SystemInformation.IsMenuFadeEnabled;\n            this._resizable = true;\n            InitializeComponent();\n            AutoSize = false;\n            DoubleBuffered = true;\n            ResizeRedraw = true;\n            host = new ToolStripControlHost(content);\n            Padding = Margin = host.Padding = host.Margin = Padding.Empty;\n            MinimumSize = content.MinimumSize;\n            content.MinimumSize = content.Size;\n            MaximumSize = content.MaximumSize;\n            content.MaximumSize = content.Size;\n            Size = content.Size;\n            content.Location = Point.Empty;\n            Items.Add(host);\n            content.Disposed += delegate (object sender, EventArgs e)\n            {\n                content = null;\n                Dispose(true);\n            };\n            content.RegionChanged += delegate (object sender, EventArgs e)\n            {\n                UpdateRegion();\n            };\n            content.Paint += delegate (object sender, PaintEventArgs e)\n            {\n                PaintSizeGrip(e);\n            };\n            UpdateRegion();\n        }\n\n        #endregion\n\n        #region \" Methods \"\n\n        /// <summary>\n        /// Processes a dialog box key.\n        /// </summary>\n        /// <param name=\"keyData\">One of the <see cref=\"T:System.Windows.Forms.Keys\" /> values that represents the key to process.</param>\n        /// <returns>\n        /// true if the key was processed by the control; otherwise, false.\n        /// </returns>\n        protected override bool ProcessDialogKey(Keys keyData)\n        {\n            if (acceptAlt && ((keyData & Keys.Alt) == Keys.Alt)) return false;\n            return base.ProcessDialogKey(keyData);\n        }\n\n        /// <summary>\n        /// Updates the pop-up region.\n        /// </summary>\n        protected void UpdateRegion()\n        {\n            if (this.Region != null)\n            {\n                this.Region.Dispose();\n                this.Region = null;\n            }\n            if (content.Region != null)\n            {\n                this.Region = content.Region.Clone();\n            }\n        }\n\n        /// <summary>\n        /// Shows pop-up window below the specified control.\n        /// </summary>\n        /// <param name=\"control\">The control below which the pop-up will be shown.</param>\n        /// <remarks>\n        /// When there is no space below the specified control, the pop-up control is shown above it.\n        /// </remarks>\n        /// <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"control\"/> is <code>null</code>.</exception>\n        public void Show(Control control)\n        {\n            if (control == null)\n            {\n                throw new ArgumentNullException(\"control\");\n            }\n            SetOwnerItem(control);\n            Show(control, control.ClientRectangle);\n        }\n\n        /// <summary>\n        /// Shows pop-up window below the specified area of specified control.\n        /// </summary>\n        /// <param name=\"control\">The control used to compute screen location of specified area.</param>\n        /// <param name=\"area\">The area of control below which the pop-up will be shown.</param>\n        /// <remarks>\n        /// When there is no space below specified area, the pop-up control is shown above it.\n        /// </remarks>\n        /// <exception cref=\"T:System.ArgumentNullException\"><paramref name=\"control\"/> is <code>null</code>.</exception>\n        public void Show(Control control, Rectangle area)\n        {\n            if (control == null)\n            {\n                throw new ArgumentNullException(\"control\");\n            }\n            SetOwnerItem(control);\n            resizableTop = resizableRight = false;\n            Point location = control.PointToScreen(new Point(area.Left, area.Top + area.Height));\n            Rectangle screen = Screen.FromControl(control).WorkingArea;\n            if (location.X + Size.Width > (screen.Left + screen.Width))\n            {\n                resizableRight = true;\n                location.X = (screen.Left + screen.Width) - Size.Width;\n            }\n            if (location.Y + Size.Height > (screen.Top + screen.Height))\n            {\n                resizableTop = true;\n                location.Y -= Size.Height + area.Height;\n            }\n            location = control.PointToClient(location);\n            Show(control, location, ToolStripDropDownDirection.BelowRight);\n        }\n\n        private const int frames = 1;\n        private const int totalduration = 0; // ML : 2007-11-05 : was 100 but caused a flicker.\n        private const int frameduration = totalduration / frames;\n        /// <summary>\n        /// Adjusts the size of the owner <see cref=\"T:System.Windows.Forms.ToolStrip\" /> to accommodate the <see cref=\"T:System.Windows.Forms.ToolStripDropDown\" /> if the owner <see cref=\"T:System.Windows.Forms.ToolStrip\" /> is currently displayed, or clears and resets active <see cref=\"T:System.Windows.Forms.ToolStripDropDown\" /> child controls of the <see cref=\"T:System.Windows.Forms.ToolStrip\" /> if the <see cref=\"T:System.Windows.Forms.ToolStrip\" /> is not currently displayed.\n        /// </summary>\n        /// <param name=\"visible\">true if the owner <see cref=\"T:System.Windows.Forms.ToolStrip\" /> is currently displayed; otherwise, false.</param>\n        protected override void SetVisibleCore(bool visible)\n        {\n            double opacity = Opacity;\n            if (visible && fade && focusOnOpen) Opacity = 0;\n            base.SetVisibleCore(visible);\n            if (!visible || !fade || !focusOnOpen) return;\n            for (int i = 1; i <= frames; i++)\n            {\n                if (i > 1)\n                {\n                    System.Threading.Thread.Sleep(frameduration);\n                }\n                Opacity = opacity * (double)i / (double)frames;\n            }\n            Opacity = opacity;\n        }\n\n        private bool resizableTop;\n        private bool resizableRight;\n\n        private void SetOwnerItem(Control control)\n        {\n            if (control == null)\n            {\n                return;\n            }\n            if (control is Popup)\n            {\n                Popup popupControl = control as Popup;\n                ownerPopup = popupControl;\n                ownerPopup.childPopup = this;\n                OwnerItem = popupControl.Items[0];\n                return;\n            }\n            if (control.Parent != null)\n            {\n                SetOwnerItem(control.Parent);\n            }\n        }\n\n        /// <summary>\n        /// Raises the <see cref=\"E:System.Windows.Forms.Control.SizeChanged\" /> event.\n        /// </summary>\n        /// <param name=\"e\">An <see cref=\"T:System.EventArgs\" /> that contains the event data.</param>\n        protected override void OnSizeChanged(EventArgs e)\n        {\n            content.MinimumSize = Size;\n            content.MaximumSize = Size;\n            content.Size = Size;\n            content.Location = Point.Empty;\n            base.OnSizeChanged(e);\n        }\n\n        /// <summary>\n        /// Raises the <see cref=\"E:System.Windows.Forms.ToolStripDropDown.Opening\" /> event.\n        /// </summary>\n        /// <param name=\"e\">A <see cref=\"T:System.ComponentModel.CancelEventArgs\" /> that contains the event data.</param>\n        protected override void OnOpening(CancelEventArgs e)\n        {\n            if (content.IsDisposed || content.Disposing)\n            {\n                e.Cancel = true;\n                return;\n            }\n            UpdateRegion();\n            base.OnOpening(e);\n        }\n\n        /// <summary>\n        /// Raises the <see cref=\"E:System.Windows.Forms.ToolStripDropDown.Opened\" /> event.\n        /// </summary>\n        /// <param name=\"e\">An <see cref=\"T:System.EventArgs\" /> that contains the event data.</param>\n        protected override void OnOpened(EventArgs e)\n        {\n            if (ownerPopup != null)\n            {\n                ownerPopup._resizable = false;\n            }\n            if (focusOnOpen)\n            {\n                content.Focus();\n            }\n            base.OnOpened(e);\n        }\n\n        protected override void OnClosed(ToolStripDropDownClosedEventArgs e)\n        {\n            if (ownerPopup != null)\n            {\n                ownerPopup._resizable = true;\n            }\n            base.OnClosed(e);\n        }\n\n        public DateTime LastClosedTimeStamp = DateTime.Now;\n\n        protected override void OnVisibleChanged(EventArgs e)\n        {\n            if (Visible == false)\n                LastClosedTimeStamp = DateTime.Now;\n            base.OnVisibleChanged(e);\n        }\n\n        #endregion\n\n        #region \" Resizing Support \"\n\n        /// <summary>\n        /// Processes Windows messages.\n        /// </summary>\n        /// <param name=\"m\">The Windows <see cref=\"T:System.Windows.Forms.Message\" /> to process.</param>\n        [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]\n        protected override void WndProc(ref Message m)\n        {\n            if (InternalProcessResizing(ref m, false))\n            {\n                return;\n            }\n            base.WndProc(ref m);\n        }\n\n        /// <summary>\n        /// Processes the resizing messages.\n        /// </summary>\n        /// <param name=\"m\">The message.</param>\n        /// <returns>true, if the WndProc method from the base class shouldn't be invoked.</returns>\n        [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]\n        public bool ProcessResizing(ref Message m)\n        {\n            return InternalProcessResizing(ref m, true);\n        }\n\n        [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]\n        private bool InternalProcessResizing(ref Message m, bool contentControl)\n        {\n            if (m.Msg == NativeMethods.WM_NCACTIVATE && m.WParam != IntPtr.Zero && childPopup != null && childPopup.Visible)\n            {\n                childPopup.Hide();\n            }\n            if (!Resizable)\n            {\n                return false;\n            }\n            if (m.Msg == NativeMethods.WM_NCHITTEST)\n            {\n                return OnNcHitTest(ref m, contentControl);\n            }\n            else if (m.Msg == NativeMethods.WM_GETMINMAXINFO)\n            {\n                return OnGetMinMaxInfo(ref m);\n            }\n            return false;\n        }\n\n        [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]\n        private bool OnGetMinMaxInfo(ref Message m)\n        {\n            NativeMethods.MINMAXINFO minmax = (NativeMethods.MINMAXINFO)Marshal.PtrToStructure(m.LParam, typeof(NativeMethods.MINMAXINFO));\n            minmax.maxTrackSize = this.MaximumSize;\n            minmax.minTrackSize = this.MinimumSize;\n            Marshal.StructureToPtr(minmax, m.LParam, false);\n            return true;\n        }\n\n        private bool OnNcHitTest(ref Message m, bool contentControl)\n        {\n            int x = NativeMethods.LOWORD(m.LParam);\n            int y = NativeMethods.HIWORD(m.LParam);\n            Point clientLocation = PointToClient(new Point(x, y));\n\n            GripBounds gripBouns = new GripBounds(contentControl ? content.ClientRectangle : ClientRectangle);\n            IntPtr transparent = new IntPtr(NativeMethods.HTTRANSPARENT);\n\n            if (resizableTop)\n            {\n                if (resizableRight && gripBouns.TopLeft.Contains(clientLocation))\n                {\n                    m.Result = contentControl ? transparent : (IntPtr)NativeMethods.HTTOPLEFT;\n                    return true;\n                }\n                if (!resizableRight && gripBouns.TopRight.Contains(clientLocation))\n                {\n                    m.Result = contentControl ? transparent : (IntPtr)NativeMethods.HTTOPRIGHT;\n                    return true;\n                }\n                if (gripBouns.Top.Contains(clientLocation))\n                {\n                    m.Result = contentControl ? transparent : (IntPtr)NativeMethods.HTTOP;\n                    return true;\n                }\n            }\n            else\n            {\n                if (resizableRight && gripBouns.BottomLeft.Contains(clientLocation))\n                {\n                    m.Result = contentControl ? transparent : (IntPtr)NativeMethods.HTBOTTOMLEFT;\n                    return true;\n                }\n                if (!resizableRight && gripBouns.BottomRight.Contains(clientLocation))\n                {\n                    m.Result = contentControl ? transparent : (IntPtr)NativeMethods.HTBOTTOMRIGHT;\n                    return true;\n                }\n                if (gripBouns.Bottom.Contains(clientLocation))\n                {\n                    m.Result = contentControl ? transparent : (IntPtr)NativeMethods.HTBOTTOM;\n                    return true;\n                }\n            }\n            if (resizableRight && gripBouns.Left.Contains(clientLocation))\n            {\n                m.Result = contentControl ? transparent : (IntPtr)NativeMethods.HTLEFT;\n                return true;\n            }\n            if (!resizableRight && gripBouns.Right.Contains(clientLocation))\n            {\n                m.Result = contentControl ? transparent : (IntPtr)NativeMethods.HTRIGHT;\n                return true;\n            }\n            return false;\n        }\n\n        private VS.VisualStyleRenderer sizeGripRenderer;\n        /// <summary>\n        /// Paints the size grip.\n        /// </summary>\n        /// <param name=\"e\">The <see cref=\"System.Windows.Forms.PaintEventArgs\" /> instance containing the event data.</param>\n        public void PaintSizeGrip(PaintEventArgs e)\n        {\n            if (e == null || e.Graphics == null || !resizable)\n            {\n                return;\n            }\n            Size clientSize = content.ClientSize;\n            if (Application.RenderWithVisualStyles)\n            {\n                if (this.sizeGripRenderer == null)\n                {\n                    this.sizeGripRenderer = new VS.VisualStyleRenderer(VS.VisualStyleElement.Status.Gripper.Normal);\n                }\n                this.sizeGripRenderer.DrawBackground(e.Graphics, new Rectangle(clientSize.Width - 0x10, clientSize.Height - 0x10, 0x10, 0x10));\n            }\n            else\n            {\n                ControlPaint.DrawSizeGrip(e.Graphics, content.BackColor, clientSize.Width - 0x10, clientSize.Height - 0x10, 0x10, 0x10);\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "lib/CheckBoxComboBox/PopupComboBox.Designer.cs",
    "content": "﻿namespace PresentationControls\n{\n    partial class PopupComboBox\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing)\n            {\n                if (components != null)\n                {\n                    components.Dispose();\n                }\n                if (dropDown != null)\n                {\n                    dropDown.Dispose();\n                }\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.SuspendLayout();\n            // \n            // PopupComboBox\n            // \n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "lib/CheckBoxComboBox/PopupComboBox.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Security.Permissions;\n\nnamespace PresentationControls\n{\n    /// <summary>\n    /// CodeProject.com \"Simple pop-up control\" \"http://www.codeproject.com/cs/miscctrl/simplepopup.asp\".\n    /// Represents a Windows combo box control with a custom popup control attached.\n    /// </summary>\n    [ToolboxBitmap(typeof(System.Windows.Forms.ComboBox)), ToolboxItem(true), ToolboxItemFilter(\"System.Windows.Forms\"), Description(\"Displays an editable text box with a drop-down list of permitted values.\")]\n    public partial class PopupComboBox : ComboBox\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"PopupControl.PopupComboBox\" /> class.\n        /// </summary>\n        public PopupComboBox()\n        {\n            InitializeComponent();\n            base.DropDownHeight = base.DropDownWidth = 1;\n            base.IntegralHeight = false;\n        }\n\n        /// <summary>\n        /// The pop-up wrapper for the dropDownControl. \n        /// Made PROTECTED instead of PRIVATE so descendent classes can set its Resizable property.\n        /// Note however the pop-up properties must be set after the dropDownControl is assigned, since this \n        /// popup wrapper is recreated when the dropDownControl is assigned.\n        /// </summary>\n        protected Popup dropDown;\n\n        private Control dropDownControl;\n        /// <summary>\n        /// Gets or sets the drop down control.\n        /// </summary>\n        /// <value>The drop down control.</value>\n        public Control DropDownControl\n        {\n            get\n            {\n                return dropDownControl;\n            }\n            set\n            {\n                if (dropDownControl == value)\n                    return;\n                dropDownControl = value;\n                dropDown = new Popup(value);\n            }\n        }\n\n        /// <summary>\n        /// Shows the drop down.\n        /// </summary>\n        public void ShowDropDown()\n        {\n            if (dropDown != null)\n            {\n                dropDown.Show(this);\n            }\n        }\n\n        /// <summary>\n        /// Hides the drop down.\n        /// </summary>\n        public void HideDropDown()\n        {\n            if (dropDown != null)\n            {\n                dropDown.Hide();\n            }\n        }\n\n        /// <summary>\n        /// Processes Windows messages.\n        /// </summary>\n        /// <param name=\"m\">The Windows <see cref=\"T:System.Windows.Forms.Message\" /> to process.</param>\n        [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]\n        protected override void WndProc(ref Message m)\n        {\n            if (m.Msg == (NativeMethods.WM_REFLECT + NativeMethods.WM_COMMAND))\n            {\n                if (NativeMethods.HIWORD(m.WParam) == NativeMethods.CBN_DROPDOWN)\n                {\n                    // Blocks a redisplay when the user closes the control by clicking \n                    // on the combobox.\n                    TimeSpan TimeSpan = DateTime.Now.Subtract(dropDown.LastClosedTimeStamp);\n                    if (TimeSpan.TotalMilliseconds > 500)\n                        ShowDropDown();\n                    return;\n                }\n            }\n            base.WndProc(ref m);\n        }\n\n        #region \" Unused Properties \"\n\n        /// <summary>This property is not relevant for this class.</summary>\n        /// <returns>This property is not relevant for this class.</returns>\n        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]\n        public new int DropDownWidth\n        {\n            get { return base.DropDownWidth; }\n            set { base.DropDownWidth = value; }\n        }\n\n        /// <summary>This property is not relevant for this class.</summary>\n        /// <returns>This property is not relevant for this class.</returns>\n        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]\n        public new int DropDownHeight\n        {\n            get { return base.DropDownHeight; }\n            set\n            {\n                dropDown.Height = value;\n                base.DropDownHeight = value;\n            }\n        }\n\n        /// <summary>This property is not relevant for this class.</summary>\n        /// <returns>This property is not relevant for this class.</returns>\n        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]\n        public new bool IntegralHeight\n        {\n            get { return base.IntegralHeight; }\n            set { base.IntegralHeight = value; }\n        }\n\n        /// <summary>This property is not relevant for this class.</summary>\n        /// <returns>This property is not relevant for this class.</returns>\n        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]\n        public new ObjectCollection Items\n        {\n            get { return base.Items; }\n        }\n\n        /// <summary>This property is not relevant for this class.</summary>\n        /// <returns>This property is not relevant for this class.</returns>\n        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]\n        public new int ItemHeight\n        {\n            get { return base.ItemHeight; }\n            set { base.ItemHeight = value; }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "lib/CheckBoxComboBox/PopupComboBox.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"$this.TrayLargeIcon\" type=\"System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\">\n    <value>False</value>\n  </metadata>\n</root>"
  },
  {
    "path": "lib/CheckBoxComboBox/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"CheckBoxComboBox\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"IT\")]\n[assembly: AssemblyProduct(\"CheckBoxComboBox\")]\n[assembly: AssemblyCopyright(\"Copyright © IT 2007\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"0b11e2be-4211-4d2a-9102-6847a56d6fd8\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "lib/CheckBoxComboBox/Selection Wrappers/ListSelectionWrapper.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Reflection;\nusing System.ComponentModel;\n\nnamespace PresentationControls\n{\n    /// <summary>\n    /// Maintains an additional \"Selected\" & \"Count\" value for each item in a List.\n    /// Useful in the CheckBoxComboBox. It holds a reference to the List[Index] Item and \n    /// whether it is selected or not.\n    /// It also caters for a Count, if needed.\n    /// </summary>\n    /// <typeparam name=\"TSelectionWrapper\"></typeparam>\n    public class ListSelectionWrapper<T> : List<ObjectSelectionWrapper<T>>\n    {\n        #region CONSTRUCTOR\n\n        /// <summary>\n        /// No property on the object is specified for display purposes, so simple ToString() operation \n        /// will be performed. And no Counts will be displayed\n        /// </summary>\n        public ListSelectionWrapper(IEnumerable source) : this(source, false) { }\n        /// <summary>\n        /// No property on the object is specified for display purposes, so simple ToString() operation \n        /// will be performed.\n        /// </summary>\n        public ListSelectionWrapper(IEnumerable source, bool showCounts)\n            : base()\n        {\n            _Source = source;\n            _ShowCounts = showCounts;\n            if (_Source is IBindingList)\n                ((IBindingList)_Source).ListChanged += new ListChangedEventHandler(ListSelectionWrapper_ListChanged);\n            Populate();\n        }\n        /// <summary>\n        /// A Display \"Name\" property is specified. ToString() will not be performed on items.\n        /// This is specifically useful on DataTable implementations, or where PropertyDescriptors are used to read the values.\n        /// If a PropertyDescriptor is not found, a Property will be used.\n        /// </summary>\n        public ListSelectionWrapper(IEnumerable source, string usePropertyAsDisplayName) : this(source, false, usePropertyAsDisplayName) { }\n        /// <summary>\n        /// A Display \"Name\" property is specified. ToString() will not be performed on items.\n        /// This is specifically useful on DataTable implementations, or where PropertyDescriptors are used to read the values.\n        /// If a PropertyDescriptor is not found, a Property will be used.\n        /// </summary>\n        public ListSelectionWrapper(IEnumerable source, bool showCounts, string usePropertyAsDisplayName)\n            : this(source, showCounts)\n        {\n            _DisplayNameProperty = usePropertyAsDisplayName;\n        }\n\n        #endregion\n\n        #region PRIVATE PROPERTIES\n\n        /// <summary>\n        /// Is a Count indicator used.\n        /// </summary>\n        private bool _ShowCounts;\n        /// <summary>\n        /// The original List of values wrapped. A \"Selected\" and possibly \"Count\" functionality is added.\n        /// </summary>\n        private IEnumerable _Source;\n        /// <summary>\n        /// Used to indicate NOT to use ToString(), but read this property instead as a display value.\n        /// </summary>\n        private string _DisplayNameProperty = null;\n\n        #endregion\n\n        #region PUBLIC PROPERTIES\n\n        /// <summary>\n        /// When specified, indicates that ToString() should not be performed on the items. \n        /// This property will be read instead. \n        /// This is specifically useful on DataTable implementations, where PropertyDescriptors are used to read the values.\n        /// </summary>\n        public string DisplayNameProperty\n        {\n            get { return _DisplayNameProperty; }\n            set { _DisplayNameProperty = value; }\n        }\n        /// <summary>\n        /// Builds a concatenation list of selected items in the list.\n        /// </summary>\n        public string SelectedNames\n        {\n            get\n            {\n                string Text = \"\";\n                foreach (ObjectSelectionWrapper<T> Item in this)\n                    if (Item.Selected)\n                        Text += (\n                            string.IsNullOrEmpty(Text)\n                            ? String.Format(\"\\\"{0}\\\"\", Item.Name)\n                            : String.Format(\" & \\\"{0}\\\"\", Item.Name));\n                return Text;\n            }\n        }\n        /// <summary>\n        /// Indicates whether the Item display value (Name) should include a count.\n        /// </summary>\n        public bool ShowCounts\n        {\n            get { return _ShowCounts; }\n            set { _ShowCounts = value; }\n        }\n\n        #endregion\n\n        #region HELPER MEMBERS\n\n        /// <summary>\n        /// Reset all counts to zero.\n        /// </summary>\n        public void ClearCounts()\n        {\n            foreach (ObjectSelectionWrapper<T> Item in this)\n                Item.Count = 0;\n        }\n        /// <summary>\n        /// Creates a ObjectSelectionWrapper item.\n        /// Note that the constructor signature of sub classes classes are important.\n        /// </summary>\n        /// <param name=\"Object\"></param>\n        /// <returns></returns>\n        private ObjectSelectionWrapper<T> CreateSelectionWrapper(IEnumerator Object)\n        {\n            Type[] Types = new Type[] { typeof(T), this.GetType() };\n            ConstructorInfo CI = typeof(ObjectSelectionWrapper<T>).GetConstructor(Types);\n            if (CI == null)\n                throw new Exception(String.Format(\n                              \"The selection wrapper class {0} must have a constructor with ({1} Item, {2} Container) parameters.\",\n                              typeof(ObjectSelectionWrapper<T>),\n                              typeof(T),\n                              this.GetType()));\n            object[] parameters = new object[] { Object.Current, this };\n            object result = CI.Invoke(parameters);\n            return (ObjectSelectionWrapper<T>)result;\n        }\n\n        public ObjectSelectionWrapper<T> FindObjectWithItem(T Object)\n        {\n            return Find(new Predicate<ObjectSelectionWrapper<T>>(\n                            delegate (ObjectSelectionWrapper<T> target)\n                            {\n                                return target.Item.Equals(Object);\n                            }));\n        }\n\n        /*\n        public TSelectionWrapper FindObjectWithKey(object key)\n        {\n            return FindObjectWithKey(new object[] { key });\n        }\n\n        public TSelectionWrapper FindObjectWithKey(object[] keys)\n        {\n            return Find(new Predicate<TSelectionWrapper>(\n                            delegate(TSelectionWrapper target)\n                            {\n                                return\n                                    ReflectionHelper.CompareKeyValues(\n                                        ReflectionHelper.GetKeyValuesFromObject(target.Item, target.Item.TableInfo),\n                                        keys);\n                            }));\n        }\n\n        public object[] GetArrayOfSelectedKeys()\n        {\n            List<object> List = new List<object>();\n            foreach (TSelectionWrapper Item in this)\n                if (Item.Selected)\n                {\n                    if (Item.Item.TableInfo.KeyProperties.Length == 1)\n                        List.Add(ReflectionHelper.GetKeyValueFromObject(Item.Item, Item.Item.TableInfo));\n                    else\n                        List.Add(ReflectionHelper.GetKeyValuesFromObject(Item.Item, Item.Item.TableInfo));\n                }\n            return List.ToArray();\n        }\n\n        public T[] GetArrayOfSelectedKeys<T>()\n        {\n            List<T> List = new List<T>();\n            foreach (TSelectionWrapper Item in this)\n                if (Item.Selected)\n                {\n                    if (Item.Item.TableInfo.KeyProperties.Length == 1)\n                        List.Add((T)ReflectionHelper.GetKeyValueFromObject(Item.Item, Item.Item.TableInfo));\n                    else\n                        throw new LibraryException(\"This generator only supports single value keys.\");\n                    // List.Add((T)ReflectionHelper.GetKeyValuesFromObject(Item.Item, Item.Item.TableInfo));\n                }\n            return List.ToArray();\n        }\n        */\n        private void Populate()\n        {\n            Clear();\n            /*\n            for(int Index = 0; Index <= _Source.Count -1; Index++)\n                Add(CreateSelectionWrapper(_Source[Index]));\n             */\n            IEnumerator Enumerator = _Source.GetEnumerator();\n            if (Enumerator != null)\n                while (Enumerator.MoveNext())\n                    Add(CreateSelectionWrapper(Enumerator));\n        }\n\n        #endregion\n\n        #region EVENT HANDLERS\n\n        private void ListSelectionWrapper_ListChanged(object sender, ListChangedEventArgs e)\n        {\n            switch (e.ListChangedType)\n            {\n                case ListChangedType.ItemAdded:\n                    Add(CreateSelectionWrapper((IEnumerator)((IBindingList)_Source)[e.NewIndex]));\n                    break;\n                case ListChangedType.ItemDeleted:\n                    Remove(FindObjectWithItem((T)((IBindingList)_Source)[e.OldIndex]));\n                    break;\n                case ListChangedType.Reset:\n                    Populate();\n                    break;\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "lib/CheckBoxComboBox/Selection Wrappers/ObjectSelectionWrapper.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.ComponentModel;\nusing System.Reflection;\nusing System.Data;\n\nnamespace PresentationControls\n{\n    /// <summary>\n    /// Used together with the ListSelectionWrapper in order to wrap data sources for a CheckBoxComboBox.\n    /// It helps to ensure you don't add an extra \"Selected\" property to a class that don't really need or want that information.\n    /// </summary>\n    public class ObjectSelectionWrapper<T> : INotifyPropertyChanged\n    {\n        public ObjectSelectionWrapper(T item, ListSelectionWrapper<T> container)\n            : base()\n        {\n            _Container = container;\n            _Item = item;\n        }\n\n\n        #region PRIVATE PROPERTIES\n\n        /// <summary>\n        /// Used as a count indicator for the item. Not necessarily displayed.\n        /// </summary>\n        private int _Count = 0;\n        /// <summary>\n        /// Is this item selected.\n        /// </summary>\n        private bool _Selected = false;\n        /// <summary>\n        /// A reference to the wrapped item.\n        /// </summary>\n        private T _Item;\n        /// <summary>\n        /// The containing list for these selections.\n        /// </summary>\n        private ListSelectionWrapper<T> _Container;\n\n        #endregion\n\n        #region PUBLIC PROPERTIES\n\n        /// <summary>\n        /// An indicator of how many items with the specified status is available for the current filter level.\n        /// Thaught this would make the app a bit more user-friendly and help not to miss items in Statusses\n        /// that are not often used.\n        /// </summary>\n        public int Count\n        {\n            get { return _Count; }\n            set { _Count = value; }\n        }\n        /// <summary>\n        /// A reference to the item wrapped.\n        /// </summary>\n        public T Item\n        {\n            get { return _Item; }\n            set { _Item = value; }\n        }\n        /// <summary>\n        /// The item display value. If ShowCount is true, it displays the \"Name [Count]\".\n        /// </summary>\n        public string Name\n        {\n            get\n            {\n                string Name = null;\n                if (string.IsNullOrEmpty(_Container.DisplayNameProperty))\n                    Name = Item.ToString();\n                else if (Item is DataRow) // A specific implementation for DataRow\n                    Name = ((DataRow)((Object)Item))[_Container.DisplayNameProperty].ToString();\n                else\n                {\n                    PropertyDescriptorCollection PDs = TypeDescriptor.GetProperties(Item);\n                    foreach (PropertyDescriptor PD in PDs)\n                        if (PD.Name.CompareTo(_Container.DisplayNameProperty) == 0)\n                        {\n                            Name = (string)PD.GetValue(Item).ToString();\n                            break;\n                        }\n                    if (string.IsNullOrEmpty(Name))\n                    {\n                        PropertyInfo PI = Item.GetType().GetProperty(_Container.DisplayNameProperty);\n                        if (PI == null)\n                            throw new Exception(String.Format(\n                                      \"Property {0} cannot be found on {1}.\",\n                                      _Container.DisplayNameProperty,\n                                      Item.GetType()));\n                        Name = PI.GetValue(Item, null).ToString();\n                    }\n                }\n                return _Container.ShowCounts ? String.Format(\"{0} [{1}]\", Name, Count) : Name;\n            }\n        }\n        /// <summary>\n        /// The textbox display value. The names concatenated.\n        /// </summary>\n        public string NameConcatenated\n        {\n            get { return _Container.SelectedNames; }\n        }\n        /// <summary>\n        /// Indicates whether the item is selected.\n        /// </summary>\n        public bool Selected\n        {\n            get { return _Selected; }\n            set\n            {\n                if (_Selected != value)\n                {\n                    _Selected = value;\n                    OnPropertyChanged(\"Selected\");\n                    OnPropertyChanged(\"NameConcatenated\");\n                }\n            }\n        }\n\n        #endregion\n\n        #region INotifyPropertyChanged\n\n        public event PropertyChangedEventHandler PropertyChanged;\n\n        protected virtual void OnPropertyChanged(string propertyName)\n        {\n            PropertyChangedEventHandler handler = PropertyChanged;\n            if (handler != null)\n                handler(this, new PropertyChangedEventArgs(propertyName));\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "lib/SharedAssemblyInfo.cs",
    "content": "// Copyright (c) Lex Li. All rights reserved.\n// \n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nusing System.Reflection;\n\n// The assembly version has following format :\n//\n// Major.Minor.Build.Revision\n//\n// You can specify all the values or you can use the default the Revision and\n// Build Numbers by using the '*' as shown below:\n\n[assembly: AssemblyVersion(\"11.0.000701.02\")]\n#if (!CF)\n[assembly: AssemblyFileVersion(\"11.0.000701.02\")]\n#endif\n"
  },
  {
    "path": "release.ps1",
    "content": "[CmdletBinding()]\nparam(\n    [Parameter(Position = 0)]\n    [string] $Configuration = 'Release'\n)\n\nImport-Module PowerShellGet\n\n$msBuild = \"msbuild\"\ntry\n{\n    & $msBuild /version\n    Write-Host \"Likely on Linux/macOS.\"\n}\ncatch\n{\n    Write-Host \"MSBuild doesn't exist. Use VSSetup instead.\"\n\n    Install-Module VSSetup -Scope CurrentUser -Force\n    $instance = Get-VSSetupInstance -All -Prerelease | Select-VSSetupInstance -Product * -Latest\n    $installDir = $instance.installationPath\n    $msBuild = $installDir + '\\MSBuild\\Current\\Bin\\MSBuild.exe'\n    if (![System.IO.File]::Exists($msBuild))\n    {\n        Write-Host \"MSBuild 16 doesn't exist.\"\n        $msBuild = $installDir + '\\MSBuild\\15.0\\Bin\\MSBuild.exe'\n        if (![System.IO.File]::Exists($msBuild))\n        {\n            Write-Host \"MSBuild 15 doesn't exist. Exit.\"\n            exit 1\n        }\n        else\n        {\n            Write-Host \"Likely on Windows with VS2017.\"\n        }\n    }\n    else\n    {\n        Write-Host \"Likely on Windows with VS2019.\"\n    }\n}\n\nWrite-Host \"MSBuild found. Compile the projects.\"\n\n& $msBuild JexusManager.sln /p:Configuration=$Configuration /t:restore\n& $msBuild JexusManager.sln /p:Configuration=$Configuration /t:clean\n\nRemove-Item .\\bin -Recurse\nNew-Item .\\bin -ItemType Directory > $null\nSet-Location .\\JexusManager\ndotnet publish -c $Configuration -r win-x64 --self-contained -o ..\\bin\\x64\ndotnet publish -c $Configuration -r win-x86 --self-contained -o ..\\bin\\x86\ndotnet publish -c $Configuration -r win-arm64 --self-contained -o ..\\bin\\arm64\nCopy-Item .\\ThirdPartyNotices.txt ..\\bin\nSet-Location ..\n\nSet-Location .\\CertificateInstaller\ndotnet publish -c $Configuration -r win-x64 --self-contained -o ..\\bin\\x64\ndotnet publish -c $Configuration -r win-x86 --self-contained -o ..\\bin\\x86\ndotnet publish -c $Configuration -r win-arm64 --self-contained -o ..\\bin\\arm64\ndotnet publish -c $Configuration -r win-x64 --self-contained -p:PublishSingleFile=true -p:PublishTrimmed=true -o ..\\bin\\temp\nCopy-Item ..\\bin\\temp\\CertificateInstaller.exe ..\\bin\\arm64\\CertificateInstaller.x64.exe\nRemove-Item ..\\bin\\temp -Recurse\nSet-Location ..\n\n.\\lib\\Paraffin.exe -regExExclude \"JexusManager\\.exe\" -norootdirectory -dirref CONTAINER -dir .\\bin\\x64 -GroupName Files64 .\\Setup\\Files64.wxs\n.\\lib\\Paraffin.exe -regExExclude \"JexusManager\\.exe\" -norootdirectory -dirref CONTAINER -dir .\\bin\\x86 -GroupName Files86 .\\Setup\\Files86.wxs\n.\\lib\\Paraffin.exe -regExExclude \"JexusManager\\.exe\" -norootdirectory -dirref CONTAINER -dir .\\bin\\arm64 -GroupName FilesARM64 .\\Setup\\FilesARM64.wxs\n\nWrite-Host \"Compilation finished.\"\n"
  },
  {
    "path": "run.installar.bat",
    "content": "msiexec /i \"JexusManager_x64.msi\" /L*V \"jexusmanager.log\""
  },
  {
    "path": "sha1.ps1",
    "content": "$files = Get-ChildItem .\\* -Include ('*.msi') -File\nWrite-Host \"SHA1 code for the downloads are:\"\n$files | ForEach-Object {\n    $hash = Get-FileHash -Path $_.FullName -Algorithm SHA1\n    Write-Host $_.Name - $hash.Hash\n}\n"
  },
  {
    "path": "sign.installers.ps1",
    "content": "if ($env:CI -eq \"true\") {\n    exit 0\n}\n\n# Function to check if a binary is ARM64\nfunction Test-IsArm64Binary {\n    param (\n        [Parameter(Mandatory = $true)]\n        [string]$FilePath\n    )\n\n    try {\n        # Read the PE header to determine the architecture\n        $fileStream = [System.IO.File]::OpenRead($FilePath)\n        $binaryReader = New-Object System.IO.BinaryReader($fileStream)\n        \n        # Check DOS header magic number (MZ)\n        $dosHeader = $binaryReader.ReadUInt16()\n        if ($dosHeader -ne 0x5A4D) { # \"MZ\" signature\n            $binaryReader.Close()\n            $fileStream.Close()\n            return $false\n        }\n        \n        # Seek to e_lfanew field (offset 60)\n        $fileStream.Position = 60\n        $peHeaderOffset = $binaryReader.ReadUInt32()\n        \n        # Go to PE header and verify signature\n        $fileStream.Position = $peHeaderOffset\n        $peSignature = $binaryReader.ReadUInt32()\n        if ($peSignature -ne 0x00004550) { # \"PE\\0\\0\" signature\n            $binaryReader.Close()\n            $fileStream.Close()\n            return $false\n        }\n        \n        # Machine type is at offset PE header + 4\n        $fileStream.Position = $peHeaderOffset + 4\n        $machineType = $binaryReader.ReadUInt16()\n        \n        $binaryReader.Close()\n        $fileStream.Close()\n        \n        # 0x8664 = AMD64 (x64), 0x14c = i386, 0xAA64 = ARM64\n        return $machineType -eq 0xAA64\n    }\n    catch {\n        Write-Host \"Error examining binary: $_\"\n        return $false\n    }\n}\n\n$cert = Get-ChildItem -Path Cert:\\CurrentUser\\My -CodeSigningCert | Select-Object -First 1\nif ($null -eq $cert) {\n    Write-Host \"No code signing certificate found in MY store. Exit.\"\n    exit 1\n}\n\nWrite-Host \"Certificate found. Sign the MSI installers.\"\n\n# Determine if we're running on ARM64\n$isArm64System = [System.Environment]::Is64BitOperatingSystem -and [System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture -eq [System.Runtime.InteropServices.Architecture]::Arm64\n\n# Find signtool.exe candidates\n$signtoolCandidates = Get-ChildItem -Path \"${env:ProgramFiles(x86)}\\Windows Kits\\10\\bin\" -Recurse -Filter \"signtool.exe\"\nif ($signtoolCandidates.Count -eq 0) {\n    Write-Host \"No signtool.exe found. Exit.\"\n    exit 1\n}\n\n# Prioritize ARM64 candidates if on ARM64 system\nif ($isArm64System) {\n    Write-Host \"Running on ARM64 Windows, prioritizing ARM64 signtool...\"\n    $prioritizedCandidates = @()\n    $nonArm64Candidates = @()\n    \n    foreach ($candidate in $signtoolCandidates) {\n        if (Test-IsArm64Binary -FilePath $candidate.FullName) {\n            Write-Host \"Found ARM64 signtool at $($candidate.FullName)\"\n            $prioritizedCandidates += $candidate\n        } else {\n            $nonArm64Candidates += $candidate\n        }\n    }\n    \n    # Combine ARM64 candidates first, then non-ARM64 candidates\n    $signtoolCandidates = $prioritizedCandidates + $nonArm64Candidates\n}\n\nWrite-Host \"Found $($signtoolCandidates.Count) signtool candidates.\"\n$files = Get-ChildItem .\\* -Include ('*.msi') -File\nWrite-Host \"Found $($files.Count) MSI installers to sign.\"\n\n# Try each signtool until one works\n$signedSuccessfully = $false\nforeach ($signtoolCandidate in $signtoolCandidates) {\n    $signtool = $signtoolCandidate.FullName\n    Write-Host \"Trying signtool at: $signtool\"\n    \n    $allFilesSigned = $true\n    \n    foreach ($file in $files) {\n        Write-Host \"Signing $($file.FullName) with $signtool\"\n        & $signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /d \"Jexus Manager\" /a $file.FullName 2>&1 | Write-Debug\n        \n        if ($LASTEXITCODE -ne 0) {\n            Write-Host \"Failed to sign $($file.FullName) with $signtool (exit code $LASTEXITCODE)\"\n            $allFilesSigned = $false\n            break\n        }\n        \n        # Verify immediately after signing\n        & $signtool verify /pa /q $file.FullName 2>&1 | Write-Debug\n        if ($LASTEXITCODE -ne 0) {\n            Write-Host \"Failed to verify $($file.FullName) with $signtool (exit code $LASTEXITCODE)\"\n            $allFilesSigned = $false\n            break\n        }\n    }\n    \n    if ($allFilesSigned) {\n        $signedSuccessfully = $true\n        Write-Host \"Successfully signed all MSI installers with $signtool\"\n        break\n    }\n}\n\nif (-not $signedSuccessfully) {\n    Write-Host \"Failed to sign MSI installers with any available signtool. Exit.\"\n    exit 1\n}\n\nWrite-Host \"Signing and verification finished successfully.\"\n"
  },
  {
    "path": "sign.ps1",
    "content": "if ($env:CI -eq \"true\") {\n    exit 0\n}\n\n# Function to check if a binary is ARM64\nfunction Test-IsArm64Binary {\n    param (\n        [Parameter(Mandatory = $true)]\n        [string]$FilePath\n    )\n\n    try {\n        # Read the PE header to determine the architecture\n        $fileStream = [System.IO.File]::OpenRead($FilePath)\n        $binaryReader = New-Object System.IO.BinaryReader($fileStream)\n        \n        # Check DOS header magic number (MZ)\n        $dosHeader = $binaryReader.ReadUInt16()\n        if ($dosHeader -ne 0x5A4D) { # \"MZ\" signature\n            $binaryReader.Close()\n            $fileStream.Close()\n            return $false\n        }\n        \n        # Seek to e_lfanew field (offset 60)\n        $fileStream.Position = 60\n        $peHeaderOffset = $binaryReader.ReadUInt32()\n        \n        # Go to PE header and verify signature\n        $fileStream.Position = $peHeaderOffset\n        $peSignature = $binaryReader.ReadUInt32()\n        if ($peSignature -ne 0x00004550) { # \"PE\\0\\0\" signature\n            $binaryReader.Close()\n            $fileStream.Close()\n            return $false\n        }\n        \n        # Machine type is at offset PE header + 4\n        $fileStream.Position = $peHeaderOffset + 4\n        $machineType = $binaryReader.ReadUInt16()\n        \n        $binaryReader.Close()\n        $fileStream.Close()\n        \n        # 0x8664 = AMD64 (x64), 0x14c = i386, 0xAA64 = ARM64\n        return $machineType -eq 0xAA64\n    }\n    catch {\n        Write-Host \"Error examining binary: $_\"\n        return $false\n    }\n}\n\n$cert = Get-ChildItem -Path Cert:\\CurrentUser\\My -CodeSigningCert | Select-Object -First 1\nif ($null -eq $cert) {\n    Write-Host \"No code signing certificate found in MY store. Exit.\"\n    exit 1\n}\n\nWrite-Host \"Certificate found. Sign the assemblies.\"\n\n# Determine if we're running on ARM64\n$isArm64System = [System.Environment]::Is64BitOperatingSystem -and [System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture -eq [System.Runtime.InteropServices.Architecture]::Arm64\n\n# Find signtool.exe candidates\n$signtoolCandidates = Get-ChildItem -Path \"${env:ProgramFiles(x86)}\\Windows Kits\\10\\bin\" -Recurse -Filter \"signtool.exe\"\nif ($signtoolCandidates.Count -eq 0) {\n    Write-Host \"No signtool.exe found. Exit.\"\n    exit 1\n}\n\n# Prioritize ARM64 candidates if on ARM64 system\nif ($isArm64System) {\n    Write-Host \"Running on ARM64 Windows, prioritizing ARM64 signtool...\"\n    $prioritizedCandidates = @()\n    $nonArm64Candidates = @()\n    \n    foreach ($candidate in $signtoolCandidates) {\n        if (Test-IsArm64Binary -FilePath $candidate.FullName) {\n            Write-Host \"Found ARM64 signtool at $($candidate.FullName)\"\n            $prioritizedCandidates += $candidate\n        } else {\n            $nonArm64Candidates += $candidate\n        }\n    }\n    \n    # Combine ARM64 candidates first, then non-ARM64 candidates\n    $signtoolCandidates = $prioritizedCandidates + $nonArm64Candidates\n}\n\nWrite-Host \"Found $($signtoolCandidates.Count) signtool candidates.\"\n\n# Try signing with each signtool until one succeeds\n$signedSuccessfully = $false\nforeach ($signtoolCandidate in $signtoolCandidates) {\n    $signtool = $signtoolCandidate.FullName\n    Write-Host \"Trying signtool at: $signtool\"\n    \n    $allFilesSigned = $true\n    \n    foreach ($line in Get-Content .\\sign.txt) {\n        Write-Host \"Signing .\\bin\\$line with $signtool\"\n        & $signtool sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /a .\\bin\\$line | Write-Debug\n        \n        if ($LASTEXITCODE -ne 0) {\n            Write-Host \"Failed to sign .\\bin\\$line with $signtool (exit code $LASTEXITCODE)\"\n            $allFilesSigned = $false\n            break\n        }\n    }\n    \n    if ($allFilesSigned) {\n        $signedSuccessfully = $true\n        Write-Host \"Successfully signed all files with $signtool\"\n        \n        # Verify digital signature with the successful signtool\n        Write-Host \"Verify digital signature.\"\n        $files = Get-ChildItem .\\bin\\* -Include ('*.dll', \"*.exe\") -File\n        $allFilesVerified = $true\n        \n        $files | ForEach-Object {\n            & $signtool verify /pa /q $_.FullName 2>&1 | Write-Debug\n            if ($LASTEXITCODE -ne 0) {\n                Write-Host \"$($_.FullName) failed verification. Exit.\"\n                $allFilesVerified = $false\n                break\n            }\n        }\n        \n        if ($allFilesVerified) {\n            Write-Host \"Verification finished successfully.\"\n            exit 0\n        } else {\n            # If verification failed, try the next signtool\n            $signedSuccessfully = $false\n            continue\n        }\n    }\n}\n\nif (-not $signedSuccessfully) {\n    Write-Host \"Failed to sign files with any available signtool. Exit.\"\n    exit 1\n}\n"
  },
  {
    "path": "sign.txt",
    "content": "arm64\\CertificateInstaller.exe\narm64\\JexusManager.exe\nx64\\CertificateInstaller.exe\nx64\\JexusManager.exe\nx86\\CertificateInstaller.exe\nx86\\JexusManager.exe\n"
  }
]